@aifabrix/miso-client 4.8.1 → 4.10.0
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/CHANGELOG.md +33 -0
- package/dist/api/types/logs.types.d.ts +6 -4
- package/dist/api/types/logs.types.d.ts.map +1 -1
- package/dist/utils/data-masker.d.ts +28 -35
- package/dist/utils/data-masker.d.ts.map +1 -1
- package/dist/utils/data-masker.js +116 -80
- package/dist/utils/data-masker.js.map +1 -1
- package/dist/utils/sensitive-fields.config.json +28 -50
- package/dist/utils/sensitive-fields.loader.d.ts +27 -16
- package/dist/utils/sensitive-fields.loader.d.ts.map +1 -1
- package/dist/utils/sensitive-fields.loader.js +184 -139
- package/dist/utils/sensitive-fields.loader.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,39 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [4.10.0] - 2026-04-15
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Data masking policy controls** - `sensitive-fields.config.json` supports `neverMaskFields` (normalized-name allowlist) and `substringMinLength` (clamped 1–64, default 4) so audit masking can avoid false positives on common keys such as datasource `key` or `success` while still matching longer sensitive tokens in compound names.
|
|
13
|
+
- **`maskSensitiveData` optional `configPath`** - Per-call override loads that JSON for one invocation without changing global `DataMasker` cache; if the path is missing or not a file, behavior falls back to the default config (`MISO_SENSITIVE_FIELDS_CONFIG` or packaged default).
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
|
|
17
|
+
- **Hardcoded sensitive-name fallbacks** - Default set no longer treats bare `key` or `cc` as sensitive; prefers explicit security-oriented names. Packaged JSON uses a `fields` map (with `mergeWithHardcodedDefaults`) and entries such as `encryptionkey` / `encryptionKey` alongside authentication, PII, and security groups, aligned with the Python SDK.
|
|
18
|
+
- **`maskValue` middle run** - Masked middle segment length matches Python: at least 8 asterisks, or the full remaining length when longer.
|
|
19
|
+
|
|
20
|
+
### Technical
|
|
21
|
+
|
|
22
|
+
- **Parity with Python 4.10.0** - Sensitive-fields loader merges `fields` or legacy `categories`, optional `fieldPatterns`, and env/default resolution; `getFieldPatterns()` returns only explicit `fieldPatterns` from config (empty array when unset).
|
|
23
|
+
- **Release version alignment** - Set package version to `4.10.0` in `package.json`.
|
|
24
|
+
|
|
25
|
+
## [4.9.0] - 2026-03-23
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- **Logs input contract migration (breaking)** - Replaced `application` with `applicationId` for logs query inputs in jobs, stats, and export surfaces.
|
|
30
|
+
- **Type contract alignment** - Updated `JobLogsQueryParams`, `GetLogStatsQueryParams`, and `ExportLogsQueryParams` to use `applicationId`-only filtering.
|
|
31
|
+
- **Documentation alignment** - Updated logs/audit guide and Wave 4 status notes to reflect `applicationId`-only input filtering behavior.
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- **Regression protection for pass-through filters** - Updated API unit tests to assert `applicationId` is passed through correctly for jobs/stats/export query paths.
|
|
36
|
+
|
|
37
|
+
### Technical
|
|
38
|
+
|
|
39
|
+
- **Release validation** - Re-ran full validation gates (`tests:typecheck`, `lint:fix`, `lint`, `test`) with final verification loop before version bump.
|
|
40
|
+
|
|
8
41
|
## [4.8.1] - 2026-03-13
|
|
9
42
|
|
|
10
43
|
### Changed
|
|
@@ -215,10 +215,10 @@ export interface LogsListQueryParams extends BaseListLogsQueryParams {
|
|
|
215
215
|
}
|
|
216
216
|
/**
|
|
217
217
|
* Query parameters for job log list endpoints.
|
|
218
|
-
*
|
|
218
|
+
* Uses id-based application filter.
|
|
219
219
|
*/
|
|
220
220
|
export interface JobLogsQueryParams extends BaseListLogsQueryParams {
|
|
221
|
-
|
|
221
|
+
applicationId?: string;
|
|
222
222
|
userId?: string;
|
|
223
223
|
correlationId?: string;
|
|
224
224
|
}
|
|
@@ -245,7 +245,8 @@ export interface PaginatedLogsResponse<T> {
|
|
|
245
245
|
*/
|
|
246
246
|
export interface GetLogStatsQueryParams {
|
|
247
247
|
environment?: string;
|
|
248
|
-
|
|
248
|
+
/** Application id filter (serialized as `applicationId` query parameter). */
|
|
249
|
+
applicationId?: string;
|
|
249
250
|
userId?: string;
|
|
250
251
|
startDate?: string;
|
|
251
252
|
endDate?: string;
|
|
@@ -328,7 +329,8 @@ export interface ExportLogsQueryParams {
|
|
|
328
329
|
type: 'general' | 'audit' | 'jobs';
|
|
329
330
|
format: 'csv' | 'json';
|
|
330
331
|
environment?: string;
|
|
331
|
-
|
|
332
|
+
/** Application id filter (serialized as `applicationId` query parameter). */
|
|
333
|
+
applicationId?: string;
|
|
332
334
|
userId?: string;
|
|
333
335
|
startDate?: string;
|
|
334
336
|
endDate?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.types.d.ts","sourceRoot":"","sources":["../../../src/api/types/logs.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"logs.types.d.ts","sourceRoot":"","sources":["../../../src/api/types/logs.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +1,41 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Data masker utility for client-side sensitive data protection
|
|
3
|
-
* Implements ISO 27001 data protection controls
|
|
2
|
+
* Data masker utility for client-side sensitive data protection.
|
|
3
|
+
* Implements ISO 27001 data protection controls; policy from sensitive-fields JSON
|
|
4
|
+
* (optional per-call `configPath` on `maskSensitiveData`).
|
|
4
5
|
*/
|
|
6
|
+
export type MaskSensitiveDataOptions = {
|
|
7
|
+
/** Per-call config file; does not change global DataMasker cache. */
|
|
8
|
+
configPath?: string;
|
|
9
|
+
};
|
|
5
10
|
export declare class DataMasker {
|
|
6
11
|
private static readonly MASKED_VALUE;
|
|
7
|
-
private static
|
|
8
|
-
private static
|
|
9
|
-
private static
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
*/
|
|
22
|
-
private static getFieldPatterns;
|
|
23
|
-
/**
|
|
24
|
-
* Set custom configuration path (call before first use if needed)
|
|
25
|
-
*/
|
|
26
|
-
static setConfigPath(customPath: string): void;
|
|
27
|
-
/**
|
|
28
|
-
* Check if a field name indicates sensitive data
|
|
29
|
-
*/
|
|
12
|
+
private static configLoaded;
|
|
13
|
+
private static sensitiveFields;
|
|
14
|
+
private static neverMaskFields;
|
|
15
|
+
private static substringMinLength;
|
|
16
|
+
private static explicitConfigPath;
|
|
17
|
+
private static keyIsSensitive;
|
|
18
|
+
private static loadGlobalConfig;
|
|
19
|
+
/**
|
|
20
|
+
* Set custom path for sensitive fields configuration (global cache).
|
|
21
|
+
* Call before first use, or pass `undefined` to use env / packaged default resolution.
|
|
22
|
+
*/
|
|
23
|
+
static setConfigPath(customPath?: string): void;
|
|
24
|
+
private static getGlobalSensitiveFields;
|
|
25
|
+
/** Check if a field name indicates sensitive data (global config). */
|
|
30
26
|
static isSensitiveField(key: string): boolean;
|
|
27
|
+
private static resolveOptionalConfigPath;
|
|
28
|
+
private static maskRecursive;
|
|
31
29
|
/**
|
|
32
|
-
* Mask sensitive data in objects, arrays, or primitives
|
|
33
|
-
* Returns a masked copy without modifying the original
|
|
30
|
+
* Mask sensitive data in objects, arrays, or primitives.
|
|
31
|
+
* Returns a masked copy without modifying the original.
|
|
34
32
|
*/
|
|
35
|
-
static maskSensitiveData(data: unknown): unknown;
|
|
33
|
+
static maskSensitiveData(data: unknown, options?: MaskSensitiveDataOptions): unknown;
|
|
36
34
|
/**
|
|
37
|
-
* Mask specific value (useful for masking individual strings)
|
|
38
|
-
* @param value - Value to mask.
|
|
39
|
-
* @param showFirst - Number of leading characters to keep.
|
|
40
|
-
* @param showLast - Number of trailing characters to keep.
|
|
35
|
+
* Mask specific value (useful for masking individual strings).
|
|
41
36
|
*/
|
|
42
37
|
static maskValue(value: string, showFirst?: number, showLast?: number): string;
|
|
43
|
-
/**
|
|
44
|
-
* Check if data contains sensitive information
|
|
45
|
-
*/
|
|
38
|
+
/** Check if data contains sensitive information (global config). */
|
|
46
39
|
static containsSensitiveData(data: unknown): boolean;
|
|
47
40
|
}
|
|
48
41
|
//# sourceMappingURL=data-masker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-masker.d.ts","sourceRoot":"","sources":["../../src/utils/data-masker.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"data-masker.d.ts","sourceRoot":"","sources":["../../src/utils/data-masker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,MAAM,wBAAwB,GAAG;IACrC,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAkB;IAEtD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAS;IACpC,OAAO,CAAC,MAAM,CAAC,eAAe,CAA0B;IACxD,OAAO,CAAC,MAAM,CAAC,eAAe,CAA0B;IACxD,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAK;IACtC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAqB;IAEtD,OAAO,CAAC,MAAM,CAAC,cAAc;IAqB7B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAY/B;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAS/C,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAKvC,sEAAsE;IACtE,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAU7C,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAUxC,OAAO,CAAC,MAAM,CAAC,aAAa;IA4B5B;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO;IA0BV;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAU,EACrB,QAAQ,GAAE,MAAU,GACnB,MAAM;IAgBT,oEAAoE;IACpE,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;CAwBrD"}
|
|
@@ -1,127 +1,162 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Data masker utility for client-side sensitive data protection
|
|
4
|
-
* Implements ISO 27001 data protection controls
|
|
3
|
+
* Data masker utility for client-side sensitive data protection.
|
|
4
|
+
* Implements ISO 27001 data protection controls; policy from sensitive-fields JSON
|
|
5
|
+
* (optional per-call `configPath` on `maskSensitiveData`).
|
|
5
6
|
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
6
40
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
41
|
exports.DataMasker = void 0;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
8
44
|
const sensitive_fields_loader_1 = require("./sensitive-fields.loader");
|
|
9
45
|
class DataMasker {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
static initializeSensitiveFields(customPath) {
|
|
15
|
-
// If config path changed, reload
|
|
16
|
-
if (this.configPath !== customPath) {
|
|
17
|
-
this.cachedFields = null;
|
|
18
|
-
this.cachedFieldPatterns = null;
|
|
19
|
-
this.configPath = customPath;
|
|
46
|
+
static keyIsSensitive(key, sensitiveFields, neverMask, substrMin) {
|
|
47
|
+
const nk = (0, sensitive_fields_loader_1.normalizeFieldName)(key);
|
|
48
|
+
if (neverMask.has(nk)) {
|
|
49
|
+
return false;
|
|
20
50
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return this.cachedFields;
|
|
51
|
+
if (sensitiveFields.has(nk)) {
|
|
52
|
+
return true;
|
|
24
53
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
* Get sensitive fields set (lazy loaded from JSON config)
|
|
32
|
-
*/
|
|
33
|
-
static getSensitiveFields() {
|
|
34
|
-
return this.initializeSensitiveFields(this.configPath);
|
|
54
|
+
for (const sf of sensitiveFields) {
|
|
55
|
+
if (sf.length >= substrMin && nk.includes(sf)) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return false;
|
|
35
60
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
static getFieldPatterns() {
|
|
40
|
-
if (!this.cachedFieldPatterns) {
|
|
41
|
-
this.cachedFieldPatterns = (0, sensitive_fields_loader_1.getFieldPatterns)(this.configPath);
|
|
61
|
+
static loadGlobalConfig() {
|
|
62
|
+
if (this.configLoaded) {
|
|
63
|
+
return;
|
|
42
64
|
}
|
|
43
|
-
|
|
65
|
+
const cfg = (0, sensitive_fields_loader_1.loadSensitiveFieldsConfigDict)(this.explicitConfigPath);
|
|
66
|
+
this.sensitiveFields = (0, sensitive_fields_loader_1.buildMergedSensitiveTokens)(cfg);
|
|
67
|
+
this.neverMaskFields = (0, sensitive_fields_loader_1.neverMaskFieldsFromCfg)(cfg);
|
|
68
|
+
this.substringMinLength = (0, sensitive_fields_loader_1.substringMinLengthFromCfg)(cfg);
|
|
69
|
+
this.configLoaded = true;
|
|
44
70
|
}
|
|
45
71
|
/**
|
|
46
|
-
* Set custom
|
|
72
|
+
* Set custom path for sensitive fields configuration (global cache).
|
|
73
|
+
* Call before first use, or pass `undefined` to use env / packaged default resolution.
|
|
47
74
|
*/
|
|
48
75
|
static setConfigPath(customPath) {
|
|
49
|
-
this.
|
|
50
|
-
this.
|
|
51
|
-
this.
|
|
76
|
+
this.configLoaded = false;
|
|
77
|
+
this.explicitConfigPath = customPath;
|
|
78
|
+
this.sensitiveFields = new Set();
|
|
79
|
+
this.neverMaskFields = new Set();
|
|
80
|
+
this.substringMinLength = 4;
|
|
81
|
+
this.loadGlobalConfig();
|
|
52
82
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
83
|
+
static getGlobalSensitiveFields() {
|
|
84
|
+
this.loadGlobalConfig();
|
|
85
|
+
return this.sensitiveFields;
|
|
86
|
+
}
|
|
87
|
+
/** Check if a field name indicates sensitive data (global config). */
|
|
56
88
|
static isSensitiveField(key) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (lowerKey.includes(pattern.toLowerCase())) {
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
89
|
+
this.loadGlobalConfig();
|
|
90
|
+
return this.keyIsSensitive(key, this.sensitiveFields, this.neverMaskFields, this.substringMinLength);
|
|
91
|
+
}
|
|
92
|
+
static resolveOptionalConfigPath(configPath) {
|
|
93
|
+
const resolved = path.isAbsolute(configPath)
|
|
94
|
+
? configPath
|
|
95
|
+
: path.resolve(process.cwd(), configPath);
|
|
96
|
+
if (!fs.existsSync(resolved) || !fs.statSync(resolved).isFile()) {
|
|
97
|
+
return null;
|
|
69
98
|
}
|
|
70
|
-
return
|
|
99
|
+
return resolved;
|
|
71
100
|
}
|
|
72
|
-
|
|
73
|
-
* Mask sensitive data in objects, arrays, or primitives
|
|
74
|
-
* Returns a masked copy without modifying the original
|
|
75
|
-
*/
|
|
76
|
-
static maskSensitiveData(data) {
|
|
77
|
-
// Handle null and undefined
|
|
101
|
+
static maskRecursive(data, isSensitive) {
|
|
78
102
|
if (data === null || data === undefined) {
|
|
79
103
|
return data;
|
|
80
104
|
}
|
|
81
|
-
// Handle primitives (string, number, boolean)
|
|
82
105
|
if (typeof data !== "object") {
|
|
83
106
|
return data;
|
|
84
107
|
}
|
|
85
|
-
// Handle arrays
|
|
86
108
|
if (Array.isArray(data)) {
|
|
87
|
-
return data.map((item) => this.
|
|
109
|
+
return data.map((item) => this.maskRecursive(item, isSensitive));
|
|
88
110
|
}
|
|
89
|
-
// Handle objects
|
|
90
111
|
const masked = {};
|
|
91
112
|
for (const [key, value] of Object.entries(data)) {
|
|
92
|
-
if (
|
|
93
|
-
// Mask sensitive field
|
|
113
|
+
if (isSensitive(key)) {
|
|
94
114
|
masked[key] = this.MASKED_VALUE;
|
|
95
115
|
}
|
|
96
116
|
else if (typeof value === "object" && value !== null) {
|
|
97
|
-
|
|
98
|
-
masked[key] = this.maskSensitiveData(value);
|
|
117
|
+
masked[key] = this.maskRecursive(value, isSensitive);
|
|
99
118
|
}
|
|
100
119
|
else {
|
|
101
|
-
// Keep non-sensitive value as-is
|
|
102
120
|
masked[key] = value;
|
|
103
121
|
}
|
|
104
122
|
}
|
|
105
123
|
return masked;
|
|
106
124
|
}
|
|
107
125
|
/**
|
|
108
|
-
* Mask
|
|
109
|
-
*
|
|
110
|
-
|
|
111
|
-
|
|
126
|
+
* Mask sensitive data in objects, arrays, or primitives.
|
|
127
|
+
* Returns a masked copy without modifying the original.
|
|
128
|
+
*/
|
|
129
|
+
static maskSensitiveData(data, options) {
|
|
130
|
+
if (options?.configPath) {
|
|
131
|
+
const resolved = this.resolveOptionalConfigPath(options.configPath);
|
|
132
|
+
if (!resolved) {
|
|
133
|
+
return this.maskSensitiveData(data);
|
|
134
|
+
}
|
|
135
|
+
const cfg = (0, sensitive_fields_loader_1.loadSensitiveFieldsConfigDict)(resolved);
|
|
136
|
+
const sens = (0, sensitive_fields_loader_1.buildMergedSensitiveTokens)(cfg);
|
|
137
|
+
const never = (0, sensitive_fields_loader_1.neverMaskFieldsFromCfg)(cfg);
|
|
138
|
+
const substrMin = (0, sensitive_fields_loader_1.substringMinLengthFromCfg)(cfg);
|
|
139
|
+
const isSens = (k) => this.keyIsSensitive(k, sens, never, substrMin);
|
|
140
|
+
return this.maskRecursive(data, isSens);
|
|
141
|
+
}
|
|
142
|
+
this.loadGlobalConfig();
|
|
143
|
+
const isSens = (k) => this.keyIsSensitive(k, this.sensitiveFields, this.neverMaskFields, this.substringMinLength);
|
|
144
|
+
return this.maskRecursive(data, isSens);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Mask specific value (useful for masking individual strings).
|
|
112
148
|
*/
|
|
113
149
|
static maskValue(value, showFirst = 0, showLast = 0) {
|
|
114
150
|
if (!value || value.length <= showFirst + showLast) {
|
|
115
151
|
return this.MASKED_VALUE;
|
|
116
152
|
}
|
|
117
|
-
const first = value.substring(0, showFirst);
|
|
118
|
-
const last = value.substring(value.length - showLast);
|
|
119
|
-
const
|
|
153
|
+
const first = showFirst > 0 ? value.substring(0, showFirst) : "";
|
|
154
|
+
const last = showLast > 0 ? value.substring(value.length - showLast) : "";
|
|
155
|
+
const maskedLength = Math.max(8, value.length - showFirst - showLast);
|
|
156
|
+
const masked = "*".repeat(maskedLength);
|
|
120
157
|
return `${first}${masked}${last}`;
|
|
121
158
|
}
|
|
122
|
-
/**
|
|
123
|
-
* Check if data contains sensitive information
|
|
124
|
-
*/
|
|
159
|
+
/** Check if data contains sensitive information (global config). */
|
|
125
160
|
static containsSensitiveData(data) {
|
|
126
161
|
if (data === null || data === undefined || typeof data !== "object") {
|
|
127
162
|
return false;
|
|
@@ -144,7 +179,8 @@ class DataMasker {
|
|
|
144
179
|
}
|
|
145
180
|
exports.DataMasker = DataMasker;
|
|
146
181
|
DataMasker.MASKED_VALUE = "***MASKED***";
|
|
147
|
-
DataMasker.
|
|
148
|
-
DataMasker.
|
|
149
|
-
DataMasker.
|
|
182
|
+
DataMasker.configLoaded = false;
|
|
183
|
+
DataMasker.sensitiveFields = new Set();
|
|
184
|
+
DataMasker.neverMaskFields = new Set();
|
|
185
|
+
DataMasker.substringMinLength = 4;
|
|
150
186
|
//# sourceMappingURL=data-masker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-masker.js","sourceRoot":"","sources":["../../src/utils/data-masker.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"data-masker.js","sourceRoot":"","sources":["../../src/utils/data-masker.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,uEAMmC;AAOnC,MAAa,UAAU;IASb,MAAM,CAAC,cAAc,CAC3B,GAAW,EACX,eAA4B,EAC5B,SAAsB,EACtB,SAAiB;QAEjB,MAAM,EAAE,GAAG,IAAA,4CAAkB,EAAC,GAAG,CAAC,CAAC;QACnC,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC;YACjC,IAAI,EAAE,CAAC,MAAM,IAAI,SAAS,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9C,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,gBAAgB;QAC7B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,IAAA,uDAA6B,EAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACnE,IAAI,CAAC,eAAe,GAAG,IAAA,oDAA0B,EAAC,GAAG,CAAC,CAAC;QACvD,IAAI,CAAC,eAAe,GAAG,IAAA,gDAAsB,EAAC,GAAG,CAAC,CAAC;QACnD,IAAI,CAAC,kBAAkB,GAAG,IAAA,mDAAyB,EAAC,GAAG,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,UAAmB;QACtC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE,CAAC;QACjC,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAEO,MAAM,CAAC,wBAAwB;QACrC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,sEAAsE;IACtE,MAAM,CAAC,gBAAgB,CAAC,GAAW;QACjC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,cAAc,CACxB,GAAG,EACH,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,kBAAkB,CACxB,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,yBAAyB,CAAC,UAAkB;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAC1C,CAAC,CAAC,UAAU;YACZ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAChE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,MAAM,CAAC,aAAa,CAC1B,IAAa,EACb,WAAmC;QAEnC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CACvC,IAA+B,CAChC,EAAE,CAAC;YACF,IAAI,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC;YAClC,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACvD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CACtB,IAAa,EACb,OAAkC;QAElC,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACpE,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC;YACD,MAAM,GAAG,GAAG,IAAA,uDAA6B,EAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,IAAA,oDAA0B,EAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAA,gDAAsB,EAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,IAAA,mDAAyB,EAAC,GAAG,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAC3B,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,CAAC,CAAS,EAAE,EAAE,CAC3B,IAAI,CAAC,cAAc,CACjB,CAAC,EACD,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,kBAAkB,CACxB,CAAC;QACJ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,KAAa,EACb,YAAoB,CAAC,EACrB,WAAmB,CAAC;QAEpB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,GAAG,QAAQ,EAAE,CAAC;YACnD,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,CAAC,EACD,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,QAAQ,CACpC,CAAC;QACF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAExC,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,oEAAoE;IACpE,MAAM,CAAC,qBAAqB,CAAC,IAAa;QACxC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CACvC,IAA+B,CAChC,EAAE,CAAC;YACF,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAChD,IAAI,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtC,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;;AA7LH,gCA8LC;AA7LyB,uBAAY,GAAG,cAAc,CAAC;AAEvC,uBAAY,GAAG,KAAK,CAAC;AACrB,0BAAe,GAAgB,IAAI,GAAG,EAAE,CAAC;AACzC,0BAAe,GAAgB,IAAI,GAAG,EAAE,CAAC;AACzC,6BAAkB,GAAG,CAAC,CAAC"}
|
|
@@ -1,67 +1,45 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
4
|
-
"
|
|
2
|
+
"mergeWithHardcodedDefaults": true,
|
|
3
|
+
"substringMinLength": 4,
|
|
4
|
+
"neverMaskFields": [
|
|
5
|
+
"success",
|
|
6
|
+
"key",
|
|
7
|
+
"message",
|
|
8
|
+
"status",
|
|
9
|
+
"error",
|
|
10
|
+
"hint",
|
|
11
|
+
"code",
|
|
12
|
+
"name",
|
|
13
|
+
"id"
|
|
14
|
+
],
|
|
15
|
+
"fields": {
|
|
5
16
|
"authentication": [
|
|
6
17
|
"password",
|
|
7
18
|
"passwd",
|
|
8
19
|
"pwd",
|
|
9
|
-
"secret",
|
|
10
20
|
"token",
|
|
11
|
-
"
|
|
21
|
+
"secret",
|
|
12
22
|
"auth",
|
|
13
|
-
"authorization"
|
|
14
|
-
"cookie",
|
|
15
|
-
"session",
|
|
16
|
-
"apiKey",
|
|
17
|
-
"accessToken",
|
|
18
|
-
"refreshToken"
|
|
23
|
+
"authorization"
|
|
19
24
|
],
|
|
20
25
|
"pii": [
|
|
21
|
-
"email",
|
|
22
|
-
"emailAddress",
|
|
23
|
-
"phone",
|
|
24
|
-
"phoneNumber",
|
|
25
|
-
"telephone",
|
|
26
|
-
"mobile",
|
|
27
|
-
"cellPhone",
|
|
28
26
|
"ssn",
|
|
29
|
-
"
|
|
30
|
-
"taxId",
|
|
31
|
-
"taxIdentification"
|
|
32
|
-
],
|
|
33
|
-
"financial": [
|
|
34
|
-
"creditCard",
|
|
35
|
-
"cc",
|
|
36
|
-
"cardNumber",
|
|
27
|
+
"creditcard",
|
|
37
28
|
"cvv",
|
|
38
|
-
"cvv2",
|
|
39
|
-
"cvc",
|
|
40
29
|
"pin",
|
|
41
|
-
"
|
|
42
|
-
"bankAccountNumber",
|
|
43
|
-
"routingNumber",
|
|
44
|
-
"iban",
|
|
45
|
-
"swift",
|
|
46
|
-
"accountNumber"
|
|
30
|
+
"otp"
|
|
47
31
|
],
|
|
48
32
|
"security": [
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
33
|
+
"apikey",
|
|
34
|
+
"accesstoken",
|
|
35
|
+
"refreshtoken",
|
|
36
|
+
"privatekey",
|
|
37
|
+
"secretkey",
|
|
38
|
+
"cookie",
|
|
39
|
+
"session",
|
|
40
|
+
"encryptionkey",
|
|
41
|
+
"encryptionKey"
|
|
55
42
|
]
|
|
56
43
|
},
|
|
57
|
-
"fieldPatterns": [
|
|
58
|
-
"password",
|
|
59
|
-
"secret",
|
|
60
|
-
"token",
|
|
61
|
-
"key",
|
|
62
|
-
"ssn",
|
|
63
|
-
"creditcard",
|
|
64
|
-
"bankaccount",
|
|
65
|
-
"accountnumber"
|
|
66
|
-
]
|
|
44
|
+
"fieldPatterns": []
|
|
67
45
|
}
|
|
@@ -1,22 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Sensitive fields configuration loader
|
|
3
|
-
*
|
|
2
|
+
* Sensitive fields configuration loader for ISO 27001 compliance.
|
|
3
|
+
* Aligns with miso-client Python `sensitive_fields_loader` / packaged JSON shape.
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
export declare function loadSensitiveFieldsConfig(customPath?: string): Set<string>;
|
|
17
|
-
export declare function getFieldPatterns(customPath?: string): string[];
|
|
5
|
+
/** Normalized field name (lowercase, no underscores or hyphens). */
|
|
6
|
+
export declare function normalizeFieldName(field: string): string;
|
|
7
|
+
/**
|
|
8
|
+
* Hardcoded sensitive tokens when JSON cannot be loaded or mergeWithHardcodedDefaults is true.
|
|
9
|
+
* Omits bare `key` and `cc` to reduce false positives (e.g. datasource `key`, `success`).
|
|
10
|
+
*/
|
|
11
|
+
export declare const HARDCODED_SENSITIVE_FIELDS: ReadonlySet<string>;
|
|
12
|
+
/**
|
|
13
|
+
* Load raw sensitive-fields JSON by priority: customPath, MISO_SENSITIVE_FIELDS_CONFIG, packaged default file, then bundled import.
|
|
14
|
+
*/
|
|
15
|
+
export declare function loadSensitiveFieldsConfigDict(customPath?: string): Record<string, unknown>;
|
|
18
16
|
/**
|
|
19
|
-
*
|
|
17
|
+
* Flatten `fields` or legacy `categories` from config into display names (not yet normalized).
|
|
20
18
|
*/
|
|
19
|
+
export declare function getSensitiveFieldNamesFromDict(cfg: Record<string, unknown>): string[];
|
|
20
|
+
export declare function neverMaskFieldsFromCfg(cfg: Record<string, unknown>): Set<string>;
|
|
21
|
+
export declare function substringMinLengthFromCfg(cfg: Record<string, unknown>): number;
|
|
22
|
+
export declare function mergeWithHardcodedDefaultsFromCfg(cfg: Record<string, unknown>): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Build merged normalized sensitive tokens (hardcoded + JSON fields + fieldPatterns).
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildMergedSensitiveTokens(cfg: Record<string, unknown>): Set<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Merged sensitive field tokens for the resolved config (used by DataMasker helpers).
|
|
29
|
+
*/
|
|
30
|
+
export declare function loadSensitiveFieldsConfig(customPath?: string): Set<string>;
|
|
31
|
+
export declare function getFieldPatterns(customPath?: string): string[];
|
|
21
32
|
export declare function getSensitiveFieldsArray(customPath?: string): string[];
|
|
22
33
|
//# sourceMappingURL=sensitive-fields.loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sensitive-fields.loader.d.ts","sourceRoot":"","sources":["../../src/utils/sensitive-fields.loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,
|
|
1
|
+
{"version":3,"file":"sensitive-fields.loader.d.ts","sourceRoot":"","sources":["../../src/utils/sensitive-fields.loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,WAAW,CAAC,MAAM,CAoBzD,CAAC;AAqCH;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BzB;AAcD;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,EAAE,CAgBV;AAED,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,GAAG,CAAC,MAAM,CAAC,CAUb;AAED,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,CASR;AAED,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,OAAO,CAET;AASD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,GAAG,CAAC,MAAM,CAAC,CAqBb;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAU1E;AAED,wBAAgB,gBAAgB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAW9D;AAED,wBAAgB,uBAAuB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAErE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Sensitive fields configuration loader
|
|
4
|
-
*
|
|
3
|
+
* Sensitive fields configuration loader for ISO 27001 compliance.
|
|
4
|
+
* Aligns with miso-client Python `sensitive_fields_loader` / packaged JSON shape.
|
|
5
5
|
*/
|
|
6
6
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
7
|
if (k2 === undefined) k2 = k;
|
|
@@ -40,178 +40,223 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
40
40
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
41
41
|
};
|
|
42
42
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.HARDCODED_SENSITIVE_FIELDS = void 0;
|
|
44
|
+
exports.normalizeFieldName = normalizeFieldName;
|
|
45
|
+
exports.loadSensitiveFieldsConfigDict = loadSensitiveFieldsConfigDict;
|
|
46
|
+
exports.getSensitiveFieldNamesFromDict = getSensitiveFieldNamesFromDict;
|
|
47
|
+
exports.neverMaskFieldsFromCfg = neverMaskFieldsFromCfg;
|
|
48
|
+
exports.substringMinLengthFromCfg = substringMinLengthFromCfg;
|
|
49
|
+
exports.mergeWithHardcodedDefaultsFromCfg = mergeWithHardcodedDefaultsFromCfg;
|
|
50
|
+
exports.buildMergedSensitiveTokens = buildMergedSensitiveTokens;
|
|
43
51
|
exports.loadSensitiveFieldsConfig = loadSensitiveFieldsConfig;
|
|
44
52
|
exports.getFieldPatterns = getFieldPatterns;
|
|
45
53
|
exports.getSensitiveFieldsArray = getSensitiveFieldsArray;
|
|
46
54
|
const fs = __importStar(require("fs"));
|
|
47
55
|
const path = __importStar(require("path"));
|
|
48
56
|
const sensitive_fields_config_json_1 = __importDefault(require("./sensitive-fields.config.json"));
|
|
49
|
-
/**
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
function getDefaultSensitiveFields() {
|
|
53
|
-
return new Set([
|
|
54
|
-
// Authentication & Authorization
|
|
55
|
-
"password",
|
|
56
|
-
"passwd",
|
|
57
|
-
"pwd",
|
|
58
|
-
"secret",
|
|
59
|
-
"token",
|
|
60
|
-
"key",
|
|
61
|
-
"auth",
|
|
62
|
-
"authorization",
|
|
63
|
-
"cookie",
|
|
64
|
-
"session",
|
|
65
|
-
"apikey",
|
|
66
|
-
"accesstoken",
|
|
67
|
-
"refreshtoken",
|
|
68
|
-
// PII (ISO 27001)
|
|
69
|
-
"email",
|
|
70
|
-
"emailaddress",
|
|
71
|
-
"phone",
|
|
72
|
-
"phonenumber",
|
|
73
|
-
"telephone",
|
|
74
|
-
"mobile",
|
|
75
|
-
"cellphone",
|
|
76
|
-
"ssn",
|
|
77
|
-
"socialsecuritynumber",
|
|
78
|
-
"taxid",
|
|
79
|
-
"taxidentification",
|
|
80
|
-
// Financial Information
|
|
81
|
-
"creditcard",
|
|
82
|
-
"cc",
|
|
83
|
-
"cardnumber",
|
|
84
|
-
"cvv",
|
|
85
|
-
"cvv2",
|
|
86
|
-
"cvc",
|
|
87
|
-
"pin",
|
|
88
|
-
"bankaccount",
|
|
89
|
-
"bankaccountnumber",
|
|
90
|
-
"routingnumber",
|
|
91
|
-
"iban",
|
|
92
|
-
"swift",
|
|
93
|
-
"accountnumber",
|
|
94
|
-
// Security & Sensitive Data
|
|
95
|
-
"otp",
|
|
96
|
-
"onetimepassword",
|
|
97
|
-
"privatekey",
|
|
98
|
-
"publickey",
|
|
99
|
-
"encryptionkey",
|
|
100
|
-
"decryptionkey",
|
|
101
|
-
]);
|
|
57
|
+
/** Normalized field name (lowercase, no underscores or hyphens). */
|
|
58
|
+
function normalizeFieldName(field) {
|
|
59
|
+
return field.toLowerCase().replace(/[_-]/g, "");
|
|
102
60
|
}
|
|
103
61
|
/**
|
|
104
|
-
*
|
|
62
|
+
* Hardcoded sensitive tokens when JSON cannot be loaded or mergeWithHardcodedDefaults is true.
|
|
63
|
+
* Omits bare `key` and `cc` to reduce false positives (e.g. datasource `key`, `success`).
|
|
105
64
|
*/
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
65
|
+
exports.HARDCODED_SENSITIVE_FIELDS = new Set([
|
|
66
|
+
"password",
|
|
67
|
+
"passwd",
|
|
68
|
+
"pwd",
|
|
69
|
+
"secret",
|
|
70
|
+
"token",
|
|
71
|
+
"auth",
|
|
72
|
+
"authorization",
|
|
73
|
+
"cookie",
|
|
74
|
+
"session",
|
|
75
|
+
"ssn",
|
|
76
|
+
"creditcard",
|
|
77
|
+
"cvv",
|
|
78
|
+
"pin",
|
|
79
|
+
"otp",
|
|
80
|
+
"apikey",
|
|
81
|
+
"accesstoken",
|
|
82
|
+
"refreshtoken",
|
|
83
|
+
"privatekey",
|
|
84
|
+
"secretkey",
|
|
85
|
+
]);
|
|
86
|
+
function isBrowserEnvironment() {
|
|
87
|
+
return (typeof globalThis !== "undefined" &&
|
|
88
|
+
"window" in globalThis &&
|
|
89
|
+
typeof globalThis.window !== "undefined");
|
|
123
90
|
}
|
|
124
|
-
function
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
return fieldsFromConfig(config);
|
|
91
|
+
function resolveConfigFilePath(customPath) {
|
|
92
|
+
if (customPath) {
|
|
93
|
+
return path.isAbsolute(customPath)
|
|
94
|
+
? customPath
|
|
95
|
+
: path.resolve(process.cwd(), customPath);
|
|
96
|
+
}
|
|
97
|
+
const envPath = process.env.MISO_SENSITIVE_FIELDS_CONFIG;
|
|
98
|
+
if (envPath) {
|
|
99
|
+
return path.isAbsolute(envPath)
|
|
100
|
+
? envPath
|
|
101
|
+
: path.resolve(process.cwd(), envPath);
|
|
102
|
+
}
|
|
103
|
+
return path.join(__dirname, "sensitive-fields.config.json");
|
|
138
104
|
}
|
|
139
|
-
function
|
|
105
|
+
function readJsonFile(filePath) {
|
|
140
106
|
try {
|
|
141
|
-
const
|
|
142
|
-
|
|
107
|
+
const raw = fs.readFileSync(filePath, "utf8");
|
|
108
|
+
const parsed = JSON.parse(raw);
|
|
109
|
+
return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed)
|
|
110
|
+
? parsed
|
|
111
|
+
: {};
|
|
143
112
|
}
|
|
144
113
|
catch {
|
|
145
|
-
|
|
146
|
-
return loadConfigFromPath(configPath);
|
|
114
|
+
return {};
|
|
147
115
|
}
|
|
148
116
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
117
|
+
/**
|
|
118
|
+
* Load raw sensitive-fields JSON by priority: customPath, MISO_SENSITIVE_FIELDS_CONFIG, packaged default file, then bundled import.
|
|
119
|
+
*/
|
|
120
|
+
function loadSensitiveFieldsConfigDict(customPath) {
|
|
121
|
+
if (isBrowserEnvironment()) {
|
|
122
|
+
return {};
|
|
123
|
+
}
|
|
124
|
+
if (typeof process === "undefined" || !process.env) {
|
|
125
|
+
return {};
|
|
154
126
|
}
|
|
155
|
-
if (typeof process === "undefined" || !process.env)
|
|
156
|
-
return getDefaultSensitiveFields();
|
|
157
127
|
try {
|
|
158
|
-
const
|
|
159
|
-
if (
|
|
160
|
-
const
|
|
161
|
-
if (
|
|
162
|
-
return
|
|
128
|
+
const filePath = resolveConfigFilePath(customPath);
|
|
129
|
+
if (filePath && fs.existsSync(filePath)) {
|
|
130
|
+
const fromDisk = readJsonFile(filePath);
|
|
131
|
+
if (Object.keys(fromDisk).length > 0) {
|
|
132
|
+
return fromDisk;
|
|
133
|
+
}
|
|
163
134
|
}
|
|
164
|
-
const moduleResult = loadConfigFromModule();
|
|
165
|
-
return moduleResult ?? getDefaultSensitiveFields();
|
|
166
135
|
}
|
|
167
136
|
catch {
|
|
168
|
-
|
|
137
|
+
/* fall through */
|
|
169
138
|
}
|
|
170
|
-
}
|
|
171
|
-
function loadFieldPatternsFromPath(configPath) {
|
|
172
|
-
if (!fs.existsSync(configPath))
|
|
173
|
-
return null;
|
|
174
|
-
const configContent = fs.readFileSync(configPath, "utf8");
|
|
175
|
-
const config = JSON.parse(configContent);
|
|
176
|
-
return config.fieldPatterns || getDefaultFieldPatterns();
|
|
177
|
-
}
|
|
178
|
-
function loadFieldPatternsFromModule() {
|
|
179
139
|
try {
|
|
180
|
-
const
|
|
181
|
-
|
|
140
|
+
const bundled = sensitive_fields_config_json_1.default;
|
|
141
|
+
if (bundled && typeof bundled === "object") {
|
|
142
|
+
return bundled;
|
|
143
|
+
}
|
|
182
144
|
}
|
|
183
145
|
catch {
|
|
184
|
-
|
|
185
|
-
return loadFieldPatternsFromPath(configPath);
|
|
146
|
+
/* fall through */
|
|
186
147
|
}
|
|
148
|
+
return {};
|
|
187
149
|
}
|
|
188
|
-
function
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
150
|
+
function uniqueFieldsPreservingOrder(fields) {
|
|
151
|
+
const seen = new Set();
|
|
152
|
+
const out = [];
|
|
153
|
+
for (const field of fields) {
|
|
154
|
+
const k = field.toLowerCase();
|
|
155
|
+
if (seen.has(k))
|
|
156
|
+
continue;
|
|
157
|
+
seen.add(k);
|
|
158
|
+
out.push(field);
|
|
193
159
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
160
|
+
return out;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Flatten `fields` or legacy `categories` from config into display names (not yet normalized).
|
|
164
|
+
*/
|
|
165
|
+
function getSensitiveFieldNamesFromDict(cfg) {
|
|
166
|
+
const bucket = (cfg.fields ?? cfg.categories);
|
|
167
|
+
if (!bucket || typeof bucket !== "object" || Array.isArray(bucket)) {
|
|
168
|
+
return [];
|
|
169
|
+
}
|
|
170
|
+
const all = [];
|
|
171
|
+
for (const v of Object.values(bucket)) {
|
|
172
|
+
if (Array.isArray(v)) {
|
|
173
|
+
for (const item of v) {
|
|
174
|
+
if (typeof item === "string" && item.trim()) {
|
|
175
|
+
all.push(item);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return uniqueFieldsPreservingOrder(all);
|
|
181
|
+
}
|
|
182
|
+
function neverMaskFieldsFromCfg(cfg) {
|
|
183
|
+
const raw = cfg.neverMaskFields;
|
|
184
|
+
const out = new Set();
|
|
185
|
+
if (!Array.isArray(raw))
|
|
186
|
+
return out;
|
|
187
|
+
for (const x of raw) {
|
|
188
|
+
if (typeof x === "string" && x.trim()) {
|
|
189
|
+
out.add(normalizeFieldName(x));
|
|
202
190
|
}
|
|
203
|
-
|
|
204
|
-
|
|
191
|
+
}
|
|
192
|
+
return out;
|
|
193
|
+
}
|
|
194
|
+
function substringMinLengthFromCfg(cfg) {
|
|
195
|
+
const sm = cfg.substringMinLength ?? 4;
|
|
196
|
+
try {
|
|
197
|
+
const n = Number(sm);
|
|
198
|
+
if (!Number.isFinite(n))
|
|
199
|
+
return 4;
|
|
200
|
+
return Math.max(1, Math.min(Math.trunc(n), 64));
|
|
205
201
|
}
|
|
206
202
|
catch {
|
|
207
|
-
return
|
|
203
|
+
return 4;
|
|
208
204
|
}
|
|
209
205
|
}
|
|
206
|
+
function mergeWithHardcodedDefaultsFromCfg(cfg) {
|
|
207
|
+
return cfg.mergeWithHardcodedDefaults !== false;
|
|
208
|
+
}
|
|
209
|
+
function fieldPatternsFromCfg(cfg) {
|
|
210
|
+
const p = cfg.fieldPatterns;
|
|
211
|
+
return Array.isArray(p)
|
|
212
|
+
? p.filter((x) => typeof x === "string" && x.length > 0)
|
|
213
|
+
: [];
|
|
214
|
+
}
|
|
210
215
|
/**
|
|
211
|
-
*
|
|
216
|
+
* Build merged normalized sensitive tokens (hardcoded + JSON fields + fieldPatterns).
|
|
212
217
|
*/
|
|
218
|
+
function buildMergedSensitiveTokens(cfg) {
|
|
219
|
+
const merge = mergeWithHardcodedDefaultsFromCfg(cfg);
|
|
220
|
+
const merged = new Set();
|
|
221
|
+
if (merge) {
|
|
222
|
+
exports.HARDCODED_SENSITIVE_FIELDS.forEach((f) => merged.add(f));
|
|
223
|
+
}
|
|
224
|
+
for (const field of getSensitiveFieldNamesFromDict(cfg)) {
|
|
225
|
+
merged.add(normalizeFieldName(field));
|
|
226
|
+
}
|
|
227
|
+
for (const pattern of fieldPatternsFromCfg(cfg)) {
|
|
228
|
+
merged.add(normalizeFieldName(pattern));
|
|
229
|
+
}
|
|
230
|
+
if (!merge && merged.size === 0) {
|
|
231
|
+
exports.HARDCODED_SENSITIVE_FIELDS.forEach((f) => merged.add(f));
|
|
232
|
+
}
|
|
233
|
+
return merged;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Merged sensitive field tokens for the resolved config (used by DataMasker helpers).
|
|
237
|
+
*/
|
|
238
|
+
function loadSensitiveFieldsConfig(customPath) {
|
|
239
|
+
if (isBrowserEnvironment()) {
|
|
240
|
+
return new Set(exports.HARDCODED_SENSITIVE_FIELDS);
|
|
241
|
+
}
|
|
242
|
+
if (typeof process === "undefined" || !process.env) {
|
|
243
|
+
return new Set(exports.HARDCODED_SENSITIVE_FIELDS);
|
|
244
|
+
}
|
|
245
|
+
const cfg = loadSensitiveFieldsConfigDict(customPath);
|
|
246
|
+
return buildMergedSensitiveTokens(cfg);
|
|
247
|
+
}
|
|
248
|
+
function getFieldPatterns(customPath) {
|
|
249
|
+
if (isBrowserEnvironment()) {
|
|
250
|
+
return [];
|
|
251
|
+
}
|
|
252
|
+
if (typeof process === "undefined" || !process.env) {
|
|
253
|
+
return [];
|
|
254
|
+
}
|
|
255
|
+
const cfg = loadSensitiveFieldsConfigDict(customPath);
|
|
256
|
+
const fromFile = fieldPatternsFromCfg(cfg);
|
|
257
|
+
return fromFile.length > 0 ? fromFile : [];
|
|
258
|
+
}
|
|
213
259
|
function getSensitiveFieldsArray(customPath) {
|
|
214
|
-
|
|
215
|
-
return Array.from(fieldsSet);
|
|
260
|
+
return Array.from(loadSensitiveFieldsConfig(customPath));
|
|
216
261
|
}
|
|
217
262
|
//# sourceMappingURL=sensitive-fields.loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sensitive-fields.loader.js","sourceRoot":"","sources":["../../src/utils/sensitive-fields.loader.ts"],"names":[],"mappings":";AAAA;;;GAGG
|
|
1
|
+
{"version":3,"file":"sensitive-fields.loader.js","sourceRoot":"","sources":["../../src/utils/sensitive-fields.loader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED