@openhealth/oht-custom-parser-lib 0.2.14 → 0.2.16
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/dist/service/reportCreator.service.d.ts +1 -1
- package/dist/service/reportCreator.service.js +13 -10
- package/dist/service/reportCreator.service.js.map +1 -1
- package/dist/types/custom-parser.types.js +4 -3
- package/dist/types/custom-parser.types.js.map +1 -1
- package/dist/util-ts/pinoLogger.js +27 -8
- package/dist/util-ts/pinoLogger.js.map +1 -1
- package/dist/util-ts/sensitivePaths.d.ts +11 -0
- package/dist/util-ts/sensitivePaths.js +156 -0
- package/dist/util-ts/sensitivePaths.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DataImportFileUpload } from
|
|
1
|
+
import { DataImportFileUpload } from '../types/oht.types';
|
|
2
2
|
declare function makeApiCallWithRetry(method: string, url: string, data: any, ohtCoreApiKey: string | undefined, retries?: number): Promise<import("axios").AxiosResponse<any, any>>;
|
|
3
3
|
declare function parseErrorObj(resp: any): {
|
|
4
4
|
message: any;
|
|
@@ -35,7 +35,7 @@ const limiter = new bottleneck_1.default({
|
|
|
35
35
|
const makeApiCall = limiter.wrap(async function (method, url, data, ohtCoreApiKey) {
|
|
36
36
|
const authHeader = `Basic ${ohtCoreApiKey}`;
|
|
37
37
|
const headers = {
|
|
38
|
-
|
|
38
|
+
Authorization: authHeader,
|
|
39
39
|
};
|
|
40
40
|
return (0, axios_1.default)({
|
|
41
41
|
method,
|
|
@@ -63,7 +63,7 @@ function parseErrorObj(resp) {
|
|
|
63
63
|
let error = {
|
|
64
64
|
message: resp.message, // Basic error message
|
|
65
65
|
// stack: resp.stack, // Stack trace for debugging
|
|
66
|
-
config: resp.config // Axios request config that led to the error
|
|
66
|
+
config: resp.config, // Axios request config that led to the error
|
|
67
67
|
};
|
|
68
68
|
if (resp.response) {
|
|
69
69
|
error = {
|
|
@@ -77,15 +77,15 @@ function parseErrorObj(resp) {
|
|
|
77
77
|
error = {
|
|
78
78
|
...error,
|
|
79
79
|
// @ts-expect-error: adding request to error message
|
|
80
|
-
error: resp.request
|
|
80
|
+
error: resp.request,
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
83
|
return error;
|
|
84
84
|
}
|
|
85
85
|
async function postDataImportFileUploadToCore(dataImportFileUpload, rejectedStatus, rejectReason, isReportParsedCorrectly, filename, ohtCoreApiKey) {
|
|
86
|
-
let status = isReportParsedCorrectly
|
|
87
|
-
oht_types_1.DataImportFileUploadStatus.PROCESSED
|
|
88
|
-
oht_types_1.DataImportFileUploadStatus.FOR_REVIEW;
|
|
86
|
+
let status = isReportParsedCorrectly
|
|
87
|
+
? oht_types_1.DataImportFileUploadStatus.PROCESSED
|
|
88
|
+
: oht_types_1.DataImportFileUploadStatus.FOR_REVIEW;
|
|
89
89
|
const patchStatus = rejectedStatus ?? status;
|
|
90
90
|
const ohtCoreUpdateFileUploadUrl = `${OHT_CORE_URL}/v1/file-uploads/${dataImportFileUpload.id}/update`;
|
|
91
91
|
const ohtCoreFileUploadUrl = `${OHT_CORE_URL}/v1/file-uploads/${dataImportFileUpload.id}`;
|
|
@@ -97,10 +97,10 @@ async function postDataImportFileUploadToCore(dataImportFileUpload, rejectedStat
|
|
|
97
97
|
rejectReason,
|
|
98
98
|
digitalization: {
|
|
99
99
|
...dataImportFileUpload.digitalization,
|
|
100
|
-
pipelineStep: oht_types_1.PipelineStep.SENDING_RESULTS
|
|
100
|
+
pipelineStep: oht_types_1.PipelineStep.SENDING_RESULTS,
|
|
101
101
|
},
|
|
102
102
|
}, ohtCoreApiKey);
|
|
103
|
-
logger.info({ response: initialResponse }, `Resp: PATCH status: ${patchStatus} ${ohtCoreFileUploadUrl}, filename: ${filename}`);
|
|
103
|
+
logger.info({ response: initialResponse.data }, `Resp: PATCH status: ${patchStatus} ${ohtCoreFileUploadUrl}, filename: ${filename}`);
|
|
104
104
|
if (isReportParsedCorrectly && rejectedStatus === undefined) {
|
|
105
105
|
if (dataImportFileUpload?.labOrderId?.length > 0) {
|
|
106
106
|
// deprecate any previous fileUpload with same labOrderId and update current to READY
|
|
@@ -108,13 +108,16 @@ async function postDataImportFileUploadToCore(dataImportFileUpload, rejectedStat
|
|
|
108
108
|
return null;
|
|
109
109
|
}
|
|
110
110
|
else {
|
|
111
|
-
return await (0, auxiliaryFunctions_service_1.postFileUploadSetStatus)({
|
|
111
|
+
return await (0, auxiliaryFunctions_service_1.postFileUploadSetStatus)({
|
|
112
|
+
status: oht_types_1.DataImportFileUploadStatus.READY,
|
|
113
|
+
digitalization: { status: 'DONE', lastUpdated: dayjs_1.default.utc() },
|
|
114
|
+
}, dataImportFileUpload.id, filename, ohtCoreApiKey);
|
|
112
115
|
}
|
|
113
116
|
}
|
|
114
117
|
logger.warn({
|
|
115
118
|
isReportParsedCorrectly,
|
|
116
119
|
rejectedStatus,
|
|
117
|
-
initialResponse
|
|
120
|
+
initialResponse: initialResponse,
|
|
118
121
|
}, `Report not parsed correctly fileUploadID ${dataImportFileUpload.id}, filename: ${filename}`);
|
|
119
122
|
return initialResponse?.data;
|
|
120
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportCreator.service.js","sourceRoot":"","sources":["../../service/reportCreator.service.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"reportCreator.service.js","sourceRoot":"","sources":["../../service/reportCreator.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,9 +24,10 @@ exports.unitSynonyms = {
|
|
|
24
24
|
'mcg/dl': 'µg/dL',
|
|
25
25
|
'µui/ml': 'µIU/mL',
|
|
26
26
|
'tera/l': '10^6/µL',
|
|
27
|
-
'10^3/µl': '
|
|
28
|
-
'10^3 µl': '
|
|
27
|
+
'10^3/µl': '1000/µL',
|
|
28
|
+
'10^3 µl': '1000/µL',
|
|
29
29
|
'mg/gcreatinina': 'mg/g(Crea)',
|
|
30
|
-
'mg/g creatinina': 'mg/g(Crea)'
|
|
30
|
+
'mg/g creatinina': 'mg/g(Crea)',
|
|
31
|
+
'10^3 /µL': '1000/µL',
|
|
31
32
|
};
|
|
32
33
|
//# sourceMappingURL=custom-parser.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-parser.types.js","sourceRoot":"","sources":["../../types/custom-parser.types.ts"],"names":[],"mappings":";;;AAIa,QAAA,YAAY,GAA2B;IAClD,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,aAAa;IAC3B,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,QAAQ;IAClB,eAAe,EAAE,eAAe;IAChC,QAAQ,EAAE,eAAe;IACzB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,MAAM;IACV,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"custom-parser.types.js","sourceRoot":"","sources":["../../types/custom-parser.types.ts"],"names":[],"mappings":";;;AAIa,QAAA,YAAY,GAA2B;IAClD,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,aAAa;IAC3B,IAAI,EAAE,KAAK;IACX,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,SAAS;IACrB,SAAS,EAAE,QAAQ;IACnB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,QAAQ;IAClB,eAAe,EAAE,eAAe;IAChC,QAAQ,EAAE,eAAe;IACzB,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,MAAM;IACV,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,MAAM;IACb,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,SAAS;IACpB,gBAAgB,EAAE,YAAY;IAC9B,iBAAiB,EAAE,YAAY;IAC/B,UAAU,EAAE,SAAS;CACtB,CAAC"}
|
|
@@ -4,16 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const pino_1 = __importDefault(require("pino"));
|
|
7
|
+
const sensitivePaths_1 = require("./sensitivePaths");
|
|
7
8
|
// Define the severity lookup object
|
|
8
9
|
const SeverityLookup = {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
default: 'DEFAULT',
|
|
11
|
+
silly: 'DEFAULT',
|
|
12
|
+
verbose: 'DEBUG',
|
|
13
|
+
debug: 'DEBUG',
|
|
14
|
+
http: 'notice',
|
|
15
|
+
info: 'INFO',
|
|
16
|
+
warn: 'WARNING',
|
|
17
|
+
error: 'ERROR',
|
|
17
18
|
};
|
|
18
19
|
// Define the default Pino configuration
|
|
19
20
|
const defaultPinoConfig = {
|
|
@@ -26,6 +27,24 @@ const defaultPinoConfig = {
|
|
|
26
27
|
serializers: {
|
|
27
28
|
error: pino_1.default.stdSerializers.err, // Serialize errors correctly
|
|
28
29
|
},
|
|
30
|
+
redact: {
|
|
31
|
+
paths: (0, sensitivePaths_1.getSensitivePaths)(),
|
|
32
|
+
censor: '[REDACTED]',
|
|
33
|
+
},
|
|
34
|
+
hooks: {
|
|
35
|
+
logMethod(args, method) {
|
|
36
|
+
try {
|
|
37
|
+
if (args.length > 0 && typeof args[0] === 'object' && args[0] !== null) {
|
|
38
|
+
const sanitized = (0, sensitivePaths_1.removeObjSensitiveFields)(args[0]);
|
|
39
|
+
args[0] = sanitized;
|
|
40
|
+
}
|
|
41
|
+
method.apply(this, args);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
method.apply(this, args); // fallback: just log the original args
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
29
48
|
};
|
|
30
49
|
// Export a function that creates a Pino logger instance with the provided configuration overrides
|
|
31
50
|
exports.default = (pinoConfigOverrides = {}) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pinoLogger.js","sourceRoot":"","sources":["../../util-ts/pinoLogger.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;
|
|
1
|
+
{"version":3,"file":"pinoLogger.js","sourceRoot":"","sources":["../../util-ts/pinoLogger.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AACxB,qDAA+E;AAO/E,oCAAoC;AACpC,MAAM,cAAc,GAAuB;IACzC,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,wCAAwC;AACxC,MAAM,iBAAiB,GAAG;IACxB,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE;QACV,KAAK,CAAC,KAAsB,EAAE,MAAW;YACvC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QACzE,CAAC;KACF;IACD,WAAW,EAAE;QACX,KAAK,EAAE,cAAI,CAAC,cAAc,CAAC,GAAG,EAAE,6BAA6B;KAC9D;IACD,MAAM,EAAE;QACN,KAAK,EAAE,IAAA,kCAAiB,GAAE;QAC1B,MAAM,EAAE,YAAY;KACrB;IACD,KAAK,EAAE;QACL,SAAS,CAAC,IAA4B,EAAE,MAAgB;YACtD,IAAI,CAAC;gBACH,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBACvE,MAAM,SAAS,GAAG,IAAA,yCAAwB,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpD,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;gBACtB,CAAC;gBACD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,uCAAuC;YACnE,CAAC;QACH,CAAC;KACF;CACF,CAAC;AAEF,kGAAkG;AAClG,kBAAe,CAAC,sBAA2B,EAAE,EAAe,EAAE;IAC5D,OAAO,IAAA,cAAI,EAAC,EAAE,GAAG,iBAAiB,EAAE,GAAG,mBAAmB,EAAE,CAAC,CAAC;AAChE,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns dot-notated paths of sensitive fields for use with Pino's `redact.paths`.
|
|
3
|
+
* Combines prefixes and keys to identify data to be redacted from logs.
|
|
4
|
+
*/
|
|
5
|
+
declare function getSensitivePaths(): string[];
|
|
6
|
+
/**
|
|
7
|
+
* Recursively removes sensitive fields from an object based on `sensitiveKeys`, at any depth.
|
|
8
|
+
* If a value is a stringified object, it will be parsed, sanitized recursively, and re-stringified.
|
|
9
|
+
*/
|
|
10
|
+
declare const removeObjSensitiveFields: (input: object | string) => object | string;
|
|
11
|
+
export { removeObjSensitiveFields, getSensitivePaths };
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Utility to provide an array of sensitive/prohibited paths for logging redaction
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.removeObjSensitiveFields = void 0;
|
|
5
|
+
exports.getSensitivePaths = getSensitivePaths;
|
|
6
|
+
const sensitivePrefixes = [
|
|
7
|
+
'',
|
|
8
|
+
'jsonPayload',
|
|
9
|
+
'jsonPayload.data',
|
|
10
|
+
'jsonPayload.response',
|
|
11
|
+
'jsonPayload.resp',
|
|
12
|
+
'jsonPayload.resp.request',
|
|
13
|
+
'initialResponse.config',
|
|
14
|
+
'initialResponse.headers',
|
|
15
|
+
'initialResponse.data',
|
|
16
|
+
'initialResponse.data.patientInfo',
|
|
17
|
+
'initialResponse.patientInfo',
|
|
18
|
+
'initialResponse.config',
|
|
19
|
+
'initialResponse.config.data',
|
|
20
|
+
'initialResponse',
|
|
21
|
+
'response.config',
|
|
22
|
+
'response.headers',
|
|
23
|
+
'response.data',
|
|
24
|
+
'response.data.patientInfo',
|
|
25
|
+
'response.documentHistory',
|
|
26
|
+
'response.patientInfo',
|
|
27
|
+
'response.config.data',
|
|
28
|
+
'response.config.data.patientInfo',
|
|
29
|
+
'response',
|
|
30
|
+
'resp',
|
|
31
|
+
'resp.config',
|
|
32
|
+
'resp.config.data',
|
|
33
|
+
'resp.config.data.patientInfo',
|
|
34
|
+
'resp.headers',
|
|
35
|
+
'resp.data',
|
|
36
|
+
'resp.data.patientInfo',
|
|
37
|
+
'resp.patientInfo',
|
|
38
|
+
'config',
|
|
39
|
+
'config.data',
|
|
40
|
+
'config.data.patientInfo',
|
|
41
|
+
'response',
|
|
42
|
+
'patient.patientInfo',
|
|
43
|
+
'response.headers',
|
|
44
|
+
'reportData',
|
|
45
|
+
'reportData.participant',
|
|
46
|
+
'participant',
|
|
47
|
+
'patient',
|
|
48
|
+
'patientInfo',
|
|
49
|
+
'error.config',
|
|
50
|
+
'error.config.data'
|
|
51
|
+
];
|
|
52
|
+
const sensitiveKeys = [
|
|
53
|
+
// Personal Info
|
|
54
|
+
'cpf',
|
|
55
|
+
'extracted_cpf',
|
|
56
|
+
'birthdate',
|
|
57
|
+
'birthDate',
|
|
58
|
+
'firstName',
|
|
59
|
+
'lastName',
|
|
60
|
+
'socialName',
|
|
61
|
+
'fullName',
|
|
62
|
+
'email',
|
|
63
|
+
'phone',
|
|
64
|
+
'address',
|
|
65
|
+
'sex',
|
|
66
|
+
'gender',
|
|
67
|
+
// Document Info
|
|
68
|
+
'filename',
|
|
69
|
+
'documentFingerprint',
|
|
70
|
+
'reportExternalId',
|
|
71
|
+
'externalPatientId',
|
|
72
|
+
'description',
|
|
73
|
+
// User Info
|
|
74
|
+
'userId',
|
|
75
|
+
'uploadedByUserId',
|
|
76
|
+
'lastProcessedByUserId',
|
|
77
|
+
'assignedTo',
|
|
78
|
+
'clickupId',
|
|
79
|
+
'labOrderId',
|
|
80
|
+
'labId',
|
|
81
|
+
'labProfileId',
|
|
82
|
+
// Authentication & Security
|
|
83
|
+
'apiKey',
|
|
84
|
+
'authorization',
|
|
85
|
+
'token',
|
|
86
|
+
'password',
|
|
87
|
+
'headers',
|
|
88
|
+
'_header',
|
|
89
|
+
// Healthcare Professional Info
|
|
90
|
+
'doctor',
|
|
91
|
+
'medico',
|
|
92
|
+
'crm',
|
|
93
|
+
// General IDs
|
|
94
|
+
'id',
|
|
95
|
+
'externalId',
|
|
96
|
+
// Document Hisotory
|
|
97
|
+
'action',
|
|
98
|
+
];
|
|
99
|
+
/**
|
|
100
|
+
* Returns dot-notated paths of sensitive fields for use with Pino's `redact.paths`.
|
|
101
|
+
* Combines prefixes and keys to identify data to be redacted from logs.
|
|
102
|
+
*/
|
|
103
|
+
function getSensitivePaths() {
|
|
104
|
+
return sensitivePrefixes.flatMap(prefix => sensitiveKeys.map(key => (prefix ? `${prefix}.${key}` : key)));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Recursively removes sensitive fields from an object based on `sensitiveKeys`, at any depth.
|
|
108
|
+
* If a value is a stringified object, it will be parsed, sanitized recursively, and re-stringified.
|
|
109
|
+
*/
|
|
110
|
+
const removeObjSensitiveFields = (input) => {
|
|
111
|
+
if (input == null)
|
|
112
|
+
return input;
|
|
113
|
+
const isPlainObject = (val) => Object.prototype.toString.call(val) === '[object Object]';
|
|
114
|
+
const sanitize = (value) => {
|
|
115
|
+
if (Array.isArray(value)) {
|
|
116
|
+
return value.map(sanitize);
|
|
117
|
+
}
|
|
118
|
+
if (isPlainObject(value)) {
|
|
119
|
+
return Object.fromEntries(Object.entries(value).map(([key, val]) => {
|
|
120
|
+
if (sensitiveKeys.includes(key)) {
|
|
121
|
+
return [key, '[REDACTED]'];
|
|
122
|
+
}
|
|
123
|
+
if (typeof val === 'string') {
|
|
124
|
+
try {
|
|
125
|
+
const parsed = JSON.parse(val);
|
|
126
|
+
if (typeof parsed === 'object' && parsed !== null) {
|
|
127
|
+
return [key, JSON.stringify(sanitize(parsed))];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// not a JSON string
|
|
132
|
+
}
|
|
133
|
+
return [key, val];
|
|
134
|
+
}
|
|
135
|
+
if (isPlainObject(val) || Array.isArray(val)) {
|
|
136
|
+
return [key, sanitize(val)];
|
|
137
|
+
}
|
|
138
|
+
return [key, val];
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
return value;
|
|
142
|
+
};
|
|
143
|
+
if (typeof input === 'string') {
|
|
144
|
+
try {
|
|
145
|
+
const parsed = JSON.parse(input);
|
|
146
|
+
const sanitized = sanitize(parsed);
|
|
147
|
+
return JSON.stringify(sanitized);
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return input;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return sanitize(input);
|
|
154
|
+
};
|
|
155
|
+
exports.removeObjSensitiveFields = removeObjSensitiveFields;
|
|
156
|
+
//# sourceMappingURL=sensitivePaths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sensitivePaths.js","sourceRoot":"","sources":["../../util-ts/sensitivePaths.ts"],"names":[],"mappings":"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"}
|