@appland/scanner 1.33.1

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 (196) hide show
  1. package/LICENSE.txt +25 -0
  2. package/README.md +122 -0
  3. package/built/algorithms/dataStructures/graph/Graph.js +155 -0
  4. package/built/algorithms/dataStructures/graph/Graph.js.map +1 -0
  5. package/built/algorithms/dataStructures/graph/GraphEdge.js +27 -0
  6. package/built/algorithms/dataStructures/graph/GraphEdge.js.map +1 -0
  7. package/built/algorithms/dataStructures/graph/GraphVertex.js +79 -0
  8. package/built/algorithms/dataStructures/graph/GraphVertex.js.map +1 -0
  9. package/built/algorithms/dataStructures/linked-list/LinkedList.js +134 -0
  10. package/built/algorithms/dataStructures/linked-list/LinkedList.js.map +1 -0
  11. package/built/algorithms/dataStructures/linked-list/LinkedListNode.js +16 -0
  12. package/built/algorithms/dataStructures/linked-list/LinkedListNode.js.map +1 -0
  13. package/built/algorithms/graph/depth-first-search/index.js +49 -0
  14. package/built/algorithms/graph/depth-first-search/index.js.map +1 -0
  15. package/built/algorithms/graph/detect-cycle/index.js +77 -0
  16. package/built/algorithms/graph/detect-cycle/index.js.map +1 -0
  17. package/built/algorithms/utils/Comparator.js +35 -0
  18. package/built/algorithms/utils/Comparator.js.map +1 -0
  19. package/built/analyzer/recordSecrets.js +17 -0
  20. package/built/analyzer/recordSecrets.js.map +1 -0
  21. package/built/analyzer/secretsRegexes.js +13 -0
  22. package/built/analyzer/secretsRegexes.js.map +1 -0
  23. package/built/analyzer/secretsRegexesData.json +51 -0
  24. package/built/check.js +47 -0
  25. package/built/check.js.map +1 -0
  26. package/built/checkInstance.js +69 -0
  27. package/built/checkInstance.js.map +1 -0
  28. package/built/cli/ci/command.js +183 -0
  29. package/built/cli/ci/command.js.map +1 -0
  30. package/built/cli/ci/options.js +3 -0
  31. package/built/cli/ci/options.js.map +1 -0
  32. package/built/cli/exitCode.js +11 -0
  33. package/built/cli/exitCode.js.map +1 -0
  34. package/built/cli/progressReporter.js +16 -0
  35. package/built/cli/progressReporter.js.map +1 -0
  36. package/built/cli/resolveAppId.js +83 -0
  37. package/built/cli/resolveAppId.js.map +1 -0
  38. package/built/cli/scan/command.js +174 -0
  39. package/built/cli/scan/command.js.map +1 -0
  40. package/built/cli/scan/options.js +3 -0
  41. package/built/cli/scan/options.js.map +1 -0
  42. package/built/cli/scan/scanner.js +154 -0
  43. package/built/cli/scan/scanner.js.map +1 -0
  44. package/built/cli/scan.js +103 -0
  45. package/built/cli/scan.js.map +1 -0
  46. package/built/cli/scanArgs.js +26 -0
  47. package/built/cli/scanArgs.js.map +1 -0
  48. package/built/cli/scanOptions.js +3 -0
  49. package/built/cli/scanOptions.js.map +1 -0
  50. package/built/cli/upload/command.js +95 -0
  51. package/built/cli/upload/command.js.map +1 -0
  52. package/built/cli/upload/options.js +3 -0
  53. package/built/cli/upload/options.js.map +1 -0
  54. package/built/cli/validateFile.js +66 -0
  55. package/built/cli/validateFile.js.map +1 -0
  56. package/built/cli.js +32 -0
  57. package/built/cli.js.map +1 -0
  58. package/built/configuration/configurationProvider.js +169 -0
  59. package/built/configuration/configurationProvider.js.map +1 -0
  60. package/built/configuration/schema/match-pattern-config.json +32 -0
  61. package/built/configuration/schema/options.json +193 -0
  62. package/built/configuration/types/checkConfig.js +3 -0
  63. package/built/configuration/types/checkConfig.js.map +1 -0
  64. package/built/configuration/types/configuration.js +3 -0
  65. package/built/configuration/types/configuration.js.map +1 -0
  66. package/built/configuration/types/matchEventConfig.js +3 -0
  67. package/built/configuration/types/matchEventConfig.js.map +1 -0
  68. package/built/configuration/types/matchPatternConfig.js +3 -0
  69. package/built/configuration/types/matchPatternConfig.js.map +1 -0
  70. package/built/database/index.js +259 -0
  71. package/built/database/index.js.map +1 -0
  72. package/built/database/visit.js +80 -0
  73. package/built/database/visit.js.map +1 -0
  74. package/built/errors.js +35 -0
  75. package/built/errors.js.map +1 -0
  76. package/built/findings.js +15 -0
  77. package/built/findings.js.map +1 -0
  78. package/built/integration/appland/fetchStatus.js +51 -0
  79. package/built/integration/appland/fetchStatus.js.map +1 -0
  80. package/built/integration/appland/upload.js +193 -0
  81. package/built/integration/appland/upload.js.map +1 -0
  82. package/built/integration/github/commitStatus.js +19 -0
  83. package/built/integration/github/commitStatus.js.map +1 -0
  84. package/built/integration/vars.js +68 -0
  85. package/built/integration/vars.js.map +1 -0
  86. package/built/openapi/index.js +100 -0
  87. package/built/openapi/index.js.map +1 -0
  88. package/built/openapi/method.js +120 -0
  89. package/built/openapi/method.js.map +1 -0
  90. package/built/openapi/model.js +49 -0
  91. package/built/openapi/model.js.map +1 -0
  92. package/built/openapi/path.js +36 -0
  93. package/built/openapi/path.js.map +1 -0
  94. package/built/openapi/provider.js +133 -0
  95. package/built/openapi/provider.js.map +1 -0
  96. package/built/openapi/response.js +59 -0
  97. package/built/openapi/response.js.map +1 -0
  98. package/built/openapi/rpcRequest.js +130 -0
  99. package/built/openapi/rpcRequest.js.map +1 -0
  100. package/built/openapi/schema.js +42 -0
  101. package/built/openapi/schema.js.map +1 -0
  102. package/built/openapi/securitySchemes.js +32 -0
  103. package/built/openapi/securitySchemes.js.map +1 -0
  104. package/built/openapi/statusCodes.js +68 -0
  105. package/built/openapi/statusCodes.js.map +1 -0
  106. package/built/openapi/util.js +91 -0
  107. package/built/openapi/util.js.map +1 -0
  108. package/built/report/appMapMetadata.js +2 -0
  109. package/built/report/appMapMetadata.js.map +1 -0
  110. package/built/report/findingSummary.js +3 -0
  111. package/built/report/findingSummary.js.map +1 -0
  112. package/built/report/findingsReport.js +37 -0
  113. package/built/report/findingsReport.js.map +1 -0
  114. package/built/report/scanResults.js +103 -0
  115. package/built/report/scanResults.js.map +1 -0
  116. package/built/report/scanSummary.js +3 -0
  117. package/built/report/scanSummary.js.map +1 -0
  118. package/built/report/summaryReport.js +70 -0
  119. package/built/report/summaryReport.js.map +1 -0
  120. package/built/ruleChecker.js +260 -0
  121. package/built/ruleChecker.js.map +1 -0
  122. package/built/rules/authzBeforeAuthn.js +82 -0
  123. package/built/rules/authzBeforeAuthn.js.map +1 -0
  124. package/built/rules/circularDependency.js +227 -0
  125. package/built/rules/circularDependency.js.map +1 -0
  126. package/built/rules/http500.js +18 -0
  127. package/built/rules/http500.js.map +1 -0
  128. package/built/rules/illegalPackageDependency.js +38 -0
  129. package/built/rules/illegalPackageDependency.js.map +1 -0
  130. package/built/rules/incompatibleHttpClientRequest.js +96 -0
  131. package/built/rules/incompatibleHttpClientRequest.js.map +1 -0
  132. package/built/rules/insecureCompare.js +59 -0
  133. package/built/rules/insecureCompare.js.map +1 -0
  134. package/built/rules/jobNotCancelled.js +72 -0
  135. package/built/rules/jobNotCancelled.js.map +1 -0
  136. package/built/rules/lib/hasParameterOrReceiver.js +11 -0
  137. package/built/rules/lib/hasParameterOrReceiver.js.map +1 -0
  138. package/built/rules/lib/matchEvent.js +32 -0
  139. package/built/rules/lib/matchEvent.js.map +1 -0
  140. package/built/rules/lib/matchPattern.js +28 -0
  141. package/built/rules/lib/matchPattern.js.map +1 -0
  142. package/built/rules/lib/rpcWithoutProtection.js +40 -0
  143. package/built/rules/lib/rpcWithoutProtection.js.map +1 -0
  144. package/built/rules/missingAuthentication.js +65 -0
  145. package/built/rules/missingAuthentication.js.map +1 -0
  146. package/built/rules/missingContentType.js +27 -0
  147. package/built/rules/missingContentType.js.map +1 -0
  148. package/built/rules/nPlusOneQuery.js +84 -0
  149. package/built/rules/nPlusOneQuery.js.map +1 -0
  150. package/built/rules/queryFromInvalidPackage.js +37 -0
  151. package/built/rules/queryFromInvalidPackage.js.map +1 -0
  152. package/built/rules/queryFromView.js +29 -0
  153. package/built/rules/queryFromView.js.map +1 -0
  154. package/built/rules/rpcWithoutCircuitBreaker.js +97 -0
  155. package/built/rules/rpcWithoutCircuitBreaker.js.map +1 -0
  156. package/built/rules/saveWithoutValidation.js +27 -0
  157. package/built/rules/saveWithoutValidation.js.map +1 -0
  158. package/built/rules/secretInLog.js +76 -0
  159. package/built/rules/secretInLog.js.map +1 -0
  160. package/built/rules/slowFunctionCall.js +37 -0
  161. package/built/rules/slowFunctionCall.js.map +1 -0
  162. package/built/rules/slowHttpServerRequest.js +24 -0
  163. package/built/rules/slowHttpServerRequest.js.map +1 -0
  164. package/built/rules/slowQuery.js +23 -0
  165. package/built/rules/slowQuery.js.map +1 -0
  166. package/built/rules/tooManyJoins.js +77 -0
  167. package/built/rules/tooManyJoins.js.map +1 -0
  168. package/built/rules/tooManyUpdates.js +143 -0
  169. package/built/rules/tooManyUpdates.js.map +1 -0
  170. package/built/rules/unbatchedMaterializedQuery.js +65 -0
  171. package/built/rules/unbatchedMaterializedQuery.js.map +1 -0
  172. package/built/rules/updateInGetRequest.js +66 -0
  173. package/built/rules/updateInGetRequest.js.map +1 -0
  174. package/built/rules/util.js +102 -0
  175. package/built/rules/util.js.map +1 -0
  176. package/built/sampleConfig/bike_index.yml +10 -0
  177. package/built/sampleConfig/default.yml +19 -0
  178. package/built/sampleConfig/railsSampleApp6thEd.yml +29 -0
  179. package/built/sampleConfig/solidus.yml +31 -0
  180. package/built/scope/commandScope.js +156 -0
  181. package/built/scope/commandScope.js.map +1 -0
  182. package/built/scope/httpClientRequestScope.js +105 -0
  183. package/built/scope/httpClientRequestScope.js.map +1 -0
  184. package/built/scope/httpServerRequestScope.js +105 -0
  185. package/built/scope/httpServerRequestScope.js.map +1 -0
  186. package/built/scope/rootScope.js +105 -0
  187. package/built/scope/rootScope.js.map +1 -0
  188. package/built/scope/scopeImpl.js +88 -0
  189. package/built/scope/scopeImpl.js.map +1 -0
  190. package/built/scope/scopeIterator.js +21 -0
  191. package/built/scope/scopeIterator.js.map +1 -0
  192. package/built/scope/sqlTransactionScope.js +175 -0
  193. package/built/scope/sqlTransactionScope.js.map +1 -0
  194. package/built/wellKnownLabels.js +9 -0
  195. package/built/wellKnownLabels.js.map +1 -0
  196. package/package.json +89 -0
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var depth_first_search_1 = require("../depth-first-search");
4
+ /**
5
+ * Detect cycle in directed graph using Depth First Search.
6
+ *
7
+ * @returns the cycle of vertexes, not including the final vertex which is the same as the first.
8
+ */
9
+ function detectDirectedCycle(graph) {
10
+ var cycles = [];
11
+ // Will store parents (previous vertices) for all visited nodes.
12
+ // This will be needed in order to specify what path exactly is a cycle.
13
+ var dfsParentMap = new Map();
14
+ // White set (UNVISITED) contains all the vertices that haven't been visited at all.
15
+ var whiteSet = new Map();
16
+ // Gray set (VISITING) contains all the vertices that are being visited right now
17
+ // (in current path).
18
+ var graySet = new Map();
19
+ // Black set (VISITED) contains all the vertices that has been fully visited.
20
+ // Meaning that all children of the vertex has been visited.
21
+ var blackSet = new Map();
22
+ // If we encounter vertex in gray set it means that we've found a cycle.
23
+ // Because when vertex in gray set it means that its neighbors or its neighbors
24
+ // neighbors are still being explored.
25
+ // Init white set and add all vertices to it.
26
+ graph.getAllVertices().forEach(function (vertex) {
27
+ whiteSet.set(vertex.getKey(), vertex);
28
+ });
29
+ // Describe BFS callbacks.
30
+ var callbacks = {
31
+ enterVertex: function (currentVertex, previousVertex) {
32
+ if (graySet.has(currentVertex.getKey())) {
33
+ // If current vertex already in grey set it means that cycle is detected.
34
+ // Let's detect cycle path.
35
+ var cycle = [];
36
+ var currentCycleVertex = currentVertex;
37
+ var previousCycleVertex = previousVertex;
38
+ while (previousCycleVertex.getKey() !== currentVertex.getKey()) {
39
+ cycle.push(currentCycleVertex);
40
+ currentCycleVertex = previousCycleVertex;
41
+ previousCycleVertex = dfsParentMap.get(previousCycleVertex.getKey());
42
+ }
43
+ cycle.push(currentCycleVertex);
44
+ cycles.push(cycle.reverse());
45
+ return false;
46
+ }
47
+ else {
48
+ // Otherwise let's add current vertex to gray set and remove it from white set.
49
+ graySet.set(currentVertex.getKey(), currentVertex);
50
+ whiteSet.delete(currentVertex.getKey());
51
+ // Update DFS parents list.
52
+ dfsParentMap.set(currentVertex.getKey(), previousVertex);
53
+ return true;
54
+ }
55
+ },
56
+ leaveVertex: function (currentVertex) {
57
+ // If all node's children has been visited let's remove it from gray set
58
+ // and move it to the black set meaning that all its neighbors are visited.
59
+ blackSet.set(currentVertex.getKey(), currentVertex);
60
+ graySet.delete(currentVertex.getKey());
61
+ },
62
+ allowTraversal: function (_previousVertex, _currentVertex, nextVertex) {
63
+ // Allow traversal only for the vertices that are not in black set
64
+ // since all black set vertices have been already visited.
65
+ return !blackSet.has(nextVertex.getKey());
66
+ },
67
+ };
68
+ // Start exploring vertices.
69
+ while (whiteSet.size > 0) {
70
+ var startVertex = whiteSet.values().next().value;
71
+ // Do Depth First Search.
72
+ (0, depth_first_search_1.depthFirstSearch)(graph, startVertex, callbacks);
73
+ }
74
+ return cycles;
75
+ }
76
+ exports.default = detectDirectedCycle;
77
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/algorithms/graph/detect-cycle/index.ts"],"names":[],"mappings":";;AAEA,4DAAoE;AAEpE;;;;GAIG;AACH,SAAwB,mBAAmB,CAAC,KAAY;IACtD,IAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,gEAAgE;IAChE,wEAAwE;IACxE,IAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEpD,oFAAoF;IACpF,IAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEhD,iFAAiF;IACjF,qBAAqB;IACrB,IAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE/C,6EAA6E;IAC7E,4DAA4D;IAC5D,IAAM,QAAQ,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEhD,wEAAwE;IACxE,+EAA+E;IAC/E,sCAAsC;IAEtC,6CAA6C;IAC7C,KAAK,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,UAAC,MAAmB;QACjD,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,0BAA0B;IAC1B,IAAM,SAAS,GAAc;QAC3B,WAAW,EAAE,UAAC,aAA0B,EAAE,cAAkC;YAC1E,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE;gBACvC,yEAAyE;gBACzE,2BAA2B;gBAC3B,IAAM,KAAK,GAAkB,EAAE,CAAC;gBAEhC,IAAI,kBAAkB,GAAG,aAAa,CAAC;gBACvC,IAAI,mBAAmB,GAAG,cAAc,CAAC;gBAEzC,OAAO,mBAAoB,CAAC,MAAM,EAAE,KAAK,aAAa,CAAC,MAAM,EAAE,EAAE;oBAC/D,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;oBAC/B,kBAAkB,GAAG,mBAAoB,CAAC;oBAC1C,mBAAmB,GAAG,YAAY,CAAC,GAAG,CAAC,mBAAoB,CAAC,MAAM,EAAE,CAAE,CAAC;iBACxE;gBAED,KAAK,CAAC,IAAI,CAAC,kBAAmB,CAAC,CAAC;gBAEhC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAE7B,OAAO,KAAK,CAAC;aACd;iBAAM;gBACL,+EAA+E;gBAC/E,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;gBACnD,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;gBAExC,2BAA2B;gBAC3B,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,cAAe,CAAC,CAAC;gBAE1D,OAAO,IAAI,CAAC;aACb;QACH,CAAC;QACD,WAAW,EAAE,UAAC,aAA0B;YACtC,wEAAwE;YACxE,2EAA2E;YAC3E,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;YACpD,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,cAAc,EAAE,UACd,eAAmC,EACnC,cAA2B,EAC3B,UAAuB;YAEvB,kEAAkE;YAClE,0DAA0D;YAC1D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC;IAEF,4BAA4B;IAC5B,OAAO,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE;QACxB,IAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAEnD,yBAAyB;QACzB,IAAA,qCAAgB,EAAC,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;KACjD;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAtFD,sCAsFC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var Comparator = /** @class */ (function () {
4
+ function Comparator(compareFunction) {
5
+ this.compare = compareFunction || Comparator.defaultCompareFunction;
6
+ }
7
+ Comparator.defaultCompareFunction = function (a, b) {
8
+ if (a === b) {
9
+ return 0;
10
+ }
11
+ return a < b ? -1 : 1;
12
+ };
13
+ Comparator.prototype.equal = function (a, b) {
14
+ return this.compare(a, b) === 0;
15
+ };
16
+ Comparator.prototype.lessThan = function (a, b) {
17
+ return this.compare(a, b) < 0;
18
+ };
19
+ Comparator.prototype.greaterThan = function (a, b) {
20
+ return this.compare(a, b) > 0;
21
+ };
22
+ Comparator.prototype.lessThanOrEqual = function (a, b) {
23
+ return this.lessThan(a, b) || this.equal(a, b);
24
+ };
25
+ Comparator.prototype.greaterThanOrEqual = function (a, b) {
26
+ return this.greaterThan(a, b) || this.equal(a, b);
27
+ };
28
+ Comparator.prototype.reverse = function () {
29
+ var compareOriginal = this.compare;
30
+ this.compare = function (a, b) { return compareOriginal(b, a); };
31
+ };
32
+ return Comparator;
33
+ }());
34
+ exports.default = Comparator;
35
+ //# sourceMappingURL=Comparator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Comparator.js","sourceRoot":"","sources":["../../../src/algorithms/utils/Comparator.ts"],"names":[],"mappings":";;AAAA;IAGE,oBAAY,eAAuC;QACjD,IAAI,CAAC,OAAO,GAAG,eAAe,IAAI,UAAU,CAAC,sBAAsB,CAAC;IACtE,CAAC;IAEM,iCAAsB,GAA7B,UAAiC,CAAI,EAAE,CAAI;QACzC,IAAI,CAAC,KAAK,CAAC,EAAE;YACX,OAAO,CAAC,CAAC;SACV;QAED,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,0BAAK,GAAL,UAAM,CAAI,EAAE,CAAI;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,6BAAQ,GAAR,UAAS,CAAI,EAAE,CAAI;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,gCAAW,GAAX,UAAY,CAAI,EAAE,CAAI;QACpB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,oCAAe,GAAf,UAAgB,CAAI,EAAE,CAAI;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,uCAAkB,GAAlB,UAAmB,CAAI,EAAE,CAAI;QAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,4BAAO,GAAP;QACE,IAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAArB,CAAqB,CAAC;IACjD,CAAC;IACH,iBAAC;AAAD,CAAC,AAvCD,IAuCC"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var util_1 = require("../rules/util");
4
+ function default_1(secrets, e) {
5
+ if (!e.returnValue) {
6
+ return;
7
+ }
8
+ if ((0, util_1.emptyValue)(e.returnValue.value)) {
9
+ return;
10
+ }
11
+ if ((0, util_1.verbose)()) {
12
+ console.warn("Secret generated: " + e.returnValue.value);
13
+ }
14
+ secrets.add(e.returnValue.value);
15
+ }
16
+ exports.default = default_1;
17
+ //# sourceMappingURL=recordSecrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordSecrets.js","sourceRoot":"","sources":["../../src/analyzer/recordSecrets.ts"],"names":[],"mappings":";;AACA,sCAAoD;AAEpD,mBAAyB,OAAoB,EAAE,CAAQ;IACrD,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE;QAClB,OAAO;KACR;IACD,IAAI,IAAA,iBAAU,EAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;QACnC,OAAO;KACR;IACD,IAAI,IAAA,cAAO,GAAE,EAAE;QACb,OAAO,CAAC,IAAI,CAAC,uBAAqB,CAAC,CAAC,WAAW,CAAC,KAAO,CAAC,CAAC;KAC1D;IACD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAXD,4BAWC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var fs_1 = require("fs");
4
+ var path_1 = require("path");
5
+ var regexData = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, 'secretsRegexesData.json')).toString());
6
+ var REGEXES = Object.keys(regexData).reduce(function (memo, key) {
7
+ var value = regexData[key];
8
+ var regexes = Array.isArray(value) ? value : [value];
9
+ memo[key] = regexes.map(function (regex) { return new RegExp(regex); });
10
+ return memo;
11
+ }, {});
12
+ exports.default = REGEXES;
13
+ //# sourceMappingURL=secretsRegexes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretsRegexes.js","sourceRoot":"","sources":["../../src/analyzer/secretsRegexes.ts"],"names":[],"mappings":";;AAAA,yBAAkC;AAClC,6BAA4B;AAI5B,IAAM,SAAS,GAAyC,IAAI,CAAC,KAAK,CAChE,IAAA,iBAAY,EAAC,IAAA,WAAI,EAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC,CAAC,QAAQ,EAAE,CACpE,CAAC;AAEF,IAAM,OAAO,GAAgC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,GAAG;IACnF,IAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,IAAI,MAAM,CAAC,KAAK,CAAC,EAAjB,CAAiB,CAAC,CAAC;IACtD,OAAO,IAAI,CAAC;AACd,CAAC,EAAE,EAAiC,CAAC,CAAC;AAEtC,kBAAe,OAAO,CAAC"}
@@ -0,0 +1,51 @@
1
+ {
2
+ "Slack Token": "(xox[pborsa]-[0-9]{12}-[0-9]{12}-[0-9]{12}-[a-z0-9]{32})",
3
+ "RSA private key": "-----BEGIN RSA PRIVATE KEY-----",
4
+ "SSH (DSA) private key": "-----BEGIN DSA PRIVATE KEY-----",
5
+ "SSH (EC) private key": "-----BEGIN EC PRIVATE KEY-----",
6
+ "PGP private key block": "-----BEGIN PGP PRIVATE KEY BLOCK-----",
7
+ "AWS API Key": [
8
+ "((?:A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16})",
9
+ "AKIA[0-9A-Z]{16}"
10
+ ],
11
+ "BCrypt": "^\\$2[abxy]?\\$(?:0[4-9]|[12][0-9]|3[01])[$][.\\/0-9a-zA-Z]{53}$",
12
+ "Amazon MWS Auth Token": "amzn\\.mws\\.[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}",
13
+ "AWS AppSync GraphQL Key": "da2-[a-z0-9]{26}",
14
+ "Facebook Access Token": "EAACEdEose0cBA[0-9A-Za-z]+",
15
+ "Facebook OAuth": "[fF][aA][cC][eE][bB][oO][oO][kK].*['|\"][0-9a-f]{32}['|\"]",
16
+ "GitHub": [
17
+ "[gG][iI][tT][hH][uU][bB].*['|\"][0-9a-zA-Z]{35,40}['|\"]",
18
+ "gh[pousr]_[A-Za-z0-9]{36,255}"
19
+ ],
20
+ "Generic API Key": "[aA][pP][iI]_?[kK][eE][yY].*['|\"][0-9a-zA-Z]{32,45}['|\"]",
21
+ "Generic Secret": [
22
+ "[sS][eE][cC][rR][eE][tT].*['|\"][0-9a-zA-Z]{32,45}['|\"]",
23
+ "[sS][eE][cC][rR][eE][tT].[\\w\\-_/]+"
24
+ ],
25
+ "Google API Key": "AIza[0-9A-Za-z\\-_]{35}",
26
+ "Google Cloud Platform API Key": "AIza[0-9A-Za-z\\-_]{35}",
27
+ "Google Cloud Platform OAuth": "[0-9]+-[0-9A-Za-z_]{32}\\.apps\\.googleusercontent\\.com",
28
+ "Google Drive API Key": "AIza[0-9A-Za-z\\-_]{35}",
29
+ "Google Drive OAuth": "[0-9]+-[0-9A-Za-z_]{32}\\.apps\\.googleusercontent\\.com",
30
+ "Google (GCP) Service-account": "\"type\": \"service_account\"",
31
+ "Google Gmail API Key": "AIza[0-9A-Za-z\\-_]{35}",
32
+ "Google Gmail OAuth": "[0-9]+-[0-9A-Za-z_]{32}\\.apps\\.googleusercontent\\.com",
33
+ "Google OAuth Access Token": "ya29\\.[0-9A-Za-z\\-_]+",
34
+ "Google YouTube API Key": "AIza[0-9A-Za-z\\-_]{35}",
35
+ "Google YouTube OAuth": "[0-9]+-[0-9A-Za-z_]{32}\\.apps\\.googleusercontent\\.com",
36
+ "Heroku API Key": "[hH][eE][rR][oO][kK][uU].*[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}",
37
+ "MailChimp API Key": "[0-9a-f]{32}-us[0-9]{1,2}",
38
+ "Mailgun API Key": "key-[0-9a-zA-Z]{32}",
39
+ "Password in URL": "[a-zA-Z]{3,10}://[^/\\s:@]{3,20}:[^/\\s:@]{3,20}@.{1,100}[\"'\\s]",
40
+ "PayPal Braintree Access Token": "access_token\\$production\\$[0-9a-z]{16}\\$[0-9a-f]{32}",
41
+ "Picatic API Key": "sk_live_[0-9a-z]{32}",
42
+ "Slack Webhook": "https://hooks\\.slack\\.com/services/T[a-zA-Z0-9_]{8}/B[a-zA-Z0-9_]{8}/[a-zA-Z0-9_]{24}",
43
+ "Stripe API Key": "sk_live_[0-9a-zA-Z]{24}",
44
+ "Stripe Restricted API Key": "rk_live_[0-9a-zA-Z]{24}",
45
+ "Square Access Token": "sq0atp-[0-9A-Za-z\\-_]{22}",
46
+ "Square OAuth Secret": "sq0csp-[0-9A-Za-z\\-_]{43}",
47
+ "Telegram Bot API Key": "[0-9]+:AA[0-9A-Za-z\\-_]{33}",
48
+ "Twilio API Key": "SK[0-9a-fA-F]{32}",
49
+ "Twitter Access Token": "[tT][wW][iI][tT][tT][eE][rR].*[1-9][0-9]+-[0-9a-zA-Z]{40}",
50
+ "Twitter OAuth": "[tT][wW][iI][tT][tT][eE][rR].*['|\"][0-9a-zA-Z]{35,44}['|\"]"
51
+ }
package/built/check.js ADDED
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var util_1 = require("./rules/util");
4
+ var Check = /** @class */ (function () {
5
+ function Check(rule, options) {
6
+ this.rule = rule;
7
+ function makeOptions() {
8
+ return rule.Options ? new rule.Options() : {};
9
+ }
10
+ this.id = rule.id;
11
+ this.options = options || makeOptions();
12
+ this.scope = rule.scope || 'root';
13
+ this.includeScope = [];
14
+ this.excludeScope = [];
15
+ this.includeEvent = [];
16
+ this.excludeEvent = [];
17
+ }
18
+ Check.prototype.filterScope = function (event, appMap) {
19
+ if (this.includeScope.length > 0 && !this.includeScope.every(function (fn) { return fn(event, appMap); })) {
20
+ if ((0, util_1.verbose)()) {
21
+ console.warn("\t'includeScope' clause is not satisifed.");
22
+ }
23
+ return false;
24
+ }
25
+ if (this.excludeScope.some(function (fn) { return fn(event, appMap); })) {
26
+ if ((0, util_1.verbose)()) {
27
+ console.warn("\t'excludeScope' clause is not satisifed.");
28
+ }
29
+ return false;
30
+ }
31
+ return true;
32
+ };
33
+ Check.prototype.toString = function () {
34
+ var tokens = ["[" + this.rule.id + "]"];
35
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
36
+ var self = this;
37
+ ['includeScope', 'excludeScope', 'includeEvent', 'excludeEvent'].forEach(function (key) {
38
+ if (self[key].length > 0) {
39
+ tokens.push("(" + key + " " + self[key].join(' && ') + ")");
40
+ }
41
+ });
42
+ return tokens.join(' ');
43
+ };
44
+ return Check;
45
+ }());
46
+ exports.default = Check;
47
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":";;AACA,qCAAuC;AAGvC;IASE,eAAmB,IAAU,EAAE,OAA6B;QAAzC,SAAI,GAAJ,IAAI,CAAM;QAC3B,SAAS,WAAW;YAClB,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,2BAAW,GAAX,UAAY,KAAY,EAAE,MAAe;QACvC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAjB,CAAiB,CAAC,EAAE;YACvF,IAAI,IAAA,cAAO,GAAE,EAAE;gBACb,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;aAC3D;YACD,OAAO,KAAK,CAAC;SACd;QACD,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAjB,CAAiB,CAAC,EAAE;YACrD,IAAI,IAAA,cAAO,GAAE,EAAE;gBACb,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;aAC3D;YACD,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,wBAAQ,GAAR;QACE,IAAM,MAAM,GAAG,CAAC,MAAI,IAAI,CAAC,IAAI,CAAC,EAAE,MAAG,CAAC,CAAC;QACrC,4DAA4D;QAC5D,IAAM,IAAI,GAAQ,IAAI,CAAC;QACvB,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;YAC3E,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;gBACxB,MAAM,CAAC,IAAI,CAAC,MAAI,GAAG,SAAI,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAG,CAAC,CAAC;aACnD;QACH,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACH,YAAC;AAAD,CAAC,AAlDD,IAkDC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var util_1 = require("./rules/util");
4
+ var CheckInstance = /** @class */ (function () {
5
+ function CheckInstance(check) {
6
+ this.check = check;
7
+ this.ruleLogic = check.rule.build(check.options || {});
8
+ }
9
+ Object.defineProperty(CheckInstance.prototype, "checkId", {
10
+ get: function () {
11
+ return this.check.id;
12
+ },
13
+ enumerable: false,
14
+ configurable: true
15
+ });
16
+ Object.defineProperty(CheckInstance.prototype, "ruleId", {
17
+ get: function () {
18
+ return this.check.rule.id;
19
+ },
20
+ enumerable: false,
21
+ configurable: true
22
+ });
23
+ Object.defineProperty(CheckInstance.prototype, "title", {
24
+ get: function () {
25
+ return this.check.rule.title;
26
+ },
27
+ enumerable: false,
28
+ configurable: true
29
+ });
30
+ Object.defineProperty(CheckInstance.prototype, "scope", {
31
+ get: function () {
32
+ return this.check.scope;
33
+ },
34
+ enumerable: false,
35
+ configurable: true
36
+ });
37
+ Object.defineProperty(CheckInstance.prototype, "enumerateScope", {
38
+ get: function () {
39
+ return this.check.rule.enumerateScope;
40
+ },
41
+ enumerable: false,
42
+ configurable: true
43
+ });
44
+ CheckInstance.prototype.filterEvent = function (event, appMap) {
45
+ if (this.ruleLogic.where && !this.ruleLogic.where(event, appMap)) {
46
+ if ((0, util_1.verbose)()) {
47
+ console.warn("\t'where' clause is not satisifed.");
48
+ }
49
+ return false;
50
+ }
51
+ if (this.check.includeEvent.length > 0 &&
52
+ !this.check.includeEvent.every(function (fn) { return fn(event, appMap); })) {
53
+ if ((0, util_1.verbose)()) {
54
+ console.warn("\t'includeEvent' clause is not satisifed.");
55
+ }
56
+ return false;
57
+ }
58
+ if (this.check.excludeEvent.some(function (fn) { return fn(event, appMap); })) {
59
+ if ((0, util_1.verbose)()) {
60
+ console.warn("\t'excludeEvent' clause is not satisifed.");
61
+ }
62
+ return false;
63
+ }
64
+ return true;
65
+ };
66
+ return CheckInstance;
67
+ }());
68
+ exports.default = CheckInstance;
69
+ //# sourceMappingURL=checkInstance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkInstance.js","sourceRoot":"","sources":["../src/checkInstance.ts"],"names":[],"mappings":";;AAEA,qCAAuC;AAGvC;IAIE,uBAAY,KAAY;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,sBAAI,kCAAO;aAAX;YACE,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,CAAC;;;OAAA;IAED,sBAAI,iCAAM;aAAV;YACE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,CAAC;;;OAAA;IAED,sBAAI,gCAAK;aAAT;YACE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/B,CAAC;;;OAAA;IAED,sBAAI,gCAAK;aAAT;YACE,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B,CAAC;;;OAAA;IAED,sBAAI,yCAAc;aAAlB;YACE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;QACxC,CAAC;;;OAAA;IAED,mCAAW,GAAX,UAAY,KAAY,EAAE,MAAe;QACvC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE;YAChE,IAAI,IAAA,cAAO,GAAE,EAAE;gBACb,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;aACpD;YACD,OAAO,KAAK,CAAC;SACd;QAED,IACE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;YAClC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAjB,CAAiB,CAAC,EACzD;YACA,IAAI,IAAA,cAAO,GAAE,EAAE;gBACb,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;aAC3D;YACD,OAAO,KAAK,CAAC;SACd;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAjB,CAAiB,CAAC,EAAE;YAC3D,IAAI,IAAA,cAAO,GAAE,EAAE;gBACb,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;aAC3D;YACD,OAAO,KAAK,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACH,oBAAC;AAAD,CAAC,AAtDD,IAsDC"}
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __read = (this && this.__read) || function (o, n) {
39
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
40
+ if (!m) return o;
41
+ var i = m.call(o), r, ar = [], e;
42
+ try {
43
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
+ }
45
+ catch (error) { e = { error: error }; }
46
+ finally {
47
+ try {
48
+ if (r && !r.done && (m = i["return"])) m.call(i);
49
+ }
50
+ finally { if (e) throw e.error; }
51
+ }
52
+ return ar;
53
+ };
54
+ var __importDefault = (this && this.__importDefault) || function (mod) {
55
+ return (mod && mod.__esModule) ? mod : { "default": mod };
56
+ };
57
+ Object.defineProperty(exports, "__esModule", { value: true });
58
+ var glob_1 = require("glob");
59
+ var promises_1 = require("fs/promises");
60
+ var util_1 = require("util");
61
+ var yargs_1 = __importDefault(require("yargs"));
62
+ var configurationProvider_1 = require("../../configuration/configurationProvider");
63
+ var errors_1 = require("../../errors");
64
+ var util_2 = require("../../rules/util");
65
+ var upload_1 = __importDefault(require("../../integration/appland/upload"));
66
+ var commitStatus_1 = __importDefault(require("../../integration/github/commitStatus"));
67
+ var findings_1 = require("../../findings");
68
+ var findingsReport_1 = __importDefault(require("../../report/findingsReport"));
69
+ var summaryReport_1 = __importDefault(require("../../report/summaryReport"));
70
+ var exitCode_1 = require("../exitCode");
71
+ var resolveAppId_1 = __importDefault(require("../resolveAppId"));
72
+ var validateFile_1 = __importDefault(require("../validateFile"));
73
+ var scanner_1 = __importDefault(require("../scan/scanner"));
74
+ var scanArgs_1 = __importDefault(require("../scanArgs"));
75
+ exports.default = {
76
+ command: 'ci',
77
+ describe: 'Scan AppMaps, report findings to AppMap Server, and update SCM status',
78
+ builder: function (args) {
79
+ (0, scanArgs_1.default)(args);
80
+ args.option('fail', {
81
+ describe: 'exit with non-zero status if there are any new findings',
82
+ default: false,
83
+ type: 'boolean',
84
+ });
85
+ args.option('update-commit-status', {
86
+ describe: 'update commit status in SCM system',
87
+ default: true,
88
+ type: 'boolean',
89
+ });
90
+ args.option('upload', {
91
+ describe: 'upload findings to AppMap server',
92
+ default: true,
93
+ type: 'boolean',
94
+ });
95
+ return args.strict();
96
+ },
97
+ handler: function (options) {
98
+ return __awaiter(this, void 0, void 0, function () {
99
+ var _a, appmapDir, config, isVerbose, fail, appIdArg, reportFile, doUpload, updateCommitStatus, glob, files, appId, configData, scanner, _b, rawScanResults, findingStatuses, scanResults, err_1;
100
+ return __generator(this, function (_c) {
101
+ switch (_c.label) {
102
+ case 0:
103
+ _a = options, appmapDir = _a.appmapDir, config = _a.config, isVerbose = _a.verbose, fail = _a.fail, appIdArg = _a.app, reportFile = _a.reportFile, doUpload = _a.upload, updateCommitStatus = _a.updateCommitStatus;
104
+ if (isVerbose) {
105
+ (0, util_2.verbose)(true);
106
+ }
107
+ _c.label = 1;
108
+ case 1:
109
+ _c.trys.push([1, 14, , 15]);
110
+ if (!appmapDir) {
111
+ throw new errors_1.ValidationError('--appmap-dir is required');
112
+ }
113
+ return [4 /*yield*/, (0, validateFile_1.default)('directory', appmapDir)];
114
+ case 2:
115
+ _c.sent();
116
+ glob = (0, util_1.promisify)(glob_1.glob);
117
+ return [4 /*yield*/, glob(appmapDir + "/**/*.appmap.json")];
118
+ case 3:
119
+ files = _c.sent();
120
+ return [4 /*yield*/, (0, resolveAppId_1.default)(appIdArg, appmapDir)];
121
+ case 4:
122
+ appId = _c.sent();
123
+ return [4 /*yield*/, (0, configurationProvider_1.parseConfigFile)(config)];
124
+ case 5:
125
+ configData = _c.sent();
126
+ scanner = (0, scanner_1.default)(false, configData, files);
127
+ return [4 /*yield*/, Promise.all([scanner.scan(), scanner.fetchFindingStatus(appIdArg, appmapDir)])];
128
+ case 6:
129
+ _b = __read.apply(void 0, [_c.sent(), 2]), rawScanResults = _b[0], findingStatuses = _b[1];
130
+ // Always report the raw data
131
+ return [4 /*yield*/, (0, promises_1.writeFile)(reportFile, JSON.stringify(rawScanResults, null, 2))];
132
+ case 7:
133
+ // Always report the raw data
134
+ _c.sent();
135
+ scanResults = rawScanResults.withFindings((0, findings_1.newFindings)(rawScanResults.findings, findingStatuses));
136
+ (0, findingsReport_1.default)(scanResults.findings, scanResults.appMapMetadata);
137
+ (0, summaryReport_1.default)(scanResults, true);
138
+ if (!doUpload) return [3 /*break*/, 9];
139
+ return [4 /*yield*/, (0, upload_1.default)(rawScanResults, appId)];
140
+ case 8:
141
+ _c.sent();
142
+ _c.label = 9;
143
+ case 9:
144
+ if (!updateCommitStatus) return [3 /*break*/, 13];
145
+ if (!(scanResults.findings.length > 0)) return [3 /*break*/, 11];
146
+ return [4 /*yield*/, (0, commitStatus_1.default)('failure', scanResults.summary.numChecks + " checks, " + scanResults.findings.length + " findings. See CI job log for details.")];
147
+ case 10:
148
+ _c.sent();
149
+ console.log("Commit status updated to: failure (" + scanResults.findings.length + " findings)");
150
+ return [3 /*break*/, 13];
151
+ case 11: return [4 /*yield*/, (0, commitStatus_1.default)('success', scanResults.summary.numChecks + " checks passed")];
152
+ case 12:
153
+ _c.sent();
154
+ console.log("Commit status updated to: success.");
155
+ _c.label = 13;
156
+ case 13:
157
+ if (fail) {
158
+ if (scanResults.findings.length > 0) {
159
+ yargs_1.default.exit(1, new Error(scanResults.findings.length + " findings"));
160
+ }
161
+ }
162
+ return [3 /*break*/, 15];
163
+ case 14:
164
+ err_1 = _c.sent();
165
+ if (err_1 instanceof errors_1.ValidationError) {
166
+ console.warn(err_1.message);
167
+ return [2 /*return*/, process.exit(exitCode_1.ExitCode.ValidationError)];
168
+ }
169
+ if (err_1 instanceof errors_1.AbortError) {
170
+ return [2 /*return*/, process.exit(exitCode_1.ExitCode.AbortError)];
171
+ }
172
+ if (!util_2.verbose && err_1 instanceof Error) {
173
+ console.error(err_1.message);
174
+ return [2 /*return*/, process.exit(exitCode_1.ExitCode.RuntimeError)];
175
+ }
176
+ throw err_1;
177
+ case 15: return [2 /*return*/];
178
+ }
179
+ });
180
+ });
181
+ },
182
+ };
183
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/cli/ci/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/cli/ci/options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExitCode = void 0;
4
+ var ExitCode;
5
+ (function (ExitCode) {
6
+ ExitCode[ExitCode["ValidationError"] = 1] = "ValidationError";
7
+ ExitCode[ExitCode["AbortError"] = 2] = "AbortError";
8
+ ExitCode[ExitCode["RuntimeError"] = 3] = "RuntimeError";
9
+ ExitCode[ExitCode["Finding"] = 10] = "Finding";
10
+ })(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
11
+ //# sourceMappingURL=exitCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exitCode.js","sourceRoot":"","sources":["../../src/cli/exitCode.ts"],"names":[],"mappings":";;;AAAA,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,6DAAmB,CAAA;IACnB,mDAAc,CAAA;IACd,uDAAgB,CAAA;IAChB,8CAAY,CAAA;AACd,CAAC,EALW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAKnB"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var chalk_1 = __importDefault(require("chalk"));
7
+ function default_1(matches) {
8
+ if (matches.length === 0) {
9
+ return chalk_1.default.stderr.green('.');
10
+ }
11
+ else {
12
+ return chalk_1.default.stderr.magenta('!');
13
+ }
14
+ }
15
+ exports.default = default_1;
16
+ //# sourceMappingURL=progressReporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progressReporter.js","sourceRoot":"","sources":["../../src/cli/progressReporter.ts"],"names":[],"mappings":";;;;;AAAA,gDAA0B;AAG1B,mBAAyB,OAAkB;IACzC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;QACxB,OAAO,eAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KAChC;SAAM;QACL,OAAO,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;KAClC;AACH,CAAC;AAND,4BAMC"}