@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
File without changes
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DigitrafficIntegration = void 0;
4
+ const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
5
+ const mediatypes_1 = require("../../types/mediatypes");
6
+ const digitraffic_integration_response_1 = require("../../runtime/digitraffic-integration-response");
7
+ class DigitrafficIntegration {
8
+ constructor(lambda, mediaType = mediatypes_1.MediaType.TEXT_PLAIN) {
9
+ this.parameters = [];
10
+ this.lambda = lambda;
11
+ this.mediaType = mediaType;
12
+ }
13
+ addPathParameter(...names) {
14
+ names.forEach(name => this.parameters.push({ type: 'path', name }));
15
+ return this;
16
+ }
17
+ addQueryParameter(...names) {
18
+ names.forEach(name => this.parameters.push({ type: 'querystring', name }));
19
+ return this;
20
+ }
21
+ build() {
22
+ const integrationResponses = this.createResponses();
23
+ return new aws_apigateway_1.LambdaIntegration(this.lambda, {
24
+ proxy: false,
25
+ integrationResponses,
26
+ requestParameters: this.parameters.length == 0 ? undefined : this.createRequestParameters(),
27
+ requestTemplates: this.parameters.length == 0 ? undefined : this.createRequestTemplates(),
28
+ passthroughBehavior: aws_apigateway_1.PassthroughBehavior.WHEN_NO_MATCH,
29
+ });
30
+ }
31
+ createRequestParameters() {
32
+ const requestParameters = {};
33
+ this.parameters.forEach((parameter) => {
34
+ requestParameters[`integration.request.${parameter.type}.${parameter.name}`] = `method.request.${parameter.type}.${parameter.name}`;
35
+ });
36
+ return requestParameters;
37
+ }
38
+ createRequestTemplates() {
39
+ const requestJson = {};
40
+ this.parameters.forEach((parameter) => {
41
+ requestJson[parameter.name] = `$util.escapeJavaScript($input.params('${parameter.name}'))`;
42
+ });
43
+ return {
44
+ [mediatypes_1.MediaType.APPLICATION_JSON]: JSON.stringify(requestJson),
45
+ };
46
+ }
47
+ createResponses() {
48
+ return [digitraffic_integration_response_1.DigitrafficIntegrationResponse.ok(this.mediaType)];
49
+ }
50
+ }
51
+ exports.DigitrafficIntegration = DigitrafficIntegration;
52
+ //# sourceMappingURL=integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../../src/aws/infra/api/integration.ts"],"names":[],"mappings":";;;AAAA,+DAAuG;AAEvG,uDAAiD;AACjD,qGAA8F;AAS9F,MAAa,sBAAsB;IAM/B,YAAY,MAAiB,EAAE,SAAS,GAAG,sBAAS,CAAC,UAAU;QAFtD,eAAU,GAAmB,EAAE,CAAC;QAGrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED,gBAAgB,CAAC,GAAG,KAAe;QAC/B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;QAElE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,iBAAiB,CAAC,GAAG,KAAe;QAChC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;QAEzE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEpD,OAAO,IAAI,kCAAiB,CAAC,IAAI,CAAC,MAAM,EAAE;YACtC,KAAK,EAAE,KAAK;YACZ,oBAAoB;YACpB,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,EAAE;YAC3F,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,EAAE;YACzF,mBAAmB,EAAE,oCAAmB,CAAC,aAAa;SACzD,CAAC,CAAC;IACP,CAAC;IAED,uBAAuB;QACnB,MAAM,iBAAiB,GAA2B,EAAE,CAAC;QAErD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAuB,EAAE,EAAE;YAChD,iBAAiB,CAAC,uBAAuB,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,kBAAkB,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;QACxI,CAAC,CAAC,CAAC;QAEH,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED,sBAAsB;QAClB,MAAM,WAAW,GAA2B,EAAE,CAAC;QAE/C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAuB,EAAE,EAAE;YAChD,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,yCAAyC,SAAS,CAAC,IAAI,KAAK,CAAC;QAC/F,CAAC,CAAC,CAAC;QAEH,OAAO;YACH,CAAC,sBAAS,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;SAC5D,CAAC;IACN,CAAC;IAED,eAAe;QACX,OAAO,CAAC,iEAA8B,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/D,CAAC;CACJ;AA5DD,wDA4DC"}
File without changes
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createResponses = exports.InternalServerErrorResponseTemplate = exports.SvgResponseTemplate = exports.XmlResponseTemplate = exports.NotFoundResponseTemplate = exports.BadRequestResponseTemplate = exports.NotFoundResponse = exports.MessageModel = exports.RESPONSE_DEFAULT_LAMBDA = void 0;
4
+ const apigateway = require("aws-cdk-lib/aws-apigateway");
5
+ const mediatypes_1 = require("../../types/mediatypes");
6
+ /**
7
+ * This is velocity-script, that assumes the response to be LambdaResponse(status and body).
8
+ * It will always return the body and status, but if status in something else than 200 OK the content-type
9
+ * will be overridden to text/plain. (it's assumed, that lambda will return error text).
10
+ *
11
+ * If fileName is set, then Content-Disposition-header will be set to use it
12
+ */
13
+ exports.RESPONSE_DEFAULT_LAMBDA = `#set($inputRoot = $input.path('$'))
14
+ $inputRoot.body
15
+ #if ($inputRoot.status != 200)
16
+ #set ($context.responseOverride.status = $inputRoot.status)
17
+ #set ($context.responseOverride.header.Content-Type = 'text/plain')
18
+ #end
19
+ #set ($context.responseOverride.header.Access-Control-Allow-Origin = '*')
20
+ #if ("$!inputRoot.fileName" != "")
21
+ #set ($disposition = 'attachment; filename="FN"')
22
+ #set ($context.responseOverride.header.Content-Disposition = $disposition.replaceAll('FN', $inputRoot.fileName))
23
+ #end
24
+ `;
25
+ const BODY_FROM_INPUT_PATH = "$input.path('$').body";
26
+ // DEPRECATED
27
+ const messageSchema = {
28
+ schema: apigateway.JsonSchemaVersion.DRAFT4,
29
+ type: apigateway.JsonSchemaType.OBJECT,
30
+ description: 'Response with message',
31
+ properties: {
32
+ message: {
33
+ type: apigateway.JsonSchemaType.STRING,
34
+ description: 'Response message',
35
+ },
36
+ },
37
+ };
38
+ // DEPRECATED
39
+ exports.MessageModel = {
40
+ contentType: mediatypes_1.MediaType.APPLICATION_JSON,
41
+ modelName: 'MessageResponseModel',
42
+ schema: messageSchema,
43
+ };
44
+ const NotFoundMessage = 'Not found';
45
+ exports.NotFoundResponse = JSON.stringify({ message: NotFoundMessage });
46
+ const InternalServerErrorMessage = 'Error';
47
+ const InternalServerErrorResponse = JSON.stringify({ message: InternalServerErrorMessage });
48
+ const BadRequestMessage = 'Bad request';
49
+ const BadRequestResponse = JSON.stringify({ message: BadRequestMessage });
50
+ exports.BadRequestResponseTemplate = createResponses(mediatypes_1.MediaType.APPLICATION_JSON, BadRequestResponse);
51
+ exports.NotFoundResponseTemplate = createResponses(mediatypes_1.MediaType.APPLICATION_JSON, exports.NotFoundResponse);
52
+ exports.XmlResponseTemplate = createResponses(mediatypes_1.MediaType.APPLICATION_XML, BODY_FROM_INPUT_PATH);
53
+ exports.SvgResponseTemplate = createResponses(mediatypes_1.MediaType.IMAGE_SVG, BODY_FROM_INPUT_PATH);
54
+ exports.InternalServerErrorResponseTemplate = createResponses(mediatypes_1.MediaType.APPLICATION_JSON, InternalServerErrorResponse);
55
+ function createResponses(key, value) {
56
+ const map = {};
57
+ map[key] = value;
58
+ return map;
59
+ }
60
+ exports.createResponses = createResponses;
61
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../../../src/aws/infra/api/response.ts"],"names":[],"mappings":";;;AAAA,yDAA0D;AAC1D,uDAAiD;AAEjD;;;;;;GAMG;AACU,QAAA,uBAAuB,GAAG;;;;;;;;;;;CAWtC,CAAC;AAEF,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAErD,aAAa;AACb,MAAM,aAAa,GAA0B;IACzC,MAAM,EAAE,UAAU,CAAC,iBAAiB,CAAC,MAAM;IAC3C,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,MAAM;IACtC,WAAW,EAAE,uBAAuB;IACpC,UAAU,EAAE;QACR,OAAO,EAAE;YACL,IAAI,EAAE,UAAU,CAAC,cAAc,CAAC,MAAM;YACtC,WAAW,EAAE,kBAAkB;SAClC;KACJ;CACJ,CAAC;AAEF,aAAa;AACA,QAAA,YAAY,GAAG;IACxB,WAAW,EAAE,sBAAS,CAAC,gBAAgB;IACvC,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,aAAa;CACxB,CAAC;AAEF,MAAM,eAAe,GAAG,WAAW,CAAC;AACvB,QAAA,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,EAAE,eAAe,EAAC,CAAC,CAAC;AAE3E,MAAM,0BAA0B,GAAG,OAAO,CAAC;AAC3C,MAAM,2BAA2B,GAAG,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,EAAE,0BAA0B,EAAC,CAAC,CAAC;AAE1F,MAAM,iBAAiB,GAAG,aAAa,CAAC;AACxC,MAAM,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAC,OAAO,EAAE,iBAAiB,EAAC,CAAC,CAAC;AAE3D,QAAA,0BAA0B,GAAG,eAAe,CAAC,sBAAS,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;AAC7F,QAAA,wBAAwB,GAAG,eAAe,CAAC,sBAAS,CAAC,gBAAgB,EAAE,wBAAgB,CAAC,CAAC;AACzF,QAAA,mBAAmB,GAAG,eAAe,CAAC,sBAAS,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC;AACvF,QAAA,mBAAmB,GAAG,eAAe,CAAC,sBAAS,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AACjF,QAAA,mCAAmC,GAAG,eAAe,CAAC,sBAAS,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,CAAC;AAE5H,SAAgB,eAAe,CAAI,GAAc,EAAE,KAAQ;IACvD,MAAM,GAAG,GAAsB,EAAE,CAAC;IAElC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAEjB,OAAO,GAAG,CAAC;AACf,CAAC;AAND,0CAMC"}
@@ -1,5 +1,5 @@
1
1
  import { LambdaIntegration, MethodResponse, IntegrationResponse, PassthroughBehavior } from "aws-cdk-lib/aws-apigateway";
