@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,259 @@
1
+ "use strict";
2
+ // License: https://github.com/newrelic/newrelic-ruby-agent/blob/main/LICENSE
3
+ // Apache License 2.0
4
+ var __generator = (this && this.__generator) || function (thisArg, body) {
5
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
6
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
7
+ function verb(n) { return function (v) { return step([n, v]); }; }
8
+ function step(op) {
9
+ if (f) throw new TypeError("Generator is already executing.");
10
+ while (_) try {
11
+ 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;
12
+ if (y = 0, t) op = [op[0] & 2, t.value];
13
+ switch (op[0]) {
14
+ case 0: case 1: t = op; break;
15
+ case 4: _.label++; return { value: op[1], done: false };
16
+ case 5: _.label++; y = op[1]; op = [0]; continue;
17
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
18
+ default:
19
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
20
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
21
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
22
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
23
+ if (t[2]) _.ops.pop();
24
+ _.trys.pop(); continue;
25
+ }
26
+ op = body.call(thisArg, _);
27
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
28
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
29
+ }
30
+ };
31
+ var __values = (this && this.__values) || function(o) {
32
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
33
+ if (m) return m.call(o);
34
+ if (o && typeof o.length === "number") return {
35
+ next: function () {
36
+ if (o && i >= o.length) o = void 0;
37
+ return { value: o && o[i++], done: !o };
38
+ }
39
+ };
40
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.countJoins = exports.sqlStrings = exports.isSelect = exports.sqlNormalized = exports.obfuscate = void 0;
44
+ // TODO: Copied and TypeScript-ified from @appland/models
45
+ var visit_1 = require("./visit");
46
+ var models_1 = require("@appland/models");
47
+ var COMPONENTS_REGEXP_MAP = {
48
+ single_quotes: /'(?:[^']|'')*?(?:\\'.*|'(?!'))/g,
49
+ double_quotes: /"(?:[^"]|"")*?(?:\\".*|"(?!"))/g,
50
+ dollar_quotes: /(\$(?!\d)[^$]*?\$).*?(?:\1|$)/g,
51
+ uuids: /\{?(?:[0-9a-fA-F]-*){32}\}?/g,
52
+ numeric_literals: /-?\b(?:[0-9]+\.)?[0-9]+([eE][+-]?[0-9]+)?\b/g,
53
+ boolean_literals: /\b(?:true|false|null)\b/gi,
54
+ hexadecimal_literals: /0x[0-9a-fA-F]+/g,
55
+ comments: /(?:#|--).*?(?=\r|\n|$)/gi,
56
+ multi_line_comments: /\/\*(?:[^/]|\/[^*])*?(?:\*\/|\/\*.*)/g,
57
+ oracle_quoted_strings: /q'\[.*?(?:\]'|$)|q'\{.*?(?:\}'|$)|q'<.*?(?:>'|$)|q'\(.*?(?:\)'|$)/g,
58
+ };
59
+ // We use these to check whether the query contains any quote characters
60
+ // after obfuscation. If so, that's a good indication that the original
61
+ // query was malformed, and so our obfuscation can't reliably find
62
+ // literals. In such a case, we'll replace the entire query with a
63
+ // placeholder.
64
+ var CLEANUP_REGEXP = {
65
+ mysql: /'|"|\/\*|\*\//,
66
+ mysql2: /'|"|\/\*|\*\//,
67
+ postgres: /'|\/\*|\*\/|\$(?!\?)/,
68
+ sqlite: /'|\/\*|\*\//,
69
+ cassandra: /'|\/\*|\*\//,
70
+ oracle: /'|\/\*|\*\//,
71
+ oracle_enhanced: /'|\/\*|\*\//,
72
+ };
73
+ /**
74
+ * @type {{string: string[]}}
75
+ */
76
+ var DIALECT_COMPONENTS = {
77
+ fallback: Object.keys(COMPONENTS_REGEXP_MAP),
78
+ mysql: [
79
+ 'single_quotes',
80
+ 'double_quotes',
81
+ 'numeric_literals',
82
+ 'boolean_literals',
83
+ 'hexadecimal_literals',
84
+ 'comments',
85
+ 'multi_line_comments',
86
+ ],
87
+ postgres: [
88
+ 'single_quotes',
89
+ 'dollar_quotes',
90
+ 'uuids',
91
+ 'numeric_literals',
92
+ 'boolean_literals',
93
+ 'comments',
94
+ 'multi_line_comments',
95
+ ],
96
+ sqlite: [
97
+ 'single_quotes',
98
+ 'numeric_literals',
99
+ 'boolean_literals',
100
+ 'hexadecimal_literals',
101
+ 'comments',
102
+ 'multi_line_comments',
103
+ ],
104
+ oracle: [
105
+ 'single_quotes',
106
+ 'oracle_quoted_strings',
107
+ 'numeric_literals',
108
+ 'comments',
109
+ 'multi_line_comments',
110
+ ],
111
+ cassandra: [
112
+ 'single_quotes',
113
+ 'uuids',
114
+ 'numeric_literals',
115
+ 'boolean_literals',
116
+ 'hexadecimal_literals',
117
+ 'comments',
118
+ 'multi_line_comments',
119
+ ],
120
+ };
121
+ var PLACEHOLDER = '?';
122
+ /**
123
+ * @param {string} dialect
124
+ * @returns {RegExp[]}
125
+ */
126
+ function generateRegexp(dialect) {
127
+ var components = DIALECT_COMPONENTS[dialect];
128
+ // No Regexp.union in JS
129
+ return components.map(function (component) { return COMPONENTS_REGEXP_MAP[component]; });
130
+ }
131
+ var MYSQL_COMPONENTS_REGEXP = generateRegexp('mysql');
132
+ var POSTGRES_COMPONENTS_REGEXP = generateRegexp('postgres');
133
+ var SQLITE_COMPONENTS_REGEXP = generateRegexp('sqlite');
134
+ var ORACLE_COMPONENTS_REGEXP = generateRegexp('oracle');
135
+ var CASSANDRA_COMPONENTS_REGEXP = generateRegexp('cassandra');
136
+ var FALLBACK_REGEXP = generateRegexp('fallback');
137
+ function detectUnmatchedPairs(obfuscated, adapter) {
138
+ if (CLEANUP_REGEXP[adapter]) {
139
+ return CLEANUP_REGEXP[adapter].test(obfuscated);
140
+ }
141
+ return CLEANUP_REGEXP.mysql.test(obfuscated);
142
+ }
143
+ var FAILED_TO_OBFUSCATE_MESSAGE = 'Failed to obfuscate SQL query - quote characters remained after obfuscation';
144
+ /**
145
+ * Replaces literal query parameters with parameter symbols (e.g. '?');
146
+ *
147
+ * @param {string} sql
148
+ * @param {string} adapter
149
+ * @returns {string}
150
+ */
151
+ function obfuscate(sql, adapter) {
152
+ /** @type {RegExp[]} */ var regexp;
153
+ switch (adapter) {
154
+ case 'mysql':
155
+ case 'mysql2':
156
+ regexp = MYSQL_COMPONENTS_REGEXP;
157
+ break;
158
+ case 'postgres':
159
+ regexp = POSTGRES_COMPONENTS_REGEXP;
160
+ break;
161
+ case 'sqlite':
162
+ regexp = SQLITE_COMPONENTS_REGEXP;
163
+ break;
164
+ case 'oracle':
165
+ case 'oracle_enhanced':
166
+ regexp = ORACLE_COMPONENTS_REGEXP;
167
+ break;
168
+ case 'cassandra':
169
+ regexp = CASSANDRA_COMPONENTS_REGEXP;
170
+ break;
171
+ default:
172
+ regexp = FALLBACK_REGEXP;
173
+ }
174
+ var obfuscated = sql;
175
+ // eslint-disable-next-line no-return-assign
176
+ regexp.forEach(function (re) { return (obfuscated = obfuscated.replace(re, PLACEHOLDER)); });
177
+ if (detectUnmatchedPairs(obfuscated, adapter)) {
178
+ obfuscated = FAILED_TO_OBFUSCATE_MESSAGE;
179
+ }
180
+ return obfuscated;
181
+ }
182
+ exports.obfuscate = obfuscate;
183
+ function sqlNormalized(query) {
184
+ return obfuscate(query.sql, query.database_type);
185
+ }
186
+ exports.sqlNormalized = sqlNormalized;
187
+ function isSelect(sql) {
188
+ return (0, models_1.getSqlLabelFromString)(sql) === 'SQL Select';
189
+ }
190
+ exports.isSelect = isSelect;
191
+ function sqlStrings(event, filter) {
192
+ var _a, _b, e, sql, e_1_1;
193
+ var e_1, _c;
194
+ if (filter === void 0) { filter = function () { return true; }; }
195
+ return __generator(this, function (_d) {
196
+ switch (_d.label) {
197
+ case 0:
198
+ _d.trys.push([0, 5, 6, 7]);
199
+ _a = __values(new models_1.EventNavigator(event).descendants()), _b = _a.next();
200
+ _d.label = 1;
201
+ case 1:
202
+ if (!!_b.done) return [3 /*break*/, 4];
203
+ e = _b.value;
204
+ if (!e.event.sqlQuery) {
205
+ return [3 /*break*/, 3];
206
+ }
207
+ if (!filter(e.event)) {
208
+ return [3 /*break*/, 3];
209
+ }
210
+ if (!isSelect(e.event.sqlQuery)) {
211
+ return [3 /*break*/, 3];
212
+ }
213
+ if (!filter(event)) {
214
+ return [3 /*break*/, 3];
215
+ }
216
+ sql = sqlNormalized(e.event.sql);
217
+ return [4 /*yield*/, { event: e.event, sql: sql }];
218
+ case 2:
219
+ _d.sent();
220
+ _d.label = 3;
221
+ case 3:
222
+ _b = _a.next();
223
+ return [3 /*break*/, 1];
224
+ case 4: return [3 /*break*/, 7];
225
+ case 5:
226
+ e_1_1 = _d.sent();
227
+ e_1 = { error: e_1_1 };
228
+ return [3 /*break*/, 7];
229
+ case 6:
230
+ try {
231
+ if (_b && !_b.done && (_c = _a.return)) _c.call(_a);
232
+ }
233
+ finally { if (e_1) throw e_1.error; }
234
+ return [7 /*endfinally*/];
235
+ case 7: return [2 /*return*/];
236
+ }
237
+ });
238
+ }
239
+ exports.sqlStrings = sqlStrings;
240
+ function countJoins(normalizedSql) {
241
+ try {
242
+ var ast = (0, models_1.buildQueryAST)(normalizedSql);
243
+ var joins_1 = 0;
244
+ if (ast) {
245
+ (0, visit_1.visit)(ast, {
246
+ 'map.join': function (node) {
247
+ joins_1 += node.map.length;
248
+ },
249
+ });
250
+ }
251
+ return joins_1;
252
+ }
253
+ catch (_) {
254
+ console.warn("Unable to analyze query \"" + normalizedSql + "\"");
255
+ return 0;
256
+ }
257
+ }
258
+ exports.countJoins = countJoins;
259
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __values = (this && this.__values) || function(o) {
3
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
4
+ if (m) return m.call(o);
5
+ if (o && typeof o.length === "number") return {
6
+ next: function () {
7
+ if (o && i >= o.length) o = void 0;
8
+ return { value: o && o[i++], done: !o };
9
+ }
10
+ };
11
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
12
+ };
13
+ var __read = (this && this.__read) || function (o, n) {
14
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
15
+ if (!m) return o;
16
+ var i = m.call(o), r, ar = [], e;
17
+ try {
18
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
19
+ }
20
+ catch (error) { e = { error: error }; }
21
+ finally {
22
+ try {
23
+ if (r && !r.done && (m = i["return"])) m.call(i);
24
+ }
25
+ finally { if (e) throw e.error; }
26
+ }
27
+ return ar;
28
+ };
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.visit = void 0;
31
+ function visit(node, callbacks) {
32
+ var type = node.type, variant = node.variant;
33
+ var key = [type, variant].filter(Boolean).join('.');
34
+ if (callbacks !== undefined && key in callbacks)
35
+ callbacks[key](node, callbacks);
36
+ visitNode(node, callbacks);
37
+ }
38
+ exports.visit = visit;
39
+ function visitNode(node, callbacks) {
40
+ var e_1, _a, e_2, _b;
41
+ try {
42
+ for (var _c = __values(Object.entries(node)), _d = _c.next(); !_d.done; _d = _c.next()) {
43
+ var _e = __read(_d.value, 2), key = _e[0], property = _e[1];
44
+ if (['type', 'variant', 'name', 'value'].includes(key))
45
+ continue;
46
+ if (Array.isArray(property)) {
47
+ try {
48
+ for (var property_1 = (e_2 = void 0, __values(property)), property_1_1 = property_1.next(); !property_1_1.done; property_1_1 = property_1.next()) {
49
+ var subNode = property_1_1.value;
50
+ visit(subNode, callbacks);
51
+ }
52
+ }
53
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
54
+ finally {
55
+ try {
56
+ if (property_1_1 && !property_1_1.done && (_b = property_1.return)) _b.call(property_1);
57
+ }
58
+ finally { if (e_2) throw e_2.error; }
59
+ }
60
+ }
61
+ else if (typeof property === 'object') {
62
+ visit(property, callbacks);
63
+ }
64
+ else if (typeof property === 'string' || typeof property === 'boolean') {
65
+ // pass
66
+ }
67
+ else {
68
+ console.warn("Unrecognized subexpression: " + typeof property + " " + property);
69
+ }
70
+ }
71
+ }
72
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
73
+ finally {
74
+ try {
75
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
76
+ }
77
+ finally { if (e_1) throw e_1.error; }
78
+ }
79
+ }
80
+ //# sourceMappingURL=visit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visit.js","sourceRoot":"","sources":["../../src/database/visit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,SAAgB,KAAK,CAAC,IAAS,EAAE,SAAoC;IAC3D,IAAA,IAAI,GAAc,IAAI,KAAlB,EAAE,OAAO,GAAK,IAAI,QAAT,CAAU;IAC/B,IAAM,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtD,IAAI,SAAS,KAAK,SAAS,IAAI,GAAG,IAAI,SAAS;QAAE,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACjF,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC7B,CAAC;AAND,sBAMC;AAED,SAAS,SAAS,CAAC,IAAS,EAAE,SAAoC;;;QAChE,KAA8B,IAAA,KAAA,SAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA,gBAAA,4BAAE;YAAzC,IAAA,KAAA,mBAAe,EAAd,GAAG,QAAA,EAAE,QAAQ,QAAA;YACvB,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAAE,SAAS;YACjE,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;;oBAC3B,KAAsB,IAAA,4BAAA,SAAA,QAAQ,CAAA,CAAA,kCAAA;wBAAzB,IAAM,OAAO,qBAAA;wBAAc,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;qBAAA;;;;;;;;;aAC3D;iBAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;gBACvC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;aAC5B;iBAAM,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,SAAS,EAAE;gBACxE,OAAO;aACR;iBAAM;gBACL,OAAO,CAAC,IAAI,CAAC,iCAA+B,OAAO,QAAQ,SAAI,QAAU,CAAC,CAAC;aAC5E;SACF;;;;;;;;;AACH,CAAC"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.AbortError = exports.ValidationError = void 0;
19
+ var ValidationError = /** @class */ (function (_super) {
20
+ __extends(ValidationError, _super);
21
+ function ValidationError() {
22
+ return _super !== null && _super.apply(this, arguments) || this;
23
+ }
24
+ return ValidationError;
25
+ }(Error));
26
+ exports.ValidationError = ValidationError;
27
+ var AbortError = /** @class */ (function (_super) {
28
+ __extends(AbortError, _super);
29
+ function AbortError() {
30
+ return _super !== null && _super.apply(this, arguments) || this;
31
+ }
32
+ return AbortError;
33
+ }(Error));
34
+ exports.AbortError = AbortError;
35
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA;IAAqC,mCAAK;IAA1C;;IAA4C,CAAC;IAAD,sBAAC;AAAD,CAAC,AAA7C,CAAqC,KAAK,GAAG;AAAhC,0CAAe;AAC5B;IAAgC,8BAAK;IAArC;;IAAuC,CAAC;IAAD,iBAAC;AAAD,CAAC,AAAxC,CAAgC,KAAK,GAAG;AAA3B,gCAAU"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.newFindings = void 0;
4
+ function newFindings(findings, findingStatuses) {
5
+ var statusByFindingDigest = findingStatuses.reduce(function (memo, findingStatus) {
6
+ memo.set(findingStatus.identity_hash, findingStatus.status);
7
+ return memo;
8
+ }, new Map());
9
+ return findings.filter(function (finding) {
10
+ var status = statusByFindingDigest.get(finding.hash);
11
+ return !status || status === 'new';
12
+ });
13
+ }
14
+ exports.newFindings = newFindings;
15
+ //# sourceMappingURL=findings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findings.js","sourceRoot":"","sources":["../src/findings.ts"],"names":[],"mappings":";;;AAGA,SAAgB,WAAW,CACzB,QAAmB,EACnB,eAAwC;IAExC,IAAM,qBAAqB,GAAG,eAAe,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,aAAa;QACvE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,IAAI,GAAG,EAAkB,CAAC,CAAC;IAE9B,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAC,OAAO;QAC7B,IAAM,MAAM,GAAG,qBAAqB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvD,OAAO,CAAC,MAAM,IAAI,MAAM,KAAK,KAAK,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC;AAbD,kCAaC"}
@@ -0,0 +1,51 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ var src_1 = require("@appland/client/dist/src");
40
+ function default_1(appId) {
41
+ return __awaiter(this, void 0, void 0, function () {
42
+ return __generator(this, function (_a) {
43
+ switch (_a.label) {
44
+ case 0: return [4 /*yield*/, new src_1.App(appId).listFindingStatus()];
45
+ case 1: return [2 /*return*/, _a.sent()];
46
+ }
47
+ });
48
+ });
49
+ }
50
+ exports.default = default_1;
51
+ //# sourceMappingURL=fetchStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetchStatus.js","sourceRoot":"","sources":["../../../src/integration/appland/fetchStatus.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAsE;AAEtE,mBAA+B,KAAa;;;;wBACnC,qBAAM,IAAI,SAAG,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,EAAA;wBAA/C,sBAAO,SAAwC,EAAC;;;;CACjD;AAFD,4BAEC"}
@@ -0,0 +1,193 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (_) try {
29
+ 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;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __values = (this && this.__values) || function(o) {
50
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
51
+ if (m) return m.call(o);
52
+ if (o && typeof o.length === "number") return {
53
+ next: function () {
54
+ if (o && i >= o.length) o = void 0;
55
+ return { value: o && o[i++], done: !o };
56
+ }
57
+ };
58
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
59
+ };
60
+ var __read = (this && this.__read) || function (o, n) {
61
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
62
+ if (!m) return o;
63
+ var i = m.call(o), r, ar = [], e;
64
+ try {
65
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
66
+ }
67
+ catch (error) { e = { error: error }; }
68
+ finally {
69
+ try {
70
+ if (r && !r.done && (m = i["return"])) m.call(i);
71
+ }
72
+ finally { if (e) throw e.error; }
73
+ }
74
+ return ar;
75
+ };
76
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
77
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
78
+ if (ar || !(i in from)) {
79
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
80
+ ar[i] = from[i];
81
+ }
82
+ }
83
+ return to.concat(ar || Array.prototype.slice.call(from));
84
+ };
85
+ var __importDefault = (this && this.__importDefault) || function (mod) {
86
+ return (mod && mod.__esModule) ? mod : { "default": mod };
87
+ };
88
+ Object.defineProperty(exports, "__esModule", { value: true });
89
+ var tar_stream_1 = require("tar-stream");
90
+ var fs_1 = require("fs");
91
+ var crypto_1 = require("crypto");
92
+ var form_data_1 = __importDefault(require("form-data"));
93
+ var zlib_1 = require("zlib");
94
+ var models_1 = require("@appland/models");
95
+ var src_1 = require("@appland/client/dist/src");
96
+ var url_1 = require("url");
97
+ function default_1(scanResults, appId) {
98
+ return __awaiter(this, void 0, void 0, function () {
99
+ var normalizedFilePaths, findings, findings_1, findings_1_1, finding, hash, clonedFindings, relevantFilePaths, tarStream, relevantFilePaths_1, relevantFilePaths_1_1, filePath, buffer, e_1_1, gzip, form, request;
100
+ var e_2, _a, e_1, _b;
101
+ return __generator(this, function (_c) {
102
+ switch (_c.label) {
103
+ case 0:
104
+ normalizedFilePaths = {};
105
+ findings = scanResults.findings;
106
+ try {
107
+ for (findings_1 = __values(findings), findings_1_1 = findings_1.next(); !findings_1_1.done; findings_1_1 = findings_1.next()) {
108
+ finding = findings_1_1.value;
109
+ if (!finding.appMapFile) {
110
+ continue;
111
+ }
112
+ hash = (0, crypto_1.createHash)('sha256').update(finding.appMapFile).digest('hex');
113
+ normalizedFilePaths[finding.appMapFile] = hash + ".appmap.json";
114
+ }
115
+ }
116
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
117
+ finally {
118
+ try {
119
+ if (findings_1_1 && !findings_1_1.done && (_a = findings_1.return)) _a.call(findings_1);
120
+ }
121
+ finally { if (e_2) throw e_2.error; }
122
+ }
123
+ clonedFindings = findings.map(function (finding) {
124
+ var clone = __assign({}, finding);
125
+ if (clone.appMapFile) {
126
+ clone.appMapFile = normalizedFilePaths[clone.appMapFile];
127
+ }
128
+ return clone;
129
+ });
130
+ relevantFilePaths = __spreadArray([], __read(new Set(findings.filter(function (f) { return f.appMapFile; }).map(function (f) { return f.appMapFile; }))), false);
131
+ tarStream = (0, tar_stream_1.pack)();
132
+ _c.label = 1;
133
+ case 1:
134
+ _c.trys.push([1, 6, 7, 8]);
135
+ relevantFilePaths_1 = __values(relevantFilePaths), relevantFilePaths_1_1 = relevantFilePaths_1.next();
136
+ _c.label = 2;
137
+ case 2:
138
+ if (!!relevantFilePaths_1_1.done) return [3 /*break*/, 5];
139
+ filePath = relevantFilePaths_1_1.value;
140
+ return [4 /*yield*/, fs_1.promises.readFile(filePath)];
141
+ case 3:
142
+ buffer = _c.sent();
143
+ tarStream.entry({ name: normalizedFilePaths[filePath] }, JSON.stringify((0, models_1.buildAppMap)(buffer.toString()).normalize().build().toJSON()));
144
+ _c.label = 4;
145
+ case 4:
146
+ relevantFilePaths_1_1 = relevantFilePaths_1.next();
147
+ return [3 /*break*/, 2];
148
+ case 5: return [3 /*break*/, 8];
149
+ case 6:
150
+ e_1_1 = _c.sent();
151
+ e_1 = { error: e_1_1 };
152
+ return [3 /*break*/, 8];
153
+ case 7:
154
+ try {
155
+ if (relevantFilePaths_1_1 && !relevantFilePaths_1_1.done && (_b = relevantFilePaths_1.return)) _b.call(relevantFilePaths_1);
156
+ }
157
+ finally { if (e_1) throw e_1.error; }
158
+ return [7 /*endfinally*/];
159
+ case 8:
160
+ tarStream.entry({ name: 'app.scanner.json' }, JSON.stringify({ findings: clonedFindings }));
161
+ tarStream.finalize();
162
+ gzip = (0, zlib_1.createGzip)();
163
+ tarStream.pipe(gzip);
164
+ form = new form_data_1.default();
165
+ form.append('findings_data', gzip, 'findings.tgz');
166
+ form.append('app_id', appId);
167
+ process.stderr.write("Uploading findings to application '" + appId + "'\n");
168
+ return [4 /*yield*/, (0, src_1.buildRequest)('api/scanner_jobs')];
169
+ case 9:
170
+ request = _c.sent();
171
+ return [2 /*return*/, new Promise(function (resolve, reject) {
172
+ var req = request.requestFunction(request.url, {
173
+ method: 'POST',
174
+ headers: __assign(__assign({}, request.headers), form.getHeaders()),
175
+ }, resolve);
176
+ req.on('error', reject);
177
+ form.pipe(req);
178
+ })
179
+ .then(src_1.handleError)
180
+ .then(function (response) {
181
+ var message = "Uploaded " + scanResults.findings.length + " findings";
182
+ if (response.headers.location) {
183
+ var uploadURL = new url_1.URL(response.headers.location, request.url.href);
184
+ message += " to " + uploadURL;
185
+ }
186
+ console.log(message);
187
+ })];
188
+ }
189
+ });
190
+ });
191
+ }
192
+ exports.default = default_1;
193
+ //# sourceMappingURL=upload.js.map