@digitraffic/common 2022.10.14-1 → 2022.10.28-2

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 (334) hide show
  1. package/{aws → dist/aws}/infra/api/integration.d.ts +0 -0
  2. package/dist/aws/infra/api/integration.js +52 -0
  3. package/dist/aws/infra/api/integration.js.map +1 -0
  4. package/{aws → dist/aws}/infra/api/response.d.ts +0 -0
  5. package/dist/aws/infra/api/response.js +61 -0
  6. package/dist/aws/infra/api/response.js.map +1 -0
  7. package/{aws → dist/aws}/infra/api/responses.d.ts +3 -3
  8. package/dist/aws/infra/api/responses.js +82 -0
  9. package/dist/aws/infra/api/responses.js.map +1 -0
  10. package/{aws → dist/aws}/infra/api/static-integration.d.ts +0 -0
  11. package/dist/aws/infra/api/static-integration.js +54 -0
  12. package/dist/aws/infra/api/static-integration.js.map +1 -0
  13. package/{aws → dist/aws}/infra/canaries/canary-alarm.d.ts +0 -0
  14. package/dist/aws/infra/canaries/canary-alarm.js +26 -0
  15. package/dist/aws/infra/canaries/canary-alarm.js.map +1 -0
  16. package/dist/aws/infra/canaries/canary-keys.d.ts +3 -0
  17. package/dist/aws/infra/canaries/canary-keys.js +7 -0
  18. package/dist/aws/infra/canaries/canary-keys.js.map +1 -0
  19. package/{aws → dist/aws}/infra/canaries/canary-parameters.d.ts +0 -0
  20. package/dist/aws/infra/canaries/canary-parameters.js +3 -0
  21. package/dist/aws/infra/canaries/canary-parameters.js.map +1 -0
  22. package/{aws → dist/aws}/infra/canaries/canary-role.d.ts +0 -0
  23. package/dist/aws/infra/canaries/canary-role.js +46 -0
  24. package/dist/aws/infra/canaries/canary-role.js.map +1 -0
  25. package/{aws → dist/aws}/infra/canaries/canary.d.ts +0 -0
  26. package/dist/aws/infra/canaries/canary.js +32 -0
  27. package/dist/aws/infra/canaries/canary.js.map +1 -0
  28. package/{aws → dist/aws}/infra/canaries/database-canary.d.ts +0 -0
  29. package/dist/aws/infra/canaries/database-canary.js +70 -0
  30. package/dist/aws/infra/canaries/database-canary.js.map +1 -0
  31. package/{aws → dist/aws}/infra/canaries/database-checker.d.ts +2 -2
  32. package/dist/aws/infra/canaries/database-checker.js +103 -0
  33. package/dist/aws/infra/canaries/database-checker.js.map +1 -0
  34. package/{aws → dist/aws}/infra/canaries/url-canary.d.ts +0 -3
  35. package/dist/aws/infra/canaries/url-canary.js +47 -0
  36. package/dist/aws/infra/canaries/url-canary.js.map +1 -0
  37. package/{aws → dist/aws}/infra/canaries/url-checker.d.ts +0 -0
  38. package/dist/aws/infra/canaries/url-checker.js +252 -0
  39. package/dist/aws/infra/canaries/url-checker.js.map +1 -0
  40. package/{aws → dist/aws}/infra/documentation.d.ts +0 -0
  41. package/dist/aws/infra/documentation.js +95 -0
  42. package/dist/aws/infra/documentation.js.map +1 -0
  43. package/{aws → dist/aws}/infra/scheduler.d.ts +7 -7
  44. package/dist/aws/infra/scheduler.js +31 -0
  45. package/dist/aws/infra/scheduler.js.map +1 -0
  46. package/{aws → dist/aws}/infra/security-rule.d.ts +0 -0
  47. package/dist/aws/infra/security-rule.js +39 -0
  48. package/dist/aws/infra/security-rule.js.map +1 -0
  49. package/{aws → dist/aws}/infra/sqs-integration.d.ts +0 -0
  50. package/dist/aws/infra/sqs-integration.js +93 -0
  51. package/dist/aws/infra/sqs-integration.js.map +1 -0
  52. package/{aws → dist/aws}/infra/sqs-queue.d.ts +0 -0
  53. package/dist/aws/infra/sqs-queue.js +130 -0
  54. package/dist/aws/infra/sqs-queue.js.map +1 -0
  55. package/{aws → dist/aws}/infra/stack/lambda-configs.d.ts +5 -5
  56. package/dist/aws/infra/stack/lambda-configs.js +105 -0
  57. package/dist/aws/infra/stack/lambda-configs.js.map +1 -0
  58. package/{aws → dist/aws}/infra/stack/monitoredfunction.d.ts +1 -1
  59. package/dist/aws/infra/stack/monitoredfunction.js +143 -0
  60. package/dist/aws/infra/stack/monitoredfunction.js.map +1 -0
  61. package/{aws → dist/aws}/infra/stack/rest_apis.d.ts +0 -0
  62. package/dist/aws/infra/stack/rest_apis.js +185 -0
  63. package/dist/aws/infra/stack/rest_apis.js.map +1 -0
  64. package/{aws → dist/aws}/infra/stack/stack-checking-aspect.d.ts +0 -0
  65. package/dist/aws/infra/stack/stack-checking-aspect.js +174 -0
  66. package/dist/aws/infra/stack/stack-checking-aspect.js.map +1 -0
  67. package/{aws → dist/aws}/infra/stack/stack.d.ts +5 -4
  68. package/dist/aws/infra/stack/stack.js +67 -0
  69. package/dist/aws/infra/stack/stack.js.map +1 -0
  70. package/{aws → dist/aws}/infra/stack/subscription.d.ts +3 -3
  71. package/dist/aws/infra/stack/subscription.js +42 -0
  72. package/dist/aws/infra/stack/subscription.js.map +1 -0
  73. package/{aws → dist/aws}/infra/usage-plans.d.ts +0 -0
  74. package/dist/aws/infra/usage-plans.js +42 -0
  75. package/dist/aws/infra/usage-plans.js.map +1 -0
  76. package/{aws → dist/aws}/runtime/apikey.d.ts +0 -0
  77. package/dist/aws/runtime/apikey.js +13 -0
  78. package/dist/aws/runtime/apikey.js.map +1 -0
  79. package/{aws → dist/aws}/runtime/digitraffic-integration-response.d.ts +0 -0
  80. package/dist/aws/runtime/digitraffic-integration-response.js +26 -0
  81. package/dist/aws/runtime/digitraffic-integration-response.js.map +1 -0
  82. package/dist/aws/runtime/environment.d.ts +1 -0
  83. package/dist/aws/runtime/environment.js +12 -0
  84. package/dist/aws/runtime/environment.js.map +1 -0
  85. package/{aws → dist/aws}/runtime/messaging.d.ts +0 -0
  86. package/dist/aws/runtime/messaging.js +31 -0
  87. package/dist/aws/runtime/messaging.js.map +1 -0
  88. package/{aws → dist/aws}/runtime/s3.d.ts +0 -0
  89. package/dist/aws/runtime/s3.js +30 -0
  90. package/dist/aws/runtime/s3.js.map +1 -0
  91. package/{aws → dist/aws}/runtime/secrets/dbsecret.d.ts +0 -0
  92. package/dist/aws/runtime/secrets/dbsecret.js +96 -0
  93. package/dist/aws/runtime/secrets/dbsecret.js.map +1 -0
  94. package/{aws → dist/aws}/runtime/secrets/proxy-holder.d.ts +0 -0
  95. package/dist/aws/runtime/secrets/proxy-holder.js +27 -0
  96. package/dist/aws/runtime/secrets/proxy-holder.js.map +1 -0
  97. package/{aws → dist/aws}/runtime/secrets/rds-holder.d.ts +0 -0
  98. package/dist/aws/runtime/secrets/rds-holder.js +27 -0
  99. package/dist/aws/runtime/secrets/rds-holder.js.map +1 -0
  100. package/{aws → dist/aws}/runtime/secrets/secret-holder.d.ts +0 -0
  101. package/dist/aws/runtime/secrets/secret-holder.js +76 -0
  102. package/dist/aws/runtime/secrets/secret-holder.js.map +1 -0
  103. package/{aws → dist/aws}/runtime/secrets/secret.d.ts +0 -0
  104. package/dist/aws/runtime/secrets/secret.js +43 -0
  105. package/dist/aws/runtime/secrets/secret.js.map +1 -0
  106. package/{aws → dist/aws}/types/errors.d.ts +4 -0
  107. package/dist/aws/types/errors.js +16 -0
  108. package/dist/aws/types/errors.js.map +1 -0
  109. package/{aws → dist/aws}/types/lambda-response.d.ts +4 -3
  110. package/dist/aws/types/lambda-response.js +33 -0
  111. package/dist/aws/types/lambda-response.js.map +1 -0
  112. package/{aws → dist/aws}/types/mediatypes.d.ts +1 -1
  113. package/dist/aws/types/mediatypes.js +16 -0
  114. package/dist/aws/types/mediatypes.js.map +1 -0
  115. package/{aws → dist/aws}/types/model-with-reference.d.ts +0 -0
  116. package/dist/aws/types/model-with-reference.js +3 -0
  117. package/dist/aws/types/model-with-reference.js.map +1 -0
  118. package/{aws → dist/aws}/types/proxytypes.d.ts +0 -0
  119. package/dist/aws/types/proxytypes.js +3 -0
  120. package/dist/aws/types/proxytypes.js.map +1 -0
  121. package/{aws → dist/aws}/types/tags.d.ts +0 -0
  122. package/dist/aws/types/tags.js +7 -0
  123. package/dist/aws/types/tags.js.map +1 -0
  124. package/{database → dist/database}/cached.d.ts +0 -0
  125. package/dist/database/cached.js +32 -0
  126. package/dist/database/cached.js.map +1 -0
  127. package/{database → dist/database}/database.d.ts +0 -0
  128. package/dist/database/database.js +70 -0
  129. package/dist/database/database.js.map +1 -0
  130. package/{database → dist/database}/last-updated.d.ts +0 -0
  131. package/dist/database/last-updated.js +54 -0
  132. package/dist/database/last-updated.js.map +1 -0
  133. package/dist/database/models.d.ts +6 -0
  134. package/dist/database/models.js +3 -0
  135. package/dist/database/models.js.map +1 -0
  136. package/{marine → dist/marine}/id_utils.d.ts +0 -0
  137. package/dist/marine/id_utils.js +33 -0
  138. package/dist/marine/id_utils.js.map +1 -0
  139. package/{marine → dist/marine}/rtz.d.ts +0 -0
  140. package/dist/marine/rtz.js +3 -0
  141. package/dist/marine/rtz.js.map +1 -0
  142. package/{test → dist/test}/asserter.d.ts +0 -0
  143. package/dist/test/asserter.js +45 -0
  144. package/dist/test/asserter.js.map +1 -0
  145. package/{test → dist/test}/db-testutils.d.ts +1 -1
  146. package/dist/test/db-testutils.js +31 -0
  147. package/dist/test/db-testutils.js.map +1 -0
  148. package/{test → dist/test}/httpserver.d.ts +2 -1
  149. package/dist/test/httpserver.js +74 -0
  150. package/dist/test/httpserver.js.map +1 -0
  151. package/{test → dist/test}/secret.d.ts +0 -0
  152. package/dist/test/secret.js +25 -0
  153. package/dist/test/secret.js.map +1 -0
  154. package/{test → dist/test}/secrets-manager.d.ts +0 -0
  155. package/dist/test/secrets-manager.js +59 -0
  156. package/dist/test/secrets-manager.js.map +1 -0
  157. package/{test → dist/test}/testutils.d.ts +0 -0
  158. package/dist/test/testutils.js +44 -0
  159. package/dist/test/testutils.js.map +1 -0
  160. package/dist/types/either.d.ts +9 -0
  161. package/dist/types/either.js +3 -0
  162. package/dist/types/either.js.map +1 -0
  163. package/{types → dist/types}/input-error.d.ts +0 -0
  164. package/dist/types/input-error.js +7 -0
  165. package/dist/types/input-error.js.map +1 -0
  166. package/{types → dist/types}/language.d.ts +0 -0
  167. package/dist/types/language.js +10 -0
  168. package/dist/types/language.js.map +1 -0
  169. package/{types → dist/types}/traffictype.d.ts +0 -0
  170. package/dist/types/traffictype.js +13 -0
  171. package/dist/types/traffictype.js.map +1 -0
  172. package/{types → dist/types}/validator.d.ts +0 -0
  173. package/dist/types/validator.js +14 -0
  174. package/dist/types/validator.js.map +1 -0
  175. package/{utils → dist/utils}/api-model.d.ts +0 -0
  176. package/dist/utils/api-model.js +129 -0
  177. package/dist/utils/api-model.js.map +1 -0
  178. package/{utils → dist/utils}/base64.d.ts +0 -0
  179. package/dist/utils/base64.js +21 -0
  180. package/dist/utils/base64.js.map +1 -0
  181. package/{utils → dist/utils}/date-utils.d.ts +0 -0
  182. package/dist/utils/date-utils.js +34 -0
  183. package/dist/utils/date-utils.js.map +1 -0
  184. package/{utils → dist/utils}/geojson-types.d.ts +0 -0
  185. package/dist/utils/geojson-types.js +18 -0
  186. package/dist/utils/geojson-types.js.map +1 -0
  187. package/{utils → dist/utils}/geometry.d.ts +0 -0
  188. package/dist/utils/geometry.js +164 -0
  189. package/dist/utils/geometry.js.map +1 -0
  190. package/{utils → dist/utils}/retry.d.ts +0 -0
  191. package/dist/utils/retry.js +50 -0
  192. package/dist/utils/retry.js.map +1 -0
  193. package/{utils → dist/utils}/slack.d.ts +0 -0
  194. package/dist/utils/slack.js +25 -0
  195. package/dist/utils/slack.js.map +1 -0
  196. package/{utils → dist/utils}/utils.d.ts +24 -0
  197. package/dist/utils/utils.js +75 -0
  198. package/dist/utils/utils.js.map +1 -0
  199. package/package.json +12 -10
  200. package/src/@types/geojson-validation/index.d.ts +4 -0
  201. package/src/aws/infra/api/integration.ts +73 -0
  202. package/src/aws/infra/api/response.ts +67 -0
  203. package/src/aws/infra/api/responses.ts +124 -0
  204. package/src/aws/infra/api/static-integration.ts +62 -0
  205. package/src/aws/infra/canaries/canary-alarm.ts +31 -0
  206. package/src/aws/infra/canaries/canary-keys.ts +3 -0
  207. package/src/aws/infra/canaries/canary-parameters.ts +19 -0
  208. package/src/aws/infra/canaries/canary-role.ts +47 -0
  209. package/src/aws/infra/canaries/canary.ts +46 -0
  210. package/src/aws/infra/canaries/database-canary.ts +98 -0
  211. package/src/aws/infra/canaries/database-checker.ts +155 -0
  212. package/src/aws/infra/canaries/url-canary.ts +74 -0
  213. package/src/aws/infra/canaries/url-checker.ts +366 -0
  214. package/src/aws/infra/documentation.ts +124 -0
  215. package/src/aws/infra/scheduler.ts +59 -0
  216. package/src/aws/infra/security-rule.ts +38 -0
  217. package/src/aws/infra/sqs-integration.ts +102 -0
  218. package/src/aws/infra/sqs-queue.ts +148 -0
  219. package/src/aws/infra/stack/lambda-configs.ts +207 -0
  220. package/src/aws/infra/stack/monitoredfunction.ts +342 -0
  221. package/src/aws/infra/stack/rest_apis.ts +223 -0
  222. package/src/aws/infra/stack/stack-checking-aspect.ts +279 -0
  223. package/src/aws/infra/stack/stack.ts +145 -0
  224. package/src/aws/infra/stack/subscription.ts +58 -0
  225. package/src/aws/infra/usage-plans.ts +41 -0
  226. package/src/aws/runtime/apikey.ts +9 -0
  227. package/src/aws/runtime/digitraffic-integration-response.ts +28 -0
  228. package/src/aws/runtime/environment.ts +9 -0
  229. package/src/aws/runtime/messaging.ts +26 -0
  230. package/src/aws/runtime/s3.ts +44 -0
  231. package/src/aws/runtime/secrets/dbsecret.ts +116 -0
  232. package/src/aws/runtime/secrets/proxy-holder.ts +37 -0
  233. package/src/aws/runtime/secrets/rds-holder.ts +33 -0
  234. package/src/aws/runtime/secrets/secret-holder.ts +116 -0
  235. package/src/aws/runtime/secrets/secret.ts +50 -0
  236. package/src/aws/types/errors.ts +14 -0
  237. package/src/aws/types/lambda-response.ts +43 -0
  238. package/src/aws/types/mediatypes.ts +11 -0
  239. package/src/aws/types/model-with-reference.ts +8 -0
  240. package/src/aws/types/proxytypes.ts +27 -0
  241. package/src/aws/types/tags.ts +3 -0
  242. package/src/database/cached.ts +35 -0
  243. package/src/database/database.ts +96 -0
  244. package/src/database/last-updated.ts +59 -0
  245. package/src/database/models.ts +7 -0
  246. package/src/marine/id_utils.ts +30 -0
  247. package/src/marine/rtz.ts +57 -0
  248. package/src/test/asserter.ts +48 -0
  249. package/src/test/db-testutils.ts +44 -0
  250. package/src/test/httpserver.ts +96 -0
  251. package/src/test/secret.ts +23 -0
  252. package/src/test/secrets-manager.ts +34 -0
  253. package/src/test/testutils.ts +39 -0
  254. package/src/types/either.ts +3 -0
  255. package/src/types/input-error.ts +2 -0
  256. package/src/types/language.ts +3 -0
  257. package/src/types/traffictype.ts +8 -0
  258. package/src/types/validator.ts +10 -0
  259. package/src/utils/api-model.ts +133 -0
  260. package/src/utils/base64.ts +16 -0
  261. package/src/utils/date-utils.ts +30 -0
  262. package/src/utils/geojson-types.ts +22 -0
  263. package/src/utils/geometry.ts +164 -0
  264. package/src/utils/retry.ts +49 -0
  265. package/src/utils/slack.ts +22 -0
  266. package/src/utils/utils.ts +105 -0
  267. package/aws/index.d.ts +0 -1
  268. package/aws/infra/api/index.d.ts +0 -1
  269. package/aws/infra/api/integration.js +0 -52
  270. package/aws/infra/api/response.js +0 -61
  271. package/aws/infra/api/responses.js +0 -79
  272. package/aws/infra/api/static-integration.js +0 -54
  273. package/aws/infra/canaries/canary-alarm.js +0 -26
  274. package/aws/infra/canaries/canary-parameters.js +0 -3
  275. package/aws/infra/canaries/canary-role.js +0 -46
  276. package/aws/infra/canaries/canary.js +0 -29
  277. package/aws/infra/canaries/database-canary.js +0 -55
  278. package/aws/infra/canaries/database-checker.js +0 -109
  279. package/aws/infra/canaries/url-canary.js +0 -46
  280. package/aws/infra/canaries/url-checker.js +0 -238
  281. package/aws/infra/documentation.js +0 -95
  282. package/aws/infra/scheduler.js +0 -31
  283. package/aws/infra/security-rule.js +0 -39
  284. package/aws/infra/sqs-integration.js +0 -93
  285. package/aws/infra/sqs-queue.js +0 -130
  286. package/aws/infra/stack/lambda-configs.js +0 -93
  287. package/aws/infra/stack/monitoredfunction.js +0 -135
  288. package/aws/infra/stack/rest_apis.js +0 -185
  289. package/aws/infra/stack/stack-checking-aspect.js +0 -174
  290. package/aws/infra/stack/stack.js +0 -60
  291. package/aws/infra/stack/subscription.js +0 -41
  292. package/aws/infra/usage-plans.js +0 -42
  293. package/aws/runtime/apikey.js +0 -13
  294. package/aws/runtime/digitraffic-integration-response.js +0 -26
  295. package/aws/runtime/messaging.js +0 -31
  296. package/aws/runtime/s3.js +0 -30
  297. package/aws/runtime/secrets/dbsecret.js +0 -96
  298. package/aws/runtime/secrets/proxy-holder.js +0 -26
  299. package/aws/runtime/secrets/rds-holder.js +0 -26
  300. package/aws/runtime/secrets/secret-holder.js +0 -73
  301. package/aws/runtime/secrets/secret.js +0 -43
  302. package/aws/types/errors.js +0 -9
  303. package/aws/types/lambda-response.js +0 -28
  304. package/aws/types/mediatypes.js +0 -15
  305. package/aws/types/model-with-reference.js +0 -3
  306. package/aws/types/proxytypes.js +0 -3
  307. package/aws/types/tags.js +0 -7
  308. package/database/cached.js +0 -32
  309. package/database/database.js +0 -62
  310. package/database/last-updated.js +0 -54
  311. package/index.d.ts +0 -1
  312. package/index.js +0 -18
  313. package/marine/id_utils.js +0 -33
  314. package/marine/rtz.js +0 -3
  315. package/test/asserter.js +0 -45
  316. package/test/db-testutils.js +0 -31
  317. package/test/httpserver.js +0 -67
  318. package/test/secret.js +0 -25
  319. package/test/secrets-manager.js +0 -59
  320. package/test/testutils.js +0 -44
  321. package/types/index.d.ts +0 -1
  322. package/types/input-error.js +0 -7
  323. package/types/language.js +0 -10
  324. package/types/traffictype.js +0 -13
  325. package/types/validator.js +0 -14
  326. package/utils/api-model.js +0 -129
  327. package/utils/base64.js +0 -21
  328. package/utils/date-utils.js +0 -34
  329. package/utils/geojson-types.js +0 -18
  330. package/utils/geometry.js +0 -140
  331. package/utils/retry.js +0 -50
  332. package/utils/slack.js +0 -25
  333. package/utils/utils.js +0 -40
  334. package/yarn-error.log +0 -103
