From d91aa9855ab4eb2620a868d156c3b41b9aec187d Mon Sep 17 00:00:00 2001 From: Konstantin Tsabolov <konstantin.tsabolov@spherity.com> Date: Wed, 24 Jan 2024 21:06:10 +0100 Subject: [PATCH] chore: add NATS credential support in connection-manager --- apps/connection-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/connection-manager/src/main.ts | 21 ++++++++++++++---- 6 files changed, 47 insertions(+), 20 deletions(-) diff --git a/apps/connection-manager/src/application.ts b/apps/connection-manager/src/application.ts index 575ee56..4faf826 100644 --- a/apps/connection-manager/src/application.ts +++ b/apps/connection-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 { InvitationsModule } from './invitations/invitations.module.js'; { 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/connection-manager/src/config/http.config.ts b/apps/connection-manager/src/config/http.config.ts index 906f6c8..fc63fd9 100644 --- a/apps/connection-manager/src/config/http.config.ts +++ b/apps/connection-manager/src/config/http.config.ts @@ -1,6 +1,6 @@ import { registerAs } from '@nestjs/config'; export const httpConfig = registerAs('http', () => ({ - host: process.env.HTTP_HOST, - port: Number(process.env.HTTP_PORT), + host: process.env.HOST || '0.0.0.0', + port: Number(process.env.PORT) || 3000, })); diff --git a/apps/connection-manager/src/config/nats.config.ts b/apps/connection-manager/src/config/nats.config.ts index 023e923..194053c 100644 --- a/apps/connection-manager/src/config/nats.config.ts +++ b/apps/connection-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/connection-manager/src/config/ssi.config.ts b/apps/connection-manager/src/config/ssi.config.ts index 1779919..408bf27 100644 --- a/apps/connection-manager/src/config/ssi.config.ts +++ b/apps/connection-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/connection-manager/src/config/validation.ts b/apps/connection-manager/src/config/validation.ts index a7fe2f8..8431e10 100644 --- a/apps/connection-manager/src/config/validation.ts +++ b/apps/connection-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/connection-manager/src/main.ts b/apps/connection-manager/src/main.ts index 0490cd5..24529e4 100644 --- a/apps/connection-manager/src/main.ts +++ b/apps/connection-manager/src/main.ts @@ -1,5 +1,6 @@ /* c8 ignore start */ -import type { MicroserviceOptions } from '@nestjs/microservices'; +import type { ConfigType } from '@nestjs/config'; +import type { MicroserviceOptions, NatsOptions } from '@nestjs/microservices'; import { VersioningType } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; @@ -8,17 +9,29 @@ import { Transport } from '@nestjs/microservices'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { Application } from './application.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'], -- GitLab