Skip to content
Snippets Groups Projects
Verified Commit d91aa985 authored by Konstantin Tsabolov's avatar Konstantin Tsabolov
Browse files

chore: add NATS credential support in connection-manager

parent dcf9f109
No related branches found
No related tags found
No related merge requests found
import type { ConfigType } from '@nestjs/config'; import type { ConfigType } from '@nestjs/config';
import type { ClientProvider } from '@nestjs/microservices';
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config'; import { ConfigModule } from '@nestjs/config';
...@@ -34,12 +35,21 @@ import { InvitationsModule } from './invitations/invitations.module.js'; ...@@ -34,12 +35,21 @@ import { InvitationsModule } from './invitations/invitations.module.js';
{ {
name: NATS_CLIENT, name: NATS_CLIENT,
inject: [natsConfig.KEY], inject: [natsConfig.KEY],
useFactory: (config: ConfigType<typeof natsConfig>) => ({ useFactory: (config: ConfigType<typeof natsConfig>) => {
transport: Transport.NATS, const provider: Required<ClientProvider> = {
options: { transport: Transport.NATS,
url: config.url as string, 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;
},
}, },
], ],
}), }),
......
import { registerAs } from '@nestjs/config'; import { registerAs } from '@nestjs/config';
export const httpConfig = registerAs('http', () => ({ export const httpConfig = registerAs('http', () => ({
host: process.env.HTTP_HOST, host: process.env.HOST || '0.0.0.0',
port: Number(process.env.HTTP_PORT), port: Number(process.env.PORT) || 3000,
})); }));
import { registerAs } from '@nestjs/config'; import { registerAs } from '@nestjs/config';
export const natsConfig = registerAs('nats', () => ({ export const natsConfig = registerAs('nats', () => ({
url: process.env.NATS_URL, url: process.env.NATS_URL || 'nats://localhost:4222',
monitoringUrl: process.env.NATS_MONITORING_URL, user: process.env.NATS_USER,
password: process.env.NATS_PASSWORD,
monitoringUrl: process.env.NATS_MONITORING_URL || 'http://localhost:8222',
})); }));
import { registerAs } from '@nestjs/config'; import { registerAs } from '@nestjs/config';
export const ssiConfig = registerAs('ssi', () => ({ export const ssiConfig = registerAs('ssi', () => ({
agentUrl: process.env.SSI_AGENT_URL, agentUrl: process.env.SSI_AGENT_URL || 'http://localhost:3010',
})); }));
import Joi from 'joi'; import Joi from 'joi';
export const validationSchema = Joi.object({ export const validationSchema = Joi.object({
HTTP_HOST: Joi.string().default('0.0.0.0'), HTTP_HOST: Joi.string(),
HTTP_PORT: Joi.number().default(3000), HTTP_PORT: Joi.number(),
NATS_URL: Joi.string().uri().default('nats://localhost:4222'), NATS_URL: Joi.string().uri(),
NATS_MONITORING_URL: Joi.string().uri().default('http://localhost:8222'), 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(),
}); });
/* c8 ignore start */ /* 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 { VersioningType } from '@nestjs/common';
import { ConfigService } from '@nestjs/config'; import { ConfigService } from '@nestjs/config';
...@@ -8,17 +9,29 @@ import { Transport } from '@nestjs/microservices'; ...@@ -8,17 +9,29 @@ import { Transport } from '@nestjs/microservices';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { Application } from './application.js'; import { Application } from './application.js';
import { natsConfig } from './config/nats.config.js';
const app = await NestFactory.create(Application); const app = await NestFactory.create(Application);
const configService = app.get(ConfigService); const configService = app.get(ConfigService);
app.enableCors(); app.enableCors();
app.connectMicroservice<MicroserviceOptions>({ const { url, user, password } = app.get(natsConfig.KEY) as ConfigType<
typeof natsConfig
>;
const microserviceOptions: Required<NatsOptions> = {
transport: Transport.NATS, transport: Transport.NATS,
options: { 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({ app.enableVersioning({
defaultVersion: ['1'], defaultVersion: ['1'],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment