diff --git a/apps/connection-manager/src/application.ts b/apps/connection-manager/src/application.ts index 3ea98e396c90242b557c98e1aacb1580503fe519..e8cc292c369fe1aeb75cba0b5194eee1e10282b8 100644 --- a/apps/connection-manager/src/application.ts +++ b/apps/connection-manager/src/application.ts @@ -1,10 +1,10 @@ +import type { OnApplicationBootstrap } from '@nestjs/common'; import type { ConfigType } from '@nestjs/config'; -import type { ClientProvider } from '@nestjs/microservices'; -import { Module } from '@nestjs/common'; +import { Inject, Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { RouterModule } from '@nestjs/core'; -import { ClientsModule, Transport } from '@nestjs/microservices'; +import { ClientProxy, ClientsModule, Transport } from '@nestjs/microservices'; import { HealthModule } from '@ocm/shared'; import { NATS_CLIENT } from './common/constants.js'; @@ -34,21 +34,14 @@ import { InvitationsModule } from './invitations/invitations.module.js'; { name: NATS_CLIENT, inject: [natsConfig.KEY], - 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; - }, + useFactory: (config: ConfigType<typeof natsConfig>) => ({ + transport: Transport.NATS, + options: { + servers: [config.url], + user: config.user, + pass: config.password, + }, + }), }, ], }), @@ -78,4 +71,12 @@ import { InvitationsModule } from './invitations/invitations.module.js'; ]), ], }) -export class Application {} +export class Application implements OnApplicationBootstrap { + public constructor( + @Inject(NATS_CLIENT) private readonly client: ClientProxy, + ) {} + + public async onApplicationBootstrap(): Promise<void> { + await this.client.connect(); + } +} diff --git a/apps/connection-manager/src/main.ts b/apps/connection-manager/src/main.ts index 24529e4abd0e91dc32fac0f80836a4d3d98834a9..a09508e0ff966a90dec1c104201b5cac6aefa470 100644 --- a/apps/connection-manager/src/main.ts +++ b/apps/connection-manager/src/main.ts @@ -1,37 +1,22 @@ /* 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 helmet from 'helmet'; +import { createRequire } from 'module'; +import { resolve } from 'node:path'; import { Application } from './application.js'; -import { natsConfig } from './config/nats.config.js'; +import { httpConfig } from './config/http.config.js'; -const app = await NestFactory.create(Application); -const configService = app.get(ConfigService); -app.enableCors(); - -const { url, user, password } = app.get(natsConfig.KEY) as ConfigType< - typeof natsConfig ->; +const pkgPath = resolve('package.json'); +const pkg = createRequire(import.meta.url)(pkgPath); -const microserviceOptions: Required<NatsOptions> = { - transport: Transport.NATS, - options: { - servers: [url], - }, -}; - -if (user && password) { - microserviceOptions.options.user = user; - microserviceOptions.options.pass = password; -} +const app = await NestFactory.create(Application); -app.connectMicroservice<MicroserviceOptions>(microserviceOptions); +app.use(helmet()); app.enableVersioning({ defaultVersion: ['1'], @@ -39,15 +24,24 @@ app.enableVersioning({ }); const swaggerConfig = new DocumentBuilder() - .setTitle('Gaia-X Connection Manager API') - .setDescription('API documentation for GAIA-X Connection Manager') - .setVersion('1.0') + .setTitle(pkg.description) + .setVersion(pkg.version) .build(); const document = SwaggerModule.createDocument(app, swaggerConfig); -SwaggerModule.setup('/swagger', app, document); -await app.startAllMicroservices(); +SwaggerModule.setup('/', app, document, { + swaggerOptions: { + docExpansion: 'none', + tryItOutEnabled: true, + }, +}); + +const { hostname, port } = app.get(httpConfig.KEY) as ConfigType< + typeof httpConfig +>; +await app.listen(port, hostname); + +Logger.log(`Application is running on: ${await app.getUrl()}`); -await app.listen(configService.get('http.port') as number); /* c8 ignore stop */ diff --git a/apps/credential-manager/.env.example b/apps/credential-manager/.env.example index 81e338c600aff9acfc4c2bd25d9bf1fd6175ac59..46fb0f12c103b103384fc98ba4fe8074572450c0 100644 --- a/apps/credential-manager/.env.example +++ b/apps/credential-manager/.env.example @@ -1,6 +1,6 @@ -HTTP_HOST=0.0.0.0 -HTTP_PORT=3003 +HTTP_HOSTNAME=0.0.0.0 +HTTP_PORT=4003 NATS_URL=nats://localhost:4222 NATS_USER=nats_user -NATS_PASSWORD= +NATS_PASSWORD=nats_password NATS_MONITORING_URL=http://localhost:8222 diff --git a/apps/credential-manager/package.json b/apps/credential-manager/package.json index f245d888226d923ef8d7884aaa37dd6ec0410f71..7dfea6dda5e06b3ca975f9a77e0bebd35b088eb2 100644 --- a/apps/credential-manager/package.json +++ b/apps/credential-manager/package.json @@ -1,7 +1,7 @@ { "name": "@ocm/credential-manager", "version": "1.0.0", - "description": "", + "description": "Gaia-X OCM Credential Manager", "author": "Konstantin Tsabolov <konstantin.tsabolov@spherity.com>", "contributors": [ "Konstantin Tsabolov <konstantin.tsabolov@spherity.com>" @@ -27,6 +27,7 @@ "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "express": "^4.17.3", + "helmet": "^7.1.0", "joi": "^17.11.0", "nats": "^2.18.0", "reflect-metadata": "^0.1.13", diff --git a/apps/credential-manager/src/application.ts b/apps/credential-manager/src/application.ts index 63c7fd403029aad3d75db865983e76124b24169d..e32627c25910999219ed230ef5e2c0c51ed845d7 100644 --- a/apps/credential-manager/src/application.ts +++ b/apps/credential-manager/src/application.ts @@ -1,10 +1,10 @@ +import type { OnApplicationBootstrap } from '@nestjs/common'; import type { ConfigType } from '@nestjs/config'; -import type { ClientProvider } from '@nestjs/microservices'; -import { Module } from '@nestjs/common'; +import { Inject, Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { RouterModule } from '@nestjs/core'; -import { ClientsModule, Transport } from '@nestjs/microservices'; +import { ClientProxy, ClientsModule, Transport } from '@nestjs/microservices'; import { HealthModule } from '@ocm/shared'; import { NATS_CLIENT } from './common/constants.js'; @@ -35,18 +35,14 @@ import { CredentialsModule } from './credentials/credentials.module.js'; { name: NATS_CLIENT, inject: [natsConfig.KEY], - useFactory: (config: ConfigType<typeof natsConfig>) => { - const provider: Required<ClientProvider> = { - transport: Transport.NATS, - options: { - servers: [config.url], - user: config.user as string, - pass: config.password as string, - }, - }; - - return provider; - }, + useFactory: (config: ConfigType<typeof natsConfig>) => ({ + transport: Transport.NATS, + options: { + servers: [config.url], + user: config.user as string, + pass: config.password as string, + }, + }), }, ], }), @@ -78,4 +74,12 @@ import { CredentialsModule } from './credentials/credentials.module.js'; ]), ], }) -export class Application {} +export class Application implements OnApplicationBootstrap { + public constructor( + @Inject(NATS_CLIENT) private readonly client: ClientProxy, + ) {} + + public async onApplicationBootstrap(): Promise<void> { + await this.client.connect(); + } +} diff --git a/apps/credential-manager/src/main.ts b/apps/credential-manager/src/main.ts index f2780c9feed00fd4c0b976d5d7dcd21e5f3acbd4..e926eb71b8974e653e16cfc7f2f68901303e2825 100644 --- a/apps/credential-manager/src/main.ts +++ b/apps/credential-manager/src/main.ts @@ -1,36 +1,22 @@ /* c8 ignore start */ import type { ConfigType } from '@nestjs/config'; -import type { MicroserviceOptions, NatsOptions } from '@nestjs/microservices'; import { Logger, VersioningType } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; -import { Transport } from '@nestjs/microservices'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; +import helmet from 'helmet'; +import { createRequire } from 'module'; +import { resolve } from 'node:path'; 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); -app.enableCors(); - -const { url, user, password } = app.get(natsConfig.KEY) as ConfigType< - typeof natsConfig ->; - -const microserviceOptions: Required<NatsOptions> = { - transport: Transport.NATS, - options: { - servers: [url], - }, -}; +const pkgPath = resolve('package.json'); +const pkg = createRequire(import.meta.url)(pkgPath); -if (user && password) { - microserviceOptions.options.user = user; - microserviceOptions.options.pass = password; -} +const app = await NestFactory.create(Application); -app.connectMicroservice<MicroserviceOptions>(microserviceOptions); +app.use(helmet()); app.enableVersioning({ defaultVersion: ['1'], @@ -38,18 +24,23 @@ app.enableVersioning({ }); const swaggerConfig = new DocumentBuilder() - .setTitle('Gaia-X OCM Credential Manager API') - .setDescription('API documentation for Gaia-X OCM Credential Manager') - .setVersion('1.0') + .setTitle(pkg.description) + .setVersion(pkg.version) .build(); const document = SwaggerModule.createDocument(app, swaggerConfig); -SwaggerModule.setup('/swagger', app, document); -await app.startAllMicroservices(); +SwaggerModule.setup('/', app, document, { + swaggerOptions: { + docExpansion: 'none', + tryItOutEnabled: true, + }, +}); -const { host, port } = app.get(httpConfig.KEY) as ConfigType<typeof httpConfig>; -await app.listen(port as number, host as string); +const { hostname, port } = app.get(httpConfig.KEY) as ConfigType< + typeof httpConfig +>; +await app.listen(port, hostname); Logger.log(`Application is running on: ${await app.getUrl()}`); /* c8 ignore stop */ diff --git a/apps/did-manager/.env.example b/apps/did-manager/.env.example new file mode 100644 index 0000000000000000000000000000000000000000..dfef64c27b6f38797f02d77f266bb6c44de4ff5f --- /dev/null +++ b/apps/did-manager/.env.example @@ -0,0 +1,6 @@ +HTTP_HOSTNAME=0.0.0.0 +HTTP_PORT=4006 +NATS_URL=nats://localhost:4222 +NATS_USER=nats_user +NATS_PASSWORD=nats_password +NATS_MONITORING_URL=http://localhost:8222 diff --git a/apps/did-manager/package.json b/apps/did-manager/package.json index 669db0a31c33af6771afadff248bd04fc512c268..c20134a2b22ea593088709062417c57f9826f5a3 100644 --- a/apps/did-manager/package.json +++ b/apps/did-manager/package.json @@ -27,6 +27,7 @@ "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "express": "^4.17.3", + "helmet": "^7.1.0", "joi": "^17.11.0", "nats": "^2.18.0", "reflect-metadata": "^0.1.13", diff --git a/apps/did-manager/src/application.ts b/apps/did-manager/src/application.ts index 8e4cea804ed728210217f9abc5f24645c6de7d23..81185d0e1262e5211a18e3884e059b4d66fefd6c 100644 --- a/apps/did-manager/src/application.ts +++ b/apps/did-manager/src/application.ts @@ -1,10 +1,10 @@ +import type { OnApplicationBootstrap } from '@nestjs/common'; import type { ConfigType } from '@nestjs/config'; -import type { ClientProvider } from '@nestjs/microservices'; -import { Module } from '@nestjs/common'; +import { Inject, Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { RouterModule } from '@nestjs/core'; -import { ClientsModule, Transport } from '@nestjs/microservices'; +import { ClientProxy, ClientsModule, Transport } from '@nestjs/microservices'; import { HealthModule } from '@ocm/shared'; import { NATS_CLIENT } from './common/constants.js'; @@ -33,21 +33,14 @@ import { DIDsModule } from './dids/dids.module.js'; { name: NATS_CLIENT, inject: [natsConfig.KEY], - 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; - }, + useFactory: (config: ConfigType<typeof natsConfig>) => ({ + transport: Transport.NATS, + options: { + servers: [config.url], + user: config.user as string, + pass: config.password as string, + }, + }), }, ], }), @@ -75,4 +68,12 @@ import { DIDsModule } from './dids/dids.module.js'; ]), ], }) -export class Application {} +export class Application implements OnApplicationBootstrap { + public constructor( + @Inject(NATS_CLIENT) private readonly client: ClientProxy, + ) {} + + public async onApplicationBootstrap(): Promise<void> { + await this.client.connect(); + } +} diff --git a/apps/did-manager/src/main.ts b/apps/did-manager/src/main.ts index fa521d4f2bbaf856fcbbf34f8db9558e730fa760..e926eb71b8974e653e16cfc7f2f68901303e2825 100644 --- a/apps/did-manager/src/main.ts +++ b/apps/did-manager/src/main.ts @@ -1,36 +1,22 @@ /* c8 ignore start */ import type { ConfigType } from '@nestjs/config'; -import type { MicroserviceOptions, NatsOptions } from '@nestjs/microservices'; import { Logger, VersioningType } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; -import { Transport } from '@nestjs/microservices'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; +import helmet from 'helmet'; +import { createRequire } from 'module'; +import { resolve } from 'node:path'; 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); -app.enableCors(); - -const { url, user, password } = app.get(natsConfig.KEY) as ConfigType< - typeof natsConfig ->; - -const microserviceOptions: Required<NatsOptions> = { - transport: Transport.NATS, - options: { - servers: [url], - }, -}; +const pkgPath = resolve('package.json'); +const pkg = createRequire(import.meta.url)(pkgPath); -if (user && password) { - microserviceOptions.options.user = user; - microserviceOptions.options.pass = password; -} +const app = await NestFactory.create(Application); -app.connectMicroservice<MicroserviceOptions>(microserviceOptions); +app.use(helmet()); app.enableVersioning({ defaultVersion: ['1'], @@ -38,18 +24,23 @@ app.enableVersioning({ }); const swaggerConfig = new DocumentBuilder() - .setTitle('Gaia-X OCM DID Manager API') - .setDescription('API documentation for Gaia-X OCM DID Manager') - .setVersion('1.0') + .setTitle(pkg.description) + .setVersion(pkg.version) .build(); const document = SwaggerModule.createDocument(app, swaggerConfig); -SwaggerModule.setup('/', app, document); -await app.startAllMicroservices(); +SwaggerModule.setup('/', app, document, { + swaggerOptions: { + docExpansion: 'none', + tryItOutEnabled: true, + }, +}); -const { host, port } = app.get(httpConfig.KEY) as ConfigType<typeof httpConfig>; -await app.listen(port as number, host as string); +const { hostname, port } = app.get(httpConfig.KEY) as ConfigType< + typeof httpConfig +>; +await app.listen(port, hostname); Logger.log(`Application is running on: ${await app.getUrl()}`); /* c8 ignore stop */ diff --git a/apps/proof-manager/.env.example b/apps/proof-manager/.env.example index f56f87942e14ee6bda9ba33660519876302c0bae..0bdd0d9dcb57e89982350e75a8f6afb0e19fcf8f 100644 --- a/apps/proof-manager/.env.example +++ b/apps/proof-manager/.env.example @@ -1,6 +1,6 @@ -HTTP_HOST=0.0.0.0 -HTTP_PORT=3004 +HTTP_HOSTNAME=0.0.0.0 +HTTP_PORT=4004 NATS_URL=nats://localhost:4222 NATS_USER=nats_user -NATS_PASSWORD= +NATS_PASSWORD=nats_password NATS_MONITORING_URL=http://localhost:8222 diff --git a/apps/proof-manager/package.json b/apps/proof-manager/package.json index 931642ddd3b2fadaaf9de7f37c3571d1283b0faf..1026009cfca0fed13b122d149b22ced3cdd6ff01 100644 --- a/apps/proof-manager/package.json +++ b/apps/proof-manager/package.json @@ -1,7 +1,7 @@ { "name": "@ocm/proof-manager", - "version": "0.0.1", - "description": "The Proof Manager provides an endpoint to request a presentation over an existing connection", + "version": "1.0.0", + "description": "Gaia-X OCM Proof Manager", "author": "Sagar", "private": true, "license": "Apache-2.0", @@ -22,9 +22,10 @@ "@nestjs/platform-express": "^10.3.0", "@nestjs/swagger": "^7.1.16", "@ocm/shared": "workspace:*", - "class-validator": "^0.14.0", "class-transformer": "^0.5.1", + "class-validator": "^0.14.0", "express": "^4.17.3", + "helmet": "^7.1.0", "joi": "^17.11.0", "nats": "^2.18.0", "reflect-metadata": "^0.1.13", diff --git a/apps/proof-manager/src/application.ts b/apps/proof-manager/src/application.ts index 19c04cbeff2a12c83f65e00bb7afb213a452fa8e..ffc45aa9309264c3f410d6388e5b28435904a22e 100644 --- a/apps/proof-manager/src/application.ts +++ b/apps/proof-manager/src/application.ts @@ -1,10 +1,10 @@ +import type { OnApplicationBootstrap } from '@nestjs/common'; import type { ConfigType } from '@nestjs/config'; -import type { ClientProvider } from '@nestjs/microservices'; -import { Module } from '@nestjs/common'; +import { Inject, Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { RouterModule } from '@nestjs/core'; -import { ClientsModule, Transport } from '@nestjs/microservices'; +import { ClientProxy, ClientsModule, Transport } from '@nestjs/microservices'; import { HealthModule } from '@ocm/shared'; import { NATS_CLIENT } from './common/constants.js'; @@ -33,21 +33,14 @@ import { ProofsModule } from './proofs/proofs.module.js'; { name: NATS_CLIENT, inject: [natsConfig.KEY], - 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; - }, + useFactory: (config: ConfigType<typeof natsConfig>) => ({ + transport: Transport.NATS, + options: { + servers: [config.url], + user: config.user as string, + pass: config.password as string, + }, + }), }, ], }), @@ -75,4 +68,12 @@ import { ProofsModule } from './proofs/proofs.module.js'; ]), ], }) -export class Application {} +export class Application implements OnApplicationBootstrap { + public constructor( + @Inject(NATS_CLIENT) private readonly client: ClientProxy, + ) {} + + public async onApplicationBootstrap(): Promise<void> { + await this.client.connect(); + } +} diff --git a/apps/proof-manager/src/main.ts b/apps/proof-manager/src/main.ts index fe4aad77a459145c7ef815eca71bfe48154f47c7..e926eb71b8974e653e16cfc7f2f68901303e2825 100644 --- a/apps/proof-manager/src/main.ts +++ b/apps/proof-manager/src/main.ts @@ -1,36 +1,22 @@ /* c8 ignore start */ import type { ConfigType } from '@nestjs/config'; -import type { MicroserviceOptions, NatsOptions } from '@nestjs/microservices'; import { Logger, VersioningType } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; -import { Transport } from '@nestjs/microservices'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; +import helmet from 'helmet'; +import { createRequire } from 'module'; +import { resolve } from 'node:path'; 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); -app.enableCors(); - -const { url, user, password } = app.get(natsConfig.KEY) as ConfigType< - typeof natsConfig ->; - -const microserviceOptions: Required<NatsOptions> = { - transport: Transport.NATS, - options: { - servers: [url], - }, -}; +const pkgPath = resolve('package.json'); +const pkg = createRequire(import.meta.url)(pkgPath); -if (user && password) { - microserviceOptions.options.user = user; - microserviceOptions.options.pass = password; -} +const app = await NestFactory.create(Application); -app.connectMicroservice<MicroserviceOptions>(microserviceOptions); +app.use(helmet()); app.enableVersioning({ defaultVersion: ['1'], @@ -38,18 +24,23 @@ app.enableVersioning({ }); const swaggerConfig = new DocumentBuilder() - .setTitle('Gaia-X OCM Proof Manager API') - .setDescription('API documentation for Gaia-X OCM Proof Manager') - .setVersion('1.0') + .setTitle(pkg.description) + .setVersion(pkg.version) .build(); const document = SwaggerModule.createDocument(app, swaggerConfig); -SwaggerModule.setup('/swagger', app, document); -await app.startAllMicroservices(); +SwaggerModule.setup('/', app, document, { + swaggerOptions: { + docExpansion: 'none', + tryItOutEnabled: true, + }, +}); -const { host, port } = app.get(httpConfig.KEY) as ConfigType<typeof httpConfig>; -await app.listen(port as number, host as string); +const { hostname, port } = app.get(httpConfig.KEY) as ConfigType< + typeof httpConfig +>; +await app.listen(port, hostname); Logger.log(`Application is running on: ${await app.getUrl()}`); /* c8 ignore stop */ diff --git a/apps/schema-manager/.env.example b/apps/schema-manager/.env.example index 55e246f00ca84b18a51876fef8c6a8f4d51f7977..e6e793587ef607b5eefd3ffec3d77ed4365df661 100644 --- a/apps/schema-manager/.env.example +++ b/apps/schema-manager/.env.example @@ -1,6 +1,6 @@ -HTTP_HOST=0.0.0.0 -HTTP_PORT=3001 +HTTP_HOSTNAME=0.0.0.0 +HTTP_PORT=4001 NATS_URL=nats://localhost:4222 NATS_USER=nats_user -NATS_PASSWORD= +NATS_PASSWORD=nats_password NATS_MONITORING_URL=http://localhost:8222 diff --git a/apps/schema-manager/package.json b/apps/schema-manager/package.json index 4e08b78610ae1df67995e488efa8e2d5cab925c0..748940be499c878a8265ac9691d0342616b8c1cf 100644 --- a/apps/schema-manager/package.json +++ b/apps/schema-manager/package.json @@ -1,7 +1,7 @@ { "name": "@ocm/schema-manager", "version": "1.0.0", - "description": "", + "description": "Gaia-X OCM Schema Manager", "author": "Konstantin Tsabolov <konstantin.tsabolov@spherity.com>", "contributors": [ "Konstantin Tsabolov <konstantin.tsabolov@spherity.com>" @@ -27,6 +27,7 @@ "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "express": "^4.17.3", + "helmet": "^7.1.0", "joi": "^17.11.0", "nats": "^2.18.0", "reflect-metadata": "^0.1.13", diff --git a/apps/schema-manager/src/application.ts b/apps/schema-manager/src/application.ts index 649befb0bbd02c54270efac362ca21e4fe136dfc..b67928ff8f26c65974a096e729142130d881ccb3 100644 --- a/apps/schema-manager/src/application.ts +++ b/apps/schema-manager/src/application.ts @@ -1,10 +1,10 @@ +import type { OnApplicationBootstrap } from '@nestjs/common'; import type { ConfigType } from '@nestjs/config'; -import type { ClientProvider } from '@nestjs/microservices'; -import { Module } from '@nestjs/common'; +import { Inject, Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { RouterModule } from '@nestjs/core'; -import { ClientsModule, Transport } from '@nestjs/microservices'; +import { ClientProxy, ClientsModule, Transport } from '@nestjs/microservices'; import { HealthModule } from '@ocm/shared'; import { NATS_CLIENT } from './common/constants.js'; @@ -34,21 +34,14 @@ import { SchemasModule } from './schemas/schemas.module.js'; { name: NATS_CLIENT, inject: [natsConfig.KEY], - 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; - }, + useFactory: (config: ConfigType<typeof natsConfig>) => ({ + transport: Transport.NATS, + options: { + servers: [config.url], + user: config.user as string, + pass: config.password as string, + }, + }), }, ], }), @@ -78,4 +71,12 @@ import { SchemasModule } from './schemas/schemas.module.js'; ]), ], }) -export class Application {} +export class Application implements OnApplicationBootstrap { + public constructor( + @Inject(NATS_CLIENT) private readonly client: ClientProxy, + ) {} + + public async onApplicationBootstrap(): Promise<void> { + await this.client.connect(); + } +} diff --git a/apps/schema-manager/src/main.ts b/apps/schema-manager/src/main.ts index 1472b8cdfd8627cd9ff0aab52e2dc625bb10022e..e926eb71b8974e653e16cfc7f2f68901303e2825 100644 --- a/apps/schema-manager/src/main.ts +++ b/apps/schema-manager/src/main.ts @@ -1,36 +1,22 @@ /* c8 ignore start */ import type { ConfigType } from '@nestjs/config'; -import type { MicroserviceOptions, NatsOptions } from '@nestjs/microservices'; import { Logger, VersioningType } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; -import { Transport } from '@nestjs/microservices'; import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; +import helmet from 'helmet'; +import { createRequire } from 'module'; +import { resolve } from 'node:path'; 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); -app.enableCors(); - -const { url, user, password } = app.get(natsConfig.KEY) as ConfigType< - typeof natsConfig ->; - -const microserviceOptions: Required<NatsOptions> = { - transport: Transport.NATS, - options: { - servers: [url], - }, -}; +const pkgPath = resolve('package.json'); +const pkg = createRequire(import.meta.url)(pkgPath); -if (user && password) { - microserviceOptions.options.user = user; - microserviceOptions.options.pass = password; -} +const app = await NestFactory.create(Application); -app.connectMicroservice<MicroserviceOptions>(microserviceOptions); +app.use(helmet()); app.enableVersioning({ defaultVersion: ['1'], @@ -38,18 +24,23 @@ app.enableVersioning({ }); const swaggerConfig = new DocumentBuilder() - .setTitle('Gaia-X OCM Schema Manager API') - .setDescription('API documentation for Gaia-X OCM Schema Manager') - .setVersion('1.0') + .setTitle(pkg.description) + .setVersion(pkg.version) .build(); const document = SwaggerModule.createDocument(app, swaggerConfig); -SwaggerModule.setup('/swagger', app, document); -await app.startAllMicroservices(); +SwaggerModule.setup('/', app, document, { + swaggerOptions: { + docExpansion: 'none', + tryItOutEnabled: true, + }, +}); -const { host, port } = app.get(httpConfig.KEY) as ConfigType<typeof httpConfig>; -await app.listen(port as number, host as string); +const { hostname, port } = app.get(httpConfig.KEY) as ConfigType< + typeof httpConfig +>; +await app.listen(port, hostname); Logger.log(`Application is running on: ${await app.getUrl()}`); /* c8 ignore stop */