@contrast/contrast 2.0.2-beta.2 → 2.0.2-beta.4

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 (358) hide show
  1. package/README.md +51 -1
  2. package/dist/audit/catalogueApplication/catalogueApplication.js +6 -10
  3. package/dist/audit/catalogueApplication/catalogueApplication.js.map +1 -0
  4. package/dist/audit/languageAnalysisEngine/commonApi.js +3 -6
  5. package/dist/audit/languageAnalysisEngine/commonApi.js.map +1 -0
  6. package/dist/audit/languageAnalysisEngine/filterProjectPath.js +1 -0
  7. package/dist/audit/languageAnalysisEngine/filterProjectPath.js.map +1 -0
  8. package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js +9 -12
  9. package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js.map +1 -0
  10. package/dist/audit/languageAnalysisEngine/sendSnapshot.js +15 -19
  11. package/dist/audit/languageAnalysisEngine/sendSnapshot.js.map +1 -0
  12. package/dist/audit/nodeAnalysisEngine/parseYarn2LockFileContents.js +9 -9
  13. package/dist/audit/nodeAnalysisEngine/parseYarn2LockFileContents.js.map +1 -0
  14. package/dist/audit/report/commonReportingFunctions.js +33 -48
  15. package/dist/audit/report/commonReportingFunctions.js.map +1 -0
  16. package/dist/audit/report/models/reportGuidanceModel.js +2 -5
  17. package/dist/audit/report/models/reportGuidanceModel.js.map +1 -0
  18. package/dist/audit/report/models/reportLibraryModel.js +3 -7
  19. package/dist/audit/report/models/reportLibraryModel.js.map +1 -0
  20. package/dist/audit/report/models/reportListModel.js +4 -9
  21. package/dist/audit/report/models/reportListModel.js.map +1 -0
  22. package/dist/audit/report/models/reportOutputModel.js +4 -9
  23. package/dist/audit/report/models/reportOutputModel.js.map +1 -0
  24. package/dist/audit/report/models/reportSeverityModel.js +2 -5
  25. package/dist/audit/report/models/reportSeverityModel.js.map +1 -0
  26. package/dist/audit/report/models/severityCountModel.js +3 -5
  27. package/dist/audit/report/models/severityCountModel.js.map +1 -0
  28. package/dist/audit/report/reportingFeature.js +27 -55
  29. package/dist/audit/report/reportingFeature.js.map +1 -0
  30. package/dist/audit/report/utils/reportUtils.js +28 -59
  31. package/dist/audit/report/utils/reportUtils.js.map +1 -0
  32. package/dist/audit/save.js +14 -16
  33. package/dist/audit/save.js.map +1 -0
  34. package/dist/cliConstants.js +17 -18
  35. package/dist/cliConstants.js.map +1 -0
  36. package/dist/commands/audit/auditConfig.js +7 -10
  37. package/dist/commands/audit/auditConfig.js.map +1 -0
  38. package/dist/commands/audit/auditController.js +9 -13
  39. package/dist/commands/audit/auditController.js.map +1 -0
  40. package/dist/commands/audit/help.js +23 -25
  41. package/dist/commands/audit/help.js.map +1 -0
  42. package/dist/commands/audit/processAudit.js +9 -12
  43. package/dist/commands/audit/processAudit.js.map +1 -0
  44. package/dist/commands/audit/saveFile.js +3 -6
  45. package/dist/commands/audit/saveFile.js.map +1 -0
  46. package/dist/commands/auth/auth.js +25 -24
  47. package/dist/commands/auth/auth.js.map +1 -0
  48. package/dist/commands/config/config.js +12 -13
  49. package/dist/commands/config/config.js.map +1 -0
  50. package/dist/commands/github/fingerprintConfig.js +8 -11
  51. package/dist/commands/github/fingerprintConfig.js.map +1 -0
  52. package/dist/commands/github/processFingerprint.js +12 -15
  53. package/dist/commands/github/processFingerprint.js.map +1 -0
  54. package/dist/commands/github/projectGroup.js +25 -32
  55. package/dist/commands/github/projectGroup.js.map +1 -0
  56. package/dist/commands/github/repoServices.js +11 -21
  57. package/dist/commands/github/repoServices.js.map +1 -0
  58. package/dist/commands/learn/learn.js +3 -6
  59. package/dist/commands/learn/learn.js.map +1 -0
  60. package/dist/commands/learn/processLearn.js +3 -6
  61. package/dist/commands/learn/processLearn.js.map +1 -0
  62. package/dist/commands/scan/processScan.js +11 -14
  63. package/dist/commands/scan/processScan.js.map +1 -0
  64. package/dist/common/HTTPClient.js +123 -94
  65. package/dist/common/HTTPClient.js.map +1 -0
  66. package/dist/common/autoDetection.js +26 -33
  67. package/dist/common/autoDetection.js.map +1 -0
  68. package/dist/common/baseRequest.js +14 -18
  69. package/dist/common/baseRequest.js.map +1 -0
  70. package/dist/common/commonHelp.js +13 -13
  71. package/dist/common/commonHelp.js.map +1 -0
  72. package/dist/common/errorHandling.js +30 -39
  73. package/dist/common/errorHandling.js.map +1 -0
  74. package/dist/common/fail.js +6 -12
  75. package/dist/common/fail.js.map +1 -0
  76. package/dist/common/versionChecker.js +16 -19
  77. package/dist/common/versionChecker.js.map +1 -0
  78. package/dist/constants/constants.js +44 -65
  79. package/dist/constants/constants.js.map +1 -0
  80. package/dist/constants/lambda.js +8 -5
  81. package/dist/constants/lambda.js.map +1 -0
  82. package/dist/constants/locales.js +6 -9
  83. package/dist/constants/locales.js.map +1 -0
  84. package/dist/index.js +36 -39
  85. package/dist/index.js.map +1 -0
  86. package/dist/lambda/analytics.js +6 -9
  87. package/dist/lambda/analytics.js.map +1 -0
  88. package/dist/lambda/arn.js +6 -9
  89. package/dist/lambda/arn.js.map +1 -0
  90. package/dist/lambda/aws.js +29 -34
  91. package/dist/lambda/aws.js.map +1 -0
  92. package/dist/lambda/cliError.js +13 -41
  93. package/dist/lambda/cliError.js.map +1 -0
  94. package/dist/lambda/constants.js +3 -4
  95. package/dist/lambda/constants.js.map +1 -0
  96. package/dist/lambda/help.js +39 -44
  97. package/dist/lambda/help.js.map +1 -0
  98. package/dist/lambda/lambda.js +61 -65
  99. package/dist/lambda/lambda.js.map +1 -0
  100. package/dist/lambda/lambdaUtils.js +38 -32
  101. package/dist/lambda/lambdaUtils.js.map +1 -0
  102. package/dist/lambda/logUtils.js +21 -17
  103. package/dist/lambda/logUtils.js.map +1 -0
  104. package/dist/lambda/scanDetailCompletion.js +19 -25
  105. package/dist/lambda/scanDetailCompletion.js.map +1 -0
  106. package/dist/lambda/scanRequest.js +34 -41
  107. package/dist/lambda/scanRequest.js.map +1 -0
  108. package/dist/lambda/scanResults.js +8 -10
  109. package/dist/lambda/scanResults.js.map +1 -0
  110. package/dist/lambda/types.js +5 -7
  111. package/dist/lambda/types.js.map +1 -0
  112. package/dist/lambda/utils.js +33 -35
  113. package/dist/lambda/utils.js.map +1 -0
  114. package/dist/sbom/generateSbom.js +6 -10
  115. package/dist/sbom/generateSbom.js.map +1 -0
  116. package/dist/scaAnalysis/common/auditReport.js +8 -12
  117. package/dist/scaAnalysis/common/auditReport.js.map +1 -0
  118. package/dist/scaAnalysis/common/commonReportingFunctionsSca.js +26 -32
  119. package/dist/scaAnalysis/common/commonReportingFunctionsSca.js.map +1 -0
  120. package/dist/scaAnalysis/common/formatMessage.js +8 -17
  121. package/dist/scaAnalysis/common/formatMessage.js.map +1 -0
  122. package/dist/scaAnalysis/common/models/ScaReportModel.js +4 -9
  123. package/dist/scaAnalysis/common/models/ScaReportModel.js.map +1 -0
  124. package/dist/scaAnalysis/common/scaParserForGoAndJava.js +10 -9
  125. package/dist/scaAnalysis/common/scaParserForGoAndJava.js.map +1 -0
  126. package/dist/scaAnalysis/common/scaServicesUpload.js +21 -22
  127. package/dist/scaAnalysis/common/scaServicesUpload.js.map +1 -0
  128. package/dist/scaAnalysis/common/treeUpload.js +7 -10
  129. package/dist/scaAnalysis/common/treeUpload.js.map +1 -0
  130. package/dist/scaAnalysis/common/utils/reportUtilsSca.js +21 -29
  131. package/dist/scaAnalysis/common/utils/reportUtilsSca.js.map +1 -0
  132. package/dist/scaAnalysis/dotnet/analysis.js +12 -18
  133. package/dist/scaAnalysis/dotnet/analysis.js.map +1 -0
  134. package/dist/scaAnalysis/dotnet/index.js +4 -7
  135. package/dist/scaAnalysis/dotnet/index.js.map +1 -0
  136. package/dist/scaAnalysis/go/goAnalysis.js +8 -11
  137. package/dist/scaAnalysis/go/goAnalysis.js.map +1 -0
  138. package/dist/scaAnalysis/go/goParseDeps.js +9 -7
  139. package/dist/scaAnalysis/go/goParseDeps.js.map +1 -0
  140. package/dist/scaAnalysis/go/goReadDepFile.js +10 -8
  141. package/dist/scaAnalysis/go/goReadDepFile.js.map +1 -0
  142. package/dist/scaAnalysis/java/analysis.js +23 -20
  143. package/dist/scaAnalysis/java/analysis.js.map +1 -0
  144. package/dist/scaAnalysis/java/index.js +7 -10
  145. package/dist/scaAnalysis/java/index.js.map +1 -0
  146. package/dist/scaAnalysis/java/javaBuildDepsParser.js +43 -43
  147. package/dist/scaAnalysis/java/javaBuildDepsParser.js.map +1 -0
  148. package/dist/scaAnalysis/javascript/analysis.js +16 -20
  149. package/dist/scaAnalysis/javascript/analysis.js.map +1 -0
  150. package/dist/scaAnalysis/javascript/index.js +17 -19
  151. package/dist/scaAnalysis/javascript/index.js.map +1 -0
  152. package/dist/scaAnalysis/javascript/scaServiceParser.js +8 -15
  153. package/dist/scaAnalysis/javascript/scaServiceParser.js.map +1 -0
  154. package/dist/scaAnalysis/legacy/legacyFlow.js +13 -15
  155. package/dist/scaAnalysis/legacy/legacyFlow.js.map +1 -0
  156. package/dist/scaAnalysis/php/analysis.js +15 -16
  157. package/dist/scaAnalysis/php/analysis.js.map +1 -0
  158. package/dist/scaAnalysis/php/index.js +5 -8
  159. package/dist/scaAnalysis/php/index.js.map +1 -0
  160. package/dist/scaAnalysis/php/phpNewServicesMapper.js +9 -12
  161. package/dist/scaAnalysis/php/phpNewServicesMapper.js.map +1 -0
  162. package/dist/scaAnalysis/processServicesFlow.js +50 -25
  163. package/dist/scaAnalysis/processServicesFlow.js.map +1 -0
  164. package/dist/scaAnalysis/python/analysis.js +16 -23
  165. package/dist/scaAnalysis/python/analysis.js.map +1 -0
  166. package/dist/scaAnalysis/python/index.js +4 -7
  167. package/dist/scaAnalysis/python/index.js.map +1 -0
  168. package/dist/scaAnalysis/repoMode/gradleParser.js +7 -13
  169. package/dist/scaAnalysis/repoMode/gradleParser.js.map +1 -0
  170. package/dist/scaAnalysis/repoMode/index.js +9 -12
  171. package/dist/scaAnalysis/repoMode/index.js.map +1 -0
  172. package/dist/scaAnalysis/repoMode/mavenParser.js +12 -12
  173. package/dist/scaAnalysis/repoMode/mavenParser.js.map +1 -0
  174. package/dist/scaAnalysis/ruby/analysis.js +32 -46
  175. package/dist/scaAnalysis/ruby/analysis.js.map +1 -0
  176. package/dist/scaAnalysis/ruby/index.js +5 -8
  177. package/dist/scaAnalysis/ruby/index.js.map +1 -0
  178. package/dist/scaAnalysis/scaAnalysis.js +49 -51
  179. package/dist/scaAnalysis/scaAnalysis.js.map +1 -0
  180. package/dist/scan/fileUtils.js +27 -36
  181. package/dist/scan/fileUtils.js.map +1 -0
  182. package/dist/scan/formatScanOutput.js +47 -61
  183. package/dist/scan/formatScanOutput.js.map +1 -0
  184. package/dist/scan/help.js +8 -11
  185. package/dist/scan/help.js.map +1 -0
  186. package/dist/scan/models/groupedResultsModel.js +2 -5
  187. package/dist/scan/models/groupedResultsModel.js.map +1 -0
  188. package/dist/scan/models/resultContentModel.js +2 -2
  189. package/dist/scan/models/resultContentModel.js.map +1 -0
  190. package/dist/scan/models/scanResultsModel.js +2 -5
  191. package/dist/scan/models/scanResultsModel.js.map +1 -0
  192. package/dist/scan/populateProjectIdAndProjectName.js +9 -12
  193. package/dist/scan/populateProjectIdAndProjectName.js.map +1 -0
  194. package/dist/scan/saveResults.js +3 -6
  195. package/dist/scan/saveResults.js.map +1 -0
  196. package/dist/scan/scan.js +24 -31
  197. package/dist/scan/scan.js.map +1 -0
  198. package/dist/scan/scanConfig.js +14 -12
  199. package/dist/scan/scanConfig.js.map +1 -0
  200. package/dist/scan/scanController.js +17 -20
  201. package/dist/scan/scanController.js.map +1 -0
  202. package/dist/scan/scanResults.js +27 -34
  203. package/dist/scan/scanResults.js.map +1 -0
  204. package/dist/telemetry/telemetry.js +29 -59
  205. package/dist/telemetry/telemetry.js.map +1 -0
  206. package/dist/utils/capabilities.js +1 -0
  207. package/dist/utils/capabilities.js.map +1 -0
  208. package/dist/utils/commonApi.js +15 -24
  209. package/dist/utils/commonApi.js.map +1 -0
  210. package/dist/utils/filterProjectPath.js +1 -0
  211. package/dist/utils/filterProjectPath.js.map +1 -0
  212. package/dist/utils/generalAPI.js +11 -17
  213. package/dist/utils/generalAPI.js.map +1 -0
  214. package/dist/utils/getConfig.js +7 -13
  215. package/dist/utils/getConfig.js.map +1 -0
  216. package/dist/utils/oraWrapper.js +7 -14
  217. package/dist/utils/oraWrapper.js.map +1 -0
  218. package/dist/utils/paramsUtil/commandlineParams.js +2 -5
  219. package/dist/utils/paramsUtil/commandlineParams.js.map +1 -0
  220. package/dist/utils/paramsUtil/configStoreParams.js +9 -10
  221. package/dist/utils/paramsUtil/configStoreParams.js.map +1 -0
  222. package/dist/utils/paramsUtil/envVariableParams.js +2 -3
  223. package/dist/utils/paramsUtil/envVariableParams.js.map +1 -0
  224. package/dist/utils/paramsUtil/paramHandler.js +12 -13
  225. package/dist/utils/paramsUtil/paramHandler.js.map +1 -0
  226. package/dist/utils/parsedCLIOptions.js +4 -7
  227. package/dist/utils/parsedCLIOptions.js.map +1 -0
  228. package/dist/utils/requestUtils.js +7 -13
  229. package/dist/utils/requestUtils.js.map +1 -0
  230. package/dist/utils/saveFile.js +8 -11
  231. package/dist/utils/saveFile.js.map +1 -0
  232. package/dist/utils/validationCheck.js +5 -11
  233. package/dist/utils/validationCheck.js.map +1 -0
  234. package/package.json +32 -41
  235. package/.prettierignore +0 -1
  236. package/bin/contrast.js +0 -2
  237. package/dist/audit/languageAnalysisEngine/util/requestUtils.js +0 -14
  238. package/dist/lambda/__mocks__/aws.js +0 -21
  239. package/dist/lambda/__mocks__/lambdaConfig.json +0 -42
  240. package/src/audit/catalogueApplication/catalogueApplication.js +0 -51
  241. package/src/audit/languageAnalysisEngine/commonApi.js +0 -20
  242. package/src/audit/languageAnalysisEngine/filterProjectPath.js +0 -21
  243. package/src/audit/languageAnalysisEngine/getProjectRootFilenames.js +0 -36
  244. package/src/audit/languageAnalysisEngine/sendSnapshot.js +0 -57
  245. package/src/audit/languageAnalysisEngine/util/requestUtils.js +0 -17
  246. package/src/audit/nodeAnalysisEngine/parseYarn2LockFileContents.js +0 -63
  247. package/src/audit/report/commonReportingFunctions.js +0 -412
  248. package/src/audit/report/models/reportGuidanceModel.ts +0 -5
  249. package/src/audit/report/models/reportLibraryModel.ts +0 -30
  250. package/src/audit/report/models/reportListModel.ts +0 -49
  251. package/src/audit/report/models/reportOutputModel.ts +0 -29
  252. package/src/audit/report/models/reportSeverityModel.ts +0 -18
  253. package/src/audit/report/models/severityCountModel.ts +0 -22
  254. package/src/audit/report/reportingFeature.ts +0 -110
  255. package/src/audit/report/utils/reportUtils.ts +0 -165
  256. package/src/audit/save.js +0 -67
  257. package/src/cliConstants.js +0 -523
  258. package/src/commands/audit/auditConfig.js +0 -18
  259. package/src/commands/audit/auditController.js +0 -50
  260. package/src/commands/audit/help.js +0 -72
  261. package/src/commands/audit/processAudit.js +0 -34
  262. package/src/commands/audit/saveFile.js +0 -15
  263. package/src/commands/auth/auth.js +0 -146
  264. package/src/commands/config/config.js +0 -41
  265. package/src/commands/github/fingerprintConfig.js +0 -19
  266. package/src/commands/github/processFingerprint.js +0 -37
  267. package/src/commands/github/projectGroup.js +0 -298
  268. package/src/commands/github/repoServices.js +0 -122
  269. package/src/commands/learn/learn.js +0 -10
  270. package/src/commands/learn/processLearn.js +0 -13
  271. package/src/commands/scan/processScan.js +0 -42
  272. package/src/common/HTTPClient.js +0 -775
  273. package/src/common/autoDetection.js +0 -209
  274. package/src/common/baseRequest.ts +0 -83
  275. package/src/common/commonHelp.js +0 -53
  276. package/src/common/errorHandling.js +0 -157
  277. package/src/common/fail.js +0 -79
  278. package/src/common/versionChecker.js +0 -75
  279. package/src/constants/constants.js +0 -71
  280. package/src/constants/lambda.js +0 -85
  281. package/src/constants/locales.js +0 -365
  282. package/src/index.ts +0 -142
  283. package/src/lambda/__mocks__/aws.ts +0 -32
  284. package/src/lambda/__mocks__/lambdaConfig.json +0 -42
  285. package/src/lambda/analytics.ts +0 -9
  286. package/src/lambda/arn.ts +0 -33
  287. package/src/lambda/aws.ts +0 -248
  288. package/src/lambda/cliError.ts +0 -72
  289. package/src/lambda/constants.ts +0 -11
  290. package/src/lambda/help.ts +0 -92
  291. package/src/lambda/lambda.ts +0 -230
  292. package/src/lambda/lambdaUtils.ts +0 -111
  293. package/src/lambda/logUtils.ts +0 -64
  294. package/src/lambda/scanDetailCompletion.ts +0 -78
  295. package/src/lambda/scanRequest.ts +0 -169
  296. package/src/lambda/scanResults.ts +0 -29
  297. package/src/lambda/types.ts +0 -36
  298. package/src/lambda/utils.ts +0 -188
  299. package/src/sbom/generateSbom.ts +0 -45
  300. package/src/scaAnalysis/common/auditReport.js +0 -59
  301. package/src/scaAnalysis/common/commonReportingFunctionsSca.js +0 -276
  302. package/src/scaAnalysis/common/formatMessage.js +0 -67
  303. package/src/scaAnalysis/common/models/ScaReportModel.ts +0 -81
  304. package/src/scaAnalysis/common/scaParserForGoAndJava.js +0 -41
  305. package/src/scaAnalysis/common/scaServicesUpload.js +0 -159
  306. package/src/scaAnalysis/common/treeUpload.js +0 -51
  307. package/src/scaAnalysis/common/utils/reportUtilsSca.ts +0 -123
  308. package/src/scaAnalysis/dotnet/analysis.js +0 -72
  309. package/src/scaAnalysis/dotnet/index.js +0 -11
  310. package/src/scaAnalysis/go/goAnalysis.js +0 -26
  311. package/src/scaAnalysis/go/goParseDeps.js +0 -203
  312. package/src/scaAnalysis/go/goReadDepFile.js +0 -34
  313. package/src/scaAnalysis/java/analysis.js +0 -148
  314. package/src/scaAnalysis/java/index.js +0 -29
  315. package/src/scaAnalysis/java/javaBuildDepsParser.js +0 -439
  316. package/src/scaAnalysis/javascript/analysis.js +0 -111
  317. package/src/scaAnalysis/javascript/index.js +0 -104
  318. package/src/scaAnalysis/javascript/scaServiceParser.js +0 -151
  319. package/src/scaAnalysis/legacy/legacyFlow.js +0 -43
  320. package/src/scaAnalysis/php/analysis.js +0 -78
  321. package/src/scaAnalysis/php/index.js +0 -28
  322. package/src/scaAnalysis/php/phpNewServicesMapper.js +0 -77
  323. package/src/scaAnalysis/processServicesFlow.js +0 -126
  324. package/src/scaAnalysis/python/analysis.js +0 -93
  325. package/src/scaAnalysis/python/index.js +0 -16
  326. package/src/scaAnalysis/repoMode/gradleParser.js +0 -88
  327. package/src/scaAnalysis/repoMode/index.js +0 -21
  328. package/src/scaAnalysis/repoMode/mavenParser.js +0 -138
  329. package/src/scaAnalysis/ruby/analysis.js +0 -413
  330. package/src/scaAnalysis/ruby/index.js +0 -16
  331. package/src/scaAnalysis/scaAnalysis.js +0 -172
  332. package/src/scan/fileUtils.js +0 -218
  333. package/src/scan/formatScanOutput.ts +0 -225
  334. package/src/scan/help.js +0 -56
  335. package/src/scan/models/groupedResultsModel.ts +0 -20
  336. package/src/scan/models/resultContentModel.ts +0 -86
  337. package/src/scan/models/scanResultsModel.ts +0 -55
  338. package/src/scan/populateProjectIdAndProjectName.js +0 -73
  339. package/src/scan/saveResults.js +0 -14
  340. package/src/scan/scan.ts +0 -68
  341. package/src/scan/scanConfig.js +0 -58
  342. package/src/scan/scanController.js +0 -98
  343. package/src/scan/scanResults.js +0 -171
  344. package/src/telemetry/telemetry.ts +0 -154
  345. package/src/utils/capabilities.js +0 -12
  346. package/src/utils/commonApi.js +0 -103
  347. package/src/utils/filterProjectPath.js +0 -25
  348. package/src/utils/generalAPI.js +0 -52
  349. package/src/utils/getConfig.ts +0 -34
  350. package/src/utils/oraWrapper.js +0 -29
  351. package/src/utils/paramsUtil/commandlineParams.js +0 -12
  352. package/src/utils/paramsUtil/configStoreParams.js +0 -19
  353. package/src/utils/paramsUtil/envVariableParams.js +0 -10
  354. package/src/utils/paramsUtil/paramHandler.js +0 -38
  355. package/src/utils/parsedCLIOptions.js +0 -32
  356. package/src/utils/requestUtils.js +0 -29
  357. package/src/utils/saveFile.js +0 -20
  358. package/src/utils/validationCheck.js +0 -39
