@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.
Files changed (79) hide show
  1. package/LICENSE +27 -0
  2. package/README.md +76 -0
  3. package/dist/index.d.ts +13 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +10 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/internal/config.d.ts +17 -0
  8. package/dist/internal/config.d.ts.map +1 -0
  9. package/dist/internal/config.js +90 -0
  10. package/dist/internal/config.js.map +1 -0
  11. package/dist/internal/instrumentation/auto-init.d.ts +3 -0
  12. package/dist/internal/instrumentation/auto-init.d.ts.map +1 -0
  13. package/dist/internal/instrumentation/auto-init.js +82 -0
  14. package/dist/internal/instrumentation/auto-init.js.map +1 -0
  15. package/dist/internal/instrumentation/index.d.ts +2 -0
  16. package/dist/internal/instrumentation/index.d.ts.map +1 -0
  17. package/dist/internal/instrumentation/index.js +2 -0
  18. package/dist/internal/instrumentation/index.js.map +1 -0
  19. package/dist/internal/instrumentation/registry.d.ts +29 -0
  20. package/dist/internal/instrumentation/registry.d.ts.map +1 -0
  21. package/dist/internal/instrumentation/registry.js +88 -0
  22. package/dist/internal/instrumentation/registry.js.map +1 -0
  23. package/dist/internal/log/index.d.ts +2 -0
  24. package/dist/internal/log/index.d.ts.map +1 -0
  25. package/dist/internal/log/index.js +2 -0
  26. package/dist/internal/log/index.js.map +1 -0
  27. package/dist/internal/log/logging.d.ts +21 -0
  28. package/dist/internal/log/logging.d.ts.map +1 -0
  29. package/dist/internal/log/logging.js +149 -0
  30. package/dist/internal/log/logging.js.map +1 -0
  31. package/dist/internal/logger.d.ts +23 -0
  32. package/dist/internal/logger.d.ts.map +1 -0
  33. package/dist/internal/logger.js +155 -0
  34. package/dist/internal/logger.js.map +1 -0
  35. package/dist/internal/masking/index.d.ts +4 -0
  36. package/dist/internal/masking/index.d.ts.map +1 -0
  37. package/dist/internal/masking/index.js +3 -0
  38. package/dist/internal/masking/index.js.map +1 -0
  39. package/dist/internal/masking/patterns.d.ts +3 -0
  40. package/dist/internal/masking/patterns.d.ts.map +1 -0
  41. package/dist/internal/masking/patterns.js +375 -0
  42. package/dist/internal/masking/patterns.js.map +1 -0
  43. package/dist/internal/masking/types.d.ts +33 -0
  44. package/dist/internal/masking/types.d.ts.map +1 -0
  45. package/dist/internal/masking/types.js +2 -0
  46. package/dist/internal/masking/types.js.map +1 -0
  47. package/dist/internal/masking/utils.d.ts +6 -0
  48. package/dist/internal/masking/utils.d.ts.map +1 -0
  49. package/dist/internal/masking/utils.js +226 -0
  50. package/dist/internal/masking/utils.js.map +1 -0
  51. package/dist/internal/metric/index.d.ts +2 -0
  52. package/dist/internal/metric/index.d.ts.map +1 -0
  53. package/dist/internal/metric/index.js +2 -0
  54. package/dist/internal/metric/index.js.map +1 -0
  55. package/dist/internal/metric/metrics.d.ts +18 -0
  56. package/dist/internal/metric/metrics.d.ts.map +1 -0
  57. package/dist/internal/metric/metrics.js +82 -0
  58. package/dist/internal/metric/metrics.js.map +1 -0
  59. package/dist/internal/sdk.d.ts +36 -0
  60. package/dist/internal/sdk.d.ts.map +1 -0
  61. package/dist/internal/sdk.js +155 -0
  62. package/dist/internal/sdk.js.map +1 -0
  63. package/dist/internal/trace/index.d.ts +3 -0
  64. package/dist/internal/trace/index.d.ts.map +1 -0
  65. package/dist/internal/trace/index.js +3 -0
  66. package/dist/internal/trace/index.js.map +1 -0
  67. package/dist/internal/trace/processors/log-masked.d.ts +16 -0
  68. package/dist/internal/trace/processors/log-masked.d.ts.map +1 -0
  69. package/dist/internal/trace/processors/log-masked.js +75 -0
  70. package/dist/internal/trace/processors/log-masked.js.map +1 -0
  71. package/dist/internal/trace/processors/span-masked.d.ts +16 -0
  72. package/dist/internal/trace/processors/span-masked.d.ts.map +1 -0
  73. package/dist/internal/trace/processors/span-masked.js +81 -0
  74. package/dist/internal/trace/processors/span-masked.js.map +1 -0
  75. package/dist/internal/trace/tracing.d.ts +18 -0
  76. package/dist/internal/trace/tracing.d.ts.map +1 -0
  77. package/dist/internal/trace/tracing.js +97 -0
  78. package/dist/internal/trace/tracing.js.map +1 -0
  79. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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