@digitraffic/common 2022.10.25-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 (332) 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/{aws → dist/aws}/runtime/environment.d.ts +0 -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/{database → dist/database}/models.d.ts +0 -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 +0 -0
  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 +16 -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/infra/api/integration.js +0 -52
  268. package/aws/infra/api/response.js +0 -61
  269. package/aws/infra/api/responses.js +0 -79
  270. package/aws/infra/api/static-integration.js +0 -54
  271. package/aws/infra/canaries/canary-alarm.js +0 -26
  272. package/aws/infra/canaries/canary-parameters.js +0 -3
  273. package/aws/infra/canaries/canary-role.js +0 -46
  274. package/aws/infra/canaries/canary.js +0 -32
  275. package/aws/infra/canaries/database-canary.js +0 -55
  276. package/aws/infra/canaries/database-checker.js +0 -109
  277. package/aws/infra/canaries/url-canary.js +0 -46
  278. package/aws/infra/canaries/url-checker.js +0 -238
  279. package/aws/infra/documentation.js +0 -95
  280. package/aws/infra/scheduler.js +0 -31
  281. package/aws/infra/security-rule.js +0 -39
  282. package/aws/infra/sqs-integration.js +0 -93
  283. package/aws/infra/sqs-queue.js +0 -130
  284. package/aws/infra/stack/lambda-configs.js +0 -93
  285. package/aws/infra/stack/monitoredfunction.js +0 -135
  286. package/aws/infra/stack/rest_apis.js +0 -185
  287. package/aws/infra/stack/stack-checking-aspect.js +0 -174
  288. package/aws/infra/stack/stack.js +0 -60
  289. package/aws/infra/stack/subscription.js +0 -41
  290. package/aws/infra/usage-plans.js +0 -42
  291. package/aws/runtime/apikey.js +0 -13
  292. package/aws/runtime/digitraffic-integration-response.js +0 -26
  293. package/aws/runtime/environment.js +0 -12
  294. package/aws/runtime/messaging.js +0 -31
  295. package/aws/runtime/s3.js +0 -30
  296. package/aws/runtime/secrets/dbsecret.js +0 -96
  297. package/aws/runtime/secrets/proxy-holder.js +0 -26
  298. package/aws/runtime/secrets/rds-holder.js +0 -26
  299. package/aws/runtime/secrets/secret-holder.js +0 -73
  300. package/aws/runtime/secrets/secret.js +0 -43
  301. package/aws/types/errors.js +0 -9
  302. package/aws/types/lambda-response.js +0 -28
  303. package/aws/types/mediatypes.js +0 -15
  304. package/aws/types/model-with-reference.js +0 -3
  305. package/aws/types/proxytypes.js +0 -3
  306. package/aws/types/tags.js +0 -7
  307. package/database/cached.js +0 -32
  308. package/database/database.js +0 -62
  309. package/database/last-updated.js +0 -54
  310. package/database/models.js +0 -3
  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/input-error.js +0 -7
  322. package/types/language.js +0 -10
  323. package/types/traffictype.js +0 -13
  324. package/types/validator.js +0 -14
  325. package/utils/api-model.js +0 -129
  326. package/utils/base64.js +0 -21
  327. package/utils/date-utils.js +0 -34
  328. package/utils/geojson-types.js +0 -18
  329. package/utils/geometry.js +0 -140
  330. package/utils/retry.js +0 -50
  331. package/utils/slack.js +0 -25
  332. package/utils/utils.js +0 -64
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuYXJ5LXBhcmFtZXRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2luZnJhL2NhbmFyaWVzL2NhbmFyeS1wYXJhbWV0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NjaGVkdWxlfSBmcm9tIFwiQGF3cy1jZGsvYXdzLXN5bnRoZXRpY3MtYWxwaGFcIjtcblxuLyoqIE9wdGlvbmFsIGVudiBwYXJhbWV0ZXJzIGZvciBjYW5hcnkgKi9cbnR5cGUgQ2FuYXJ5RW52ID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuZXhwb3J0IHR5cGUgQ2FuYXJ5UGFyYW1ldGVycyA9IHtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc2NoZWR1bGU/OiBTY2hlZHVsZTtcbiAgICByZWFkb25seSBzZWNyZXQ/OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGFsYXJtPzoge1xuICAgICAgICByZWFkb25seSBhbGFybU5hbWU/OiBzdHJpbmc7XG4gICAgICAgIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgICByZWFkb25seSBldmFsdXRpb25QZXJpb2RzPzogbnVtYmVyO1xuICAgICAgICByZWFkb25seSB0aHJlc2hvbGQ/OiBudW1iZXI7XG4gICAgICAgIHJlYWRvbmx5IHRvcGljQXJuPzogc3RyaW5nO1xuICAgIH1cbiAgICByZWFkb25seSBjYW5hcnlFbnY/OiBDYW5hcnlFbnY7XG59XG4iXX0=
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DigitrafficCanaryRole = void 0;
4
- const aws_iam_1 = require("aws-cdk-lib/aws-iam");
5
- const BASE_POLICY_STATEMENT_PROPS = {
6
- actions: [
7
- "logs:CreateLogStream",
8
- "logs:PutLogEvents",
9
- "logs:CreateLogGroup",
10
- "logs:DescribeLogGroups",
11
- "logs:DescribeLogStreams",
12
- ],
13
- resources: ["*"],
14
- };
15
- const CLOUDWATCH_STATEMENT_PROPS = {
16
- actions: [
17
- "cloudwatch:PutMetricData",
18
- ],
19
- resources: ["*"],
20
- conditions: {
21
- "StringEquals": {
22
- "cloudwatch:namespace": "CloudWatchSynthetics",
23
- },
24
- },
25
- };
26
- class DigitrafficCanaryRole extends aws_iam_1.Role {
27
- constructor(stack, canaryName) {
28
- super(stack, 'canary-role-' + canaryName, {
29
- assumedBy: new aws_iam_1.ServicePrincipal("lambda.amazonaws.com"),
30
- managedPolicies: [
31
- aws_iam_1.ManagedPolicy.fromAwsManagedPolicyName("CloudWatchSyntheticsFullAccess"),
32
- ],
33
- });
34
- this.addToPolicy(new aws_iam_1.PolicyStatement(BASE_POLICY_STATEMENT_PROPS));
35
- this.addToPolicy(new aws_iam_1.PolicyStatement(CLOUDWATCH_STATEMENT_PROPS));
36
- }
37
- withDatabaseAccess() {
38
- // Won't work :(
39
- // this.addToPolicy(new PolicyStatement(DB_STATEMENT_PROPS));
40
- // Works
41
- this.addManagedPolicy(aws_iam_1.ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSLambdaVPCAccessExecutionRole"));
42
- return this;
43
- }
44
- }
45
- exports.DigitrafficCanaryRole = DigitrafficCanaryRole;
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuYXJ5LXJvbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2luZnJhL2NhbmFyaWVzL2NhbmFyeS1yb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUFpSDtBQUdqSCxNQUFNLDJCQUEyQixHQUF5QjtJQUN0RCxPQUFPLEVBQUU7UUFDTCxzQkFBc0I7UUFDdEIsbUJBQW1CO1FBQ25CLHFCQUFxQjtRQUNyQix3QkFBd0I7UUFDeEIseUJBQXlCO0tBQzVCO0lBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO0NBQ25CLENBQUM7QUFFRixNQUFNLDBCQUEwQixHQUF5QjtJQUNyRCxPQUFPLEVBQUU7UUFDTCwwQkFBMEI7S0FDN0I7SUFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7SUFDaEIsVUFBVSxFQUFFO1FBQ1IsY0FBYyxFQUFFO1lBQ1osc0JBQXNCLEVBQUUsc0JBQXNCO1NBQ2pEO0tBQ0o7Q0FDSixDQUFDO0FBRUYsTUFBYSxxQkFBc0IsU0FBUSxjQUFJO0lBQzNDLFlBQVksS0FBZ0IsRUFBRSxVQUFrQjtRQUM1QyxLQUFLLENBQUMsS0FBSyxFQUFFLGNBQWMsR0FBRyxVQUFVLEVBQUU7WUFDdEMsU0FBUyxFQUFFLElBQUksMEJBQWdCLENBQUMsc0JBQXNCLENBQUM7WUFDdkQsZUFBZSxFQUFFO2dCQUNiLHVCQUFhLENBQUMsd0JBQXdCLENBQUMsZ0NBQWdDLENBQUM7YUFDM0U7U0FDSixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUkseUJBQWUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLHlCQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxnQkFBZ0I7UUFDaEIsNkRBQTZEO1FBQzdELFFBQVE7UUFDUixJQUFJLENBQUMsZ0JBQWdCLENBQUMsdUJBQWEsQ0FBQyx3QkFBd0IsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDLENBQUM7UUFDOUcsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBcEJELHNEQW9CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWFuYWdlZFBvbGljeSwgUG9saWN5U3RhdGVtZW50LCBQb2xpY3lTdGF0ZW1lbnRQcm9wcywgUm9sZSwgU2VydmljZVByaW5jaXBhbH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG5jb25zdCBCQVNFX1BPTElDWV9TVEFURU1FTlRfUFJPUFM6IFBvbGljeVN0YXRlbWVudFByb3BzID0ge1xuICAgIGFjdGlvbnM6IFtcbiAgICAgICAgXCJsb2dzOkNyZWF0ZUxvZ1N0cmVhbVwiLFxuICAgICAgICBcImxvZ3M6UHV0TG9nRXZlbnRzXCIsXG4gICAgICAgIFwibG9nczpDcmVhdGVMb2dHcm91cFwiLFxuICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dHcm91cHNcIixcbiAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nU3RyZWFtc1wiLFxuICAgIF0sXG4gICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxufTtcblxuY29uc3QgQ0xPVURXQVRDSF9TVEFURU1FTlRfUFJPUFM6IFBvbGljeVN0YXRlbWVudFByb3BzID0ge1xuICAgIGFjdGlvbnM6IFtcbiAgICAgICAgXCJjbG91ZHdhdGNoOlB1dE1ldHJpY0RhdGFcIixcbiAgICBdLFxuICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICBjb25kaXRpb25zOiB7XG4gICAgICAgIFwiU3RyaW5nRXF1YWxzXCI6IHtcbiAgICAgICAgICAgIFwiY2xvdWR3YXRjaDpuYW1lc3BhY2VcIjogXCJDbG91ZFdhdGNoU3ludGhldGljc1wiLFxuICAgICAgICB9LFxuICAgIH0sXG59O1xuXG5leHBvcnQgY2xhc3MgRGlnaXRyYWZmaWNDYW5hcnlSb2xlIGV4dGVuZHMgUm9sZSB7XG4gICAgY29uc3RydWN0b3Ioc3RhY2s6IENvbnN0cnVjdCwgY2FuYXJ5TmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHN0YWNrLCAnY2FuYXJ5LXJvbGUtJyArIGNhbmFyeU5hbWUsIHtcbiAgICAgICAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJsYW1iZGEuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICAgICAgICAgIE1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFwiQ2xvdWRXYXRjaFN5bnRoZXRpY3NGdWxsQWNjZXNzXCIpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hZGRUb1BvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KEJBU0VfUE9MSUNZX1NUQVRFTUVOVF9QUk9QUykpO1xuICAgICAgICB0aGlzLmFkZFRvUG9saWN5KG5ldyBQb2xpY3lTdGF0ZW1lbnQoQ0xPVURXQVRDSF9TVEFURU1FTlRfUFJPUFMpKTtcbiAgICB9XG5cbiAgICB3aXRoRGF0YWJhc2VBY2Nlc3MoKTogRGlnaXRyYWZmaWNDYW5hcnlSb2xlIHtcbiAgICAgICAgLy8gV29uJ3Qgd29yayA6KFxuICAgICAgICAvLyB0aGlzLmFkZFRvUG9saWN5KG5ldyBQb2xpY3lTdGF0ZW1lbnQoREJfU1RBVEVNRU5UX1BST1BTKSk7XG4gICAgICAgIC8vIFdvcmtzXG4gICAgICAgIHRoaXMuYWRkTWFuYWdlZFBvbGljeShNYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFWUENBY2Nlc3NFeGVjdXRpb25Sb2xlXCIpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuIl19
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DigitrafficCanary = void 0;
4
- const aws_cdk_lib_1 = require("aws-cdk-lib");
5
- const aws_synthetics_alpha_1 = require("@aws-cdk/aws-synthetics-alpha");
6
- const canary_alarm_1 = require("./canary-alarm");
7
- class DigitrafficCanary extends aws_synthetics_alpha_1.Canary {
8
- constructor(scope, canaryName, role, params, environmentVariables) {
9
- super(scope, canaryName, {
10
- runtime: aws_synthetics_alpha_1.Runtime.SYNTHETICS_NODEJS_PUPPETEER_3_6,
11
- role,
12
- test: aws_synthetics_alpha_1.Test.custom({
13
- code: new aws_synthetics_alpha_1.AssetCode("dist", {
14
- exclude: ["lambda"],
15
- }),
16
- handler: params.handler,
17
- }),
18
- environmentVariables: {
19
- ...environmentVariables,
20
- ...params?.canaryEnv,
21
- },
22
- canaryName,
23
- schedule: params.schedule ?? aws_synthetics_alpha_1.Schedule.rate(aws_cdk_lib_1.Duration.minutes(15)),
24
- });
25
- this.artifactsBucket.grantWrite(role);
26
- if (params.alarm ?? true) {
27
- new canary_alarm_1.CanaryAlarm(scope, this, params);
28
- }
29
- }
30
- }
31
- exports.DigitrafficCanary = DigitrafficCanary;
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9pbmZyYS9jYW5hcmllcy9jYW5hcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVDO0FBQ3ZDLHdFQU11QztBQUV2QyxpREFBNkM7QUFLN0MsTUFBYSxpQkFBa0IsU0FBUSw2QkFBTTtJQUN6QyxZQUNJLEtBQWdCLEVBQ2hCLFVBQWtCLEVBQ2xCLElBQVUsRUFDVixNQUF3QixFQUN4QixvQkFBdUM7UUFFdkMsS0FBSyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7WUFDckIsT0FBTyxFQUFFLDhCQUFPLENBQUMsK0JBQStCO1lBQ2hELElBQUk7WUFDSixJQUFJLEVBQUUsMkJBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ2QsSUFBSSxFQUFFLElBQUksZ0NBQVMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3hCLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztpQkFDdEIsQ0FBQztnQkFDRixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87YUFDMUIsQ0FBQztZQUNGLG9CQUFvQixFQUFFO2dCQUNsQixHQUFHLG9CQUFvQjtnQkFDdkIsR0FBRyxNQUFNLEVBQUUsU0FBUzthQUN2QjtZQUNELFVBQVU7WUFDVixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsSUFBSSwrQkFBUSxDQUFDLElBQUksQ0FBQyxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNuRSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ3RCLElBQUksMEJBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3hDO0lBQ0wsQ0FBQztDQUNKO0FBL0JELDhDQStCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICAgIEFzc2V0Q29kZSxcbiAgICBDYW5hcnksXG4gICAgUnVudGltZSxcbiAgICBTY2hlZHVsZSxcbiAgICBUZXN0LFxufSBmcm9tIFwiQGF3cy1jZGsvYXdzLXN5bnRoZXRpY3MtYWxwaGFcIjtcbmltcG9ydCB7IFJvbGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ2FuYXJ5QWxhcm0gfSBmcm9tIFwiLi9jYW5hcnktYWxhcm1cIjtcbmltcG9ydCB7IENhbmFyeVBhcmFtZXRlcnMgfSBmcm9tIFwiLi9jYW5hcnktcGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IExhbWJkYUVudmlyb25tZW50IH0gZnJvbSBcIi4uL3N0YWNrL2xhbWJkYS1jb25maWdzXCI7XG5cbmV4cG9ydCBjbGFzcyBEaWdpdHJhZmZpY0NhbmFyeSBleHRlbmRzIENhbmFyeSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgICAgIGNhbmFyeU5hbWU6IHN0cmluZyxcbiAgICAgICAgcm9sZTogUm9sZSxcbiAgICAgICAgcGFyYW1zOiBDYW5hcnlQYXJhbWV0ZXJzLFxuICAgICAgICBlbnZpcm9ubWVudFZhcmlhYmxlczogTGFtYmRhRW52aXJvbm1lbnRcbiAgICApIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGNhbmFyeU5hbWUsIHtcbiAgICAgICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuU1lOVEhFVElDU19OT0RFSlNfUFVQUEVURUVSXzNfNixcbiAgICAgICAgICAgIHJvbGUsXG4gICAgICAgICAgICB0ZXN0OiBUZXN0LmN1c3RvbSh7XG4gICAgICAgICAgICAgICAgY29kZTogbmV3IEFzc2V0Q29kZShcImRpc3RcIiwge1xuICAgICAgICAgICAgICAgICAgICBleGNsdWRlOiBbXCJsYW1iZGFcIl0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogcGFyYW1zLmhhbmRsZXIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzOiB7XG4gICAgICAgICAgICAgICAgLi4uZW52aXJvbm1lbnRWYXJpYWJsZXMsXG4gICAgICAgICAgICAgICAgLi4ucGFyYW1zPy5jYW5hcnlFbnYsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FuYXJ5TmFtZSxcbiAgICAgICAgICAgIHNjaGVkdWxlOiBwYXJhbXMuc2NoZWR1bGUgPz8gU2NoZWR1bGUucmF0ZShEdXJhdGlvbi5taW51dGVzKDE1KSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYXJ0aWZhY3RzQnVja2V0LmdyYW50V3JpdGUocm9sZSk7XG5cbiAgICAgICAgaWYgKHBhcmFtcy5hbGFybSA/PyB0cnVlKSB7XG4gICAgICAgICAgICBuZXcgQ2FuYXJ5QWxhcm0oc2NvcGUsIHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DatabaseCanary = void 0;
4
- const aws_synthetics_1 = require("aws-cdk-lib/aws-synthetics");
5
- const aws_events_1 = require("aws-cdk-lib/aws-events");
6
- const aws_cdk_lib_1 = require("aws-cdk-lib");
7
- const canary_1 = require("./canary");
8
- class DatabaseCanary extends canary_1.DigitrafficCanary {
9
- constructor(stack, role, secret, params) {
10
- const canaryName = `${params.name}-db`;
11
- const environmentVariables = stack.createDefaultLambdaEnvironment(`Synthetics-${canaryName}`);
12
- // the handler code is defined at the actual project using this
13
- super(stack, canaryName, role, params, environmentVariables);
14
- this.artifactsBucket.grantWrite(this.role);
15
- secret.grantRead(this.role);
16
- // need to override vpc and security group, can't do this with cdk
17
- if (this.node.defaultChild instanceof aws_synthetics_1.CfnCanary) {
18
- const subnetIds = stack.vpc.privateSubnets.map(subnet => subnet.subnetId);
19
- this.node.defaultChild.vpcConfig = {
20
- vpcId: stack.vpc.vpcId,
21
- securityGroupIds: [stack.lambdaDbSg.securityGroupId],
22
- subnetIds: subnetIds,
23
- };
24
- }
25
- }
26
- static create(stack, role, params) {
27
- return new DatabaseCanary(stack, role, stack.secret, { ...{
28
- secret: stack.configuration.secretId,
29
- schedule: aws_events_1.Schedule.rate(aws_cdk_lib_1.Duration.hours(1)),
30
- handler: `${params.name}.handler`,
31
- }, ...params });
32
- }
33
- /**
34
- *
35
- * @param stack
36
- * @param role
37
- * @param name name of the typescipt file without -db -suffix. Max len is 10 char if @param canaryName is not given.
38
- * @param params
39
- * @param canaryName Optional name for canary if multiple canaries is made from same ${name}-db.ts canary file.
40
- */
41
- static createV2(stack, role, name, params = {}, canaryName = name) {
42
- return new DatabaseCanary(stack, role, stack.secret, { ...{
43
- secret: stack.configuration.secretId,
44
- schedule: aws_events_1.Schedule.rate(aws_cdk_lib_1.Duration.hours(1)),
45
- handler: `${name}-db.handler`,
46
- name: canaryName,
47
- alarm: {
48
- alarmName: (canaryName === name ? `${stack.configuration.shortName}-DB-Alarm` : `${canaryName}-DB-Alarm`),
49
- topicArn: stack.configuration.alarmTopicArn,
50
- },
51
- }, ...params });
52
- }
53
- }
54
- exports.DatabaseCanary = DatabaseCanary;
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtY2FuYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9pbmZyYS9jYW5hcmllcy9kYXRhYmFzZS1jYW5hcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0RBQXFEO0FBQ3JELHVEQUFnRDtBQUNoRCw2Q0FBcUM7QUFHckMscUNBQTJDO0FBRzNDLE1BQWEsY0FBZSxTQUFRLDBCQUFpQjtJQUNqRCxZQUFZLEtBQXVCLEVBQy9CLElBQVUsRUFDVixNQUFlLEVBQ2YsTUFBd0I7UUFDeEIsTUFBTSxVQUFVLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUM7UUFDdkMsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLENBQUMsOEJBQThCLENBQUMsY0FBYyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRTlGLCtEQUErRDtRQUMvRCxLQUFLLENBQ0QsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQ3ZCLE1BQU0sRUFBRSxvQkFBb0IsQ0FDL0IsQ0FBQztRQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QixrRUFBa0U7UUFDbEUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksWUFBWSwwQkFBUyxFQUFFO1lBQzdDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUUxRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUc7Z0JBQy9CLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUs7Z0JBQ3RCLGdCQUFnQixFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUM7Z0JBQ3BELFNBQVMsRUFBRSxTQUFTO2FBQ3ZCLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQXVCLEVBQ2pDLElBQVUsRUFDVixNQUF3QjtRQUN4QixPQUFPLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFDL0MsRUFBQyxHQUFHO2dCQUNBLE1BQU0sRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVE7Z0JBQ3BDLFFBQVEsRUFBRSxxQkFBUSxDQUFDLElBQUksQ0FBQyxzQkFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksVUFBVTthQUNwQyxFQUFFLEdBQUcsTUFBTSxFQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQ1gsS0FBdUIsRUFDdkIsSUFBVSxFQUNWLElBQVksRUFDWixTQUFvQyxFQUFFLEVBQ3RDLFVBQVUsR0FBQyxJQUFJO1FBRWYsT0FBTyxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQy9DLEVBQUMsR0FBRztnQkFDQSxNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRO2dCQUNwQyxRQUFRLEVBQUUscUJBQVEsQ0FBQyxJQUFJLENBQUMsc0JBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLE9BQU8sRUFBRSxHQUFHLElBQUksYUFBYTtnQkFDN0IsSUFBSSxFQUFHLFVBQVU7Z0JBQ2pCLEtBQUssRUFBRTtvQkFDSCxTQUFTLEVBQUUsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBUyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxXQUFXLENBQUM7b0JBQ3pHLFFBQVEsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLGFBQWE7aUJBQzlDO2FBQ0osRUFBRSxHQUFHLE1BQU0sRUFBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQztDQUNKO0FBbkVELHdDQW1FQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Um9sZX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7SVNlY3JldH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0IHtDZm5DYW5hcnl9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3ludGhldGljc1wiO1xuaW1wb3J0IHtTY2hlZHVsZX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCB7RHVyYXRpb259IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5pbXBvcnQge0NhbmFyeVBhcmFtZXRlcnN9IGZyb20gXCIuL2NhbmFyeS1wYXJhbWV0ZXJzXCI7XG5pbXBvcnQge0RpZ2l0cmFmZmljQ2FuYXJ5fSBmcm9tIFwiLi9jYW5hcnlcIjtcbmltcG9ydCB7RGlnaXRyYWZmaWNTdGFja30gZnJvbSBcIi4uL3N0YWNrL3N0YWNrXCI7XG5cbmV4cG9ydCBjbGFzcyBEYXRhYmFzZUNhbmFyeSBleHRlbmRzIERpZ2l0cmFmZmljQ2FuYXJ5IHtcbiAgICBjb25zdHJ1Y3RvcihzdGFjazogRGlnaXRyYWZmaWNTdGFjayxcbiAgICAgICAgcm9sZTogUm9sZSxcbiAgICAgICAgc2VjcmV0OiBJU2VjcmV0LFxuICAgICAgICBwYXJhbXM6IENhbmFyeVBhcmFtZXRlcnMpIHtcbiAgICAgICAgY29uc3QgY2FuYXJ5TmFtZSA9IGAke3BhcmFtcy5uYW1lfS1kYmA7XG4gICAgICAgIGNvbnN0IGVudmlyb25tZW50VmFyaWFibGVzID0gc3RhY2suY3JlYXRlRGVmYXVsdExhbWJkYUVudmlyb25tZW50KGBTeW50aGV0aWNzLSR7Y2FuYXJ5TmFtZX1gKTtcblxuICAgICAgICAvLyB0aGUgaGFuZGxlciBjb2RlIGlzIGRlZmluZWQgYXQgdGhlIGFjdHVhbCBwcm9qZWN0IHVzaW5nIHRoaXNcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBzdGFjaywgY2FuYXJ5TmFtZSwgcm9sZSxcbiAgICAgICAgICAgIHBhcmFtcywgZW52aXJvbm1lbnRWYXJpYWJsZXMsXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5hcnRpZmFjdHNCdWNrZXQuZ3JhbnRXcml0ZSh0aGlzLnJvbGUpO1xuICAgICAgICBzZWNyZXQuZ3JhbnRSZWFkKHRoaXMucm9sZSk7XG5cbiAgICAgICAgLy8gbmVlZCB0byBvdmVycmlkZSB2cGMgYW5kIHNlY3VyaXR5IGdyb3VwLCBjYW4ndCBkbyB0aGlzIHdpdGggY2RrXG4gICAgICAgIGlmICh0aGlzLm5vZGUuZGVmYXVsdENoaWxkIGluc3RhbmNlb2YgQ2ZuQ2FuYXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBzdWJuZXRJZHMgPSBzdGFjay52cGMucHJpdmF0ZVN1Ym5ldHMubWFwKHN1Ym5ldCA9PiBzdWJuZXQuc3VibmV0SWQpO1xuXG4gICAgICAgICAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkLnZwY0NvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICB2cGNJZDogc3RhY2sudnBjLnZwY0lkLFxuICAgICAgICAgICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IFtzdGFjay5sYW1iZGFEYlNnLnNlY3VyaXR5R3JvdXBJZF0sXG4gICAgICAgICAgICAgICAgc3VibmV0SWRzOiBzdWJuZXRJZHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZShzdGFjazogRGlnaXRyYWZmaWNTdGFjayxcbiAgICAgICAgcm9sZTogUm9sZSxcbiAgICAgICAgcGFyYW1zOiBDYW5hcnlQYXJhbWV0ZXJzKTogRGF0YWJhc2VDYW5hcnkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGFiYXNlQ2FuYXJ5KHN0YWNrLCByb2xlLCBzdGFjay5zZWNyZXQsXG4gICAgICAgICAgICB7Li4ue1xuICAgICAgICAgICAgICAgIHNlY3JldDogc3RhY2suY29uZmlndXJhdGlvbi5zZWNyZXRJZCxcbiAgICAgICAgICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUucmF0ZShEdXJhdGlvbi5ob3VycygxKSksXG4gICAgICAgICAgICAgICAgaGFuZGxlcjogYCR7cGFyYW1zLm5hbWV9LmhhbmRsZXJgLFxuICAgICAgICAgICAgfSwgLi4ucGFyYW1zfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhY2tcbiAgICAgKiBAcGFyYW0gcm9sZVxuICAgICAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIHR5cGVzY2lwdCBmaWxlIHdpdGhvdXQgLWRiIC1zdWZmaXguIE1heCBsZW4gaXMgMTAgY2hhciBpZiBAcGFyYW0gY2FuYXJ5TmFtZSBpcyBub3QgZ2l2ZW4uXG4gICAgICogQHBhcmFtIHBhcmFtc1xuICAgICAqIEBwYXJhbSBjYW5hcnlOYW1lIE9wdGlvbmFsIG5hbWUgZm9yIGNhbmFyeSBpZiBtdWx0aXBsZSBjYW5hcmllcyBpcyBtYWRlIGZyb20gc2FtZSAke25hbWV9LWRiLnRzIGNhbmFyeSBmaWxlLlxuICAgICAqL1xuICAgIHN0YXRpYyBjcmVhdGVWMihcbiAgICAgICAgc3RhY2s6IERpZ2l0cmFmZmljU3RhY2ssXG4gICAgICAgIHJvbGU6IFJvbGUsXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgcGFyYW1zOiBQYXJ0aWFsPENhbmFyeVBhcmFtZXRlcnM+ID0ge30sXG4gICAgICAgIGNhbmFyeU5hbWU9bmFtZSxcbiAgICApOiBEYXRhYmFzZUNhbmFyeSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2VDYW5hcnkoc3RhY2ssIHJvbGUsIHN0YWNrLnNlY3JldCxcbiAgICAgICAgICAgIHsuLi57XG4gICAgICAgICAgICAgICAgc2VjcmV0OiBzdGFjay5jb25maWd1cmF0aW9uLnNlY3JldElkLFxuICAgICAgICAgICAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5yYXRlKER1cmF0aW9uLmhvdXJzKDEpKSxcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBgJHtuYW1lfS1kYi5oYW5kbGVyYCxcbiAgICAgICAgICAgICAgICBuYW1lIDogY2FuYXJ5TmFtZSxcbiAgICAgICAgICAgICAgICBhbGFybToge1xuICAgICAgICAgICAgICAgICAgICBhbGFybU5hbWU6IChjYW5hcnlOYW1lID09PSBuYW1lID8gYCR7c3RhY2suY29uZmlndXJhdGlvbi5zaG9ydE5hbWV9LURCLUFsYXJtYCA6IGAke2NhbmFyeU5hbWV9LURCLUFsYXJtYCksXG4gICAgICAgICAgICAgICAgICAgIHRvcGljQXJuOiBzdGFjay5jb25maWd1cmF0aW9uLmFsYXJtVG9waWNBcm4sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sIC4uLnBhcmFtc30pO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,109 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DatabaseChecker = void 0;
4
- // eslint-disable-next-line @typescript-eslint/no-var-requires
5
- const database_1 = require("../../../database/database");
6
- const proxy_holder_1 = require("../../runtime/secrets/proxy-holder");
7
- const rds_holder_1 = require("../../runtime/secrets/rds-holder");
8
- // eslint-disable-next-line @typescript-eslint/no-var-requires
9
- const synthetics = require('Synthetics');
10
- class DatabaseCheck {
11
- constructor(name, sql) {
12
- this.name = name;
13
- this.sql = sql;
14
- this.failed = false;
15
- }
16
- }
17
- class BaseResponse {
18
- }
19
- class CountResponse extends BaseResponse {
20
- }
21
- class CountDatabaseCheck extends DatabaseCheck {
22
- constructor(name, sql, minCount, maxCount) {
23
- super(name, sql);
24
- if (minCount == null && maxCount == null) {
25
- throw new Error('no max or min given!');
26
- }
27
- this.minCount = minCount;
28
- this.maxCount = maxCount;
29
- }
30
- check(value) {
31
- if (!value) {
32
- this.failed = true;
33
- throw new Error('no return value');
34
- }
35
- else {
36
- if ('count' in value) {
37
- if (this.minCount && value.count < this.minCount) {
38
- this.failed = true;
39
- throw new Error(`count was ${value.count}, minimum is ${this.minCount}`);
40
- }
41
- if (this.maxCount && value.count > this.maxCount) {
42
- this.failed = true;
43
- throw new Error(`count was ${value.count}, max is ${this.maxCount}`);
44
- }
45
- }
46
- else {
47
- this.failed = true;
48
- console.info("received " + JSON.stringify(value));
49
- throw new Error('no count available');
50
- }
51
- }
52
- }
53
- }
54
- const stepConfig = {
55
- 'continueOnStepFailure': true,
56
- 'screenshotOnStepStart': false,
57
- 'screenshotOnStepSuccess': false,
58
- 'screenshotOnStepFailure': false,
59
- };
60
- class DatabaseChecker {
61
- constructor(credentialsFunction) {
62
- this.credentialsFunction = credentialsFunction;
63
- this.checks = [];
64
- synthetics.getConfiguration()
65
- .disableRequestMetrics();
66
- synthetics.getConfiguration()
67
- .withFailedCanaryMetric(true);
68
- }
69
- static createForProxy() {
70
- return new DatabaseChecker(() => new proxy_holder_1.ProxyHolder(process.env.SECRET_ID).setCredentials());
71
- }
72
- static createForRds() {
73
- return new DatabaseChecker(() => new rds_holder_1.RdsHolder(process.env.SECRET_ID).setCredentials());
74
- }
75
- one(name, sql) {
76
- this.checks.push(new CountDatabaseCheck(name, sql, 1, 1));
77
- return this;
78
- }
79
- empty(name, sql) {
80
- this.checks.push(new CountDatabaseCheck(name, sql, null, 0));
81
- return this;
82
- }
83
- notEmpty(name, sql) {
84
- this.checks.push(new CountDatabaseCheck(name, sql, 1, null));
85
- return this;
86
- }
87
- async expect() {
88
- if (!this.checks.length) {
89
- throw new Error('No checks');
90
- }
91
- await this.credentialsFunction();
92
- await (0, database_1.inDatabaseReadonly)(async (db) => {
93
- for (const check of this.checks) {
94
- console.info("canary checking sql " + check.sql);
95
- const value = await db.oneOrNone(check.sql);
96
- const checkFunction = () => {
97
- check.check(value);
98
- };
99
- synthetics.executeStep(check.name, checkFunction, stepConfig);
100
- }
101
- });
102
- if (this.checks.some(check => check.failed)) {
103
- throw new Error('Failed');
104
- }
105
- return 'OK';
106
- }
107
- }
108
- exports.DatabaseChecker = DatabaseChecker;
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtY2hlY2tlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvaW5mcmEvY2FuYXJpZXMvZGF0YWJhc2UtY2hlY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4REFBOEQ7QUFDOUQseURBQTBFO0FBQzFFLHFFQUErRDtBQUMvRCxpRUFBMkQ7QUFFM0QsOERBQThEO0FBQzlELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUV6QyxNQUFlLGFBQWE7SUFLeEIsWUFBc0IsSUFBWSxFQUFFLEdBQVc7UUFDM0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0NBR0o7QUFFRCxNQUFNLFlBQVk7Q0FBRztBQUVyQixNQUFNLGFBQWMsU0FBUSxZQUFZO0NBRXZDO0FBRUQsTUFBTSxrQkFBbUIsU0FBUSxhQUE0QjtJQUl6RCxZQUFZLElBQVksRUFDcEIsR0FBVyxFQUNYLFFBQXFCLEVBQ3JCLFFBQXFCO1FBQ3JCLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFakIsSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1NBQzNDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFvQjtRQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FB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LElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2hDO1FBRUQsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUEsNkJBQWtCLEVBQUMsS0FBSyxFQUFFLEVBQWMsRUFBRSxFQUFFO1lBQzlDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRWpELE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRTtvQkFDdkIsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDO2dCQUVGLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksRUFDN0IsYUFBYSxFQUNiLFVBQVUsQ0FBQyxDQUFDO2FBQ25CO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDN0I7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUE3RUQsMENBNkVDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbmltcG9ydCB7RFREYXRhYmFzZSwgaW5EYXRhYmFzZVJlYWRvbmx5fSBmcm9tIFwiLi4vLi4vLi4vZGF0YWJhc2UvZGF0YWJhc2VcIjtcbmltcG9ydCB7UHJveHlIb2xkZXJ9IGZyb20gXCIuLi8uLi9ydW50aW1lL3NlY3JldHMvcHJveHktaG9sZGVyXCI7XG5pbXBvcnQge1Jkc0hvbGRlcn0gZnJvbSBcIi4uLy4uL3J1bnRpbWUvc2VjcmV0cy9yZHMtaG9sZGVyXCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBzeW50aGV0aWNzID0gcmVxdWlyZSgnU3ludGhldGljcycpO1xuXG5hYnN0cmFjdCBjbGFzcyBEYXRhYmFzZUNoZWNrPFQ+IHtcbiAgICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgc3FsOiBzdHJpbmc7XG4gICAgZmFpbGVkOiBib29sZWFuO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZywgc3FsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5zcWwgPSBzcWw7XG4gICAgICAgIHRoaXMuZmFpbGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgY2hlY2sodmFsdWU6IFQpOiB2b2lkO1xufVxuXG5jbGFzcyBCYXNlUmVzcG9uc2Uge31cblxuY2xhc3MgQ291bnRSZXNwb25zZSBleHRlbmRzIEJhc2VSZXNwb25zZSB7XG4gICAgY291bnQ6IG51bWJlcjtcbn1cblxuY2xhc3MgQ291bnREYXRhYmFzZUNoZWNrIGV4dGVuZHMgRGF0YWJhc2VDaGVjazxDb3VudFJlc3BvbnNlPiB7XG4gICAgcmVhZG9ubHkgbWluQ291bnQ6IG51bWJlcnxudWxsO1xuICAgIHJlYWRvbmx5IG1heENvdW50OiBudW1iZXJ8bnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZyxcbiAgICAgICAgc3FsOiBzdHJpbmcsXG4gICAgICAgIG1pbkNvdW50OiBudW1iZXJ8bnVsbCxcbiAgICAgICAgbWF4Q291bnQ6IG51bWJlcnxudWxsKSB7XG4gICAgICAgIHN1cGVyKG5hbWUsIHNxbCk7XG5cbiAgICAgICAgaWYgKG1pbkNvdW50ID09IG51bGwgJiYgbWF4Q291bnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBtYXggb3IgbWluIGdpdmVuIScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5taW5Db3VudCA9IG1pbkNvdW50O1xuICAgICAgICB0aGlzLm1heENvdW50ID0gbWF4Q291bnQ7XG4gICAgfVxuXG4gICAgY2hlY2sodmFsdWU6IENvdW50UmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5mYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyByZXR1cm4gdmFsdWUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICgnY291bnQnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWluQ291bnQgJiYgdmFsdWUuY291bnQgPCB0aGlzLm1pbkNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb3VudCB3YXMgJHt2YWx1ZS5jb3VudH0sIG1pbmltdW0gaXMgJHt0aGlzLm1pbkNvdW50fWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXhDb3VudCAmJiB2YWx1ZS5jb3VudCA+IHRoaXMubWF4Q291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWlsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvdW50IHdhcyAke3ZhbHVlLmNvdW50fSwgbWF4IGlzICR7dGhpcy5tYXhDb3VudH1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcInJlY2VpdmVkIFwiICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcblxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbm8gY291bnQgYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IHN0ZXBDb25maWcgPSB7XG4gICAgJ2NvbnRpbnVlT25TdGVwRmFpbHVyZSc6IHRydWUsXG4gICAgJ3NjcmVlbnNob3RPblN0ZXBTdGFydCc6IGZhbHNlLFxuICAgICdzY3JlZW5zaG90T25TdGVwU3VjY2Vzcyc6IGZhbHNlLFxuICAgICdzY3JlZW5zaG90T25TdGVwRmFpbHVyZSc6IGZhbHNlLFxufTtcblxuZXhwb3J0IGNsYXNzIERhdGFiYXNlQ2hlY2tlciB7XG4gICAgY3JlZGVudGlhbHNGdW5jdGlvbjogKCgpID0+IFByb21pc2U8dm9pZD4pO1xuICAgIGNoZWNrczogRGF0YWJhc2VDaGVjazxCYXNlUmVzcG9uc2U+W107XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKGNyZWRlbnRpYWxzRnVuY3Rpb246ICgoKSA9PiBQcm9taXNlPHZvaWQ+KSkge1xuICAgICAgICB0aGlzLmNyZWRlbnRpYWxzRnVuY3Rpb24gPSBjcmVkZW50aWFsc0Z1bmN0aW9uO1xuICAgICAgICB0aGlzLmNoZWNrcyA9IFtdO1xuXG4gICAgICAgIHN5bnRoZXRpY3MuZ2V0Q29uZmlndXJhdGlvbigpXG4gICAgICAgICAgICAuZGlzYWJsZVJlcXVlc3RNZXRyaWNzKCk7XG5cbiAgICAgICAgc3ludGhldGljcy5nZXRDb25maWd1cmF0aW9uKClcbiAgICAgICAgICAgIC53aXRoRmFpbGVkQ2FuYXJ5TWV0cmljKHRydWUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVGb3JQcm94eSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRhYmFzZUNoZWNrZXIoKCkgPT4gbmV3IFByb3h5SG9sZGVyKHByb2Nlc3MuZW52LlNFQ1JFVF9JRCBhcyBzdHJpbmcpLnNldENyZWRlbnRpYWxzKCkpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVGb3JSZHMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0YWJhc2VDaGVja2VyKCgpID0+IG5ldyBSZHNIb2xkZXIocHJvY2Vzcy5lbnYuU0VDUkVUX0lEIGFzIHN0cmluZykuc2V0Q3JlZGVudGlhbHMoKSk7XG4gICAgfVxuXG4gICAgb25lKG5hbWU6IHN0cmluZywgc3FsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jaGVja3MucHVzaChuZXcgQ291bnREYXRhYmFzZUNoZWNrKG5hbWUsXG4gICAgICAgICAgICBzcWwsXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgMSkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGVtcHR5KG5hbWU6IHN0cmluZywgc3FsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jaGVja3MucHVzaChuZXcgQ291bnREYXRhYmFzZUNoZWNrKG5hbWUsXG4gICAgICAgICAgICBzcWwsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgMCkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG5vdEVtcHR5KG5hbWU6IHN0cmluZywgc3FsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jaGVja3MucHVzaChuZXcgQ291bnREYXRhYmFzZUNoZWNrKG5hbWUsXG4gICAgICAgICAgICBzcWwsXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgbnVsbCkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGFzeW5jIGV4cGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY2hlY2tzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmNyZWRlbnRpYWxzRnVuY3Rpb24oKTtcbiAgICAgICAgYXdhaXQgaW5EYXRhYmFzZVJlYWRvbmx5KGFzeW5jIChkYjogRFREYXRhYmFzZSkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLmNoZWNrcykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcImNhbmFyeSBjaGVja2luZyBzcWwgXCIgKyBjaGVjay5zcWwpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhd2FpdCBkYi5vbmVPck5vbmUoY2hlY2suc3FsKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja0Z1bmN0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjaGVjay5jaGVjayh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHN5bnRoZXRpY3MuZXhlY3V0ZVN0ZXAoY2hlY2submFtZSxcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tGdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgc3RlcENvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmNoZWNrcy5zb21lKGNoZWNrID0+IGNoZWNrLmZhaWxlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJ09LJztcbiAgICB9XG59XG4iXX0=
@@ -1,46 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UrlCanary = exports.ENV_SECRET = exports.ENV_HOSTNAME = exports.ENV_API_KEY = void 0;
4
- const canary_1 = require("./canary");
5
- exports.ENV_API_KEY = "apiKeyId";
6
- exports.ENV_HOSTNAME = "hostname";
7
- exports.ENV_SECRET = "secret";
8
- class UrlCanary extends canary_1.DigitrafficCanary {
9
- constructor(stack, role, params, secret) {
10
- const canaryName = `${params.name}-url`;
11
- const environmentVariables = {};
12
- environmentVariables[exports.ENV_HOSTNAME] = params.hostname;
13
- if (params.secret) {
14
- environmentVariables[exports.ENV_SECRET] = params.secret;
15
- }
16
- if (params.apiKeyId) {
17
- environmentVariables[exports.ENV_API_KEY] = params.apiKeyId;
18
- }
19
- if (secret) {
20
- secret.grantRead(role);
21
- }
22
- // the handler code is defined at the actual project using this
23
- super(stack, canaryName, role, params, environmentVariables);
24
- }
25
- static create(stack, role, publicApi, params) {
26
- return new UrlCanary(stack, role, { ...{
27
- handler: `${params.name}.handler`,
28
- hostname: publicApi.hostname(),
29
- apiKeyId: this.getApiKey(publicApi),
30
- }, ...params });
31
- }
32
- static getApiKey(publicApi) {
33
- const apiKeys = publicApi.apiKeyIds;
34
- if (apiKeys.length > 1) {
35
- console.info("rest api has more than one api key");
36
- }
37
- if (apiKeys.length === 0) {
38
- console.info("rest api has no api keys");
39
- return undefined;
40
- }
41
- // always use first api key
42
- return publicApi.apiKeyIds[0];
43
- }
44
- }
45
- exports.UrlCanary = UrlCanary;
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLWNhbmFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvaW5mcmEvY2FuYXJpZXMvdXJsLWNhbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxxQ0FBMkM7QUFNOUIsUUFBQSxXQUFXLEdBQUcsVUFBVSxDQUFDO0FBQ3pCLFFBQUEsWUFBWSxHQUFHLFVBQVUsQ0FBQztBQUMxQixRQUFBLFVBQVUsR0FBRyxRQUFRLENBQUM7QUFPbkMsTUFBYSxTQUFVLFNBQVEsMEJBQWlCO0lBQzVDLFlBQVksS0FBZ0IsRUFDeEIsSUFBVSxFQUNWLE1BQTJCLEVBQzNCLE1BQWdCO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDO1FBQ3hDLE1BQU0sb0JBQW9CLEdBQXNCLEVBQUUsQ0FBQztRQUNuRCxvQkFBb0IsQ0FBQyxvQkFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUVyRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDZixvQkFBb0IsQ0FBQyxrQkFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUNwRDtRQUVELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNqQixvQkFBb0IsQ0FBQyxtQkFBVyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztTQUN2RDtRQUVELElBQUksTUFBTSxFQUFFO1lBQ1IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQjtRQUVELCtEQUErRDtRQUMvRCxLQUFLLENBQ0QsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixDQUN4RCxDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBdUIsRUFDakMsSUFBVSxFQUNWLFNBQTZCLEVBQzdCLE1BQW9DO1FBQ3BDLE9BQU8sSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFDLEdBQUc7Z0JBQ2xDLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLFVBQVU7Z0JBQ2pDLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFO2dCQUM5QixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7YUFDdEMsRUFBRSxHQUFHLE1BQU0sRUFBd0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQTZCO1FBQzFDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFFcEMsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDdEQ7UUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUN6QyxPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUVELDJCQUEyQjtRQUMzQixPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNKO0FBckRELDhCQXFEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtDYW5hcnlQYXJhbWV0ZXJzfSBmcm9tIFwiLi9jYW5hcnktcGFyYW1ldGVyc1wiO1xuaW1wb3J0IHtSb2xlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHtEaWdpdHJhZmZpY0NhbmFyeX0gZnJvbSBcIi4vY2FuYXJ5XCI7XG5pbXBvcnQge0lTZWNyZXR9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCB7RGlnaXRyYWZmaWNTdGFja30gZnJvbSBcIi4uL3N0YWNrL3N0YWNrXCI7XG5pbXBvcnQge0xhbWJkYUVudmlyb25tZW50fSBmcm9tIFwiLi4vc3RhY2svbGFtYmRhLWNvbmZpZ3NcIjtcbmltcG9ydCB7RGlnaXRyYWZmaWNSZXN0QXBpfSBmcm9tIFwiLi4vc3RhY2svcmVzdF9hcGlzXCI7XG5cbmV4cG9ydCBjb25zdCBFTlZfQVBJX0tFWSA9IFwiYXBpS2V5SWRcIjtcbmV4cG9ydCBjb25zdCBFTlZfSE9TVE5BTUUgPSBcImhvc3RuYW1lXCI7XG5leHBvcnQgY29uc3QgRU5WX1NFQ1JFVCA9IFwic2VjcmV0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXJsQ2FuYXJ5UGFyYW1ldGVycyBleHRlbmRzIENhbmFyeVBhcmFtZXRlcnMge1xuICAgIHJlYWRvbmx5IGhvc3RuYW1lOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgYXBpS2V5SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBVcmxDYW5hcnkgZXh0ZW5kcyBEaWdpdHJhZmZpY0NhbmFyeSB7XG4gICAgY29uc3RydWN0b3Ioc3RhY2s6IENvbnN0cnVjdCxcbiAgICAgICAgcm9sZTogUm9sZSxcbiAgICAgICAgcGFyYW1zOiBVcmxDYW5hcnlQYXJhbWV0ZXJzLFxuICAgICAgICBzZWNyZXQ/OiBJU2VjcmV0KSB7XG4gICAgICAgIGNvbnN0IGNhbmFyeU5hbWUgPSBgJHtwYXJhbXMubmFtZX0tdXJsYDtcbiAgICAgICAgY29uc3QgZW52aXJvbm1lbnRWYXJpYWJsZXM6IExhbWJkYUVudmlyb25tZW50ID0ge307XG4gICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzW0VOVl9IT1NUTkFNRV0gPSBwYXJhbXMuaG9zdG5hbWU7XG5cbiAgICAgICAgaWYgKHBhcmFtcy5zZWNyZXQpIHtcbiAgICAgICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzW0VOVl9TRUNSRVRdID0gcGFyYW1zLnNlY3JldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJhbXMuYXBpS2V5SWQpIHtcbiAgICAgICAgICAgIGVudmlyb25tZW50VmFyaWFibGVzW0VOVl9BUElfS0VZXSA9IHBhcmFtcy5hcGlLZXlJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWNyZXQpIHtcbiAgICAgICAgICAgIHNlY3JldC5ncmFudFJlYWQocm9sZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGUgaGFuZGxlciBjb2RlIGlzIGRlZmluZWQgYXQgdGhlIGFjdHVhbCBwcm9qZWN0IHVzaW5nIHRoaXNcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBzdGFjaywgY2FuYXJ5TmFtZSwgcm9sZSwgcGFyYW1zLCBlbnZpcm9ubWVudFZhcmlhYmxlcyxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlKHN0YWNrOiBEaWdpdHJhZmZpY1N0YWNrLFxuICAgICAgICByb2xlOiBSb2xlLFxuICAgICAgICBwdWJsaWNBcGk6IERpZ2l0cmFmZmljUmVzdEFwaSxcbiAgICAgICAgcGFyYW1zOiBQYXJ0aWFsPFVybENhbmFyeVBhcmFtZXRlcnM+KTogVXJsQ2FuYXJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVcmxDYW5hcnkoc3RhY2ssIHJvbGUsIHsuLi57XG4gICAgICAgICAgICBoYW5kbGVyOiBgJHtwYXJhbXMubmFtZX0uaGFuZGxlcmAsXG4gICAgICAgICAgICBob3N0bmFtZTogcHVibGljQXBpLmhvc3RuYW1lKCksXG4gICAgICAgICAgICBhcGlLZXlJZDogdGhpcy5nZXRBcGlLZXkocHVibGljQXBpKSxcbiAgICAgICAgfSwgLi4ucGFyYW1zfSBhcyBVcmxDYW5hcnlQYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0QXBpS2V5KHB1YmxpY0FwaTogRGlnaXRyYWZmaWNSZXN0QXBpKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgY29uc3QgYXBpS2V5cyA9IHB1YmxpY0FwaS5hcGlLZXlJZHM7XG5cbiAgICAgICAgaWYgKGFwaUtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKFwicmVzdCBhcGkgaGFzIG1vcmUgdGhhbiBvbmUgYXBpIGtleVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhcGlLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKFwicmVzdCBhcGkgaGFzIG5vIGFwaSBrZXlzXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFsd2F5cyB1c2UgZmlyc3QgYXBpIGtleVxuICAgICAgICByZXR1cm4gcHVibGljQXBpLmFwaUtleUlkc1swXTtcbiAgICB9XG59XG4iXX0=
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLWNoZWNrZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2luZnJhL2NhbmFyaWVzL3VybC1jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlDQUFnQztBQUVoQyxxREFBZ0Q7QUFFaEQsOERBQThEO0FBQzlELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN6Qyw2QkFBOEI7QUFDOUIsdURBQWlEO0FBQ2pELGlEQUE2RDtBQUU3RCxzREFBdUQ7QUFFMUMsUUFBQSxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBRTFDLE1BQU0sV0FBVyxHQUFHO0lBQ2hCLGtCQUFrQixFQUFHLDZCQUE2QjtJQUNsRCxpQkFBaUIsRUFBRyxNQUFNO0lBQzFCLFFBQVEsRUFBRSxLQUFLO0NBQ1EsQ0FBQztBQUs1QixNQUFhLFVBQVU7SUFHbkIsWUFBWSxRQUFnQixFQUFFLE1BQWU7UUFDekMsTUFBTSxPQUFPLEdBQUcsRUFBQyxHQUFHLFdBQVcsRUFBQyxDQUFDO1FBRWpDLElBQUksTUFBTSxFQUFFO1lBQ1IsT0FBTyxDQUFDLHNCQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7U0FDcEM7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ2xCLFFBQVE7WUFDUixNQUFNLEVBQUUsS0FBSztZQUNiLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLE9BQU87U0FDVixDQUFDO1FBRUYsVUFBVSxDQUFDLGdCQUFnQixFQUFFO2FBQ3hCLHFCQUFxQixFQUFFLENBQUM7UUFFN0IsVUFBVSxDQUFDLGdCQUFnQixFQUFFO2FBQ3hCLHNCQUFzQixDQUFDLEtBQUssQ0FBQzthQUM3Qix5QkFBeUIsQ0FBQyxLQUFLLENBQUM7YUFDaEMsdUJBQXVCLENBQUMsS0FBSyxDQUFDO2FBQzlCLDBCQUEwQixDQUFDLEtBQUssQ0FBQzthQUNqQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFnQixFQUFFLFFBQWdCO1FBQzVDLE9BQU8sSUFBQSxnQ0FBdUIsRUFBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbkQsT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRO1FBQ1gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQWtCLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsWUFBWSxDQUFJLFVBQWtCLEVBQUUsR0FBVyxFQUFFLFFBQWdDO1FBQzdFLE1BQU0sY0FBYyxHQUFHLEVBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUc7Z0JBQy9DLElBQUksRUFBRSxHQUFHO2FBQ1osRUFBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUMsZUFBZSxDQUFDLFVBQVUsVUFBVSxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQ3RGLGNBQWMsRUFDZCxRQUFRLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsU0FBUyxDQUFJLEdBQVcsRUFBRSxHQUFHLFNBQW1DO1FBQzVELE1BQU0sUUFBUSxHQUFHLEtBQUssRUFBRSxJQUFPLEVBQUUsSUFBWSxFQUFFLEdBQW9CLEVBQUUsRUFBRTtZQUNuRSxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsU0FBUyxDQUFDLEdBQVc7UUFDakIsTUFBTSxjQUFjLEdBQUcsRUFBQyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRztnQkFDL0MsSUFBSSxFQUFFLEdBQUc7YUFDWixFQUFDLENBQUM7UUFFSCxPQUFPLFVBQVUsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxFQUFFLGNBQWMsRUFBRSxnQ0FBZ0MsQ0FBQyxHQUFHLEVBQUUsc0JBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzVJLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBVztRQUNqQixNQUFNLGNBQWMsR0FBRyxFQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHO2dCQUMvQyxJQUFJLEVBQUUsR0FBRzthQUNaLEVBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLEVBQUUsY0FBYyxFQUFFLGdDQUFnQyxDQUFDLEdBQUcsRUFBRSxzQkFBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDNUksQ0FBQztJQUVELHNCQUFzQixDQUFDLEdBQVcsRUFBRSxTQUFxQjtRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxzQkFBYyxDQUFDLEVBQUU7WUFDOUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3ZDO1FBRUQsTUFBTSxjQUFjLEdBQUcsRUFBQyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRztnQkFDL0MsSUFBSSxFQUFFLEdBQUc7Z0JBQ1QsT0FBTyxFQUFFLFdBQVc7YUFDdkIsRUFBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUMsZUFBZSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsRUFDckQsY0FBYyxFQUNkLGdDQUFnQyxDQUFDLEdBQUcsRUFBRSxTQUFTLElBQUksc0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQUVELElBQUk7UUFDQSxPQUFPLG1CQUFtQixDQUFDO0lBQy9CLENBQUM7Q0FDSjtBQTFGRCxnQ0EwRkM7QUFFRCxLQUFLLFVBQVUsZUFBZSxDQUFDLFFBQXlCO0lBQ3BELE1BQU0sSUFBSSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFakQsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFTLENBQUMsNkJBQTZCLENBQUMsS0FBSyxNQUFNLEVBQUU7UUFDdEUsSUFBSTtZQUNBLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMzQztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlDO0tBQ0o7SUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMzQixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxRQUF5QjtJQUNsRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBa0MsRUFBRSxFQUFFO1FBQ3RELE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQztRQUU3QixRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQVksRUFBRSxFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDcEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGdDQUFnQyxDQUFDLFVBQWtCLEVBQUUsV0FBc0I7SUFDaEYsT0FBTyxDQUFDLEdBQW9CLEVBQUUsRUFBRTtRQUM1QixPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3pCLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7Z0JBQy9CLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO2FBQzdEO1lBRUQsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFTLENBQUMseUJBQXlCLENBQUMsS0FBSyxXQUFXLEVBQUU7Z0JBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxpQkFBUyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQzthQUM3RjtZQUVELE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsYUFBYTtBQUNiLE1BQWEsZUFBZTtJQUl4QixZQUFZLFdBQW1CO1FBRnZCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFHckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPO1FBQ1YsT0FBTyxJQUFJLGVBQWUsQ0FBQyxzQkFBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNO1FBQ1QsT0FBTyxJQUFJLGVBQWUsQ0FBQyxzQkFBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVTtRQUNiLE9BQU8sSUFBSSxlQUFlLENBQUMsc0JBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTztRQUNWLE9BQU8sSUFBSSxlQUFlLENBQUMsc0JBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsS0FBSztRQUNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDN0IseUJBQXlCO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVMsQ0FBSSxFQUF5RDtRQUNsRSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFZLEVBQUUsR0FBb0IsRUFBRSxFQUFFO1lBQy9ELEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxlQUFlLENBQUMsRUFBZ0Q7UUFDNUQsT0FBTyxLQUFLLEVBQUUsR0FBb0IsRUFBaUIsRUFBRTtZQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtnQkFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQ3pDO1lBRUQsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRTtnQkFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7YUFDN0Q7WUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFTLENBQUMsd0NBQXdDLENBQUMsRUFBRTtnQkFDcEYsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNuQztZQUVELElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxpQkFBUyxDQUFDLHlCQUF5QixDQUFDLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDdkUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFTLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO2FBQzdGO1lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFeEMsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0o7QUEzREQsMENBMkRDO0FBRUQsTUFBYSxjQUFjO0lBQ3ZCLE1BQU0sQ0FBQyxTQUFTLENBQUksRUFBeUQ7UUFDekUsT0FBTyxLQUFLLEVBQUUsR0FBb0IsRUFBaUIsRUFBRTtZQUNqRCxNQUFNLElBQUksR0FBRyxNQUFNLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV4QyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBZ0Q7UUFDakUsT0FBTyxLQUFLLEVBQUUsR0FBb0IsRUFBaUIsRUFBRTtZQUNqRCxNQUFNLElBQUksR0FBRyxNQUFNLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV4QyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQztJQUNOLENBQUM7Q0FDSjtBQWhCRCx3Q0FnQkM7QUFFRCxNQUFhLGtCQUFrQjtJQUMzQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBc0I7UUFDMUMsT0FBTyxDQUFDLEdBQW9CLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtnQkFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2FBQ3pDO1lBRUQsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRTtnQkFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7YUFDN0Q7WUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxpQkFBUyxDQUFDLHdDQUF3QyxDQUFDLEVBQUU7Z0JBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDbkM7WUFFRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLFdBQVcsRUFBRTtnQkFDbEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGlCQUFTLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO2FBQzdGO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNKO0FBcEJELGdEQW9CQztBQUVELE1BQWEsY0FBYztJQUN2QixNQUFNLENBQUMsc0JBQXNCLENBQUMsRUFBc0M7UUFDaEUsT0FBTyxlQUFlLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBdUIsRUFBRSxFQUFFO1lBQ3RFLG1CQUFRLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUN0RCxtQkFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFBLHlCQUFjLEVBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUUxQyxJQUFJLEVBQUUsRUFBRTtnQkFDSixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDWjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNKO0FBWEQsd0NBV0M7QUFFRCxNQUFhLGFBQWE7SUFDdEIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFVBQWtCO1FBQ3ZDLE9BQU8sQ0FBQyxHQUFvQixFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLENBQUM7YUFDcEQ7UUFDTCxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQWtCO1FBQ3hDLE9BQU8sQ0FBQyxHQUFvQixFQUFFLEVBQUU7WUFDNUIsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixHQUFHLFVBQVUsQ0FBQyxDQUFDO2FBQzdEO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNKO0FBaEJELHNDQWdCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y29uc3RhbnRzfSBmcm9tIFwiaHR0cDJcIjtcbmltcG9ydCB7SW5jb21pbmdNZXNzYWdlLCBSZXF1ZXN0T3B0aW9uc30gZnJvbSBcImh0dHBcIjtcbmltcG9ydCB7QXNzZXJ0ZXJ9IGZyb20gXCIuLi8uLi8uLi90ZXN0L2Fzc2VydGVyXCI7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBzeW50aGV0aWNzID0gcmVxdWlyZSgnU3ludGhldGljcycpO1xuaW1wb3J0IHpsaWIgPSByZXF1aXJlKCd6bGliJyk7XG5pbXBvcnQge01lZGlhVHlwZX0gZnJvbSBcIi4uLy4uL3R5cGVzL21lZGlhdHlwZXNcIjtcbmltcG9ydCB7Z2V0QXBpS2V5RnJvbUFQSUdhdGV3YXl9IGZyb20gXCIuLi8uLi9ydW50aW1lL2FwaWtleVwiO1xuaW1wb3J0IHtGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSBcImdlb2pzb25cIjtcbmltcG9ydCB7aXNWYWxpZEdlb0pzb259IGZyb20gXCIuLi8uLi8uLi91dGlscy9nZW9tZXRyeVwiO1xuXG5leHBvcnQgY29uc3QgQVBJX0tFWV9IRUFERVIgPSBcIngtYXBpLWtleVwiO1xuXG5jb25zdCBiYXNlSGVhZGVycyA9IHtcbiAgICBcIkRpZ2l0cmFmZmljLVVzZXJcIiA6IFwiaW50ZXJuYWwtZGlnaXRyYWZmaWMtY2FuYXJ5XCIsXG4gICAgXCJBY2NlcHQtRW5jb2RpbmdcIiA6IFwiZ3ppcFwiLFxuICAgIFwiQWNjZXB0XCI6IFwiKi8qXCIsXG59IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbnR5cGUgQ2hlY2tlckZ1bmN0aW9uID0gKFJlczogSW5jb21pbmdNZXNzYWdlKSA9PiB2b2lkO1xudHlwZSBKc29uQ2hlY2tlckZ1bmN0aW9uPFQ+ID0gKGpzb246IFQsIGJvZHk6IHN0cmluZywgbWVzc2FnZTogSW5jb21pbmdNZXNzYWdlKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgVXJsQ2hlY2tlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnM7XG5cbiAgICBjb25zdHJ1Y3Rvcihob3N0bmFtZTogc3RyaW5nLCBhcGlLZXk/OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHsuLi5iYXNlSGVhZGVyc307XG5cbiAgICAgICAgaWYgKGFwaUtleSkge1xuICAgICAgICAgICAgaGVhZGVyc1tBUElfS0VZX0hFQURFUl0gPSBhcGlLZXk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgcHJvdG9jb2w6ICdodHRwczonLFxuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgfTtcblxuICAgICAgICBzeW50aGV0aWNzLmdldENvbmZpZ3VyYXRpb24oKVxuICAgICAgICAgICAgLmRpc2FibGVSZXF1ZXN0TWV0cmljcygpO1xuXG4gICAgICAgIHN5bnRoZXRpY3MuZ2V0Q29uZmlndXJhdGlvbigpXG4gICAgICAgICAgICAud2l0aEluY2x1ZGVSZXF1ZXN0Qm9keShmYWxzZSlcbiAgICAgICAgICAgIC53aXRoSW5jbHVkZVJlcXVlc3RIZWFkZXJzKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhJbmNsdWRlUmVzcG9uc2VCb2R5KGZhbHNlKVxuICAgICAgICAgICAgLndpdGhJbmNsdWRlUmVzcG9uc2VIZWFkZXJzKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhGYWlsZWRDYW5hcnlNZXRyaWModHJ1ZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZShob3N0bmFtZTogc3RyaW5nLCBhcGlLZXlJZDogc3RyaW5nKTogUHJvbWlzZTxVcmxDaGVja2VyPiB7XG4gICAgICAgIHJldHVybiBnZXRBcGlLZXlGcm9tQVBJR2F0ZXdheShhcGlLZXlJZCkudGhlbihhcGlLZXkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBVcmxDaGVja2VyKGhvc3RuYW1lLCBhcGlLZXkudmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY3JlYXRlVjIoKTogUHJvbWlzZTxVcmxDaGVja2VyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZShwcm9jZXNzLmVudi5ob3N0bmFtZSBhcyBzdHJpbmcsIHByb2Nlc3MuZW52LmFwaUtleUlkIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgZXhwZWN0U3RhdHVzPFQ+KHN0YXR1c0NvZGU6IG51bWJlciwgdXJsOiBzdHJpbmcsIGNhbGxiYWNrOiBKc29uQ2hlY2tlckZ1bmN0aW9uPFQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gey4uLnRoaXMucmVxdWVzdE9wdGlvbnMsIC4uLntcbiAgICAgICAgICAgIHBhdGg6IHVybCxcbiAgICAgICAgfX07XG5cbiAgICAgICAgcmV0dXJuIHN5bnRoZXRpY3MuZXhlY3V0ZUh0dHBTdGVwKGBWZXJpZnkgJHtzdGF0dXNDb2RlfSBmb3IgJHt1cmwucmVwbGFjZSgvYXV0aD0uKi8sICcnKX1gLFxuICAgICAgICAgICAgcmVxdWVzdE9wdGlvbnMsXG4gICAgICAgICAgICBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgZXhwZWN0MjAwPFQ+KHVybDogc3RyaW5nLCAuLi5jYWxsYmFja3M6IEpzb25DaGVja2VyRnVuY3Rpb248VD5bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjYWxsYmFjayA9IGFzeW5jIChqc29uOiBULCBib2R5OiBzdHJpbmcsIHJlczogSW5jb21pbmdNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoY2FsbGJhY2tzLm1hcChjID0+IGMoanNvbiwgYm9keSwgcmVzKSkpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmV4cGVjdFN0YXR1cygyMDAsIHVybCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIGV4cGVjdDQwNCh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHsuLi50aGlzLnJlcXVlc3RPcHRpb25zLCAuLi57XG4gICAgICAgICAgICBwYXRoOiB1cmwsXG4gICAgICAgIH19O1xuXG4gICAgICAgIHJldHVybiBzeW50aGV0aWNzLmV4ZWN1dGVIdHRwU3RlcChgVmVyaWZ5IDQwNCBmb3IgJHt1cmx9YCwgcmVxdWVzdE9wdGlvbnMsIHZhbGlkYXRlU3RhdHVzQ29kZUFuZENvbnRlbnRUeXBlKDQwNCwgTWVkaWFUeXBlLlRFWFRfUExBSU4pKTtcbiAgICB9XG5cbiAgICBleHBlY3Q0MDAodXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7Li4udGhpcy5yZXF1ZXN0T3B0aW9ucywgLi4ue1xuICAgICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICB9fTtcblxuICAgICAgICByZXR1cm4gc3ludGhldGljcy5leGVjdXRlSHR0cFN0ZXAoYFZlcmlmeSA0MDAgZm9yICR7dXJsfWAsIHJlcXVlc3RPcHRpb25zLCB2YWxpZGF0ZVN0YXR1c0NvZGVBbmRDb250ZW50VHlwZSg0MDAsIE1lZGlhVHlwZS5URVhUX1BMQUlOKSk7XG4gICAgfVxuXG4gICAgZXhwZWN0NDAzV2l0aG91dEFwaUtleSh1cmw6IHN0cmluZywgbWVkaWFUeXBlPzogTWVkaWFUeXBlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5yZXF1ZXN0T3B0aW9ucy5oZWFkZXJzIHx8ICF0aGlzLnJlcXVlc3RPcHRpb25zLmhlYWRlcnNbQVBJX0tFWV9IRUFERVJdKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm8gYXBpIGtleSBkZWZpbmVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSB7Li4udGhpcy5yZXF1ZXN0T3B0aW9ucywgLi4ue1xuICAgICAgICAgICAgcGF0aDogdXJsLFxuICAgICAgICAgICAgaGVhZGVyczogYmFzZUhlYWRlcnMsXG4gICAgICAgIH19O1xuXG4gICAgICAgIHJldHVybiBzeW50aGV0aWNzLmV4ZWN1dGVIdHRwU3RlcChgVmVyaWZ5IDQwMyBmb3IgJHt1cmx9YCxcbiAgICAgICAgICAgIHJlcXVlc3RPcHRpb25zLFxuICAgICAgICAgICAgdmFsaWRhdGVTdGF0dXNDb2RlQW5kQ29udGVudFR5cGUoNDAzLCBtZWRpYVR5cGUgfHwgTWVkaWFUeXBlLkFQUExJQ0FUSU9OX0pTT04pKTtcbiAgICB9XG5cbiAgICBkb25lKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIkNhbmFyeSBzdWNjZXNzZnVsXCI7XG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZUJvZHkocmVzcG9uc2U6IEluY29taW5nTWVzc2FnZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IGdldEJvZHlGcm9tUmVzcG9uc2UocmVzcG9uc2UpO1xuXG4gICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNbY29uc3RhbnRzLkhUVFAyX0hFQURFUl9DT05URU5UX0VOQ09ESU5HXSA9PT0gJ2d6aXAnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gemxpYi5ndW56aXBTeW5jKGJvZHkpLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcImVycm9yIFwiICsgSlNPTi5zdHJpbmdpZnkoZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHkudG9TdHJpbmcoKTtcbn1cblxuZnVuY3Rpb24gZ2V0Qm9keUZyb21SZXNwb25zZShyZXNwb25zZTogSW5jb21pbmdNZXNzYWdlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6ICgodmFsdWU6IHN0cmluZykgPT4gdm9pZCkpID0+IHtcbiAgICAgICAgY29uc3QgYnVmZmVyczogQnVmZmVyW10gPSBbXTtcblxuICAgICAgICByZXNwb25zZS5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgICAgICAgIGJ1ZmZlcnMucHVzaChkYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzcG9uc2Uub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoQnVmZmVyLmNvbmNhdChidWZmZXJzKS50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJucyBmdW5jdGlvbiwgdGhhdCB2YWxpZGF0ZXMgdGhhdCB0aGUgc3RhdHVzIGNvZGUgYW5kIGNvbnRlbnQtdHlwZSBmcm9tIHJlc3BvbnNlIGFyZSB0aGUgZ2l2ZW4gdmFsdWVzXG4gKiBAcGFyYW0gc3RhdHVzQ29kZVxuICogQHBhcmFtIGNvbnRlbnRUeXBlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzQ29kZUFuZENvbnRlbnRUeXBlKHN0YXR1c0NvZGU6IG51bWJlciwgY29udGVudFR5cGU6IE1lZGlhVHlwZSk6IChSZXM6IEluY29taW5nTWVzc2FnZSkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIChyZXM6IEluY29taW5nTWVzc2FnZSkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IHN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVzLnN0YXR1c0NvZGV9ICR7cmVzLnN0YXR1c01lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXMuaGVhZGVyc1tjb25zdGFudHMuSFRUUDJfSEVBREVSX0NPTlRFTlRfVFlQRV0gIT09IGNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBjb250ZW50LXR5cGUgJyArIHJlcy5oZWFkZXJzW2NvbnN0YW50cy5IVFRQMl9IRUFERVJfQ09OVEVOVF9UWVBFXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cblxuLy8gREVQUkVDQVRFRFxuZXhwb3J0IGNsYXNzIFJlc3BvbnNlQ2hlY2tlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZW50VHlwZTtcbiAgICBwcml2YXRlIGNoZWNrQ29ycyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3Rvcihjb250ZW50VHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9ySnNvbigpOiBSZXNwb25zZUNoZWNrZXIge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlQ2hlY2tlcihNZWRpYVR5cGUuQVBQTElDQVRJT05fSlNPTik7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvckNTVigpOiBSZXNwb25zZUNoZWNrZXIge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlQ2hlY2tlcihNZWRpYVR5cGUuVEVYVF9DU1YpO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JHZW9qc29uKCk6IFJlc3BvbnNlQ2hlY2tlciB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2VDaGVja2VyKE1lZGlhVHlwZS5BUFBMSUNBVElPTl9HRU9KU09OKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9ySnBlZygpOiBSZXNwb25zZUNoZWNrZXIge1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlQ2hlY2tlcihNZWRpYVR5cGUuSU1BR0VfSlBFRyk7XG4gICAgfVxuXG4gICAgY2hlY2soKTogQ2hlY2tlckZ1bmN0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2VDaGVja2VyKCgpID0+IHtcbiAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gZG8gYW55dGhpbmdcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hlY2tKc29uPFQ+KGZuOiAoanNvbjogVCwgYm9keTogc3RyaW5nLCByZXM6IEluY29taW5nTWVzc2FnZSkgPT4gdm9pZCk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlQ2hlY2tlcigoYm9keTogc3RyaW5nLCByZXM6IEluY29taW5nTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgZm4oSlNPTi5wYXJzZShib2R5KSwgYm9keSwgcmVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzcG9uc2VDaGVja2VyKGZuOiAoYm9keTogc3RyaW5nLCByZXM6IEluY29taW5nTWVzc2FnZSkgPT4gdm9pZCk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiBhc3luYyAocmVzOiBJbmNvbWluZ01lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0YXR1c0NvZGUgbWlzc2luZycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPCAyMDAgfHwgcmVzLnN0YXR1c0NvZGUgPiAyOTkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cmVzLnN0YXR1c0NvZGV9ICR7cmVzLnN0YXR1c01lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrQ29ycyAmJiAhcmVzLmhlYWRlcnNbY29uc3RhbnRzLkhUVFAyX0hFQURFUl9BQ0NFU1NfQ09OVFJPTF9BTExPV19PUklHSU5dKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDT1JTIG1pc3NpbmcnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcy5oZWFkZXJzW2NvbnN0YW50cy5IVFRQMl9IRUFERVJfQ09OVEVOVF9UWVBFXSAhPT0gdGhpcy5jb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgY29udGVudC10eXBlICcgKyByZXMuaGVhZGVyc1tjb25zdGFudHMuSFRUUDJfSEVBREVSX0NPTlRFTlRfVFlQRV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgZ2V0UmVzcG9uc2VCb2R5KHJlcyk7XG5cbiAgICAgICAgICAgIGZuKGJvZHksIHJlcyk7XG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29udGVudENoZWNrZXIge1xuICAgIHN0YXRpYyBjaGVja0pzb248VD4oZm46IChqc29uOiBULCBib2R5OiBzdHJpbmcsIHJlczogSW5jb21pbmdNZXNzYWdlKSA9PiB2b2lkKTogQ2hlY2tlckZ1bmN0aW9uIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIChyZXM6IEluY29taW5nTWVzc2FnZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGdldFJlc3BvbnNlQm9keShyZXMpO1xuXG4gICAgICAgICAgICBmbihKU09OLnBhcnNlKGJvZHkpLCBib2R5LCByZXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBjaGVja1Jlc3BvbnNlKGZuOiAoYm9keTogc3RyaW5nLCByZXM6IEluY29taW5nTWVzc2FnZSkgPT4gdm9pZCk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiBhc3luYyAocmVzOiBJbmNvbWluZ01lc3NhZ2UpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBnZXRSZXNwb25zZUJvZHkocmVzKTtcblxuICAgICAgICAgICAgZm4oYm9keSwgcmVzKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb250ZW50VHlwZUNoZWNrZXIge1xuICAgIHN0YXRpYyBjaGVja0NvbnRlbnRUeXBlKGNvbnRlbnRUeXBlOiBNZWRpYVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIChyZXM6IEluY29taW5nTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXMuc3RhdHVzQ29kZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc3RhdHVzQ29kZSBtaXNzaW5nJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA8IDIwMCB8fCByZXMuc3RhdHVzQ29kZSA+IDI5OSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtyZXMuc3RhdHVzQ29kZX0gJHtyZXMuc3RhdHVzTWVzc2FnZX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFyZXMuaGVhZGVyc1tjb25zdGFudHMuSFRUUDJfSEVBREVSX0FDQ0VTU19DT05UUk9MX0FMTE9XX09SSUdJTl0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NPUlMgbWlzc2luZycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzLmhlYWRlcnNbY29uc3RhbnRzLkhUVFAyX0hFQURFUl9DT05URU5UX1RZUEVdICE9PSBjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgY29udGVudC10eXBlICcgKyByZXMuaGVhZGVyc1tjb25zdGFudHMuSFRUUDJfSEVBREVSX0NPTlRFTlRfVFlQRV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdlb0pzb25DaGVja2VyIHtcbiAgICBzdGF0aWMgdmFsaWRGZWF0dXJlQ29sbGVjdGlvbihmbj86IChqc29uOiBGZWF0dXJlQ29sbGVjdGlvbikgPT4gdm9pZCk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiBSZXNwb25zZUNoZWNrZXIuZm9yR2VvanNvbigpLmNoZWNrSnNvbigoanNvbjogRmVhdHVyZUNvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgICAgIEFzc2VydGVyLmFzc2VydEVxdWFscyhqc29uLnR5cGUsICdGZWF0dXJlQ29sbGVjdGlvbicpO1xuICAgICAgICAgICAgQXNzZXJ0ZXIuYXNzZXJ0VHJ1ZShpc1ZhbGlkR2VvSnNvbihqc29uKSk7XG5cbiAgICAgICAgICAgIGlmIChmbikge1xuICAgICAgICAgICAgICAgIGZuKGpzb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIZWFkZXJDaGVja2VyIHtcbiAgICBzdGF0aWMgY2hlY2tIZWFkZXJFeGlzdHMoaGVhZGVyTmFtZTogc3RyaW5nKTogQ2hlY2tlckZ1bmN0aW9uIHtcbiAgICAgICAgcmV0dXJuIChyZXM6IEluY29taW5nTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXMuaGVhZGVyc1toZWFkZXJOYW1lXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBoZWFkZXI6ICcgKyBoZWFkZXJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY2hlY2tIZWFkZXJNaXNzaW5nKGhlYWRlck5hbWU6IHN0cmluZyk6IENoZWNrZXJGdW5jdGlvbiB7XG4gICAgICAgIHJldHVybiAocmVzOiBJbmNvbWluZ01lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMuaGVhZGVyc1toZWFkZXJOYW1lXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGVhZGVyIHNob3VsZCBub3QgZXhpc3Q6ICcgKyBoZWFkZXJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4iXX0=