@arrowsphere/api-client 3.180.0-rc.fdi.1 → 3.180.0-rc.fdi.10

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.
@@ -18,12 +18,5 @@ export declare class AxiosSingleton {
18
18
  * @param isLogging - Must log
19
19
  */
20
20
  private static _handleResponse;
21
- /**
22
- * @param request - Axios Request
23
- */
24
- private static cleanRequestLog;
25
- /**
26
- * @param response - Axios Response
27
- */
28
- private static cleanResponseLog;
21
+ private static sanitizeObject;
29
22
  }
@@ -5,7 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.AxiosSingleton = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
- const lodash_1 = require("lodash");
8
+ var DefaultObfuscateFields;
9
+ (function (DefaultObfuscateFields) {
10
+ DefaultObfuscateFields["API_KEY"] = "apiKey";
11
+ DefaultObfuscateFields["PASSWORD"] = "password";
12
+ DefaultObfuscateFields["AUTHORIZATION"] = "Authorization";
13
+ DefaultObfuscateFields["NEW_PASSWORD"] = "newPassword";
14
+ DefaultObfuscateFields["OLD_PASSWORD"] = "oldPassword";
15
+ })(DefaultObfuscateFields || (DefaultObfuscateFields = {}));
9
16
  class AxiosSingleton {
10
17
  static getInstance(configuration = {}) {
11
18
  this._isLogging = !!configuration.isLogging;
@@ -29,7 +36,7 @@ class AxiosSingleton {
29
36
  */
30
37
  static _handleRequest(request, isLogging = false) {
31
38
  if (isLogging) {
32
- console.info('AXIOS - Request : ', AxiosSingleton.cleanRequestLog(request));
39
+ console.info('AXIOS - Request : ', AxiosSingleton.sanitizeObject(request));
33
40
  }
34
41
  return request;
35
42
  }
@@ -39,39 +46,52 @@ class AxiosSingleton {
39
46
  */
40
47
  static _handleResponse(response, isLogging = false) {
41
48
  if (isLogging) {
42
- console.info('AXIOS - Response : ', AxiosSingleton.cleanResponseLog(response));
49
+ console.info('AXIOS - Response : ', AxiosSingleton.sanitizeObject(response));
43
50
  }
44
51
  return response;
45
52
  }
46
- /**
47
- * @param request - Axios Request
48
- */
49
- static cleanRequestLog(request) {
50
- var _a, _b, _c, _d;
51
- const tempRequest = (0, lodash_1.cloneDeep)(request);
52
- if ((_a = tempRequest.headers) === null || _a === void 0 ? void 0 : _a.apiKey) {
53
- const apiKey = (_b = tempRequest.headers) === null || _b === void 0 ? void 0 : _b.apiKey;
54
- tempRequest.headers.apiKey =
55
- '****************************' + apiKey.substring(apiKey.length - 4);
56
- }
57
- if ((_d = (_c = tempRequest.data) === null || _c === void 0 ? void 0 : _c.user) === null || _d === void 0 ? void 0 : _d.password) {
58
- tempRequest.data.user.password = '***********';
59
- }
60
- return tempRequest;
61
- }
62
- /**
63
- * @param response - Axios Response
64
- */
65
- static cleanResponseLog(response) {
66
- var _a, _b;
67
- const tempResponse = (0, lodash_1.cloneDeep)(response);
68
- if ((_a = tempResponse.config.headers) === null || _a === void 0 ? void 0 : _a.apiKey) {
69
- const apiKey = (_b = tempResponse.config.headers) === null || _b === void 0 ? void 0 : _b.apiKey;
70
- tempResponse.config.headers.apiKey =
71
- '****************************' + apiKey.substring(apiKey.length - 4);
53
+ static sanitizeObject(obj, fieldsToObfuscate = [
54
+ DefaultObfuscateFields.API_KEY,
55
+ DefaultObfuscateFields.PASSWORD,
56
+ DefaultObfuscateFields.AUTHORIZATION,
57
+ DefaultObfuscateFields.NEW_PASSWORD,
58
+ DefaultObfuscateFields.OLD_PASSWORD,
59
+ ], seen = new WeakMap()) {
60
+ if (!obj || typeof obj !== 'object')
61
+ return obj;
62
+ // Vérifie si l'objet a déjà été traité (évite les boucles infinies)
63
+ if (seen.has(obj))
64
+ return seen.get(obj);
65
+ // Crée une copie de l'objet pour éviter de le modifier directement
66
+ const sanitizedCopy = Array.isArray(obj) ? [] : {};
67
+ // Stocke l'objet dans WeakMap avant la récursion
68
+ seen.set(obj, sanitizedCopy);
69
+ for (const [key, value] of Object.entries(obj)) {
70
+ if (fieldsToObfuscate
71
+ .map((field) => field.toUpperCase())
72
+ .includes(key.toUpperCase())) {
73
+ let obfuscatedFields = '';
74
+ switch (key.toUpperCase()) {
75
+ case DefaultObfuscateFields.API_KEY.toUpperCase():
76
+ case DefaultObfuscateFields.AUTHORIZATION.toUpperCase():
77
+ obfuscatedFields =
78
+ '****************************' +
79
+ value.substring(value.length - 4);
80
+ break;
81
+ default:
82
+ obfuscatedFields = '***';
83
+ break;
84
+ }
85
+ sanitizedCopy[key] = obfuscatedFields;
86
+ }
87
+ else if (typeof value === 'object' && value !== null) {
88
+ sanitizedCopy[key] = AxiosSingleton.sanitizeObject(value, fieldsToObfuscate, seen); // 🔄 Récursion avec WeakMap
89
+ }
90
+ else {
91
+ sanitizedCopy[key] = value;
92
+ }
72
93
  }
73
- delete tempResponse.request;
74
- return tempResponse;
94
+ return sanitizedCopy;
75
95
  }
76
96
  }
77
97
  exports.AxiosSingleton = AxiosSingleton;
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "type": "git",
5
5
  "url": "https://github.com/ArrowSphere/nodejs-api-client.git"
6
6
  },
7
- "version": "3.180.0-rc.fdi.1",
7
+ "version": "3.180.0-rc.fdi.10",
8
8
  "description": "Node.js client for ArrowSphere's public API",
9
9
  "main": "build/index.js",
10
10
  "types": "build/index.d.ts",