diff --git a/.env.sample b/.env.sample index affdb568a..581ba4e30 100644 --- a/.env.sample +++ b/.env.sample @@ -153,4 +153,15 @@ SCHEMA_FILE_SERVER_TOKEN=xxxxxxxx // Please provide schema file server token for FILEUPLOAD_CACHE_TTL= //Provide file upload cache ttl -FIELD_UPLOAD_SIZE= //Provide field upload size \ No newline at end of file +FIELD_UPLOAD_SIZE= //Provide field upload size + +ORGANIZATION=credebl +CONTEXT=platform +APP=api + +CONSOLE_LOG=true +ELK_LOG=true +LOG_LEVEL=debug +ELK_LOG_PATH = "http://localhost:9200/" +ELK_USERNAME=elastic +ELK_PASSWORD=xxxxxx diff --git a/apps/agent-provisioning/src/agent-provisioning.module.ts b/apps/agent-provisioning/src/agent-provisioning.module.ts index c088be39f..8733f3c5a 100644 --- a/apps/agent-provisioning/src/agent-provisioning.module.ts +++ b/apps/agent-provisioning/src/agent-provisioning.module.ts @@ -4,10 +4,16 @@ import { AgentProvisioningService } from './agent-provisioning.service'; import { ClientsModule, Transport } from '@nestjs/microservices'; import { ConfigModule } from '@nestjs/config'; import { getNatsOptions } from '@credebl/common/nats.config'; -import { CommonConstants } from '@credebl/common/common.constant'; +import { CommonConstants, MICRO_SERVICE_NAME } from '@credebl/common/common.constant'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; @Module({ imports: [ ConfigModule.forRoot(), + GlobalConfigModule, + LoggerModule, PlatformConfig, ContextInterceptorModule, ClientsModule.register([ { name: 'NATS_CLIENT', @@ -18,6 +24,12 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [AgentProvisioningController], - providers: [AgentProvisioningService, Logger] + providers: [ + AgentProvisioningService, Logger, + { + provide: MICRO_SERVICE_NAME, + useValue: 'Agent-provisioning' // Provide the name directly + } + ] }) export class AgentProvisioningModule { } diff --git a/apps/agent-provisioning/src/main.ts b/apps/agent-provisioning/src/main.ts index 4002bc54c..4e9a61f80 100644 --- a/apps/agent-provisioning/src/main.ts +++ b/apps/agent-provisioning/src/main.ts @@ -5,6 +5,7 @@ import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { AgentProvisioningModule } from './agent-provisioning.module'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; const logger = new Logger(); async function bootstrap(): Promise { @@ -13,6 +14,7 @@ async function bootstrap(): Promise { transport: Transport.NATS, options: getNatsOptions(CommonConstants.AGENT_PROVISIONING, process.env.AGENT_PROVISIONING_NKEY_SEED) }); + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/agent-service/src/agent-service.module.ts b/apps/agent-service/src/agent-service.module.ts index c2fca43bd..65a11b9b6 100644 --- a/apps/agent-service/src/agent-service.module.ts +++ b/apps/agent-service/src/agent-service.module.ts @@ -11,11 +11,18 @@ import { ConnectionRepository } from 'apps/connection/src/connection.repository' import { CacheModule } from '@nestjs/cache-manager'; import { getNatsOptions } from '@credebl/common/nats.config'; import { UserActivityRepository } from 'libs/user-activity/repositories'; -import { CommonConstants } from '@credebl/common/common.constant'; +import { CommonConstants, MICRO_SERVICE_NAME } from '@credebl/common/common.constant'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ ConfigModule.forRoot(), + GlobalConfigModule, + LoggerModule, PlatformConfig, ContextInterceptorModule, ClientsModule.register([ { name: 'NATS_CLIENT', @@ -34,7 +41,12 @@ import { CommonConstants } from '@credebl/common/common.constant'; Logger, ConnectionService, ConnectionRepository, - UserActivityRepository + UserActivityRepository, + { + provide: MICRO_SERVICE_NAME, + useValue: 'Agent-service' // Provide the name directly + }, + NATSClient ], exports: [AgentServiceService, AgentServiceRepository, AgentServiceModule] }) diff --git a/apps/agent-service/src/agent-service.service.ts b/apps/agent-service/src/agent-service.service.ts index 34f9f7c3c..047a729b4 100644 --- a/apps/agent-service/src/agent-service.service.ts +++ b/apps/agent-service/src/agent-service.service.ts @@ -76,6 +76,8 @@ import { InvitationMessage } from '@credebl/common/interfaces/agent-service.inte import * as CryptoJS from 'crypto-js'; import { UserActivityRepository } from 'libs/user-activity/repositories'; import { PrismaService } from '@credebl/prisma-service'; +import { NATSClient } from 'libs/common/NATSClient'; +import { from } from 'rxjs'; @Injectable() @WebSocketGateway() @@ -89,7 +91,8 @@ export class AgentServiceService { private readonly connectionService: ConnectionService, @Inject('NATS_CLIENT') private readonly agentServiceProxy: ClientProxy, @Inject(CACHE_MANAGER) private cacheService: Cache, - private readonly userActivityRepository: UserActivityRepository + private readonly userActivityRepository: UserActivityRepository, + private natsClient : NATSClient ) {} async ReplaceAt(input, search, replace, start, end): Promise { @@ -1896,8 +1899,8 @@ export class AgentServiceService { response: string; }> { try { - return this.agentServiceProxy - .send(pattern, payload) + return from(this.natsClient + .send(this.agentServiceProxy, pattern, payload)) .pipe(map((response) => ({ response }))) .toPromise() .catch((error) => { diff --git a/apps/agent-service/src/main.ts b/apps/agent-service/src/main.ts index 8b8b7441f..292253c1c 100644 --- a/apps/agent-service/src/main.ts +++ b/apps/agent-service/src/main.ts @@ -8,6 +8,7 @@ import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; import { Ledgers } from '@credebl/enum/enum'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; const logger = new Logger(); @@ -18,6 +19,7 @@ async function bootstrap(): Promise { options: getNatsOptions(CommonConstants.AGENT_SERVICE, process.env.AGENT_SERVICE_NKEY_SEED) }); + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/api-gateway/src/agent-service/agent-service.module.ts b/apps/api-gateway/src/agent-service/agent-service.module.ts index 0d24cd9da..37859b53b 100644 --- a/apps/api-gateway/src/agent-service/agent-service.module.ts +++ b/apps/api-gateway/src/agent-service/agent-service.module.ts @@ -8,6 +8,7 @@ import { AgentController } from './agent-service.controller'; import { AgentService } from './agent-service.service'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -24,6 +25,6 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [AgentController], - providers: [AgentService, CommonService] + providers: [AgentService, CommonService, NATSClient] }) export class AgentModule { } diff --git a/apps/api-gateway/src/agent-service/agent-service.service.ts b/apps/api-gateway/src/agent-service/agent-service.service.ts index e3efc4205..eab8b8523 100644 --- a/apps/api-gateway/src/agent-service/agent-service.service.ts +++ b/apps/api-gateway/src/agent-service/agent-service.service.ts @@ -9,11 +9,13 @@ import { AgentStatus } from './interface/agent-service.interface'; import { CreateDidDto } from './dto/create-did.dto'; import { CreateWalletDto } from './dto/create-wallet.dto'; import { AgentConfigureDto } from './dto/agent-configure.dto'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class AgentService extends BaseService { constructor( - @Inject('NATS_CLIENT') private readonly agentServiceProxy: ClientProxy + @Inject('NATS_CLIENT') private readonly agentServiceProxy: ClientProxy, + private natsClient : NATSClient ) { super('AgentService'); } @@ -28,34 +30,34 @@ export class AgentService extends BaseService { const payload = { agentSpinupDto, user }; // NATS call - return this.sendNatsMessage(this.agentServiceProxy, 'agent-spinup', payload); + return this.natsClient.sendNatsMessage(this.agentServiceProxy, 'agent-spinup', payload); } async createTenant(createTenantDto: CreateTenantDto, user: user): Promise { const payload = { createTenantDto, user }; // NATS call - return this.sendNatsMessage(this.agentServiceProxy, 'create-tenant', payload); + return this.natsClient.sendNatsMessage(this.agentServiceProxy, 'create-tenant', payload); } async createDid(createDidDto: CreateDidDto, orgId:string, user: user): Promise { const payload = { createDidDto, orgId, user }; // NATS call - return this.sendNatsMessage(this.agentServiceProxy, 'create-did', payload); + return this.natsClient.sendNatsMessage(this.agentServiceProxy, 'create-did', payload); } async createWallet(createWalletDto: CreateWalletDto, user: user): Promise { const payload = { createWalletDto, user }; // NATS call - return this.sendNatsMessage(this.agentServiceProxy, 'create-wallet', payload); + return this.natsClient.sendNatsMessage(this.agentServiceProxy, 'create-wallet', payload); } async getAgentHealth(user: user, orgId:string): Promise { const payload = { user, orgId }; // NATS call - return this.sendNatsMessage(this.agentServiceProxy, 'agent-health', payload); + return this.natsClient.sendNatsMessage(this.agentServiceProxy, 'agent-health', payload); } @@ -63,28 +65,28 @@ export class AgentService extends BaseService { const payload = { user }; // NATS call - return this.sendNatsMessage(this.agentServiceProxy, 'get-ledger-config', payload); + return this.natsClient.sendNatsMessage(this.agentServiceProxy, 'get-ledger-config', payload); } async createSecp256k1KeyPair(orgId:string): Promise { const payload = {orgId}; // NATS call - return this.sendNatsMessage(this.agentServiceProxy, 'polygon-create-keys', payload); + return this.natsClient.sendNatsMessage(this.agentServiceProxy, 'polygon-create-keys', payload); } async agentConfigure(agentConfigureDto: AgentConfigureDto, user: user): Promise { const payload = { agentConfigureDto, user }; // NATS call - return this.sendNatsMessage(this.agentServiceProxy, 'agent-configure', payload); + return this.natsClient.sendNatsMessage(this.agentServiceProxy, 'agent-configure', payload); } async deleteWallet(orgId: string, user: user): Promise { const payload = { orgId, user }; // NATS call - return this.sendNatsMessage(this.agentServiceProxy, 'delete-wallet', payload); + return this.natsClient.sendNatsMessage(this.agentServiceProxy, 'delete-wallet', payload); } } \ No newline at end of file diff --git a/apps/api-gateway/src/agent/agent.module.ts b/apps/api-gateway/src/agent/agent.module.ts index 224670431..83e916b3c 100644 --- a/apps/api-gateway/src/agent/agent.module.ts +++ b/apps/api-gateway/src/agent/agent.module.ts @@ -7,6 +7,7 @@ import { CommonModule } from '../../../../libs/common/src/common.module'; import { CommonService } from '../../../../libs/common/src/common.service'; import { ConfigModule } from '@nestjs/config'; import { commonNatsOptions } from 'libs/service/nats.options'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -21,6 +22,6 @@ import { commonNatsOptions } from 'libs/service/nats.options'; ]) ], controllers: [AgentController], - providers: [AgentService, CommonService] + providers: [AgentService, CommonService, NATSClient] }) export class AgentModule { } diff --git a/apps/api-gateway/src/agent/agent.service.ts b/apps/api-gateway/src/agent/agent.service.ts index d4050ed93..4fcbf72eb 100644 --- a/apps/api-gateway/src/agent/agent.service.ts +++ b/apps/api-gateway/src/agent/agent.service.ts @@ -8,11 +8,13 @@ import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { WalletDetailsDto } from '../dtos/wallet-details.dto'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class AgentService extends BaseService { constructor( - @Inject('NATS_CLIENT') private readonly agentServiceProxy: ClientProxy + @Inject('NATS_CLIENT') private readonly agentServiceProxy: ClientProxy, + private natsClient : NATSClient ) { super('AgentService'); } @@ -27,7 +29,7 @@ export class AgentService extends BaseService { getAllDid(_public: boolean, verkey: string, did: string, user: any) { this.logger.log('**** getAllDid called...'); const payload = { _public, verkey, did, user }; - return this.sendNats(this.agentServiceProxy, 'get-all-did', payload); + return this.natsClient.sendNats(this.agentServiceProxy, 'get-all-did', payload); } /** @@ -35,13 +37,13 @@ export class AgentService extends BaseService { */ createLocalDid(user: any) { this.logger.log('**** createLocalDid called...'); - return this.sendNats(this.agentServiceProxy, 'create-local-did', user); + return this.natsClient.sendNats(this.agentServiceProxy, 'create-local-did', user); } async walletProvision(walletUserDetails: WalletDetailsDto, user: any) { this.logger.log(`**** walletProvision called...${JSON.stringify(walletUserDetails)}`); const payload = { walletUserDetails, user }; - return await this.sendNats(this.agentServiceProxy, 'wallet-provision', payload); + return await this.natsClient.sendNats(this.agentServiceProxy, 'wallet-provision', payload); } /** @@ -49,7 +51,7 @@ export class AgentService extends BaseService { */ getPublicDid(user: any) { this.logger.log('**** getPublicDid called...'); - return this.sendNats(this.agentServiceProxy, 'get-public-did', user); + return this.natsClient.sendNats(this.agentServiceProxy, 'get-public-did', user); } /** @@ -59,7 +61,7 @@ export class AgentService extends BaseService { assignPublicDid(id: number, user: any) { this.logger.log('**** assignPublicDid called...'); const payload = { id, user }; - return this.sendNats(this.agentServiceProxy, 'assign-public-did-org', payload); + return this.natsClient.sendNats(this.agentServiceProxy, 'assign-public-did-org', payload); } @@ -73,28 +75,28 @@ export class AgentService extends BaseService { registerNym(id: string, user: any) { this.logger.log('**** registerNym called...'); const payload = { id, user }; - return this.sendNats(this.agentServiceProxy, 'register-nym-org', payload); + return this.natsClient.sendNats(this.agentServiceProxy, 'register-nym-org', payload); } restartStopAgent(action: string, orgId: string) { const payload = { action, orgId }; - return this.sendNats(this.agentServiceProxy, 'restart-stop-agent', payload); + return this.natsClient.sendNats(this.agentServiceProxy, 'restart-stop-agent', payload); } getAgentServerStatus(user) { - return this.sendNats(this.agentServiceProxy, 'get-agent-server-status', user); + return this.natsClient.sendNats(this.agentServiceProxy, 'get-agent-server-status', user); } pingServiceAgent() { this.logger.log('**** pingServiceAgent called...'); const payload = {}; - return this.sendNats(this.agentServiceProxy, 'ping-agent', payload); + return this.natsClient.sendNats(this.agentServiceProxy, 'ping-agent', payload); } agentSpinupStatus(items_per_page: number, page: number, search_text: string, agentStatus: string, sortValue: string, user: any) { this.logger.log('**** agentSpinupStatus called...'); const payload = { items_per_page, page, search_text, agentStatus, sortValue, user }; - return this.sendNats(this.agentServiceProxy, 'get-agent-spinup-status', payload); + return this.natsClient.sendNats(this.agentServiceProxy, 'get-agent-spinup-status', payload); } } diff --git a/apps/api-gateway/src/app.module.ts b/apps/api-gateway/src/app.module.ts index 2e86d2751..30b91e701 100644 --- a/apps/api-gateway/src/app.module.ts +++ b/apps/api-gateway/src/app.module.ts @@ -1,37 +1,43 @@ import { MiddlewareConsumer, Module, RequestMethod } from '@nestjs/common'; -import { AgentController } from './agent/agent.controller'; +import { ConfigModule } from '@nestjs/config'; +import { ClientsModule, Transport } from '@nestjs/microservices'; import { AgentModule } from './agent-service/agent-service.module'; +import { AgentController } from './agent/agent.controller'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { AuthzMiddleware } from './authz/authz.middleware'; import { AuthzModule } from './authz/authz.module'; -import { ClientsModule, Transport } from '@nestjs/microservices'; -import { ConfigModule } from '@nestjs/config'; import { CredentialDefinitionModule } from './credential-definition/credential-definition.module'; import { FidoModule } from './fido/fido.module'; import { IssuanceModule } from './issuance/issuance.module'; import { OrganizationModule } from './organization/organization.module'; import { PlatformModule } from './platform/platform.module'; -import { VerificationModule } from './verification/verification.module'; import { RevocationController } from './revocation/revocation.controller'; import { RevocationModule } from './revocation/revocation.module'; import { SchemaModule } from './schema/schema.module'; +import { VerificationModule } from './verification/verification.module'; // import { commonNatsOptions } from 'libs/service/nats.options'; -import { UserModule } from './user/user.module'; -import { ConnectionModule } from './connection/connection.module'; import { getNatsOptions } from '@credebl/common/nats.config'; +import { ContextModule } from '@credebl/context/contextModule'; +import { LoggerModule } from '@credebl/logger/logger.module'; import { CacheModule } from '@nestjs/cache-manager'; import * as redisStore from 'cache-manager-redis-store'; -import { WebhookModule } from './webhook/webhook.module'; -import { UtilitiesModule } from './utilities/utilities.module'; +import { ConnectionModule } from './connection/connection.module'; +import { EcosystemModule } from './ecosystem/ecosystem.module'; import { NotificationModule } from './notification/notification.module'; import { GeoLocationModule } from './geo-location/geo-location.module'; -import { CommonConstants } from '@credebl/common/common.constant'; +import { CommonConstants, MICRO_SERVICE_NAME } from '@credebl/common/common.constant'; import { CloudWalletModule } from './cloud-wallet/cloud-wallet.module'; +import { UserModule } from './user/user.module'; +import { UtilitiesModule } from './utilities/utilities.module'; +import { WebhookModule } from './webhook/webhook.module'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; @Module({ imports: [ ConfigModule.forRoot(), + ContextModule, PlatformConfig, LoggerModule, ClientsModule.register([ { name: 'NATS_CLIENT', @@ -54,12 +60,20 @@ import { CloudWalletModule } from './cloud-wallet/cloud-wallet.module'; UtilitiesModule, WebhookModule, NotificationModule, + GlobalConfigModule, + CacheModule.register({ store: redisStore, host: process.env.REDIS_HOST, port: process.env.REDIS_PORT }), GeoLocationModule, CloudWalletModule ], controllers: [AppController], - providers: [AppService] + providers: [ + AppService, + { + provide: MICRO_SERVICE_NAME, + useValue: 'APIGATEWAY' // Provide the microservice name here + } + ] }) export class AppModule { configure(userContext: MiddlewareConsumer): void { diff --git a/apps/api-gateway/src/authz/authz.module.ts b/apps/api-gateway/src/authz/authz.module.ts index 22683fbd8..358195fba 100644 --- a/apps/api-gateway/src/authz/authz.module.ts +++ b/apps/api-gateway/src/authz/authz.module.ts @@ -19,6 +19,7 @@ import { VerificationService } from '../verification/verification.service'; import { getNatsOptions } from '@credebl/common/nats.config'; import { OrganizationService } from '../organization/organization.service'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -42,13 +43,15 @@ import { CommonConstants } from '@credebl/common/common.constant'; AuthzService, MobileJwtStrategy, SocketGateway, + NATSClient, VerificationService, ConnectionService, AgentService, CommonService, UserService, SupabaseService, - OrganizationService + OrganizationService, + NATSClient ], exports: [ PassportModule, diff --git a/apps/api-gateway/src/authz/authz.service.ts b/apps/api-gateway/src/authz/authz.service.ts index 5603327c8..8589cab8f 100644 --- a/apps/api-gateway/src/authz/authz.service.ts +++ b/apps/api-gateway/src/authz/authz.service.ts @@ -13,6 +13,7 @@ import { IResetPasswordResponse, ISendVerificationEmail, ISignInUser, ISignUpUse import { ResetPasswordDto } from './dtos/reset-password.dto'; import { ForgotPasswordDto } from './dtos/forgot-password.dto'; import { ResetTokenPasswordDto } from './dtos/reset-token-password'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() @WebSocketGateway() @@ -20,7 +21,8 @@ export class AuthzService extends BaseService { //private logger = new Logger('AuthService'); @WebSocketServer() server; constructor( - @Inject('NATS_CLIENT') private readonly authServiceProxy: ClientProxy + @Inject('NATS_CLIENT') private readonly authServiceProxy: ClientProxy, + private natsClient : NATSClient ) { super('AuthzService'); @@ -28,42 +30,42 @@ export class AuthzService extends BaseService { // eslint-disable-next-line @typescript-eslint/no-explicit-any getUserByKeycloakUserId(keycloakUserId: string): Promise { - return this.sendNats(this.authServiceProxy, 'get-user-by-keycloakUserId', keycloakUserId); + return this.natsClient.sendNats(this.authServiceProxy, 'get-user-by-keycloakUserId', keycloakUserId); } async sendVerificationMail(userEmailVerification: UserEmailVerificationDto): Promise { const payload = { userEmailVerification }; - return this.sendNatsMessage(this.authServiceProxy, 'send-verification-mail', payload); + return this.natsClient.sendNatsMessage(this.authServiceProxy, 'send-verification-mail', payload); } async verifyEmail(param: EmailVerificationDto): Promise { const payload = { param }; - return this.sendNatsMessage(this.authServiceProxy, 'user-email-verification', payload); + return this.natsClient.sendNatsMessage(this.authServiceProxy, 'user-email-verification', payload); } async login(email: string, password?: string, isPasskey = false): Promise { const payload = { email, password, isPasskey }; - return this.sendNatsMessage(this.authServiceProxy, 'user-holder-login', payload); + return this.natsClient.sendNatsMessage(this.authServiceProxy, 'user-holder-login', payload); } async resetPassword(resetPasswordDto: ResetPasswordDto): Promise { - return this.sendNatsMessage(this.authServiceProxy, 'user-reset-password', resetPasswordDto); + return this.natsClient.sendNatsMessage(this.authServiceProxy, 'user-reset-password', resetPasswordDto); } async forgotPassword(forgotPasswordDto: ForgotPasswordDto): Promise { - return this.sendNatsMessage(this.authServiceProxy, 'user-forgot-password', forgotPasswordDto); + return this.natsClient.sendNatsMessage(this.authServiceProxy, 'user-forgot-password', forgotPasswordDto); } async resetNewPassword(resetTokenPasswordDto: ResetTokenPasswordDto): Promise { - return this.sendNatsMessage(this.authServiceProxy, 'user-set-token-password', resetTokenPasswordDto); + return this.natsClient.sendNatsMessage(this.authServiceProxy, 'user-set-token-password', resetTokenPasswordDto); } async refreshToken(refreshToken: string): Promise { - return this.sendNatsMessage(this.authServiceProxy, 'refresh-token-details', refreshToken); + return this.natsClient.sendNatsMessage(this.authServiceProxy, 'refresh-token-details', refreshToken); } async addUserDetails(userInfo: AddUserDetailsDto): Promise { const payload = { userInfo }; - return this.sendNatsMessage(this.authServiceProxy, 'add-user', payload); + return this.natsClient.sendNatsMessage(this.authServiceProxy, 'add-user', payload); } } \ No newline at end of file diff --git a/apps/api-gateway/src/cloud-wallet/cloud-wallet.module.ts b/apps/api-gateway/src/cloud-wallet/cloud-wallet.module.ts index 480b0bdf8..0756d6490 100644 --- a/apps/api-gateway/src/cloud-wallet/cloud-wallet.module.ts +++ b/apps/api-gateway/src/cloud-wallet/cloud-wallet.module.ts @@ -4,6 +4,7 @@ import { CloudWalletService } from './cloud-wallet.service'; import { Module } from '@nestjs/common'; import { ClientsModule, Transport } from '@nestjs/microservices'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -17,7 +18,7 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [CloudWalletController], - providers: [CloudWalletService] + providers: [CloudWalletService, NATSClient] }) export class CloudWalletModule { diff --git a/apps/api-gateway/src/cloud-wallet/cloud-wallet.service.ts b/apps/api-gateway/src/cloud-wallet/cloud-wallet.service.ts index b7ada713f..ca8d443f1 100644 --- a/apps/api-gateway/src/cloud-wallet/cloud-wallet.service.ts +++ b/apps/api-gateway/src/cloud-wallet/cloud-wallet.service.ts @@ -2,104 +2,106 @@ import { IAcceptOffer, ICreateCloudWallet, ICreateCloudWalletDid, IReceiveInvitation, IAcceptProofRequest, IProofRequestRes, ICloudBaseWalletConfigure, IGetProofPresentation, IGetProofPresentationById, IGetStoredWalletInfo, IStoredWalletDetails, IWalletDetailsForDidList, IConnectionDetailsById, ITenantDetail, ICredentialDetails, ICreateConnection, IConnectionInvitationResponse, GetAllCloudWalletConnections, IBasicMessage, IBasicMessageDetails } from '@credebl/common/interfaces/cloud-wallet.interface'; import { Inject, Injectable} from '@nestjs/common'; import { ClientProxy } from '@nestjs/microservices'; +import { NATSClient } from 'libs/common/NATSClient'; import { BaseService } from 'libs/service/base.service'; @Injectable() export class CloudWalletService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly cloudWalletServiceProxy: ClientProxy) { + constructor(@Inject('NATS_CLIENT') private readonly cloudWalletServiceProxy: ClientProxy, + private natsClient : NATSClient) { super('CloudWalletServiceProxy'); } configureBaseWallet( cloudBaseWalletConfigure: ICloudBaseWalletConfigure ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'configure-cloud-base-wallet', cloudBaseWalletConfigure); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'configure-cloud-base-wallet', cloudBaseWalletConfigure); } createConnection( createConnection: ICreateConnection ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'create-connection-by-holder', createConnection); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'create-connection-by-holder', createConnection); } acceptProofRequest( acceptProofRequest: IAcceptProofRequest ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'accept-proof-request-by-holder', acceptProofRequest); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'accept-proof-request-by-holder', acceptProofRequest); } getProofById( proofPresentationByIdPayload: IGetProofPresentationById ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'get-proof-by-proof-id-holder', proofPresentationByIdPayload); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'get-proof-by-proof-id-holder', proofPresentationByIdPayload); } getProofPresentation( proofPresentationPayload: IGetProofPresentation ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'get-proof-presentation-holder', proofPresentationPayload); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'get-proof-presentation-holder', proofPresentationPayload); } createCloudWallet( cloudWalletDetails: ICreateCloudWallet ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'create-cloud-wallet', cloudWalletDetails); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'create-cloud-wallet', cloudWalletDetails); } receiveInvitationByUrl( ReceiveInvitationDetails: IReceiveInvitation ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'receive-invitation-by-url', ReceiveInvitationDetails); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'receive-invitation-by-url', ReceiveInvitationDetails); } acceptOffer( acceptOfferDetails: IAcceptOffer ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'accept-credential-offer', acceptOfferDetails); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'accept-credential-offer', acceptOfferDetails); } createDid(createDidDetails: ICreateCloudWalletDid): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'create-cloud-wallet-did', createDidDetails); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'create-cloud-wallet-did', createDidDetails); } getDidList( walletDetails: IWalletDetailsForDidList ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'cloud-wallet-did-list', walletDetails); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'cloud-wallet-did-list', walletDetails); } getconnectionById( connectionDetails: IConnectionDetailsById ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'get-cloud-wallet-connection-by-id', connectionDetails); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'get-cloud-wallet-connection-by-id', connectionDetails); } getAllconnectionById( connectionDetails: GetAllCloudWalletConnections ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'get-all-cloud-wallet-connections-list-by-id', connectionDetails); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'get-all-cloud-wallet-connections-list-by-id', connectionDetails); } getCredentialList( tenantDetails: ITenantDetail ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'wallet-credential-by-id', tenantDetails); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'wallet-credential-by-id', tenantDetails); } getCredentialByCredentialRecordId( credentialDetails: ICredentialDetails ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'wallet-credential-by-record-id', credentialDetails); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'wallet-credential-by-record-id', credentialDetails); } getBasicMessageByConnectionId( connectionDetails: IBasicMessage ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'basic-message-list-by-connection-id', connectionDetails); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'basic-message-list-by-connection-id', connectionDetails); } sendBasicMessage( messageDetails: IBasicMessageDetails ): Promise { - return this.sendNatsMessage(this.cloudWalletServiceProxy, 'send-basic-message', messageDetails); + return this.natsClient.sendNatsMessage(this.cloudWalletServiceProxy, 'send-basic-message', messageDetails); } } diff --git a/apps/api-gateway/src/connection/connection.module.ts b/apps/api-gateway/src/connection/connection.module.ts index f8047bfd3..c6940c236 100644 --- a/apps/api-gateway/src/connection/connection.module.ts +++ b/apps/api-gateway/src/connection/connection.module.ts @@ -4,6 +4,7 @@ import { ConnectionService } from './connection.service'; import { Module } from '@nestjs/common'; import { ClientsModule, Transport } from '@nestjs/microservices'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -17,7 +18,7 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [ConnectionController], - providers: [ConnectionService] + providers: [ConnectionService, NATSClient] }) export class ConnectionModule { diff --git a/apps/api-gateway/src/connection/connection.service.ts b/apps/api-gateway/src/connection/connection.service.ts index 6f01533b0..fd788c10a 100644 --- a/apps/api-gateway/src/connection/connection.service.ts +++ b/apps/api-gateway/src/connection/connection.service.ts @@ -8,9 +8,11 @@ import { IConnectionList, IDeletedConnectionsRecord } from '@credebl/common/inte import { AgentConnectionSearchCriteria, IConnectionDetailsById, IConnectionSearchCriteria } from '../interfaces/IConnectionSearch.interface'; import { BasicMessageDto, QuestionDto } from './dtos/question-answer.dto'; import { user } from '@prisma/client'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class ConnectionService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly connectionServiceProxy: ClientProxy) { + constructor(@Inject('NATS_CLIENT') private readonly connectionServiceProxy: ClientProxy, + private natsClient : NATSClient) { super('ConnectionService'); } @@ -18,7 +20,7 @@ export class ConnectionService extends BaseService { questionDto: QuestionDto ): Promise { try { - return this.sendNatsMessage(this.connectionServiceProxy, 'send-question', questionDto); + return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'send-question', questionDto); } catch (error) { throw new RpcException(error.response); } @@ -39,7 +41,7 @@ export class ConnectionService extends BaseService { orgId: string ): Promise { const payload = { connectionDto, orgId }; - return this.sendNatsMessage(this.connectionServiceProxy, 'webhook-get-connection', payload); + return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'webhook-get-connection', payload); } getUrl(referenceId: string): Promise<{ @@ -47,7 +49,7 @@ export class ConnectionService extends BaseService { }> { try { const connectionDetails = { referenceId }; - return this.sendNats(this.connectionServiceProxy, 'get-connection-url', connectionDetails); + return this.natsClient.sendNats(this.connectionServiceProxy, 'get-connection-url', connectionDetails); } catch (error) { throw new RpcException(error.response); } @@ -59,7 +61,7 @@ export class ConnectionService extends BaseService { orgId: string ): Promise { const payload = { connectionSearchCriteria, user, orgId }; - return this.sendNatsMessage(this.connectionServiceProxy, 'get-all-connections', payload); + return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'get-all-connections', payload); } getConnectionListFromAgent( @@ -67,7 +69,7 @@ export class ConnectionService extends BaseService { orgId: string ): Promise { const payload = { connectionSearchCriteria, orgId }; - return this.sendNatsMessage(this.connectionServiceProxy, 'get-all-agent-connection-list', payload); + return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'get-all-agent-connection-list', payload); } getConnectionsById( @@ -76,7 +78,7 @@ export class ConnectionService extends BaseService { orgId: string ): Promise { const payload = { user, connectionId, orgId }; - return this.sendNatsMessage(this.connectionServiceProxy, 'get-connection-details-by-connectionId', payload); + return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'get-connection-details-by-connectionId', payload); } @@ -84,7 +86,7 @@ export class ConnectionService extends BaseService { orgId: string ): Promise { - return this.sendNatsMessage(this.connectionServiceProxy, 'get-question-answer-record', orgId); + return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'get-question-answer-record', orgId); } receiveInvitationUrl( @@ -93,7 +95,7 @@ export class ConnectionService extends BaseService { user: IUserRequestInterface ): Promise { const payload = { user, receiveInvitationUrl, orgId }; - return this.sendNatsMessage(this.connectionServiceProxy, 'receive-invitation-url', payload); + return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'receive-invitation-url', payload); } receiveInvitation( @@ -102,7 +104,7 @@ export class ConnectionService extends BaseService { user: IUserRequestInterface ): Promise { const payload = { user, receiveInvitation, orgId }; - return this.sendNatsMessage(this.connectionServiceProxy, 'receive-invitation', payload); + return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'receive-invitation', payload); } async _getWebhookUrl(tenantId?: string, orgId?: string): Promise { @@ -139,11 +141,11 @@ export class ConnectionService extends BaseService { user: IUserRequestInterface ): Promise { const payload = { user, createOutOfBandConnectionInvitation }; - return this.sendNatsMessage(this.connectionServiceProxy, 'create-connection-invitation', payload); + return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'create-connection-invitation', payload); } async deleteConnectionRecords(orgId: string, userDetails: user): Promise { const payload = { orgId, userDetails }; - return this.sendNatsMessage(this.connectionServiceProxy, 'delete-connection-records', payload); + return this.natsClient.sendNatsMessage(this.connectionServiceProxy, 'delete-connection-records', payload); } } diff --git a/apps/api-gateway/src/credential-definition/credential-definition.module.ts b/apps/api-gateway/src/credential-definition/credential-definition.module.ts index 769b72109..69cec2d41 100644 --- a/apps/api-gateway/src/credential-definition/credential-definition.module.ts +++ b/apps/api-gateway/src/credential-definition/credential-definition.module.ts @@ -5,6 +5,7 @@ import { CredentialDefinitionController } from './credential-definition.controll import { CredentialDefinitionService } from './credential-definition.service'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports:[ @@ -17,7 +18,7 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [CredentialDefinitionController], - providers: [CredentialDefinitionService] + providers: [CredentialDefinitionService, NATSClient] }) export class CredentialDefinitionModule { constructor() { diff --git a/apps/api-gateway/src/credential-definition/credential-definition.service.ts b/apps/api-gateway/src/credential-definition/credential-definition.service.ts index ccf9981d2..fcd9b56dd 100644 --- a/apps/api-gateway/src/credential-definition/credential-definition.service.ts +++ b/apps/api-gateway/src/credential-definition/credential-definition.service.ts @@ -6,33 +6,35 @@ import { IUserRequestInterface } from '../interfaces/IUserRequestInterface'; import { GetAllCredDefsDto } from '../dtos/get-cred-defs.dto'; import { ICredDef, ICredDefs } from './interfaces'; import { ICredDefData } from '@credebl/common/interfaces/cred-def.interface'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class CredentialDefinitionService extends BaseService { constructor( - @Inject('NATS_CLIENT') private readonly credDefServiceProxy: ClientProxy + @Inject('NATS_CLIENT') private readonly credDefServiceProxy: ClientProxy, + private natsClient : NATSClient ) { super('CredentialDefinitionService'); } createCredentialDefinition(credDef: CreateCredentialDefinitionDto, user: IUserRequestInterface): Promise { const payload = { credDef, user }; - return this.sendNatsMessage(this.credDefServiceProxy, 'create-credential-definition', payload); + return this.natsClient.sendNatsMessage(this.credDefServiceProxy, 'create-credential-definition', payload); } getCredentialDefinitionById(credentialDefinitionId: string, orgId: string): Promise { const payload = { credentialDefinitionId, orgId }; - return this.sendNatsMessage(this.credDefServiceProxy, 'get-credential-definition-by-id', payload); + return this.natsClient.sendNatsMessage(this.credDefServiceProxy, 'get-credential-definition-by-id', payload); } getAllCredDefs(credDefSearchCriteria: GetAllCredDefsDto, user: IUserRequestInterface, orgId: string): Promise { const payload = { credDefSearchCriteria, user, orgId }; - return this.sendNatsMessage(this.credDefServiceProxy, 'get-all-credential-definitions', payload); + return this.natsClient.sendNatsMessage(this.credDefServiceProxy, 'get-all-credential-definitions', payload); } getCredentialDefinitionBySchemaId(schemaId: string): Promise { const payload = { schemaId }; - return this.sendNatsMessage(this.credDefServiceProxy, 'get-all-credential-definitions-by-schema-id', payload); + return this.natsClient.sendNatsMessage(this.credDefServiceProxy, 'get-all-credential-definitions-by-schema-id', payload); } } diff --git a/apps/api-gateway/src/fido/fido.module.ts b/apps/api-gateway/src/fido/fido.module.ts index 7805e7cbb..b61eee6d7 100644 --- a/apps/api-gateway/src/fido/fido.module.ts +++ b/apps/api-gateway/src/fido/fido.module.ts @@ -4,6 +4,7 @@ import { FidoController } from './fido.controller'; import { FidoService } from './fido.service'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports:[ @@ -17,6 +18,6 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [FidoController], - providers: [FidoService] + providers: [FidoService, NATSClient] }) export class FidoModule { } diff --git a/apps/api-gateway/src/fido/fido.service.ts b/apps/api-gateway/src/fido/fido.service.ts index 6fae79138..e5556b42d 100644 --- a/apps/api-gateway/src/fido/fido.service.ts +++ b/apps/api-gateway/src/fido/fido.service.ts @@ -2,19 +2,21 @@ import { Inject, Injectable } from '@nestjs/common'; import { ClientProxy, RpcException } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { UpdateFidoUserDetailsDto, VerifyRegistrationDto, GenerateAuthenticationDto, VerifyAuthenticationDto } from '../dtos/fido-user.dto'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class FidoService extends BaseService { constructor( - @Inject('NATS_CLIENT') private readonly fidoServiceProxy: ClientProxy + @Inject('NATS_CLIENT') private readonly fidoServiceProxy: ClientProxy, + private natsClient : NATSClient ) { super('FidoService'); } async generateRegistrationOption(deviceFlag: boolean, email:string): Promise<{response: object}> { try { const payload = { deviceFlag, email }; - return await this.sendNats(this.fidoServiceProxy, 'generate-registration-options', payload); + return await this.natsClient.sendNats(this.fidoServiceProxy, 'generate-registration-options', payload); } catch (error) { throw new RpcException(error.response); } @@ -23,37 +25,37 @@ export class FidoService extends BaseService { async verifyRegistration(verifyRegistrationDto: VerifyRegistrationDto, email: string): Promise<{response: object}> { const payload = { verifyRegistrationDetails: verifyRegistrationDto, email }; - return this.sendNats(this.fidoServiceProxy, 'verify-registration', payload); + return this.natsClient.sendNats(this.fidoServiceProxy, 'verify-registration', payload); } async generateAuthenticationOption(generateAuthentication: GenerateAuthenticationDto) : Promise<{response: object}> { const {userName} = generateAuthentication; const payload = { userName }; - return this.sendNats(this.fidoServiceProxy, 'generate-authentication-options', payload); + return this.natsClient.sendNats(this.fidoServiceProxy, 'generate-authentication-options', payload); } async verifyAuthentication(verifyAuthenticationDto: VerifyAuthenticationDto, email: string): Promise<{response: object}> { const payload = { verifyAuthenticationDetails: verifyAuthenticationDto, email }; - return this.sendNats(this.fidoServiceProxy, 'verify-authentication', payload); + return this.natsClient.sendNats(this.fidoServiceProxy, 'verify-authentication', payload); } async updateFidoUser(updateFidoUserDetailsDto: UpdateFidoUserDetailsDto, credentialId: string) : Promise<{response: object}> { const payload = {updateFidoUserDetailsDto, credentialId}; - return this.sendNats(this.fidoServiceProxy, 'update-user', payload); + return this.natsClient.sendNats(this.fidoServiceProxy, 'update-user', payload); } async fetchFidoUserDetails(email: string): Promise<{response: string}> { const payload = { email }; - return this.sendNats(this.fidoServiceProxy, 'fetch-fido-user-details', payload); + return this.natsClient.sendNats(this.fidoServiceProxy, 'fetch-fido-user-details', payload); } async deleteFidoUserDevice(credentialId: string): Promise<{response: object}> { const payload = { credentialId }; - return this.sendNats(this.fidoServiceProxy, 'delete-fido-user-device', payload); + return this.natsClient.sendNats(this.fidoServiceProxy, 'delete-fido-user-device', payload); } async updateFidoUserDeviceName(credentialId: string, deviceName: string): Promise<{response: string}> { const payload = { credentialId, deviceName }; - return this.sendNats(this.fidoServiceProxy, 'update-fido-user-device-name', payload); + return this.natsClient.sendNats(this.fidoServiceProxy, 'update-fido-user-device-name', payload); } } diff --git a/apps/api-gateway/src/geo-location/geo-location.module.ts b/apps/api-gateway/src/geo-location/geo-location.module.ts index 87da80148..f93b4959b 100644 --- a/apps/api-gateway/src/geo-location/geo-location.module.ts +++ b/apps/api-gateway/src/geo-location/geo-location.module.ts @@ -6,6 +6,7 @@ import { getNatsOptions } from '@credebl/common/nats.config'; import { RateLimiterModule, RateLimiterGuard } from 'nestjs-rate-limiter'; import { APP_GUARD } from '@nestjs/core'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -30,7 +31,8 @@ import { CommonConstants } from '@credebl/common/common.constant'; { provide: APP_GUARD, useClass: RateLimiterGuard - } + }, + NATSClient ] }) export class GeoLocationModule {} diff --git a/apps/api-gateway/src/geo-location/geo-location.service.ts b/apps/api-gateway/src/geo-location/geo-location.service.ts index 3639a1b0c..3c8d69644 100644 --- a/apps/api-gateway/src/geo-location/geo-location.service.ts +++ b/apps/api-gateway/src/geo-location/geo-location.service.ts @@ -1,11 +1,13 @@ import { CountryInterface, StateInterface, CityInterface } from '@credebl/common/interfaces/geolocation.interface'; import { Inject, Injectable } from '@nestjs/common'; import { ClientProxy } from '@nestjs/microservices'; +import { NATSClient } from 'libs/common/NATSClient'; import { BaseService } from 'libs/service/base.service'; @Injectable() export class GeoLocationService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy) { + constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy, + private natsClient : NATSClient) { super('GeoLocationService'); } @@ -16,7 +18,7 @@ export class GeoLocationService extends BaseService { */ async getAllCountries(): Promise { this.logger.log(`Finding all countries,GeoLocationService::getAllCountries`); - return this.sendNatsMessage(this.serviceProxy, 'get-all-countries', ''); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-all-countries', ''); } /** @@ -27,7 +29,7 @@ export class GeoLocationService extends BaseService { async getStatesByCountryId(countryId: number): Promise { const payload = { countryId }; this.logger.log(`Finding cities for countryId= ${countryId},GeoLocationService::getCitiesByStateAndCountry`); - return this.sendNatsMessage(this.serviceProxy, 'get-all-states', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-all-states', payload); } /** @@ -41,6 +43,6 @@ export class GeoLocationService extends BaseService { this.logger.log( `Finding cities for stateId= ${stateId} and countryId= ${countryId},GeoLocationService::getCitiesByStateAndCountry` ); - return this.sendNatsMessage(this.serviceProxy, 'get-all-cities', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-all-cities', payload); } } diff --git a/apps/api-gateway/src/issuance/issuance.controller.ts b/apps/api-gateway/src/issuance/issuance.controller.ts index 4ecab9ebf..418ca98d8 100644 --- a/apps/api-gateway/src/issuance/issuance.controller.ts +++ b/apps/api-gateway/src/issuance/issuance.controller.ts @@ -73,6 +73,8 @@ import { IGetAllIssuedCredentialsDto } from './dtos/get-all-issued-credentials.d import { IssueCredentialDto } from './dtos/multi-connection.dto'; import { SchemaType } from '@credebl/enum/enum'; import { CommonConstants } from '../../../../libs/common/src/common.constant'; +//import Logger, { LoggerKey } from '@credebl/logger/logger.interface'; + @Controller() @UseFilters(CustomExceptionFilter) @ApiTags('credentials') @@ -85,6 +87,7 @@ export class IssuanceController { ) { } private readonly logger = new Logger('IssuanceController'); + /** * @param orgId * @returns List of issued credentials for a specific organization diff --git a/apps/api-gateway/src/issuance/issuance.module.ts b/apps/api-gateway/src/issuance/issuance.module.ts index ff92a8c87..973eefbd2 100644 --- a/apps/api-gateway/src/issuance/issuance.module.ts +++ b/apps/api-gateway/src/issuance/issuance.module.ts @@ -8,10 +8,12 @@ import { getNatsOptions } from '@credebl/common/nats.config'; import { ImageServiceService } from '@credebl/image-service'; import { AwsService } from '@credebl/aws'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ HttpModule, + //ContextModule, LoggerModule, PlatformConfig, ClientsModule.register([ { name: 'NATS_CLIENT', @@ -21,6 +23,6 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [IssuanceController], - providers: [IssuanceService, ImageServiceService, CommonService, AwsService] + providers: [IssuanceService, ImageServiceService, CommonService, AwsService, NATSClient] }) export class IssuanceModule { } diff --git a/apps/api-gateway/src/issuance/issuance.service.ts b/apps/api-gateway/src/issuance/issuance.service.ts index 2ba42e8a2..a1890ae1d 100644 --- a/apps/api-gateway/src/issuance/issuance.service.ts +++ b/apps/api-gateway/src/issuance/issuance.service.ts @@ -8,12 +8,14 @@ import { FileExportResponse, IIssuedCredentialSearchParams, IReqPayload, ITempla import { ICredentialOfferResponse, IDeletedIssuanceRecords, IIssuedCredential } from '@credebl/common/interfaces/issuance.interface'; import { IssueCredentialDto } from './dtos/multi-connection.dto'; import { user } from '@prisma/client'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class IssuanceService extends BaseService { constructor( - @Inject('NATS_CLIENT') private readonly issuanceProxy: ClientProxy + @Inject('NATS_CLIENT') private readonly issuanceProxy: ClientProxy, + private natsClient : NATSClient ) { super('IssuanceService'); } @@ -22,7 +24,7 @@ export class IssuanceService extends BaseService { const payload = { comment: issueCredentialDto.comment, credentialDefinitionId: issueCredentialDto.credentialDefinitionId, credentialData: issueCredentialDto.credentialData, orgId: issueCredentialDto.orgId, protocolVersion: issueCredentialDto.protocolVersion, autoAcceptCredential: issueCredentialDto.autoAcceptCredential, credentialType: issueCredentialDto.credentialType, user }; - return this.sendNatsMessage(this.issuanceProxy, 'send-credential-create-offer', payload); + return this.natsClient.sendNatsMessage(this.issuanceProxy, 'send-credential-create-offer', payload); } sendCredentialOutOfBand(issueCredentialDto: OOBIssueCredentialDto): Promise<{ @@ -36,12 +38,12 @@ export class IssuanceService extends BaseService { payload = { credential: issueCredentialDto.credential, options: issueCredentialDto.options, comment: issueCredentialDto.comment, orgId: issueCredentialDto.orgId, protocolVersion: issueCredentialDto.protocolVersion, goalCode: issueCredentialDto.goalCode, parentThreadId: issueCredentialDto.parentThreadId, willConfirm: issueCredentialDto.willConfirm, label: issueCredentialDto.label, autoAcceptCredential: issueCredentialDto.autoAcceptCredential, credentialType: issueCredentialDto.credentialType, isShortenUrl: issueCredentialDto.isShortenUrl, reuseConnection : issueCredentialDto.reuseConnection }; } - return this.sendNats(this.issuanceProxy, 'send-credential-create-offer-oob', payload); + return this.natsClient.sendNats(this.issuanceProxy, 'send-credential-create-offer-oob', payload); } getIssueCredentials(issuedCredentialsSearchCriteria: IIssuedCredentialSearchParams, user: IUserRequest, orgId: string): Promise { const payload = { issuedCredentialsSearchCriteria, user, orgId }; - return this.sendNatsMessage(this.issuanceProxy, 'get-all-issued-credentials', payload); + return this.natsClient.sendNatsMessage(this.issuanceProxy, 'get-all-issued-credentials', payload); } @@ -49,38 +51,38 @@ export class IssuanceService extends BaseService { response: object; }> { const payload = { user, credentialRecordId, orgId }; - return this.sendNats(this.issuanceProxy, 'get-issued-credentials-by-credentialDefinitionId', payload); + return this.natsClient.sendNats(this.issuanceProxy, 'get-issued-credentials-by-credentialDefinitionId', payload); } getIssueCredentialWebhook(issueCredentialDto: IssuanceDto, id: string): Promise<{ response: object; }> { const payload = { issueCredentialDto, id }; - return this.sendNats(this.issuanceProxy, 'webhook-get-issue-credential', payload); + return this.natsClient.sendNats(this.issuanceProxy, 'webhook-get-issue-credential', payload); } outOfBandCredentialOffer(user: IUserRequest, outOfBandCredentialDto: OOBCredentialDtoWithEmail): Promise<{ response: object; }> { const payload = { user, outOfBandCredentialDto }; - return this.sendNats(this.issuanceProxy, 'out-of-band-credential-offer', payload); + return this.natsClient.sendNats(this.issuanceProxy, 'out-of-band-credential-offer', payload); } getAllCredentialTemplates(orgId:string, schemaType:string): Promise { const payload = { orgId, schemaType}; - return this.sendNatsMessage(this.issuanceProxy, 'get-all-credential-template-for-bulk-operation', payload); + return this.natsClient.sendNatsMessage(this.issuanceProxy, 'get-all-credential-template-for-bulk-operation', payload); } async downloadBulkIssuanceCSVTemplate(orgId: string, templateDetails: TemplateDetails ): Promise { const payload = { orgId, templateDetails }; - return (await this.sendNats(this.issuanceProxy, 'download-csv-template-for-bulk-operation', payload)).response; + return (await this.natsClient.sendNats(this.issuanceProxy, 'download-csv-template-for-bulk-operation', payload)).response; } async uploadCSVTemplate(importFileDetails: UploadedFileDetails ): Promise<{ response: object }> { const payload = { importFileDetails }; - return this.sendNats(this.issuanceProxy, 'upload-csv-template', payload); + return this.natsClient.sendNats(this.issuanceProxy, 'upload-csv-template', payload); } async previewCSVDetails(requestId: string, @@ -92,7 +94,7 @@ export class IssuanceService extends BaseService { orgId, previewFileDetails }; - return this.sendNats(this.issuanceProxy, 'preview-csv-details', payload); + return this.natsClient.sendNats(this.issuanceProxy, 'preview-csv-details', payload); } async issuedFileDetails( @@ -103,7 +105,7 @@ export class IssuanceService extends BaseService { orgId, fileParameter }; - return this.sendNats(this.issuanceProxy, 'issued-file-details', payload); + return this.natsClient.sendNats(this.issuanceProxy, 'issued-file-details', payload); } async getFileDetailsByFileId( @@ -116,17 +118,17 @@ export class IssuanceService extends BaseService { fileId, fileParameter }; - return this.sendNats(this.issuanceProxy, 'issued-file-data', payload); + return this.natsClient.sendNats(this.issuanceProxy, 'issued-file-data', payload); } async issueBulkCredential(requestId: string, orgId: string, clientDetails: ClientDetails, reqPayload: IReqPayload): Promise { const payload = { requestId, orgId, clientDetails, reqPayload }; - return this.sendNatsMessage(this.issuanceProxy, 'issue-bulk-credentials', payload); + return this.natsClient.sendNatsMessage(this.issuanceProxy, 'issue-bulk-credentials', payload); } async retryBulkCredential(fileId: string, orgId: string, clientDetails: ClientDetails): Promise { const payload = { fileId, orgId, clientDetails }; - return this.sendNatsMessage(this.issuanceProxy, 'retry-bulk-credentials', payload); + return this.natsClient.sendNatsMessage(this.issuanceProxy, 'retry-bulk-credentials', payload); } async _getWebhookUrl(tenantId?: string, orgId?: string): Promise { @@ -160,7 +162,7 @@ export class IssuanceService extends BaseService { async deleteIssuanceRecords(orgId: string, userDetails: user): Promise { const payload = { orgId, userDetails }; - return this.sendNatsMessage(this.issuanceProxy, 'delete-issuance-records', payload); + return this.natsClient.sendNatsMessage(this.issuanceProxy, 'delete-issuance-records', payload); } async getFileDetailsAndFileDataByFileId(orgId: string, fileId: string): Promise { const payload = { diff --git a/apps/api-gateway/src/main.ts b/apps/api-gateway/src/main.ts index 1960d26cf..1fe56666f 100644 --- a/apps/api-gateway/src/main.ts +++ b/apps/api-gateway/src/main.ts @@ -2,7 +2,7 @@ import * as dotenv from 'dotenv'; import * as express from 'express'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; -import { Logger, ValidationPipe } from '@nestjs/common'; +import {Logger, ValidationPipe } from '@nestjs/common'; import { AppModule } from './app.module'; import { HttpAdapterHost, NestFactory } from '@nestjs/core'; @@ -11,17 +11,24 @@ import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { getNatsOptions } from '@credebl/common/nats.config'; import helmet from 'helmet'; -import { NodeEnvironment } from '@credebl/enum/enum'; +//import { NodeEnvironment } from '@credebl/enum/enum'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; dotenv.config(); async function bootstrap(): Promise { - const app = await NestFactory.create(AppModule, { - logger: - NodeEnvironment.PRODUCTION !== process.env.PLATFORM_PROFILE_MODE - ? ['log', 'debug', 'error', 'verbose', 'warn'] - : ['error', 'warn'] - }); + // const app = await NestFactory.create(AppModule, { + // logger: + // NodeEnvironment.PRODUCTION !== process.env.PLATFORM_PROFILE_MODE + // ? ['log', 'debug', 'error', 'verbose', 'warn'] + // : ['error', 'warn'] + // }); + + const app = await NestFactory.create(AppModule); + + //const logger = await app.resolve(LoggerKey); + + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.connectMicroservice({ transport: Transport.NATS, diff --git a/apps/api-gateway/src/notification/notification.module.ts b/apps/api-gateway/src/notification/notification.module.ts index d368a572b..46e48f047 100644 --- a/apps/api-gateway/src/notification/notification.module.ts +++ b/apps/api-gateway/src/notification/notification.module.ts @@ -8,6 +8,7 @@ import { getNatsOptions } from '@credebl/common/nats.config'; import { NotificationController } from './notification.controller'; import { NotificationService } from './notification.service'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -24,6 +25,6 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [NotificationController], - providers: [NotificationService, CommonService] + providers: [NotificationService, CommonService, NATSClient] }) export class NotificationModule { } diff --git a/apps/api-gateway/src/notification/notification.service.ts b/apps/api-gateway/src/notification/notification.service.ts index 01847e1d9..b6e695c76 100644 --- a/apps/api-gateway/src/notification/notification.service.ts +++ b/apps/api-gateway/src/notification/notification.service.ts @@ -3,10 +3,12 @@ import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { RegisterOrgWebhhookEndpointDto, SendNotificationDto } from './dtos/notification.dto'; import { INotification } from './interfaces/notification.interfaces'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class NotificationService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy) { + constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy, + private natsClient : NATSClient) { super('NotificationService'); } @@ -16,7 +18,7 @@ export class NotificationService extends BaseService { * @returns Stored notification data */ async registerOrgWebhookEndpoint(registerOrgWebhhookEndpointDto: RegisterOrgWebhhookEndpointDto): Promise { - return this.sendNatsMessage(this.serviceProxy, 'register-org-webhook-endpoint-for-notification', registerOrgWebhhookEndpointDto); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'register-org-webhook-endpoint-for-notification', registerOrgWebhhookEndpointDto); } /** @@ -25,6 +27,6 @@ export class NotificationService extends BaseService { * @returns Get notification details */ async sendNotification(notificationRequestBody: SendNotificationDto): Promise { - return this.sendNatsMessage(this.serviceProxy, 'send-notification', notificationRequestBody); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'send-notification', notificationRequestBody); } } \ No newline at end of file diff --git a/apps/api-gateway/src/organization/organization.module.ts b/apps/api-gateway/src/organization/organization.module.ts index bcf2f6c53..8aa8bfc9a 100644 --- a/apps/api-gateway/src/organization/organization.module.ts +++ b/apps/api-gateway/src/organization/organization.module.ts @@ -10,6 +10,7 @@ import { getNatsOptions } from '@credebl/common/nats.config'; import { ImageServiceService } from '@credebl/image-service'; import { AwsService } from '@credebl/aws'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ HttpModule, @@ -25,7 +26,7 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [OrganizationController], - providers: [OrganizationService, CommonService, ImageServiceService, AwsService] + providers: [OrganizationService, CommonService, ImageServiceService, AwsService, NATSClient] }) export class OrganizationModule { } diff --git a/apps/api-gateway/src/organization/organization.service.ts b/apps/api-gateway/src/organization/organization.service.ts index 88b00b0de..b9d346f50 100644 --- a/apps/api-gateway/src/organization/organization.service.ts +++ b/apps/api-gateway/src/organization/organization.service.ts @@ -16,10 +16,12 @@ import { PaginationDto } from '@credebl/common/dtos/pagination.dto'; import { IClientRoles } from '@credebl/client-registration/interfaces/client.interface'; import { GetAllOrganizationsDto } from './dtos/get-organizations.dto'; import { PrimaryDid } from './dtos/set-primary-did.dto'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class OrganizationService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy) { + constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy, + private natsClient : NATSClient) { super('OrganizationService'); } @@ -30,7 +32,7 @@ export class OrganizationService extends BaseService { */ async createOrganization(createOrgDto: CreateOrganizationDto, userId: string, keycloakUserId: string): Promise { const payload = { createOrgDto, userId, keycloakUserId }; - return this.sendNatsMessage(this.serviceProxy, 'create-organization', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'create-organization', payload); } /** @@ -41,7 +43,7 @@ export class OrganizationService extends BaseService { async setPrimaryDid(primaryDidPayload: PrimaryDid, orgId:string): Promise { const {did, id} = primaryDidPayload; const payload = { did, orgId, id}; - return this.sendNatsMessage(this.serviceProxy, 'set-primary-did', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'set-primary-did', payload); } /** @@ -52,7 +54,7 @@ export class OrganizationService extends BaseService { */ async createOrgCredentials(orgId: string, userId: string, keycloakUserId: string): Promise { const payload = { orgId, userId, keycloakUserId }; - return this.sendNatsMessage(this.serviceProxy, 'create-org-credentials', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'create-org-credentials', payload); } /** @@ -62,7 +64,7 @@ export class OrganizationService extends BaseService { */ async updateOrganization(updateOrgDto: UpdateOrganizationDto, userId: string, orgId: string): Promise { const payload = { updateOrgDto, userId, orgId }; - return this.sendNatsMessage(this.serviceProxy, 'update-organization', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'update-organization', payload); } /** @@ -71,7 +73,7 @@ export class OrganizationService extends BaseService { * @returns Organization details with owner */ async findOrganizationOwner(orgId: string): Promise { - return this.sendNatsMessage(this.serviceProxy, 'get-organization-owner', orgId); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-organization-owner', orgId); } /** @@ -82,7 +84,7 @@ export class OrganizationService extends BaseService { async getOrganizations(organizationDto: GetAllOrganizationsDto, userId: string): Promise { const payload = { userId, ...organizationDto }; - const fetchOrgs = await this.sendNatsMessage(this.serviceProxy, 'get-organizations', payload); + const fetchOrgs = await this.natsClient.sendNatsMessage(this.serviceProxy, 'get-organizations', payload); return fetchOrgs; } @@ -93,14 +95,14 @@ export class OrganizationService extends BaseService { */ async getPublicOrganizations(paginationDto: PaginationDto): Promise { const payload = { ...paginationDto }; - const PublicOrg = this.sendNatsMessage(this.serviceProxy, 'get-public-organizations', payload); + const PublicOrg = this.natsClient.sendNatsMessage(this.serviceProxy, 'get-public-organizations', payload); return PublicOrg; } async getPublicProfile(orgSlug: string): Promise { const payload = { orgSlug }; try { - return this.sendNatsMessage(this.serviceProxy, 'get-organization-public-profile', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-organization-public-profile', payload); } catch (error) { this.logger.error(`Error in get user:${JSON.stringify(error)}`); } @@ -113,12 +115,12 @@ export class OrganizationService extends BaseService { */ async getOrganization(orgId: string, userId: string): Promise { const payload = { orgId, userId }; - return this.sendNatsMessage(this.serviceProxy, 'get-organization-by-id', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-organization-by-id', payload); } async fetchOrgCredentials(orgId: string, userId: string): Promise { const payload = { orgId, userId }; - return this.sendNatsMessage(this.serviceProxy, 'fetch-org-client-credentials', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'fetch-org-client-credentials', payload); } /** @@ -132,17 +134,17 @@ export class OrganizationService extends BaseService { ): Promise { const { pageNumber, pageSize, search } = pagination; const payload = { orgId, pageNumber, pageSize, search }; - return this.sendNatsMessage(this.serviceProxy, 'get-invitations-by-orgId', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-invitations-by-orgId', payload); } async getOrganizationDashboard(orgId: string, userId: string): Promise { const payload = { orgId, userId }; - return this.sendNatsMessage(this.serviceProxy, 'get-organization-dashboard', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-organization-dashboard', payload); } async getOrganizationActivityCount(orgId: string, userId: string): Promise { const payload = { orgId, userId }; - return this.sendNatsMessage(this.serviceProxy, 'get-organization-activity-count', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-organization-activity-count', payload); } /** @@ -153,7 +155,7 @@ export class OrganizationService extends BaseService { async getOrgRoles(orgId: string, user: user): Promise { const payload = {orgId, user}; - return this.sendNatsMessage(this.serviceProxy, 'get-org-roles', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-org-roles', payload); } /** @@ -163,12 +165,12 @@ export class OrganizationService extends BaseService { */ async createInvitation(bulkInvitationDto: BulkSendInvitationDto, userId: string, userEmail: string): Promise { const payload = { bulkInvitationDto, userId, userEmail }; - return this.sendNatsMessage(this.serviceProxy, 'send-invitation', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'send-invitation', payload); } async registerOrgsMapUsers(): Promise { const payload = {}; - return this.sendNatsMessage(this.serviceProxy, 'register-orgs-users-map', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'register-orgs-users-map', payload); } /** @@ -179,7 +181,7 @@ export class OrganizationService extends BaseService { */ async updateUserRoles(updateUserDto: UpdateUserRolesDto, userId: string): Promise { const payload = { orgId: updateUserDto.orgId, roleIds: updateUserDto.orgRoleId, userId }; - return this.sendNatsMessage(this.serviceProxy, 'update-user-roles', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'update-user-roles', payload); } async getOrgUsers( @@ -189,14 +191,14 @@ export class OrganizationService extends BaseService { const { pageNumber, pageSize, search } = paginationDto; const payload = { orgId, pageNumber, pageSize, search }; - return this.sendNatsMessage(this.serviceProxy, 'fetch-organization-user', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'fetch-organization-user', payload); } async getDidList( orgId: string ): Promise { const payload = { orgId }; - return this.sendNatsMessage(this.serviceProxy, 'fetch-organization-dids', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'fetch-organization-dids', payload); } async getOrgPofile( @@ -204,7 +206,7 @@ export class OrganizationService extends BaseService { ): Promise { const payload = { orgId }; - return this.sendNatsMessage(this.serviceProxy, 'fetch-organization-profile', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'fetch-organization-profile', payload); } async deleteOrganization( @@ -213,7 +215,7 @@ export class OrganizationService extends BaseService { ): Promise { const payload = { orgId, user }; - return this.sendNatsMessage(this.serviceProxy, 'delete-organization', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'delete-organization', payload); } async deleteOrgClientCredentials( @@ -222,7 +224,7 @@ export class OrganizationService extends BaseService { ): Promise { const payload = { orgId, user }; - return this.sendNatsMessage(this.serviceProxy, 'delete-org-client-credentials', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'delete-org-client-credentials', payload); } async deleteOrganizationInvitation( @@ -230,13 +232,13 @@ export class OrganizationService extends BaseService { invitationId: string ): Promise { const payload = {orgId, invitationId}; - return this.sendNatsMessage(this.serviceProxy, 'delete-organization-invitation', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'delete-organization-invitation', payload); } async clientLoginCredentials( clientCredentialsDto: ClientCredentialsDto ): Promise { - return this.sendNatsMessage(this.serviceProxy, 'authenticate-client-credentials', clientCredentialsDto); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'authenticate-client-credentials', clientCredentialsDto); } } diff --git a/apps/api-gateway/src/platform/platform.module.ts b/apps/api-gateway/src/platform/platform.module.ts index f5b3119c1..7bf17a79e 100644 --- a/apps/api-gateway/src/platform/platform.module.ts +++ b/apps/api-gateway/src/platform/platform.module.ts @@ -5,6 +5,7 @@ import { ClientsModule, Transport } from '@nestjs/microservices'; import { ConfigModule } from '@nestjs/config'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -18,6 +19,6 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [PlatformController], - providers: [PlatformService] + providers: [PlatformService, NATSClient] }) export class PlatformModule {} diff --git a/apps/api-gateway/src/platform/platform.service.ts b/apps/api-gateway/src/platform/platform.service.ts index 6bfa64dfd..2072ff44a 100644 --- a/apps/api-gateway/src/platform/platform.service.ts +++ b/apps/api-gateway/src/platform/platform.service.ts @@ -6,38 +6,39 @@ import { IUserRequestInterface } from '../interfaces/IUserRequestInterface'; import { INetworkUrl, ISchemaDetails } from '@credebl/common/interfaces/schema.interface'; import { GetAllPlatformCredDefsDto } from '../credential-definition/dto/get-all-platform-cred-defs.dto'; import { IPlatformCredDefsData } from '@credebl/common/interfaces/cred-def.interface'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class PlatformService extends BaseService { constructor( - @Inject('NATS_CLIENT') private readonly platformServiceProxy: ClientProxy - ) { + @Inject('NATS_CLIENT') private readonly platformServiceProxy: ClientProxy, + private natsClient : NATSClient) { super('PlatformService'); } async getAllSchema(schemaSearchCriteria: ISchemaSearchPayload, user: IUserRequestInterface): Promise { const schemaSearch = { schemaSearchCriteria, user }; - return this.sendNatsMessage(this.platformServiceProxy, 'get-all-schemas', schemaSearch); + return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-all-schemas', schemaSearch); } async getAllPlatformCredDefs(getAllPlatformCredDefs: GetAllPlatformCredDefsDto, user: IUserRequestInterface): Promise { const credDefs = { ...getAllPlatformCredDefs, user }; - return this.sendNatsMessage(this.platformServiceProxy, 'get-all-platform-cred-defs', credDefs); + return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-all-platform-cred-defs', credDefs); } async getAllLedgers(): Promise { const payload = {}; - return this.sendNatsMessage(this.platformServiceProxy, 'get-all-ledgers', payload); + return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-all-ledgers', payload); } async getNetworkUrl(indyNamespace: string): Promise { - return this.sendNatsMessage(this.platformServiceProxy, 'get-network-url', indyNamespace); + return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-network-url', indyNamespace); } async getShorteningUrlById(referenceId: string): Promise { // NATS call - return this.sendNatsMessage(this.platformServiceProxy, 'get-shortening-url', referenceId); + return this.natsClient.sendNatsMessage(this.platformServiceProxy, 'get-shortening-url', referenceId); } } \ No newline at end of file diff --git a/apps/api-gateway/src/revocation/revocation.module.ts b/apps/api-gateway/src/revocation/revocation.module.ts index 249e7a127..69d8cdfc9 100644 --- a/apps/api-gateway/src/revocation/revocation.module.ts +++ b/apps/api-gateway/src/revocation/revocation.module.ts @@ -1,9 +1,10 @@ import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; -import { Transport, ClientsModule } from '@nestjs/microservices'; +import { ClientsModule } from '@nestjs/microservices'; import { RevocationService } from './revocation.service'; import { RevocationController } from './revocation.controller'; import { commonNatsOptions } from 'libs/service/nats.options'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -16,7 +17,7 @@ import { commonNatsOptions } from 'libs/service/nats.options'; ]) ], controllers: [RevocationController], - providers: [RevocationService] + providers: [RevocationService, NATSClient] }) export class RevocationModule { diff --git a/apps/api-gateway/src/revocation/revocation.service.ts b/apps/api-gateway/src/revocation/revocation.service.ts index 3f9ffd1b7..cf0d974f5 100644 --- a/apps/api-gateway/src/revocation/revocation.service.ts +++ b/apps/api-gateway/src/revocation/revocation.service.ts @@ -1,46 +1,46 @@ -import { Injectable, Inject, Logger, HttpException } from '@nestjs/common'; +import { Injectable, Inject } from '@nestjs/common'; import { ClientProxy } from '@nestjs/microservices'; -import { CreateRevocationRegistryDto } from '../dtos/create-revocation-registry.dto'; -import { map } from 'rxjs/operators'; -import { UpdateRevocationRegistryUriDto } from '../dtos/update-revocation-registry.dto'; +// import { CreateRevocationRegistryDto } from '../dtos/create-revocation-registry.dto'; +// import { UpdateRevocationRegistryUriDto } from '../dtos/update-revocation-registry.dto'; import { BaseService } from 'libs/service/base.service'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class RevocationService extends BaseService { constructor( - @Inject('NATS_CLIENT') private readonly revocationServiceProxy: ClientProxy - ) { + @Inject('NATS_CLIENT') private readonly revocationServiceProxy: ClientProxy, + private natsClient : NATSClient) { super('RevocationService'); } - createRevocationRegistry(createRevocationRegistryDto: CreateRevocationRegistryDto, user: any) { - this.logger.log('**** createRevocationRegistryDto called'); - const payload = { createRevocationRegistryDto, user }; - return this.sendNats(this.revocationServiceProxy, 'create-revocation-registry', payload); - } + // createRevocationRegistry(createRevocationRegistryDto: CreateRevocationRegistryDto, user: any) : Promise { + // this.logger.log('**** createRevocationRegistryDto called'); + // const payload = { createRevocationRegistryDto, user }; + // return this.natsClient.sendNats(this.revocationServiceProxy, 'create-revocation-registry', payload); + // } - updateRevocationRegistryUri(updateRevocationRegistryUriDto: UpdateRevocationRegistryUriDto, user: any) { - this.logger.log('**** updateRevocationRegistryUri called'); - const payload = { updateRevocationRegistryUriDto, user }; - return this.sendNats(this.revocationServiceProxy, 'update-revocation-registry-uri', payload); - } + // updateRevocationRegistryUri(updateRevocationRegistryUriDto: UpdateRevocationRegistryUriDto, user: any) : Promise { + // this.logger.log('**** updateRevocationRegistryUri called'); + // const payload = { updateRevocationRegistryUriDto, user }; + // return this.natsClient.sendNats(this.revocationServiceProxy, 'update-revocation-registry-uri', payload); + // } - activeRevocationRegistry(cred_def_id: string, user: any) { - this.logger.log('**** activeRevocationRegistry called'); - const payload = { cred_def_id, user }; - return this.sendNats(this.revocationServiceProxy, 'active-revocation-registry', payload); - } + // activeRevocationRegistry(credDefId: string, user: any) : Promise { + // this.logger.log('**** activeRevocationRegistry called'); + // const payload = { credDefId, user }; + // return this.natsClient.sendNats(this.revocationServiceProxy, 'active-revocation-registry', payload); + // } - publishRevocationRegistry(revocationId: string, user: any) { - this.logger.log('**** publishRevocationRegistry called'); - const payload = { revocationId, user }; - return this.sendNats(this.revocationServiceProxy, 'publish-revocation-registry', payload); - } + // publishRevocationRegistry(revocationId: string, user: any) : Promise { + // this.logger.log('**** publishRevocationRegistry called'); + // const payload = { revocationId, user }; + // return this.natsClient.sendNats(this.revocationServiceProxy, 'publish-revocation-registry', payload); + // } - getRevocationRegistry(rev_reg_id: string, user: any) { - this.logger.log('**** getRevocationRegistry called'); - const payload = { rev_reg_id, user }; - return this.sendNats(this.revocationServiceProxy, 'get-revocation-registry', payload); - } + // getRevocationRegistry(revRegId: string, user: any) : Promise { + // this.logger.log('**** getRevocationRegistry called'); + // const payload = { revRegId, user }; + // return this.natsClient.sendNats(this.revocationServiceProxy, 'get-revocation-registry', payload); + // } } \ No newline at end of file diff --git a/apps/api-gateway/src/schema/schema.module.ts b/apps/api-gateway/src/schema/schema.module.ts index 268e35021..6fef95b8f 100644 --- a/apps/api-gateway/src/schema/schema.module.ts +++ b/apps/api-gateway/src/schema/schema.module.ts @@ -6,6 +6,7 @@ import { SchemaController } from './schema.controller'; import { SchemaService } from './schema.service'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -20,6 +21,6 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [SchemaController], - providers: [SchemaService] + providers: [SchemaService, NATSClient] }) export class SchemaModule { } diff --git a/apps/api-gateway/src/schema/schema.service.ts b/apps/api-gateway/src/schema/schema.service.ts index d6476cf29..3dcec3b63 100644 --- a/apps/api-gateway/src/schema/schema.service.ts +++ b/apps/api-gateway/src/schema/schema.service.ts @@ -6,32 +6,34 @@ import { ISchemaSearchPayload } from '../interfaces/ISchemaSearch.interface'; import { ISchemaInfo, IUserRequestInterface } from './interfaces'; import { ICredDefWithPagination, ISchemaData, ISchemasWithPagination } from '@credebl/common/interfaces/schema.interface'; import { GetCredentialDefinitionBySchemaIdDto } from './dtos/get-all-schema.dto'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class SchemaService extends BaseService { constructor( - @Inject('NATS_CLIENT') private readonly schemaServiceProxy: ClientProxy + @Inject('NATS_CLIENT') private readonly schemaServiceProxy: ClientProxy, + private natsClient : NATSClient ) { super(`Schema Service`); } createSchema(schemaDetails: GenericSchemaDTO, user: IUserRequestInterface, orgId: string): Promise { const payload = { schemaDetails, user, orgId }; - return this.sendNatsMessage(this.schemaServiceProxy, 'create-schema', payload); + return this.natsClient.sendNatsMessage(this.schemaServiceProxy, 'create-schema', payload); } getSchemaById(schemaId: string, orgId: string): Promise { const payload = { schemaId, orgId }; - return this.sendNatsMessage(this.schemaServiceProxy, 'get-schema-by-id', payload); + return this.natsClient.sendNatsMessage(this.schemaServiceProxy, 'get-schema-by-id', payload); } getSchemas(schemaSearchCriteria: ISchemaSearchPayload, user: IUserRequestInterface, orgId: string): Promise { const schemaSearch = { schemaSearchCriteria, user, orgId }; - return this.sendNatsMessage(this.schemaServiceProxy, 'get-schemas', schemaSearch); + return this.natsClient.sendNatsMessage(this.schemaServiceProxy, 'get-schemas', schemaSearch); } getcredDefListBySchemaId(schemaSearchCriteria: GetCredentialDefinitionBySchemaIdDto, user: IUserRequestInterface): Promise { const payload = { schemaSearchCriteria, user }; - return this.sendNatsMessage(this.schemaServiceProxy, 'get-cred-def-list-by-schemas-id', payload); + return this.natsClient.sendNatsMessage(this.schemaServiceProxy, 'get-cred-def-list-by-schemas-id', payload); } } \ No newline at end of file diff --git a/apps/api-gateway/src/user/user.module.ts b/apps/api-gateway/src/user/user.module.ts index cae3713ae..c7fe0dc27 100644 --- a/apps/api-gateway/src/user/user.module.ts +++ b/apps/api-gateway/src/user/user.module.ts @@ -8,6 +8,7 @@ import { UserService } from './user.service'; import { getNatsOptions } from '@credebl/common/nats.config'; import { AwsService } from '@credebl/aws'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -23,6 +24,6 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [UserController], - providers: [UserService, CommonService, AwsService] + providers: [UserService, CommonService, AwsService, NATSClient] }) export class UserModule {} diff --git a/apps/api-gateway/src/user/user.service.ts b/apps/api-gateway/src/user/user.service.ts index 490b0678e..9a5fb287a 100644 --- a/apps/api-gateway/src/user/user.service.ts +++ b/apps/api-gateway/src/user/user.service.ts @@ -12,48 +12,51 @@ import { IUserInvitations } from '@credebl/common/interfaces/user.interface'; import { user } from '@prisma/client'; import { PaginationDto } from '@credebl/common/dtos/pagination.dto'; import { CreateCertificateDto } from './dto/share-certificate.dto'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class UserService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy) { + constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy, + private natsClient : NATSClient +) { super('User Service'); } async getProfile(id: string): Promise { const payload = { id }; - return this.sendNatsMessage(this.serviceProxy, 'get-user-profile', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-user-profile', payload); } async getPublicProfile(username: string): Promise { const payload = { username }; - return this.sendNatsMessage(this.serviceProxy, 'get-user-public-profile', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-user-public-profile', payload); } async getUserCredentialsById(credentialId: string): Promise { const payload = { credentialId }; - return this.sendNatsMessage(this.serviceProxy, 'get-user-credentials-by-id', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-user-credentials-by-id', payload); } async updateUserProfile(updateUserProfileDto: UpdateUserProfileDto): Promise { const payload = { updateUserProfileDto }; - return this.sendNatsMessage(this.serviceProxy, 'update-user-profile', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'update-user-profile', payload); } async findUserinSupabase(id: string): Promise { const payload = { id }; - return this.sendNatsMessage(this.serviceProxy, 'get-user-by-supabase', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-user-by-supabase', payload); } async findUserinKeycloak(id: string): Promise { const payload = { id }; - return this.sendNatsMessage(this.serviceProxy, 'get-user-by-keycloak', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-user-by-keycloak', payload); } async invitations(id: string, status: string, getAllInvitationsDto: GetAllInvitationsDto): Promise { const { pageNumber, pageSize, search } = getAllInvitationsDto; const payload = { id, status, pageNumber, pageSize, search }; - return this.sendNatsMessage(this.serviceProxy, 'get-org-invitations', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-org-invitations', payload); } async acceptRejectInvitaion( @@ -61,13 +64,13 @@ export class UserService extends BaseService { userId: string ): Promise { const payload = { acceptRejectInvitation, userId }; - return this.sendNatsMessage(this.serviceProxy, 'accept-reject-invitations', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'accept-reject-invitations', payload); } async shareUserCertificate( shareUserCredentials: CreateCertificateDto ): Promise { - return this.sendNatsMessage(this.serviceProxy, 'share-user-certificate', shareUserCredentials); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'share-user-certificate', shareUserCredentials); } async get( @@ -75,35 +78,35 @@ export class UserService extends BaseService { ): Promise { const { pageNumber, pageSize, search } = paginationDto; const payload = { pageNumber, pageSize, search }; - return this.sendNatsMessage(this.serviceProxy, 'fetch-users', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'fetch-users', payload); } async checkUserExist(userEmail: string): Promise { const payload = { userEmail }; - return this.sendNatsMessage(this.serviceProxy, 'check-user-exist', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'check-user-exist', payload); } async getUserActivities(userId: string, limit: number): Promise { const payload = { userId, limit }; - return this.sendNatsMessage(this.serviceProxy, 'get-user-activity', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-user-activity', payload); } async addPasskey(userEmail: string, userInfo: AddPasskeyDetailsDto): Promise { const payload = { userEmail, userInfo }; - return this.sendNatsMessage(this.serviceProxy, 'add-passkey', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'add-passkey', payload); } async updatePlatformSettings(platformSettings: UpdatePlatformSettingsDto): Promise { const payload = { platformSettings }; - return this.sendNatsMessage(this.serviceProxy, 'update-platform-settings', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'update-platform-settings', payload); } async getPlatformSettings(): Promise { - return this.sendNatsMessage(this.serviceProxy, 'fetch-platform-settings', ''); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'fetch-platform-settings', ''); } async getUserByUserIdInKeycloak(email: string): Promise { const payload = { email }; - return this.sendNatsMessage(this.serviceProxy, 'get-user-info-by-user-email-keycloak', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'get-user-info-by-user-email-keycloak', payload); } } diff --git a/apps/api-gateway/src/utilities/utilities.module.ts b/apps/api-gateway/src/utilities/utilities.module.ts index 7dda4be54..f723dd653 100644 --- a/apps/api-gateway/src/utilities/utilities.module.ts +++ b/apps/api-gateway/src/utilities/utilities.module.ts @@ -9,6 +9,7 @@ import { ImageServiceService } from '@credebl/image-service'; import { UtilitiesController } from './utilities.controller'; import { UtilitiesService } from './utilities.service'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -25,7 +26,7 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [UtilitiesController], - providers: [UtilitiesService, CommonService, ImageServiceService] + providers: [UtilitiesService, CommonService, ImageServiceService, NATSClient] }) export class UtilitiesModule { } diff --git a/apps/api-gateway/src/utilities/utilities.service.ts b/apps/api-gateway/src/utilities/utilities.service.ts index 6e7eb54fb..9577b5c37 100644 --- a/apps/api-gateway/src/utilities/utilities.service.ts +++ b/apps/api-gateway/src/utilities/utilities.service.ts @@ -2,20 +2,23 @@ import { Inject, Injectable } from '@nestjs/common'; import { ClientProxy } from '@nestjs/microservices'; import { BaseService } from 'libs/service/base.service'; import { StoreObjectDto, UtilitiesDto } from './dtos/shortening-url.dto'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class UtilitiesService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy) { + constructor(@Inject('NATS_CLIENT') private readonly serviceProxy: ClientProxy, + private natsClient : NATSClient +) { super('OrganizationService'); } async createShorteningUrl(shorteningUrlDto: UtilitiesDto): Promise { - return this.sendNatsMessage(this.serviceProxy, 'create-shortening-url', shorteningUrlDto); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'create-shortening-url', shorteningUrlDto); } async storeObject(persistent: boolean, storeObjectDto: StoreObjectDto): Promise { const storeObj = storeObjectDto.data; const payload = {persistent, storeObj}; - return this.sendNatsMessage(this.serviceProxy, 'store-object-return-url', payload); + return this.natsClient.sendNatsMessage(this.serviceProxy, 'store-object-return-url', payload); } } diff --git a/apps/api-gateway/src/verification/verification.module.ts b/apps/api-gateway/src/verification/verification.module.ts index d2769ff6f..edb677a09 100644 --- a/apps/api-gateway/src/verification/verification.module.ts +++ b/apps/api-gateway/src/verification/verification.module.ts @@ -7,6 +7,7 @@ import { VerificationService } from './verification.service'; import { getNatsOptions } from '@credebl/common/nats.config'; import { ImageServiceService } from '@credebl/image-service'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -20,6 +21,6 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [VerificationController], - providers: [VerificationService, ImageServiceService] + providers: [VerificationService, ImageServiceService, NATSClient] }) export class VerificationModule { } diff --git a/apps/api-gateway/src/verification/verification.service.ts b/apps/api-gateway/src/verification/verification.service.ts index a3d13bf4a..5c9b97777 100644 --- a/apps/api-gateway/src/verification/verification.service.ts +++ b/apps/api-gateway/src/verification/verification.service.ts @@ -10,12 +10,14 @@ import { IProofPresentation } from './interfaces/verification.interface'; // To do make a similar interface in API-gateway import { IRequestProof } from 'apps/verification/src/interfaces/verification.interface'; import { user } from '@prisma/client'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class VerificationService extends BaseService { constructor( - @Inject('NATS_CLIENT') private readonly verificationServiceProxy: ClientProxy + @Inject('NATS_CLIENT') private readonly verificationServiceProxy: ClientProxy, + private natsClient : NATSClient ) { super('VerificationService'); } @@ -27,7 +29,7 @@ export class VerificationService extends BaseService { */ getProofPresentations(proofRequestsSearchCriteria: IProofRequestSearchCriteria, user: IUserRequest, orgId: string): Promise { const payload = { proofRequestsSearchCriteria, user, orgId }; - return this.sendNatsMessage(this.verificationServiceProxy, 'get-all-proof-presentations', payload); + return this.natsClient.sendNatsMessage(this.verificationServiceProxy, 'get-all-proof-presentations', payload); } /** @@ -38,7 +40,7 @@ export class VerificationService extends BaseService { */ getProofPresentationById(proofId: string, orgId: string, user: IUserRequest): Promise { const payload = { proofId, orgId, user }; - return this.sendNatsMessage(this.verificationServiceProxy, 'get-proof-presentations-by-proofId', payload); + return this.natsClient.sendNatsMessage(this.verificationServiceProxy, 'get-proof-presentations-by-proofId', payload); } /** @@ -66,7 +68,7 @@ export class VerificationService extends BaseService { } const payload = { requestProof, user }; - return this.sendNatsMessage(this.verificationServiceProxy, 'send-proof-request', payload); + return this.natsClient.sendNatsMessage(this.verificationServiceProxy, 'send-proof-request', payload); } /** @@ -77,12 +79,12 @@ export class VerificationService extends BaseService { */ verifyPresentation(proofId: string, orgId: string, user: IUserRequest): Promise { const payload = { proofId, orgId, user }; - return this.sendNatsMessage(this.verificationServiceProxy, 'verify-presentation', payload); + return this.natsClient.sendNatsMessage(this.verificationServiceProxy, 'verify-presentation', payload); } webhookProofPresentation(orgId: string, proofPresentationPayload: WebhookPresentationProofDto): Promise { const payload = { orgId, proofPresentationPayload }; - return this.sendNatsMessage(this.verificationServiceProxy, 'webhook-proof-presentation', payload); + return this.natsClient.sendNatsMessage(this.verificationServiceProxy, 'webhook-proof-presentation', payload); } /** @@ -93,12 +95,12 @@ export class VerificationService extends BaseService { */ sendOutOfBandPresentationRequest(outOfBandRequestProof: SendProofRequestPayload, user: IUserRequest): Promise { const payload = { outOfBandRequestProof, user }; - return this.sendNatsMessage(this.verificationServiceProxy, 'send-out-of-band-proof-request', payload); + return this.natsClient.sendNatsMessage(this.verificationServiceProxy, 'send-out-of-band-proof-request', payload); } getVerifiedProofDetails(proofId: string, orgId: string, user: IUserRequest): Promise { const payload = { proofId, orgId, user }; - return this.sendNatsMessage(this.verificationServiceProxy, 'get-verified-proof-details', payload); + return this.natsClient.sendNatsMessage(this.verificationServiceProxy, 'get-verified-proof-details', payload); } async _getWebhookUrl(tenantId?: string, orgId?: string): Promise { @@ -131,6 +133,6 @@ export class VerificationService extends BaseService { async deleteVerificationRecords(orgId: string, userDetails: user): Promise { const payload = { orgId, userDetails }; - return this.sendNatsMessage(this.verificationServiceProxy, 'delete-verification-records', payload); + return this.natsClient.sendNatsMessage(this.verificationServiceProxy, 'delete-verification-records', payload); } } diff --git a/apps/api-gateway/src/webhook/webhook.module.ts b/apps/api-gateway/src/webhook/webhook.module.ts index db38e1f7e..ee1d4d6a1 100644 --- a/apps/api-gateway/src/webhook/webhook.module.ts +++ b/apps/api-gateway/src/webhook/webhook.module.ts @@ -7,6 +7,7 @@ import { HttpModule } from '@nestjs/axios'; import { getNatsOptions } from '@credebl/common/nats.config'; import { AwsService } from '@credebl/aws'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -20,6 +21,6 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]) ], controllers: [WebhookController], - providers: [WebhookService, CommonService, AwsService] + providers: [WebhookService, CommonService, AwsService, NATSClient] }) export class WebhookModule { } diff --git a/apps/api-gateway/src/webhook/webhook.service.ts b/apps/api-gateway/src/webhook/webhook.service.ts index faca09b72..cd35aa618 100644 --- a/apps/api-gateway/src/webhook/webhook.service.ts +++ b/apps/api-gateway/src/webhook/webhook.service.ts @@ -5,23 +5,26 @@ import { BaseService } from 'libs/service/base.service'; import { RegisterWebhookDto } from './dtos/register-webhook-dto'; import { ICreateWebhookUrl, IGetWebhookUrl } from 'apps/webhook/interfaces/webhook.interfaces'; import { GetWebhookDto } from './dtos/get-webhoook-dto'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class WebhookService extends BaseService { - constructor(@Inject('NATS_CLIENT') private readonly webhookProxy: ClientProxy) { + constructor(@Inject('NATS_CLIENT') private readonly webhookProxy: ClientProxy, + private natsClient : NATSClient +) { super('WebhookService'); } async getWebhookUrl(getWebhook: GetWebhookDto): Promise { // NATS call - return this.sendNatsMessage(this.webhookProxy, 'get-webhookurl', getWebhook); + return this.natsClient.sendNatsMessage(this.webhookProxy, 'get-webhookurl', getWebhook); } async registerWebhook(registerWebhookDto: RegisterWebhookDto): Promise { const payload = { registerWebhookDto}; // NATS call - return this.sendNatsMessage(this.webhookProxy, 'register-webhook', payload); + return this.natsClient.sendNatsMessage(this.webhookProxy, 'register-webhook', payload); } diff --git a/apps/cloud-wallet/src/cloud-wallet.module.ts b/apps/cloud-wallet/src/cloud-wallet.module.ts index 895aac9a2..4ad8c3185 100644 --- a/apps/cloud-wallet/src/cloud-wallet.module.ts +++ b/apps/cloud-wallet/src/cloud-wallet.module.ts @@ -7,6 +7,11 @@ import { CacheModule } from '@nestjs/cache-manager'; import { getNatsOptions } from '@credebl/common/nats.config'; import { PrismaService } from '@credebl/prisma-service'; import { CloudWalletRepository } from './cloud-wallet.repository'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; +import { MICRO_SERVICE_NAME } from '@credebl/common/common.constant'; @Module({ imports: [ @@ -19,9 +24,17 @@ ClientsModule.register([ ]), CommonModule, + GlobalConfigModule, + LoggerModule, PlatformConfig, ContextInterceptorModule, CacheModule.register() ], controllers: [CloudWalletController], - providers: [CloudWalletService, CloudWalletRepository, PrismaService, Logger] + providers: [ + CloudWalletService, CloudWalletRepository, PrismaService, Logger, + { + provide: MICRO_SERVICE_NAME, + useValue: 'cloud-wallet' // Provide the name directly + } + ] }) export class CloudWalletModule {} diff --git a/apps/cloud-wallet/src/main.ts b/apps/cloud-wallet/src/main.ts index 2168ad546..9fa33a0eb 100644 --- a/apps/cloud-wallet/src/main.ts +++ b/apps/cloud-wallet/src/main.ts @@ -5,6 +5,7 @@ import { Logger } from '@nestjs/common'; import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; const logger = new Logger(); @@ -15,6 +16,7 @@ async function bootstrap(): Promise { options: getNatsOptions(CommonConstants.CLOUD_WALLET_SERVICE, process.env.CLOUD_WALLET_NKEY_SEED) }); + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/connection/src/connection.module.ts b/apps/connection/src/connection.module.ts index bd711711c..4846c4e55 100644 --- a/apps/connection/src/connection.module.ts +++ b/apps/connection/src/connection.module.ts @@ -10,6 +10,11 @@ import { CacheModule } from '@nestjs/cache-manager'; import { getNatsOptions } from '@credebl/common/nats.config'; import { UserActivityRepository } from 'libs/user-activity/repositories'; import { CommonConstants } from '@credebl/common/common.constant'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; +import { NATSClient } from 'libs/common/NATSClient'; // import { nkeyAuthenticator } from 'nats'; @Module({ @@ -21,11 +26,12 @@ import { CommonConstants } from '@credebl/common/common.constant'; options: getNatsOptions(CommonConstants.CONNECTION_SERVICE, process.env.CONNECTION_NKEY_SEED) } ]), - CommonModule, + GlobalConfigModule, + LoggerModule, PlatformConfig, ContextInterceptorModule, CacheModule.register() ], controllers: [ConnectionController], - providers: [ConnectionService, ConnectionRepository, UserActivityRepository, PrismaService, Logger] + providers: [ConnectionService, ConnectionRepository, UserActivityRepository, PrismaService, Logger, NATSClient] }) export class ConnectionModule { } diff --git a/apps/connection/src/connection.service.ts b/apps/connection/src/connection.service.ts index 5cad28ba7..873f4edf8 100644 --- a/apps/connection/src/connection.service.ts +++ b/apps/connection/src/connection.service.ts @@ -3,7 +3,7 @@ import { CommonService } from '@credebl/common'; import { CommonConstants } from '@credebl/common/common.constant'; import { HttpException, Inject, Injectable, Logger, NotFoundException } from '@nestjs/common'; import { ClientProxy, RpcException } from '@nestjs/microservices'; -import { map } from 'rxjs'; +import { from, map } from 'rxjs'; import { ConnectionResponseDetail, AgentConnectionSearchCriteria, @@ -27,6 +27,7 @@ import { IBasicMessage, IQuestionPayload } from './interfaces/messaging.interfac import { RecordType, user } from '@prisma/client'; import { UserActivityRepository } from 'libs/user-activity/repositories'; import { agent_invitations } from '@prisma/client'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class ConnectionService { constructor( @@ -35,7 +36,8 @@ export class ConnectionService { private readonly connectionRepository: ConnectionRepository, private readonly userActivityRepository: UserActivityRepository, private readonly logger: Logger, - @Inject(CACHE_MANAGER) private cacheService: Cache + @Inject(CACHE_MANAGER) private cacheService: Cache, + private natsClient : NATSClient ) {} /** @@ -762,8 +764,8 @@ export class ConnectionService { response: string; }> { try { - return this.connectionServiceProxy - .send(pattern, payload) + return from(this.natsClient + .send(this.connectionServiceProxy, pattern, payload)) .pipe( map((response) => ({ response diff --git a/apps/connection/src/main.ts b/apps/connection/src/main.ts index 22c572fd3..334c7fee8 100644 --- a/apps/connection/src/main.ts +++ b/apps/connection/src/main.ts @@ -5,6 +5,7 @@ import { Logger } from '@nestjs/common'; import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; const logger = new Logger(); @@ -15,6 +16,7 @@ async function bootstrap(): Promise { options: getNatsOptions(CommonConstants.CONNECTION_SERVICE, process.env.CONNECTION_NKEY_SEED) }); + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/geo-location/src/geo-location.module.ts b/apps/geo-location/src/geo-location.module.ts index 4fc8e2679..f664a861f 100644 --- a/apps/geo-location/src/geo-location.module.ts +++ b/apps/geo-location/src/geo-location.module.ts @@ -8,6 +8,10 @@ import { getNatsOptions } from '@credebl/common/nats.config'; import { PrismaService } from '@credebl/prisma-service'; import { GeoLocationRepository } from './geo-location.repository'; import { CommonConstants } from '@credebl/common/common.constant'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; @Module({ imports: [ @@ -19,6 +23,8 @@ import { CommonConstants } from '@credebl/common/common.constant'; } ]), CommonModule, + GlobalConfigModule, + LoggerModule, PlatformConfig, ContextInterceptorModule, CacheModule.register() ], controllers: [GeoLocationController], diff --git a/apps/geo-location/src/main.ts b/apps/geo-location/src/main.ts index 8ed718438..0e01892c0 100644 --- a/apps/geo-location/src/main.ts +++ b/apps/geo-location/src/main.ts @@ -5,6 +5,7 @@ import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { getNatsOptions } from '@credebl/common/nats.config'; import { GeoLocationModule } from './geo-location.module'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; const logger = new Logger(); @@ -13,6 +14,7 @@ async function bootstrap(): Promise { transport: Transport.NATS, options: getNatsOptions(CommonConstants.GEO_LOCATION_SERVICE, process.env.GEOLOCATION_NKEY_SEED) }); + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/issuance/src/issuance.module.ts b/apps/issuance/src/issuance.module.ts index fd5fc0152..e982498d8 100644 --- a/apps/issuance/src/issuance.module.ts +++ b/apps/issuance/src/issuance.module.ts @@ -15,7 +15,12 @@ import * as redisStore from 'cache-manager-redis-store'; import { BulkIssuanceProcessor } from './issuance.processor'; import { AwsService } from '@credebl/aws'; import { UserActivityRepository } from 'libs/user-activity/repositories'; -import { CommonConstants } from '@credebl/common/common.constant'; +import { CommonConstants, MICRO_SERVICE_NAME } from '@credebl/common/common.constant'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -28,6 +33,8 @@ import { CommonConstants } from '@credebl/common/common.constant'; } ]), CommonModule, + GlobalConfigModule, + LoggerModule, PlatformConfig, ContextInterceptorModule, CacheModule.register({ store: redisStore, host: process.env.REDIS_HOST, port: process.env.REDIS_PORT }), BullModule.forRoot({ redis: { @@ -40,6 +47,14 @@ import { CommonConstants } from '@credebl/common/common.constant'; }) ], controllers: [IssuanceController], - providers: [IssuanceService, IssuanceRepository, UserActivityRepository, PrismaService, Logger, OutOfBandIssuance, EmailDto, BulkIssuanceProcessor, AwsService] + providers: [ + IssuanceService, IssuanceRepository, UserActivityRepository, PrismaService, + Logger, OutOfBandIssuance, EmailDto, BulkIssuanceProcessor, AwsService, NATSClient, + { + provide: MICRO_SERVICE_NAME, + useValue: 'IssuanceService' // Provide the name directly + } + ] + //exports: [MICRO_SERVICE_NAME] }) export class IssuanceModule { } diff --git a/apps/issuance/src/issuance.service.ts b/apps/issuance/src/issuance.service.ts index 7cb846a4c..4fcbdd5f5 100644 --- a/apps/issuance/src/issuance.service.ts +++ b/apps/issuance/src/issuance.service.ts @@ -8,7 +8,7 @@ import { IUserRequest } from '@credebl/user-request/user-request.interface'; import { CommonConstants } from '@credebl/common/common.constant'; import { ResponseMessages } from '@credebl/common/response-messages'; import { ClientProxy, RpcException } from '@nestjs/microservices'; -import { map } from 'rxjs'; +import { from, map } from 'rxjs'; import { BulkPayloadDetails, CredentialOffer, FileUpload, FileUploadData, IAttributes, IBulkPayloadObject, IClientDetails, ICreateOfferResponse, ICredentialPayload, IIssuance, IIssueData, IPattern, IQueuePayload, ISchemaAttributes, ISendOfferNatsPayload, ImportFileDetails, IssueCredentialWebhookPayload, OutOfBandCredentialOfferPayload, PreviewRequest, SchemaDetails, SendEmailCredentialOffer, TemplateDetailsInterface } from '../interfaces/issuance.interfaces'; import { AutoAccept, IssuanceProcessState, OrgAgentType, PromiseResult, SchemaType, TemplateIdentifier, W3CSchemaDataType} from '@credebl/enum/enum'; import * as QRCode from 'qrcode'; @@ -37,6 +37,9 @@ import * as pLimit from 'p-limit'; import { UserActivityRepository } from 'libs/user-activity/repositories'; import { validateW3CSchemaAttributes } from '../libs/helpers/attributes.validator'; import { ISchemaDetail } from '@credebl/common/interfaces/schema.interface'; +import ContextStorageService, { ContextStorageServiceKey } from '@credebl/context/contextStorageService.interface'; +import { NATSClient } from 'libs/common/NATSClient'; + @Injectable() export class IssuanceService { private readonly logger = new Logger('IssueCredentialService'); @@ -51,8 +54,11 @@ export class IssuanceService { private readonly outOfBandIssuance: OutOfBandIssuance, private readonly emailData: EmailDto, private readonly awsService: AwsService, - @InjectQueue('bulk-issuance') private readonly bulkIssuanceQueue: Queue, - @Inject(CACHE_MANAGER) private readonly cacheService: Cache + @InjectQueue('bulk-issuance') private bulkIssuanceQueue: Queue, + @Inject(CACHE_MANAGER) private cacheService: Cache, + @Inject(ContextStorageServiceKey) + private contextStorageService: ContextStorageService, + private natsClient : NATSClient ) { } async getIssuanceRecords(orgId: string): Promise { @@ -389,9 +395,9 @@ export class IssuanceService { // Once implement this for all component then we'll remove the duplicate function async natsCallAgent(pattern: IPattern, payload: ISendOfferNatsPayload): Promise { try { - const createOffer = await this.issuanceServiceProxy - .send(pattern, payload) - .toPromise() + const createOffer = await this.natsClient + .send(this.issuanceServiceProxy, pattern, payload) + // .toPromise() .catch(error => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -411,8 +417,8 @@ export class IssuanceService { response: string; }> { try { - return this.issuanceServiceProxy - .send(pattern, payload) + return from(this.natsClient + .send(this.issuanceServiceProxy, pattern, payload)) .pipe( map((response) => ( { @@ -1297,9 +1303,9 @@ async sendEmailForCredentialOffer(sendEmailCredentialOffer: SendEmailCredentialO const payload = { templateIds }; - const schemaDetails = await this.issuanceServiceProxy - .send(pattern, payload) - .toPromise() + const schemaDetails = await this.natsClient + .send(this.issuanceServiceProxy, pattern, payload) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -1753,7 +1759,7 @@ async sendEmailForCredentialOffer(sendEmailCredentialOffer: SendEmailCredentialO try { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const message = await this.issuanceServiceProxy.send(pattern, payload).toPromise(); + const message = await this.natsClient.send(this.issuanceServiceProxy, pattern, payload); return message; } catch (error) { this.logger.error(`catch: ${JSON.stringify(error)}`); diff --git a/apps/issuance/src/main.ts b/apps/issuance/src/main.ts index cacad1b16..ccea2c8f6 100644 --- a/apps/issuance/src/main.ts +++ b/apps/issuance/src/main.ts @@ -5,6 +5,7 @@ import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { IssuanceModule } from '../src/issuance.module'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; const logger = new Logger(); @@ -16,6 +17,7 @@ async function bootstrap(): Promise { }); + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/ledger/src/credential-definition/credential-definition.module.ts b/apps/ledger/src/credential-definition/credential-definition.module.ts index d01b67179..beaab1f05 100644 --- a/apps/ledger/src/credential-definition/credential-definition.module.ts +++ b/apps/ledger/src/credential-definition/credential-definition.module.ts @@ -10,6 +10,7 @@ import { PrismaService } from '@credebl/prisma-service'; import { CacheModule } from '@nestjs/cache-manager'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ ClientsModule.register([ @@ -27,7 +28,8 @@ import { CommonConstants } from '@credebl/common/common.constant'; CredentialDefinitionService, CredentialDefinitionRepository, Logger, - PrismaService + PrismaService, + NATSClient ], controllers: [CredentialDefinitionController] }) diff --git a/apps/ledger/src/credential-definition/credential-definition.service.ts b/apps/ledger/src/credential-definition/credential-definition.service.ts index 64ec8815e..8f59567fb 100644 --- a/apps/ledger/src/credential-definition/credential-definition.service.ts +++ b/apps/ledger/src/credential-definition/credential-definition.service.ts @@ -18,12 +18,15 @@ import { OrgAgentType, SchemaType, SortValue } from '@credebl/enum/enum'; import { Cache } from 'cache-manager'; import { CACHE_MANAGER } from '@nestjs/cache-manager'; import { ICredDefDetails, IPlatformCredDefsData } from '@credebl/common/interfaces/cred-def.interface'; +import { NATSClient } from 'libs/common/NATSClient'; +import { from } from 'rxjs'; @Injectable() export class CredentialDefinitionService extends BaseService { constructor( private readonly credentialDefinitionRepository: CredentialDefinitionRepository, @Inject('NATS_CLIENT') private readonly credDefServiceProxy: ClientProxy, - @Inject(CACHE_MANAGER) private cacheService: Cache + @Inject(CACHE_MANAGER) private cacheService: Cache, + private natsClient : NATSClient ) { super('CredentialDefinitionService'); @@ -148,8 +151,8 @@ export class CredentialDefinitionService extends BaseService { cmd: 'agent-create-credential-definition' }; - const credDefResponse = await this.credDefServiceProxy - .send(pattern, payload) + const credDefResponse = await from(this.natsClient + .send(this.credDefServiceProxy, pattern, payload)) .pipe( map((response) => ( { @@ -254,8 +257,8 @@ export class CredentialDefinitionService extends BaseService { const pattern = { cmd: 'agent-get-credential-definition' }; - const credDefResponse = await this.credDefServiceProxy - .send(pattern, payload) + const credDefResponse = await from(this.natsClient + .send(this.credDefServiceProxy, pattern, payload)) .pipe( map((response) => ( { @@ -371,7 +374,7 @@ export class CredentialDefinitionService extends BaseService { try { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const message = await this.credDefServiceProxy.send(pattern, payload).toPromise(); + const message = await this.natsClient.send(this.credDefServiceProxy, pattern, payload); return message; } catch (error) { this.logger.error(`catch: ${JSON.stringify(error)}`); diff --git a/apps/ledger/src/ledger.module.ts b/apps/ledger/src/ledger.module.ts index 770f578ea..ed5daa043 100644 --- a/apps/ledger/src/ledger.module.ts +++ b/apps/ledger/src/ledger.module.ts @@ -8,9 +8,15 @@ import { ClientsModule, Transport } from '@nestjs/microservices'; import { LedgerRepository } from './repositories/ledger.repository'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; @Module({ imports: [ + GlobalConfigModule, + LoggerModule, PlatformConfig, ContextInterceptorModule, ClientsModule.register([ { name: 'NATS_CLIENT', diff --git a/apps/ledger/src/main.ts b/apps/ledger/src/main.ts index 178ab7b6a..fe38aaa35 100644 --- a/apps/ledger/src/main.ts +++ b/apps/ledger/src/main.ts @@ -5,6 +5,7 @@ import { Logger } from '@nestjs/common'; import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; async function bootstrap(): Promise { @@ -13,6 +14,7 @@ async function bootstrap(): Promise { options: getNatsOptions(CommonConstants.LEDGER_SERVICE, process.env.LEDGER_NKEY_SEED) }); + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/ledger/src/schema/schema.module.ts b/apps/ledger/src/schema/schema.module.ts index 795783bef..54c0cfb59 100644 --- a/apps/ledger/src/schema/schema.module.ts +++ b/apps/ledger/src/schema/schema.module.ts @@ -10,6 +10,7 @@ import { PrismaService } from '@credebl/prisma-service'; import { CacheModule } from '@nestjs/cache-manager'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ ClientsModule.register([ @@ -28,7 +29,8 @@ import { CommonConstants } from '@credebl/common/common.constant'; SchemaService, SchemaRepository, Logger, - PrismaService + PrismaService, + NATSClient ], controllers: [SchemaController] }) diff --git a/apps/ledger/src/schema/schema.service.ts b/apps/ledger/src/schema/schema.service.ts index 2a9a073b8..fbc7c3c6a 100644 --- a/apps/ledger/src/schema/schema.service.ts +++ b/apps/ledger/src/schema/schema.service.ts @@ -25,6 +25,8 @@ import { W3CSchemaVersion } from './enum/schema.enum'; import { v4 as uuidv4 } from 'uuid'; import { networkNamespace } from '@credebl/common/common.utils'; import { checkDidLedgerAndNetwork } from '@credebl/common/cast.helper'; +import { NATSClient } from 'libs/common/NATSClient'; +import { from } from 'rxjs'; @Injectable() export class SchemaService extends BaseService { @@ -32,7 +34,8 @@ export class SchemaService extends BaseService { private readonly schemaRepository: SchemaRepository, private readonly commonService: CommonService, @Inject('NATS_CLIENT') private readonly schemaServiceProxy: ClientProxy, - @Inject(CACHE_MANAGER) private cacheService: Cache + @Inject(CACHE_MANAGER) private cacheService: Cache, + private natsClient : NATSClient ) { super('SchemaService'); } @@ -573,8 +576,8 @@ export class SchemaService extends BaseService { const pattern = { cmd: 'agent-create-schema' }; - const schemaResponse = await this.schemaServiceProxy - .send(pattern, payload) + const schemaResponse = await from(this.natsClient + .send(this.schemaServiceProxy, pattern, payload)) .pipe( map((response) => ( { @@ -599,8 +602,8 @@ export class SchemaService extends BaseService { const natsPattern = { cmd: 'agent-create-w3c-schema' }; - const W3CSchemaResponse = await this.schemaServiceProxy - .send(natsPattern, payload) + const W3CSchemaResponse = await from(this.natsClient + .send(this.schemaServiceProxy, natsPattern, payload)) .pipe( map((response) => ( { @@ -717,8 +720,8 @@ export class SchemaService extends BaseService { const pattern = { cmd: 'agent-get-schema' }; - const schemaResponse = await this.schemaServiceProxy - .send(pattern, payload) + const schemaResponse = await from(this.natsClient + .send(this.schemaServiceProxy, pattern, payload)) .pipe( map((response) => ( { @@ -850,7 +853,7 @@ export class SchemaService extends BaseService { try { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const message = await this.schemaServiceProxy.send(pattern, payload).toPromise(); + const message = await this.natsClient.send(this.schemaServiceProxy, pattern, payload); return message; } catch (error) { this.logger.error(`catch: ${JSON.stringify(error)}`); diff --git a/apps/notification/src/main.ts b/apps/notification/src/main.ts index cc1d43d0b..7a25ed40a 100644 --- a/apps/notification/src/main.ts +++ b/apps/notification/src/main.ts @@ -5,6 +5,7 @@ import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { NotificationModule } from '../src/notification.module'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; const logger = new Logger(); @@ -16,6 +17,7 @@ async function bootstrap(): Promise { }); + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/notification/src/notification.module.ts b/apps/notification/src/notification.module.ts index 66a6f151d..a29ff124e 100644 --- a/apps/notification/src/notification.module.ts +++ b/apps/notification/src/notification.module.ts @@ -9,6 +9,10 @@ import { NotificationService } from './notification.service'; import { PrismaService } from '@credebl/prisma-service'; import { NotificationRepository } from './notification.repository'; import { CommonConstants } from '@credebl/common/common.constant'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; @Module({ imports: [ @@ -21,6 +25,8 @@ import { CommonConstants } from '@credebl/common/common.constant'; } ]), CommonModule, + GlobalConfigModule, + LoggerModule, PlatformConfig, ContextInterceptorModule, CacheModule.register({ host: process.env.REDIS_HOST, port: process.env.REDIS_PORT }) ], controllers: [NotificationController], diff --git a/apps/organization/src/main.ts b/apps/organization/src/main.ts index 1ee87db06..a8d0f278e 100644 --- a/apps/organization/src/main.ts +++ b/apps/organization/src/main.ts @@ -6,6 +6,7 @@ import { MicroserviceOptions, Transport } from '@nestjs/microservices'; // import { nkeyAuthenticator } from 'nats'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; const logger = new Logger(); @@ -16,6 +17,7 @@ async function bootstrap(): Promise { options: getNatsOptions(CommonConstants.ORGANIZATION_SERVICE, process.env.ORGANIZATION_NKEY_SEED) }); + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/organization/src/organization.module.ts b/apps/organization/src/organization.module.ts index 70041fc6d..c9e29f7a6 100644 --- a/apps/organization/src/organization.module.ts +++ b/apps/organization/src/organization.module.ts @@ -20,6 +20,11 @@ import { KeycloakUrlService } from '@credebl/keycloak-url'; import { AwsService } from '@credebl/aws'; import { CommonConstants } from '@credebl/common/common.constant'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ ClientsModule.register([ @@ -30,6 +35,8 @@ import { CommonConstants } from '@credebl/common/common.constant'; } ]), CommonModule, + GlobalConfigModule, + LoggerModule, PlatformConfig, ContextInterceptorModule, CacheModule.register() ], controllers: [OrganizationController], @@ -39,7 +46,8 @@ import { CommonConstants } from '@credebl/common/common.constant'; UserActivityRepository, UserOrgRolesRepository, UserRepository, UserActivityService, ClientRegistrationService, KeycloakUrlService, - AwsService + AwsService, + NATSClient ] }) diff --git a/apps/organization/src/organization.service.ts b/apps/organization/src/organization.service.ts index 5593d301f..98fb7eaa0 100644 --- a/apps/organization/src/organization.service.ts +++ b/apps/organization/src/organization.service.ts @@ -51,6 +51,8 @@ import { toNumber } from '@credebl/common/cast.helper'; import { UserActivityRepository } from 'libs/user-activity/repositories'; import { DeleteOrgInvitationsEmail } from '../templates/delete-organization-invitations.template'; import { IOrgRoles } from 'libs/org-roles/interfaces/org-roles.interface'; +import { NATSClient } from 'libs/common/NATSClient'; +import { from } from 'rxjs'; @Injectable() export class OrganizationService { constructor( @@ -65,7 +67,8 @@ export class OrganizationService { private readonly logger: Logger, @Inject(CACHE_MANAGER) private cacheService: Cache, private readonly clientRegistrationService: ClientRegistrationService, - private readonly userActivityRepository: UserActivityRepository + private readonly userActivityRepository: UserActivityRepository, + private natsClient : NATSClient ) {} async getPlatformConfigDetails(): Promise { @@ -557,9 +560,9 @@ export class OrganizationService { orgId } }; - const connectionInvitationData = await this.organizationServiceProxy - .send(pattern, payload) - .toPromise() + const connectionInvitationData = await this.natsClient + .send(this.organizationServiceProxy, pattern, payload) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -1050,9 +1053,9 @@ export class OrganizationService { const pattern = { cmd: 'get-user-by-mail' }; const payload = { email }; - const userData: user = await this.organizationServiceProxy - .send(pattern, payload) - .toPromise() + const userData: user = await this.natsClient + .send(this.organizationServiceProxy, pattern, payload) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -1073,9 +1076,9 @@ export class OrganizationService { const pattern = { cmd: 'get-user-by-mail' }; const payload = { email: userEmail }; - const userData = await this.organizationServiceProxy - .send(pattern, payload) - .toPromise() + const userData = await this.natsClient + .send(this.organizationServiceProxy, pattern, payload) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -1093,9 +1096,9 @@ export class OrganizationService { const pattern = { cmd: 'get-user-by-user-id' }; // const payload = { id: userId }; - const userData = await this.organizationServiceProxy - .send(pattern, userId) - .toPromise() + const userData = await this.natsClient + .send(this.organizationServiceProxy, pattern, userId) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -1391,6 +1394,29 @@ export class OrganizationService { } } + async _getEcosystemsCount(orgId: string, userId: string): Promise { + const pattern = { cmd: 'get-ecosystem-records' }; + + const payload = { + orgId, + userId + }; + const ecosystemsCount = await (this.natsClient + .send(this.organizationServiceProxy, pattern, payload) as unknown as Promise) + // .toPromise() + .catch((error) => { + this.logger.error(`catch: ${JSON.stringify(error)}`); + throw new HttpException( + { + status: error.status, + error: error.message + }, + error.status + ); + }); + + return ecosystemsCount; + } async _getConnectionRecordsCount(orgId: string, userId: string): Promise { const pattern = { cmd: 'get-connection-records' }; @@ -1399,9 +1425,9 @@ export class OrganizationService { orgId, userId }; - const connectionsCount = await this.organizationServiceProxy - .send(pattern, payload) - .toPromise() + const connectionsCount = await this.natsClient + .send(this.organizationServiceProxy, pattern, payload) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -1424,9 +1450,9 @@ export class OrganizationService { orgId, userId }; - const issuanceCount = await this.organizationServiceProxy - .send(pattern, payload) - .toPromise() + const issuanceCount = await this.natsClient + .send(this.organizationServiceProxy, pattern, payload) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -1448,9 +1474,9 @@ export class OrganizationService { orgId, userId }; - const verificationCount = await this.organizationServiceProxy - .send(pattern, payload) - .toPromise() + const verificationCount = await this.natsClient + .send(this.organizationServiceProxy, pattern, payload) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -1650,22 +1676,20 @@ export class OrganizationService { return isEmailSent; } - async _deleteWallet(payload: IOrgAgent): Promise<{ - response; - }> { + async _deleteWallet(payload: IOrgAgent): Promise { try { const pattern = { cmd: 'delete-wallet' }; - return this.organizationServiceProxy - .send(pattern, payload) - .pipe( - map((response) => ({ - response - })) - ) - .toPromise() + return this.natsClient + .send(this.organizationServiceProxy, pattern, payload) + // .pipe( + // map((response) => ({ + // response + // })) + // ) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -1682,34 +1706,32 @@ export class OrganizationService { } } - async getUserKeycloakIdByEmail(userEmails: string[]): Promise<{ - response; - }> { + async getUserKeycloakIdByEmail(userEmails: string[]): Promise<{ response }> { + const pattern = { cmd: 'get-user-keycloak-id' }; + try { - const pattern = { - cmd: 'get-user-keycloak-id' - }; - - return this.organizationServiceProxy - .send(pattern, userEmails) - .pipe( - map((response: string) => ({ - response - })) - ) - .toPromise() - .catch((error) => { - this.logger.error(`getUserKeycloakIdByEmail catch: ${JSON.stringify(error)}`); - throw new HttpException( - { - status: error?.statusCode, - error: error?.message - }, - error.error - ); - }); + const result = await from( + this.natsClient.send(this.organizationServiceProxy, pattern, userEmails) + ) + .pipe( + map((response: string) => ({ + response + })) + ) + .toPromise() + .catch((error) => { + this.logger.error(`getUserKeycloakIdByEmail catch: ${JSON.stringify(error)}`); + throw new HttpException( + { + status: error?.statusCode, + error: error?.message + }, + error.error + ); + }); + return result; } catch (error) { - this.logger.error(`[getUserKeycloakIdByEmail] - error in get keycloak id by email : ${JSON.stringify(error)}`); + this.logger.error(`[getUserKeycloakIdByEmail] - error in get keycloak id by email: ${JSON.stringify(error)}`); throw error; } } @@ -1720,7 +1742,7 @@ export class OrganizationService { try { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const message = await this.organizationServiceProxy.send(pattern, payload).toPromise(); + const message = await this.natsClient.send(this.organizationServiceProxy, pattern, payload); return message; } catch (error) { this.logger.error(`catch: ${JSON.stringify(error)}`); @@ -1871,7 +1893,7 @@ export class OrganizationService { try { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const message = await this.organizationServiceProxy.send(pattern, payload).toPromise(); + const message = await this.natsClient.send(this.organizationServiceProxy, pattern, payload); return message; } catch (error) { this.logger.error(`catch: ${JSON.stringify(error)}`); diff --git a/apps/user/src/fido/fido.module.ts b/apps/user/src/fido/fido.module.ts index 14077a4b3..bcc7be6a6 100644 --- a/apps/user/src/fido/fido.module.ts +++ b/apps/user/src/fido/fido.module.ts @@ -20,6 +20,7 @@ import { UserOrgRolesService } from '@credebl/user-org-roles'; import { UserRepository } from '../../repositories/user.repository'; import { UserService } from '../user.service'; import { AwsService } from '@credebl/aws'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -53,7 +54,8 @@ import { AwsService } from '@credebl/aws'; OrgRolesRepository, UserOrgRolesRepository, UserActivityService, - UserActivityRepository + UserActivityRepository, + NATSClient ] }) export class FidoModule { } diff --git a/apps/user/src/main.ts b/apps/user/src/main.ts index 8c3df1edc..a8ad0eb8e 100644 --- a/apps/user/src/main.ts +++ b/apps/user/src/main.ts @@ -5,6 +5,7 @@ import { UserModule } from './user.module'; import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; const logger = new Logger(); @@ -14,6 +15,7 @@ async function bootstrap(): Promise { options: getNatsOptions(CommonConstants.USER_SERVICE, process.env.USER_NKEY_SEED) }); + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/user/src/user.module.ts b/apps/user/src/user.module.ts index 7ecead247..d262d60ab 100644 --- a/apps/user/src/user.module.ts +++ b/apps/user/src/user.module.ts @@ -20,6 +20,11 @@ import { UserDevicesRepository } from '../repositories/user-device.repository'; import { getNatsOptions } from '@credebl/common/nats.config'; import { AwsService } from '@credebl/aws'; import { CommonConstants } from '@credebl/common/common.constant'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; +import { NATSClient } from 'libs/common/NATSClient'; @Module({ imports: [ @@ -32,6 +37,8 @@ import { CommonConstants } from '@credebl/common/common.constant'; ]), CommonModule, + GlobalConfigModule, + LoggerModule, PlatformConfig, ContextInterceptorModule, FidoModule, OrgRolesModule ], @@ -51,7 +58,8 @@ import { CommonConstants } from '@credebl/common/common.constant'; UserOrgRolesRepository, UserActivityService, UserActivityRepository, - UserDevicesRepository + UserDevicesRepository, + NATSClient ] }) export class UserModule {} diff --git a/apps/user/src/user.service.ts b/apps/user/src/user.service.ts index 2c7cc72d1..60d1c075d 100644 --- a/apps/user/src/user.service.ts +++ b/apps/user/src/user.service.ts @@ -66,6 +66,7 @@ import { AddPasskeyDetailsDto } from 'apps/api-gateway/src/user/dto/add-user.dto import { URLUserResetPasswordTemplate } from '../templates/reset-password-template'; import { toNumber } from '@credebl/common/cast.helper'; import * as jwt from 'jsonwebtoken'; +import { NATSClient } from 'libs/common/NATSClient'; @Injectable() export class UserService { @@ -81,7 +82,8 @@ export class UserService { private readonly awsService: AwsService, private readonly userDevicesRepository: UserDevicesRepository, private readonly logger: Logger, - @Inject('NATS_CLIENT') private readonly userServiceProxy: ClientProxy + @Inject('NATS_CLIENT') private readonly userServiceProxy: ClientProxy, + private natsClient : NATSClient ) {} /** @@ -824,9 +826,9 @@ export class UserService { search }; - const invitationsData = await this.userServiceProxy - .send(pattern, payload) - .toPromise() + const invitationsData = await this.natsClient + .send(this.userServiceProxy, pattern, payload) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -892,9 +894,9 @@ export class UserService { async _getTotalOrgCount(payload): Promise { const pattern = { cmd: 'get-organizations-count' }; - const getOrganizationCount = await this.userServiceProxy - .send(pattern, payload) - .toPromise() + const getOrganizationCount = await this.natsClient + .send(this.userServiceProxy, pattern, payload) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -1018,9 +1020,9 @@ export class UserService { const payload = { userId, keycloakUserId, orgId, invitationId, status, email }; - const invitationsData = await this.userServiceProxy - .send(pattern, payload) - .toPromise() + const invitationsData = await this.natsClient + .send(this.userServiceProxy, pattern, payload) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( diff --git a/apps/utility/src/main.ts b/apps/utility/src/main.ts index ee165502d..3000eedd3 100644 --- a/apps/utility/src/main.ts +++ b/apps/utility/src/main.ts @@ -5,6 +5,7 @@ import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { getNatsOptions } from '@credebl/common/nats.config'; import { UtilitiesModule } from './utilities.module'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; const logger = new Logger(); @@ -15,6 +16,7 @@ async function bootstrap(): Promise { options: getNatsOptions(CommonConstants.UTILITY_SERVICE, process.env.UTILITIES_NKEY_SEED) }); + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/utility/src/utilities.module.ts b/apps/utility/src/utilities.module.ts index 51c31d6dd..2f547234f 100644 --- a/apps/utility/src/utilities.module.ts +++ b/apps/utility/src/utilities.module.ts @@ -9,6 +9,10 @@ import { UtilitiesService } from './utilities.service'; import { UtilitiesRepository } from './utilities.repository'; import { AwsService } from '@credebl/aws'; import { CommonConstants } from '@credebl/common/common.constant'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; @Module({ imports: [ @@ -20,6 +24,8 @@ import { CommonConstants } from '@credebl/common/common.constant'; } ]), CommonModule, + GlobalConfigModule, + LoggerModule, PlatformConfig, ContextInterceptorModule, CacheModule.register() ], controllers: [UtilitiesController], diff --git a/apps/verification/src/main.ts b/apps/verification/src/main.ts index b8ff0ea23..007069c38 100644 --- a/apps/verification/src/main.ts +++ b/apps/verification/src/main.ts @@ -5,6 +5,7 @@ import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { VerificationModule } from './verification.module'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; const logger = new Logger(); @@ -16,6 +17,7 @@ async function bootstrap(): Promise { }); + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/verification/src/verification.module.ts b/apps/verification/src/verification.module.ts index 7444a03e6..a927618c8 100644 --- a/apps/verification/src/verification.module.ts +++ b/apps/verification/src/verification.module.ts @@ -11,7 +11,11 @@ import { EmailDto } from '@credebl/common/dtos/email.dto'; import { CacheModule } from '@nestjs/cache-manager'; import { UserActivityService } from '@credebl/user-activity'; import { UserActivityRepository } from 'libs/user-activity/repositories'; -import { CommonConstants } from '@credebl/common/common.constant'; +import { CommonConstants, MICRO_SERVICE_NAME } from '@credebl/common/common.constant'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; @Module({ imports: [ ClientsModule.register([ @@ -22,11 +26,19 @@ import { CommonConstants } from '@credebl/common/common.constant'; } ]), - - CommonModule, +GlobalConfigModule, + CommonModule, LoggerModule, PlatformConfig, ContextInterceptorModule, CacheModule.register() ], controllers: [VerificationController], - providers: [VerificationService, VerificationRepository, PrismaService, UserActivityService, UserActivityRepository, Logger, OutOfBandVerification, EmailDto] + providers: [ + VerificationService, VerificationRepository, PrismaService, UserActivityService, + UserActivityRepository, Logger, OutOfBandVerification, EmailDto, + { + provide: MICRO_SERVICE_NAME, + useValue: 'Verification-Service' // Provide the name directly + } + ] + //exports: [MICRO_SERVICE_NAME] }) export class VerificationModule { } diff --git a/apps/verification/src/verification.service.ts b/apps/verification/src/verification.service.ts index 5e89ded5a..5a214b093 100644 --- a/apps/verification/src/verification.service.ts +++ b/apps/verification/src/verification.service.ts @@ -21,6 +21,8 @@ import { UserActivityService } from '@credebl/user-activity'; import { convertUrlToDeepLinkUrl } from '@credebl/common/common.utils'; import { UserActivityRepository } from 'libs/user-activity/repositories'; import { ISchemaDetail } from '@credebl/common/interfaces/schema.interface'; +import { NATSClient } from 'libs/common/NATSClient'; +import { from } from 'rxjs'; @Injectable() export class VerificationService { @@ -34,7 +36,8 @@ export class VerificationService { private readonly outOfBandVerification: OutOfBandVerification, private readonly userActivityService: UserActivityService, private readonly emailData: EmailDto, - @Inject(CACHE_MANAGER) private cacheService: Cache + @Inject(CACHE_MANAGER) private cacheService: Cache, + private natsClient : NATSClient ) { } @@ -118,9 +121,9 @@ export class VerificationService { const payload = { templateIds }; - const schemaAndOrgDetails = await this.verificationServiceProxy - .send(pattern, payload) - .toPromise() + const schemaAndOrgDetails = await this.natsClient + .send(this.verificationServiceProxy, pattern, payload) + // .toPromise() .catch((error) => { this.logger.error(`catch: ${JSON.stringify(error)}`); throw new HttpException( @@ -962,7 +965,7 @@ export class VerificationService { try { // eslint-disable-next-line @typescript-eslint/no-explicit-any - const message = await this.verificationServiceProxy.send(pattern, payload).toPromise(); + const message = await this.natsClient.send(this.verificationServiceProxy, pattern, payload); return message; } catch (error) { this.logger.error(`catch: ${JSON.stringify(error)}`); @@ -988,8 +991,8 @@ export class VerificationService { async natsCall(pattern: object, payload: object): Promise<{ response: string; }> { - return this.verificationServiceProxy - .send(pattern, payload) + return from(this.natsClient + .send(this.verificationServiceProxy, pattern, payload)) .pipe( map((response) => ( { diff --git a/apps/webhook/src/main.ts b/apps/webhook/src/main.ts index 2048425a5..303f7f8e9 100644 --- a/apps/webhook/src/main.ts +++ b/apps/webhook/src/main.ts @@ -5,6 +5,7 @@ import { MicroserviceOptions, Transport } from '@nestjs/microservices'; import { WebhookModule } from '../src/webhook.module'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; const logger = new Logger(); @@ -15,7 +16,7 @@ async function bootstrap(): Promise { options: getNatsOptions(CommonConstants.WEBHOOK_SERVICE, process.env.ISSUANCE_NKEY_SEED) }); - + app.useLogger(app.get(NestjsLoggerServiceAdapter)); app.useGlobalFilters(new HttpExceptionFilter()); await app.listen(); diff --git a/apps/webhook/src/webhook.module.ts b/apps/webhook/src/webhook.module.ts index 229a7dd68..fb6d69549 100644 --- a/apps/webhook/src/webhook.module.ts +++ b/apps/webhook/src/webhook.module.ts @@ -8,6 +8,10 @@ import { WebhookRepository } from './webhook.repository'; import { WebhookService } from './webhook.service'; import { getNatsOptions } from '@credebl/common/nats.config'; import { CommonConstants } from '@credebl/common/common.constant'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; +import { ConfigModule as PlatformConfig } from '@credebl/config/config.module'; +import { LoggerModule } from '@credebl/logger/logger.module'; +import { ContextInterceptorModule } from '@credebl/context/contextInterceptorModule'; @Module({ imports: [ @@ -19,7 +23,9 @@ import { CommonConstants } from '@credebl/common/common.constant'; options: getNatsOptions(CommonConstants.WEBHOOK_SERVICE, process.env.ISSUANCE_NKEY_SEED) } ]), - CommonModule + CommonModule, + GlobalConfigModule, + LoggerModule, PlatformConfig, ContextInterceptorModule ], controllers: [WebhookController], providers: [WebhookService, WebhookRepository, PrismaService, Logger] diff --git a/libs/common/NATSClient.ts b/libs/common/NATSClient.ts new file mode 100644 index 000000000..c2cfe5c23 --- /dev/null +++ b/libs/common/NATSClient.ts @@ -0,0 +1,55 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { Inject, Injectable, Logger } from '@nestjs/common'; + +import { ClientProxy, NatsRecordBuilder } from '@nestjs/microservices'; +import { map } from 'rxjs/operators'; +import * as nats from 'nats'; +import { firstValueFrom } from 'rxjs'; +import ContextStorageService, { ContextStorageServiceKey } from '@credebl/context/contextStorageService.interface'; + +@Injectable() +export class NATSClient { + private logger: Logger; + constructor(@Inject(ContextStorageServiceKey) + private contextStorageService: ContextStorageService +) { + this.logger = new Logger('NATSClient'); + } + + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types + sendNats(serviceProxy: ClientProxy, cmd: string, payload: any): Promise { + this.logger.log(`Inside NATSClient for sendNats()`); + const pattern = { cmd }; + const headers = nats.headers(1, this.contextStorageService.getContextId()); + const record = new NatsRecordBuilder(payload).setHeaders(headers).build(); + + return serviceProxy + .send(pattern, record) + .pipe( + map((response: string) => ({ + response + })) + ) + .toPromise(); + } + + +sendNatsMessage(serviceProxy: ClientProxy, cmd: string, payload: any): Promise { + const pattern = { cmd }; + const headers = nats.headers(1, this.contextStorageService.getContextId()); + const record = new NatsRecordBuilder(payload).setHeaders(headers).build(); + + const result = serviceProxy.send(pattern, record); + + return firstValueFrom(result); +} + +send(serviceProxy: ClientProxy, pattern: object, payload: any): Promise { + const headers = nats.headers(1, this.contextStorageService.getContextId()); + const record = new NatsRecordBuilder(payload).setHeaders(headers).build(); + + const result = serviceProxy.send(pattern, record); + + return firstValueFrom(result); +} +} \ No newline at end of file diff --git a/libs/common/src/common.constant.ts b/libs/common/src/common.constant.ts index 1aa3c98b2..deaf3b6ce 100644 --- a/libs/common/src/common.constant.ts +++ b/libs/common/src/common.constant.ts @@ -368,6 +368,8 @@ SEED_LENGTH = 32 } export const ATTRIBUTE_NAME_REGEX = /\['(.*?)'\]/; +// Define a unique symbol for the microservice name token +export const MICRO_SERVICE_NAME = Symbol('MICRO_SERVICE_NAME'); export const postgresqlErrorCodes = []; postgresqlErrorCodes['23503'] = 'foreign_key_violation'; diff --git a/libs/config/src/config.module.ts b/libs/config/src/config.module.ts new file mode 100644 index 000000000..7383e474f --- /dev/null +++ b/libs/config/src/config.module.ts @@ -0,0 +1,16 @@ +import { Global, Module } from '@nestjs/common'; +import { ConfigModule as NestConfigModule } from '@nestjs/config'; +import { ConfigService } from '@credebl/config/config.service'; + +@Global() +@Module({ + imports: [ + NestConfigModule.forRoot({ + isGlobal: true, + }), + ], + controllers: [], + providers: [ConfigService], + exports: [ConfigService], +}) +export class ConfigModule {} diff --git a/libs/config/src/config.service.ts b/libs/config/src/config.service.ts new file mode 100644 index 000000000..49981ca3f --- /dev/null +++ b/libs/config/src/config.service.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@nestjs/common'; +import { ConfigService as NestConfigService } from '@nestjs/config'; + +@Injectable() +export class ConfigService { + constructor(private configService: NestConfigService) {} + + get isProduction(): boolean { + return 'production' === this.environment; + } + + get isDevelopment(): boolean { + return 'development' === this.environment; + } + + get isTest(): boolean { + return 'test' === this.environment; + } + + get slackWebhookUrl(): string { + return this.configService.get('SLACK_INC_WEBHOOK_URL'); + } + + private get environment(): string { + return this.configService.get('NODE_ENV'); + } +} diff --git a/libs/config/src/global-config.module.ts b/libs/config/src/global-config.module.ts new file mode 100644 index 000000000..d1d8c6006 --- /dev/null +++ b/libs/config/src/global-config.module.ts @@ -0,0 +1,14 @@ +import { MICRO_SERVICE_NAME } from '@credebl/common/common.constant'; +import { Module, Global } from '@nestjs/common'; + +@Global() +@Module({ + providers: [ + { + provide: MICRO_SERVICE_NAME, + useValue: 'DefaultServiceName', // Provide a default or placeholder value + }, + ], + exports: [MICRO_SERVICE_NAME], +}) +export class GlobalConfigModule {} diff --git a/libs/context/src/contextInterceptorModule.ts b/libs/context/src/contextInterceptorModule.ts new file mode 100644 index 000000000..24ce46e2f --- /dev/null +++ b/libs/context/src/contextInterceptorModule.ts @@ -0,0 +1,46 @@ +import { ExecutionContext, Global, Module} from '@nestjs/common'; +import { v4 } from 'uuid'; +import { ClsModule } from 'nestjs-cls'; + +import { ContextStorageServiceKey } from '@credebl/context/contextStorageService.interface'; +import NestjsClsContextStorageService from '@credebl/context/nestjsClsContextStorageService'; + + +const isNullUndefinedOrEmpty = (obj: any): boolean => { + return obj === null || obj === undefined || (typeof obj === 'object' && Object.keys(obj).length === 0); +}; + +@Global() +@Module({ + imports: [ + ClsModule.forRoot({ + global: true, + interceptor: { + mount: true, + + generateId: true, + idGenerator: (context: ExecutionContext) => { + const rpcContext = context.switchToRpc().getContext(); + const headers = rpcContext.getHeaders(); + if (!isNullUndefinedOrEmpty(headers)) { + return context.switchToRpc().getContext().getHeaders()['_description']; + } else { + return v4(); + } + } + + } + }) + ], + controllers: [], + providers: [ + { + provide: ContextStorageServiceKey, + useClass: NestjsClsContextStorageService + } + ], + exports: [ContextStorageServiceKey] +}) + +export class ContextInterceptorModule {} + diff --git a/libs/context/src/contextModule.ts b/libs/context/src/contextModule.ts new file mode 100644 index 000000000..dae94b738 --- /dev/null +++ b/libs/context/src/contextModule.ts @@ -0,0 +1,29 @@ +import { Global, Module } from '@nestjs/common'; +import { v4 } from 'uuid'; +import { ClsModule } from 'nestjs-cls'; + +import { ContextStorageServiceKey } from '@credebl/context/contextStorageService.interface'; +import NestjsClsContextStorageService from '@credebl/context/nestjsClsContextStorageService'; + +@Global() +@Module({ + imports: [ + ClsModule.forRoot({ + global: true, + middleware: { + mount: true, + generateId: true, + idGenerator: (req: Request) => req.headers['x-correlation-id'] ?? v4() + } + }) + ], + controllers: [], + providers: [ + { + provide: ContextStorageServiceKey, + useClass: NestjsClsContextStorageService + } + ], + exports: [ContextStorageServiceKey] +}) +export class ContextModule {} diff --git a/libs/context/src/contextStorageService.interface.ts b/libs/context/src/contextStorageService.interface.ts new file mode 100644 index 000000000..2ad6d8f20 --- /dev/null +++ b/libs/context/src/contextStorageService.interface.ts @@ -0,0 +1,8 @@ +export const ContextStorageServiceKey = Symbol(); + +export default interface ContextStorageService { + setContextId(contextId: string): void; + getContextId(): string; + get(key: string): T | undefined; + set(key: string, value: T): void; +} diff --git a/libs/context/src/nestjsClsContextStorageService.ts b/libs/context/src/nestjsClsContextStorageService.ts new file mode 100644 index 000000000..b39db9bd1 --- /dev/null +++ b/libs/context/src/nestjsClsContextStorageService.ts @@ -0,0 +1,27 @@ +import ContextStorageService from '@credebl/context/contextStorageService.interface'; +import { CLS_ID, ClsService } from 'nestjs-cls'; +import { Injectable } from '@nestjs/common'; + +@Injectable() +export default class NestjsClsContextStorageService + implements ContextStorageService +{ + constructor(private readonly cls: ClsService) { + } + + public get(key: string): T | undefined { + return this.cls.get(key); + } + + public setContextId(id: string) : void { + this.cls.set(CLS_ID, id); + } + + public getContextId(): string | undefined { + return this.cls.getId(); + } + + public set(key: string, value: T): void { + this.cls.set(key, value); + } +} diff --git a/libs/logger/src/log.ts b/libs/logger/src/log.ts new file mode 100644 index 000000000..973982f4f --- /dev/null +++ b/libs/logger/src/log.ts @@ -0,0 +1,25 @@ +export enum LogLevel { + Emergency = 'emergency', // One or more systems are unusable. + Fatal = 'fatal', // A person must take an action immediately + Error = 'error', // Error events are likely to cause problems + Warn = 'warn', // Warning events might cause problems in the future and deserve eyes + Info = 'info', // Routine information, such as ongoing status or performance + Debug = 'debug', // Debug or trace information +} + +export interface Log { + timestamp: number; // Unix timestamp + level: LogLevel; // Log level + message: string; // Log message + data: LogData; // Log data +} + +export interface LogData { + organization?: string; // Organization or project name + context?: string; // Bounded Context name + app?: string; // Application or Microservice name + sourceClass?: string; // Classname of the source + correlationId?: string; // Correlation ID + error?: Error; // Error object + props?: NodeJS.Dict; // Additional custom properties +} diff --git a/libs/logger/src/logger.interface.ts b/libs/logger/src/logger.interface.ts new file mode 100644 index 000000000..2cc5948f5 --- /dev/null +++ b/libs/logger/src/logger.interface.ts @@ -0,0 +1,25 @@ +import { LogData, LogLevel } from '@credebl/logger/log'; + +export const LoggerBaseKey = Symbol(); +export const LoggerKey = Symbol(); + +export default interface Logger { + log( + level: LogLevel, + message: string | Error, + data?: LogData, + profile?: string, + ): void; + // log( + // message: string | Error, + // data?: LogData, + // profile?: string, + // ): void; + debug(message: string, data?: LogData, profile?: string): void; + info(message: string, data?: LogData, profile?: string): void; + warn(message: string | Error, data?: LogData, profile?: string): void; + error(message: string | Error, data?: LogData, profile?: string): void; + fatal(message: string | Error, data?: LogData, profile?: string): void; + emergency(message: string | Error, data?: LogData, profile?: string): void; + startProfile(id: string): void; +}; diff --git a/libs/logger/src/logger.module.ts b/libs/logger/src/logger.module.ts new file mode 100644 index 000000000..b1ddf8865 --- /dev/null +++ b/libs/logger/src/logger.module.ts @@ -0,0 +1,88 @@ +import { + Global, + Inject, + MiddlewareConsumer, + Module, + NestModule, +} from '@nestjs/common'; + +import WinstonLogger, { + WinstonLoggerTransportsKey, +} from '@credebl/logger/winstonLogger'; +import Logger, { + LoggerBaseKey, + LoggerKey, +} from '@credebl/logger/logger.interface'; +import NestjsLoggerServiceAdapter from '@credebl/logger/nestjsLoggerServiceAdapter'; +import ConsoleTransport from '@credebl/logger/transports/consoleTransport'; +import * as morgan from 'morgan'; +import FileTransport from '@credebl/logger/transports/fileTransport'; +import { ConfigService } from '@credebl/config/config.service'; +import LoggerService from '@credebl/logger/logger.service'; +import { MICRO_SERVICE_NAME } from '@credebl/common/common.constant'; +import { GlobalConfigModule } from '@credebl/config/global-config.module'; + +@Global() +@Module({ + imports: [], + controllers: [], + providers: [ + { + provide: LoggerBaseKey, + useClass: WinstonLogger, + }, + { + provide: LoggerKey, + useClass: LoggerService, + }, + { + provide: NestjsLoggerServiceAdapter, + useFactory: (logger: Logger) => new NestjsLoggerServiceAdapter(logger), + inject: [LoggerKey], + }, + { + provide: WinstonLoggerTransportsKey, + useFactory: (configService: ConfigService) => { + const transports = []; + + transports.push(ConsoleTransport.createColorize()); + + //transports.push(FileTransport.create()); + + // if (configService.isProduction) { + // if (configService.slackWebhookUrl) { + // transports.push( + // SlackTransport.create(configService.slackWebhookUrl), + // ); + // } + // } + + return transports; + }, + inject: [ConfigService, MICRO_SERVICE_NAME] + } + ], + exports: [LoggerKey, NestjsLoggerServiceAdapter], +}) +export class LoggerModule implements NestModule { + public constructor( + @Inject(LoggerKey) private logger: Logger, + private configService: ConfigService, + ) {} + + public configure(consumer: MiddlewareConsumer): void { + consumer + .apply( + morgan(this.configService.isProduction ? 'combined' : 'dev', { + stream: { + write: (message: string) => { + this.logger.debug(message, { + sourceClass: 'RequestLogger' + }); + } + } + }) + ) + .forRoutes('*'); + } +} diff --git a/libs/logger/src/logger.service.ts b/libs/logger/src/logger.service.ts new file mode 100644 index 000000000..b82a38f77 --- /dev/null +++ b/libs/logger/src/logger.service.ts @@ -0,0 +1,107 @@ +import { Inject, Injectable, Scope } from '@nestjs/common'; +import { INQUIRER } from '@nestjs/core'; +import Logger, { + LoggerBaseKey +} from '@credebl/logger/logger.interface'; +import { LogData, LogLevel } from '@credebl/logger/log'; +import { ConfigService } from '@nestjs/config'; +import ContextStorageService, { + ContextStorageServiceKey +} from '@credebl/context/contextStorageService.interface'; +import { MICRO_SERVICE_NAME } from '@credebl/common/common.constant'; + +@Injectable({ scope: Scope.TRANSIENT }) +export default class LoggerService implements Logger { + private sourceClass: string; + private organization: string; + private context: string; + private app: string; + + public constructor( + @Inject(LoggerBaseKey) private logger: Logger, + configService: ConfigService, + @Inject(INQUIRER) parentClass: object, + @Inject(ContextStorageServiceKey) + private contextStorageService: ContextStorageService, + @Inject(MICRO_SERVICE_NAME) private readonly microserviceName: string + ) { + // Set the source class from the parent class + this.sourceClass = parentClass?.constructor?.name; + // Set the organization, context and app from the environment variables + this.organization = configService.get('ORGANIZATION'); + this.context = configService.get('CONTEXT'); + this.app = configService.get('APP'); + } + + public log( + level: LogLevel, + message: string | Error, + data?: LogData, + profile?: string, + ): void { + return this.logger.log(level, message, this.getLogData(data), profile); + } + + // public log( + // message: string | Error, + // data?: LogData, + // profile?: string, + // ): void { + // return this.logger.log(LogLevel.Info, message, this.getLogData(data), profile); + // } + + // log( + // levelOrMessage: LogLevel | string | Error, + // messageOrData?: string | Error | LogData, + // dataOrProfile?: LogData | string, + // profile?: string + // ): void { + // if ('string' === typeof levelOrMessage || levelOrMessage instanceof Error) { + // // Handling log(message, data?, profile?) + // this.logger.log(LogLevel.Info, levelOrMessage, this.getLogData(messageOrData as LogData), dataOrProfile as string); + // } else { + // // Handling log(level, message, data?, profile?) + // this.logger.log(levelOrMessage, messageOrData as string | Error, this.getLogData(dataOrProfile as LogData), profile); + // } + // } + + public debug(message: string, data?: LogData, profile?: string) : void { + return this.logger.debug(message, this.getLogData(data), profile); + } + + public info(message: string, data?: LogData, profile?: string) : void { + return this.logger.info(message, this.getLogData(data), profile); + } + + public warn(message: string | Error, data?: LogData, profile?: string) : void { + return this.logger.warn(message, this.getLogData(data), profile); + } + + public error(message: string | Error, data?: LogData, profile?: string) : void { + return this.logger.error(message, this.getLogData(data), profile); + } + + public fatal(message: string | Error, data?: LogData, profile?: string) : void { + return this.logger.fatal(message, this.getLogData(data), profile); + } + + public emergency(message: string | Error, data?: LogData, profile?: string) : void { + return this.logger.emergency(message, this.getLogData(data), profile); + } + + private getLogData(data?: LogData): LogData { + return { + ...data, + organization: data?.organization || this.organization, + context: data?.context || this.context, + app: data?.app || this.app, + sourceClass: data?.sourceClass || this.sourceClass, + correlationId: + data?.correlationId || this.contextStorageService.getContextId() + }; + } + + public startProfile(id: string) : void { + this.logger.startProfile(id); + } +} diff --git a/libs/logger/src/logging.interceptor.ts b/libs/logger/src/logging.interceptor.ts new file mode 100644 index 000000000..98b1b080f --- /dev/null +++ b/libs/logger/src/logging.interceptor.ts @@ -0,0 +1,47 @@ +import { Injectable, NestInterceptor, ExecutionContext, CallHandler, Inject } from '@nestjs/common'; +import { Observable, throwError } from 'rxjs'; +import { catchError } from 'rxjs/operators'; + +import ContextStorageService, { ContextStorageServiceKey } from '@credebl/context/contextStorageService.interface'; +import Logger, { LoggerKey } from './logger.interface'; +import { ClsService } from 'nestjs-cls'; +import { v4 } from 'uuid'; + +const isNullUndefinedOrEmpty = (obj: any): boolean => obj === null || obj === undefined || (typeof obj === 'object' && Object.keys(obj).length === 0); +@Injectable() +export class LoggingInterceptor implements NestInterceptor { + constructor( + private readonly clsService: ClsService, + @Inject(ContextStorageServiceKey) + private contextStorageService: ContextStorageService, + @Inject(LoggerKey) private _logger: Logger, + ) {} + // eslint-disable-next-line @typescript-eslint/no-explicit-any + intercept(context: ExecutionContext, next: CallHandler): Observable { + return this.clsService.run(() => { + + this._logger.info('In LoggingInterceptor configuration'); + const rpcContext = context.switchToRpc().getContext(); + const headers = rpcContext.getHeaders(); + + if (!isNullUndefinedOrEmpty(headers)) { + this.contextStorageService.set('x-correlation-id', headers._description); + this.contextStorageService.setContextId(headers._description); + } else { + const newContextId = v4(); + this.contextStorageService.set('x-correlation-id', newContextId); + this.contextStorageService.setContextId(newContextId); + } + + return next.handle().pipe( + catchError((err) => { + this._logger.error(err); + return throwError(() => err); + }) + ); + + }); + + } + +} diff --git a/libs/logger/src/nestjsLoggerServiceAdapter.ts b/libs/logger/src/nestjsLoggerServiceAdapter.ts new file mode 100644 index 000000000..f41e32667 --- /dev/null +++ b/libs/logger/src/nestjsLoggerServiceAdapter.ts @@ -0,0 +1,43 @@ +import { ConsoleLogger } from '@nestjs/common'; +import Logger from '@credebl/logger/logger.interface'; +import { LoggerService } from '@nestjs/common/services/logger.service'; +import { LogData } from '@credebl/logger/log'; + +export default class NestjsLoggerServiceAdapter + extends ConsoleLogger + implements LoggerService +{ + public constructor(private logger: Logger) { + super(); + } + + public info(message: any, ...optionalParams: any[]) : void { + return this.logger.info(message, this.getLogData(optionalParams)); + } + + public log(message: any, ...optionalParams: any[]) : void { + return this.logger.info(message, this.getLogData(optionalParams)); + } + + public error(message: any, ...optionalParams: any[]) : void { + return this.logger.error(message, this.getLogData(optionalParams)); + } + + public warn(message: any, ...optionalParams: any[]) : void { + return this.logger.warn(message, this.getLogData(optionalParams)); + } + + public debug(message: any, ...optionalParams: any[]) : void { + return this.logger.debug(message, this.getLogData(optionalParams)); + } + + public verbose(message: any, ...optionalParams: any[]) : void { + return this.logger.info(message, this.getLogData(optionalParams)); + } + + private getLogData(...optionalParams: any[]) : LogData { + return { + sourceClass: optionalParams[0] ? optionalParams[0] : undefined, + }; + } +} diff --git a/libs/logger/src/transports/consoleTransport.ts b/libs/logger/src/transports/consoleTransport.ts new file mode 100644 index 000000000..831eb1fa6 --- /dev/null +++ b/libs/logger/src/transports/consoleTransport.ts @@ -0,0 +1,70 @@ +import * as winston from 'winston'; +import { LogLevel } from '@credebl/logger/log'; + +enum LogColors { + red = '\x1b[31m', + green = '\x1b[32m', + yellow = '\x1b[33m', + blue = '\x1b[34m', + magenta = '\x1b[35m', + cyan = '\x1b[36m', + pink = '\x1b[38;5;206m', +} + +export default class ConsoleTransport { + public static createColorize() : winston.transports.ConsoleTransportInstance { + return new winston.transports.Console({ + format: winston.format.combine( + winston.format.printf((log) => { + const color = this.mapLogLevelColor(log.level as LogLevel); + const prefix = `${log.data.label ? `[${log.data.label}]` : ''}`; + return `${this.colorize(color, `${prefix} -`)} ${log.data['@timestamp']} ${ + log.data.correlationId + ? `(${this.colorize(LogColors.cyan, log.data.correlationId)})` + : '' + } ${this.colorize(color, log.level.toUpperCase())} ${ + log.data.sourceClass + ? `${this.colorize(LogColors.yellow, `[${log.data.sourceClass}]`)}` + : '' + } ${this.colorize( + color, + `${log.message} - ${log.data.error ? log.data.error : ''}` + )}${ + log.data.durationMs !== undefined + ? this.colorize(color, ' \+' + log.data.durationMs + 'ms') + : '' + }${ + log.data.stack ? this.colorize(color, ` - ${log.data.stack}`) : '' + }${ + log.data.props + ? `\n - Props: ${JSON.stringify(log.data.props, null, 4)}` + : '' + }`; + }), + ), + }); + } + + private static colorize(color: LogColors, message: string): string { + return `${color}${message}\x1b[0m`; + } + + private static mapLogLevelColor(level: LogLevel): LogColors { + switch (level) { + case LogLevel.Debug: + return LogColors.blue; + case LogLevel.Info: + return LogColors.green; + case LogLevel.Warn: + return LogColors.yellow; + case LogLevel.Error: + return LogColors.red; + case LogLevel.Fatal: + return LogColors.magenta; + case LogLevel.Emergency: + return LogColors.pink; + default: + return LogColors.cyan; + } + } +} diff --git a/libs/logger/src/transports/fileTransport.ts b/libs/logger/src/transports/fileTransport.ts new file mode 100644 index 000000000..0da65f86b --- /dev/null +++ b/libs/logger/src/transports/fileTransport.ts @@ -0,0 +1,14 @@ +import DailyRotateFile = require('winston-daily-rotate-file'); + +export default class FileTransport { + public static create() { + return new DailyRotateFile({ + dirname: 'logs', + filename: 'log-%DATE%.log', + datePattern: 'YYYY-MM-DD-HH', + zippedArchive: true, + maxSize: '20m', + maxFiles: '14d', + }); + } +} diff --git a/libs/logger/src/winstonLogger.ts b/libs/logger/src/winstonLogger.ts new file mode 100644 index 000000000..5f8fcfbc5 --- /dev/null +++ b/libs/logger/src/winstonLogger.ts @@ -0,0 +1,193 @@ +import * as winston from 'winston'; +import { Inject, Injectable } from '@nestjs/common'; +import { LogData, LogLevel } from '@credebl/logger/log'; +import Logger from '@credebl/logger/logger.interface'; +import * as Elasticsearch from 'winston-elasticsearch'; +import * as ecsFormat from '@elastic/ecs-winston-format'; +//const ecsFormat = require('@elastic/ecs-winston-format'); + +export const WinstonLoggerTransportsKey = Symbol(); + +// const esTransportOpts = { +// level: 'debug', +// clientOpts: { +// node: 'http://localhost:9200', +// auth: { +// username: `elastic`, +// password: `rinkal@1234` +// } +// } +// }; + +// const esTransport = new Elasticsearch.ElasticsearchTransport(esTransportOpts); + +let esTransport; +if ('true' === process.env.ELK_LOG?.toLowerCase()) { + const esTransportOpts = { + level: `${process.env.LOG_LEVEL}`, + clientOpts: { node: `${process.env.ELK_LOG_PATH}`, + auth: { + username: `${process.env.ELK_USERNAME}`, + password: `${process.env.ELK_PASSWORD}` + } + } +}; +esTransport = new Elasticsearch.ElasticsearchTransport(esTransportOpts); + +esTransport.on('error', (error) => { + console.error('Error caught in logger', error); +}); + +} + + +@Injectable() +export default class WinstonLogger implements Logger { + private logger: winston.Logger; + + public constructor( + @Inject(WinstonLoggerTransportsKey) transports: winston.transport[] + ) { + transports.push(esTransport); + + // Create winston logger + this.logger = winston.createLogger(this.getLoggerFormatOptions(transports)); + + } + + private getLoggerFormatOptions(transports: winston.transport[]) : winston.LoggerOptions { + // Setting log levels for winston + const levels: any = {}; + let cont = 0; + Object.values(LogLevel).forEach((level) => { + levels[level] = cont; + cont++; + }); + + return { + level: LogLevel.Debug, + levels, + // format: ecsFormat.ecsFormat({ convertReqRes: true }), + format: winston.format.combine( + ecsFormat.ecsFormat({ convertReqRes: true }), + // Add timestamp and format the date + // winston.format.timestamp({ + // format: 'DD/MM/YYYY, HH:mm:ss', + // }), + // Errors will be logged with stack trace + winston.format.errors({ stack: true }), + // Add custom Log fields to the log + winston.format((info, opts) => { + // Info contains an Error property + if (info.error && info.error instanceof Error) { + info.stack = info.error.stack; + info.error = undefined; + } + + info.label = `${info.organization}.${info.context}.${info.app}`; + + return info; + })(), + // Add custom fields to the data property + winston.format.metadata({ + key: 'data', + fillExcept: ['timestamp', 'level', 'message'] + }), + // Format the log as JSON + winston.format.json(), + ), + // transports: [ + // ...('true' === process.env.CONSOLE_LOG?.toLowerCase() ? [new winston.transports.Console()] : []), + // //Path to Elasticsearch + // ...('true' === process.env.ELK_LOG?.toLowerCase() ? transports : []), + // ], + transports, + exceptionHandlers: transports + }; + } + + public log( + level: LogLevel, + message: string | Error, + data?: LogData, + profile?: string + ) : void { + const logData = { + level: level, + message: message instanceof Error ? message.message : message, + error: message instanceof Error ? message : undefined, + ...data + }; + + if (profile) { + this.logger.profile(profile, logData); + } else { + this.logger.log(logData); + } + } + + // public log( + // levelOrMessage: LogLevel | string | Error, + // messageOrData?: string | Error | LogData, + // dataOrProfile?: LogData | string, + // profile?: string + // ): void { + // if ('string' === typeof levelOrMessage || levelOrMessage instanceof Error) { + // // Handling log(message, data?, profile?) + // this.logInternal(LogLevel.Info, levelOrMessage, messageOrData as LogData, dataOrProfile as string); + // } else { + // // Handling log(level, message, data?, profile?) + // this.logInternal(levelOrMessage, messageOrData as string | Error, dataOrProfile as LogData, profile); + // } + // } + + // private logInternal( + // level: LogLevel, + // message: string | Error, + // data?: LogData, + // profile?: string + // ): void { + // const logData = { + // level: level, + // message: message instanceof Error ? message.message : message, + // error: message instanceof Error ? message : undefined, + // ...data + // }; + + // if (profile) { + // this.logger.profile(profile, logData); + // } else { + // this.logger.log(logData); + // } + // } + + public debug(message: string, data?: LogData, profile?: string) : void { + this.log(LogLevel.Debug, message, data, profile); + } + + public info(message: string, data?: LogData, profile?: string) : void { + this.log(LogLevel.Info, message, data, profile); + } + + public warn(message: string | Error, data?: LogData, profile?: string) : void { + this.log(LogLevel.Warn, message, data, profile); + } + + public error(message: string | Error, data?: LogData, profile?: string) : void { + this.log(LogLevel.Error, message, data, profile); + } + + public fatal(message: string | Error, data?: LogData, profile?: string) : void { + this.log(LogLevel.Fatal, message, data, profile); + } + + public emergency(message: string | Error, data?: LogData, profile?: string) : void { + this.log(LogLevel.Emergency, message, data, profile); + } + + public startProfile(id: string) : void { + this.logger.profile(id); + } +} + + diff --git a/libs/service/base.service.ts b/libs/service/base.service.ts index 9fade96be..89fcc144f 100644 --- a/libs/service/base.service.ts +++ b/libs/service/base.service.ts @@ -14,25 +14,25 @@ export class BaseService { } // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types - sendNats(serviceProxy: ClientProxy, cmd: string, payload: any): Promise { - const pattern = { cmd }; - - return serviceProxy - .send(pattern, payload) - .pipe( - map((response: string) => ({ - response - })) - ) - .toPromise(); - } +// sendNats(serviceProxy: ClientProxy, cmd: string, payload: any): Promise { +// const pattern = { cmd }; + +// return serviceProxy +// .send(pattern, payload) +// .pipe( +// map((response: string) => ({ +// response +// })) +// ) +// .toPromise(); +// } -sendNatsMessage(serviceProxy: ClientProxy, cmd: string, payload: any): Promise { - const pattern = { cmd }; +// sendNatsMessage(serviceProxy: ClientProxy, cmd: string, payload: any): Promise { +// const pattern = { cmd }; - const result = serviceProxy.send(pattern, payload); +// const result = serviceProxy.send(pattern, payload); - return firstValueFrom(result); -} +// return firstValueFrom(result); +// } } \ No newline at end of file diff --git a/package.json b/package.json index 0bcff02b8..5c2bbd12b 100755 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "seed": "ts-node prisma/seed.ts" }, "dependencies": { + "@elastic/ecs-winston-format": "^1.5.3", "@nestjs/axios": "^3.0.0", "@nestjs/bull": "^10.0.1", "@nestjs/cache-manager": "^2.1.0", @@ -74,10 +75,12 @@ "jwks-rsa": "^3.0.1", "linebyline": "^1.3.0", "moment": "^2.29.3", + "morgan": "^1.10.0", "multer": "1.4.5-lts.1", "nanoid": "^4.0.2", "nats": "^2.15.1", "nestjs-rate-limiter": "^3.1.0", + "nestjs-cls": "^4.3.0", "nestjs-supabase-auth": "^1.0.9", "nestjs-typeorm-paginate": "^4.0.4", "node-html-to-image": "^4.0.0", @@ -104,6 +107,9 @@ "uuid": "^9.0.0", "validator": "^13.11.0", "web-push": "^3.6.4", + "winston": "3.4", + "winston-daily-rotate-file": "^5.0.0", + "winston-elasticsearch": "0.16.0", "xml-js": "^1.6.11" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 21c551e57..1f309aaa0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,51 +8,54 @@ importers: .: dependencies: + '@elastic/ecs-winston-format': + specifier: ^1.5.3 + version: 1.5.3 '@nestjs/axios': specifier: ^3.0.0 - version: 3.0.0(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) + version: 3.0.0(@nestjs/common@10.2.8)(axios@1.7.2)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@nestjs/bull': specifier: ^10.0.1 - version: 10.0.1(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))(bull@4.11.4) + version: 10.0.1(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(bull@4.11.4) '@nestjs/cache-manager': specifier: ^2.1.0 - version: 2.2.1(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))(cache-manager@5.4.0)(rxjs@7.8.1) + version: 2.2.1(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(cache-manager@5.4.0)(rxjs@7.8.1) '@nestjs/common': specifier: ^10.2.7 version: 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@nestjs/config': specifier: ^3.0.0 - version: 3.0.0(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(reflect-metadata@0.1.13) + version: 3.0.0(@nestjs/common@10.2.8)(reflect-metadata@0.1.13) '@nestjs/core': specifier: ^10.1.3 - version: 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + version: 10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@nestjs/jwt': specifier: ^10.1.0 - version: 10.1.0(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1)) + version: 10.1.0(@nestjs/common@10.2.8) '@nestjs/microservices': specifier: ^10.1.3 - version: 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)(@nestjs/websockets@10.1.3)(cache-manager@5.4.0)(ioredis@5.3.2)(nats@2.15.1)(reflect-metadata@0.1.13)(rxjs@7.8.1) + version: 10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(@nestjs/websockets@10.1.3)(cache-manager@5.4.0)(nats@2.15.1)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@nestjs/passport': specifier: ^10.0.0 - version: 10.0.0(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(passport@0.6.0) + version: 10.0.0(@nestjs/common@10.2.8)(passport@0.6.0) '@nestjs/platform-express': specifier: ^10.1.3 - version: 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3) + version: 10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3) '@nestjs/platform-socket.io': specifier: ^10.1.3 - version: 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/websockets@10.1.3)(bufferutil@4.0.7)(rxjs@7.8.1)(utf-8-validate@5.0.10) + version: 10.1.3(@nestjs/common@10.2.8)(@nestjs/websockets@10.1.3)(rxjs@7.8.1) '@nestjs/schedule': specifier: ^3.0.1 - version: 3.0.1(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))(reflect-metadata@0.1.13) + version: 3.0.1(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(reflect-metadata@0.1.13) '@nestjs/swagger': specifier: ^7.1.6 - version: 7.1.6(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) + version: 7.1.6(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) '@nestjs/typeorm': specifier: ^10.0.0 - version: 10.0.0(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))(reflect-metadata@0.1.13)(rxjs@7.8.1)(typeorm@0.3.10(ioredis@5.3.2)(pg@8.11.2)(redis@3.1.2)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6))) + version: 10.0.0(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1)(typeorm@0.3.10) '@nestjs/websockets': specifier: ^10.1.3 - version: 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)(@nestjs/platform-socket.io@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + version: 10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(@nestjs/platform-socket.io@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@prisma/client': specifier: ^5.1.1 version: 5.1.1(prisma@5.1.1) @@ -152,6 +155,9 @@ importers: moment: specifier: ^2.29.3 version: 2.29.3 + morgan: + specifier: ^1.10.0 + version: 1.10.0 multer: specifier: 1.4.5-lts.1 version: 1.4.5-lts.1 @@ -161,6 +167,9 @@ importers: nats: specifier: ^2.15.1 version: 2.15.1 + nestjs-cls: + specifier: ^4.3.0 + version: 4.3.0(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) nestjs-rate-limiter: specifier: ^3.1.0 version: 3.1.0 @@ -169,10 +178,10 @@ importers: version: 1.0.9 nestjs-typeorm-paginate: specifier: ^4.0.4 - version: 4.0.4(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(typeorm@0.3.10(ioredis@5.3.2)(pg@8.11.2)(redis@3.1.2)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6))) + version: 4.0.4(@nestjs/common@10.2.8)(typeorm@0.3.10) node-html-to-image: specifier: ^4.0.0 - version: 4.0.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) + version: 4.0.0 node-qpdf2: specifier: ^2.0.0 version: 2.0.0 @@ -202,7 +211,7 @@ importers: version: 8.11.2 puppeteer: specifier: ^21.5.0 - version: 21.5.0(bufferutil@4.0.7)(typescript@5.1.6)(utf-8-validate@5.0.10) + version: 21.5.0(typescript@5.1.6) qrcode: specifier: ^1.5.3 version: 1.5.3 @@ -223,13 +232,13 @@ importers: version: 7.8.1 socket.io-client: specifier: ^4.7.1 - version: 4.7.1(bufferutil@4.0.7)(utf-8-validate@5.0.10) + version: 4.7.1 swagger-ui-express: specifier: ^5.0.0 version: 5.0.0(express@4.18.2) typeorm: specifier: ^0.3.10 - version: 0.3.10(ioredis@5.3.2)(pg@8.11.2)(redis@3.1.2)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)) + version: 0.3.10(pg@8.11.2)(ts-node@10.9.1) unzipper: specifier: ^0.10.14 version: 0.10.14 @@ -242,6 +251,15 @@ importers: web-push: specifier: ^3.6.4 version: 3.6.4 + winston: + specifier: '3.4' + version: 3.4.0 + winston-daily-rotate-file: + specifier: ^5.0.0 + version: 5.0.0(winston@3.4.0) + winston-elasticsearch: + specifier: 0.16.0 + version: 0.16.0 xml-js: specifier: ^1.6.11 version: 1.6.11 @@ -254,7 +272,7 @@ importers: version: 10.0.1(chokidar@3.5.3)(typescript@5.1.6) '@nestjs/testing': specifier: ^10.1.3 - version: 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)(@nestjs/websockets@10.1.3)(cache-manager@5.4.0)(ioredis@5.3.2)(nats@2.15.1)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/platform-express@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)) + version: 10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3) '@types/express': specifier: ^4.17.17 version: 4.17.17 @@ -278,7 +296,7 @@ importers: version: 2.0.12 '@typescript-eslint/eslint-plugin': specifier: ^6.2.1 - version: 6.2.1(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0)(typescript@5.1.6) + version: 6.2.1(@typescript-eslint/parser@6.2.1)(eslint@8.46.0)(typescript@5.1.6) '@typescript-eslint/parser': specifier: ^6.2.1 version: 6.2.1(eslint@8.46.0)(typescript@5.1.6) @@ -290,16 +308,16 @@ importers: version: 8.10.0(eslint@8.46.0) eslint-config-standard-with-typescript: specifier: ^37.0.0 - version: 37.0.0(@typescript-eslint/eslint-plugin@6.2.1(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0)(typescript@5.1.6))(eslint-plugin-import@2.28.0(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0))(eslint-plugin-n@15.7.0(eslint@8.46.0))(eslint-plugin-promise@6.1.1(eslint@8.46.0))(eslint@8.46.0)(typescript@5.1.6) + version: 37.0.0(@typescript-eslint/eslint-plugin@6.2.1)(eslint-plugin-import@2.28.0)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.46.0)(typescript@5.1.6) eslint-plugin-import: specifier: ^2.28.0 - version: 2.28.0(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0) + version: 2.28.0(@typescript-eslint/parser@6.2.1)(eslint@8.46.0) eslint-plugin-n: specifier: ^15.7.0 version: 15.7.0(eslint@8.46.0) eslint-plugin-prettier: specifier: ^4.2.1 - version: 4.2.1(eslint-config-prettier@8.10.0(eslint@8.46.0))(eslint@8.46.0)(prettier@3.0.1) + version: 4.2.1(eslint-config-prettier@8.10.0)(eslint@8.46.0)(prettier@3.0.1) eslint-plugin-promise: specifier: ^6.1.1 version: 6.1.1(eslint@8.46.0) @@ -308,7 +326,7 @@ importers: version: 8.0.3 jest: specifier: ^29.6.2 - version: 29.6.2(@types/node@20.4.6)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)) + version: 29.6.2(@types/node@20.4.6)(ts-node@10.9.1) lint-staged: specifier: ^13.2.3 version: 13.2.3 @@ -323,10 +341,10 @@ importers: version: 6.3.3 ts-jest: specifier: ^29.1.1 - version: 29.1.1(@babel/core@7.22.9)(@jest/types@29.6.1)(babel-jest@29.6.2(@babel/core@7.22.9))(jest@29.6.2(@types/node@20.4.6)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)))(typescript@5.1.6) + version: 29.1.1(@babel/core@7.22.9)(jest@29.6.2)(typescript@5.1.6) ts-loader: specifier: ^9.4.4 - version: 9.4.4(typescript@5.1.6)(webpack@5.88.1) + version: 9.4.4(typescript@5.1.6)(webpack@5.88.2) ts-node: specifier: ^10.9.1 version: 10.9.1(@types/node@20.4.6)(typescript@5.1.6) @@ -555,10 +573,33 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + + '@elastic/ecs-helpers@2.1.1': + resolution: {integrity: sha512-ItoNazMnYdlUCmkBYTXc3SG6PF7UlVTbvMdHPvXkfTMPdwGv2G1Xtp5CjDHaGHGOZSwaDrW4RSCXvA/lMSU+rg==} + engines: {node: '>=10'} + + '@elastic/ecs-pino-format@1.5.0': + resolution: {integrity: sha512-7MMVmT50ucEl7no8mUgCIl+pffBVNRl36uZi0vmalWa2xPWISBxM9k9WSP/WTgOkmGj9G35e5g3UfCS1zxshBg==} + engines: {node: '>=10'} + + '@elastic/ecs-winston-format@1.5.3': + resolution: {integrity: sha512-JfHLK+KpxnRRtwWmsQxcYy/zimS/06xz9oQG+OTsFX6fvofpxVWEiep3BXLMrSIrdYkgqQBJHMOQdZm9voVHbg==} + engines: {node: '>=10'} + + '@elastic/elasticsearch@7.17.14': + resolution: {integrity: sha512-6uQ1pVXutwz1Krwooo67W+3K8BwH1ASMh1WoHTpomUzw8EXecXN5lHIJ9EPqTHuv1WqR2LKkSJyagcq0HYUJpg==} + engines: {node: '>=12'} + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -580,7 +621,6 @@ packages: '@humanwhocodes/config-array@0.11.10': resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} @@ -588,7 +628,6 @@ packages: '@humanwhocodes/object-schema@1.2.1': resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - deprecated: Use @eslint/object-schema instead '@ioredis/commands@1.2.0': resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} @@ -967,6 +1006,32 @@ packages: engines: {node: '>=8.0.0', npm: '>=5.0.0'} hasBin: true + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/core@1.25.1': + resolution: {integrity: sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/resources@1.25.1': + resolution: {integrity: sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-metrics@1.25.1': + resolution: {integrity: sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.25.1': + resolution: {integrity: sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==} + engines: {node: '>=14'} + '@prisma/client@5.1.1': resolution: {integrity: sha512-fxcCeK5pMQGcgCqCrWsi+I2rpIbk0rAhdrN+ke7f34tIrgPwA68ensrpin+9+fZvuV2OtzHmuipwduSY6HswdA==} engines: {node: '>=16.13'} @@ -1193,6 +1258,9 @@ packages: '@types/supertest@2.0.12': resolution: {integrity: sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==} + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + '@types/validator@13.9.0': resolution: {integrity: sha512-NclP0IbzHj/4tJZKFqKh8E7kZdgss+MCUYV9G+TLltFfDA4lFgE4PKPpDIyS2FlcdANIfSx273emkupvChigbw==} @@ -1374,6 +1442,9 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + after-all-results@2.0.0: + resolution: {integrity: sha512-2zHEyuhSJOuCrmas9YV0YL/MFCWLxe1dS6k/ENhgYrb/JqyMnadLN4iIAc9kkZrbElMDyyAGH/0J18OPErOWLg==} + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -1382,6 +1453,10 @@ packages: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} + agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1457,7 +1532,6 @@ packages: are-we-there-yet@2.0.0: resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} engines: {node: '>=10'} - deprecated: This package is no longer supported. arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -1522,12 +1596,29 @@ packages: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} + async-cache@1.1.0: + resolution: {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. + async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + async-value-promise@1.1.1: + resolution: {integrity: sha512-c2RFDKjJle1rHa0YxN9Ysu97/QBu3Wa+NOejJxsX+1qVDJrkD3JL/GN1B3gaILAEXJXbu/4Z1lcoCHFESe/APA==} + + async-value@1.2.2: + resolution: {integrity: sha512-8rwtYe32OAS1W9CTwvknoyts+mc3ta8N7Pi0h7AjkMaKvsFbr39K+gEfZ7Z81aPXQ1sK5M23lgLy1QfZpcpadQ==} + + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + auth0-js@9.22.1: resolution: {integrity: sha512-AcyJiWhsyG5zdx40O9i/okpLLEvB23/6CivWynmGtP43s2C4GSq3E+XdCRw64ifmZ7t6ZK4Yzfpiqy5KVXEtJg==} @@ -1548,8 +1639,8 @@ packages: axios@0.26.1: resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} - axios@1.4.0: - resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==} + axios@1.7.2: + resolution: {integrity: sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==} b4a@1.6.4: resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} @@ -1593,6 +1684,10 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + basic-ftp@5.0.3: resolution: {integrity: sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==} engines: {node: '>=10.0.0'} @@ -1612,6 +1707,9 @@ packages: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} + binary-search@1.3.6: + resolution: {integrity: sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA==} + binary@0.3.0: resolution: {integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==} @@ -1648,9 +1746,8 @@ packages: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + breadth-filter@2.0.0: + resolution: {integrity: sha512-thQShDXnFWSk2oVBixRCyrWsFoV5tfOpWKHmxwafHQDNxCfDBk539utpvytNjmlFrTMqz41poLwJvA1MW3z0MQ==} brotli@1.3.3: resolution: {integrity: sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==} @@ -1726,6 +1823,10 @@ packages: call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1876,13 +1977,22 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + color-support@1.1.3: resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} hasBin: true + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} @@ -1922,6 +2032,9 @@ packages: console-control-strings@1.1.0: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + console-log-level@1.4.1: + resolution: {integrity: sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ==} + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -2019,6 +2132,9 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} + dayjs@1.11.12: + resolution: {integrity: sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg==} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -2044,15 +2160,6 @@ packages: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} @@ -2078,10 +2185,18 @@ packages: defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + define-properties@1.2.0: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + degenerator@5.0.1: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} @@ -2179,6 +2294,10 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + elastic-apm-node@3.51.0: + resolution: {integrity: sha512-GvZyoV4uhHB9qW4QE4pGcYZLbDCay2VzbeE5zN5v9vrQQ7j72GbzE5wGmtryNHwqP4DGCuXUk/jerArfpIquOQ==} + engines: {node: '>=8.6.0'} + electron-to-chromium@1.4.483: resolution: {integrity: sha512-YLwU0iF//9R3cCEfq0wgL+pf9vglE4kwAg4S5tkVVZljUDKv7Wcz67mTY4OOj+T7YUbTGuqlbqgdl/s+7Q8KTw==} @@ -2192,6 +2311,9 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + encode-utf8@1.0.3: resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} @@ -2217,19 +2339,38 @@ packages: resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} engines: {node: '>=10.13.0'} + error-callsites@2.0.4: + resolution: {integrity: sha512-V877Ch4FC4FN178fDK1fsrHN4I1YQIBdtjKrHh3BUHMnh3SMvwUVrqkaOgDpUuevgSNna0RBq6Ox9SGlxYrigA==} + engines: {node: '>=6.x'} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + es-abstract@1.22.1: resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} engines: {node: '>= 0.4'} + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} es-module-lexer@1.3.0: resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} engines: {node: '>= 0.4'} @@ -2508,9 +2649,16 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + fast-stream-to-buffer@1.0.0: + resolution: {integrity: sha512-bI/544WUQlD2iXBibQbOMSmG07Hay7YrpXlKaeGTPT7H7pC0eitt3usak5vUwEvCGK/O7rUAM3iyQValGU22TQ==} + fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} @@ -2520,6 +2668,9 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + figures@3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} @@ -2528,14 +2679,13 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} + file-stream-rotator@0.6.1: + resolution: {integrity: sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==} + fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - finalhandler@1.2.0: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} @@ -2552,9 +2702,15 @@ packages: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} + flatstr@1.0.12: + resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==} + flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + follow-redirects@1.15.2: resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} @@ -2564,6 +2720,15 @@ packages: debug: optional: true + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + fontkit@1.9.0: resolution: {integrity: sha512-HkW/8Lrk8jl18kzQHvAw9aTHe1cqsyx5sDnxncx652+CIfhawokEPkeM3BoIC+z/Xv7a0yMr0f3pRRwhGH455g==} @@ -2591,6 +2756,9 @@ packages: formidable@2.1.2: resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} + forwarded-parse@2.1.2: + resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -2631,11 +2799,13 @@ packages: fstream@1.0.12: resolution: {integrity: sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==} engines: {node: '>=0.6'} - deprecated: This package is no longer supported. function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} @@ -2646,7 +2816,6 @@ packages: gauge@3.0.2: resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} engines: {node: '>=10'} - deprecated: This package is no longer supported. generate-password@1.7.0: resolution: {integrity: sha512-WPCtlfy0jexf7W5IbwxGUgpIDvsZIohbI2DAq2Q6TSlKKis+G4GT9sxvPxrZUGL8kP6WUXMWNqYnxY6DDKAdFA==} @@ -2662,6 +2831,10 @@ packages: get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -2764,6 +2937,9 @@ packages: has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} @@ -2787,6 +2963,10 @@ packages: resolution: {integrity: sha512-jZ38TU/EBiGKrmyTNNZgnvCZHNowiRI4+w/I9noMlekHTZH3KyGgvJLmhSgykeAQ9j2SYPDosM0Bg3wHfzibAQ==} engines: {node: '>=0.10.0'} + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + helmet@7.1.0: resolution: {integrity: sha512-g+HZqgfbpXdCkme/Cd/mZkV0aV3BZZZSugecH03kl38m/Kmdx8jKjBikpDj2cr+Iynv4KpYEviojNdTJActJAg==} engines: {node: '>=16.0.0'} @@ -2798,6 +2978,9 @@ packages: highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + hpagent@0.1.2: + resolution: {integrity: sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ==} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -2814,6 +2997,9 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-headers@3.0.2: + resolution: {integrity: sha512-87E1I+2Wg4dxxz4rcxElo3dxO/w1ZtgL1yA0Sb6vH3qU16vRKq1NjWQv9SCY3ly2OQROcoxHZOUpmelS+k6wOw==} + http-proxy-agent@7.0.0: resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} engines: {node: '>= 14'} @@ -2830,6 +3016,10 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + https-proxy-agent@7.0.1: + resolution: {integrity: sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==} + engines: {node: '>= 14'} + https-proxy-agent@7.0.2: resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} engines: {node: '>= 14'} @@ -2846,6 +3036,9 @@ packages: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} @@ -2872,6 +3065,9 @@ packages: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} + import-in-the-middle@1.4.2: + resolution: {integrity: sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==} + import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} @@ -2934,6 +3130,9 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} @@ -2960,6 +3159,10 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + is-finite@1.1.0: + resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==} + engines: {node: '>=0.10.0'} + is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -2980,6 +3183,9 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-integer@1.0.7: + resolution: {integrity: sha512-RPQc/s9yBHSvpi+hs9dYiJ2cuFeU6x3TyyIp8O2H6SKEltIvJOzRj9ToyvcStDvPR/pS4rxgr1oBFajQjZ2Szg==} + is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} @@ -2987,10 +3193,16 @@ packages: is-map@2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + is-native@1.0.1: + resolution: {integrity: sha512-I4z9hx+4u3/zyvpvGtAR+n7SodJugE+i2jiS8yfq1A9QAZY0KldLQz0SBptLC9ti7kBlpghWUwTKE2BA62eCcw==} + is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} + is-nil@1.0.1: + resolution: {integrity: sha512-m2Rm8PhUFDNNhgvwZJjJG74a9h5CHU0fkA8WT+WGlCjyEbZ2jPwgb+ZxHu4np284EqNVyOsgppReK4qy/TwEwg==} + is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -3341,6 +3553,9 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -3415,6 +3630,12 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.omit@4.5.0: + resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -3426,6 +3647,10 @@ packages: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} engines: {node: '>=10'} + logform@2.6.1: + resolution: {integrity: sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==} + engines: {node: '>= 12.0.0'} + lru-cache@10.2.0: resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} @@ -3447,8 +3672,8 @@ packages: lru-memoizer@2.2.0: resolution: {integrity: sha512-QfOZ6jNkxCcM/BkIPnFsqDhtrazLRsghi9mBwFAzol5GCvj4EkFT899Za3+QwikCg5sRX8JstioBDwOxEyzaNw==} - luxon@3.4.4: - resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==} + luxon@3.3.0: + resolution: {integrity: sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==} engines: {node: '>=12'} macos-release@2.5.1: @@ -3473,6 +3698,17 @@ packages: makeerror@1.0.12: resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + mapcap@1.0.0: + resolution: {integrity: sha512-KcNlZSlFPx+r1jYZmxEbTVymG+dIctf10WmWkuhrhrblM+KMoF77HelwihL5cxYlORye79KoR4IlOOk99lUJ0g==} + + measured-core@1.51.1: + resolution: {integrity: sha512-DZQP9SEwdqqYRvT2slMK81D/7xwdxXosZZBtLVfPSo6y5P672FBTbzHVdN4IQyUkUpcVOR9pIvtUy5Ryl7NKyg==} + engines: {node: '>= 5.12'} + + measured-reporting@1.51.1: + resolution: {integrity: sha512-JCt+2u6XT1I5lG3SuYqywE0e62DJuAzBcfMzWGUhIYtPQV2Vm4HiYt/durqmzsAbZV181CEs+o/jMKWJKkYIWw==} + engines: {node: '>= 5.12'} + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -3495,8 +3731,8 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} mime-db@1.52.0: @@ -3573,9 +3809,19 @@ packages: engines: {node: '>=10'} hasBin: true + module-details-from-path@1.0.3: + resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + moment@2.29.3: resolution: {integrity: sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==} + monitor-event-loop-delay@1.0.0: + resolution: {integrity: sha512-YRIr1exCIfBDLZle8WHOfSo7Xg3M+phcZfq9Fx1L6Abo+atGp7cge5pM7PjyBn4s1oZI/BRD4EMrzQBbPpVb5Q==} + + morgan@1.10.0: + resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} + engines: {node: '>= 0.8.0'} + ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -3628,6 +3874,15 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + nestjs-cls@4.3.0: + resolution: {integrity: sha512-MVTun6tqCZih8AJXRj8uBuuFyJhQrIA9m9fStiQjbBXUkE3BrlMRvmLzyw8UcneB3xtFFTfwkAh5PYKRulyaOg==} + engines: {node: '>=16'} + peerDependencies: + '@nestjs/common': '> 7.0.0 < 11' + '@nestjs/core': '> 7.0.0 < 11' + reflect-metadata: '*' + rxjs: '>= 7' + nestjs-rate-limiter@3.1.0: resolution: {integrity: sha512-Qwr6daFvNppy038rs0iCQzX/uC3/czCC/2jATcETLIvyFmcBgySOMg7HGEquPKUZDX9lbc06Tn9L6U3QZS13HQ==} @@ -3644,6 +3899,9 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} + next-line@1.1.0: + resolution: {integrity: sha512-+I10J3wKNoKddNxn0CNpoZ3eTZuqxjNM3b1GImVx22+ePI+Y15P8g/j3WsbP0fhzzrFzrtjOAoq5NCCucswXOQ==} + next-tick@1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} @@ -3709,7 +3967,6 @@ packages: npmlog@5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} - deprecated: This package is no longer supported. oauth-sign@0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} @@ -3718,10 +3975,16 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} + object-filter-sequence@1.0.0: + resolution: {integrity: sha512-CsubGNxhIEChNY4cXYuA6KXafztzHqzLLZ/y3Kasf3A+sa3lL9thq3z+7o0pZqzEinjXT6lXDPAfVWI59dUyzQ==} + object-hash@3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} + object-identity-map@1.0.2: + resolution: {integrity: sha512-a2XZDGyYTngvGS67kWnqVdpoaJWsY7C1GhPJvejWAFCsUioTAaiTu8oBad7c6cI4McZxr4CmvnZeycK05iav5A==} + object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} @@ -3737,6 +4000,10 @@ packages: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + object.fromentries@2.0.6: resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} engines: {node: '>= 0.4'} @@ -3748,13 +4015,24 @@ packages: resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} engines: {node: '>= 0.4'} + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -3763,6 +4041,9 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} + optional-js@2.3.0: + resolution: {integrity: sha512-B0LLi+Vg+eko++0z/b8zIv57kp7HKEzaPJo7LowJXMUKYdf+3XJGu/cw03h/JhIOsLnP+cG5QnTHAuicjA5fMw==} + optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -3771,6 +4052,9 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} + original-url@1.2.3: + resolution: {integrity: sha512-BYm+pKYLtS4mVe/mgT3YKGtWV5HzN/XKiaIu1aK4rsxyjuHeTW9N+xVBEpJcY1onB3nccfH0RbzUEoimMqFUHQ==} + os-name@4.0.1: resolution: {integrity: sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==} engines: {node: '>=10'} @@ -3963,6 +4247,13 @@ packages: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} + pino-std-serializers@3.2.0: + resolution: {integrity: sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==} + + pino@6.14.0: + resolution: {integrity: sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==} + hasBin: true + pirates@4.0.6: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} @@ -4023,6 +4314,9 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process-warning@1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} @@ -4039,6 +4333,9 @@ packages: resolution: {integrity: sha512-zLaJ9b8hnC564fnJH6NFSOGZYYdzrAJn2JUUIwzoQb32fG2QAakpDNM+CZo1km6keXkRXRM+hml1BFAPVnPkxg==} engines: {node: '>=16'} + promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -4090,7 +4387,6 @@ packages: puppeteer@21.0.1: resolution: {integrity: sha512-KTjmSdPZ6bMkq3EbAzAUhcB3gMDXvdwd6912rxG9hNtjwRJzHSA568vh6vIbO2WQeNmozRdt1LtiUMLSWfeMrg==} engines: {node: '>=16.3.0'} - deprecated: < 22.6.4 is no longer supported puppeteer@21.5.0: resolution: {integrity: sha512-prvy9rdauyIaaEgefQRcw9zhQnYQbl8O1Gj5VJazKJ7kwNx703+Paw/1bwA+b96jj/S+r55hrmF5SfiEG5PUcg==} @@ -4127,6 +4423,9 @@ packages: queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -4192,6 +4491,9 @@ packages: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} + relative-microtime@2.0.0: + resolution: {integrity: sha512-l18ha6HEZc+No/uK4GyAnNxgKW7nvEe35IaeN54sShMojtqik2a6GbTyuiezkjpPaqP874Z3lW5ysBo5irz4NA==} + repeat-string@1.6.1: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} @@ -4212,6 +4514,10 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + require-in-the-middle@7.3.0: + resolution: {integrity: sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw==} + engines: {node: '>=8.6.0'} + require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} @@ -4259,12 +4565,10 @@ packages: rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@4.4.1: @@ -4298,6 +4602,10 @@ packages: safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -4311,6 +4619,9 @@ packages: resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} engines: {node: '>= 10.13.0'} + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4334,6 +4645,10 @@ packages: set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} @@ -4344,6 +4659,9 @@ packages: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true + shallow-clone-shim@2.0.0: + resolution: {integrity: sha512-YRNymdiL3KGOoS67d73TEmk4tdPTO9GSMCoiphQsTcC9EtC+AOmMPjkyBkRoCJfW9ASsaZw1craaiw1dPN2D3Q==} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4363,6 +4681,9 @@ packages: signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -4409,6 +4730,9 @@ packages: resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + sonic-boom@1.4.1: + resolution: {integrity: sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==} + source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} @@ -4423,6 +4747,10 @@ packages: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} engines: {node: '>= 8'} + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -4430,15 +4758,24 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sql-summary@1.0.1: + resolution: {integrity: sha512-IpCr2tpnNkP3Jera4ncexsZUp0enJBLr+pHCyTweMUBrbJsTgQeLWx1FXLhoBj/MvcnUQpkgOn2EY8FKOkUzww==} + sshpk@1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} engines: {node: '>=0.10.0'} hasBin: true + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + standard-as-callback@2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} @@ -4450,6 +4787,9 @@ packages: resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} engines: {node: '>= 0.4'} + stream-chopper@3.0.1: + resolution: {integrity: sha512-f7h+ly8baAE26iIjcp3VbnBkbIRGtrvV0X0xxFM/d7fwLTYnLzDPTXRKNxa2HZzohOrc96NTrR+FaV3mzOelNA==} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} @@ -4520,12 +4860,10 @@ packages: superagent@7.1.5: resolution: {integrity: sha512-HQYyGuDRFGmZ6GNC4hq2f37KnsY9Lr0/R1marNZTgMweVDQLTLJJ6DGQ9Tj/xVVs5HEnop9EMmTbywb5P30aqw==} engines: {node: '>=6.4.0 <13 || >=14'} - deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net superagent@8.0.9: resolution: {integrity: sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==} engines: {node: '>=6.4.0 <13 || >=14'} - deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net supertest@6.3.3: resolution: {integrity: sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==} @@ -4602,6 +4940,9 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -4636,6 +4977,9 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + to-source-code@1.0.2: + resolution: {integrity: sha512-YzWtjmNIf3E75eZYa7m1SCyl0vgOGoTzdpH3svfa8SUm5rqTgl9hnDolrAGOghCF9P2gsITXQoMrlujOoz+RPw==} + toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} @@ -4647,6 +4991,9 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + traverse@0.3.9: resolution: {integrity: sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==} @@ -4654,6 +5001,10 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + ts-api-utils@1.0.1: resolution: {integrity: sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==} engines: {node: '>=16.13.0'} @@ -4872,9 +5223,15 @@ packages: unfetch@4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} + unicode-byte-truncate@1.0.0: + resolution: {integrity: sha512-GQgHk6DodEoKddKQdjnv7xKS9G09XCfHWX0R4RKht+EbUMSiVEmtWHGFO8HUm+6NvWik3E2/DG4MxTitOLL64A==} + unicode-properties@1.4.1: resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} + unicode-substring@0.1.0: + resolution: {integrity: sha512-36Xaw9wXi7MB/3/EQZZHkZyyiRNa9i3k9YtPAz2KfqMVH2xutdXyMHn4Igarmnvr+wOrfWa/6njhY+jPpXN2EQ==} + unicode-trie@2.0.0: resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} @@ -4985,6 +5342,9 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + webpack-node-externals@3.0.0: resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} engines: {node: '>=6'} @@ -5003,6 +5363,16 @@ packages: webpack-cli: optional: true + webpack@5.88.2: + resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + websocket@1.0.34: resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} engines: {node: '>=4.0.0'} @@ -5010,6 +5380,9 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -5042,6 +5415,24 @@ packages: resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==} engines: {node: '>=10'} + winston-daily-rotate-file@5.0.0: + resolution: {integrity: sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==} + engines: {node: '>=8'} + peerDependencies: + winston: ^3 + + winston-elasticsearch@0.16.0: + resolution: {integrity: sha512-OYpw/dCnt7s50HTJIDa7Nyz+7rchHaS77Jz3uMixahF++G5Xejrq4ZLJ4N/vMAY6tAdnwWmAqnOCJ+/GDnWktA==} + engines: {node: '>= 8.0.0'} + + winston-transport@4.7.1: + resolution: {integrity: sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==} + engines: {node: '>= 12.0.0'} + + winston@3.4.0: + resolution: {integrity: sha512-FqilVj+5HKwCfIHQzMxrrd5tBIH10JTS3koFGbLVWBODjiIYq7zir08rFyBT4rrTYG/eaTqDcfSIbcjSM78YSw==} + engines: {node: '>= 6.4.0'} + wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -5200,21 +5591,19 @@ snapshots: dependencies: ajv: 8.12.0 ajv-formats: 2.1.1(ajv@8.12.0) + chokidar: 3.5.3 jsonc-parser: 3.2.0 rxjs: 7.8.1 source-map: 0.7.4 - optionalDependencies: - chokidar: 3.5.3 '@angular-devkit/core@16.1.4(chokidar@3.5.3)': dependencies: ajv: 8.12.0 ajv-formats: 2.1.1(ajv@8.12.0) + chokidar: 3.5.3 jsonc-parser: 3.2.0 rxjs: 7.8.1 source-map: 0.7.4 - optionalDependencies: - chokidar: 3.5.3 '@angular-devkit/schematics-cli@16.1.4(chokidar@3.5.3)': dependencies: @@ -5266,7 +5655,7 @@ snapshots: '@babel/traverse': 7.22.8 '@babel/types': 7.22.5 convert-source-map: 1.9.0 - debug: 4.3.5 + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -5437,7 +5826,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.7 '@babel/types': 7.22.5 - debug: 4.3.5 + debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -5453,10 +5842,40 @@ snapshots: '@colors/colors@1.5.0': optional: true + '@colors/colors@1.6.0': {} + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@elastic/ecs-helpers@2.1.1': {} + + '@elastic/ecs-pino-format@1.5.0': + dependencies: + '@elastic/ecs-helpers': 2.1.1 + optional: true + + '@elastic/ecs-winston-format@1.5.3': + dependencies: + '@elastic/ecs-helpers': 2.1.1 + safe-stable-stringify: 2.4.3 + triple-beam: 1.4.1 + + '@elastic/elasticsearch@7.17.14': + dependencies: + debug: 4.3.4 + hpagent: 0.1.2 + ms: 2.1.3 + secure-json-parse: 2.7.0 + transitivePeerDependencies: + - supports-color + '@eslint-community/eslint-utils@4.4.0(eslint@8.46.0)': dependencies: eslint: 8.46.0 @@ -5467,7 +5886,7 @@ snapshots: '@eslint/eslintrc@2.1.1': dependencies: ajv: 6.12.6 - debug: 4.3.5 + debug: 4.3.4 espree: 9.6.1 globals: 13.20.0 ignore: 5.2.4 @@ -5483,7 +5902,7 @@ snapshots: '@humanwhocodes/config-array@0.11.10': dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.5 + debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -5513,7 +5932,7 @@ snapshots: jest-util: 29.6.2 slash: 3.0.0 - '@jest/core@29.6.2(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6))': + '@jest/core@29.6.2(ts-node@10.9.1)': dependencies: '@jest/console': 29.6.2 '@jest/reporters': 29.6.2 @@ -5527,7 +5946,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.6.2(@types/node@20.4.6)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)) + jest-config: 29.6.2(@types/node@20.4.6)(ts-node@10.9.1) jest-haste-map: 29.6.2 jest-message-util: 29.6.2 jest-regex-util: 29.4.3 @@ -5539,7 +5958,7 @@ snapshots: jest-util: 29.6.2 jest-validate: 29.6.2 jest-watcher: 29.6.2 - micromatch: 4.0.7 + micromatch: 4.0.5 pretty-format: 29.6.2 slash: 3.0.0 strip-ansi: 6.0.1 @@ -5650,7 +6069,7 @@ snapshots: jest-haste-map: 29.6.2 jest-regex-util: 29.4.3 jest-util: 29.6.2 - micromatch: 4.0.7 + micromatch: 4.0.5 pirates: 4.0.6 slash: 3.0.0 write-file-atomic: 4.0.2 @@ -5732,31 +6151,31 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2': optional: true - '@nestjs/axios@3.0.0(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(axios@1.4.0)(reflect-metadata@0.1.13)(rxjs@7.8.1)': + '@nestjs/axios@3.0.0(@nestjs/common@10.2.8)(axios@1.7.2)(reflect-metadata@0.1.13)(rxjs@7.8.1)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - axios: 1.4.0 + axios: 1.7.2 reflect-metadata: 0.1.13 rxjs: 7.8.1 - '@nestjs/bull-shared@10.0.1(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))': + '@nestjs/bull-shared@10.0.1(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/core': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/core': 10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) tslib: 2.6.0 - '@nestjs/bull@10.0.1(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))(bull@4.11.4)': + '@nestjs/bull@10.0.1(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(bull@4.11.4)': dependencies: - '@nestjs/bull-shared': 10.0.1(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1)) + '@nestjs/bull-shared': 10.0.1(@nestjs/common@10.2.8)(@nestjs/core@10.1.3) '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/core': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/core': 10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) bull: 4.11.4 tslib: 2.6.0 - '@nestjs/cache-manager@2.2.1(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))(cache-manager@5.4.0)(rxjs@7.8.1)': + '@nestjs/cache-manager@2.2.1(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(cache-manager@5.4.0)(rxjs@7.8.1)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/core': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/core': 10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) cache-manager: 5.4.0 rxjs: 7.8.1 @@ -5791,16 +6210,15 @@ snapshots: '@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1)': dependencies: + class-transformer: 0.5.1 + class-validator: 0.14.0 iterare: 1.2.1 reflect-metadata: 0.1.13 rxjs: 7.8.1 tslib: 2.6.2 uid: 2.0.2 - optionalDependencies: - class-transformer: 0.5.1 - class-validator: 0.14.0 - '@nestjs/config@3.0.0(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(reflect-metadata@0.1.13)': + '@nestjs/config@3.0.0(@nestjs/common@10.2.8)(reflect-metadata@0.1.13)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) dotenv: 16.1.4 @@ -5809,9 +6227,12 @@ snapshots: reflect-metadata: 0.1.13 uuid: 9.0.0 - '@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1)': + '@nestjs/core@10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/microservices': 10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(@nestjs/websockets@10.1.3)(cache-manager@5.4.0)(nats@2.15.1)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/platform-express': 10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3) + '@nestjs/websockets': 10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(@nestjs/platform-socket.io@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@nuxtjs/opencollective': 0.3.2 fast-safe-stringify: 2.1.1 iterare: 1.2.1 @@ -5820,50 +6241,43 @@ snapshots: rxjs: 7.8.1 tslib: 2.6.1 uid: 2.0.2 - optionalDependencies: - '@nestjs/microservices': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)(@nestjs/websockets@10.1.3)(cache-manager@5.4.0)(ioredis@5.3.2)(nats@2.15.1)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/platform-express': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3) - '@nestjs/websockets': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)(@nestjs/platform-socket.io@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) transitivePeerDependencies: - encoding - '@nestjs/jwt@10.1.0(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))': + '@nestjs/jwt@10.1.0(@nestjs/common@10.2.8)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) '@types/jsonwebtoken': 9.0.2 jsonwebtoken: 9.0.0 - '@nestjs/mapped-types@2.0.2(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)': + '@nestjs/mapped-types@2.0.2(@nestjs/common@10.2.8)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - reflect-metadata: 0.1.13 - optionalDependencies: class-transformer: 0.5.1 class-validator: 0.14.0 + reflect-metadata: 0.1.13 - '@nestjs/microservices@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)(@nestjs/websockets@10.1.3)(cache-manager@5.4.0)(ioredis@5.3.2)(nats@2.15.1)(reflect-metadata@0.1.13)(rxjs@7.8.1)': + '@nestjs/microservices@10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(@nestjs/websockets@10.1.3)(cache-manager@5.4.0)(nats@2.15.1)(reflect-metadata@0.1.13)(rxjs@7.8.1)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/core': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/core': 10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/websockets': 10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(@nestjs/platform-socket.io@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + cache-manager: 5.4.0 iterare: 1.2.1 + nats: 2.15.1 reflect-metadata: 0.1.13 rxjs: 7.8.1 tslib: 2.6.1 - optionalDependencies: - '@nestjs/websockets': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)(@nestjs/platform-socket.io@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) - cache-manager: 5.4.0 - ioredis: 5.3.2 - nats: 2.15.1 - '@nestjs/passport@10.0.0(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(passport@0.6.0)': + '@nestjs/passport@10.0.0(@nestjs/common@10.2.8)(passport@0.6.0)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) passport: 0.6.0 - '@nestjs/platform-express@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)': + '@nestjs/platform-express@10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/core': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/core': 10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) body-parser: 1.20.2 cors: 2.8.5 express: 4.18.2 @@ -5872,22 +6286,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@nestjs/platform-socket.io@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/websockets@10.1.3)(bufferutil@4.0.7)(rxjs@7.8.1)(utf-8-validate@5.0.10)': + '@nestjs/platform-socket.io@10.1.3(@nestjs/common@10.2.8)(@nestjs/websockets@10.1.3)(rxjs@7.8.1)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/websockets': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)(@nestjs/platform-socket.io@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/websockets': 10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(@nestjs/platform-socket.io@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) rxjs: 7.8.1 - socket.io: 4.7.1(bufferutil@4.0.7)(utf-8-validate@5.0.10) + socket.io: 4.7.1 tslib: 2.6.1 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@nestjs/schedule@3.0.1(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))(reflect-metadata@0.1.13)': + '@nestjs/schedule@3.0.1(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(reflect-metadata@0.1.13)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/core': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/core': 10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) cron: 2.3.1 reflect-metadata: 0.1.13 uuid: 9.0.0 @@ -5903,49 +6317,46 @@ snapshots: transitivePeerDependencies: - chokidar - '@nestjs/swagger@7.1.6(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)': + '@nestjs/swagger@7.1.6(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/core': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/mapped-types': 2.0.2(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) + '@nestjs/core': 10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/mapped-types': 2.0.2(@nestjs/common@10.2.8)(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13) + class-transformer: 0.5.1 + class-validator: 0.14.0 js-yaml: 4.1.0 lodash: 4.17.21 path-to-regexp: 3.2.0 reflect-metadata: 0.1.13 swagger-ui-dist: 5.1.0 - optionalDependencies: - class-transformer: 0.5.1 - class-validator: 0.14.0 - '@nestjs/testing@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)(@nestjs/websockets@10.1.3)(cache-manager@5.4.0)(ioredis@5.3.2)(nats@2.15.1)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/platform-express@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3))': + '@nestjs/testing@10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/core': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/core': 10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/microservices': 10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(@nestjs/websockets@10.1.3)(cache-manager@5.4.0)(nats@2.15.1)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/platform-express': 10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3) tslib: 2.6.1 - optionalDependencies: - '@nestjs/microservices': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)(@nestjs/websockets@10.1.3)(cache-manager@5.4.0)(ioredis@5.3.2)(nats@2.15.1)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/platform-express': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3) - '@nestjs/typeorm@10.0.0(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1))(reflect-metadata@0.1.13)(rxjs@7.8.1)(typeorm@0.3.10(ioredis@5.3.2)(pg@8.11.2)(redis@3.1.2)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)))': + '@nestjs/typeorm@10.0.0(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1)(typeorm@0.3.10)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/core': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/core': 10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) reflect-metadata: 0.1.13 rxjs: 7.8.1 - typeorm: 0.3.10(ioredis@5.3.2)(pg@8.11.2)(redis@3.1.2)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)) + typeorm: 0.3.10(pg@8.11.2)(ts-node@10.9.1) uuid: 9.0.0 - '@nestjs/websockets@10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/core@10.1.3)(@nestjs/platform-socket.io@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1)': + '@nestjs/websockets@10.1.3(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(@nestjs/platform-socket.io@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1)': dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - '@nestjs/core': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/core': 10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/platform-socket.io': 10.1.3(@nestjs/common@10.2.8)(@nestjs/websockets@10.1.3)(rxjs@7.8.1) iterare: 1.2.1 object-hash: 3.0.0 reflect-metadata: 0.1.13 rxjs: 7.8.1 tslib: 2.6.1 - optionalDependencies: - '@nestjs/platform-socket.io': 10.1.3(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(@nestjs/websockets@10.1.3)(bufferutil@4.0.7)(rxjs@7.8.1)(utf-8-validate@5.0.10) '@nodelib/fs.scandir@2.1.5': dependencies: @@ -5967,10 +6378,36 @@ snapshots: transitivePeerDependencies: - encoding + '@opentelemetry/api@1.9.0': + optional: true + + '@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.25.1 + optional: true + + '@opentelemetry/resources@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + optional: true + + '@opentelemetry/sdk-metrics@1.25.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + lodash.merge: 4.6.2 + optional: true + + '@opentelemetry/semantic-conventions@1.25.1': + optional: true + '@prisma/client@5.1.1(prisma@5.1.1)': dependencies: '@prisma/engines-version': 5.1.1-1.6a3747c37ff169c90047725a05a6ef02e32ac97e - optionalDependencies: prisma: 5.1.1 '@prisma/engines-version@5.1.1-1.6a3747c37ff169c90047725a05a6ef02e32ac97e': {} @@ -6263,6 +6700,8 @@ snapshots: dependencies: '@types/superagent': 4.1.18 + '@types/triple-beam@1.3.5': {} + '@types/validator@13.9.0': {} '@types/websocket@1.0.5': @@ -6280,7 +6719,7 @@ snapshots: '@types/node': 20.4.6 optional: true - '@typescript-eslint/eslint-plugin@6.2.1(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0)(typescript@5.1.6)': + '@typescript-eslint/eslint-plugin@6.2.1(@typescript-eslint/parser@6.2.1)(eslint@8.46.0)(typescript@5.1.6)': dependencies: '@eslint-community/regexpp': 4.6.2 '@typescript-eslint/parser': 6.2.1(eslint@8.46.0)(typescript@5.1.6) @@ -6288,7 +6727,7 @@ snapshots: '@typescript-eslint/type-utils': 6.2.1(eslint@8.46.0)(typescript@5.1.6) '@typescript-eslint/utils': 6.2.1(eslint@8.46.0)(typescript@5.1.6) '@typescript-eslint/visitor-keys': 6.2.1 - debug: 4.3.5 + debug: 4.3.4 eslint: 8.46.0 graphemer: 1.4.0 ignore: 5.2.4 @@ -6296,7 +6735,6 @@ snapshots: natural-compare-lite: 1.4.0 semver: 7.5.4 ts-api-utils: 1.0.1(typescript@5.1.6) - optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color @@ -6306,9 +6744,8 @@ snapshots: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.1.6) - debug: 4.3.5 + debug: 4.3.4 eslint: 8.46.0 - optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color @@ -6319,9 +6756,8 @@ snapshots: '@typescript-eslint/types': 6.2.1 '@typescript-eslint/typescript-estree': 6.2.1(typescript@5.1.6) '@typescript-eslint/visitor-keys': 6.2.1 - debug: 4.3.5 + debug: 4.3.4 eslint: 8.46.0 - optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color @@ -6340,10 +6776,9 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 6.2.1(typescript@5.1.6) '@typescript-eslint/utils': 6.2.1(eslint@8.46.0)(typescript@5.1.6) - debug: 4.3.5 + debug: 4.3.4 eslint: 8.46.0 ts-api-utils: 1.0.1(typescript@5.1.6) - optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color @@ -6356,12 +6791,11 @@ snapshots: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.5 + debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 tsutils: 3.21.0(typescript@5.1.6) - optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color @@ -6370,12 +6804,11 @@ snapshots: dependencies: '@typescript-eslint/types': 6.2.1 '@typescript-eslint/visitor-keys': 6.2.1 - debug: 4.3.5 + debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 ts-api-utils: 1.0.1(typescript@5.1.6) - optionalDependencies: typescript: 5.1.6 transitivePeerDependencies: - supports-color @@ -6503,25 +6936,33 @@ snapshots: acorn@8.10.0: {} + after-all-results@2.0.0: + optional: true + agent-base@6.0.2: dependencies: - debug: 4.3.5 + debug: 4.3.4 transitivePeerDependencies: - supports-color agent-base@7.1.0: dependencies: - debug: 4.3.5 + debug: 4.3.4 transitivePeerDependencies: - supports-color + agentkeepalive@4.5.0: + dependencies: + humanize-ms: 1.2.1 + optional: true + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 ajv-formats@2.1.1(ajv@8.12.0): - optionalDependencies: + dependencies: ajv: 8.12.0 ajv-keywords@3.5.2(ajv@6.12.6): @@ -6663,12 +7104,30 @@ snapshots: astral-regex@2.0.0: {} + async-cache@1.1.0: + dependencies: + lru-cache: 4.0.2 + optional: true + async-retry@1.3.3: dependencies: retry: 0.13.1 + async-value-promise@1.1.1: + dependencies: + async-value: 1.2.2 + optional: true + + async-value@1.2.2: + optional: true + + async@3.2.5: {} + asynckit@0.4.0: {} + atomic-sleep@1.0.0: + optional: true + auth0-js@9.22.1: dependencies: base64-js: 1.5.1 @@ -6709,9 +7168,9 @@ snapshots: transitivePeerDependencies: - debug - axios@1.4.0: + axios@1.7.2: dependencies: - follow-redirects: 1.15.2 + follow-redirects: 1.15.6 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -6779,6 +7238,10 @@ snapshots: base64id@2.0.0: {} + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + basic-ftp@5.0.3: {} bcrypt-pbkdf@1.0.2: @@ -6798,6 +7261,9 @@ snapshots: binary-extensions@2.2.0: {} + binary-search@1.3.6: + optional: true + binary@0.3.0: dependencies: buffers: 0.1.1 @@ -6866,9 +7332,10 @@ snapshots: dependencies: fill-range: 7.0.1 - braces@3.0.3: + breadth-filter@2.0.0: dependencies: - fill-range: 7.1.1 + object.entries: 1.1.8 + optional: true brotli@1.3.3: dependencies: @@ -6902,7 +7369,7 @@ snapshots: buffer@4.9.2: dependencies: base64-js: 1.5.1 - ieee754: 1.1.13 + ieee754: 1.2.1 isarray: 1.0.0 buffer@5.7.1: @@ -6958,6 +7425,15 @@ snapshots: function-bind: 1.1.1 get-intrinsic: 1.2.1 + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + optional: true + callsites@3.1.0: {} camelcase@5.3.1: {} @@ -7104,10 +7580,25 @@ snapshots: color-name@1.1.4: {} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + color-support@1.1.3: {} + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + colorette@2.0.20: {} + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -7143,6 +7634,9 @@ snapshots: console-control-strings@1.1.0: {} + console-log-level@1.4.1: + optional: true + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 @@ -7192,18 +7686,17 @@ snapshots: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - optionalDependencies: typescript: 5.1.6 create-require@1.1.1: {} cron-parser@4.8.1: dependencies: - luxon: 3.4.4 + luxon: 3.3.0 cron@2.3.1: dependencies: - luxon: 3.4.4 + luxon: 3.3.0 cross-fetch@3.1.8: dependencies: @@ -7245,6 +7738,8 @@ snapshots: dependencies: '@babel/runtime': 7.22.6 + dayjs@1.11.12: {} + debug@2.6.9: dependencies: ms: 2.0.0 @@ -7257,10 +7752,6 @@ snapshots: dependencies: ms: 2.1.2 - debug@4.3.5: - dependencies: - ms: 2.1.2 - decamelize@1.2.0: {} dedent@1.5.1: {} @@ -7294,11 +7785,25 @@ snapshots: dependencies: clone: 1.0.4 + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + optional: true + define-properties@1.2.0: dependencies: has-property-descriptors: 1.0.0 object-keys: 1.1.1 + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + optional: true + degenerator@5.0.1: dependencies: ast-types: 0.13.4 @@ -7374,6 +7879,50 @@ snapshots: ee-first@1.1.1: {} + elastic-apm-node@3.51.0: + dependencies: + '@elastic/ecs-pino-format': 1.5.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.25.1(@opentelemetry/api@1.9.0) + after-all-results: 2.0.0 + agentkeepalive: 4.5.0 + 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.3 + end-of-stream: 1.4.4 + error-callsites: 2.0.4 + error-stack-parser: 2.1.4 + escape-string-regexp: 4.0.0 + fast-safe-stringify: 2.1.1 + 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.14.0 + readable-stream: 3.6.2 + relative-microtime: 2.0.0 + require-in-the-middle: 7.3.0 + 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 + transitivePeerDependencies: + - supports-color + optional: true + electron-to-chromium@1.4.483: {} emittery@0.13.1: {} @@ -7382,6 +7931,8 @@ snapshots: emoji-regex@9.2.2: {} + enabled@2.0.0: {} + encode-utf8@1.0.3: {} encodeurl@1.0.2: {} @@ -7390,12 +7941,12 @@ snapshots: dependencies: once: 1.4.0 - engine.io-client@6.5.2(bufferutil@4.0.7)(utf-8-validate@5.0.10): + engine.io-client@6.5.2: dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.5 + debug: 4.3.4 engine.io-parser: 5.2.1 - ws: 8.11.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) + ws: 8.11.0 xmlhttprequest-ssl: 2.0.0 transitivePeerDependencies: - bufferutil @@ -7404,7 +7955,7 @@ snapshots: engine.io-parser@5.2.1: {} - engine.io@6.5.2(bufferutil@4.0.7)(utf-8-validate@5.0.10): + engine.io@6.5.2: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.13 @@ -7413,9 +7964,9 @@ snapshots: base64id: 2.0.0 cookie: 0.4.2 cors: 2.8.5 - debug: 4.3.5 + debug: 4.3.4 engine.io-parser: 5.2.1 - ws: 8.11.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) + ws: 8.11.0 transitivePeerDependencies: - bufferutil - supports-color @@ -7426,10 +7977,18 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.1 + error-callsites@2.0.4: + optional: true + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 + error-stack-parser@2.1.4: + dependencies: + stackframe: 1.3.4 + optional: true + es-abstract@1.22.1: dependencies: array-buffer-byte-length: 1.0.0 @@ -7472,6 +8031,13 @@ snapshots: unbox-primitive: 1.0.2 which-typed-array: 1.1.11 + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + optional: true + + es-errors@1.3.0: {} + es-get-iterator@1.1.3: dependencies: call-bind: 1.0.2 @@ -7486,6 +8052,11 @@ snapshots: es-module-lexer@1.3.0: {} + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + optional: true + es-set-tostringtag@2.0.1: dependencies: get-intrinsic: 1.2.1 @@ -7543,23 +8114,23 @@ snapshots: dependencies: eslint: 8.46.0 - eslint-config-standard-with-typescript@37.0.0(@typescript-eslint/eslint-plugin@6.2.1(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0)(typescript@5.1.6))(eslint-plugin-import@2.28.0(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0))(eslint-plugin-n@15.7.0(eslint@8.46.0))(eslint-plugin-promise@6.1.1(eslint@8.46.0))(eslint@8.46.0)(typescript@5.1.6): + eslint-config-standard-with-typescript@37.0.0(@typescript-eslint/eslint-plugin@6.2.1)(eslint-plugin-import@2.28.0)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.46.0)(typescript@5.1.6): dependencies: - '@typescript-eslint/eslint-plugin': 6.2.1(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/eslint-plugin': 6.2.1(@typescript-eslint/parser@6.2.1)(eslint@8.46.0)(typescript@5.1.6) '@typescript-eslint/parser': 5.62.0(eslint@8.46.0)(typescript@5.1.6) eslint: 8.46.0 - eslint-config-standard: 17.1.0(eslint-plugin-import@2.28.0(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0))(eslint-plugin-n@15.7.0(eslint@8.46.0))(eslint-plugin-promise@6.1.1(eslint@8.46.0))(eslint@8.46.0) - eslint-plugin-import: 2.28.0(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0) + eslint-config-standard: 17.1.0(eslint-plugin-import@2.28.0)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.46.0) + eslint-plugin-import: 2.28.0(@typescript-eslint/parser@6.2.1)(eslint@8.46.0) eslint-plugin-n: 15.7.0(eslint@8.46.0) eslint-plugin-promise: 6.1.1(eslint@8.46.0) typescript: 5.1.6 transitivePeerDependencies: - supports-color - eslint-config-standard@17.1.0(eslint-plugin-import@2.28.0(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0))(eslint-plugin-n@15.7.0(eslint@8.46.0))(eslint-plugin-promise@6.1.1(eslint@8.46.0))(eslint@8.46.0): + eslint-config-standard@17.1.0(eslint-plugin-import@2.28.0)(eslint-plugin-n@15.7.0)(eslint-plugin-promise@6.1.1)(eslint@8.46.0): dependencies: eslint: 8.46.0 - eslint-plugin-import: 2.28.0(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0) + eslint-plugin-import: 2.28.0(@typescript-eslint/parser@6.2.1)(eslint@8.46.0) eslint-plugin-n: 15.7.0(eslint@8.46.0) eslint-plugin-promise: 6.1.1(eslint@8.46.0) @@ -7571,11 +8142,10 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.7)(eslint@8.46.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-node@0.3.7)(eslint@8.46.0): dependencies: - debug: 3.2.7 - optionalDependencies: '@typescript-eslint/parser': 6.2.1(eslint@8.46.0)(typescript@5.1.6) + debug: 3.2.7 eslint: 8.46.0 eslint-import-resolver-node: 0.3.7 transitivePeerDependencies: @@ -7587,8 +8157,9 @@ snapshots: eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-import@2.28.0(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint@8.46.0): + eslint-plugin-import@2.28.0(@typescript-eslint/parser@6.2.1)(eslint@8.46.0): dependencies: + '@typescript-eslint/parser': 6.2.1(eslint@8.46.0)(typescript@5.1.6) array-includes: 3.1.6 array.prototype.findlastindex: 1.2.2 array.prototype.flat: 1.3.1 @@ -7597,7 +8168,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.46.0 eslint-import-resolver-node: 0.3.7 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6))(eslint-import-resolver-node@0.3.7)(eslint@8.46.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.2.1)(eslint-import-resolver-node@0.3.7)(eslint@8.46.0) has: 1.0.3 is-core-module: 2.12.1 is-glob: 4.0.3 @@ -7608,8 +8179,6 @@ snapshots: resolve: 1.22.3 semver: 6.3.1 tsconfig-paths: 3.14.2 - optionalDependencies: - '@typescript-eslint/parser': 6.2.1(eslint@8.46.0)(typescript@5.1.6) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -7627,13 +8196,12 @@ snapshots: resolve: 1.22.2 semver: 7.5.4 - eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0(eslint@8.46.0))(eslint@8.46.0)(prettier@3.0.1): + eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0)(eslint@8.46.0)(prettier@3.0.1): dependencies: eslint: 8.46.0 + eslint-config-prettier: 8.10.0(eslint@8.46.0) prettier: 3.0.1 prettier-linter-helpers: 1.0.0 - optionalDependencies: - eslint-config-prettier: 8.10.0(eslint@8.46.0) eslint-plugin-promise@6.1.1(eslint@8.46.0): dependencies: @@ -7676,7 +8244,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5 + debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -7865,14 +8433,22 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.5 fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} + fast-redact@3.5.0: + optional: true + fast-safe-stringify@2.1.1: {} + fast-stream-to-buffer@1.0.0: + dependencies: + end-of-stream: 1.4.4 + optional: true + fastq@1.15.0: dependencies: reusify: 1.0.4 @@ -7885,6 +8461,8 @@ snapshots: dependencies: pend: 1.2.0 + fecha@4.2.3: {} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 @@ -7893,11 +8471,11 @@ snapshots: dependencies: flat-cache: 3.0.4 - fill-range@7.0.1: + file-stream-rotator@0.6.1: dependencies: - to-regex-range: 5.0.1 + moment: 2.29.3 - fill-range@7.1.1: + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 @@ -7928,10 +8506,17 @@ snapshots: flatted: 3.2.7 rimraf: 3.0.2 + flatstr@1.0.12: + optional: true + flatted@3.2.7: {} + fn.name@1.1.0: {} + follow-redirects@1.15.2: {} + follow-redirects@1.15.6: {} + fontkit@1.9.0: dependencies: '@swc/helpers': 0.3.17 @@ -7988,6 +8573,9 @@ snapshots: once: 1.4.0 qs: 6.11.2 + forwarded-parse@2.1.2: + optional: true + forwarded@0.2.0: {} fresh@0.5.2: {} @@ -8033,6 +8621,8 @@ snapshots: function-bind@1.1.1: {} + function-bind@1.1.2: {} + function.prototype.name@1.1.5: dependencies: call-bind: 1.0.2 @@ -8067,6 +8657,14 @@ snapshots: has-proto: 1.0.1 has-symbols: 1.0.3 + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.2 + get-package-type@0.1.0: {} get-port@5.1.1: {} @@ -8143,7 +8741,7 @@ snapshots: gopd@1.0.1: dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.4 graceful-fs@4.2.11: {} @@ -8179,6 +8777,11 @@ snapshots: dependencies: get-intrinsic: 1.2.1 + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + optional: true + has-proto@1.0.1: {} has-symbols@1.0.3: {} @@ -8199,12 +8802,18 @@ snapshots: pinkie-promise: 2.0.1 optional: true + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + helmet@7.1.0: {} hexoid@1.0.0: {} highlight.js@10.7.3: {} + hpagent@0.1.2: {} + html-escaper@2.0.2: {} html-pdf@3.0.1: @@ -8223,6 +8832,11 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-headers@3.0.2: + dependencies: + next-line: 1.1.0 + optional: true + http-proxy-agent@7.0.0: dependencies: agent-base: 7.1.0 @@ -8244,14 +8858,21 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.5 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.1: + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.2: dependencies: agent-base: 7.1.0 - debug: 4.3.5 + debug: 4.3.4 transitivePeerDependencies: - supports-color @@ -8261,6 +8882,11 @@ snapshots: human-signals@4.3.1: {} + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + optional: true + husky@8.0.3: {} iconv-lite@0.4.24: @@ -8287,6 +8913,14 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-in-the-middle@1.4.2: + dependencies: + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) + cjs-module-lexer: 1.2.3 + module-details-from-path: 1.0.3 + optional: true + import-local@3.1.0: dependencies: pkg-dir: 4.2.0 @@ -8353,7 +8987,7 @@ snapshots: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 - debug: 4.3.5 + debug: 4.3.4 denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 @@ -8382,6 +9016,8 @@ snapshots: is-arrayish@0.2.1: {} + is-arrayish@0.3.2: {} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 @@ -8407,6 +9043,9 @@ snapshots: is-extglob@2.1.1: {} + is-finite@1.1.0: + optional: true + is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@4.0.0: {} @@ -8421,12 +9060,26 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-integer@1.0.7: + dependencies: + is-finite: 1.1.0 + optional: true + is-interactive@1.0.0: {} is-map@2.0.2: {} + is-native@1.0.1: + dependencies: + is-nil: 1.0.1 + to-source-code: 1.0.2 + optional: true + is-negative-zero@2.0.2: {} + is-nil@1.0.1: + optional: true + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.0 @@ -8509,7 +9162,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.5 + debug: 4.3.4 istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: @@ -8553,16 +9206,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.6.2(@types/node@20.4.6)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)): + jest-cli@29.6.2(@types/node@20.4.6)(ts-node@10.9.1): dependencies: - '@jest/core': 29.6.2(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)) + '@jest/core': 29.6.2(ts-node@10.9.1) '@jest/test-result': 29.6.2 '@jest/types': 29.6.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.6.2(@types/node@20.4.6)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)) + jest-config: 29.6.2(@types/node@20.4.6)(ts-node@10.9.1) jest-util: 29.6.2 jest-validate: 29.6.2 prompts: 2.4.2 @@ -8573,11 +9226,12 @@ snapshots: - supports-color - ts-node - jest-config@29.6.2(@types/node@20.4.6)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)): + jest-config@29.6.2(@types/node@20.4.6)(ts-node@10.9.1): dependencies: '@babel/core': 7.22.9 '@jest/test-sequencer': 29.6.2 '@jest/types': 29.6.1 + '@types/node': 20.4.6 babel-jest: 29.6.2(@babel/core@7.22.9) chalk: 4.1.2 ci-info: 3.8.0 @@ -8592,13 +9246,11 @@ snapshots: jest-runner: 29.6.2 jest-util: 29.6.2 jest-validate: 29.6.2 - micromatch: 4.0.7 + micromatch: 4.0.5 parse-json: 5.2.0 pretty-format: 29.6.2 slash: 3.0.0 strip-json-comments: 3.1.1 - optionalDependencies: - '@types/node': 20.4.6 ts-node: 10.9.1(@types/node@20.4.6)(typescript@5.1.6) transitivePeerDependencies: - babel-plugin-macros @@ -8645,7 +9297,7 @@ snapshots: jest-regex-util: 29.4.3 jest-util: 29.6.2 jest-worker: 29.6.2 - micromatch: 4.0.7 + micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 @@ -8669,7 +9321,7 @@ snapshots: '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.7 + micromatch: 4.0.5 pretty-format: 29.6.2 slash: 3.0.0 stack-utils: 2.0.6 @@ -8681,7 +9333,7 @@ snapshots: jest-util: 29.6.2 jest-pnp-resolver@1.2.3(jest-resolve@29.6.2): - optionalDependencies: + dependencies: jest-resolve: 29.6.2 jest-regex-util@29.4.3: {} @@ -8825,12 +9477,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.6.2(@types/node@20.4.6)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)): + jest@29.6.2(@types/node@20.4.6)(ts-node@10.9.1): dependencies: - '@jest/core': 29.6.2(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)) + '@jest/core': 29.6.2(ts-node@10.9.1) '@jest/types': 29.6.1 import-local: 3.1.0 - jest-cli: 29.6.2(@types/node@20.4.6)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)) + jest-cli: 29.6.2(@types/node@20.4.6)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -8944,7 +9596,7 @@ snapshots: dependencies: '@types/express': 4.17.17 '@types/jsonwebtoken': 9.0.2 - debug: 4.3.5 + debug: 4.3.4 jose: 4.14.4 limiter: 1.1.5 lru-memoizer: 2.2.0 @@ -8971,6 +9623,8 @@ snapshots: kleur@3.0.3: {} + kuler@2.0.0: {} + leven@3.1.0: {} levn@0.4.1: @@ -8998,11 +9652,11 @@ snapshots: chalk: 5.2.0 cli-truncate: 3.1.0 commander: 10.0.1 - debug: 4.3.5 + debug: 4.3.4 execa: 7.2.0 lilconfig: 2.1.0 listr2: 5.0.8 - micromatch: 4.0.7 + micromatch: 4.0.5 normalize-path: 3.0.0 object-inspect: 1.12.3 pidtree: 0.6.0 @@ -9047,6 +9701,11 @@ snapshots: lodash.merge@4.6.2: {} + lodash.omit@4.5.0: {} + + lodash.sortby@4.7.0: + optional: true + lodash@4.17.21: {} log-symbols@4.1.0: @@ -9061,6 +9720,15 @@ snapshots: slice-ansi: 4.0.0 wrap-ansi: 6.2.0 + logform@2.6.1: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.4.3 + triple-beam: 1.4.1 + lru-cache@10.2.0: {} lru-cache@4.0.2: @@ -9083,7 +9751,7 @@ snapshots: lodash.clonedeep: 4.5.0 lru-cache: 4.0.2 - luxon@3.4.4: {} + luxon@3.3.0: {} macos-release@2.5.1: {} @@ -9105,6 +9773,23 @@ snapshots: dependencies: tmpl: 1.0.5 + mapcap@1.0.0: + optional: true + + measured-core@1.51.1: + dependencies: + binary-search: 1.3.6 + optional-js: 2.3.0 + optional: true + + measured-reporting@1.51.1: + dependencies: + console-log-level: 1.4.1 + mapcap: 1.0.0 + measured-core: 1.51.1 + optional-js: 2.3.0 + optional: true + media-typer@0.3.0: {} memfs@3.5.3: @@ -9119,9 +9804,9 @@ snapshots: methods@1.1.2: {} - micromatch@4.0.7: + micromatch@4.0.5: dependencies: - braces: 3.0.3 + braces: 3.0.2 picomatch: 2.3.1 mime-db@1.52.0: {} @@ -9175,8 +9860,24 @@ snapshots: mkdirp@1.0.4: {} + module-details-from-path@1.0.3: + optional: true + moment@2.29.3: {} + monitor-event-loop-delay@1.0.0: + optional: true + + morgan@1.10.0: + dependencies: + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 2.0.0 + on-finished: 2.3.0 + on-headers: 1.0.2 + transitivePeerDependencies: + - supports-color + ms@2.0.0: {} ms@2.1.2: {} @@ -9241,19 +9942,29 @@ snapshots: neo-async@2.6.2: {} + nestjs-cls@4.3.0(@nestjs/common@10.2.8)(@nestjs/core@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1): + dependencies: + '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) + '@nestjs/core': 10.1.3(@nestjs/common@10.2.8)(@nestjs/microservices@10.1.3)(@nestjs/platform-express@10.1.3)(@nestjs/websockets@10.1.3)(reflect-metadata@0.1.13)(rxjs@7.8.1) + reflect-metadata: 0.1.13 + rxjs: 7.8.1 + nestjs-rate-limiter@3.1.0: dependencies: rate-limiter-flexible: 2.1.10 nestjs-supabase-auth@1.0.9: {} - nestjs-typeorm-paginate@4.0.4(@nestjs/common@10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1))(typeorm@0.3.10(ioredis@5.3.2)(pg@8.11.2)(redis@3.1.2)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6))): + nestjs-typeorm-paginate@4.0.4(@nestjs/common@10.2.8)(typeorm@0.3.10): dependencies: '@nestjs/common': 10.2.8(class-transformer@0.5.1)(class-validator@0.14.0)(reflect-metadata@0.1.13)(rxjs@7.8.1) - typeorm: 0.3.10(ioredis@5.3.2)(pg@8.11.2)(redis@3.1.2)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)) + typeorm: 0.3.10(pg@8.11.2)(ts-node@10.9.1) netmask@2.0.2: {} + next-line@1.1.0: + optional: true + next-tick@1.1.0: {} nkeys.js@1.0.5: @@ -9277,11 +9988,11 @@ snapshots: node-gyp-build@4.6.0: {} - node-html-to-image@4.0.0(bufferutil@4.0.7)(utf-8-validate@5.0.10): + node-html-to-image@4.0.0: dependencies: handlebars: 4.7.8 - puppeteer: 21.0.1(bufferutil@4.0.7)(utf-8-validate@5.0.10) - puppeteer-cluster: 0.23.0(puppeteer@21.0.1(bufferutil@4.0.7)(utf-8-validate@5.0.10)) + puppeteer: 21.0.1 + puppeteer-cluster: 0.23.0(puppeteer@21.0.1) transitivePeerDependencies: - bufferutil - encoding @@ -9320,8 +10031,16 @@ snapshots: object-assign@4.1.1: {} + object-filter-sequence@1.0.0: + optional: true + object-hash@3.0.0: {} + object-identity-map@1.0.2: + dependencies: + object.entries: 1.1.8 + optional: true + object-inspect@1.12.3: {} object-is@1.1.5: @@ -9338,6 +10057,13 @@ snapshots: has-symbols: 1.0.3 object-keys: 1.1.1 + object.entries@1.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + optional: true + object.fromentries@2.0.6: dependencies: call-bind: 1.0.2 @@ -9357,14 +10083,24 @@ snapshots: define-properties: 1.2.0 es-abstract: 1.22.1 + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + on-finished@2.4.1: dependencies: ee-first: 1.1.1 + on-headers@1.0.2: {} + once@1.4.0: dependencies: wrappy: 1.0.2 + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -9373,6 +10109,9 @@ snapshots: dependencies: mimic-fn: 4.0.0 + optional-js@2.3.0: + optional: true + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 @@ -9394,6 +10133,11 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 + original-url@1.2.3: + dependencies: + forwarded-parse: 2.1.2 + optional: true + os-name@4.0.1: dependencies: macos-release: 2.5.1 @@ -9592,6 +10336,20 @@ snapshots: pinkie@2.0.4: optional: true + pino-std-serializers@3.2.0: + optional: true + + pino@6.14.0: + dependencies: + fast-redact: 3.5.0 + fast-safe-stringify: 2.1.1 + flatstr: 1.0.12 + pino-std-serializers: 3.2.0 + process-warning: 1.0.0 + quick-format-unescaped: 4.0.4 + sonic-boom: 1.4.1 + optional: true + pirates@4.0.6: {} pkg-dir@4.2.0: @@ -9634,6 +10392,9 @@ snapshots: process-nextick-args@2.0.1: {} + process-warning@1.0.0: + optional: true + process@0.11.10: {} progress@1.1.8: @@ -9643,6 +10404,10 @@ snapshots: promise-coalesce@1.1.2: {} + promise@8.3.0: + dependencies: + asap: 2.0.6 + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -9695,57 +10460,57 @@ snapshots: punycode@2.3.0: {} - puppeteer-cluster@0.23.0(puppeteer@21.0.1(bufferutil@4.0.7)(utf-8-validate@5.0.10)): + puppeteer-cluster@0.23.0(puppeteer@21.0.1): dependencies: - debug: 4.3.5 - puppeteer: 21.0.1(bufferutil@4.0.7)(utf-8-validate@5.0.10) + debug: 4.3.4 + puppeteer: 21.0.1 transitivePeerDependencies: - supports-color - puppeteer-core@21.0.1(bufferutil@4.0.7)(utf-8-validate@5.0.10): + puppeteer-core@21.0.1: dependencies: '@puppeteer/browsers': 1.5.0 chromium-bidi: 0.4.20(devtools-protocol@0.0.1147663) cross-fetch: 4.0.0 debug: 4.3.4 devtools-protocol: 0.0.1147663 - ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) + ws: 8.13.0 transitivePeerDependencies: - bufferutil - encoding - supports-color - utf-8-validate - puppeteer-core@21.5.0(bufferutil@4.0.7)(utf-8-validate@5.0.10): + puppeteer-core@21.5.0: dependencies: '@puppeteer/browsers': 1.8.0 chromium-bidi: 0.4.33(devtools-protocol@0.0.1203626) cross-fetch: 4.0.0 debug: 4.3.4 devtools-protocol: 0.0.1203626 - ws: 8.14.2(bufferutil@4.0.7)(utf-8-validate@5.0.10) + ws: 8.14.2 transitivePeerDependencies: - bufferutil - encoding - supports-color - utf-8-validate - puppeteer@21.0.1(bufferutil@4.0.7)(utf-8-validate@5.0.10): + puppeteer@21.0.1: dependencies: '@puppeteer/browsers': 1.5.0 cosmiconfig: 8.2.0 - puppeteer-core: 21.0.1(bufferutil@4.0.7)(utf-8-validate@5.0.10) + puppeteer-core: 21.0.1 transitivePeerDependencies: - bufferutil - encoding - supports-color - utf-8-validate - puppeteer@21.5.0(bufferutil@4.0.7)(typescript@5.1.6)(utf-8-validate@5.0.10): + puppeteer@21.5.0(typescript@5.1.6): dependencies: '@puppeteer/browsers': 1.8.0 cosmiconfig: 8.3.6(typescript@5.1.6) - puppeteer-core: 21.5.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) + puppeteer-core: 21.5.0 transitivePeerDependencies: - bufferutil - encoding @@ -9779,6 +10544,9 @@ snapshots: queue-tick@1.0.1: {} + quick-format-unescaped@4.0.4: + optional: true + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 @@ -9854,6 +10622,9 @@ snapshots: regexpp@3.2.0: {} + relative-microtime@2.0.0: + optional: true + repeat-string@1.6.1: {} request-progress@2.0.1: @@ -9889,6 +10660,15 @@ snapshots: require-from-string@2.0.2: {} + require-in-the-middle@7.3.0: + dependencies: + debug: 4.3.4 + module-details-from-path: 1.0.3 + resolve: 1.22.3 + transitivePeerDependencies: + - supports-color + optional: true + require-main-filename@2.0.0: {} resolve-cwd@3.0.0: @@ -9948,7 +10728,7 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.6.2 + tslib: 2.6.1 safe-array-concat@1.0.0: dependencies: @@ -9967,6 +10747,8 @@ snapshots: get-intrinsic: 1.2.1 is-regex: 1.1.4 + safe-stable-stringify@2.4.3: {} + safer-buffer@2.1.2: {} sax@1.2.1: {} @@ -9979,6 +10761,8 @@ snapshots: ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) + secure-json-parse@2.7.0: {} + semver@6.3.1: {} semver@7.5.4: @@ -10018,6 +10802,16 @@ snapshots: set-blocking@2.0.0: {} + set-function-length@1.2.2: + 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 + optional: true + setimmediate@1.0.5: {} setprototypeof@1.2.0: {} @@ -10027,6 +10821,9 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 + shallow-clone-shim@2.0.0: + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -10047,6 +10844,10 @@ snapshots: signal-exit@3.0.7: {} + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + sisteransi@1.0.5: {} slash@3.0.0: {} @@ -10070,18 +10871,18 @@ snapshots: smart-buffer@4.2.0: {} - socket.io-adapter@2.5.2(bufferutil@4.0.7)(utf-8-validate@5.0.10): + socket.io-adapter@2.5.2: dependencies: - ws: 8.11.0(bufferutil@4.0.7)(utf-8-validate@5.0.10) + ws: 8.11.0 transitivePeerDependencies: - bufferutil - utf-8-validate - socket.io-client@4.7.1(bufferutil@4.0.7)(utf-8-validate@5.0.10): + socket.io-client@4.7.1: dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.5 - engine.io-client: 6.5.2(bufferutil@4.0.7)(utf-8-validate@5.0.10) + debug: 4.3.4 + engine.io-client: 6.5.2 socket.io-parser: 4.2.4 transitivePeerDependencies: - bufferutil @@ -10091,18 +10892,18 @@ snapshots: socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.0 - debug: 4.3.5 + debug: 4.3.4 transitivePeerDependencies: - supports-color - socket.io@4.7.1(bufferutil@4.0.7)(utf-8-validate@5.0.10): + socket.io@4.7.1: dependencies: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 - debug: 4.3.5 - engine.io: 6.5.2(bufferutil@4.0.7)(utf-8-validate@5.0.10) - socket.io-adapter: 2.5.2(bufferutil@4.0.7)(utf-8-validate@5.0.10) + debug: 4.3.4 + engine.io: 6.5.2 + socket.io-adapter: 2.5.2 socket.io-parser: 4.2.4 transitivePeerDependencies: - bufferutil @@ -10122,6 +10923,12 @@ snapshots: ip: 2.0.0 smart-buffer: 4.2.0 + sonic-boom@1.4.1: + dependencies: + atomic-sleep: 1.0.0 + flatstr: 1.0.12 + optional: true + source-map-support@0.5.13: dependencies: buffer-from: 1.1.2 @@ -10136,10 +10943,18 @@ snapshots: source-map@0.7.4: {} + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + optional: true + split2@4.2.0: {} sprintf-js@1.0.3: {} + sql-summary@1.0.1: + optional: true + sshpk@1.17.0: dependencies: asn1: 0.2.6 @@ -10153,10 +10968,15 @@ snapshots: tweetnacl: 0.14.5 optional: true + stack-trace@0.0.10: {} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 + stackframe@1.3.4: + optional: true + standard-as-callback@2.1.0: {} statuses@2.0.1: {} @@ -10165,6 +10985,11 @@ snapshots: dependencies: internal-slot: 1.0.5 + stream-chopper@3.0.1: + dependencies: + readable-stream: 3.6.2 + optional: true + streamsearch@1.1.0: {} streamx@2.15.2: @@ -10239,7 +11064,7 @@ snapshots: dependencies: component-emitter: 1.3.0 cookiejar: 2.1.4 - debug: 4.3.5 + debug: 4.3.4 fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 2.1.2 @@ -10255,7 +11080,7 @@ snapshots: dependencies: component-emitter: 1.3.0 cookiejar: 2.1.4 - debug: 4.3.5 + debug: 4.3.4 fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 2.1.2 @@ -10330,6 +11155,15 @@ snapshots: terser: 5.19.2 webpack: 5.88.1 + terser-webpack-plugin@5.3.9(webpack@5.88.2): + dependencies: + '@jridgewell/trace-mapping': 0.3.18 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.1 + terser: 5.19.2 + webpack: 5.88.2 + terser@5.19.2: dependencies: '@jridgewell/source-map': 0.3.5 @@ -10343,6 +11177,8 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 + text-hex@1.0.0: {} + text-table@0.2.0: {} thenify-all@1.6.0: @@ -10372,6 +11208,11 @@ snapshots: dependencies: is-number: 7.0.0 + to-source-code@1.0.2: + dependencies: + is-nil: 1.0.1 + optional: true + toidentifier@1.0.1: {} tough-cookie@2.5.0: @@ -10382,19 +11223,27 @@ snapshots: tr46@0.0.3: {} + tr46@1.0.1: + dependencies: + punycode: 2.3.0 + optional: true + traverse@0.3.9: {} tree-kill@1.2.2: {} + triple-beam@1.4.1: {} + ts-api-utils@1.0.1(typescript@5.1.6): dependencies: typescript: 5.1.6 - ts-jest@29.1.1(@babel/core@7.22.9)(@jest/types@29.6.1)(babel-jest@29.6.2(@babel/core@7.22.9))(jest@29.6.2(@types/node@20.4.6)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)))(typescript@5.1.6): + ts-jest@29.1.1(@babel/core@7.22.9)(jest@29.6.2)(typescript@5.1.6): dependencies: + '@babel/core': 7.22.9 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.6.2(@types/node@20.4.6)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)) + jest: 29.6.2(@types/node@20.4.6)(ts-node@10.9.1) jest-util: 29.6.2 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -10402,19 +11251,15 @@ snapshots: semver: 7.5.4 typescript: 5.1.6 yargs-parser: 21.1.1 - optionalDependencies: - '@babel/core': 7.22.9 - '@jest/types': 29.6.1 - babel-jest: 29.6.2(@babel/core@7.22.9) - ts-loader@9.4.4(typescript@5.1.6)(webpack@5.88.1): + ts-loader@9.4.4(typescript@5.1.6)(webpack@5.88.2): dependencies: chalk: 4.1.2 enhanced-resolve: 5.15.0 - micromatch: 4.0.7 + micromatch: 4.0.5 semver: 7.5.4 typescript: 5.1.6 - webpack: 5.88.1 + webpack: 5.88.2 ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6): dependencies: @@ -10530,7 +11375,7 @@ snapshots: typedarray@0.0.6: {} - typeorm@0.3.10(ioredis@5.3.2)(pg@8.11.2)(redis@3.1.2)(ts-node@10.9.1(@types/node@20.4.6)(typescript@5.1.6)): + typeorm@0.3.10(pg@8.11.2)(ts-node@10.9.1): dependencies: '@sqltools/formatter': 1.2.5 app-root-path: 3.1.0 @@ -10538,22 +11383,19 @@ snapshots: chalk: 4.1.2 cli-highlight: 2.1.11 date-fns: 2.30.0 - debug: 4.3.5 + debug: 4.3.4 dotenv: 16.0.3 glob: 7.2.3 js-yaml: 4.1.0 mkdirp: 1.0.4 + pg: 8.11.2 reflect-metadata: 0.1.13 sha.js: 2.4.11 + ts-node: 10.9.1(@types/node@20.4.6)(typescript@5.1.6) tslib: 2.6.1 uuid: 8.3.2 xml2js: 0.4.23 yargs: 17.7.2 - optionalDependencies: - ioredis: 5.3.2 - pg: 8.11.2 - redis: 3.1.2 - ts-node: 10.9.1(@types/node@20.4.6)(typescript@5.1.6) transitivePeerDependencies: - supports-color @@ -10580,11 +11422,20 @@ snapshots: unfetch@4.2.0: {} + unicode-byte-truncate@1.0.0: + dependencies: + is-integer: 1.0.7 + unicode-substring: 0.1.0 + optional: true + unicode-properties@1.4.1: dependencies: base64-js: 1.5.1 unicode-trie: 2.0.0 + unicode-substring@0.1.0: + optional: true + unicode-trie@2.0.0: dependencies: pako: 0.2.9 @@ -10695,7 +11546,7 @@ snapshots: dependencies: asn1.js: 5.4.1 http_ece: 1.1.0 - https-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.1 jws: 4.0.0 minimist: 1.2.8 transitivePeerDependencies: @@ -10703,6 +11554,9 @@ snapshots: webidl-conversions@3.0.1: {} + webidl-conversions@4.0.2: + optional: true + webpack-node-externals@3.0.0: {} webpack-sources@3.2.3: {} @@ -10738,6 +11592,37 @@ snapshots: - esbuild - uglify-js + webpack@5.88.2: + dependencies: + '@types/eslint-scope': 3.7.4 + '@types/estree': 1.0.1 + '@webassemblyjs/ast': 1.11.6 + '@webassemblyjs/wasm-edit': 1.11.6 + '@webassemblyjs/wasm-parser': 1.11.6 + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) + browserslist: 4.21.10 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.15.0 + es-module-lexer: 1.3.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.9(webpack@5.88.2) + watchpack: 2.4.0 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + websocket@1.0.34: dependencies: bufferutil: 4.0.7 @@ -10754,6 +11639,13 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + optional: true + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -10798,6 +11690,48 @@ snapshots: dependencies: execa: 4.1.0 + winston-daily-rotate-file@5.0.0(winston@3.4.0): + dependencies: + file-stream-rotator: 0.6.1 + object-hash: 3.0.0 + triple-beam: 1.4.1 + winston: 3.4.0 + winston-transport: 4.7.1 + + winston-elasticsearch@0.16.0: + dependencies: + '@elastic/elasticsearch': 7.17.14 + dayjs: 1.11.12 + debug: 4.3.4 + lodash.defaults: 4.2.0 + lodash.omit: 4.5.0 + promise: 8.3.0 + retry: 0.13.1 + winston: 3.4.0 + winston-transport: 4.7.1 + optionalDependencies: + elastic-apm-node: 3.51.0 + transitivePeerDependencies: + - supports-color + + winston-transport@4.7.1: + dependencies: + logform: 2.6.1 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.4.0: + dependencies: + '@dabh/diagnostics': 2.0.3 + async: 3.2.5 + is-stream: 2.0.1 + logform: 2.6.1 + one-time: 1.0.0 + readable-stream: 3.6.2 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.7.1 + wordwrap@1.0.0: {} wrap-ansi@6.2.0: @@ -10819,20 +11753,11 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - ws@8.11.0(bufferutil@4.0.7)(utf-8-validate@5.0.10): - optionalDependencies: - bufferutil: 4.0.7 - utf-8-validate: 5.0.10 + ws@8.11.0: {} - ws@8.13.0(bufferutil@4.0.7)(utf-8-validate@5.0.10): - optionalDependencies: - bufferutil: 4.0.7 - utf-8-validate: 5.0.10 + ws@8.13.0: {} - ws@8.14.2(bufferutil@4.0.7)(utf-8-validate@5.0.10): - optionalDependencies: - bufferutil: 4.0.7 - utf-8-validate: 5.0.10 + ws@8.14.2: {} xml-js@1.6.11: dependencies: diff --git a/tsconfig.json b/tsconfig.json index be0b099b3..d03a48f36 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,6 +23,18 @@ "@credebl/common/*": [ "libs/common/src/*" ], + "@credebl/context": [ + "libs/context/src" + ], + "@credebl/context/*": [ + "libs/context/src/*" + ], + "@credebl/config": [ + "libs/config/src" + ], + "@credebl/config/*": [ + "libs/config/src/*" + ], "@credebl/push-notifications": [ "libs/push-notifications/src" ],