@contrast/common 1.8.0 → 1.9.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/src/constants.ts CHANGED
@@ -94,5 +94,141 @@ export enum InputType {
94
94
  UNKNOWN = 'UNKNOWN',
95
95
  }
96
96
 
97
+ export enum DataflowTag {
98
+ XML_ENCODED = 'XML_ENCODED',
99
+ XML_DECODED = 'XML_DECODED',
100
+ HTML_ENCODED = 'HTML_ENCODED',
101
+ HTML_DECODED = 'HTML_DECODED',
102
+ URL_ENCODED = 'URL_ENCODED',
103
+ URL_DECODED = 'URL_DECODED',
104
+ CSS_ENCODED = 'CSS_ENCODED',
105
+ CSS_DECODED = 'CSS_DECODED',
106
+ BASE64_ENCODED = 'BASE64_ENCODED',
107
+ BASE64_DECODED = 'BASE64_DECODED',
108
+ JAVASCRIPT_ENCODED = 'JAVASCRIPT_ENCODED',
109
+ JAVASCRIPT_DECODED = 'JAVASCRIPT_DECODED',
110
+ JAVA_ENCODED = 'JAVA_ENCODED',
111
+ JAVA_DECODED = 'JAVA_DECODED',
112
+ CSV_ENCODED = 'CSV_ENCODED',
113
+ CSV_DECODED = 'CSV_DECODED',
114
+ SQL_ENCODED = 'SQL_ENCODED',
115
+ SQL_DECODED = 'SQL_DECODED',
116
+ LDAP_ENCODED = 'LDAP_ENCODED',
117
+ LDAP_DECODED = 'LDAP_DECODED',
118
+ XPATH_ENCODED = 'XPATH_ENCODED',
119
+ XPATH_DECODED = 'XPATH_DECODED',
120
+ OS_ENCODED = 'OS_ENCODED',
121
+ OS_DECODED = 'OS_DECODED',
122
+ VBSCRIPT_ENCODED = 'VBSCRIPT_ENCODED',
123
+ VBSCRIPT_DECODED = 'VBSCRIPT_DECODED',
124
+ POTENTIAL_SANITIZED = 'POTENTIAL_SANITIZED',
125
+ POTENTIAL_VALIDATED = 'POTENTIAL_VALIDATED',
126
+ NO_CONTROL_CHARS = 'NO_CONTROL_CHARS',
127
+ CUSTOM = 'CUSTOM_CATCH_ALL',
128
+ // custom encoded/validated tags, only for data flow rules
129
+ CUSTOM_ENCODED = 'CUSTOM_ENCODED',
130
+ CUSTOM_ENCODED_CMD_INJECTION = 'CUSTOM_ENCODED_CMD_INJECTION',
131
+ CUSTOM_ENCODED_EXPRESSION_LANGUAGE_INJECTION = 'CUSTOM_ENCODED_EXPRESSION_LANGUAGE_INJECTION',
132
+ CUSTOM_ENCODED_HEADER_INJECTION = 'CUSTOM_ENCODED_HEADER_INJECTION',
133
+ CUSTOM_ENCODED_HQL_INJECTION = 'CUSTOM_ENCODED_HQL_INJECTION',
134
+ CUSTOM_ENCODED_LDAP_INJECTION = 'CUSTOM_ENCODED_LDAP_INJECTION',
135
+ CUSTOM_ENCODED_LOG_INJECTION = 'CUSTOM_ENCODED_LOG_INJECTION',
136
+ CUSTOM_ENCODED_NOSQL_INJECTIOn = 'CUSTOM_ENCODED_NOSQL_INJECTION',
137
+ CUSTOM_ENCODED_PATH_TRAVERSAL = 'CUSTOM_ENCODED_PATH_TRAVERSAL',
138
+ CUSTOM_ENCODED_REDOS = 'CUSTOM_ENCODED_REDOS',
139
+ CUSTOM_ENCODED_REFLECTED_XSS = 'CUSTOM_ENCODED_REFLECTED_XSS',
140
+ CUSTOM_ENCODED_REFLECTION_INJECTION = 'CUSTOM_ENCODED_REFLECTION_INJECTION',
141
+ CUSTOM_ENCODED_SMTP_INJECTION = 'CUSTOM_ENCODED_SMTP_INJECTION',
142
+ CUSTOM_ENCODED_SQL_INJECTION = 'CUSTOM_ENCODED_SQL_INJECTION',
143
+ CUSTOM_ENCODED_SSRF = 'CUSTOM_ENCODED_SSRF',
144
+ CUSTOM_ENCODED_STORED_XSS = 'CUSTOM_ENCODED_STORED_XSS',
145
+ CUSTOM_ENCODED_TRUST_BOUNDARY_VIOLATION = 'CUSTOM_ENCODED_TRUST_BOUNDARY_VIOLATION',
146
+ CUSTOM_ENCODED_UNSAFE_CODE_EXECUTION = 'CUSTOM_ENCODED_UNSAFE_CODE_EXECUTION',
147
+ CUSTOM_ENCODED_UNSAFE_READLINE = 'CUSTOM_ENCODED_UNSAFE_READLINE',
148
+ CUSTOM_ENCODED_UNSAFE_XML_DECODE = 'CUSTOM_ENCODED_UNSAFE_XML_DECODE',
149
+ CUSTOM_ENCODED_UNTRUSTED_DESERIALIZATION = 'CUSTOM_ENCODED_UNTRUSTED_DESERIALIZATION',
150
+ CUSTOM_ENCODED_UNVALIDATED_FORWARD = 'CUSTOM_ENCODED_UNVALIDATED_FORWARD',
151
+ CUSTOM_ENCODED_UNVALIDATED_REDIRECT = 'CUSTOM_ENCODED_UNVALIDATED_REDIRECT',
152
+ CUSTOM_ENCODED_XPATH_INJECTION = 'CUSTOM_ENCODED_XPATH_INJECTION',
153
+ CUSTOM_ENCODED_XXE = 'CUSTOM_ENCODED_XXE',
154
+ CUSTOM_SECURITY_CONTROL_APPLIED = 'CUSTOM_SECURITY_CONTROL_APPLIED',
155
+ CUSTOM_VALIDATED = 'CUSTOM_VALIDATED',
156
+ CUSTOM_VALIDATED_CMD_INJECTION = 'CUSTOM_VALIDATED_CMD_INJECTION',
157
+ CUSTOM_VALIDATED_EXPRESSION_LANGUAGE_INJECTION = 'CUSTOM_VALIDATED_EXPRESSION_LANGUAGE_INJECTION',
158
+ CUSTOM_VALIDATED_HEADER_INJECTION = 'CUSTOM_VALIDATED_HEADER_INJECTION',
159
+ CUSTOM_VALIDATED_HQL_INJECTION = 'CUSTOM_VALIDATED_HQL_INJECTION',
160
+ CUSTOM_VALIDATED_LDAP_INJECTION = 'CUSTOM_VALIDATED_LDAP_INJECTION',
161
+ CUSTOM_VALIDATED_LOG_INJECTION = 'CUSTOM_VALIDATED_LOG_INJECTION',
162
+ CUSTOM_VALIDATED_NOSQL_INJECTION = 'CUSTOM_VALIDATED_NOSQL_INJECTION',
163
+ CUSTOM_VALIDATED_PATH_TRAVERSAL = 'CUSTOM_VALIDATED_PATH_TRAVERSAL',
164
+ CUSTOM_VALIDATED_REDOS = 'CUSTOM_VALIDATED_REDOS',
165
+ CUSTOM_VALIDATED_REFLECTED_XSS = 'CUSTOM_VALIDATED_REFLECTED_XSS',
166
+ CUSTOM_VALIDATED_REFLECTION_INJECTION = 'CUSTOM_VALIDATED_REFLECTION_INJECTION',
167
+ CUSTOM_VALIDATED_SMTP_INJECTION = 'CUSTOM_VALIDATED_SMTP_INJECTION',
168
+ CUSTOM_VALIDATED_SQL_INJECTION = 'CUSTOM_VALIDATED_SQL_INJECTION',
169
+ CUSTOM_VALIDATED_SSRF = 'CUSTOM_VALIDATED_SSRF',
170
+ CUSTOM_VALIDATED_STORED_XSS = 'CUSTOM_VALIDATED_STORED_XSS',
171
+ CUSTOM_VALIDATED_TRUST_BOUNDARY_VIOLATION = 'CUSTOM_VALIDATED_TRUST_BOUNDARY_VIOLATION',
172
+ CUSTOM_VALIDATED_UNSAFE_CODE_EXECUTION = 'CUSTOM_VALIDATED_UNSAFE_CODE_EXECUTION',
173
+ CUSTOM_VALIDATED_UNSAFE_READLINE = 'CUSTOM_VALIDATED_UNSAFE_READLINE',
174
+ CUSTOM_VALIDATED_UNSAFE_XML_DECODE = 'CUSTOM_VALIDATED_UNSAFE_XML_DECODE',
175
+ CUSTOM_VALIDATED_UNTRUSTED_DESERIALIZATION = 'CUSTOM_VALIDATED_UNTRUSTED_DESERIALIZATION',
176
+ CUSTOM_VALIDATED_UNVALIDATED_FORWARD = 'CUSTOM_VALIDATED_UNVALIDATED_FORWARD',
177
+ CUSTOM_VALIDATED_UNVALIDATED_REDIRECT = 'CUSTOM_VALIDATED_UNVALIDATED_REDIRECT',
178
+ CUSTOM_VALIDATED_XPATH_INJECTION = 'CUSTOM_VALIDATED_XPATH_INJECTION',
179
+ CUSTOM_VALIDATED_XXE = 'CUSTOM_VALIDATED_XXE',
180
+ // tracked_string range tags
181
+ NO_NEWLINES = 'NO_NEWLINES',
182
+ UNTRUSTED = 'UNTRUSTED',
183
+ CROSS_SITE = 'CROSS_SITE',
184
+ LIMITED_CHARS = 'LIMITED_CHARS',
185
+ ALPHANUM_SPACE_HYPHEN = 'ALPHANUM_SPACE_HYPHEN',
186
+ STRING_TYPE_CHECKED = 'STRING_TYPE_CHECKED',
187
+ DATABASE_WRITE = 'DATABASE_WRITE',
188
+ HEADER = 'HEADER',
189
+ COOKIE = 'COOKIE',
190
+ WEAK_URL_ENCODED = 'WEAK_URL_ENCODED',
191
+ }
192
+
97
193
  export const BLOCKING_MODES = ['block', 'block_at_perimeter'];