@@ -1,238 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.HeaderChecker = exports.GeoJsonChecker = exports.ContentTypeChecker = exports.ContentChecker = exports.ResponseChecker = exports.UrlChecker = exports.API_KEY_HEADER = void 0;
4
- const http2_1 = require("http2");
5
- const asserter_1 = require("../../../test/asserter");
6
- // eslint-disable-next-line @typescript-eslint/no-var-requires
7
- const synthetics = require('Synthetics');
8
- const zlib = require("zlib");
9
- const mediatypes_1 = require("../../types/mediatypes");
10
- const apikey_1 = require("../../runtime/apikey");
11
- const geometry_1 = require("../../../utils/geometry");
12
- exports.API_KEY_HEADER = "x-api-key";
13
- const baseHeaders = {
14
- "Digitraffic-User": "internal-digitraffic-canary",
15
- "Accept-Encoding": "gzip",
16
- "Accept": "*/*",
17
- };
18
- class UrlChecker {
19
- constructor(hostname, apiKey) {
20
- const headers = { ...baseHeaders };
21
- if (apiKey) {
22
- headers[exports.API_KEY_HEADER] = apiKey;
23
- }
24
- this.requestOptions = {
25
- hostname,
26
- method: 'GET',
27
- protocol: 'https:',
28
- headers,
29
- };
30
- synthetics.getConfiguration()
31
- .disableRequestMetrics();
32
- synthetics.getConfiguration()
33
- .withIncludeRequestBody(false)
34
- .withIncludeRequestHeaders(false)
35
- .withIncludeResponseBody(false)
36
- .withIncludeResponseHeaders(false)
37
- .withFailedCanaryMetric(true);
38
- }
39
- static create(hostname, apiKeyId) {
40
- return (0, apikey_1.getApiKeyFromAPIGateway)(apiKeyId).then(apiKey => {
41
- return new UrlChecker(hostname, apiKey.value);
42
- });
43
- }
44
- static createV2() {
45
- return this.create(process.env.hostname, process.env.apiKeyId);
46
- }
47
- expectStatus(statusCode, url, callback) {
48
- const requestOptions = { ...this.requestOptions, ...{
49
- path: url,
50
- } };
51
- return synthetics.executeHttpStep(`Verify ${statusCode} for ${url.replace(/auth=.*/, '')}`, requestOptions, callback);
52
- }
53
- expect200(url, ...callbacks) {
54
- const callback = async (json, body, res) => {
55
- await Promise.allSettled(callbacks.map(c => c(json, body, res)));
56
- };
57
- return this.expectStatus(200, url, callback);
58
- }
59
- expect404(url) {
60
- const requestOptions = { ...this.requestOptions, ...{
61
- path: url,
62
- } };
63
- return synthetics.executeHttpStep(`Verify 404 for ${url}`, requestOptions, validateStatusCodeAndContentType(404, mediatypes_1.MediaType.TEXT_PLAIN));
64
- }
65
- expect400(url) {
66
- const requestOptions = { ...this.requestOptions, ...{
67
- path: url,
68
- } };
69
- return synthetics.executeHttpStep(`Verify 400 for ${url}`, requestOptions, validateStatusCodeAndContentType(400, mediatypes_1.MediaType.TEXT_PLAIN));
70
- }
71
- expect403WithoutApiKey(url, mediaType) {
72
- if (!this.requestOptions.headers || !this.requestOptions.headers[exports.API_KEY_HEADER]) {
73
- console.error("No api key defined");
74
- }
75
- const requestOptions = { ...this.requestOptions, ...{
76
- path: url,
77
- headers: baseHeaders,
78
- } };
79
- return synthetics.executeHttpStep(`Verify 403 for ${url}`, requestOptions, validateStatusCodeAndContentType(403, mediaType || mediatypes_1.MediaType.APPLICATION_JSON));
80
- }
81
- done() {
82
- return "Canary successful";
83
- }
84
- }
85
- exports.UrlChecker = UrlChecker;
86
- async function getResponseBody(response) {
87
- const body = await getBodyFromResponse(response);
88
- if (response.headers[http2_1.constants.HTTP2_HEADER_CONTENT_ENCODING] === 'gzip') {
89
- try {
90
- return zlib.gunzipSync(body).toString();
91
- }
92
- catch (e) {
93
- console.info("error " + JSON.stringify(e));
94
- }
95
- }
96
- return body.toString();
97
- }
98
- function getBodyFromResponse(response) {
99
- return new Promise((resolve) => {
100
- const buffers = [];
101
- response.on('data', (data) => {
102
- buffers.push(data);
103
- });
104
- response.on('end', () => {
105
- resolve(Buffer.concat(buffers).toString());
106
- });
107
- });
108
- }
109
- /**
110
- * Returns function, that validates that the status code and content-type from response are the given values
111
- * @param statusCode
112
- * @param contentType
113
- */
114
- function validateStatusCodeAndContentType(statusCode, contentType) {
115
- return (res) => {
116
- return new Promise(resolve => {
117
- if (res.statusCode !== statusCode) {
118
- throw new Error(`${res.statusCode} ${res.statusMessage}`);
119
- }
120
- if (res.headers[http2_1.constants.HTTP2_HEADER_CONTENT_TYPE] !== contentType) {
121
- throw new Error('Wrong content-type ' + res.headers[http2_1.constants.HTTP2_HEADER_CONTENT_TYPE]);
122
- }
123
- resolve();
124
- });
125
- };
126
- }
127
- // DEPRECATED
128
- class ResponseChecker {
129
- constructor(contentType) {
130
- this.checkCors = true;
131
- this.contentType = contentType;
132
- }
133
- static forJson() {
134
- return new ResponseChecker(mediatypes_1.MediaType.APPLICATION_JSON);
135
- }
136
- static forCSV() {
137
- return new ResponseChecker(mediatypes_1.MediaType.TEXT_CSV);
138
- }
139
- static forGeojson() {
140
- return new ResponseChecker(mediatypes_1.MediaType.APPLICATION_GEOJSON);
141
- }
142
- static forJpeg() {
143
- return new ResponseChecker(mediatypes_1.MediaType.IMAGE_JPEG);
144
- }
145
- check() {
146
- return this.responseChecker(() => {
147
- // no need to do anything
148
- });
149
- }
150
- checkJson(fn) {
151
- return this.responseChecker((body, res) => {
152
- fn(JSON.parse(body), body, res);
153
- });
154
- }
155
- responseChecker(fn) {
156
- return async (res) => {
157
- if (!res.statusCode) {
158
- throw new Error('statusCode missing');
159
- }
160
- if (res.statusCode < 200 || res.statusCode > 299) {
161
- throw new Error(`${res.statusCode} ${res.statusMessage}`);
162
- }
163
- if (this.checkCors && !res.headers[http2_1.constants.HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN]) {
164
- throw new Error('CORS missing');
165
- }
166
- if (res.headers[http2_1.constants.HTTP2_HEADER_CONTENT_TYPE] !== this.contentType) {
167
- throw new Error('Wrong content-type ' + res.headers[http2_1.constants.HTTP2_HEADER_CONTENT_TYPE]);
168
- }
169
- const body = await getResponseBody(res);
170
- fn(body, res);
171
- };
172
- }
173
- }
174
- exports.ResponseChecker = ResponseChecker;
175
- class ContentChecker {
176
- static checkJson(fn) {
177
- return async (res) => {
178
- const body = await getResponseBody(res);
179
- fn(JSON.parse(body), body, res);
180
- };
181
- }
182
- static checkResponse(fn) {
183
- return async (res) => {
184
- const body = await getResponseBody(res);
185
- fn(body, res);
186
- };
187
- }
188
- }
189
- exports.ContentChecker = ContentChecker;
190
- class ContentTypeChecker {
191
- static checkContentType(contentType) {
192
- return (res) => {
193
- if (!res.statusCode) {
194
- throw new Error('statusCode missing');
195
- }
196
- if (res.statusCode < 200 || res.statusCode > 299) {
197
- throw new Error(`${res.statusCode} ${res.statusMessage}`);
198
- }
199
- if (!res.headers[http2_1.constants.HTTP2_HEADER_ACCESS_CONTROL_ALLOW_ORIGIN]) {
200
- throw new Error('CORS missing');
201
- }
202
- if (res.headers[http2_1.constants.HTTP2_HEADER_CONTENT_TYPE] !== contentType) {
203
- throw new Error('Wrong content-type ' + res.headers[http2_1.constants.HTTP2_HEADER_CONTENT_TYPE]);
204
- }
205
- };
206
- }
207
- }
208
- exports.ContentTypeChecker = ContentTypeChecker;
209
- class GeoJsonChecker {
210
- static validFeatureCollection(fn) {
211
- return ResponseChecker.forGeojson().checkJson((json) => {
212
- asserter_1.Asserter.assertEquals(json.type, 'FeatureCollection');
213
- asserter_1.Asserter.assertTrue((0, geometry_1.isValidGeoJson)(json));
214
- if (fn) {
215
- fn(json);
216
- }
217
- });
218
- }
219
- }
220
- exports.GeoJsonChecker = GeoJsonChecker;
221
- class HeaderChecker {
222
- static checkHeaderExists(headerName) {
223
- return (res) => {
224
- if (!res.headers[headerName]) {
225
- throw new Error('Missing header: ' + headerName);
226
- }
227
- };
228
- }
229
- static checkHeaderMissing(headerName) {
230
- return (res) => {
231
- if (res.headers[headerName]) {
232
- throw new Error('Header should not exist: ' + headerName);
233
- }
234
- };
235
- }
236
- }
237
- exports.HeaderChecker = HeaderChecker;
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLWNoZWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2luZnJhL2NhbmFyaWVzL3VybC1jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFnQztBQUVoQyxxREFBZ0Q7QUFFaEQsOERBQThEO0FBQzlELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN6Qyw2QkFBOEI7QUFDOUIsdURBQWlEO0FBQ2pELGlEQUE2RDtBQUU3RCxzREFBdUQ7QUFFMUMsUUFBQSxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBRTFDLE1BQU0sV0FBVyxHQUFHO0lBQ2hCLGtCQUFrQixFQUFHLDZCQUE2QjtJQUNsRCxpQkFBaUIsRUFBRyxNQUFNO0lBQzFCLFFBQVEsRUFBRSxLQUFLO0NBQ1EsQ0FBQztBQUs1QixNQUFhLFVBQVU7SUFHbkIsWUFBWSxRQUFnQixFQUFFLE1BQWU7UUFDekMsTUFBTSxPQUFPLEdBQUcsRUFBQyxHQUFHLFdBQVcsRUFBQyxDQUFDO1FBRWpDLElBQUksTUFBTSxFQUFFO1lBQ1IsT0FBTyxDQUFDLHNCQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDcEM7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ2xCLFFBQVE7WUFDUixNQUFNLEVBQUUsS0FBSztZQUNiLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLE9BQU87U0FDVixDQUFDO1FBRUYsVUFBVSxDQUFDLGdCQUFnQixFQUFFO2FBQ3hCLHFCQUFxQixFQUFFLENBQUM7UUFFN0IsVUFBVSxDQUFDLGdCQUFnQixFQUFFO2FBQ3hCLHNCQUFzQixDQUFDLEtBQUssQ0FBQzthQUM3Qix5QkFBeUIsQ0FBQyxLQUFLLENBQUM7YUFDaEMsdUJBQXVCLENBQUMsS0FBSyxDQUFDO2FBQzlCLDBCQUEwQixDQUFDLEtBQUssQ0FBQzthQUNqQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lB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LFVBQWtCO1FBQ3hDLE9BQU8sQ0FBQyxHQUFvQixFQUFFLEVBQUU7WUFDNUIsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixHQUFHLFVBQVUsQ0FBQyxDQUFDO2FBQzdEO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNKO0FBaEJELHNDQWdCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y29uc3RhbnRzfSBmcm9tIFwiaHR0cDJcIjtcbmltcG9ydCB7SW5jb21pbmdNZXNzYWdlLCBSZXF1ZXN0T3B0aW9uc30gZnJvbSBcImh0dHBcIjtcbmltcG9ydCB7QXNzZXJ0ZXJ9IGZyb20gXCIuLi8uLi8uLi90ZXN0L2Fzc2VydGVyXCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBzeW50aGV0aWNzID0gcmVxdWlyZSgnU3ludGhldGljcycpO1xuaW1wb3J0IHpsaWIgPSByZXF1aXJlKCd6bGliJyk7XG5pbXBvcnQge01lZGlhVHlwZX0gZnJvbSBcIi4uLy4uL3R5cGVzL21lZGlhdHlwZXNcIjtcbmltcG9ydCB7Z2V0QXBpS2V5RnJvbUFQSUdhdGV3YXl9IGZyb20gXCIuLi8uLi9ydW50aW1lL2FwaWtleVwiO1xuaW1wb3J0IHtGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSBcImdlb2pzb25cIjtcbmltcG9ydCB7aXNWYWxpZEdlb0pzb259IGZyb20gXCIuLi8uLi8uLi91dGlscy9nZW9tZXRyeVwiO1xuXG5leHBvcnQgY29uc3QgQVBJX0tFWV9IRUFERVIgPSBcIngtYXBpLWtleVwiO1xuXG5jb25zdCBiYXNlSGVhZGVycyA9IHtcbiAgICBcIkRpZ2l0cmFmZmljLVVzZXJcIiA6IFwiaW50ZXJuYWwtZGlnaXRyYWZmaWMtY2FuYXJ5XCIsXG4gICAgXCJBY2NlcHQtRW5jb2RpbmdcIiA6IFwiZ3ppcFwiLFxuICAgIFwiQWNjZXB0XCI6IFwiKi8qXCIsXG59IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbnR5cGUgQ2hlY2tlckZ1bmN0aW9uID0gKFJlczogSW5jb21pbmdNZXNzYWdlKSA9PiB2b2lkO1xudHlwZSBKc29uQ2hlY2tlckZ1bmN0aW9uPFQ+ID0gKGpzb246IFQsIGJvZHk6IHN0cmluZywgbWVzc2FnZTogSW5jb21pbmdNZXNzYWdlKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgVXJsQ2hlY2tlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3Rvcihob3N0bmFtZTogc3RyaW5nLCBhcGlLZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHsuLi5iYXNlSGVhZGVyc307XG5cbiAgICAgICAgaWYgKGFwaUtleSkge1xuICAgICAgICAgICAgaGVhZGVyc1tBUElfS0VZX0hFQURFUl0gPSBhcGlLZXk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgcHJvdG9jb2w6ICdodHRwczonLFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfTtcblxuICAgICAgICBzeW50aGV0aWNzLmdldENvbmZpZ3VyYXRpb24oKVxuICAgICAgICAgICAgLmRpc2FibGVSZXF1ZXN0TWV0cmljcygpO1xuXG4gICAgICAgIHN5bnRoZXRpY3MuZ2V0Q29uZmlndXJhdGlvbigpXG4gICAgICAgICAgICAud2l0aEluY2x1ZGVSZXF1ZXN0Qm9keShmYWxzZSlcbiAgICAgICAgICAgIC53aXRoSW5jbHVkZVJlcXVlc3RIZWFkZXJzKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhJbmNsdWRlUmVzcG9uc2VCb2R5KGZhbHNlKVxuICAgICAgICAgICAgLndpdGhJbmNsdWRlUmVzcG9uc2VIZWFkZXJzKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhGYWlsZWRDYW5hcnlNZXRyaWModHJ1ZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZShob3N0bmFtZTogc3RyaW5nLCBhcGlLZXlJZDogc3RyaW5nKTogUHJvbWlzZTxVcmxDaGVja2VyPiB7XG4gICAgICAgIHJldHVybiBnZXRBcGlLZXlGcm9tQVBJR2F0ZXdheShhcGlLZXlJZCkudGhlbihhcGlLZXkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVcmxDaGVja2VyKGhvc3RuYW1lLCBhcGlLZXkudmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlVjIoKTogUHJvbWlzZTxVcmxDaGVja2VyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZShwcm9jZXNzLmVudi5ob3N0bmFtZSBhcyBzdHJpbmcsIHByb2Nlc3MuZW52LmFwaUtleUlkIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgZXhwZWN0U3RhdHVzPFQ+KHN0YXR1c0NvZGU6IG51bWJlciwgdXJsOiBzdHJpbmcsIGNhbGxiYWNrOiBKc29uQ2hlY2tlckZ1bmN0aW9uPFQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gey4uLnRoaXMucmVxdWVzdE9wdGlvbnMsIC4uLntcbiAgICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgfX07XG5cbiAgICAgICAgcmV0dXJuIHN5bnRoZXRpY3MuZXhlY3V0ZUh0dHBTdGVwKGBWZXJpZnkgJHtzdGF0dXNDb2RlfSBmb3IgJHt1cmwucmVwbGFjZSgvYXV0aD0uKi8sICcnKX1gLFxuICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZXhwZWN0MjAwPFQ+KHVybDogc3RyaW5nLCAuLi5jYWxsYmFja3M6IEpzb25DaGVja2VyRnVuY3Rpb248VD5bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFzeW5jIChqc29uOiBULCBib2R5OiBzdHJpbmcsIHJlczogSW5jb21pbmdNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoY2FsbGJhY2tzLm1hcChjID0+IGMoanNvbiwgYm9keSwgcmVzKSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmV4cGVjdFN0YXR1cygyMDAsIHVybCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGV4cGVjdDQwNCh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHsuLi50aGlzLnJlcXVlc3RPcHRpb25zLCAuLi57XG4gICAgICAgICAgICBwYXRoOiB1cmwsXG4gICAgICAgIH19O1xuXG4gICAgICAgIHJldHVybiBzeW50aGV0aWNzLmV4ZWN1dGVIdHRwU3RlcChgVmVyaWZ5IDQwNCBmb3IgJHt1cmx9YCwgcmVxdWVzdE9wdGlvbnMsIHZhbGlkYXRlU3RhdHVzQ29kZUFuZENvbnRlbnRUeXBlKDQwNCwgTWVkaWFUeXBlLlRFWFRfUExBSU4pKTtcbiAgICB9XG5cbiAgICBleHBlY3Q0MDAodXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7Li4udGhpcy5yZXF1ZXN0T3B0aW9ucywgLi4ue1xuICAgICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICB9fTtcblxuICAgICAgICByZXR1cm4gc3ludGhldGljcy5leGVjdXRlSHR0cFN0ZXAoYFZlcmlmeSA0MDAgZm9yICR7dXJsfWAsIHJlcXVlc3RPcHRpb25zLCB2YWxpZGF0ZVN0YXR1c0NvZGVBbmRDb250ZW50VHlwZSg0MDAsIE1lZGlhVHlwZS5URVhUX1BMQUlOKSk7XG4gICAgfVxuXG4gICAgZXhwZWN0NDAzV2l0aG91dEFwaUtleSh1cmw6IHN0cmluZywgbWVkaWFUeXBlPzogTWVkaWFUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLnJlcXVlc3RPcHRpb25zLmhlYWRlcnNbQVBJX0tFWV9IRUFERVJdKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm8gYXBpIGtleSBkZWZpbmVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7Li4udGhpcy5yZXF1ZXN0T3B0aW9ucywgLi4ue1xuICAgICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICAgICAgaGVhZGVyczogYmFzZUhlYWRlcnMsXG4gICAgICAgIH19O1xuXG4gICAgICAgIHJldHVybiBzeW50aGV0aWNzLmV4ZWN1dGVIdHRwU3RlcChgVmVyaWZ5IDQwMyBmb3IgJHt1cmx9YCxcbiAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgdmFsaWRhdGVTdGF0dXNDb2RlQW5kQ29udGVudFR5cGUoNDAzLCBtZWRpYVR5cGUgfHwgTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pKTtcbiAgICB9XG5cbiAgICBkb25lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIkNhbmFyeSBzdWNjZXNzZnVsXCI7XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZUJvZHkocmVzcG9uc2U6IEluY29taW5nTWVzc2FnZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IGdldEJvZHlGcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xuXG4gICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNbY29uc3RhbnRzLkhUVFAyX0hFQURFUl9DT05URU5UX0VOQ09ESU5HXSA9PT0gJ2d6aXAnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gemxpYi5ndW56aXBTeW5jKGJvZHkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcImVycm9yIFwiICsgSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHkudG9TdHJpbmcoKTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm9keUZyb21SZXNwb25zZShyZXNwb25zZTogSW5jb21pbmdNZXNzYWdlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6ICgodmFsdWU6IHN0cmluZykgPT4gdm9pZCkpID0+IHtcbiAgICAgICAgY29uc3QgYnVmZmVyczogQnVmZmVyW10gPSBbXTtcblxuICAgICAgICByZXNwb25zZS5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChkYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzcG9uc2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChidWZmZXJzKS50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBmdW5jdGlvbiwgdGhhdCB2YWxpZGF0ZXMgdGhhdCB0aGUgc3RhdHVzIGNvZGUgYW5kIGNvbnRlbnQtdHlwZSBmcm9tIHJlc3BvbnNlIGFyZSB0aGUgZ2l2ZW4gdmFsdWVzXG4gKiBAcGFyYW0gc3RhdHVzQ29kZVxuICogQHBhcmFtIGNvbnRlbnRUeXBlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzQ29kZUFuZENvbnRlbnRUeXBlKHN0YXR1c0NvZGU6IG51bWJlciwgY29udGVudFR5cGU6IE1lZGlhVHlwZSk6IChSZXM6IEluY29taW5nTWVzc2FnZSkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIChyZXM6IEluY29taW5nTWVzc2FnZSkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IHN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVzLnN0YXR1c0NvZGV9ICR7cmVzLnN0YXR1c01lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXMuaGVhZGVyc1tjb25zdGFudHMuSFRUUDJfSEVBREVSX0NPTlRFTlRfVFlQRV0gIT09IGNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBjb250ZW50LXR5cGUgJyArIHJlcy5oZWFkZXJzW2NvbnN0YW50cy5IVFRQMl9IRUFERVJfQ09OVEVOVF9UWVBFXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cblxuLy8gREVQUkVDQVRFRFxuZXhwb3J0IGNsYXNzIFJlc3BvbnNlQ2hlY2tlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZW50VHlwZTtcbiAgICBwcml2YXRlIGNoZWNrQ29ycyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZW50VHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9ySnNvbigpOiBSZXNwb25zZUNoZWNrZXIge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlQ2hlY2tlcihNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTik7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvckNTVigpOiBSZXNwb25zZUNoZWNrZXIge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlQ2hlY2tlcihNZWRpYVR5cGUuVEVYVF9DU1YpO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JHZW9qc29uKCk6IFJlc3BvbnNlQ2hlY2tlciB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2VDaGVja2VyKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9HRU9KU09OKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9ySnBlZygpOiBSZXNwb25zZUNoZWNrZXIge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlQ2hlY2tlcihNZWRpYVR5cGUuSU1BR0VfSlBFRyk7XG4gICAgfVxuXG4gICAgY2hlY2soKTogQ2hlY2tlckZ1bmN0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VDaGVja2VyKCgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hlY2tKc29uPFQ+KGZuOiAoanNvbjogVCwgYm9keTogc3RyaW5nLCByZXM6IEluY29taW5nTWVzc2FnZSkgPT4gdm9pZCk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlQ2hlY2tlcigoYm9keTogc3RyaW5nLCByZXM6IEluY29taW5nTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgZm4oSlNPTi5wYXJzZShib2R5KSwgYm9keSwgcmVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzcG9uc2VDaGVja2VyKGZuOiAoYm9keTogc3RyaW5nLCByZXM6IEluY29taW5nTWVzc2FnZSkgPT4gdm9pZCk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiBhc3luYyAocmVzOiBJbmNvbWluZ01lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXR1c0NvZGUgbWlzc2luZycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPCAyMDAgfHwgcmVzLnN0YXR1c0NvZGUgPiAyOTkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVzLnN0YXR1c0NvZGV9ICR7cmVzLnN0YXR1c01lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrQ29ycyAmJiAhcmVzLmhlYWRlcnNbY29uc3RhbnRzLkhUVFAyX0hFQURFUl9BQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5dKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDT1JTIG1pc3NpbmcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcy5oZWFkZXJzW2NvbnN0YW50cy5IVFRQMl9IRUFERVJfQ09OVEVOVF9UWVBFXSAhPT0gdGhpcy5jb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgY29udGVudC10eXBlICcgKyByZXMuaGVhZGVyc1tjb25zdGFudHMuSFRUUDJfSEVBREVSX0NPTlRFTlRfVFlQRV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgZ2V0UmVzcG9uc2VCb2R5KHJlcyk7XG5cbiAgICAgICAgICAgIGZuKGJvZHksIHJlcyk7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29udGVudENoZWNrZXIge1xuICAgIHN0YXRpYyBjaGVja0pzb248VD4oZm46IChqc29uOiBULCBib2R5OiBzdHJpbmcsIHJlczogSW5jb21pbmdNZXNzYWdlKSA9PiB2b2lkKTogQ2hlY2tlckZ1bmN0aW9uIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIChyZXM6IEluY29taW5nTWVzc2FnZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGdldFJlc3BvbnNlQm9keShyZXMpO1xuXG4gICAgICAgICAgICBmbihKU09OLnBhcnNlKGJvZHkpLCBib2R5LCByZXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBjaGVja1Jlc3BvbnNlKGZuOiAoYm9keTogc3RyaW5nLCByZXM6IEluY29taW5nTWVzc2FnZSkgPT4gdm9pZCk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiBhc3luYyAocmVzOiBJbmNvbWluZ01lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBnZXRSZXNwb25zZUJvZHkocmVzKTtcblxuICAgICAgICAgICAgZm4oYm9keSwgcmVzKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb250ZW50VHlwZUNoZWNrZXIge1xuICAgIHN0YXRpYyBjaGVja0NvbnRlbnRUeXBlKGNvbnRlbnRUeXBlOiBNZWRpYVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIChyZXM6IEluY29taW5nTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXMuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhdHVzQ29kZSBtaXNzaW5nJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA8IDIwMCB8fCByZXMuc3RhdHVzQ29kZSA+IDI5OSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtyZXMuc3RhdHVzQ29kZX0gJHtyZXMuc3RhdHVzTWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFyZXMuaGVhZGVyc1tjb25zdGFudHMuSFRUUDJfSEVBREVSX0FDQ0VTU19DT05UUk9MX0FMTE9XX09SSUdJTl0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NPUlMgbWlzc2luZycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzLmhlYWRlcnNbY29uc3RhbnRzLkhUVFAyX0hFQURFUl9DT05URU5UX1RZUEVdICE9PSBjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgY29udGVudC10eXBlICcgKyByZXMuaGVhZGVyc1tjb25zdGFudHMuSFRUUDJfSEVBREVSX0NPTlRFTlRfVFlQRV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdlb0pzb25DaGVja2VyIHtcbiAgICBzdGF0aWMgdmFsaWRGZWF0dXJlQ29sbGVjdGlvbihmbj86IChqc29uOiBGZWF0dXJlQ29sbGVjdGlvbikgPT4gdm9pZCk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiBSZXNwb25zZUNoZWNrZXIuZm9yR2VvanNvbigpLmNoZWNrSnNvbigoanNvbjogRmVhdHVyZUNvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgICAgIEFzc2VydGVyLmFzc2VydEVxdWFscyhqc29uLnR5cGUsICdGZWF0dXJlQ29sbGVjdGlvbicpO1xuICAgICAgICAgICAgQXNzZXJ0ZXIuYXNzZXJ0VHJ1ZShpc1ZhbGlkR2VvSnNvbihqc29uKSk7XG5cbiAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgIGZuKGpzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIZWFkZXJDaGVja2VyIHtcbiAgICBzdGF0aWMgY2hlY2tIZWFkZXJFeGlzdHMoaGVhZGVyTmFtZTogc3RyaW5nKTogQ2hlY2tlckZ1bmN0aW9uIHtcbiAgICAgICAgcmV0dXJuIChyZXM6IEluY29taW5nTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXMuaGVhZGVyc1toZWFkZXJOYW1lXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBoZWFkZXI6ICcgKyBoZWFkZXJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY2hlY2tIZWFkZXJNaXNzaW5nKGhlYWRlck5hbWU6IHN0cmluZyk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiAocmVzOiBJbmNvbWluZ01lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMuaGVhZGVyc1toZWFkZXJOYW1lXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGVhZGVyIHNob3VsZCBub3QgZXhpc3Q6ICcgKyBoZWFkZXJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=
@@ -1,95 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DocumentationPart = exports.addTagsAndSummary = exports.addTags = exports.addDocumentation = exports.addQueryParameterDescription = void 0;
4
- const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
5
- // Documentation parts are objects that describe an API Gateway API or parts of an API
6
- // https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-documenting-api.html
7
- /**
8
- * Add description to a query parameter
9
- * @param name query parameter name
10
- * @param description query parameter description
11
- * @param resource REST API resource
12
- * @param stack CloudFormation stack
13
- *
14
- * @deprecated Use DigitrafficRestApi.documentResource
15
- */
16
- function addQueryParameterDescription(name, description, resource, stack) {
17
- new aws_apigateway_1.CfnDocumentationPart(stack, `${name}Documentation`, {
18
- restApiId: resource.api.restApiId,
19
- location: {
20
- type: 'QUERY_PARAMETER',
21
- name,
22
- path: resource.path,
23
- },
24
- properties: JSON.stringify({ description }),
25
- });
26
- }
27
- exports.addQueryParameterDescription = addQueryParameterDescription;
28
- /**
29
- * Add a documentation part to a method
30
- * @param methodDescription
31
- * @param documentationProperties
32
- * @param resource REST API resource
33
- * @param stack CloudFormation stack
34
- */
35
- function addDocumentation(methodDescription, documentationProperties, resource, stack) {
36
- new aws_apigateway_1.CfnDocumentationPart(stack, `${methodDescription}Documentation`, {
37
- restApiId: resource.api.restApiId,
38
- location: {
39
- type: 'METHOD',
40
- path: resource.path,
41
- },
42
- properties: JSON.stringify(documentationProperties),
43
- });
44
- }
45
- exports.addDocumentation = addDocumentation;
46
- /**
47
- * Adds OpenAPI tags to an API method
48
- * @param methodDescription Description of API method
49
- * @param tags OpenAPI tags
50
- * @param resource REST API resource
51
- * @param stack CloudFormation stack
52
- */
53
- function addTags(methodDescription, tags, resource, stack) {
54
- addDocumentation(methodDescription, { tags }, resource, stack);
55
- }
56
- exports.addTags = addTags;
57
- /**
58
- * Adds OpenAPI tags and a method summary to an API method
59
- *
60
- * @deprecated Use DigitrafficRestApi.documentResource
61
- *
62
- * @param methodDescription Description of API method
63
- * @param tags OpenAPI tags
64
- * @param summary OpenAPI summary
65
- * @param resource REST API resource
66
- * @param stack CloudFormation stack
67
- */
68
- function addTagsAndSummary(methodDescription, tags, summary, resource, stack) {
69
- addDocumentation(methodDescription, { tags, summary }, resource, stack);
70
- }
71
- exports.addTagsAndSummary = addTagsAndSummary;
72
- class DocumentationPart {
73
- constructor(parameterName, documentationProperties, type) {
74
- this.parameterName = parameterName;
75
- this.documentationProperties = documentationProperties;
76
- this.type = type;
77
- }
78
- deprecated(note) {
79
- // deprecated is not supported ATM: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-known-issues.html
80
- this.documentationProperties.deprecated = true;
81
- this.documentationProperties.summary += '. ' + note;
82
- return this;
83
- }
84
- static queryParameter(parameterName, description) {
85
- return new DocumentationPart(parameterName, { description }, "QUERY_PARAMETER");
86
- }
87
- static pathParameter(parameterName, description) {
88
- return new DocumentationPart(parameterName, { description }, "PATH_PARAMETER");
89
- }
90
- static method(tags, name, summary) {
91
- return new DocumentationPart(name, { tags, summary }, "METHOD");
92
- }
93
- }
94
- exports.DocumentationPart = DocumentationPart;
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvaW5mcmEvZG9jdW1lbnRhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrREFBMEU7QUFFMUUsc0ZBQXNGO0FBQ3RGLGdHQUFnRztBQUVoRzs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLDRCQUE0QixDQUFDLElBQVksRUFDckQsV0FBbUIsRUFDbkIsUUFBa0IsRUFDbEIsS0FBZ0I7SUFDaEIsSUFBSSxxQ0FBb0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLGVBQWUsRUFBRTtRQUNwRCxTQUFTLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTO1FBQ2pDLFFBQVEsRUFBRTtZQUNOLElBQUksRUFBRSxpQkFBaUI7WUFDdkIsSUFBSTtZQUNKLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtTQUN0QjtRQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsV0FBVyxFQUFDLENBQUM7S0FDNUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQWJELG9FQWFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsaUJBQXlCLEVBQ3RELHVCQUErQixFQUMvQixRQUFrQixFQUNsQixLQUFnQjtJQUNoQixJQUFJLHFDQUFvQixDQUFDLEtBQUssRUFBRSxHQUFHLGlCQUFpQixlQUFlLEVBQUU7UUFDakUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUztRQUNqQyxRQUFRLEVBQUU7WUFDTixJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtTQUN0QjtRQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDO0tBQ3RELENBQUMsQ0FBQztBQUNQLENBQUM7QUFaRCw0Q0FZQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxpQkFBeUIsRUFDN0MsSUFBYyxFQUNkLFFBQWtCLEVBQ2xCLEtBQWdCO0lBQ2hCLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLEVBQUMsSUFBSSxFQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFMRCwwQkFLQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FDN0IsaUJBQXlCLEVBQ3pCLElBQWMsRUFDZCxPQUFlLEVBQ2YsUUFBa0IsRUFDbEIsS0FBZ0I7SUFFaEIsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFFLENBQUM7QUFSRCw4Q0FRQztBQVNELE1BQWEsaUJBQWlCO0lBSzFCLFlBQW9CLGFBQXFCLEVBQUUsdUJBQWdELEVBQUUsSUFBWTtRQUNyRyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFZO1FBQ25CLDhIQUE4SDtRQUM5SCxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUMvQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxJQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFFbkQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsYUFBcUIsRUFBRSxXQUFtQjtRQUM1RCxPQUFPLElBQUksaUJBQWlCLENBQUMsYUFBYSxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxhQUFxQixFQUFFLFdBQW1CO1FBQzNELE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsRUFBQyxXQUFXLEVBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQWMsRUFBRSxJQUFZLEVBQUUsT0FBZTtRQUN2RCxPQUFPLElBQUksaUJBQWlCLENBQUMsSUFBSSxFQUFFLEVBQUMsSUFBSSxFQUFFLE9BQU8sRUFBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDSjtBQTlCRCw4Q0E4QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbnN0cnVjdH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7Q2ZuRG9jdW1lbnRhdGlvblBhcnQsIFJlc291cmNlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXlcIjtcblxuLy8gRG9jdW1lbnRhdGlvbiBwYXJ0cyBhcmUgb2JqZWN0cyB0aGF0IGRlc2NyaWJlIGFuIEFQSSBHYXRld2F5IEFQSSBvciBwYXJ0cyBvZiBhbiBBUElcbi8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9hcGktZ2F0ZXdheS1kb2N1bWVudGluZy1hcGkuaHRtbFxuXG4vKipcbiAqIEFkZCBkZXNjcmlwdGlvbiB0byBhIHF1ZXJ5IHBhcmFtZXRlclxuICogQHBhcmFtIG5hbWUgcXVlcnkgcGFyYW1ldGVyIG5hbWVcbiAqIEBwYXJhbSBkZXNjcmlwdGlvbiBxdWVyeSBwYXJhbWV0ZXIgZGVzY3JpcHRpb25cbiAqIEBwYXJhbSByZXNvdXJjZSBSRVNUIEFQSSByZXNvdXJjZVxuICogQHBhcmFtIHN0YWNrIENsb3VkRm9ybWF0aW9uIHN0YWNrXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERpZ2l0cmFmZmljUmVzdEFwaS5kb2N1bWVudFJlc291cmNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlckRlc2NyaXB0aW9uKG5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgIHJlc291cmNlOiBSZXNvdXJjZSxcbiAgICBzdGFjazogQ29uc3RydWN0KSB7XG4gICAgbmV3IENmbkRvY3VtZW50YXRpb25QYXJ0KHN0YWNrLCBgJHtuYW1lfURvY3VtZW50YXRpb25gLCB7XG4gICAgICAgIHJlc3RBcGlJZDogcmVzb3VyY2UuYXBpLnJlc3RBcGlJZCxcbiAgICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgICAgIHR5cGU6ICdRVUVSWV9QQVJBTUVURVInLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHBhdGg6IHJlc291cmNlLnBhdGgsXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IEpTT04uc3RyaW5naWZ5KHtkZXNjcmlwdGlvbn0pLFxuICAgIH0pO1xufVxuXG4vKipcbiAqIEFkZCBhIGRvY3VtZW50YXRpb24gcGFydCB0byBhIG1ldGhvZFxuICogQHBhcmFtIG1ldGhvZERlc2NyaXB0aW9uXG4gKiBAcGFyYW0gZG9jdW1lbnRhdGlvblByb3BlcnRpZXNcbiAqIEBwYXJhbSByZXNvdXJjZSBSRVNUIEFQSSByZXNvdXJjZVxuICogQHBhcmFtIHN0YWNrIENsb3VkRm9ybWF0aW9uIHN0YWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGREb2N1bWVudGF0aW9uKG1ldGhvZERlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgZG9jdW1lbnRhdGlvblByb3BlcnRpZXM6IG9iamVjdCxcbiAgICByZXNvdXJjZTogUmVzb3VyY2UsXG4gICAgc3RhY2s6IENvbnN0cnVjdCkge1xuICAgIG5ldyBDZm5Eb2N1bWVudGF0aW9uUGFydChzdGFjaywgYCR7bWV0aG9kRGVzY3JpcHRpb259RG9jdW1lbnRhdGlvbmAsIHtcbiAgICAgICAgcmVzdEFwaUlkOiByZXNvdXJjZS5hcGkucmVzdEFwaUlkLFxuICAgICAgICBsb2NhdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogJ01FVEhPRCcsXG4gICAgICAgICAgICBwYXRoOiByZXNvdXJjZS5wYXRoLFxuICAgICAgICB9LFxuICAgICAgICBwcm9wZXJ0aWVzOiBKU09OLnN0cmluZ2lmeShkb2N1bWVudGF0aW9uUHJvcGVydGllcyksXG4gICAgfSk7XG59XG5cbi8qKlxuICogQWRkcyBPcGVuQVBJIHRhZ3MgdG8gYW4gQVBJIG1ldGhvZFxuICogQHBhcmFtIG1ldGhvZERlc2NyaXB0aW9uIERlc2NyaXB0aW9uIG9mIEFQSSBtZXRob2RcbiAqIEBwYXJhbSB0YWdzIE9wZW5BUEkgdGFnc1xuICogQHBhcmFtIHJlc291cmNlIFJFU1QgQVBJIHJlc291cmNlXG4gKiBAcGFyYW0gc3RhY2sgQ2xvdWRGb3JtYXRpb24gc3RhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFRhZ3MobWV0aG9kRGVzY3JpcHRpb246IHN0cmluZyxcbiAgICB0YWdzOiBzdHJpbmdbXSxcbiAgICByZXNvdXJjZTogUmVzb3VyY2UsXG4gICAgc3RhY2s6IENvbnN0cnVjdCkge1xuICAgIGFkZERvY3VtZW50YXRpb24obWV0aG9kRGVzY3JpcHRpb24sIHt0YWdzfSwgcmVzb3VyY2UsIHN0YWNrKTtcbn1cblxuLyoqXG4gKiBBZGRzIE9wZW5BUEkgdGFncyBhbmQgYSBtZXRob2Qgc3VtbWFyeSB0byBhbiBBUEkgbWV0aG9kXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIERpZ2l0cmFmZmljUmVzdEFwaS5kb2N1bWVudFJlc291cmNlXG4gKlxuICogQHBhcmFtIG1ldGhvZERlc2NyaXB0aW9uIERlc2NyaXB0aW9uIG9mIEFQSSBtZXRob2RcbiAqIEBwYXJhbSB0YWdzIE9wZW5BUEkgdGFnc1xuICogQHBhcmFtIHN1bW1hcnkgT3BlbkFQSSBzdW1tYXJ5XG4gKiBAcGFyYW0gcmVzb3VyY2UgUkVTVCBBUEkgcmVzb3VyY2VcbiAqIEBwYXJhbSBzdGFjayBDbG91ZEZvcm1hdGlvbiBzdGFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVGFnc0FuZFN1bW1hcnkoXG4gICAgbWV0aG9kRGVzY3JpcHRpb246IHN0cmluZyxcbiAgICB0YWdzOiBzdHJpbmdbXSxcbiAgICBzdW1tYXJ5OiBzdHJpbmcsXG4gICAgcmVzb3VyY2U6IFJlc291cmNlLFxuICAgIHN0YWNrOiBDb25zdHJ1Y3QsXG4pIHtcbiAgICBhZGREb2N1bWVudGF0aW9uKG1ldGhvZERlc2NyaXB0aW9uLCB7dGFncywgc3VtbWFyeX0sIHJlc291cmNlLCBzdGFjayk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRhdGlvblByb3BlcnRpZXMge1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gICAgdGFncz86IHN0cmluZ1tdXG4gICAgc3VtbWFyeT86IHN0cmluZ1xuICAgIGRlcHJlY2F0ZWQ/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjbGFzcyBEb2N1bWVudGF0aW9uUGFydCB7XG4gICAgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcbiAgICByZWFkb25seSBkb2N1bWVudGF0aW9uUHJvcGVydGllczogRG9jdW1lbnRhdGlvblByb3BlcnRpZXM7XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKHBhcmFtZXRlck5hbWU6IHN0cmluZywgZG9jdW1lbnRhdGlvblByb3BlcnRpZXM6IERvY3VtZW50YXRpb25Qcm9wZXJ0aWVzLCB0eXBlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5wYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZTtcbiAgICAgICAgdGhpcy5kb2N1bWVudGF0aW9uUHJvcGVydGllcyA9IGRvY3VtZW50YXRpb25Qcm9wZXJ0aWVzO1xuICAgICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIH1cblxuICAgIGRlcHJlY2F0ZWQobm90ZTogc3RyaW5nKTogRG9jdW1lbnRhdGlvblBhcnQge1xuICAgICAgICAvLyBkZXByZWNhdGVkIGlzIG5vdCBzdXBwb3J0ZWQgQVRNOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvYXBpLWdhdGV3YXkta25vd24taXNzdWVzLmh0bWxcbiAgICAgICAgdGhpcy5kb2N1bWVudGF0aW9uUHJvcGVydGllcy5kZXByZWNhdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kb2N1bWVudGF0aW9uUHJvcGVydGllcy5zdW1tYXJ5Kz0gJy4gJyArIG5vdGU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgc3RhdGljIHF1ZXJ5UGFyYW1ldGVyKHBhcmFtZXRlck5hbWU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50YXRpb25QYXJ0KHBhcmFtZXRlck5hbWUsIHtkZXNjcmlwdGlvbn0sIFwiUVVFUllfUEFSQU1FVEVSXCIpO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXRoUGFyYW1ldGVyKHBhcmFtZXRlck5hbWU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IERvY3VtZW50YXRpb25QYXJ0KHBhcmFtZXRlck5hbWUsIHtkZXNjcmlwdGlvbn0sIFwiUEFUSF9QQVJBTUVURVJcIik7XG4gICAgfVxuXG4gICAgc3RhdGljIG1ldGhvZCh0YWdzOiBzdHJpbmdbXSwgbmFtZTogc3RyaW5nLCBzdW1tYXJ5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEb2N1bWVudGF0aW9uUGFydChuYW1lLCB7dGFncywgc3VtbWFyeX0sIFwiTUVUSE9EXCIpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,31 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Scheduler = void 0;
4
- const aws_events_1 = require("aws-cdk-lib/aws-events");
5
- const aws_cdk_lib_1 = require("aws-cdk-lib");
6
- const aws_events_targets_1 = require("aws-cdk-lib/aws-events-targets");
7
- class Scheduler extends aws_events_1.Rule {
8
- constructor(stack, ruleName, schedule, lambda) {
9
- super(stack, ruleName, { ruleName, schedule });
10
- if (lambda) {
11
- this.addTarget(new aws_events_targets_1.LambdaFunction(lambda));
12
- }
13
- }
14
- static everyMinute(stack, ruleName, lambda) {
15
- return Scheduler.every(stack, ruleName, aws_cdk_lib_1.Duration.minutes(1), lambda);
16
- }
17
- static everyMinutes(stack, ruleName, minutes, lambda) {
18
- return Scheduler.every(stack, ruleName, aws_cdk_lib_1.Duration.minutes(minutes), lambda);
19
- }
20
- static everyHour(stack, ruleName, lambda) {
21
- return Scheduler.every(stack, ruleName, aws_cdk_lib_1.Duration.hours(1), lambda);
22
- }
23
- static everyDay(stack, ruleName, lambda) {
24
- return Scheduler.every(stack, ruleName, aws_cdk_lib_1.Duration.days(1), lambda);
25
- }
26
- static every(stack, ruleName, duration, lambda) {
27
- return new Scheduler(stack, ruleName, aws_events_1.Schedule.rate(duration), lambda);
28
- }
29
- }
30
- exports.Scheduler = Scheduler;
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9pbmZyYS9zY2hlZHVsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQXNEO0FBQ3RELDZDQUFxQztBQUNyQyx1RUFBOEQ7QUFJOUQsTUFBYSxTQUFVLFNBQVEsaUJBQUk7SUFDL0IsWUFBWSxLQUFnQixFQUFFLFFBQWdCLEVBQUUsUUFBa0IsRUFBRSxNQUFpQjtRQUNqRixLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRS9DLElBQUksTUFBTSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLG1DQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQWdCLEVBQUUsUUFBZ0IsRUFBRSxNQUFpQjtRQUNwRSxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFnQixFQUFFLFFBQWdCLEVBQUUsT0FBZSxFQUFFLE1BQWlCO1FBQ3RGLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQWdCLEVBQUUsUUFBZ0IsRUFBRSxNQUFpQjtRQUNsRSxPQUFPLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxzQkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFnQixFQUFFLFFBQWdCLEVBQUUsTUFBaUI7UUFDakUsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsc0JBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBZ0IsRUFBRSxRQUFnQixFQUFFLFFBQWtCLEVBQUUsTUFBaUI7UUFDbEYsT0FBTyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLHFCQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNFLENBQUM7Q0FDSjtBQTVCRCw4QkE0QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1J1bGUsIFNjaGVkdWxlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHtEdXJhdGlvbn0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge0xhbWJkYUZ1bmN0aW9ufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzXCI7XG5pbXBvcnQge0Z1bmN0aW9ufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5leHBvcnQgY2xhc3MgU2NoZWR1bGVyIGV4dGVuZHMgUnVsZSB7XG4gICAgY29uc3RydWN0b3Ioc3RhY2s6IENvbnN0cnVjdCwgcnVsZU5hbWU6IHN0cmluZywgc2NoZWR1bGU6IFNjaGVkdWxlLCBsYW1iZGE/OiBGdW5jdGlvbikge1xuICAgICAgICBzdXBlcihzdGFjaywgcnVsZU5hbWUsIHsgcnVsZU5hbWUsIHNjaGVkdWxlIH0pO1xuXG4gICAgICAgIGlmIChsYW1iZGEpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkVGFyZ2V0KG5ldyBMYW1iZGFGdW5jdGlvbihsYW1iZGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBldmVyeU1pbnV0ZShzdGFjazogQ29uc3RydWN0LCBydWxlTmFtZTogc3RyaW5nLCBsYW1iZGE/OiBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gU2NoZWR1bGVyLmV2ZXJ5KHN0YWNrLCBydWxlTmFtZSwgRHVyYXRpb24ubWludXRlcygxKSwgbGFtYmRhKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZXZlcnlNaW51dGVzKHN0YWNrOiBDb25zdHJ1Y3QsIHJ1bGVOYW1lOiBzdHJpbmcsIG1pbnV0ZXM6IG51bWJlciwgbGFtYmRhPzogRnVuY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIFNjaGVkdWxlci5ldmVyeShzdGFjaywgcnVsZU5hbWUsIER1cmF0aW9uLm1pbnV0ZXMobWludXRlcyksIGxhbWJkYSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGV2ZXJ5SG91cihzdGFjazogQ29uc3RydWN0LCBydWxlTmFtZTogc3RyaW5nLCBsYW1iZGE/OiBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gU2NoZWR1bGVyLmV2ZXJ5KHN0YWNrLCBydWxlTmFtZSwgRHVyYXRpb24uaG91cnMoMSksIGxhbWJkYSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGV2ZXJ5RGF5KHN0YWNrOiBDb25zdHJ1Y3QsIHJ1bGVOYW1lOiBzdHJpbmcsIGxhbWJkYT86IEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiBTY2hlZHVsZXIuZXZlcnkoc3RhY2ssIHJ1bGVOYW1lLCBEdXJhdGlvbi5kYXlzKDEpLCBsYW1iZGEpO1xuICAgIH1cblxuICAgIHN0YXRpYyBldmVyeShzdGFjazogQ29uc3RydWN0LCBydWxlTmFtZTogc3RyaW5nLCBkdXJhdGlvbjogRHVyYXRpb24sIGxhbWJkYT86IEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2NoZWR1bGVyKHN0YWNrLCBydWxlTmFtZSwgU2NoZWR1bGUucmF0ZShkdXJhdGlvbiksIGxhbWJkYSk7XG4gICAgfVxufVxuIl19
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DigitrafficSecurityRule = void 0;
4
- const aws_events_1 = require("aws-cdk-lib/aws-events");
5
- const aws_events_targets_1 = require("aws-cdk-lib/aws-events-targets");
6
- /**
7
- * Automatic rule for Security Hub. Send notification to given topic if the following conditions apply:
8
- * * There is a finding with a status of NEW
9
- * * It has severity of HIGH or CRITICAL
10
- * * It is in a FAILED state
11
- */
12
- class DigitrafficSecurityRule extends aws_events_1.Rule {
13
- constructor(scope, topic) {
14
- const ruleName = 'SecurityHubRule';
15
- super(scope, ruleName, {
16
- ruleName,
17
- eventPattern: {
18
- source: ['aws.securityhub'],
19
- detailType: ["Security Hub Findings - Imported"],
20
- detail: {
21
- findings: {
22
- "Compliance": {
23
- "Status": ["FAILED"],
24
- },
25
- "Workflow": {
26
- "Status": ["NEW"],
27
- },
28
- "Severity": {
29
- "Label": ["HIGH", "CRITICAL"],
30
- },
31
- },
32
- },
33
- },
34
- });
35
- this.addTarget(new aws_events_targets_1.SnsTopic(topic));
36
- }
37
- }
38
- exports.DigitrafficSecurityRule = DigitrafficSecurityRule;
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktcnVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvaW5mcmEvc2VjdXJpdHktcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx1REFBNEM7QUFFNUMsdUVBQXdEO0FBRXhEOzs7OztHQUtHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSxpQkFBSTtJQUM3QyxZQUFZLEtBQWdCLEVBQUUsS0FBYTtRQUN2QyxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztRQUNuQyxLQUFLLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtZQUNuQixRQUFRO1lBQ1IsWUFBWSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixDQUFDO2dCQUMzQixVQUFVLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztnQkFDaEQsTUFBTSxFQUFFO29CQUNKLFFBQVEsRUFBRTt3QkFDTixZQUFZLEVBQUU7NEJBQ1YsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO3lCQUN2Qjt3QkFDRCxVQUFVLEVBQUU7NEJBQ1IsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDO3lCQUNwQjt3QkFDRCxVQUFVLEVBQUU7NEJBQ1IsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQzt5QkFDaEM7cUJBQ0o7aUJBQ0o7YUFDSjtTQUNKLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSw2QkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztDQUNKO0FBMUJELDBEQTBCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtSdWxlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHtJVG9waWN9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc25zXCI7XG5pbXBvcnQge1Nuc1RvcGljfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzXCI7XG5cbi8qKlxuICogQXV0b21hdGljIHJ1bGUgZm9yIFNlY3VyaXR5IEh1Yi4gIFNlbmQgbm90aWZpY2F0aW9uIHRvIGdpdmVuIHRvcGljIGlmIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcHBseTpcbiAqICogVGhlcmUgaXMgYSBmaW5kaW5nIHdpdGggYSBzdGF0dXMgb2YgTkVXXG4gKiAqIEl0IGhhcyBzZXZlcml0eSBvZiBISUdIIG9yIENSSVRJQ0FMXG4gKiAqIEl0IGlzIGluIGEgRkFJTEVEIHN0YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBEaWdpdHJhZmZpY1NlY3VyaXR5UnVsZSBleHRlbmRzIFJ1bGUge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIHRvcGljOiBJVG9waWMpIHtcbiAgICAgICAgY29uc3QgcnVsZU5hbWUgPSAnU2VjdXJpdHlIdWJSdWxlJztcbiAgICAgICAgc3VwZXIoc2NvcGUsIHJ1bGVOYW1lLCB7XG4gICAgICAgICAgICBydWxlTmFtZSxcbiAgICAgICAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogWydhd3Muc2VjdXJpdHlodWInXSxcbiAgICAgICAgICAgICAgICBkZXRhaWxUeXBlOiBbXCJTZWN1cml0eSBIdWIgRmluZGluZ3MgLSBJbXBvcnRlZFwiXSxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgZmluZGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiQ29tcGxpYW5jZVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTdGF0dXNcIjogW1wiRkFJTEVEXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiV29ya2Zsb3dcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiU3RhdHVzXCI6IFtcIk5FV1wiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlNldmVyaXR5XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkxhYmVsXCI6IFtcIkhJR0hcIiwgXCJDUklUSUNBTFwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWRkVGFyZ2V0KG5ldyBTbnNUb3BpYyh0b3BpYykpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,93 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.attachQueueToApiGatewayResource = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
6
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
- function attachQueueToApiGatewayResource(stack, queue, resource, requestValidator, resourceName, apiKeyRequired, requestModels) {
8
- // role for API Gateway
9
- const apiGwRole = new aws_iam_1.Role(stack, `${resourceName}APIGatewayToSQSRole`, {
10
- assumedBy: new aws_iam_1.ServicePrincipal('apigateway.amazonaws.com'),
11
- });
12
- // grants API Gateway the right to send SQS messages
13
- apiGwRole.addToPolicy(new aws_iam_1.PolicyStatement({
14
- resources: [
15
- queue.queueArn,
16
- ],
17
- actions: [
18
- 'sqs:SendMessage',
19
- ],
20
- }));
21
- // grants API Gateway the right write CloudWatch Logs
22
- apiGwRole.addToPolicy(new aws_iam_1.PolicyStatement({
23
- resources: [
24
- '*',
25
- ],
26
- actions: [
27
- 'logs:CreateLogGroup',
28
- 'logs:CreateLogStream',
29
- 'logs:DescribeLogGroups',
30
- 'logs:DescribeLogStreams',
31
- 'logs:PutLogEvents',
32
- 'logs:GetLogEvents',
33
- 'logs:FilterLogEvents',
34
- ],
35
- }));
36
- // create an integration between API Gateway and an SQS queue
37
- const fifoMessageGroupId = queue.fifo ? '&MessageGroupId=AlwaysSameFifoGroup' : '';
38
- const sqsIntegration = new aws_apigateway_1.AwsIntegration({
39
- service: 'sqs',
40
- integrationHttpMethod: 'POST',
41
- options: {
42
- passthroughBehavior: aws_apigateway_1.PassthroughBehavior.NEVER,
43
- credentialsRole: apiGwRole,
44
- requestParameters: {
45
- // SQS requires the Content-Type of the HTTP request to be application/x-www-form-urlencoded
46
- 'integration.request.header.Content-Type': "'application/x-www-form-urlencoded'",
47
- },
48
- requestTemplates: {
49
- // map the JSON request to a form parameter, FIFO needs also MessageGroupId
50
- // https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html
51
- 'application/json': `Action=SendMessage${fifoMessageGroupId}&MessageBody=$util.urlEncode($input.body)`,
52
- },
53
- // these are required by SQS
54
- integrationResponses: [
55
- {
56
- statusCode: '200',
57
- responseTemplates: {
58
- 'text/html': 'Success',
59
- },
60
- },
61
- {
62
- statusCode: '500',
63
- responseTemplates: {
64
- 'text/html': 'Error',
65
- },
66
- selectionPattern: '500',
67
- },
68
- ],
69
- },
70
- path: `${aws_cdk_lib_1.Aws.ACCOUNT_ID}/${queue.queueName}`,
71
- });
72
- resource.addMethod('POST', sqsIntegration, {
73
- requestValidator,
74
- apiKeyRequired,
75
- requestModels: requestModels ?? {},
76
- methodResponses: [
77
- {
78
- statusCode: '200',
79
- responseParameters: {
80
- 'method.response.header.Content-Type': true,
81
- },
82
- },
83
- {
84
- statusCode: '500',
85
- responseParameters: {
86
- 'method.response.header.Content-Type': true,
87
- },
88
- },
89
- ],
90
- });
91
- }
92
- exports.attachQueueToApiGatewayResource = attachQueueToApiGatewayResource;
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FzLWludGVncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9pbmZyYS9zcXMtaW50ZWdyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQWdDO0FBQ2hDLCtEQUEyRztBQUUzRyxpREFBNEU7QUFJNUUsU0FBZ0IsK0JBQStCLENBQzNDLEtBQWdCLEVBQ2hCLEtBQVksRUFDWixRQUFrQixFQUNsQixnQkFBa0MsRUFDbEMsWUFBb0IsRUFDcEIsY0FBdUIsRUFDdkIsYUFBeUM7SUFFekMsdUJBQXVCO0lBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksY0FBSSxDQUFDLEtBQUssRUFBRSxHQUFHLFlBQVkscUJBQXFCLEVBQUU7UUFDcEUsU0FBUyxFQUFFLElBQUksMEJBQWdCLENBQUMsMEJBQTBCLENBQUM7S0FDOUQsQ0FBQyxDQUFDO0lBQ0gsb0RBQW9EO0lBQ3BELFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSx5QkFBZSxDQUFDO1FBQ3RDLFNBQVMsRUFBRTtZQUNQLEtBQUssQ0FBQyxRQUFRO1NBQ2pCO1FBQ0QsT0FBTyxFQUFFO1lBQ0wsaUJBQWlCO1NBQ3BCO0tBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixxREFBcUQ7SUFDckQsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLHlCQUFlLENBQUM7UUFDdEMsU0FBUyxFQUFFO1lBQ1AsR0FBRztTQUNOO1FBQ0QsT0FBTyxFQUFFO1lBQ0wscUJBQXFCO1lBQ3JCLHNCQUFzQjtZQUN0Qix3QkFBd0I7WUFDeEIseUJBQXlCO1lBQ3pCLG1CQUFtQjtZQUNuQixtQkFBbUI7WUFDbkIsc0JBQXNCO1NBQ3pCO0tBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSiw2REFBNkQ7SUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ25GLE1BQU0sY0FBYyxHQUFHLElBQUksK0JBQWMsQ0FBQztRQUN0QyxPQUFPLEVBQUUsS0FBSztRQUNkLHFCQUFxQixFQUFFLE1BQU07UUFDN0IsT0FBTyxFQUFFO1lBQ0wsbUJBQW1CLEVBQUUsb0NBQW1CLENBQUMsS0FBSztZQUM5QyxlQUFlLEVBQUUsU0FBUztZQUMxQixpQkFBaUIsRUFBRTtnQkFDZiw0RkFBNEY7Z0JBQzVGLHlDQUF5QyxFQUFFLHFDQUFxQzthQUNuRjtZQUNELGdCQUFnQixFQUFFO2dCQUNkLDJFQUEyRTtnQkFDM0UsNkZBQTZGO2dCQUM3RixrQkFBa0IsRUFBRSxxQkFBcUIsa0JBQWtCLDJDQUEyQzthQUN6RztZQUNELDRCQUE0QjtZQUM1QixvQkFBb0IsRUFBRTtnQkFDbEI7b0JBQ0ksVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLGlCQUFpQixFQUFFO3dCQUNmLFdBQVcsRUFBRSxTQUFTO3FCQUN6QjtpQkFDSjtnQkFDRDtvQkFDSSxVQUFVLEVBQUUsS0FBSztvQkFDakIsaUJBQWlCLEVBQUU7d0JBQ2YsV0FBVyxFQUFFLE9BQU87cUJBQ3ZCO29CQUNELGdCQUFnQixFQUFFLEtBQUs7aUJBQzFCO2FBRUo7U0FFSjtRQUNELElBQUksRUFBRSxHQUFHLGlCQUFHLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7S0FDL0MsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFO1FBQ3ZDLGdCQUFnQjtRQUNoQixjQUFjO1FBQ2QsYUFBYSxFQUFFLGFBQWEsSUFBSSxFQUFFO1FBQ2xDLGVBQWUsRUFBRTtZQUNiO2dCQUNJLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixrQkFBa0IsRUFBRTtvQkFDaEIscUNBQXFDLEVBQUUsSUFBSTtpQkFDOUM7YUFDSjtZQUNEO2dCQUNJLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixrQkFBa0IsRUFBRTtvQkFDaEIscUNBQXFDLEVBQUUsSUFBSTtpQkFDOUM7YUFDSjtTQUNKO0tBQ0osQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQTlGRCwwRUE4RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0F3c30gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge0F3c0ludGVncmF0aW9uLCBQYXNzdGhyb3VnaEJlaGF2aW9yLCBSZXF1ZXN0VmFsaWRhdG9yLCBSZXNvdXJjZX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5XCI7XG5pbXBvcnQge1F1ZXVlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNxc1wiO1xuaW1wb3J0IHtQb2xpY3lTdGF0ZW1lbnQsIFJvbGUsIFNlcnZpY2VQcmluY2lwYWx9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge0lNb2RlbH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5L2xpYi9tb2RlbFwiO1xuaW1wb3J0IHtDb25zdHJ1Y3R9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hRdWV1ZVRvQXBpR2F0ZXdheVJlc291cmNlKFxuICAgIHN0YWNrOiBDb25zdHJ1Y3QsXG4gICAgcXVldWU6IFF1ZXVlLFxuICAgIHJlc291cmNlOiBSZXNvdXJjZSxcbiAgICByZXF1ZXN0VmFsaWRhdG9yOiBSZXF1ZXN0VmFsaWRhdG9yLFxuICAgIHJlc291cmNlTmFtZTogc3RyaW5nLFxuICAgIGFwaUtleVJlcXVpcmVkOiBib29sZWFuLFxuICAgIHJlcXVlc3RNb2RlbHM/OiB7W3BhcmFtOiBzdHJpbmddOiBJTW9kZWx9LFxuKSB7XG4gICAgLy8gcm9sZSBmb3IgQVBJIEdhdGV3YXlcbiAgICBjb25zdCBhcGlHd1JvbGUgPSBuZXcgUm9sZShzdGFjaywgYCR7cmVzb3VyY2VOYW1lfUFQSUdhdGV3YXlUb1NRU1JvbGVgLCB7XG4gICAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2FwaWdhdGV3YXkuYW1hem9uYXdzLmNvbScpLFxuICAgIH0pO1xuICAgIC8vIGdyYW50cyBBUEkgR2F0ZXdheSB0aGUgcmlnaHQgdG8gc2VuZCBTUVMgbWVzc2FnZXNcbiAgICBhcGlHd1JvbGUuYWRkVG9Qb2xpY3kobmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgcXVldWUucXVldWVBcm4sXG4gICAgICAgIF0sXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdzcXM6U2VuZE1lc3NhZ2UnLFxuICAgICAgICBdLFxuICAgIH0pKTtcbiAgICAvLyBncmFudHMgQVBJIEdhdGV3YXkgdGhlIHJpZ2h0IHdyaXRlIENsb3VkV2F0Y2ggTG9nc1xuICAgIGFwaUd3Um9sZS5hZGRUb1BvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAnKicsXG4gICAgICAgIF0sXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ0dyb3VwJyxcbiAgICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ0dyb3VwcycsXG4gICAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ1N0cmVhbXMnLFxuICAgICAgICAgICAgJ2xvZ3M6UHV0TG9nRXZlbnRzJyxcbiAgICAgICAgICAgICdsb2dzOkdldExvZ0V2ZW50cycsXG4gICAgICAgICAgICAnbG9nczpGaWx0ZXJMb2dFdmVudHMnLFxuICAgICAgICBdLFxuICAgIH0pKTtcbiAgICAvLyBjcmVhdGUgYW4gaW50ZWdyYXRpb24gYmV0d2VlbiBBUEkgR2F0ZXdheSBhbmQgYW4gU1FTIHF1ZXVlXG4gICAgY29uc3QgZmlmb01lc3NhZ2VHcm91cElkID0gcXVldWUuZmlmbyA/ICcmTWVzc2FnZUdyb3VwSWQ9QWx3YXlzU2FtZUZpZm9Hcm91cCcgOiAnJztcbiAgICBjb25zdCBzcXNJbnRlZ3JhdGlvbiA9IG5ldyBBd3NJbnRlZ3JhdGlvbih7XG4gICAgICAgIHNlcnZpY2U6ICdzcXMnLFxuICAgICAgICBpbnRlZ3JhdGlvbkh0dHBNZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgcGFzc3Rocm91Z2hCZWhhdmlvcjogUGFzc3Rocm91Z2hCZWhhdmlvci5ORVZFUixcbiAgICAgICAgICAgIGNyZWRlbnRpYWxzUm9sZTogYXBpR3dSb2xlLFxuICAgICAgICAgICAgcmVxdWVzdFBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAvLyBTUVMgcmVxdWlyZXMgdGhlIENvbnRlbnQtVHlwZSBvZiB0aGUgSFRUUCByZXF1ZXN0IHRvIGJlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFxuICAgICAgICAgICAgICAgICdpbnRlZ3JhdGlvbi5yZXF1ZXN0LmhlYWRlci5Db250ZW50LVR5cGUnOiBcIidhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWVzdFRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgIC8vIG1hcCB0aGUgSlNPTiByZXF1ZXN0IHRvIGEgZm9ybSBwYXJhbWV0ZXIsIEZJRk8gbmVlZHMgYWxzbyBNZXNzYWdlR3JvdXBJZFxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NTaW1wbGVRdWV1ZVNlcnZpY2UvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfU2VuZE1lc3NhZ2UuaHRtbFxuICAgICAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJzogYEFjdGlvbj1TZW5kTWVzc2FnZSR7Zmlmb01lc3NhZ2VHcm91cElkfSZNZXNzYWdlQm9keT0kdXRpbC51cmxFbmNvZGUoJGlucHV0LmJvZHkpYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB0aGVzZSBhcmUgcmVxdWlyZWQgYnkgU1FTXG4gICAgICAgICAgICBpbnRlZ3JhdGlvblJlc3BvbnNlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTogJzIwMCcsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAndGV4dC9odG1sJzogJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiAnNTAwJyxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0ZXh0L2h0bWwnOiAnRXJyb3InLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25QYXR0ZXJuOiAnNTAwJyxcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBdLFxuXG4gICAgICAgIH0sXG4gICAgICAgIHBhdGg6IGAke0F3cy5BQ0NPVU5UX0lEfS8ke3F1ZXVlLnF1ZXVlTmFtZX1gLFxuICAgIH0pO1xuICAgIHJlc291cmNlLmFkZE1ldGhvZCgnUE9TVCcsIHNxc0ludGVncmF0aW9uLCB7XG4gICAgICAgIHJlcXVlc3RWYWxpZGF0b3IsXG4gICAgICAgIGFwaUtleVJlcXVpcmVkLFxuICAgICAgICByZXF1ZXN0TW9kZWxzOiByZXF1ZXN0TW9kZWxzID8/IHt9LFxuICAgICAgICBtZXRob2RSZXNwb25zZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiAnMjAwJyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOiAnNTAwJyxcbiAgICAgICAgICAgICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICB9KTtcbn1cbiJdfQ==