From d72501ad77d21008252837cac79816cc21345e43 Mon Sep 17 00:00:00 2001 From: Konstantin Tsabolov <konstantin.tsabolov@spherity.com> Date: Mon, 22 Jan 2024 13:22:04 +0100 Subject: [PATCH] chore: add support for nats auth, fix config --- apps/credential-manager/src/application.ts | 22 +++++++++---- .../src/config/http.config.ts | 4 +-- .../src/config/nats.config.ts | 6 ++-- .../src/config/ssi.config.ts | 2 +- .../src/config/validation.ts | 12 ++++--- apps/credential-manager/src/main.ts | 33 ++++++++++++++----- 6 files changed, 55 insertions(+), 24 deletions(-) diff --git a/apps/credential-manager/src/application.ts b/apps/credential-manager/src/application.ts index f60686b..982d2a6 100644 --- a/apps/credential-manager/src/application.ts +++ b/apps/credential-manager/src/application.ts @@ -1,4 +1,5 @@ import type { ConfigType } from '@nestjs/config'; +import type { ClientProvider } from '@nestjs/microservices'; import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; @@ -34,12 +35,21 @@ import { CredentialRequestsModule } from './credential-requests/credential-reque { name: NATS_CLIENT, inject: [natsConfig.KEY], - useFactory: (config: ConfigType<typeof natsConfig>) => ({ - transport: Transport.NATS, - options: { - url: config.url as string, - }, - }), + useFactory: (config: ConfigType<typeof natsConfig>) => { + const provider: Required<ClientProvider> = { + transport: Transport.NATS, + options: { + servers: config.url as string, + }, + }; + + if ('user' in config && 'password' in config) { + provider.options.user = config.user as string; + provider.options.pass = config.password as string; + } + + return provider; + }, }, ], }), diff --git a/apps/credential-manager/src/config/http.config.ts b/apps/credential-manager/src/config/http.config.ts index 0bb4d4c..fc63fd9 100644 --- a/apps/credential-manager/src/config/http.config.ts +++ b/apps/credential-manager/src/config/http.config.ts @@ -1,6 +1,6 @@ import { registerAs } from '@nestjs/config'; export const httpConfig = registerAs('http', () => ({ - host: process.env.HOST, - port: Number(process.env.PORT), + host: process.env.HOST || '0.0.0.0', + port: Number(process.env.PORT) || 3000, })); diff --git a/apps/credential-manager/src/config/nats.config.ts b/apps/credential-manager/src/config/nats.config.ts index 023e923..194053c 100644 --- a/apps/credential-manager/src/config/nats.config.ts +++ b/apps/credential-manager/src/config/nats.config.ts @@ -1,6 +1,8 @@ import { registerAs } from '@nestjs/config'; export const natsConfig = registerAs('nats', () => ({ - url: process.env.NATS_URL, - monitoringUrl: process.env.NATS_MONITORING_URL, + url: process.env.NATS_URL || 'nats://localhost:4222', + user: process.env.NATS_USER, + password: process.env.NATS_PASSWORD, + monitoringUrl: process.env.NATS_MONITORING_URL || 'http://localhost:8222', })); diff --git a/apps/credential-manager/src/config/ssi.config.ts b/apps/credential-manager/src/config/ssi.config.ts index 1779919..408bf27 100644 --- a/apps/credential-manager/src/config/ssi.config.ts +++ b/apps/credential-manager/src/config/ssi.config.ts @@ -1,5 +1,5 @@ import { registerAs } from '@nestjs/config'; export const ssiConfig = registerAs('ssi', () => ({ - agentUrl: process.env.SSI_AGENT_URL, + agentUrl: process.env.SSI_AGENT_URL || 'http://localhost:3010', })); diff --git a/apps/credential-manager/src/config/validation.ts b/apps/credential-manager/src/config/validation.ts index a7fe2f8..8431e10 100644 --- a/apps/credential-manager/src/config/validation.ts +++ b/apps/credential-manager/src/config/validation.ts @@ -1,11 +1,13 @@ import Joi from 'joi'; export const validationSchema = Joi.object({ - HTTP_HOST: Joi.string().default('0.0.0.0'), - HTTP_PORT: Joi.number().default(3000), + HTTP_HOST: Joi.string(), + HTTP_PORT: Joi.number(), - NATS_URL: Joi.string().uri().default('nats://localhost:4222'), - NATS_MONITORING_URL: Joi.string().uri().default('http://localhost:8222'), + NATS_URL: Joi.string().uri(), + NATS_USER: Joi.string().optional(), + NATS_PASSWORD: Joi.string().optional(), + NATS_MONITORING_URL: Joi.string().uri(), - SSI_AGENT_URL: Joi.string().default('http://localhost:3010'), + SSI_AGENT_URL: Joi.string(), }); diff --git a/apps/credential-manager/src/main.ts b/apps/credential-manager/src/main.ts index 2b5dccd..f2780c9 100644 --- a/apps/credential-manager/src/main.ts +++ b/apps/credential-manager/src/main.ts @@ -1,23 +1,36 @@ -import type { MicroserviceOptions } from '@nestjs/microservices'; +/* c8 ignore start */ +import type { ConfigType } from '@nestjs/config'; +import type { MicroserviceOptions, NatsOptions } from '@nestjs/microservices'; -import { VersioningType } from '@nestjs/common'; -import { ConfigService } from '@nestjs/config'; +import { Logger, VersioningType } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { Transport } from '@nestjs/microservices'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { Application } from './application.js'; +import { httpConfig } from './config/http.config.js'; +import { natsConfig } from './config/nats.config.js'; const app = await NestFactory.create(Application); -const configService = app.get(ConfigService); app.enableCors(); -app.connectMicroservice<MicroserviceOptions>({ +const { url, user, password } = app.get(natsConfig.KEY) as ConfigType< + typeof natsConfig +>; + +const microserviceOptions: Required<NatsOptions> = { transport: Transport.NATS, options: { - servers: [configService.get('nats').url], + servers: [url], }, -}); +}; + +if (user && password) { + microserviceOptions.options.user = user; + microserviceOptions.options.pass = password; +} + +app.connectMicroservice<MicroserviceOptions>(microserviceOptions); app.enableVersioning({ defaultVersion: ['1'], @@ -35,4 +48,8 @@ const document = SwaggerModule.createDocument(app, swaggerConfig); SwaggerModule.setup('/swagger', app, document); await app.startAllMicroservices(); -await app.listen(configService.get('PORT') || 3000); +const { host, port } = app.get(httpConfig.KEY) as ConfigType<typeof httpConfig>; +await app.listen(port as number, host as string); + +Logger.log(`Application is running on: ${await app.getUrl()}`); +/* c8 ignore stop */ -- GitLab