98
194
 
195
+ export const FS_METHODS = [
196
+ { name: 'access', promises: true, sync: true, indices: [0] },
197
+ { name: 'appendFile', promises: true, sync: true, indices: [0] },
198
+ { name: 'chmod', promises: true, sync: true, indices: [0] },
199
+ { name: 'chown', promises: true, sync: true, indices: [0] },
200
+ { name: 'copyFile', promises: true, sync: true, indices: [0, 1] },
201
+ { name: 'cp', promises: true, sync: true, indices: [0, 1] },
202
+ { name: 'createReadStream', promises: false, sync: false, indices: [0] },
203
+ { name: 'createWriteStream', promises: false, sync: false, indices: [0] },
204
+ { name: 'exists', promises: false, sync: true, indices: [0] },
205
+ { name: 'lchmod', promises: true, sync: true, indices: [0] },
206
+ { name: 'lchown', promises: true, sync: true, indices: [0] },
207
+ { name: 'link', promises: true, sync: true, indices: [0] },
208
+ { name: 'lstat', promises: true, sync: true, indices: [0] },
209
+ { name: 'lutimes', promises: true, sync: true, indices: [0] },
210
+ { name: 'mkdir', promises: true, sync: true, indices: [0] },
211
+ { name: 'mkdtemp', promises: true, sync: true, indices: [0] },
212
+ { name: 'open', promises: true, sync: true, indices: [0] },
213
+ { name: 'openAsBlob', promises: false, sync: false, indices: [0] },
214
+ { name: 'opendir', promises: true, sync: true, indices: [0] },
215
+ { name: 'readdir', promises: true, sync: true, indices: [0] },
216
+ { name: 'readFile', promises: true, sync: true, indices: [0] },
217
+ { name: 'readlink', promises: true, sync: true, indices: [0] },
218
+ { name: 'realpath', promises: true, sync: true, indices: [0] },
219
+ { name: 'rename', promises: true, sync: true, indices: [0, 1] },
220
+ { name: 'rmdir', promises: true, sync: true, indices: [0] },
221
+ { name: 'rm', promises: true, sync: true, indices: [0] },
222
+ { name: 'stat', promises: true, sync: true, indices: [0] },
223
+ { name: 'statfs', promises: true, sync: true, indices: [0] },
224
+ { name: 'symlink', promises: true, sync: true, indices: [0, 1] },
225
+ { name: 'truncate', promises: true, sync: true, indices: [0] },
226
+ { name: 'unlink', promises: true, sync: true, indices: [0] },
227
+ { name: 'unwatchFile', promises: false, sync: false, indices: [0] },
228
+ { name: 'utimes', promises: true, sync: true, indices: [0] },
229
+ { name: 'watch', promises: true, sync: false, indices: [0] },
230
+ { name: 'watchFile', promises: false, sync: false, indices: [0] },
231
+ { name: 'writeFile', promises: true, sync: true, indices: [0] },
232
+ ] as const;
233
+
234
+
package/src/index.ts CHANGED
@@ -282,3 +282,10 @@ const { trim: origTrim } = String.prototype;
282
282
  export function trim(str: string, ...args: []) {
283
283
  return origTrim.call(str, ...args);
284
284
  }
