@riocrypto/common-server 1.0.1894 → 1.0.1896

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.
@@ -1,10 +1,13 @@
1
1
  import { Logger } from "winston";
2
2
  declare class LoggerService {
3
+ private static instance;
3
4
  private logger;
4
- constructor();
5
+ private constructor();
5
6
  private maskValue;
6
7
  private maskSensitiveData;
8
+ private requestMethodFilter;
7
9
  getLogger(): Logger;
10
+ static getInstance(): LoggerService;
8
11
  initLogger(): Promise<void>;
9
12
  }
10
13
  declare const loggerService: LoggerService;
@@ -1,4 +1,27 @@
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
26
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
27
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -8,14 +31,25 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
31
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
32
  });
10
33
  };
34
+ var __rest = (this && this.__rest) || function (s, e) {
35
+ var t = {};
36
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
37
+ t[p] = s[p];
38
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
39
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
40
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
41
+ t[p[i]] = s[p[i]];
42
+ }
43
+ return t;
44
+ };
11
45
  Object.defineProperty(exports, "__esModule", { value: true });
12
- const common_1 = require("@riocrypto/common");
13
46
  const winston_1 = require("winston");
14
47
  class LoggerService {
15
48
  constructor() {
16
49
  this.maskSensitiveData = (0, winston_1.format)((info) => {
50
+ var _a, _b, _c, _d, _e, _f;
17
51
  // Mask sensitive headers
18
- if (info.meta && info.meta.req && info.meta.req.headers) {
52
+ if ((_b = (_a = info.meta) === null || _a === void 0 ? void 0 : _a.req) === null || _b === void 0 ? void 0 : _b.headers) {
19
53
  const headers = info.meta.req.headers;
20
54
  const headerKeysToMask = [
21
55
  "x-api-key",
@@ -24,7 +58,7 @@ class LoggerService {
24
58
  ];
25
59
  headerKeysToMask.forEach((key) => {
26
60
  if (headers[key]) {
27
- headers[key] = this.maskValue(headers[key]); // Use maskValue function
61
+ headers[key] = this.maskValue(headers[key]);
28
62
  }
29
63
  });
30
64
  // Mask cookies specifically
@@ -33,20 +67,23 @@ class LoggerService {
33
67
  .split("; ")
34
68
  .map((cookie) => {
35
69
  const [key, value] = cookie.split("=");
36
- if (key === "accessToken" ||
37
- key === "adminAccessToken" ||
38
- key === "refreshToken" ||
39
- key === "adminRefreshToken" ||
40
- key === "phoneVerifiedJWT") {
41
- return `${key}=${this.maskValue(value)}`; // Mask the sensitive cookie
70
+ const sensitiveCookies = [
71
+ "accessToken",
72
+ "adminAccessToken",
73
+ "refreshToken",
74
+ "adminRefreshToken",
75
+ "phoneVerifiedJWT",
76
+ ];
77
+ if (sensitiveCookies.includes(key)) {
78
+ return `${key}=${this.maskValue(value)}`;
42
79
  }
43
- return cookie; // Return unmodified if not sensitive
80
+ return cookie;
44
81
  })
45
82
  .join("; ");
46
83
  }
47
84
  }
48
85
  // Mask sensitive request body fields
49
- if (info.meta && info.meta.req && info.meta.req.body) {
86
+ if ((_d = (_c = info.meta) === null || _c === void 0 ? void 0 : _c.req) === null || _d === void 0 ? void 0 : _d.body) {
50
87
  const requestBodyFieldsToMask = [
51
88
  "password",
52
89
  "newPassword",
@@ -56,21 +93,33 @@ class LoggerService {
56
93
  ];
57
94
  requestBodyFieldsToMask.forEach((field) => {
58
95
  if (info.meta.req.body.hasOwnProperty(field)) {
59
- info.meta.req.body[field] = this.maskValue(info.meta.req.body[field]); // Use maskValue function
96
+ info.meta.req.body[field] = this.maskValue(info.meta.req.body[field]);
60
97
  }
61
98
  });
62
99
  }
63
100
  // Mask sensitive response body fields
64
- if (info.meta && info.meta.res && info.meta.res.body) {
65
- const responseBodyFieldsToMask = ["secret", "value"];
101
+ if ((_f = (_e = info.meta) === null || _e === void 0 ? void 0 : _e.res) === null || _f === void 0 ? void 0 : _f.body) {
102
+ const responseBodyFieldsToMask = ["secret", "sensitiveValue"];
66
103
  responseBodyFieldsToMask.forEach((field) => {
67
104
  if (info.meta.res.body.hasOwnProperty(field)) {
68
- info.meta.res.body[field] = this.maskValue(info.meta.res.body[field]); // Use maskValue function
105
+ info.meta.res.body[field] = this.maskValue(info.meta.res.body[field]);
69
106
  }
70
107
  });
71
108
  }
72
109
  return info;
73
110
  });
111
+ this.requestMethodFilter = (0, winston_1.format)((info) => {
112
+ var _a, _b;
113
+ const allowedMethods = ((_a = process.env.LOG_METHODS) === null || _a === void 0 ? void 0 : _a.split(",")) || [
114
+ "POST",
115
+ "PATCH",
116
+ "DELETE",
117
+ ];
118
+ if (((_b = info.meta) === null || _b === void 0 ? void 0 : _b.req) && allowedMethods.includes(info.meta.req.method)) {
119
+ return info;
120
+ }
121
+ return false; // Filter out logs for other methods
122
+ });
74
123
  this.logger = null;
75
124
  }
76
125
  maskValue(value) {
@@ -80,35 +129,43 @@ class LoggerService {
80
129
  }
81
130
  getLogger() {
82
131
  if (!this.logger) {
83
- return null;
132
+ throw new Error("Logger has not been initialized. Please call initLogger() first.");
84
133
  }
85
134
  return this.logger;
86
135
  }
136
+ static getInstance() {
137
+ if (!LoggerService.instance) {
138
+ LoggerService.instance = new LoggerService();
139
+ }
140
+ return LoggerService.instance;
141
+ }
87
142
  initLogger() {
88
143
  return __awaiter(this, void 0, void 0, function* () {
89
- if (process.env.RIO_ENV === common_1.RioEnv.Production) {
90
- const { getWinsonTransport } = yield require("@hyperdx/node-opentelemetry");
144
+ try {
145
+ const logLevel = "info";
146
+ const HyperDX = yield Promise.resolve().then(() => __importStar(require("@hyperdx/node-opentelemetry")));
91
147
  this.logger = (0, winston_1.createLogger)({
92
- level: "info",
93
- format: winston_1.format.combine(winston_1.format.timestamp(), this.maskSensitiveData(), winston_1.format.json(), winston_1.format.prettyPrint()),
148
+ level: logLevel,
149
+ format: winston_1.format.combine(winston_1.format.colorize(), winston_1.format.timestamp(), this.maskSensitiveData(), this.requestMethodFilter(), winston_1.format.printf((_a) => {
150
+ var { timestamp, level, message } = _a, meta = __rest(_a, ["timestamp", "level", "message"]);
151
+ return `${timestamp} [${level}]: ${message} ${JSON.stringify(meta)}`;
152
+ })),
94
153
  transports: [
95
154
  new winston_1.transports.Console(),
96
- getWinsonTransport("info", {
97
- apiKey: process.env.HYPERDX_API_KEY,
98
- service: process.env.OTEL_SERVICE_NAME,
155
+ // @ts-ignore
156
+ HyperDX.getWinstonTransport("info", {
157
+ // Send logs info and above
158
+ detectResources: true,
99
159
  }),
100
160
  ],
101
161
  });
102
162
  }
103
- else {
104
- this.logger = (0, winston_1.createLogger)({
105
- level: "error",
106
- format: winston_1.format.combine(winston_1.format.timestamp(), this.maskSensitiveData(), winston_1.format.json(), winston_1.format.metadata(), winston_1.format.prettyPrint()),
107
- transports: [new winston_1.transports.Console()],
108
- });
163
+ catch (error) {
164
+ console.error("Failed to initialize logger:", error);
165
+ // Handle the error as needed
109
166
  }
110
167
  });
111
168
  }
112
169
  }
113
- const loggerService = new LoggerService();
170
+ const loggerService = LoggerService.getInstance();
114
171
  exports.default = loggerService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riocrypto/common-server",
3
- "version": "1.0.1894",
3
+ "version": "1.0.1896",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",