@@ -1,230 +0,0 @@
1
- import commandLineArgs from 'command-line-args'
2
- import { performance } from 'perf_hooks'
3
- import { kebabCase } from 'lodash'
4
- import i18n from 'i18n'
5
- import { getAuth } from '../utils/paramsUtil/paramHandler'
6
- import { CliError } from './cliError'
7
- import { ERRORS } from './constants'
8
- import { lambdaUsageGuide } from './help'
9
- import { log } from './logUtils'
10
- import { pollScanUntilCompletion } from './scanDetailCompletion'
11
- import { requestScanFunctionPost } from './scanRequest'
12
- import { getScanResults } from './scanResults'
13
- import { printResults } from './utils'
14
- import { getAllLambdas, printAvailableLambdas } from './lambdaUtils'
15
- import { sleep } from '../utils/requestUtils'
16
- import ora from '../utils/oraWrapper'
17
- import { postAnalytics } from './analytics'
18
- import { LambdaOptions, AnalyticsOption, StatusType, EventType } from './types'
19
- import { APP_VERSION } from '../constants/constants'
20
- import { postRunMessage } from '../common/commonHelp'
21
-
22
- type ApiParams = {
23
- organizationId: string
24
- provider: 'aws'
25
- accountId: string
26
- }
27
-
28
- const failedStates = [
29
- 'UNSUPPORTED',
30
- 'EXCLUDED',
31
- 'CANCELED',
32
- 'FAILED',
33
- 'DISMISSED'
34
- ]
35
-
36
- const printHelpMessage = () => {
37
- log(lambdaUsageGuide)
38
- }
39
-
40
- const getLambdaOptions = (argv: string[]) => {
41
- try {
42
- const lambdaDefinitions = [
43
- { name: 'function-name', alias: 'f', type: String },
44
- { name: 'list-functions', alias: 'l', type: Boolean },
45
- { name: 'region', alias: 'r', type: String },
46
- { name: 'endpoint-url', alias: 'e', type: String },
47
- { name: 'profile', alias: 'p', type: String },
48
- { name: 'help', alias: 'h', type: Boolean },
49
- { name: 'verbose', alias: 'v', type: Boolean },
50
- { name: 'json-output', alias: 'j', type: Boolean }
51
- ]
52
-
53
- const lambdaOptions: LambdaOptions = commandLineArgs(lambdaDefinitions, {
54
- argv,
55
- partial: true,
56
- camelCase: true,
57
- caseInsensitive: true
58
- })
59
-
60
- return lambdaOptions
61
- } catch (error) {
62
- throw new CliError(ERRORS.VALIDATION_FAILED, {
63
- description: (error as Error).message
64
- })
65
- }
66
- }
67
-
68
- const processLambda = async (argv: string[]) => {
69
- let errorMsg
70
- let scanInfo: { functionArn: string; scanId: string } | undefined
71
- const commandSessionId = Date.now().toString(36)
72
- try {
73
- const lambdaOptions = getLambdaOptions(argv)
74
- const { help } = lambdaOptions
75
- const startCommandAnalytics: AnalyticsOption = {
76
- arguments: lambdaOptions,
77
- sessionId: commandSessionId,
78
- eventType: EventType.START,
79
- packageVersion: APP_VERSION
80
- }
81
- postAnalytics(startCommandAnalytics).catch((error: Error) => {
82
- /* ignore */
83
- })
84
- if (help) {
85
- return handleLambdaHelp()
86
- }
87
-
88
- validateRequiredLambdaParams(lambdaOptions)
89
-
90
- if (lambdaOptions.listFunctions) {
91
- await getAvailableFunctions(lambdaOptions)
92
- } else {
93
- scanInfo = await actualProcessLambda(lambdaOptions)
94
- }
95
- } catch (error) {
96
- if (error instanceof CliError) {
97
- errorMsg = error.getErrorMessage()
98
- } else if (error instanceof Error) {
99
- errorMsg = error.message
100
- }
101
- } finally {
102
- const endCommandAnalytics: AnalyticsOption = {
103
- sessionId: commandSessionId,
104
- eventType: EventType.END,
105
- status: errorMsg ? StatusType.FAILED : StatusType.SUCCESS,
106
- packageVersion: APP_VERSION
107
- }
108
- if (errorMsg) {
109
- endCommandAnalytics.errorMsg = errorMsg
110
- console.error(errorMsg)
111
- }
112
- if (scanInfo) {
113
- endCommandAnalytics.scanFunctionData = scanInfo
114
- }
115
- await postAnalytics(endCommandAnalytics).catch((error: Error) => {
116
- /* ignore */
117
- })
118
-
119
- postRunMessage('lambda')
120
-
121
- if (errorMsg) {
122
- process.exit(1)
123
- }
124
- }
125
- }
126
-
127
- const getAvailableFunctions = async (lambdaOptions: LambdaOptions) => {
128
- const lambdas = await getAllLambdas(lambdaOptions)
129
- printAvailableLambdas(lambdas, {
130
- runtimes: ['python', 'java', 'node', 'dotnet']
131
- })
132
- }
133
-
134
- const actualProcessLambda = async (lambdaOptions: LambdaOptions) => {
135
- const auth = getAuth()
136
- const startTime = performance.now()
137
- const { jsonOutput } = lambdaOptions
138
- const { scanId, params, functionArn } = await requestScanFunctionPost(
139
- auth,
140
- lambdaOptions
141
- )
142
- const scans = await pollScanUntilCompletion(auth, 10, params, scanId)
143
- const failedScan = scans
144
- ?.filter((s: any) => s.scanType === 2)
145
- .find((s: any) => failedStates.includes(s.state))
146
-
147
- if (failedScan) {
148
- throw new CliError(ERRORS.FAILED_TO_GET_SCAN, {
149
- statusCode: 200,
150
- errorCode: failedScan.state,
151
- description: failedScan.stateReasonText
152
- })
153
- }
154
-
155
- // Wait to make sure we will have all the results
156
- const startGetherResultsSpinner = ora.returnOra(i18n.__('gatherResults'))
157
- ora.startSpinner(startGetherResultsSpinner)
158
- await sleep(15 * 1000)
159
- ora.succeedSpinner(startGetherResultsSpinner, 'Done gathering results')
160
-
161
- const resultsResponse = await getScanResults(
162
- auth,
163
- params,
164
- scanId,
165
- functionArn
166
- )
167
-
168
- if (jsonOutput) {
169
- console.log(JSON.stringify(resultsResponse?.data?.results, null, 2))
170
- return
171
- }
172
-
173
- const results = resultsResponse?.data?.results
174
- if (!results) {
175
- throw new CliError(ERRORS.FAILED_TO_GET_RESULTS, {
176
- errorCode: 'missingResults'
177
- })
178
- }
179
-
180
- if (!results.length) {
181
- log('👏 No vulnerabilities found')
182
- }
183
-
184
- const endTime = performance.now()
185
- const scanDurationMs = endTime - startTime
186
-
187
- log(`----- Scan completed ${(scanDurationMs / 1000).toFixed(2)}s -----`)
188
-
189
- if (results?.length) {
190
- printResults(results)
191
- }
192
-
193
- return { functionArn, scanId }
194
- }
195
-
196
- const validateRequiredLambdaParams = (options: LambdaOptions) => {
197
- if (options._unknown?.length) {
198
- throw new CliError(ERRORS.VALIDATION_FAILED, {
199
- description: i18n.__('notSupportedFlags', {
200
- flags: options._unknown.join('\n')
201
- })
202
- })
203
- }
204
-
205
- if (!options?.functionName && !options?.listFunctions) {
206
- throw new CliError(ERRORS.VALIDATION_FAILED, {
207
- errorCode: 'missingFunctionName'
208
- })
209
- }
210
-
211
- const flagsWithoutValues = Object.entries(options)
212
- .filter(([, value]) => !value)
213
- .map(([key]) => key)
214
- .map(p => `--${kebabCase(p)}`)
215
-
216
- if (flagsWithoutValues.length) {
217
- throw new CliError(ERRORS.VALIDATION_FAILED, {
218
- description: i18n.__('missingFlagArguments', {
219
- flags: flagsWithoutValues.join('\n')
220
- })
221
- })
222
- }
223
- }
224
-
225
- const handleLambdaHelp = () => {
226
- printHelpMessage()
227
- process.exit(0)
228
- }
229
-
230
- export { processLambda, LambdaOptions, ApiParams, getAvailableFunctions }
@@ -1,111 +0,0 @@
1
- import logSymbols from 'log-symbols'
2
- import chalk from 'chalk'
3
- import i18n from 'i18n'
4
- import {
5
- FunctionConfiguration,
6
- ListFunctionsCommand
7
- } from '@aws-sdk/client-lambda'
8
- import { groupBy, sortBy } from 'lodash'
9
- import { getLambdaClient } from './aws'
10
- import ora from '../utils/oraWrapper'
11
- import { LambdaOptions } from './lambda'
12
- import { log, getReadableFileSize } from './logUtils'
13
-
14
- type RuntimeLanguage = 'java' | 'python' | 'node' | 'dotnet'
15
-
16
- type FilterLambdas = {
17
- runtimes: RuntimeLanguage[]
18
- filterText?: string
19
- }
20
-
21
- /**
22
- *
23
- * @param fucntions all user lambdas
24
- * @param options filter values: runtime / free text
25
- * @returns
26
- */
27
- const printAvailableLambdas = (
28
- fucntions: FunctionConfiguration[] = [],
29
- options: FilterLambdas
30
- ) => {
31
- const { runtimes, filterText = '' } = options
32
- const searchValue = filterText?.trim().toLowerCase()
33
-
34
- const filteredFunctions = fucntions
35
- .filter(f => runtimes.some(r => f.Runtime?.includes(r)))
36
- .filter(f => f.FunctionName?.toLowerCase().includes(searchValue))
37
- log(
38
- i18n.__('availableForScan', {
39
- icon: logSymbols.success,
40
- count: `${filteredFunctions.length}`
41
- })
42
- )
43
- const groupByRuntime = groupBy(filteredFunctions, 'Runtime')
44
-
45
- Object.entries(groupByRuntime).forEach(([runtime, arr]) => {
46
- const sorted = sortBy(arr, 'FunctionName')
47
- const count = `${arr.filter(a => a.Runtime === runtime).length}`
48
-
49
- log(chalk.gray(i18n.__('runtimeCount', { runtime, count })))
50
- sorted.forEach(f => {
51
- const size = f.CodeSize ? getReadableFileSize(f.CodeSize) : ''
52
- log(`${f.FunctionName} ${chalk.gray(`(${size})`)}`)
53
- })
54
- })
55
- }
56
-
57
- /**
58
- *
59
- * @param lambdaOptions to create lambdaClient
60
- * @returns list of all user lambdas that availbale to scan
61
- */
62
- const getAllLambdas = async (lambdaOptions: LambdaOptions) => {
63
- const functions: FunctionConfiguration[] = []
64
- const spinner = ora.returnOra(i18n.__('loadingFunctionList'))
65
-
66
- try {
67
- const client = getLambdaClient(lambdaOptions)
68
- const command = new ListFunctionsCommand({})
69
-
70
- ora.startSpinner(spinner)
71
-
72
- const data = await client.send(command)
73
- const { Functions } = data
74
- let { NextMarker } = data
75
-
76
- if (!Functions?.length) {
77
- ora.failSpinner(spinner, i18n.__('noFunctionsFound'))
78
- return
79
- }
80
-
81
- functions.push(...Functions)
82
- spinner.text = i18n.__('functionsFound', { count: `${functions.length}` })
83
-
84
- // pagination on functions
85
- while (NextMarker) {
86
- command.input.Marker = NextMarker
87
- const chank = await client.send(command)
88
-
89
- if (chank.Functions?.length) {
90
- functions.push(...chank.Functions)
91
- spinner.text = i18n.__('functionsFound', {
92
- count: `${functions.length}`
93
- })
94
- }
95
-
96
- NextMarker = chank.NextMarker
97
- }
98
-
99
- ora.succeedSpinner(
100
- spinner,
101
- i18n.__('functionsFound', { count: `${functions.length}` })
102
- )
103
- } catch (error) {
104
- ora.failSpinner(spinner, i18n.__('failedToLoadFunctions'))
105
- throw error
106
- }
107
-
108
- return functions
109
- }
110
-
111
- export { getAllLambdas, printAvailableLambdas }
@@ -1,64 +0,0 @@
1
- import chalk from 'chalk'
2
- import util from 'util'
3
-
4
- interface logStyles {
5
- bold?: boolean
6
- italic?: boolean
7
- underline?: boolean
8
- strikethrough?: boolean
9
- }
10
-
11
- const log = (message: string | number, styles?: logStyles) => {
12
- let chalkFunction = chalk.reset
13
-
14
- if (styles?.bold) {
15
- chalkFunction = chalk.bold
16
- } else if (styles?.italic) {
17
- chalkFunction = chalk.italic
18
- } else if (styles?.underline) {
19
- chalkFunction = chalk.underline
20
- } else if (styles?.strikethrough) {
21
- chalkFunction = chalk.strikethrough
22
- }
23
-
24
- console.log(styles ? chalkFunction(message) : message)
25
- }
26
-
27
- /**
28
- *
29
- * @param obj any json object or string
30
- * @param depth determines how levels it will recurse to show the json
31
- */
32
- const prettyPrintJson = (obj: string | any, depth: number | null = null) => {
33
- if (!obj) {
34
- return
35
- }
36
-
37
- let objToPrint = obj
38
-
39
- if (typeof obj === 'string') {
40
- objToPrint = JSON.parse(obj)
41
- }
42
-
43
- console.log(util.inspect(objToPrint, { colors: true, depth }))
44
- }
45
-
46
- /**
47
- *
48
- * @param fileSizeInBytes
49
- *
50
- * @returns human readable format
51
- */
52
- const getReadableFileSize = (fileSizeInBytes: number) => {
53
- let i = -1
54
- const byteUnits = [' kB', ' MB', ' GB', ' TB', 'PB', 'EB', 'ZB', 'YB']
55
-
56
- do {
57
- fileSizeInBytes = fileSizeInBytes / 1024
58
- i++
59
- } while (fileSizeInBytes > 1024)
60
-
61
- return Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i]
62
- }
63
-
64
- export { log, prettyPrintJson, getReadableFileSize }
@@ -1,78 +0,0 @@
1
- import i18n from 'i18n'
2
- import { sleep } from '../utils/requestUtils'
3
- import { getHttpClient } from '../utils/commonApi'
4
- import { ApiParams } from './lambda'
5
- import HTTPClient from '../common/HTTPClient'
6
- import ora from '../utils/oraWrapper'
7
- import { CliError } from './cliError'
8
- import { ERRORS } from './constants'
9
- import { ContrastConf } from '../utils/getConfig'
10
-
11
- const MS_IN_MINUTE = 1000 * 60
12
-
13
- const getScanResources = async (
14
- config: ContrastConf,
15
- params: ApiParams,
16
- scanId: string,
17
- httpClient: HTTPClient
18
- ) => {
19
- const res = await httpClient.getScanResources(config, params, scanId)
20
- const { statusCode, body } = res
21
-
22
- if (statusCode === 200) {
23
- return res
24
- }
25
-
26
- const { errorCode } = body || {}
27
- throw new CliError(ERRORS.FAILED_TO_GET_SCAN, { statusCode, errorCode })
28
- }
29
-
30
- const pollScanUntilCompletion = async (
31
- config: any,
32
- timeoutInMinutes: number,
33
- params: ApiParams,
34
- scanId: string
35
- ) => {
36
- const client = getHttpClient(config)
37
-
38
- const activeStatuses = ['PENDING', 'SCANNING', 'QUEUED']
39
- const maxEndTime = new Date().getTime() + timeoutInMinutes * MS_IN_MINUTE
40
- const startScanSpinner = ora.returnOra(i18n.__('scanStarted'))
41
- ora.startSpinner(startScanSpinner)
42
-
43
- await sleep(5000) // wait 5 sec before first polling
44
-
45
- let complete = false
46
- while (!complete) {
47
- try {
48
- const result = await exports.getScanResources(
49
- config,
50
- params,
51
- scanId,
52
- client
53
- )
54
- const { resources: scans } = result.body.data
55
- const staticScans = scans?.filter((s: any) => s.scanType === 2)
56
- complete = staticScans.some((s: any) => !activeStatuses.includes(s.state))
57
-
58
- if (complete) {
59
- ora.succeedSpinner(startScanSpinner, 'Scan Finished')
60
- return scans
61
- }
62
-
63
- await sleep(2 * 1000)
64
- } catch (error) {
65
- ora.failSpinner(startScanSpinner, i18n.__('scanFailed'))
66
- throw error
67
- }
68
-
69
- if (Date.now() >= maxEndTime) {
70
- ora.failSpinner(startScanSpinner, i18n.__('scanTimedOut'))
71
- throw new CliError(ERRORS.FAILED_TO_GET_SCAN, {
72
- errorCode: 'waitingTimedOut'
73
- })
74
- }
75
- }
76
- }
77
-
78
- export { pollScanUntilCompletion, getScanResources }
@@ -1,169 +0,0 @@
1
- import i18n from 'i18n'
2
- import logSymbols from 'log-symbols'
3
- import chalk from 'chalk'
4
- import { parseARN } from './arn'
5
- import {
6
- getLambdaClient,
7
- getLambdaFunctionConfiguration,
8
- getLambdaPolicies,
9
- getLayersLinks
10
- } from './aws'
11
- import { toLowerKeys } from './utils'
12
- import { getHttpClient } from '../utils/commonApi'
13
- import { ApiParams, LambdaOptions } from './lambda'
14
- import { log, prettyPrintJson } from './logUtils'
15
- import { CliError } from './cliError'
16
- import { ERRORS } from './constants'
17
- import { sleep } from '../utils/requestUtils'
18
-
19
- const MAX_RETRIES = 2
20
-
21
- const sendScanPostRequest: (
22
- config: any,
23
- params: ApiParams,
24
- functionsEvent: unknown,
25
- showProgress?: boolean,
26
- retryNumber?: number
27
- ) => any = async (
28
- config,
29
- params,
30
- functionsEvent,
31
- showProgress = false,
32
- retryNumber = 0
33
- ) => {
34
- const client = getHttpClient(config)
35
-
36
- if (showProgress) {
37
- log(i18n.__('sendingScanRequest', { icon: logSymbols.success }))
38
- }
39
-
40
- const res = await client.postFunctionScan(config, params, functionsEvent)
41
- const { statusCode, body } = res
42
-
43
- if (statusCode === 201) {
44
- if (showProgress) {
45
- log(i18n.__('scanRequestedSuccessfully', { icon: logSymbols.success }))
46
- }
47
-
48
- return body?.data?.scanId
49
- }
50
-
51
- let { errorCode } = body?.data || {}
52
- const { data } = body?.data || {}
53
-
54
- let description = ''
55
- switch (errorCode) {
56
- case 'not_supported_runtime':
57
- description = i18n.__(errorCode, {
58
- runtime: data?.runtime,
59
- supportedRuntimes: data?.supportedRuntimes.sort().join(' | ')
60
- })
61
- errorCode = false
62
- break
63
- case 'not_supported_lambda':
64
- description = i18n.__(errorCode)
65
- errorCode = false
66
- break
67
- default:
68
- if (retryNumber < MAX_RETRIES) {
69
- await sleep(3 * 1000)
70
- return sendScanPostRequest(
71
- config,
72
- params,
73
- functionsEvent,
74
- showProgress,
75
- retryNumber + 1
76
- )
77
- }
78
- }
79
-
80
- throw new CliError(ERRORS.FAILED_TO_START_SCAN, {
81
- statusCode,
82
- errorCode,
83
- data,
84
- description
85
- })
86
- }
87
-
88
- const createFunctionEvent = (
89
- lambdaConfig: any,
90
- layersLinks: any,
91
- lambdaPolicies: any
92
- ) => {
93
- delete lambdaConfig.$metadata
94
-
95
- const functionEvent = toLowerKeys(lambdaConfig.Configuration)
96
- functionEvent['code'] = lambdaConfig.Code
97
- functionEvent['rolePolicies'] = lambdaPolicies
98
-
99
- if (layersLinks) {
100
- functionEvent['layers'] = layersLinks
101
- }
102
-
103
- return { function: functionEvent }
104
- }
105
-
106
- const requestScanFunctionPost = async (
107
- config: any,
108
- lambdaOptions: LambdaOptions
109
- ) => {
110
- const { verbose, jsonOutput, functionName } = lambdaOptions
111
- const lambdaClient = getLambdaClient(lambdaOptions)
112
-
113
- if (!jsonOutput) {
114
- log(
115
- i18n.__('fetchingConfiguration', {
116
- icon: logSymbols.success,
117
- functionName: chalk.bold(functionName)
118
- })
119
- )
120
- }
121
-
122
- const lambdaConfig = await getLambdaFunctionConfiguration(
123
- lambdaClient,
124
- lambdaOptions
125
- )
126
- if (!lambdaConfig?.Configuration) {
127
- throw new CliError(ERRORS.FAILED_TO_START_SCAN, {
128
- errorCode: 'missingLambdaConfig'
129
- })
130
- }
131
- const { Configuration } = lambdaConfig
132
- const layersLinks = await getLayersLinks(lambdaClient, Configuration)
133
- const lambdaPolicies = await getLambdaPolicies(Configuration, lambdaOptions)
134
-
135
- const functionEvent = createFunctionEvent(
136
- lambdaConfig,
137
- layersLinks,
138
- lambdaPolicies
139
- )
140
- const { FunctionArn: functionArn } = Configuration
141
- if (!functionArn) {
142
- throw new CliError(ERRORS.FAILED_TO_START_SCAN, {
143
- errorCode: 'missingLambdaArn'
144
- })
145
- }
146
-
147
- const parsedARN = parseARN(functionArn)
148
- const params: ApiParams = {
149
- organizationId: config.organizationId,
150
- provider: 'aws',
151
- accountId: parsedARN.accountId
152
- }
153
-
154
- if (verbose) {
155
- log(i18n.__('fetchedConfiguration', { icon: logSymbols.success }))
156
- prettyPrintJson(functionEvent)
157
- }
158
-
159
- const scanId = await sendScanPostRequest(
160
- config,
161
- params,
162
- functionEvent,
163
- !jsonOutput
164
- )
165
-
166
- return { scanId, params, functionArn }
167
- }
168
-
169
- export { sendScanPostRequest, requestScanFunctionPost, createFunctionEvent }
@@ -1,29 +0,0 @@
1
- import { getHttpClient } from '../utils/commonApi'
2
- import { CliError } from './cliError'
3
- import { ERRORS } from './constants'
4
- import { ApiParams } from './lambda'
5
-
6
- const getScanResults = async (
7
- config: any,
8
- params: ApiParams,
9
- scanId: string,
10
- functionArn: string
11
- ) => {
12
- const client = getHttpClient(config)
13
-
14
- const { statusCode, body } = await client.getFunctionScanResults(
15
- config,
16
- params,
17
- scanId,
18
- functionArn
19
- )
20
-
21
- if (statusCode === 200) {
22
- return body
23
- }
24
-
25
- const { errorCode } = body || {}
26
- throw new CliError(ERRORS.FAILED_TO_GET_RESULTS, { statusCode, errorCode })
27
- }
28
-
29
- export { getScanResults }