285
+
286
+ import { inspect as originalInspect } from 'util';
287
+ export function inspect(...args: any) {
288
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
289
+ // @ts-ignore
290
+ return originalInspect.call(null, ...args);
291
+ }
@@ -0,0 +1,65 @@
1
+ /*
2
+ * Copyright: 2022 Contrast Security, Inc
3
+ * Contact: support@contrastsecurity.com
4
+ * License: Commercial
5
+
6
+ * NOTICE: This Software and the patented inventions embodied within may only be
7
+ * used as part of Contrast Security’s commercial offerings. Even though it is
8
+ * made available through public repositories, use of this Software is subject to
9
+ * the applicable End User Licensing Agreement found at
10
+ * https://www.contrastsecurity.com/enduser-terms-0317a or as otherwise agreed
11
+ * between Contrast Security and the End User. The Software may not be reverse
12
+ * engineered, modified, repackaged, sold, redistributed or otherwise used in a
13
+ * way not consistent with the End User License Agreement.
14
+ */
15
+
16
+ import { FS_METHODS } from '../constants';
17
+ import { Signature } from '../types';
18
+
19
+ const fs = new Map<string, Signature>(
20
+ FS_METHODS.reduce((sigs, method) => {
21
+ sigs.push([
22
+ `fs.${method.name}`,
23
+ {
24
+ moduleName: 'fs',
25
+ methodName: method.name,
26
+ isModule: true,
27
+ }
28
+ ]);
29
+
30
+ if (method.sync) {
31
+ sigs.push([
32
+ `fs.${method.name}Sync`,
33
+ {
34
+ moduleName: 'fs',
35
+ methodName: `${method.name}Sync`,
36
+ isModule: true,
37
+ }
38
+ ]);
39
+ }
40
+
41
+ if (method.promises) {
42
+ sigs.push([
43
+ `fs.promises.${method.name}`,
44
+ {
45
+ moduleName: 'fs.promises',
46
+ methodName: method.name,
47
+ isModule: true,
48
+ }
49
+ ]);
50
+
51
+ sigs.push([
52
+ `fsPromises.${method.name}`,
53
+ {
54
+ moduleName: 'fsPromises',
55
+ methodName: method.name,
56
+ isModule: true,
57
+ }
58
+ ]);
59
+ }
60
+
61
+ return sigs;
62
+ }, [] as [string, Signature][])
63
+ );
64
+
65
+ export default fs;
@@ -13,10 +13,15 @@
13
13
  * way not consistent with the End User License Agreement.
