diff --git a/.env.devnet b/.env.devnet index 6d6ce24..5b6e1a2 100644 --- a/.env.devnet +++ b/.env.devnet @@ -1 +1,2 @@ -API_URL=https://devnet-api.multiversx.com \ No newline at end of file +NETWORK=devnet +API_URL=https://devnet-api.multiversx.com diff --git a/.env.mainnet b/.env.mainnet index 9b4fb31..2605950 100644 --- a/.env.mainnet +++ b/.env.mainnet @@ -1 +1,2 @@ -API_URL=https://api.multiversx.com \ No newline at end of file +NETWORK=mainnet +API_URL=https://api.multiversx.com diff --git a/.env.testnet b/.env.testnet index 0e2a5a9..3af46c9 100644 --- a/.env.testnet +++ b/.env.testnet @@ -1 +1,2 @@ -API_URL=https://testnet-api.multiversx.com \ No newline at end of file +NETWORK=testnet +API_URL=https://testnet-api.multiversx.com diff --git a/.gitignore b/.gitignore index ffa8337..bf0eda5 100644 --- a/.gitignore +++ b/.gitignore @@ -42,6 +42,8 @@ lerna-debug.log* **/*/config/config.yaml **/*/config/schema.yaml +!.multiversx/config/config.yaml + # Environment .env .env.custom diff --git a/.multiversx/config/.env.example b/.multiversx/config/.env.example new file mode 100644 index 0000000..dd0c381 --- /dev/null +++ b/.multiversx/config/.env.example @@ -0,0 +1,3 @@ +NODE_ENV=infra +NETWORK= +API_URL= diff --git a/.multiversx/config/config.yaml b/.multiversx/config/config.yaml new file mode 100644 index 0000000..3a661d0 --- /dev/null +++ b/.multiversx/config/config.yaml @@ -0,0 +1,34 @@ +apps: + api: + port: 3000 + privatePort: 4000 + useCachingInterceptor: true + cacheWarmer: + port: 4001 + queueWorker: + port: 4002 + transactionsProcessor: + port: 4003 + maxLookBehind: 100 +libs: + common: + network: ${NETWORK} + urls: + api: ${API_URL} + database: + host: 'localhost' + port: 27017 + # username: 'root' + # password: 'root' + name: 'example' + tlsAllowInvalidCertificates: true + redis: + host: '127.0.0.1' + port: 6379 + nativeAuth: + # maxExpirySeconds: + acceptedOrigins: + - utils.multiversx.com + security: + admins: [] + # rateLimiterSecret: diff --git a/apps/api/src/main.ts b/apps/api/src/main.ts index c372be8..30f906c 100644 --- a/apps/api/src/main.ts +++ b/apps/api/src/main.ts @@ -2,7 +2,7 @@ import * as dotenv from 'dotenv'; import { resolve } from 'path'; // Determine which .env file to load based on NODE_ENV -const envPath = `.env.${process.env.NODE_ENV ?? 'mainnet'}`; +const envPath = process.env.NODE_ENV === 'infra' ? '.env' : `.env.${process.env.NODE_ENV ?? 'mainnet'}`; dotenv.config({ path: resolve(process.cwd(), envPath), }); @@ -16,7 +16,7 @@ import { join } from 'path'; import { PrivateAppModule } from './private.app.module'; import { PublicAppModule } from './public.app.module'; import * as bodyParser from 'body-parser'; -import { Logger, NestInterceptor } from '@nestjs/common'; +import { Logger, NestInterceptor, ValidationPipe } from '@nestjs/common'; import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import cookieParser from 'cookie-parser'; import { PubSubListenerModule } from '@libs/common'; @@ -48,6 +48,7 @@ async function bootstrap() { globalInterceptors.push(new RequestCpuTimeInterceptor(metricsService)); publicApp.useGlobalInterceptors(...globalInterceptors); + publicApp.useGlobalPipes(new ValidationPipe()); const description = readFileSync(join(__dirname, '..', 'docs', 'swagger.md'), 'utf8'); diff --git a/apps/cache-warmer/src/app.module.ts b/apps/cache-warmer/src/app.module.ts index d35d8b4..caf6143 100644 --- a/apps/cache-warmer/src/app.module.ts +++ b/apps/cache-warmer/src/app.module.ts @@ -1,10 +1,11 @@ import { Module } from '@nestjs/common'; -import { ApiMetricsController, CommonConfigModule, DynamicModuleUtils, ExampleModule, HealthCheckController } from '@libs/common'; +import { ApiMetricsController, CommonConfigModule, DynamicModuleUtils, HealthCheckController } from '@libs/common'; import { ApiMetricsModule } from '@libs/common'; import { LoggingModule } from '@multiversx/sdk-nestjs-common'; import { AppConfigModule } from './config/app-config.module'; import { ScheduleModule } from '@nestjs/schedule'; import { WarmerService } from './warmer/warmer.service'; +import { ServicesModule } from '@libs/services'; @Module({ imports: [ @@ -13,7 +14,7 @@ import { WarmerService } from './warmer/warmer.service'; ScheduleModule.forRoot(), CommonConfigModule, AppConfigModule, - ExampleModule.forRoot(), + ServicesModule, ], providers: [ DynamicModuleUtils.getPubSubService(), diff --git a/apps/cache-warmer/src/main.ts b/apps/cache-warmer/src/main.ts index 678e43e..5304684 100644 --- a/apps/cache-warmer/src/main.ts +++ b/apps/cache-warmer/src/main.ts @@ -2,7 +2,7 @@ import * as dotenv from 'dotenv'; import { resolve } from 'path'; // Determine which .env file to load based on NODE_ENV -const envPath = `.env.${process.env.NODE_ENV ?? 'mainnet'}`; +const envPath = process.env.NODE_ENV === 'infra' ? '.env' : `.env.${process.env.NODE_ENV ?? 'mainnet'}`; dotenv.config({ path: resolve(process.cwd(), envPath), }); diff --git a/apps/cache-warmer/src/warmer/warmer.service.ts b/apps/cache-warmer/src/warmer/warmer.service.ts index 4a7a26f..3a2239f 100644 --- a/apps/cache-warmer/src/warmer/warmer.service.ts +++ b/apps/cache-warmer/src/warmer/warmer.service.ts @@ -1,10 +1,10 @@ import { Inject, Injectable } from "@nestjs/common"; import { Cron } from "@nestjs/schedule"; import { ClientProxy } from "@nestjs/microservices"; -import { ExampleService } from "@libs/common"; import { CacheService } from "@multiversx/sdk-nestjs-cache"; import { Locker } from "@multiversx/sdk-nestjs-common"; import { CacheInfo } from "@libs/common/utils/cache.info"; +import { ExampleService } from "@libs/services"; @Injectable() export class WarmerService { diff --git a/apps/queue-worker/src/main.ts b/apps/queue-worker/src/main.ts index 1d279fc..97052cc 100644 --- a/apps/queue-worker/src/main.ts +++ b/apps/queue-worker/src/main.ts @@ -2,7 +2,7 @@ import * as dotenv from 'dotenv'; import { resolve } from 'path'; // Determine which .env file to load based on NODE_ENV -const envPath = `.env.${process.env.NODE_ENV ?? 'mainnet'}`; +const envPath = process.env.NODE_ENV === 'infra' ? '.env' : `.env.${process.env.NODE_ENV ?? 'mainnet'}`; dotenv.config({ path: resolve(process.cwd(), envPath), }); diff --git a/apps/transactions-processor/src/main.ts b/apps/transactions-processor/src/main.ts index e599ca6..998b6e9 100644 --- a/apps/transactions-processor/src/main.ts +++ b/apps/transactions-processor/src/main.ts @@ -2,7 +2,7 @@ import * as dotenv from 'dotenv'; import { resolve } from 'path'; // Determine which .env file to load based on NODE_ENV -const envPath = `.env.${process.env.NODE_ENV ?? 'mainnet'}`; +const envPath = process.env.NODE_ENV === 'infra' ? '.env' : `.env.${process.env.NODE_ENV ?? 'mainnet'}`; dotenv.config({ path: resolve(process.cwd(), envPath), }); diff --git a/config/config.yaml b/config/config.yaml index 829392c..3a661d0 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -12,6 +12,7 @@ apps: maxLookBehind: 100 libs: common: + network: ${NETWORK} urls: api: ${API_URL} database: diff --git a/config/schema.yaml b/config/schema.yaml index 431ef3a..d26206d 100644 --- a/config/schema.yaml +++ b/config/schema.yaml @@ -13,6 +13,9 @@ apps: maxLookBehind: integer libs: common: + network: + type: string + enum: [devnet, testnet, mainnet] urls: api: string database: diff --git a/libs/common/src/config/index.ts b/libs/common/src/config/index.ts index d9c0a3c..42357eb 100644 --- a/libs/common/src/config/index.ts +++ b/libs/common/src/config/index.ts @@ -1,3 +1,5 @@ export * from './sdk.nestjs.config.service.impl'; export * from './common.config.module'; export * from './common.config.service'; +export * from './network.config.module'; +export * from './network.config.service'; diff --git a/libs/common/src/config/network.config.module.ts b/libs/common/src/config/network.config.module.ts new file mode 100644 index 0000000..c13dca0 --- /dev/null +++ b/libs/common/src/config/network.config.module.ts @@ -0,0 +1,13 @@ +import { Global, Module } from "@nestjs/common"; +import { NetworkConfigService } from "./network.config.service"; + +@Global() +@Module({ + providers: [ + NetworkConfigService, + ], + exports: [ + NetworkConfigService, + ], +}) +export class NetworkConfigModule { } diff --git a/libs/common/src/config/network.config.service.ts b/libs/common/src/config/network.config.service.ts new file mode 100644 index 0000000..624e715 --- /dev/null +++ b/libs/common/src/config/network.config.service.ts @@ -0,0 +1,33 @@ +import { Injectable } from "@nestjs/common"; +import { configuration } from "./configuration"; + +export interface NetworkConfig { + chainID: 'D' | 'T' | '1'; +} + +@Injectable() +export class NetworkConfigService { + private readonly devnetConfig: NetworkConfig = { + chainID: 'D', + }; + private readonly testnetConfig: NetworkConfig = { + chainID: 'T', + }; + private readonly mainnetConfig: NetworkConfig = { + chainID: '1', + }; + + public readonly config: NetworkConfig; + + constructor() { + const network = configuration().libs.common.network; + + const networkConfigs = { + devnet: this.devnetConfig, + testnet: this.testnetConfig, + mainnet: this.mainnetConfig, + }; + + this.config = networkConfigs[network]; + } +} diff --git a/libs/common/src/entities/config.d.ts b/libs/common/src/entities/config.d.ts index 4febdf0..e169e47 100644 --- a/libs/common/src/entities/config.d.ts +++ b/libs/common/src/entities/config.d.ts @@ -20,6 +20,7 @@ export interface Config { }; libs: { common: { + network: "devnet" | "testnet" | "mainnet"; urls: { api: string; }; diff --git a/libs/services/src/index.ts b/libs/services/src/index.ts index 6f7b743..07d80be 100644 --- a/libs/services/src/index.ts +++ b/libs/services/src/index.ts @@ -1,3 +1,4 @@ export * from './example'; +export * from './services.module'; export * from './token'; export * from './user'; diff --git a/package-lock.json b/package-lock.json index d3cf261..3b27d07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,17 +9,17 @@ "version": "0.0.1", "license": "UNLICENSED", "dependencies": { - "@multiversx/sdk-core": "^12.15.0", - "@multiversx/sdk-nestjs-auth": "3.7.0", - "@multiversx/sdk-nestjs-cache": "3.7.0", - "@multiversx/sdk-nestjs-common": "3.7.0", - "@multiversx/sdk-nestjs-elastic": "3.7.0", - "@multiversx/sdk-nestjs-http": "3.7.0", - "@multiversx/sdk-nestjs-monitoring": "3.7.0", - "@multiversx/sdk-nestjs-rabbitmq": "3.7.0", - "@multiversx/sdk-nestjs-redis": "3.7.0", - "@multiversx/sdk-network-providers": "^2.2.0", - "@multiversx/sdk-transaction-processor": "^0.1.30", + "@multiversx/sdk-core": "^13.2.1", + "@multiversx/sdk-nestjs-auth": "3.7.1", + "@multiversx/sdk-nestjs-cache": "3.7.1", + "@multiversx/sdk-nestjs-common": "3.7.1", + "@multiversx/sdk-nestjs-elastic": "3.7.1", + "@multiversx/sdk-nestjs-http": "3.7.1", + "@multiversx/sdk-nestjs-monitoring": "3.7.1", + "@multiversx/sdk-nestjs-rabbitmq": "3.7.1", + "@multiversx/sdk-nestjs-redis": "3.7.1", + "@multiversx/sdk-network-providers": "^2.4.3", + "@multiversx/sdk-transaction-processor": "^0.1.33", "@nestjs/bull": "^10.0.1", "@nestjs/common": "10.2.0", "@nestjs/config": "3.0.1", @@ -35,6 +35,8 @@ "agentkeepalive": "^4.3.0", "bull": "^4.10.4", "cache-manager": "^5.2.1", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", "cookie-parser": "^1.4.6", "cron": "^3.1.6", "ioredis": "^5.3.2", @@ -1728,18 +1730,20 @@ } }, "node_modules/@multiversx/sdk-core": { - "version": "12.15.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-core/-/sdk-core-12.15.0.tgz", - "integrity": "sha512-PdjKxGeYBCDksKhsy/JSeH6dLUdK9RtLPbfk5nvO1+2fXJj9fmaGaM1347U8hqE30CVEYS/jl6alzuKbBS8TZg==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-core/-/sdk-core-13.2.1.tgz", + "integrity": "sha512-qnC4Q2x+lc7jw5GYja5yvRhqKaJ+2m95txNS6FwLXPb/MxW0ZwRZsAt4qByxOF5hpx6m9v3bJnKFFZn9VrHcNw==", "dependencies": { "@multiversx/sdk-transaction-decoder": "1.0.2", "bech32": "1.1.4", - "bignumber.js": "9.0.1", "blake2b": "2.1.3", "buffer": "6.0.3", - "json-duplicate-key-handle": "1.0.0", - "keccak": "3.0.2", - "protobufjs": "7.2.4" + "json-bigint": "1.0.0", + "keccak": "3.0.2" + }, + "peerDependencies": { + "bignumber.js": "^9.0.1", + "protobufjs": "^7.2.6" } }, "node_modules/@multiversx/sdk-native-auth-client": { @@ -1769,9 +1773,9 @@ "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" }, "node_modules/@multiversx/sdk-nestjs-auth": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-auth/-/sdk-nestjs-auth-3.7.0.tgz", - "integrity": "sha512-SpYwUR1MY1w5ad0Txj9X93jqtLLtPDowm9/J7abv+HWww2WxXqw1ZyRyWnhZafW7I+pQtqSHukS6kCXm9OOwmQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-auth/-/sdk-nestjs-auth-3.7.1.tgz", + "integrity": "sha512-k70auJ5INPmd1rKmV5L71R0vj79iNoZwDB1QN4gdp9jJGk56N/DpQlyiWG9OQHwG0ssQ1K3E7jqDZNj50fIL9Q==", "dependencies": { "@multiversx/sdk-core": "^13.1.0", "@multiversx/sdk-native-auth-server": "^1.0.17", @@ -1785,51 +1789,10 @@ "@nestjs/common": "^10.x" } }, - "node_modules/@multiversx/sdk-nestjs-auth/node_modules/@multiversx/sdk-core": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-core/-/sdk-core-13.1.0.tgz", - "integrity": "sha512-Z8lDPX4mKKD0QUtAqRzM0bf8zex3xCWRd5yYRLCxjW1F+jYg+9LjIQjkyvDSWGYJHY4IJeYqkORoS3gQG8NDbA==", - "dependencies": { - "@multiversx/sdk-transaction-decoder": "1.0.2", - "bech32": "1.1.4", - "blake2b": "2.1.3", - "buffer": "6.0.3", - "json-bigint": "1.0.0", - "keccak": "3.0.2" - }, - "peerDependencies": { - "bignumber.js": "^9.0.1", - "protobufjs": "^7.2.6" - } - }, - "node_modules/@multiversx/sdk-nestjs-auth/node_modules/protobufjs": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz", - "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==", - "hasInstallScript": true, - "peer": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/@multiversx/sdk-nestjs-cache": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-cache/-/sdk-nestjs-cache-3.7.0.tgz", - "integrity": "sha512-fl4oToEgXoJ8fsi47htG9QsIMcOukx972ECBntaNB++gUwbgGNpWhRxH/4y2t8CWNFsln9/MXBLGUQT6LPMaXQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-cache/-/sdk-nestjs-cache-3.7.1.tgz", + "integrity": "sha512-U5rKapubKMVfm3Muu1vA5qX45+Otv+v2n3SnVKfl4IZaWRdhtt6DS+MwFUbCNq0tHeKN/eLI5WzNE0UpunXaqA==", "dependencies": { "lru-cache": "^8.0.4", "moment": "^2.29.4", @@ -1846,9 +1809,9 @@ } }, "node_modules/@multiversx/sdk-nestjs-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-common/-/sdk-nestjs-common-3.7.0.tgz", - "integrity": "sha512-+g7lhCywHd6Zz/oIabw+RxdyJqMwzGKrl+IbofYCm2kpGz6tDiwmVi38SFmkb7wWJoVsKqLDn7G/XLuwdYylow==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-common/-/sdk-nestjs-common-3.7.1.tgz", + "integrity": "sha512-oayVorrB4HuBfxX6iKcI0zLc1QpZZKSWLxqD415Q/PiHcDEVwRds3w1na5r1oj3Wyw2iOKYmPlyQwx4nizv3pg==", "dependencies": { "@multiversx/sdk-core": "^13.1.0", "@multiversx/sdk-network-providers": "^2.4.3", @@ -1864,60 +1827,19 @@ "@nestjs/swagger": "^7.x" } }, - "node_modules/@multiversx/sdk-nestjs-common/node_modules/@multiversx/sdk-core": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-core/-/sdk-core-13.1.0.tgz", - "integrity": "sha512-Z8lDPX4mKKD0QUtAqRzM0bf8zex3xCWRd5yYRLCxjW1F+jYg+9LjIQjkyvDSWGYJHY4IJeYqkORoS3gQG8NDbA==", - "dependencies": { - "@multiversx/sdk-transaction-decoder": "1.0.2", - "bech32": "1.1.4", - "blake2b": "2.1.3", - "buffer": "6.0.3", - "json-bigint": "1.0.0", - "keccak": "3.0.2" - }, - "peerDependencies": { - "bignumber.js": "^9.0.1", - "protobufjs": "^7.2.6" - } - }, - "node_modules/@multiversx/sdk-nestjs-common/node_modules/protobufjs": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz", - "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==", - "hasInstallScript": true, - "peer": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/@multiversx/sdk-nestjs-elastic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-elastic/-/sdk-nestjs-elastic-3.7.0.tgz", - "integrity": "sha512-+IoknzKUMAde7WNRT2l+oP8h1mCsSRjk4eEftb8NPO4T8QpUAgIluDc9FOwmCAhfm/32BfFaJ9VvjZXJtcxTrQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-elastic/-/sdk-nestjs-elastic-3.7.1.tgz", + "integrity": "sha512-D2j4JEX203IrYh6dq38mRTHyWgF3NSjT8zhK4wmh2nXmC4kG51ZakVTvPO6rMY4LbEX+vA8tQAbeCREjxqs3YA==", "peerDependencies": { "@multiversx/sdk-nestjs-http": "^3.2.1", "@nestjs/common": "^10.x" } }, "node_modules/@multiversx/sdk-nestjs-http": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-http/-/sdk-nestjs-http-3.7.0.tgz", - "integrity": "sha512-RzZPiVxWbrLfPAFydZOHBcQyqKCLZ7bYpRo+K6xV6X/BbcHEXLUfp3sI7Cz7jsTMhUddxguarwcKYmCtY4j9EA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-http/-/sdk-nestjs-http-3.7.1.tgz", + "integrity": "sha512-cTXhAx2pfQ+XkNaBQUQRDy05M/ANJfueHI6ZJFYMXB4bHCuCFn3oJeb/nqFCKaa5OtNexmZTzxGP61hSS7MefQ==", "dependencies": { "@multiversx/sdk-native-auth-client": "^1.0.8", "agentkeepalive": "^4.3.0", @@ -1931,9 +1853,9 @@ } }, "node_modules/@multiversx/sdk-nestjs-monitoring": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-monitoring/-/sdk-nestjs-monitoring-3.7.0.tgz", - "integrity": "sha512-hSFHIJKoraoZ8gaZo+Y/R9uTF8JGEOU6PmAW8jAgYUV+QyqaG2eFRrN8ERyDv0vELa7XCqMgMnHzkd8Sydzwlw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-monitoring/-/sdk-nestjs-monitoring-3.7.1.tgz", + "integrity": "sha512-EWdVystEdcUe+4Ixo8E2yT2x52M+cL7RIGkEBzyBO8zKCEy2eTLOGaXaXFi61qpVWAwMJFzew5ZAZ2kJnEEuIQ==", "dependencies": { "prom-client": "^14.0.1", "winston": "^3.7.2", @@ -1944,9 +1866,9 @@ } }, "node_modules/@multiversx/sdk-nestjs-rabbitmq": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-rabbitmq/-/sdk-nestjs-rabbitmq-3.7.0.tgz", - "integrity": "sha512-CWCvPSLuEJ+i+2z3DDp9qICFj9NJ5koMMq2gXIvHp1j1ypoMxzX+GW+JzGvDoRA6NecfAI2pSlURLzljnYb4bg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-rabbitmq/-/sdk-nestjs-rabbitmq-3.7.1.tgz", + "integrity": "sha512-tsW4lzO3wFKBanDTWXqKXKk++bGRROtRkaNd3J9BDXjREK5peyIDJZi3upgGnX2CuxmSinc3gccBUomkYR7fzg==", "dependencies": { "@golevelup/nestjs-rabbitmq": "4.0.0", "uuid": "^8.3.2" @@ -1957,9 +1879,9 @@ } }, "node_modules/@multiversx/sdk-nestjs-redis": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-redis/-/sdk-nestjs-redis-3.7.0.tgz", - "integrity": "sha512-6VwFGCELTZYvnkxCD7cDOKs7FSTsLSjRfDN2klhdsYFdp5fFqAHOH1uNyrzg1HReeQayJ7PPRatEPBI7fj9/xg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-redis/-/sdk-nestjs-redis-3.7.1.tgz", + "integrity": "sha512-xq0bpCd3DbRcEEtXzJntBm0WUEoFjZdR85VK3XbOJCMPZVP/8HoQeyocIDSzj431pAL5R3NWuUKRz7qy2TehXw==", "dependencies": { "ioredis": "^5.2.3" }, @@ -2772,27 +2694,32 @@ "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "peer": true }, "node_modules/@protobufjs/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "peer": true }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "peer": true }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "peer": true }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "peer": true, "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -2801,27 +2728,32 @@ "node_modules/@protobufjs/float": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "peer": true }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "peer": true }, "node_modules/@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "peer": true }, "node_modules/@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "peer": true }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "peer": true }, "node_modules/@sinclair/typebox": { "version": "0.27.8", @@ -3196,6 +3128,11 @@ "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" }, + "node_modules/@types/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==" + }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", @@ -4101,11 +4038,6 @@ "@babel/core": "^7.0.0" } }, - "node_modules/backslash": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/backslash/-/backslash-0.2.0.tgz", - "integrity": "sha512-Avs+8FUZ1HF/VFP4YWwHQZSGzRPm37ukU1JQYQWijuHhtXdOuAzcZ8PcAzfIw898a8PyBzdn+RtnKA6MzW0X2A==" - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4655,6 +4587,21 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, + "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==" + }, + "node_modules/class-validator": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", + "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", + "dependencies": { + "@types/validator": "^13.11.8", + "libphonenumber-js": "^1.10.53", + "validator": "^13.9.0" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -8447,14 +8394,6 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, - "node_modules/json-duplicate-key-handle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-duplicate-key-handle/-/json-duplicate-key-handle-1.0.0.tgz", - "integrity": "sha512-OLIxL+UpfwUsqcLX3i6Z51ChTou/Vje+6bSeGUSubj96dF/SfjObDprLy++ZXYH07KITuEzsXS7PX7e/BGf4jw==", - "dependencies": { - "backslash": "^0.2.0" - } - }, "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", @@ -8631,6 +8570,11 @@ "node": ">= 0.8.0" } }, + "node_modules/libphonenumber-js": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.4.tgz", + "integrity": "sha512-F/R50HQuWWYcmU/esP5jrH5LiWYaN7DpN0a/99U8+mnGGtnx8kmRE+649dQh3v+CowXXZc8vpkf5AmYkO0AQ7Q==" + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -10047,10 +9991,11 @@ } }, "node_modules/protobufjs": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", - "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", + "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", "hasInstallScript": true, + "peer": true, "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -12182,6 +12127,14 @@ "node": ">=10.12.0" } }, + "node_modules/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -13901,18 +13854,16 @@ "integrity": "sha512-c0tIdQUnbBLSt6NYU+OpeGPYdL0+GV547HeHT8Xc0BKQ7Cj0v82QUoA2QRtWrR1G4MNZmLsIacZSsf6DrIS2Bw==" }, "@multiversx/sdk-core": { - "version": "12.15.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-core/-/sdk-core-12.15.0.tgz", - "integrity": "sha512-PdjKxGeYBCDksKhsy/JSeH6dLUdK9RtLPbfk5nvO1+2fXJj9fmaGaM1347U8hqE30CVEYS/jl6alzuKbBS8TZg==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-core/-/sdk-core-13.2.1.tgz", + "integrity": "sha512-qnC4Q2x+lc7jw5GYja5yvRhqKaJ+2m95txNS6FwLXPb/MxW0ZwRZsAt4qByxOF5hpx6m9v3bJnKFFZn9VrHcNw==", "requires": { "@multiversx/sdk-transaction-decoder": "1.0.2", "bech32": "1.1.4", - "bignumber.js": "9.0.1", "blake2b": "2.1.3", "buffer": "6.0.3", - "json-duplicate-key-handle": "1.0.0", - "keccak": "3.0.2", - "protobufjs": "7.2.4" + "json-bigint": "1.0.0", + "keccak": "3.0.2" } }, "@multiversx/sdk-native-auth-client": { @@ -13941,55 +13892,20 @@ } }, "@multiversx/sdk-nestjs-auth": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-auth/-/sdk-nestjs-auth-3.7.0.tgz", - "integrity": "sha512-SpYwUR1MY1w5ad0Txj9X93jqtLLtPDowm9/J7abv+HWww2WxXqw1ZyRyWnhZafW7I+pQtqSHukS6kCXm9OOwmQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-auth/-/sdk-nestjs-auth-3.7.1.tgz", + "integrity": "sha512-k70auJ5INPmd1rKmV5L71R0vj79iNoZwDB1QN4gdp9jJGk56N/DpQlyiWG9OQHwG0ssQ1K3E7jqDZNj50fIL9Q==", "requires": { "@multiversx/sdk-core": "^13.1.0", "@multiversx/sdk-native-auth-server": "^1.0.17", "@multiversx/sdk-wallet": "^4.2.0", "jsonwebtoken": "^9.0.0" - }, - "dependencies": { - "@multiversx/sdk-core": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-core/-/sdk-core-13.1.0.tgz", - "integrity": "sha512-Z8lDPX4mKKD0QUtAqRzM0bf8zex3xCWRd5yYRLCxjW1F+jYg+9LjIQjkyvDSWGYJHY4IJeYqkORoS3gQG8NDbA==", - "requires": { - "@multiversx/sdk-transaction-decoder": "1.0.2", - "bech32": "1.1.4", - "blake2b": "2.1.3", - "buffer": "6.0.3", - "json-bigint": "1.0.0", - "keccak": "3.0.2" - } - }, - "protobufjs": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz", - "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==", - "peer": true, - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - } - } } }, "@multiversx/sdk-nestjs-cache": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-cache/-/sdk-nestjs-cache-3.7.0.tgz", - "integrity": "sha512-fl4oToEgXoJ8fsi47htG9QsIMcOukx972ECBntaNB++gUwbgGNpWhRxH/4y2t8CWNFsln9/MXBLGUQT6LPMaXQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-cache/-/sdk-nestjs-cache-3.7.1.tgz", + "integrity": "sha512-U5rKapubKMVfm3Muu1vA5qX45+Otv+v2n3SnVKfl4IZaWRdhtt6DS+MwFUbCNq0tHeKN/eLI5WzNE0UpunXaqA==", "requires": { "lru-cache": "^8.0.4", "moment": "^2.29.4", @@ -13999,62 +13915,27 @@ } }, "@multiversx/sdk-nestjs-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-common/-/sdk-nestjs-common-3.7.0.tgz", - "integrity": "sha512-+g7lhCywHd6Zz/oIabw+RxdyJqMwzGKrl+IbofYCm2kpGz6tDiwmVi38SFmkb7wWJoVsKqLDn7G/XLuwdYylow==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-common/-/sdk-nestjs-common-3.7.1.tgz", + "integrity": "sha512-oayVorrB4HuBfxX6iKcI0zLc1QpZZKSWLxqD415Q/PiHcDEVwRds3w1na5r1oj3Wyw2iOKYmPlyQwx4nizv3pg==", "requires": { "@multiversx/sdk-core": "^13.1.0", "@multiversx/sdk-network-providers": "^2.4.3", "nest-winston": "^1.6.2", "uuid": "^8.3.2", "winston": "^3.7.2" - }, - "dependencies": { - "@multiversx/sdk-core": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-core/-/sdk-core-13.1.0.tgz", - "integrity": "sha512-Z8lDPX4mKKD0QUtAqRzM0bf8zex3xCWRd5yYRLCxjW1F+jYg+9LjIQjkyvDSWGYJHY4IJeYqkORoS3gQG8NDbA==", - "requires": { - "@multiversx/sdk-transaction-decoder": "1.0.2", - "bech32": "1.1.4", - "blake2b": "2.1.3", - "buffer": "6.0.3", - "json-bigint": "1.0.0", - "keccak": "3.0.2" - } - }, - "protobufjs": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz", - "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==", - "peer": true, - "requires": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - } - } } }, "@multiversx/sdk-nestjs-elastic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-elastic/-/sdk-nestjs-elastic-3.7.0.tgz", - "integrity": "sha512-+IoknzKUMAde7WNRT2l+oP8h1mCsSRjk4eEftb8NPO4T8QpUAgIluDc9FOwmCAhfm/32BfFaJ9VvjZXJtcxTrQ==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-elastic/-/sdk-nestjs-elastic-3.7.1.tgz", + "integrity": "sha512-D2j4JEX203IrYh6dq38mRTHyWgF3NSjT8zhK4wmh2nXmC4kG51ZakVTvPO6rMY4LbEX+vA8tQAbeCREjxqs3YA==", "requires": {} }, "@multiversx/sdk-nestjs-http": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-http/-/sdk-nestjs-http-3.7.0.tgz", - "integrity": "sha512-RzZPiVxWbrLfPAFydZOHBcQyqKCLZ7bYpRo+K6xV6X/BbcHEXLUfp3sI7Cz7jsTMhUddxguarwcKYmCtY4j9EA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-http/-/sdk-nestjs-http-3.7.1.tgz", + "integrity": "sha512-cTXhAx2pfQ+XkNaBQUQRDy05M/ANJfueHI6ZJFYMXB4bHCuCFn3oJeb/nqFCKaa5OtNexmZTzxGP61hSS7MefQ==", "requires": { "@multiversx/sdk-native-auth-client": "^1.0.8", "agentkeepalive": "^4.3.0", @@ -14062,9 +13943,9 @@ } }, "@multiversx/sdk-nestjs-monitoring": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-monitoring/-/sdk-nestjs-monitoring-3.7.0.tgz", - "integrity": "sha512-hSFHIJKoraoZ8gaZo+Y/R9uTF8JGEOU6PmAW8jAgYUV+QyqaG2eFRrN8ERyDv0vELa7XCqMgMnHzkd8Sydzwlw==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-monitoring/-/sdk-nestjs-monitoring-3.7.1.tgz", + "integrity": "sha512-EWdVystEdcUe+4Ixo8E2yT2x52M+cL7RIGkEBzyBO8zKCEy2eTLOGaXaXFi61qpVWAwMJFzew5ZAZ2kJnEEuIQ==", "requires": { "prom-client": "^14.0.1", "winston": "^3.7.2", @@ -14072,18 +13953,18 @@ } }, "@multiversx/sdk-nestjs-rabbitmq": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-rabbitmq/-/sdk-nestjs-rabbitmq-3.7.0.tgz", - "integrity": "sha512-CWCvPSLuEJ+i+2z3DDp9qICFj9NJ5koMMq2gXIvHp1j1ypoMxzX+GW+JzGvDoRA6NecfAI2pSlURLzljnYb4bg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-rabbitmq/-/sdk-nestjs-rabbitmq-3.7.1.tgz", + "integrity": "sha512-tsW4lzO3wFKBanDTWXqKXKk++bGRROtRkaNd3J9BDXjREK5peyIDJZi3upgGnX2CuxmSinc3gccBUomkYR7fzg==", "requires": { "@golevelup/nestjs-rabbitmq": "4.0.0", "uuid": "^8.3.2" } }, "@multiversx/sdk-nestjs-redis": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-redis/-/sdk-nestjs-redis-3.7.0.tgz", - "integrity": "sha512-6VwFGCELTZYvnkxCD7cDOKs7FSTsLSjRfDN2klhdsYFdp5fFqAHOH1uNyrzg1HReeQayJ7PPRatEPBI7fj9/xg==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-nestjs-redis/-/sdk-nestjs-redis-3.7.1.tgz", + "integrity": "sha512-xq0bpCd3DbRcEEtXzJntBm0WUEoFjZdR85VK3XbOJCMPZVP/8HoQeyocIDSzj431pAL5R3NWuUKRz7qy2TehXw==", "requires": { "ioredis": "^5.2.3" } @@ -14588,27 +14469,32 @@ "@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "peer": true }, "@protobufjs/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "peer": true }, "@protobufjs/codegen": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "peer": true }, "@protobufjs/eventemitter": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "peer": true }, "@protobufjs/fetch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "peer": true, "requires": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -14617,27 +14503,32 @@ "@protobufjs/float": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "peer": true }, "@protobufjs/inquire": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "peer": true }, "@protobufjs/path": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "peer": true }, "@protobufjs/pool": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "peer": true }, "@protobufjs/utf8": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "peer": true }, "@sinclair/typebox": { "version": "0.27.8", @@ -15012,6 +14903,11 @@ "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" }, + "@types/validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==" + }, "@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", @@ -15689,11 +15585,6 @@ "babel-preset-current-node-syntax": "^1.0.0" } }, - "backslash": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/backslash/-/backslash-0.2.0.tgz", - "integrity": "sha512-Avs+8FUZ1HF/VFP4YWwHQZSGzRPm37ukU1JQYQWijuHhtXdOuAzcZ8PcAzfIw898a8PyBzdn+RtnKA6MzW0X2A==" - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -16093,6 +15984,21 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, + "class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "class-validator": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz", + "integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==", + "requires": { + "@types/validator": "^13.11.8", + "libphonenumber-js": "^1.10.53", + "validator": "^13.9.0" + } + }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -18940,14 +18846,6 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "dev": true }, - "json-duplicate-key-handle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-duplicate-key-handle/-/json-duplicate-key-handle-1.0.0.tgz", - "integrity": "sha512-OLIxL+UpfwUsqcLX3i6Z51ChTou/Vje+6bSeGUSubj96dF/SfjObDprLy++ZXYH07KITuEzsXS7PX7e/BGf4jw==", - "requires": { - "backslash": "^0.2.0" - } - }, "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", @@ -19095,6 +18993,11 @@ "type-check": "~0.4.0" } }, + "libphonenumber-js": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.4.tgz", + "integrity": "sha512-F/R50HQuWWYcmU/esP5jrH5LiWYaN7DpN0a/99U8+mnGGtnx8kmRE+649dQh3v+CowXXZc8vpkf5AmYkO0AQ7Q==" + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -20124,9 +20027,10 @@ } }, "protobufjs": { - "version": "7.2.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz", - "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==", + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.3.2.tgz", + "integrity": "sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==", + "peer": true, "requires": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -21612,6 +21516,11 @@ "convert-source-map": "^2.0.0" } }, + "validator": { + "version": "13.12.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz", + "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/package.json b/package.json index 026667f..d991c51 100644 --- a/package.json +++ b/package.json @@ -9,12 +9,14 @@ "prebuild": "rimraf dist", "build": "nest build", "build:all": "nest build api && nest build transactions-processor && nest build cache-warmer && nest build queue-worker && nest build common", + "build:infra": "npm run build:all && npm run copy-config-infra", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "start:api": "cross-env NODE_APP=api npm run start", "start:cache-warmer": "cross-env NODE_APP=cache-warmer npm run start", "start:queue-worker": "cross-env NODE_APP=queue-worker npm run start", "start:transactions-processor": "cross-env NODE_APP=transactions-processor npm run start", "start": "npm run copy-config && npm run nest-start", + "copy-config-infra": "mkdir -p dist/config && cp .multiversx/config/config.yaml dist/config/config.yaml && cp config/schema.yaml dist/config/schema.yaml", "copy-config": "mkdir -p ./apps/$NODE_APP/config && cp ./config/config.yaml ./apps/$NODE_APP/config/config.yaml && cp ./config/schema.yaml ./apps/$NODE_APP/config/schema.yaml", "nest-start": "sh -c 'nest start $NODE_APP $( [ \"$NODE_WATCH\" = \"true\" ] && echo \"--watch\" ) $( [ \"$NODE_DEBUG\" = \"true\" ] && echo \"--debug\" )'", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\"", @@ -23,20 +25,21 @@ "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "jest --config ./apps/api/test/jest-e2e.json" + "test:e2e": "jest --config ./apps/api/test/jest-e2e.json", + "generate-types": "mxnest schema types config/schema.yaml libs/common/src/entities/config.d.ts" }, "dependencies": { - "@multiversx/sdk-core": "^12.15.0", - "@multiversx/sdk-nestjs-auth": "3.7.0", - "@multiversx/sdk-nestjs-cache": "3.7.0", - "@multiversx/sdk-nestjs-common": "3.7.0", - "@multiversx/sdk-nestjs-elastic": "3.7.0", - "@multiversx/sdk-nestjs-http": "3.7.0", - "@multiversx/sdk-nestjs-monitoring": "3.7.0", - "@multiversx/sdk-nestjs-rabbitmq": "3.7.0", - "@multiversx/sdk-nestjs-redis": "3.7.0", - "@multiversx/sdk-network-providers": "^2.2.0", - "@multiversx/sdk-transaction-processor": "^0.1.30", + "@multiversx/sdk-core": "^13.2.1", + "@multiversx/sdk-nestjs-auth": "3.7.1", + "@multiversx/sdk-nestjs-cache": "3.7.1", + "@multiversx/sdk-nestjs-common": "3.7.1", + "@multiversx/sdk-nestjs-elastic": "3.7.1", + "@multiversx/sdk-nestjs-http": "3.7.1", + "@multiversx/sdk-nestjs-monitoring": "3.7.1", + "@multiversx/sdk-nestjs-rabbitmq": "3.7.1", + "@multiversx/sdk-nestjs-redis": "3.7.1", + "@multiversx/sdk-network-providers": "^2.4.3", + "@multiversx/sdk-transaction-processor": "^0.1.33", "@nestjs/bull": "^10.0.1", "@nestjs/common": "10.2.0", "@nestjs/config": "3.0.1", @@ -52,6 +55,8 @@ "agentkeepalive": "^4.3.0", "bull": "^4.10.4", "cache-manager": "^5.2.1", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", "cookie-parser": "^1.4.6", "cron": "^3.1.6", "ioredis": "^5.3.2",