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)`;
},
},