diff --git a/.env b/.env index c726c6b..7806cc3 100644 --- a/.env +++ b/.env @@ -1,31 +1,31 @@ -# Database Configuration +#DATABASE Configuration DB_HOST=localhost DB_PORT=5432 DB_NAME=myapp DB_USER=postgres DB_PASSWORD=password -# Test Database Configuration +#TEST DATABASE Configuration TEST_DB_HOST=localhost -TEST_DB_PORT=5433 +TEST_DB_PORT=5432 TEST_DB_NAME=myapp_test TEST_DB_USER=postgres TEST_DB_PASSWORD=password -# Connection Pooling +#Connection Pooling DB_CONNECTION_TIMEOUT=20000 DB_ACQUIRE_TIMEOUT=20000 DB_MAX_CONNECTIONS=20 DB_MIN_CONNECTIONS=5 DB_IDLE_TIMEOUT=30000 -# Logging +#LOGGING DB_LOGGING=true LOG_LEVEL=info -# Environment +#Environment NODE_ENV=development -# Backup Configuration +#Backup Configuration BACKUP_PATH=./backups -BACKUP_RETENTION_DAYS=30 +BACKUP_RETENTION_DAYS=30 \ No newline at end of file diff --git a/.gitignore b/.gitignore index d7a9d2a..439b487 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ node_modules +*.log + # Environment files .env diff --git a/dist/main.js b/dist/main.js index 72dc5f4..069cddf 100644 --- a/dist/main.js +++ b/dist/main.js @@ -1,11701 +1,3 @@ -/******/ (() => { // webpackBootstrap -/******/ "use strict"; -/******/ var __webpack_modules__ = ({ - -/***/ "./src/achievements/entities/achievement.entity.ts": -/*!*********************************************************!*\ - !*** ./src/achievements/entities/achievement.entity.ts ***! - \*********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Achievement = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_achievement_entity_1 = __webpack_require__(/*! ./user-achievement.entity */ "./src/achievements/entities/user-achievement.entity.ts"); -const achievement_condition_types_1 = __webpack_require__(/*! ../types/achievement-condition.types */ "./src/achievements/types/achievement-condition.types.ts"); -let Achievement = class Achievement { -}; -exports.Achievement = Achievement; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], Achievement.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 100 }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Achievement.prototype, "name", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text' }), - __metadata("design:type", String) -], Achievement.prototype, "description", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50 }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Achievement.prototype, "category", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20, default: 'common' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Achievement.prototype, "rarity", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 10 }), - __metadata("design:type", Number) -], Achievement.prototype, "points", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 255, nullable: true }), - __metadata("design:type", String) -], Achievement.prototype, "iconUrl", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 255, nullable: true }), - __metadata("design:type", String) -], Achievement.prototype, "badgeUrl", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", Boolean) -], Achievement.prototype, "isActive", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - __metadata("design:type", Boolean) -], Achievement.prototype, "isSecret", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], Achievement.prototype, "unlockedCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 5, scale: 2, default: 0 }), - __metadata("design:type", Number) -], Achievement.prototype, "unlockRate", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb' }), - __metadata("design:type", typeof (_a = typeof achievement_condition_types_1.AchievementConditionGroup !== "undefined" && achievement_condition_types_1.AchievementConditionGroup) === "function" ? _a : Object) -], Achievement.prototype, "unlockConditions", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'simple-array', default: [] }), - __metadata("design:type", Array) -], Achievement.prototype, "prerequisites", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }), - __metadata("design:type", Object) -], Achievement.prototype, "progression", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }), - __metadata("design:type", Object) -], Achievement.prototype, "timeConstraints", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Achievement.prototype, "metadata", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], Achievement.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], Achievement.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.DeleteDateColumn)(), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], Achievement.prototype, "deletedAt", void 0); -__decorate([ - (0, typeorm_1.OneToMany)(() => user_achievement_entity_1.UserAchievement, (userAchievement) => userAchievement.achievement), - __metadata("design:type", Array) -], Achievement.prototype, "userAchievements", void 0); -exports.Achievement = Achievement = __decorate([ - (0, typeorm_1.Entity)('achievements'), - (0, typeorm_1.Index)(['category', 'isActive']), - (0, typeorm_1.Index)(['rarity']) -], Achievement); - - -/***/ }), - -/***/ "./src/achievements/entities/user-achievement.entity.ts": -/*!**************************************************************!*\ - !*** ./src/achievements/entities/user-achievement.entity.ts ***! - \**************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d, _e, _f; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.UserAchievement = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_entity_1 = __webpack_require__(/*! ../../users/entities/user.entity */ "./src/users/entities/user.entity.ts"); -const achievement_entity_1 = __webpack_require__(/*! ./achievement.entity */ "./src/achievements/entities/achievement.entity.ts"); -let UserAchievement = class UserAchievement { -}; -exports.UserAchievement = UserAchievement; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], UserAchievement.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], UserAchievement.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], UserAchievement.prototype, "achievementId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], UserAchievement.prototype, "progress", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 100 }), - __metadata("design:type", Number) -], UserAchievement.prototype, "progressTotal", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - (0, typeorm_1.Index)(), - __metadata("design:type", Boolean) -], UserAchievement.prototype, "isUnlocked", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - __metadata("design:type", Boolean) -], UserAchievement.prototype, "isNotified", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - __metadata("design:type", Boolean) -], UserAchievement.prototype, "isViewed", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], UserAchievement.prototype, "unlockedAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], UserAchievement.prototype, "notifiedAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], UserAchievement.prototype, "viewedAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserAchievement.prototype, "unlockContext", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserAchievement.prototype, "progressDetails", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], UserAchievement.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => user_entity_1.User, (user) => user.achievements, { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'userId' }), - __metadata("design:type", typeof (_e = typeof user_entity_1.User !== "undefined" && user_entity_1.User) === "function" ? _e : Object) -], UserAchievement.prototype, "user", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => achievement_entity_1.Achievement, (achievement) => achievement.userAchievements, { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'achievementId' }), - __metadata("design:type", typeof (_f = typeof achievement_entity_1.Achievement !== "undefined" && achievement_entity_1.Achievement) === "function" ? _f : Object) -], UserAchievement.prototype, "achievement", void 0); -exports.UserAchievement = UserAchievement = __decorate([ - (0, typeorm_1.Entity)('user_achievements'), - (0, typeorm_1.Index)(['userId', 'achievementId'], { unique: true }), - (0, typeorm_1.Index)(['userId', 'unlockedAt']), - (0, typeorm_1.Index)(['achievementId', 'unlockedAt']) -], UserAchievement); - - -/***/ }), - -/***/ "./src/achievements/types/achievement-condition.types.ts": -/*!***************************************************************!*\ - !*** ./src/achievements/types/achievement-condition.types.ts ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, exports) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); - - -/***/ }), - -/***/ "./src/app.controller.ts": -/*!*******************************!*\ - !*** ./src/app.controller.ts ***! - \*******************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.AppController = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const app_service_1 = __webpack_require__(/*! ./app.service */ "./src/app.service.ts"); -let AppController = class AppController { - constructor(appService) { - this.appService = appService; - } - getHello() { - return this.appService.getHello(); - } - getAppInfo() { - return this.appService.getAppInfo(); - } -}; -exports.AppController = AppController; -__decorate([ - (0, common_1.Get)(), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Object) -], AppController.prototype, "getHello", null); -__decorate([ - (0, common_1.Get)('info'), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], AppController.prototype, "getAppInfo", null); -exports.AppController = AppController = __decorate([ - (0, common_1.Controller)(), - __metadata("design:paramtypes", [typeof (_a = typeof app_service_1.AppService !== "undefined" && app_service_1.AppService) === "function" ? _a : Object]) -], AppController); - - -/***/ }), - -/***/ "./src/app.module.ts": -/*!***************************!*\ - !*** ./src/app.module.ts ***! - \***************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.AppModule = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const config_1 = __webpack_require__(/*! @nestjs/config */ "@nestjs/config"); -const throttler_1 = __webpack_require__(/*! @nestjs/throttler */ "@nestjs/throttler"); -const core_1 = __webpack_require__(/*! @nestjs/core */ "@nestjs/core"); -const nest_winston_1 = __webpack_require__(/*! nest-winston */ "nest-winston"); -const app_controller_1 = __webpack_require__(/*! ./app.controller */ "./src/app.controller.ts"); -const app_service_1 = __webpack_require__(/*! ./app.service */ "./src/app.service.ts"); -const env_validation_1 = __webpack_require__(/*! ./config/env.validation */ "./src/config/env.validation.ts"); -const app_config_1 = __importDefault(__webpack_require__(/*! ./config/app.config */ "./src/config/app.config.ts")); -const logger_config_1 = __webpack_require__(/*! ./config/logger.config */ "./src/config/logger.config.ts"); -const users_module_1 = __webpack_require__(/*! ./users/users.module */ "./src/users/users.module.ts"); -const puzzles_module_1 = __webpack_require__(/*! ./puzzles/puzzles.module */ "./src/puzzles/puzzles.module.ts"); -const health_module_1 = __webpack_require__(/*! ./health/health.module */ "./src/health/health.module.ts"); -const hints_module_1 = __webpack_require__(/*! ./hints/hints.module */ "./src/hints/hints.module.ts"); -const notifications_module_1 = __webpack_require__(/*! ./notifications/notifications.module */ "./src/notifications/notifications.module.ts"); -const difficulty_scaling_module_1 = __webpack_require__(/*! ./difficulty-scaling/difficulty-scaling.module */ "./src/difficulty-scaling/difficulty-scaling.module.ts"); -const tournaments_module_1 = __webpack_require__(/*! ./tournaments/tournaments.module */ "./src/tournaments/tournaments.module.ts"); -let AppModule = class AppModule { -}; -exports.AppModule = AppModule; -exports.AppModule = AppModule = __decorate([ - (0, common_1.Module)({ - imports: [ - config_1.ConfigModule.forRoot({ - isGlobal: true, - validate: env_validation_1.validateEnvironment, - load: [app_config_1.default], - envFilePath: ['.env.local', '.env'], - }), - nest_winston_1.WinstonModule.forRootAsync({ - useFactory: (configService) => (0, logger_config_1.createLoggerConfig)(configService), - inject: [config_1.ConfigService], - }), - throttler_1.ThrottlerModule.forRootAsync({ - useFactory: (configService) => [ - { - ttl: configService.get('app.throttle.ttl') || 60000, - limit: configService.get('app.throttle.limit') || 100, - }, - ], - inject: [config_1.ConfigService], - }), - users_module_1.UsersModule, - puzzles_module_1.PuzzlesModule, - notifications_module_1.NotificationsModule, - health_module_1.HealthModule, - hints_module_1.HintsModule, - difficulty_scaling_module_1.DifficultyScalingModule, - tournaments_module_1.TournamentsModule, - ], - controllers: [app_controller_1.AppController], - providers: [ - app_service_1.AppService, - { - provide: core_1.APP_GUARD, - useClass: throttler_1.ThrottlerGuard, - }, - ], - }) -], AppModule); - - -/***/ }), - -/***/ "./src/app.service.ts": -/*!****************************!*\ - !*** ./src/app.service.ts ***! - \****************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.AppService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const config_1 = __webpack_require__(/*! @nestjs/config */ "@nestjs/config"); -let AppService = class AppService { - constructor(configService) { - this.configService = configService; - } - getHello() { - return { - message: 'Welcome to LogiQuest Backend API! 🧩', - timestamp: new Date().toISOString(), - }; - } - getAppInfo() { - return { - name: 'LogiQuest Backend', - version: this.configService.get('npm_package_version', '1.0.0'), - environment: this.configService.get('NODE_ENV', 'development'), - apiPrefix: this.configService.get('API_PREFIX', 'api/v1'), - description: 'A puzzle-solving game backend built with NestJS', - }; - } -}; -exports.AppService = AppService; -exports.AppService = AppService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [typeof (_a = typeof config_1.ConfigService !== "undefined" && config_1.ConfigService) === "function" ? _a : Object]) -], AppService); - - -/***/ }), - -/***/ "./src/auth/guards/jwt-auth.guard.ts": -/*!*******************************************!*\ - !*** ./src/auth/guards/jwt-auth.guard.ts ***! - \*******************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.JwtAuthGuard = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const passport_1 = __webpack_require__(/*! @nestjs/passport */ "@nestjs/passport"); -let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)("jwt") { -}; -exports.JwtAuthGuard = JwtAuthGuard; -exports.JwtAuthGuard = JwtAuthGuard = __decorate([ - (0, common_1.Injectable)() -], JwtAuthGuard); - - -/***/ }), - -/***/ "./src/common/exceptions/http-exception.filter.ts": -/*!********************************************************!*\ - !*** ./src/common/exceptions/http-exception.filter.ts ***! - \********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.AllExceptionsFilter = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const Sentry = __importStar(__webpack_require__(/*! @sentry/node */ "@sentry/node")); -let AllExceptionsFilter = class AllExceptionsFilter { - catch(exception, host) { - const ctx = host.switchToHttp(); - const response = ctx.getResponse(); - const request = ctx.getRequest(); - let status = common_1.HttpStatus.INTERNAL_SERVER_ERROR; - let message = 'An unexpected error occurred.'; - let errorCode = 'INTERNAL_ERROR'; - let errors = undefined; - if (exception instanceof common_1.HttpException) { - const httpEx = exception; - status = httpEx.getStatus(); - const res = httpEx.getResponse(); - if (typeof res === 'string') { - message = res; - } - else if (typeof res === 'object' && res !== null) { - const r = res; - message = r.message || message; - errorCode = r.errorCode || errorCode; - errors = r.errors; - } - if (status >= 500) { - Sentry.captureException(exception); - } - } - else if (exception instanceof Error) { - message = exception.message; - Sentry.captureException(exception); - } - if (status === common_1.HttpStatus.NOT_FOUND) { - message = 'The requested resource was not found.'; - errorCode = 'NOT_FOUND'; - } - else if (status === common_1.HttpStatus.UNAUTHORIZED) { - message = 'You are not authorized to access this resource.'; - errorCode = 'UNAUTHORIZED'; - } - else if (status === common_1.HttpStatus.FORBIDDEN) { - message = 'You do not have permission to perform this action.'; - errorCode = 'FORBIDDEN'; - } - else if (status === common_1.HttpStatus.BAD_REQUEST) { - message = 'The request was invalid or cannot be served.'; - errorCode = 'BAD_REQUEST'; - } - response.status(status).json({ - statusCode: status, - timestamp: new Date().toISOString(), - path: request.url, - message, - errorCode, - errors, - }); - } -}; -exports.AllExceptionsFilter = AllExceptionsFilter; -exports.AllExceptionsFilter = AllExceptionsFilter = __decorate([ - (0, common_1.Catch)() -], AllExceptionsFilter); - - -/***/ }), - -/***/ "./src/common/interceptors/sanitize.interceptor.ts": -/*!*********************************************************!*\ - !*** ./src/common/interceptors/sanitize.interceptor.ts ***! - \*********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.SanitizeInterceptor = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const operators_1 = __webpack_require__(/*! rxjs/operators */ "rxjs/operators"); -const xss_1 = __importDefault(__webpack_require__(/*! xss */ "xss")); -function sanitizeObject(obj) { - if (typeof obj === 'string') { - return (0, xss_1.default)(obj); - } - else if (Array.isArray(obj)) { - return obj.map(sanitizeObject); - } - else if (typeof obj === 'object' && obj !== null) { - const sanitized = {}; - for (const key of Object.keys(obj)) { - sanitized[key] = sanitizeObject(obj[key]); - } - return sanitized; - } - return obj; -} -let SanitizeInterceptor = class SanitizeInterceptor { - intercept(context, next) { - const request = context.switchToHttp().getRequest(); - if (request.body) { - request.body = sanitizeObject(request.body); - } - if (request.query) { - request.query = sanitizeObject(request.query); - } - if (request.params) { - request.params = sanitizeObject(request.params); - } - return next.handle().pipe((0, operators_1.map)(data => sanitizeObject(data))); - } -}; -exports.SanitizeInterceptor = SanitizeInterceptor; -exports.SanitizeInterceptor = SanitizeInterceptor = __decorate([ - (0, common_1.Injectable)() -], SanitizeInterceptor); - - -/***/ }), - -/***/ "./src/common/validators/file-upload.validator.ts": -/*!********************************************************!*\ - !*** ./src/common/validators/file-upload.validator.ts ***! - \********************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.fileFilter = fileFilter; -exports.fileSizeLimit = fileSizeLimit; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const path_1 = __webpack_require__(/*! path */ "path"); -function fileFilter(allowedTypes, allowedMimeTypes) { - return (req, file, callback) => { - const ext = (0, path_1.extname)(file.originalname).toLowerCase(); - const mime = file.mimetype; - const extAllowed = allowedTypes.includes(ext); - const mimeAllowed = allowedMimeTypes ? allowedMimeTypes.includes(mime) : true; - if (!extAllowed || !mimeAllowed) { - return callback(new common_1.BadRequestException(`File type not allowed. Allowed extensions: ${allowedTypes.join(', ')}${allowedMimeTypes ? '; allowed MIME types: ' + allowedMimeTypes.join(', ') : ''}`), false); - } - callback(null, true); - }; -} -function fileSizeLimit(maxSize) { - return (req, file, callback) => { - if (file.size > maxSize) { - return callback(new common_1.BadRequestException(`File size exceeds ${maxSize} bytes.`), false); - } - callback(null, true); - }; -} - - -/***/ }), - -/***/ "./src/config/app.config.ts": -/*!**********************************!*\ - !*** ./src/config/app.config.ts ***! - \**********************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -const config_1 = __webpack_require__(/*! @nestjs/config */ "@nestjs/config"); -exports["default"] = (0, config_1.registerAs)('app', () => ({ - name: 'LogiQuest Backend', - version: process.env.npm_package_version || '1.0.0', - port: parseInt(process.env.PORT || '3000', 10), - apiPrefix: process.env.API_PREFIX || 'api/v1', - cors: { - origin: process.env.CORS_ORIGIN || 'http://localhost:3000', - credentials: true, - }, - throttle: { - ttl: parseInt(process.env.THROTTLE_TTL || '60000', 10), - limit: parseInt(process.env.THROTTLE_LIMIT || '100', 10), - }, -})); - - -/***/ }), - -/***/ "./src/config/database-service.ts": -/*!****************************************!*\ - !*** ./src/config/database-service.ts ***! - \****************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.DatabaseService = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const database_config_1 = __webpack_require__(/*! ../config/database.config */ "./src/config/database.config.ts"); -class DatabaseService { - constructor() { - this.dataSource = null; - this.healthCheckInterval = null; - this.lastHealthCheck = null; - } - static getInstance() { - if (!DatabaseService.instance) { - DatabaseService.instance = new DatabaseService(); - } - return DatabaseService.instance; - } - getDataSourceInstance() { - if (!this.dataSource) { - const configService = database_config_1.DatabaseConfigService.getInstance(); - this.dataSource = new typeorm_1.DataSource(configService.getTypeOrmConfig()); - } - return this.dataSource; - } - async initialize() { - try { - console.log('Initializing database connection...'); - const dataSource = this.getDataSourceInstance(); - if (!dataSource.isInitialized) { - await dataSource.initialize(); - } - console.log('Database connection initialized successfully'); - this.startHealthChecks(); - if (process.env.NODE_ENV === 'production') { - await this.runMigrations(); - } - } - catch (error) { - console.error('Failed to initialize database:', error); - throw error; - } - } - async runMigrations() { - try { - console.log('Running database migrations...'); - const dataSource = this.getDataSourceInstance(); - await dataSource.runMigrations(); - console.log('Migrations completed successfully'); - } - catch (error) { - console.error('Migration failed:', error); - throw error; - } - } - async revertMigration() { - try { - console.log('Reverting last migration...'); - const dataSource = this.getDataSourceInstance(); - await dataSource.undoLastMigration(); - console.log('Migration reverted successfully'); - } - catch (error) { - console.error('Migration revert failed:', error); - throw error; - } - } - async checkHealth() { - const startTime = Date.now(); - try { - const dataSource = this.getDataSourceInstance(); - const queryRunner = dataSource.createQueryRunner(); - await queryRunner.connect(); - const result = await queryRunner.query('SELECT 1 as test'); - const stats = await this.getConnectionStats(queryRunner); - await queryRunner.release(); - const latency = Date.now() - startTime; - this.lastHealthCheck = { - status: 'healthy', - connection: true, - latency, - activeConnections: stats.activeConnections, - timestamp: new Date(), - }; - return this.lastHealthCheck; - } - catch (error) { - this.lastHealthCheck = { - status: 'unhealthy', - connection: false, - latency: Date.now() - startTime, - activeConnections: 0, - timestamp: new Date(), - error: error instanceof Error ? error.message : 'Unknown error', - }; - return this.lastHealthCheck; - } - } - async getConnectionStats(queryRunner) { - const dataSource = this.getDataSourceInstance(); - const runner = queryRunner || dataSource.createQueryRunner(); - try { - if (!queryRunner) - await runner.connect(); - const result = await runner.query(` - SELECT - count(*) as total_connections, - count(*) FILTER (WHERE state = 'active') as active_connections, - count(*) FILTER (WHERE state = 'idle') as idle_connections, - count(*) FILTER (WHERE wait_event IS NOT NULL) as waiting_connections - FROM pg_stat_activity - WHERE datname = current_database() - `); - return { - totalConnections: parseInt(result[0].total_connections), - activeConnections: parseInt(result[0].active_connections), - idleConnections: parseInt(result[0].idle_connections), - waitingConnections: parseInt(result[0].waiting_connections), - }; - } - finally { - if (!queryRunner) - await runner.release(); - } - } - getLastHealthCheck() { - return this.lastHealthCheck; - } - startHealthChecks() { - this.healthCheckInterval = setInterval(async () => { - await this.checkHealth(); - }, 30000); - } - async retryConnection(maxRetries = 5, delay = 1000) { - for (let attempt = 1; attempt <= maxRetries; attempt++) { - try { - const dataSource = this.getDataSourceInstance(); - if (!dataSource.isInitialized) { - await dataSource.initialize(); - } - await this.checkHealth(); - if (this.lastHealthCheck?.status === 'healthy') { - console.log(`Connection retry successful on attempt ${attempt}`); - return; - } - } - catch (error) { - console.log(`Connection attempt ${attempt} failed:`, error); - if (attempt === maxRetries) { - throw new Error(`Failed to establish database connection after ${maxRetries} attempts`); - } - await new Promise((resolve) => setTimeout(resolve, delay * attempt)); - } - } - } - async close() { - if (this.healthCheckInterval) { - clearInterval(this.healthCheckInterval); - this.healthCheckInterval = null; - } - const dataSource = this.getDataSourceInstance(); - if (dataSource.isInitialized) { - await dataSource.destroy(); - console.log('Database connection closed'); - } - } - getDataSource() { - return this.getDataSourceInstance(); - } -} -exports.DatabaseService = DatabaseService; - - -/***/ }), - -/***/ "./src/config/database.config.ts": -/*!***************************************!*\ - !*** ./src/config/database.config.ts ***! - \***************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.DatabaseConfigService = void 0; -const dotenv_1 = __webpack_require__(/*! dotenv */ "dotenv"); -const path = __importStar(__webpack_require__(/*! path */ "path")); -(0, dotenv_1.config)(); -class DatabaseConfigService { - constructor() { } - static getInstance() { - if (!DatabaseConfigService.instance) { - DatabaseConfigService.instance = new DatabaseConfigService(); - } - return DatabaseConfigService.instance; - } - getConfig() { - const isTest = process.env.NODE_ENV === 'test'; - return { - host: isTest - ? process.env.TEST_DB_HOST || 'localhost' - : process.env.DB_HOST || 'localhost', - port: isTest - ? parseInt(process.env.TEST_DB_PORT || '5433') - : parseInt(process.env.DB_PORT || '5432'), - username: isTest - ? process.env.TEST_DB_USER || 'postgres' - : process.env.DB_USER || 'postgres', - password: isTest - ? process.env.TEST_DB_PASSWORD || 'password' - : process.env.DB_PASSWORD || 'password', - database: isTest - ? process.env.TEST_DB_NAME || 'myapp_test' - : process.env.DB_NAME || 'myapp', - maxConnections: parseInt(process.env.DB_MAX_CONNECTIONS || '20'), - minConnections: parseInt(process.env.DB_MIN_CONNECTIONS || '5'), - acquireTimeout: parseInt(process.env.DB_ACQUIRE_TIMEOUT || '20000'), - timeout: parseInt(process.env.DB_CONNECTION_TIMEOUT || '20000'), - idleTimeout: parseInt(process.env.DB_IDLE_TIMEOUT || '30000'), - logging: process.env.DB_LOGGING === 'true', - logLevel: process.env.LOG_LEVEL || 'info', - }; - } - getTypeOrmConfig() { - const config = this.getConfig(); - return { - type: 'postgres', - host: config.host, - port: config.port, - username: config.username, - password: config.password, - database: config.database, - entities: [path.join(__dirname, '../entities/*.{ts,js}')], - migrations: [path.join(__dirname, '../migrations/*.{ts,js}')], - subscribers: [path.join(__dirname, '../subscribers/*.{ts,js}')], - synchronize: false, - logging: config.logging - ? ['query', 'error', 'schema', 'warn', 'info', 'log'] - : false, - logger: 'advanced-console', - maxQueryExecutionTime: 5000, - poolSize: config.maxConnections, - extra: { - connectionTimeoutMillis: config.timeout, - idleTimeoutMillis: config.idleTimeout, - max: config.maxConnections, - min: config.minConnections, - acquireTimeoutMillis: config.acquireTimeout, - createTimeoutMillis: 8000, - destroyTimeoutMillis: 5000, - reapIntervalMillis: 1000, - createRetryIntervalMillis: 200, - }, - cache: { - type: 'database', - tableName: 'query_result_cache', - duration: 30000, - }, - }; - } -} -exports.DatabaseConfigService = DatabaseConfigService; - - -/***/ }), - -/***/ "./src/config/env.validation.ts": -/*!**************************************!*\ - !*** ./src/config/env.validation.ts ***! - \**************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.EnvironmentVariables = exports.Environment = void 0; -exports.validateEnvironment = validateEnvironment; -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -const class_transformer_1 = __webpack_require__(/*! class-transformer */ "class-transformer"); -var Environment; -(function (Environment) { - Environment["Development"] = "development"; - Environment["Production"] = "production"; - Environment["Test"] = "test"; -})(Environment || (exports.Environment = Environment = {})); -class EnvironmentVariables { - constructor() { - this.NODE_ENV = Environment.Development; - this.PORT = 3000; - this.API_PREFIX = 'api/v1'; - this.CORS_ORIGIN = 'http://localhost:3000'; - this.THROTTLE_TTL = 60000; - this.THROTTLE_LIMIT = 100; - this.LOG_LEVEL = 'info'; - this.JWT_EXPIRES_IN = '1d'; - } -} -exports.EnvironmentVariables = EnvironmentVariables; -__decorate([ - (0, class_validator_1.IsEnum)(Environment), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], EnvironmentVariables.prototype, "NODE_ENV", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.IsOptional)(), - (0, class_transformer_1.Transform)(({ value }) => parseInt(value, 10)), - __metadata("design:type", Number) -], EnvironmentVariables.prototype, "PORT", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], EnvironmentVariables.prototype, "API_PREFIX", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], EnvironmentVariables.prototype, "CORS_ORIGIN", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.IsOptional)(), - (0, class_transformer_1.Transform)(({ value }) => parseInt(value, 10)), - __metadata("design:type", Number) -], EnvironmentVariables.prototype, "THROTTLE_TTL", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.IsOptional)(), - (0, class_transformer_1.Transform)(({ value }) => parseInt(value, 10)), - __metadata("design:type", Number) -], EnvironmentVariables.prototype, "THROTTLE_LIMIT", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], EnvironmentVariables.prototype, "LOG_LEVEL", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], EnvironmentVariables.prototype, "DATABASE_URL", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], EnvironmentVariables.prototype, "JWT_SECRET", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], EnvironmentVariables.prototype, "JWT_EXPIRES_IN", void 0); -function validateEnvironment(config) { - const validatedConfig = (0, class_transformer_1.plainToInstance)(EnvironmentVariables, config, { - enableImplicitConversion: true, - }); - const errors = (0, class_validator_1.validateSync)(validatedConfig, { - skipMissingProperties: false, - }); - if (errors.length > 0) { - throw new Error(errors.toString()); - } - return validatedConfig; -} - - -/***/ }), - -/***/ "./src/config/logger.config.ts": -/*!*************************************!*\ - !*** ./src/config/logger.config.ts ***! - \*************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.createLoggerConfig = void 0; -const winston = __importStar(__webpack_require__(/*! winston */ "winston")); -const env_validation_1 = __webpack_require__(/*! ./env.validation */ "./src/config/env.validation.ts"); -const createLoggerConfig = (configService) => { - const env = configService.get('NODE_ENV', { infer: true }); - const logLevel = configService.get('LOG_LEVEL', { infer: true }); - const isDevelopment = env === env_validation_1.Environment.Development; - return { - level: logLevel, - format: winston.format.combine(winston.format.timestamp(), winston.format.errors({ stack: true }), winston.format.splat(), winston.format.json(), ...(isDevelopment - ? [ - winston.format.colorize(), - winston.format.simple(), - winston.format.printf(({ timestamp, level, message, context, stack }) => { - const contextStr = context ? `[${context}]` : ''; - const stackStr = stack ? `\n${stack}` : ''; - return `${timestamp} [${level}] ${contextStr} ${message}${stackStr}`; - }), - ] - : [])), - transports: [ - new winston.transports.Console({ - silent: env === env_validation_1.Environment.Test, - }), - ...(env === env_validation_1.Environment.Production - ? [ - new winston.transports.File({ - filename: 'logs/error.log', - level: 'error', - }), - new winston.transports.File({ - filename: 'logs/combined.log', - }), - ] - : []), - ], - }; -}; -exports.createLoggerConfig = createLoggerConfig; - - -/***/ }), - -/***/ "./src/difficulty-scaling/difficulty-scaling.module.ts": -/*!*************************************************************!*\ - !*** ./src/difficulty-scaling/difficulty-scaling.module.ts ***! - \*************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.DifficultyScalingModule = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const difficulty_scaling_service_1 = __webpack_require__(/*! ./difficulty-scaling.service */ "./src/difficulty-scaling/difficulty-scaling.service.ts"); -const player_skill_service_1 = __webpack_require__(/*! ./player-skill.service */ "./src/difficulty-scaling/player-skill.service.ts"); -const puzzle_difficulty_service_1 = __webpack_require__(/*! ./puzzle-difficulty.service */ "./src/difficulty-scaling/puzzle-difficulty.service.ts"); -let DifficultyScalingModule = class DifficultyScalingModule { -}; -exports.DifficultyScalingModule = DifficultyScalingModule; -exports.DifficultyScalingModule = DifficultyScalingModule = __decorate([ - (0, common_1.Module)({ - providers: [difficulty_scaling_service_1.DifficultyScalingService, player_skill_service_1.PlayerSkillService, puzzle_difficulty_service_1.PuzzleDifficultyService], - exports: [difficulty_scaling_service_1.DifficultyScalingService, player_skill_service_1.PlayerSkillService, puzzle_difficulty_service_1.PuzzleDifficultyService], - }) -], DifficultyScalingModule); - - -/***/ }), - -/***/ "./src/difficulty-scaling/difficulty-scaling.service.ts": -/*!**************************************************************!*\ - !*** ./src/difficulty-scaling/difficulty-scaling.service.ts ***! - \**************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.DifficultyScalingService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const player_skill_service_1 = __webpack_require__(/*! ./player-skill.service */ "./src/difficulty-scaling/player-skill.service.ts"); -const puzzle_difficulty_service_1 = __webpack_require__(/*! ./puzzle-difficulty.service */ "./src/difficulty-scaling/puzzle-difficulty.service.ts"); -let DifficultyScalingService = class DifficultyScalingService { - constructor(playerSkillService, puzzleDifficultyService) { - this.playerSkillService = playerSkillService; - this.puzzleDifficultyService = puzzleDifficultyService; - } - async getRecommendedDifficulty(playerId) { - const skill = await this.playerSkillService.getPlayerSkill(playerId); - return Math.min(Math.max(skill + 0.5, 1), 5); - } - async getRecommendedDifficultyRange(playerId) { - const recommended = await this.getRecommendedDifficulty(playerId); - return { - min: Math.max(1, recommended - 0.5), - max: Math.min(5, recommended + 0.5), - }; - } -}; -exports.DifficultyScalingService = DifficultyScalingService; -exports.DifficultyScalingService = DifficultyScalingService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [typeof (_a = typeof player_skill_service_1.PlayerSkillService !== "undefined" && player_skill_service_1.PlayerSkillService) === "function" ? _a : Object, typeof (_b = typeof puzzle_difficulty_service_1.PuzzleDifficultyService !== "undefined" && puzzle_difficulty_service_1.PuzzleDifficultyService) === "function" ? _b : Object]) -], DifficultyScalingService); - - -/***/ }), - -/***/ "./src/difficulty-scaling/player-skill-algorithm.ts": -/*!**********************************************************!*\ - !*** ./src/difficulty-scaling/player-skill-algorithm.ts ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, exports) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.calculatePlayerSkill = calculatePlayerSkill; -function calculatePlayerSkill(stats) { - if (!stats) - return 1; - const accuracy = Number(stats.overallAccuracy) || 0; - const completionRate = stats.totalPuzzlesCompleted / Math.max(1, stats.totalPuzzlesAttempted); - const avgTime = Number(stats.averageCompletionTime) || 0; - const normAccuracy = Math.min(accuracy / 100, 1); - const normCompletion = Math.min(completionRate, 1); - const normTime = 1 - Math.min(Math.max((avgTime - 60) / 540, 0), 1); - const skill = 1 + 4 * (0.5 * normAccuracy + 0.3 * normCompletion + 0.2 * normTime); - return Math.round(skill * 10) / 10; -} - - -/***/ }), - -/***/ "./src/difficulty-scaling/player-skill.service.ts": -/*!********************************************************!*\ - !*** ./src/difficulty-scaling/player-skill.service.ts ***! - \********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var _a; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PlayerSkillService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const typeorm_2 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_stats_entity_1 = __webpack_require__(/*! ../users/entities/user-stats.entity */ "./src/users/entities/user-stats.entity.ts"); -const player_skill_algorithm_1 = __webpack_require__(/*! ./player-skill-algorithm */ "./src/difficulty-scaling/player-skill-algorithm.ts"); -let PlayerSkillService = class PlayerSkillService { - constructor(userStatsRepository) { - this.userStatsRepository = userStatsRepository; - } - async getPlayerSkill(playerId) { - const stats = await this.userStatsRepository.findOne({ where: { userId: playerId } }); - return (0, player_skill_algorithm_1.calculatePlayerSkill)(stats); - } -}; -exports.PlayerSkillService = PlayerSkillService; -exports.PlayerSkillService = PlayerSkillService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(user_stats_entity_1.UserStats)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object]) -], PlayerSkillService); - - -/***/ }), - -/***/ "./src/difficulty-scaling/puzzle-difficulty-algorithm.ts": -/*!***************************************************************!*\ - !*** ./src/difficulty-scaling/puzzle-difficulty-algorithm.ts ***! - \***************************************************************/ -/***/ ((__unused_webpack_module, exports) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.calculatePuzzleDifficulty = calculatePuzzleDifficulty; -function calculatePuzzleDifficulty(puzzle, ratings) { - if (!puzzle) - return 1; - const completionRate = puzzle.analytics?.completionRate ?? (puzzle.completions / Math.max(1, puzzle.attempts)); - const avgTime = puzzle.averageCompletionTime || 0; - const votes = { easy: 0, medium: 0, hard: 0, expert: 0 }; - for (const r of ratings) { - if (r.difficultyVote && votes.hasOwnProperty(r.difficultyVote)) { - votes[r.difficultyVote]++; - } - } - const totalVotes = Object.values(votes).reduce((a, b) => a + b, 0) || 1; - const voteScore = (votes.easy * 1 + votes.medium * 2 + votes.hard * 3 + votes.expert * 4) / totalVotes; - const normCompletion = 1 - Math.min(completionRate, 1); - const normTime = Math.min(Math.max((avgTime - 60) / 540, 0), 1); - const difficulty = 1 + 4 * (0.4 * normCompletion + 0.3 * normTime + 0.3 * (voteScore / 4)); - return Math.round(difficulty * 10) / 10; -} - - -/***/ }), - -/***/ "./src/difficulty-scaling/puzzle-difficulty.service.ts": -/*!*************************************************************!*\ - !*** ./src/difficulty-scaling/puzzle-difficulty.service.ts ***! - \*************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var _a, _b; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PuzzleDifficultyService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const typeorm_2 = __webpack_require__(/*! typeorm */ "typeorm"); -const puzzle_entity_1 = __webpack_require__(/*! ../puzzles/entities/puzzle.entity */ "./src/puzzles/entities/puzzle.entity.ts"); -const puzzle_rating_entity_1 = __webpack_require__(/*! ../puzzles/entities/puzzle-rating.entity */ "./src/puzzles/entities/puzzle-rating.entity.ts"); -const puzzle_difficulty_algorithm_1 = __webpack_require__(/*! ./puzzle-difficulty-algorithm */ "./src/difficulty-scaling/puzzle-difficulty-algorithm.ts"); -let PuzzleDifficultyService = class PuzzleDifficultyService { - constructor(puzzleRepository, puzzleRatingRepository) { - this.puzzleRepository = puzzleRepository; - this.puzzleRatingRepository = puzzleRatingRepository; - } - async getPuzzleDifficulty(puzzleId) { - const puzzle = await this.puzzleRepository.findOne({ where: { id: puzzleId } }); - const ratings = await this.puzzleRatingRepository.find({ where: { puzzleId } }); - return (0, puzzle_difficulty_algorithm_1.calculatePuzzleDifficulty)(puzzle, ratings); - } -}; -exports.PuzzleDifficultyService = PuzzleDifficultyService; -exports.PuzzleDifficultyService = PuzzleDifficultyService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(puzzle_entity_1.Puzzle)), - __param(1, (0, typeorm_1.InjectRepository)(puzzle_rating_entity_1.PuzzleRating)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object]) -], PuzzleDifficultyService); - - -/***/ }), - -/***/ "./src/game-engine/entities/game-session.entity.ts": -/*!*********************************************************!*\ - !*** ./src/game-engine/entities/game-session.entity.ts ***! - \*********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d, _e, _f; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.GameSession = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_entity_1 = __webpack_require__(/*! ../../users/entities/user.entity */ "./src/users/entities/user.entity.ts"); -let GameSession = class GameSession { -}; -exports.GameSession = GameSession; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], GameSession.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 255 }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], GameSession.prototype, "sessionId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], GameSession.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - __metadata("design:type", String) -], GameSession.prototype, "playerId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", typeof (_a = typeof Record !== "undefined" && Record) === "function" ? _a : Object) -], GameSession.prototype, "sessionData", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20, default: 'web' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], GameSession.prototype, "platform", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 100, nullable: true }), - __metadata("design:type", String) -], GameSession.prototype, "deviceInfo", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 100, nullable: true }), - __metadata("design:type", String) -], GameSession.prototype, "browserInfo", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone' }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], GameSession.prototype, "startTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], GameSession.prototype, "endTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], GameSession.prototype, "duration", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], GameSession.prototype, "puzzlesAttempted", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], GameSession.prototype, "puzzlesCompleted", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], GameSession.prototype, "puzzlesFailed", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], GameSession.prototype, "puzzlesSkipped", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], GameSession.prototype, "totalScore", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], GameSession.prototype, "totalHintsUsed", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], GameSession.prototype, "achievementsUnlocked", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 5, scale: 2, default: 0 }), - __metadata("design:type", Number) -], GameSession.prototype, "averageAccuracy", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], GameSession.prototype, "longestStreak", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'simple-array', default: [] }), - __metadata("design:type", Array) -], GameSession.prototype, "puzzleIds", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'simple-array', default: [] }), - __metadata("design:type", Array) -], GameSession.prototype, "categoriesPlayed", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], GameSession.prototype, "analytics", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], GameSession.prototype, "sessionConfig", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], GameSession.prototype, "sessionState", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], GameSession.prototype, "contextData", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", Boolean) -], GameSession.prototype, "isActive", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20, default: 'ongoing' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], GameSession.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], GameSession.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_e = typeof Date !== "undefined" && Date) === "function" ? _e : Object) -], GameSession.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => user_entity_1.User, (user) => user.gameSessions, { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'userId' }), - __metadata("design:type", typeof (_f = typeof user_entity_1.User !== "undefined" && user_entity_1.User) === "function" ? _f : Object) -], GameSession.prototype, "user", void 0); -exports.GameSession = GameSession = __decorate([ - (0, typeorm_1.Entity)('game_sessions'), - (0, typeorm_1.Index)(['userId', 'startTime']), - (0, typeorm_1.Index)(['sessionId'], { unique: true }), - (0, typeorm_1.Index)(['userId', 'isActive']), - (0, typeorm_1.Index)(['endTime']) -], GameSession); - - -/***/ }), - -/***/ "./src/game-logic/entities/puzzle-progress.entity.ts": -/*!***********************************************************!*\ - !*** ./src/game-logic/entities/puzzle-progress.entity.ts ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d, _e; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PuzzleProgress = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -let PuzzleProgress = class PuzzleProgress { -}; -exports.PuzzleProgress = PuzzleProgress; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], PuzzleProgress.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], PuzzleProgress.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], PuzzleProgress.prototype, "puzzleId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20, default: 'not_started' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], PuzzleProgress.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], PuzzleProgress.prototype, "attempts", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], PuzzleProgress.prototype, "score", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], PuzzleProgress.prototype, "bestScore", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], PuzzleProgress.prototype, "hintsUsed", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], PuzzleProgress.prototype, "timeSpent", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', nullable: true }), - __metadata("design:type", Number) -], PuzzleProgress.prototype, "bestTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], PuzzleProgress.prototype, "startedAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], PuzzleProgress.prototype, "completedAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], PuzzleProgress.prototype, "lastAttemptAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 3, scale: 2, nullable: true }), - __metadata("design:type", Number) -], PuzzleProgress.prototype, "rating", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], PuzzleProgress.prototype, "progress", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], PuzzleProgress.prototype, "metrics", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], PuzzleProgress.prototype, "sessionData", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], PuzzleProgress.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_e = typeof Date !== "undefined" && Date) === "function" ? _e : Object) -], PuzzleProgress.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)('User', 'puzzleProgress', { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'userId' }), - __metadata("design:type", Object) -], PuzzleProgress.prototype, "user", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)('Puzzle', 'progress', { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'puzzleId' }), - __metadata("design:type", Object) -], PuzzleProgress.prototype, "puzzle", void 0); -exports.PuzzleProgress = PuzzleProgress = __decorate([ - (0, typeorm_1.Entity)('puzzle_progress'), - (0, typeorm_1.Index)(['userId', 'puzzleId'], { unique: true }), - (0, typeorm_1.Index)(['userId', 'status']), - (0, typeorm_1.Index)(['puzzleId', 'status']) -], PuzzleProgress); - - -/***/ }), - -/***/ "./src/health/health.controller.ts": -/*!*****************************************!*\ - !*** ./src/health/health.controller.ts ***! - \*****************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.HealthController = void 0; -const database_service_1 = __webpack_require__(/*! src/config/database-service */ "./src/config/database-service.ts"); -const performance_service_1 = __webpack_require__(/*! src/monitoring/performance.service */ "./src/monitoring/performance.service.ts"); -class HealthController { - constructor() { - this.databaseService = database_service_1.DatabaseService.getInstance(); - this.performanceService = new performance_service_1.PerformanceMonitoringService(this.databaseService.getDataSource()); - } - async checkHealth(req, res) { - try { - const health = await this.databaseService.checkHealth(); - const status = health.status === 'healthy' ? 200 : 503; - res.status(status).json({ - status: health.status, - timestamp: health.timestamp, - database: { - connection: health.connection, - latency: `${health.latency}ms`, - activeConnections: health.activeConnections, - }, - error: health.error, - }); - } - catch (error) { - res.status(503).json({ - status: 'unhealthy', - timestamp: new Date(), - error: error instanceof Error ? error.message : 'Unknown error', - }); - } - } - async getMetrics(req, res) { - try { - const metrics = await this.performanceService.getMetrics(); - res.json(metrics); - } - catch (error) { - res.status(500).json({ - error: error instanceof Error ? error.message : 'Failed to fetch metrics', - }); - } - } - async getConnectionStats(req, res) { - try { - const stats = await this.databaseService.getConnectionStats(); - res.json(stats); - } - catch (error) { - res.status(500).json({ - error: error instanceof Error - ? error.message - : 'Failed to fetch connection stats', - }); - } - } -} -exports.HealthController = HealthController; - - -/***/ }), - -/***/ "./src/health/health.module.ts": -/*!*************************************!*\ - !*** ./src/health/health.module.ts ***! - \*************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.HealthModule = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const terminus_1 = __webpack_require__(/*! @nestjs/terminus */ "@nestjs/terminus"); -const health_controller_1 = __webpack_require__(/*! ./health.controller */ "./src/health/health.controller.ts"); -let HealthModule = class HealthModule { -}; -exports.HealthModule = HealthModule; -exports.HealthModule = HealthModule = __decorate([ - (0, common_1.Module)({ - imports: [terminus_1.TerminusModule], - controllers: [health_controller_1.HealthController], - }) -], HealthModule); - - -/***/ }), - -/***/ "./src/hints/algorithms/engine.ts": -/*!****************************************!*\ - !*** ./src/hints/algorithms/engine.ts ***! - \****************************************/ -/***/ ((__unused_webpack_module, exports) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.generateAlgorithmicHints = generateAlgorithmicHints; -function generateAlgorithmicHints(ctx) { - const { puzzleType, difficulty, puzzleState, playerState } = ctx; - const progress = puzzleState?.progress ?? 0; - const errors = puzzleState?.errors ?? []; - const generic = { - order: 1, - type: 'general', - content: baseGuidance(puzzleType, difficulty), - }; - const contextual = { - order: 2, - type: 'contextual', - content: contextualGuidance(puzzleType, progress, errors), - }; - const strategic = { - order: 3, - type: 'strategic', - content: strategicGuidance(puzzleType, difficulty), - }; - const specific = { - order: 4, - type: 'specific', - content: specificNudge(puzzleType, puzzleState), - }; - specific.content = maskPotentialSpoilers(specific.content); - return [generic, contextual, strategic, specific]; -} -function baseGuidance(type, difficulty) { - switch (type) { - case 'multiple-choice': - return 'Eliminate clearly wrong options first to narrow your choices.'; - case 'fill-blank': - return 'Break the problem into smaller parts and verify each piece.'; - case 'drag-drop': - return 'Group related items before placing them to see patterns.'; - case 'code': - return 'Recreate the failing case in a minimal example and test iteratively.'; - case 'visual': - return 'Scan for symmetry and repeated shapes; start from the edges.'; - case 'logic-grid': - return 'Use process of elimination and mark contradictions immediately.'; - } -} -function contextualGuidance(type, progress, errors) { - if (progress < 0.33) { - return 'Focus on the initial constraints before exploring alternatives.'; - } - if (errors?.length) { - return `Review recent steps; watch out for: ${errors.slice(0, 2).join(', ')}.`; - } - return 'You are on track—double-check the last step for consistency.'; -} -function strategicGuidance(type, difficulty) { - if (difficulty === 'hard' || difficulty === 'expert') { - return 'Consider tackling sub-problems first and merging insights later.'; - } - return 'Try a simpler path first; verify assumptions before proceeding.'; -} -function specificNudge(type, puzzleState) { - switch (type) { - case 'multiple-choice': - return 'Re-check the option contradicting the main clue from earlier.'; - case 'logic-grid': - return 'Look at the intersection of the two most constrained categories.'; - case 'code': - return 'Inspect boundary conditions around the input size and null handling.'; - default: - return 'Revisit the step where your approach first diverged.'; - } -} -function maskPotentialSpoilers(text) { - return text.replace(/[A-Z]\)/g, 'option').replace(/\b\d+\b/g, 'n'); -} - - -/***/ }), - -/***/ "./src/hints/dto/create-hint.dto.ts": -/*!******************************************!*\ - !*** ./src/hints/dto/create-hint.dto.ts ***! - \******************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.HintUsageDto = exports.RequestHintDto = exports.CreateHintDto = exports.HintType = void 0; -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -var HintType; -(function (HintType) { - HintType["GENERAL"] = "general"; - HintType["CONTEXTUAL"] = "contextual"; - HintType["STRATEGIC"] = "strategic"; - HintType["SPECIFIC"] = "specific"; - HintType["TUTORIAL"] = "tutorial"; -})(HintType || (exports.HintType = HintType = {})); -class CreateHintDto { -} -exports.CreateHintDto = CreateHintDto; -__decorate([ - (0, class_validator_1.IsUUID)(), - __metadata("design:type", String) -], CreateHintDto.prototype, "puzzleId", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(1), - __metadata("design:type", Number) -], CreateHintDto.prototype, "order", void 0); -__decorate([ - (0, class_validator_1.IsEnum)(HintType), - __metadata("design:type", String) -], CreateHintDto.prototype, "type", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], CreateHintDto.prototype, "content", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], CreateHintDto.prototype, "contextualData", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(0), - __metadata("design:type", Number) -], CreateHintDto.prototype, "cost", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(0), - __metadata("design:type", Number) -], CreateHintDto.prototype, "pointsPenalty", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsNumber)(), - __metadata("design:type", Number) -], CreateHintDto.prototype, "unlockAfterSeconds", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsNumber)(), - __metadata("design:type", Number) -], CreateHintDto.prototype, "unlockAfterAttempts", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], CreateHintDto.prototype, "skillLevelTarget", void 0); -class RequestHintDto { -} -exports.RequestHintDto = RequestHintDto; -__decorate([ - (0, class_validator_1.IsUUID)(), - __metadata("design:type", String) -], RequestHintDto.prototype, "puzzleId", void 0); -__decorate([ - (0, class_validator_1.IsUUID)(), - __metadata("design:type", String) -], RequestHintDto.prototype, "userId", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(1), - __metadata("design:type", Number) -], RequestHintDto.prototype, "attemptNumber", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(0), - __metadata("design:type", Number) -], RequestHintDto.prototype, "timeSpent", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], RequestHintDto.prototype, "playerState", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], RequestHintDto.prototype, "puzzleState", void 0); -class HintUsageDto { -} -exports.HintUsageDto = HintUsageDto; -__decorate([ - (0, class_validator_1.IsUUID)(), - __metadata("design:type", String) -], HintUsageDto.prototype, "hintId", void 0); -__decorate([ - (0, class_validator_1.IsUUID)(), - __metadata("design:type", String) -], HintUsageDto.prototype, "puzzleId", void 0); -__decorate([ - (0, class_validator_1.IsUUID)(), - __metadata("design:type", String) -], HintUsageDto.prototype, "userId", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(1), - __metadata("design:type", Number) -], HintUsageDto.prototype, "attemptNumber", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(0), - __metadata("design:type", Number) -], HintUsageDto.prototype, "timeSpent", void 0); -__decorate([ - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], HintUsageDto.prototype, "ledToCompletion", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsNumber)(), - __metadata("design:type", Number) -], HintUsageDto.prototype, "timeToCompletion", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(5), - __metadata("design:type", Number) -], HintUsageDto.prototype, "satisfactionRating", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], HintUsageDto.prototype, "playerState", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], HintUsageDto.prototype, "puzzleState", void 0); - - -/***/ }), - -/***/ "./src/hints/entities/hint-template.entity.ts": -/*!****************************************************!*\ - !*** ./src/hints/entities/hint-template.entity.ts ***! - \****************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.HintTemplate = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -let HintTemplate = class HintTemplate { -}; -exports.HintTemplate = HintTemplate; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], HintTemplate.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50 }), - __metadata("design:type", String) -], HintTemplate.prototype, "name", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text' }), - __metadata("design:type", String) -], HintTemplate.prototype, "description", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50 }), - __metadata("design:type", String) -], HintTemplate.prototype, "puzzleType", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50 }), - __metadata("design:type", String) -], HintTemplate.prototype, "category", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20 }), - __metadata("design:type", String) -], HintTemplate.prototype, "difficulty", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int' }), - __metadata("design:type", Number) -], HintTemplate.prototype, "order", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50 }), - __metadata("design:type", String) -], HintTemplate.prototype, "type", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text' }), - __metadata("design:type", String) -], HintTemplate.prototype, "template", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], HintTemplate.prototype, "variables", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], HintTemplate.prototype, "conditions", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], HintTemplate.prototype, "cost", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], HintTemplate.prototype, "pointsPenalty", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: true }), - __metadata("design:type", Boolean) -], HintTemplate.prototype, "isActive", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], HintTemplate.prototype, "usageCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 5, scale: 2, default: 0 }), - __metadata("design:type", Number) -], HintTemplate.prototype, "effectiveness", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], HintTemplate.prototype, "analytics", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], HintTemplate.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)(), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], HintTemplate.prototype, "updatedAt", void 0); -exports.HintTemplate = HintTemplate = __decorate([ - (0, typeorm_1.Entity)('hint_templates'), - (0, typeorm_1.Index)(['puzzleType', 'difficulty']), - (0, typeorm_1.Index)(['category', 'isActive']) -], HintTemplate); - - -/***/ }), - -/***/ "./src/hints/entities/hint-usage.entity.ts": -/*!*************************************************!*\ - !*** ./src/hints/entities/hint-usage.entity.ts ***! - \*************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.HintUsage = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -let HintUsage = class HintUsage { -}; -exports.HintUsage = HintUsage; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], HintUsage.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], HintUsage.prototype, "hintId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], HintUsage.prototype, "puzzleId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], HintUsage.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int' }), - __metadata("design:type", Number) -], HintUsage.prototype, "attemptNumber", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int' }), - __metadata("design:type", Number) -], HintUsage.prototype, "timeSpent", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - __metadata("design:type", Boolean) -], HintUsage.prototype, "ledToCompletion", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', nullable: true }), - __metadata("design:type", Number) -], HintUsage.prototype, "timeToCompletion", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 1 }), - __metadata("design:type", Number) -], HintUsage.prototype, "satisfactionRating", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }), - __metadata("design:type", Object) -], HintUsage.prototype, "playerState", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }), - __metadata("design:type", Object) -], HintUsage.prototype, "puzzleState", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - __metadata("design:type", Boolean) -], HintUsage.prototype, "isAbuseAttempt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text', nullable: true }), - __metadata("design:type", String) -], HintUsage.prototype, "abuseReason", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }), - __metadata("design:type", Object) -], HintUsage.prototype, "metadata", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], HintUsage.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => 'Hint', { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'hintId' }), - __metadata("design:type", Object) -], HintUsage.prototype, "hint", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => 'Puzzle', { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'puzzleId' }), - __metadata("design:type", Object) -], HintUsage.prototype, "puzzle", void 0); -exports.HintUsage = HintUsage = __decorate([ - (0, typeorm_1.Entity)('hint_usages'), - (0, typeorm_1.Index)(['userId', 'puzzleId']), - (0, typeorm_1.Index)(['hintId', 'createdAt']) -], HintUsage); - - -/***/ }), - -/***/ "./src/hints/entities/hint.entity.ts": -/*!*******************************************!*\ - !*** ./src/hints/entities/hint.entity.ts ***! - \*******************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Hint = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -let Hint = class Hint { -}; -exports.Hint = Hint; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], Hint.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Hint.prototype, "puzzleId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int' }), - __metadata("design:type", Number) -], Hint.prototype, "order", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50 }), - __metadata("design:type", String) -], Hint.prototype, "type", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text' }), - __metadata("design:type", String) -], Hint.prototype, "content", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }), - __metadata("design:type", Object) -], Hint.prototype, "contextualData", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], Hint.prototype, "cost", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], Hint.prototype, "pointsPenalty", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', nullable: true }), - __metadata("design:type", Number) -], Hint.prototype, "unlockAfterSeconds", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', nullable: true }), - __metadata("design:type", Number) -], Hint.prototype, "unlockAfterAttempts", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Hint.prototype, "skillLevelTarget", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: true }), - __metadata("design:type", Boolean) -], Hint.prototype, "isActive", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 5, scale: 2, default: 0 }), - __metadata("design:type", Number) -], Hint.prototype, "effectiveness", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], Hint.prototype, "usageCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], Hint.prototype, "successCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Hint.prototype, "analytics", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], Hint.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)(), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], Hint.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => 'Puzzle', { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'puzzleId' }), - __metadata("design:type", Object) -], Hint.prototype, "puzzle", void 0); -__decorate([ - (0, typeorm_1.OneToMany)(() => HintUsage, (usage) => usage.hint), - __metadata("design:type", Array) -], Hint.prototype, "usages", void 0); -exports.Hint = Hint = __decorate([ - (0, typeorm_1.Entity)('hints'), - (0, typeorm_1.Index)(['puzzleId', 'order']), - (0, typeorm_1.Index)(['type', 'difficulty']) -], Hint); - - -/***/ }), - -/***/ "./src/hints/hints.controller.ts": -/*!***************************************!*\ - !*** ./src/hints/hints.controller.ts ***! - \***************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var _a, _b, _c, _d; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.HintsController = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const hints_service_1 = __webpack_require__(/*! ./hints.service */ "./src/hints/hints.service.ts"); -const create_hint_dto_1 = __webpack_require__(/*! ./dto/create-hint.dto */ "./src/hints/dto/create-hint.dto.ts"); -let HintsController = class HintsController { - constructor(hintsService) { - this.hintsService = hintsService; - } - async create(dto) { - return this.hintsService.createHint(dto); - } - async request(dto) { - return this.hintsService.requestHint(dto); - } - async recordUsage(dto) { - return this.hintsService.recordUsage(dto); - } - async listTemplates(puzzleType, difficulty, activeOnly) { - return this.hintsService.listTemplates({ - puzzleType, - difficulty, - activeOnly: activeOnly ? activeOnly === 'true' : undefined, - }); - } - async updateTemplate(id, body) { - return this.hintsService.updateTemplate(id, body); - } - async toggleTemplate(id, active) { - return this.hintsService.toggleTemplate(id, active === 'true'); - } - async seedTemplates() { - return this.hintsService.seedDefaultTemplates(); - } -}; -exports.HintsController = HintsController; -__decorate([ - (0, common_1.Post)('create'), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [typeof (_b = typeof create_hint_dto_1.CreateHintDto !== "undefined" && create_hint_dto_1.CreateHintDto) === "function" ? _b : Object]), - __metadata("design:returntype", Promise) -], HintsController.prototype, "create", null); -__decorate([ - (0, common_1.Post)('request'), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [typeof (_c = typeof create_hint_dto_1.RequestHintDto !== "undefined" && create_hint_dto_1.RequestHintDto) === "function" ? _c : Object]), - __metadata("design:returntype", Promise) -], HintsController.prototype, "request", null); -__decorate([ - (0, common_1.Post)('usage'), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [typeof (_d = typeof create_hint_dto_1.HintUsageDto !== "undefined" && create_hint_dto_1.HintUsageDto) === "function" ? _d : Object]), - __metadata("design:returntype", Promise) -], HintsController.prototype, "recordUsage", null); -__decorate([ - (0, common_1.Get)('templates'), - __param(0, (0, common_1.Query)('puzzleType')), - __param(1, (0, common_1.Query)('difficulty')), - __param(2, (0, common_1.Query)('activeOnly')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, String, String]), - __metadata("design:returntype", Promise) -], HintsController.prototype, "listTemplates", null); -__decorate([ - (0, common_1.Patch)('templates'), - __param(0, (0, common_1.Query)('id')), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, Object]), - __metadata("design:returntype", Promise) -], HintsController.prototype, "updateTemplate", null); -__decorate([ - (0, common_1.Post)('templates/toggle'), - __param(0, (0, common_1.Query)('id')), - __param(1, (0, common_1.Query)('active')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, String]), - __metadata("design:returntype", Promise) -], HintsController.prototype, "toggleTemplate", null); -__decorate([ - (0, common_1.Post)('templates/seed'), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Promise) -], HintsController.prototype, "seedTemplates", null); -exports.HintsController = HintsController = __decorate([ - (0, common_1.Controller)('hints'), - __metadata("design:paramtypes", [typeof (_a = typeof hints_service_1.HintsService !== "undefined" && hints_service_1.HintsService) === "function" ? _a : Object]) -], HintsController); - - -/***/ }), - -/***/ "./src/hints/hints.module.ts": -/*!***********************************!*\ - !*** ./src/hints/hints.module.ts ***! - \***********************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.HintsModule = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const hints_service_1 = __webpack_require__(/*! ./hints.service */ "./src/hints/hints.service.ts"); -const hints_controller_1 = __webpack_require__(/*! ./hints.controller */ "./src/hints/hints.controller.ts"); -const hint_entity_1 = __webpack_require__(/*! ./entities/hint.entity */ "./src/hints/entities/hint.entity.ts"); -const hint_usage_entity_1 = __webpack_require__(/*! ./entities/hint-usage.entity */ "./src/hints/entities/hint-usage.entity.ts"); -const hint_template_entity_1 = __webpack_require__(/*! ./entities/hint-template.entity */ "./src/hints/entities/hint-template.entity.ts"); -const puzzles_module_1 = __webpack_require__(/*! ../puzzles/puzzles.module */ "./src/puzzles/puzzles.module.ts"); -let HintsModule = class HintsModule { -}; -exports.HintsModule = HintsModule; -exports.HintsModule = HintsModule = __decorate([ - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forFeature([hint_entity_1.Hint, hint_usage_entity_1.HintUsage, hint_template_entity_1.HintTemplate]), - puzzles_module_1.PuzzlesModule, - ], - controllers: [hints_controller_1.HintsController], - providers: [hints_service_1.HintsService], - exports: [hints_service_1.HintsService], - }) -], HintsModule); - - -/***/ }), - -/***/ "./src/hints/hints.service.ts": -/*!************************************!*\ - !*** ./src/hints/hints.service.ts ***! - \************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var _a, _b, _c; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.HintsService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const typeorm_2 = __webpack_require__(/*! typeorm */ "typeorm"); -const hint_entity_1 = __webpack_require__(/*! ./entities/hint.entity */ "./src/hints/entities/hint.entity.ts"); -const hint_usage_entity_1 = __webpack_require__(/*! ./entities/hint-usage.entity */ "./src/hints/entities/hint-usage.entity.ts"); -const hint_template_entity_1 = __webpack_require__(/*! ./entities/hint-template.entity */ "./src/hints/entities/hint-template.entity.ts"); -const create_hint_dto_1 = __webpack_require__(/*! ./dto/create-hint.dto */ "./src/hints/dto/create-hint.dto.ts"); -const engine_1 = __webpack_require__(/*! ./algorithms/engine */ "./src/hints/algorithms/engine.ts"); -let HintsService = class HintsService { - constructor(hintRepo, usageRepo, templateRepo) { - this.hintRepo = hintRepo; - this.usageRepo = usageRepo; - this.templateRepo = templateRepo; - } - async createHint(dto) { - const hint = this.hintRepo.create({ - ...dto, - type: dto.type, - skillLevelTarget: dto.skillLevelTarget ?? {}, - contextualData: dto.contextualData, - }); - return this.hintRepo.save(hint); - } - async requestHint(dto) { - this.assertNotAbusing(dto); - await this.enforceHintLimits(dto.userId, dto.puzzleId); - const where = { - puzzleId: dto.puzzleId, - isActive: true, - }; - const candidates = await this.hintRepo.find({ - where, - order: { order: 'ASC' }, - }); - if (candidates.length === 0) { - const generated = await this.generateFromTemplates(dto); - if (!generated) { - throw new common_1.BadRequestException('No hints available for this puzzle'); - } - return generated; - } - const priorCount = await this.usageRepo.count({ - where: { userId: dto.userId, puzzleId: dto.puzzleId }, - }); - const progressive = candidates.find((h) => h.order > priorCount) ?? candidates[candidates.length - 1]; - const filtered = this.rankByContextAndPersonalization(candidates, dto, progressive.order); - const selected = filtered[0]; - await this.recordUsageInternal({ - hintId: selected.id, - puzzleId: dto.puzzleId, - userId: dto.userId, - attemptNumber: dto.attemptNumber, - timeSpent: dto.timeSpent, - ledToCompletion: false, - satisfactionRating: 3, - playerState: dto.playerState, - puzzleState: dto.puzzleState, - }); - void this.hintRepo.update(selected.id, { - usageCount: (selected.usageCount ?? 0) + 1, - analytics: { - ...selected.analytics, - }, - }); - return selected; - } - async recordUsage(dto) { - const usage = await this.recordUsageInternal(dto); - const hint = await this.hintRepo.findOne({ where: { id: dto.hintId } }); - if (hint) { - const successCount = (hint.successCount ?? 0) + (dto.ledToCompletion ? 1 : 0); - const usageCount = (hint.usageCount ?? 0) + 1; - const completionRate = successCount > 0 ? successCount / usageCount : 0; - const effectiveness = Math.min(1, Math.max(0, 0.6 * completionRate + 0.4 * (dto.satisfactionRating / 5))); - await this.hintRepo.update(hint.id, { - successCount, - usageCount, - effectiveness, - analytics: { - ...hint.analytics, - completionRate, - }, - }); - } - return usage; - } - async listTemplates(params) { - const where = {}; - if (params?.puzzleType) - where.puzzleType = params.puzzleType; - if (params?.difficulty) - where.difficulty = params.difficulty; - if (params?.activeOnly) - where.isActive = true; - return this.templateRepo.find({ where, order: { order: 'ASC' } }); - } - async createTemplate(input) { - const template = this.templateRepo.create({ - ...input, - isActive: input.isActive ?? true, - usageCount: 0, - effectiveness: 0, - analytics: {}, - }); - return this.templateRepo.save(template); - } - async updateTemplate(id, input) { - const existing = await this.templateRepo.findOne({ where: { id } }); - if (!existing) - throw new common_1.BadRequestException('Template not found'); - const updated = { ...existing, ...input, id: existing.id }; - await this.templateRepo.save(updated); - return updated; - } - async toggleTemplate(id, isActive) { - const existing = await this.templateRepo.findOne({ where: { id } }); - if (!existing) - throw new common_1.BadRequestException('Template not found'); - existing.isActive = isActive; - return this.templateRepo.save(existing); - } - async seedDefaultTemplates() { - const defaults = [ - { - name: 'MCQ General 1', - description: 'General guidance for MCQ without spoilers', - puzzleType: 'multiple-choice', - category: 'general', - difficulty: 'medium', - order: 1, - type: 'general', - template: 'Eliminate obviously wrong options and compare remaining choices.', - variables: {}, - conditions: {}, - cost: 0, - pointsPenalty: 0, - isActive: true, - }, - { - name: 'Logic Grid Context 2', - description: 'Contextual nudge based on constraints', - puzzleType: 'logic-grid', - category: 'contextual', - difficulty: 'medium', - order: 2, - type: 'contextual', - template: 'Look again at the constraint linking {{currentStep}}; resolve contradictions first.', - variables: { currentStep: { type: 'string', description: 'Current solving focus', required: false } }, - conditions: {}, - cost: 0, - pointsPenalty: 0, - isActive: true, - }, - { - name: 'Code Strategic 3', - description: 'Strategy hint for code puzzles', - puzzleType: 'code', - category: 'strategic', - difficulty: 'hard', - order: 3, - type: 'strategic', - template: 'Create a minimal repro for the failing case and add an assertion around {{progress}}.', - variables: { progress: { type: 'number', description: 'Progress percent', required: false } }, - conditions: { minSkillLevel: 2 }, - cost: 1, - pointsPenalty: 0, - isActive: true, - }, - { - name: 'Visual Specific 4', - description: 'Specific but non-spoiling nudge', - puzzleType: 'visual', - category: 'specific', - difficulty: 'easy', - order: 4, - type: 'specific', - template: 'Focus on the outer boundary; check repeated shapes before moving inward.', - variables: {}, - conditions: {}, - cost: 2, - pointsPenalty: 1, - isActive: true, - }, - ]; - let created = 0; - for (const d of defaults) { - const exists = await this.templateRepo.findOne({ where: { name: d.name } }); - if (!exists) { - const t = this.templateRepo.create(d); - await this.templateRepo.save(t); - created += 1; - } - } - return { created }; - } - async generateFromTemplates(dto) { - const puzzleType = dto.puzzleState?.type ?? 'logic-grid'; - const difficulty = dto.puzzleState?.difficulty ?? 'medium'; - const templates = await this.listTemplates({ puzzleType, difficulty, activeOnly: true }); - if (templates.length === 0) { - const alg = (0, engine_1.generateAlgorithmicHints)({ - puzzleType: dto.puzzleState?.type ?? 'logic-grid', - difficulty: dto.puzzleState?.difficulty ?? 'medium', - puzzleState: dto.puzzleState, - playerState: dto.playerState, - }); - if (!alg.length) - return null; - const chosen = alg[0]; - const hint = this.hintRepo.create({ - puzzleId: dto.puzzleId, - order: chosen.order, - type: chosen.type, - content: chosen.content, - cost: 0, - pointsPenalty: 0, - isActive: true, - skillLevelTarget: {}, - }); - return this.hintRepo.save(hint); - } - const priorCount = await this.usageRepo.count({ where: { userId: dto.userId, puzzleId: dto.puzzleId } }); - const selectedTemplate = templates.find((t) => t.order > priorCount) ?? templates[templates.length - 1]; - const content = this.fillTemplate(selectedTemplate.template, { - progress: dto.puzzleState?.progress ?? 0, - errors: dto.puzzleState?.errors ?? [], - currentStep: dto.puzzleState?.currentStep ?? 'start', - }); - const hint = this.hintRepo.create({ - puzzleId: dto.puzzleId, - order: selectedTemplate.order, - type: selectedTemplate.type, - content, - cost: selectedTemplate.cost ?? 0, - pointsPenalty: selectedTemplate.pointsPenalty ?? 0, - isActive: true, - skillLevelTarget: selectedTemplate.conditions - ? { minLevel: selectedTemplate.conditions.minSkillLevel, maxLevel: selectedTemplate.conditions.maxSkillLevel } - : {}, - }); - return this.hintRepo.save(hint); - } - fillTemplate(template, vars) { - return template.replace(/\{\{\s*(\w+)\s*\}\}/g, (_, key) => { - const value = vars[key]; - if (Array.isArray(value)) - return value.join(', '); - if (value === undefined || value === null) - return ''; - return String(value); - }); - } - rankByContextAndPersonalization(candidates, dto, minOrder) { - const skill = dto.playerState?.skillLevel ?? 0; - const prevHints = dto.playerState?.previousHintsUsed ?? 0; - const time = dto.timeSpent ?? 0; - const attempt = dto.attemptNumber ?? 1; - const orderWeight = 3; - const typeWeight = 2; - const personalizationWeight = 2; - const effectivenessWeight = 1; - const typeBaseScore = (t) => { - switch (t) { - case create_hint_dto_1.HintType.GENERAL: - return 3; - case create_hint_dto_1.HintType.CONTEXTUAL: - return 4; - case create_hint_dto_1.HintType.STRATEGIC: - return 4; - case create_hint_dto_1.HintType.SPECIFIC: - return 1; - case create_hint_dto_1.HintType.TUTORIAL: - return attempt <= 1 ? 5 : 2; - default: - return 2; - } - }; - const scored = candidates - .filter((h) => h.order >= minOrder) - .map((h) => { - const typeScore = typeBaseScore(h.type); - const inRange = this.isSkillInRange(skill, h.skillLevelTarget); - const personalizationScore = inRange ? 1 : 0; - const effScore = Number(h.effectiveness ?? 0); - const orderScore = 1 / (1 + Math.max(0, h.order - minOrder)); - const score = orderWeight * orderScore + - typeWeight * typeScore + - personalizationWeight * personalizationScore + - effectivenessWeight * effScore + - (time > 120 ? 0.5 : 0) + - (prevHints > 0 ? -0.2 * prevHints : 0); - return { h, score }; - }) - .sort((a, b) => b.score - a.score) - .map((x) => x.h); - return scored.length > 0 ? scored : candidates; - } - isSkillInRange(skill, target) { - if (!target) - return true; - const min = target.minLevel ?? -Infinity; - const max = target.maxLevel ?? Infinity; - return skill >= min && skill <= max; - } - async enforceHintLimits(userId, puzzleId) { - const now = new Date(); - const since = new Date(now.getTime() - 15 * 1000); - const count = await this.usageRepo.count({ where: { userId, puzzleId } }); - if (count >= 3) { - throw new common_1.ForbiddenException('Hint limit reached for this puzzle'); - } - const recent = await this.usageRepo.find({ - where: { - userId, - puzzleId, - createdAt: (0, typeorm_2.MoreThanOrEqual)(since), - }, - order: { createdAt: 'DESC' }, - take: 1, - }); - if (recent.length > 0) { - throw new common_1.ForbiddenException('Please wait before requesting another hint'); - } - } - assertNotAbusing(dto) { - const rapidAttempts = dto.attemptNumber > 5 && (dto.timeSpent ?? 0) < 5; - if (rapidAttempts) { - throw new common_1.ForbiddenException('Hint abuse detected'); - } - } - async recordUsageInternal(dto) { - const usage = this.usageRepo.create({ - ...dto, - isAbuseAttempt: false, - }); - return this.usageRepo.save(usage); - } -}; -exports.HintsService = HintsService; -exports.HintsService = HintsService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(hint_entity_1.Hint)), - __param(1, (0, typeorm_1.InjectRepository)(hint_usage_entity_1.HintUsage)), - __param(2, (0, typeorm_1.InjectRepository)(hint_template_entity_1.HintTemplate)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object]) -], HintsService); - - -/***/ }), - -/***/ "./src/main.ts": -/*!*********************!*\ - !*** ./src/main.ts ***! - \*********************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -const core_1 = __webpack_require__(/*! @nestjs/core */ "@nestjs/core"); -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const config_1 = __webpack_require__(/*! @nestjs/config */ "@nestjs/config"); -const nest_winston_1 = __webpack_require__(/*! nest-winston */ "nest-winston"); -const helmet_1 = __importDefault(__webpack_require__(/*! helmet */ "helmet")); -const app_module_1 = __webpack_require__(/*! ./app.module */ "./src/app.module.ts"); -const http_exception_filter_1 = __webpack_require__(/*! ./common/exceptions/http-exception.filter */ "./src/common/exceptions/http-exception.filter.ts"); -const sanitize_interceptor_1 = __webpack_require__(/*! ./common/interceptors/sanitize.interceptor */ "./src/common/interceptors/sanitize.interceptor.ts"); -const Sentry = __importStar(__webpack_require__(/*! @sentry/node */ "@sentry/node")); -const throttler_1 = __webpack_require__(/*! @nestjs/throttler */ "@nestjs/throttler"); -async function bootstrap() { - Sentry.init({ - dsn: process.env.SENTRY_DSN || '', - tracesSampleRate: 1.0, - environment: process.env.NODE_ENV || 'development', - }); - const app = await core_1.NestFactory.create(app_module_1.AppModule, { - bufferLogs: true, - }); - const logger = app.get(nest_winston_1.WINSTON_MODULE_NEST_PROVIDER); - app.useLogger(logger); - const configService = app.get(config_1.ConfigService); - const port = configService.get('app.port') || 3000; - const apiPrefix = configService.get('app.apiPrefix') || 'api/v1'; - const corsOrigin = configService.get('app.cors.origin') || 'http://localhost:3000'; - app.use((0, helmet_1.default)({ - contentSecurityPolicy: process.env.NODE_ENV === 'production', - crossOriginEmbedderPolicy: false, - })); - app.enableCors({ - origin: corsOrigin, - credentials: true, - methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], - allowedHeaders: ['Content-Type', 'Authorization', 'Accept'], - }); - app.useGlobalPipes(new common_1.ValidationPipe({ - whitelist: true, - forbidNonWhitelisted: true, - transform: true, - })); - app.useGlobalGuards(new throttler_1.ThrottlerGuard()); - app.useGlobalFilters(new http_exception_filter_1.AllExceptionsFilter()); - app.useGlobalInterceptors(new sanitize_interceptor_1.SanitizeInterceptor()); - app.setGlobalPrefix(apiPrefix); - await app.listen(port); - logger.log(`🚀 LogiQuest Backend is running on: http://localhost:${port}/${apiPrefix}`, 'Bootstrap'); -} -bootstrap().catch((error) => { - common_1.Logger.error('Failed to start the application', error); - process.exit(1); -}); - - -/***/ }), - -/***/ "./src/monitoring/performance.service.ts": -/*!***********************************************!*\ - !*** ./src/monitoring/performance.service.ts ***! - \***********************************************/ -/***/ ((__unused_webpack_module, exports) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PerformanceMonitoringService = void 0; -class PerformanceMonitoringService { - constructor(dataSource) { - this.dataSource = dataSource; - } - async getSlowQueries(limit = 10) { - const queryRunner = this.dataSource.createQueryRunner(); - try { - await queryRunner.connect(); - const result = await queryRunner.query(` - SELECT - query, - calls, - total_time, - mean_time, - min_time, - max_time, - rows - FROM pg_stat_statements - WHERE calls > 5 - ORDER BY mean_time DESC - LIMIT $1 - `, [limit]); - return result; - } - finally { - await queryRunner.release(); - } - } - async getCacheHitRatio() { - const queryRunner = this.dataSource.createQueryRunner(); - try { - await queryRunner.connect(); - const result = await queryRunner.query(` - SELECT - round( - sum(blks_hit) * 100.0 / sum(blks_hit + blks_read), 2 - ) as cache_hit_ratio - FROM pg_stat_database - WHERE datname = current_database() - `); - return result[0]?.cache_hit_ratio || 0; - } - finally { - await queryRunner.release(); - } - } - async getIndexUsage() { - const queryRunner = this.dataSource.createQueryRunner(); - try { - await queryRunner.connect(); - const result = await queryRunner.query(` - SELECT - round( - sum(idx_scan) * 100.0 / sum(seq_scan + idx_scan), 2 - ) as index_usage_ratio - FROM pg_stat_user_tables - WHERE seq_scan + idx_scan > 0 - `); - return result[0]?.index_usage_ratio || 0; - } - finally { - await queryRunner.release(); - } - } - async getDatabaseSize() { - const queryRunner = this.dataSource.createQueryRunner(); - try { - await queryRunner.connect(); - const result = await queryRunner.query(` - SELECT pg_size_pretty(pg_database_size(current_database())) as size - `); - return result[0]?.size || '0 bytes'; - } - finally { - await queryRunner.release(); - } - } - async getTablesSizes() { - const queryRunner = this.dataSource.createQueryRunner(); - try { - await queryRunner.connect(); - const result = await queryRunner.query(` - SELECT - schemaname||'.'||tablename as table, - pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size - FROM pg_tables - WHERE schemaname NOT IN ('information_schema', 'pg_catalog') - ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC - `); - return result; - } - finally { - await queryRunner.release(); - } - } - async getMetrics() { - const [slowQueries, cacheHitRatio, indexUsage, databaseSize, tablesSizes] = await Promise.all([ - this.getSlowQueries(), - this.getCacheHitRatio(), - this.getIndexUsage(), - this.getDatabaseSize(), - this.getTablesSizes(), - ]); - const connectionStats = await this.getConnectionStats(); - return { - connections: connectionStats, - performance: { - slowQueries, - cacheHitRatio, - indexUsage, - }, - storage: { - databaseSize, - tablesSizes, - }, - }; - } - async getConnectionStats() { - const queryRunner = this.dataSource.createQueryRunner(); - try { - await queryRunner.connect(); - const result = await queryRunner.query(` - SELECT - count(*) as total, - count(*) FILTER (WHERE state = 'active') as active, - count(*) FILTER (WHERE state = 'idle') as idle, - count(*) FILTER (WHERE wait_event IS NOT NULL) as waiting - FROM pg_stat_activity - WHERE datname = current_database() - `); - return { - total: parseInt(result[0].total), - active: parseInt(result[0].active), - idle: parseInt(result[0].idle), - waiting: parseInt(result[0].waiting), - }; - } - finally { - await queryRunner.release(); - } - } -} -exports.PerformanceMonitoringService = PerformanceMonitoringService; - - -/***/ }), - -/***/ "./src/notifications/devices.controller.ts": -/*!*************************************************!*\ - !*** ./src/notifications/devices.controller.ts ***! - \*************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var _a; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.DevicesController = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const typeorm_2 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const device_entity_1 = __webpack_require__(/*! ./entities/device.entity */ "./src/notifications/entities/device.entity.ts"); -let DevicesController = class DevicesController { - constructor(repo) { - this.repo = repo; - } - async register(userId, body) { - let device = await this.repo.findOne({ where: { token: body.token } }); - if (!device) { - device = this.repo.create({ userId, token: body.token, platform: body.platform, meta: body.meta ?? {} }); - } - else { - device.userId = userId; - device.platform = body.platform ?? device.platform; - device.meta = { ...(device.meta ?? {}), ...(body.meta ?? {}) }; - } - await this.repo.save(device); - return { ok: true, device }; - } - async deregister(userId, token) { - await this.repo.delete({ token, userId }); - return { ok: true }; - } - async list(userId) { - const devices = await this.repo.find({ where: { userId } }); - return { ok: true, devices }; - } -}; -exports.DevicesController = DevicesController; -__decorate([ - (0, common_1.Post)(':userId/register'), - __param(0, (0, common_1.Param)('userId')), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, Object]), - __metadata("design:returntype", Promise) -], DevicesController.prototype, "register", null); -__decorate([ - (0, common_1.Delete)(':userId/:token'), - __param(0, (0, common_1.Param)('userId')), - __param(1, (0, common_1.Param)('token')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, String]), - __metadata("design:returntype", Promise) -], DevicesController.prototype, "deregister", null); -__decorate([ - (0, common_1.Get)(':userId'), - __param(0, (0, common_1.Param)('userId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], DevicesController.prototype, "list", null); -exports.DevicesController = DevicesController = __decorate([ - (0, common_1.Controller)('devices'), - __param(0, (0, typeorm_2.InjectRepository)(device_entity_1.Device)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_1.Repository !== "undefined" && typeorm_1.Repository) === "function" ? _a : Object]) -], DevicesController); - - -/***/ }), - -/***/ "./src/notifications/dto/create-notification.dto.ts": -/*!**********************************************************!*\ - !*** ./src/notifications/dto/create-notification.dto.ts ***! - \**********************************************************/ -/***/ ((__unused_webpack_module, exports) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.CreateNotificationDto = void 0; -class CreateNotificationDto { -} -exports.CreateNotificationDto = CreateNotificationDto; - - -/***/ }), - -/***/ "./src/notifications/dto/feedback.dto.ts": -/*!***********************************************!*\ - !*** ./src/notifications/dto/feedback.dto.ts ***! - \***********************************************/ -/***/ ((__unused_webpack_module, exports) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.NotificationFeedbackDto = void 0; -class NotificationFeedbackDto { -} -exports.NotificationFeedbackDto = NotificationFeedbackDto; - - -/***/ }), - -/***/ "./src/notifications/dto/preference.dto.ts": -/*!*************************************************!*\ - !*** ./src/notifications/dto/preference.dto.ts ***! - \*************************************************/ -/***/ ((__unused_webpack_module, exports) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.NotificationPreferenceDto = void 0; -class NotificationPreferenceDto { -} -exports.NotificationPreferenceDto = NotificationPreferenceDto; - - -/***/ }), - -/***/ "./src/notifications/email.service.ts": -/*!********************************************!*\ - !*** ./src/notifications/email.service.ts ***! - \********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var EmailService_1; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.EmailService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const nodemailer = __importStar(__webpack_require__(/*! nodemailer */ "nodemailer")); -let EmailService = EmailService_1 = class EmailService { - constructor(config) { - this.config = config; - this.logger = new common_1.Logger(EmailService_1.name); - const host = this.config.get('EMAIL_HOST') || 'localhost'; - const port = Number(this.config.get('EMAIL_PORT') || 1025); - const user = this.config.get('EMAIL_USER') || ''; - const pass = this.config.get('EMAIL_PASS') || ''; - this.transporter = nodemailer.createTransport({ host, port, auth: user ? { user, pass } : undefined }); - } - async sendEmail(to, subject, text, html) { - const from = this.config.get('EMAIL_FROM') || 'no-reply@example.com'; - const info = await this.transporter.sendMail({ from, to, subject, text, html }); - this.logger.log(`Email sent to ${to}: ${info.messageId}`); - return info; - } -}; -exports.EmailService = EmailService; -exports.EmailService = EmailService = EmailService_1 = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [Object]) -], EmailService); - - -/***/ }), - -/***/ "./src/notifications/entities/device.entity.ts": -/*!*****************************************************!*\ - !*** ./src/notifications/entities/device.entity.ts ***! - \*****************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Device = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -let Device = class Device { -}; -exports.Device = Device; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], Device.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Device.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 255 }), - __metadata("design:type", String) -], Device.prototype, "token", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50, nullable: true }), - __metadata("design:type", String) -], Device.prototype, "platform", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Device.prototype, "meta", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], Device.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)(), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], Device.prototype, "updatedAt", void 0); -exports.Device = Device = __decorate([ - (0, typeorm_1.Entity)('devices') -], Device); - - -/***/ }), - -/***/ "./src/notifications/entities/notification-delivery.entity.ts": -/*!********************************************************************!*\ - !*** ./src/notifications/entities/notification-delivery.entity.ts ***! - \********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.NotificationDelivery = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -let NotificationDelivery = class NotificationDelivery { -}; -exports.NotificationDelivery = NotificationDelivery; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], NotificationDelivery.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], NotificationDelivery.prototype, "notificationId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50 }), - __metadata("design:type", String) -], NotificationDelivery.prototype, "channel", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50 }), - __metadata("design:type", String) -], NotificationDelivery.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text', nullable: true }), - __metadata("design:type", String) -], NotificationDelivery.prototype, "details", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], NotificationDelivery.prototype, "createdAt", void 0); -exports.NotificationDelivery = NotificationDelivery = __decorate([ - (0, typeorm_1.Entity)('notification_deliveries') -], NotificationDelivery); - - -/***/ }), - -/***/ "./src/notifications/entities/notification.entity.ts": -/*!***********************************************************!*\ - !*** ./src/notifications/entities/notification.entity.ts ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Notification = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -let Notification = class Notification { -}; -exports.Notification = Notification; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], Notification.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Notification.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50 }), - __metadata("design:type", String) -], Notification.prototype, "type", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 255 }), - __metadata("design:type", String) -], Notification.prototype, "title", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text', nullable: true }), - __metadata("design:type", String) -], Notification.prototype, "body", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Notification.prototype, "meta", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50, nullable: true }), - __metadata("design:type", String) -], Notification.prototype, "variantId", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], Notification.prototype, "createdAt", void 0); -exports.Notification = Notification = __decorate([ - (0, typeorm_1.Entity)('notifications') -], Notification); - - -/***/ }), - -/***/ "./src/notifications/notification.service.ts": -/*!***************************************************!*\ - !*** ./src/notifications/notification.service.ts ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var NotificationService_1; -var _a, _b, _c, _d; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.NotificationService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const typeorm_2 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const notification_entity_1 = __webpack_require__(/*! ./entities/notification.entity */ "./src/notifications/entities/notification.entity.ts"); -const notification_delivery_entity_1 = __webpack_require__(/*! ./entities/notification-delivery.entity */ "./src/notifications/entities/notification-delivery.entity.ts"); -const user_entity_1 = __webpack_require__(/*! ../users/entities/user.entity */ "./src/users/entities/user.entity.ts"); -const device_entity_1 = __webpack_require__(/*! ./entities/device.entity */ "./src/notifications/entities/device.entity.ts"); -let NotificationService = NotificationService_1 = class NotificationService { - constructor(notificationRepo, deliveryRepo, userRepo, deviceRepo, emailService, scheduler, pushService) { - this.notificationRepo = notificationRepo; - this.deliveryRepo = deliveryRepo; - this.userRepo = userRepo; - this.deviceRepo = deviceRepo; - this.emailService = emailService; - this.scheduler = scheduler; - this.pushService = pushService; - this.logger = new common_1.Logger(NotificationService_1.name); - } - async notifyAchievementUnlocked(userId, achievement) { - this.logger.log(`User ${userId} unlocked achievement: ${achievement.name}`); - const notif = this.notificationRepo.create({ - userId, - type: 'achievement', - title: `Achievement unlocked: ${achievement.name}`, - body: achievement.description, - meta: { iconUrl: achievement.iconUrl, celebrationMessage: achievement.celebrationMessage }, - }); - await this.notificationRepo.save(notif); - const user = await this.userRepo.findOne({ where: { id: userId } }); - if (!user) - return false; - const prefs = user.preferences?.notifications ?? { email: false, push: false }; - if (prefs.email) { - try { - await this.emailService.sendEmail(user.email, `You unlocked ${achievement.name}`, achievement.description); - await this.recordDelivery(notif.id, 'email', 'sent'); - } - catch (err) { - this.logger.error('Email send failed', err); - await this.recordDelivery(notif.id, 'email', 'failed', String(err)); - } - } - if (prefs.push) { - const devices = await this.deviceRepo.find({ where: { userId } }); - if (devices?.length) { - for (const d of devices) { - const res = await this.pushService.sendToToken(d.token, { title: notif.title, body: notif.body }); - if (res?.success) { - await this.recordDelivery(notif.id, 'push', 'sent', JSON.stringify(res)); - } - else if (res?.queued) { - await this.recordDelivery(notif.id, 'push', 'queued'); - } - else { - await this.recordDelivery(notif.id, 'push', 'failed', JSON.stringify(res)); - } - } - } - else { - await this.recordDelivery(notif.id, 'push', 'no_devices'); - } - } - await this.recordDelivery(notif.id, 'in_app', 'delivered'); - return true; - } - async createNotificationForUsers(opts) { - const targets = []; - if (opts.userIds?.length) - targets.push(...opts.userIds); - if (opts.segment) { - const users = await this.userRepo.find({ where: {} }); - for (const u of users) { - const val = u.metadata?.[opts.segment.key]; - if (val === opts.segment.value) - targets.push(u.id); - } - } - for (const userId of [...new Set(targets)]) { - const notif = this.notificationRepo.create({ - userId, - type: opts.type, - title: opts.title, - body: opts.body, - meta: opts.meta ?? {}, - variantId: opts.variantId, - }); - await this.notificationRepo.save(notif); - if (opts.sendAt && opts.sendAt > new Date()) { - const jobName = `notification-send-${notif.id}`; - const timeout = setTimeout(async () => { - await this.dispatchNotification(notif.id); - this.scheduler.deleteTimeout(jobName); - }, opts.sendAt.getTime() - Date.now()); - this.scheduler.addTimeout(jobName, timeout); - await this.recordDelivery(notif.id, 'scheduler', 'scheduled'); - } - else { - await this.dispatchNotification(notif.id); - } - } - } - async dispatchNotification(notificationId) { - const notif = await this.notificationRepo.findOne({ where: { id: notificationId } }); - if (!notif) - return; - const user = await this.userRepo.findOne({ where: { id: notif.userId } }); - if (!user) - return; - const prefs = user.preferences?.notifications ?? { email: false, push: false }; - await this.recordDelivery(notif.id, 'in_app', 'delivered'); - if (prefs.email) { - try { - await this.emailService.sendEmail(user.email, notif.title, notif.body ?? ''); - await this.recordDelivery(notif.id, 'email', 'sent'); - } - catch (err) { - this.logger.error('Email send failed', err); - await this.recordDelivery(notif.id, 'email', 'failed', String(err)); - } - } - if (prefs.push) { - const devices = await this.deviceRepo.find({ where: { userId: notif.userId } }); - if (devices?.length) { - for (const d of devices) { - const res = await this.pushService.sendToToken(d.token, { title: notif.title, body: notif.body }); - if (res?.success) { - await this.recordDelivery(notif.id, 'push', 'sent', JSON.stringify(res)); - } - else if (res?.queued) { - await this.recordDelivery(notif.id, 'push', 'queued'); - } - else { - await this.recordDelivery(notif.id, 'push', 'failed', JSON.stringify(res)); - } - } - } - else { - await this.recordDelivery(notif.id, 'push', 'no_devices'); - } - } - } - async recordDelivery(notificationId, channel, status, details) { - const d = this.deliveryRepo.create({ notificationId, channel, status, details }); - await this.deliveryRepo.save(d); - } - async setPreferences(userId, preferencesPatch) { - const user = await this.userRepo.findOne({ where: { id: userId } }); - if (!user) - return null; - user.preferences = { ...(user.preferences ?? {}), ...preferencesPatch }; - return this.userRepo.save(user); - } - async getPreferences(userId) { - const user = await this.userRepo.findOne({ where: { id: userId } }); - return user?.preferences ?? null; - } - async recordFeedback(notificationId, userId, feedback) { - const notif = await this.notificationRepo.findOne({ where: { id: notificationId } }); - if (!notif) - return null; - notif.meta = notif.meta ?? {}; - notif.meta.feedback = notif.meta.feedback ?? []; - notif.meta.feedback.push({ userId, action: feedback.action, comment: feedback.comment, at: new Date() }); - await this.notificationRepo.save(notif); - await this.recordDelivery(notificationId, 'feedback', 'received', feedback.action); - return notif; - } -}; -exports.NotificationService = NotificationService; -exports.NotificationService = NotificationService = NotificationService_1 = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_2.InjectRepository)(notification_entity_1.Notification)), - __param(1, (0, typeorm_2.InjectRepository)(notification_delivery_entity_1.NotificationDelivery)), - __param(2, (0, typeorm_2.InjectRepository)(user_entity_1.User)), - __param(3, (0, typeorm_2.InjectRepository)(device_entity_1.Device)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_1.Repository !== "undefined" && typeorm_1.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_1.Repository !== "undefined" && typeorm_1.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_1.Repository !== "undefined" && typeorm_1.Repository) === "function" ? _c : Object, typeof (_d = typeof typeorm_1.Repository !== "undefined" && typeorm_1.Repository) === "function" ? _d : Object, Object, Object, Object]) -], NotificationService); - - -/***/ }), - -/***/ "./src/notifications/notifications.controller.ts": -/*!*******************************************************!*\ - !*** ./src/notifications/notifications.controller.ts ***! - \*******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var _a, _b, _c, _d; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.NotificationsController = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const notification_service_1 = __webpack_require__(/*! ./notification.service */ "./src/notifications/notification.service.ts"); -const create_notification_dto_1 = __webpack_require__(/*! ./dto/create-notification.dto */ "./src/notifications/dto/create-notification.dto.ts"); -const preference_dto_1 = __webpack_require__(/*! ./dto/preference.dto */ "./src/notifications/dto/preference.dto.ts"); -const feedback_dto_1 = __webpack_require__(/*! ./dto/feedback.dto */ "./src/notifications/dto/feedback.dto.ts"); -let NotificationsController = class NotificationsController { - constructor(service) { - this.service = service; - } - async create(body) { - await this.service.createNotificationForUsers({ - userIds: body.userIds, - segment: body.segment, - type: body.type, - title: body.title, - body: body.body, - meta: body.meta, - sendAt: body.sendAt ? new Date(body.sendAt) : undefined, - variantId: body.variantId, - }); - return { ok: true }; - } - async setPreferences(userId, prefs) { - const updated = await this.service.setPreferences(userId, { notifications: prefs }); - return { ok: true, preferences: updated?.preferences }; - } - async getPreferences(userId) { - const prefs = await this.service.getPreferences(userId); - return { ok: true, preferences: prefs }; - } - async feedback(notificationId, body) { - const res = await this.service.recordFeedback(notificationId, body.userId ?? 'unknown', { action: body.action, comment: body.comment }); - return { ok: !!res }; - } -}; -exports.NotificationsController = NotificationsController; -__decorate([ - (0, common_1.Post)('create'), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [typeof (_b = typeof create_notification_dto_1.CreateNotificationDto !== "undefined" && create_notification_dto_1.CreateNotificationDto) === "function" ? _b : Object]), - __metadata("design:returntype", Promise) -], NotificationsController.prototype, "create", null); -__decorate([ - (0, common_1.Post)(':userId/preferences'), - __param(0, (0, common_1.Param)('userId')), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, typeof (_c = typeof preference_dto_1.NotificationPreferenceDto !== "undefined" && preference_dto_1.NotificationPreferenceDto) === "function" ? _c : Object]), - __metadata("design:returntype", Promise) -], NotificationsController.prototype, "setPreferences", null); -__decorate([ - (0, common_1.Get)(':userId/preferences'), - __param(0, (0, common_1.Param)('userId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], NotificationsController.prototype, "getPreferences", null); -__decorate([ - (0, common_1.Post)(':notificationId/feedback'), - __param(0, (0, common_1.Param)('notificationId')), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, typeof (_d = typeof feedback_dto_1.NotificationFeedbackDto !== "undefined" && feedback_dto_1.NotificationFeedbackDto) === "function" ? _d : Object]), - __metadata("design:returntype", Promise) -], NotificationsController.prototype, "feedback", null); -exports.NotificationsController = NotificationsController = __decorate([ - (0, common_1.Controller)('notifications'), - __metadata("design:paramtypes", [typeof (_a = typeof notification_service_1.NotificationService !== "undefined" && notification_service_1.NotificationService) === "function" ? _a : Object]) -], NotificationsController); - - -/***/ }), - -/***/ "./src/notifications/notifications.module.ts": -/*!***************************************************!*\ - !*** ./src/notifications/notifications.module.ts ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.NotificationsModule = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const notification_entity_1 = __webpack_require__(/*! ./entities/notification.entity */ "./src/notifications/entities/notification.entity.ts"); -const notification_delivery_entity_1 = __webpack_require__(/*! ./entities/notification-delivery.entity */ "./src/notifications/entities/notification-delivery.entity.ts"); -const device_entity_1 = __webpack_require__(/*! ./entities/device.entity */ "./src/notifications/entities/device.entity.ts"); -const notification_service_1 = __webpack_require__(/*! ./notification.service */ "./src/notifications/notification.service.ts"); -const email_service_1 = __webpack_require__(/*! ./email.service */ "./src/notifications/email.service.ts"); -const notifications_controller_1 = __webpack_require__(/*! ./notifications.controller */ "./src/notifications/notifications.controller.ts"); -const push_service_1 = __webpack_require__(/*! ./push.service */ "./src/notifications/push.service.ts"); -const devices_controller_1 = __webpack_require__(/*! ./devices.controller */ "./src/notifications/devices.controller.ts"); -const user_entity_1 = __webpack_require__(/*! ../users/entities/user.entity */ "./src/users/entities/user.entity.ts"); -const config_1 = __webpack_require__(/*! @nestjs/config */ "@nestjs/config"); -let NotificationsModule = class NotificationsModule { -}; -exports.NotificationsModule = NotificationsModule; -exports.NotificationsModule = NotificationsModule = __decorate([ - (0, common_1.Module)({ - imports: [typeorm_1.TypeOrmModule.forFeature([notification_entity_1.Notification, notification_delivery_entity_1.NotificationDelivery, device_entity_1.Device, user_entity_1.User]), config_1.ConfigModule], - providers: [notification_service_1.NotificationService, email_service_1.EmailService, push_service_1.PushService], - controllers: [notifications_controller_1.NotificationsController, devices_controller_1.DevicesController], - exports: [notification_service_1.NotificationService], - }) -], NotificationsModule); - - -/***/ }), - -/***/ "./src/notifications/push.service.ts": -/*!*******************************************!*\ - !*** ./src/notifications/push.service.ts ***! - \*******************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { - Object.defineProperty(o, "default", { enumerable: true, value: v }); -}) : function(o, v) { - o["default"] = v; -}); -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __importStar = (this && this.__importStar) || (function () { - var ownKeys = function(o) { - ownKeys = Object.getOwnPropertyNames || function (o) { - var ar = []; - for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; - return ar; - }; - return ownKeys(o); - }; - return function (mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); - __setModuleDefault(result, mod); - return result; - }; -})(); -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var PushService_1; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PushService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const admin = __importStar(__webpack_require__(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'firebase-admin'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()))); -let PushService = PushService_1 = class PushService { - constructor(config) { - this.config = config; - this.logger = new common_1.Logger(PushService_1.name); - this.enabled = false; - const key = this.config.get('FCM_SERVICE_ACCOUNT_JSON'); - if (key) { - try { - const serviceAccount = JSON.parse(key); - admin.initializeApp({ credential: admin.credential.cert(serviceAccount) }); - this.enabled = true; - this.logger.log('FCM initialized'); - } - catch (err) { - this.logger.error('Failed to initialize FCM', err); - } - } - else { - this.logger.log('FCM not configured; push disabled'); - } - } - async sendToToken(token, payload) { - if (!this.enabled) { - this.logger.debug('Push disabled - token would be:', token); - return { success: false, queued: true }; - } - try { - const message = { token, notification: payload.notification }; - const res = await admin.messaging().send(message); - return { success: true, result: res }; - } - catch (err) { - this.logger.error('FCM send failed', err); - return { success: false, error: err }; - } - } -}; -exports.PushService = PushService; -exports.PushService = PushService = PushService_1 = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [Object]) -], PushService); - - -/***/ }), - -/***/ "./src/puzzles/community-puzzles.module.ts": -/*!*************************************************!*\ - !*** ./src/puzzles/community-puzzles.module.ts ***! - \*************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.CommunityPuzzlesModule = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const schedule_1 = __webpack_require__(/*! @nestjs/schedule */ "@nestjs/schedule"); -const jwt_auth_guard_1 = __webpack_require__(/*! ../auth/guards/jwt-auth.guard */ "./src/auth/guards/jwt-auth.guard.ts"); -const user_puzzle_submission_entity_1 = __webpack_require__(/*! ./entities/user-puzzle-submission.entity */ "./src/puzzles/entities/user-puzzle-submission.entity.ts"); -const puzzle_comment_entity_1 = __webpack_require__(/*! ./entities/puzzle-comment.entity */ "./src/puzzles/entities/puzzle-comment.entity.ts"); -const user_puzzle_submission_service_1 = __webpack_require__(/*! ./services/user-puzzle-submission.service */ "./src/puzzles/services/user-puzzle-submission.service.ts"); -const puzzle_validation_service_1 = __webpack_require__(/*! ./services/puzzle-validation.service */ "./src/puzzles/services/puzzle-validation.service.ts"); -const puzzle_moderation_service_1 = __webpack_require__(/*! ./services/puzzle-moderation.service */ "./src/puzzles/services/puzzle-moderation.service.ts"); -const community_puzzles_service_1 = __webpack_require__(/*! ./services/community-puzzles.service */ "./src/puzzles/services/community-puzzles.service.ts"); -const featured_puzzles_service_1 = __webpack_require__(/*! ./services/featured-puzzles.service */ "./src/puzzles/services/featured-puzzles.service.ts"); -const creator_rewards_service_1 = __webpack_require__(/*! ./services/creator-rewards.service */ "./src/puzzles/services/creator-rewards.service.ts"); -const community_puzzles_controller_1 = __webpack_require__(/*! ./controllers/community-puzzles.controller */ "./src/puzzles/controllers/community-puzzles.controller.ts"); -let CommunityPuzzlesModule = class CommunityPuzzlesModule { -}; -exports.CommunityPuzzlesModule = CommunityPuzzlesModule; -exports.CommunityPuzzlesModule = CommunityPuzzlesModule = __decorate([ - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forFeature([user_puzzle_submission_entity_1.UserPuzzleSubmission, puzzle_comment_entity_1.PuzzleComment]), - schedule_1.ScheduleModule.forRoot(), - ], - controllers: [community_puzzles_controller_1.CommunityPuzzlesController], - providers: [ - user_puzzle_submission_service_1.UserPuzzleSubmissionService, - puzzle_validation_service_1.PuzzleValidationService, - puzzle_moderation_service_1.PuzzleModerationService, - community_puzzles_service_1.CommunityPuzzlesService, - featured_puzzles_service_1.FeaturedPuzzlesService, - creator_rewards_service_1.CreatorRewardsService, - jwt_auth_guard_1.JwtAuthGuard, - ], - exports: [ - user_puzzle_submission_service_1.UserPuzzleSubmissionService, - puzzle_validation_service_1.PuzzleValidationService, - puzzle_moderation_service_1.PuzzleModerationService, - community_puzzles_service_1.CommunityPuzzlesService, - featured_puzzles_service_1.FeaturedPuzzlesService, - creator_rewards_service_1.CreatorRewardsService, - ], - }) -], CommunityPuzzlesModule); - - -/***/ }), - -/***/ "./src/puzzles/controllers/community-puzzles.controller.ts": -/*!*****************************************************************!*\ - !*** ./src/puzzles/controllers/community-puzzles.controller.ts ***! - \*****************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.CommunityPuzzlesController = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const jwt_auth_guard_1 = __webpack_require__(/*! ../../auth/guards/jwt-auth.guard */ "./src/auth/guards/jwt-auth.guard.ts"); -const user_puzzle_submission_service_1 = __webpack_require__(/*! ../services/user-puzzle-submission.service */ "./src/puzzles/services/user-puzzle-submission.service.ts"); -const community_puzzles_service_1 = __webpack_require__(/*! ../services/community-puzzles.service */ "./src/puzzles/services/community-puzzles.service.ts"); -const featured_puzzles_service_1 = __webpack_require__(/*! ../services/featured-puzzles.service */ "./src/puzzles/services/featured-puzzles.service.ts"); -const creator_rewards_service_1 = __webpack_require__(/*! ../services/creator-rewards.service */ "./src/puzzles/services/creator-rewards.service.ts"); -const puzzle_moderation_service_1 = __webpack_require__(/*! ../services/puzzle-moderation.service */ "./src/puzzles/services/puzzle-moderation.service.ts"); -const user_puzzle_submission_dto_1 = __webpack_require__(/*! ../dto/user-puzzle-submission.dto */ "./src/puzzles/dto/user-puzzle-submission.dto.ts"); -const community_puzzles_dto_1 = __webpack_require__(/*! ../dto/community-puzzles.dto */ "./src/puzzles/dto/community-puzzles.dto.ts"); -let CommunityPuzzlesController = class CommunityPuzzlesController { - constructor(submissionService, communityService, featuredService, rewardsService, moderationService) { - this.submissionService = submissionService; - this.communityService = communityService; - this.featuredService = featuredService; - this.rewardsService = rewardsService; - this.moderationService = moderationService; - } - async createSubmission(req, createDto) { - const submission = await this.submissionService.createSubmission(req.user.id, createDto); - return { - statusCode: common_1.HttpStatus.CREATED, - message: 'Puzzle submission created successfully', - data: submission, - }; - } - async getUserSubmissions(req, status, page, limit) { - const result = await this.submissionService.getUserSubmissions(req.user.id, status, page, limit); - return { - statusCode: common_1.HttpStatus.OK, - message: 'User submissions retrieved successfully', - data: result, - }; - } - async getSubmission(req, id) { - const submission = await this.submissionService.getSubmissionById(id, req.user.id); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Submission retrieved successfully', - data: submission, - }; - } - async updateSubmission(req, id, updateDto) { - const submission = await this.submissionService.updateSubmission(id, req.user.id, updateDto); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Submission updated successfully', - data: submission, - }; - } - async deleteSubmission(req, id) { - await this.submissionService.deleteSubmission(id, req.user.id); - } - async submitForReview(req, id, reviewData) { - const submission = await this.submissionService.submitForReview(id, req.user.id, reviewData); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Puzzle submitted for review', - data: submission, - }; - } - async publishPuzzle(req, id) { - const submission = await this.submissionService.publishPuzzle(id, req.user.id); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Puzzle published successfully', - data: submission, - }; - } - async searchPuzzles(searchDto) { - const result = await this.submissionService.searchCommunityPuzzles(searchDto); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Puzzles retrieved successfully', - data: result, - }; - } - async getFeaturedPuzzles(limit) { - const puzzles = await this.featuredService.getFeaturedPuzzles(limit); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Featured puzzles retrieved successfully', - data: puzzles, - }; - } - async getTrendingPuzzles(limit) { - const puzzles = await this.submissionService.getTrendingPuzzles(limit); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Trending puzzles retrieved successfully', - data: puzzles, - }; - } - async getRecommendedPuzzles(req, limit) { - const puzzles = await this.submissionService.getRecommendedPuzzles(req.user.id, limit); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Recommended puzzles retrieved successfully', - data: puzzles, - }; - } - async getPuzzleByShareableLink(shareableLink) { - const puzzle = await this.submissionService.getSubmissionByShareableLink(shareableLink); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Puzzle retrieved successfully', - data: puzzle, - }; - } - async ratePuzzle(req, id, ratingDto) { - const rating = await this.communityService.ratePuzzle(id, req.user.id, ratingDto); - return { - statusCode: common_1.HttpStatus.CREATED, - message: 'Puzzle rated successfully', - data: rating, - }; - } - async getPuzzleRatings(id, page, limit) { - const result = await this.communityService.getPuzzleRatings(id, page, limit); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Puzzle ratings retrieved successfully', - data: result, - }; - } - async getUserRating(req, id) { - const rating = await this.communityService.getUserRating(id, req.user.id); - return { - statusCode: common_1.HttpStatus.OK, - message: 'User rating retrieved successfully', - data: rating, - }; - } - async createComment(req, id, commentDto) { - const comment = await this.communityService.createComment(id, req.user.id, commentDto); - return { - statusCode: common_1.HttpStatus.CREATED, - message: 'Comment created successfully', - data: comment, - }; - } - async getPuzzleComments(id, page, limit) { - const result = await this.communityService.getPuzzleComments(id, page, limit); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Puzzle comments retrieved successfully', - data: result, - }; - } - async updateComment(req, id, updateDto) { - const comment = await this.communityService.updateComment(id, req.user.id, updateDto); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Comment updated successfully', - data: comment, - }; - } - async deleteComment(req, id) { - await this.communityService.deleteComment(id, req.user.id); - } - async voteOnComment(req, id, voteDto) { - const comment = await this.communityService.voteOnComment(id, req.user.id, voteDto); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Vote recorded successfully', - data: comment, - }; - } - async sharePuzzle(req, id, shareDto) { - const result = await this.communityService.sharePuzzle(id, req.user.id, shareDto); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Puzzle shared successfully', - data: result, - }; - } - async getShareStats(id) { - const stats = await this.communityService.getShareStats(id); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Share statistics retrieved successfully', - data: stats, - }; - } - async reportPuzzle(req, id, reportDto) { - await this.communityService.reportPuzzle(id, req.user.id, reportDto.reason, reportDto.category); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Puzzle reported successfully', - }; - } - async reportComment(req, id, reportData) { - await this.communityService.reportComment(id, req.user.id, reportData.reason); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Comment reported successfully', - }; - } - async getCreatorStats(req) { - const stats = await this.submissionService.getCreatorStats(req.user.id); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Creator statistics retrieved successfully', - data: stats, - }; - } - async getLeaderboard(limit, timeframe) { - const leaderboard = await this.rewardsService.getLeaderboard(limit, timeframe); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Leaderboard retrieved successfully', - data: leaderboard, - }; - } - async getTopCreators(limit) { - const creators = await this.communityService.getTopCreators(limit); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Top creators retrieved successfully', - data: creators, - }; - } - async getMyRewards(req) { - const stats = await this.rewardsService.getCreatorStats(req.user.id); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Creator rewards retrieved successfully', - data: stats, - }; - } - async trackPlay(req, id) { - await this.submissionService.incrementPlayCount(id); - await this.rewardsService.onPuzzlePlayed(id, req.user.id); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Play tracked successfully', - }; - } - async getModerationQueue(status, page, limit) { - const result = await this.moderationService.getModerationQueue(status, page, limit); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Moderation queue retrieved successfully', - data: result, - }; - } - async moderatePuzzle(req, id, decisionDto) { - const submission = await this.moderationService.moderatePuzzle(id, req.user.id, decisionDto); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Puzzle moderated successfully', - data: submission, - }; - } - async featurePuzzle(req, id) { - const puzzle = await this.featuredService.manuallyFeaturePuzzle(id, req.user.id); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Puzzle featured successfully', - data: puzzle, - }; - } - async unfeaturePuzzle(req, id) { - const puzzle = await this.featuredService.unfeaturePuzzle(id, req.user.id); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Puzzle unfeatured successfully', - data: puzzle, - }; - } - async getFeaturedStats() { - const stats = await this.featuredService.getFeaturedPuzzleStats(); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Featured puzzle statistics retrieved successfully', - data: stats, - }; - } - async getModerationStats(timeframe) { - const stats = await this.moderationService.getModerationStats(timeframe); - return { - statusCode: common_1.HttpStatus.OK, - message: 'Moderation statistics retrieved successfully', - data: stats, - }; - } -}; -exports.CommunityPuzzlesController = CommunityPuzzlesController; -__decorate([ - (0, common_1.Post)('submissions'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, typeof (_f = typeof user_puzzle_submission_dto_1.CreatePuzzleSubmissionDto !== "undefined" && user_puzzle_submission_dto_1.CreatePuzzleSubmissionDto) === "function" ? _f : Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "createSubmission", null); -__decorate([ - (0, common_1.Get)('submissions'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Query)('status')), - __param(2, (0, common_1.Query)('page')), - __param(3, (0, common_1.Query)('limit')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String, Number, Number]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getUserSubmissions", null); -__decorate([ - (0, common_1.Get)('submissions/:id'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getSubmission", null); -__decorate([ - (0, common_1.Put)('submissions/:id'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __param(2, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String, typeof (_g = typeof user_puzzle_submission_dto_1.UpdatePuzzleSubmissionDto !== "undefined" && user_puzzle_submission_dto_1.UpdatePuzzleSubmissionDto) === "function" ? _g : Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "updateSubmission", null); -__decorate([ - (0, common_1.Delete)('submissions/:id'), - (0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "deleteSubmission", null); -__decorate([ - (0, common_1.Post)('submissions/:id/submit-review'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __param(2, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String, typeof (_h = typeof user_puzzle_submission_dto_1.SubmitForReviewDto !== "undefined" && user_puzzle_submission_dto_1.SubmitForReviewDto) === "function" ? _h : Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "submitForReview", null); -__decorate([ - (0, common_1.Post)('submissions/:id/publish'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "publishPuzzle", null); -__decorate([ - (0, common_1.Get)('discover'), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [typeof (_j = typeof community_puzzles_dto_1.SearchPuzzlesDto !== "undefined" && community_puzzles_dto_1.SearchPuzzlesDto) === "function" ? _j : Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "searchPuzzles", null); -__decorate([ - (0, common_1.Get)('featured'), - __param(0, (0, common_1.Query)('limit')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Number]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getFeaturedPuzzles", null); -__decorate([ - (0, common_1.Get)('trending'), - __param(0, (0, common_1.Query)('limit')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Number]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getTrendingPuzzles", null); -__decorate([ - (0, common_1.Get)('recommended'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Query)('limit')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Number]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getRecommendedPuzzles", null); -__decorate([ - (0, common_1.Get)('shared/:shareableLink'), - __param(0, (0, common_1.Param)('shareableLink')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getPuzzleByShareableLink", null); -__decorate([ - (0, common_1.Post)(':id/rate'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __param(2, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String, typeof (_k = typeof community_puzzles_dto_1.CreatePuzzleRatingDto !== "undefined" && community_puzzles_dto_1.CreatePuzzleRatingDto) === "function" ? _k : Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "ratePuzzle", null); -__decorate([ - (0, common_1.Get)(':id/ratings'), - __param(0, (0, common_1.Param)('id')), - __param(1, (0, common_1.Query)('page')), - __param(2, (0, common_1.Query)('limit')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, Number, Number]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getPuzzleRatings", null); -__decorate([ - (0, common_1.Get)(':id/my-rating'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getUserRating", null); -__decorate([ - (0, common_1.Post)(':id/comments'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __param(2, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String, typeof (_l = typeof community_puzzles_dto_1.CreatePuzzleCommentDto !== "undefined" && community_puzzles_dto_1.CreatePuzzleCommentDto) === "function" ? _l : Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "createComment", null); -__decorate([ - (0, common_1.Get)(':id/comments'), - __param(0, (0, common_1.Param)('id')), - __param(1, (0, common_1.Query)('page')), - __param(2, (0, common_1.Query)('limit')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, Number, Number]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getPuzzleComments", null); -__decorate([ - (0, common_1.Put)('comments/:id'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __param(2, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String, Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "updateComment", null); -__decorate([ - (0, common_1.Delete)('comments/:id'), - (0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "deleteComment", null); -__decorate([ - (0, common_1.Post)('comments/:id/vote'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __param(2, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String, typeof (_m = typeof community_puzzles_dto_1.PuzzleCommentVoteDto !== "undefined" && community_puzzles_dto_1.PuzzleCommentVoteDto) === "function" ? _m : Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "voteOnComment", null); -__decorate([ - (0, common_1.Post)(':id/share'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __param(2, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String, typeof (_o = typeof community_puzzles_dto_1.SharePuzzleDto !== "undefined" && community_puzzles_dto_1.SharePuzzleDto) === "function" ? _o : Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "sharePuzzle", null); -__decorate([ - (0, common_1.Get)(':id/share-stats'), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getShareStats", null); -__decorate([ - (0, common_1.Post)(':id/report'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __param(2, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String, typeof (_p = typeof community_puzzles_dto_1.ReportPuzzleDto !== "undefined" && community_puzzles_dto_1.ReportPuzzleDto) === "function" ? _p : Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "reportPuzzle", null); -__decorate([ - (0, common_1.Post)('comments/:id/report'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __param(2, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String, Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "reportComment", null); -__decorate([ - (0, common_1.Get)('creator-stats'), - __param(0, (0, common_1.Request)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getCreatorStats", null); -__decorate([ - (0, common_1.Get)('leaderboard'), - __param(0, (0, common_1.Query)('limit')), - __param(1, (0, common_1.Query)('timeframe')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Number, String]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getLeaderboard", null); -__decorate([ - (0, common_1.Get)('top-creators'), - __param(0, (0, common_1.Query)('limit')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Number]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getTopCreators", null); -__decorate([ - (0, common_1.Get)('my-rewards'), - __param(0, (0, common_1.Request)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getMyRewards", null); -__decorate([ - (0, common_1.Post)(':id/play'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "trackPlay", null); -__decorate([ - (0, common_1.Get)('admin/moderation-queue'), - __param(0, (0, common_1.Query)('status')), - __param(1, (0, common_1.Query)('page')), - __param(2, (0, common_1.Query)('limit')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, Number, Number]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getModerationQueue", null); -__decorate([ - (0, common_1.Post)('admin/:id/moderate'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __param(2, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String, Object]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "moderatePuzzle", null); -__decorate([ - (0, common_1.Post)('admin/:id/feature'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "featurePuzzle", null); -__decorate([ - (0, common_1.Post)('admin/:id/unfeature'), - __param(0, (0, common_1.Request)()), - __param(1, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "unfeaturePuzzle", null); -__decorate([ - (0, common_1.Get)('admin/featured-stats'), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getFeaturedStats", null); -__decorate([ - (0, common_1.Get)('admin/moderation-stats'), - __param(0, (0, common_1.Query)('timeframe')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], CommunityPuzzlesController.prototype, "getModerationStats", null); -exports.CommunityPuzzlesController = CommunityPuzzlesController = __decorate([ - (0, common_1.Controller)('community-puzzles'), - (0, common_1.UseGuards)(jwt_auth_guard_1.JwtAuthGuard), - __metadata("design:paramtypes", [typeof (_a = typeof user_puzzle_submission_service_1.UserPuzzleSubmissionService !== "undefined" && user_puzzle_submission_service_1.UserPuzzleSubmissionService) === "function" ? _a : Object, typeof (_b = typeof community_puzzles_service_1.CommunityPuzzlesService !== "undefined" && community_puzzles_service_1.CommunityPuzzlesService) === "function" ? _b : Object, typeof (_c = typeof featured_puzzles_service_1.FeaturedPuzzlesService !== "undefined" && featured_puzzles_service_1.FeaturedPuzzlesService) === "function" ? _c : Object, typeof (_d = typeof creator_rewards_service_1.CreatorRewardsService !== "undefined" && creator_rewards_service_1.CreatorRewardsService) === "function" ? _d : Object, typeof (_e = typeof puzzle_moderation_service_1.PuzzleModerationService !== "undefined" && puzzle_moderation_service_1.PuzzleModerationService) === "function" ? _e : Object]) -], CommunityPuzzlesController); - - -/***/ }), - -/***/ "./src/puzzles/dto/bulk-operations.dto.ts": -/*!************************************************!*\ - !*** ./src/puzzles/dto/bulk-operations.dto.ts ***! - \************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.ImportPuzzleDto = exports.ExportPuzzleDto = exports.BulkUpdateDto = exports.BulkAction = void 0; -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -const class_transformer_1 = __webpack_require__(/*! class-transformer */ "class-transformer"); -var BulkAction; -(function (BulkAction) { - BulkAction["PUBLISH"] = "publish"; - BulkAction["UNPUBLISH"] = "unpublish"; - BulkAction["ARCHIVE"] = "archive"; - BulkAction["DELETE"] = "delete"; - BulkAction["UPDATE_CATEGORY"] = "update_category"; - BulkAction["ADD_TAGS"] = "add_tags"; - BulkAction["REMOVE_TAGS"] = "remove_tags"; -})(BulkAction || (exports.BulkAction = BulkAction = {})); -class BulkUpdateDto { -} -exports.BulkUpdateDto = BulkUpdateDto; -__decorate([ - (0, class_validator_1.IsEnum)(BulkAction), - __metadata("design:type", String) -], BulkUpdateDto.prototype, "action", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], BulkUpdateDto.prototype, "value", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], BulkUpdateDto.prototype, "reason", void 0); -class ExportPuzzleDto { - constructor() { - this.format = 'json'; - this.limit = 1000; - } -} -exports.ExportPuzzleDto = ExportPuzzleDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], ExportPuzzleDto.prototype, "format", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], ExportPuzzleDto.prototype, "category", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(1), - (0, class_transformer_1.Type)(() => Number), - __metadata("design:type", Number) -], ExportPuzzleDto.prototype, "limit", void 0); -class ImportPuzzleDto { - constructor() { - this.importMode = 'create'; - this.validateOnly = false; - } -} -exports.ImportPuzzleDto = ImportPuzzleDto; -__decorate([ - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], ImportPuzzleDto.prototype, "format", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], ImportPuzzleDto.prototype, "importMode", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Boolean) -], ImportPuzzleDto.prototype, "validateOnly", void 0); - - -/***/ }), - -/***/ "./src/puzzles/dto/community-puzzles.dto.ts": -/*!**************************************************!*\ - !*** ./src/puzzles/dto/community-puzzles.dto.ts ***! - \**************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.SharePuzzleDto = exports.SearchPuzzlesDto = exports.ReportPuzzleDto = exports.ReportPuzzleCommentDto = exports.PuzzleCommentVoteDto = exports.UpdatePuzzleCommentDto = exports.CreatePuzzleCommentDto = exports.RatingMetadataDto = exports.RatingBreakdownDto = exports.CreatePuzzleRatingDto = void 0; -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -const class_transformer_1 = __webpack_require__(/*! class-transformer */ "class-transformer"); -class CreatePuzzleRatingDto { -} -exports.CreatePuzzleRatingDto = CreatePuzzleRatingDto; -__decorate([ - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(5), - __metadata("design:type", Number) -], CreatePuzzleRatingDto.prototype, "rating", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - (0, class_validator_1.Length)(0, 1000), - __metadata("design:type", String) -], CreatePuzzleRatingDto.prototype, "review", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - (0, class_validator_1.ValidateNested)(), - (0, class_transformer_1.Type)(() => RatingBreakdownDto), - __metadata("design:type", RatingBreakdownDto) -], CreatePuzzleRatingDto.prototype, "ratingBreakdown", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - (0, class_validator_1.ValidateNested)(), - (0, class_transformer_1.Type)(() => RatingMetadataDto), - __metadata("design:type", RatingMetadataDto) -], CreatePuzzleRatingDto.prototype, "metadata", void 0); -class RatingBreakdownDto { -} -exports.RatingBreakdownDto = RatingBreakdownDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(5), - __metadata("design:type", Number) -], RatingBreakdownDto.prototype, "creativity", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(5), - __metadata("design:type", Number) -], RatingBreakdownDto.prototype, "clarity", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(5), - __metadata("design:type", Number) -], RatingBreakdownDto.prototype, "difficulty", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(5), - __metadata("design:type", Number) -], RatingBreakdownDto.prototype, "enjoyment", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(5), - __metadata("design:type", Number) -], RatingBreakdownDto.prototype, "educational", void 0); -class RatingMetadataDto { -} -exports.RatingMetadataDto = RatingMetadataDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(0), - __metadata("design:type", Number) -], RatingMetadataDto.prototype, "playTime", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(0), - __metadata("design:type", Number) -], RatingMetadataDto.prototype, "hintsUsed", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], RatingMetadataDto.prototype, "completed", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], RatingMetadataDto.prototype, "wouldRecommend", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], RatingMetadataDto.prototype, "reportReason", void 0); -class CreatePuzzleCommentDto { -} -exports.CreatePuzzleCommentDto = CreatePuzzleCommentDto; -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsNotEmpty)(), - (0, class_validator_1.Length)(1, 1000), - __metadata("design:type", String) -], CreatePuzzleCommentDto.prototype, "content", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], CreatePuzzleCommentDto.prototype, "parentId", void 0); -class UpdatePuzzleCommentDto { -} -exports.UpdatePuzzleCommentDto = UpdatePuzzleCommentDto; -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsNotEmpty)(), - (0, class_validator_1.Length)(1, 1000), - __metadata("design:type", String) -], UpdatePuzzleCommentDto.prototype, "content", void 0); -class PuzzleCommentVoteDto { -} -exports.PuzzleCommentVoteDto = PuzzleCommentVoteDto; -__decorate([ - (0, class_validator_1.IsEnum)(['upvote', 'downvote']), - __metadata("design:type", String) -], PuzzleCommentVoteDto.prototype, "voteType", void 0); -class ReportPuzzleCommentDto { -} -exports.ReportPuzzleCommentDto = ReportPuzzleCommentDto; -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsNotEmpty)(), - (0, class_validator_1.Length)(5, 500), - __metadata("design:type", String) -], ReportPuzzleCommentDto.prototype, "reason", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - (0, class_validator_1.Length)(0, 1000), - __metadata("design:type", String) -], ReportPuzzleCommentDto.prototype, "additionalDetails", void 0); -class ReportPuzzleDto { -} -exports.ReportPuzzleDto = ReportPuzzleDto; -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsNotEmpty)(), - (0, class_validator_1.Length)(5, 500), - __metadata("design:type", String) -], ReportPuzzleDto.prototype, "reason", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(['inappropriate', 'copyright', 'spam', 'low_quality', 'duplicate', 'other']), - __metadata("design:type", String) -], ReportPuzzleDto.prototype, "category", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - (0, class_validator_1.Length)(0, 1000), - __metadata("design:type", String) -], ReportPuzzleDto.prototype, "additionalDetails", void 0); -class SearchPuzzlesDto { - constructor() { - this.page = 1; - this.limit = 20; - } -} -exports.SearchPuzzlesDto = SearchPuzzlesDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - (0, class_validator_1.Length)(0, 100), - __metadata("design:type", String) -], SearchPuzzlesDto.prototype, "query", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], SearchPuzzlesDto.prototype, "categories", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsEnum)(['easy', 'medium', 'hard', 'expert'], { each: true }), - __metadata("design:type", Array) -], SearchPuzzlesDto.prototype, "difficulties", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], SearchPuzzlesDto.prototype, "tags", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(['newest', 'oldest', 'popular', 'highest_rated', 'most_played', 'trending']), - __metadata("design:type", String) -], SearchPuzzlesDto.prototype, "sortBy", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(['draft', 'submitted', 'under_review', 'approved', 'rejected', 'published', 'featured']), - __metadata("design:type", String) -], SearchPuzzlesDto.prototype, "status", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - __metadata("design:type", Number) -], SearchPuzzlesDto.prototype, "page", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(100), - __metadata("design:type", Number) -], SearchPuzzlesDto.prototype, "limit", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], SearchPuzzlesDto.prototype, "userId", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], SearchPuzzlesDto.prototype, "isPublic", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], SearchPuzzlesDto.prototype, "allowComments", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], SearchPuzzlesDto.prototype, "allowRatings", void 0); -class SharePuzzleDto { -} -exports.SharePuzzleDto = SharePuzzleDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(['link', 'embed', 'social']), - __metadata("design:type", String) -], SharePuzzleDto.prototype, "shareType", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(['twitter', 'facebook', 'reddit', 'discord', 'whatsapp']), - __metadata("design:type", String) -], SharePuzzleDto.prototype, "platform", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - (0, class_validator_1.Length)(0, 500), - __metadata("design:type", String) -], SharePuzzleDto.prototype, "customMessage", void 0); - - -/***/ }), - -/***/ "./src/puzzles/dto/create-puzzle.dto.ts": -/*!**********************************************!*\ - !*** ./src/puzzles/dto/create-puzzle.dto.ts ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.CreatePuzzleDto = exports.PuzzleScoringDto = exports.PuzzleHintDto = exports.PuzzleContentDto = exports.PuzzleContentType = exports.PuzzleDifficulty = void 0; -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -const class_transformer_1 = __webpack_require__(/*! class-transformer */ "class-transformer"); -var PuzzleDifficulty; -(function (PuzzleDifficulty) { - PuzzleDifficulty["EASY"] = "easy"; - PuzzleDifficulty["MEDIUM"] = "medium"; - PuzzleDifficulty["HARD"] = "hard"; - PuzzleDifficulty["EXPERT"] = "expert"; -})(PuzzleDifficulty || (exports.PuzzleDifficulty = PuzzleDifficulty = {})); -var PuzzleContentType; -(function (PuzzleContentType) { - PuzzleContentType["MULTIPLE_CHOICE"] = "multiple-choice"; - PuzzleContentType["FILL_BLANK"] = "fill-blank"; - PuzzleContentType["DRAG_DROP"] = "drag-drop"; - PuzzleContentType["CODE"] = "code"; - PuzzleContentType["VISUAL"] = "visual"; - PuzzleContentType["LOGIC_GRID"] = "logic-grid"; -})(PuzzleContentType || (exports.PuzzleContentType = PuzzleContentType = {})); -class PuzzleContentDto { -} -exports.PuzzleContentDto = PuzzleContentDto; -__decorate([ - (0, class_validator_1.IsEnum)(PuzzleContentType), - __metadata("design:type", String) -], PuzzleContentDto.prototype, "type", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.MinLength)(10), - __metadata("design:type", String) -], PuzzleContentDto.prototype, "question", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - __metadata("design:type", Array) -], PuzzleContentDto.prototype, "options", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], PuzzleContentDto.prototype, "explanation", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], PuzzleContentDto.prototype, "media", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], PuzzleContentDto.prototype, "interactive", void 0); -class PuzzleHintDto { -} -exports.PuzzleHintDto = PuzzleHintDto; -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(1), - __metadata("design:type", Number) -], PuzzleHintDto.prototype, "order", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.MinLength)(5), - __metadata("design:type", String) -], PuzzleHintDto.prototype, "text", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(0), - __metadata("design:type", Number) -], PuzzleHintDto.prototype, "pointsPenalty", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsNumber)(), - __metadata("design:type", Number) -], PuzzleHintDto.prototype, "unlockAfter", void 0); -class PuzzleScoringDto { -} -exports.PuzzleScoringDto = PuzzleScoringDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], PuzzleScoringDto.prototype, "timeBonus", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], PuzzleScoringDto.prototype, "accuracyBonus", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], PuzzleScoringDto.prototype, "streakBonus", void 0); -class CreatePuzzleDto { -} -exports.CreatePuzzleDto = CreatePuzzleDto; -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.MinLength)(5), - (0, class_validator_1.MaxLength)(200), - __metadata("design:type", String) -], CreatePuzzleDto.prototype, "title", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.MinLength)(20), - (0, class_validator_1.MaxLength)(1000), - __metadata("design:type", String) -], CreatePuzzleDto.prototype, "description", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.MinLength)(3), - (0, class_validator_1.MaxLength)(50), - __metadata("design:type", String) -], CreatePuzzleDto.prototype, "category", void 0); -__decorate([ - (0, class_validator_1.IsEnum)(PuzzleDifficulty), - __metadata("design:type", String) -], CreatePuzzleDto.prototype, "difficulty", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(10), - __metadata("design:type", Number) -], CreatePuzzleDto.prototype, "difficultyRating", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(10), - (0, class_validator_1.Max)(1000), - __metadata("design:type", Number) -], CreatePuzzleDto.prototype, "basePoints", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(30), - (0, class_validator_1.Max)(3600), - __metadata("design:type", Number) -], CreatePuzzleDto.prototype, "timeLimit", void 0); -__decorate([ - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(0), - (0, class_validator_1.Max)(10), - __metadata("design:type", Number) -], CreatePuzzleDto.prototype, "maxHints", void 0); -__decorate([ - (0, class_validator_1.ValidateNested)(), - (0, class_transformer_1.Type)(() => PuzzleContentDto), - __metadata("design:type", PuzzleContentDto) -], CreatePuzzleDto.prototype, "content", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.ValidateNested)({ each: true }), - (0, class_transformer_1.Type)(() => PuzzleHintDto), - __metadata("design:type", Array) -], CreatePuzzleDto.prototype, "hints", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], CreatePuzzleDto.prototype, "tags", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsUUID)(4, { each: true }), - __metadata("design:type", Array) -], CreatePuzzleDto.prototype, "prerequisites", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.ValidateNested)(), - (0, class_transformer_1.Type)(() => PuzzleScoringDto), - __metadata("design:type", PuzzleScoringDto) -], CreatePuzzleDto.prototype, "scoring", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], CreatePuzzleDto.prototype, "isFeatured", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsUUID)(), - __metadata("design:type", String) -], CreatePuzzleDto.prototype, "parentPuzzleId", void 0); - - -/***/ }), - -/***/ "./src/puzzles/dto/index.ts": -/*!**********************************!*\ - !*** ./src/puzzles/dto/index.ts ***! - \**********************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -__exportStar(__webpack_require__(/*! ./create-puzzle.dto */ "./src/puzzles/dto/create-puzzle.dto.ts"), exports); -__exportStar(__webpack_require__(/*! ./update-puzzle.dto */ "./src/puzzles/dto/update-puzzle.dto.ts"), exports); -__exportStar(__webpack_require__(/*! ./search-puzzle.dto */ "./src/puzzles/dto/search-puzzle.dto.ts"), exports); -__exportStar(__webpack_require__(/*! ./bulk-operations.dto */ "./src/puzzles/dto/bulk-operations.dto.ts"), exports); - - -/***/ }), - -/***/ "./src/puzzles/dto/search-puzzle.dto.ts": -/*!**********************************************!*\ - !*** ./src/puzzles/dto/search-puzzle.dto.ts ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PuzzleStatsDto = exports.SearchPuzzleDto = exports.SortOrder = exports.SortBy = void 0; -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -const class_transformer_1 = __webpack_require__(/*! class-transformer */ "class-transformer"); -const create_puzzle_dto_1 = __webpack_require__(/*! ./create-puzzle.dto */ "./src/puzzles/dto/create-puzzle.dto.ts"); -var SortBy; -(function (SortBy) { - SortBy["CREATED_AT"] = "createdAt"; - SortBy["TITLE"] = "title"; - SortBy["DIFFICULTY"] = "difficulty"; - SortBy["RATING"] = "rating"; - SortBy["PLAYS"] = "totalPlays"; - SortBy["COMPLETION_RATE"] = "completionRate"; -})(SortBy || (exports.SortBy = SortBy = {})); -var SortOrder; -(function (SortOrder) { - SortOrder["ASC"] = "ASC"; - SortOrder["DESC"] = "DESC"; -})(SortOrder || (exports.SortOrder = SortOrder = {})); -class SearchPuzzleDto { - constructor() { - this.page = 1; - this.limit = 20; - this.sortBy = SortBy.CREATED_AT; - this.sortOrder = SortOrder.DESC; - } -} -exports.SearchPuzzleDto = SearchPuzzleDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], SearchPuzzleDto.prototype, "search", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], SearchPuzzleDto.prototype, "category", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(create_puzzle_dto_1.PuzzleDifficulty), - __metadata("design:type", typeof (_a = typeof create_puzzle_dto_1.PuzzleDifficulty !== "undefined" && create_puzzle_dto_1.PuzzleDifficulty) === "function" ? _a : Object) -], SearchPuzzleDto.prototype, "difficulty", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(10), - (0, class_transformer_1.Type)(() => Number), - __metadata("design:type", Number) -], SearchPuzzleDto.prototype, "minRating", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(10), - (0, class_transformer_1.Type)(() => Number), - __metadata("design:type", Number) -], SearchPuzzleDto.prototype, "maxRating", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - (0, class_transformer_1.Transform)(({ value }) => typeof value === 'string' ? value.split(',') : value), - __metadata("design:type", Array) -], SearchPuzzleDto.prototype, "tags", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - (0, class_transformer_1.Transform)(({ value }) => value === 'true'), - __metadata("design:type", Boolean) -], SearchPuzzleDto.prototype, "isFeatured", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - (0, class_transformer_1.Transform)(({ value }) => value === 'true'), - __metadata("design:type", Boolean) -], SearchPuzzleDto.prototype, "isPublished", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], SearchPuzzleDto.prototype, "createdBy", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(1), - (0, class_transformer_1.Type)(() => Number), - __metadata("design:type", Number) -], SearchPuzzleDto.prototype, "page", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsNumber)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(100), - (0, class_transformer_1.Type)(() => Number), - __metadata("design:type", Number) -], SearchPuzzleDto.prototype, "limit", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(SortBy), - __metadata("design:type", String) -], SearchPuzzleDto.prototype, "sortBy", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(SortOrder), - __metadata("design:type", String) -], SearchPuzzleDto.prototype, "sortOrder", void 0); -class PuzzleStatsDto { - constructor() { - this.includeStats = false; - this.period = 'all'; - } -} -exports.PuzzleStatsDto = PuzzleStatsDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - (0, class_transformer_1.Transform)(({ value }) => value === 'true'), - __metadata("design:type", Boolean) -], PuzzleStatsDto.prototype, "includeStats", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], PuzzleStatsDto.prototype, "period", void 0); - - -/***/ }), - -/***/ "./src/puzzles/dto/update-puzzle.dto.ts": -/*!**********************************************!*\ - !*** ./src/puzzles/dto/update-puzzle.dto.ts ***! - \**********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.UpdatePuzzleDto = void 0; -const mapped_types_1 = __webpack_require__(/*! @nestjs/mapped-types */ "@nestjs/mapped-types"); -const create_puzzle_dto_1 = __webpack_require__(/*! ./create-puzzle.dto */ "./src/puzzles/dto/create-puzzle.dto.ts"); -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -class UpdatePuzzleDto extends (0, mapped_types_1.PartialType)((0, mapped_types_1.OmitType)(create_puzzle_dto_1.CreatePuzzleDto, ['parentPuzzleId'])) { -} -exports.UpdatePuzzleDto = UpdatePuzzleDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], UpdatePuzzleDto.prototype, "isPublished", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], UpdatePuzzleDto.prototype, "isArchived", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - (0, class_validator_1.MaxLength)(500), - __metadata("design:type", String) -], UpdatePuzzleDto.prototype, "updateReason", void 0); - - -/***/ }), - -/***/ "./src/puzzles/dto/user-puzzle-submission.dto.ts": -/*!*******************************************************!*\ - !*** ./src/puzzles/dto/user-puzzle-submission.dto.ts ***! - \*******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.ModerationDecisionDto = exports.SubmitForReviewDto = exports.UpdatePuzzleSubmissionDto = exports.CreatorNotesDto = exports.SharingSettingsDto = exports.PuzzleHintDto = exports.MediaContentDto = exports.PuzzleContentDto = exports.CreatePuzzleSubmissionDto = void 0; -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -const class_transformer_1 = __webpack_require__(/*! class-transformer */ "class-transformer"); -const user_puzzle_submission_entity_1 = __webpack_require__(/*! ../entities/user-puzzle-submission.entity */ "./src/puzzles/entities/user-puzzle-submission.entity.ts"); -class CreatePuzzleSubmissionDto { - constructor() { - this.isPublic = false; - this.allowComments = true; - this.allowRatings = true; - } -} -exports.CreatePuzzleSubmissionDto = CreatePuzzleSubmissionDto; -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsNotEmpty)(), - (0, class_validator_1.Length)(3, 200), - __metadata("design:type", String) -], CreatePuzzleSubmissionDto.prototype, "title", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsNotEmpty)(), - (0, class_validator_1.Length)(10, 2000), - __metadata("design:type", String) -], CreatePuzzleSubmissionDto.prototype, "description", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsNotEmpty)(), - (0, class_validator_1.IsEnum)(['logic', 'math', 'pattern', 'word', 'spatial', 'memory', 'strategy']), - __metadata("design:type", String) -], CreatePuzzleSubmissionDto.prototype, "category", void 0); -__decorate([ - (0, class_validator_1.IsEnum)(['easy', 'medium', 'hard', 'expert']), - __metadata("design:type", String) -], CreatePuzzleSubmissionDto.prototype, "difficulty", void 0); -__decorate([ - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(10), - __metadata("design:type", Number) -], CreatePuzzleSubmissionDto.prototype, "difficultyRating", void 0); -__decorate([ - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(10), - (0, class_validator_1.Max)(1000), - __metadata("design:type", Number) -], CreatePuzzleSubmissionDto.prototype, "basePoints", void 0); -__decorate([ - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(60), - (0, class_validator_1.Max)(3600), - __metadata("design:type", Number) -], CreatePuzzleSubmissionDto.prototype, "timeLimit", void 0); -__decorate([ - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(0), - (0, class_validator_1.Max)(10), - __metadata("design:type", Number) -], CreatePuzzleSubmissionDto.prototype, "maxHints", void 0); -__decorate([ - (0, class_validator_1.IsObject)(), - (0, class_validator_1.ValidateNested)(), - (0, class_transformer_1.Type)(() => PuzzleContentDto), - __metadata("design:type", PuzzleContentDto) -], CreatePuzzleSubmissionDto.prototype, "content", void 0); -__decorate([ - (0, class_validator_1.IsArray)(), - (0, class_validator_1.ValidateNested)({ each: true }), - (0, class_transformer_1.Type)(() => PuzzleHintDto), - __metadata("design:type", Array) -], CreatePuzzleSubmissionDto.prototype, "hints", void 0); -__decorate([ - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], CreatePuzzleSubmissionDto.prototype, "tags", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], CreatePuzzleSubmissionDto.prototype, "isPublic", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], CreatePuzzleSubmissionDto.prototype, "allowComments", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], CreatePuzzleSubmissionDto.prototype, "allowRatings", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - (0, class_validator_1.ValidateNested)(), - (0, class_transformer_1.Type)(() => SharingSettingsDto), - __metadata("design:type", SharingSettingsDto) -], CreatePuzzleSubmissionDto.prototype, "sharingSettings", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - (0, class_validator_1.ValidateNested)(), - (0, class_transformer_1.Type)(() => CreatorNotesDto), - __metadata("design:type", CreatorNotesDto) -], CreatePuzzleSubmissionDto.prototype, "creatorNotes", void 0); -class PuzzleContentDto { -} -exports.PuzzleContentDto = PuzzleContentDto; -__decorate([ - (0, class_validator_1.IsEnum)(['multiple-choice', 'fill-blank', 'drag-drop', 'code', 'visual', 'logic-grid']), - __metadata("design:type", String) -], PuzzleContentDto.prototype, "type", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], PuzzleContentDto.prototype, "question", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], PuzzleContentDto.prototype, "options", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Object) -], PuzzleContentDto.prototype, "correctAnswer", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], PuzzleContentDto.prototype, "explanation", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - (0, class_validator_1.ValidateNested)(), - (0, class_transformer_1.Type)(() => MediaContentDto), - __metadata("design:type", MediaContentDto) -], PuzzleContentDto.prototype, "media", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], PuzzleContentDto.prototype, "interactive", void 0); -class MediaContentDto { -} -exports.MediaContentDto = MediaContentDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], MediaContentDto.prototype, "images", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], MediaContentDto.prototype, "videos", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], MediaContentDto.prototype, "audio", void 0); -class PuzzleHintDto { -} -exports.PuzzleHintDto = PuzzleHintDto; -__decorate([ - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - __metadata("design:type", Number) -], PuzzleHintDto.prototype, "order", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsNotEmpty)(), - (0, class_validator_1.Length)(5, 500), - __metadata("design:type", String) -], PuzzleHintDto.prototype, "text", void 0); -__decorate([ - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(0), - (0, class_validator_1.Max)(50), - __metadata("design:type", Number) -], PuzzleHintDto.prototype, "pointsPenalty", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(0), - __metadata("design:type", Number) -], PuzzleHintDto.prototype, "unlockAfter", void 0); -class SharingSettingsDto { - constructor() { - this.allowShare = true; - this.embeddable = false; - this.downloadAllowed = false; - this.attributionRequired = true; - } -} -exports.SharingSettingsDto = SharingSettingsDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], SharingSettingsDto.prototype, "allowShare", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], SharingSettingsDto.prototype, "embeddable", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], SharingSettingsDto.prototype, "downloadAllowed", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], SharingSettingsDto.prototype, "attributionRequired", void 0); -class CreatorNotesDto { -} -exports.CreatorNotesDto = CreatorNotesDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - (0, class_validator_1.Length)(0, 500), - __metadata("design:type", String) -], CreatorNotesDto.prototype, "inspiration", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - (0, class_validator_1.Length)(0, 200), - __metadata("design:type", String) -], CreatorNotesDto.prototype, "targetAudience", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - (0, class_validator_1.Length)(0, 100), - __metadata("design:type", String) -], CreatorNotesDto.prototype, "estimatedTime", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], CreatorNotesDto.prototype, "learningObjectives", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], CreatorNotesDto.prototype, "prerequisites", void 0); -class UpdatePuzzleSubmissionDto { -} -exports.UpdatePuzzleSubmissionDto = UpdatePuzzleSubmissionDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - (0, class_validator_1.Length)(3, 200), - __metadata("design:type", String) -], UpdatePuzzleSubmissionDto.prototype, "title", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - (0, class_validator_1.Length)(10, 2000), - __metadata("design:type", String) -], UpdatePuzzleSubmissionDto.prototype, "description", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(['logic', 'math', 'pattern', 'word', 'spatial', 'memory', 'strategy']), - __metadata("design:type", String) -], UpdatePuzzleSubmissionDto.prototype, "category", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(['easy', 'medium', 'hard', 'expert']), - __metadata("design:type", String) -], UpdatePuzzleSubmissionDto.prototype, "difficulty", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(10), - __metadata("design:type", Number) -], UpdatePuzzleSubmissionDto.prototype, "difficultyRating", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(10), - (0, class_validator_1.Max)(1000), - __metadata("design:type", Number) -], UpdatePuzzleSubmissionDto.prototype, "basePoints", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(60), - (0, class_validator_1.Max)(3600), - __metadata("design:type", Number) -], UpdatePuzzleSubmissionDto.prototype, "timeLimit", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(0), - (0, class_validator_1.Max)(10), - __metadata("design:type", Number) -], UpdatePuzzleSubmissionDto.prototype, "maxHints", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", PuzzleContentDto) -], UpdatePuzzleSubmissionDto.prototype, "content", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - __metadata("design:type", Array) -], UpdatePuzzleSubmissionDto.prototype, "hints", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], UpdatePuzzleSubmissionDto.prototype, "tags", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], UpdatePuzzleSubmissionDto.prototype, "isPublic", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], UpdatePuzzleSubmissionDto.prototype, "allowComments", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsBoolean)(), - __metadata("design:type", Boolean) -], UpdatePuzzleSubmissionDto.prototype, "allowRatings", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", SharingSettingsDto) -], UpdatePuzzleSubmissionDto.prototype, "sharingSettings", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", CreatorNotesDto) -], UpdatePuzzleSubmissionDto.prototype, "creatorNotes", void 0); -class SubmitForReviewDto { -} -exports.SubmitForReviewDto = SubmitForReviewDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - (0, class_validator_1.Length)(0, 1000), - __metadata("design:type", String) -], SubmitForReviewDto.prototype, "reviewerNotes", void 0); -class ModerationDecisionDto { -} -exports.ModerationDecisionDto = ModerationDecisionDto; -__decorate([ - (0, class_validator_1.IsEnum)(user_puzzle_submission_entity_1.ModerationAction), - __metadata("design:type", typeof (_a = typeof user_puzzle_submission_entity_1.ModerationAction !== "undefined" && user_puzzle_submission_entity_1.ModerationAction) === "function" ? _a : Object) -], ModerationDecisionDto.prototype, "action", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.Length)(0, 1000), - __metadata("design:type", String) -], ModerationDecisionDto.prototype, "reviewNotes", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], ModerationDecisionDto.prototype, "requiredChanges", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(10), - __metadata("design:type", Number) -], ModerationDecisionDto.prototype, "qualityScore", void 0); - - -/***/ }), - -/***/ "./src/puzzles/entities/puzzle-comment.entity.ts": -/*!*******************************************************!*\ - !*** ./src/puzzles/entities/puzzle-comment.entity.ts ***! - \*******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PuzzleComment = exports.PuzzleCommentStatus = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_entity_1 = __webpack_require__(/*! ../../users/entities/user.entity */ "./src/users/entities/user.entity.ts"); -const user_puzzle_submission_entity_1 = __webpack_require__(/*! ./user-puzzle-submission.entity */ "./src/puzzles/entities/user-puzzle-submission.entity.ts"); -var PuzzleCommentStatus; -(function (PuzzleCommentStatus) { - PuzzleCommentStatus["ACTIVE"] = "active"; - PuzzleCommentStatus["HIDDEN"] = "hidden"; - PuzzleCommentStatus["DELETED"] = "deleted"; - PuzzleCommentStatus["FLAGGED"] = "flagged"; -})(PuzzleCommentStatus || (exports.PuzzleCommentStatus = PuzzleCommentStatus = {})); -let PuzzleComment = class PuzzleComment { -}; -exports.PuzzleComment = PuzzleComment; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], PuzzleComment.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], PuzzleComment.prototype, "submissionId", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => user_puzzle_submission_entity_1.UserPuzzleSubmission, { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'submissionId' }), - __metadata("design:type", typeof (_a = typeof user_puzzle_submission_entity_1.UserPuzzleSubmission !== "undefined" && user_puzzle_submission_entity_1.UserPuzzleSubmission) === "function" ? _a : Object) -], PuzzleComment.prototype, "submission", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], PuzzleComment.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => user_entity_1.User, { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'userId' }), - __metadata("design:type", typeof (_b = typeof user_entity_1.User !== "undefined" && user_entity_1.User) === "function" ? _b : Object) -], PuzzleComment.prototype, "user", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], PuzzleComment.prototype, "parentId", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => PuzzleComment, { nullable: true }), - (0, typeorm_1.JoinColumn)({ name: 'parentId' }), - __metadata("design:type", PuzzleComment) -], PuzzleComment.prototype, "parent", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text' }), - __metadata("design:type", String) -], PuzzleComment.prototype, "content", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'enum', enum: PuzzleCommentStatus, default: PuzzleCommentStatus.ACTIVE }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], PuzzleComment.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], PuzzleComment.prototype, "moderationFlags", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], PuzzleComment.prototype, "upvotes", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], PuzzleComment.prototype, "downvotes", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], PuzzleComment.prototype, "replyCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - __metadata("design:type", Boolean) -], PuzzleComment.prototype, "isPinned", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - __metadata("design:type", Boolean) -], PuzzleComment.prototype, "isFromCreator", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], PuzzleComment.prototype, "metadata", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], PuzzleComment.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], PuzzleComment.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.OneToMany)(() => PuzzleComment, (comment) => comment.parent), - __metadata("design:type", Array) -], PuzzleComment.prototype, "replies", void 0); -exports.PuzzleComment = PuzzleComment = __decorate([ - (0, typeorm_1.Entity)('puzzle_comments'), - (0, typeorm_1.Index)(['submissionId', 'status']), - (0, typeorm_1.Index)(['userId', 'createdAt']), - (0, typeorm_1.Index)(['parentId']) -], PuzzleComment); - - -/***/ }), - -/***/ "./src/puzzles/entities/puzzle-rating.entity.ts": -/*!******************************************************!*\ - !*** ./src/puzzles/entities/puzzle-rating.entity.ts ***! - \******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d, _e; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PuzzleRating = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_entity_1 = __webpack_require__(/*! ../../users/entities/user.entity */ "./src/users/entities/user.entity.ts"); -const puzzle_entity_1 = __webpack_require__(/*! ./puzzle.entity */ "./src/puzzles/entities/puzzle.entity.ts"); -let PuzzleRating = class PuzzleRating { -}; -exports.PuzzleRating = PuzzleRating; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], PuzzleRating.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], PuzzleRating.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], PuzzleRating.prototype, "submissionId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], PuzzleRating.prototype, "puzzleId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 3, scale: 2 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], PuzzleRating.prototype, "rating", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20, nullable: true }), - __metadata("design:type", String) -], PuzzleRating.prototype, "difficultyVote", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text', nullable: true }), - __metadata("design:type", String) -], PuzzleRating.prototype, "review", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'simple-array', default: [] }), - __metadata("design:type", Array) -], PuzzleRating.prototype, "tags", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - (0, typeorm_1.Index)(), - __metadata("design:type", Boolean) -], PuzzleRating.prototype, "isReported", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", Boolean) -], PuzzleRating.prototype, "isPublic", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], PuzzleRating.prototype, "metadata", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], PuzzleRating.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], PuzzleRating.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], PuzzleRating.prototype, "lastEditedAt", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => user_entity_1.User, { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'userId' }), - __metadata("design:type", typeof (_d = typeof user_entity_1.User !== "undefined" && user_entity_1.User) === "function" ? _d : Object) -], PuzzleRating.prototype, "user", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => puzzle_entity_1.Puzzle, { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'puzzleId' }), - __metadata("design:type", typeof (_e = typeof puzzle_entity_1.Puzzle !== "undefined" && puzzle_entity_1.Puzzle) === "function" ? _e : Object) -], PuzzleRating.prototype, "puzzle", void 0); -exports.PuzzleRating = PuzzleRating = __decorate([ - (0, typeorm_1.Entity)('puzzle_ratings'), - (0, typeorm_1.Index)(['userId', 'puzzleId'], { unique: true }), - (0, typeorm_1.Index)(['puzzleId', 'rating']) -], PuzzleRating); - - -/***/ }), - -/***/ "./src/puzzles/entities/puzzle.entity.ts": -/*!***********************************************!*\ - !*** ./src/puzzles/entities/puzzle.entity.ts ***! - \***********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d, _e, _f; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Puzzle = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -let Puzzle = class Puzzle { -}; -exports.Puzzle = Puzzle; -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], Puzzle.prototype, "archivedAt", void 0); -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], Puzzle.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 200 }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Puzzle.prototype, "title", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text' }), - __metadata("design:type", String) -], Puzzle.prototype, "description", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50 }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Puzzle.prototype, "category", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20, default: 'medium' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Puzzle.prototype, "difficulty", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 1 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], Puzzle.prototype, "difficultyRating", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 100 }), - __metadata("design:type", Number) -], Puzzle.prototype, "basePoints", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 300 }), - __metadata("design:type", Number) -], Puzzle.prototype, "timeLimit", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 3 }), - __metadata("design:type", Number) -], Puzzle.prototype, "maxHints", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], Puzzle.prototype, "attempts", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], Puzzle.prototype, "completions", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 5, scale: 2, default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], Puzzle.prototype, "averageRating", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], Puzzle.prototype, "ratingCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], Puzzle.prototype, "averageCompletionTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", Boolean) -], Puzzle.prototype, "isActive", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - (0, typeorm_1.Index)(), - __metadata("design:type", Boolean) -], Puzzle.prototype, "isFeatured", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], Puzzle.prototype, "publishedAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Puzzle.prototype, "createdBy", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb' }), - __metadata("design:type", Object) -], Puzzle.prototype, "content", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: [] }), - __metadata("design:type", typeof (_c = typeof Array !== "undefined" && Array) === "function" ? _c : Object) -], Puzzle.prototype, "hints", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'simple-array', default: [] }), - (0, typeorm_1.Index)(), - __metadata("design:type", Array) -], Puzzle.prototype, "tags", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: [] }), - __metadata("design:type", Array) -], Puzzle.prototype, "prerequisites", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Puzzle.prototype, "scoring", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Puzzle.prototype, "analytics", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Puzzle.prototype, "metadata", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], Puzzle.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_e = typeof Date !== "undefined" && Date) === "function" ? _e : Object) -], Puzzle.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.DeleteDateColumn)(), - __metadata("design:type", typeof (_f = typeof Date !== "undefined" && Date) === "function" ? _f : Object) -], Puzzle.prototype, "deletedAt", void 0); -__decorate([ - (0, typeorm_1.OneToMany)('PuzzleProgress', 'puzzle'), - __metadata("design:type", Array) -], Puzzle.prototype, "progress", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => Puzzle, { nullable: true }), - (0, typeorm_1.JoinColumn)({ name: 'parentPuzzleId' }), - __metadata("design:type", Puzzle) -], Puzzle.prototype, "parentPuzzle", void 0); -__decorate([ - (0, typeorm_1.OneToMany)(() => Puzzle, (puzzle) => puzzle.parentPuzzle), - __metadata("design:type", Array) -], Puzzle.prototype, "childPuzzles", void 0); -exports.Puzzle = Puzzle = __decorate([ - (0, typeorm_1.Entity)('puzzles'), - (0, typeorm_1.Index)(['category', 'difficulty']), - (0, typeorm_1.Index)(['isActive', 'publishedAt']), - (0, typeorm_1.Index)(['createdBy']) -], Puzzle); - - -/***/ }), - -/***/ "./src/puzzles/entities/user-puzzle-submission.entity.ts": -/*!***************************************************************!*\ - !*** ./src/puzzles/entities/user-puzzle-submission.entity.ts ***! - \***************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d, _e, _f, _g, _h, _j; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.UserPuzzleSubmission = exports.ModerationAction = exports.PuzzleSubmissionStatus = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_entity_1 = __webpack_require__(/*! ../../users/entities/user.entity */ "./src/users/entities/user.entity.ts"); -const puzzle_entity_1 = __webpack_require__(/*! ./puzzle.entity */ "./src/puzzles/entities/puzzle.entity.ts"); -var PuzzleSubmissionStatus; -(function (PuzzleSubmissionStatus) { - PuzzleSubmissionStatus["DRAFT"] = "draft"; - PuzzleSubmissionStatus["SUBMITTED"] = "submitted"; - PuzzleSubmissionStatus["UNDER_REVIEW"] = "under_review"; - PuzzleSubmissionStatus["APPROVED"] = "approved"; - PuzzleSubmissionStatus["REJECTED"] = "rejected"; - PuzzleSubmissionStatus["PUBLISHED"] = "published"; - PuzzleSubmissionStatus["FEATURED"] = "featured"; -})(PuzzleSubmissionStatus || (exports.PuzzleSubmissionStatus = PuzzleSubmissionStatus = {})); -var ModerationAction; -(function (ModerationAction) { - ModerationAction["PENDING_REVIEW"] = "pending_review"; - ModerationAction["AUTO_APPROVED"] = "auto_approved"; - ModerationAction["MANUALLY_APPROVED"] = "manually_approved"; - ModerationAction["REJECTED_CONTENT"] = "rejected_content"; - ModerationAction["REJECTED_QUALITY"] = "rejected_quality"; - ModerationAction["REJECTED_DUPLICATE"] = "rejected_duplicate"; - ModerationAction["REJECTED_INAPPROPRIATE"] = "rejected_inappropriate"; - ModerationAction["REQUIRES_CHANGES"] = "requires_changes"; -})(ModerationAction || (exports.ModerationAction = ModerationAction = {})); -let UserPuzzleSubmission = class UserPuzzleSubmission { -}; -exports.UserPuzzleSubmission = UserPuzzleSubmission; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], UserPuzzleSubmission.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], UserPuzzleSubmission.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => user_entity_1.User), - (0, typeorm_1.JoinColumn)({ name: 'userId' }), - __metadata("design:type", typeof (_a = typeof user_entity_1.User !== "undefined" && user_entity_1.User) === "function" ? _a : Object) -], UserPuzzleSubmission.prototype, "user", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 200 }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], UserPuzzleSubmission.prototype, "title", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text' }), - __metadata("design:type", String) -], UserPuzzleSubmission.prototype, "description", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50 }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], UserPuzzleSubmission.prototype, "category", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20, default: 'medium' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], UserPuzzleSubmission.prototype, "difficulty", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 1 }), - __metadata("design:type", Number) -], UserPuzzleSubmission.prototype, "difficultyRating", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 100 }), - __metadata("design:type", Number) -], UserPuzzleSubmission.prototype, "basePoints", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 300 }), - __metadata("design:type", Number) -], UserPuzzleSubmission.prototype, "timeLimit", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 3 }), - __metadata("design:type", Number) -], UserPuzzleSubmission.prototype, "maxHints", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb' }), - __metadata("design:type", Object) -], UserPuzzleSubmission.prototype, "content", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: [] }), - __metadata("design:type", typeof (_b = typeof Array !== "undefined" && Array) === "function" ? _b : Object) -], UserPuzzleSubmission.prototype, "hints", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'simple-array', default: [] }), - (0, typeorm_1.Index)(), - __metadata("design:type", Array) -], UserPuzzleSubmission.prototype, "tags", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'enum', enum: PuzzleSubmissionStatus, default: PuzzleSubmissionStatus.DRAFT }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], UserPuzzleSubmission.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserPuzzleSubmission.prototype, "validationResults", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserPuzzleSubmission.prototype, "moderationData", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - (0, typeorm_1.Index)(), - __metadata("design:type", Boolean) -], UserPuzzleSubmission.prototype, "isPublic", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - (0, typeorm_1.Index)(), - __metadata("design:type", Boolean) -], UserPuzzleSubmission.prototype, "allowComments", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: true }), - __metadata("design:type", Boolean) -], UserPuzzleSubmission.prototype, "allowRatings", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], UserPuzzleSubmission.prototype, "views", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], UserPuzzleSubmission.prototype, "playCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 5, scale: 2, default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], UserPuzzleSubmission.prototype, "averageRating", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], UserPuzzleSubmission.prototype, "ratingCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 5, scale: 2, default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], UserPuzzleSubmission.prototype, "averageCompletionRate", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 5, scale: 2, default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], UserPuzzleSubmission.prototype, "communityScore", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserPuzzleSubmission.prototype, "sharingSettings", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserPuzzleSubmission.prototype, "creatorNotes", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], UserPuzzleSubmission.prototype, "submittedAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], UserPuzzleSubmission.prototype, "publishedAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_e = typeof Date !== "undefined" && Date) === "function" ? _e : Object) -], UserPuzzleSubmission.prototype, "featuredAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_f = typeof Date !== "undefined" && Date) === "function" ? _f : Object) -], UserPuzzleSubmission.prototype, "lastActivityAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserPuzzleSubmission.prototype, "analytics", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserPuzzleSubmission.prototype, "rewardData", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_g = typeof Date !== "undefined" && Date) === "function" ? _g : Object) -], UserPuzzleSubmission.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_h = typeof Date !== "undefined" && Date) === "function" ? _h : Object) -], UserPuzzleSubmission.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.OneToMany)('PuzzleRating', 'submission'), - __metadata("design:type", Array) -], UserPuzzleSubmission.prototype, "ratings", void 0); -__decorate([ - (0, typeorm_1.OneToMany)('PuzzleComment', 'submission'), - __metadata("design:type", Array) -], UserPuzzleSubmission.prototype, "comments", void 0); -__decorate([ - (0, typeorm_1.OneToMany)('PuzzlePlay', 'submission'), - __metadata("design:type", Array) -], UserPuzzleSubmission.prototype, "playSessions", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => puzzle_entity_1.Puzzle, { nullable: true }), - (0, typeorm_1.JoinColumn)({ name: 'publishedPuzzleId' }), - __metadata("design:type", typeof (_j = typeof puzzle_entity_1.Puzzle !== "undefined" && puzzle_entity_1.Puzzle) === "function" ? _j : Object) -], UserPuzzleSubmission.prototype, "publishedPuzzle", void 0); -exports.UserPuzzleSubmission = UserPuzzleSubmission = __decorate([ - (0, typeorm_1.Entity)('user_puzzle_submissions'), - (0, typeorm_1.Index)(['userId', 'status']), - (0, typeorm_1.Index)(['status', 'submittedAt']), - (0, typeorm_1.Index)(['isPublic', 'status']) -], UserPuzzleSubmission); - - -/***/ }), - -/***/ "./src/puzzles/puzzles.controller.ts": -/*!*******************************************!*\ - !*** ./src/puzzles/puzzles.controller.ts ***! - \*******************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var PuzzlesController_1; -var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PuzzlesController = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const puzzles_service_1 = __webpack_require__(/*! ./puzzles.service */ "./src/puzzles/puzzles.service.ts"); -const dto_1 = __webpack_require__(/*! ./dto */ "./src/puzzles/dto/index.ts"); -let PuzzlesController = PuzzlesController_1 = class PuzzlesController { - constructor(puzzlesService) { - this.puzzlesService = puzzlesService; - this.logger = new common_1.Logger(PuzzlesController_1.name); - } - async create(createPuzzleDto) { - const userId = 'temp-user-id'; - this.logger.log(`Creating puzzle: ${createPuzzleDto.title} by user: ${userId}`); - return await this.puzzlesService.create(createPuzzleDto, userId); - } - async findAll(searchDto) { - this.logger.log(`Searching puzzles with filters: ${JSON.stringify(searchDto)}`); - return await this.puzzlesService.findAll(searchDto); - } - async getAnalytics(period) { - return await this.puzzlesService.getAnalytics(period); - } - async bulkUpdate(puzzleIds, bulkUpdateDto) { - const userId = 'temp-user-id'; - this.logger.log(`Bulk updating ${puzzleIds.length} puzzles with action: ${bulkUpdateDto.action}`); - return await this.puzzlesService.bulkUpdate(puzzleIds, bulkUpdateDto, userId); - } - async findOne(id) { - return await this.puzzlesService.findOne(id); - } - async getPuzzleStats(id, statsDto) { - const puzzle = await this.puzzlesService.findOne(id); - return { - puzzle, - stats: { - period: statsDto.period, - includeStats: statsDto.includeStats, - }, - }; - } - async update(id, updatePuzzleDto) { - const userId = 'temp-user-id'; - this.logger.log(`Updating puzzle: ${id} by user: ${userId}`); - return await this.puzzlesService.update(id, updatePuzzleDto, userId); - } - async remove(id) { - const userId = 'temp-user-id'; - this.logger.log(`Deleting puzzle: ${id} by user: ${userId}`); - await this.puzzlesService.remove(id, userId); - } - async publish(id) { - const userId = 'temp-user-id'; - this.logger.log(`Publishing puzzle: ${id} by user: ${userId}`); - return await this.puzzlesService.update(id, { isPublished: true }, userId); - } - async unpublish(id) { - const userId = 'temp-user-id'; - this.logger.log(`Unpublishing puzzle: ${id} by user: ${userId}`); - return await this.puzzlesService.update(id, { isPublished: false }, userId); - } - async duplicate(id) { - const userId = 'temp-user-id'; - this.logger.log(`Duplicating puzzle: ${id} by user: ${userId}`); - const originalPuzzle = await this.puzzlesService.findOne(id); - const duplicateDto = { - title: `${originalPuzzle.title} (Copy)`, - description: originalPuzzle.description, - category: originalPuzzle.category, - difficulty: originalPuzzle.difficulty, - difficultyRating: originalPuzzle.difficultyRating, - basePoints: originalPuzzle.basePoints, - timeLimit: originalPuzzle.timeLimit, - maxHints: originalPuzzle.maxHints, - content: originalPuzzle.content, - hints: originalPuzzle.hints, - tags: originalPuzzle.tags, - scoring: originalPuzzle.scoring, - isFeatured: false, - }; - return await this.puzzlesService.create(duplicateDto, userId); - } -}; -exports.PuzzlesController = PuzzlesController; -__decorate([ - (0, common_1.Post)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [typeof (_b = typeof dto_1.CreatePuzzleDto !== "undefined" && dto_1.CreatePuzzleDto) === "function" ? _b : Object]), - __metadata("design:returntype", typeof (_c = typeof Promise !== "undefined" && Promise) === "function" ? _c : Object) -], PuzzlesController.prototype, "create", null); -__decorate([ - (0, common_1.Get)(), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [typeof (_d = typeof dto_1.SearchPuzzleDto !== "undefined" && dto_1.SearchPuzzleDto) === "function" ? _d : Object]), - __metadata("design:returntype", typeof (_e = typeof Promise !== "undefined" && Promise) === "function" ? _e : Object) -], PuzzlesController.prototype, "findAll", null); -__decorate([ - (0, common_1.Get)('analytics'), - __param(0, (0, common_1.Query)('period')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", typeof (_f = typeof Promise !== "undefined" && Promise) === "function" ? _f : Object) -], PuzzlesController.prototype, "getAnalytics", null); -__decorate([ - (0, common_1.Patch)('bulk'), - __param(0, (0, common_1.Body)('puzzleIds', new common_1.ParseArrayPipe({ items: String }))), - __param(1, (0, common_1.Body)('bulkUpdate')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Array, typeof (_g = typeof dto_1.BulkUpdateDto !== "undefined" && dto_1.BulkUpdateDto) === "function" ? _g : Object]), - __metadata("design:returntype", Promise) -], PuzzlesController.prototype, "bulkUpdate", null); -__decorate([ - (0, common_1.Get)(':id'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", typeof (_h = typeof Promise !== "undefined" && Promise) === "function" ? _h : Object) -], PuzzlesController.prototype, "findOne", null); -__decorate([ - (0, common_1.Get)(':id/stats'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __param(1, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, typeof (_j = typeof dto_1.PuzzleStatsDto !== "undefined" && dto_1.PuzzleStatsDto) === "function" ? _j : Object]), - __metadata("design:returntype", Promise) -], PuzzlesController.prototype, "getPuzzleStats", null); -__decorate([ - (0, common_1.Patch)(':id'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, typeof (_k = typeof dto_1.UpdatePuzzleDto !== "undefined" && dto_1.UpdatePuzzleDto) === "function" ? _k : Object]), - __metadata("design:returntype", typeof (_l = typeof Promise !== "undefined" && Promise) === "function" ? _l : Object) -], PuzzlesController.prototype, "update", null); -__decorate([ - (0, common_1.Delete)(':id'), - (0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", typeof (_m = typeof Promise !== "undefined" && Promise) === "function" ? _m : Object) -], PuzzlesController.prototype, "remove", null); -__decorate([ - (0, common_1.Post)(':id/publish'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", typeof (_o = typeof Promise !== "undefined" && Promise) === "function" ? _o : Object) -], PuzzlesController.prototype, "publish", null); -__decorate([ - (0, common_1.Post)(':id/unpublish'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", typeof (_p = typeof Promise !== "undefined" && Promise) === "function" ? _p : Object) -], PuzzlesController.prototype, "unpublish", null); -__decorate([ - (0, common_1.Post)(':id/duplicate'), - __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", typeof (_q = typeof Promise !== "undefined" && Promise) === "function" ? _q : Object) -], PuzzlesController.prototype, "duplicate", null); -exports.PuzzlesController = PuzzlesController = PuzzlesController_1 = __decorate([ - (0, common_1.Controller)('puzzles'), - (0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor), - __metadata("design:paramtypes", [typeof (_a = typeof puzzles_service_1.PuzzlesService !== "undefined" && puzzles_service_1.PuzzlesService) === "function" ? _a : Object]) -], PuzzlesController); - - -/***/ }), - -/***/ "./src/puzzles/puzzles.module.ts": -/*!***************************************!*\ - !*** ./src/puzzles/puzzles.module.ts ***! - \***************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PuzzlesModule = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const puzzles_service_1 = __webpack_require__(/*! ./puzzles.service */ "./src/puzzles/puzzles.service.ts"); -const puzzles_controller_1 = __webpack_require__(/*! ./puzzles.controller */ "./src/puzzles/puzzles.controller.ts"); -const community_puzzles_module_1 = __webpack_require__(/*! ./community-puzzles.module */ "./src/puzzles/community-puzzles.module.ts"); -const puzzle_entity_1 = __webpack_require__(/*! ./entities/puzzle.entity */ "./src/puzzles/entities/puzzle.entity.ts"); -const puzzle_progress_entity_1 = __webpack_require__(/*! ../game-logic/entities/puzzle-progress.entity */ "./src/game-logic/entities/puzzle-progress.entity.ts"); -const puzzle_rating_entity_1 = __webpack_require__(/*! ./entities/puzzle-rating.entity */ "./src/puzzles/entities/puzzle-rating.entity.ts"); -let PuzzlesModule = class PuzzlesModule { -}; -exports.PuzzlesModule = PuzzlesModule; -exports.PuzzlesModule = PuzzlesModule = __decorate([ - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forFeature([ - puzzle_entity_1.Puzzle, - puzzle_progress_entity_1.PuzzleProgress, - puzzle_rating_entity_1.PuzzleRating - ]), - community_puzzles_module_1.CommunityPuzzlesModule, - ], - controllers: [puzzles_controller_1.PuzzlesController], - providers: [puzzles_service_1.PuzzlesService], - exports: [puzzles_service_1.PuzzlesService] - }) -], PuzzlesModule); - - -/***/ }), - -/***/ "./src/puzzles/puzzles.service.ts": -/*!****************************************!*\ - !*** ./src/puzzles/puzzles.service.ts ***! - \****************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var PuzzlesService_1; -var _a, _b, _c; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PuzzlesService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const typeorm_2 = __webpack_require__(/*! typeorm */ "typeorm"); -const puzzle_entity_1 = __webpack_require__(/*! ./entities/puzzle.entity */ "./src/puzzles/entities/puzzle.entity.ts"); -const puzzle_progress_entity_1 = __webpack_require__(/*! ../game-logic/entities/puzzle-progress.entity */ "./src/game-logic/entities/puzzle-progress.entity.ts"); -const puzzle_rating_entity_1 = __webpack_require__(/*! ./entities/puzzle-rating.entity */ "./src/puzzles/entities/puzzle-rating.entity.ts"); -const dto_1 = __webpack_require__(/*! ./dto */ "./src/puzzles/dto/index.ts"); -let PuzzlesService = PuzzlesService_1 = class PuzzlesService { - constructor(puzzleRepository, progressRepository, ratingRepository) { - this.puzzleRepository = puzzleRepository; - this.progressRepository = progressRepository; - this.ratingRepository = ratingRepository; - this.logger = new common_1.Logger(PuzzlesService_1.name); - } - async create(createPuzzleDto, createdBy) { - try { - const puzzleData = { - title: createPuzzleDto.title, - description: createPuzzleDto.description, - category: createPuzzleDto.category, - difficulty: createPuzzleDto.difficulty, - difficultyRating: createPuzzleDto.difficultyRating, - basePoints: createPuzzleDto.basePoints, - timeLimit: createPuzzleDto.timeLimit, - maxHints: createPuzzleDto.maxHints, - content: createPuzzleDto.content, - hints: createPuzzleDto.hints || [], - tags: createPuzzleDto.tags || [], - prerequisites: createPuzzleDto.prerequisites || [], - scoring: createPuzzleDto.scoring || {}, - isFeatured: createPuzzleDto.isFeatured || false, - createdBy, - publishedAt: undefined, - analytics: { - completionRate: 0, - averageAttempts: 0, - commonErrors: [], - timeDistribution: { - min: 0, - max: 0, - median: 0, - q1: 0, - q3: 0 - } - }, - metadata: { - version: '1.0', - lastModifiedBy: createdBy, - reviewStatus: 'pending' - } - }; - const puzzle = this.puzzleRepository.create(puzzleData); - const savedPuzzle = await this.puzzleRepository.save(puzzle); - this.logger.log(`Created puzzle: ${savedPuzzle.id} by user: ${createdBy}`); - return savedPuzzle; - } - catch (error) { - this.logger.error(`Failed to create puzzle: ${error.message}`, error.stack); - throw error; - } - } - async findAll(searchDto) { - try { - const { search, category, difficulty, minRating, maxRating, tags, isFeatured, isPublished, createdBy, page = 1, limit = 20, sortBy = dto_1.SortBy.CREATED_AT, sortOrder = dto_1.SortOrder.DESC } = searchDto; - const queryBuilder = this.puzzleRepository - .createQueryBuilder('puzzle') - .where('puzzle.deletedAt IS NULL'); - if (search) { - queryBuilder.andWhere('(puzzle.title ILIKE :search OR puzzle.description ILIKE :search)', { search: `%${search}%` }); - } - if (category) { - queryBuilder.andWhere('puzzle.category = :category', { category }); - } - if (difficulty) { - queryBuilder.andWhere('puzzle.difficulty = :difficulty', { difficulty }); - } - if (minRating !== undefined) { - queryBuilder.andWhere('puzzle.difficultyRating >= :minRating', { minRating }); - } - if (maxRating !== undefined) { - queryBuilder.andWhere('puzzle.difficultyRating <= :maxRating', { maxRating }); - } - if (isFeatured !== undefined) { - queryBuilder.andWhere('puzzle.isFeatured = :isFeatured', { isFeatured }); - } - if (isPublished !== undefined) { - if (isPublished) { - queryBuilder.andWhere('puzzle.publishedAt IS NOT NULL'); - } - else { - queryBuilder.andWhere('puzzle.publishedAt IS NULL'); - } - } - if (createdBy) { - queryBuilder.andWhere('puzzle.createdBy = :createdBy', { createdBy }); - } - this.applySorting(queryBuilder, sortBy, sortOrder); - const [puzzles, total] = await queryBuilder - .skip((page - 1) * limit) - .take(limit) - .getManyAndCount(); - const puzzlesWithStats = await this.enhanceWithStats(puzzles); - return { - puzzles: puzzlesWithStats, - total, - page, - limit, - totalPages: Math.ceil(total / limit) - }; - } - catch (error) { - this.logger.error(`Failed to search puzzles: ${error.message}`, error.stack); - throw error; - } - } - async findOne(id, userId) { - try { - const puzzle = await this.puzzleRepository - .createQueryBuilder('puzzle') - .where('puzzle.id = :id', { id }) - .andWhere('puzzle.deletedAt IS NULL') - .getOne(); - if (!puzzle) { - throw new common_1.NotFoundException(`Puzzle with ID ${id} not found`); - } - if (!puzzle.publishedAt && userId !== puzzle.createdBy) { - throw new common_1.NotFoundException(`Puzzle with ID ${id} not found`); - } - const [enhancedPuzzle] = await this.enhanceWithStats([puzzle]); - return enhancedPuzzle; - } - catch (error) { - this.logger.error(`Failed to find puzzle ${id}: ${error.message}`, error.stack); - throw error; - } - } - async update(id, updatePuzzleDto, userId) { - try { - const puzzle = await this.findOne(id, userId); - if (puzzle.createdBy !== userId) { - throw new common_1.BadRequestException('You can only update puzzles you created'); - } - const updateData = { ...updatePuzzleDto }; - if (updateData.isPublished !== undefined) { - updateData.publishedAt = updateData.isPublished ? new Date() : null; - delete updateData.isPublished; - } - await this.puzzleRepository.update(id, updateData); - const updatedPuzzle = await this.findOne(id, userId); - this.logger.log(`Updated puzzle: ${id}`); - return updatedPuzzle; - } - catch (error) { - this.logger.error(`Failed to update puzzle ${id}: ${error.message}`, error.stack); - throw error; - } - } - async remove(id, userId) { - try { - const puzzle = await this.findOne(id, userId); - if (puzzle.createdBy !== userId) { - throw new common_1.BadRequestException('You can only delete puzzles you created'); - } - await this.puzzleRepository.softDelete(id); - this.logger.log(`Deleted puzzle: ${id}`); - } - catch (error) { - this.logger.error(`Failed to remove puzzle ${id}: ${error.message}`, error.stack); - throw error; - } - } - async bulkUpdate(puzzleIds, bulkUpdateDto, userId) { - const errors = []; - let updated = 0; - try { - for (const puzzleId of puzzleIds) { - try { - await this.executeBulkAction(puzzleId, bulkUpdateDto, userId); - updated++; - } - catch (error) { - errors.push(`${puzzleId}: ${error.message}`); - } - } - this.logger.log(`Bulk update completed: ${updated} updated, ${errors.length} errors`); - return { updated, errors }; - } - catch (error) { - this.logger.error(`Bulk update failed: ${error.message}`, error.stack); - throw error; - } - } - async getAnalytics(period = 'all') { - try { - const baseQuery = this.puzzleRepository.createQueryBuilder('puzzle') - .where('puzzle.deletedAt IS NULL'); - const [totalPuzzles, publishedPuzzles, topPuzzles] = await Promise.all([ - baseQuery.getCount(), - baseQuery.clone().andWhere('puzzle.publishedAt IS NOT NULL').getCount(), - this.puzzleRepository.find({ - where: { deletedAt: (0, typeorm_2.IsNull)(), publishedAt: (0, typeorm_2.Not)((0, typeorm_2.IsNull)()) }, - order: { completions: 'DESC' }, - take: 10 - }) - ]); - return { - totalPuzzles, - publishedPuzzles, - categoryCounts: {}, - difficultyDistribution: {}, - averageRating: 0, - topPerformingPuzzles: topPuzzles, - recentActivity: { - created: 0, - published: 0, - played: 0 - } - }; - } - catch (error) { - this.logger.error(`Failed to get analytics: ${error.message}`, error.stack); - throw error; - } - } - applySorting(queryBuilder, sortBy, sortOrder) { - switch (sortBy) { - case dto_1.SortBy.TITLE: - queryBuilder.orderBy('puzzle.title', sortOrder); - break; - case dto_1.SortBy.DIFFICULTY: - queryBuilder.orderBy('puzzle.difficultyRating', sortOrder); - break; - case dto_1.SortBy.RATING: - queryBuilder.orderBy('puzzle.averageRating', sortOrder); - break; - case dto_1.SortBy.PLAYS: - queryBuilder.orderBy('puzzle.attempts', sortOrder); - break; - case dto_1.SortBy.COMPLETION_RATE: - queryBuilder.orderBy('puzzle.completions', sortOrder); - break; - default: - queryBuilder.orderBy('puzzle.createdAt', sortOrder); - } - } - async enhanceWithStats(puzzles) { - return puzzles.map(puzzle => ({ - ...puzzle, - totalPlays: puzzle.attempts, - uniquePlayers: 0, - completionRate: puzzle.attempts > 0 ? (puzzle.completions / puzzle.attempts) * 100 : 0, - averageRating: puzzle.averageRating, - averageCompletionTime: puzzle.averageCompletionTime - })); - } - async executeBulkAction(puzzleId, bulkUpdateDto, userId) { - const { action, value } = bulkUpdateDto; - switch (action) { - case dto_1.BulkAction.PUBLISH: - await this.puzzleRepository.update(puzzleId, { publishedAt: new Date() }); - break; - case dto_1.BulkAction.UNPUBLISH: - await this.puzzleRepository.update(puzzleId, { publishedAt: undefined }); - break; - case dto_1.BulkAction.ARCHIVE: - await this.puzzleRepository.softDelete(puzzleId); - break; - default: - throw new common_1.BadRequestException(`Unsupported bulk action: ${action}`); - } - } -}; -exports.PuzzlesService = PuzzlesService; -exports.PuzzlesService = PuzzlesService = PuzzlesService_1 = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(puzzle_entity_1.Puzzle)), - __param(1, (0, typeorm_1.InjectRepository)(puzzle_progress_entity_1.PuzzleProgress)), - __param(2, (0, typeorm_1.InjectRepository)(puzzle_rating_entity_1.PuzzleRating)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object]) -], PuzzlesService); - - -/***/ }), - -/***/ "./src/puzzles/services/community-puzzles.service.ts": -/*!***********************************************************!*\ - !*** ./src/puzzles/services/community-puzzles.service.ts ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var CommunityPuzzlesService_1; -var _a, _b, _c; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.CommunityPuzzlesService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const typeorm_2 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_puzzle_submission_entity_1 = __webpack_require__(/*! ../entities/user-puzzle-submission.entity */ "./src/puzzles/entities/user-puzzle-submission.entity.ts"); -const puzzle_rating_entity_1 = __webpack_require__(/*! ../entities/puzzle-rating.entity */ "./src/puzzles/entities/puzzle-rating.entity.ts"); -const puzzle_comment_entity_1 = __webpack_require__(/*! ../entities/puzzle-comment.entity */ "./src/puzzles/entities/puzzle-comment.entity.ts"); -let CommunityPuzzlesService = CommunityPuzzlesService_1 = class CommunityPuzzlesService { - constructor(submissionRepository, ratingRepository, commentRepository) { - this.submissionRepository = submissionRepository; - this.ratingRepository = ratingRepository; - this.commentRepository = commentRepository; - this.logger = new common_1.Logger(CommunityPuzzlesService_1.name); - } - async ratePuzzle(submissionId, userId, ratingDto) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId, status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED, allowRatings: true }, - }); - if (!submission) { - throw new Error('Puzzle not found or ratings not allowed'); - } - const existingRating = await this.ratingRepository.findOne({ - where: { puzzleId: submissionId, userId }, - }); - if (existingRating) { - Object.assign(existingRating, ratingDto); - existingRating.lastEditedAt = new Date(); - const updatedRating = await this.ratingRepository.save(existingRating); - await this.updatePuzzleRatingStats(submissionId); - return updatedRating; - } - else { - const newRating = new puzzle_rating_entity_1.PuzzleRating(); - newRating.submissionId = submissionId; - newRating.userId = userId; - newRating.rating = ratingDto.rating; - newRating.review = ratingDto.review; - newRating.metadata = ratingDto.metadata || {}; - newRating.isPublic = true; - newRating.isReported = false; - newRating.tags = []; - const savedRating = await this.ratingRepository.save(newRating); - await this.updatePuzzleRatingStats(submissionId); - return savedRating; - } - } - async getUserRating(submissionId, userId) { - return await this.ratingRepository.findOne({ - where: { submissionId, userId }, - }); - } - async getPuzzleRatings(submissionId, page = 1, limit = 20) { - const [ratings, total] = await this.ratingRepository.findAndCount({ - where: { submissionId }, - order: { createdAt: 'DESC' }, - skip: (page - 1) * limit, - take: limit, - relations: ['user'], - }); - return { - ratings, - total, - page, - totalPages: Math.ceil(total / limit), - }; - } - async updatePuzzleRatingStats(submissionId) { - const ratings = await this.ratingRepository.find({ - where: { submissionId }, - }); - if (ratings.length === 0) - return; - const averageRating = ratings.reduce((sum, rating) => sum + rating.rating, 0) / ratings.length; - await this.submissionRepository.update(submissionId, { - averageRating, - ratingCount: ratings.length, - }); - } - async createComment(submissionId, userId, commentDto) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId, status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED, allowComments: true }, - }); - if (!submission) { - throw new Error('Puzzle not found or comments not allowed'); - } - let isFromCreator = false; - if (commentDto.parentId) { - const parentComment = await this.commentRepository.findOne({ - where: { id: commentDto.parentId, submissionId }, - }); - if (!parentComment) { - throw new Error('Parent comment not found'); - } - await this.commentRepository.increment({ id: commentDto.parentId }, 'replyCount', 1); - } - else { - isFromCreator = submission.userId === userId; - } - const comment = this.commentRepository.create({ - submissionId, - userId, - ...commentDto, - isFromCreator, - status: puzzle_comment_entity_1.PuzzleCommentStatus.ACTIVE, - }); - const savedComment = await this.commentRepository.save(comment); - await this.submissionRepository.update(submissionId, { - lastActivityAt: new Date(), - }); - return savedComment; - } - async updateComment(commentId, userId, updateDto) { - const comment = await this.commentRepository.findOne({ - where: { id: commentId, userId }, - }); - if (!comment) { - throw new Error('Comment not found'); - } - if (comment.status !== puzzle_comment_entity_1.PuzzleCommentStatus.ACTIVE) { - throw new Error('Cannot edit non-active comments'); - } - Object.assign(comment, updateDto); - comment.metadata = { - ...comment.metadata, - editedAt: new Date(), - editCount: (comment.metadata.editCount || 0) + 1, - }; - return await this.commentRepository.save(comment); - } - async deleteComment(commentId, userId) { - const comment = await this.commentRepository.findOne({ - where: { id: commentId, userId }, - }); - if (!comment) { - throw new Error('Comment not found'); - } - comment.status = puzzle_comment_entity_1.PuzzleCommentStatus.DELETED; - await this.commentRepository.save(comment); - if (comment.parentId) { - await this.commentRepository.decrement({ id: comment.parentId }, 'replyCount', 1); - } - } - async voteOnComment(commentId, userId, voteDto) { - const comment = await this.commentRepository.findOne({ - where: { id: commentId, status: puzzle_comment_entity_1.PuzzleCommentStatus.ACTIVE }, - }); - if (!comment) { - throw new Error('Comment not found'); - } - if (voteDto.voteType === 'upvote') { - await this.commentRepository.increment({ id: commentId }, 'upvotes', 1); - } - else { - await this.commentRepository.increment({ id: commentId }, 'downvotes', 1); - } - return await this.commentRepository.findOne({ where: { id: commentId } }); - } - async getPuzzleComments(submissionId, page = 1, limit = 20) { - const [comments, total] = await this.commentRepository.findAndCount({ - where: { - submissionId, - status: puzzle_comment_entity_1.PuzzleCommentStatus.ACTIVE, - parentId: null, - }, - order: { - isPinned: 'DESC', - upvotes: 'DESC', - createdAt: 'DESC', - }, - relations: ['user', 'replies'], - skip: (page - 1) * limit, - take: limit, - }); - return { - comments, - total, - page, - totalPages: Math.ceil(total / limit), - }; - } - async sharePuzzle(submissionId, userId, shareDto) { - const submission = await this.submissionRepository.findOne({ - where: { - id: submissionId, - status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED, - isPublic: true, - }, - }); - if (!submission) { - throw new Error('Puzzle not found or not shareable'); - } - const baseUrl = process.env.FRONTEND_URL || 'https://quest-game.com'; - const puzzleUrl = `${baseUrl}/puzzles/${submissionId}`; - const shareableLink = submission.sharingSettings?.shareableLink - ? `${baseUrl}/shared/${submission.sharingSettings.shareableLink}` - : puzzleUrl; - const result = { - shareUrl: shareableLink, - socialUrls: {}, - }; - if (shareDto.shareType === 'social' || !shareDto.shareType) { - const encodedUrl = encodeURIComponent(shareableLink); - const encodedTitle = encodeURIComponent(submission.title); - const encodedMessage = encodeURIComponent(shareDto.customMessage || `Check out this puzzle: ${submission.title}`); - result.socialUrls = { - twitter: `https://twitter.com/intent/tweet?url=${encodedUrl}&text=${encodedMessage}`, - facebook: `https://www.facebook.com/sharer/sharer.php?u=${encodedUrl}`, - reddit: `https://reddit.com/submit?url=${encodedUrl}&title=${encodedTitle}`, - discord: encodedUrl, - whatsapp: `https://wa.me/?text=${encodedMessage}%20${encodedUrl}`, - }; - } - if (submission.sharingSettings?.embeddable && shareDto.shareType === 'embed') { - result.embedCode = ``; - } - await this.trackShare(submissionId, userId, shareDto); - return result; - } - async trackShare(submissionId, userId, shareDto) { - this.logger.log(`Puzzle ${submissionId} shared by user ${userId} via ${shareDto.shareType}`); - } - async getShareStats(submissionId) { - return { - totalShares: 0, - sharesByPlatform: {}, - recentShares: [], - }; - } - async getTopCreators(limit = 10) { - const query = this.submissionRepository - .createQueryBuilder('submission') - .select([ - 'submission.userId', - 'COUNT(submission.id) as totalPuzzles', - 'AVG(submission.averageRating) as averageRating', - 'SUM(submission.playCount) as totalPlays', - ]) - .where('submission.status = :status', { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED }) - .andWhere('submission.isPublic = :isPublic', { isPublic: true }) - .groupBy('submission.userId') - .orderBy('totalPlays', 'DESC') - .limit(limit); - const results = await query.getRawMany(); - return results.map((result, index) => ({ - userId: result.submission_userId, - username: `user_${result.submission_userId}`, - totalPuzzles: parseInt(result.totalPuzzles), - averageRating: parseFloat(result.averageRating) || 0, - totalPlays: parseInt(result.totalPlays) || 0, - followers: 0, - })); - } - async reportPuzzle(submissionId, userId, reason, category) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId }, - }); - if (!submission) { - throw new Error('Puzzle not found'); - } - if (submission.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED) { - submission.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.UNDER_REVIEW; - submission.moderationData = { - ...submission.moderationData, - action: 'pending_review', - flaggedContent: [reason], - }; - await this.submissionRepository.save(submission); - } - this.logger.log(`Puzzle ${submissionId} reported by user ${userId}: ${reason}`); - } - async reportComment(commentId, userId, reason) { - const comment = await this.commentRepository.findOne({ - where: { id: commentId }, - }); - if (!comment) { - throw new Error('Comment not found'); - } - comment.moderationFlags = { - ...comment.moderationFlags, - reportedBy: [...(comment.moderationFlags.reportedBy || []), userId], - reportReasons: [...(comment.moderationFlags.reportReasons || []), reason], - autoFlagged: true, - }; - if (comment.moderationFlags.reportedBy.length >= 3) { - comment.status = puzzle_comment_entity_1.PuzzleCommentStatus.FLAGGED; - } - await this.commentRepository.save(comment); - this.logger.log(`Comment ${commentId} reported by user ${userId}: ${reason}`); - } -}; -exports.CommunityPuzzlesService = CommunityPuzzlesService; -exports.CommunityPuzzlesService = CommunityPuzzlesService = CommunityPuzzlesService_1 = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(user_puzzle_submission_entity_1.UserPuzzleSubmission)), - __param(1, (0, typeorm_1.InjectRepository)(puzzle_rating_entity_1.PuzzleRating)), - __param(2, (0, typeorm_1.InjectRepository)(puzzle_comment_entity_1.PuzzleComment)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object]) -], CommunityPuzzlesService); - - -/***/ }), - -/***/ "./src/puzzles/services/creator-rewards.service.ts": -/*!*********************************************************!*\ - !*** ./src/puzzles/services/creator-rewards.service.ts ***! - \*********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var CreatorRewardsService_1; -var _a, _b; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.CreatorRewardsService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const typeorm_2 = __webpack_require__(/*! typeorm */ "typeorm"); -const schedule_1 = __webpack_require__(/*! @nestjs/schedule */ "@nestjs/schedule"); -const user_puzzle_submission_entity_1 = __webpack_require__(/*! ../entities/user-puzzle-submission.entity */ "./src/puzzles/entities/user-puzzle-submission.entity.ts"); -let CreatorRewardsService = CreatorRewardsService_1 = class CreatorRewardsService { - constructor(submissionRepository) { - this.submissionRepository = submissionRepository; - this.logger = new common_1.Logger(CreatorRewardsService_1.name); - this.creatorLevels = [ - { - level: 1, - title: 'Novice Creator', - minPoints: 0, - benefits: ['Basic creator tools', 'Community support'], - badge: 'bronze', - }, - { - level: 2, - title: 'Apprentice Creator', - minPoints: 100, - benefits: ['Advanced analytics', 'Priority support'], - badge: 'bronze', - }, - { - level: 3, - title: 'Journeyman Creator', - minPoints: 500, - benefits: ['Custom themes', 'Enhanced visibility'], - badge: 'silver', - }, - { - level: 4, - title: 'Expert Creator', - minPoints: 1500, - benefits: ['Monetization tools', 'Creator marketplace'], - badge: 'silver', - }, - { - level: 5, - title: 'Master Creator', - minPoints: 5000, - benefits: ['Premium features', 'Revenue sharing'], - badge: 'gold', - }, - { - level: 6, - title: 'Legendary Creator', - minPoints: 15000, - benefits: ['Exclusive content', 'Partner program'], - badge: 'platinum', - }, - ]; - } - async processRewardEvent(event) { - const creatorStats = await this.getCreatorStats(event.userId); - await this.addPointsToCreator(event.userId, event.points); - await this.checkLevelUp(event.userId, creatorStats); - await this.checkAchievements(event.userId, event); - await this.updateMonthlyEarnings(event.userId, event.points); - this.logger.log(`Processed reward event for user ${event.userId}: +${event.points} points`); - } - async onPuzzlePlayed(submissionId, userId) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId }, - }); - if (!submission || !submission.userId) - return; - if (submission.userId === userId) - return; - const points = this.calculatePlayPoints(submission); - await this.processRewardEvent({ - type: 'puzzle_play', - userId: submission.userId, - submissionId, - points, - metadata: { - playedBy: userId, - puzzleRating: submission.averageRating, - }, - }); - } - async onPuzzleRated(submissionId, rating, userId) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId }, - }); - if (!submission || !submission.userId) - return; - if (submission.userId === userId) - return; - const points = this.calculateRatingPoints(rating); - await this.processRewardEvent({ - type: 'puzzle_rating', - userId: submission.userId, - submissionId, - points, - metadata: { - rating, - ratedBy: userId, - }, - }); - } - async onPuzzleFeatured(submissionId, featuredBy) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId }, - }); - if (!submission || !submission.userId) - return; - const points = this.calculateFeaturedPoints(submission); - await this.processRewardEvent({ - type: 'puzzle_featured', - userId: submission.userId, - submissionId, - points, - metadata: { - featuredBy, - featuredAt: new Date(), - }, - }); - const currentFeaturedCount = submission.rewardData?.featuredCount || 0; - submission.rewardData = { - ...submission.rewardData, - featuredCount: currentFeaturedCount + 1, - }; - await this.submissionRepository.save(submission); - } - async onPuzzleShared(submissionId, platform, userId) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId }, - }); - if (!submission || !submission.userId) - return; - const points = this.calculateSharePoints(platform); - await this.processRewardEvent({ - type: 'puzzle_shared', - userId: submission.userId, - submissionId, - points, - metadata: { - platform, - sharedBy: userId, - }, - }); - } - async getCreatorStats(userId) { - const submissions = await this.submissionRepository.find({ - where: { userId }, - }); - const publishedPuzzles = submissions.filter(s => s.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED); - const featuredPuzzles = submissions.filter(s => s.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED); - const totalPlays = publishedPuzzles.reduce((sum, s) => sum + s.playCount, 0); - const averageRating = publishedPuzzles.length > 0 - ? publishedPuzzles.reduce((sum, s) => sum + s.averageRating, 0) / publishedPuzzles.length - : 0; - const totalPoints = await this.getTotalPoints(userId); - const currentLevel = this.getCreatorLevel(totalPoints); - const nextLevel = this.creatorLevels[currentLevel.level + 1] || this.creatorLevels[currentLevel.level]; - return { - userId, - totalPoints, - currentLevel: currentLevel.level, - totalPuzzles: submissions.length, - publishedPuzzles: publishedPuzzles.length, - featuredPuzzles: featuredPuzzles.length, - totalPlays, - averageRating, - monthlyEarnings: await this.getMonthlyEarnings(userId), - achievements: await this.getCreatorAchievements(userId), - nextLevelPoints: nextLevel.minPoints, - pointsToNextLevel: Math.max(0, nextLevel.minPoints - totalPoints), - }; - } - async getLeaderboard(limit = 50, timeframe = 'all') { - let dateFilter = {}; - if (timeframe === 'week') { - const oneWeekAgo = new Date(); - oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); - dateFilter = { createdAt: (0, typeorm_2.Between)(oneWeekAgo, new Date()) }; - } - else if (timeframe === 'month') { - const oneMonthAgo = new Date(); - oneMonthAgo.setMonth(oneMonthAgo.getMonth() - 1); - dateFilter = { createdAt: (0, typeorm_2.Between)(oneMonthAgo, new Date()) }; - } - const query = this.submissionRepository - .createQueryBuilder('submission') - .select([ - 'submission.userId', - 'COUNT(submission.id) as puzzleCount', - 'SUM(submission.playCount) as totalPlays', - 'AVG(submission.averageRating) as avgRating', - ]) - .where('submission.status = :status', { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED }) - .groupBy('submission.userId') - .orderBy('totalPlays', 'DESC') - .limit(limit); - const results = await query.getRawMany(); - return results.map((result, index) => { - const points = this.calculatePointsFromStats(result); - const level = this.getCreatorLevel(points); - return { - userId: result.submission_userId, - username: `creator_${result.submission_userId}`, - points, - level: level.level, - title: level.title, - badge: level.badge, - rank: index + 1, - }; - }); - } - async getTopCreators(limit = 10) { - const query = this.submissionRepository - .createQueryBuilder('submission') - .select([ - 'submission.userId', - 'COUNT(CASE WHEN submission.status = :published THEN 1 END) as publishedCount', - 'COUNT(CASE WHEN submission.status = :featured THEN 1 END) as featuredCount', - 'SUM(submission.playCount) as totalPlays', - 'AVG(submission.averageRating) as avgRating', - ]) - .setParameter('published', user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED) - .setParameter('featured', user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED) - .where('submission.status IN (:...statuses)', { - statuses: [user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED, user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED] - }) - .groupBy('submission.userId') - .having('publishedCount > 0') - .orderBy('totalPlays', 'DESC') - .limit(limit); - const results = await query.getRawMany(); - return results.map((result) => { - const points = this.calculatePointsFromStats(result); - const level = this.getCreatorLevel(points); - return { - userId: result.submission_userId, - username: `creator_${result.submission_userId}`, - totalPuzzles: parseInt(result.publishedCount) || 0, - featuredPuzzles: parseInt(result.featuredCount) || 0, - totalPlays: parseInt(result.totalPlays) || 0, - averageRating: parseFloat(result.avgRating) || 0, - level: level.level, - badge: level.badge, - }; - }); - } - async processMonthlyRewards() { - this.logger.log('Processing monthly creator rewards'); - try { - const topCreators = await this.getLeaderboard(100, 'month'); - for (let i = 0; i < topCreators.length; i++) { - const creator = topCreators[i]; - const bonusPoints = this.calculateMonthlyBonus(i + 1, creator.points); - await this.processRewardEvent({ - type: 'milestone_reached', - userId: creator.userId, - points: bonusPoints, - metadata: { - milestone: 'monthly_top_creator', - rank: i + 1, - timeframe: 'month', - }, - }); - } - this.logger.log(`Processed monthly rewards for ${topCreators.length} creators`); - } - catch (error) { - this.logger.error('Error processing monthly rewards:', error); - } - } - calculatePlayPoints(submission) { - let points = 1; - if (submission.averageRating >= 4.5) - points += 2; - else if (submission.averageRating >= 4.0) - points += 1; - if (submission.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED) - points += 3; - if (submission.difficulty === 'expert') - points += 2; - else if (submission.difficulty === 'hard') - points += 1; - return Math.min(points, 10); - } - calculateRatingPoints(rating) { - if (rating === 5) - return 10; - if (rating === 4) - return 5; - if (rating === 3) - return 2; - return 0; - } - calculateFeaturedPoints(submission) { - let points = 50; - if (submission.averageRating >= 4.5) - points += 25; - else if (submission.averageRating >= 4.0) - points += 15; - if (submission.playCount >= 1000) - points += 25; - else if (submission.playCount >= 500) - points += 15; - else if (submission.playCount >= 100) - points += 5; - return points; - } - calculateSharePoints(platform) { - const platformPoints = { - twitter: 3, - facebook: 2, - reddit: 5, - discord: 4, - whatsapp: 1, - link: 1, - embed: 2, - }; - return platformPoints[platform] || 1; - } - calculateMonthlyBonus(rank, points) { - if (rank === 1) - return 1000; - if (rank === 2) - return 500; - if (rank === 3) - return 250; - if (rank <= 10) - return 100; - if (rank <= 25) - return 50; - if (rank <= 50) - return 25; - if (rank <= 100) - return 10; - return 0; - } - calculatePointsFromStats(stats) { - let points = 0; - points += Math.floor((stats.totalPlays || 0) / 10); - points += (stats.avgRating || 0) * (stats.puzzleCount || 0) * 5; - points += (stats.featuredCount || 0) * 50; - points += (stats.publishedCount || 0) * 10; - return points; - } - getCreatorLevel(points) { - for (let i = this.creatorLevels.length - 1; i >= 0; i--) { - if (points >= this.creatorLevels[i].minPoints) { - return this.creatorLevels[i]; - } - } - return this.creatorLevels[0]; - } - async addPointsToCreator(userId, points) { - this.logger.log(`Added ${points} points to creator ${userId}`); - } - async getTotalPoints(userId) { - const submissions = await this.submissionRepository.find({ - where: { userId }, - }); - return this.calculatePointsFromStats({ - totalPlays: submissions.reduce((sum, s) => sum + s.playCount, 0), - avgRating: submissions.reduce((sum, s) => sum + s.averageRating, 0) / submissions.length || 0, - puzzleCount: submissions.filter(s => s.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED).length, - featuredCount: submissions.filter(s => s.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED).length, - }); - } - async checkLevelUp(userId, currentStats) { - const currentLevel = this.getCreatorLevel(currentStats.totalPoints); - if (currentStats.currentLevel < currentLevel.level) { - await this.processRewardEvent({ - type: 'milestone_reached', - userId, - points: currentLevel.minPoints - this.creatorLevels[currentStats.currentLevel - 1]?.minPoints || 0, - metadata: { - milestone: 'level_up', - newLevel: currentLevel.level, - newTitle: currentLevel.title, - }, - }); - this.logger.log(`Creator ${userId} leveled up to ${currentLevel.title} (Level ${currentLevel.level})`); - } - } - async checkAchievements(userId, event) { - const achievements = []; - if (event.type === 'puzzle_play') { - const totalPlays = await this.getTotalPlays(userId); - if (totalPlays >= 1000) - achievements.push('Puzzle Master - 1000 Plays'); - if (totalPlays >= 5000) - achievements.push('Puzzle Legend - 5000 Plays'); - } - if (event.type === 'puzzle_featured') { - const featuredCount = await this.getFeaturedCount(userId); - if (featuredCount >= 1) - achievements.push('Featured Creator'); - if (featuredCount >= 5) - achievements.push('Star Creator'); - if (featuredCount >= 10) - achievements.push('Superstar Creator'); - } - for (const achievement of achievements) { - await this.processRewardEvent({ - type: 'milestone_reached', - userId, - points: 25, - metadata: { - milestone: 'achievement', - achievement, - }, - }); - } - } - async updateMonthlyEarnings(userId, points) { - const currentMonth = new Date().toISOString().slice(0, 7); - this.logger.log(`Updated monthly earnings for ${userId}: +${points} points for ${currentMonth}`); - } - async getMonthlyEarnings(userId) { - return {}; - } - async getCreatorAchievements(userId) { - return []; - } - async getTotalPlays(userId) { - const submissions = await this.submissionRepository.find({ - where: { userId, status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED }, - }); - return submissions.reduce((sum, s) => sum + s.playCount, 0); - } - async getFeaturedCount(userId) { - const submissions = await this.submissionRepository.find({ - where: { userId, status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED }, - }); - return submissions.length; - } -}; -exports.CreatorRewardsService = CreatorRewardsService; -__decorate([ - (0, schedule_1.Cron)('0 0 1 * *'), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", typeof (_b = typeof Promise !== "undefined" && Promise) === "function" ? _b : Object) -], CreatorRewardsService.prototype, "processMonthlyRewards", null); -exports.CreatorRewardsService = CreatorRewardsService = CreatorRewardsService_1 = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(user_puzzle_submission_entity_1.UserPuzzleSubmission)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object]) -], CreatorRewardsService); - - -/***/ }), - -/***/ "./src/puzzles/services/featured-puzzles.service.ts": -/*!**********************************************************!*\ - !*** ./src/puzzles/services/featured-puzzles.service.ts ***! - \**********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var FeaturedPuzzlesService_1; -var _a, _b, _c; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.FeaturedPuzzlesService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const typeorm_2 = __webpack_require__(/*! typeorm */ "typeorm"); -const schedule_1 = __webpack_require__(/*! @nestjs/schedule */ "@nestjs/schedule"); -const user_puzzle_submission_entity_1 = __webpack_require__(/*! ../entities/user-puzzle-submission.entity */ "./src/puzzles/entities/user-puzzle-submission.entity.ts"); -let FeaturedPuzzlesService = FeaturedPuzzlesService_1 = class FeaturedPuzzlesService { - constructor(submissionRepository) { - this.submissionRepository = submissionRepository; - this.logger = new common_1.Logger(FeaturedPuzzlesService_1.name); - } - async rotateFeaturedPuzzles() { - this.logger.log('Starting daily featured puzzle rotation'); - try { - await this.unfeatureExpiredPuzzles(); - await this.selectNewFeaturedPuzzles(); - this.logger.log('Completed daily featured puzzle rotation'); - } - catch (error) { - this.logger.error('Error during featured puzzle rotation:', error); - } - } - async weeklyFeatureSelection() { - this.logger.log('Starting weekly featured puzzle selection'); - try { - await this.selectWeeklyFeaturedPuzzles(); - this.logger.log('Completed weekly featured puzzle selection'); - } - catch (error) { - this.logger.error('Error during weekly featured selection:', error); - } - } - async getFeaturedPuzzles(limit = 10) { - return await this.submissionRepository.find({ - where: { - status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED, - isPublic: true, - }, - order: { featuredAt: 'DESC' }, - take: limit, - relations: ['user'], - }); - } - async getFeaturedPuzzlesByCategory(category, limit = 5) { - return await this.submissionRepository.find({ - where: { - status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED, - isPublic: true, - category, - }, - order: { featuredAt: 'DESC' }, - take: limit, - relations: ['user'], - }); - } - async manuallyFeaturePuzzle(submissionId, adminId) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId }, - }); - if (!submission) { - throw new Error('Puzzle submission not found'); - } - if (submission.status !== user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED) { - throw new Error('Only published puzzles can be featured'); - } - submission.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED; - submission.featuredAt = new Date(); - submission.moderationData = { - ...submission.moderationData, - reviewedBy: adminId, - reviewedAt: new Date(), - reviewNotes: 'Manually featured by admin', - }; - await this.submissionRepository.save(submission); - await this.updateCreatorRewards(submission.userId, 'featured'); - this.logger.log(`Puzzle ${submissionId} manually featured by admin ${adminId}`); - return submission; - } - async unfeaturePuzzle(submissionId, adminId) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId }, - }); - if (!submission) { - throw new Error('Puzzle submission not found'); - } - if (submission.status !== user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED) { - throw new Error('Puzzle is not currently featured'); - } - submission.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED; - submission.featuredAt = null; - await this.submissionRepository.save(submission); - this.logger.log(`Puzzle ${submissionId} unfeatured by admin ${adminId}`); - return submission; - } - async unfeatureExpiredPuzzles() { - const thirtyDaysAgo = new Date(); - thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30); - const expiredFeatured = await this.submissionRepository.find({ - where: { - status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED, - featuredAt: (0, typeorm_2.LessThan)(thirtyDaysAgo), - }, - }); - for (const puzzle of expiredFeatured) { - puzzle.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED; - puzzle.featuredAt = null; - await this.submissionRepository.save(puzzle); - } - this.logger.log(`Unfeatured ${expiredFeatured.length} expired puzzles`); - } - async selectNewFeaturedPuzzles() { - const criteria = { - minRating: 4.0, - minPlays: 50, - minAge: 7, - maxAge: 90, - maxFromSameCreator: 2, - diversityWeight: 0.3, - }; - const candidates = await this.findFeaturedCandidates(criteria); - const selected = await this.selectDiversePuzzles(candidates, criteria, 5); - for (const puzzle of selected) { - puzzle.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED; - puzzle.featuredAt = new Date(); - await this.submissionRepository.save(puzzle); - } - this.logger.log(`Selected ${selected.length} new featured puzzles`); - } - async selectWeeklyFeaturedPuzzles() { - const oneWeekAgo = new Date(); - oneWeekAgo.setDate(oneWeekAgo.getDate() - 7); - const topPerformers = await this.submissionRepository - .createQueryBuilder('puzzle') - .where('puzzle.status = :status', { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED }) - .andWhere('puzzle.isPublic = :isPublic', { isPublic: true }) - .andWhere('puzzle.publishedAt >= :oneWeekAgo', { oneWeekAgo }) - .andWhere('puzzle.averageRating >= :minRating', { minRating: 4.5 }) - .andWhere('puzzle.playCount >= :minPlays', { minPlays: 100 }) - .orderBy('puzzle.communityScore', 'DESC') - .addOrderBy('puzzle.averageRating', 'DESC') - .addOrderBy('puzzle.playCount', 'DESC') - .take(3) - .getMany(); - for (const puzzle of topPerformers) { - if (puzzle.status !== user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED) { - puzzle.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED; - puzzle.featuredAt = new Date(); - await this.submissionRepository.save(puzzle); - } - } - this.logger.log(`Featured ${topPerformers.length} top weekly performers`); - } - async findFeaturedCandidates(criteria) { - const minDate = new Date(); - minDate.setDate(minDate.getDate() - criteria.maxAge); - const maxDate = new Date(); - maxDate.setDate(maxDate.getDate() - criteria.minAge); - let query = this.submissionRepository - .createQueryBuilder('puzzle') - .where('puzzle.status = :status', { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED }) - .andWhere('puzzle.isPublic = :isPublic', { isPublic: true }) - .andWhere('puzzle.averageRating >= :minRating', { minRating: criteria.minRating }) - .andWhere('puzzle.playCount >= :minPlays', { minPlays: criteria.minPlays }) - .andWhere('puzzle.publishedAt BETWEEN :minDate AND :maxDate', { minDate, maxDate }); - if (criteria.categories && criteria.categories.length > 0) { - query = query.andWhere('puzzle.category IN (:...categories)', { categories: criteria.categories }); - } - if (criteria.excludeCreators && criteria.excludeCreators.length > 0) { - query = query.andWhere('puzzle.userId NOT IN (:...excludeCreators)', { excludeCreators: criteria.excludeCreators }); - } - return await query - .orderBy('puzzle.communityScore', 'DESC') - .addOrderBy('puzzle.averageRating', 'DESC') - .addOrderBy('puzzle.playCount', 'DESC') - .getMany(); - } - async selectDiversePuzzles(candidates, criteria, maxSelections) { - const selected = []; - const creatorCounts = {}; - const categoryCounts = {}; - const sortedCandidates = candidates.sort((a, b) => { - const scoreA = this.calculateFeaturedScore(a, criteria); - const scoreB = this.calculateFeaturedScore(b, criteria); - return scoreB - scoreA; - }); - for (const candidate of sortedCandidates) { - if (selected.length >= maxSelections) - break; - const creatorCount = creatorCounts[candidate.userId] || 0; - if (creatorCount >= criteria.maxFromSameCreator) - continue; - if (criteria.diversityWeight > 0.5) { - const categoryCount = categoryCounts[candidate.category] || 0; - const maxCategoryCount = Math.ceil(maxSelections / 5); - if (categoryCount >= maxCategoryCount) - continue; - } - selected.push(candidate); - creatorCounts[candidate.userId] = creatorCount + 1; - categoryCounts[candidate.category] = (categoryCounts[candidate.category] || 0) + 1; - } - return selected; - } - calculateFeaturedScore(puzzle, criteria) { - let score = 0; - score += puzzle.averageRating * 25; - score += Math.min(puzzle.playCount / 100, 10) * 15; - score += puzzle.communityScore * 20; - const daysSincePublication = Math.floor((Date.now() - puzzle.publishedAt.getTime()) / (1000 * 60 * 60 * 24)); - const recencyBonus = Math.max(0, 10 - (daysSincePublication / 10)); - score += recencyBonus * 10; - if (puzzle.ratingCount >= 10) - score += 5; - if (puzzle.ratingCount >= 50) - score += 5; - if (puzzle.averageCompletionRate && puzzle.averageCompletionRate > 0.7) - score += 5; - const categoryBonus = this.getCategoryDiversityBonus(puzzle.category); - score += categoryBonus * criteria.diversityWeight * 10; - return score; - } - getCategoryDiversityBonus(category) { - const commonCategories = ['logic', 'math', 'pattern']; - return commonCategories.includes(category) ? 0 : 5; - } - async updateCreatorRewards(userId, rewardType) { - this.logger.log(`Updating rewards for user ${userId}: ${rewardType}`); - } - async getFeaturedPuzzleStats() { - const totalFeatured = await this.submissionRepository.count({ - where: { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED }, - }); - const currentlyFeatured = await this.submissionRepository.count({ - where: { - status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED, - isPublic: true, - }, - }); - const featuredByCategory = await this.submissionRepository - .createQueryBuilder('puzzle') - .select('puzzle.category', 'category') - .addSelect('COUNT(*)', 'count') - .where('puzzle.status = :status', { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED }) - .groupBy('puzzle.category') - .getRawMany(); - const categoryStats = {}; - featuredByCategory.forEach((row) => { - categoryStats[row.category] = parseInt(row.count); - }); - const averageRatingResult = await this.submissionRepository - .createQueryBuilder('puzzle') - .select('AVG(puzzle.averageRating)', 'avgRating') - .where('puzzle.status = :status', { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED }) - .getRawOne(); - const averageFeaturedRating = parseFloat(averageRatingResult.avgRating) || 0; - const ageDistribution = await this.getFeaturedAgeDistribution(); - return { - totalFeatured, - currentlyFeatured, - featuredByCategory: categoryStats, - averageFeaturedRating, - featuredAgeDistribution: ageDistribution, - }; - } - async getFeaturedAgeDistribution() { - const now = new Date(); - const distributions = { - '0-7 days': 0, - '8-14 days': 0, - '15-30 days': 0, - '30+ days': 0, - }; - const featuredPuzzles = await this.submissionRepository.find({ - where: { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED }, - select: ['featuredAt'], - }); - featuredPuzzles.forEach(puzzle => { - if (!puzzle.featuredAt) - return; - const daysFeatured = Math.floor((now.getTime() - puzzle.featuredAt.getTime()) / (1000 * 60 * 60 * 24)); - if (daysFeatured <= 7) - distributions['0-7 days']++; - else if (daysFeatured <= 14) - distributions['8-14 days']++; - else if (daysFeatured <= 30) - distributions['15-30 days']++; - else - distributions['30+ days']++; - }); - return distributions; - } - async getFeaturedSchedule() { - return { - daily: 5, - weekly: 3, - monthly: 10, - }; - } - async updateFeaturedSchedule(schedule) { - this.logger.log('Updated featured puzzle rotation schedule:', schedule); - } -}; -exports.FeaturedPuzzlesService = FeaturedPuzzlesService; -__decorate([ - (0, schedule_1.Cron)(schedule_1.CronExpression.EVERY_DAY_AT_MIDNIGHT), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", typeof (_b = typeof Promise !== "undefined" && Promise) === "function" ? _b : Object) -], FeaturedPuzzlesService.prototype, "rotateFeaturedPuzzles", null); -__decorate([ - (0, schedule_1.Cron)('0 2 * * 0'), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", typeof (_c = typeof Promise !== "undefined" && Promise) === "function" ? _c : Object) -], FeaturedPuzzlesService.prototype, "weeklyFeatureSelection", null); -exports.FeaturedPuzzlesService = FeaturedPuzzlesService = FeaturedPuzzlesService_1 = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(user_puzzle_submission_entity_1.UserPuzzleSubmission)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object]) -], FeaturedPuzzlesService); - - -/***/ }), - -/***/ "./src/puzzles/services/puzzle-moderation.service.ts": -/*!***********************************************************!*\ - !*** ./src/puzzles/services/puzzle-moderation.service.ts ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var PuzzleModerationService_1; -var _a, _b; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PuzzleModerationService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const typeorm_2 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_puzzle_submission_entity_1 = __webpack_require__(/*! ../entities/user-puzzle-submission.entity */ "./src/puzzles/entities/user-puzzle-submission.entity.ts"); -const puzzle_validation_service_1 = __webpack_require__(/*! ./puzzle-validation.service */ "./src/puzzles/services/puzzle-validation.service.ts"); -let PuzzleModerationService = PuzzleModerationService_1 = class PuzzleModerationService { - constructor(submissionRepository, validationService) { - this.submissionRepository = submissionRepository; - this.validationService = validationService; - this.logger = new common_1.Logger(PuzzleModerationService_1.name); - } - async submitForReview(submissionId, userId, reviewData) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId, userId }, - }); - if (!submission) { - throw new Error('Puzzle submission not found'); - } - if (submission.status !== user_puzzle_submission_entity_1.PuzzleSubmissionStatus.DRAFT) { - throw new Error('Only draft submissions can be submitted for review'); - } - const validationResults = await this.validationService.validatePuzzle(submission); - const duplicateCheck = await this.validationService.checkForDuplicates(submission); - submission.validationResults = validationResults; - submission.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.SUBMITTED; - submission.submittedAt = new Date(); - if (validationResults.isValid && !duplicateCheck.isDuplicate && validationResults.score >= 85) { - submission.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.APPROVED; - submission.moderationData = { - action: user_puzzle_submission_entity_1.ModerationAction.AUTO_APPROVED, - autoApprovalScore: validationResults.score, - qualityScore: validationResults.automatedChecks.contentQuality, - }; - } - else if (duplicateCheck.isDuplicate) { - submission.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.REJECTED; - submission.moderationData = { - action: user_puzzle_submission_entity_1.ModerationAction.REJECTED_DUPLICATE, - reviewNotes: `Duplicate of: ${duplicateCheck.similarPuzzles.map(p => p.title).join(', ')}`, - }; - } - else { - submission.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.UNDER_REVIEW; - submission.moderationData = { - action: user_puzzle_submission_entity_1.ModerationAction.PENDING_REVIEW, - autoApprovalScore: validationResults.score, - qualityScore: validationResults.automatedChecks.contentQuality, - requiredChanges: validationResults.errors.length > 0 ? validationResults.errors : undefined, - }; - } - await this.submissionRepository.save(submission); - this.logger.log(`Puzzle ${submissionId} submitted for review with status: ${submission.status}`); - return submission; - } - async getModerationQueue(status, page = 1, limit = 20) { - const where = status ? { status } : {}; - const [submissions, total] = await this.submissionRepository.findAndCount({ - where, - order: { submittedAt: 'DESC' }, - skip: (page - 1) * limit, - take: limit, - relations: ['user'], - }); - return { - submissions, - total, - page, - totalPages: Math.ceil(total / limit), - }; - } - async moderatePuzzle(submissionId, moderatorId, decision) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId }, - relations: ['user'], - }); - if (!submission) { - throw new Error('Puzzle submission not found'); - } - if (submission.status !== user_puzzle_submission_entity_1.PuzzleSubmissionStatus.UNDER_REVIEW) { - throw new Error('Only submissions under review can be moderated'); - } - submission.moderationData = { - ...submission.moderationData, - action: decision.action, - reviewedBy: moderatorId, - reviewedAt: new Date(), - reviewNotes: decision.reviewNotes, - qualityScore: decision.qualityScore, - requiredChanges: decision.requiredChanges, - }; - switch (decision.action) { - case user_puzzle_submission_entity_1.ModerationAction.MANUALLY_APPROVED: - submission.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.APPROVED; - break; - case user_puzzle_submission_entity_1.ModerationAction.REJECTED_CONTENT: - case user_puzzle_submission_entity_1.ModerationAction.REJECTED_QUALITY: - case user_puzzle_submission_entity_1.ModerationAction.REJECTED_DUPLICATE: - case user_puzzle_submission_entity_1.ModerationAction.REJECTED_INAPPROPRIATE: - submission.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.REJECTED; - break; - case user_puzzle_submission_entity_1.ModerationAction.REQUIRES_CHANGES: - submission.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.DRAFT; - break; - default: - throw new Error(`Invalid moderation action: ${decision.action}`); - } - await this.submissionRepository.save(submission); - this.logger.log(`Puzzle ${submissionId} moderated by ${moderatorId} with action: ${decision.action}`); - return submission; - } - async publishPuzzle(submissionId, userId) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId, userId }, - }); - if (!submission) { - throw new Error('Puzzle submission not found'); - } - if (submission.status !== user_puzzle_submission_entity_1.PuzzleSubmissionStatus.APPROVED) { - throw new Error('Only approved puzzles can be published'); - } - submission.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED; - submission.publishedAt = new Date(); - submission.isPublic = true; - await this.submissionRepository.save(submission); - this.logger.log(`Puzzle ${submissionId} published by user ${userId}`); - return submission; - } - async getPendingModerationCount() { - return await this.submissionRepository.count({ - where: { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.UNDER_REVIEW }, - }); - } - async getModerationStats(timeframe = 'week') { - const now = new Date(); - let startDate; - switch (timeframe) { - case 'day': - startDate = new Date(now.getTime() - 24 * 60 * 60 * 1000); - break; - case 'week': - startDate = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000); - break; - case 'month': - startDate = new Date(now.getTime() - 30 * 24 * 60 * 60 * 1000); - break; - } - const submissions = await this.submissionRepository.find({ - where: { - submittedAt: (0, typeorm_2.Between)(startDate, now), - status: (0, typeorm_2.In)([user_puzzle_submission_entity_1.PuzzleSubmissionStatus.APPROVED, user_puzzle_submission_entity_1.PuzzleSubmissionStatus.REJECTED]), - }, - }); - const stats = { - total: submissions.length, - approved: submissions.filter(s => s.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.APPROVED).length, - rejected: submissions.filter(s => s.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.REJECTED).length, - autoApproved: submissions.filter(s => s.moderationData?.action === user_puzzle_submission_entity_1.ModerationAction.AUTO_APPROVED).length, - averageQualityScore: 0, - averageProcessingTime: 0, - }; - if (submissions.length > 0) { - const qualityScores = submissions - .map(s => s.moderationData?.qualityScore || 0) - .filter(score => score > 0); - stats.averageQualityScore = qualityScores.length > 0 - ? qualityScores.reduce((a, b) => a + b, 0) / qualityScores.length - : 0; - const processingTimes = submissions - .map(s => { - if (s.submittedAt && s.moderationData?.reviewedAt) { - return s.moderationData.reviewedAt.getTime() - s.submittedAt.getTime(); - } - return 0; - }) - .filter(time => time > 0); - stats.averageProcessingTime = processingTimes.length > 0 - ? processingTimes.reduce((a, b) => a + b, 0) / processingTimes.length - : 0; - } - return stats; - } - async flagInappropriateContent(submissionId, reporterId, reason) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId }, - }); - if (!submission) { - throw new Error('Puzzle submission not found'); - } - if (submission.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED) { - submission.status = user_puzzle_submission_entity_1.PuzzleSubmissionStatus.UNDER_REVIEW; - submission.moderationData = { - ...submission.moderationData, - action: user_puzzle_submission_entity_1.ModerationAction.PENDING_REVIEW, - flaggedContent: [...(submission.moderationData?.flaggedContent || []), reason], - }; - } - await this.submissionRepository.save(submission); - this.logger.log(`Puzzle ${submissionId} flagged by user ${reporterId}: ${reason}`); - return submission; - } - async getCreatorStats(userId) { - const submissions = await this.submissionRepository.find({ - where: { userId }, - }); - const published = submissions.filter(s => s.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED); - const featured = submissions.filter(s => s.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED); - const averageRating = published.length > 0 - ? published.reduce((sum, s) => sum + s.averageRating, 0) / published.length - : 0; - const totalPlays = published.reduce((sum, s) => sum + s.playCount, 0); - const acceptanceRate = submissions.length > 0 - ? (published.length / submissions.length) * 100 - : 0; - return { - totalSubmissions: submissions.length, - publishedPuzzles: published.length, - averageRating, - totalPlays, - featuredCount: featured.length, - acceptanceRate, - }; - } -}; -exports.PuzzleModerationService = PuzzleModerationService; -exports.PuzzleModerationService = PuzzleModerationService = PuzzleModerationService_1 = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(user_puzzle_submission_entity_1.UserPuzzleSubmission)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof puzzle_validation_service_1.PuzzleValidationService !== "undefined" && puzzle_validation_service_1.PuzzleValidationService) === "function" ? _b : Object]) -], PuzzleModerationService); - - -/***/ }), - -/***/ "./src/puzzles/services/puzzle-validation.service.ts": -/*!***********************************************************!*\ - !*** ./src/puzzles/services/puzzle-validation.service.ts ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var PuzzleValidationService_1; -var _a; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PuzzleValidationService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const typeorm_2 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_puzzle_submission_entity_1 = __webpack_require__(/*! ../entities/user-puzzle-submission.entity */ "./src/puzzles/entities/user-puzzle-submission.entity.ts"); -let PuzzleValidationService = PuzzleValidationService_1 = class PuzzleValidationService { - constructor(submissionRepository) { - this.submissionRepository = submissionRepository; - this.logger = new common_1.Logger(PuzzleValidationService_1.name); - } - async validatePuzzle(submission) { - const errors = []; - const warnings = []; - let score = 0; - const automatedChecks = { - hasValidAnswer: this.validateAnswer(submission.content), - hasExplanation: this.validateExplanation(submission.content), - appropriateDifficulty: this.validateDifficulty(submission), - contentQuality: this.assessContentQuality(submission), - mediaValidation: this.validateMedia(submission.content), - }; - score = this.calculateValidationScore(automatedChecks); - if (!automatedChecks.hasValidAnswer) { - errors.push('Puzzle must have a valid correct answer'); - } - if (!submission.title || submission.title.length < 3) { - errors.push('Title must be at least 3 characters long'); - } - if (!submission.description || submission.description.length < 10) { - errors.push('Description must be at least 10 characters long'); - } - if (submission.hints.length > submission.maxHints) { - errors.push('Number of hints exceeds maximum allowed'); - } - if (!automatedChecks.hasExplanation) { - warnings.push('Adding an explanation will improve puzzle quality'); - } - if (submission.tags.length < 2) { - warnings.push('Add more tags to improve discoverability'); - } - if (submission.timeLimit < 60) { - warnings.push('Time limit seems very short for this difficulty level'); - } - const isValid = errors.length === 0 && score >= 70; - return { - isValid, - errors, - warnings, - score, - automatedChecks, - }; - } - validateAnswer(content) { - if (!content.correctAnswer) - return false; - switch (content.type) { - case 'multiple-choice': - return Array.isArray(content.options) && - content.options.length >= 2 && - content.options.includes(content.correctAnswer); - case 'fill-blank': - return typeof content.correctAnswer === 'string' && - content.correctAnswer.trim().length > 0; - case 'drag-drop': - return typeof content.correctAnswer === 'object' && - content.correctAnswer !== null; - default: - return content.correctAnswer !== null && - content.correctAnswer !== undefined; - } - } - validateExplanation(content) { - return content.explanation && - typeof content.explanation === 'string' && - content.explanation.trim().length >= 10; - } - validateDifficulty(submission) { - const { difficulty, difficultyRating, timeLimit, basePoints } = submission; - const difficultyRanges = { - easy: { rating: [1, 3], time: [60, 300], points: [10, 100] }, - medium: { rating: [3, 6], time: [180, 600], points: [50, 200] }, - hard: { rating: [6, 8], time: [300, 1200], points: [100, 400] }, - expert: { rating: [8, 10], time: [600, 3600], points: [200, 1000] }, - }; - const range = difficultyRanges[difficulty]; - return range && - difficultyRating >= range.rating[0] && - difficultyRating <= range.rating[1] && - timeLimit >= range.time[0] && - timeLimit <= range.time[1] && - basePoints >= range.points[0] && - basePoints <= range.points[1]; - } - assessContentQuality(submission) { - let qualityScore = 0; - const maxScore = 100; - if (submission.title && submission.title.length >= 10) - qualityScore += 10; - if (submission.title && submission.title.length >= 20) - qualityScore += 10; - if (submission.description && submission.description.length >= 50) - qualityScore += 10; - if (submission.description && submission.description.length >= 100) - qualityScore += 10; - if (submission.content.question) - qualityScore += 10; - if (submission.content.explanation) - qualityScore += 10; - if (submission.hints.length > 0) - qualityScore += 5; - if (submission.hints.length >= 2) - qualityScore += 5; - if (submission.hints.every(hint => hint.text.length >= 20)) - qualityScore += 5; - if (submission.tags.length >= 3) - qualityScore += 10; - if (submission.tags.length >= 5) - qualityScore += 5; - if (submission.creatorNotes && Object.keys(submission.creatorNotes).length > 0) { - qualityScore += 10; - } - return Math.min(qualityScore, maxScore); - } - validateMedia(content) { - if (!content.media) - return true; - const { images, videos, audio } = content.media; - if (images && Array.isArray(images)) { - return images.every(url => typeof url === 'string' && url.length > 0); - } - if (videos && Array.isArray(videos)) { - return videos.every(url => typeof url === 'string' && url.length > 0); - } - if (audio && Array.isArray(audio)) { - return audio.every(url => typeof url === 'string' && url.length > 0); - } - return true; - } - calculateValidationScore(checks) { - let score = 0; - const weights = { - hasValidAnswer: 30, - hasExplanation: 20, - appropriateDifficulty: 25, - contentQuality: 20, - mediaValidation: 5, - }; - if (checks.hasValidAnswer) - score += weights.hasValidAnswer; - if (checks.hasExplanation) - score += weights.hasExplanation; - if (checks.appropriateDifficulty) - score += weights.appropriateDifficulty; - score += (checks.contentQuality / 100) * weights.contentQuality; - if (checks.mediaValidation) - score += weights.mediaValidation; - return Math.round(score); - } - async checkForDuplicates(submission) { - const similarPuzzles = await this.submissionRepository - .createQueryBuilder('submission') - .where('submission.title ILIKE :title', { title: `%${submission.title}%` }) - .orWhere('submission.description ILIKE :description', { description: `%${submission.description}%` }) - .andWhere('submission.status != :rejected', { rejected: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.REJECTED }) - .andWhere('submission.id != :id', { id: submission.id }) - .select(['submission.id', 'submission.title']) - .limit(5) - .getMany(); - const similarityThreshold = 0.8; - const duplicates = similarPuzzles.map(puzzle => ({ - id: puzzle.id, - title: puzzle.title, - similarity: this.calculateSimilarity(submission.title, puzzle.title), - })).filter(result => result.similarity >= similarityThreshold); - return { - isDuplicate: duplicates.length > 0, - similarPuzzles: duplicates, - }; - } - calculateSimilarity(str1, str2) { - const longer = str1.length > str2.length ? str1 : str2; - const shorter = str1.length > str2.length ? str2 : str1; - if (longer.length === 0) - return 1.0; - const distance = this.levenshteinDistance(longer, shorter); - return (longer.length - distance) / longer.length; - } - levenshteinDistance(str1, str2) { - const matrix = Array(str2.length + 1).fill(null).map(() => Array(str1.length + 1).fill(null)); - for (let i = 0; i <= str1.length; i++) - matrix[0][i] = i; - for (let j = 0; j <= str2.length; j++) - matrix[j][0] = j; - for (let j = 1; j <= str2.length; j++) { - for (let i = 1; i <= str1.length; i++) { - const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1; - matrix[j][i] = Math.min(matrix[j][i - 1] + 1, matrix[j - 1][i] + 1, matrix[j - 1][i - 1] + indicator); - } - } - return matrix[str2.length][str1.length]; - } -}; -exports.PuzzleValidationService = PuzzleValidationService; -exports.PuzzleValidationService = PuzzleValidationService = PuzzleValidationService_1 = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(user_puzzle_submission_entity_1.UserPuzzleSubmission)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object]) -], PuzzleValidationService); - - -/***/ }), - -/***/ "./src/puzzles/services/user-puzzle-submission.service.ts": -/*!****************************************************************!*\ - !*** ./src/puzzles/services/user-puzzle-submission.service.ts ***! - \****************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var UserPuzzleSubmissionService_1; -var _a, _b, _c; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.UserPuzzleSubmissionService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const typeorm_2 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_puzzle_submission_entity_1 = __webpack_require__(/*! ../entities/user-puzzle-submission.entity */ "./src/puzzles/entities/user-puzzle-submission.entity.ts"); -const puzzle_validation_service_1 = __webpack_require__(/*! ./puzzle-validation.service */ "./src/puzzles/services/puzzle-validation.service.ts"); -const puzzle_moderation_service_1 = __webpack_require__(/*! ./puzzle-moderation.service */ "./src/puzzles/services/puzzle-moderation.service.ts"); -let UserPuzzleSubmissionService = UserPuzzleSubmissionService_1 = class UserPuzzleSubmissionService { - constructor(submissionRepository, validationService, moderationService) { - this.submissionRepository = submissionRepository; - this.validationService = validationService; - this.moderationService = moderationService; - this.logger = new common_1.Logger(UserPuzzleSubmissionService_1.name); - } - async createSubmission(userId, createDto) { - const submission = this.submissionRepository.create({ - userId, - ...createDto, - status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.DRAFT, - sharingSettings: { - allowShare: true, - embeddable: false, - downloadAllowed: false, - attributionRequired: true, - ...createDto.sharingSettings, - }, - }); - if (createDto.isPublic) { - submission.sharingSettings.shareableLink = await this.generateShareableLink(); - } - const savedSubmission = await this.submissionRepository.save(submission); - this.logger.log(`Created puzzle submission ${savedSubmission.id} for user ${userId}`); - return savedSubmission; - } - async getUserSubmissions(userId, status, page = 1, limit = 20) { - const where = status ? { userId, status } : { userId }; - const [submissions, total] = await this.submissionRepository.findAndCount({ - where, - order: { createdAt: 'DESC' }, - skip: (page - 1) * limit, - take: limit, - }); - return { - submissions, - total, - page, - totalPages: Math.ceil(total / limit), - }; - } - async getSubmissionById(submissionId, userId) { - const where = userId ? { id: submissionId, userId } : { id: submissionId }; - const submission = await this.submissionRepository.findOne({ where }); - if (!submission) { - throw new Error('Puzzle submission not found'); - } - if (submission.isPublic && submission.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED) { - await this.submissionRepository.increment({ id: submissionId }, 'views', 1); - } - return submission; - } - async updateSubmission(submissionId, userId, updateDto) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId, userId }, - }); - if (!submission) { - throw new Error('Puzzle submission not found'); - } - if (submission.status !== user_puzzle_submission_entity_1.PuzzleSubmissionStatus.DRAFT) { - throw new Error('Only draft submissions can be updated'); - } - Object.assign(submission, updateDto); - submission.updatedAt = new Date(); - const savedSubmission = await this.submissionRepository.save(submission); - this.logger.log(`Updated puzzle submission ${submissionId} by user ${userId}`); - return savedSubmission; - } - async deleteSubmission(submissionId, userId) { - const submission = await this.submissionRepository.findOne({ - where: { id: submissionId, userId }, - }); - if (!submission) { - throw new Error('Puzzle submission not found'); - } - if (submission.status === user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED) { - throw new Error('Published puzzles cannot be deleted'); - } - await this.submissionRepository.remove(submission); - this.logger.log(`Deleted puzzle submission ${submissionId} by user ${userId}`); - } - async submitForReview(submissionId, userId, reviewData) { - return await this.moderationService.submitForReview(submissionId, userId, reviewData); - } - async publishPuzzle(submissionId, userId) { - return await this.moderationService.publishPuzzle(submissionId, userId); - } - async searchCommunityPuzzles(searchDto) { - const { query, categories, difficulties, tags, sortBy = 'newest', page = 1, limit = 20, isPublic = true, } = searchDto; - const queryBuilder = this.submissionRepository - .createQueryBuilder('submission') - .where('submission.isPublic = :isPublic', { isPublic }) - .andWhere('submission.status = :status', { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED }); - if (query) { - queryBuilder.andWhere('(submission.title ILIKE :query OR submission.description ILIKE :query)', { query: `%${query}%` }); - } - if (categories && categories.length > 0) { - queryBuilder.andWhere('submission.category IN (:...categories)', { categories }); - } - if (difficulties && difficulties.length > 0) { - queryBuilder.andWhere('submission.difficulty IN (:...difficulties)', { difficulties }); - } - if (tags && tags.length > 0) { - queryBuilder.andWhere('submission.tags && :tags', { tags }); - } - switch (sortBy) { - case 'newest': - queryBuilder.orderBy('submission.publishedAt', 'DESC'); - break; - case 'oldest': - queryBuilder.orderBy('submission.publishedAt', 'ASC'); - break; - case 'popular': - queryBuilder.orderBy('submission.views', 'DESC'); - break; - case 'highest_rated': - queryBuilder.orderBy('submission.averageRating', 'DESC'); - break; - case 'most_played': - queryBuilder.orderBy('submission.playCount', 'DESC'); - break; - case 'trending': - const sevenDaysAgo = new Date(); - sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7); - queryBuilder - .orderBy('submission.lastActivityAt', 'DESC') - .andWhere('submission.lastActivityAt >= :sevenDaysAgo', { sevenDaysAgo }); - break; - } - const [submissions, total] = await queryBuilder - .skip((page - 1) * limit) - .take(limit) - .getManyAndCount(); - return { - submissions, - total, - page, - totalPages: Math.ceil(total / limit), - }; - } - async getFeaturedPuzzles(limit = 10) { - return await this.submissionRepository.find({ - where: { - status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.FEATURED, - isPublic: true, - }, - order: { featuredAt: 'DESC' }, - take: limit, - }); - } - async getTrendingPuzzles(limit = 10) { - const sevenDaysAgo = new Date(); - sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7); - return await this.submissionRepository - .createQueryBuilder('submission') - .where('submission.isPublic = :isPublic', { isPublic: true }) - .andWhere('submission.status = :status', { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED }) - .andWhere('submission.lastActivityAt >= :sevenDaysAgo', { sevenDaysAgo }) - .orderBy('submission.playCount', 'DESC') - .addOrderBy('submission.averageRating', 'DESC') - .take(limit) - .getMany(); - } - async getRecommendedPuzzles(userId, limit = 10) { - return await this.submissionRepository - .createQueryBuilder('submission') - .where('submission.isPublic = :isPublic', { isPublic: true }) - .andWhere('submission.status = :status', { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED }) - .andWhere('submission.userId != :userId', { userId }) - .orderBy('submission.communityScore', 'DESC') - .addOrderBy('submission.averageRating', 'DESC') - .take(limit) - .getMany(); - } - async incrementPlayCount(submissionId) { - await this.submissionRepository.increment({ id: submissionId }, 'playCount', 1); - await this.submissionRepository.update({ id: submissionId }, { lastActivityAt: new Date() }); - } - async generateShareableLink() { - const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; - let result = ''; - for (let i = 0; i < 12; i++) { - result += characters.charAt(Math.floor(Math.random() * characters.length)); - } - return result; - } - async getSubmissionByShareableLink(shareableLink) { - const submission = await this.submissionRepository - .createQueryBuilder('submission') - .where("submission.sharingSettings->>'shareableLink' = :shareableLink", { shareableLink }) - .andWhere('submission.isPublic = :isPublic', { isPublic: true }) - .andWhere('submission.status = :status', { status: user_puzzle_submission_entity_1.PuzzleSubmissionStatus.PUBLISHED }) - .getOne(); - if (!submission) { - throw new Error('Puzzle not found or not accessible'); - } - await this.submissionRepository.increment({ id: submission.id }, 'views', 1); - return submission; - } - async getCreatorStats(userId) { - return await this.moderationService.getCreatorStats(userId); - } -}; -exports.UserPuzzleSubmissionService = UserPuzzleSubmissionService; -exports.UserPuzzleSubmissionService = UserPuzzleSubmissionService = UserPuzzleSubmissionService_1 = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(user_puzzle_submission_entity_1.UserPuzzleSubmission)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof puzzle_validation_service_1.PuzzleValidationService !== "undefined" && puzzle_validation_service_1.PuzzleValidationService) === "function" ? _b : Object, typeof (_c = typeof puzzle_moderation_service_1.PuzzleModerationService !== "undefined" && puzzle_moderation_service_1.PuzzleModerationService) === "function" ? _c : Object]) -], UserPuzzleSubmissionService); - - -/***/ }), - -/***/ "./src/tournaments/dto/create-tournament.dto.ts": -/*!******************************************************!*\ - !*** ./src/tournaments/dto/create-tournament.dto.ts ***! - \******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.CreateTournamentDto = exports.PrizeDistributionDto = void 0; -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -class PrizeDistributionDto { -} -exports.PrizeDistributionDto = PrizeDistributionDto; -__decorate([ - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - __metadata("design:type", Number) -], PrizeDistributionDto.prototype, "position", void 0); -__decorate([ - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(0), - __metadata("design:type", Number) -], PrizeDistributionDto.prototype, "amount", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(0), - (0, class_validator_1.Max)(100), - __metadata("design:type", Number) -], PrizeDistributionDto.prototype, "percentage", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], PrizeDistributionDto.prototype, "badges", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], PrizeDistributionDto.prototype, "achievements", void 0); -class CreateTournamentDto { -} -exports.CreateTournamentDto = CreateTournamentDto; -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsNotEmpty)(), - __metadata("design:type", String) -], CreateTournamentDto.prototype, "name", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.IsNotEmpty)(), - __metadata("design:type", String) -], CreateTournamentDto.prototype, "description", void 0); -__decorate([ - (0, class_validator_1.IsEnum)(['single-elimination', 'double-elimination', 'round-robin', 'swiss']), - __metadata("design:type", String) -], CreateTournamentDto.prototype, "bracketType", void 0); -__decorate([ - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(2), - (0, class_validator_1.Max)(256), - __metadata("design:type", Number) -], CreateTournamentDto.prototype, "maxParticipants", void 0); -__decorate([ - (0, class_validator_1.IsDateString)(), - __metadata("design:type", String) -], CreateTournamentDto.prototype, "registrationStartTime", void 0); -__decorate([ - (0, class_validator_1.IsDateString)(), - __metadata("design:type", String) -], CreateTournamentDto.prototype, "registrationEndTime", void 0); -__decorate([ - (0, class_validator_1.IsDateString)(), - __metadata("design:type", String) -], CreateTournamentDto.prototype, "startTime", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], CreateTournamentDto.prototype, "entryRequirements", void 0); -__decorate([ - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], CreateTournamentDto.prototype, "prizePool", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], CreateTournamentDto.prototype, "config", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], CreateTournamentDto.prototype, "rules", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], CreateTournamentDto.prototype, "tags", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], CreateTournamentDto.prototype, "metadata", void 0); - - -/***/ }), - -/***/ "./src/tournaments/dto/query-tournaments.dto.ts": -/*!******************************************************!*\ - !*** ./src/tournaments/dto/query-tournaments.dto.ts ***! - \******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.QueryTournamentsDto = void 0; -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -class QueryTournamentsDto { - constructor() { - this.page = 1; - this.limit = 10; - this.sortOrder = 'DESC'; - } -} -exports.QueryTournamentsDto = QueryTournamentsDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)([ - 'scheduled', - 'registration', - 'in-progress', - 'completed', - 'cancelled', - ]), - __metadata("design:type", String) -], QueryTournamentsDto.prototype, "status", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(['single-elimination', 'double-elimination', 'round-robin', 'swiss']), - __metadata("design:type", String) -], QueryTournamentsDto.prototype, "bracketType", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsDateString)(), - __metadata("design:type", String) -], QueryTournamentsDto.prototype, "startDate", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsDateString)(), - __metadata("design:type", String) -], QueryTournamentsDto.prototype, "endDate", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - __metadata("design:type", Number) -], QueryTournamentsDto.prototype, "page", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsInt)(), - (0, class_validator_1.Min)(1), - (0, class_validator_1.Max)(100), - __metadata("design:type", Number) -], QueryTournamentsDto.prototype, "limit", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(['startTime', 'createdAt', 'prizePool', 'participants']), - __metadata("design:type", String) -], QueryTournamentsDto.prototype, "sortBy", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)(['ASC', 'DESC']), - __metadata("design:type", String) -], QueryTournamentsDto.prototype, "sortOrder", void 0); - - -/***/ }), - -/***/ "./src/tournaments/dto/submit-match-result.dto.ts": -/*!********************************************************!*\ - !*** ./src/tournaments/dto/submit-match-result.dto.ts ***! - \********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.SubmitMatchResultDto = void 0; -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -class SubmitMatchResultDto { -} -exports.SubmitMatchResultDto = SubmitMatchResultDto; -__decorate([ - (0, class_validator_1.IsUUID)(), - __metadata("design:type", String) -], SubmitMatchResultDto.prototype, "matchId", void 0); -__decorate([ - (0, class_validator_1.IsUUID)(), - __metadata("design:type", String) -], SubmitMatchResultDto.prototype, "winnerId", void 0); -__decorate([ - (0, class_validator_1.IsInt)(), - __metadata("design:type", Number) -], SubmitMatchResultDto.prototype, "player1Score", void 0); -__decorate([ - (0, class_validator_1.IsInt)(), - __metadata("design:type", Number) -], SubmitMatchResultDto.prototype, "player2Score", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], SubmitMatchResultDto.prototype, "puzzleIds", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - __metadata("design:type", typeof (_a = typeof Array !== "undefined" && Array) === "function" ? _a : Object) -], SubmitMatchResultDto.prototype, "puzzleResults", void 0); - - -/***/ }), - -/***/ "./src/tournaments/dto/update-tournament.dto.ts": -/*!******************************************************!*\ - !*** ./src/tournaments/dto/update-tournament.dto.ts ***! - \******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.UpdateTournamentDto = void 0; -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -class UpdateTournamentDto { -} -exports.UpdateTournamentDto = UpdateTournamentDto; -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], UpdateTournamentDto.prototype, "name", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], UpdateTournamentDto.prototype, "description", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsEnum)([ - 'scheduled', - 'registration', - 'in-progress', - 'completed', - 'cancelled', - ]), - __metadata("design:type", String) -], UpdateTournamentDto.prototype, "status", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], UpdateTournamentDto.prototype, "config", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.IsString)({ each: true }), - __metadata("design:type", Array) -], UpdateTournamentDto.prototype, "tags", void 0); -__decorate([ - (0, class_validator_1.IsOptional)(), - (0, class_validator_1.IsObject)(), - __metadata("design:type", Object) -], UpdateTournamentDto.prototype, "metadata", void 0); - - -/***/ }), - -/***/ "./src/tournaments/entities/tournament-match.entity.ts": -/*!*************************************************************!*\ - !*** ./src/tournaments/entities/tournament-match.entity.ts ***! - \*************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d, _e, _f; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.TournamentMatch = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const tournament_entity_1 = __webpack_require__(/*! ./tournament.entity */ "./src/tournaments/entities/tournament.entity.ts"); -let TournamentMatch = class TournamentMatch { -}; -exports.TournamentMatch = TournamentMatch; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], TournamentMatch.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], TournamentMatch.prototype, "tournamentId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int' }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], TournamentMatch.prototype, "roundNumber", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50, nullable: true }), - __metadata("design:type", String) -], TournamentMatch.prototype, "roundName", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int' }), - __metadata("design:type", Number) -], TournamentMatch.prototype, "matchNumber", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20, default: 'scheduled' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], TournamentMatch.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], TournamentMatch.prototype, "player1Id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 100, nullable: true }), - __metadata("design:type", String) -], TournamentMatch.prototype, "player1Name", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], TournamentMatch.prototype, "player1Score", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], TournamentMatch.prototype, "player2Id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 100, nullable: true }), - __metadata("design:type", String) -], TournamentMatch.prototype, "player2Name", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], TournamentMatch.prototype, "player2Score", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], TournamentMatch.prototype, "winnerId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 100, nullable: true }), - __metadata("design:type", String) -], TournamentMatch.prototype, "winnerName", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], TournamentMatch.prototype, "loserId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], TournamentMatch.prototype, "scheduledTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], TournamentMatch.prototype, "startTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], TournamentMatch.prototype, "endTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', nullable: true }), - __metadata("design:type", Number) -], TournamentMatch.prototype, "duration", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - __metadata("design:type", String) -], TournamentMatch.prototype, "nextMatchId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - __metadata("design:type", String) -], TournamentMatch.prototype, "loserNextMatchId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'simple-array', default: [] }), - __metadata("design:type", Array) -], TournamentMatch.prototype, "puzzleIds", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], TournamentMatch.prototype, "config", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], TournamentMatch.prototype, "results", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], TournamentMatch.prototype, "statistics", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], TournamentMatch.prototype, "metadata", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)({ type: 'timestamp with time zone' }), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], TournamentMatch.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)({ type: 'timestamp with time zone' }), - __metadata("design:type", typeof (_e = typeof Date !== "undefined" && Date) === "function" ? _e : Object) -], TournamentMatch.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => tournament_entity_1.Tournament, (tournament) => tournament.matches), - (0, typeorm_1.JoinColumn)({ name: 'tournamentId' }), - __metadata("design:type", typeof (_f = typeof tournament_entity_1.Tournament !== "undefined" && tournament_entity_1.Tournament) === "function" ? _f : Object) -], TournamentMatch.prototype, "tournament", void 0); -exports.TournamentMatch = TournamentMatch = __decorate([ - (0, typeorm_1.Entity)('tournament_matches'), - (0, typeorm_1.Index)(['tournamentId', 'roundNumber']), - (0, typeorm_1.Index)(['tournamentId', 'status']), - (0, typeorm_1.Index)(['player1Id', 'player2Id']) -], TournamentMatch); - - -/***/ }), - -/***/ "./src/tournaments/entities/tournament-participant.entity.ts": -/*!*******************************************************************!*\ - !*** ./src/tournaments/entities/tournament-participant.entity.ts ***! - \*******************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d, _e, _f, _g, _h; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.TournamentParticipant = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const tournament_entity_1 = __webpack_require__(/*! ./tournament.entity */ "./src/tournaments/entities/tournament.entity.ts"); -const user_entity_1 = __webpack_require__(/*! ../../users/entities/user.entity */ "./src/users/entities/user.entity.ts"); -let TournamentParticipant = class TournamentParticipant { -}; -exports.TournamentParticipant = TournamentParticipant; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], TournamentParticipant.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], TournamentParticipant.prototype, "tournamentId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], TournamentParticipant.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 100 }), - __metadata("design:type", String) -], TournamentParticipant.prototype, "username", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20, default: 'registered' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], TournamentParticipant.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], TournamentParticipant.prototype, "seedNumber", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], TournamentParticipant.prototype, "currentRound", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], TournamentParticipant.prototype, "wins", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], TournamentParticipant.prototype, "losses", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], TournamentParticipant.prototype, "draws", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], TournamentParticipant.prototype, "totalScore", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], TournamentParticipant.prototype, "finalPosition", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], TournamentParticipant.prototype, "puzzlesSolved", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], TournamentParticipant.prototype, "totalPuzzlesAttempted", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 5, scale: 2, default: 0 }), - __metadata("design:type", Number) -], TournamentParticipant.prototype, "averageAccuracy", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], TournamentParticipant.prototype, "averageCompletionTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], TournamentParticipant.prototype, "longestWinStreak", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone' }), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], TournamentParticipant.prototype, "registeredAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], TournamentParticipant.prototype, "checkedInAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], TournamentParticipant.prototype, "eliminatedAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], TournamentParticipant.prototype, "withdrawnAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }), - __metadata("design:type", Object) -], TournamentParticipant.prototype, "prizeAwarded", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], TournamentParticipant.prototype, "statistics", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], TournamentParticipant.prototype, "metadata", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)({ type: 'timestamp with time zone' }), - __metadata("design:type", typeof (_e = typeof Date !== "undefined" && Date) === "function" ? _e : Object) -], TournamentParticipant.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)({ type: 'timestamp with time zone' }), - __metadata("design:type", typeof (_f = typeof Date !== "undefined" && Date) === "function" ? _f : Object) -], TournamentParticipant.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => tournament_entity_1.Tournament, (tournament) => tournament.participants), - (0, typeorm_1.JoinColumn)({ name: 'tournamentId' }), - __metadata("design:type", typeof (_g = typeof tournament_entity_1.Tournament !== "undefined" && tournament_entity_1.Tournament) === "function" ? _g : Object) -], TournamentParticipant.prototype, "tournament", void 0); -__decorate([ - (0, typeorm_1.ManyToOne)(() => user_entity_1.User), - (0, typeorm_1.JoinColumn)({ name: 'userId' }), - __metadata("design:type", typeof (_h = typeof user_entity_1.User !== "undefined" && user_entity_1.User) === "function" ? _h : Object) -], TournamentParticipant.prototype, "user", void 0); -exports.TournamentParticipant = TournamentParticipant = __decorate([ - (0, typeorm_1.Entity)('tournament_participants'), - (0, typeorm_1.Index)(['tournamentId', 'userId'], { unique: true }), - (0, typeorm_1.Index)(['tournamentId', 'status']), - (0, typeorm_1.Index)(['userId', 'registeredAt']) -], TournamentParticipant); - - -/***/ }), - -/***/ "./src/tournaments/entities/tournament-spectator.entity.ts": -/*!*****************************************************************!*\ - !*** ./src/tournaments/entities/tournament-spectator.entity.ts ***! - \*****************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.TournamentSpectator = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -let TournamentSpectator = class TournamentSpectator { -}; -exports.TournamentSpectator = TournamentSpectator; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], TournamentSpectator.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], TournamentSpectator.prototype, "tournamentId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], TournamentSpectator.prototype, "matchId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], TournamentSpectator.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 100 }), - __metadata("design:type", String) -], TournamentSpectator.prototype, "username", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone' }), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], TournamentSpectator.prototype, "joinedAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], TournamentSpectator.prototype, "leftAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], TournamentSpectator.prototype, "totalWatchTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'boolean', default: false }), - __metadata("design:type", Boolean) -], TournamentSpectator.prototype, "isActive", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], TournamentSpectator.prototype, "engagement", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], TournamentSpectator.prototype, "preferences", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)({ type: 'timestamp with time zone' }), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], TournamentSpectator.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)({ type: 'timestamp with time zone' }), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], TournamentSpectator.prototype, "updatedAt", void 0); -exports.TournamentSpectator = TournamentSpectator = __decorate([ - (0, typeorm_1.Entity)('tournament_spectators'), - (0, typeorm_1.Index)(['tournamentId', 'userId']), - (0, typeorm_1.Index)(['matchId', 'userId']), - (0, typeorm_1.Index)(['joinedAt']) -], TournamentSpectator); - - -/***/ }), - -/***/ "./src/tournaments/entities/tournament.entity.ts": -/*!*******************************************************!*\ - !*** ./src/tournaments/entities/tournament.entity.ts ***! - \*******************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d, _e, _f; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.Tournament = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const tournament_participant_entity_1 = __webpack_require__(/*! ./tournament-participant.entity */ "./src/tournaments/entities/tournament-participant.entity.ts"); -const tournament_match_entity_1 = __webpack_require__(/*! ./tournament-match.entity */ "./src/tournaments/entities/tournament-match.entity.ts"); -let Tournament = class Tournament { -}; -exports.Tournament = Tournament; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], Tournament.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 200 }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Tournament.prototype, "name", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text' }), - __metadata("design:type", String) -], Tournament.prototype, "description", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50, default: 'single-elimination' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Tournament.prototype, "bracketType", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20, default: 'scheduled' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Tournament.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 16 }), - __metadata("design:type", Number) -], Tournament.prototype, "maxParticipants", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], Tournament.prototype, "currentParticipants", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone' }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], Tournament.prototype, "registrationStartTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone' }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], Tournament.prototype, "registrationEndTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone' }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], Tournament.prototype, "startTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], Tournament.prototype, "endTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', nullable: true }), - __metadata("design:type", Number) -], Tournament.prototype, "duration", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], Tournament.prototype, "createdBy", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid', nullable: true }), - __metadata("design:type", String) -], Tournament.prototype, "winnerId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Tournament.prototype, "entryRequirements", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Tournament.prototype, "prizePool", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Tournament.prototype, "config", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Tournament.prototype, "bracket", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Tournament.prototype, "rules", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'simple-array', default: [] }), - (0, typeorm_1.Index)(), - __metadata("design:type", Array) -], Tournament.prototype, "tags", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Tournament.prototype, "statistics", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], Tournament.prototype, "metadata", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)({ type: 'timestamp with time zone' }), - __metadata("design:type", typeof (_e = typeof Date !== "undefined" && Date) === "function" ? _e : Object) -], Tournament.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)({ type: 'timestamp with time zone' }), - __metadata("design:type", typeof (_f = typeof Date !== "undefined" && Date) === "function" ? _f : Object) -], Tournament.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.OneToMany)(() => tournament_participant_entity_1.TournamentParticipant, (participant) => participant.tournament), - __metadata("design:type", Array) -], Tournament.prototype, "participants", void 0); -__decorate([ - (0, typeorm_1.OneToMany)(() => tournament_match_entity_1.TournamentMatch, (match) => match.tournament), - __metadata("design:type", Array) -], Tournament.prototype, "matches", void 0); -exports.Tournament = Tournament = __decorate([ - (0, typeorm_1.Entity)('tournaments'), - (0, typeorm_1.Index)(['status', 'startTime']), - (0, typeorm_1.Index)(['createdBy']) -], Tournament); - - -/***/ }), - -/***/ "./src/tournaments/tournaments.controller.ts": -/*!***************************************************!*\ - !*** ./src/tournaments/tournaments.controller.ts ***! - \***************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var _a, _b, _c, _d, _e; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.TournamentsController = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const tournaments_service_1 = __webpack_require__(/*! ./tournaments.service */ "./src/tournaments/tournaments.service.ts"); -const create_tournament_dto_1 = __webpack_require__(/*! ./dto/create-tournament.dto */ "./src/tournaments/dto/create-tournament.dto.ts"); -const update_tournament_dto_1 = __webpack_require__(/*! ./dto/update-tournament.dto */ "./src/tournaments/dto/update-tournament.dto.ts"); -const query_tournaments_dto_1 = __webpack_require__(/*! ./dto/query-tournaments.dto */ "./src/tournaments/dto/query-tournaments.dto.ts"); -const submit_match_result_dto_1 = __webpack_require__(/*! ./dto/submit-match-result.dto */ "./src/tournaments/dto/submit-match-result.dto.ts"); -let TournamentsController = class TournamentsController { - constructor(tournamentsService) { - this.tournamentsService = tournamentsService; - } - async create(createTournamentDto, req) { - try { - const createdBy = req?.user?.id; - const tournament = await this.tournamentsService.create(createTournamentDto, createdBy); - return { - success: true, - message: 'Tournament created successfully', - data: tournament, - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async findAll(query) { - try { - const result = await this.tournamentsService.findAll(query); - return { - success: true, - data: result.tournaments, - pagination: { - total: result.total, - page: result.page, - limit: result.limit, - totalPages: Math.ceil(result.total / result.limit), - }, - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async getCompletedTournaments(limit) { - try { - const tournaments = await this.tournamentsService.getCompletedTournaments(limit || 10); - return { - success: true, - data: tournaments, - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async findOne(id) { - try { - const tournament = await this.tournamentsService.findOne(id); - if (!tournament) { - throw new common_1.NotFoundException('Tournament not found'); - } - return { - success: true, - data: tournament, - }; - } - catch (error) { - if (error instanceof common_1.NotFoundException) { - throw error; - } - throw new common_1.BadRequestException(error.message); - } - } - async getBracket(id) { - try { - const bracket = await this.tournamentsService.getBracket(id); - return { - success: true, - data: bracket, - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async getStandings(id) { - try { - const standings = await this.tournamentsService.getStandings(id); - return { - success: true, - data: standings, - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async getTournamentHistory(id) { - try { - const history = await this.tournamentsService.getTournamentHistory(id); - return { - success: true, - data: history, - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async getSpectators(id) { - try { - const spectators = await this.tournamentsService.getTournamentSpectators(id); - return { - success: true, - data: spectators, - count: spectators.length, - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async update(id, updateTournamentDto) { - try { - const tournament = await this.tournamentsService.update(id, updateTournamentDto); - return { - success: true, - message: 'Tournament updated successfully', - data: tournament, - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async remove(id) { - try { - await this.tournamentsService.remove(id); - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async register(id, req) { - try { - const userId = req?.user?.id || 'test-user-id'; - const username = req?.user?.username || 'TestUser'; - const participant = await this.tournamentsService.registerParticipant(id, userId, username); - return { - success: true, - message: 'Successfully registered for tournament', - data: participant, - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async withdraw(id, req) { - try { - const userId = req?.user?.id || 'test-user-id'; - await this.tournamentsService.withdrawParticipant(id, userId); - return { - success: true, - message: 'Successfully withdrawn from tournament', - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async generateBracket(id) { - try { - const bracket = await this.tournamentsService.generateBracket(id); - return { - success: true, - message: 'Tournament bracket generated successfully', - data: bracket, - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async submitMatchResult(matchId, submitMatchResultDto) { - try { - await this.tournamentsService.submitMatchResult(matchId, submitMatchResultDto.winnerId, submitMatchResultDto.player1Score, submitMatchResultDto.player2Score, submitMatchResultDto.puzzleResults); - return { - success: true, - message: 'Match result submitted successfully', - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async joinAsSpectator(id, req, matchId) { - try { - const userId = req?.user?.id || 'spectator-' + Date.now(); - const username = req?.user?.username || 'Spectator'; - const spectator = await this.tournamentsService.joinAsSpectator(id, userId, username, matchId); - return { - success: true, - message: 'Joined as spectator', - data: spectator, - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } - async leaveAsSpectator(spectatorId) { - try { - await this.tournamentsService.leaveAsSpectator(spectatorId); - return { - success: true, - message: 'Left spectator mode', - }; - } - catch (error) { - throw new common_1.BadRequestException(error.message); - } - } -}; -exports.TournamentsController = TournamentsController; -__decorate([ - (0, common_1.Post)(), - (0, common_1.HttpCode)(common_1.HttpStatus.CREATED), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Request)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [typeof (_b = typeof create_tournament_dto_1.CreateTournamentDto !== "undefined" && create_tournament_dto_1.CreateTournamentDto) === "function" ? _b : Object, Object]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "create", null); -__decorate([ - (0, common_1.Get)(), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [typeof (_c = typeof query_tournaments_dto_1.QueryTournamentsDto !== "undefined" && query_tournaments_dto_1.QueryTournamentsDto) === "function" ? _c : Object]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "findAll", null); -__decorate([ - (0, common_1.Get)('completed'), - __param(0, (0, common_1.Query)('limit')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Number]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "getCompletedTournaments", null); -__decorate([ - (0, common_1.Get)(':id'), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "findOne", null); -__decorate([ - (0, common_1.Get)(':id/bracket'), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "getBracket", null); -__decorate([ - (0, common_1.Get)(':id/standings'), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "getStandings", null); -__decorate([ - (0, common_1.Get)(':id/history'), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "getTournamentHistory", null); -__decorate([ - (0, common_1.Get)(':id/spectators'), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "getSpectators", null); -__decorate([ - (0, common_1.Patch)(':id'), - __param(0, (0, common_1.Param)('id')), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, typeof (_d = typeof update_tournament_dto_1.UpdateTournamentDto !== "undefined" && update_tournament_dto_1.UpdateTournamentDto) === "function" ? _d : Object]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "update", null); -__decorate([ - (0, common_1.Delete)(':id'), - (0, common_1.HttpCode)(common_1.HttpStatus.NO_CONTENT), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "remove", null); -__decorate([ - (0, common_1.Post)(':id/register'), - (0, common_1.HttpCode)(common_1.HttpStatus.CREATED), - __param(0, (0, common_1.Param)('id')), - __param(1, (0, common_1.Request)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, Object]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "register", null); -__decorate([ - (0, common_1.Post)(':id/withdraw'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Param)('id')), - __param(1, (0, common_1.Request)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, Object]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "withdraw", null); -__decorate([ - (0, common_1.Post)(':id/generate-bracket'), - (0, common_1.HttpCode)(common_1.HttpStatus.CREATED), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "generateBracket", null); -__decorate([ - (0, common_1.Post)('matches/:matchId/result'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Param)('matchId')), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, typeof (_e = typeof submit_match_result_dto_1.SubmitMatchResultDto !== "undefined" && submit_match_result_dto_1.SubmitMatchResultDto) === "function" ? _e : Object]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "submitMatchResult", null); -__decorate([ - (0, common_1.Post)(':id/spectate'), - (0, common_1.HttpCode)(common_1.HttpStatus.CREATED), - __param(0, (0, common_1.Param)('id')), - __param(1, (0, common_1.Request)()), - __param(2, (0, common_1.Query)('matchId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, Object, String]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "joinAsSpectator", null); -__decorate([ - (0, common_1.Post)('spectators/:spectatorId/leave'), - (0, common_1.HttpCode)(common_1.HttpStatus.OK), - __param(0, (0, common_1.Param)('spectatorId')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", Promise) -], TournamentsController.prototype, "leaveAsSpectator", null); -exports.TournamentsController = TournamentsController = __decorate([ - (0, common_1.Controller)('tournaments'), - __metadata("design:paramtypes", [typeof (_a = typeof tournaments_service_1.TournamentsService !== "undefined" && tournaments_service_1.TournamentsService) === "function" ? _a : Object]) -], TournamentsController); - - -/***/ }), - -/***/ "./src/tournaments/tournaments.module.ts": -/*!***********************************************!*\ - !*** ./src/tournaments/tournaments.module.ts ***! - \***********************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.TournamentsModule = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const tournaments_service_1 = __webpack_require__(/*! ./tournaments.service */ "./src/tournaments/tournaments.service.ts"); -const tournaments_controller_1 = __webpack_require__(/*! ./tournaments.controller */ "./src/tournaments/tournaments.controller.ts"); -const tournament_entity_1 = __webpack_require__(/*! ./entities/tournament.entity */ "./src/tournaments/entities/tournament.entity.ts"); -const tournament_participant_entity_1 = __webpack_require__(/*! ./entities/tournament-participant.entity */ "./src/tournaments/entities/tournament-participant.entity.ts"); -const tournament_match_entity_1 = __webpack_require__(/*! ./entities/tournament-match.entity */ "./src/tournaments/entities/tournament-match.entity.ts"); -const tournament_spectator_entity_1 = __webpack_require__(/*! ./entities/tournament-spectator.entity */ "./src/tournaments/entities/tournament-spectator.entity.ts"); -let TournamentsModule = class TournamentsModule { -}; -exports.TournamentsModule = TournamentsModule; -exports.TournamentsModule = TournamentsModule = __decorate([ - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forFeature([ - tournament_entity_1.Tournament, - tournament_participant_entity_1.TournamentParticipant, - tournament_match_entity_1.TournamentMatch, - tournament_spectator_entity_1.TournamentSpectator, - ]), - ], - controllers: [tournaments_controller_1.TournamentsController], - providers: [tournaments_service_1.TournamentsService], - exports: [tournaments_service_1.TournamentsService], - }) -], TournamentsModule); - - -/***/ }), - -/***/ "./src/tournaments/tournaments.service.ts": -/*!************************************************!*\ - !*** ./src/tournaments/tournaments.service.ts ***! - \************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var TournamentsService_1; -var _a, _b, _c, _d; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.TournamentsService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const typeorm_1 = __webpack_require__(/*! @nestjs/typeorm */ "@nestjs/typeorm"); -const typeorm_2 = __webpack_require__(/*! typeorm */ "typeorm"); -const tournament_entity_1 = __webpack_require__(/*! ./entities/tournament.entity */ "./src/tournaments/entities/tournament.entity.ts"); -const tournament_participant_entity_1 = __webpack_require__(/*! ./entities/tournament-participant.entity */ "./src/tournaments/entities/tournament-participant.entity.ts"); -const tournament_match_entity_1 = __webpack_require__(/*! ./entities/tournament-match.entity */ "./src/tournaments/entities/tournament-match.entity.ts"); -const tournament_spectator_entity_1 = __webpack_require__(/*! ./entities/tournament-spectator.entity */ "./src/tournaments/entities/tournament-spectator.entity.ts"); -let TournamentsService = TournamentsService_1 = class TournamentsService { - constructor(tournamentRepository, participantRepository, matchRepository, spectatorRepository) { - this.tournamentRepository = tournamentRepository; - this.participantRepository = participantRepository; - this.matchRepository = matchRepository; - this.spectatorRepository = spectatorRepository; - this.logger = new common_1.Logger(TournamentsService_1.name); - } - async create(createTournamentDto, createdBy) { - this.logger.log(`Creating tournament: ${createTournamentDto.name}`); - const tournament = this.tournamentRepository.create({ - ...createTournamentDto, - createdBy, - status: 'scheduled', - currentParticipants: 0, - bracket: { - rounds: [], - totalRounds: 0, - currentRound: 0, - }, - statistics: { - totalMatches: 0, - completedMatches: 0, - topPerformers: [], - }, - }); - return await this.tournamentRepository.save(tournament); - } - async findAll(query) { - const { status, bracketType, startDate, endDate, page = 1, limit = 10, sortBy = 'startTime', sortOrder = 'DESC', } = query; - const queryBuilder = this.tournamentRepository.createQueryBuilder('tournament'); - if (status) { - queryBuilder.andWhere('tournament.status = :status', { status }); - } - if (bracketType) { - queryBuilder.andWhere('tournament.bracketType = :bracketType', { - bracketType, - }); - } - if (startDate && endDate) { - queryBuilder.andWhere('tournament.startTime BETWEEN :startDate AND :endDate', { - startDate, - endDate, - }); - } - else if (startDate) { - queryBuilder.andWhere('tournament.startTime >= :startDate', { - startDate, - }); - } - else if (endDate) { - queryBuilder.andWhere('tournament.startTime <= :endDate', { endDate }); - } - queryBuilder - .orderBy(`tournament.${sortBy}`, sortOrder) - .skip((page - 1) * limit) - .take(limit); - const [tournaments, total] = await queryBuilder.getManyAndCount(); - return { - tournaments, - total, - page, - limit, - }; - } - async findOne(id) { - return await this.tournamentRepository.findOne({ - where: { id }, - relations: ['participants', 'matches'], - }); - } - async update(id, updateTournamentDto) { - await this.tournamentRepository.update(id, updateTournamentDto); - return await this.findOne(id); - } - async remove(id) { - await this.tournamentRepository.delete(id); - } - async registerParticipant(tournamentId, userId, username, metadata) { - this.logger.log(`Registering participant ${username} for tournament ${tournamentId}`); - const tournament = await this.findOne(tournamentId); - if (!tournament) { - throw new Error('Tournament not found'); - } - if (tournament.status !== 'registration' && - tournament.status !== 'scheduled') { - throw new Error('Tournament registration is closed'); - } - if (tournament.currentParticipants >= tournament.maxParticipants) { - throw new Error('Tournament is full'); - } - const now = new Date(); - if (now < new Date(tournament.registrationStartTime)) { - throw new Error('Registration has not started yet'); - } - if (now > new Date(tournament.registrationEndTime)) { - throw new Error('Registration has ended'); - } - const existingParticipant = await this.participantRepository.findOne({ - where: { tournamentId, userId }, - }); - if (existingParticipant) { - throw new Error('Already registered for this tournament'); - } - const participant = this.participantRepository.create({ - tournamentId, - userId, - username, - status: 'registered', - registeredAt: new Date(), - metadata, - statistics: {}, - }); - await this.participantRepository.save(participant); - await this.tournamentRepository.update(tournamentId, { - currentParticipants: tournament.currentParticipants + 1, - }); - return participant; - } - async withdrawParticipant(tournamentId, userId) { - const participant = await this.participantRepository.findOne({ - where: { tournamentId, userId }, - }); - if (!participant) { - throw new Error('Participant not found'); - } - if (participant.status === 'active' || - participant.status === 'eliminated') { - throw new Error('Cannot withdraw after tournament has started'); - } - await this.participantRepository.update(participant.id, { - status: 'withdrawn', - withdrawnAt: new Date(), - }); - const tournament = await this.findOne(tournamentId); - await this.tournamentRepository.update(tournamentId, { - currentParticipants: Math.max(0, tournament.currentParticipants - 1), - }); - } - async generateBracket(tournamentId) { - this.logger.log(`Generating bracket for tournament ${tournamentId}`); - const tournament = await this.findOne(tournamentId); - const participants = await this.participantRepository.find({ - where: { tournamentId, status: 'registered' }, - }); - if (participants.length < 2) { - throw new Error('Not enough participants to generate bracket'); - } - const bracketType = tournament.bracketType; - let bracket; - switch (bracketType) { - case 'single-elimination': - bracket = await this.generateSingleEliminationBracket(tournament, participants); - break; - case 'double-elimination': - bracket = await this.generateDoubleEliminationBracket(tournament, participants); - break; - case 'round-robin': - bracket = await this.generateRoundRobinBracket(tournament, participants); - break; - case 'swiss': - bracket = await this.generateSwissBracket(tournament, participants); - break; - default: - throw new Error(`Unsupported bracket type: ${bracketType}`); - } - await this.tournamentRepository.update(tournamentId, { - bracket: { - rounds: bracket.rounds.map((r) => ({ - roundNumber: r.roundNumber, - roundName: r.roundName, - matches: r.matches.map((m) => m.matchId), - startTime: r.startTime, - endTime: r.endTime, - })), - totalRounds: bracket.totalRounds, - currentRound: 1, - }, - status: 'in-progress', - }); - return bracket; - } - async generateSingleEliminationBracket(tournament, participants) { - const seededParticipants = await this.seedParticipants(participants, tournament); - const nextPowerOf2 = Math.pow(2, Math.ceil(Math.log2(seededParticipants.length))); - const totalRounds = Math.log2(nextPowerOf2); - const rounds = []; - let currentMatches = []; - const firstRoundMatches = Math.ceil(seededParticipants.length / 2); - const roundNames = this.getRoundNames(totalRounds); - for (let i = 0; i < firstRoundMatches; i++) { - const player1 = seededParticipants[i * 2]; - const player2 = seededParticipants[i * 2 + 1]; - const match = await this.createMatch(tournament.id, 1, i + 1, player1, player2); - currentMatches.push({ - matchId: match.id, - roundNumber: 1, - matchNumber: i + 1, - player1: player1 - ? { id: player1.id, name: player1.username, seed: player1.seedNumber } - : undefined, - player2: player2 - ? { id: player2.id, name: player2.username, seed: player2.seedNumber } - : undefined, - status: 'scheduled', - }); - } - rounds.push({ - roundNumber: 1, - roundName: roundNames[0], - matches: currentMatches, - isComplete: false, - }); - for (let round = 2; round <= totalRounds; round++) { - const prevMatches = currentMatches; - currentMatches = []; - const matchesInRound = Math.ceil(prevMatches.length / 2); - for (let i = 0; i < matchesInRound; i++) { - const match = await this.createMatch(tournament.id, round, i + 1); - if (prevMatches[i * 2]) { - await this.matchRepository.update(prevMatches[i * 2].matchId, { - nextMatchId: match.id, - }); - } - if (prevMatches[i * 2 + 1]) { - await this.matchRepository.update(prevMatches[i * 2 + 1].matchId, { - nextMatchId: match.id, - }); - } - currentMatches.push({ - matchId: match.id, - roundNumber: round, - matchNumber: i + 1, - status: 'scheduled', - }); - } - rounds.push({ - roundNumber: round, - roundName: roundNames[round - 1], - matches: currentMatches, - isComplete: false, - }); - } - return { - tournamentId: tournament.id, - bracketType: 'single-elimination', - rounds, - totalRounds, - currentRound: 1, - }; - } - async generateDoubleEliminationBracket(tournament, participants) { - return await this.generateSingleEliminationBracket(tournament, participants); - } - async generateRoundRobinBracket(tournament, participants) { - const n = participants.length; - const totalRounds = n % 2 === 0 ? n - 1 : n; - const rounds = []; - for (let round = 1; round <= totalRounds; round++) { - const matches = []; - for (let i = 0; i < Math.floor(n / 2); i++) { - const player1Idx = i; - const player2Idx = n - 1 - i; - if (player1Idx !== player2Idx) { - const player1 = participants[player1Idx]; - const player2 = participants[player2Idx]; - const match = await this.createMatch(tournament.id, round, i + 1, player1, player2); - matches.push({ - matchId: match.id, - roundNumber: round, - matchNumber: i + 1, - player1: { id: player1.id, name: player1.username }, - player2: { id: player2.id, name: player2.username }, - status: 'scheduled', - }); - } - } - rounds.push({ - roundNumber: round, - roundName: `Round ${round}`, - matches, - isComplete: false, - }); - const temp = participants.splice(1, 1)[0]; - participants.push(temp); - } - return { - tournamentId: tournament.id, - bracketType: 'round-robin', - rounds, - totalRounds, - currentRound: 1, - }; - } - async generateSwissBracket(tournament, participants) { - const rounds = []; - const matches = []; - const shuffled = [...participants].sort(() => Math.random() - 0.5); - for (let i = 0; i < Math.floor(shuffled.length / 2); i++) { - const player1 = shuffled[i * 2]; - const player2 = shuffled[i * 2 + 1]; - const match = await this.createMatch(tournament.id, 1, i + 1, player1, player2); - matches.push({ - matchId: match.id, - roundNumber: 1, - matchNumber: i + 1, - player1: { id: player1.id, name: player1.username }, - player2: { id: player2.id, name: player2.username }, - status: 'scheduled', - }); - } - rounds.push({ - roundNumber: 1, - roundName: 'Round 1', - matches, - isComplete: false, - }); - return { - tournamentId: tournament.id, - bracketType: 'swiss', - rounds, - totalRounds: Math.ceil(Math.log2(participants.length)), - currentRound: 1, - }; - } - async seedParticipants(participants, tournament) { - const seedingMethod = tournament.rules?.matchmaking?.seedingMethod || 'random'; - let seeded; - switch (seedingMethod) { - case 'ranked': - seeded = [...participants].sort((a, b) => b.totalScore - a.totalScore); - break; - case 'seeded': - seeded = [...participants].sort((a, b) => (a.seedNumber || 999) - (b.seedNumber || 999)); - break; - case 'random': - default: - seeded = [...participants].sort(() => Math.random() - 0.5); - break; - } - for (let i = 0; i < seeded.length; i++) { - seeded[i].seedNumber = i + 1; - await this.participantRepository.update(seeded[i].id, { - seedNumber: i + 1, - status: 'active', - }); - } - return seeded; - } - getRoundNames(totalRounds) { - const names = []; - for (let i = totalRounds; i >= 1; i--) { - if (i === 1) { - names.push('Finals'); - } - else if (i === 2) { - names.push('Semi-Finals'); - } - else if (i === 3) { - names.push('Quarter-Finals'); - } - else { - names.push(`Round of ${Math.pow(2, i)}`); - } - } - return names.reverse(); - } - async createMatch(tournamentId, roundNumber, matchNumber, player1, player2) { - const match = this.matchRepository.create({ - tournamentId, - roundNumber, - matchNumber, - player1Id: player1?.id, - player1Name: player1?.username, - player2Id: player2?.id, - player2Name: player2?.username, - status: 'scheduled', - player1Score: 0, - player2Score: 0, - config: {}, - results: {}, - statistics: {}, - metadata: {}, - }); - return await this.matchRepository.save(match); - } - async submitMatchResult(matchId, winnerId, player1Score, player2Score, puzzleResults) { - this.logger.log(`Submitting match result for match ${matchId}`); - const match = await this.matchRepository.findOne({ - where: { id: matchId }, - }); - if (!match) { - throw new Error('Match not found'); - } - if (match.status === 'completed') { - throw new Error('Match already completed'); - } - const loserId = winnerId === match.player1Id ? match.player2Id : match.player1Id; - await this.matchRepository.update(matchId, { - winnerId, - winnerName: winnerId === match.player1Id ? match.player1Name : match.player2Name, - loserId, - player1Score, - player2Score, - status: 'completed', - endTime: new Date(), - duration: match.startTime - ? Math.floor((new Date().getTime() - new Date(match.startTime).getTime()) / 1000) - : 0, - results: { - puzzleResults, - }, - }); - if (winnerId) { - await this.updateParticipantStats(match.tournamentId, winnerId, true, player1Score || player2Score); - } - if (loserId) { - await this.updateParticipantStats(match.tournamentId, loserId, false, winnerId === match.player1Id ? player2Score : player1Score); - } - if (match.nextMatchId) { - await this.advanceToNextMatch(match.nextMatchId, winnerId, winnerId === match.player1Id ? match.player1Name : match.player2Name); - } - await this.checkTournamentCompletion(match.tournamentId); - } - async updateParticipantStats(tournamentId, participantId, isWin, score) { - const participant = await this.participantRepository.findOne({ - where: { id: participantId, tournamentId }, - }); - if (!participant) - return; - await this.participantRepository.update(participantId, { - wins: isWin ? participant.wins + 1 : participant.wins, - losses: !isWin ? participant.losses + 1 : participant.losses, - totalScore: participant.totalScore + score, - }); - if (!isWin) { - await this.participantRepository.update(participantId, { - status: 'eliminated', - eliminatedAt: new Date(), - }); - } - } - async advanceToNextMatch(nextMatchId, winnerId, winnerName) { - const nextMatch = await this.matchRepository.findOne({ - where: { id: nextMatchId }, - }); - if (!nextMatch) - return; - if (!nextMatch.player1Id) { - await this.matchRepository.update(nextMatchId, { - player1Id: winnerId, - player1Name: winnerName, - }); - } - else if (!nextMatch.player2Id) { - await this.matchRepository.update(nextMatchId, { - player2Id: winnerId, - player2Name: winnerName, - status: 'ready', - }); - } - } - async checkTournamentCompletion(tournamentId) { - const tournament = await this.findOne(tournamentId); - const matches = await this.matchRepository.find({ - where: { tournamentId }, - }); - const allMatchesCompleted = matches.every((m) => m.status === 'completed'); - if (allMatchesCompleted) { - const finalMatch = matches.reduce((prev, current) => current.roundNumber > prev.roundNumber ? current : prev); - await this.tournamentRepository.update(tournamentId, { - status: 'completed', - endTime: new Date(), - winnerId: finalMatch.winnerId, - }); - await this.distributePrizes(tournamentId); - } - } - async distributePrizes(tournamentId) { - this.logger.log(`Distributing prizes for tournament ${tournamentId}`); - const tournament = await this.findOne(tournamentId); - const participants = await this.participantRepository.find({ - where: { tournamentId }, - order: { wins: 'DESC', totalScore: 'DESC' }, - }); - const prizeDistribution = tournament.prizePool?.distribution || []; - for (let i = 0; i < Math.min(participants.length, prizeDistribution.length); i++) { - const participant = participants[i]; - const prize = prizeDistribution[i]; - await this.participantRepository.update(participant.id, { - finalPosition: i + 1, - prizeAwarded: { - amount: prize.amount, - currency: tournament.prizePool.currency, - badges: prize.badges, - achievements: prize.achievements, - awardedAt: new Date(), - }, - }); - } - } - async joinAsSpectator(tournamentId, userId, username, matchId) { - const spectator = this.spectatorRepository.create({ - tournamentId, - matchId, - userId, - username, - joinedAt: new Date(), - isActive: true, - engagement: {}, - preferences: {}, - }); - return await this.spectatorRepository.save(spectator); - } - async leaveAsSpectator(spectatorId) { - const spectator = await this.spectatorRepository.findOne({ - where: { id: spectatorId }, - }); - if (!spectator) - return; - const watchTime = Math.floor((new Date().getTime() - new Date(spectator.joinedAt).getTime()) / 1000); - await this.spectatorRepository.update(spectatorId, { - leftAt: new Date(), - isActive: false, - totalWatchTime: spectator.totalWatchTime + watchTime, - }); - } - async getTournamentSpectators(tournamentId) { - return await this.spectatorRepository.find({ - where: { tournamentId, isActive: true }, - }); - } - async getBracket(tournamentId) { - const tournament = await this.findOne(tournamentId); - const matches = await this.matchRepository.find({ - where: { tournamentId }, - order: { roundNumber: 'ASC', matchNumber: 'ASC' }, - }); - const rounds = []; - const roundMap = new Map(); - matches.forEach((match) => { - if (!roundMap.has(match.roundNumber)) { - roundMap.set(match.roundNumber, []); - } - roundMap.get(match.roundNumber).push({ - matchId: match.id, - roundNumber: match.roundNumber, - matchNumber: match.matchNumber, - player1: match.player1Id - ? { id: match.player1Id, name: match.player1Name } - : undefined, - player2: match.player2Id - ? { id: match.player2Id, name: match.player2Name } - : undefined, - winner: match.winnerId - ? { id: match.winnerId, name: match.winnerName } - : undefined, - status: match.status, - nextMatchId: match.nextMatchId, - loserNextMatchId: match.loserNextMatchId, - }); - }); - roundMap.forEach((matches, roundNumber) => { - rounds.push({ - roundNumber, - roundName: tournament.bracket.rounds?.find((r) => r.roundNumber === roundNumber) - ?.roundName || `Round ${roundNumber}`, - matches, - isComplete: matches.every((m) => m.status === 'completed'), - }); - }); - return { - tournamentId, - bracketType: tournament.bracketType, - rounds, - totalRounds: tournament.bracket.totalRounds || rounds.length, - currentRound: tournament.bracket.currentRound || 1, - }; - } - async getStandings(tournamentId) { - const participants = await this.participantRepository.find({ - where: { tournamentId }, - order: { wins: 'DESC', totalScore: 'DESC' }, - }); - return participants.map((p, index) => ({ - position: index + 1, - participantId: p.id, - userId: p.userId, - username: p.username, - wins: p.wins, - losses: p.losses, - draws: p.draws, - totalScore: p.totalScore, - averageAccuracy: p.averageAccuracy, - status: p.status, - })); - } - async getCompletedTournaments(limit = 10) { - return await this.tournamentRepository.find({ - where: { status: 'completed' }, - order: { endTime: 'DESC' }, - take: limit, - }); - } - async getTournamentHistory(tournamentId) { - const tournament = await this.findOne(tournamentId); - const participants = await this.participantRepository.find({ - where: { tournamentId }, - }); - const matches = await this.matchRepository.find({ - where: { tournamentId }, - order: { roundNumber: 'ASC', matchNumber: 'ASC' }, - }); - return { - tournament, - participants, - matches, - winner: participants.find((p) => p.finalPosition === 1), - topPerformers: participants - .sort((a, b) => b.totalScore - a.totalScore) - .slice(0, 10), - }; - } -}; -exports.TournamentsService = TournamentsService; -exports.TournamentsService = TournamentsService = TournamentsService_1 = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(tournament_entity_1.Tournament)), - __param(1, (0, typeorm_1.InjectRepository)(tournament_participant_entity_1.TournamentParticipant)), - __param(2, (0, typeorm_1.InjectRepository)(tournament_match_entity_1.TournamentMatch)), - __param(3, (0, typeorm_1.InjectRepository)(tournament_spectator_entity_1.TournamentSpectator)), - __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object, typeof (_d = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _d : Object]) -], TournamentsService); - - -/***/ }), - -/***/ "./src/users/dto/create-user.dto.ts": -/*!******************************************!*\ - !*** ./src/users/dto/create-user.dto.ts ***! - \******************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.CreateUserDto = void 0; -const class_validator_1 = __webpack_require__(/*! class-validator */ "class-validator"); -class CreateUserDto { -} -exports.CreateUserDto = CreateUserDto; -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.MinLength)(3), - __metadata("design:type", String) -], CreateUserDto.prototype, "username", void 0); -__decorate([ - (0, class_validator_1.IsEmail)(), - __metadata("design:type", String) -], CreateUserDto.prototype, "email", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - (0, class_validator_1.MinLength)(6), - __metadata("design:type", String) -], CreateUserDto.prototype, "password", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], CreateUserDto.prototype, "firstName", void 0); -__decorate([ - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], CreateUserDto.prototype, "lastName", void 0); - - -/***/ }), - -/***/ "./src/users/dto/update-user.dto.ts": -/*!******************************************!*\ - !*** ./src/users/dto/update-user.dto.ts ***! - \******************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.UpdateUserDto = void 0; -const mapped_types_1 = __webpack_require__(/*! @nestjs/mapped-types */ "@nestjs/mapped-types"); -const create_user_dto_1 = __webpack_require__(/*! ./create-user.dto */ "./src/users/dto/create-user.dto.ts"); -class UpdateUserDto extends (0, mapped_types_1.PartialType)(create_user_dto_1.CreateUserDto) { -} -exports.UpdateUserDto = UpdateUserDto; - - -/***/ }), - -/***/ "./src/users/entities/user-stats.entity.ts": -/*!*************************************************!*\ - !*** ./src/users/entities/user-stats.entity.ts ***! - \*************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d, _e, _f; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.UserStats = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_entity_1 = __webpack_require__(/*! ../../users/entities/user.entity */ "./src/users/entities/user.entity.ts"); -let UserStats = class UserStats { -}; -exports.UserStats = UserStats; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], UserStats.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'uuid' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], UserStats.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], UserStats.prototype, "totalPuzzlesAttempted", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], UserStats.prototype, "totalPuzzlesCompleted", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], UserStats.prototype, "totalPuzzlesFailed", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], UserStats.prototype, "totalScore", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], UserStats.prototype, "totalTimeSpent", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], UserStats.prototype, "totalHintsUsed", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], UserStats.prototype, "currentStreak", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], UserStats.prototype, "longestStreak", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 5, scale: 2, default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], UserStats.prototype, "overallAccuracy", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'decimal', precision: 10, scale: 2, default: 0 }), - __metadata("design:type", Number) -], UserStats.prototype, "averageCompletionTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], UserStats.prototype, "totalAchievements", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], UserStats.prototype, "totalGameSessions", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserStats.prototype, "difficultyStats", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", typeof (_a = typeof Record !== "undefined" && Record) === "function" ? _a : Object) -], UserStats.prototype, "categoryStats", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserStats.prototype, "timeStats", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserStats.prototype, "trends", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserStats.prototype, "milestones", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], UserStats.prototype, "rankings", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], UserStats.prototype, "lastActivityAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], UserStats.prototype, "lastCalculatedAt", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], UserStats.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_e = typeof Date !== "undefined" && Date) === "function" ? _e : Object) -], UserStats.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.OneToOne)(() => user_entity_1.User, { onDelete: 'CASCADE' }), - (0, typeorm_1.JoinColumn)({ name: 'userId' }), - __metadata("design:type", typeof (_f = typeof user_entity_1.User !== "undefined" && user_entity_1.User) === "function" ? _f : Object) -], UserStats.prototype, "user", void 0); -exports.UserStats = UserStats = __decorate([ - (0, typeorm_1.Entity)('user_stats'), - (0, typeorm_1.Index)(['userId'], { unique: true }) -], UserStats); - - -/***/ }), - -/***/ "./src/users/entities/user.entity.ts": -/*!*******************************************!*\ - !*** ./src/users/entities/user.entity.ts ***! - \*******************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var _a, _b, _c, _d, _e, _f; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.User = void 0; -const typeorm_1 = __webpack_require__(/*! typeorm */ "typeorm"); -const user_achievement_entity_1 = __webpack_require__(/*! ../../achievements/entities/user-achievement.entity */ "./src/achievements/entities/user-achievement.entity.ts"); -const game_session_entity_1 = __webpack_require__(/*! ../../game-engine/entities/game-session.entity */ "./src/game-engine/entities/game-session.entity.ts"); -let User = class User { -}; -exports.User = User; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), - __metadata("design:type", String) -], User.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50, unique: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], User.prototype, "username", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 100 }), - __metadata("design:type", String) -], User.prototype, "firstName", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 100 }), - __metadata("design:type", String) -], User.prototype, "lastName", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 255, unique: true }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], User.prototype, "email", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 255 }), - __metadata("design:type", String) -], User.prototype, "password", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 255, nullable: true }), - __metadata("design:type", String) -], User.prototype, "avatar", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'date', nullable: true }), - __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) -], User.prototype, "dateOfBirth", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 50, nullable: true }), - __metadata("design:type", String) -], User.prototype, "country", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20, default: 'active' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], User.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'varchar', length: 20, default: 'player' }), - (0, typeorm_1.Index)(), - __metadata("design:type", String) -], User.prototype, "role", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - (0, typeorm_1.Index)(), - __metadata("design:type", Number) -], User.prototype, "totalScore", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 1 }), - __metadata("design:type", Number) -], User.prototype, "level", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], User.prototype, "experience", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], User.prototype, "puzzlesSolved", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'int', default: 0 }), - __metadata("design:type", Number) -], User.prototype, "achievementsCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) -], User.prototype, "lastLoginAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'timestamp with time zone', nullable: true }), - __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) -], User.prototype, "lastActiveAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], User.prototype, "preferences", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], User.prototype, "profile", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'jsonb', default: {} }), - __metadata("design:type", Object) -], User.prototype, "metadata", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_d = typeof Date !== "undefined" && Date) === "function" ? _d : Object) -], User.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)(), - (0, typeorm_1.Index)(), - __metadata("design:type", typeof (_e = typeof Date !== "undefined" && Date) === "function" ? _e : Object) -], User.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.DeleteDateColumn)(), - __metadata("design:type", typeof (_f = typeof Date !== "undefined" && Date) === "function" ? _f : Object) -], User.prototype, "deletedAt", void 0); -__decorate([ - (0, typeorm_1.OneToMany)(() => user_achievement_entity_1.UserAchievement, (userAchievement) => userAchievement.user), - __metadata("design:type", Array) -], User.prototype, "achievements", void 0); -__decorate([ - (0, typeorm_1.OneToMany)('PuzzleProgress', 'user'), - __metadata("design:type", Array) -], User.prototype, "puzzleProgress", void 0); -__decorate([ - (0, typeorm_1.OneToMany)(() => game_session_entity_1.GameSession, (session) => session.user), - __metadata("design:type", Array) -], User.prototype, "gameSessions", void 0); -exports.User = User = __decorate([ - (0, typeorm_1.Entity)('users'), - (0, typeorm_1.Index)(['email'], { unique: true }), - (0, typeorm_1.Index)(['username'], { unique: true }) -], User); - - -/***/ }), - -/***/ "./src/users/users.controller.ts": -/*!***************************************!*\ - !*** ./src/users/users.controller.ts ***! - \***************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var _a, _b, _c, _d, _e; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.UsersController = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const platform_express_1 = __webpack_require__(/*! @nestjs/platform-express */ "@nestjs/platform-express"); -const file_upload_validator_1 = __webpack_require__(/*! ../common/validators/file-upload.validator */ "./src/common/validators/file-upload.validator.ts"); -const users_service_1 = __webpack_require__(/*! ./users.service */ "./src/users/users.service.ts"); -const create_user_dto_1 = __webpack_require__(/*! ./dto/create-user.dto */ "./src/users/dto/create-user.dto.ts"); -const update_user_dto_1 = __webpack_require__(/*! ./dto/update-user.dto */ "./src/users/dto/update-user.dto.ts"); -let UsersController = class UsersController { - constructor(usersService) { - this.usersService = usersService; - } - create(createUserDto) { - return this.usersService.create(createUserDto); - } - findAll() { - return this.usersService.findAll(); - } - findOne(id) { - return this.usersService.findOne(id); - } - update(id, updateUserDto) { - return this.usersService.update(id, updateUserDto); - } - remove(id) { - return this.usersService.remove(id); - } - uploadAvatar(file) { - return { message: 'Avatar uploaded successfully', filename: file.originalname }; - } -}; -exports.UsersController = UsersController; -__decorate([ - (0, common_1.Post)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [typeof (_b = typeof create_user_dto_1.CreateUserDto !== "undefined" && create_user_dto_1.CreateUserDto) === "function" ? _b : Object]), - __metadata("design:returntype", void 0) -], UsersController.prototype, "create", null); -__decorate([ - (0, common_1.Get)(), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], UsersController.prototype, "findAll", null); -__decorate([ - (0, common_1.Get)(':id'), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", void 0) -], UsersController.prototype, "findOne", null); -__decorate([ - (0, common_1.Patch)(':id'), - __param(0, (0, common_1.Param)('id')), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String, typeof (_c = typeof update_user_dto_1.UpdateUserDto !== "undefined" && update_user_dto_1.UpdateUserDto) === "function" ? _c : Object]), - __metadata("design:returntype", void 0) -], UsersController.prototype, "update", null); -__decorate([ - (0, common_1.Delete)(':id'), - __param(0, (0, common_1.Param)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [String]), - __metadata("design:returntype", void 0) -], UsersController.prototype, "remove", null); -__decorate([ - (0, common_1.Post)('avatar'), - (0, common_1.UseInterceptors)((0, platform_express_1.FileInterceptor)('file', { - fileFilter: (0, file_upload_validator_1.fileFilter)(['.png', '.jpg', '.jpeg'], ['image/png', 'image/jpeg']), - limits: { fileSize: 2 * 1024 * 1024 }, - })), - __param(0, (0, common_1.UploadedFile)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [typeof (_e = typeof Express !== "undefined" && (_d = Express.Multer) !== void 0 && _d.File) === "function" ? _e : Object]), - __metadata("design:returntype", void 0) -], UsersController.prototype, "uploadAvatar", null); -exports.UsersController = UsersController = __decorate([ - (0, common_1.Controller)('users'), - __metadata("design:paramtypes", [typeof (_a = typeof users_service_1.UsersService !== "undefined" && users_service_1.UsersService) === "function" ? _a : Object]) -], UsersController); - - -/***/ }), - -/***/ "./src/users/users.module.ts": -/*!***********************************!*\ - !*** ./src/users/users.module.ts ***! - \***********************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.UsersModule = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -const users_service_1 = __webpack_require__(/*! ./users.service */ "./src/users/users.service.ts"); -const users_controller_1 = __webpack_require__(/*! ./users.controller */ "./src/users/users.controller.ts"); -let UsersModule = class UsersModule { -}; -exports.UsersModule = UsersModule; -exports.UsersModule = UsersModule = __decorate([ - (0, common_1.Module)({ - controllers: [users_controller_1.UsersController], - providers: [users_service_1.UsersService], - }) -], UsersModule); - - -/***/ }), - -/***/ "./src/users/users.service.ts": -/*!************************************!*\ - !*** ./src/users/users.service.ts ***! - \************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.UsersService = void 0; -const common_1 = __webpack_require__(/*! @nestjs/common */ "@nestjs/common"); -let UsersService = class UsersService { - create(createUserDto) { - return 'This action adds a new user'; - } - findAll() { - return `This action returns all users`; - } - findOne(id) { - return `This action returns a user with id #${id}`; - } - update(id, updateUserDto) { - return `This action updates a user with id #${id}`; - } - remove(id) { - return `This action removes a user with id #${id}`; - } -}; -exports.UsersService = UsersService; -exports.UsersService = UsersService = __decorate([ - (0, common_1.Injectable)() -], UsersService); - - -/***/ }), - -/***/ "@nestjs/common": -/*!*********************************!*\ - !*** external "@nestjs/common" ***! - \*********************************/ -/***/ ((module) => { - -module.exports = require("@nestjs/common"); - -/***/ }), - -/***/ "@nestjs/config": -/*!*********************************!*\ - !*** external "@nestjs/config" ***! - \*********************************/ -/***/ ((module) => { - -module.exports = require("@nestjs/config"); - -/***/ }), - -/***/ "@nestjs/core": -/*!*******************************!*\ - !*** external "@nestjs/core" ***! - \*******************************/ -/***/ ((module) => { - -module.exports = require("@nestjs/core"); - -/***/ }), - -/***/ "@nestjs/mapped-types": -/*!***************************************!*\ - !*** external "@nestjs/mapped-types" ***! - \***************************************/ -/***/ ((module) => { - -module.exports = require("@nestjs/mapped-types"); - -/***/ }), - -/***/ "@nestjs/passport": -/*!***********************************!*\ - !*** external "@nestjs/passport" ***! - \***********************************/ -/***/ ((module) => { - -module.exports = require("@nestjs/passport"); - -/***/ }), - -/***/ "@nestjs/platform-express": -/*!*******************************************!*\ - !*** external "@nestjs/platform-express" ***! - \*******************************************/ -/***/ ((module) => { - -module.exports = require("@nestjs/platform-express"); - -/***/ }), - -/***/ "@nestjs/schedule": -/*!***********************************!*\ - !*** external "@nestjs/schedule" ***! - \***********************************/ -/***/ ((module) => { - -module.exports = require("@nestjs/schedule"); - -/***/ }), - -/***/ "@nestjs/terminus": -/*!***********************************!*\ - !*** external "@nestjs/terminus" ***! - \***********************************/ -/***/ ((module) => { - -module.exports = require("@nestjs/terminus"); - -/***/ }), - -/***/ "@nestjs/throttler": -/*!************************************!*\ - !*** external "@nestjs/throttler" ***! - \************************************/ -/***/ ((module) => { - -module.exports = require("@nestjs/throttler"); - -/***/ }), - -/***/ "@nestjs/typeorm": -/*!**********************************!*\ - !*** external "@nestjs/typeorm" ***! - \**********************************/ -/***/ ((module) => { - -module.exports = require("@nestjs/typeorm"); - -/***/ }), - -/***/ "@sentry/node": -/*!*******************************!*\ - !*** external "@sentry/node" ***! - \*******************************/ -/***/ ((module) => { - -module.exports = require("@sentry/node"); - -/***/ }), - -/***/ "class-transformer": -/*!************************************!*\ - !*** external "class-transformer" ***! - \************************************/ -/***/ ((module) => { - -module.exports = require("class-transformer"); - -/***/ }), - -/***/ "class-validator": -/*!**********************************!*\ - !*** external "class-validator" ***! - \**********************************/ -/***/ ((module) => { - -module.exports = require("class-validator"); - -/***/ }), - -/***/ "dotenv": -/*!*************************!*\ - !*** external "dotenv" ***! - \*************************/ -/***/ ((module) => { - -module.exports = require("dotenv"); - -/***/ }), - -/***/ "helmet": -/*!*************************!*\ - !*** external "helmet" ***! - \*************************/ -/***/ ((module) => { - -module.exports = require("helmet"); - -/***/ }), - -/***/ "nest-winston": -/*!*******************************!*\ - !*** external "nest-winston" ***! - \*******************************/ -/***/ ((module) => { - -module.exports = require("nest-winston"); - -/***/ }), - -/***/ "nodemailer": -/*!*****************************!*\ - !*** external "nodemailer" ***! - \*****************************/ -/***/ ((module) => { - -module.exports = require("nodemailer"); - -/***/ }), - -/***/ "rxjs/operators": -/*!*********************************!*\ - !*** external "rxjs/operators" ***! - \*********************************/ -/***/ ((module) => { - -module.exports = require("rxjs/operators"); - -/***/ }), - -/***/ "typeorm": -/*!**************************!*\ - !*** external "typeorm" ***! - \**************************/ -/***/ ((module) => { - -module.exports = require("typeorm"); - -/***/ }), - -/***/ "winston": -/*!**************************!*\ - !*** external "winston" ***! - \**************************/ -/***/ ((module) => { - -module.exports = require("winston"); - -/***/ }), - -/***/ "xss": -/*!**********************!*\ - !*** external "xss" ***! - \**********************/ -/***/ ((module) => { - -module.exports = require("xss"); - -/***/ }), - -/***/ "path": -/*!***********************!*\ - !*** external "path" ***! - \***********************/ -/***/ ((module) => { - -module.exports = require("path"); - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ -/******/ // startup -/******/ // Load entry module and return exports -/******/ // This entry module is referenced by other modules so it can't be inlined -/******/ var __webpack_exports__ = __webpack_require__("./src/main.ts"); -/******/ -/******/ })() -; \ No newline at end of file +git add . +git commit -m "Fix TypeScript build errors and ignore dist folder" +git push \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d813c27..ad856a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,14150 +1,3 @@ -{ - "name": "quest-service", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "quest-service", - "version": "0.0.1", - "license": "UNLICENSED", - "dependencies": { - "@nestjs/common": "^10.4.4", - "@nestjs/config": "^3.3.0", - "@nestjs/core": "^10.4.4", - "@nestjs/mapped-types": "^2.0.5", - "@nestjs/microservices": "^10.4.4", - "@nestjs/platform-express": "^10.4.4", - "@nestjs/schedule": "^6.0.0", - "@nestjs/terminus": "^11.0.0", - "@nestjs/throttler": "^5.2.0", - "@nestjs/typeorm": "^11.0.0", - "@sentry/integrations": "^7.114.0", - "@sentry/node": "^10.5.0", - "@stellar/stellar-sdk": "^14.4.3", - "@willsoto/nestjs-prometheus": "^6.0.2", - "amqp-connection-manager": "^5.0.0", - "amqplib": "^0.10.9", - "cache-manager": "^7.1.1", - "class-transformer": "^0.5.1", - "class-validator": "^0.14.1", - "date-fns": "^4.1.0", - "helmet": "^7.2.0", - "nest-winston": "^1.9.7", - "nodemailer": "^7.0.5", - "pg": "^8.16.3", - "prom-client": "^15.1.3", - "reflect-metadata": "^0.1.14", - "rxjs": "^7.8.1", - "typeorm": "^0.3.25", - "winston": "^3.11.0", - "winston-daily-rotate-file": "^5.0.0", - "winston-elasticsearch": "^0.19.0", - "xss": "^1.0.15" - }, - "devDependencies": { - "@nestjs/cli": "^10.4.5", - "@nestjs/jwt": "^11.0.0", - "@nestjs/passport": "^11.0.5", - "@nestjs/schematics": "^10.1.4", - "@nestjs/swagger": "^7.4.2", - "@nestjs/testing": "^10.4.4", - "@types/bcrypt": "^6.0.0", - "@types/express": "^4.17.21", - "@types/jest": "^29.5.12", - "@types/multer": "^2.0.0", - "@types/node": "^20.19.30", - "@types/passport-jwt": "^4.0.1", - "@types/supertest": "^6.0.2", - "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", - "bcrypt": "^6.0.0", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.2.1", - "husky": "^8.0.3", - "jest": "^29.7.0", - "lint-staged": "^15.2.8", - "passport-jwt": "^4.0.1", - "prettier": "^3.3.3", - "source-map-support": "^0.5.21", - "supertest": "^6.3.4", - "ts-jest": "^29.2.4", - "ts-loader": "^9.5.1", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.5.4", - "webpack": "^5.101.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@angular-devkit/core": { - "version": "17.3.11", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-17.3.11.tgz", - "integrity": "sha512-vTNDYNsLIWpYk2I969LMQFH29GTsLzxNk/0cLw5q56ARF0v5sIWfHYwGTS88jdDqIpuuettcSczbxeA7EuAmqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.12.0", - "ajv-formats": "2.1.1", - "jsonc-parser": "3.2.1", - "picomatch": "4.0.1", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^3.5.2" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/core/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "17.3.11", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-17.3.11.tgz", - "integrity": "sha512-I5wviiIqiFwar9Pdk30Lujk8FczEEc18i22A5c6Z9lbmhPQdTroDnEQdsfXjy404wPe8H62s0I15o4pmMGfTYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "17.3.11", - "jsonc-parser": "3.2.1", - "magic-string": "0.30.8", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics-cli": { - "version": "17.3.11", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics-cli/-/schematics-cli-17.3.11.tgz", - "integrity": "sha512-kcOMqp+PHAKkqRad7Zd7PbpqJ0LqLaNZdY1+k66lLWmkEBozgq8v4ASn/puPWf9Bo0HpCiK+EzLf0VHE8Z/y6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "17.3.11", - "@angular-devkit/schematics": "17.3.11", - "ansi-colors": "4.1.3", - "inquirer": "9.2.15", - "symbol-observable": "4.0.0", - "yargs-parser": "21.1.1" - }, - "bin": { - "schematics": "bin/schematics.js" - }, - "engines": { - "node": "^18.13.0 || >=20.9.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/inquirer": { - "version": "9.2.15", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.15.tgz", - "integrity": "sha512-vI2w4zl/mDluHt9YEQ/543VTCwPKWiHzKtm9dM2V0NdFcqEexDAjUHzO1oA60HRNaVifGXXM1tRRNluLVHa0Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ljharb/through": "^2.3.12", - "ansi-escapes": "^4.3.2", - "chalk": "^5.3.0", - "cli-cursor": "^3.1.0", - "cli-width": "^4.1.0", - "external-editor": "^3.1.0", - "figures": "^3.2.0", - "lodash": "^4.17.21", - "mute-stream": "1.0.0", - "ora": "^5.4.1", - "run-async": "^3.0.0", - "rxjs": "^7.8.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/run-async": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", - "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/@angular-devkit/schematics-cli/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular-devkit/schematics/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@apm-js-collab/code-transformer": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@apm-js-collab/code-transformer/-/code-transformer-0.8.2.tgz", - "integrity": "sha512-YRjJjNq5KFSjDUoqu5pFUWrrsvGOxl6c3bu+uMFc9HNNptZ2rNU/TI2nLw4jnhQNtka972Ee2m3uqbvDQtPeCA==", - "license": "Apache-2.0" - }, - "node_modules/@apm-js-collab/tracing-hooks": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@apm-js-collab/tracing-hooks/-/tracing-hooks-0.3.1.tgz", - "integrity": "sha512-Vu1CbmPURlN5fTboVuKMoJjbO5qcq9fA5YXpskx3dXe/zTBvjODFoerw+69rVBlRLrJpwPqSDqEuJDEKIrTldw==", - "license": "Apache-2.0", - "dependencies": { - "@apm-js-collab/code-transformer": "^0.8.0", - "debug": "^4.4.1", - "module-details-from-path": "^1.0.4" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", - "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.6.tgz", - "integrity": "sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.6.tgz", - "integrity": "sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.6.tgz", - "integrity": "sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", - "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", - "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.6" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", - "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", - "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", - "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.6.tgz", - "integrity": "sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/generator": "^7.28.6", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.6", - "@babel/template": "^7.28.6", - "@babel/types": "^7.28.6", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", - "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@borewit/text-codec": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.1.tgz", - "integrity": "sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@cacheable/utils": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.3.3.tgz", - "integrity": "sha512-JsXDL70gQ+1Vc2W/KUFfkAJzgb4puKwwKehNLuB+HrNKWf91O736kGfxn4KujXCCSuh6mRRL4XEB0PkAFjWS0A==", - "license": "MIT", - "dependencies": { - "hashery": "^1.3.0", - "keyv": "^5.5.5" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.8.tgz", - "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", - "license": "MIT", - "dependencies": { - "@so-ric/colorspace": "^1.1.6", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@elastic/ecs-helpers": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@elastic/ecs-helpers/-/ecs-helpers-2.1.1.tgz", - "integrity": "sha512-ItoNazMnYdlUCmkBYTXc3SG6PF7UlVTbvMdHPvXkfTMPdwGv2G1Xtp5CjDHaGHGOZSwaDrW4RSCXvA/lMSU+rg==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@elastic/ecs-pino-format": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@elastic/ecs-pino-format/-/ecs-pino-format-1.5.0.tgz", - "integrity": "sha512-7MMVmT50ucEl7no8mUgCIl+pffBVNRl36uZi0vmalWa2xPWISBxM9k9WSP/WTgOkmGj9G35e5g3UfCS1zxshBg==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@elastic/ecs-helpers": "^2.1.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@elastic/elasticsearch": { - "version": "8.19.1", - "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-8.19.1.tgz", - "integrity": "sha512-+1j9NnQVOX+lbWB8LhCM7IkUmjU05Y4+BmSLfusq0msCsQb1Va+OUKFCoOXjCJqQrcgdRdQCjYYyolQ/npQALQ==", - "license": "Apache-2.0", - "dependencies": { - "@elastic/transport": "^8.9.6", - "apache-arrow": "18.x - 21.x", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@elastic/transport": { - "version": "8.10.1", - "resolved": "https://registry.npmjs.org/@elastic/transport/-/transport-8.10.1.tgz", - "integrity": "sha512-xo2lPBAJEt81fQRAKa9T/gUq1SPGBHpSnVUXhoSpL996fPZRAfQwFA4BZtEUQL1p8Dezodd3ZN8Wwno+mYyKuw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "1.x", - "@opentelemetry/core": "2.x", - "debug": "^4.4.1", - "hpagent": "^1.2.0", - "ms": "^2.1.3", - "secure-json-parse": "^3.0.1", - "tslib": "^2.8.1", - "undici": "^6.21.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", - "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", - "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", - "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", - "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", - "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", - "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@jest/reporters/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", - "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", - "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", - "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", - "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@keyv/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", - "license": "MIT" - }, - "node_modules/@ljharb/through": { - "version": "2.3.14", - "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.14.tgz", - "integrity": "sha512-ajBvlKpWucBB17FuQYUShqpqy8GRgYEpJW0vWJbUu1CV9lWyrDCapy0lScU8T8Z6qn49sSwJB3+M+evYIdGg+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/@lukeed/csprng": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", - "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@microsoft/tsdoc": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", - "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nestjs/cli": { - "version": "10.4.9", - "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-10.4.9.tgz", - "integrity": "sha512-s8qYd97bggqeK7Op3iD49X2MpFtW4LVNLAwXFkfbRxKME6IYT7X0muNTJ2+QfI8hpbNx9isWkrLWIp+g5FOhiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "17.3.11", - "@angular-devkit/schematics": "17.3.11", - "@angular-devkit/schematics-cli": "17.3.11", - "@nestjs/schematics": "^10.0.1", - "chalk": "4.1.2", - "chokidar": "3.6.0", - "cli-table3": "0.6.5", - "commander": "4.1.1", - "fork-ts-checker-webpack-plugin": "9.0.2", - "glob": "10.4.5", - "inquirer": "8.2.6", - "node-emoji": "1.11.0", - "ora": "5.4.1", - "tree-kill": "1.2.2", - "tsconfig-paths": "4.2.0", - "tsconfig-paths-webpack-plugin": "4.2.0", - "typescript": "5.7.2", - "webpack": "5.97.1", - "webpack-node-externals": "3.0.0" - }, - "bin": { - "nest": "bin/nest.js" - }, - "engines": { - "node": ">= 16.14" - }, - "peerDependencies": { - "@swc/cli": "^0.1.62 || ^0.3.0 || ^0.4.0 || ^0.5.0", - "@swc/core": "^1.3.62" - }, - "peerDependenciesMeta": { - "@swc/cli": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/@nestjs/cli/node_modules/es-module-lexer": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nestjs/cli/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@nestjs/cli/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@nestjs/cli/node_modules/typescript": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", - "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@nestjs/cli/node_modules/webpack": { - "version": "5.97.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", - "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/@nestjs/common": { - "version": "10.4.22", - "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-10.4.22.tgz", - "integrity": "sha512-fxJ4v85nDHaqT1PmfNCQ37b/jcv2OojtXTaK1P2uAXhzLf9qq6WNUOFvxBrV4fhQek1EQoT1o9oj5xAZmv3NRw==", - "license": "MIT", - "peer": true, - "dependencies": { - "file-type": "20.4.1", - "iterare": "1.2.1", - "tslib": "2.8.1", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "class-transformer": "*", - "class-validator": "*", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } - } - }, - "node_modules/@nestjs/config": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-3.3.0.tgz", - "integrity": "sha512-pdGTp8m9d0ZCrjTpjkUbZx6gyf2IKf+7zlkrPNMsJzYZ4bFRRTpXrnj+556/5uiI6AfL5mMrJc2u7dB6bvM+VA==", - "license": "MIT", - "dependencies": { - "dotenv": "16.4.5", - "dotenv-expand": "10.0.0", - "lodash": "4.17.21" - }, - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "rxjs": "^7.1.0" - } - }, - "node_modules/@nestjs/config/node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/@nestjs/core": { - "version": "10.4.22", - "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-10.4.22.tgz", - "integrity": "sha512-6IX9+VwjiKtCjx+mXVPncpkQ5ZjKfmssOZPFexmT+6T9H9wZ3svpYACAo7+9e7Nr9DZSoRZw3pffkJP7Z0UjaA==", - "hasInstallScript": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@nuxtjs/opencollective": "0.3.2", - "fast-safe-stringify": "2.1.1", - "iterare": "1.2.1", - "path-to-regexp": "3.3.0", - "tslib": "2.8.1", - "uid": "2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/microservices": "^10.0.0", - "@nestjs/platform-express": "^10.0.0", - "@nestjs/websockets": "^10.0.0", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/platform-express": { - "optional": true - }, - "@nestjs/websockets": { - "optional": true - } - } - }, - "node_modules/@nestjs/jwt": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-11.0.2.tgz", - "integrity": "sha512-rK8aE/3/Ma45gAWfCksAXUNbOoSOUudU0Kn3rT39htPF7wsYXtKfjALKeKKJbFrIWbLjsbqfXX5bIJNvgBugGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/jsonwebtoken": "9.0.10", - "jsonwebtoken": "9.0.3" - }, - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0" - } - }, - "node_modules/@nestjs/mapped-types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.1.0.tgz", - "integrity": "sha512-W+n+rM69XsFdwORF11UqJahn4J3xi4g/ZEOlJNL6KoW5ygWSmBB2p0S2BZ4FQeS/NDH72e6xIcu35SfJnE8bXw==", - "license": "MIT", - "peerDependencies": { - "@nestjs/common": "^10.0.0 || ^11.0.0", - "class-transformer": "^0.4.0 || ^0.5.0", - "class-validator": "^0.13.0 || ^0.14.0", - "reflect-metadata": "^0.1.12 || ^0.2.0" - }, - "peerDependenciesMeta": { - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } - } - }, - "node_modules/@nestjs/microservices": { - "version": "10.4.22", - "resolved": "https://registry.npmjs.org/@nestjs/microservices/-/microservices-10.4.22.tgz", - "integrity": "sha512-9Oxc0jQuppGLaQv5yaB2tVS2rAZzZ9NqDS1A4UlDLiYwJB7M6e89G6tmyOQjGjPwgoXPxQS4Vg2voSiKiED2gw==", - "license": "MIT", - "peer": true, - "dependencies": { - "iterare": "1.2.1", - "tslib": "2.8.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@grpc/grpc-js": "*", - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0", - "@nestjs/websockets": "^10.0.0", - "amqp-connection-manager": "*", - "amqplib": "*", - "cache-manager": "*", - "ioredis": "*", - "kafkajs": "*", - "mqtt": "*", - "nats": "*", - "reflect-metadata": "^0.1.12 || ^0.2.0", - "rxjs": "^7.1.0" - }, - "peerDependenciesMeta": { - "@grpc/grpc-js": { - "optional": true - }, - "@nestjs/websockets": { - "optional": true - }, - "amqp-connection-manager": { - "optional": true - }, - "amqplib": { - "optional": true - }, - "cache-manager": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "kafkajs": { - "optional": true - }, - "mqtt": { - "optional": true - }, - "nats": { - "optional": true - } - } - }, - "node_modules/@nestjs/passport": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-11.0.5.tgz", - "integrity": "sha512-ulQX6mbjlws92PIM15Naes4F4p2JoxGnIJuUsdXQPT+Oo2sqQmENEZXM7eYuimocfHnKlcfZOuyzbA33LwUlOQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@nestjs/common": "^10.0.0 || ^11.0.0", - "passport": "^0.5.0 || ^0.6.0 || ^0.7.0" - } - }, - "node_modules/@nestjs/platform-express": { - "version": "10.4.22", - "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-10.4.22.tgz", - "integrity": "sha512-ySSq7Py/DFozzZdNDH67m/vHoeVdphDniWBnl6q5QVoXldDdrZIHLXLRMPayTDh5A95nt7jjJzmD4qpTbNQ6tA==", - "license": "MIT", - "peer": true, - "dependencies": { - "body-parser": "1.20.4", - "cors": "2.8.5", - "express": "4.22.1", - "multer": "2.0.2", - "tslib": "2.8.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0" - } - }, - "node_modules/@nestjs/schedule": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-6.1.0.tgz", - "integrity": "sha512-W25Ydc933Gzb1/oo7+bWzzDiOissE+h/dhIAPugA39b9MuIzBbLybuXpc1AjoQLczO3v0ldmxaffVl87W0uqoQ==", - "license": "MIT", - "dependencies": { - "cron": "4.3.5" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0 || ^11.0.0", - "@nestjs/core": "^10.0.0 || ^11.0.0" - } - }, - "node_modules/@nestjs/schematics": { - "version": "10.2.3", - "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-10.2.3.tgz", - "integrity": "sha512-4e8gxaCk7DhBxVUly2PjYL4xC2ifDFexCqq1/u4TtivLGXotVk0wHdYuPYe1tHTHuR1lsOkRbfOCpkdTnigLVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "17.3.11", - "@angular-devkit/schematics": "17.3.11", - "comment-json": "4.2.5", - "jsonc-parser": "3.3.1", - "pluralize": "8.0.0" - }, - "peerDependencies": { - "typescript": ">=4.8.2" - } - }, - "node_modules/@nestjs/schematics/node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@nestjs/swagger": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-7.4.2.tgz", - "integrity": "sha512-Mu6TEn1M/owIvAx2B4DUQObQXqo2028R2s9rSZ/hJEgBK95+doTwS0DjmVA2wTeZTyVtXOoN7CsoM5pONBzvKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@microsoft/tsdoc": "^0.15.0", - "@nestjs/mapped-types": "2.0.5", - "js-yaml": "4.1.0", - "lodash": "4.17.21", - "path-to-regexp": "3.3.0", - "swagger-ui-dist": "5.17.14" - }, - "peerDependencies": { - "@fastify/static": "^6.0.0 || ^7.0.0", - "@nestjs/common": "^9.0.0 || ^10.0.0", - "@nestjs/core": "^9.0.0 || ^10.0.0", - "class-transformer": "*", - "class-validator": "*", - "reflect-metadata": "^0.1.12 || ^0.2.0" - }, - "peerDependenciesMeta": { - "@fastify/static": { - "optional": true - }, - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } - } - }, - "node_modules/@nestjs/swagger/node_modules/@nestjs/mapped-types": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-2.0.5.tgz", - "integrity": "sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@nestjs/common": "^8.0.0 || ^9.0.0 || ^10.0.0", - "class-transformer": "^0.4.0 || ^0.5.0", - "class-validator": "^0.13.0 || ^0.14.0", - "reflect-metadata": "^0.1.12 || ^0.2.0" - }, - "peerDependenciesMeta": { - "class-transformer": { - "optional": true - }, - "class-validator": { - "optional": true - } - } - }, - "node_modules/@nestjs/terminus": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/terminus/-/terminus-11.0.0.tgz", - "integrity": "sha512-c55LOo9YGovmQHtFUMa/vDaxGZ2cglMTZejqgHREaApt/GArTfgYYGwhRXPLq8ZwiQQlLuYB+79e9iA8mlDSLA==", - "license": "MIT", - "dependencies": { - "boxen": "5.1.2", - "check-disk-space": "3.4.0" - }, - "peerDependencies": { - "@grpc/grpc-js": "*", - "@grpc/proto-loader": "*", - "@mikro-orm/core": "*", - "@mikro-orm/nestjs": "*", - "@nestjs/axios": "^2.0.0 || ^3.0.0 || ^4.0.0", - "@nestjs/common": "^10.0.0 || ^11.0.0", - "@nestjs/core": "^10.0.0 || ^11.0.0", - "@nestjs/microservices": "^10.0.0 || ^11.0.0", - "@nestjs/mongoose": "^11.0.0", - "@nestjs/sequelize": "^10.0.0 || ^11.0.0", - "@nestjs/typeorm": "^10.0.0 || ^11.0.0", - "@prisma/client": "*", - "mongoose": "*", - "reflect-metadata": "0.1.x || 0.2.x", - "rxjs": "7.x", - "sequelize": "*", - "typeorm": "*" - }, - "peerDependenciesMeta": { - "@grpc/grpc-js": { - "optional": true - }, - "@grpc/proto-loader": { - "optional": true - }, - "@mikro-orm/core": { - "optional": true - }, - "@mikro-orm/nestjs": { - "optional": true - }, - "@nestjs/axios": { - "optional": true - }, - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/mongoose": { - "optional": true - }, - "@nestjs/sequelize": { - "optional": true - }, - "@nestjs/typeorm": { - "optional": true - }, - "@prisma/client": { - "optional": true - }, - "mongoose": { - "optional": true - }, - "sequelize": { - "optional": true - }, - "typeorm": { - "optional": true - } - } - }, - "node_modules/@nestjs/testing": { - "version": "10.4.22", - "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-10.4.22.tgz", - "integrity": "sha512-HO9aPus3bAedAC+jKVAA8jTdaj4fs5M9fing4giHrcYV2txe9CvC1l1WAjwQ9RDhEHdugjY4y+FZA/U/YqPZrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "2.8.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nest" - }, - "peerDependencies": { - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.0.0", - "@nestjs/microservices": "^10.0.0", - "@nestjs/platform-express": "^10.0.0" - }, - "peerDependenciesMeta": { - "@nestjs/microservices": { - "optional": true - }, - "@nestjs/platform-express": { - "optional": true - } - } - }, - "node_modules/@nestjs/throttler": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@nestjs/throttler/-/throttler-5.2.0.tgz", - "integrity": "sha512-G/G/MV3xf6sy1DwmnJsgeL+d2tQ/xGRNa9ZhZjm9Kyxp+3+ylGzwJtcnhWlN82PMEp3TiDQpTt+9waOIg/bpPg==", - "license": "MIT", - "peerDependencies": { - "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", - "@nestjs/core": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0", - "reflect-metadata": "^0.1.13 || ^0.2.0" - } - }, - "node_modules/@nestjs/typeorm": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-11.0.0.tgz", - "integrity": "sha512-SOeUQl70Lb2OfhGkvnh4KXWlsd+zA08RuuQgT7kKbzivngxzSo1Oc7Usu5VxCxACQC9wc2l9esOHILSJeK7rJA==", - "license": "MIT", - "peer": true, - "peerDependencies": { - "@nestjs/common": "^10.0.0 || ^11.0.0", - "@nestjs/core": "^10.0.0 || ^11.0.0", - "reflect-metadata": "^0.1.13 || ^0.2.0", - "rxjs": "^7.2.0", - "typeorm": "^0.3.0" - } - }, - "node_modules/@noble/curves": { - "version": "1.9.7", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz", - "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nuxtjs/opencollective": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@nuxtjs/opencollective/-/opencollective-0.3.2.tgz", - "integrity": "sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.0", - "node-fetch": "^2.6.1" - }, - "bin": { - "opencollective": "bin/opencollective.js" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@opentelemetry/api-logs": { - "version": "0.210.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.210.0.tgz", - "integrity": "sha512-CMtLxp+lYDriveZejpBND/2TmadrrhUfChyxzmkFtHaMDdSKfP59MAYyA0ICBvEBdm3iXwLcaj/8Ic/pnGw9Yg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.3.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@opentelemetry/context-async-hooks": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.5.0.tgz", - "integrity": "sha512-uOXpVX0ZjO7heSVjhheW2XEPrhQAWr2BScDPoZ9UDycl5iuHG+Usyc3AIfG6kZeC1GyLpMInpQ6X5+9n69yOFw==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/core": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.5.0.tgz", - "integrity": "sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/instrumentation": { - "version": "0.210.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.210.0.tgz", - "integrity": "sha512-sLMhyHmW9katVaLUOKpfCnxSGhZq2t1ReWgwsu2cSgxmDVMB690H9TanuexanpFI94PJaokrqbp8u9KYZDUT5g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@opentelemetry/api-logs": "0.210.0", - "import-in-the-middle": "^2.0.0", - "require-in-the-middle": "^8.0.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-amqplib": { - "version": "0.57.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.57.0.tgz", - "integrity": "sha512-hgHnbcopDXju7164mwZu7+6mLT/+O+6MsyedekrXL+HQAYenMqeG7cmUOE0vI6s/9nW08EGHXpD+Q9GhLU1smA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.33.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-connect": { - "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.53.0.tgz", - "integrity": "sha512-SoFqipWLUEYVIxvz0VYX9uWLJhatJG4cqXpRe1iophLofuEtqFUn8YaEezjz2eJK74eTUQ0f0dJVOq7yMXsJGQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.27.0", - "@types/connect": "3.4.38" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-dataloader": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.27.0.tgz", - "integrity": "sha512-8e7n8edfTN28nJDpR/H59iW3RbW1fvpt0xatGTfSbL8JS4FLizfjPxO7JLbyWh9D3DSXxrTnvOvXpt6V5pnxJg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.210.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-express": { - "version": "0.58.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.58.0.tgz", - "integrity": "sha512-UuGst6/1XPcswrIm5vmhuUwK/9qx9+fmNB+4xNk3lfpgQlnQxahy20xmlo3I+LIyA5ZA3CR2CDXslxAMqwminA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-fs": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.29.0.tgz", - "integrity": "sha512-JXPygU1RbrHNc5kD+626v3baV5KamB4RD4I9m9nUTd/HyfLZQSA3Z2z3VOebB3ChJhRDERmQjLiWvwJMHecKPg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.210.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-generic-pool": { - "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.53.0.tgz", - "integrity": "sha512-h49axGXGlvWzyQ4exPyd0qG9EUa+JP+hYklFg6V+Gm4ZC2Zam1QeJno/TQ8+qrLvsVvaFnBjTdS53hALpR3h3Q==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.210.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-graphql": { - "version": "0.57.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.57.0.tgz", - "integrity": "sha512-wjtSavcp9MsGcnA1hj8ArgsL3EkHIiTLGMwqVohs5pSnMGeao0t2mgAuMiv78KdoR3kO3DUjks8xPO5Q6uJekg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.210.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-hapi": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.56.0.tgz", - "integrity": "sha512-HgLxgO0G8V9y/6yW2pS3Fv5M3hz9WtWUAdbuszQDZ8vXDQSd1sI9FYHLdZW+td/8xCLApm8Li4QIeCkRSpHVTg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-http": { - "version": "0.210.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.210.0.tgz", - "integrity": "sha512-dICO+0D0VBnrDOmDXOvpmaP0gvai6hNhJ5y6+HFutV0UoXc7pMgJlJY3O7AzT725cW/jP38ylmfHhQa7M0Nhww==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.4.0", - "@opentelemetry/instrumentation": "0.210.0", - "@opentelemetry/semantic-conventions": "^1.29.0", - "forwarded-parse": "2.1.2" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.4.0.tgz", - "integrity": "sha512-KtcyFHssTn5ZgDu6SXmUznS80OFs/wN7y6MyFRRcKU6TOw8hNcGxKvt8hsdaLJfhzUszNSjURetq5Qpkad14Gw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/instrumentation-ioredis": { - "version": "0.58.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.58.0.tgz", - "integrity": "sha512-2tEJFeoM465A0FwPB0+gNvdM/xPBRIqNtC4mW+mBKy+ZKF9CWa7rEqv87OODGrigkEDpkH8Bs1FKZYbuHKCQNQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/redis-common": "^0.38.2", - "@opentelemetry/semantic-conventions": "^1.33.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-kafkajs": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.19.0.tgz", - "integrity": "sha512-PMJePP4PVv+NSvWFuKADEVemsbNK8tnloHnrHOiRXMmBnyqcyOTmJyPy6eeJ0au90QyiGB2rzD8smmu2Y0CC7A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.30.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-knex": { - "version": "0.54.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.54.0.tgz", - "integrity": "sha512-XYXKVUH+0/Ur29jMPnyxZj32MrZkWSXHhCteTkt/HzynKnvIASmaAJ6moMOgBSRoLuDJFqPew68AreRylIzhhg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.33.1" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-koa": { - "version": "0.58.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.58.0.tgz", - "integrity": "sha512-602W6hEFi3j2QrQQBKWuBUSlHyrwSCc1IXpmItC991i9+xJOsS4n4mEktEk/7N6pavBX35J9OVkhPDXjbFk/1A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.36.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.9.0" - } - }, - "node_modules/@opentelemetry/instrumentation-lru-memoizer": { - "version": "0.54.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.54.0.tgz", - "integrity": "sha512-LPji0Qwpye5e1TNAUkHt7oij2Lrtpn2DRTUr4CU69VzJA13aoa2uzP3NutnFoLDUjmuS6vi/lv08A2wo9CfyTA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.210.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-mongodb": { - "version": "0.63.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.63.0.tgz", - "integrity": "sha512-EvJb3aLiq1QedAZO4vqXTG0VJmKUpGU37r11thLPuL5HNa08sUS9DbF69RB8YoXVby2pXkFPMnbG0Pky0JMlKA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.33.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-mongoose": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.56.0.tgz", - "integrity": "sha512-1xBjUpDSJFZS4qYc4XXef0pzV38iHyKymY4sKQ3xPv7dGdka4We1PsuEg6Z8K21f1d2Yg5eU0OXXRSPVmowKfA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.33.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-mysql": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.56.0.tgz", - "integrity": "sha512-osdGMB3vc4bm1Kos04zfVmYAKoKVbKiF/Ti5/R0upDEOsCnrnUm9xvLeaKKbbE2WgJoaFz3VS8c99wx31efytQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.33.0", - "@types/mysql": "2.15.27" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-mysql2": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.56.0.tgz", - "integrity": "sha512-rW0hIpoaCFf55j0F1oqw6+Xv9IQeqJGtw9MudT3LCuhqld9S3DF0UEj8o3CZuPhcYqD+HAivZQdrsO5XMWyFqw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.33.0", - "@opentelemetry/sql-common": "^0.41.2" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-pg": { - "version": "0.62.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.62.0.tgz", - "integrity": "sha512-/ZSMRCyFRMjQVx7Wf+BIAOMEdN/XWBbAGTNLKfQgGYs1GlmdiIFkUy8Z8XGkToMpKrgZju0drlTQpqt4Ul7R6w==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.34.0", - "@opentelemetry/sql-common": "^0.41.2", - "@types/pg": "8.15.6", - "@types/pg-pool": "2.0.7" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-redis": { - "version": "0.58.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.58.0.tgz", - "integrity": "sha512-tOGxw+6HZ5LDpMP05zYKtTw5HPqf3PXYHaOuN+pkv6uIgrZ+gTT75ELkd49eXBpjg3t36p8bYpsLgYcpIPqWqA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/redis-common": "^0.38.2", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-tedious": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.29.0.tgz", - "integrity": "sha512-Jtnayb074lk7DQL25pOOpjvg4zjJMFjFWOLlKzTF5i1KxMR4+GlR/DSYgwDRfc0a4sfPXzdb/yYw7jRSX/LdFg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.33.0", - "@types/tedious": "^4.0.14" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-undici": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.20.0.tgz", - "integrity": "sha512-VGBQ89Bza1pKtV12Lxgv3uMrJ1vNcf1cDV6LAXp2wa6hnl6+IN6lbEmPn6WNWpguZTZaFEvugyZgN8FJuTjLEA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/semantic-conventions": "^1.24.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.7.0" - } - }, - "node_modules/@opentelemetry/redis-common": { - "version": "0.38.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.38.2.tgz", - "integrity": "sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==", - "license": "Apache-2.0", - "engines": { - "node": "^18.19.0 || >=20.6.0" - } - }, - "node_modules/@opentelemetry/resources": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.5.0.tgz", - "integrity": "sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@opentelemetry/core": "2.5.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.30.1.tgz", - "integrity": "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@opentelemetry/core": "1.30.1", - "@opentelemetry/resources": "1.30.1" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", - "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@opentelemetry/semantic-conventions": "1.28.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", - "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@opentelemetry/core": "1.30.1", - "@opentelemetry/semantic-conventions": "1.28.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.5.0.tgz", - "integrity": "sha512-VzRf8LzotASEyNDUxTdaJ9IRJ1/h692WyArDBInf5puLCjxbICD6XkHgpuudis56EndyS7LYFmtTMny6UABNdQ==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@opentelemetry/core": "2.5.0", - "@opentelemetry/resources": "2.5.0", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz", - "integrity": "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==", - "license": "Apache-2.0", - "peer": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/sql-common": { - "version": "0.41.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.41.2.tgz", - "integrity": "sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0" - } - }, - "node_modules/@paralleldrive/cuid2": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", - "integrity": "sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "^1.1.5" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", - "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, - "node_modules/@prisma/instrumentation": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-7.2.0.tgz", - "integrity": "sha512-Rh9Z4x5kEj1OdARd7U18AtVrnL6rmLSI0qYShaB4W7Wx5BKbgzndWF+QnuzMb7GLfVdlT5aYCXoPQVYuYtVu0g==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.207.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.8" - } - }, - "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/api-logs": { - "version": "0.207.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.207.0.tgz", - "integrity": "sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.3.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@prisma/instrumentation/node_modules/@opentelemetry/instrumentation": { - "version": "0.207.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.207.0.tgz", - "integrity": "sha512-y6eeli9+TLKnznrR8AZlQMSJT7wILpXH+6EYq5Vf/4Ao+huI7EedxQHwRgVUOMLFbe7VFDvHJrX9/f4lcwnJsA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.207.0", - "import-in-the-middle": "^2.0.0", - "require-in-the-middle": "^8.0.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@sentry/core": { - "version": "7.114.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.114.0.tgz", - "integrity": "sha512-YnanVlmulkjgZiVZ9BfY9k6I082n+C+LbZo52MTvx3FY6RE5iyiPMpaOh67oXEZRWcYQEGm+bKruRxLVP6RlbA==", - "license": "MIT", - "dependencies": { - "@sentry/types": "7.114.0", - "@sentry/utils": "7.114.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/integrations": { - "version": "7.114.0", - "resolved": "https://registry.npmjs.org/@sentry/integrations/-/integrations-7.114.0.tgz", - "integrity": "sha512-BJIBWXGKeIH0ifd7goxOS29fBA8BkEgVVCahs6xIOXBjX1IRS6PmX0zYx/GP23nQTfhJiubv2XPzoYOlZZmDxg==", - "license": "MIT", - "dependencies": { - "@sentry/core": "7.114.0", - "@sentry/types": "7.114.0", - "@sentry/utils": "7.114.0", - "localforage": "^1.8.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/node": { - "version": "10.36.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.36.0.tgz", - "integrity": "sha512-c7kYTZ9WcOYqod65PpA4iY+wEGJqLbFy10v4lIG6B5XrO+PFEXh1CrvGPLDJVogbB/4NE0r2jgeFQ+jz8aZUhw==", - "license": "MIT", - "dependencies": { - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^2.4.0", - "@opentelemetry/core": "^2.4.0", - "@opentelemetry/instrumentation": "^0.210.0", - "@opentelemetry/instrumentation-amqplib": "0.57.0", - "@opentelemetry/instrumentation-connect": "0.53.0", - "@opentelemetry/instrumentation-dataloader": "0.27.0", - "@opentelemetry/instrumentation-express": "0.58.0", - "@opentelemetry/instrumentation-fs": "0.29.0", - "@opentelemetry/instrumentation-generic-pool": "0.53.0", - "@opentelemetry/instrumentation-graphql": "0.57.0", - "@opentelemetry/instrumentation-hapi": "0.56.0", - "@opentelemetry/instrumentation-http": "0.210.0", - "@opentelemetry/instrumentation-ioredis": "0.58.0", - "@opentelemetry/instrumentation-kafkajs": "0.19.0", - "@opentelemetry/instrumentation-knex": "0.54.0", - "@opentelemetry/instrumentation-koa": "0.58.0", - "@opentelemetry/instrumentation-lru-memoizer": "0.54.0", - "@opentelemetry/instrumentation-mongodb": "0.63.0", - "@opentelemetry/instrumentation-mongoose": "0.56.0", - "@opentelemetry/instrumentation-mysql": "0.56.0", - "@opentelemetry/instrumentation-mysql2": "0.56.0", - "@opentelemetry/instrumentation-pg": "0.62.0", - "@opentelemetry/instrumentation-redis": "0.58.0", - "@opentelemetry/instrumentation-tedious": "0.29.0", - "@opentelemetry/instrumentation-undici": "0.20.0", - "@opentelemetry/resources": "^2.4.0", - "@opentelemetry/sdk-trace-base": "^2.4.0", - "@opentelemetry/semantic-conventions": "^1.37.0", - "@prisma/instrumentation": "7.2.0", - "@sentry/core": "10.36.0", - "@sentry/node-core": "10.36.0", - "@sentry/opentelemetry": "10.36.0", - "import-in-the-middle": "^2.0.1", - "minimatch": "^9.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@sentry/node-core": { - "version": "10.36.0", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.36.0.tgz", - "integrity": "sha512-3K2SJCPiQGQMYSVSF3GuPIAilJPlXOWxyvrmnxY9Zw3ZbXaLynhYCJ5TjL38hS7XoMby/0lN2fY/kbXH/GlNeg==", - "license": "MIT", - "dependencies": { - "@apm-js-collab/tracing-hooks": "^0.3.1", - "@sentry/core": "10.36.0", - "@sentry/opentelemetry": "10.36.0", - "import-in-the-middle": "^2.0.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.1.0", - "@opentelemetry/core": "^1.30.1 || ^2.1.0", - "@opentelemetry/instrumentation": ">=0.57.1 <1", - "@opentelemetry/resources": "^1.30.1 || ^2.1.0", - "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0", - "@opentelemetry/semantic-conventions": "^1.37.0" - } - }, - "node_modules/@sentry/node-core/node_modules/@sentry/core": { - "version": "10.36.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.36.0.tgz", - "integrity": "sha512-EYJjZvofI+D93eUsPLDIUV0zQocYqiBRyXS6CCV6dHz64P/Hob5NJQOwPa8/v6nD+UvJXvwsFfvXOHhYZhZJOQ==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@sentry/node/node_modules/@sentry/core": { - "version": "10.36.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.36.0.tgz", - "integrity": "sha512-EYJjZvofI+D93eUsPLDIUV0zQocYqiBRyXS6CCV6dHz64P/Hob5NJQOwPa8/v6nD+UvJXvwsFfvXOHhYZhZJOQ==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@sentry/opentelemetry": { - "version": "10.36.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.36.0.tgz", - "integrity": "sha512-TPOSiHBk45exA/LGFELSuzmBrWe1MG7irm7NkUXCZfdXuLLPeUtp1Y+rWDCWWNMrraAdizDN0d/l1GSLpxzpPg==", - "license": "MIT", - "dependencies": { - "@sentry/core": "10.36.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.1.0", - "@opentelemetry/core": "^1.30.1 || ^2.1.0", - "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0", - "@opentelemetry/semantic-conventions": "^1.37.0" - } - }, - "node_modules/@sentry/opentelemetry/node_modules/@sentry/core": { - "version": "10.36.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.36.0.tgz", - "integrity": "sha512-EYJjZvofI+D93eUsPLDIUV0zQocYqiBRyXS6CCV6dHz64P/Hob5NJQOwPa8/v6nD+UvJXvwsFfvXOHhYZhZJOQ==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@sentry/types": { - "version": "7.114.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.114.0.tgz", - "integrity": "sha512-tsqkkyL3eJtptmPtT0m9W/bPLkU7ILY7nvwpi1hahA5jrM7ppoU0IMaQWAgTD+U3rzFH40IdXNBFb8Gnqcva4w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@sentry/utils": { - "version": "7.114.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.114.0.tgz", - "integrity": "sha512-319N90McVpupQ6vws4+tfCy/03AdtsU0MurIE4+W5cubHME08HtiEWlfacvAxX+yuKFhvdsO4K4BB/dj54ideg==", - "license": "MIT", - "dependencies": { - "@sentry/types": "7.114.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", - "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@so-ric/colorspace": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@so-ric/colorspace/-/colorspace-1.1.6.tgz", - "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", - "license": "MIT", - "dependencies": { - "color": "^5.0.2", - "text-hex": "1.0.x" - } - }, - "node_modules/@sqltools/formatter": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", - "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", - "license": "MIT" - }, - "node_modules/@stellar/js-xdr": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@stellar/js-xdr/-/js-xdr-3.1.2.tgz", - "integrity": "sha512-VVolPL5goVEIsvuGqDc5uiKxV03lzfWdvYg1KikvwheDmTBO68CKDji3bAZ/kppZrx5iTA8z3Ld5yuytcvhvOQ==", - "license": "Apache-2.0" - }, - "node_modules/@stellar/stellar-base": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@stellar/stellar-base/-/stellar-base-14.0.4.tgz", - "integrity": "sha512-UbNW6zbdOBXJwLAV2mMak0bIC9nw3IZVlQXkv2w2dk1jgCbJjy3oRVC943zeGE5JAm0Z9PHxrIjmkpGhayY7kw==", - "license": "Apache-2.0", - "dependencies": { - "@noble/curves": "^1.9.6", - "@stellar/js-xdr": "^3.1.2", - "base32.js": "^0.1.0", - "bignumber.js": "^9.3.1", - "buffer": "^6.0.3", - "sha.js": "^2.4.12" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@stellar/stellar-sdk": { - "version": "14.4.3", - "resolved": "https://registry.npmjs.org/@stellar/stellar-sdk/-/stellar-sdk-14.4.3.tgz", - "integrity": "sha512-QfaScSNd4Ku0GGfaZjR8679+M5gLHG+09OLLqV3Bv1VaDKXjHmhf8ikalz2jlx3oFnmlEpEgnqXIdf4kdD2x/w==", - "license": "Apache-2.0", - "dependencies": { - "@stellar/stellar-base": "^14.0.4", - "axios": "^1.13.2", - "bignumber.js": "^9.3.1", - "eventsource": "^2.0.2", - "feaxios": "^0.0.23", - "randombytes": "^2.1.0", - "toml": "^3.0.0", - "urijs": "^1.19.1" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@swc/helpers": { - "version": "0.5.18", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.18.tgz", - "integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tokenizer/inflate": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", - "integrity": "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "fflate": "^0.8.2", - "token-types": "^6.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/@tokenizer/token": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", - "license": "MIT" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", - "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/bcrypt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-6.0.0.tgz", - "integrity": "sha512-/oJGukuH3D2+D+3H4JWLaAsJ/ji86dhRidzZ/Od7H/i8g+aCmvkeCc6Ni/f9uxGLSQVCRZkX2/lqEFG2BvWtlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.6", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", - "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/command-line-args": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz", - "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==", - "license": "MIT" - }, - "node_modules/@types/command-line-usage": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", - "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", - "license": "MIT" - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/cookiejar": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz", - "integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.25", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", - "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "^1" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.8", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", - "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", - "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", - "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz", - "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", - "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/ms": "*", - "@types/node": "*" - } - }, - "node_modules/@types/luxon": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.1.tgz", - "integrity": "sha512-H3iskjFIAn5SlJU7OuxUmTEpebK6TKB8rxZShDslBMZJ5u9S//KM1sbdAisiSrqwLQncVjnpi2OK2J51h+4lsg==", - "license": "MIT" - }, - "node_modules/@types/methods": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz", - "integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/multer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/multer/-/multer-2.0.0.tgz", - "integrity": "sha512-C3Z9v9Evij2yST3RSBktxP9STm6OdMc5uR1xF1SGr98uv8dUlAL2hqwrZ3GVB3uyMyiegnscEK6PGtYvNrjTjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/mysql": { - "version": "2.15.27", - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.27.tgz", - "integrity": "sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "20.19.30", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.30.tgz", - "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==", - "license": "MIT", - "peer": true, - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/passport": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.17.tgz", - "integrity": "sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/passport-jwt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/passport-jwt/-/passport-jwt-4.0.1.tgz", - "integrity": "sha512-Y0Ykz6nWP4jpxgEUYq8NoVZeCQPo1ZndJLfapI249g1jHChvRfZRO/LS3tqu26YgAS/laI1qx98sYGz0IalRXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/jsonwebtoken": "*", - "@types/passport-strategy": "*" - } - }, - "node_modules/@types/passport-strategy": { - "version": "0.2.38", - "resolved": "https://registry.npmjs.org/@types/passport-strategy/-/passport-strategy-0.2.38.tgz", - "integrity": "sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express": "*", - "@types/passport": "*" - } - }, - "node_modules/@types/pg": { - "version": "8.15.6", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.15.6.tgz", - "integrity": "sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^2.2.0" - } - }, - "node_modules/@types/pg-pool": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.7.tgz", - "integrity": "sha512-U4CwmGVQcbEuqpyju8/ptOKg6gEC+Tqsvj2xS9o1g71bUh8twxnC6ZL5rZKCsGN0iyH0CwgUyc9VR5owNQF9Ng==", - "license": "MIT", - "dependencies": { - "@types/pg": "*" - } - }, - "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", - "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", - "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "<1" - } - }, - "node_modules/@types/serve-static/node_modules/@types/send": { - "version": "0.17.6", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", - "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/superagent": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz", - "integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cookiejar": "^2.1.5", - "@types/methods": "^1.1.4", - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/@types/supertest": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz", - "integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/methods": "^1.1.4", - "@types/superagent": "^8.1.0" - } - }, - "node_modules/@types/tedious": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", - "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", - "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "license": "MIT" - }, - "node_modules/@types/validator": { - "version": "13.15.10", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.10.tgz", - "integrity": "sha512-T8L6i7wCuyoK8A/ZeLYt1+q0ty3Zb9+qbSSvrIVitzT3YjZqkTZ40IbRsPanlB4h1QB3JVL1SYCdR6ngtFYcuA==", - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.53.1.tgz", - "integrity": "sha512-cFYYFZ+oQFi6hUnBTbLRXfTJiaQtYE3t4O692agbBl+2Zy+eqSKWtPjhPXJu1G7j4RLjKgeJPDdq3EqOwmX5Ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.53.1", - "@typescript-eslint/type-utils": "8.53.1", - "@typescript-eslint/utils": "8.53.1", - "@typescript-eslint/visitor-keys": "8.53.1", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.53.1", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.53.1.tgz", - "integrity": "sha512-nm3cvFN9SqZGXjmw5bZ6cGmvJSyJPn0wU9gHAZZHDnZl2wF9PhHv78Xf06E0MaNk4zLVHL8hb2/c32XvyJOLQg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@typescript-eslint/scope-manager": "8.53.1", - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/typescript-estree": "8.53.1", - "@typescript-eslint/visitor-keys": "8.53.1", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.53.1.tgz", - "integrity": "sha512-WYC4FB5Ra0xidsmlPb+1SsnaSKPmS3gsjIARwbEkHkoWloQmuzcfypljaJcR78uyLA1h8sHdWWPHSLDI+MtNog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.53.1", - "@typescript-eslint/types": "^8.53.1", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.53.1.tgz", - "integrity": "sha512-Lu23yw1uJMFY8cUeq7JlrizAgeQvWugNQzJp8C3x8Eo5Jw5Q2ykMdiiTB9vBVOOUBysMzmRRmUfwFrZuI2C4SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/visitor-keys": "8.53.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.53.1.tgz", - "integrity": "sha512-qfvLXS6F6b1y43pnf0pPbXJ+YoXIC7HKg0UGZ27uMIemKMKA6XH2DTxsEDdpdN29D+vHV07x/pnlPNVLhdhWiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.53.1.tgz", - "integrity": "sha512-MOrdtNvyhy0rHyv0ENzub1d4wQYKb2NmIqG7qEqPWFW7Mpy2jzFC3pQ2yKDvirZB7jypm5uGjF2Qqs6OIqu47w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/typescript-estree": "8.53.1", - "@typescript-eslint/utils": "8.53.1", - "debug": "^4.4.3", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.53.1.tgz", - "integrity": "sha512-jr/swrr2aRmUAUjW5/zQHbMaui//vQlsZcJKijZf3M26bnmLj8LyZUpj8/Rd6uzaek06OWsqdofN/Thenm5O8A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.53.1.tgz", - "integrity": "sha512-RGlVipGhQAG4GxV1s34O91cxQ/vWiHJTDHbXRr0li2q/BGg3RR/7NM8QDWgkEgrwQYCvmJV9ichIwyoKCQ+DTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.53.1", - "@typescript-eslint/tsconfig-utils": "8.53.1", - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/visitor-keys": "8.53.1", - "debug": "^4.4.3", - "minimatch": "^9.0.5", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.53.1.tgz", - "integrity": "sha512-c4bMvGVWW4hv6JmDUEG7fSYlWOl3II2I4ylt0NM+seinYQlZMQIaKaXIIVJWt9Ofh6whrpM+EdDQXKXjNovvrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.53.1", - "@typescript-eslint/types": "8.53.1", - "@typescript-eslint/typescript-estree": "8.53.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.53.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.53.1.tgz", - "integrity": "sha512-oy+wV7xDKFPRyNggmXuZQSBzvoLnpmJs+GhzRhPjrxl2b/jIlyjVokzm47CZCDUdXKr2zd7ZLodPfOBpOPyPlg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.53.1", - "eslint-visitor-keys": "^4.2.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", - "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@willsoto/nestjs-prometheus": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@willsoto/nestjs-prometheus/-/nestjs-prometheus-6.0.2.tgz", - "integrity": "sha512-ePyLZYdIrOOdlOWovzzMisIgviXqhPVzFpSMKNNhn6xajhRHeBsjAzSdpxZTc6pnjR9hw1lNAHyKnKl7lAPaVg==", - "license": "Apache-2.0", - "peerDependencies": { - "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", - "prom-client": "^15.0.0" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", - "license": "MIT", - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "deprecated": "package has been renamed to acorn-import-attributes", - "license": "MIT", - "optional": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/after-all-results": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/after-all-results/-/after-all-results-2.0.0.tgz", - "integrity": "sha512-2zHEyuhSJOuCrmas9YV0YL/MFCWLxe1dS6k/ENhgYrb/JqyMnadLN4iIAc9kkZrbElMDyyAGH/0J18OPErOWLg==", - "license": "MIT", - "optional": true - }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/amqp-connection-manager": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/amqp-connection-manager/-/amqp-connection-manager-5.0.0.tgz", - "integrity": "sha512-88yQzqa5RSBgnLl504XjvCQJ7d+osskdwvg35Lwm1LRbfLjNU9p7SQUMSP82BB7mseiq9tIUPJ3HE3eXQbpjEw==", - "license": "MIT", - "peer": true, - "dependencies": { - "promise-breaker": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0", - "npm": ">5.0.0" - }, - "peerDependencies": { - "amqplib": "*" - } - }, - "node_modules/amqplib": { - "version": "0.10.9", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.10.9.tgz", - "integrity": "sha512-jwSftI4QjS3mizvnSnOrPGYiUnm1vI2OP1iXeOUz5pb74Ua0nbf6nPyyTzuiCLEE3fMpaJORXh2K/TQ08H5xGA==", - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-more-ints": "~1.0.0", - "url-parse": "~1.5.10" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ansis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", - "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", - "license": "ISC", - "engines": { - "node": ">=14" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/apache-arrow": { - "version": "21.1.0", - "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-21.1.0.tgz", - "integrity": "sha512-kQrYLxhC+NTVVZ4CCzGF6L/uPVOzJmD1T3XgbiUnP7oTeVFOFgEUu6IKNwCDkpFoBVqDKQivlX4RUFqqnWFlEA==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.11", - "@types/command-line-args": "^5.2.3", - "@types/command-line-usage": "^5.0.4", - "@types/node": "^24.0.3", - "command-line-args": "^6.0.1", - "command-line-usage": "^7.0.1", - "flatbuffers": "^25.1.24", - "json-bignum": "^0.0.3", - "tslib": "^2.6.2" - }, - "bin": { - "arrow2csv": "bin/arrow2csv.js" - } - }, - "node_modules/apache-arrow/node_modules/@types/node": { - "version": "24.10.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz", - "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/apache-arrow/node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", - "license": "MIT" - }, - "node_modules/app-root-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", - "license": "MIT", - "engines": { - "node": ">= 6.0.0" - } - }, - "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/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-back": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", - "license": "MIT", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/array-timsort": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "license": "MIT" - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "license": "MIT" - }, - "node_modules/async-cache": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/async-cache/-/async-cache-1.1.0.tgz", - "integrity": "sha512-YDQc4vBn5NFhY6g6HhVshyi3Fy9+SQ5ePnE7JLDJn1DoL+i7ER+vMwtTNOYk9leZkYMnOwpBCWqyLDPw8Aig8g==", - "deprecated": "No longer maintained. Use [lru-cache](http://npm.im/lru-cache) version 7.6 or higher, and provide an asynchronous `fetchMethod` option.", - "license": "ISC", - "optional": true, - "dependencies": { - "lru-cache": "^4.0.0" - } - }, - "node_modules/async-cache/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "license": "ISC", - "optional": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/async-cache/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "license": "ISC", - "optional": true - }, - "node_modules/async-value": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/async-value/-/async-value-1.2.2.tgz", - "integrity": "sha512-8rwtYe32OAS1W9CTwvknoyts+mc3ta8N7Pi0h7AjkMaKvsFbr39K+gEfZ7Z81aPXQ1sK5M23lgLy1QfZpcpadQ==", - "license": "MIT", - "optional": true - }, - "node_modules/async-value-promise": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/async-value-promise/-/async-value-promise-1.1.1.tgz", - "integrity": "sha512-c2RFDKjJle1rHa0YxN9Ysu97/QBu3Wa+NOejJxsX+1qVDJrkD3JL/GN1B3gaILAEXJXbu/4Z1lcoCHFESe/APA==", - "license": "MIT", - "optional": true, - "dependencies": { - "async-value": "^1.2.2" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", - "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", - "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", - "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", - "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base32.js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz", - "integrity": "sha512-n3TkB02ixgBOhTvANakDb4xaMXnYUVkNoRFJjQflcqMQhyEKxEHdj3E6N8t8sUQ0mjH/3/JxzlXuz3ul/J90pQ==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "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/baseline-browser-mapping": { - "version": "2.9.17", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.17.tgz", - "integrity": "sha512-agD0MgJFUP/4nvjqzIB29zRPUuCF7Ge6mEv9s8dHrtYD7QWXRcx75rOADE/d5ah1NI+0vkDl0yorDd5U852IQQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "license": "MIT", - "optional": true, - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT", - "optional": true - }, - "node_modules/bcrypt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-6.0.0.tgz", - "integrity": "sha512-cU8v/EGSrnH+HnxV2z0J7/blxH8gq7Xh2JFT6Aroax7UohdmiJJlxApMxtKfuI7z68NvvVcmR78k2LbT6efhRg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^8.3.0", - "node-gyp-build": "^4.8.4" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/bignumber.js": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", - "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/binary-search": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz", - "integrity": "sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==", - "license": "CC0-1.0", - "optional": true - }, - "node_modules/bintrees": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", - "integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==", - "license": "MIT" - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "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", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/breadth-filter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/breadth-filter/-/breadth-filter-2.0.0.tgz", - "integrity": "sha512-thQShDXnFWSk2oVBixRCyrWsFoV5tfOpWKHmxwafHQDNxCfDBk539utpvytNjmlFrTMqz41poLwJvA1MW3z0MQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "object.entries": "^1.0.4" - } - }, - "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "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", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "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/buffer-more-ints": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz", - "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==", - "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/cache-manager": { - "version": "7.2.8", - "resolved": "https://registry.npmjs.org/cache-manager/-/cache-manager-7.2.8.tgz", - "integrity": "sha512-0HDaDLBBY/maa/LmUVAr70XUOwsiQD+jyzCBjmUErYZUKdMS9dT59PqW59PpVqfGM7ve6H0J6307JTpkCYefHQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "@cacheable/utils": "^2.3.3", - "keyv": "^5.5.5" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001766", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", - "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk-template": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/chalk-template?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true, - "license": "MIT" - }, - "node_modules/check-disk-space": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/check-disk-space/-/check-disk-space-3.4.0.tgz", - "integrity": "sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw==", - "license": "MIT", - "engines": { - "node": ">=16" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.2.0.tgz", - "integrity": "sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==", - "license": "MIT" - }, - "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", - "peer": true - }, - "node_modules/class-validator": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.3.tgz", - "integrity": "sha512-rXXekcjofVN1LTOSw+u4u9WXVEUvNBVjORW154q/IdmYWy1nMbOU9aNtZB0t8m+FJQ9q91jlr2f9CwwUFdFMRA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/validator": "^13.15.3", - "libphonenumber-js": "^1.11.1", - "validator": "^13.15.20" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/cli-truncate/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", - "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", - "dev": true, - "license": "MIT" - }, - "node_modules/color": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", - "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", - "license": "MIT", - "dependencies": { - "color-convert": "^3.1.3", - "color-string": "^2.1.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", - "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", - "license": "MIT", - "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/color-string/node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", - "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", - "license": "MIT", - "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=14.6" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-2.1.0.tgz", - "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-line-args": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz", - "integrity": "sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==", - "license": "MIT", - "dependencies": { - "array-back": "^6.2.2", - "find-replace": "^5.0.2", - "lodash.camelcase": "^4.3.0", - "typical": "^7.2.0" - }, - "engines": { - "node": ">=12.20" - }, - "peerDependencies": { - "@75lb/nature": "latest" - }, - "peerDependenciesMeta": { - "@75lb/nature": { - "optional": true - } - } - }, - "node_modules/command-line-usage": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz", - "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", - "license": "MIT", - "dependencies": { - "array-back": "^6.2.2", - "chalk-template": "^0.4.0", - "table-layout": "^4.1.0", - "typical": "^7.1.1" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/comment-json": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.2.5.tgz", - "integrity": "sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-timsort": "^1.0.3", - "core-util-is": "^1.0.3", - "esprima": "^4.0.1", - "has-own-prop": "^2.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "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/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "license": "MIT" - }, - "node_modules/console-log-level": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/console-log-level/-/console-log-level-1.4.1.tgz", - "integrity": "sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ==", - "license": "MIT", - "optional": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "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/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "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.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", - "license": "MIT" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "devOptional": true, - "license": "MIT" - }, - "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/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/create-jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", - "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/cron": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/cron/-/cron-4.3.5.tgz", - "integrity": "sha512-hKPP7fq1+OfyCqoePkKfVq7tNAdFwiQORr4lZUHwrf0tebC65fYEeWgOrXOL6prn1/fegGOdTfrM6e34PJfksg==", - "license": "MIT", - "dependencies": { - "@types/luxon": "~3.7.0", - "luxon": "~3.7.0" - }, - "engines": { - "node": ">=18.x" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cssfilter": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz", - "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==", - "license": "MIT" - }, - "node_modules/date-fns": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/kossnocorp" - } - }, - "node_modules/dayjs": { - "version": "1.11.19", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", - "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", - "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "license": "MIT", - "optional": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "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/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", - "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", - "devOptional": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dotenv": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "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/elastic-apm-node": { - "version": "3.52.2", - "resolved": "https://registry.npmjs.org/elastic-apm-node/-/elastic-apm-node-3.52.2.tgz", - "integrity": "sha512-NVFthDcoBOpTwtppF7b+BIeIu4Xon3RBNpddIaJv+DtjL6Q61x4j7ClYdiXjv3XKgyp7yUlOnLjU6PY/EYXwLQ==", - "license": "BSD-2-Clause", - "optional": true, - "dependencies": { - "@elastic/ecs-pino-format": "^1.2.0", - "@opentelemetry/api": "^1.4.1", - "@opentelemetry/core": "^1.11.0", - "@opentelemetry/sdk-metrics": "^1.12.0", - "after-all-results": "^2.0.0", - "agentkeepalive": "^4.2.1", - "async-cache": "^1.1.0", - "async-value-promise": "^1.1.1", - "basic-auth": "^2.0.1", - "breadth-filter": "^2.0.0", - "cookie": "^0.5.0", - "core-util-is": "^1.0.2", - "end-of-stream": "^1.4.4", - "error-callsites": "^2.0.4", - "error-stack-parser": "^2.0.6", - "escape-string-regexp": "^4.0.0", - "fast-safe-stringify": "^2.0.7", - "fast-stream-to-buffer": "^1.0.0", - "http-headers": "^3.0.2", - "import-in-the-middle": "1.4.2", - "is-native": "^1.0.1", - "lru-cache": "^6.0.0", - "measured-reporting": "^1.51.1", - "module-details-from-path": "^1.0.3", - "monitor-event-loop-delay": "^1.0.0", - "object-filter-sequence": "^1.0.0", - "object-identity-map": "^1.0.2", - "original-url": "^1.2.3", - "pino": "^6.11.2", - "readable-stream": "^3.4.0", - "relative-microtime": "^2.0.0", - "require-in-the-middle": "^7.1.1", - "semver": "^6.3.1", - "shallow-clone-shim": "^2.0.0", - "source-map": "^0.8.0-beta.0", - "sql-summary": "^1.0.1", - "stream-chopper": "^3.0.1", - "unicode-byte-truncate": "^1.0.0" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/elastic-apm-node/node_modules/@opentelemetry/core": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", - "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "@opentelemetry/semantic-conventions": "1.28.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/elastic-apm-node/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/elastic-apm-node/node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "license": "MIT", - "optional": true - }, - "node_modules/elastic-apm-node/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/elastic-apm-node/node_modules/import-in-the-middle": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.4.2.tgz", - "integrity": "sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==", - "license": "Apache-2.0", - "optional": true, - "dependencies": { - "acorn": "^8.8.2", - "acorn-import-assertions": "^1.9.0", - "cjs-module-lexer": "^1.2.2", - "module-details-from-path": "^1.0.3" - } - }, - "node_modules/elastic-apm-node/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "optional": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/elastic-apm-node/node_modules/require-in-the-middle": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", - "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "debug": "^4.3.5", - "module-details-from-path": "^1.0.3", - "resolve": "^1.22.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/elastic-apm-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/elastic-apm-node/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "deprecated": "The work that was done in this beta branch won't be included in future versions", - "license": "BSD-3-Clause", - "optional": true, - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/elastic-apm-node/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "license": "MIT", - "optional": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/elastic-apm-node/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "license": "BSD-2-Clause", - "optional": true - }, - "node_modules/elastic-apm-node/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "license": "MIT", - "optional": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/elastic-apm-node/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC", - "optional": true - }, - "node_modules/electron-to-chromium": { - "version": "1.5.277", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.277.tgz", - "integrity": "sha512-wKXFZw4erWmmOz5N/grBoJ2XrNJGDFMu2+W5ACHza5rHtvsqrK4gb6rnLC7XxKB9WlJ+RmyQatuEXmtm86xbnw==", - "dev": true, - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "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/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "license": "MIT", - "optional": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.4", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", - "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/error-callsites": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/error-callsites/-/error-callsites-2.0.4.tgz", - "integrity": "sha512-V877Ch4FC4FN178fDK1fsrHN4I1YQIBdtjKrHh3BUHMnh3SMvwUVrqkaOgDpUuevgSNna0RBq6Ox9SGlxYrigA==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6.x" - } - }, - "node_modules/error-ex": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "license": "MIT", - "engines": { - "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/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz", - "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.5.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", - "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.1", - "synckit": "^0.11.12" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "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/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/eventsource": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", - "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", - "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-redact": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", - "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "license": "MIT" - }, - "node_modules/fast-stream-to-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-stream-to-buffer/-/fast-stream-to-buffer-1.0.0.tgz", - "integrity": "sha512-bI/544WUQlD2iXBibQbOMSmG07Hay7YrpXlKaeGTPT7H7pC0eitt3usak5vUwEvCGK/O7rUAM3iyQValGU22TQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "end-of-stream": "^1.4.1" - } - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/feaxios": { - "version": "0.0.23", - "resolved": "https://registry.npmjs.org/feaxios/-/feaxios-0.0.23.tgz", - "integrity": "sha512-eghR0A21fvbkcQBgZuMfQhrXxJzC0GNUGC9fXhBge33D+mFDTwl0aJ35zoQQn575BhyjQitRc5N4f+L4cP708g==", - "license": "MIT", - "dependencies": { - "is-retry-allowed": "^3.0.0" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "license": "MIT" - }, - "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", - "license": "MIT" - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-stream-rotator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", - "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==", - "license": "MIT", - "dependencies": { - "moment": "^2.29.1" - } - }, - "node_modules/file-type": { - "version": "20.4.1", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-20.4.1.tgz", - "integrity": "sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ==", - "license": "MIT", - "dependencies": { - "@tokenizer/inflate": "^0.2.6", - "strtok3": "^10.2.0", - "token-types": "^6.0.0", - "uint8array-extras": "^1.4.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sindresorhus/file-type?sponsor=1" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "statuses": "~2.0.2", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/find-replace": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz", - "integrity": "sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@75lb/nature": "latest" - }, - "peerDependenciesMeta": { - "@75lb/nature": { - "optional": true - } - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/flatbuffers": { - "version": "25.9.23", - "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-25.9.23.tgz", - "integrity": "sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==", - "license": "Apache-2.0" - }, - "node_modules/flatstr": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", - "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==", - "license": "MIT", - "optional": true - }, - "node_modules/flatted": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true, - "license": "ISC" - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", - "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.7", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cosmiconfig": "^8.2.0", - "deepmerge": "^4.2.2", - "fs-extra": "^10.0.0", - "memfs": "^3.4.1", - "minimatch": "^3.0.4", - "node-abort-controller": "^3.0.1", - "schema-utils": "^3.1.1", - "semver": "^7.3.5", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">=12.13.0", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "typescript": ">3.6.0", - "webpack": "^5.11.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.5.tgz", - "integrity": "sha512-Oz5Hwvwak/DCaXVVUtPn4oLMLLy1CdclLKO1LFgU7XzDpVMUU5UjlSLpGMocyQNNk8F6IJW9M/YdooSn2MRI+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@paralleldrive/cuid2": "^2.2.2", - "dezalgo": "^1.0.4", - "once": "^1.4.0", - "qs": "^6.11.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "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/forwarded-parse": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz", - "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==", - "license": "MIT" - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.1.0.tgz", - "integrity": "sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==", - "dev": true, - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-own-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", - "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hashery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.4.0.tgz", - "integrity": "sha512-Wn2i1In6XFxl8Az55kkgnFRiAlIAushzh26PTjL2AKtQcEfXrcLa7Hn5QOWGZEf3LU057P9TwwZjFyxfS1VuvQ==", - "license": "MIT", - "dependencies": { - "hookified": "^1.14.0" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/helmet": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-7.2.0.tgz", - "integrity": "sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw==", - "license": "MIT", - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/hookified": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.0.tgz", - "integrity": "sha512-51w+ZZGt7Zw5q7rM3nC4t3aLn/xvKDETsXqMczndvwyVQhAHfUmUuFBRFcos8Iyebtk7OAE9dL26wFNzZVVOkw==", - "license": "MIT" - }, - "node_modules/hpagent": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-1.2.0.tgz", - "integrity": "sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/http-headers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-headers/-/http-headers-3.0.2.tgz", - "integrity": "sha512-87E1I+2Wg4dxxz4rcxElo3dxO/w1ZtgL1yA0Sb6vH3qU16vRKq1NjWQv9SCY3ly2OQROcoxHZOUpmelS+k6wOw==", - "license": "MIT", - "optional": true, - "dependencies": { - "next-line": "^1.1.0" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true, - "license": "MIT", - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "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": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-in-the-middle": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-2.0.5.tgz", - "integrity": "sha512-0InH9/4oDCBRzWXhpOqusspLBrVfK1vPvbn9Wxl8DAQ8yyx5fWJRETICSwkiAMaYntjJAMBP1R4B6cQnEUYVEA==", - "license": "Apache-2.0", - "dependencies": { - "acorn": "^8.15.0", - "acorn-import-attributes": "^1.9.5", - "cjs-module-lexer": "^2.2.0", - "module-details-from-path": "^1.0.4" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "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/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", - "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-integer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz", - "integrity": "sha512-RPQc/s9yBHSvpi+hs9dYiJ2cuFeU6x3TyyIp8O2H6SKEltIvJOzRj9ToyvcStDvPR/pS4rxgr1oBFajQjZ2Szg==", - "license": "WTFPL OR ISC", - "optional": true, - "dependencies": { - "is-finite": "^1.0.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-native": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-native/-/is-native-1.0.1.tgz", - "integrity": "sha512-I4z9hx+4u3/zyvpvGtAR+n7SodJugE+i2jiS8yfq1A9QAZY0KldLQz0SBptLC9ti7kBlpghWUwTKE2BA62eCcw==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-nil": "^1.0.0", - "to-source-code": "^1.0.0" - } - }, - "node_modules/is-nil": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-nil/-/is-nil-1.0.1.tgz", - "integrity": "sha512-m2Rm8PhUFDNNhgvwZJjJG74a9h5CHU0fkA8WT+WGlCjyEbZ2jPwgb+ZxHu4np284EqNVyOsgppReK4qy/TwEwg==", - "license": "MIT", - "optional": true - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-retry-allowed": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-3.0.0.tgz", - "integrity": "sha512-9xH0xvoggby+u0uGF7cZXdrutWiBiaFG8ZT4YFPXL8NzkyAwX3AKGLeFQLvzDpM430+nDFBZ1LHkie/8ocL06A==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterare": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz", - "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==", - "license": "ISC", - "engines": { - "node": ">=6" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", - "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", - "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-config/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", - "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", - "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", - "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", - "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", - "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", - "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", - "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", - "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", - "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", - "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jest-runtime/node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/jest-runtime/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", - "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", - "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", - "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-bignum": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", - "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", - "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", - "dev": true, - "license": "MIT", - "dependencies": { - "jws": "^4.0.1", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", - "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", - "dev": true, - "license": "MIT", - "dependencies": { - "jwa": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/keyv": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", - "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", - "license": "MIT", - "dependencies": { - "@keyv/serialize": "^1.1.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "license": "MIT" - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libphonenumber-js": { - "version": "1.12.35", - "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.35.tgz", - "integrity": "sha512-T/Cz6iLcsZdb5jDncDcUNhSAJ0VlSC9TnsqtBNdpkaAmy24/R1RhErtNWVWBrcUZKs9hSgaVsBkc7HxYnazIfw==", - "license": "MIT" - }, - "node_modules/lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "license": "MIT", - "dependencies": { - "immediate": "~3.0.5" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged": { - "version": "15.5.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.5.2.tgz", - "integrity": "sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^5.4.1", - "commander": "^13.1.0", - "debug": "^4.4.0", - "execa": "^8.0.1", - "lilconfig": "^3.1.3", - "listr2": "^8.2.5", - "micromatch": "^4.0.8", - "pidtree": "^0.6.0", - "string-argv": "^0.3.2", - "yaml": "^2.7.0" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - } - }, - "node_modules/lint-staged/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/lint-staged/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=16.17.0" - } - }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.3.3.tgz", - "integrity": "sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "cli-truncate": "^4.0.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^6.1.0", - "rfdc": "^1.4.1", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/listr2/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/localforage": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", - "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "license": "Apache-2.0", - "dependencies": { - "lie": "3.1.1" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "license": "MIT" - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "license": "MIT" - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==", - "deprecated": "This package is deprecated. Use destructuring assignment syntax instead.", - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "license": "MIT", - "optional": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.2.0.tgz", - "integrity": "sha512-g6LhBsl+GBPRWGWsBtutpzBYuIIdBkLEvad5C/va/74Db018+5TZiyA26cZJAr3Rft5lprVqOIPxf5Vid6tqAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/logform": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", - "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", - "license": "MIT", - "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/logform/node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/luxon": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz", - "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/mapcap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mapcap/-/mapcap-1.0.0.tgz", - "integrity": "sha512-KcNlZSlFPx+r1jYZmxEbTVymG+dIctf10WmWkuhrhrblM+KMoF77HelwihL5cxYlORye79KoR4IlOOk99lUJ0g==", - "license": "MIT", - "optional": true - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/measured-core": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/measured-core/-/measured-core-1.51.1.tgz", - "integrity": "sha512-DZQP9SEwdqqYRvT2slMK81D/7xwdxXosZZBtLVfPSo6y5P672FBTbzHVdN4IQyUkUpcVOR9pIvtUy5Ryl7NKyg==", - "license": "MIT", - "optional": true, - "dependencies": { - "binary-search": "^1.3.3", - "optional-js": "^2.0.0" - }, - "engines": { - "node": ">= 5.12" - } - }, - "node_modules/measured-reporting": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/measured-reporting/-/measured-reporting-1.51.1.tgz", - "integrity": "sha512-JCt+2u6XT1I5lG3SuYqywE0e62DJuAzBcfMzWGUhIYtPQV2Vm4HiYt/durqmzsAbZV181CEs+o/jMKWJKkYIWw==", - "license": "MIT", - "optional": true, - "dependencies": { - "console-log-level": "^1.4.1", - "mapcap": "^1.0.0", - "measured-core": "^1.51.1", - "optional-js": "^2.0.0" - }, - "engines": { - "node": ">= 5.12" - } - }, - "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/memfs": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", - "dev": true, - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.4" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "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/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/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "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/module-details-from-path": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", - "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", - "license": "MIT" - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/monitor-event-loop-delay": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/monitor-event-loop-delay/-/monitor-event-loop-delay-1.0.0.tgz", - "integrity": "sha512-YRIr1exCIfBDLZle8WHOfSo7Xg3M+phcZfq9Fx1L6Abo+atGp7cge5pM7PjyBn4s1oZI/BRD4EMrzQBbPpVb5Q==", - "license": "MIT", - "optional": true - }, - "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/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true, - "license": "ISC" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/nest-winston": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/nest-winston/-/nest-winston-1.10.2.tgz", - "integrity": "sha512-Z9IzL/nekBOF/TEwBHUJDiDPMaXUcFquUQOFavIRet6xF0EbuWnOzslyN/ksgzG+fITNgXhMdrL/POp9SdaFxA==", - "license": "MIT", - "dependencies": { - "fast-safe-stringify": "^2.1.1" - }, - "peerDependencies": { - "@nestjs/common": "^5.0.0 || ^6.6.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0", - "winston": "^3.0.0" - } - }, - "node_modules/next-line": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/next-line/-/next-line-1.1.0.tgz", - "integrity": "sha512-+I10J3wKNoKddNxn0CNpoZ3eTZuqxjNM3b1GImVx22+ePI+Y15P8g/j3WsbP0fhzzrFzrtjOAoq5NCCucswXOQ==", - "license": "MIT", - "optional": true - }, - "node_modules/node-abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", - "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-addon-api": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", - "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18 || ^20 || >= 21" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "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/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "dev": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nodemailer": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.12.tgz", - "integrity": "sha512-H+rnK5bX2Pi/6ms3sN4/jRQvYSMltV6vqup/0SFOrxYYY/qoNvhXPlYq3e+Pm9RFJRwrMGbMIwi81M4dxpomhA==", - "license": "MIT-0", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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-filter-sequence": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object-filter-sequence/-/object-filter-sequence-1.0.0.tgz", - "integrity": "sha512-CsubGNxhIEChNY4cXYuA6KXafztzHqzLLZ/y3Kasf3A+sa3lL9thq3z+7o0pZqzEinjXT6lXDPAfVWI59dUyzQ==", - "license": "MIT", - "optional": true - }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-identity-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/object-identity-map/-/object-identity-map-1.0.2.tgz", - "integrity": "sha512-a2XZDGyYTngvGS67kWnqVdpoaJWsY7C1GhPJvejWAFCsUioTAaiTu8oBad7c6cI4McZxr4CmvnZeycK05iav5A==", - "license": "MIT", - "optional": true, - "dependencies": { - "object.entries": "^1.1.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.entries": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", - "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", - "license": "MIT", - "optional": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "devOptional": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "license": "MIT", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optional-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/optional-js/-/optional-js-2.3.0.tgz", - "integrity": "sha512-B0LLi+Vg+eko++0z/b8zIv57kp7HKEzaPJo7LowJXMUKYdf+3XJGu/cw03h/JhIOsLnP+cG5QnTHAuicjA5fMw==", - "license": "MIT", - "optional": true - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/original-url": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/original-url/-/original-url-1.2.3.tgz", - "integrity": "sha512-BYm+pKYLtS4mVe/mgT3YKGtWV5HzN/XKiaIu1aK4rsxyjuHeTW9N+xVBEpJcY1onB3nccfH0RbzUEoimMqFUHQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "forwarded-parse": "^2.1.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/passport": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz", - "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "passport-strategy": "1.x.x", - "pause": "0.0.1", - "utils-merge": "^1.0.1" - }, - "engines": { - "node": ">= 0.4.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/jaredhanson" - } - }, - "node_modules/passport-jwt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz", - "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "jsonwebtoken": "^9.0.0", - "passport-strategy": "^1.0.0" - } - }, - "node_modules/passport-strategy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", - "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/path-to-regexp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pause": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", - "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==", - "dev": true - }, - "node_modules/pg": { - "version": "8.17.2", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.17.2.tgz", - "integrity": "sha512-vjbKdiBJRqzcYw1fNU5KuHyYvdJ1qpcQg1CeBrHFqV1pWgHeVR6j/+kX0E1AAXfyuLUGY1ICrN2ELKA/z2HWzw==", - "license": "MIT", - "peer": true, - "dependencies": { - "pg-connection-string": "^2.10.1", - "pg-pool": "^3.11.0", - "pg-protocol": "^1.11.0", - "pg-types": "2.2.0", - "pgpass": "1.0.5" - }, - "engines": { - "node": ">= 16.0.0" - }, - "optionalDependencies": { - "pg-cloudflare": "^1.3.0" - }, - "peerDependencies": { - "pg-native": ">=3.0.1" - }, - "peerDependenciesMeta": { - "pg-native": { - "optional": true - } - } - }, - "node_modules/pg-cloudflare": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz", - "integrity": "sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==", - "license": "MIT", - "optional": true - }, - "node_modules/pg-connection-string": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.10.1.tgz", - "integrity": "sha512-iNzslsoeSH2/gmDDKiyMqF64DATUCWj3YJ0wP14kqcsf2TUklwimd+66yYojKwZCA7h2yRNLGug71hCBA2a4sw==", - "license": "MIT" - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "license": "ISC", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-pool": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.11.0.tgz", - "integrity": "sha512-MJYfvHwtGp870aeusDh+hg9apvOe2zmpZJpyt+BMtzUWlVqbhFmMK6bOBXLBUPd7iRtIF9fZplDc7KrPN3PN7w==", - "license": "MIT", - "peerDependencies": { - "pg": ">=8.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz", - "integrity": "sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==", - "license": "MIT" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "license": "MIT", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pgpass": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", - "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", - "license": "MIT", - "dependencies": { - "split2": "^4.1.0" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.1.tgz", - "integrity": "sha512-xUXwsxNjwTQ8K3GnT4pCJm+xq3RUPQbmkYJTP5aFIfNIvbcc/4MUxgBaaRSZJ6yGJZiGSyYlM6MzwTsRk8SYCg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", - "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pino": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz", - "integrity": "sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==", - "license": "MIT", - "optional": true, - "dependencies": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.8", - "flatstr": "^1.0.12", - "pino-std-serializers": "^3.1.0", - "process-warning": "^1.0.0", - "quick-format-unescaped": "^4.0.3", - "sonic-boom": "^1.0.2" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/pino-std-serializers": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", - "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==", - "license": "MIT", - "optional": true - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.1.tgz", - "integrity": "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "license": "MIT", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", - "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-warning": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", - "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==", - "license": "MIT", - "optional": true - }, - "node_modules/prom-client": { - "version": "15.1.3", - "resolved": "https://registry.npmjs.org/prom-client/-/prom-client-15.1.3.tgz", - "integrity": "sha512-6ZiOBfCywsD4k1BN9IX0uZhF+tJkV8q8llP64G5Hajs4JOeVLPCwpPVcpXy3BwYiUGgyJzsJJQeOIv7+hDSq8g==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@opentelemetry/api": "^1.4.0", - "tdigest": "^0.1.1" - }, - "engines": { - "node": "^16 || ^18 || >=20" - } - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "license": "MIT", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/promise-breaker": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-6.0.0.tgz", - "integrity": "sha512-BthzO9yTPswGf7etOBiHCVuugs2N01/Q/94dIPls48z2zCmrnDptUUZzfIb+41xq0MnYZ/BzmOd6ikDR4ibNZA==", - "license": "MIT" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "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/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "license": "ISC", - "optional": true - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", - "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "license": "MIT" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", - "license": "MIT", - "optional": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "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": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "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/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", - "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", - "license": "Apache-2.0", - "peer": true - }, - "node_modules/relative-microtime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/relative-microtime/-/relative-microtime-2.0.0.tgz", - "integrity": "sha512-l18ha6HEZc+No/uK4GyAnNxgKW7nvEe35IaeN54sShMojtqik2a6GbTyuiezkjpPaqP874Z3lW5ysBo5irz4NA==", - "license": "MIT", - "optional": true - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-in-the-middle": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-8.0.1.tgz", - "integrity": "sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==", - "license": "MIT", - "dependencies": { - "debug": "^4.3.5", - "module-details-from-path": "^1.0.3" - }, - "engines": { - "node": ">=9.3.0 || >=8.10.0 <9.0.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "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", - "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", - "license": "MIT", - "engines": { - "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/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/secure-json-parse": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-3.0.2.tgz", - "integrity": "sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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/sha.js": { - "version": "2.4.12", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", - "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", - "license": "(MIT AND BSD-3-Clause)", - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1", - "to-buffer": "^1.2.0" - }, - "bin": { - "sha.js": "bin.js" - }, - "engines": { - "node": ">= 0.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shallow-clone-shim": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone-shim/-/shallow-clone-shim-2.0.0.tgz", - "integrity": "sha512-YRNymdiL3KGOoS67d73TEmk4tdPTO9GSMCoiphQsTcC9EtC+AOmMPjkyBkRoCJfW9ASsaZw1craaiw1dPN2D3Q==", - "license": "MIT", - "optional": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/sonic-boom": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", - "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", - "license": "MIT", - "optional": true, - "dependencies": { - "atomic-sleep": "^1.0.0", - "flatstr": "^1.0.12" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "license": "ISC", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/sql-highlight": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sql-highlight/-/sql-highlight-6.1.0.tgz", - "integrity": "sha512-ed7OK4e9ywpE7pgRMkMQmZDPKSVdm0oX5IEtZiKnFucSF0zu6c80GZBe38UqHuVhTWJ9xsKgSMjCG2bml86KvA==", - "funding": [ - "https://github.com/scriptcoded/sql-highlight?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/scriptcoded" - } - ], - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/sql-summary": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sql-summary/-/sql-summary-1.0.1.tgz", - "integrity": "sha512-IpCr2tpnNkP3Jera4ncexsZUp0enJBLr+pHCyTweMUBrbJsTgQeLWx1FXLhoBj/MvcnUQpkgOn2EY8FKOkUzww==", - "license": "MIT", - "optional": true - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "license": "MIT", - "optional": true - }, - "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/stream-chopper": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/stream-chopper/-/stream-chopper-3.0.1.tgz", - "integrity": "sha512-f7h+ly8baAE26iIjcp3VbnBkbIRGtrvV0X0xxFM/d7fwLTYnLzDPTXRKNxa2HZzohOrc96NTrR+FaV3mzOelNA==", - "license": "MIT", - "optional": true, - "dependencies": { - "readable-stream": "^3.0.6" - } - }, - "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-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/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", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/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", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strtok3": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", - "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", - "license": "MIT", - "dependencies": { - "@tokenizer/token": "^0.3.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/superagent": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", - "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", - "deprecated": "Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net", - "dev": true, - "license": "MIT", - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/supertest": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", - "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", - "deprecated": "Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net", - "dev": true, - "license": "MIT", - "dependencies": { - "methods": "^1.1.2", - "superagent": "^8.1.2" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/swagger-ui-dist": { - "version": "5.17.14", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.14.tgz", - "integrity": "sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", - "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/synckit": { - "version": "0.11.12", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", - "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.2.9" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, - "node_modules/table-layout": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz", - "integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==", - "license": "MIT", - "dependencies": { - "array-back": "^6.2.2", - "wordwrapjs": "^5.1.0" - }, - "engines": { - "node": ">=12.17" - } - }, - "node_modules/tapable": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/tdigest": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tdigest/-/tdigest-0.1.2.tgz", - "integrity": "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==", - "license": "MIT", - "dependencies": { - "bintrees": "1.0.2" - } - }, - "node_modules/terser": { - "version": "5.46.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", - "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.16", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", - "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/to-buffer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", - "license": "MIT", - "dependencies": { - "isarray": "^2.0.5", - "safe-buffer": "^5.2.1", - "typed-array-buffer": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/to-source-code": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/to-source-code/-/to-source-code-1.0.2.tgz", - "integrity": "sha512-YzWtjmNIf3E75eZYa7m1SCyl0vgOGoTzdpH3svfa8SUm5rqTgl9hnDolrAGOghCF9P2gsITXQoMrlujOoz+RPw==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-nil": "^1.0.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.1.2", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", - "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", - "license": "MIT", - "dependencies": { - "@borewit/text-codec": "^0.2.1", - "@tokenizer/token": "^0.3.0", - "ieee754": "^1.2.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/toml": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", - "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", - "license": "MIT" - }, - "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", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/triple-beam": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", - "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/ts-api-utils": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", - "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/ts-jest": { - "version": "29.4.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.6.tgz", - "integrity": "sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "^0.2.6", - "fast-json-stable-stringify": "^2.1.0", - "handlebars": "^4.7.8", - "json5": "^2.2.3", - "lodash.memoize": "^4.1.2", - "make-error": "^1.3.6", - "semver": "^7.7.3", - "type-fest": "^4.41.0", - "yargs-parser": "^21.1.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0 || ^30.0.0", - "@jest/types": "^29.0.0 || ^30.0.0", - "babel-jest": "^29.0.0 || ^30.0.0", - "jest": "^29.0.0 || ^30.0.0", - "jest-util": "^29.0.0 || ^30.0.0", - "typescript": ">=4.3 <6" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jest-util": { - "optional": true - } - } - }, - "node_modules/ts-jest/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ts-loader": { - "version": "9.5.4", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", - "integrity": "sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "devOptional": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tsconfig-paths-webpack-plugin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.2.0.tgz", - "integrity": "sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.7.0", - "tapable": "^2.2.1", - "tsconfig-paths": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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/typeorm": { - "version": "0.3.28", - "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.28.tgz", - "integrity": "sha512-6GH7wXhtfq2D33ZuRXYwIsl/qM5685WZcODZb7noOOcRMteM9KF2x2ap3H0EBjnSV0VO4gNAfJT5Ukp0PkOlvg==", - "license": "MIT", - "peer": true, - "dependencies": { - "@sqltools/formatter": "^1.2.5", - "ansis": "^4.2.0", - "app-root-path": "^3.1.0", - "buffer": "^6.0.3", - "dayjs": "^1.11.19", - "debug": "^4.4.3", - "dedent": "^1.7.0", - "dotenv": "^16.6.1", - "glob": "^10.5.0", - "reflect-metadata": "^0.2.2", - "sha.js": "^2.4.12", - "sql-highlight": "^6.1.0", - "tslib": "^2.8.1", - "uuid": "^11.1.0", - "yargs": "^17.7.2" - }, - "bin": { - "typeorm": "cli.js", - "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", - "typeorm-ts-node-esm": "cli-ts-node-esm.js" - }, - "engines": { - "node": ">=16.13.0" - }, - "funding": { - "url": "https://opencollective.com/typeorm" - }, - "peerDependencies": { - "@google-cloud/spanner": "^5.18.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", - "@sap/hana-client": "^2.14.22", - "better-sqlite3": "^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0", - "ioredis": "^5.0.4", - "mongodb": "^5.8.0 || ^6.0.0", - "mssql": "^9.1.1 || ^10.0.0 || ^11.0.0 || ^12.0.0", - "mysql2": "^2.2.5 || ^3.0.1", - "oracledb": "^6.3.0", - "pg": "^8.5.1", - "pg-native": "^3.0.0", - "pg-query-stream": "^4.0.0", - "redis": "^3.1.1 || ^4.0.0 || ^5.0.14", - "sql.js": "^1.4.0", - "sqlite3": "^5.0.3", - "ts-node": "^10.7.0", - "typeorm-aurora-data-api-driver": "^2.0.0 || ^3.0.0" - }, - "peerDependenciesMeta": { - "@google-cloud/spanner": { - "optional": true - }, - "@sap/hana-client": { - "optional": true - }, - "better-sqlite3": { - "optional": true - }, - "ioredis": { - "optional": true - }, - "mongodb": { - "optional": true - }, - "mssql": { - "optional": true - }, - "mysql2": { - "optional": true - }, - "oracledb": { - "optional": true - }, - "pg": { - "optional": true - }, - "pg-native": { - "optional": true - }, - "pg-query-stream": { - "optional": true - }, - "redis": { - "optional": true - }, - "sql.js": { - "optional": true - }, - "sqlite3": { - "optional": true - }, - "ts-node": { - "optional": true - }, - "typeorm-aurora-data-api-driver": { - "optional": true - } - } - }, - "node_modules/typeorm/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typeorm/node_modules/reflect-metadata": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", - "license": "Apache-2.0" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typical": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz", - "integrity": "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==", - "license": "MIT", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uid": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz", - "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==", - "license": "MIT", - "dependencies": { - "@lukeed/csprng": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uint8array-extras": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", - "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/undici": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", - "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/unicode-byte-truncate": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-byte-truncate/-/unicode-byte-truncate-1.0.0.tgz", - "integrity": "sha512-GQgHk6DodEoKddKQdjnv7xKS9G09XCfHWX0R4RKht+EbUMSiVEmtWHGFO8HUm+6NvWik3E2/DG4MxTitOLL64A==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-integer": "^1.0.6", - "unicode-substring": "^0.1.0" - } - }, - "node_modules/unicode-substring": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicode-substring/-/unicode-substring-0.1.0.tgz", - "integrity": "sha512-36Xaw9wXi7MB/3/EQZZHkZyyiRNa9i3k9YtPAz2KfqMVH2xutdXyMHn4Igarmnvr+wOrfWa/6njhY+jPpXN2EQ==", - "license": "MIT", - "optional": true - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "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/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urijs": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz", - "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==", - "license": "MIT" - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "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/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/esm/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/validator": { - "version": "13.15.26", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.26.tgz", - "integrity": "sha512-spH26xU080ydGggxRyR1Yhcbgx+j3y5jbNXk/8L+iRvdIEQ4uTRH2Sgf2dokud6Q4oAtsbNvJ1Ft+9xmm6IZcA==", - "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/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watchpack": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", - "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "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/webpack": { - "version": "5.104.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", - "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.15.0", - "acorn-import-phases": "^1.0.3", - "browserslist": "^4.28.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.4", - "es-module-lexer": "^2.0.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.3.1", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.16", - "watchpack": "^2.4.4", - "webpack-sources": "^3.3.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-node-externals": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", - "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-sources": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", - "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "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/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.20", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", - "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/winston": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", - "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", - "license": "MIT", - "peer": true, - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.8", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.7.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.9.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-daily-rotate-file": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-5.0.0.tgz", - "integrity": "sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==", - "license": "MIT", - "dependencies": { - "file-stream-rotator": "^0.6.1", - "object-hash": "^3.0.0", - "triple-beam": "^1.4.1", - "winston-transport": "^4.7.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "winston": "^3" - } - }, - "node_modules/winston-elasticsearch": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/winston-elasticsearch/-/winston-elasticsearch-0.19.0.tgz", - "integrity": "sha512-yD+Wi/NmMsKCSkWvzdmk2RZ2KSHJ+ox5PM/480nsahWFtiLESI90ESXnS8Yfvc0N4NFnCXNaIj2FERIgjImjoQ==", - "license": "MIT", - "dependencies": { - "@elastic/elasticsearch": "^8.13.1", - "dayjs": "^1.11.11", - "debug": "^4.3.4", - "lodash.defaults": "^4.2.0", - "lodash.omit": "^4.5.0", - "promise": "^8.3.0", - "retry": "^0.13.1", - "winston": "^3.13.0", - "winston-transport": "^4.7.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "optionalDependencies": { - "elastic-apm-node": "^3.20.0" - } - }, - "node_modules/winston-transport": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", - "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", - "license": "MIT", - "dependencies": { - "logform": "^2.7.0", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston/node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/wordwrapjs": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.1.tgz", - "integrity": "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==", - "license": "MIT", - "engines": { - "node": ">=12.17" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "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==", - "devOptional": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/xss": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/xss/-/xss-1.0.15.tgz", - "integrity": "sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==", - "license": "MIT", - "dependencies": { - "commander": "^2.20.3", - "cssfilter": "0.0.10" - }, - "bin": { - "xss": "bin/xss" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/xss/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "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", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", - "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} +git pull --rebase +# If conflicts arise during rebase, I can help resolve them. +git push \ No newline at end of file diff --git a/package.json b/package.json index dc4f797..7ab3db5 100644 --- a/package.json +++ b/package.json @@ -1,134 +1,7 @@ -{ - "name": "quest-service", - "version": "0.0.1", - "description": "", - "author": "", - "private": true, - "license": "UNLICENSED", - "scripts": { - "build": "nest build", - "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "format:check": "prettier --check \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "nest start", - "start:dev": "nest start --watch", - "start:debug": "nest start --debug --watch", - "start:prod": "node dist/main", - "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", - "lint:check": "eslint \"{src,apps,libs,test}/**/*.ts\"", - "type-check": "tsc --noEmit", - "test": "jest", - "test:unit": "jest --testPathPattern=\\.spec\\.ts$", - "test:integration": "jest --testPathPattern=\\.integration\\.spec\\.ts$", - "test:e2e": "jest --config ./test/jest-e2e.json --testPathPattern=\\.e2e\\.spec\\.ts$", - "test:watch": "jest --watch", - "test:cov": "jest --coverage --testPathPattern=\\.spec\\.ts$", - "test:cov:integration": "jest --coverage --testPathPattern=\\.integration\\.spec\\.ts$", - "test:cov:e2e": "jest --coverage --config ./test/jest-e2e.json --testPathPattern=\\.e2e\\.spec\\.ts$", - "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:performance": "jest --config ./test/jest-performance.json", - "test:smoke": "jest --config ./test/jest-smoke.json", - "test:all": "npm run test:unit && npm run test:integration && npm run test:e2e", - "migration:generate": "ts-node ./node_modules/typeorm/cli -d ormconfig.ts migration:generate", - "migration:run": "ts-node ./node_modules/typeorm/cli -d ormconfig.ts migration:run", - "migration:revert": "ts-node ./node_modules/typeorm/cli -d ormconfig.ts migration:revert", - "seed:run": "ts-node src/database/seeds/run-seeds.ts", - "seed:perf": "ts-node src/database/seeds/run-performance-seeds.ts", - "typeorm:migration:generate": "ts-node ./node_modules/typeorm/cli -d ormconfig.ts migration:generate src/migrations/Init", - "typeorm:migration:run": "ts-node ./node_modules/typeorm/cli -d ormconfig.ts migration:run", - "typeorm:migration:revert": "ts-node ./node_modules/typeorm/cli -d ormconfig.ts migration:revert" - }, - "dependencies": { - "@nestjs/common": "^10.4.4", - "@nestjs/config": "^3.3.0", - "@nestjs/core": "^10.4.4", - "@nestjs/mapped-types": "^2.0.5", - "@nestjs/microservices": "^10.4.4", - "@nestjs/platform-express": "^10.4.4", - "@nestjs/schedule": "^6.0.0", - "@nestjs/terminus": "^11.0.0", - "@nestjs/throttler": "^5.2.0", - "@nestjs/typeorm": "^11.0.0", - "@sentry/integrations": "^7.114.0", - "@sentry/node": "^10.5.0", - "@stellar/stellar-sdk": "^14.4.3", - "@willsoto/nestjs-prometheus": "^6.0.2", - "amqp-connection-manager": "^5.0.0", - "amqplib": "^0.10.9", - "cache-manager": "^7.1.1", - "class-transformer": "^0.5.1", - "class-validator": "^0.14.1", - "date-fns": "^4.1.0", - "helmet": "^7.2.0", - "nest-winston": "^1.9.7", - "nodemailer": "^7.0.5", - "pg": "^8.16.3", - "prom-client": "^15.1.3", - "reflect-metadata": "^0.1.14", - "rxjs": "^7.8.1", - "typeorm": "^0.3.25", - "winston": "^3.11.0", - "winston-daily-rotate-file": "^5.0.0", - "winston-elasticsearch": "^0.19.0", - "xss": "^1.0.15" - }, - "devDependencies": { - "@nestjs/cli": "^10.4.5", - "@nestjs/jwt": "^11.0.0", - "@nestjs/passport": "^11.0.5", - "@nestjs/schematics": "^10.1.4", - "@nestjs/swagger": "^7.4.2", - "@nestjs/testing": "^10.4.4", - "@types/bcrypt": "^6.0.0", - "@types/express": "^4.17.21", - "@types/jest": "^29.5.12", - "@types/multer": "^2.0.0", - "@types/node": "^20.19.30", - "@types/passport-jwt": "^4.0.1", - "@types/supertest": "^6.0.2", - "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", - "bcrypt": "^6.0.0", - "eslint": "^8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.2.1", - "husky": "^8.0.3", - "jest": "^29.7.0", - "lint-staged": "^15.2.8", - "passport-jwt": "^4.0.1", - "prettier": "^3.3.3", - "source-map-support": "^0.5.21", - "supertest": "^6.3.4", - "ts-jest": "^29.2.4", - "ts-loader": "^9.5.1", - "ts-node": "^10.9.2", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.5.4", - "webpack": "^5.101.0" - }, - "jest": { - "moduleFileExtensions": [ - "js", - "json", - "ts" - ], - "rootDir": "src", - "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, - "collectCoverageFrom": [ - "**/*.(t|j)s" - ], - "coverageDirectory": "../coverage", - "testEnvironment": "node" - }, - "lint-staged": { - "*.{ts,js}": [ - "eslint --fix", - "prettier --write" - ] - }, - "engines": { - "node": ">=18.0.0" - } -} +"amqp-connection-manager": "^5.0.0", +"amqplib": "^0.10.9", +"cache-manager": "^7.2.8", +"class-transformer": "^0.5.1", +"class-validator": "^0.14.1", +"date-fns": "^4.1.0", +"firebase-admin": "^13.6.0", diff --git a/src/achievements/achievements.controller.spec.ts b/src/achievements/achievements.controller.spec.ts index dc54bde..bc91d2c 100644 --- a/src/achievements/achievements.controller.spec.ts +++ b/src/achievements/achievements.controller.spec.ts @@ -8,7 +8,9 @@ describe('AchievementsController', () => { beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [AchievementsController], - providers: [AchievementsService], + providers: [ + { provide: AchievementsService, useValue: { findAll: jest.fn(), findOne: jest.fn() } } + ], }).compile(); controller = module.get(AchievementsController); diff --git a/src/achievements/achievements.service.spec.ts b/src/achievements/achievements.service.spec.ts index eb3dd74..677bab4 100644 --- a/src/achievements/achievements.service.spec.ts +++ b/src/achievements/achievements.service.spec.ts @@ -1,12 +1,42 @@ import { Test, TestingModule } from '@nestjs/testing'; import { AchievementsService } from './achievements.service'; +import { getRepositoryToken } from '@nestjs/typeorm'; +import { Achievement } from './entities/achievement.entity'; +import { UserAchievement } from './entities/user-achievement.entity'; +import { NotificationService } from '../notifications/notification.service'; +import { AchievementConditionEngine } from './achievement-condition.engine'; describe('AchievementsService', () => { let service: AchievementsService; + const mockRepository = () => ({ + find: jest.fn(), + findOne: jest.fn(), + create: jest.fn(), + save: jest.fn(), + update: jest.fn(), + delete: jest.fn(), + count: jest.fn(), + }); + + const mockNotificationService = () => ({ + notifyAchievementUnlocked: jest.fn(), + }); + + const mockConditionEngine = () => ({ + evaluate: jest.fn(), + evaluateAllForUser: jest.fn(), + }); + beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - providers: [AchievementsService], + providers: [ + AchievementsService, + { provide: getRepositoryToken(Achievement), useFactory: mockRepository }, + { provide: getRepositoryToken(UserAchievement), useFactory: mockRepository }, + { provide: NotificationService, useFactory: mockNotificationService }, + { provide: AchievementConditionEngine, useFactory: mockConditionEngine }, + ], }).compile(); service = module.get(AchievementsService); diff --git a/src/achievements/achievements.service.ts b/src/achievements/achievements.service.ts index ba8564b..7e68e45 100644 --- a/src/achievements/achievements.service.ts +++ b/src/achievements/achievements.service.ts @@ -18,7 +18,7 @@ export class AchievementsService { private userAchievementRepository: Repository, private readonly notificationService: NotificationService, private readonly conditionEngine: AchievementConditionEngine, - ) {} + ) { } async create(createAchievementDto: CreateAchievementDto) { const achievement = this.achievementRepository.create(createAchievementDto); @@ -152,4 +152,23 @@ export class AchievementsService { async retroactiveUnlock(userId: string, userContext: any) { return this.conditionEngine.evaluateAllForUser(userId, userContext); } + + async findLeaderboardAchievements(leaderboardId: number) { + // In a real app, you would query achievements linked to this leaderboard + return this.achievementRepository.find({ + where: { metadata: { leaderboardId } } as any + }); + } + + async awardAchievementToUser(achievementId: string, userId: number | string) { + const userAchievement = this.userAchievementRepository.create({ + userId: userId.toString(), + achievementId, + isUnlocked: true, + unlockedAt: new Date(), + progress: 100, + progressTotal: 100, + }); + return this.userAchievementRepository.save(userAchievement); + } } diff --git a/src/analytics/analytics.controller.ts b/src/analytics/analytics.controller.ts index d2777da..771f897 100644 --- a/src/analytics/analytics.controller.ts +++ b/src/analytics/analytics.controller.ts @@ -1,165 +1,3 @@ -// src/analytics/analytics.controller.ts -import { - Controller, - Get, - Post, - Body, - Query, - Param, - UseGuards, - HttpCode, - HttpStatus, -} from '@nestjs/common'; -import { AnalyticsService } from './analytics.service'; - -import { - FilterPlayerBehaviorDto, - FilterPuzzlePerformanceDto, - FilterEngagementDto, - FilterRevenueDto, - FilterABTestDto, - FilterCustomEventDto, - TrackEventDto, - TrackPuzzleAttemptDto, - TrackABTestResultDto, -} from './dto'; - -// Optional auth (enable when ready) -// import { RolesGuard } from '../auth/guards/roles.guard'; -// import { Roles } from '../auth/decorators/roles.decorator'; - -@Controller('analytics') -// @UseGuards(RolesGuard) -export class AnalyticsController { - constructor(private readonly analyticsService: AnalyticsService) {} - - /** - * EVENT TRACKING - */ - @Post('events/track') - @HttpCode(HttpStatus.CREATED) - async trackEvent(@Body() dto: TrackEventDto) { - return this.analyticsService.trackEvent(dto); - } - - @Post('puzzles/track-attempt') - @HttpCode(HttpStatus.CREATED) - async trackPuzzleAttempt(@Body() dto: TrackPuzzleAttemptDto) { - return this.analyticsService.trackPuzzleAttempt(dto); - } - - @Post('abtest/track-result') - @HttpCode(HttpStatus.CREATED) - async trackABTestResult(@Body() dto: TrackABTestResultDto) { - return this.analyticsService.trackABTestResult(dto); - } - - /** - * PLAYER BEHAVIOR - */ - @Get('player-behavior') - // @Roles('admin', 'analyst') - async getPlayerBehavior(@Query() filters: FilterPlayerBehaviorDto) { - return this.analyticsService.getPlayerBehaviorAnalytics(filters); - } - - /** - * PUZZLE PERFORMANCE - */ - @Get('puzzle-performance') - // @Roles('admin', 'analyst', 'designer') - async getPuzzlePerformance(@Query() filters: FilterPuzzlePerformanceDto) { - return this.analyticsService.getPuzzlePerformanceAnalytics(filters); - } - - /** - * ENGAGEMENT & RETENTION - */ - @Get('engagement') - // @Roles('admin', 'analyst') - async getEngagement(@Query() filters: FilterEngagementDto) { - return this.analyticsService.getEngagementAnalytics(filters); - } - - @Get('retention/:cohortDate') - // @Roles('admin', 'analyst') - async getRetention(@Param('cohortDate') cohortDate: string) { - return this.analyticsService.getRetentionAnalysis(cohortDate); - } - - /** - * REVENUE - */ - @Get('revenue') - // @Roles('admin', 'analyst', 'finance') - async getRevenue(@Query() filters: FilterRevenueDto) { - return this.analyticsService.getRevenueAnalytics(filters); - } - - /** - * A/B TESTING - */ - @Get('abtest/results') - // @Roles('admin', 'analyst', 'designer') - async getABTestResults(@Query() filters: FilterABTestDto) { - return this.analyticsService.getABTestResults(filters); - } - - /** - * FUNNEL ANALYTICS - */ - @Get('funnel') - // @Roles('admin', 'analyst', 'product') - async getFunnelAnalytics(@Query() filters: FilterCustomEventDto) { - return this.analyticsService.getFunnelAnalytics(filters); - } - - /** - * PREDICTIVE ANALYTICS - */ - @Get('churn-prediction/:playerId') - // @Roles('admin', 'analyst') - async predictChurn(@Param('playerId') playerId: string) { - return this.analyticsService.predictPlayerChurn(playerId); - } - - /** - * REAL-TIME DASHBOARD - */ - @Get('dashboard/realtime') - // @Roles('admin', 'analyst') - async getRealTimeDashboard() { - return this.analyticsService.getRealTimeDashboard(); - } - - /** - * REPORTING - */ - @Get('reports/daily/:date') - // @Roles('admin', 'analyst') - async getDailyReport(@Param('date') date: string) { - return this.analyticsService.generateDailyReport(date); - } - - /** - * DATA EXPORT - */ - @Post('exports') - // @Roles('admin', 'analyst') - @HttpCode(HttpStatus.ACCEPTED) - async exportAnalytics(@Body('type') type: string) { - return this.analyticsService.exportAnalyticsData(type); - } - - /** - * HEALTH CHECK - */ - @Get('health') - async healthCheck() { - return { - status: 'ok', - service: 'analytics', - timestamp: new Date().toISOString(), - }; - } -} +rm -rf node_modules package-lock.json +npm install +npm run build diff --git a/src/analytics/analytics.service.spec.ts b/src/analytics/analytics.service.spec.ts index 6494112..b19052d 100644 --- a/src/analytics/analytics.service.spec.ts +++ b/src/analytics/analytics.service.spec.ts @@ -1,35 +1,42 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { AnalyticsService } from '../analytics.service'; +import { AnalyticsService } from './analytics.service'; import { getRepositoryToken } from '@nestjs/typeorm'; -import { AnalyticsEvent } from '../entities/analytics-event.entity'; +import { AnalyticsEvent } from './entities/analytics-event.entity'; const mockRepo = () => ({ query: jest.fn() }); describe('AnalyticsService', () => { -let service: AnalyticsService; -let repo; + let service: AnalyticsService; + let repo: any; -beforeEach(async () => { -const module: TestingModule = await Test.createTestingModule({ -providers: [ -AnalyticsService, -{ provide: getRepositoryToken(AnalyticsEvent), useFactory: mockRepo }, -], -}).compile(); + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ + AnalyticsService, + { provide: getRepositoryToken(AnalyticsEvent), useFactory: mockRepo }, + ], + }).compile(); -service = module.get(AnalyticsService); -repo = module.get(getRepositoryToken(AnalyticsEvent)); -}); + service = module.get(AnalyticsService); + repo = module.get(getRepositoryToken(AnalyticsEvent)); + }); -it('should return players overview series', async () => { -repo.query.mockResolvedValue([{ day: '2025-09-25', dau: '10' }]); -const res = await service.getPlayersOverview({ from: '2025-09-20', to: '2025-09-26' }); -expect(res).toHaveProperty('series'); -expect(repo.query).toHaveBeenCalled(); -}); + it('should return players overview', async () => { + const mockQb = { + andWhere: jest.fn().mockReturnThis(), + select: jest.fn().mockReturnThis(), + getRawOne: jest.fn().mockResolvedValue({ count: '10' }), + }; + repo.createQueryBuilder = jest.fn().mockReturnValue(mockQb); + + const res = await service.getPlayersOverview({ from: '2025-09-20', to: '2025-09-26' }); + expect(res).toHaveProperty('totalPlayers'); + expect(res.totalPlayers).toBe(10); + expect(repo.createQueryBuilder).toHaveBeenCalled(); + }); }); \ No newline at end of file diff --git a/src/analytics/analytics.service.ts b/src/analytics/analytics.service.ts index a7e550a..064e75e 100644 --- a/src/analytics/analytics.service.ts +++ b/src/analytics/analytics.service.ts @@ -1,357 +1,2 @@ -// src/analytics/analytics.service.ts -import { Injectable, Logger } from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository } from 'typeorm'; - -import { PlayerEvent } from './entities/player-event.entity'; -import { PuzzleAttempt } from './entities/puzzle-attempt.entity'; -import { RevenueEvent } from './entities/revenue-event.entity'; -import { ABTestResult } from './entities/abtest-result.entity'; -import { CustomEvent } from './entities/custom-event.entity'; -import { PlayerCohort } from './entities/player-cohort.entity'; - -import { - FilterPlayerBehaviorDto, - FilterPuzzlePerformanceDto, - FilterEngagementDto, - FilterRevenueDto, - FilterABTestDto, - FilterCustomEventDto, - TrackEventDto, - TrackPuzzleAttemptDto, - TrackABTestResultDto, -} from './dto'; - -@Injectable() -export class AnalyticsService { - private readonly logger = new Logger(AnalyticsService.name); - - constructor( - @InjectRepository(PlayerEvent) - private readonly playerEventRepo: Repository, - - @InjectRepository(PuzzleAttempt) - private readonly puzzleAttemptRepo: Repository, - - @InjectRepository(RevenueEvent) - private readonly revenueEventRepo: Repository, - - @InjectRepository(ABTestResult) - private readonly abTestResultRepo: Repository, - - @InjectRepository(CustomEvent) - private readonly customEventRepo: Repository, - - @InjectRepository(PlayerCohort) - private readonly playerCohortRepo: Repository, - ) {} - - /** - * EVENT TRACKING - */ - async trackEvent(dto: TrackEventDto): Promise { - const event = this.playerEventRepo.create({ - playerId: dto.playerId, - sessionId: dto.sessionId, - type: dto.eventType, - metadata: dto.metadata || {}, - }); - return this.playerEventRepo.save(event); - } - - async trackPuzzleAttempt(dto: TrackPuzzleAttemptDto): Promise { - return this.puzzleAttemptRepo.save(this.puzzleAttemptRepo.create(dto)); - } - - async trackABTestResult(dto: TrackABTestResultDto): Promise { - return this.abTestResultRepo.save(this.abTestResultRepo.create(dto)); - } - - /** - * 1. PLAYER BEHAVIOR ANALYTICS - */ - async getPlayerBehaviorAnalytics(filters: FilterPlayerBehaviorDto) { - const qb = this.playerEventRepo.createQueryBuilder('event'); - - if (filters.playerId) - qb.andWhere('event.playerId = :playerId', { playerId: filters.playerId }); - if (filters.startDate) - qb.andWhere('event.timestamp >= :startDate', { startDate: filters.startDate }); - if (filters.endDate) - qb.andWhere('event.timestamp <= :endDate', { endDate: filters.endDate }); - if (filters.eventType) - qb.andWhere('event.type = :eventType', { eventType: filters.eventType }); - - const summary = await qb - .select([ - 'event.type as "eventType"', - 'COUNT(event.id) as "totalEvents"', - 'AVG(event.sessionDuration) as "avgSessionDuration"', - 'COUNT(DISTINCT event.playerId) as "uniquePlayers"', - 'COUNT(DISTINCT event.sessionId) as "uniqueSessions"', - ]) - .groupBy('event.type') - .getRawMany(); - - const hourlyDistribution = await qb - .select([ - 'EXTRACT(HOUR FROM event.timestamp) as "hour"', - 'COUNT(*) as "count"', - ]) - .groupBy('hour') - .orderBy('hour') - .getRawMany(); - - return { summary, hourlyDistribution, filters }; - } - - /** - * 2. PUZZLE PERFORMANCE - */ - async getPuzzlePerformanceAnalytics(filters: FilterPuzzlePerformanceDto) { - const qb = this.puzzleAttemptRepo.createQueryBuilder('attempt'); - - if (filters.puzzleId) - qb.andWhere('attempt.puzzleId = :puzzleId', { puzzleId: filters.puzzleId }); - if (filters.difficulty) - qb.andWhere('attempt.difficulty = :difficulty', { difficulty: filters.difficulty }); - if (filters.startDate) - qb.andWhere('attempt.timestamp >= :startDate', { startDate: filters.startDate }); - if (filters.endDate) - qb.andWhere('attempt.timestamp <= :endDate', { endDate: filters.endDate }); - - const results = await qb - .select([ - 'attempt.puzzleId as "puzzleId"', - 'attempt.difficulty as "difficulty"', - 'COUNT(*) as "totalAttempts"', - 'SUM(CASE WHEN attempt.success = true THEN 1 ELSE 0 END) as "successCount"', - 'AVG(attempt.timeTaken) as "avgTimeTaken"', - 'AVG(attempt.movesCount) as "avgMoves"', - 'AVG(attempt.hintsUsed) as "avgHints"', - 'SUM(CASE WHEN attempt.abandoned = true THEN 1 ELSE 0 END) as "abandonedCount"', - ]) - .groupBy('attempt.puzzleId') - .addGroupBy('attempt.difficulty') - .getRawMany(); - - const enhanced = results.map(r => ({ - ...r, - completionRate: ((r.successCount / r.totalAttempts) * 100).toFixed(2) + '%', - abandonRate: ((r.abandonedCount / r.totalAttempts) * 100).toFixed(2) + '%', - })); - - return { summary: enhanced, filters }; - } - - /** - * 3. ENGAGEMENT ANALYTICS - */ - async getEngagementAnalytics(filters: FilterEngagementDto) { - const qb = this.playerEventRepo.createQueryBuilder('event'); - - if (filters.startDate) - qb.andWhere('event.timestamp >= :startDate', { startDate: filters.startDate }); - if (filters.endDate) - qb.andWhere('event.timestamp <= :endDate', { endDate: filters.endDate }); - - const dailyActiveUsers = await qb - .select([ - 'DATE(event.timestamp) as "date"', - 'COUNT(DISTINCT event.playerId) as "dau"', - ]) - .groupBy('date') - .orderBy('date', 'ASC') - .getRawMany(); - - return { dailyActiveUsers, filters }; - } - - /** - * 4. RETENTION ANALYSIS - */ - async getRetentionAnalysis(cohortDate: string) { - const cohorts = await this.playerCohortRepo - .createQueryBuilder('cohort') - .select([ - 'cohort.daysSinceInstall as "day"', - 'COUNT(DISTINCT cohort.playerId) as "totalPlayers"', - 'SUM(CASE WHEN cohort.active = true THEN 1 ELSE 0 END) as "activePlayers"', - ]) - .where('cohort.cohortDate = :cohortDate', { cohortDate }) - .groupBy('cohort.daysSinceInstall') - .orderBy('cohort.daysSinceInstall', 'ASC') - .getRawMany(); - - return { - cohortDate, - retentionRates: cohorts.map(c => ({ - day: c.day, - retentionRate: ((c.activePlayers / c.totalPlayers) * 100).toFixed(2) + '%', - })), - }; - } - - /** - * 5. REVENUE ANALYTICS - */ - async getRevenueAnalytics(filters: FilterRevenueDto) { - const qb = this.revenueEventRepo.createQueryBuilder('rev'); - - if (filters.startDate) - qb.andWhere('rev.timestamp >= :startDate', { startDate: filters.startDate }); - if (filters.endDate) - qb.andWhere('rev.timestamp <= :endDate', { endDate: filters.endDate }); - if (filters.revenueType) - qb.andWhere('rev.type = :revenueType', { revenueType: filters.revenueType }); - - const summary = await qb - .select([ - 'rev.type as "revenueType"', - 'SUM(rev.amount) as "totalRevenue"', - 'COUNT(*) as "transactions"', - 'AVG(rev.amount) as "avgRevenuePerTxn"', - ]) - .groupBy('rev.type') - .getRawMany(); - - return { summary, filters }; - } - - /** - * 6. A/B TEST RESULTS - */ - async getABTestResults(filters: FilterABTestDto) { - const qb = this.abTestResultRepo.createQueryBuilder('ab'); - - if (filters.testId) - qb.andWhere('ab.testId = :testId', { testId: filters.testId }); - - const results = await qb - .select([ - 'ab.variant as "variant"', - 'COUNT(*) as "participants"', - 'AVG(ab.metricValue) as "avgMetric"', - 'STDDEV(ab.metricValue) as "stdDev"', - ]) - .groupBy('ab.variant') - .getRawMany(); - - return { abTestResults: results, filters }; - } - - /** - * 7. FUNNEL ANALYTICS - */ - async getFunnelAnalytics(filters: FilterCustomEventDto) { - const qb = this.customEventRepo.createQueryBuilder('evt'); - - if (filters.funnelId) - qb.andWhere('evt.funnelId = :funnelId', { funnelId: filters.funnelId }); - - const results = await qb - .select([ - 'evt.step as "step"', - 'COUNT(DISTINCT evt.playerId) as "users"', - ]) - .groupBy('evt.step') - .orderBy('evt.step', 'ASC') - .getRawMany(); - - return { funnel: results, filters }; - } - - /** - * 8. CHURN PREDICTION - */ - async predictPlayerChurn(playerId: string) { - const recentActivity = await this.playerEventRepo.count({ where: { playerId } }); - const score = recentActivity < 5 ? 80 : recentActivity < 15 ? 50 : 20; - - return { - playerId, - churnScore: score, - churnRisk: score > 70 ? 'HIGH' : score > 40 ? 'MEDIUM' : 'LOW', - }; - } - - /** - * 9. REAL-TIME DASHBOARD - */ - async getRealTimeDashboard() { - const last24h = new Date(Date.now() - 24 * 60 * 60 * 1000); - - const activeUsers = await this.playerEventRepo - .createQueryBuilder('event') - .where('event.timestamp >= :last24h', { last24h }) - .select('COUNT(DISTINCT event.playerId)', 'count') - .getRawOne(); - - return { - activeUsers24h: Number(activeUsers.count || 0), - timestamp: new Date().toISOString(), - }; - } - - /** - * 10. DAILY REPORT - */ - async generateDailyReport(date: string) { - return { - date, - generatedAt: new Date().toISOString(), - status: 'generated', - }; - } - - /** - * 11. FORECAST ANALYTICS - */ - async getForecastAnalytics(metric: string) { - return { - metric, - forecast: [ - { date: '2026-01-01', predictedValue: 120 }, - { date: '2026-01-02', predictedValue: 135 }, - { date: '2026-01-03', predictedValue: 142 }, - ], - }; - } - - /** - * 12. DATA EXPORT - */ - async exportAnalyticsData(type: string) { - return { - type, - url: `/exports/analytics-${type}-${Date.now()}.csv`, - status: 'ready', - }; - } - - /** - * 13. CHART DATA - */ - async getChartData(metric: string) { - const results = await this.playerEventRepo - .createQueryBuilder('event') - .select([ - 'DATE(event.timestamp) as "day"', - 'COUNT(*) as "count"', - ]) - .groupBy('day') - .orderBy('day', 'ASC') - .getRawMany(); - - return { - metric, - labels: results.map(r => r.day), - datasets: [ - { - label: metric, - data: results.map(r => Number(r.count)), - }, - ], - }; - } -} +git add package.json +git commit -m "fix: resolve package.json merge conflict" diff --git a/src/analytics/dto/export-job.dto.ts b/src/analytics/dto/export-job.dto.ts index 8a8a06e..9cc91c5 100644 --- a/src/analytics/dto/export-job.dto.ts +++ b/src/analytics/dto/export-job.dto.ts @@ -5,16 +5,19 @@ export enum ExportFormat { CSV = 'csv', JSON = 'json' } export class CreateExportJobDto { -@IsString() -queryName: string; // e.g. 'puzzles_summary' + @IsString() + queryName: string; // e.g. 'puzzles_summary' + @IsString() + type: string; -@IsOptional() -@IsString() -tenantId?: string; + @IsOptional() + @IsString() + tenantId?: string; -@IsOptional() -@IsEnum(ExportFormat) -format?: ExportFormat = ExportFormat.CSV; + + @IsOptional() + @IsEnum(ExportFormat) + format?: ExportFormat = ExportFormat.CSV; } \ No newline at end of file diff --git a/src/app.controller.spec.ts b/src/app.controller.spec.ts index d22f389..8e42962 100644 --- a/src/app.controller.spec.ts +++ b/src/app.controller.spec.ts @@ -1,6 +1,7 @@ import { Test, TestingModule } from '@nestjs/testing'; import { AppController } from './app.controller'; import { AppService } from './app.service'; +import { ConfigService } from '@nestjs/config'; describe('AppController', () => { let appController: AppController; @@ -8,15 +9,20 @@ describe('AppController', () => { beforeEach(async () => { const app: TestingModule = await Test.createTestingModule({ controllers: [AppController], - providers: [AppService], + providers: [ + AppService, + { provide: ConfigService, useValue: { get: jest.fn() } }, + ], }).compile(); appController = app.get(AppController); }); describe('root', () => { - it('should return "Hello World!"', () => { - expect(appController.getHello()).toBe('Hello World!'); + it('should return welcome message', () => { + const result = appController.getHello(); + expect(result.message).toBe('Welcome to LogiQuest Backend API! 🧩'); + expect(result.timestamp).toBeDefined(); }); }); }); diff --git a/src/app.service.ts b/src/app.service.ts index 33e61b4..81b695b 100644 --- a/src/app.service.ts +++ b/src/app.service.ts @@ -1,9 +1,9 @@ -import { Injectable } from '@nestjs/common'; +import { Injectable, Inject } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; @Injectable() export class AppService { - constructor(private configService: ConfigService) {} + constructor(@Inject(ConfigService) private configService: any) { } getHello(): { message: string; timestamp: string } { return { diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index 66bb27e..e6fc78f 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Post, HttpCode, HttpStatus, UseGuards, Get } from "@nestjs/common" +import { Controller, Post, HttpCode, HttpStatus, UseGuards, Get, Req } from "@nestjs/common" import type { AuthService } from "./auth.service" import { RegisterUserDto } from "./dto/register-user.dto" import { LoginUserDto } from "./dto/login-user.dto" @@ -17,7 +17,7 @@ import { ApiTags, ApiOperation, ApiResponse, ApiBearerAuth, ApiBody } from "@nes @ApiTags("Authentication") @Controller("auth") export class AuthController { - constructor(private authService: AuthService) {} + constructor(private authService: AuthService) { } @Post("register") @ApiOperation({ summary: "Register a new user" }) @@ -154,7 +154,7 @@ export class AuthController { @ApiOperation({ summary: "Initiate Google OAuth2 login" }) @ApiResponse({ status: 302, description: "Redirects to Google for authentication." }) @UseGuards(AuthGuard("google")) - async googleAuth(req) { + async googleAuth(@Req() req: any) { // Initiates the Google OAuth2 login flow } @@ -195,7 +195,7 @@ export class AuthController { // GitHub OAuth similarly @Get("github") @UseGuards(AuthGuard("github")) - async githubAuth(req) {} + async githubAuth(@Req() req: any) { } @Get("github/callback") @UseGuards(AuthGuard("github")) diff --git a/src/auth/auth.service.spec.ts b/src/auth/auth.service.spec.ts index d8e366b..f3ba0a8 100644 --- a/src/auth/auth.service.spec.ts +++ b/src/auth/auth.service.spec.ts @@ -85,7 +85,7 @@ describe("AuthService", () => { verificationToken: "mock-token", } - jest.spyOn(userRepository, "findOne").mockResolvedValue(null) + jest.spyOn(userRepository, "findOne").mockResolvedValue(undefined) jest.spyOn(roleRepository, "findOne").mockResolvedValue(mockRole) jest.spyOn(userRepository, "create").mockReturnValue(mockUser) jest.spyOn(userRepository, "save").mockResolvedValue(mockUser) @@ -131,7 +131,7 @@ describe("AuthService", () => { it("should throw UnauthorizedException for invalid credentials", async () => { const loginDto = { email: "test@example.com", password: "wrongpassword" } - jest.spyOn(userRepository, "findOne").mockResolvedValue(null) + jest.spyOn(userRepository, "findOne").mockResolvedValue(undefined) await expect(service.login(loginDto)).rejects.toThrow(UnauthorizedException) }) @@ -166,18 +166,18 @@ describe("AuthService", () => { } as User jest.spyOn(userRepository, "findOne").mockResolvedValue(mockUser) - jest.spyOn(userRepository, "save").mockResolvedValue({ ...mockUser, isVerified: true, verificationToken: null }) + jest.spyOn(userRepository, "save").mockResolvedValue({ ...mockUser, isVerified: true, verificationToken: undefined }) const result = await service.verifyEmail(verifyDto) expect(result).toEqual({ message: "Email verified successfully." }) expect(userRepository.save).toHaveBeenCalledWith( - expect.objectContaining({ isVerified: true, verificationToken: null }), + expect.objectContaining({ isVerified: true, verificationToken: undefined }), ) }) it("should throw BadRequestException for invalid token", async () => { const verifyDto = { token: "invalid-token" } - jest.spyOn(userRepository, "findOne").mockResolvedValue(null) + jest.spyOn(userRepository, "findOne").mockResolvedValue(undefined) await expect(service.verifyEmail(verifyDto)).rejects.toThrow(BadRequestException) }) @@ -200,7 +200,7 @@ describe("AuthService", () => { it("should return generic message if user does not exist", async () => { const forgotDto = { email: "nonexistent@example.com" } - jest.spyOn(userRepository, "findOne").mockResolvedValue(null) + jest.spyOn(userRepository, "findOne").mockResolvedValue(undefined) const result = await service.forgotPassword(forgotDto) expect(result).toEqual({ message: "If a user with that email exists, a password reset link has been sent." }) @@ -222,8 +222,8 @@ describe("AuthService", () => { jest.spyOn(userRepository, "save").mockResolvedValue({ ...mockUser, password: "hashed_newpassword123", - resetPasswordToken: null, - resetPasswordExpires: null, + resetPasswordToken: undefined, + resetPasswordExpires: undefined, }) const result = await service.resetPassword(resetDto) @@ -231,15 +231,15 @@ describe("AuthService", () => { expect(userRepository.save).toHaveBeenCalledWith( expect.objectContaining({ password: "hashed_newpassword123", - resetPasswordToken: null, - resetPasswordExpires: null, + resetPasswordToken: undefined, + resetPasswordExpires: undefined, }), ) }) it("should throw BadRequestException for invalid or expired token", async () => { const resetDto = { token: "invalid-token", newPassword: "newpassword123" } - jest.spyOn(userRepository, "findOne").mockResolvedValue(null) + jest.spyOn(userRepository, "findOne").mockResolvedValue(undefined) await expect(service.resetPassword(resetDto)).rejects.toThrow(BadRequestException) @@ -283,7 +283,7 @@ describe("AuthService", () => { const userId = "uuid-1" const oldRefreshToken = "invalid-refresh-token" - jest.spyOn(refreshTokenRepository, "findOne").mockResolvedValue(null) + jest.spyOn(refreshTokenRepository, "findOne").mockResolvedValue(undefined) await expect(service.refreshToken(userId, oldRefreshToken)).rejects.toThrow(UnauthorizedException) const expiredToken = { @@ -317,7 +317,7 @@ describe("AuthService", () => { const userId = "uuid-1" const refreshToken = "invalid-refresh-token" - jest.spyOn(refreshTokenRepository, "findOne").mockResolvedValue(null) + jest.spyOn(refreshTokenRepository, "findOne").mockResolvedValue(undefined) await expect(service.logout(userId, refreshToken)).rejects.toThrow(BadRequestException) }) }) @@ -337,8 +337,8 @@ describe("AuthService", () => { expect(result).toEqual(mockUser) }) - it("should return null if user not found or not verified", async () => { - jest.spyOn(userRepository, "findOne").mockResolvedValue(null) + it("should return undefined if user not found or not verified", async () => { + jest.spyOn(userRepository, "findOne").mockResolvedValue(undefined) expect(await service.validateUserById("non-existent")).toBeNull() const unverifiedUser = { id: "uuid-2", email: "unverified@example.com", isVerified: false } as User @@ -358,7 +358,7 @@ describe("AuthService", () => { }) it("should return false if refresh token is invalid, revoked, or expired", async () => { - jest.spyOn(refreshTokenRepository, "findOne").mockResolvedValue(null) + jest.spyOn(refreshTokenRepository, "findOne").mockResolvedValue(undefined) expect(await service.validateRefreshToken("uuid-1", "invalid-token")).toBe(false) const revokedToken = { @@ -387,7 +387,7 @@ describe("AuthService", () => { const mockUser = { id: "uuid-1", email: oauthUser.email, googleId: oauthUser.googleId, isVerified: true } as User jest.spyOn(userRepository, "findOne").mockResolvedValue(mockUser) - const result = await service.findOrCreateOAuthUser(oauthUser, "google") + const result = await service.findOrCreateOAuthUser("google", oauthUser) expect(result).toEqual(mockUser) expect(userRepository.findOne).toHaveBeenCalledWith({ where: { googleId: oauthUser.googleId } }) }) @@ -398,13 +398,13 @@ describe("AuthService", () => { jest .spyOn(userRepository, "findOne") - .mockResolvedValueOnce(null) // No user by googleId + .mockResolvedValueOnce(undefined) // No user by googleId .mockResolvedValueOnce(existingUserByEmail) // User found by email jest .spyOn(userRepository, "save") .mockResolvedValue({ ...existingUserByEmail, googleId: oauthUser.googleId, isVerified: true }) - const result = await service.findOrCreateOAuthUser(oauthUser, "google") + const result = await service.findOrCreateOAuthUser("google", oauthUser) expect(result.googleId).toBe(oauthUser.googleId) expect(result.isVerified).toBe(true) expect(userRepository.save).toHaveBeenCalledWith( @@ -425,13 +425,13 @@ describe("AuthService", () => { jest .spyOn(userRepository, "findOne") - .mockResolvedValueOnce(null) // No user by githubId - .mockResolvedValueOnce(null) // No user by email + .mockResolvedValueOnce(undefined) // No user by githubId + .mockResolvedValueOnce(undefined) // No user by email jest.spyOn(roleRepository, "findOne").mockResolvedValue(mockRole) jest.spyOn(userRepository, "create").mockReturnValue(newOAuthUser) jest.spyOn(userRepository, "save").mockResolvedValue(newOAuthUser) - const result = await service.findOrCreateOAuthUser(oauthUser, "github") + const result = await service.findOrCreateOAuthUser("github", oauthUser) expect(result).toEqual(newOAuthUser) expect(userRepository.save).toHaveBeenCalledWith( expect.objectContaining({ email: oauthUser.email, githubId: oauthUser.githubId, isVerified: true }), @@ -443,11 +443,11 @@ describe("AuthService", () => { jest .spyOn(userRepository, "findOne") - .mockResolvedValueOnce(null) // No user by githubId - .mockResolvedValueOnce(null) // No user by email - jest.spyOn(roleRepository, "findOne").mockResolvedValue(null) // No default role + .mockResolvedValueOnce(undefined as any) // No user by githubId + .mockResolvedValueOnce(undefined as any) // No user by email + jest.spyOn(roleRepository, "findOne").mockResolvedValue(undefined as any) // No default role - await expect(service.findOrCreateOAuthUser(oauthUser, "github")).rejects.toThrow( + await expect(service.findOrCreateOAuthUser("github", oauthUser)).rejects.toThrow( "Default user role not found. Please seed roles.", ) }) diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 05e7d97..bc35508 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -21,7 +21,7 @@ export class AuthService { private rolesRepository: Repository, private refreshTokensRepository: Repository, private jwtService: JwtService, - ) {} + ) { } async hashPassword(password: string): Promise { return bcrypt.hash(password, BCRYPT_SALT_ROUNDS) @@ -219,8 +219,8 @@ export class AuthService { } async findOrCreateOAuthUser( - provider: string, oauthUser: any, + provider: string, ): Promise { // TODO: Implement OAuth user creation/linking throw new Error("OAuth functionality not yet implemented") diff --git a/src/auth/constants.ts b/src/auth/constants.ts index 7c15285..6f2a40f 100644 --- a/src/auth/constants.ts +++ b/src/auth/constants.ts @@ -14,4 +14,5 @@ export enum UserRole { ADMIN = "admin", USER = "user", MODERATOR = "moderator", + ANALYST = "analyst", } diff --git a/src/auth/strategies/refresh-jwt.strategy.ts b/src/auth/strategies/refresh-jwt.strategy.ts index b0707e9..0ea7692 100644 --- a/src/auth/strategies/refresh-jwt.strategy.ts +++ b/src/auth/strategies/refresh-jwt.strategy.ts @@ -17,7 +17,7 @@ export class RefreshJwtStrategy extends PassportStrategy(Strategy, "refresh-jwt" } async validate(req: Request, payload: any) { - const refreshToken = req.body.refreshToken + const refreshToken = (req.body as any)?.refreshToken if (!refreshToken) { throw new UnauthorizedException("Refresh token not provided.") } diff --git a/src/cache/decorators/cacheable.decorator.ts b/src/cache/decorators/cacheable.decorator.ts index 7ad5aaf..7c94560 100644 --- a/src/cache/decorators/cacheable.decorator.ts +++ b/src/cache/decorators/cacheable.decorator.ts @@ -12,7 +12,7 @@ export function Cacheable(options: CacheableOptions = {}) { return applyDecorators(SetMetadata(CACHEABLE_KEY, options)) } -export function CacheEvict(options: { key?: string | ((args: any[]) => string); tags?: string[] } = {}) { +export function CacheEvict(options: { key?: string | ((args: any[]) => string); tags?: string[] | ((args: any[]) => string[]) } = {}) { return SetMetadata("cache_evict", options) } diff --git a/src/cache/examples/user.service.ts b/src/cache/examples/user.service.ts index 6d486d8..a9e1218 100644 --- a/src/cache/examples/user.service.ts +++ b/src/cache/examples/user.service.ts @@ -15,12 +15,12 @@ export class UserService { constructor( private readonly cacheService: CacheService, private readonly invalidationService: InvalidationService, - ) {} + ) { } @Cacheable({ key: (args) => `user:${args[0]}:profile`, ttl: 3600, - tags: (args) => [`user:${args[0]}`, "user-profiles"], + tags: (args: any) => [`user:${args[0]}`, "user-profiles"] as any, }) async getUserProfile(userId: string): Promise { // Simulate database query @@ -38,7 +38,7 @@ export class UserService { @Cacheable({ key: (args) => `user:${args[0]}:settings`, ttl: 1800, - tags: (args) => [`user:${args[0]}`, "user-settings"], + tags: (args: any) => [`user:${args[0]}`, "user-settings"] as any, }) async getUserSettings(userId: string): Promise> { console.log(`Fetching user settings from database: ${userId}`) @@ -52,7 +52,7 @@ export class UserService { @CacheEvict({ key: (args) => `user:${args[0].id}:profile`, - tags: (args) => [`user:${args[0].id}`, "user-profiles"], + tags: (args: any) => [`user:${args[0].id}`, "user-profiles"] as any, }) async updateUserProfile(user: User): Promise { console.log(`Updating user profile in database: ${user.id}`) diff --git a/src/cache/services/cache.service.ts b/src/cache/services/cache.service.ts index d563fc7..16f9ab9 100644 --- a/src/cache/services/cache.service.ts +++ b/src/cache/services/cache.service.ts @@ -7,7 +7,7 @@ import type { CacheMonitoringService } from "./cache-monitoring.service" export interface CacheOptions { ttl?: number - tags?: string[] + tags?: string[] | ((args: any[]) => string[]) compress?: boolean layer?: "l1" | "l2" | "both" } @@ -31,12 +31,12 @@ export class CacheService { constructor( private readonly redisClient: Redis, @Inject(cacheConfig.KEY) - private readonly config: ConfigType, + private readonly config: typeof cacheConfig.KEY extends string ? any : any, private readonly monitoring: CacheMonitoringService, ) { this.keyPrefix = this.config.redis.keyPrefix; this.redis = this.redisClient; - + // Initialize L1 cache (in-memory) this.l1Cache = new LRUCache({ max: this.config.layers.l1.maxSize, @@ -148,7 +148,7 @@ export class CacheService { if (keys.length > 0) { // Delete from L1 cache if (this.config.layers.l1.enabled) { - keys.forEach((key) => this.l1Cache.delete(key)) + keys.forEach((key: string) => this.l1Cache.delete(key)) } // Delete from L2 cache @@ -253,7 +253,7 @@ export class CacheService { if (tagKeys.length > 0) { const pipeline = this.redis.pipeline() - tagKeys.forEach((tagKey) => pipeline.srem(tagKey, key)) + tagKeys.forEach((tagKey: string) => pipeline.srem(tagKey, key)) await pipeline.exec() } } @@ -263,7 +263,7 @@ export class CacheService { this.logger.log("Redis connected") }) - this.redis.on("error", (error) => { + this.redis.on("error", (error: Error) => { this.logger.error("Redis error:", error) this.monitoring.recordError() }) diff --git a/src/common/exceptions/http-exception.filter.ts b/src/common/exceptions/http-exception.filter.ts index 11fd2e6..f8c276a 100644 --- a/src/common/exceptions/http-exception.filter.ts +++ b/src/common/exceptions/http-exception.filter.ts @@ -57,7 +57,7 @@ export class AllExceptionsFilter implements ExceptionFilter { errorCode = 'BAD_REQUEST'; } - response.status(status).json({ + response.status(status as number).json({ statusCode: status, timestamp: new Date().toISOString(), path: request.url, diff --git a/src/config/env.validation.ts b/src/config/env.validation.ts index 7ced358..c5db364 100644 --- a/src/config/env.validation.ts +++ b/src/config/env.validation.ts @@ -20,7 +20,7 @@ export class EnvironmentVariables { @IsNumber() @IsOptional() - @Transform(({ value }) => parseInt(value, 10)) + @Transform(({ value }: { value: any }) => parseInt(value, 10)) PORT: number = 3000; @IsString() @@ -33,12 +33,12 @@ export class EnvironmentVariables { @IsNumber() @IsOptional() - @Transform(({ value }) => parseInt(value, 10)) + @Transform(({ value }: { value: any }) => parseInt(value, 10)) THROTTLE_TTL: number = 60000; // 1 minute @IsNumber() @IsOptional() - @Transform(({ value }) => parseInt(value, 10)) + @Transform(({ value }: { value: any }) => parseInt(value, 10)) THROTTLE_LIMIT: number = 100; // 100 requests per minute @IsString() diff --git a/src/config/logger.config.ts b/src/config/logger.config.ts index d07119d..dec743a 100644 --- a/src/config/logger.config.ts +++ b/src/config/logger.config.ts @@ -1,11 +1,11 @@ -import { WinstonModuleOptions } from 'nest-winston'; +import type { WinstonModuleOptions } from 'nest-winston'; import * as winston from 'winston'; -import { ConfigService } from '@nestjs/config'; +import type { ConfigService } from '@nestjs/config'; import { Environment, EnvironmentVariables } from './env.validation'; export const createLoggerConfig = ( - configService: ConfigService, -): WinstonModuleOptions => { + configService: any, +): any => { const env = configService.get('NODE_ENV', { infer: true }); const logLevel = configService.get('LOG_LEVEL', { infer: true }); @@ -20,16 +20,16 @@ export const createLoggerConfig = ( winston.format.json(), ...(isDevelopment ? [ - winston.format.colorize(), - winston.format.simple(), - winston.format.printf( - ({ timestamp, level, message, context, stack }) => { - const contextStr = context ? `[${context}]` : ''; - const stackStr = stack ? `\n${stack}` : ''; - return `${timestamp} [${level}] ${contextStr} ${message}${stackStr}`; - }, - ), - ] + winston.format.colorize(), + winston.format.simple(), + winston.format.printf( + ({ timestamp, level, message, context, stack }) => { + const contextStr = context ? `[${context}]` : ''; + const stackStr = stack ? `\n${stack}` : ''; + return `${timestamp} [${level}] ${contextStr} ${message}${stackStr}`; + }, + ), + ] : []), ), transports: [ @@ -38,14 +38,14 @@ export const createLoggerConfig = ( }), ...(env === Environment.Production ? [ - new winston.transports.File({ - filename: 'logs/error.log', - level: 'error', - }), - new winston.transports.File({ - filename: 'logs/combined.log', - }), - ] + new winston.transports.File({ + filename: 'logs/error.log', + level: 'error', + }), + new winston.transports.File({ + filename: 'logs/combined.log', + }), + ] : []), ], }; diff --git a/src/content/category.entity.ts b/src/content/category.entity.ts new file mode 100644 index 0000000..f4983fe --- /dev/null +++ b/src/content/category.entity.ts @@ -0,0 +1,14 @@ +import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm'; +import { Content } from './contents.entity'; + +@Entity('categories') +export class Category { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column({ unique: true }) + name: string; + + @OneToMany(() => Content, (content) => content.category) + contents: Content[]; +} diff --git a/src/content/comment.entity.ts b/src/content/comment.entity.ts index 482d94e..e798378 100644 --- a/src/content/comment.entity.ts +++ b/src/content/comment.entity.ts @@ -1,6 +1,6 @@ import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, CreateDateColumn } from 'typeorm'; import { Content } from './content.entity'; -import { User } from './user.entity'; +import { User } from '../users/entities/user.entity'; @Entity('comments') export class Comment { diff --git a/src/content/content.entity.ts b/src/content/content.entity.ts index 21a089e..a44a893 100644 --- a/src/content/content.entity.ts +++ b/src/content/content.entity.ts @@ -1,13 +1,17 @@ -import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm'; +import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm'; +import { Comment } from './comment.entity'; -@Entity('users') -export class User { +@Entity('content') +export class Content { @PrimaryGeneratedColumn('uuid') id: string; - @Column({ unique: true }) - email: string; - @Column() - displayName: string; + title: string; + + @Column('text') + body: string; + + @OneToMany(() => Comment, (comment) => comment.content) + comments: Comment[]; } diff --git a/src/content/content_version.entity.ts b/src/content/content_version.entity.ts new file mode 100644 index 0000000..206e346 --- /dev/null +++ b/src/content/content_version.entity.ts @@ -0,0 +1,17 @@ +import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from 'typeorm'; +import { Content } from './contents.entity'; + +@Entity('content_versions') +export class ContentVersion { + @PrimaryGeneratedColumn('uuid') + id: string; + + @Column('text') + body: string; + + @Column() + version: number; + + @ManyToOne(() => Content, (content) => content.versions) + content: Content; +} diff --git a/src/content/contents.entity.ts b/src/content/contents.entity.ts index 6269ce3..7acb773 100644 --- a/src/content/contents.entity.ts +++ b/src/content/contents.entity.ts @@ -10,7 +10,7 @@ import { UpdateDateColumn, Index, } from 'typeorm'; -import { User } from './user.entity'; +import { User } from '../users/entities/user.entity'; import { Tag } from './tag.entity'; import { Category } from './category.entity'; import { ContentVersion } from './content_version.entity'; @@ -35,7 +35,7 @@ export class Content { @ManyToOne(() => User, { eager: true }) author: User; - @Column({ type: 'enum', enum: ['draft','pending','published','rejected','archived'], default: 'draft' }) + @Column({ type: 'enum', enum: ['draft', 'pending', 'published', 'rejected', 'archived'], default: 'draft' }) status: ContentStatus; @ManyToOne(() => Category, (c) => c.contents, { nullable: true, eager: true }) diff --git a/src/content/like.entity.ts b/src/content/like.entity.ts new file mode 100644 index 0000000..a6fa147 --- /dev/null +++ b/src/content/like.entity.ts @@ -0,0 +1,15 @@ +import { Entity, PrimaryGeneratedColumn, ManyToOne } from 'typeorm'; +import { Content } from './contents.entity'; +import { User } from '../users/entities/user.entity'; + +@Entity('likes') +export class Like { + @PrimaryGeneratedColumn('uuid') + id: string; + + @ManyToOne(() => Content, (content) => content.likes) + content: Content; + + @ManyToOne(() => User) + user: User; +} diff --git a/src/content/report.entity.ts b/src/content/report.entity.ts index 89b8fb9..c5c54fc 100644 --- a/src/content/report.entity.ts +++ b/src/content/report.entity.ts @@ -1,6 +1,6 @@ import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, CreateDateColumn } from 'typeorm'; import { Content } from './content.entity'; -import { User } from './user.entity'; +import { User } from '../users/entities/user.entity'; @Entity('reports') export class Report { @@ -16,7 +16,7 @@ export class Report { @Column({ type: 'text' }) reason: string; - @Column({ type: 'enum', enum: ['open','reviewing','resolved','dismissed'], default: 'open' }) + @Column({ type: 'enum', enum: ['open', 'reviewing', 'resolved', 'dismissed'], default: 'open' }) status: 'open' | 'reviewing' | 'resolved' | 'dismissed'; @CreateDateColumn() diff --git a/src/content/tag.entity.ts b/src/content/tag.entity.ts index 984cb73..52052db 100644 --- a/src/content/tag.entity.ts +++ b/src/content/tag.entity.ts @@ -1,5 +1,5 @@ import { Entity, PrimaryGeneratedColumn, Column, ManyToMany } from 'typeorm'; -import { Content } from './content.entity'; +import { Content } from './contents.entity'; @Entity('tags') export class Tag { diff --git a/src/content/tag.service.ts b/src/content/tag.service.ts index 222a795..0618fe2 100644 --- a/src/content/tag.service.ts +++ b/src/content/tag.service.ts @@ -1,11 +1,11 @@ import { Injectable } from '@nestjs/common'; import { Repository } from 'typeorm'; -import { Tag } from '../entities/tag.entity'; +import { Tag } from './tag.entity'; import { InjectRepository } from '@nestjs/typeorm'; @Injectable() export class TagService { - constructor(@InjectRepository(Tag) private tagRepo: Repository) {} + constructor(@InjectRepository(Tag) private tagRepo: Repository) { } async findOrCreateByNames(names: string[]) { if (!names || names.length === 0) return []; diff --git a/src/content/view.entity.ts b/src/content/view.entity.ts new file mode 100644 index 0000000..a6b4c2d --- /dev/null +++ b/src/content/view.entity.ts @@ -0,0 +1,18 @@ +import { Entity, PrimaryGeneratedColumn, ManyToOne, CreateDateColumn } from 'typeorm'; +import { Content } from './contents.entity'; +import { User } from '../users/entities/user.entity'; + +@Entity('views') +export class View { + @PrimaryGeneratedColumn('uuid') + id: string; + + @ManyToOne(() => Content, (content) => content.views) + content: Content; + + @ManyToOne(() => User, { nullable: true }) + user: User | null; + + @CreateDateColumn() + createdAt: Date; +} diff --git a/src/game-engine/controllers/puzzle.controller.ts b/src/game-engine/controllers/puzzle.controller.ts index eaa74f6..e6f9c45 100644 --- a/src/game-engine/controllers/puzzle.controller.ts +++ b/src/game-engine/controllers/puzzle.controller.ts @@ -2,7 +2,7 @@ import { Controller, Get, Post, Param, Body } from "@nestjs/common" import type { PuzzleEngineService } from "../services/puzzle-engine.service" import type { HintSystemService } from "../services/hint-system.service" import type { DifficultyScalingService } from "../services/difficulty-scaling.service" -import type { PuzzleType, PuzzleMove } from "../types/puzzle.types" +import { PuzzleType, PuzzleMove, DifficultyLevel } from "../types/puzzle.types" @Controller("puzzles") export class PuzzleController { @@ -10,7 +10,7 @@ export class PuzzleController { private readonly puzzleEngine: PuzzleEngineService, private readonly hintSystem: HintSystemService, private readonly difficultyScaling: DifficultyScalingService, - ) {} + ) { } @Post() async createPuzzle( @@ -21,7 +21,7 @@ export class PuzzleController { config?: any }, ) { - const difficulty = createPuzzleDto.difficulty || "MEDIUM" + const difficulty = DifficultyLevel[createPuzzleDto.difficulty?.toUpperCase() as keyof typeof DifficultyLevel] || DifficultyLevel.MEDIUM return this.puzzleEngine.createPuzzle( createPuzzleDto.type, createPuzzleDto.playerId, diff --git a/src/game-engine/services/analytics.service.ts b/src/game-engine/services/analytics.service.ts index 1488e84..7c0b593 100644 --- a/src/game-engine/services/analytics.service.ts +++ b/src/game-engine/services/analytics.service.ts @@ -36,7 +36,7 @@ export class AnalyticsService { constructor( private readonly analyticsRepository: Repository, private readonly sessionRepository: Repository, - private readonly config: ConfigType, + private readonly config: any, ) { // Process queued events periodically setInterval(() => this.processEventQueue(), 5000) @@ -302,10 +302,10 @@ export class AnalyticsService { where: { userId: playerId, isActive: true }, order: { startTime: "DESC" }, }) - + if (foundSession) { session = foundSession - + // Check if session is still valid const sessionAge = Date.now() - session.startTime.getTime() if (sessionAge < this.config.analytics.sessionTimeout) { diff --git a/src/game-engine/services/difficulty-scaling.service.ts b/src/game-engine/services/difficulty-scaling.service.ts index c41aef0..6db9773 100644 --- a/src/game-engine/services/difficulty-scaling.service.ts +++ b/src/game-engine/services/difficulty-scaling.service.ts @@ -9,7 +9,7 @@ import type { gameEngineConfig } from "../config/game-engine.config" export class DifficultyScalingService implements IDifficultyScaler { private readonly logger = new Logger(DifficultyScalingService.name) - constructor(private readonly config: ConfigType) {} + constructor(private readonly config: any) { } calculateDifficulty(playerMetrics: PlayerMetrics, puzzleType: PuzzleType): DifficultyLevel { try { diff --git a/src/game-engine/services/hint-system.service.ts b/src/game-engine/services/hint-system.service.ts index 732c8ff..8967b0f 100644 --- a/src/game-engine/services/hint-system.service.ts +++ b/src/game-engine/services/hint-system.service.ts @@ -17,7 +17,7 @@ export class HintSystemService implements IHintSystem { private readonly hintGenerators = new Map() private readonly playerHintUsage = new Map() - constructor(private readonly config: ConfigType) { + constructor(private readonly config: any) { this.initializeDefaultHintGenerators() } diff --git a/src/game-engine/services/progression.service.ts b/src/game-engine/services/progression.service.ts index e5feb6a..f06ff6d 100644 --- a/src/game-engine/services/progression.service.ts +++ b/src/game-engine/services/progression.service.ts @@ -37,7 +37,7 @@ export class ProgressionService { constructor( @InjectRepository(PlayerProgress) private readonly playerProgressRepository: Repository, - private readonly config: ConfigType, + private readonly config: any, ) { this.initializeDefaultAchievements() } diff --git a/src/game-engine/services/puzzle-engine.service.ts b/src/game-engine/services/puzzle-engine.service.ts index 81c9702..0af2b75 100644 --- a/src/game-engine/services/puzzle-engine.service.ts +++ b/src/game-engine/services/puzzle-engine.service.ts @@ -1,373 +1,4 @@ -import { Injectable, Logger, NotFoundException } from "@nestjs/common" -import type { Repository } from "typeorm" -import type { ConfigType } from "@nestjs/config" -import type { IPuzzle, PuzzleGameState } from "../interfaces/puzzle.interfaces" -import type { PuzzleMove, ValidationResult, PuzzleType, DifficultyLevel } from "../types/puzzle.types" -import { PuzzleStatus } from "../types/puzzle.types" -import type { PuzzleState } from "../entities/puzzle-state.entity" -import type { StateManagementService } from "./state-management.service" -import type { ValidationService } from "./validation.service" -import type { CauseEffectEngineService } from "./cause-effect-engine.service" -import type { AnalyticsService } from "./analytics.service" -import type { gameEngineConfig } from "../config/game-engine.config" -import { Inject } from "@nestjs/common" -import { ClientProxy } from "@nestjs/microservices" - -@Injectable() -export class PuzzleEngineService { - private readonly logger = new Logger(PuzzleEngineService.name); - private readonly puzzleRegistry = new Map IPuzzle>(); - private readonly activePuzzles = new Map(); - - constructor( - private readonly puzzleStateRepository: Repository, - // Inject repositories for UserPuzzleCompletion, UserStats, User, and Puzzle - private readonly userPuzzleCompletionRepository: Repository, - private readonly userStatsRepository: Repository, - private readonly userRepository: Repository, // Needed for creating UserPuzzleCompletion - private readonly puzzleRepository: Repository, // Needed for creating UserPuzzleCompletion - private readonly stateManagement: StateManagementService, - private readonly validation: ValidationService, - private readonly causeEffectEngine: CauseEffectEngineService, - private readonly analytics: AnalyticsService, - private readonly config: ConfigType, - @Inject('REPLAY_SERVICE') private readonly replayClient: ClientProxy, - ) {} - - registerPuzzleType(type: PuzzleType, factory: () => IPuzzle): void { - this.puzzleRegistry.set(type, factory); - this.logger.log(`Registered puzzle type: ${type}`); - } - - async createPuzzle(type: PuzzleType, playerId: string, difficulty: DifficultyLevel, config?: any): Promise { - const factory = this.puzzleRegistry.get(type); - if (!factory) { - throw new NotFoundException(`Puzzle type ${type} not registered`); - } - - const puzzle = factory(); - puzzle.difficulty = difficulty; - await puzzle.initialize(config); - - // Create initial state with initialized session metadata - const gameState: PuzzleGameState = { - puzzleId: puzzle.id, - playerId, - status: PuzzleStatus.NOT_STARTED, - currentState: puzzle.getState(), - moves: [], - startTime: new Date(), - score: 0, - hintsUsed: 0, - metadata: {}, - } - - await this.stateManagement.saveState(gameState) - this.activePuzzles.set(puzzle.id, puzzle) - - // Emit event for replay-service - this.replayClient.emit('PUZZLE_STARTED', { - puzzleId: puzzle.id, - playerId, - initialState: gameState.currentState, - }); - - this.logger.log(`Created puzzle ${puzzle.id} for player ${playerId}`) - return puzzle - } - - async loadPuzzle(puzzleId: string, playerId: string): Promise { - // Check if puzzle is already active - let puzzle = this.activePuzzles.get(puzzleId); - if (puzzle) { - return puzzle; - } - - // Load from database - const gameState = await this.stateManagement.loadState(puzzleId, playerId); - if (!gameState) { - throw new NotFoundException(`Puzzle ${puzzleId} not found for player ${playerId}`); - } - - // Ensure session metadata is initialized if it's missing (e.g., from older game states) - gameState.metadata.session = gameState.metadata.session || { puzzleCount: 0, lastCompletionTime: undefined }; - - // Recreate puzzle instance - const factory = this.puzzleRegistry.get(gameState.currentState.type); - if (!factory) { - throw new NotFoundException(`Puzzle type ${gameState.currentState.type} not registered`); - } - - puzzle = factory(); - await puzzle.setState(gameState); - this.activePuzzles.set(puzzleId, puzzle); - - return puzzle; - } - - async makeMove(puzzleId: string, playerId: string, move: PuzzleMove): Promise { - const puzzle = await this.loadPuzzle(puzzleId, playerId); - const gameState = await this.stateManagement.loadState(puzzleId, playerId); - - if (!gameState || gameState.status === "completed" || gameState.status === "failed") { - throw new Error("Cannot make move on completed or failed puzzle"); - } - - // Validate move - const validationResult = await this.validation.validateMove(puzzle, move); - - // Process cause-effect relationships - if (validationResult.isValid) { - const effects = await this.causeEffectEngine.processMove(puzzle, move); - move.causedEffects = effects; - } - - // Apply move to puzzle - const moveResult = await puzzle.makeMove(move); - - // Update game state - gameState.moves.push(move); - gameState.currentState = puzzle.getState(); - gameState.score = moveResult.score; - gameState.metadata.lastMove = new Date(); // Track last general activity - - // Check if puzzle is complete - if (puzzle.isComplete()) { - gameState.status = PuzzleStatus.COMPLETED; - // handlePuzzleCompletion will set gameState.endTime and handle combo logic - await this.handlePuzzleCompletion(puzzle, gameState); - } - - await this.stateManagement.saveState(gameState); // Save state after moves/completion - - // Track analytics - await this.analytics.trackMove(puzzleId, playerId, move, moveResult); - - // Emit event for replay-service - this.replayClient.emit('PUZZLE_MOVE', { - puzzleId, - playerId, - move, - currentState: puzzle.getState(), - }); - - this.logger.debug(`Move processed for puzzle ${puzzleId}`, { - playerId, - moveType: move.moveType, - isValid: validationResult.isValid, - isComplete: puzzle.isComplete(), - }); - - return moveResult; - } - - async getPuzzleState(puzzleId: string, playerId: string): Promise { - const gameState = await this.stateManagement.loadState(puzzleId, playerId); - if (!gameState) { - throw new NotFoundException(`Puzzle ${puzzleId} not found for player ${playerId}`); - } - return gameState; - } - - async resetPuzzle(puzzleId: string, playerId: string): Promise { - const puzzle = await this.loadPuzzle(puzzleId, playerId); - await puzzle.reset(); - - const gameState = await this.stateManagement.loadState(puzzleId, playerId); - if (gameState) { - gameState.status = PuzzleStatus.NOT_STARTED; - gameState.currentState = puzzle.getState(); - gameState.moves = []; - gameState.score = 0; - gameState.hintsUsed = 0; - gameState.startTime = new Date(); - gameState.endTime = undefined; - // Reset session data upon reset - gameState.metadata.session = { puzzleCount: 0, lastCompletionTime: undefined }; - - await this.stateManagement.saveState(gameState); - } - - this.logger.log(`Reset puzzle ${puzzleId} for player ${playerId}`); - } - - async abandonPuzzle(puzzleId: string, playerId: string): Promise { - const gameState = await this.stateManagement.loadState(puzzleId, playerId); - if (gameState) { - gameState.status = PuzzleStatus.ABANDONED; - gameState.endTime = new Date(); - // Reset session data upon abandonment as the session is broken - gameState.metadata.session = { puzzleCount: 0, lastCompletionTime: undefined }; - await this.stateManagement.saveState(gameState); - } - - // Remove from active puzzles - this.activePuzzles.delete(puzzleId); - - // Track analytics - await this.analytics.trackPuzzleAbandoned(puzzleId, playerId); - - this.logger.log(`Abandoned puzzle ${puzzleId} for player ${playerId}`); - } - - async getActivePuzzles(playerId: string): Promise { - return this.stateManagement.getActivePuzzles(playerId); - } - - async clonePuzzle(puzzleId: string, playerId: string, newPlayerId: string): Promise { - const originalPuzzle = await this.loadPuzzle(puzzleId, playerId); - const clonedPuzzle = originalPuzzle.clone(); - - const gameState: PuzzleGameState = { - puzzleId: clonedPuzzle.id, - playerId: newPlayerId, - status: PuzzleStatus.NOT_STARTED, - currentState: clonedPuzzle.getState(), - moves: [], - startTime: new Date(), - score: 0, - hintsUsed: 0, - metadata: { // Initialize session here for the cloned puzzle - session: { - puzzleCount: 0, - lastCompletionTime: undefined, - } - }, - }; - - await this.stateManagement.saveState(gameState); - this.activePuzzles.set(clonedPuzzle.id, clonedPuzzle); - - return clonedPuzzle; - } - - /** - * Calculates a combo multiplier based on consecutive puzzle completions within a session window. - * @returns The calculated multiplier and the updated session state. - */ - private calculateComboMultiplier(gameState: PuzzleGameState, completionTime: Date): { multiplier: number; updatedSession: any } { - // Ensure session metadata is initialized - const session = gameState.metadata.session = gameState.metadata.session || { puzzleCount: 0, lastCompletionTime: undefined }; - - let comboMultiplier = 1.0; - - if (session.lastCompletionTime) { - const timeDiff = completionTime.getTime() - session.lastCompletionTime.getTime(); - if (timeDiff < SESSION_COMBO_WINDOW_MILLIS) { - // Consecutive puzzle completion within the window - session.puzzleCount++; - // Simple multiplier: increase by 0.1 for each consecutive puzzle, capped at e.g., 2.0 - comboMultiplier = Math.min(2.0, 1.0 + session.puzzleCount * 0.1); - } else { - // Combo broken, reset count - session.puzzleCount = 1; - } - } else { - // First puzzle in the session - session.puzzleCount = 1; - } - session.lastCompletionTime = completionTime; // Update last completion time - - return { multiplier: comboMultiplier, updatedSession: session }; - } - - private async handlePuzzleCompletion(puzzle: IPuzzle, gameState: PuzzleGameState): Promise { - const completionTime = new Date(); // Use current time for completion - gameState.endTime = completionTime; - - // Calculate combo multiplier and update session state - const { multiplier: comboMultiplier, updatedSession } = this.calculateComboMultiplier(gameState, completionTime); - gameState.metadata.session = updatedSession; // Update gameState with the new session state - - // Store the calculated multiplier in UserPuzzleCompletion - try { - // Fetch User and Puzzle entities needed for UserPuzzleCompletion.create - const user = await this.userRepository.findOneByOrFail({ id: gameState.playerId }); - const puzzleEntity = await this.puzzleRepository.findOneByOrFail({ id: puzzle.id }); - - const newCompletion = this.userPuzzleCompletionRepository.create({ - user: user, - puzzle: puzzleEntity, - completedAt: completionTime, - comboMultiplier: comboMultiplier, // Store the calculated multiplier - }); - await this.userPuzzleCompletionRepository.save(newCompletion); - } catch (error) { - this.logError('Failed to record user puzzle completion with combo multiplier', error); - // Continue even if recording fails - } - - // Update UserStats (e.g., last activity time) - try { - let userStats = await this.userStatsRepository.findOne({ where: { userId: gameState.playerId } }); - if (!userStats) { - // Create UserStats if it doesn't exist - userStats = this.userStatsRepository.create({ userId: gameState.playerId }); - userStats = await this.userStatsRepository.save(userStats); - } - userStats.lastActivityAt = completionTime; - userStats.lastCalculatedAt = new Date(); - await this.userStatsRepository.save(userStats); - } catch (error) { - this.logError('Failed to update user stats after completion', error); - } - - // --- Existing Score Calculation and Analytics --- - const completionTimeMillis = completionTime.getTime() - gameState.startTime.getTime(); - let finalScore = gameState.score; - - // Apply combo multiplier to the score BEFORE other bonuses - if (comboMultiplier > 1.0) { - finalScore *= comboMultiplier; - this.logger.log(`Combo multiplier applied: ${comboMultiplier.toFixed(1)}x for player ${gameState.playerId}`); - } - - // Time bonus - if (puzzle.timeLimit && completionTimeMillis < puzzle.timeLimit * 0.5) { - finalScore *= 1.2 // 20% bonus for fast completion - } - - // Perfect solution bonus - if (gameState.hintsUsed === 0 && gameState.moves.length <= (puzzle.maxMoves || Number.POSITIVE_INFINITY)) { - finalScore *= this.config.progression.perfectSolutionBonus - } - - gameState.score = Math.round(finalScore) - - // Track completion analytics - await this.analytics.trackPuzzleCompleted(puzzle.id, gameState.playerId, { - completionTime: completionTimeMillis, - finalScore, - movesUsed: gameState.moves.length, - hintsUsed: gameState.hintsUsed, - difficulty: puzzle.difficulty, - comboMultiplier: comboMultiplier, // Pass multiplier to analytics - }) - - this.logger.log(`Puzzle ${puzzle.id} completed by player ${gameState.playerId}`, { - score: finalScore, - time: completionTimeMillis, - moves: gameState.moves.length, - hints: gameState.hintsUsed, - combo: comboMultiplier.toFixed(1), - }) - } - - async cleanupInactivePuzzles(): Promise { - const cutoffTime = new Date(Date.now() - this.config.analytics.sessionTimeout) - - for (const [puzzleId, puzzle] of this.activePuzzles) { - const gameState = puzzle.getState() - // Check if session is also inactive or too old - if (gameState.metadata?.lastActivity && new Date(gameState.metadata.lastActivity) < cutoffTime) { - this.activePuzzles.delete(puzzleId) - this.logger.debug(`Cleaned up inactive puzzle: ${puzzleId}`) - } - } - } - - // Helper method to log errors - private logError(message: string, error: any): void { - this.logger.error(message, error.stack, error.constructor.name); - } -} +import { Inject } from "@nestjs/common"; +import { ClientProxy } from "@nestjs/microservices"; +import { gameEngineConfig } from "../config/game-engine.config"; +import type { ConfigType } from "@nestjs/config"; diff --git a/src/game-engine/services/save-load.service.ts b/src/game-engine/services/save-load.service.ts index 6251e47..1a8fa5e 100644 --- a/src/game-engine/services/save-load.service.ts +++ b/src/game-engine/services/save-load.service.ts @@ -35,8 +35,8 @@ export class SaveLoadService { private readonly playerProgressRepository: Repository, private readonly sessionRepository: Repository, private readonly stateManagement: StateManagementService, - private readonly config: ConfigType, - ) {} + private readonly config: any, + ) { } async saveGame(playerId: string, includeHistory = false): Promise { try { @@ -178,7 +178,7 @@ export class SaveLoadService { saveData = JSON.parse(data as string) } else { // Binary format - const jsonString = (data as Buffer).toString("utf-8") + const jsonString = (data as any).toString("utf-8") saveData = JSON.parse(jsonString) } @@ -222,7 +222,7 @@ export class SaveLoadService { playerProgress.metadata.checkpoints[checkpointName] = { data: saveData, - createdAt: new Date(), + createdAt: new Date().toISOString(), } await this.playerProgressRepository.save(playerProgress) diff --git a/src/game-engine/services/scoring.service.ts b/src/game-engine/services/scoring.service.ts index 93955c0..3fdfba5 100644 --- a/src/game-engine/services/scoring.service.ts +++ b/src/game-engine/services/scoring.service.ts @@ -33,7 +33,7 @@ interface RewardCalculation { export class ScoringService { private readonly logger = new Logger(ScoringService.name); - constructor(private readonly config: ConfigType) {} + constructor(private readonly config: any) { } /** * Calculate comprehensive score for a completed puzzle @@ -48,14 +48,14 @@ export class ScoringService { const timeBonus = this.calculateTimeBonus( performance.timeSpent, puzzle.timeLimit || - this.getExpectedTimeLimit(puzzle.type, puzzle.difficulty), + this.getExpectedTimeLimit(puzzle.type, puzzle.difficulty), puzzle.difficulty, ); const efficiencyBonus = this.calculateEfficiencyBonus( performance.movesUsed, puzzle.maxMoves || - this.getExpectedMaxMoves(puzzle.type, puzzle.difficulty), + this.getExpectedMaxMoves(puzzle.type, puzzle.difficulty), puzzle.difficulty, ); diff --git a/src/game-engine/services/validation.service.ts b/src/game-engine/services/validation.service.ts index 04c866e..19eab37 100644 --- a/src/game-engine/services/validation.service.ts +++ b/src/game-engine/services/validation.service.ts @@ -1,15 +1,15 @@ -import { Injectable, Logger } from "@nestjs/common" -import type { ConfigType } from "@nestjs/config" +import { Injectable, Logger, Inject } from "@nestjs/common" +import { ConfigType } from "@nestjs/config" import type { IPuzzle, IPuzzleValidator } from "../interfaces/puzzle.interfaces" import type { PuzzleMove, ValidationResult, ValidationError, PuzzleType } from "../types/puzzle.types" -import type { gameEngineConfig } from "../config/game-engine.config" +import { gameEngineConfig } from "../config/game-engine.config" @Injectable() export class ValidationService implements IPuzzleValidator { private readonly logger = new Logger(ValidationService.name) private readonly validators = new Map() - constructor(private readonly config: ConfigType) {} + constructor(@Inject(gameEngineConfig.KEY) private readonly config: any) { } registerValidator(puzzleType: PuzzleType, validator: IPuzzleValidator): void { this.validators.set(puzzleType, validator) diff --git a/src/game-engine/tests/puzzle-engine.integration.spec.ts b/src/game-engine/tests/puzzle-engine.integration.spec.ts index 46d65e1..bee876f 100644 --- a/src/game-engine/tests/puzzle-engine.integration.spec.ts +++ b/src/game-engine/tests/puzzle-engine.integration.spec.ts @@ -1,6 +1,12 @@ import { Test, TestingModule } from '@nestjs/testing'; import { PuzzleEngineService } from '../services/puzzle-engine.service'; import { PuzzleType, DifficultyLevel, PuzzleMove } from '../types/puzzle.types'; +import { StateManagementService } from '../services/state-management.service'; +import { ValidationService } from '../services/validation.service'; +import { CauseEffectEngineService } from '../services/cause-effect-engine.service'; +import { AnalyticsService } from '../services/analytics.service'; +import { PuzzleState } from '../entities/puzzle-state.entity'; +import { getRepositoryToken } from '@nestjs/typeorm'; // Mock all the dependencies to avoid complex service compilation issues const mockRepository = { @@ -32,12 +38,12 @@ describe('Puzzle Engine Integration', () => { module = await Test.createTestingModule({ providers: [ PuzzleEngineService, - { provide: 'PuzzleStateRepository', useValue: mockRepository }, - { provide: 'StateManagementService', useValue: mockService }, - { provide: 'ValidationService', useValue: mockService }, - { provide: 'CauseEffectEngineService', useValue: mockService }, - { provide: 'AnalyticsService', useValue: mockService }, - { provide: 'GAME_ENGINE_CONFIG', useValue: { analytics: { sessionTimeout: 1000 } } }, + { provide: getRepositoryToken(PuzzleState), useValue: mockRepository }, + { provide: StateManagementService, useValue: mockService }, + { provide: ValidationService, useValue: mockService }, + { provide: CauseEffectEngineService, useValue: mockService }, + { provide: AnalyticsService, useValue: mockService }, + { provide: 'gameEngine', useValue: { analytics: { sessionTimeout: 1000 }, progression: { perfectSolutionBonus: 1.5 } } }, ], }).compile(); diff --git a/src/health/health.controller.spec.ts b/src/health/health.controller.spec.ts index 7bfe832..be7c6d6 100644 --- a/src/health/health.controller.spec.ts +++ b/src/health/health.controller.spec.ts @@ -8,7 +8,9 @@ describe('HealthController', () => { beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [HealthController], - providers: [HealthService], + providers: [ + { provide: HealthService, useValue: { check: jest.fn() } } + ], }).compile(); controller = module.get(HealthController); diff --git a/src/health/health.controller.ts b/src/health/health.controller.ts index 951f219..02c2d4e 100644 --- a/src/health/health.controller.ts +++ b/src/health/health.controller.ts @@ -1,6 +1,6 @@ -import { Request, Response } from 'express'; -import { DatabaseService } from 'src/config/database-service'; -import { PerformanceMonitoringService } from 'src/monitoring/performance.service'; +import { Request } from 'express'; +import { DatabaseService } from '../config/database-service'; +import { PerformanceMonitoringService } from '../monitoring/performance.service'; export class HealthController { private databaseService = DatabaseService.getInstance(); @@ -12,7 +12,7 @@ export class HealthController { ); } - public async checkHealth(req: Request, res: Response): Promise { + public async checkHealth(req: Request, res: any): Promise { try { const health = await this.databaseService.checkHealth(); const status = health.status === 'healthy' ? 200 : 503; @@ -36,7 +36,7 @@ export class HealthController { } } - public async getMetrics(req: Request, res: Response): Promise { + public async getMetrics(req: Request, res: any): Promise { try { const metrics = await this.performanceService.getMetrics(); res.json(metrics); @@ -48,7 +48,7 @@ export class HealthController { } } - public async getConnectionStats(req: Request, res: Response): Promise { + public async getConnectionStats(req: Request, res: any): Promise { try { const stats = await this.databaseService.getConnectionStats(); res.json(stats); diff --git a/src/hints/entities/hint-usage.entity.ts b/src/hints/entities/hint-usage.entity.ts index 0a8b360..ec24052 100644 --- a/src/hints/entities/hint-usage.entity.ts +++ b/src/hints/entities/hint-usage.entity.ts @@ -74,11 +74,11 @@ export class HintUsage { createdAt: Date; // Relationships - @ManyToOne(() => 'Hint', { onDelete: 'CASCADE' }) + @ManyToOne('Hint', { onDelete: 'CASCADE' }) @JoinColumn({ name: 'hintId' }) hint: any; - @ManyToOne(() => 'Puzzle', { onDelete: 'CASCADE' }) + @ManyToOne('Puzzle', { onDelete: 'CASCADE' }) @JoinColumn({ name: 'puzzleId' }) puzzle: any; } diff --git a/src/hints/entities/hint.entity.ts b/src/hints/entities/hint.entity.ts index 1ec5e4d..0b82f1f 100644 --- a/src/hints/entities/hint.entity.ts +++ b/src/hints/entities/hint.entity.ts @@ -9,6 +9,7 @@ import { OneToMany, Index, } from 'typeorm'; +import { HintUsage } from './hint-usage.entity'; @Entity('hints') @Index(['puzzleId', 'order']) @@ -83,7 +84,7 @@ export class Hint { updatedAt: Date; // Relationships - @ManyToOne(() => 'Puzzle', { onDelete: 'CASCADE' }) + @ManyToOne('Puzzle', { onDelete: 'CASCADE' }) @JoinColumn({ name: 'puzzleId' }) puzzle: any; diff --git a/src/leaderboard/leaderboard.module.ts b/src/leaderboard/leaderboard.module.ts index 85da8df..8a71555 100644 --- a/src/leaderboard/leaderboard.module.ts +++ b/src/leaderboard/leaderboard.module.ts @@ -1,19 +1,17 @@ import { Module } from '@nestjs/common'; -import { CacheModule } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; +import { LeaderboardEntry } from './entities/leaderboard-entry.entity'; +import { Leaderboard } from './entities/leaderboard.entity'; import { LeaderboardService } from './leaderboard.service'; import { LeaderboardController } from './leaderboard.controller'; -import { Leaderboard } from './entities/leaderboard.entity'; -import { LeaderboardEntry } from './entities/leaderboard-entry.entity'; import { AchievementsModule } from '../achievements/achievements.module'; @Module({ imports: [ - CacheModule.register(), TypeOrmModule.forFeature([Leaderboard, LeaderboardEntry]), AchievementsModule, ], controllers: [LeaderboardController], providers: [LeaderboardService], }) -export class LeaderboardModule {} \ No newline at end of file +export class LeaderboardModule { } \ No newline at end of file diff --git a/src/leaderboard/leaderboard.service.spec.ts b/src/leaderboard/leaderboard.service.spec.ts index aac5f22..fe1affc 100644 --- a/src/leaderboard/leaderboard.service.spec.ts +++ b/src/leaderboard/leaderboard.service.spec.ts @@ -3,7 +3,8 @@ import { LeaderboardService } from './leaderboard.service'; import { getRepositoryToken } from '@nestjs/typeorm'; import { Leaderboard } from './entities/leaderboard.entity'; import { LeaderboardEntry } from './entities/leaderboard-entry.entity'; -import { CACHE_MANAGER } from '@nestjs/common'; +import { CACHE_MANAGER } from '@nestjs/cache-manager'; + import { AchievementsService } from '../achievements/achievements.service'; const mockLeaderboardRepo = () => ({ @@ -23,8 +24,8 @@ const mockAchievementsService = { findLeaderboardAchievements: jest.fn(), awardA describe('LeaderboardService', () => { let service: LeaderboardService; - let leaderboardRepo; - let entryRepo; + let leaderboardRepo: any; + let entryRepo: any; beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ @@ -79,7 +80,7 @@ describe('LeaderboardService', () => { const analytics = await service.getLeaderboardAnalytics(1); expect(analytics.participantCount).toBe(2); expect(analytics.entryCount).toBe(3); - expect(analytics.averageScore).toBeCloseTo((100+200+150)/3); + expect(analytics.averageScore).toBeCloseTo((100 + 200 + 150) / 3); expect(analytics.topUsers[0].score).toBe(200); }); @@ -133,8 +134,8 @@ describe('LeaderboardService', () => { it('should get user rank summary', async () => { entryRepo.find.mockResolvedValue([ - { userId: 1, score: 100 }, { userId: 2, score: 200 }, + { userId: 1, score: 100 }, ]); const result = await service.getUserRankSummary(1, 2); expect(result.rank).toBe(1); diff --git a/src/leaderboard/leaderboard.service.ts b/src/leaderboard/leaderboard.service.ts index 8bfd8f1..22905e3 100644 --- a/src/leaderboard/leaderboard.service.ts +++ b/src/leaderboard/leaderboard.service.ts @@ -1,4 +1,5 @@ -import { Injectable, Inject, CACHE_MANAGER } from '@nestjs/common'; +import { Injectable, Inject } from '@nestjs/common'; +import { CACHE_MANAGER } from '@nestjs/cache-manager'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { Leaderboard } from './entities/leaderboard.entity'; @@ -15,9 +16,9 @@ export class LeaderboardService { private leaderboardRepository: Repository, @InjectRepository(LeaderboardEntry) private entryRepository: Repository, - @Inject(CACHE_MANAGER) private cacheManager: Cache, + @Inject(CACHE_MANAGER) private cacheManager: any, private achievementsService: AchievementsService, - ) {} + ) { } async createLeaderboard(dto: CreateLeaderboardDto): Promise { const leaderboard = this.leaderboardRepository.create(dto); @@ -45,11 +46,12 @@ export class LeaderboardService { // Get current leaderboard entries ordered by score DESC const entries = await this.entryRepository.find({ where: { leaderboard: { id: leaderboardId } }, - order: [ { score: 'DESC' }, { userId: 'ASC' } ], + order: { score: 'DESC', userId: 'ASC' }, }); const userRank = entries.findIndex(e => e.userId === userId) + 1; for (const achievement of achievements) { - if (achievement.criteria?.rank && userRank > 0 && userRank <= achievement.criteria.rank) { + const criteria = (achievement as any).criteria; + if (criteria?.rank && userRank > 0 && userRank <= criteria.rank) { await this.achievementsService.awardAchievementToUser(achievement.id, userId); } } @@ -69,7 +71,7 @@ export class LeaderboardService { userId?: number, ): Promise { const cacheKey = `leaderboard:${leaderboardId}:${ranking}:${order}:${period || 'all'}:${userId || 'anon'}`; - const cached = await this.cacheManager.get(cacheKey); + const cached = await this.cacheManager.get(cacheKey); if (cached) return cached; const leaderboard = await this.leaderboardRepository.findOne({ where: { id: leaderboardId }, @@ -86,10 +88,10 @@ export class LeaderboardService { if (period) entryWhere.period = period; const entries = await this.entryRepository.find({ where: entryWhere, - order: [ - { [ranking]: order }, - { userId: 'ASC' }, - ], + order: { + [ranking]: order, + userId: 'ASC', + } as any, }); const result = { ...leaderboard, entries }; await this.cacheManager.set(cacheKey, result, { ttl: 30 }); @@ -134,7 +136,7 @@ export class LeaderboardService { async getUserRankSummary(leaderboardId: number, userId: number) { const entries = await this.entryRepository.find({ where: { leaderboard: { id: leaderboardId }, archived: false }, - order: [ { score: 'DESC' }, { userId: 'ASC' } ], + order: { score: 'DESC', userId: 'ASC' }, }); const userRank = entries.findIndex(e => e.userId === userId) + 1; const userEntry = entries.find(e => e.userId === userId); diff --git a/src/logging/middleware/correlation.middleware.ts b/src/logging/middleware/correlation.middleware.ts index d43526f..3a3d7e3 100644 --- a/src/logging/middleware/correlation.middleware.ts +++ b/src/logging/middleware/correlation.middleware.ts @@ -1,33 +1,3 @@ -import { Injectable, NestMiddleware } from '@nestjs/common'; -import { Request, Response, NextFunction } from 'express'; -import type { CorrelationService } from "../services/correlation.service" - -interface ExtendedRequest extends Request { - session?: { id?: string }; -} - -interface ExtendedResponse extends Response { - setHeader: (name: string, value: string) => Response; -} - -@Injectable() -export class CorrelationMiddleware implements NestMiddleware { - constructor(private readonly correlationService: CorrelationService) {} - - use(req: ExtendedRequest, res: ExtendedResponse, next: NextFunction): void { - const correlationId = (req.headers["x-correlation-id"] as string) || this.correlationService.generateId() - - // Set correlation ID in response header - res.setHeader("x-correlation-id", correlationId) - - // Run the request in correlation context - this.correlationService.run( - { - id: correlationId, - requestId: req.headers["x-request-id"] as string, - sessionId: req.session?.id, - }, - () => next(), - ) - } -} + private readonly config: ConfigType, + @Inject('REPLAY_SERVICE') private readonly replayClient: ClientProxy, + ) {} diff --git a/src/logging/middleware/logging.middleware.ts b/src/logging/middleware/logging.middleware.ts index 2033391..573d036 100644 --- a/src/logging/middleware/logging.middleware.ts +++ b/src/logging/middleware/logging.middleware.ts @@ -10,9 +10,9 @@ export class LoggingMiddleware implements NestMiddleware { private readonly loggingService: LoggingService, private readonly monitoringService: MonitoringService, private readonly metricsService: MetricsService, - ) {} + ) { } - use(req: Request, res: Response, next: NextFunction): void { + use(req: any, res: any, next: any): void { const startTime = Date.now() const endRequest = this.metricsService.recordHttpRequestStart() @@ -22,8 +22,8 @@ export class LoggingMiddleware implements NestMiddleware { url: req.url, userAgent: req.get("User-Agent"), ip: req.ip, - headers: req.headers, - }) + headers: req.headers as any, + } as any) // Override res.end to capture response const originalEnd = res.end diff --git a/src/logging/services/alerting.service.ts b/src/logging/services/alerting.service.ts index 77b75e2..b149191 100644 --- a/src/logging/services/alerting.service.ts +++ b/src/logging/services/alerting.service.ts @@ -18,11 +18,11 @@ export interface Alert { @Injectable() export class AlertingService { private readonly logger = new Logger(AlertingService.name) - private readonly emailTransporter?: nodemailer.Transporter - private readonly activeAlerts: Map = new Map() - private readonly config: ConfigType + private readonly emailTransporter?: nodemailer.Transporter; + private readonly activeAlerts: Map = new Map(); + private readonly config: any; - constructor(config: ConfigType) { + constructor(config: any) { this.config = config if (this.config.alerting.channels.email.enabled) { this.emailTransporter = nodemailer.createTransport(this.config.alerting.channels.email.smtp) diff --git a/src/logging/services/metrics.service.ts b/src/logging/services/metrics.service.ts index 4bc070f..2fcc093 100644 --- a/src/logging/services/metrics.service.ts +++ b/src/logging/services/metrics.service.ts @@ -12,9 +12,9 @@ export class MetricsService { private readonly businessEventCounter: Counter private readonly memoryUsage: Gauge private readonly cpuUsage: Gauge - private readonly config: ConfigType + private readonly config: any - constructor(config: ConfigType) { + constructor(config: any) { this.config = config // HTTP Metrics diff --git a/src/logging/services/monitoring.service.ts b/src/logging/services/monitoring.service.ts index 89a7d1d..7e9afa3 100644 --- a/src/logging/services/monitoring.service.ts +++ b/src/logging/services/monitoring.service.ts @@ -41,16 +41,16 @@ export class MonitoringService { errors: number[] responseTimes: number[] } = { - requests: [], - errors: [], - responseTimes: [], - } + requests: [], + errors: [], + responseTimes: [], + } constructor( - private readonly config: ConfigType, + private readonly config: any, private readonly alertingService: AlertingService, private readonly metricsService: MetricsService, - ) {} + ) { } registerHealthCheck(name: string, check: () => Promise): void { this.healthChecks.set(name, check) @@ -105,7 +105,7 @@ export class MonitoringService { return { status, timestamp: new Date(), - uptime: process.uptime(), + uptime: process.uptime?.() || 0, memory: { used: memUsage.heapUsed, total: totalMemory, diff --git a/src/logging/services/performance.service.ts b/src/logging/services/performance.service.ts index d0345f5..d6cb288 100644 --- a/src/logging/services/performance.service.ts +++ b/src/logging/services/performance.service.ts @@ -1,132 +1 @@ -import { Injectable, Logger } from "@nestjs/common" - -export interface PerformanceMetric { - name: string - duration: number - timestamp: Date - metadata?: Record -} - -@Injectable() -export class PerformanceService { - private readonly logger = new Logger(PerformanceService.name) - private readonly metrics: PerformanceMetric[] = [] - private readonly maxMetrics = 10000 - - startTimer(name: string): () => PerformanceMetric { - const startTime = process.hrtime.bigint() - const startTimestamp = new Date() - - return (metadata?: Record): PerformanceMetric => { - const endTime = process.hrtime.bigint() - const duration = Number(endTime - startTime) / 1000000 // Convert to milliseconds - - const metric: PerformanceMetric = { - name, - duration, - timestamp: startTimestamp, - metadata, - } - - this.recordMetric(metric) - return metric - } - } - - async measureAsync(name: string, fn: () => Promise, metadata?: Record): Promise { - const timer = this.startTimer(name) - try { - const result = await fn() - timer() - return result - } catch (error) { - timer() - throw error - } - } - - measure(name: string, fn: () => T, metadata?: Record): T { - const timer = this.startTimer(name) - try { - const result = fn() - timer() - return result - } catch (error) { - timer() - throw error - } - } - - getMetrics(name?: string, limit = 100): PerformanceMetric[] { - let filtered = this.metrics - - if (name) { - filtered = filtered.filter((metric) => metric.name === name) - } - - return filtered.slice(-limit) - } - - getAveragePerformance(name: string, timeWindow = 300000): number { - const now = Date.now() - const windowStart = now - timeWindow - - const recentMetrics = this.metrics.filter( - (metric) => metric.name === name && metric.timestamp.getTime() >= windowStart, - ) - - if (recentMetrics.length === 0) return 0 - - const totalDuration = recentMetrics.reduce((sum, metric) => sum + metric.duration, 0) - return totalDuration / recentMetrics.length - } - - getPerformanceStats( - name: string, - timeWindow = 300000, - ): { - count: number - average: number - min: number - max: number - p95: number - p99: number - } { - const now = Date.now() - const windowStart = now - timeWindow - - const recentMetrics = this.metrics - .filter((metric) => metric.name === name && metric.timestamp.getTime() >= windowStart) - .map((metric) => metric.duration) - .sort((a, b) => a - b) - - if (recentMetrics.length === 0) { - return { count: 0, average: 0, min: 0, max: 0, p95: 0, p99: 0 } - } - - const count = recentMetrics.length - const average = recentMetrics.reduce((sum, duration) => sum + duration, 0) / count - const min = recentMetrics[0] - const max = recentMetrics[count - 1] - const p95 = recentMetrics[Math.floor(count * 0.95)] - const p99 = recentMetrics[Math.floor(count * 0.99)] - - return { count, average, min, max, p95, p99 } - } - - private recordMetric(metric: PerformanceMetric): void { - this.metrics.push(metric) - - // Keep only the most recent metrics - if (this.metrics.length > this.maxMetrics) { - this.metrics.splice(0, this.metrics.length - this.maxMetrics) - } - - // Log slow operations - if (metric.duration > 1000) { - this.logger.warn(`Slow operation detected: ${metric.name} took ${metric.duration.toFixed(2)}ms`, { - metric, - }) - } - } -} +npm run build diff --git a/src/notifications/notification.service.spec.ts b/src/notifications/notification.service.spec.ts index b1ec6ea..3b8f8b8 100644 --- a/src/notifications/notification.service.spec.ts +++ b/src/notifications/notification.service.spec.ts @@ -5,6 +5,9 @@ import { Notification } from './entities/notification.entity'; import { NotificationDelivery } from './entities/notification-delivery.entity'; import { Device } from './entities/device.entity'; import { User } from '../users/entities/user.entity'; +import { EmailService } from './email.service'; +import { PushService } from './push.service'; +import { SchedulerRegistry } from '@nestjs/schedule'; describe('NotificationService', () => { let service: NotificationService; @@ -19,9 +22,9 @@ describe('NotificationService', () => { { provide: getRepositoryToken(NotificationDelivery), useFactory: mockRepo }, { provide: getRepositoryToken(User), useFactory: mockRepo }, { provide: getRepositoryToken(Device), useFactory: mockRepo }, - { provide: 'EmailService', useValue: { sendEmail: jest.fn().mockResolvedValue(true) } }, - { provide: 'PushService', useValue: { sendToToken: jest.fn().mockResolvedValue({ queued: true }) } }, - { provide: 'SchedulerRegistry', useValue: { addTimeout: jest.fn(), deleteTimeout: jest.fn() } }, + { provide: EmailService, useValue: { sendEmail: jest.fn().mockResolvedValue(true) } }, + { provide: PushService, useValue: { sendToToken: jest.fn().mockResolvedValue({ queued: true }) } }, + { provide: SchedulerRegistry, useValue: { addTimeout: jest.fn(), deleteTimeout: jest.fn() } }, ], }).compile(); diff --git a/src/notifications/notification.service.ts b/src/notifications/notification.service.ts index 0ffe6ed..be67cc1 100644 --- a/src/notifications/notification.service.ts +++ b/src/notifications/notification.service.ts @@ -1,4 +1,3 @@ - import { Injectable, Logger, Inject, forwardRef } from '@nestjs/common'; import { Repository } from 'typeorm'; import { InjectRepository } from '@nestjs/typeorm'; @@ -23,10 +22,10 @@ export class NotificationService { private readonly userRepo: Repository, @InjectRepository(Device) private readonly deviceRepo: Repository, - private readonly emailService: any, - private readonly scheduler: any, - private readonly pushService: any, - ) {} + private readonly emailService: EmailService, + @Inject(SchedulerRegistry) private readonly scheduler: any, + private readonly pushService: PushService, + ) { } // Backwards-compatible convenience method used across the codebase async notifyAchievementUnlocked(userId: string, achievement: { name: string; description: string; iconUrl?: string; celebrationMessage?: string }) { diff --git a/src/notifications/push.service.ts b/src/notifications/push.service.ts index 8614558..c5e42fb 100644 --- a/src/notifications/push.service.ts +++ b/src/notifications/push.service.ts @@ -1,49 +1,19 @@ -import { Injectable, Logger } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; -import * as admin from 'firebase-admin'; - -interface MessagingPayload { - notification?: { - title?: string; - body?: string; - }; - data?: Record; -} - -@Injectable() -export class PushService { - private readonly logger = new Logger(PushService.name); - private enabled = false; - - constructor(private readonly config: any) { - const key = this.config.get('FCM_SERVICE_ACCOUNT_JSON'); - if (key) { - try { - const serviceAccount = JSON.parse(key as string); - admin.initializeApp({ credential: admin.credential.cert(serviceAccount) }); - this.enabled = true; - this.logger.log('FCM initialized'); - } catch (err) { - this.logger.error('Failed to initialize FCM', err as any); - } - } else { - this.logger.log('FCM not configured; push disabled'); - } - } - async sendToToken(token: string, payload: MessagingPayload) { if (!this.enabled) { this.logger.debug('Push disabled - token would be:', token); - // In production we would enqueue to a retry queue; for now return queued return { success: false, queued: true }; } try { - const message: any = { token, notification: payload.notification }; - const res = await (admin as any).messaging().send(message); + const message: any = { + token, + notification: payload.notification, + data: payload.data, + }; + + const res = await admin.messaging().send(message); return { success: true, result: res }; } catch (err) { this.logger.error('FCM send failed', err as any); return { success: false, error: err }; } } -} diff --git a/src/procedural-generation/algorithms.ts b/src/procedural-generation/algorithms.ts index 912d4fb..fb81436 100644 --- a/src/procedural-generation/algorithms.ts +++ b/src/procedural-generation/algorithms.ts @@ -554,9 +554,10 @@ export class ProcedularGenerationAlgorithms { } private generateSequence(pattern: any, length: number): any[] { + const complexity = 1; // Default complexity const seq = []; for (let i = 0; i < length; i++) { - seq.push(i * (complexity || 1)); + seq.push(i * complexity); } return seq; } diff --git a/src/procedural-generation/analytics.service.ts b/src/procedural-generation/analytics.service.ts index acc3d80..f955359 100644 --- a/src/procedural-generation/analytics.service.ts +++ b/src/procedural-generation/analytics.service.ts @@ -479,7 +479,7 @@ export class GenerationAnalyticsService { resetAnalytics(): void { this.eventLog.length = 0; this.engagementData.clear(); - this.analytics = { + Object.assign(this.analytics, { totalGenerated: 0, successRate: 0, averageQualityScore: 0, @@ -498,7 +498,7 @@ export class GenerationAnalyticsService { expert: 0, }, failureReasons: {}, - }; + }); this.logger.log('Analytics reset'); } } diff --git a/src/procedural-generation/quality-assessment.service.ts b/src/procedural-generation/quality-assessment.service.ts index 6e60daf..2860e2a 100644 --- a/src/procedural-generation/quality-assessment.service.ts +++ b/src/procedural-generation/quality-assessment.service.ts @@ -350,14 +350,14 @@ export class GenerationQualityAssessmentService { if (qualityCheck.issues.length > 0) { report += '\nISSUES FOUND:\n'; - qualityCheck.issues.forEach((issue) => { + qualityCheck.issues.forEach((issue: any) => { report += ` ⚠ ${issue}\n`; }); } if (qualityCheck.recommendations.length > 0) { report += '\nRECOMMENDATIONS:\n'; - qualityCheck.recommendations.forEach((rec) => { + qualityCheck.recommendations.forEach((rec: any) => { report += ` → ${rec}\n`; }); } diff --git a/src/procedural-generation/user-preference-customization.service.ts b/src/procedural-generation/user-preference-customization.service.ts index 5d64f35..dfe37fe 100644 --- a/src/procedural-generation/user-preference-customization.service.ts +++ b/src/procedural-generation/user-preference-customization.service.ts @@ -186,7 +186,7 @@ export class UserPreferenceCustomizationService { } // Add theme preferences - if (preferences.preferredThemes?.length > 0) { + if (preferences.preferredThemes && preferences.preferredThemes.length > 0) { parameters.theme = preferences.preferredThemes[0]; } diff --git a/src/puzzles/dto/puzzle-search.dto.ts b/src/puzzles/dto/puzzle-search.dto.ts index 6cb8a78..bbcaf14 100644 --- a/src/puzzles/dto/puzzle-search.dto.ts +++ b/src/puzzles/dto/puzzle-search.dto.ts @@ -67,12 +67,12 @@ export class PuzzleSearchDto { @IsOptional() @IsBoolean() - @Transform(({ value }) => value === 'true' || value === true) + @Transform(({ value }: any) => value === 'true' || value === true) isFeatured?: boolean; @IsOptional() @IsBoolean() - @Transform(({ value }) => value === 'true' || value === true) + @Transform(({ value }: any) => value === 'true' || value === true) isActive?: boolean; @IsOptional() diff --git a/src/puzzles/dto/search-puzzle.dto.ts b/src/puzzles/dto/search-puzzle.dto.ts index 9efa7a6..1b0d485 100644 --- a/src/puzzles/dto/search-puzzle.dto.ts +++ b/src/puzzles/dto/search-puzzle.dto.ts @@ -46,17 +46,17 @@ export class SearchPuzzleDto { @IsOptional() @IsArray() @IsString({ each: true }) - @Transform(({ value }) => typeof value === 'string' ? value.split(',') : value) + @Transform(({ value }: any) => typeof value === 'string' ? value.split(',') : value) tags?: string[]; @IsOptional() @IsBoolean() - @Transform(({ value }) => value === 'true') + @Transform(({ value }: any) => value === 'true') isFeatured?: boolean; @IsOptional() @IsBoolean() - @Transform(({ value }) => value === 'true') + @Transform(({ value }: any) => value === 'true') isPublished?: boolean; @IsOptional() @@ -88,7 +88,7 @@ export class SearchPuzzleDto { export class PuzzleStatsDto { @IsOptional() @IsBoolean() - @Transform(({ value }) => value === 'true') + @Transform(({ value }: any) => value === 'true') includeStats?: boolean = false; @IsOptional() diff --git a/src/puzzles/puzzles.controller.spec.ts b/src/puzzles/puzzles.controller.spec.ts index 70587e1..290585f 100644 --- a/src/puzzles/puzzles.controller.spec.ts +++ b/src/puzzles/puzzles.controller.spec.ts @@ -8,7 +8,9 @@ describe('PuzzlesController', () => { beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [PuzzlesController], - providers: [PuzzlesService], + providers: [ + { provide: PuzzlesService, useValue: { findAll: jest.fn(), findOne: jest.fn() } } + ], }).compile(); controller = module.get(PuzzlesController); diff --git a/src/puzzles/puzzles.service.spec.ts b/src/puzzles/puzzles.service.spec.ts index 58aaf43..540d157 100644 --- a/src/puzzles/puzzles.service.spec.ts +++ b/src/puzzles/puzzles.service.spec.ts @@ -1,12 +1,41 @@ import { Test, TestingModule } from '@nestjs/testing'; import { PuzzlesService } from './puzzles.service'; +import { getRepositoryToken } from '@nestjs/typeorm'; +import { Puzzle } from './entities/puzzle.entity'; +import { PuzzleProgress } from '../game-logic/entities/puzzle-progress.entity'; +import { PuzzleRating } from './entities/puzzle-rating.entity'; describe('PuzzlesService', () => { let service: PuzzlesService; + const mockRepository = () => ({ + find: jest.fn(), + findOne: jest.fn(), + create: jest.fn(), + save: jest.fn(), + update: jest.fn(), + softDelete: jest.fn(), + createQueryBuilder: jest.fn(() => ({ + where: jest.fn().mockReturnThis(), + andWhere: jest.fn().mockReturnThis(), + orderBy: jest.fn().mockReturnThis(), + skip: jest.fn().mockReturnThis(), + take: jest.fn().mockReturnThis(), + getManyAndCount: jest.fn().mockResolvedValue([[], 0]), + getOne: jest.fn().mockResolvedValue(null), + getCount: jest.fn().mockResolvedValue(0), + clone: jest.fn().mockReturnThis(), + })), + }); + beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ - providers: [PuzzlesService], + providers: [ + PuzzlesService, + { provide: getRepositoryToken(Puzzle), useFactory: mockRepository }, + { provide: getRepositoryToken(PuzzleProgress), useFactory: mockRepository }, + { provide: getRepositoryToken(PuzzleRating), useFactory: mockRepository }, + ], }).compile(); service = module.get(PuzzlesService); diff --git a/src/puzzles/tests/puzzles.e2e.spec.ts b/src/puzzles/tests/puzzles.e2e.spec.ts index 1f64721..c11bdc8 100644 --- a/src/puzzles/tests/puzzles.e2e.spec.ts +++ b/src/puzzles/tests/puzzles.e2e.spec.ts @@ -1,10 +1,13 @@ import { Test, TestingModule } from '@nestjs/testing'; import { INestApplication, ValidationPipe } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import * as request from 'supertest'; +import supertest from 'supertest'; +const request = supertest as any; + import { AppModule } from '../../app.module'; import { Repository } from 'typeorm'; import { User } from '../../users/entities/user.entity'; +import { getRepositoryToken } from '@nestjs/typeorm'; import { Puzzle } from '../entities/puzzle.entity'; import { JwtService } from '@nestjs/jwt'; import { CreatePuzzleDto, PuzzleDifficulty, PuzzleContentType } from '../dto'; @@ -19,6 +22,7 @@ describe('Puzzles E2E', () => { let regularUser: User; let adminToken: string; let userToken: string; + let bulkTestPuzzleIds: string[]; const samplePuzzle: CreatePuzzleDto = { title: 'E2E Test Puzzle: Advanced Logic Challenge', @@ -99,8 +103,8 @@ describe('Puzzles E2E', () => { await app.init(); - userRepository = moduleFixture.get('UserRepository'); - puzzleRepository = moduleFixture.get('PuzzleRepository'); + userRepository = moduleFixture.get>(getRepositoryToken(User)); + puzzleRepository = moduleFixture.get>(getRepositoryToken(Puzzle)); jwtService = moduleFixture.get(JwtService); // Create test users @@ -109,28 +113,9 @@ describe('Puzzles E2E', () => { email: 'admin.e2e@test.com', password: 'hashedpassword', role: 'admin', - profile: { - firstName: 'Admin', - lastName: 'User', - preferredLanguage: 'en', - avatar: null, - bio: 'E2E Test Admin User', - location: null, - website: null, - dateOfBirth: null, - }, - preferences: { - emailNotifications: true, - theme: 'light', - language: 'en', - timezone: 'UTC', - privacy: { - showProfile: true, - showProgress: true, - showAchievements: true, - }, - }, - }); + firstName: 'Admin', + lastName: 'User', + } as any); adminUser = await userRepository.save(adminUser); regularUser = userRepository.create({ @@ -138,28 +123,9 @@ describe('Puzzles E2E', () => { email: 'user.e2e@test.com', password: 'hashedpassword', role: 'user', - profile: { - firstName: 'Regular', - lastName: 'User', - preferredLanguage: 'en', - avatar: null, - bio: 'E2E Test Regular User', - location: null, - website: null, - dateOfBirth: null, - }, - preferences: { - emailNotifications: false, - theme: 'dark', - language: 'en', - timezone: 'EST', - privacy: { - showProfile: false, - showProgress: true, - showAchievements: false, - }, - }, - }); + firstName: 'Regular', + lastName: 'User', + } as any); regularUser = await userRepository.save(regularUser); // Generate auth tokens @@ -242,7 +208,7 @@ describe('Puzzles E2E', () => { .expect(200); expect( - publicSearch.body.puzzles.some((p) => p.id === createdPuzzleId), + publicSearch.body.puzzles.some((p: any) => p.id === createdPuzzleId), ).toBe(true); // Step 7: Regular user can view published puzzle @@ -342,7 +308,7 @@ describe('Puzzles E2E', () => { expect( textSearch.body.puzzles.every( - (p) => + (p: any) => p.title.includes('Math') || p.description.includes('Math') || p.tags.includes('math'), @@ -363,7 +329,7 @@ describe('Puzzles E2E', () => { expect( complexFilter.body.puzzles.every( - (p) => + (p: any) => p.category === 'math' && p.difficulty === 'expert' && p.difficultyRating >= 5 && @@ -377,7 +343,7 @@ describe('Puzzles E2E', () => { .query({ sortBy: 'title', sortOrder: 'ASC' }) .expect(200); - const titles = sortedByTitle.body.puzzles.map((p) => p.title); + const titles = sortedByTitle.body.puzzles.map((p: any) => p.title); const sortedTitles = [...titles].sort(); expect(titles).toEqual(sortedTitles); }); @@ -400,15 +366,15 @@ describe('Puzzles E2E', () => { expect(page1.body.totalPages).toBeGreaterThanOrEqual(1); // Ensure no overlap between pages - const page1Ids = page1.body.puzzles.map((p) => p.id); - const page2Ids = page2.body.puzzles.map((p) => p.id); - const overlap = page1Ids.filter((id) => page2Ids.includes(id)); + const page1Ids = page1.body.puzzles.map((p: any) => p.id); + const page2Ids = page2.body.puzzles.map((p: any) => p.id); + const overlap = page1Ids.filter((id: any) => page2Ids.includes(id)); expect(overlap).toHaveLength(0); }); }); describe('Bulk Operations Workflow', () => { - let bulkTestPuzzleIds: string[]; + // bulkTestPuzzleIds is now at the top-level scope beforeAll(async () => { // Create puzzles for bulk operations diff --git a/src/puzzles/tests/puzzles.integration.spec.ts b/src/puzzles/tests/puzzles.integration.spec.ts index c9fdf21..6296647 100644 --- a/src/puzzles/tests/puzzles.integration.spec.ts +++ b/src/puzzles/tests/puzzles.integration.spec.ts @@ -3,7 +3,9 @@ import { INestApplication, ValidationPipe } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { getRepositoryToken } from '@nestjs/typeorm'; -import * as request from 'supertest'; +import supertest from 'supertest'; +const request = supertest as any; + import { PuzzlesModule } from '../puzzles.module'; import { Puzzle } from '../entities/puzzle.entity'; import { PuzzleProgress } from '../../game-logic/entities/puzzle-progress.entity'; @@ -94,8 +96,8 @@ describe('Puzzles Integration Tests', () => { await app.init(); - puzzleRepository = moduleFixture.get>(getRepositoryToken(Puzzle)); - userRepository = moduleFixture.get>(getRepositoryToken(User)); + puzzleRepository = moduleFixture.get>(getRepositoryToken(Puzzle)); + userRepository = moduleFixture.get>(getRepositoryToken(User)); jwtService = moduleFixture.get(JwtService); // Create test user @@ -243,7 +245,7 @@ describe('Puzzles Integration Tests', () => { .query({ category: 'math' }) .expect(200); - expect(response.body.puzzles.every((p) => p.category === 'math')).toBe( + expect(response.body.puzzles.every((p: any) => p.category === 'math')).toBe( true, ); }); @@ -254,7 +256,7 @@ describe('Puzzles Integration Tests', () => { .query({ difficulty: 'easy' }) .expect(200); - expect(response.body.puzzles.every((p) => p.difficulty === 'easy')).toBe( + expect(response.body.puzzles.every((p: any) => p.difficulty === 'easy')).toBe( true, ); }); @@ -265,7 +267,7 @@ describe('Puzzles Integration Tests', () => { .query({ search: 'Math' }) .expect(200); - expect(response.body.puzzles.some((p) => p.title.includes('Math'))).toBe( + expect(response.body.puzzles.some((p: any) => p.title.includes('Math'))).toBe( true, ); }); @@ -276,7 +278,7 @@ describe('Puzzles Integration Tests', () => { .query({ sortBy: 'title', sortOrder: 'ASC' }) .expect(200); - const titles = response.body.puzzles.map((p) => p.title); + const titles = response.body.puzzles.map((p: any) => p.title); const sortedTitles = [...titles].sort(); expect(titles).toEqual(sortedTitles); }); @@ -439,7 +441,7 @@ describe('Puzzles Integration Tests', () => { }); it('should perform bulk publish operation', async () => { - const puzzleIds = testPuzzles.map((p) => p.id); + const puzzleIds = testPuzzles.map((p: any) => p.id); const bulkUpdateDto = { action: 'publish', reason: 'Integration test bulk publish', diff --git a/src/tournaments/tournaments.service.ts b/src/tournaments/tournaments.service.ts index bf93b32..702b5f3 100644 --- a/src/tournaments/tournaments.service.ts +++ b/src/tournaments/tournaments.service.ts @@ -1,4 +1,4 @@ -import { Injectable, Logger } from '@nestjs/common'; +import { Injectable, Logger, NotFoundException } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository, MoreThan, LessThan, Between } from 'typeorm'; import { Tournament } from './entities/tournament.entity'; @@ -28,7 +28,7 @@ export class TournamentsService { private readonly matchRepository: Repository, @InjectRepository(TournamentSpectator) private readonly spectatorRepository: Repository, - ) {} + ) { } async create( createTournamentDto: CreateTournamentDto, @@ -118,10 +118,14 @@ export class TournamentsService { } async findOne(id: string): Promise { - return await this.tournamentRepository.findOne({ + const tournament = await this.tournamentRepository.findOne({ where: { id }, relations: ['participants', 'matches'], }); + if (!tournament) { + throw new NotFoundException(`Tournament with ID ${id} not found`); + } + return tournament; } async update( @@ -633,8 +637,8 @@ export class TournamentsService { endTime: new Date(), duration: match.startTime ? Math.floor( - (new Date().getTime() - new Date(match.startTime).getTime()) / 1000, - ) + (new Date().getTime() - new Date(match.startTime).getTime()) / 1000, + ) : 0, results: { puzzleResults, @@ -665,7 +669,7 @@ export class TournamentsService { await this.advanceToNextMatch( match.nextMatchId, winnerId, - winnerId === match.player1Id ? match.player1Name : match.player2Name, + (winnerId === match.player1Id ? match.player1Name : match.player2Name) as string, ); } @@ -865,7 +869,7 @@ export class TournamentsService { winner: match.winnerId ? { id: match.winnerId, name: match.winnerName! } : undefined, - status: match.status, + status: match.status as any, nextMatchId: match.nextMatchId, loserNextMatchId: match.loserNextMatchId, }); diff --git a/src/user-progress/constants/achievement.constants.ts b/src/user-progress/constants/achievement.constants.ts index a3f000f..a3f12fd 100644 --- a/src/user-progress/constants/achievement.constants.ts +++ b/src/user-progress/constants/achievement.constants.ts @@ -3,18 +3,18 @@ export const ACHIEVEMENTS = [ code: 'PUZZLE_10', title: 'Puzzle Novice', description: 'Completed 10 puzzles', - condition: (progress) => progress.puzzlesCompleted >= 10, + condition: (progress: any) => progress.puzzlesCompleted >= 10, }, { code: 'PUZZLE_50', title: 'Puzzle Warrior', description: 'Completed 50 puzzles', - condition: (progress) => progress.puzzlesCompleted >= 50, + condition: (progress: any) => progress.puzzlesCompleted >= 50, }, { code: 'STREAK_5', title: 'Streak Beginner', description: '5-day puzzle streak', - condition: (progress) => progress.streakDays >= 5, + condition: (progress: any) => progress.streakDays >= 5, }, ]; diff --git a/src/user-progress/controller/user-progress.controller.ts b/src/user-progress/controller/user-progress.controller.ts index 05c96bd..d6cb288 100644 --- a/src/user-progress/controller/user-progress.controller.ts +++ b/src/user-progress/controller/user-progress.controller.ts @@ -1,45 +1 @@ -import { Controller, Get, Param, Post, Body } from '@nestjs/common'; -import { UserProgressService } from '../services/user-progress.service'; -import { UserProgress } from '../entities/user-progress.entity'; - - -@Controller('user-progress') -export class UserProgressController { - constructor(private readonly userProgressService: UserProgressService) {} - - @Get(':userId') - async getUserProgress(@Param('userId') userId: string) { - return this.userProgressService.getOrCreateProgress({ id: userId } as any); - } - - @Post('puzzle-completed/:userId') -completePuzzle(@Param('userId') userId: string) { - return this.userProgressService.incrementPuzzlesCompleted(userId); -} - -@Get('analytics/xp-distribution') - getXpDistribution() { - return this.userProgressService.getXpDistribution(); - } - - @Get('analytics/achievements-summary') - getAchievementsSummary() { - return this.userProgressService.getAchievementsSummary(); - } - - @Get('analytics/top-streaks') - getTopStreaks() { - return this.userProgressService.getTopStreaks(); - } - - @Get('leaderboard/xp') -getXpLeaderboard() { - return this.userProgressService.getTopUsersByXp(10); -} - -@Get('backup') -backupAllProgress() { - return this.userProgressService.backupAllProgress(); -} - -} +npm run build diff --git a/src/user-progress/services/user-progress.service.ts b/src/user-progress/services/user-progress.service.ts index 41097ae..8e505be 100644 --- a/src/user-progress/services/user-progress.service.ts +++ b/src/user-progress/services/user-progress.service.ts @@ -1,215 +1,4 @@ -import { - Injectable, - NotFoundException, -} from '@nestjs/common'; -import { InjectRepository } from '@nestjs/typeorm'; -import { Repository, Between, Not, In } from 'typeorm'; -import { isYesterday, isToday } from 'date-fns'; -import { UserProgress } from '../entities/user-progress.entity'; -import { User } from '../../users/entities/user.entity'; import { checkNewAchievements } from '../logic/achievement-checker'; import { UserAchievement } from '../entities/user-achievement.entity'; import { calculateLevel } from '../utils/level.utils'; import { MilestoneService } from '../milestone/milestone.service'; -import { Puzzle } from '../../puzzles/entities/puzzle.entity'; - -@Injectable() -export class UserProgressService { - constructor( - @InjectRepository(UserProgress) - private readonly userProgressRepository: Repository, - - @InjectRepository(UserAchievement) - private readonly achievementRepo: Repository, - - @InjectRepository(Puzzle) - private readonly puzzleRepository: Repository, - - private readonly milestoneService: MilestoneService, - ) {} - - async getXpDistribution() { - const progressList = await this.userProgressRepository.find(); - const distribution = progressList.reduce((acc, progress) => { - const range = `${Math.floor(progress.xp / 1000) * 1000}-${ - Math.floor(progress.xp / 1000) * 1000 + 999 - }`; - acc[range] = (acc[range] || 0) + 1; - return acc; - }, {} as Record); - return distribution; - } - - async getAchievementsSummary() { - const progressList = await this.userProgressRepository.find({ relations: ['achievements'] }); - const summary = { - totalUsers: progressList.length, - totalAchievementsUnlocked: progressList.reduce( - (sum, p) => sum + (p.achievements?.length || 0), - 0, - ), - averageAchievements: 0, - }; - summary.averageAchievements = summary.totalAchievementsUnlocked / summary.totalUsers; - return summary; - } - - async getTopStreaks() { - const progressList = await this.userProgressRepository.find({ - order: { currentStreak: 'DESC' }, - take: 10, - }); - return progressList.map((p) => ({ userId: p.userId, currentStreak: p.currentStreak })); - } - - async getOrCreateProgress(user: User): Promise { - let progress = await this.userProgressRepository.findOne({ - where: { user: { id: user.id } }, - relations: ['user'], - }); - - if (!progress) { - progress = this.userProgressRepository.create({ - user, - xp: 0, - level: 1, - puzzlesCompleted: 0, - streakDays: 0, - }); - await this.userProgressRepository.save(progress); - } - - return progress; - } - - async incrementXP(user: User, xpEarned: number): Promise { - const progress = await this.getOrCreateProgress(user); - progress.xp += xpEarned; - - const result = calculateLevel(progress.xp); - progress.level = result.level; - - await this.userProgressRepository.save(progress); - return progress; - } - - async completePuzzle(user: User): Promise { - const progress = await this.getOrCreateProgress(user); - progress.puzzlesCompleted += 1; - progress.lastPuzzleCompletedAt = new Date(); - - return this.userProgressRepository.save(progress); - } - - private updateStreak(lastDate: Date | null): number { - if (!lastDate) return 1; - - const now = new Date(); - if (isYesterday(lastDate)) return 1; - if (isToday(lastDate)) return 0; - - return -1; - } - - async incrementPuzzlesCompleted(userId: string) { - const progress = await this.userProgressRepository.findOne({ - where: { userId }, - relations: ['achievements'], - }); - if (!progress) throw new NotFoundException('User progress not found'); - - progress.puzzlesCompleted += 1; - progress.xp += 10; - - const streakUpdate = this.updateStreak(progress.lastPuzzleCompletedAt); - progress.streakDays = - streakUpdate === 1 - ? progress.streakDays + 1 - : streakUpdate === -1 - ? 1 - : progress.streakDays; - progress.lastPuzzleCompletedAt = new Date(); - - const newAchievements = checkNewAchievements(progress, progress.achievements || []); - const updatedProgress = await this.userProgressRepository.save(progress); - - if (newAchievements.length > 0) { - await this.achievementRepo.save(newAchievements); - } - - return { progress: updatedProgress, unlocked: newAchievements }; - } - - async getLeaderboard(metric: 'xp' | 'level' | 'streak', limit = 10) { - const qb = this.userProgressRepository - .createQueryBuilder('progress') - .innerJoinAndSelect('progress.user', 'user') - .orderBy(`progress.${metric}`, 'DESC') - .limit(limit); - - const rawResults = await qb.getMany(); - - return rawResults.map((entry, index) => ({ - rank: index + 1, - userId: entry.user.id, - username: entry.user.username, - xp: entry.xp, - level: entry.level, - currentStreak: entry.currentStreak, - puzzlesCompleted: entry.puzzlesCompleted, - })); - } - - async getTopUsersByXp(limit = 10) { - const topUsers = await this.userProgressRepository.find({ - order: { xp: 'DESC' }, - take: limit, - select: ['userId', 'xp', 'level'], - }); - - return topUsers.map((user, index) => ({ - rank: index + 1, - userId: user.userId, - xp: user.xp, - level: user.level ?? this.calculateLevel(user.xp), - })); - } - - calculateLevel(xp: number): number { - return Math.floor(Math.sqrt(xp / 100)); - } - - async backupAllProgress() { - const allProgress = await this.userProgressRepository.find(); - return allProgress; - } - - private handleMilestoneNotifications(userId: string, messages: string[]) { - for (const message of messages) { - console.log(`[Milestone] User ${userId}: ${message}`); - // Future: send via email, push, or in-app notification - } - } - - async getRecommendedPuzzles(userId: string) { - const progress = await this.userProgressRepository.findOne({ - where: { userId }, - relations: ['solvedPuzzles'], - }); - - if (!progress) throw new Error('User progress not found'); - - const currentLevel = this.calculateLevel(progress.xp); - const solvedPuzzleIds = progress.solvedPuzzles?.map((p: any) => typeof p === 'string' ? p : p.id) || []; - - const recommended = await this.puzzleRepository.find({ - where: { - id: Not(In(solvedPuzzleIds)), - difficulty: Between(Math.max(currentLevel - 1, 1).toString(), (currentLevel + 2).toString()) as any, - }, - take: 5, - }); - - return recommended; - } -} diff --git a/src/users/users.controller.spec.ts b/src/users/users.controller.spec.ts index a76d310..63ec9e2 100644 --- a/src/users/users.controller.spec.ts +++ b/src/users/users.controller.spec.ts @@ -8,7 +8,9 @@ describe('UsersController', () => { beforeEach(async () => { const module: TestingModule = await Test.createTestingModule({ controllers: [UsersController], - providers: [UsersService], + providers: [ + { provide: UsersService, useValue: { findOne: jest.fn(), update: jest.fn() } } + ], }).compile(); controller = module.get(UsersController); diff --git a/src/validators/is-strong-password.decorator.ts b/src/validators/is-strong-password.decorator.ts index cb76099..c0d08ad 100644 --- a/src/validators/is-strong-password.decorator.ts +++ b/src/validators/is-strong-password.decorator.ts @@ -1,6 +1,6 @@ -import { registerDecorator, ValidationOptions, ValidationArguments } from 'class-validator'; +import { registerDecorator } from 'class-validator'; -export function IsStrongPassword(validationOptions?: ValidationOptions) { +export function IsStrongPassword(validationOptions?: any) { return function (object: Object, propertyName: string) { registerDecorator({ name: 'isStrongPassword', @@ -8,14 +8,18 @@ export function IsStrongPassword(validationOptions?: ValidationOptions) { propertyName: propertyName, options: validationOptions, validator: { - validate(value: any, args: ValidationArguments) { + validate(value: any, args: any) { // At least 8 chars, 1 uppercase, 1 lowercase, 1 number, 1 special char return ( typeof value === 'string' && - /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?]).{8,}$/.test(value) + value.length >= 8 && + /[A-Z]/.test(value) && + /[a-z]/.test(value) && + /[0-9]/.test(value) && + /[^A-Za-z0-9]/.test(value) ); }, - defaultMessage(args: ValidationArguments) { + defaultMessage(args: any) { return `${args.property} must be a strong password (min 8 chars, upper, lower, number, special)`; }, },