@gus-eip/loggers 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,67 @@
1
+ # @gus-eip/eip-loggers
2
+
3
+ ## Overview
4
+
5
+ `@gus-eip/eip-loggers` is a package designed to provide logging functionality for your Node.js applications. It offers integration with various logging services, including CloudWatchLogger.
6
+
7
+ ## Installation
8
+
9
+ You can install the package via npm:
10
+
11
+ ```bash
12
+ npm install @gus-eip/eip-loggers
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ To use the logger module in your application, follow these steps:
18
+
19
+ 1. Import `LoggerModule` from `@gus-eip/eip-loggers` inside your module.
20
+
21
+ ```javascript
22
+ import { LoggerModule } from '@gus-eip/eip-loggers';
23
+ ```
24
+
25
+ 2. Configure `LoggerModule` in your module by calling the `forRoot` method.
26
+
27
+ ```javascript
28
+ LoggerModule.forRoot({
29
+ region: process.env.REGION,
30
+ logGroupName: process.env.LOGGER_LOG_GROUP_NAME,
31
+ options: 'CloudWatchLogger',
32
+ }),
33
+ ```
34
+
35
+ Ensure you provide the necessary environment variables (`REGION` and `LOGGER_LOG_GROUP_NAME`) for configuration.
36
+
37
+ ## Configuration Options
38
+
39
+ - `region`: The AWS region where your CloudWatch logs are located.
40
+ - `logGroupName`: The name of the log group where logs will be sent.
41
+ - `options`: The options for the logger. Currently, only `'CloudWatchLogger'` is supported.
42
+
43
+ ## Example
44
+
45
+ ```javascript
46
+ import { Module } from '@nestjs/common';
47
+ import { LoggerModule } from '@gus-eip/eip-loggers';
48
+
49
+ @Module({
50
+ imports: [
51
+ LoggerModule.forRoot({
52
+ region: process.env.REGION,
53
+ logGroupName: process.env.LOGGER_LOG_GROUP_NAME,
54
+ options: 'CloudWatchLogger',
55
+ }),
56
+ ],
57
+ })
58
+ export class AppModule {}
59
+ ```
60
+
61
+ ## License
62
+
63
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
64
+
65
+ ---
66
+
67
+ Feel free to customize this README according to your specific package features, usage guidelines, and licensing terms.
@@ -0,0 +1,12 @@
1
+ import { ILogger } from './interface';
2
+ export declare class CloudWatchLoggerService implements ILogger {
3
+ private logger;
4
+ private region;
5
+ private logGroupName;
6
+ constructor(region: string, logGroupName: string);
7
+ private defaultVersion;
8
+ private createCloudWatchTransport;
9
+ private logToCloudWatch;
10
+ log(requestedId: string, message: any, event: string, statusCode: number, details: any, brand: any, logStreamName: string): Promise<any>;
11
+ error(requestedId: string, message: any, event: string, errorCode: string, statusCode: number, details: any, brand: any, logStreamName: string): Promise<any>;
12
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CloudWatchLoggerService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const winston = require("winston");
15
+ const CloudWatchTransport = require("winston-aws-cloudwatch");
16
+ const AWS = require("aws-sdk");
17
+ let CloudWatchLoggerService = exports.CloudWatchLoggerService = class CloudWatchLoggerService {
18
+ constructor(region, logGroupName) {
19
+ this.defaultVersion = 'v1';
20
+ this.region = region;
21
+ this.logGroupName = logGroupName;
22
+ AWS.config.update({ region: this.region });
23
+ this.logger = winston.createLogger({
24
+ format: winston.format.combine(winston.format.timestamp(), winston.format.json()),
25
+ transports: [new winston.transports.Console()],
26
+ });
27
+ }
28
+ async createCloudWatchTransport(logStreamName) {
29
+ return new CloudWatchTransport({
30
+ logGroupName: this.logGroupName,
31
+ logStreamName,
32
+ createLogGroup: true,
33
+ createLogStream: true,
34
+ awsRegion: this.region,
35
+ level: 'info',
36
+ });
37
+ }
38
+ async logToCloudWatch(level, logObject) {
39
+ this.logger[level]('', {
40
+ ...logObject,
41
+ version: this.defaultVersion,
42
+ timestamp: new Date().toISOString(),
43
+ });
44
+ }
45
+ async log(requestedId, message, event, statusCode, details, brand, logStreamName) {
46
+ console.log(this.region, this.logGroupName);
47
+ const transport = await this.createCloudWatchTransport(logStreamName);
48
+ await this.logger.add(transport);
49
+ const logObject = {
50
+ requestedId,
51
+ message,
52
+ type: 'INFO',
53
+ event,
54
+ statusCode,
55
+ details,
56
+ brand,
57
+ };
58
+ await this.logToCloudWatch('info', logObject);
59
+ }
60
+ async error(requestedId, message, event, errorCode, statusCode, details, brand, logStreamName) {
61
+ const transport = await this.createCloudWatchTransport(logStreamName);
62
+ await this.logger.add(transport);
63
+ const logObject = {
64
+ requestedId,
65
+ message,
66
+ type: 'Error',
67
+ event,
68
+ errorCode,
69
+ statusCode,
70
+ details,
71
+ brand,
72
+ };
73
+ await this.logToCloudWatch('error', logObject);
74
+ }
75
+ };
76
+ exports.CloudWatchLoggerService = CloudWatchLoggerService = __decorate([
77
+ (0, common_1.Injectable)(),
78
+ __metadata("design:paramtypes", [String, String])
79
+ ], CloudWatchLoggerService);
@@ -0,0 +1,4 @@
1
+ export * from './cloudwatch.logger';
2
+ export * from './interface';
3
+ export * from './module';
4
+ export * from './provider';
package/dist/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./cloudwatch.logger"), exports);
18
+ __exportStar(require("./interface"), exports);
19
+ __exportStar(require("./module"), exports);
20
+ __exportStar(require("./provider"), exports);
@@ -0,0 +1,4 @@
1
+ export interface ILogger {
2
+ log(requestedId: string, logMessage: any, event: string, statusCode: number, details: any, brand: any, logStreamName: string): Promise<any>;
3
+ error(requestedId: string, errorMessage: any, event: string, errorCode: string, statusCode: number, details: any, brand: any, logStreamName: string): Promise<any>;
4
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ export interface LoggerModuleOptions {
2
+ region: string;
3
+ logGroupName: string;
4
+ options: string;
5
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,5 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { LoggerModuleOptions } from './interfaces/logger.interface';
3
+ export declare class LoggerModule {
4
+ static forRoot(params: LoggerModuleOptions): DynamicModule;
5
+ }
package/dist/module.js ADDED
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var LoggerModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.LoggerModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const cloudwatch_logger_1 = require("./cloudwatch.logger");
13
+ let LoggerModule = exports.LoggerModule = LoggerModule_1 = class LoggerModule {
14
+ static forRoot(params) {
15
+ const cloudwatchProvider = {
16
+ provide: params.options,
17
+ useClass: cloudwatch_logger_1.CloudWatchLoggerService,
18
+ };
19
+ const cloudwatchProviders = {
20
+ provide: params.options,
21
+ useFactory: () => new cloudwatch_logger_1.CloudWatchLoggerService(params.region, params.logGroupName),
22
+ };
23
+ return {
24
+ module: LoggerModule_1,
25
+ exports: [cloudwatchProvider, cloudwatchProviders],
26
+ providers: [
27
+ cloudwatchProvider,
28
+ cloudwatchProviders,
29
+ ],
30
+ };
31
+ }
32
+ };
33
+ exports.LoggerModule = LoggerModule = LoggerModule_1 = __decorate([
34
+ (0, common_1.Module)({})
35
+ ], LoggerModule);
@@ -0,0 +1,2 @@
1
+ import { Provider } from '@nestjs/common';
2
+ export declare const LoggerProviders: Provider[];
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LoggerProviders = void 0;
4
+ const cloudwatch_logger_1 = require("./cloudwatch.logger");
5
+ exports.LoggerProviders = [
6
+ {
7
+ provide: 'CloudWatchLogger',
8
+ useClass: cloudwatch_logger_1.CloudWatchLoggerService,
9
+ },
10
+ ];
package/package.json ADDED
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "@gus-eip/loggers",
3
+ "version": "1.0.1",
4
+ "description": "",
5
+ "author": "gus",
6
+ "readmeFilename": "README.md",
7
+ "main": "dist/index.js",
8
+ "files": [
9
+ "dist/**/*",
10
+ "*.md"
11
+ ],
12
+ "scripts": {
13
+ "start:dev": "tsc -w",
14
+ "build": "tsc",
15
+ "prepare": "npm run build",
16
+ "format": "prettier --write \"src/**/*.ts\"",
17
+ "lint": "tslint -p tsconfig.json -c tslint.json",
18
+ "test": "node --experimental-vm-modules ./node_modules/.bin/jest",
19
+ "test:watch": "jest --watch",
20
+ "test:cov": "jest --coverage",
21
+ "test:e2e": "jest --config ./test/jest-e2e.json"
22
+ },
23
+ "keywords": [
24
+ "nestjs",
25
+ "nodejs",
26
+ "javascript",
27
+ "typescript",
28
+ "cashify",
29
+ "eip-loggers",
30
+ "currency-exchange",
31
+ "conversion",
32
+ "money",
33
+ "exchange-rates"
34
+ ],
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "dependencies": {
39
+ "aws-sdk": "^2.1590.0",
40
+ "winston": "^3.13.0",
41
+ "winston-aws-cloudwatch": "^3.0.0"
42
+ },
43
+ "devDependencies": {
44
+ "@nestjs/common": "^10.0.2",
45
+ "@nestjs/core": "^10.0.2",
46
+ "@nestjs/platform-express": "^10.0.2",
47
+ "@nestjs/testing": "10.0.2",
48
+ "@types/express": "4.17.17",
49
+ "@types/jest": "29.5.2",
50
+ "@types/node": "20.3.1",
51
+ "@types/supertest": "2.0.12",
52
+ "@typescript-eslint/eslint-plugin": "^5.60.0",
53
+ "@typescript-eslint/parser": "^5.60.0",
54
+ "eslint": "^8.43.0",
55
+ "eslint-config-prettier": "^8.8.0",
56
+ "eslint-plugin-prettier": "^4.2.1",
57
+ "jest": "29.5.0",
58
+ "prettier": "2.8.8",
59
+ "reflect-metadata": "^0.1.13",
60
+ "rxjs": "^7.8.1",
61
+ "supertest": "6.3.3",
62
+ "ts-jest": "29.1.0",
63
+ "ts-node": "10.9.1",
64
+ "tsc-watch": "6.0.4",
65
+ "tsconfig-paths": "4.2.0",
66
+ "tslint": "5.20.1",
67
+ "typescript": "5.1.3"
68
+ },
69
+ "jest": {
70
+ "moduleFileExtensions": [
71
+ "js",
72
+ "json",
73
+ "ts"
74
+ ],
75
+ "rootDir": "src",
76
+ "testRegex": ".spec.ts$",
77
+ "transform": {
78
+ "^.+\\.(t|j)s$": "ts-jest"
79
+ },
80
+ "coverageDirectory": "../coverage",
81
+ "testEnvironment": "node"
82
+ }
83
+ }