@brizz/sdk 0.1.0-alpha.6
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/LICENSE +27 -0
- package/README.md +76 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/config.d.ts +17 -0
- package/dist/internal/config.d.ts.map +1 -0
- package/dist/internal/config.js +90 -0
- package/dist/internal/config.js.map +1 -0
- package/dist/internal/instrumentation/auto-init.d.ts +3 -0
- package/dist/internal/instrumentation/auto-init.d.ts.map +1 -0
- package/dist/internal/instrumentation/auto-init.js +82 -0
- package/dist/internal/instrumentation/auto-init.js.map +1 -0
- package/dist/internal/instrumentation/index.d.ts +2 -0
- package/dist/internal/instrumentation/index.d.ts.map +1 -0
- package/dist/internal/instrumentation/index.js +2 -0
- package/dist/internal/instrumentation/index.js.map +1 -0
- package/dist/internal/instrumentation/registry.d.ts +29 -0
- package/dist/internal/instrumentation/registry.d.ts.map +1 -0
- package/dist/internal/instrumentation/registry.js +88 -0
- package/dist/internal/instrumentation/registry.js.map +1 -0
- package/dist/internal/log/index.d.ts +2 -0
- package/dist/internal/log/index.d.ts.map +1 -0
- package/dist/internal/log/index.js +2 -0
- package/dist/internal/log/index.js.map +1 -0
- package/dist/internal/log/logging.d.ts +21 -0
- package/dist/internal/log/logging.d.ts.map +1 -0
- package/dist/internal/log/logging.js +149 -0
- package/dist/internal/log/logging.js.map +1 -0
- package/dist/internal/logger.d.ts +23 -0
- package/dist/internal/logger.d.ts.map +1 -0
- package/dist/internal/logger.js +155 -0
- package/dist/internal/logger.js.map +1 -0
- package/dist/internal/masking/index.d.ts +4 -0
- package/dist/internal/masking/index.d.ts.map +1 -0
- package/dist/internal/masking/index.js +3 -0
- package/dist/internal/masking/index.js.map +1 -0
- package/dist/internal/masking/patterns.d.ts +3 -0
- package/dist/internal/masking/patterns.d.ts.map +1 -0
- package/dist/internal/masking/patterns.js +375 -0
- package/dist/internal/masking/patterns.js.map +1 -0
- package/dist/internal/masking/types.d.ts +33 -0
- package/dist/internal/masking/types.d.ts.map +1 -0
- package/dist/internal/masking/types.js +2 -0
- package/dist/internal/masking/types.js.map +1 -0
- package/dist/internal/masking/utils.d.ts +6 -0
- package/dist/internal/masking/utils.d.ts.map +1 -0
- package/dist/internal/masking/utils.js +226 -0
- package/dist/internal/masking/utils.js.map +1 -0
- package/dist/internal/metric/index.d.ts +2 -0
- package/dist/internal/metric/index.d.ts.map +1 -0
- package/dist/internal/metric/index.js +2 -0
- package/dist/internal/metric/index.js.map +1 -0
- package/dist/internal/metric/metrics.d.ts +18 -0
- package/dist/internal/metric/metrics.d.ts.map +1 -0
- package/dist/internal/metric/metrics.js +82 -0
- package/dist/internal/metric/metrics.js.map +1 -0
- package/dist/internal/sdk.d.ts +36 -0
- package/dist/internal/sdk.d.ts.map +1 -0
- package/dist/internal/sdk.js +155 -0
- package/dist/internal/sdk.js.map +1 -0
- package/dist/internal/trace/index.d.ts +3 -0
- package/dist/internal/trace/index.d.ts.map +1 -0
- package/dist/internal/trace/index.js +3 -0
- package/dist/internal/trace/index.js.map +1 -0
- package/dist/internal/trace/processors/log-masked.d.ts +16 -0
- package/dist/internal/trace/processors/log-masked.d.ts.map +1 -0
- package/dist/internal/trace/processors/log-masked.js +75 -0
- package/dist/internal/trace/processors/log-masked.js.map +1 -0
- package/dist/internal/trace/processors/span-masked.d.ts +16 -0
- package/dist/internal/trace/processors/span-masked.d.ts.map +1 -0
- package/dist/internal/trace/processors/span-masked.js +81 -0
- package/dist/internal/trace/processors/span-masked.js.map +1 -0
- package/dist/internal/trace/tracing.d.ts +18 -0
- package/dist/internal/trace/tracing.d.ts.map +1 -0
- package/dist/internal/trace/tracing.js +97 -0
- package/dist/internal/trace/tracing.js.map +1 -0
- package/package.json +130 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
export const DEFAULT_PII_PATTERNS = [
|
|
2
|
+
{
|
|
3
|
+
name: 'email_addresses',
|
|
4
|
+
pattern: String.raw `\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b`,
|
|
5
|
+
},
|
|
6
|
+
{
|
|
7
|
+
name: 'us_phone_numbers',
|
|
8
|
+
pattern: String.raw `(?:^|[\s])(?:\+?1[-.\s]*)?(?:\([0-9]{3}\)\s?[0-9]{3}[-.\s]?[0-9]{4}|[0-9]{3}[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}|[0-9]{10})(?=[\s]|$)`,
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
name: 'ssn',
|
|
12
|
+
pattern: String.raw `\b(?!000|666|9\d{2})\d{3}[-\s]?(?!00)\d{2}[-\s]?(?!0000)\d{4}\b`,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
name: 'credit_cards',
|
|
16
|
+
pattern: String.raw `\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|6(?:011|5[0-9]{2})[0-9]{12}|(?:2131|1800|35\\d{3})\\d{11})\b`,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: 'credit_cards_with_separators',
|
|
20
|
+
pattern: String.raw `\b(?:4\\d{3}|5[1-5]\\d{2}|3[47]\\d{2})[-\s]?\\d{4}[-\s]?\\d{4}[-\s]?\\d{4}\b`,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'ipv4_addresses',
|
|
24
|
+
pattern: String.raw `\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?!\.[0-9])\b`,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'generic_api_keys',
|
|
28
|
+
pattern: String.raw `\b(?:[Aa][Pp][Ii][_-]?[Kk][Ee][Yy]|[Tt][Oo][Kk][Ee][Nn]|[Ss][Ee][Cc][Rr][Ee][Tt])[_-]?[=:]?\s*["']?(?:[a-zA-Z0-9\-_.]{20,})["']?\b`,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: 'openai_keys',
|
|
32
|
+
pattern: String.raw `\bsk[-_][a-zA-Z0-9]{20,}\b`,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'base64_secrets',
|
|
36
|
+
pattern: String.raw `\b[A-Za-z0-9+/]{64,}={0,2}\b`,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: 'aws_access_keys',
|
|
40
|
+
pattern: String.raw `\b(?:AKIA|ABIA|ACCA|ASIA)[0-9A-Z]{16}\b`,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
name: 'aws_secret_keys',
|
|
44
|
+
pattern: String.raw `\b[A-Za-z0-9/+=]*[A-Z][A-Za-z0-9/+=]*[a-z][A-Za-z0-9/+=]*[/+=][A-Za-z0-9/+=]{30,}\b`,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'github_tokens',
|
|
48
|
+
pattern: String.raw `\bghp_[a-zA-Z0-9]{36}\b`,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: 'slack_tokens',
|
|
52
|
+
pattern: String.raw `\bxox[baprs]-[0-9]{10,13}-[0-9]{10,13}-[a-zA-Z0-9]{24,34}\b`,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: 'stripe_keys',
|
|
56
|
+
pattern: String.raw `\b(?:sk|pk)_(?:test|live)_[a-zA-Z0-9]{24,}\b`,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'jwt_tokens',
|
|
60
|
+
pattern: String.raw `\beyJ[A-Za-z0-9_-]{2,}\\.[A-Za-z0-9_-]{2,}\\.[A-Za-z0-9_-]{2,}\b`,
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'mac_addresses',
|
|
64
|
+
pattern: String.raw `\b(?:[0-9A-Fa-f]{2}[:-]){5}[0-9A-Fa-f]{2}\b`,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'ipv6_addresses',
|
|
68
|
+
pattern: String.raw `\b(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}\b`,
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'medical_record_numbers',
|
|
72
|
+
pattern: String.raw `\b(?:[Mm][Rr][Nn])[-\s]?\d{6,10}\b`,
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'bitcoin_addresses',
|
|
76
|
+
pattern: String.raw `\b[13][a-km-zA-HJ-NP-Z1-9]{25,34}\b`,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: 'ethereum_addresses',
|
|
80
|
+
pattern: String.raw `\b0x[a-fA-F0-9]{40}(?![a-fA-F0-9])\b`,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: 'uuids',
|
|
84
|
+
pattern: String.raw `\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}(?![0-9a-fA-F-])\b`,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'database_connections',
|
|
88
|
+
pattern: String.raw `\b(?:[Mm][Oo][Nn][Gg][Oo][Dd][Bb]|[Pp][Oo][Ss][Tt][Gg][Rr][Ee][Ss]|[Mm][Yy][Ss][Qq][Ll]|[Rr][Ee][Dd][Ii][Ss]|[Mm][Ss][Ss][Qq][Ll]|[Oo][Rr][Aa][Cc][Ll][Ee]):\\/\\/[^\\s]+\b`,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'rsa_private_keys',
|
|
92
|
+
pattern: '-----BEGIN (?:RSA )?PRIVATE KEY-----',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'pgp_private_keys',
|
|
96
|
+
pattern: '-----BEGIN PGP PRIVATE KEY BLOCK-----',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'certificates',
|
|
100
|
+
pattern: '-----BEGIN CERTIFICATE-----',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'date_of_birth_us',
|
|
104
|
+
pattern: String.raw `\b(?:0[1-9]|1[0-2])[-/](?:0[1-9]|[12]\\d|3[01])[-/](?:19|20)\\d{2}\b`,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'date_of_birth_iso',
|
|
108
|
+
pattern: String.raw `\b(?:19|20)\\d{2}[-/](?:0[1-9]|1[0-2])[-/](?:0[1-9]|[12]\\d|3[01])\b`,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
name: 'us_passport_numbers',
|
|
112
|
+
pattern: String.raw `\b[A-Z]?\\d{6,9}\b`,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
name: 'drivers_license',
|
|
116
|
+
pattern: String.raw `\b[A-Z]{1,2}\\d{3,8}[-\s]?\\d{2,5}[-\s]?\\d{2,5}[-\s]?\\d{1,5}[-\s]?\\d?\b`,
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
name: 'bank_account_numbers',
|
|
120
|
+
pattern: String.raw `\b\\d{10,17}\b`,
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
name: 'aba_routing_numbers',
|
|
124
|
+
pattern: String.raw `\b((0[0-9])|(1[0-2])|(2[1-9])|(3[0-2])|(6[1-9])|(7[0-2])|80)([0-9]{7})\b`,
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'health_insurance_numbers',
|
|
128
|
+
pattern: String.raw `\b\\d{10}[A-Z]\b`,
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
name: 'employee_ids',
|
|
132
|
+
pattern: String.raw `\b(?:[Ee][Mm][Pp]|[Ee][Mm][Pp][Ll][Oo][Yy][Ee][Ee]|[Ee])[-\s]?\\d{5,8}\b`,
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'tax_ein',
|
|
136
|
+
pattern: String.raw `\b\\d{2}-\\d{7}\b`,
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: 'medicare_beneficiary_id',
|
|
140
|
+
pattern: String.raw `\b[1-9][A-Z][A-Z0-9]\\d-[A-Z][A-Z0-9]\\d-[A-Z][A-Z0-9]\\d{2}\b`,
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: 'national_provider_id',
|
|
144
|
+
pattern: String.raw `\b1\\d{9}\b`,
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: 'dea_numbers',
|
|
148
|
+
pattern: String.raw `\b[A-Z]{2}\\d{7}\b`,
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: 'itin',
|
|
152
|
+
pattern: String.raw `\b9\\d{2}(?:[ \\-]?)[7,8]\\d(?:[ \\-]?)\\d{4}\b`,
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: 'vin_numbers',
|
|
156
|
+
pattern: String.raw `\b[A-HJ-NPR-Z0-9]{17}\b`,
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
name: 'coordinates',
|
|
160
|
+
pattern: String.raw `\b[-+]?(?:[0-8]?\\d(?:\\.\\d+)?|90(?:\\.0+)?),\\s*[-+]?(?:1[0-7]\\d(?:\\.\\d+)?|180(?:\\.0+)?|[0-9]?\\d(?:\\.\\d+)?)\b`,
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
name: 'us_license_plates',
|
|
164
|
+
pattern: String.raw `\b[A-Z]{1,3}[-\s]\\d{1,4}[A-Z]?\b|\b\\d{1,2}[A-Z]{1,3}\\d{1,4}\b`,
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: 'us_zip_codes',
|
|
168
|
+
pattern: String.raw `\b(\\d{5}-\\d{4}|\\d{5})\b`,
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
name: 'us_street_addresses',
|
|
172
|
+
pattern: String.raw `\b\\d{1,8}\b[\\s\\S]{10,100}?\b(AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NC|ND|NE|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY)\b\\s\\d{5}\b`,
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
name: 'iban',
|
|
176
|
+
pattern: String.raw `\b[A-Z]{2}\d{2}[A-Z0-9]{4}\d{7}([A-Z0-9]?){0,16}\b`,
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: 'swift_bic',
|
|
180
|
+
pattern: String.raw `\b[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?\b`,
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: 'google_oauth',
|
|
184
|
+
pattern: String.raw `\bya29\\.[a-zA-Z0-9_-]{60,}\b`,
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
name: 'firebase_tokens',
|
|
188
|
+
pattern: String.raw `\bAAAA[A-Za-z0-9_-]{100,}\b`,
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
name: 'google_app_ids',
|
|
192
|
+
pattern: String.raw `\b[0-9]+-\w+\.apps\.googleusercontent\.com\b`,
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
name: 'facebook_secrets',
|
|
196
|
+
pattern: String.raw `\b(facebook_secret|FACEBOOK_SECRET|facebook_app_secret|FACEBOOK_APP_SECRET)[a-z_ =\\s"'\\:]{0,5}[^a-zA-Z0-9][a-f0-9]{32}[^a-zA-Z0-9]`,
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
name: 'github_keys',
|
|
200
|
+
pattern: String.raw `\b(GITHUB_SECRET|GITHUB_KEY|github_secret|github_key|github_token|GITHUB_TOKEN|github_api_key|GITHUB_API_KEY)[a-z_ =\\s\"'\\:]{0,10}[^a-zA-Z0-9][a-zA-Z0-9]{40}[^a-zA-Z0-9]`,
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
name: 'heroku_keys',
|
|
204
|
+
pattern: String.raw `\b(heroku_api_key|HEROKU_API_KEY|heroku_secret|HEROKU_SECRET)[a-z_ =\\s\"'\\:]{0,10}[^a-zA-Z0-9-]\\w{8}(?:-\\w{4}){3}-\\w{12}[^a-zA-Z0-9\\-]`,
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
name: 'slack_api_keys',
|
|
208
|
+
pattern: String.raw `\b(slack_api_key|SLACK_API_KEY|slack_key|SLACK_KEY)[a-z_ =\\s\"'\\:]{0,10}[^a-f0-9][a-f0-9]{32}[^a-f0-9]`,
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
name: 'slack_api_tokens',
|
|
212
|
+
pattern: String.raw `\b(xox[pb](?:-[a-zA-Z0-9]+){4,})\b`,
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
name: 'dsa_private_keys',
|
|
216
|
+
pattern: String.raw `-----BEGIN DSA PRIVATE KEY-----(?:[a-zA-Z0-9\+\=\/"']|\s)+?-----END DSA PRIVATE KEY-----`,
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
name: 'ec_private_keys',
|
|
220
|
+
pattern: String.raw `-----BEGIN (?:EC|ECDSA) PRIVATE KEY-----(?:[a-zA-Z0-9\+\=\/"']|\s)+?-----END (?:EC|ECDSA) PRIVATE KEY-----`,
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
name: 'encrypted_private_keys',
|
|
224
|
+
pattern: String.raw `-----BEGIN ENCRYPTED PRIVATE KEY-----(?:.|\s)+?-----END ENCRYPTED PRIVATE KEY-----`,
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
name: 'ssl_certificates',
|
|
228
|
+
pattern: String.raw `-----BEGIN CERTIFICATE-----(?:.|\n)+?\s-----END CERTIFICATE-----`,
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
name: 'ssh_dss_public',
|
|
232
|
+
pattern: String.raw `\bssh-dss [0-9A-Za-z+/]+[=]{2}\b`,
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
name: 'ssh_rsa_public',
|
|
236
|
+
pattern: String.raw `\bssh-rsa AAAA[0-9A-Za-z+/]+[=]{0,3} [^@]+@[^@]+\b`,
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
name: 'putty_ssh_keys',
|
|
240
|
+
pattern: String.raw `PuTTY-User-Key-File-2: ssh-(?:rsa|dss)\s*Encryption: none(?:.|\s?)*?Private-MAC:`,
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
name: 'france_phone_numbers',
|
|
244
|
+
pattern: String.raw `\b([0O]?[1lI][1lI])?[3E][3E][0O]?[\\dOIlZEASB]{9}\b`,
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
name: 'german_phone_numbers',
|
|
248
|
+
pattern: String.raw `\b[\d\w]\d{2}[\d\w]{6}\d[\d\w]\b`,
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
name: 'uk_phone_numbers',
|
|
252
|
+
pattern: String.raw `\b([0O]?[1lI][1lI])?[4A][4A][\\dOIlZEASB]{10,11}\b`,
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
name: 'uk_drivers_license',
|
|
256
|
+
pattern: String.raw `\b[A-Z]{5}\d{6}[A-Z]{2}\d{1}[A-Z]{2}\b`,
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
name: 'uk_passport',
|
|
260
|
+
pattern: String.raw `\b\\d{10}GB[RP]\\d{7}[UMF]{1}\\d{9}\b`,
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
name: 'argentina_dni',
|
|
264
|
+
pattern: String.raw `\b\\d{2}\\.\\d{3}\\.\\d{3}\b`,
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
name: 'australia_tfn',
|
|
268
|
+
pattern: String.raw `\b[Tt][Ff][Nn](:|:\\s|\\s|)(\\d{8,9})\b`,
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
name: 'canada_passport',
|
|
272
|
+
pattern: String.raw `\b[\\w]{2}[\\d]{6}\b`,
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
name: 'croatia_vat',
|
|
276
|
+
pattern: String.raw `\bHR\\d{11}\b`,
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
name: 'czech_vat',
|
|
280
|
+
pattern: String.raw `\bCZ\\d{8,10}\b`,
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
name: 'denmark_personal_id',
|
|
284
|
+
pattern: String.raw `\b(?:\\d{10}|\\d{6}[-\\s]\\d{4})\b`,
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
name: 'france_national_id',
|
|
288
|
+
pattern: String.raw `\b\\d{12}\b`,
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
name: 'france_ssn',
|
|
292
|
+
pattern: String.raw `\b(?:\\d{13}|\\d{13}\\s\\d{2})\b`,
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
name: 'france_passport',
|
|
296
|
+
pattern: String.raw `\b\\d{2}11\\d{5}\b`,
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
name: 'california_drivers_license',
|
|
300
|
+
pattern: String.raw `\b[A-Z]{1}\\d{7}\b`,
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
name: 'hipaa_ndc',
|
|
304
|
+
pattern: String.raw `\b\\d{4,5}-\\d{3,4}-\\d{1,2}\b`,
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
name: 'cve_numbers',
|
|
308
|
+
pattern: String.raw `\b[Cc][Vv][Ee]-\\d{4}-\\d{4,7}\b`,
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
name: 'microsoft_oauth',
|
|
312
|
+
pattern: String.raw `https://login\.microsoftonline\.com/common/oauth2/v2\.0/token|https://login\.windows\.net/common/oauth2/token`,
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
name: 'postgres_connections',
|
|
316
|
+
pattern: String.raw `\b(?:[Pp][Oo][Ss][Tt][Gg][Rr][Ee][Ss]|[Pp][Gg][Ss][Qq][Ll])\\:\\/\\/`,
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
name: 'box_links',
|
|
320
|
+
pattern: String.raw `https://app\.box\.com/[s|l]/\S+`,
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
name: 'dropbox_links',
|
|
324
|
+
pattern: String.raw `https://www\.dropbox\.com/(?:s|l)/\S+`,
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
name: 'amex_cards',
|
|
328
|
+
pattern: String.raw `\b3[47][0-9]{13}\b`,
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
name: 'visa_cards',
|
|
332
|
+
pattern: String.raw `\b4[0-9]{12}(?:[0-9]{3})?\b`,
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
name: 'discover_cards',
|
|
336
|
+
pattern: String.raw `\b65[4-9][0-9]{13}|64[4-9][0-9]{13}|6011[0-9]{12}\b`,
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
name: 'enhanced_credit_cards',
|
|
340
|
+
pattern: String.raw `\b((4\\d{3}|5[1-5]\\d{2}|2\\d{3}|3[47]\\d{1,2})[\\s\\-]?\\d{4,6}[\\s\\-]?\\d{4,6}?([\\s\\-]\\d{3,4})?(\\d{3})?)\b`,
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
name: 'bbva_routing_ca',
|
|
344
|
+
pattern: String.raw `\\b321170538\\b`,
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
name: 'boa_routing_ca',
|
|
348
|
+
pattern: String.raw `\\b(?:121|026)00(?:0|9)(?:358|593)\\b`,
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
name: 'chase_routing_ca',
|
|
352
|
+
pattern: String.raw `\\b322271627\\b`,
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
name: 'citibank_routing_ca',
|
|
356
|
+
pattern: String.raw `\\b32(?:11|22)71(?:18|72)4\\b`,
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
name: 'usbank_routing_ca',
|
|
360
|
+
pattern: String.raw `\\b12(?:1122676|2235821)\\b`,
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
name: 'united_bank_routing_ca',
|
|
364
|
+
pattern: String.raw `\\b122243350\\b`,
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
name: 'wells_fargo_routing_ca',
|
|
368
|
+
pattern: String.raw `\\b121042882\\b`,
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
name: 'generic_non_usual',
|
|
372
|
+
pattern: String.raw `(?:^|\s)(?=[A-Za-z0-9_\)\*\=@]*[A-Za-z])(?=[A-Za-z0-9_\)\*\=@]*[0-9])([A-Za-z0-9_\)\*\=@]{5,})(?=\s|$)`,
|
|
373
|
+
},
|
|
374
|
+
];
|
|
375
|
+
//# sourceMappingURL=patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/internal/masking/patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export type MaskingMode = 'partial' | 'full';
|
|
2
|
+
export interface IPatternBasedMaskingRule {
|
|
3
|
+
readonly patterns: readonly (IPatternEntry | string)[];
|
|
4
|
+
readonly mode?: MaskingMode;
|
|
5
|
+
}
|
|
6
|
+
export interface IPatternEntry {
|
|
7
|
+
readonly name?: string | undefined;
|
|
8
|
+
readonly pattern: string;
|
|
9
|
+
}
|
|
10
|
+
export interface IAttributesMaskingRule extends IPatternBasedMaskingRule {
|
|
11
|
+
readonly patterns: readonly (IPatternEntry | string)[];
|
|
12
|
+
readonly attributePattern?: string;
|
|
13
|
+
readonly mode?: MaskingMode;
|
|
14
|
+
}
|
|
15
|
+
export interface IEventMaskingRule extends IAttributesMaskingRule {
|
|
16
|
+
readonly eventNamePattern?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ISpanMaskingConfig {
|
|
19
|
+
readonly disableDefaultRules?: boolean;
|
|
20
|
+
readonly rules?: readonly IAttributesMaskingRule[];
|
|
21
|
+
}
|
|
22
|
+
export interface ILogMaskingConfig {
|
|
23
|
+
readonly disableDefaultRules?: boolean;
|
|
24
|
+
readonly maskBody?: boolean;
|
|
25
|
+
readonly rules?: readonly IAttributesMaskingRule[];
|
|
26
|
+
}
|
|
27
|
+
export type IEventMaskingConfig = ILogMaskingConfig;
|
|
28
|
+
export interface IMaskingConfig {
|
|
29
|
+
readonly spanMasking?: ISpanMaskingConfig;
|
|
30
|
+
readonly eventMasking?: IEventMaskingConfig;
|
|
31
|
+
}
|
|
32
|
+
export type MaskableValue = string | number | boolean | null | undefined | Record<string, unknown> | unknown[];
|
|
33
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/internal/masking/types.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,MAAM,CAAC;AAM7C,MAAM,WAAW,wBAAwB;IAEvC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;IAEvD,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;CAC7B;AAMD,MAAM,WAAW,aAAa;IAE5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAEnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAMD,MAAM,WAAW,sBAAuB,SAAQ,wBAAwB;IAEtE,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC;IAEvD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAEnC,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;CAC7B;AAKD,MAAM,WAAW,iBAAkB,SAAQ,sBAAsB;IAE/D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAMD,MAAM,WAAW,kBAAkB;IAEjC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAEvC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACpD;AAMD,MAAM,WAAW,iBAAiB;IAEhC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAEvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAE5B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACpD;AAMD,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAMpD,MAAM,WAAW,cAAc;IAE7B,QAAQ,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;IAE1C,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CAC7C;AAMD,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/internal/masking/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IAttributesMaskingRule, IPatternBasedMaskingRule } from './types';
|
|
2
|
+
export declare function maskStringByPattern(value: string, pattern: RegExp, mode?: 'partial' | 'full'): string;
|
|
3
|
+
export declare function maskStringByPatternBasedRule(value: string, rule: IPatternBasedMaskingRule): string;
|
|
4
|
+
export declare function maskValue(value: unknown, rule: IPatternBasedMaskingRule): unknown;
|
|
5
|
+
export declare function maskAttributes(attributes: Record<string, unknown>, rules: readonly IAttributesMaskingRule[], outputOriginalValue?: boolean): Record<string, unknown>;
|
|
6
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/internal/masking/utils.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,sBAAsB,EAEtB,wBAAwB,EAEzB,MAAM,SAAS,CAAC;AAiMjB,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,SAAS,GAAG,MAAe,GAChC,MAAM,CAsDR;AAKD,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,wBAAwB,GAC7B,MAAM,CAmBR;AAKD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAiBjF;AAKD,wBAAgB,cAAc,CAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,KAAK,EAAE,SAAS,sBAAsB,EAAE,EACxC,mBAAmB,UAAQ,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6BzB"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { logger } from '../logger';
|
|
2
|
+
function isValidPatternName(name) {
|
|
3
|
+
return /^[a-zA-Z0-9_]+$/.test(name);
|
|
4
|
+
}
|
|
5
|
+
function isLikelyReDoSPattern(pattern) {
|
|
6
|
+
const dangerousPatterns = [
|
|
7
|
+
/\([^)]*[+*]\)[+*]/,
|
|
8
|
+
/\([^)]*\|[^)]*\)[+*]/,
|
|
9
|
+
/\([^)]*[+*][^)]*[+*][^)]*\)[+*]/,
|
|
10
|
+
];
|
|
11
|
+
return dangerousPatterns.some((dangerous) => dangerous.test(pattern));
|
|
12
|
+
}
|
|
13
|
+
function getGroupedPattern(patternEntry) {
|
|
14
|
+
let name = patternEntry.name;
|
|
15
|
+
if (!name || name === '') {
|
|
16
|
+
name = `pattern_${Math.random().toString(16).slice(2)}`;
|
|
17
|
+
}
|
|
18
|
+
if (!isValidPatternName(name)) {
|
|
19
|
+
throw new Error(`Pattern name '${name}' must only contain alphanumeric characters and underscores`);
|
|
20
|
+
}
|
|
21
|
+
if (isLikelyReDoSPattern(patternEntry.pattern)) {
|
|
22
|
+
throw new Error(`Potentially dangerous ReDoS pattern detected: '${patternEntry.pattern}'`);
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
new RegExp(patternEntry.pattern);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
throw new Error(`Invalid regex pattern '${patternEntry.pattern}': ${String(error)}`);
|
|
29
|
+
}
|
|
30
|
+
return `(?<${name}>${patternEntry.pattern})`;
|
|
31
|
+
}
|
|
32
|
+
function isIPatternEntry(obj) {
|
|
33
|
+
return (typeof obj === 'object' &&
|
|
34
|
+
obj !== null &&
|
|
35
|
+
typeof obj.pattern === 'string' &&
|
|
36
|
+
(obj.name === undefined || typeof obj.name === 'string'));
|
|
37
|
+
}
|
|
38
|
+
function isIEventMaskingRule(obj) {
|
|
39
|
+
return (typeof obj === 'object' &&
|
|
40
|
+
obj !== null &&
|
|
41
|
+
typeof obj.mode === 'string' &&
|
|
42
|
+
Array.isArray(obj.patterns) &&
|
|
43
|
+
obj.patterns.every((p) => isIPatternEntry(p) || typeof p === 'string') &&
|
|
44
|
+
(obj.attributePattern === undefined ||
|
|
45
|
+
typeof obj.attributePattern === 'string'));
|
|
46
|
+
}
|
|
47
|
+
function convertPatternsToPatternEntries(patterns) {
|
|
48
|
+
const patternEntries = [];
|
|
49
|
+
for (const pattern of patterns) {
|
|
50
|
+
if (typeof pattern === 'string') {
|
|
51
|
+
patternEntries.push({ pattern, name: '' });
|
|
52
|
+
}
|
|
53
|
+
else if (isIPatternEntry(pattern)) {
|
|
54
|
+
patternEntries.push(pattern);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
throw new Error('Patterns must be either strings or PatternEntry instances');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return patternEntries;
|
|
61
|
+
}
|
|
62
|
+
function compilePatternEntries(patternEntries) {
|
|
63
|
+
const patternGroups = [];
|
|
64
|
+
for (const patternEntry of patternEntries) {
|
|
65
|
+
try {
|
|
66
|
+
patternGroups.push(getGroupedPattern(patternEntry));
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
logger.warn(`Invalid pattern '${patternEntry.name}': ${patternEntry.pattern}`, error);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (patternGroups.length === 0) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
return new RegExp(patternGroups.join('|'));
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
logger.warn('Failed to compile pattern entries into regex', error);
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
function getCompiledAttributeNamePattern(rule) {
|
|
85
|
+
if (!rule.attributePattern) {
|
|
86
|
+
logger.debug('No attribute pattern provided, using default .*');
|
|
87
|
+
return /.*/;
|
|
88
|
+
}
|
|
89
|
+
let compiledPatternString = rule.attributePattern;
|
|
90
|
+
if (isIEventMaskingRule(rule) && rule.eventNamePattern) {
|
|
91
|
+
compiledPatternString = `(${compiledPatternString})|(${rule.eventNamePattern})`;
|
|
92
|
+
}
|
|
93
|
+
return new RegExp(compiledPatternString);
|
|
94
|
+
}
|
|
95
|
+
function shouldContinueExecution(startTime, iterations, timeoutMs) {
|
|
96
|
+
if (Date.now() - startTime > timeoutMs) {
|
|
97
|
+
logger.warn('Regex execution timed out - potential ReDoS pattern detected');
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
const maxIterations = 1000;
|
|
101
|
+
if (iterations > maxIterations) {
|
|
102
|
+
logger.warn('Regex execution exceeded maximum iterations - potential ReDoS pattern detected');
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
function createGlobalPattern(pattern) {
|
|
108
|
+
return new RegExp(pattern.source, pattern.flags.includes('g') ? pattern.flags : pattern.flags + 'g');
|
|
109
|
+
}
|
|
110
|
+
function executeRegexWithTimeout(pattern, value, timeoutMs = 100) {
|
|
111
|
+
const matches = [];
|
|
112
|
+
const globalPattern = createGlobalPattern(pattern);
|
|
113
|
+
const startTime = Date.now();
|
|
114
|
+
let match;
|
|
115
|
+
let iterations = 0;
|
|
116
|
+
while ((match = globalPattern.exec(value)) !== null) {
|
|
117
|
+
if (!shouldContinueExecution(startTime, ++iterations, timeoutMs)) {
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
matches.push(match);
|
|
121
|
+
if (match[0].length === 0) {
|
|
122
|
+
globalPattern.lastIndex = match.index + 1;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return matches;
|
|
126
|
+
}
|
|
127
|
+
export function maskStringByPattern(value, pattern, mode = 'full') {
|
|
128
|
+
const matches = [];
|
|
129
|
+
try {
|
|
130
|
+
const regexMatches = executeRegexWithTimeout(pattern, value);
|
|
131
|
+
for (const match of regexMatches) {
|
|
132
|
+
matches.push({
|
|
133
|
+
start: match.index,
|
|
134
|
+
end: match.index + match[0].length,
|
|
135
|
+
text: match[0],
|
|
136
|
+
groups: match.groups,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
logger.warn('Regex execution failed, skipping masking', error);
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
144
|
+
for (const matchInfo of matches.reverse()) {
|
|
145
|
+
let patternName = 'unknown';
|
|
146
|
+
if (matchInfo.groups) {
|
|
147
|
+
for (const [groupName, groupValue] of Object.entries(matchInfo.groups)) {
|
|
148
|
+
if (groupValue !== undefined) {
|
|
149
|
+
if (groupName.includes('_') && /\d$/.test(groupName)) {
|
|
150
|
+
const parts = groupName.split('_');
|
|
151
|
+
patternName = parts[0] || groupName;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
patternName = groupName;
|
|
155
|
+
}
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
logger.info(`Masking detected: pattern '${patternName}' found match in value`);
|
|
161
|
+
const masked = mode === 'partial' ? matchInfo.text[0] + '*****' : '*****';
|
|
162
|
+
value = value.slice(0, matchInfo.start) + masked + value.slice(matchInfo.end);
|
|
163
|
+
}
|
|
164
|
+
return value;
|
|
165
|
+
}
|
|
166
|
+
export function maskStringByPatternBasedRule(value, rule) {
|
|
167
|
+
const patternEntries = convertPatternsToPatternEntries(rule.patterns);
|
|
168
|
+
if (patternEntries.length === 0) {
|
|
169
|
+
logger.warn('No patterns provided for masking rule, returning original value');
|
|
170
|
+
return value;
|
|
171
|
+
}
|
|
172
|
+
const mode = rule.mode;
|
|
173
|
+
if (!patternEntries || patternEntries.length === 0) {
|
|
174
|
+
return mode === 'partial' && value ? value[0] + '*****' : '*****';
|
|
175
|
+
}
|
|
176
|
+
const compiledPatterns = compilePatternEntries(patternEntries);
|
|
177
|
+
if (!compiledPatterns) {
|
|
178
|
+
return value;
|
|
179
|
+
}
|
|
180
|
+
return maskStringByPattern(value, compiledPatterns, mode);
|
|
181
|
+
}
|
|
182
|
+
export function maskValue(value, rule) {
|
|
183
|
+
if (typeof value === 'string') {
|
|
184
|
+
return maskStringByPatternBasedRule(value, rule);
|
|
185
|
+
}
|
|
186
|
+
else if (typeof value === 'boolean' || typeof value === 'number') {
|
|
187
|
+
return maskStringByPatternBasedRule(String(value), rule);
|
|
188
|
+
}
|
|
189
|
+
else if (Array.isArray(value)) {
|
|
190
|
+
return value.map((v) => maskStringByPatternBasedRule(String(v), rule));
|
|
191
|
+
}
|
|
192
|
+
else if (value !== null && typeof value === 'object') {
|
|
193
|
+
const result = {};
|
|
194
|
+
for (const [k, v] of Object.entries(value)) {
|
|
195
|
+
result[k] = maskValue(v, rule);
|
|
196
|
+
}
|
|
197
|
+
return result;
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
throw new Error(`Unsupported value type for masking: ${typeof value}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
export function maskAttributes(attributes, rules, outputOriginalValue = false) {
|
|
204
|
+
if (!attributes || Object.keys(attributes).length === 0) {
|
|
205
|
+
return {};
|
|
206
|
+
}
|
|
207
|
+
const maskedAttributes = { ...attributes };
|
|
208
|
+
for (const rule of rules) {
|
|
209
|
+
const compiledAttributeNamePattern = getCompiledAttributeNamePattern(rule);
|
|
210
|
+
const attributesToMask = compiledAttributeNamePattern
|
|
211
|
+
? Object.keys(maskedAttributes).filter((attr) => compiledAttributeNamePattern.test(attr))
|
|
212
|
+
: Object.keys(maskedAttributes);
|
|
213
|
+
for (const attribute of attributesToMask) {
|
|
214
|
+
const value = maskedAttributes[attribute];
|
|
215
|
+
if (value === null || value === undefined) {
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
if (outputOriginalValue) {
|
|
219
|
+
logger.debug(`Masking attribute '${attribute}' with original value`, { value });
|
|
220
|
+
}
|
|
221
|
+
maskedAttributes[attribute] = maskValue(value, rule);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return maskedAttributes;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=utils.js.map
|