@riocrypto/common-server 1.0.1712 → 1.0.1714

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.
@@ -2,6 +2,7 @@ import { Logger } from "winston";
2
2
  declare class LoggerService {
3
3
  private logger;
4
4
  constructor();
5
+ private maskSensitiveData;
5
6
  getLogger(): Logger;
6
7
  initLogger(): Promise<void>;
7
8
  }
@@ -11,9 +11,61 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const common_1 = require("@riocrypto/common");
13
13
  const winston_1 = require("winston");
14
- const MAX_LEVEL = "info";
15
14
  class LoggerService {
16
15
  constructor() {
16
+ this.maskSensitiveData = (0, winston_1.format)((info) => {
17
+ // Mask sensitive headers
18
+ if (info.metadata && info.metadata.req && info.metadata.req.headers) {
19
+ const headers = info.metadata.req.headers;
20
+ const headerKeysToMask = [
21
+ "x-api-key",
22
+ "x-admin-api-key",
23
+ "x-cluster-api-key",
24
+ ];
25
+ headerKeysToMask.forEach((key) => {
26
+ if (headers[key]) {
27
+ headers[key] = "***MASKED***"; // Replace with your masking preference
28
+ }
29
+ });
30
+ if (headers.cookie) {
31
+ headers.cookie = headers.cookie
32
+ .split("; ")
33
+ .map((cookie) => {
34
+ const [key, value] = cookie.split("=");
35
+ if (key === "accessToken" || key === "adminAccessCookie") {
36
+ return `${key}=***MASKED***`; // Mask the sensitive cookie
37
+ }
38
+ return cookie; // Return unmodified if not sensitive
39
+ })
40
+ .join("; ");
41
+ }
42
+ }
43
+ // Mask sensitive request body fields
44
+ if (info.metadata && info.metadata.req && info.metadata.req.body) {
45
+ const requestBodyFieldsToMask = [
46
+ "password",
47
+ "newPassword",
48
+ "securityAnswer",
49
+ "code",
50
+ "authenticatorCode",
51
+ ];
52
+ requestBodyFieldsToMask.forEach((field) => {
53
+ if (info.metadata.req.body.hasOwnProperty(field)) {
54
+ info.metadata.req.body[field] = "***MASKED***"; // Replace with your masking preference
55
+ }
56
+ });
57
+ }
58
+ // Mask sensitive response body fields
59
+ if (info.metadata && info.metadata.res && info.metadata.res.body) {
60
+ const responseBodyFieldsToMask = ["secret", "value"];
61
+ responseBodyFieldsToMask.forEach((field) => {
62
+ if (info.metadata.res.body.hasOwnProperty(field)) {
63
+ info.metadata.res.body[field] = "***MASKED***"; // Replace with your masking preference
64
+ }
65
+ });
66
+ }
67
+ return info;
68
+ });
17
69
  this.logger = null;
18
70
  }
19
71
  getLogger() {
@@ -25,14 +77,13 @@ class LoggerService {
25
77
  initLogger() {
26
78
  return __awaiter(this, void 0, void 0, function* () {
27
79
  if (process.env.RIO_ENV === common_1.RioEnv.Production) {
28
- // Initialize logger for production environment with "info" level.
29
- const { getWinsonTransport } = yield require("@hyperdx/node-opentelemetry");
80
+ const { getWinstonTransport } = yield require("@hyperdx/node-opentelemetry");
30
81
  this.logger = (0, winston_1.createLogger)({
31
- level: MAX_LEVEL,
32
- format: winston_1.format.combine(winston_1.format.timestamp(), winston_1.format.json(), winston_1.format.metadata(), winston_1.format.prettyPrint()),
82
+ level: "info",
83
+ format: winston_1.format.combine(winston_1.format.timestamp(), this.maskSensitiveData(), winston_1.format.json(), winston_1.format.prettyPrint()),
33
84
  transports: [
34
85
  new winston_1.transports.Console(),
35
- getWinsonTransport(MAX_LEVEL, {
86
+ getWinstonTransport("info", {
36
87
  apiKey: process.env.HYPERDX_API_KEY,
37
88
  service: process.env.OTEL_SERVICE_NAME,
38
89
  }),
@@ -40,10 +91,9 @@ class LoggerService {
40
91
  });
41
92
  }
42
93
  else {
43
- // Initialize logger for local environment with "error" level.
44
94
  this.logger = (0, winston_1.createLogger)({
45
95
  level: "error",
46
- format: winston_1.format.combine(winston_1.format.timestamp(), winston_1.format.json(), winston_1.format.metadata(), winston_1.format.prettyPrint()),
96
+ format: winston_1.format.combine(winston_1.format.timestamp(), this.maskSensitiveData(), winston_1.format.json(), winston_1.format.metadata(), winston_1.format.prettyPrint()),
47
97
  transports: [new winston_1.transports.Console()],
48
98
  });
49
99
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riocrypto/common-server",
3
- "version": "1.0.1712",
3
+ "version": "1.0.1714",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",
@@ -26,7 +26,7 @@
26
26
  "@google-cloud/secret-manager": "^5.3.0",
27
27
  "@google-cloud/storage": "^6.9.5",
28
28
  "@hyperdx/node-opentelemetry": "^0.4.2",
29
- "@riocrypto/common": "^1.0.1502",
29
+ "@riocrypto/common": "^1.0.1505",
30
30
  "@types/express": "^4.17.13",
31
31
  "axios": "^1.6.0",
32
32
  "crypto-js": "^4.2.0",