14
14
  */
15
15
 
16
+ import mongodb from './mongodb';
16
17
  import mssql from './mssql';
18
+ import fs from './fs';
19
+ import { Signature } from '../types';
17
20
 
18
- export const signatures: Map<string, any> = new Map(
21
+ export const signatures = new Map<string, Signature>(
19
22
  [
23
+ ...fs,
24
+ ...mongodb,
20
25
  ...mssql,
21
26
  [
22
27
  'Url.prototype.parse',
@@ -414,15 +419,6 @@ export const signatures: Map<string, any> = new Map(
414
419
  isModule: true,
415
420
  }
416
421
  ],
417
- [
418
- 'mongodb.Collection.prototype.rename',
419
- {
420
- moduleName: 'mongodb',
421
- version: '>=3.3.0',
422
- methodName: 'Collection.prototype.rename',
423
- isModule: true,
424
- }
425
- ],
426
422
  [
427
423
  'marsdb.Collection.prototype.find',
428
424
  {
@@ -601,6 +597,22 @@ export const signatures: Map<string, any> = new Map(
601
597
  isModule: true,
602
598
  }
603
599
  ],
600
+ [
601
+ 'child_process.execFile',
602
+ {
603
+ moduleName: 'child_process',
604
+ methodName: 'execFile',
605
+ isModule: true,
606
+ }
607
+ ],
608
+ [
609
+ 'child_process.execFileSync',
610
+ {
611
+ moduleName: 'child_process',
612
+ methodName: 'execFileSync',
613
+ isModule: true,
614
+ }
615
+ ],
604
616
  [
605
617
  'Math.random',
606
618
  {
@@ -1292,310 +1304,6 @@ export const signatures: Map<string, any> = new Map(
1292
1304
  target: 'R',
1293
1305
  }
1294
1306
  ],
1295
- [
1296
- 'fs.access',
1297
- {
1298
- moduleName: 'fs',
1299
- methodName: 'access',
1300
- isModule: true,
1301
- }
1302
- ],
1303
- [
1304
- 'fs.accessSync',
1305
- {
1306
- moduleName: 'fs',
1307
- methodName: 'accessSync',
1308
- isModule: true,
1309
- }
1310
- ],
1311
- [
1312
- 'fs.copyFile',
1313
- {
1314
- moduleName: 'fs',
1315
- methodName: 'copyFile',
1316
- isModule: true,
1317
- }
1318
- ],
1319
- [
1320
- 'fs.copyFileSync',
1321
- {
1322
- moduleName: 'fs',
1323
- methodName: 'copyFileSync',
1324
- isModule: true,
1325
- }
1326
- ],
1327
- [
1328
- 'fs.appendFile',
1329
- {
1330
- moduleName: 'fs',
1331
- methodName: 'appendFile',
1332
- isModule: true,
1333
- }
1334
- ],
1335
- [
1336
- 'fs.appendFileSync',
1337
- {
1338
- moduleName: 'fs',
1339
- methodName: 'appendFileSync',
1340
- isModule: true,
1341
- }
1342
- ],
1343
- [
1344
- 'fs.writeFile',
1345
- {
1346
- moduleName: 'fs',
1347
- methodName: 'writeFile',
1348
- isModule: true,
1349
- }
1350
- ],
1351
- [
1352
- 'fs.writeFileSync',
1353
- {
1354
- moduleName: 'fs',
1355
- methodName: 'writeFileSync',
1356
- isModule: true,
1357
- }
1358
- ],
1359
- [
1360
- 'fs.createWriteStream',
1361
- {
1362
- moduleName: 'fs',
1363
- methodName: 'createWriteStream',
1364
- isModule: true,
1365
- }
1366
- ],
1367
- [
1368
- 'fs.createReadStream',
1369
- {
1370
- moduleName: 'fs',
1371
- methodName: 'createReadStream',
1372
- isModule: true,
1373
- }
1374
- ],
1375
- [
1376
- 'fs.unlink',
1377
- {
1378
- moduleName: 'fs',
1379
- methodName: 'unlink',
1380
- isModule: true,
1381
- }
1382
- ],
1383
- [
1384
- 'fs.unlinkSync',
1385
- {
1386
- moduleName: 'fs',
1387
- methodName: 'unlinkSync',
1388
- isModule: true,
1389
- }
1390
- ],
1391
- [
1392
- 'fs.truncate',
1393
- {
1394
- moduleName: 'fs',
1395
- methodName: 'truncate',
1396
- isModule: true,
1397
- }
1398
- ],
1399
- [
1400
- 'fs.truncateSync',
1401
- {
1402
- moduleName: 'fs',
1403
- methodName: 'truncateSync',
1404
- isModule: true,
1405
- }
1406
- ],
1407
- [
1408
- 'fs.rmdir',
1409
- {
1410
- moduleName: 'fs',
1411
- methodName: 'rmdir',
1412
- isModule: true,
1413
- }
1414
- ],
1415
- [
1416
- 'fs.rmdirSync',
1417
- {
1418
- moduleName: 'fs',
1419
- methodName: 'rmdirSync',
1420
- isModule: true,
1421
- }
1422
- ],
1423
- [
1424
- 'fs.rename',
1425
- {
1426
- moduleName: 'fs',
1427
- methodName: 'rename',
1428
- isModule: true,
1429
- }
1430
- ],
1431
- [
1432
- 'fs.renameSync',
1433
- {
1434
- moduleName: 'fs',
1435
- methodName: 'renameSync',
1436
- isModule: true,
1437
- }
1438
- ],
1439
- [
1440
- 'fs.readFile',
1441
- {
1442
- moduleName: 'fs',
1443
- methodName: 'readFile',
1444
- isModule: true,
1445
- }
1446
- ],
1447
- [
1448
- 'fs.readFileSync',
1449
- {
1450
- moduleName: 'fs',
1451
- methodName: 'readFileSync',
1452
- isModule: true,
1453
- }
1454
- ],
1455
- [
1456
- 'fs.readdir',
1457
- {
1458
- moduleName: 'fs',
1459
- methodName: 'readdir',
1460
- isModule: true,
1461
- }
1462
- ],
1463
- [
1464
- 'fs.readdirSync',
1465
- {
1466
- moduleName: 'fs',
1467
- methodName: 'readdirSync',
1468
- isModule: true,
1469
- }
1470
- ],
1471
- [
1472
- 'fs.open',
1473
- {
1474
- moduleName: 'fs',
1475
- methodName: 'open',
1476
- isModule: true,
1477
- }
1478
- ],
1479
- [
1480
- 'fs.openSync',
1481
- {
1482
- moduleName: 'fs',
1483
- methodName: 'openSync',
1484
- isModule: true,
1485
- }
1486
- ],
1487
- [
1488
- 'fs.mkdir',
1489
- {
1490
- moduleName: 'fs',
1491
- methodName: 'mkdir',
1492
- isModule: true,
1493
- }
1494
- ],
1495
- [
1496
- 'fs.mkdirSync',
1497
- {
1498
- moduleName: 'fs',
1499
- methodName: 'mkdirSync',
1500
- isModule: true,
1501
- }
1502
- ],
1503
- [
1504
- 'fs.readlink',
1505
- {
1506
- moduleName: 'fs',
1507
- methodName: 'readlink',
1508
- isModule: true,
1509
- }
1510
- ],
1511
- [
1512
- 'fs.readlinkSync',
1513
- {
1514
- moduleName: 'fs',
1515
- methodName: 'readlinkSync',
1516
- isModule: true,
1517
- }
1518
- ],
1519
- [
1520
- 'fs.symlink',
1521
- {
1522
- moduleName: 'fs',
1523
- methodName: 'symlink',
1524
- isModule: true,
1525
- }
1526
- ],
1527
- [
1528
- 'fs.symlinkSync',
1529
- {
1530
- moduleName: 'fs',
1531
- methodName: 'symlinkSync',
1532
- isModule: true,
1533
- }
1534
- ],
1535
- [
1536
- 'fs.chmod',
1537
- {
1538
- moduleName: 'fs',
1539
- methodName: 'chmod',
1540
- isModule: true,
1541
- }
1542
- ],
1543
- [
1544
- 'fs.chmodSync',
1545
- {
1546
- moduleName: 'fs',
1547
- methodName: 'chmodSync',
1548
- isModule: true,
1549
- }
1550
- ],
1551
- [
1552
- 'fs.lchmod',
1553
- {
1554
- moduleName: 'fs',
1555
- methodName: 'lchmod',
1556
- isModule: true,
1557
- }
1558
- ],
1559
- [
1560
- 'fs.lchmodSync',
1561
- {
1562
- moduleName: 'fs',
1563
- methodName: 'lchmodSync',
1564
- isModule: true,
1565
- }
1566
- ],
1567
- [
1568
- 'fs.chown',
1569
- {
1570
- moduleName: 'fs',
1571
- methodName: 'chown',
1572
- isModule: true,
1573
- }
1574
- ],
1575
- [
1576
- 'fs.chownSync',
1577
- {
1578
- moduleName: 'fs',
1579
- methodName: 'chownSync',
1580
- isModule: true,
1581
- }
1582
- ],
1583
- [
1584
- 'fs.lchown',
1585
- {
1586
- moduleName: 'fs',
1587
- methodName: 'lchown',
1588
- isModule: true,
1589
- }
1590
- ],
1591
- [
1592
- 'fs.lchownSync',
1593
- {
1594
- moduleName: 'fs',
1595
- methodName: 'lchownSync',
1596
- isModule: true,
1597
- }
1598
- ],
1599
1307
  [
1600
1308
  'querystring.escape',
1601
1309
  {
@@ -2412,5 +2120,5 @@ export const signatures: Map<string, any> = new Map(
2412
2120
  isModule: true,
2413
2121
  }
2414
2122
  ]
2415
- ]
2123
+ ] as [string, Signature][]
2416
2124
  );
@@ -0,0 +1,46 @@
1
+ /*
2
+ * Copyright: 2022 Contrast Security, Inc
3
+ * Contact: support@contrastsecurity.com
4
+ * License: Commercial
5
+
6
+ * NOTICE: This Software and the patented inventions embodied within may only be
7
+ * used as part of Contrast Security’s commercial offerings. Even though it is
8
+ * made available through public repositories, use of this Software is subject to
9
+ * the applicable End User Licensing Agreement found at
10
+ * https://www.contrastsecurity.com/enduser-terms-0317a or as otherwise agreed
11
+ * between Contrast Security and the End User. The Software may not be reverse
12
+ * engineered, modified, repackaged, sold, redistributed or otherwise used in a
13
+ * way not consistent with the End User License Agreement.
14
+ */
15
+
16
+ const collectionSignatures: [string, any][] = [
17
+ 'find',
18
+ 'findOne',
19
+ 'findAndModify',
20
+ 'findOneAndDelete',
21
+ 'findOneAndReplace',
22
+ 'findOneAndUpdate',
23
+ 'remove',
24
+ 'removeOne',
25
+ 'replaceOne',
26
+ 'removeMany',
27
+ 'save',
28
+ 'update',
29
+ 'updateOne',
30
+ 'updateMany',
31
+ 'deleteOne',
32
+ 'deleteMany',
33
+ ].map((method) => [
34
+ `mongodb.Collection.prototype.${method}`,
35
+ {
36
+ moduleName: 'mongodb',
37
+ methodName: `Collection.prototype.${method}`,
38
+ isModule: true,
39
+ }
40
+ ]);
41
+
42
+ const mongodb: Map<string, any> = new Map([
43
+ ...collectionSignatures,
44
+ ]);
45
+
46
+ export default mongodb;
@@ -13,14 +13,16 @@
13
13
  * way not consistent with the End User License Agreement.
14
14
  */
15
15
 
16
+ import { Signature } from '../types';
16
17
 
17
- const mssql: Map<string, any> = new Map([
18
+
19
+ const mssql = new Map<string, Signature>([
18
20
  [
19
21
  'mssql/lib/base/prepared-statement.prototype.prepare',
20
22
  {
21
23
  moduleName: 'mssql',
22
24
  version: '>=6.4.0',
23
- filename: 'lib/base/prepared-statement.js',
25
+ fileName: 'lib/base/prepared-statement.js',
24
26
  methodName: 'PreparedStatement.prototype.prepare',
25
27
  isModule: true,
26
28
  },
@@ -30,7 +32,7 @@ const mssql: Map<string, any> = new Map([
30
32
  {
31
33
  moduleName: 'mssql',
32
34
  version: '>=6.4.0',
33
- filename: 'lib/base/request.js',
35
+ fileName: 'lib/base/request.js',
34
36
  methodName: 'Request.prototype.batch',
35
37
  isModule: true,
36
38
  },
@@ -40,11 +42,11 @@ const mssql: Map<string, any> = new Map([
40
42
  {
41
43
  moduleName: 'mssql',
42
44
  version: '>=6.4.0',
43
- filename: 'lib/base/request.js',
45
+ fileName: 'lib/base/request.js',
44
46
  methodName: 'Request.prototype.query',
45
47
  isModule: true,
46
48
  },
47
49
  ],
48
- ]);
50
+ ] as [string, Signature][]);
49
51
 
50
52
  export default mssql;
package/src/types.ts CHANGED
@@ -21,6 +21,17 @@ export interface Installable {
21
21
  uninstall?(): void | Promise<void>;
22
22
  }
23
23
 
24
+ export interface Signature {
25
+ moduleName: string;
26
+ methodName: string;
27
+ fileName?: string;
28
+ version?: string;
29
+ isModule: boolean;
30
+ isConstructor?: boolean;
31
+ source?: 'O' | 'P' | 'R';
32
+ target?: 'O' | 'P' | 'R';
33
+ }
34
+
24
35
  export interface AppInfo {
25
36
  os: {
26
37
  type: string;