2
- import { Function } from 'aws-cdk-lib/aws-lambda';
2
+ import { Function as AWSFunction } from "aws-cdk-lib/aws-lambda";
3
3
  import { IModel } from "aws-cdk-lib/aws-apigateway/lib/model";
4
4
  import { MediaType } from "../../types/mediatypes";
5
5
  export declare const RESPONSE_200_OK: IntegrationResponse;
@@ -7,7 +7,7 @@ export declare const RESPONSE_400_BAD_REQUEST: IntegrationResponse;
7
7
  export declare const RESPONSE_500_SERVER_ERROR: IntegrationResponse;
8
8
  export declare const RESPONSE_CORS_INTEGRATION: {
9
9
  responseParameters: {
10
- 'method.response.header.Access-Control-Allow-Origin': string;
10
+ "method.response.header.Access-Control-Allow-Origin": string;
11
11
  };
12
12
  };
13
13
  export declare const RESPONSE_404_NOT_FOUND: {
@@ -34,6 +34,6 @@ interface IntegrationOptions {
34
34
  * @param lambdaFunction The Lambda function
35
35
  * @param options Options
36
36
  */
37
- export declare function defaultIntegration(lambdaFunction: Function, options?: IntegrationOptions): LambdaIntegration;
37
+ export declare function defaultIntegration(lambdaFunction: AWSFunction, options?: IntegrationOptions): LambdaIntegration;
38
38
  export declare function getResponse(response: IntegrationResponse, options?: IntegrationOptions): IntegrationResponse;
39
39
  export {};
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getResponse = exports.defaultIntegration = exports.corsMethod = exports.methodResponse = exports.RESPONSE_404_NOT_FOUND = exports.RESPONSE_CORS_INTEGRATION = exports.RESPONSE_500_SERVER_ERROR = exports.RESPONSE_400_BAD_REQUEST = exports.RESPONSE_200_OK = void 0;
4
+ const response_1 = require("./response");
5
+ const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
6
+ const errors_1 = require("../../types/errors");
7
+ exports.RESPONSE_200_OK = {
8
+ statusCode: "200",
9
+ };
10
+ exports.RESPONSE_400_BAD_REQUEST = {
11
+ statusCode: "400",
12
+ selectionPattern: errors_1.BAD_REQUEST_MESSAGE,
13
+ responseTemplates: response_1.BadRequestResponseTemplate,
14
+ };
15
+ exports.RESPONSE_500_SERVER_ERROR = {
16
+ statusCode: "500",
17
+ selectionPattern: errors_1.ERROR_MESSAGE,
18
+ responseTemplates: response_1.InternalServerErrorResponseTemplate,
19
+ };
20
+ const RESPONSE_XML = {
21
+ responseTemplates: response_1.XmlResponseTemplate,
22
+ };
23
+ exports.RESPONSE_CORS_INTEGRATION = {
24
+ responseParameters: {
25
+ "method.response.header.Access-Control-Allow-Origin": "'*'",
26
+ },
27
+ };
28
+ exports.RESPONSE_404_NOT_FOUND = {
29
+ statusCode: "404",
30
+ selectionPattern: errors_1.NOT_FOUND_MESSAGE,
31
+ responseTemplates: response_1.NotFoundResponseTemplate,
32
+ };
33
+ function methodResponse(status, contentType, model, parameters) {
34
+ return {
35
+ statusCode: status,
36
+ responseModels: (0, response_1.createResponses)(contentType, model),
37
+ responseParameters: parameters || {},
38
+ };
39
+ }
40
+ exports.methodResponse = methodResponse;
41
+ function corsMethod(response) {
42
+ return {
43
+ ...response,
44
+ ...{
45
+ responseParameters: {
46
+ "method.response.header.Access-Control-Allow-Origin": true,
47
+ },
48
+ },
49
+ };
50
+ }
51
+ exports.corsMethod = corsMethod;
52
+ /**
53
+ * Creates a default Lambda integration for a REST API resource _root_
54
+ * @param lambdaFunction The Lambda function
55
+ * @param options Options
56
+ */
57
+ function defaultIntegration(lambdaFunction, options) {
58
+ return new aws_apigateway_1.LambdaIntegration(lambdaFunction, {
59
+ proxy: false,
60
+ integrationResponses: options?.responses || [
61
+ getResponse(exports.RESPONSE_200_OK, options),
62
+ getResponse(exports.RESPONSE_400_BAD_REQUEST, options),
63
+ getResponse(exports.RESPONSE_404_NOT_FOUND, options),
64
+ getResponse(exports.RESPONSE_500_SERVER_ERROR, options),
65
+ ],
66
+ requestParameters: options?.requestParameters || {},
67
+ requestTemplates: options?.requestTemplates || {},
68
+ passthroughBehavior: options?.passthroughBehavior ?? aws_apigateway_1.PassthroughBehavior.WHEN_NO_MATCH,
69
+ });
70
+ }
71
+ exports.defaultIntegration = defaultIntegration;
72
+ function getResponse(response, options) {
73
+ if (options?.xml) {
74
+ response = { ...response, ...RESPONSE_XML };
75
+ }
76
+ if (!options?.disableCors) {
77
+ response = { ...response, ...exports.RESPONSE_CORS_INTEGRATION };
78
+ }
79
+ return response;
80
+ }
81
+ exports.getResponse = getResponse;
82
+ //# sourceMappingURL=responses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"responses.js","sourceRoot":"","sources":["../../../../src/aws/infra/api/responses.ts"],"names":[],"mappings":";;;AAAA,yCAMoB;AACpB,+DAKoC;AAGpC,+CAI4B;AAGf,QAAA,eAAe,GAAwB;IAChD,UAAU,EAAE,KAAK;CACpB,CAAC;AAEW,QAAA,wBAAwB,GAAwB;IACzD,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,4BAAmB;IACrC,iBAAiB,EAAE,qCAA0B;CAChD,CAAC;AAEW,QAAA,yBAAyB,GAAwB;IAC1D,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,sBAAa;IAC/B,iBAAiB,EAAE,8CAAmC;CACzD,CAAC;AAEF,MAAM,YAAY,GAAG;IACjB,iBAAiB,EAAE,8BAAmB;CACzC,CAAC;AAEW,QAAA,yBAAyB,GAAG;IACrC,kBAAkB,EAAE;QAChB,oDAAoD,EAAE,KAAK;KAC9D;CACJ,CAAC;AAEW,QAAA,sBAAsB,GAAG;IAClC,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,0BAAiB;IACnC,iBAAiB,EAAE,mCAAwB;CAC9C,CAAC;AAEF,SAAgB,cAAc,CAC1B,MAAc,EACd,WAAsB,EACtB,KAAa,EACb,UAAoC;IAEpC,OAAO;QACH,UAAU,EAAE,MAAM;QAClB,cAAc,EAAE,IAAA,0BAAe,EAAC,WAAW,EAAE,KAAK,CAAC;QACnD,kBAAkB,EAAE,UAAU,IAAI,EAAE;KACvC,CAAC;AACN,CAAC;AAXD,wCAWC;AAED,SAAgB,UAAU,CAAC,QAAwB;IAC/C,OAAO;QACH,GAAG,QAAQ;QACX,GAAG;YACC,kBAAkB,EAAE;gBAChB,oDAAoD,EAAE,IAAI;aAC7D;SACJ;KACJ,CAAC;AACN,CAAC;AATD,gCASC;AAWD;;;;GAIG;AACH,SAAgB,kBAAkB,CAC9B,cAA2B,EAC3B,OAA4B;IAE5B,OAAO,IAAI,kCAAiB,CAAC,cAAc,EAAE;QACzC,KAAK,EAAE,KAAK;QACZ,oBAAoB,EAAE,OAAO,EAAE,SAAS,IAAI;YACxC,WAAW,CAAC,uBAAe,EAAE,OAAO,CAAC;YACrC,WAAW,CAAC,gCAAwB,EAAE,OAAO,CAAC;YAC9C,WAAW,CAAC,8BAAsB,EAAE,OAAO,CAAC;YAC5C,WAAW,CAAC,iCAAyB,EAAE,OAAO,CAAC;SAClD;QACD,iBAAiB,EAAE,OAAO,EAAE,iBAAiB,IAAI,EAAE;QACnD,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,IAAI,EAAE;QACjD,mBAAmB,EACf,OAAO,EAAE,mBAAmB,IAAI,oCAAmB,CAAC,aAAa;KACxE,CAAC,CAAC;AACP,CAAC;AAjBD,gDAiBC;AAED,SAAgB,WAAW,CACvB,QAA6B,EAC7B,OAA4B;IAE5B,IAAI,OAAO,EAAE,GAAG,EAAE;QACd,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,YAAY,EAAE,CAAC;KAC/C;IACD,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE;QACvB,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,iCAAyB,EAAE,CAAC;KAC5D;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAZD,kCAYC"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DigitrafficStaticIntegration = void 0;
4
+ const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
5
+ const mediatypes_1 = require("../../types/mediatypes");
6
+ const responses_1 = require("./responses");
7
+ const INTEGRATION_RESPONSE_200 = `{
8
+ "statusCode": 200
9
+ }`;
10
+ const METHOD_RESPONSE_200 = {
11
+ statusCode: '200',
12
+ };
13
+ /**
14
+ * Static integration, that returns the given response with given mediaType from given resource.
15
+ *
16
+ * @param resource
17
+ * @param mediaType
18
+ * @param response
19
+ */
20
+ class DigitrafficStaticIntegration extends aws_apigateway_1.MockIntegration {
21
+ constructor(resource, mediaType, response, enableCors = true, apiKeyRequired = true) {
22
+ const integrationResponse = DigitrafficStaticIntegration.createIntegrationResponse(response, mediaType, enableCors);
23
+ super({
24
+ passthroughBehavior: aws_apigateway_1.PassthroughBehavior.WHEN_NO_TEMPLATES,
25
+ requestTemplates: {
26
+ [mediaType]: INTEGRATION_RESPONSE_200,
27
+ },
28
+ integrationResponses: [integrationResponse],
29
+ });
30
+ ['GET', 'HEAD'].forEach((httpMethod) => {
31
+ resource.addMethod(httpMethod, this, {
32
+ apiKeyRequired,
33
+ methodResponses: [DigitrafficStaticIntegration.createMethodResponse(enableCors)],
34
+ });
35
+ });
36
+ }
37
+ static json(resource, response, enableCors = true, apiKeyRequired = true) {
38
+ return new DigitrafficStaticIntegration(resource, mediatypes_1.MediaType.APPLICATION_JSON, JSON.stringify(response), enableCors, apiKeyRequired);
39
+ }
40
+ static createIntegrationResponse(response, mediaType, enableCors) {
41
+ const integrationResponse = {
42
+ statusCode: '200',
43
+ responseTemplates: {
44
+ [mediaType]: response,
45
+ },
46
+ };
47
+ return enableCors ? { ...integrationResponse, ...responses_1.RESPONSE_CORS_INTEGRATION } : integrationResponse;
48
+ }
49
+ static createMethodResponse(enableCors) {
50
+ return enableCors ? (0, responses_1.corsMethod)(METHOD_RESPONSE_200) : METHOD_RESPONSE_200;
51
+ }
52
+ }
53
+ exports.DigitrafficStaticIntegration = DigitrafficStaticIntegration;
54
+ //# sourceMappingURL=static-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-integration.js","sourceRoot":"","sources":["../../../../src/aws/infra/api/static-integration.ts"],"names":[],"mappings":";;;AAAA,+DAA0F;AAC1F,uDAAiD;AACjD,2CAAkE;AAElE,MAAM,wBAAwB,GAAG;;EAE/B,CAAC;AAEH,MAAM,mBAAmB,GAAG;IACxB,UAAU,EAAE,KAAK;CACpB,CAAC;AAEF;;;;;;GAMG;AACH,MAAa,4BAA6B,SAAQ,gCAAe;IAC7D,YACI,QAAkB,EAAE,SAAoB,EAAE,QAAgB,EAAE,UAAU,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI;QAEpG,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,yBAAyB,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAEpH,KAAK,CAAC;YACF,mBAAmB,EAAE,oCAAmB,CAAC,iBAAiB;YAC1D,gBAAgB,EAAE;gBACd,CAAC,SAAS,CAAC,EAAE,wBAAwB;aACxC;YACD,oBAAoB,EAAE,CAAC,mBAAmB,CAAC;SAC9C,CAAC,CAAC;QAEH,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YACnC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE;gBACjC,cAAc;gBACd,eAAe,EAAE,CAAC,4BAA4B,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;aACnF,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,IAAI,CAAI,QAAkB,EAAE,QAAW,EAAE,UAAU,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI;QACpF,OAAO,IAAI,4BAA4B,CACnC,QAAQ,EAAE,sBAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,cAAc,CAC7F,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,yBAAyB,CAAC,QAAgB,EAAE,SAAoB,EAAE,UAAmB;QAChG,MAAM,mBAAmB,GAAG;YACxB,UAAU,EAAE,KAAK;YACjB,iBAAiB,EAAE;gBACf,CAAC,SAAS,CAAC,EAAE,QAAQ;aACxB;SACJ,CAAC;QAEF,OAAO,UAAU,CAAC,CAAC,CAAC,EAAC,GAAG,mBAAmB,EAAE,GAAG,qCAAyB,EAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;IACrG,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,UAAmB;QACnD,OAAO,UAAU,CAAC,CAAC,CAAC,IAAA,sBAAU,EAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAC9E,CAAC;CACJ;AA1CD,oEA0CC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CanaryAlarm = void 0;
4
+ const aws_cloudwatch_1 = require("aws-cdk-lib/aws-cloudwatch");
5
+ const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
6
+ const aws_sns_1 = require("aws-cdk-lib/aws-sns");
7
+ class CanaryAlarm {
8
+ constructor(stack, canary, params) {
9
+ if (params.alarm ?? true) {
10
+ const alarmName = params.alarm?.alarmName ?? `${params.name}-alarm`;
11
+ const alarm = new aws_cloudwatch_1.Alarm(stack, alarmName, {
12
+ alarmName,
13
+ alarmDescription: params.alarm?.description ?? '',
14
+ metric: canary.metricSuccessPercent(),
15
+ evaluationPeriods: params.alarm?.evalutionPeriods ?? 1,
16
+ threshold: params.alarm?.threshold ?? 100,
17
+ comparisonOperator: aws_cloudwatch_1.ComparisonOperator.LESS_THAN_THRESHOLD,
18
+ });
19
+ if (params.alarm?.topicArn) {
20
+ alarm.addAlarmAction(new aws_cloudwatch_actions_1.SnsAction(aws_sns_1.Topic.fromTopicArn(stack, `${alarmName}-action`, params.alarm.topicArn)));
21
+ }
22
+ }
23
+ }
24
+ }
25
+ exports.CanaryAlarm = CanaryAlarm;
26
+ //# sourceMappingURL=canary-alarm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canary-alarm.js","sourceRoot":"","sources":["../../../../src/aws/infra/canaries/canary-alarm.ts"],"names":[],"mappings":";;;AAEA,+DAAqE;AAErE,+EAA6D;AAC7D,iDAA0C;AAE1C,MAAa,WAAW;IACpB,YAAY,KAAgB,EACxB,MAAc,EACd,MAAwB;QACxB,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;YACtB,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,GAAG,MAAM,CAAC,IAAI,QAAQ,CAAC;YAEpE,MAAM,KAAK,GAAG,IAAI,sBAAK,CAAC,KAAK,EAAE,SAAS,EAAE;gBACtC,SAAS;gBACT,gBAAgB,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE;gBACjD,MAAM,EAAE,MAAM,CAAC,oBAAoB,EAAE;gBACrC,iBAAiB,EAAE,MAAM,CAAC,KAAK,EAAE,gBAAgB,IAAI,CAAC;gBACtD,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,IAAI,GAAG;gBACzC,kBAAkB,EAAE,mCAAkB,CAAC,mBAAmB;aAC7D,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE;gBACxB,KAAK,CAAC,cAAc,CAAC,IAAI,kCAAS,CAAC,eAAK,CAAC,YAAY,CAAC,KAAK,EACvD,GAAG,SAAS,SAAS,EACrB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aAChC;SACJ;IACL,CAAC;CACJ;AAvBD,kCAuBC"}
@@ -0,0 +1,3 @@
1
+ export declare const ENV_API_KEY = "apiKeyId";
2
+ export declare const ENV_HOSTNAME = "hostname";
3
+ export declare const ENV_SECRET = "secret";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ENV_SECRET = exports.ENV_HOSTNAME = exports.ENV_API_KEY = void 0;
4
+ exports.ENV_API_KEY = "apiKeyId";
5
+ exports.ENV_HOSTNAME = "hostname";
6
+ exports.ENV_SECRET = "secret";
7
+ //# sourceMappingURL=canary-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canary-keys.js","sourceRoot":"","sources":["../../../../src/aws/infra/canaries/canary-keys.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,UAAU,CAAC;AACzB,QAAA,YAAY,GAAG,UAAU,CAAC;AAC1B,QAAA,UAAU,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=canary-parameters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canary-parameters.js","sourceRoot":"","sources":["../../../../src/aws/infra/canaries/canary-parameters.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
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=canary-role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canary-role.js","sourceRoot":"","sources":["../../../../src/aws/infra/canaries/canary-role.ts"],"names":[],"mappings":";;;AAAA,iDAAiH;AAGjH,MAAM,2BAA2B,GAAyB;IACtD,OAAO,EAAE;QACL,sBAAsB;QACtB,mBAAmB;QACnB,qBAAqB;QACrB,wBAAwB;QACxB,yBAAyB;KAC5B;IACD,SAAS,EAAE,CAAC,GAAG,CAAC;CACnB,CAAC;AAEF,MAAM,0BAA0B,GAAyB;IACrD,OAAO,EAAE;QACL,0BAA0B;KAC7B;IACD,SAAS,EAAE,CAAC,GAAG,CAAC;IAChB,UAAU,EAAE;QACR,cAAc,EAAE;YACZ,sBAAsB,EAAE,sBAAsB;SACjD;KACJ;CACJ,CAAC;AAEF,MAAa,qBAAsB,SAAQ,cAAI;IAC3C,YAAY,KAAgB,EAAE,UAAkB;QAC5C,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,EAAE;YACtC,SAAS,EAAE,IAAI,0BAAgB,CAAC,sBAAsB,CAAC;YACvD,eAAe,EAAE;gBACb,uBAAa,CAAC,wBAAwB,CAAC,gCAAgC,CAAC;aAC3E;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,IAAI,yBAAe,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACnE,IAAI,CAAC,WAAW,CAAC,IAAI,yBAAe,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,kBAAkB;QACd,gBAAgB;QAChB,6DAA6D;QAC7D,QAAQ;QACR,IAAI,CAAC,gBAAgB,CAAC,uBAAa,CAAC,wBAAwB,CAAC,8CAA8C,CAAC,CAAC,CAAC;QAC9G,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AApBD,sDAoBC"}
File without changes
@@ -0,0 +1,32 @@
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", "out", "canaries"],
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=canary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canary.js","sourceRoot":"","sources":["../../../../src/aws/infra/canaries/canary.ts"],"names":[],"mappings":";;;AAAA,6CAAuC;AACvC,wEAMuC;AAEvC,iDAA6C;AAK7C,MAAa,iBAAkB,SAAQ,6BAAM;IACzC,YACI,KAAgB,EAChB,UAAkB,EAClB,IAAU,EACV,MAAwB,EACxB,oBAAuC;QAEvC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE;YACrB,OAAO,EAAE,8BAAO,CAAC,+BAA+B;YAChD,IAAI;YACJ,IAAI,EAAE,2BAAI,CAAC,MAAM,CAAC;gBACd,IAAI,EAAE,IAAI,gCAAS,CAAC,MAAM,EAAE;oBACxB,OAAO,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC;iBACzC,CAAC;gBACF,OAAO,EAAE,MAAM,CAAC,OAAO;aAC1B,CAAC;YACF,oBAAoB,EAAE;gBAClB,GAAG,oBAAoB;gBACvB,GAAG,MAAM,EAAE,SAAS;aACvB;YACD,UAAU;YACV,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,+BAAQ,CAAC,IAAI,CAAC,sBAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;SACnE,CAAC,CAAC;QAEH,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEtC,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE;YACtB,IAAI,0BAAW,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;SACxC;IACL,CAAC;CACJ;AA/BD,8CA+BC"}
@@ -0,0 +1,70 @@
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 === undefined
19
+ ? []
20
+ : stack.vpc.privateSubnets.map((subnet) => subnet.subnetId);
21
+ const securityGroupIds = stack.lambdaDbSg === undefined
22
+ ? []
23
+ : [stack.lambdaDbSg.securityGroupId];
24
+ this.node.defaultChild.vpcConfig = {
25
+ vpcId: stack.vpc?.vpcId,
26
+ securityGroupIds,
27
+ subnetIds,
28
+ };
29
+ }
30
+ }
31
+ static create(stack, role, params) {
32
+ const secret = stack.getSecret();
33
+ return new DatabaseCanary(stack, role, secret, {
34
+ ...{
35
+ secret: stack.configuration.secretId,
36
+ schedule: aws_events_1.Schedule.rate(aws_cdk_lib_1.Duration.hours(1)),
37
+ handler: `${params.name}.handler`,
38
+ },
39
+ ...params,
40
+ });
41
+ }
42
+ /**
43
+ *
44
+ * @param stack
45
+ * @param role
46
+ * @param name name of the typescipt file without -db -suffix. Max len is 10 char if @param canaryName is not given.
47
+ * @param params
48
+ * @param canaryName Optional name for canary if multiple canaries is made from same ${name}-db.ts canary file.
49
+ */
50
+ static createV2(stack, role, name, params = {}, canaryName = name) {
51
+ const secret = stack.getSecret();
52
+ return new DatabaseCanary(stack, role, secret, {
53
+ ...{
54
+ secret: stack.configuration.secretId,
55
+ schedule: aws_events_1.Schedule.rate(aws_cdk_lib_1.Duration.hours(1)),
56
+ handler: `${name}-db.handler`,
57
+ name: canaryName,
58
+ alarm: {
59
+ alarmName: canaryName === name
60
+ ? `${stack.configuration.shortName}-DB-Alarm`
61
+ : `${canaryName}-DB-Alarm`,
62
+ topicArn: stack.configuration.alarmTopicArn,
63
+ },
64
+ },
65
+ ...params,
66
+ });
67
+ }
68
+ }
69
+ exports.DatabaseCanary = DatabaseCanary;
70
+ //# sourceMappingURL=database-canary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-canary.js","sourceRoot":"","sources":["../../../../src/aws/infra/canaries/database-canary.ts"],"names":[],"mappings":";;;AAEA,+DAAuD;AACvD,uDAAkD;AAClD,6CAAuC;AAGvC,qCAA6C;AAG7C,MAAa,cAAe,SAAQ,0BAAiB;IACjD,YACI,KAAuB,EACvB,IAAU,EACV,MAAe,EACf,MAAwB;QAExB,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,IAAI,KAAK,CAAC;QACvC,MAAM,oBAAoB,GAAG,KAAK,CAAC,8BAA8B,CAC7D,cAAc,UAAU,EAAE,CAC7B,CAAC;QAEF,+DAA+D;QAC/D,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAE7D,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5B,kEAAkE;QAClE,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,YAAY,0BAAS,EAAE;YAC7C,MAAM,SAAS,GACX,KAAK,CAAC,GAAG,KAAK,SAAS;gBACnB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEpE,MAAM,gBAAgB,GAClB,KAAK,CAAC,UAAU,KAAK,SAAS;gBAC1B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YAE7C,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG;gBAC/B,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK;gBACvB,gBAAgB;gBAChB,SAAS;aACZ,CAAC;SACL;IACL,CAAC;IAED,MAAM,CAAC,MAAM,CACT,KAAuB,EACvB,IAAU,EACV,MAAwB;QAExB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;YAC3C,GAAG;gBACC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ;gBACpC,QAAQ,EAAE,qBAAQ,CAAC,IAAI,CAAC,sBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1C,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,UAAU;aACpC;YACD,GAAG,MAAM;SACZ,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,QAAQ,CACX,KAAuB,EACvB,IAAU,EACV,IAAY,EACZ,SAAoC,EAAE,EACtC,UAAU,GAAG,IAAI;QAEjB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE;YAC3C,GAAG;gBACC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ;gBACpC,QAAQ,EAAE,qBAAQ,CAAC,IAAI,CAAC,sBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1C,OAAO,EAAE,GAAG,IAAI,aAAa;gBAC7B,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE;oBACH,SAAS,EACL,UAAU,KAAK,IAAI;wBACf,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,SAAS,WAAW;wBAC7C,CAAC,CAAC,GAAG,UAAU,WAAW;oBAClC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,aAAa;iBAC9C;aACJ;YACD,GAAG,MAAM;SACZ,CAAC,CAAC;IACP,CAAC;CACJ;AAvFD,wCAuFC"}
@@ -5,10 +5,10 @@ declare abstract class DatabaseCheck<T> {
5
5
  protected constructor(name: string, sql: string);
6
6
  abstract check(value: T): void;
7
7
  }
8
- declare class BaseResponse {
8
+ interface BaseResponse {
9
9
  }
10
10
  export declare class DatabaseChecker {
11
- credentialsFunction: (() => Promise<void>);
11
+ credentialsFunction: () => Promise<void>;
12
12
  checks: DatabaseCheck<BaseResponse>[];
13
13
  private constructor();
14
14
  static createForProxy(): DatabaseChecker;