diff --git a/apps/api/.env.example b/apps/api/.env.example index 6cfab00c..a8f05d16 100644 --- a/apps/api/.env.example +++ b/apps/api/.env.example @@ -17,12 +17,12 @@ MAX_RETRY_COUNT=3 # Max retry count, default is 3 ARCHIVE_LIMIT=1000 # Max notifications to archive, default is 1000 ARCHIVE_INTERVAL=3600 # Interval (in seconds) for archiving notifications, default 3600 (every 1 hour) -# Slogger configuration -SLOGGER_LOG_TYPE= -SLOGGER_LOG_LEVEL=error #Log level, default is error -SLOGERR_API_ENDPOINT= #Slogger log api url -SLOGERR_API_TOKEN= #Slogger api token -ENABLE_SLOGERR=false #default set to false +# Dhilog configuration +DHILOG_LOG_TYPE= # Custom "Log types" value defined on Dhilog portal +DHILOG_LOG_LEVEL=error # Log level, default is error +DHILOG_API_ENDPOINT= # Dhilog log api url +DHILOG_API_TOKEN= # Dhilog api token +ENABLE_DHILOG=false # Default set to false # Logger configuration LOG_LEVEL=info # Log level, default is info diff --git a/apps/api/package-lock.json b/apps/api/package-lock.json index 1c736c23..65f871a5 100644 --- a/apps/api/package-lock.json +++ b/apps/api/package-lock.json @@ -1,12 +1,12 @@ { "name": "osmox", - "version": "4.2.1", + "version": "4.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "osmox", - "version": "4.2.1", + "version": "4.3.0", "license": "MIT", "dependencies": { "@apollo/server": "^4.11.2", @@ -32,6 +32,7 @@ "bullmq": "^5.25.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.1", + "flatted": "^3.3.2", "graphql": "^16.9.0", "graphql-type-json": "^0.3.2", "mailgun.js": "^10.2.3", @@ -7118,10 +7119,10 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "license": "ISC" }, "node_modules/fn.name": { "version": "1.1.0", diff --git a/apps/api/package.json b/apps/api/package.json index 957f0343..49c2db80 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -1,6 +1,6 @@ { "name": "osmox", - "version": "4.2.1", + "version": "4.3.0", "description": "Centralized multi-channel notification management component for streamlined communication across email, SMS, WhatsApp, and push notifications.", "author": "Osmosys Software Solutions Private Limited", "license": "MIT", @@ -51,6 +51,7 @@ "bullmq": "^5.25.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.1", + "flatted": "^3.3.2", "graphql": "^16.9.0", "graphql-type-json": "^0.3.2", "mailgun.js": "^10.2.3", diff --git a/apps/api/src/common/decorators/is-data-valid.decorator.ts b/apps/api/src/common/decorators/is-data-valid.decorator.ts index f96c6160..5848fe6b 100644 --- a/apps/api/src/common/decorators/is-data-valid.decorator.ts +++ b/apps/api/src/common/decorators/is-data-valid.decorator.ts @@ -30,7 +30,7 @@ import { SmsSnsDataDto } from 'src/modules/notifications/dtos/providers/smsSns-d export class IsDataValidConstraint implements ValidatorConstraintInterface { constructor( private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(IsDataValidConstraint.name), ) {} async validate(value: object, args: ValidationArguments): Promise { diff --git a/apps/api/src/common/guards/api-key/api-key.guard.ts b/apps/api/src/common/guards/api-key/api-key.guard.ts index 2917e727..1a80dfb7 100644 --- a/apps/api/src/common/guards/api-key/api-key.guard.ts +++ b/apps/api/src/common/guards/api-key/api-key.guard.ts @@ -18,7 +18,7 @@ export class ApiKeyGuard implements CanActivate { constructor( private readonly serverApiKeysService: ServerApiKeysService, private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(ApiKeyGuard.name), ) {} canActivate(context: ExecutionContext): boolean | Promise | Observable { diff --git a/apps/api/src/common/logger/slogerr.transport.ts b/apps/api/src/common/logger/dhilog.transport.ts similarity index 68% rename from apps/api/src/common/logger/slogerr.transport.ts rename to apps/api/src/common/logger/dhilog.transport.ts index c1090507..ff44ddfc 100644 --- a/apps/api/src/common/logger/slogerr.transport.ts +++ b/apps/api/src/common/logger/dhilog.transport.ts @@ -4,6 +4,7 @@ import { TransportStreamOptions } from 'winston-transport'; import { ConfigService } from '@nestjs/config'; import { Logger } from '@nestjs/common/services/logger.service'; import { firstValueFrom } from 'rxjs'; +import { stringify } from 'flatted'; interface CustomTransportOptions extends TransportStreamOptions { httpService: HttpService; @@ -19,10 +20,10 @@ interface LogInfo { severity: string; } -export class SlogerrTransport extends TransportStream { +export class DhilogTransport extends TransportStream { private readonly httpService: HttpService; private readonly configService: ConfigService; - private readonly logger = new Logger(SlogerrTransport.name); + private readonly logger = new Logger(DhilogTransport.name); constructor(options: CustomTransportOptions) { super(options); @@ -31,16 +32,16 @@ export class SlogerrTransport extends TransportStream { } async log(info: LogInfo, callback: () => void): Promise { - const allowedLevels = (this.configService.get('SLOGGER_LOG_LEVEL') || 'error') + const allowedLevels = (this.configService.get('DHILOG_LOG_LEVEL') || 'error') .split(',') .map((level) => level.trim()); - const logType = this.configService.get('SLOGGER_LOG_TYPE') || 'Exceptions'; + const logType = this.configService.get('DHILOG_LOG_TYPE') || 'Exceptions'; if (allowedLevels.includes(info.level)) { - const apiEndpoint = this.configService.get('SLOGERR_API_ENDPOINT'); - const apiKey = this.configService.get('SLOGERR_API_TOKEN'); + const apiEndpoint = this.configService.get('DHILOG_API_ENDPOINT'); + const apiKey = this.configService.get('DHILOG_API_TOKEN'); - this.logger.log(`Log Info: ${JSON.stringify(info)}`); + this.logger.log(`Log Info: ${stringify(info)}`); const logCreatedOn = info.timestamp || new Date().toISOString(); @@ -65,14 +66,14 @@ export class SlogerrTransport extends TransportStream { ); if (response.status !== 200) { - this.logger.error( - `Failed to send log to Slogerr. Status: ${response.status}, Message: ${response.statusText}`, + this.logger.warn( + `Failed to send log to Dhilog. Status: ${response.status}, Message: ${response.statusText}`, ); } else { - this.logger.log('Error log successfully sent to Slogerr', response); + this.logger.log('Error log successfully sent to Dhilog', response); } } catch (error) { - this.logger.error('Failed to send log to Slogerr', error.message); + this.logger.warn('Failed to send log to Dhilog', error.message); } } diff --git a/apps/api/src/config/logger.config.ts b/apps/api/src/config/logger.config.ts index 55f640bb..63a035b4 100644 --- a/apps/api/src/config/logger.config.ts +++ b/apps/api/src/config/logger.config.ts @@ -7,7 +7,8 @@ import 'winston-daily-rotate-file'; import { ConfigService } from '@nestjs/config'; import { name as applicationName } from 'package.json'; import DailyRotateFile from 'winston-daily-rotate-file'; -import { SlogerrTransport } from 'src/common/logger/slogerr.transport'; +import { DhilogTransport } from 'src/common/logger/dhilog.transport'; +import { stringify } from 'flatted'; const configService = new ConfigService(); const httpService = new HttpService(); @@ -18,7 +19,7 @@ const logDir = 'logs'; const combinedLogMaxSize = configService.get('COMBINED_LOG_MAX_SIZE'); const errorLogMaxSize = configService.get('ERROR_LOG_MAX_SIZE'); -const enableSlogger = configService.get('ENABLE_SLOGERR') || 'false'; +const enableDhilog = configService.get('ENABLE_DHILOG') || 'false'; const logFormat = format.combine( format.timestamp(), @@ -39,7 +40,7 @@ const logFormat = format.combine( message, stackTrace: stack, }; - return JSON.stringify(logObject); + return stringify(logObject); }), ); @@ -82,7 +83,7 @@ if (errorLogMaxSize === '0') { errorLogOptions.maxSize = '20m'; } -const slogerrTransport = new SlogerrTransport({ +const dhilogTransport = new DhilogTransport({ httpService, configService, }); @@ -97,7 +98,7 @@ const transportsConfig = [ }), new transports.DailyRotateFile(combinedLogOptions), new transports.DailyRotateFile(errorLogOptions), - ...(enableSlogger === 'true' ? [slogerrTransport] : []), + ...(enableDhilog === 'true' ? [dhilogTransport] : []), ]; export const loggerConfig = WinstonModule.createLogger({ diff --git a/apps/api/src/modules/notifications/notifications.controller.ts b/apps/api/src/modules/notifications/notifications.controller.ts index a8eed56b..35ec0a95 100644 --- a/apps/api/src/modules/notifications/notifications.controller.ts +++ b/apps/api/src/modules/notifications/notifications.controller.ts @@ -9,7 +9,7 @@ export class NotificationsController { constructor( private readonly notificationService: NotificationsService, private readonly jsend: JsendFormatter, - private logger: Logger, + private logger: Logger = new Logger(NotificationsController.name), ) {} @Post('queue') diff --git a/apps/api/src/modules/providers/aws-ses/aws-ses.service.ts b/apps/api/src/modules/providers/aws-ses/aws-ses.service.ts index 13f7f3fa..bb56418f 100644 --- a/apps/api/src/modules/providers/aws-ses/aws-ses.service.ts +++ b/apps/api/src/modules/providers/aws-ses/aws-ses.service.ts @@ -26,7 +26,7 @@ export interface AwsSesData { export class AwsSesService { constructor( private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(AwsSesService.name), ) {} private async getSesClient(providerId: number): Promise { diff --git a/apps/api/src/modules/providers/mailgun/mailgun.service.ts b/apps/api/src/modules/providers/mailgun/mailgun.service.ts index 0e5c5212..1359336b 100644 --- a/apps/api/src/modules/providers/mailgun/mailgun.service.ts +++ b/apps/api/src/modules/providers/mailgun/mailgun.service.ts @@ -21,7 +21,7 @@ export class MailgunService { constructor( private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(MailgunService.name), ) { this.mailgun = new Mailgun(FormData); } diff --git a/apps/api/src/modules/providers/push-sns/push-sns.service.ts b/apps/api/src/modules/providers/push-sns/push-sns.service.ts index 2f130aaf..375a3151 100644 --- a/apps/api/src/modules/providers/push-sns/push-sns.service.ts +++ b/apps/api/src/modules/providers/push-sns/push-sns.service.ts @@ -13,7 +13,7 @@ export class PushSnsService { constructor( private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(PushSnsService.name), ) {} async assignSnsConfig(providerId: number): Promise { diff --git a/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.service.ts b/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.service.ts index 02298ea1..a86845e7 100644 --- a/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.service.ts +++ b/apps/api/src/modules/providers/sms-kapsystem/sms-kapsystem.service.ts @@ -34,7 +34,7 @@ export class SmsKapsystemService { constructor( private httpService: HttpService, private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(SmsKapsystemService.name), ) {} async assignKAPSystemValues(providerId: number): Promise { diff --git a/apps/api/src/modules/providers/sms-plivo/sms-plivo.service.ts b/apps/api/src/modules/providers/sms-plivo/sms-plivo.service.ts index a8171d6c..c292d859 100644 --- a/apps/api/src/modules/providers/sms-plivo/sms-plivo.service.ts +++ b/apps/api/src/modules/providers/sms-plivo/sms-plivo.service.ts @@ -52,7 +52,7 @@ export class SmsPlivoService { constructor( private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(SmsPlivoService.name), ) {} async assignTransport(providerId: number): Promise { diff --git a/apps/api/src/modules/providers/sms-sns/sms-sns.service.ts b/apps/api/src/modules/providers/sms-sns/sms-sns.service.ts index cfd195d4..71e95189 100644 --- a/apps/api/src/modules/providers/sms-sns/sms-sns.service.ts +++ b/apps/api/src/modules/providers/sms-sns/sms-sns.service.ts @@ -13,7 +13,7 @@ export class SmsSnsService { constructor( private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(SmsSnsService.name), ) {} async assignSnsConfig(providerId: number): Promise { diff --git a/apps/api/src/modules/providers/sms-twilio/sms-twilio.service.ts b/apps/api/src/modules/providers/sms-twilio/sms-twilio.service.ts index 087805ca..6303737f 100644 --- a/apps/api/src/modules/providers/sms-twilio/sms-twilio.service.ts +++ b/apps/api/src/modules/providers/sms-twilio/sms-twilio.service.ts @@ -36,7 +36,7 @@ export class SmsTwilioService { constructor( private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(SmsTwilioService.name), ) {} async assignTransport(providerId: number): Promise { diff --git a/apps/api/src/modules/providers/smtp/smtp.service.ts b/apps/api/src/modules/providers/smtp/smtp.service.ts index abd9f7e0..e0ce162e 100644 --- a/apps/api/src/modules/providers/smtp/smtp.service.ts +++ b/apps/api/src/modules/providers/smtp/smtp.service.ts @@ -8,7 +8,7 @@ export class SmtpService { constructor( private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(SmtpService.name), ) {} async assignTransport(providerId: number): Promise { diff --git a/apps/api/src/modules/providers/vc-twilio/vc-twilio.service.ts b/apps/api/src/modules/providers/vc-twilio/vc-twilio.service.ts index 7321882b..52dde131 100644 --- a/apps/api/src/modules/providers/vc-twilio/vc-twilio.service.ts +++ b/apps/api/src/modules/providers/vc-twilio/vc-twilio.service.ts @@ -87,7 +87,7 @@ export class VcTwilioService { constructor( private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(VcTwilioService.name), ) {} async assignTransport(providerId: number): Promise { diff --git a/apps/api/src/modules/providers/wa-twilio-business/wa-twilio-business.service.ts b/apps/api/src/modules/providers/wa-twilio-business/wa-twilio-business.service.ts index f128ccb2..15f137a9 100644 --- a/apps/api/src/modules/providers/wa-twilio-business/wa-twilio-business.service.ts +++ b/apps/api/src/modules/providers/wa-twilio-business/wa-twilio-business.service.ts @@ -38,7 +38,7 @@ export class WaTwilioBusinessService { constructor( private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(WaTwilioBusinessService.name), ) {} async assignTransport(providerId: number): Promise { diff --git a/apps/api/src/modules/providers/wa-twilio/wa-twilio.service.ts b/apps/api/src/modules/providers/wa-twilio/wa-twilio.service.ts index 6e7ee73d..73900080 100644 --- a/apps/api/src/modules/providers/wa-twilio/wa-twilio.service.ts +++ b/apps/api/src/modules/providers/wa-twilio/wa-twilio.service.ts @@ -36,7 +36,7 @@ export class WaTwilioService { constructor( private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(WaTwilioService.name), ) {} async assignTransport(providerId: number): Promise { diff --git a/apps/api/src/modules/providers/wa360dialog/wa360dialog.service.ts b/apps/api/src/modules/providers/wa360dialog/wa360dialog.service.ts index cdd1b56c..fe033381 100644 --- a/apps/api/src/modules/providers/wa360dialog/wa360dialog.service.ts +++ b/apps/api/src/modules/providers/wa360dialog/wa360dialog.service.ts @@ -51,7 +51,7 @@ export class Wa360dialogService { constructor( private httpService: HttpService, private readonly providersService: ProvidersService, - private logger: Logger, + private logger: Logger = new Logger(Wa360dialogService.name), ) {} async assignWA360Values(providerId: number): Promise { diff --git a/apps/portal/package-lock.json b/apps/portal/package-lock.json index 90910ed6..34791ce0 100644 --- a/apps/portal/package-lock.json +++ b/apps/portal/package-lock.json @@ -1,12 +1,12 @@ { "name": "osmox-portal", - "version": "4.2.1", + "version": "4.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "osmox-portal", - "version": "4.2.1", + "version": "4.3.0", "dependencies": { "@angular/animations": "^18.2.10", "@angular/cdk": "^17.3.10", diff --git a/apps/portal/package.json b/apps/portal/package.json index dcbf14e3..25453503 100644 --- a/apps/portal/package.json +++ b/apps/portal/package.json @@ -1,6 +1,6 @@ { "name": "osmox-portal", - "version": "4.2.1", + "version": "4.3.0", "scripts": { "ng": "ng", "start": "ng serve",