terraconstructs 0.0.8

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 (680) hide show
  1. package/.envrc +5 -0
  2. package/.jsii +79780 -0
  3. package/.mise.toml +8 -0
  4. package/.nvmrc +1 -0
  5. package/.terraform-version +1 -0
  6. package/.terraform.d/plugin-cache/.gitignore +5 -0
  7. package/LICENSE +674 -0
  8. package/NOTICE.txt +12 -0
  9. package/README.md +42 -0
  10. package/bun.lockb +0 -0
  11. package/go.mod +158 -0
  12. package/go.sum +1206 -0
  13. package/lib/aws/arn.d.ts +187 -0
  14. package/lib/aws/arn.js +383 -0
  15. package/lib/aws/aws-construct.d.ts +76 -0
  16. package/lib/aws/aws-construct.js +38 -0
  17. package/lib/aws/aws-stack.d.ts +201 -0
  18. package/lib/aws/aws-stack.js +303 -0
  19. package/lib/aws/cloudwatch/actions/ec2.d.ts +35 -0
  20. package/lib/aws/cloudwatch/actions/ec2.js +48 -0
  21. package/lib/aws/cloudwatch/actions/index.d.ts +2 -0
  22. package/lib/aws/cloudwatch/actions/index.js +24 -0
  23. package/lib/aws/cloudwatch/actions/lambda.d.ts +16 -0
  24. package/lib/aws/cloudwatch/actions/lambda.js +48 -0
  25. package/lib/aws/cloudwatch/alarm-action.d.ts +23 -0
  26. package/lib/aws/cloudwatch/alarm-action.js +4 -0
  27. package/lib/aws/cloudwatch/alarm-base.d.ts +84 -0
  28. package/lib/aws/cloudwatch/alarm-base.js +64 -0
  29. package/lib/aws/cloudwatch/alarm-rule.d.ts +61 -0
  30. package/lib/aws/cloudwatch/alarm-rule.js +116 -0
  31. package/lib/aws/cloudwatch/alarm-status-widget.d.ts +77 -0
  32. package/lib/aws/cloudwatch/alarm-status-widget.js +62 -0
  33. package/lib/aws/cloudwatch/alarm.d.ts +158 -0
  34. package/lib/aws/cloudwatch/alarm.js +410 -0
  35. package/lib/aws/cloudwatch/composite-alarm.d.ts +88 -0
  36. package/lib/aws/cloudwatch/composite-alarm.js +98 -0
  37. package/lib/aws/cloudwatch/dashboard.d.ts +137 -0
  38. package/lib/aws/cloudwatch/dashboard.js +141 -0
  39. package/lib/aws/cloudwatch/data-protection-policy.d.ts +184 -0
  40. package/lib/aws/cloudwatch/data-protection-policy.js +246 -0
  41. package/lib/aws/cloudwatch/graph.d.ts +792 -0
  42. package/lib/aws/cloudwatch/graph.js +537 -0
  43. package/lib/aws/cloudwatch/index.d.ts +26 -0
  44. package/lib/aws/cloudwatch/index.js +49 -0
  45. package/lib/aws/cloudwatch/layout.d.ts +89 -0
  46. package/lib/aws/cloudwatch/layout.js +147 -0
  47. package/lib/aws/cloudwatch/log-destinations/index.d.ts +2 -0
  48. package/lib/aws/cloudwatch/log-destinations/index.js +20 -0
  49. package/lib/aws/cloudwatch/log-destinations/kinesis.d.ts +29 -0
  50. package/lib/aws/cloudwatch/log-destinations/kinesis.js +52 -0
  51. package/lib/aws/cloudwatch/log-destinations/lambda.d.ts +22 -0
  52. package/lib/aws/cloudwatch/log-destinations/lambda.js +46 -0
  53. package/lib/aws/cloudwatch/log-group.d.ts +453 -0
  54. package/lib/aws/cloudwatch/log-group.js +350 -0
  55. package/lib/aws/cloudwatch/log-query.d.ts +91 -0
  56. package/lib/aws/cloudwatch/log-query.js +85 -0
  57. package/lib/aws/cloudwatch/log-stream.d.ts +57 -0
  58. package/lib/aws/cloudwatch/log-stream.js +57 -0
  59. package/lib/aws/cloudwatch/metric-filter.d.ts +30 -0
  60. package/lib/aws/cloudwatch/metric-filter.js +69 -0
  61. package/lib/aws/cloudwatch/metric-types.d.ts +407 -0
  62. package/lib/aws/cloudwatch/metric-types.js +151 -0
  63. package/lib/aws/cloudwatch/metric.d.ts +492 -0
  64. package/lib/aws/cloudwatch/metric.js +493 -0
  65. package/lib/aws/cloudwatch/pattern.d.ts +195 -0
  66. package/lib/aws/cloudwatch/pattern.js +412 -0
  67. package/lib/aws/cloudwatch/policy.d.ts +43 -0
  68. package/lib/aws/cloudwatch/policy.js +50 -0
  69. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.d.ts +14 -0
  70. package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.js +37 -0
  71. package/lib/aws/cloudwatch/private/env-tokens.d.ts +8 -0
  72. package/lib/aws/cloudwatch/private/env-tokens.js +48 -0
  73. package/lib/aws/cloudwatch/private/metric-util.d.ts +60 -0
  74. package/lib/aws/cloudwatch/private/metric-util.js +132 -0
  75. package/lib/aws/cloudwatch/private/object.d.ts +1 -0
  76. package/lib/aws/cloudwatch/private/object.js +18 -0
  77. package/lib/aws/cloudwatch/private/rendering.d.ts +60 -0
  78. package/lib/aws/cloudwatch/private/rendering.js +181 -0
  79. package/lib/aws/cloudwatch/private/statistic.d.ts +51 -0
  80. package/lib/aws/cloudwatch/private/statistic.js +176 -0
  81. package/lib/aws/cloudwatch/query-definition.d.ts +150 -0
  82. package/lib/aws/cloudwatch/query-definition.js +114 -0
  83. package/lib/aws/cloudwatch/stats.d.ts +150 -0
  84. package/lib/aws/cloudwatch/stats.js +207 -0
  85. package/lib/aws/cloudwatch/subscription-filter.d.ts +75 -0
  86. package/lib/aws/cloudwatch/subscription-filter.js +51 -0
  87. package/lib/aws/cloudwatch/text.d.ts +52 -0
  88. package/lib/aws/cloudwatch/text.js +53 -0
  89. package/lib/aws/cloudwatch/variable.d.ts +156 -0
  90. package/lib/aws/cloudwatch/variable.js +156 -0
  91. package/lib/aws/cloudwatch/widget.d.ts +62 -0
  92. package/lib/aws/cloudwatch/widget.js +45 -0
  93. package/lib/aws/compute/activity.d.ts +81 -0
  94. package/lib/aws/compute/activity.js +132 -0
  95. package/lib/aws/compute/architecture.d.ts +33 -0
  96. package/lib/aws/compute/architecture.js +42 -0
  97. package/lib/aws/compute/chain.d.ts +52 -0
  98. package/lib/aws/compute/chain.js +68 -0
  99. package/lib/aws/compute/condition.d.ts +202 -0
  100. package/lib/aws/compute/condition.js +409 -0
  101. package/lib/aws/compute/event-invoke-config.d.ts +74 -0
  102. package/lib/aws/compute/event-invoke-config.js +63 -0
  103. package/lib/aws/compute/event-source-filter.d.ts +64 -0
  104. package/lib/aws/compute/event-source-filter.js +86 -0
  105. package/lib/aws/compute/event-source-mapping.d.ts +310 -0
  106. package/lib/aws/compute/event-source-mapping.js +267 -0
  107. package/lib/aws/compute/event-sources/index.d.ts +4 -0
  108. package/lib/aws/compute/event-sources/index.js +28 -0
  109. package/lib/aws/compute/event-sources/s3-onfailure-destination.d.ts +13 -0
  110. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +26 -0
  111. package/lib/aws/compute/event-sources/s3.d.ts +24 -0
  112. package/lib/aws/compute/event-sources/s3.js +25 -0
  113. package/lib/aws/compute/event-sources/sqs-dlq.d.ts +13 -0
  114. package/lib/aws/compute/event-sources/sqs-dlq.js +26 -0
  115. package/lib/aws/compute/event-sources/sqs.d.ts +75 -0
  116. package/lib/aws/compute/event-sources/sqs.js +84 -0
  117. package/lib/aws/compute/fields.d.ts +367 -0
  118. package/lib/aws/compute/fields.js +546 -0
  119. package/lib/aws/compute/function-alias.d.ts +148 -0
  120. package/lib/aws/compute/function-alias.js +176 -0
  121. package/lib/aws/compute/function-base.d.ts +314 -0
  122. package/lib/aws/compute/function-base.js +421 -0
  123. package/lib/aws/compute/function-destination.d.ts +42 -0
  124. package/lib/aws/compute/function-destination.js +18 -0
  125. package/lib/aws/compute/function-destinations/event-bridge.d.ts +19 -0
  126. package/lib/aws/compute/function-destinations/event-bridge.js +46 -0
  127. package/lib/aws/compute/function-destinations/function.d.ts +34 -0
  128. package/lib/aws/compute/function-destinations/function.js +55 -0
  129. package/lib/aws/compute/function-destinations/index.d.ts +3 -0
  130. package/lib/aws/compute/function-destinations/index.js +22 -0
  131. package/lib/aws/compute/function-destinations/sqs.d.ts +14 -0
  132. package/lib/aws/compute/function-destinations/sqs.js +27 -0
  133. package/lib/aws/compute/function-nodejs.d.ts +55 -0
  134. package/lib/aws/compute/function-nodejs.js +70 -0
  135. package/lib/aws/compute/function-permission.d.ts +83 -0
  136. package/lib/aws/compute/function-permission.js +3 -0
  137. package/lib/aws/compute/function-url.d.ts +210 -0
  138. package/lib/aws/compute/function-url.js +148 -0
  139. package/lib/aws/compute/function-vpc-config.generated.d.ts +36 -0
  140. package/lib/aws/compute/function-vpc-config.generated.js +3 -0
  141. package/lib/aws/compute/function.d.ts +492 -0
  142. package/lib/aws/compute/function.js +692 -0
  143. package/lib/aws/compute/index.d.ts +42 -0
  144. package/lib/aws/compute/index.js +64 -0
  145. package/lib/aws/compute/private/intrinstics.d.ts +86 -0
  146. package/lib/aws/compute/private/intrinstics.js +220 -0
  147. package/lib/aws/compute/private/json-path.d.ts +57 -0
  148. package/lib/aws/compute/private/json-path.js +351 -0
  149. package/lib/aws/compute/private/util.d.ts +1 -0
  150. package/lib/aws/compute/private/util.js +38 -0
  151. package/lib/aws/compute/state-graph.d.ts +100 -0
  152. package/lib/aws/compute/state-graph.js +177 -0
  153. package/lib/aws/compute/state-machine-fragment.d.ts +61 -0
  154. package/lib/aws/compute/state-machine-fragment.js +56 -0
  155. package/lib/aws/compute/state-machine.d.ts +323 -0
  156. package/lib/aws/compute/state-machine.js +392 -0
  157. package/lib/aws/compute/states/choice.d.ts +94 -0
  158. package/lib/aws/compute/states/choice.js +81 -0
  159. package/lib/aws/compute/states/custom-state.d.ts +55 -0
  160. package/lib/aws/compute/states/custom-state.js +114 -0
  161. package/lib/aws/compute/states/distributed-map/item-batcher.d.ts +64 -0
  162. package/lib/aws/compute/states/distributed-map/item-batcher.js +58 -0
  163. package/lib/aws/compute/states/distributed-map/item-reader.d.ts +256 -0
  164. package/lib/aws/compute/states/distributed-map/item-reader.js +253 -0
  165. package/lib/aws/compute/states/distributed-map/result-writer.d.ts +41 -0
  166. package/lib/aws/compute/states/distributed-map/result-writer.js +66 -0
  167. package/lib/aws/compute/states/distributed-map.d.ts +153 -0
  168. package/lib/aws/compute/states/distributed-map.js +207 -0
  169. package/lib/aws/compute/states/fail.d.ts +74 -0
  170. package/lib/aws/compute/states/fail.js +83 -0
  171. package/lib/aws/compute/states/map-base.d.ts +145 -0
  172. package/lib/aws/compute/states/map-base.js +109 -0
  173. package/lib/aws/compute/states/map.d.ts +76 -0
  174. package/lib/aws/compute/states/map.js +110 -0
  175. package/lib/aws/compute/states/parallel.d.ts +113 -0
  176. package/lib/aws/compute/states/parallel.js +100 -0
  177. package/lib/aws/compute/states/pass.d.ts +122 -0
  178. package/lib/aws/compute/states/pass.js +99 -0
  179. package/lib/aws/compute/states/private/state-type.d.ts +13 -0
  180. package/lib/aws/compute/states/private/state-type.js +19 -0
  181. package/lib/aws/compute/states/state.d.ts +276 -0
  182. package/lib/aws/compute/states/state.js +482 -0
  183. package/lib/aws/compute/states/succeed.d.ts +51 -0
  184. package/lib/aws/compute/states/succeed.js +32 -0
  185. package/lib/aws/compute/states/task-base.d.ts +225 -0
  186. package/lib/aws/compute/states/task-base.js +160 -0
  187. package/lib/aws/compute/states/task.d.ts +127 -0
  188. package/lib/aws/compute/states/task.js +92 -0
  189. package/lib/aws/compute/states/wait.d.ts +78 -0
  190. package/lib/aws/compute/states/wait.js +90 -0
  191. package/lib/aws/compute/step-functions-task.d.ts +78 -0
  192. package/lib/aws/compute/step-functions-task.js +27 -0
  193. package/lib/aws/compute/task-credentials.d.ts +45 -0
  194. package/lib/aws/compute/task-credentials.js +52 -0
  195. package/lib/aws/compute/task-input.d.ts +86 -0
  196. package/lib/aws/compute/task-input.js +107 -0
  197. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.d.ts +73 -0
  198. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +69 -0
  199. package/lib/aws/compute/tasks/eventbridge/put-events.d.ts +74 -0
  200. package/lib/aws/compute/tasks/eventbridge/put-events.js +94 -0
  201. package/lib/aws/compute/tasks/http/invoke.d.ts +104 -0
  202. package/lib/aws/compute/tasks/http/invoke.js +117 -0
  203. package/lib/aws/compute/tasks/index.d.ts +7 -0
  204. package/lib/aws/compute/tasks/index.js +42 -0
  205. package/lib/aws/compute/tasks/lambda/invoke.d.ts +106 -0
  206. package/lib/aws/compute/tasks/lambda/invoke.js +125 -0
  207. package/lib/aws/compute/tasks/private/task-utils.d.ts +8 -0
  208. package/lib/aws/compute/tasks/private/task-utils.js +36 -0
  209. package/lib/aws/compute/tasks/resource-arn-suffix.d.ts +3 -0
  210. package/lib/aws/compute/tasks/resource-arn-suffix.js +25 -0
  211. package/lib/aws/compute/tasks/sqs/send-message.d.ts +62 -0
  212. package/lib/aws/compute/tasks/sqs/send-message.js +70 -0
  213. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.d.ts +36 -0
  214. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +45 -0
  215. package/lib/aws/compute/tasks/stepfunctions/start-execution.d.ts +63 -0
  216. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +123 -0
  217. package/lib/aws/compute/types.d.ts +214 -0
  218. package/lib/aws/compute/types.js +103 -0
  219. package/lib/aws/compute/util.d.ts +12 -0
  220. package/lib/aws/compute/util.js +29 -0
  221. package/lib/aws/edge/certificate.d.ts +144 -0
  222. package/lib/aws/edge/certificate.js +191 -0
  223. package/lib/aws/edge/distribution.d.ts +505 -0
  224. package/lib/aws/edge/distribution.js +444 -0
  225. package/lib/aws/edge/dns-alias-record-targets.d.ts +29 -0
  226. package/lib/aws/edge/dns-alias-record-targets.js +46 -0
  227. package/lib/aws/edge/dns-record.d.ts +536 -0
  228. package/lib/aws/edge/dns-record.js +532 -0
  229. package/lib/aws/edge/dns-zone.d.ts +169 -0
  230. package/lib/aws/edge/dns-zone.js +149 -0
  231. package/lib/aws/edge/function.d.ts +185 -0
  232. package/lib/aws/edge/function.js +141 -0
  233. package/lib/aws/edge/index.d.ts +8 -0
  234. package/lib/aws/edge/index.js +25 -0
  235. package/lib/aws/edge/key-value-store.d.ts +162 -0
  236. package/lib/aws/edge/key-value-store.js +163 -0
  237. package/lib/aws/edge/origin.d.ts +160 -0
  238. package/lib/aws/edge/origin.js +245 -0
  239. package/lib/aws/encryption/alias.d.ts +137 -0
  240. package/lib/aws/encryption/alias.js +216 -0
  241. package/lib/aws/encryption/index.d.ts +4 -0
  242. package/lib/aws/encryption/index.js +21 -0
  243. package/lib/aws/encryption/key-lookup.d.ts +11 -0
  244. package/lib/aws/encryption/key-lookup.js +4 -0
  245. package/lib/aws/encryption/key.d.ts +461 -0
  246. package/lib/aws/encryption/key.js +586 -0
  247. package/lib/aws/encryption/private/perms.d.ts +5 -0
  248. package/lib/aws/encryption/private/perms.js +30 -0
  249. package/lib/aws/encryption/via-service-principal.d.ts +11 -0
  250. package/lib/aws/encryption/via-service-principal.js +39 -0
  251. package/lib/aws/iam/grant.d.ts +221 -0
  252. package/lib/aws/iam/grant.js +239 -0
  253. package/lib/aws/iam/identity-base.d.ts +20 -0
  254. package/lib/aws/iam/identity-base.js +3 -0
  255. package/lib/aws/iam/index.d.ts +16 -0
  256. package/lib/aws/iam/index.js +34 -0
  257. package/lib/aws/iam/managed-policy.d.ts +227 -0
  258. package/lib/aws/iam/managed-policy.js +237 -0
  259. package/lib/aws/iam/oidc-provider.d.ts +120 -0
  260. package/lib/aws/iam/oidc-provider.js +82 -0
  261. package/lib/aws/iam/policy-document-config.generated.d.ts +78 -0
  262. package/lib/aws/iam/policy-document-config.generated.js +3 -0
  263. package/lib/aws/iam/policy-document.d.ts +150 -0
  264. package/lib/aws/iam/policy-document.js +172 -0
  265. package/lib/aws/iam/policy-statement-props.generated.d.ts +55 -0
  266. package/lib/aws/iam/policy-statement-props.generated.js +3 -0
  267. package/lib/aws/iam/policy-statement.d.ts +451 -0
  268. package/lib/aws/iam/policy-statement.js +947 -0
  269. package/lib/aws/iam/policy.d.ts +122 -0
  270. package/lib/aws/iam/policy.js +192 -0
  271. package/lib/aws/iam/principals.d.ts +668 -0
  272. package/lib/aws/iam/principals.js +1032 -0
  273. package/lib/aws/iam/private/adapter.d.ts +21 -0
  274. package/lib/aws/iam/private/adapter.js +51 -0
  275. package/lib/aws/iam/private/assume-role-policy.d.ts +8 -0
  276. package/lib/aws/iam/private/assume-role-policy.js +27 -0
  277. package/lib/aws/iam/private/comparable-principal.d.ts +6 -0
  278. package/lib/aws/iam/private/comparable-principal.js +20 -0
  279. package/lib/aws/iam/private/immutable-role.d.ts +43 -0
  280. package/lib/aws/iam/private/immutable-role.js +76 -0
  281. package/lib/aws/iam/private/imported-role.d.ts +49 -0
  282. package/lib/aws/iam/private/imported-role.js +103 -0
  283. package/lib/aws/iam/private/merge-statements.d.ts +44 -0
  284. package/lib/aws/iam/private/merge-statements.js +214 -0
  285. package/lib/aws/iam/private/postprocess-policy-document.d.ts +15 -0
  286. package/lib/aws/iam/private/postprocess-policy-document.js +102 -0
  287. package/lib/aws/iam/private/util.d.ts +37 -0
  288. package/lib/aws/iam/private/util.js +87 -0
  289. package/lib/aws/iam/role.d.ts +425 -0
  290. package/lib/aws/iam/role.js +407 -0
  291. package/lib/aws/iam/saml-provider.d.ts +79 -0
  292. package/lib/aws/iam/saml-provider.js +79 -0
  293. package/lib/aws/iam/unknown-principal.d.ts +32 -0
  294. package/lib/aws/iam/unknown-principal.js +45 -0
  295. package/lib/aws/iam/utils.d.ts +12 -0
  296. package/lib/aws/iam/utils.js +41 -0
  297. package/lib/aws/index.d.ts +13 -0
  298. package/lib/aws/index.js +34 -0
  299. package/lib/aws/log-retention.d.ts +97 -0
  300. package/lib/aws/log-retention.js +103 -0
  301. package/lib/aws/network/index.d.ts +4 -0
  302. package/lib/aws/network/index.js +21 -0
  303. package/lib/aws/network/network.d.ts +77 -0
  304. package/lib/aws/network/network.js +3 -0
  305. package/lib/aws/network/simple-ipv4-vpc.d.ts +84 -0
  306. package/lib/aws/network/simple-ipv4-vpc.js +236 -0
  307. package/lib/aws/network/subnet-group.d.ts +42 -0
  308. package/lib/aws/network/subnet-group.js +72 -0
  309. package/lib/aws/network/subnet.d.ts +95 -0
  310. package/lib/aws/network/subnet.js +123 -0
  311. package/lib/aws/notify/archive.d.ts +77 -0
  312. package/lib/aws/notify/archive.js +62 -0
  313. package/lib/aws/notify/connection.d.ts +276 -0
  314. package/lib/aws/notify/connection.js +261 -0
  315. package/lib/aws/notify/event-bus.d.ts +298 -0
  316. package/lib/aws/notify/event-bus.js +326 -0
  317. package/lib/aws/notify/event-pattern.d.ts +220 -0
  318. package/lib/aws/notify/event-pattern.js +197 -0
  319. package/lib/aws/notify/index.d.ts +15 -0
  320. package/lib/aws/notify/index.js +35 -0
  321. package/lib/aws/notify/input.d.ts +126 -0
  322. package/lib/aws/notify/input.js +282 -0
  323. package/lib/aws/notify/kinesis-canned-metrics.generated.d.ts +68 -0
  324. package/lib/aws/notify/kinesis-canned-metrics.generated.js +103 -0
  325. package/lib/aws/notify/kinesis-fixed-canned-metrics.d.ts +195 -0
  326. package/lib/aws/notify/kinesis-fixed-canned-metrics.js +155 -0
  327. package/lib/aws/notify/kinesis-stream.d.ts +705 -0
  328. package/lib/aws/notify/kinesis-stream.js +541 -0
  329. package/lib/aws/notify/on-event-options.d.ts +54 -0
  330. package/lib/aws/notify/on-event-options.js +3 -0
  331. package/lib/aws/notify/queue-config.generated.d.ts +85 -0
  332. package/lib/aws/notify/queue-config.generated.js +3 -0
  333. package/lib/aws/notify/queue-policy.d.ts +35 -0
  334. package/lib/aws/notify/queue-policy.js +39 -0
  335. package/lib/aws/notify/queue.d.ts +355 -0
  336. package/lib/aws/notify/queue.js +305 -0
  337. package/lib/aws/notify/resource-policy.d.ts +41 -0
  338. package/lib/aws/notify/resource-policy.js +43 -0
  339. package/lib/aws/notify/rule.d.ts +153 -0
  340. package/lib/aws/notify/rule.js +227 -0
  341. package/lib/aws/notify/schedule.d.ts +83 -0
  342. package/lib/aws/notify/schedule.js +116 -0
  343. package/lib/aws/notify/target.d.ts +102 -0
  344. package/lib/aws/notify/target.js +3 -0
  345. package/lib/aws/notify/targets/event-bus.d.ts +39 -0
  346. package/lib/aws/notify/targets/event-bus.js +40 -0
  347. package/lib/aws/notify/targets/function.d.ts +31 -0
  348. package/lib/aws/notify/targets/function.js +36 -0
  349. package/lib/aws/notify/targets/index.d.ts +6 -0
  350. package/lib/aws/notify/targets/index.js +37 -0
  351. package/lib/aws/notify/targets/log-group.d.ts +89 -0
  352. package/lib/aws/notify/targets/log-group.js +110 -0
  353. package/lib/aws/notify/targets/sqs.d.ts +45 -0
  354. package/lib/aws/notify/targets/sqs.js +73 -0
  355. package/lib/aws/notify/targets/state-machine.d.ts +36 -0
  356. package/lib/aws/notify/targets/state-machine.js +39 -0
  357. package/lib/aws/notify/targets/util.d.ts +71 -0
  358. package/lib/aws/notify/targets/util.js +130 -0
  359. package/lib/aws/notify/util.d.ts +13 -0
  360. package/lib/aws/notify/util.js +69 -0
  361. package/lib/aws/provider-config.generated.d.ts +220 -0
  362. package/lib/aws/provider-config.generated.js +3 -0
  363. package/lib/aws/storage/bucket-destination.d.ts +41 -0
  364. package/lib/aws/storage/bucket-destination.js +13 -0
  365. package/lib/aws/storage/bucket-notifications.d.ts +58 -0
  366. package/lib/aws/storage/bucket-notifications.js +169 -0
  367. package/lib/aws/storage/bucket-perms.d.ts +9 -0
  368. package/lib/aws/storage/bucket-perms.js +33 -0
  369. package/lib/aws/storage/bucket-policy.d.ts +51 -0
  370. package/lib/aws/storage/bucket-policy.js +53 -0
  371. package/lib/aws/storage/bucket-source.d.ts +41 -0
  372. package/lib/aws/storage/bucket-source.js +79 -0
  373. package/lib/aws/storage/bucket.d.ts +941 -0
  374. package/lib/aws/storage/bucket.js +869 -0
  375. package/lib/aws/storage/cors-config.generated.d.ts +57 -0
  376. package/lib/aws/storage/cors-config.generated.js +3 -0
  377. package/lib/aws/storage/cors-rule-config.generated.d.ts +38 -0
  378. package/lib/aws/storage/cors-rule-config.generated.js +3 -0
  379. package/lib/aws/storage/index.d.ts +12 -0
  380. package/lib/aws/storage/index.js +31 -0
  381. package/lib/aws/storage/lifecycle-config.generated.d.ts +55 -0
  382. package/lib/aws/storage/lifecycle-config.generated.js +3 -0
  383. package/lib/aws/storage/notification-targets/function.d.ts +11 -0
  384. package/lib/aws/storage/notification-targets/function.js +48 -0
  385. package/lib/aws/storage/notification-targets/index.d.ts +2 -0
  386. package/lib/aws/storage/notification-targets/index.js +21 -0
  387. package/lib/aws/storage/notification-targets/queue.d.ts +15 -0
  388. package/lib/aws/storage/notification-targets/queue.js +58 -0
  389. package/lib/aws/storage/origin-access-identity.d.ts +91 -0
  390. package/lib/aws/storage/origin-access-identity.js +76 -0
  391. package/lib/aws/storage/util.d.ts +40 -0
  392. package/lib/aws/storage/util.js +85 -0
  393. package/lib/aws/storage/website-config.generated.d.ts +73 -0
  394. package/lib/aws/storage/website-config.generated.js +3 -0
  395. package/lib/aws/util.d.ts +4 -0
  396. package/lib/aws/util.js +25 -0
  397. package/lib/construct-base.d.ts +69 -0
  398. package/lib/construct-base.js +89 -0
  399. package/lib/duration.d.ts +160 -0
  400. package/lib/duration.js +327 -0
  401. package/lib/index.d.ts +5 -0
  402. package/lib/index.js +24 -0
  403. package/lib/private/index.d.ts +2 -0
  404. package/lib/private/index.js +19 -0
  405. package/lib/private/terraform-dependables-aspect.d.ts +20 -0
  406. package/lib/private/terraform-dependables-aspect.js +95 -0
  407. package/lib/private/unique-resource-name.d.ts +9 -0
  408. package/lib/private/unique-resource-name.js +145 -0
  409. package/lib/size.d.ts +146 -0
  410. package/lib/size.js +220 -0
  411. package/lib/stack-base.d.ts +188 -0
  412. package/lib/stack-base.js +183 -0
  413. package/lib/token.d.ts +32 -0
  414. package/lib/token.js +54 -0
  415. package/node_modules/camel-case/LICENSE +21 -0
  416. package/node_modules/camel-case/README.md +47 -0
  417. package/node_modules/camel-case/dist/index.d.ts +5 -0
  418. package/node_modules/camel-case/dist/index.js +23 -0
  419. package/node_modules/camel-case/dist/index.js.map +1 -0
  420. package/node_modules/camel-case/dist/index.spec.d.ts +1 -0
  421. package/node_modules/camel-case/dist/index.spec.js +26 -0
  422. package/node_modules/camel-case/dist/index.spec.js.map +1 -0
  423. package/node_modules/camel-case/dist.es2015/index.d.ts +5 -0
  424. package/node_modules/camel-case/dist.es2015/index.js +17 -0
  425. package/node_modules/camel-case/dist.es2015/index.js.map +1 -0
  426. package/node_modules/camel-case/dist.es2015/index.spec.d.ts +1 -0
  427. package/node_modules/camel-case/dist.es2015/index.spec.js +24 -0
  428. package/node_modules/camel-case/dist.es2015/index.spec.js.map +1 -0
  429. package/node_modules/camel-case/package.json +89 -0
  430. package/node_modules/capital-case/LICENSE +21 -0
  431. package/node_modules/capital-case/README.md +37 -0
  432. package/node_modules/capital-case/dist/index.d.ts +4 -0
  433. package/node_modules/capital-case/dist/index.js +16 -0
  434. package/node_modules/capital-case/dist/index.js.map +1 -0
  435. package/node_modules/capital-case/dist/index.spec.d.ts +1 -0
  436. package/node_modules/capital-case/dist/index.spec.js +24 -0
  437. package/node_modules/capital-case/dist/index.spec.js.map +1 -0
  438. package/node_modules/capital-case/dist.es2015/index.d.ts +4 -0
  439. package/node_modules/capital-case/dist.es2015/index.js +11 -0
  440. package/node_modules/capital-case/dist.es2015/index.js.map +1 -0
  441. package/node_modules/capital-case/dist.es2015/index.spec.d.ts +1 -0
  442. package/node_modules/capital-case/dist.es2015/index.spec.js +22 -0
  443. package/node_modules/capital-case/dist.es2015/index.spec.js.map +1 -0
  444. package/node_modules/capital-case/package.json +90 -0
  445. package/node_modules/change-case/LICENSE +21 -0
  446. package/node_modules/change-case/README.md +44 -0
  447. package/node_modules/change-case/dist/index.d.ts +11 -0
  448. package/node_modules/change-case/dist/index.js +15 -0
  449. package/node_modules/change-case/dist/index.js.map +1 -0
  450. package/node_modules/change-case/dist/index.spec.d.ts +1 -0
  451. package/node_modules/change-case/dist/index.spec.js +9 -0
  452. package/node_modules/change-case/dist/index.spec.js.map +1 -0
  453. package/node_modules/change-case/dist.es2015/index.d.ts +11 -0
  454. package/node_modules/change-case/dist.es2015/index.js +12 -0
  455. package/node_modules/change-case/dist.es2015/index.js.map +1 -0
  456. package/node_modules/change-case/dist.es2015/index.spec.d.ts +1 -0
  457. package/node_modules/change-case/dist.es2015/index.spec.js +7 -0
  458. package/node_modules/change-case/dist.es2015/index.spec.js.map +1 -0
  459. package/node_modules/change-case/package.json +101 -0
  460. package/node_modules/constant-case/LICENSE +21 -0
  461. package/node_modules/constant-case/README.md +37 -0
  462. package/node_modules/constant-case/dist/index.d.ts +3 -0
  463. package/node_modules/constant-case/dist/index.js +12 -0
  464. package/node_modules/constant-case/dist/index.js.map +1 -0
  465. package/node_modules/constant-case/dist/index.spec.d.ts +1 -0
  466. package/node_modules/constant-case/dist/index.spec.js +26 -0
  467. package/node_modules/constant-case/dist/index.spec.js.map +1 -0
  468. package/node_modules/constant-case/dist.es2015/index.d.ts +3 -0
  469. package/node_modules/constant-case/dist.es2015/index.js +8 -0
  470. package/node_modules/constant-case/dist.es2015/index.js.map +1 -0
  471. package/node_modules/constant-case/dist.es2015/index.spec.d.ts +1 -0
  472. package/node_modules/constant-case/dist.es2015/index.spec.js +24 -0
  473. package/node_modules/constant-case/dist.es2015/index.spec.js.map +1 -0
  474. package/node_modules/constant-case/package.json +90 -0
  475. package/node_modules/dot-case/LICENSE +21 -0
  476. package/node_modules/dot-case/README.md +37 -0
  477. package/node_modules/dot-case/dist/index.d.ts +3 -0
  478. package/node_modules/dot-case/dist/index.js +11 -0
  479. package/node_modules/dot-case/dist/index.js.map +1 -0
  480. package/node_modules/dot-case/dist/index.spec.d.ts +1 -0
  481. package/node_modules/dot-case/dist/index.spec.js +26 -0
  482. package/node_modules/dot-case/dist/index.spec.js.map +1 -0
  483. package/node_modules/dot-case/dist.es2015/index.d.ts +3 -0
  484. package/node_modules/dot-case/dist.es2015/index.js +7 -0
  485. package/node_modules/dot-case/dist.es2015/index.js.map +1 -0
  486. package/node_modules/dot-case/dist.es2015/index.spec.d.ts +1 -0
  487. package/node_modules/dot-case/dist.es2015/index.spec.js +24 -0
  488. package/node_modules/dot-case/dist.es2015/index.spec.js.map +1 -0
  489. package/node_modules/dot-case/package.json +89 -0
  490. package/node_modules/esbuild-wasm/LICENSE.md +21 -0
  491. package/node_modules/esbuild-wasm/README.md +3 -0
  492. package/node_modules/esbuild-wasm/bin/esbuild +91 -0
  493. package/node_modules/esbuild-wasm/esbuild.wasm +0 -0
  494. package/node_modules/esbuild-wasm/esm/browser.d.ts +705 -0
  495. package/node_modules/esbuild-wasm/esm/browser.js +2370 -0
  496. package/node_modules/esbuild-wasm/esm/browser.min.js +20 -0
  497. package/node_modules/esbuild-wasm/lib/browser.d.ts +705 -0
  498. package/node_modules/esbuild-wasm/lib/browser.js +2415 -0
  499. package/node_modules/esbuild-wasm/lib/browser.min.js +22 -0
  500. package/node_modules/esbuild-wasm/lib/main.d.ts +705 -0
  501. package/node_modules/esbuild-wasm/lib/main.js +2051 -0
  502. package/node_modules/esbuild-wasm/package.json +19 -0
  503. package/node_modules/esbuild-wasm/wasm_exec.js +561 -0
  504. package/node_modules/esbuild-wasm/wasm_exec_node.js +39 -0
  505. package/node_modules/header-case/LICENSE +21 -0
  506. package/node_modules/header-case/README.md +37 -0
  507. package/node_modules/header-case/dist/index.d.ts +3 -0
  508. package/node_modules/header-case/dist/index.js +11 -0
  509. package/node_modules/header-case/dist/index.js.map +1 -0
  510. package/node_modules/header-case/dist/index.spec.d.ts +1 -0
  511. package/node_modules/header-case/dist/index.spec.js +24 -0
  512. package/node_modules/header-case/dist/index.spec.js.map +1 -0
  513. package/node_modules/header-case/dist.es2015/index.d.ts +3 -0
  514. package/node_modules/header-case/dist.es2015/index.js +7 -0
  515. package/node_modules/header-case/dist.es2015/index.js.map +1 -0
  516. package/node_modules/header-case/dist.es2015/index.spec.d.ts +1 -0
  517. package/node_modules/header-case/dist.es2015/index.spec.js +22 -0
  518. package/node_modules/header-case/dist.es2015/index.spec.js.map +1 -0
  519. package/node_modules/header-case/package.json +89 -0
  520. package/node_modules/lower-case/LICENSE +21 -0
  521. package/node_modules/lower-case/README.md +35 -0
  522. package/node_modules/lower-case/dist/index.d.ts +8 -0
  523. package/node_modules/lower-case/dist/index.js +53 -0
  524. package/node_modules/lower-case/dist/index.js.map +1 -0
  525. package/node_modules/lower-case/dist/index.spec.d.ts +1 -0
  526. package/node_modules/lower-case/dist/index.spec.js +36 -0
  527. package/node_modules/lower-case/dist/index.spec.js.map +1 -0
  528. package/node_modules/lower-case/dist.es2015/index.d.ts +8 -0
  529. package/node_modules/lower-case/dist.es2015/index.js +48 -0
  530. package/node_modules/lower-case/dist.es2015/index.js.map +1 -0
  531. package/node_modules/lower-case/dist.es2015/index.spec.d.ts +1 -0
  532. package/node_modules/lower-case/dist.es2015/index.spec.js +34 -0
  533. package/node_modules/lower-case/dist.es2015/index.spec.js.map +1 -0
  534. package/node_modules/lower-case/package.json +87 -0
  535. package/node_modules/mime-db/HISTORY.md +507 -0
  536. package/node_modules/mime-db/LICENSE +23 -0
  537. package/node_modules/mime-db/README.md +100 -0
  538. package/node_modules/mime-db/db.json +8519 -0
  539. package/node_modules/mime-db/index.js +12 -0
  540. package/node_modules/mime-db/package.json +60 -0
  541. package/node_modules/mime-types/HISTORY.md +397 -0
  542. package/node_modules/mime-types/LICENSE +23 -0
  543. package/node_modules/mime-types/README.md +113 -0
  544. package/node_modules/mime-types/index.js +188 -0
  545. package/node_modules/mime-types/package.json +44 -0
  546. package/node_modules/no-case/LICENSE +21 -0
  547. package/node_modules/no-case/README.md +37 -0
  548. package/node_modules/no-case/dist/index.d.ts +10 -0
  549. package/node_modules/no-case/dist/index.js +35 -0
  550. package/node_modules/no-case/dist/index.js.map +1 -0
  551. package/node_modules/no-case/dist/index.spec.d.ts +1 -0
  552. package/node_modules/no-case/dist/index.spec.js +59 -0
  553. package/node_modules/no-case/dist/index.spec.js.map +1 -0
  554. package/node_modules/no-case/dist.es2015/index.d.ts +10 -0
  555. package/node_modules/no-case/dist.es2015/index.js +31 -0
  556. package/node_modules/no-case/dist.es2015/index.js.map +1 -0
  557. package/node_modules/no-case/dist.es2015/index.spec.d.ts +1 -0
  558. package/node_modules/no-case/dist.es2015/index.spec.js +57 -0
  559. package/node_modules/no-case/dist.es2015/index.spec.js.map +1 -0
  560. package/node_modules/no-case/package.json +85 -0
  561. package/node_modules/param-case/LICENSE +21 -0
  562. package/node_modules/param-case/README.md +37 -0
  563. package/node_modules/param-case/dist/index.d.ts +3 -0
  564. package/node_modules/param-case/dist/index.js +11 -0
  565. package/node_modules/param-case/dist/index.js.map +1 -0
  566. package/node_modules/param-case/dist/index.spec.d.ts +1 -0
  567. package/node_modules/param-case/dist/index.spec.js +24 -0
  568. package/node_modules/param-case/dist/index.spec.js.map +1 -0
  569. package/node_modules/param-case/dist.es2015/index.d.ts +3 -0
  570. package/node_modules/param-case/dist.es2015/index.js +7 -0
  571. package/node_modules/param-case/dist.es2015/index.js.map +1 -0
  572. package/node_modules/param-case/dist.es2015/index.spec.d.ts +1 -0
  573. package/node_modules/param-case/dist.es2015/index.spec.js +22 -0
  574. package/node_modules/param-case/dist.es2015/index.spec.js.map +1 -0
  575. package/node_modules/param-case/package.json +91 -0
  576. package/node_modules/pascal-case/LICENSE +21 -0
  577. package/node_modules/pascal-case/README.md +47 -0
  578. package/node_modules/pascal-case/dist/index.d.ts +5 -0
  579. package/node_modules/pascal-case/dist/index.js +24 -0
  580. package/node_modules/pascal-case/dist/index.js.map +1 -0
  581. package/node_modules/pascal-case/dist/index.spec.d.ts +1 -0
  582. package/node_modules/pascal-case/dist/index.spec.js +25 -0
  583. package/node_modules/pascal-case/dist/index.spec.js.map +1 -0
  584. package/node_modules/pascal-case/dist.es2015/index.d.ts +5 -0
  585. package/node_modules/pascal-case/dist.es2015/index.js +18 -0
  586. package/node_modules/pascal-case/dist.es2015/index.js.map +1 -0
  587. package/node_modules/pascal-case/dist.es2015/index.spec.d.ts +1 -0
  588. package/node_modules/pascal-case/dist.es2015/index.spec.js +23 -0
  589. package/node_modules/pascal-case/dist.es2015/index.spec.js.map +1 -0
  590. package/node_modules/pascal-case/package.json +90 -0
  591. package/node_modules/path-case/LICENSE +21 -0
  592. package/node_modules/path-case/README.md +37 -0
  593. package/node_modules/path-case/dist/index.d.ts +3 -0
  594. package/node_modules/path-case/dist/index.js +11 -0
  595. package/node_modules/path-case/dist/index.js.map +1 -0
  596. package/node_modules/path-case/dist/index.spec.d.ts +1 -0
  597. package/node_modules/path-case/dist/index.spec.js +24 -0
  598. package/node_modules/path-case/dist/index.spec.js.map +1 -0
  599. package/node_modules/path-case/dist.es2015/index.d.ts +3 -0
  600. package/node_modules/path-case/dist.es2015/index.js +7 -0
  601. package/node_modules/path-case/dist.es2015/index.js.map +1 -0
  602. package/node_modules/path-case/dist.es2015/index.spec.d.ts +1 -0
  603. package/node_modules/path-case/dist.es2015/index.spec.js +22 -0
  604. package/node_modules/path-case/dist.es2015/index.spec.js.map +1 -0
  605. package/node_modules/path-case/package.json +88 -0
  606. package/node_modules/sentence-case/LICENSE +21 -0
  607. package/node_modules/sentence-case/README.md +37 -0
  608. package/node_modules/sentence-case/dist/index.d.ts +4 -0
  609. package/node_modules/sentence-case/dist/index.js +19 -0
  610. package/node_modules/sentence-case/dist/index.js.map +1 -0
  611. package/node_modules/sentence-case/dist/index.spec.d.ts +1 -0
  612. package/node_modules/sentence-case/dist/index.spec.js +24 -0
  613. package/node_modules/sentence-case/dist/index.spec.js.map +1 -0
  614. package/node_modules/sentence-case/dist.es2015/index.d.ts +4 -0
  615. package/node_modules/sentence-case/dist.es2015/index.js +14 -0
  616. package/node_modules/sentence-case/dist.es2015/index.js.map +1 -0
  617. package/node_modules/sentence-case/dist.es2015/index.spec.d.ts +1 -0
  618. package/node_modules/sentence-case/dist.es2015/index.spec.js +22 -0
  619. package/node_modules/sentence-case/dist.es2015/index.spec.js.map +1 -0
  620. package/node_modules/sentence-case/package.json +89 -0
  621. package/node_modules/snake-case/LICENSE +21 -0
  622. package/node_modules/snake-case/README.md +37 -0
  623. package/node_modules/snake-case/dist/index.d.ts +3 -0
  624. package/node_modules/snake-case/dist/index.js +11 -0
  625. package/node_modules/snake-case/dist/index.js.map +1 -0
  626. package/node_modules/snake-case/dist/index.spec.d.ts +1 -0
  627. package/node_modules/snake-case/dist/index.spec.js +25 -0
  628. package/node_modules/snake-case/dist/index.spec.js.map +1 -0
  629. package/node_modules/snake-case/dist.es2015/index.d.ts +3 -0
  630. package/node_modules/snake-case/dist.es2015/index.js +7 -0
  631. package/node_modules/snake-case/dist.es2015/index.js.map +1 -0
  632. package/node_modules/snake-case/dist.es2015/index.spec.d.ts +1 -0
  633. package/node_modules/snake-case/dist.es2015/index.spec.js +23 -0
  634. package/node_modules/snake-case/dist.es2015/index.spec.js.map +1 -0
  635. package/node_modules/snake-case/package.json +90 -0
  636. package/node_modules/tslib/CopyrightNotice.txt +15 -0
  637. package/node_modules/tslib/LICENSE.txt +12 -0
  638. package/node_modules/tslib/README.md +164 -0
  639. package/node_modules/tslib/SECURITY.md +41 -0
  640. package/node_modules/tslib/modules/index.d.ts +37 -0
  641. package/node_modules/tslib/modules/index.js +68 -0
  642. package/node_modules/tslib/modules/package.json +3 -0
  643. package/node_modules/tslib/package.json +47 -0
  644. package/node_modules/tslib/tslib.d.ts +453 -0
  645. package/node_modules/tslib/tslib.es6.html +1 -0
  646. package/node_modules/tslib/tslib.es6.js +374 -0
  647. package/node_modules/tslib/tslib.es6.mjs +373 -0
  648. package/node_modules/tslib/tslib.html +1 -0
  649. package/node_modules/tslib/tslib.js +424 -0
  650. package/node_modules/upper-case/README.md +34 -0
  651. package/node_modules/upper-case/dist/index.d.ts +8 -0
  652. package/node_modules/upper-case/dist/index.js +49 -0
  653. package/node_modules/upper-case/dist/index.js.map +1 -0
  654. package/node_modules/upper-case/dist/index.spec.d.ts +1 -0
  655. package/node_modules/upper-case/dist/index.spec.js +34 -0
  656. package/node_modules/upper-case/dist/index.spec.js.map +1 -0
  657. package/node_modules/upper-case/dist.es2015/index.d.ts +8 -0
  658. package/node_modules/upper-case/dist.es2015/index.js +44 -0
  659. package/node_modules/upper-case/dist.es2015/index.js.map +1 -0
  660. package/node_modules/upper-case/dist.es2015/index.spec.d.ts +1 -0
  661. package/node_modules/upper-case/dist.es2015/index.spec.js +32 -0
  662. package/node_modules/upper-case/dist.es2015/index.spec.js.map +1 -0
  663. package/node_modules/upper-case/package.json +86 -0
  664. package/node_modules/upper-case-first/LICENSE +21 -0
  665. package/node_modules/upper-case-first/README.md +32 -0
  666. package/node_modules/upper-case-first/dist/index.d.ts +4 -0
  667. package/node_modules/upper-case-first/dist/index.js +11 -0
  668. package/node_modules/upper-case-first/dist/index.js.map +1 -0
  669. package/node_modules/upper-case-first/dist/index.spec.d.ts +1 -0
  670. package/node_modules/upper-case-first/dist/index.spec.js +20 -0
  671. package/node_modules/upper-case-first/dist/index.spec.js.map +1 -0
  672. package/node_modules/upper-case-first/dist.es2015/index.d.ts +4 -0
  673. package/node_modules/upper-case-first/dist.es2015/index.js +7 -0
  674. package/node_modules/upper-case-first/dist.es2015/index.js.map +1 -0
  675. package/node_modules/upper-case-first/dist.es2015/index.spec.d.ts +1 -0
  676. package/node_modules/upper-case-first/dist.es2015/index.spec.js +18 -0
  677. package/node_modules/upper-case-first/dist.es2015/index.spec.js.map +1 -0
  678. package/node_modules/upper-case-first/package.json +87 -0
  679. package/package.json +152 -0
  680. package/setup.js +2 -0
@@ -0,0 +1,160 @@
1
+ import { cloudfrontDistribution } from "@cdktf/provider-aws";
2
+ import { Duration } from "../../";
3
+ import { IBucket } from "../storage";
4
+ /**
5
+ * Represents the concept of a CloudFront Origin.
6
+ * You provide one or more origins when creating a Distribution.
7
+ */
8
+ export interface IOrigin {
9
+ /**
10
+ * The method called when a given Origin is added
11
+ * (for the first time) to a Distribution.
12
+ */
13
+ render(id: string): cloudfrontDistribution.CloudfrontDistributionOrigin;
14
+ }
15
+ /**
16
+ * Options to define an Origin.
17
+ */
18
+ export interface OriginOptions {
19
+ /**
20
+ * The number of seconds that CloudFront waits when trying to establish a connection to the origin.
21
+ * Valid values are 1-10 seconds, inclusive.
22
+ *
23
+ * @default Duration.seconds(10)
24
+ */
25
+ readonly connectionTimeout?: Duration;
26
+ /**
27
+ * The number of times that CloudFront attempts to connect to the origin; valid values are 1, 2, or 3 attempts.
28
+ *
29
+ * @default 3
30
+ */
31
+ readonly connectionAttempts?: number;
32
+ /**
33
+ * A list of HTTP header names and values that CloudFront adds to requests it sends to the origin.
34
+ *
35
+ * @default {}
36
+ */
37
+ readonly customHeaders?: Record<string, string>;
38
+ }
39
+ /**
40
+ * Properties to define an Origin.
41
+ */
42
+ export interface OriginProps extends OriginOptions {
43
+ /**
44
+ * An optional path that CloudFront appends to the origin domain name when CloudFront requests content from the origin.
45
+ * Must begin, but not end, with '/' (e.g., '/production/images').
46
+ *
47
+ * @default '/'
48
+ */
49
+ readonly originPath?: string;
50
+ }
51
+ /**
52
+ * Defines what protocols CloudFront will use to connect to an origin.
53
+ */
54
+ export declare enum OriginProtocolPolicy {
55
+ /** Connect on HTTP only */
56
+ HTTP_ONLY = "http-only",
57
+ /** Connect with the same protocol as the viewer */
58
+ MATCH_VIEWER = "match-viewer",
59
+ /** Connect on HTTPS only */
60
+ HTTPS_ONLY = "https-only"
61
+ }
62
+ export declare enum OriginSslPolicy {
63
+ SSL_V3 = "SSLv3",
64
+ TLS_V1 = "TLSv1",
65
+ TLS_V1_1 = "TLSv1.1",
66
+ TLS_V1_2 = "TLSv1.2"
67
+ }
68
+ /**
69
+ * Represents a distribution origin, that describes the Amazon S3 bucket, HTTP server (for example, a web server),
70
+ * Amazon MediaStore, or other server from which CloudFront gets your files.
71
+ */
72
+ export declare abstract class OriginBase implements IOrigin {
73
+ private readonly domainName;
74
+ private readonly originPath?;
75
+ private readonly connectionTimeout?;
76
+ private readonly connectionAttempts?;
77
+ private readonly customHeaders?;
78
+ protected constructor(domainName: string, props?: OriginProps);
79
+ /**
80
+ * Called internally by the Distribution to render the origin.
81
+ */
82
+ render(originId: string): cloudfrontDistribution.CloudfrontDistributionOrigin;
83
+ protected renderS3OriginConfig(): cloudfrontDistribution.CloudfrontDistributionOriginS3OriginConfig | undefined;
84
+ protected renderCustomOriginConfig(): cloudfrontDistribution.CloudfrontDistributionOriginCustomOriginConfig | undefined;
85
+ private renderCustomHeaders;
86
+ /**
87
+ * If the path is defined, it must start with a '/' and not end with a '/'.
88
+ * This method takes in the originPath, and returns it back (if undefined) or adds/removes the '/' as appropriate.
89
+ */
90
+ private validateOriginPath;
91
+ }
92
+ /**
93
+ * An Origin that is backed by an S3 bucket.
94
+ *
95
+ * If the bucket is configured for website hosting, this origin will be configured to use the bucket as an
96
+ * HTTP server origin and will use the bucket's configured website redirects and error handling. Otherwise,
97
+ * the origin is created as a bucket origin and will use CloudFront's redirect and error handling.
98
+ */
99
+ export declare class S3Origin implements IOrigin {
100
+ private readonly origin;
101
+ constructor(bucket: IBucket, props?: OriginProps);
102
+ render(originId: string): cloudfrontDistribution.CloudfrontDistributionOrigin;
103
+ }
104
+ /**
105
+ * Properties for an Origin backed by an S3 website-configured bucket, load balancer, or custom HTTP server.
106
+ */
107
+ export interface HttpOriginProps extends OriginProps {
108
+ /**
109
+ * Specifies the protocol (HTTP or HTTPS) that CloudFront uses to connect to the origin.
110
+ *
111
+ * @default OriginProtocolPolicy.HTTPS_ONLY
112
+ */
113
+ readonly protocolPolicy?: OriginProtocolPolicy;
114
+ /**
115
+ * The SSL versions to use when interacting with the origin.
116
+ *
117
+ * @default OriginSslPolicy.TLS_V1_2
118
+ */
119
+ readonly originSslProtocols?: OriginSslPolicy[];
120
+ /**
121
+ * The HTTP port that CloudFront uses to connect to the origin.
122
+ *
123
+ * @default 80
124
+ */
125
+ readonly httpPort?: number;
126
+ /**
127
+ * The HTTPS port that CloudFront uses to connect to the origin.
128
+ *
129
+ * @default 443
130
+ */
131
+ readonly httpsPort?: number;
132
+ /**
133
+ * Specifies how long, in seconds, CloudFront waits for a response from the origin, also known as the origin response timeout.
134
+ * The valid range is from 1 to 180 seconds, inclusive.
135
+ *
136
+ * Note that values over 60 seconds are possible only after a limit increase request for the origin response timeout quota
137
+ * has been approved in the target account; otherwise, values over 60 seconds will produce an error at deploy time.
138
+ *
139
+ * @default Duration.seconds(30)
140
+ */
141
+ readonly readTimeout?: Duration;
142
+ /**
143
+ * Specifies how long, in seconds, CloudFront persists its connection to the origin.
144
+ * The valid range is from 1 to 180 seconds, inclusive.
145
+ *
146
+ * Note that values over 60 seconds are possible only after a limit increase request for the origin response timeout quota
147
+ * has been approved in the target account; otherwise, values over 60 seconds will produce an error at deploy time.
148
+ *
149
+ * @default Duration.seconds(5)
150
+ */
151
+ readonly keepaliveTimeout?: Duration;
152
+ }
153
+ /**
154
+ * An Origin for an HTTP server or S3 bucket configured for website hosting.
155
+ */
156
+ export declare class HttpOrigin extends OriginBase {
157
+ private readonly props;
158
+ constructor(domainName: string, props?: HttpOriginProps);
159
+ protected renderCustomOriginConfig(): cloudfrontDistribution.CloudfrontDistributionOriginCustomOriginConfig | undefined;
160
+ }
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ var _a, _b, _c;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.HttpOrigin = exports.S3Origin = exports.OriginBase = exports.OriginSslPolicy = exports.OriginProtocolPolicy = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const cdktf_1 = require("cdktf");
7
+ /**
8
+ * Defines what protocols CloudFront will use to connect to an origin.
9
+ */
10
+ var OriginProtocolPolicy;
11
+ (function (OriginProtocolPolicy) {
12
+ /** Connect on HTTP only */
13
+ OriginProtocolPolicy["HTTP_ONLY"] = "http-only";
14
+ /** Connect with the same protocol as the viewer */
15
+ OriginProtocolPolicy["MATCH_VIEWER"] = "match-viewer";
16
+ /** Connect on HTTPS only */
17
+ OriginProtocolPolicy["HTTPS_ONLY"] = "https-only";
18
+ })(OriginProtocolPolicy || (exports.OriginProtocolPolicy = OriginProtocolPolicy = {}));
19
+ var OriginSslPolicy;
20
+ (function (OriginSslPolicy) {
21
+ OriginSslPolicy["SSL_V3"] = "SSLv3";
22
+ OriginSslPolicy["TLS_V1"] = "TLSv1";
23
+ OriginSslPolicy["TLS_V1_1"] = "TLSv1.1";
24
+ OriginSslPolicy["TLS_V1_2"] = "TLSv1.2";
25
+ })(OriginSslPolicy || (exports.OriginSslPolicy = OriginSslPolicy = {}));
26
+ /**
27
+ * Represents a distribution origin, that describes the Amazon S3 bucket, HTTP server (for example, a web server),
28
+ * Amazon MediaStore, or other server from which CloudFront gets your files.
29
+ */
30
+ class OriginBase {
31
+ constructor(domainName, props = {}) {
32
+ validateIntInRangeOrUndefined("connectionTimeout", 1, 10, props.connectionTimeout?.toSeconds());
33
+ validateIntInRangeOrUndefined("connectionAttempts", 1, 3, props.connectionAttempts, false);
34
+ validateCustomHeaders(props.customHeaders);
35
+ this.domainName = domainName;
36
+ this.originPath = this.validateOriginPath(props.originPath);
37
+ this.connectionTimeout = props.connectionTimeout;
38
+ this.connectionAttempts = props.connectionAttempts;
39
+ this.customHeaders = props.customHeaders;
40
+ }
41
+ /**
42
+ * Called internally by the Distribution to render the origin.
43
+ */
44
+ render(originId) {
45
+ const s3OriginConfig = this.renderS3OriginConfig();
46
+ const customOriginConfig = this.renderCustomOriginConfig();
47
+ if (!s3OriginConfig && !customOriginConfig) {
48
+ throw new Error("Subclass must override and provide either s3OriginConfig or customOriginConfig");
49
+ }
50
+ return {
51
+ originId,
52
+ domainName: this.domainName,
53
+ originPath: this.originPath,
54
+ connectionAttempts: this.connectionAttempts,
55
+ connectionTimeout: this.connectionTimeout?.toSeconds(),
56
+ customHeader: this.renderCustomHeaders(),
57
+ s3OriginConfig,
58
+ customOriginConfig,
59
+ };
60
+ }
61
+ // Overridden by sub-classes to provide S3 origin config.
62
+ renderS3OriginConfig() {
63
+ return undefined;
64
+ }
65
+ // Overridden by sub-classes to provide custom origin config.
66
+ renderCustomOriginConfig() {
67
+ return undefined;
68
+ }
69
+ renderCustomHeaders() {
70
+ if (!this.customHeaders ||
71
+ Object.entries(this.customHeaders).length === 0) {
72
+ return undefined;
73
+ }
74
+ return Object.entries(this.customHeaders).map(([name, value]) => {
75
+ return { name, value };
76
+ });
77
+ }
78
+ /**
79
+ * If the path is defined, it must start with a '/' and not end with a '/'.
80
+ * This method takes in the originPath, and returns it back (if undefined) or adds/removes the '/' as appropriate.
81
+ */
82
+ validateOriginPath(originPath) {
83
+ if (cdktf_1.Token.isUnresolved(originPath)) {
84
+ return originPath;
85
+ }
86
+ if (originPath === undefined) {
87
+ return undefined;
88
+ }
89
+ let path = originPath;
90
+ if (!path.startsWith("/")) {
91
+ path = "/" + path;
92
+ }
93
+ if (path.endsWith("/")) {
94
+ path = path.slice(0, -1);
95
+ }
96
+ return path;
97
+ }
98
+ }
99
+ exports.OriginBase = OriginBase;
100
+ _a = JSII_RTTI_SYMBOL_1;
101
+ OriginBase[_a] = { fqn: "terraconstructs.aws.edge.OriginBase", version: "0.0.8" };
102
+ /**
103
+ * Throws an error if a value is defined and not an integer or not in a range.
104
+ */
105
+ function validateIntInRangeOrUndefined(name, min, max, value, isDuration = true) {
106
+ if (value === undefined) {
107
+ return;
108
+ }
109
+ if (!Number.isInteger(value) || value < min || value > max) {
110
+ const seconds = isDuration ? " seconds" : "";
111
+ throw new Error(`${name}: Must be an int between ${min} and ${max}${seconds} (inclusive); received ${value}.`);
112
+ }
113
+ }
114
+ /**
115
+ * Throws an error if custom header assignment is prohibited by CloudFront.
116
+ * @link: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/add-origin-custom-headers.html#add-origin-custom-headers-denylist
117
+ */
118
+ function validateCustomHeaders(customHeaders) {
119
+ if (!customHeaders || Object.entries(customHeaders).length === 0) {
120
+ return;
121
+ }
122
+ const customHeaderKeys = Object.keys(customHeaders);
123
+ const prohibitedHeaderKeys = [
124
+ "Cache-Control",
125
+ "Connection",
126
+ "Content-Length",
127
+ "Cookie",
128
+ "Host",
129
+ "If-Match",
130
+ "If-Modified-Since",
131
+ "If-None-Match",
132
+ "If-Range",
133
+ "If-Unmodified-Since",
134
+ "Max-Forwards",
135
+ "Pragma",
136
+ "Proxy-Authorization",
137
+ "Proxy-Connection",
138
+ "Range",
139
+ "Request-Range",
140
+ "TE",
141
+ "Trailer",
142
+ "Transfer-Encoding",
143
+ "Upgrade",
144
+ "Via",
145
+ "X-Real-Ip",
146
+ ];
147
+ const prohibitedHeaderKeyPrefixes = ["X-Amz-", "X-Edge-"];
148
+ const prohibitedHeadersKeysMatches = customHeaderKeys.filter((customKey) => {
149
+ return prohibitedHeaderKeys
150
+ .map((prohibitedKey) => prohibitedKey.toLowerCase())
151
+ .includes(customKey.toLowerCase());
152
+ });
153
+ const prohibitedHeaderPrefixMatches = customHeaderKeys.filter((customKey) => {
154
+ return prohibitedHeaderKeyPrefixes.some((prohibitedKeyPrefix) => customKey.toLowerCase().startsWith(prohibitedKeyPrefix.toLowerCase()));
155
+ });
156
+ if (prohibitedHeadersKeysMatches.length !== 0) {
157
+ throw new Error(`The following headers cannot be configured as custom origin headers: ${prohibitedHeadersKeysMatches.join(", ")}`);
158
+ }
159
+ if (prohibitedHeaderPrefixMatches.length !== 0) {
160
+ throw new Error(`The following headers cannot be used as prefixes for custom origin headers: ${prohibitedHeaderPrefixMatches.join(", ")}`);
161
+ }
162
+ }
163
+ // ref: https://github.com/aws/aws-cdk/blob/v2.156.0/packages/aws-cdk-lib/aws-cloudfront-origins/lib/s3-origin.ts
164
+ /**
165
+ * An Origin that is backed by an S3 bucket.
166
+ *
167
+ * If the bucket is configured for website hosting, this origin will be configured to use the bucket as an
168
+ * HTTP server origin and will use the bucket's configured website redirects and error handling. Otherwise,
169
+ * the origin is created as a bucket origin and will use CloudFront's redirect and error handling.
170
+ */
171
+ class S3Origin {
172
+ constructor(bucket, props = {}) {
173
+ this.origin = bucket.isWebsite()
174
+ ? new HttpOrigin(bucket.bucketOutputs.websiteDomainName, {
175
+ protocolPolicy: OriginProtocolPolicy.HTTP_ONLY, // S3 only supports HTTP for website buckets
176
+ ...props,
177
+ })
178
+ : new S3BucketOrigin(bucket, props);
179
+ }
180
+ render(originId) {
181
+ return this.origin.render(originId);
182
+ }
183
+ }
184
+ exports.S3Origin = S3Origin;
185
+ _b = JSII_RTTI_SYMBOL_1;
186
+ S3Origin[_b] = { fqn: "terraconstructs.aws.edge.S3Origin", version: "0.0.8" };
187
+ /**
188
+ * An Origin specific to a S3 bucket (not configured for website hosting).
189
+ *
190
+ * Contains additional logic around bucket permissions and origin access identities.
191
+ */
192
+ class S3BucketOrigin extends OriginBase {
193
+ constructor(bucket, props) {
194
+ super(bucket.bucketOutputs.regionalDomainName, props);
195
+ this.bucket = bucket;
196
+ if (!this.bucket.bucketOutputs.originAccessIdentity) {
197
+ throw new Error("The bucket must have an origin access identity to be used as a CloudFront origin.");
198
+ }
199
+ }
200
+ renderS3OriginConfig() {
201
+ return {
202
+ // constructor throws if undefined, so this is safe?
203
+ originAccessIdentity: this.bucket.bucketOutputs.originAccessIdentity,
204
+ };
205
+ }
206
+ }
207
+ /**
208
+ * An Origin for an HTTP server or S3 bucket configured for website hosting.
209
+ */
210
+ class HttpOrigin extends OriginBase {
211
+ constructor(domainName, props = {}) {
212
+ super(domainName, props);
213
+ this.props = props;
214
+ validateSecondsInRangeOrUndefined("readTimeout", 1, 180, props.readTimeout);
215
+ validateSecondsInRangeOrUndefined("keepaliveTimeout", 1, 180, props.keepaliveTimeout);
216
+ }
217
+ renderCustomOriginConfig() {
218
+ return {
219
+ originSslProtocols: this.props.originSslProtocols ?? [
220
+ OriginSslPolicy.TLS_V1_2,
221
+ ],
222
+ originProtocolPolicy: this.props.protocolPolicy ?? OriginProtocolPolicy.HTTPS_ONLY,
223
+ httpPort: this.props.httpPort ?? 80,
224
+ httpsPort: this.props.httpsPort ?? 443,
225
+ originReadTimeout: this.props.readTimeout?.toSeconds(),
226
+ originKeepaliveTimeout: this.props.keepaliveTimeout?.toSeconds(),
227
+ };
228
+ }
229
+ }
230
+ exports.HttpOrigin = HttpOrigin;
231
+ _c = JSII_RTTI_SYMBOL_1;
232
+ HttpOrigin[_c] = { fqn: "terraconstructs.aws.edge.HttpOrigin", version: "0.0.8" };
233
+ /**
234
+ * Throws an error if a duration is defined and not an integer number of seconds within a range.
235
+ */
236
+ function validateSecondsInRangeOrUndefined(name, min, max, duration) {
237
+ if (duration === undefined) {
238
+ return;
239
+ }
240
+ const value = duration.toSeconds();
241
+ if (!Number.isInteger(value) || value < min || value > max) {
242
+ throw new Error(`${name}: Must be an int between ${min} and ${max} seconds (inclusive); received ${value}.`);
243
+ }
244
+ }
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JpZ2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9lZGdlL29yaWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLGlDQUE4QjtBQTBEOUI7O0dBRUc7QUFDSCxJQUFZLG9CQU9YO0FBUEQsV0FBWSxvQkFBb0I7SUFDOUIsMkJBQTJCO0lBQzNCLCtDQUF1QixDQUFBO0lBQ3ZCLG1EQUFtRDtJQUNuRCxxREFBNkIsQ0FBQTtJQUM3Qiw0QkFBNEI7SUFDNUIsaURBQXlCLENBQUE7QUFDM0IsQ0FBQyxFQVBXLG9CQUFvQixvQ0FBcEIsb0JBQW9CLFFBTy9CO0FBRUQsSUFBWSxlQUtYO0FBTEQsV0FBWSxlQUFlO0lBQ3pCLG1DQUFnQixDQUFBO0lBQ2hCLG1DQUFnQixDQUFBO0lBQ2hCLHVDQUFvQixDQUFBO0lBQ3BCLHVDQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFMVyxlQUFlLCtCQUFmLGVBQWUsUUFLMUI7QUFFRDs7O0dBR0c7QUFDSCxNQUFzQixVQUFVO0lBTTlCLFlBQXNCLFVBQWtCLEVBQUUsUUFBcUIsRUFBRTtRQUMvRCw2QkFBNkIsQ0FDM0IsbUJBQW1CLEVBQ25CLENBQUMsRUFDRCxFQUFFLEVBQ0YsS0FBSyxDQUFDLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxDQUNyQyxDQUFDO1FBQ0YsNkJBQTZCLENBQzNCLG9CQUFvQixFQUNwQixDQUFDLEVBQ0QsQ0FBQyxFQUNELEtBQUssQ0FBQyxrQkFBa0IsRUFDeEIsS0FBSyxDQUNOLENBQUM7UUFDRixxQkFBcUIsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENB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RSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFO1lBQ25DLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxHQUFHO1lBQ3RDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRTtZQUN0RCxzQkFBc0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRTtTQUNqRSxDQUFDO0lBQ0osQ0FBQzs7QUE5QkgsZ0NBK0JDOzs7QUFFRDs7R0FFRztBQUNILFNBQVMsaUNBQWlDLENBQ3hDLElBQVksRUFDWixHQUFXLEVBQ1gsR0FBVyxFQUNYLFFBQW1CO0lBRW5CLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzNCLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxHQUFHLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQzNELE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxJQUFJLDRCQUE0QixHQUFHLFFBQVEsR0FBRyxrQ0FBa0MsS0FBSyxHQUFHLENBQzVGLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHJlZjogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTU2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnQvbGliL29yaWdpbi50c1xuXG5pbXBvcnQgeyBjbG91ZGZyb250RGlzdHJpYnV0aW9uIH0gZnJvbSBcIkBjZGt0Zi9wcm92aWRlci1hd3NcIjtcbmltcG9ydCB7IFRva2VuIH0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9cIjtcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tIFwiLi4vc3RvcmFnZVwiO1xuXG4vL1RPRE86IEFkZCBzdXBwb3J0IGZvciBmYWlsb3ZlciBjb25maWd1cmF0aW9uIHVzZWQgZm9yIE9yaWdpbiBHcm91cHNcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb25jZXB0IG9mIGEgQ2xvdWRGcm9udCBPcmlnaW4uXG4gKiBZb3UgcHJvdmlkZSBvbmUgb3IgbW9yZSBvcmlnaW5zIHdoZW4gY3JlYXRpbmcgYSBEaXN0cmlidXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU9yaWdpbiB7XG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIGNhbGxlZCB3aGVuIGEgZ2l2ZW4gT3JpZ2luIGlzIGFkZGVkXG4gICAqIChmb3IgdGhlIGZpcnN0IHRpbWUpIHRvIGEgRGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVuZGVyKGlkOiBzdHJpbmcpOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW47XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBkZWZpbmUgYW4gT3JpZ2luLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHRoYXQgQ2xvdWRGcm9udCB3YWl0cyB3aGVuIHRyeWluZyB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHRvIHRoZSBvcmlnaW4uXG4gICAqIFZhbGlkIHZhbHVlcyBhcmUgMS0xMCBzZWNvbmRzLCBpbmNsdXNpdmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoMTApXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uVGltZW91dD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgQ2xvdWRGcm9udCBhdHRlbXB0cyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW47IHZhbGlkIHZhbHVlcyBhcmUgMSwgMiwgb3IgMyBhdHRlbXB0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgM1xuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbkF0dGVtcHRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgSFRUUCBoZWFkZXIgbmFtZXMgYW5kIHZhbHVlcyB0aGF0IENsb3VkRnJvbnQgYWRkcyB0byByZXF1ZXN0cyBpdCBzZW5kcyB0byB0aGUgb3JpZ2luLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tSGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYW4gT3JpZ2luLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE9yaWdpblByb3BzIGV4dGVuZHMgT3JpZ2luT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBwYXRoIHRoYXQgQ2xvdWRGcm9udCBhcHBlbmRzIHRvIHRoZSBvcmlnaW4gZG9tYWluIG5hbWUgd2hlbiBDbG91ZEZyb250IHJlcXVlc3RzIGNvbnRlbnQgZnJvbSB0aGUgb3JpZ2luLlxuICAgKiBNdXN0IGJlZ2luLCBidXQgbm90IGVuZCwgd2l0aCAnLycgKGUuZy4sICcvcHJvZHVjdGlvbi9pbWFnZXMnKS5cbiAgICpcbiAgICogQGRlZmF1bHQgJy8nXG4gICAqL1xuICByZWFkb25seSBvcmlnaW5QYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIERlZmluZXMgd2hhdCBwcm90b2NvbHMgQ2xvdWRGcm9udCB3aWxsIHVzZSB0byBjb25uZWN0IHRvIGFuIG9yaWdpbi5cbiAqL1xuZXhwb3J0IGVudW0gT3JpZ2luUHJvdG9jb2xQb2xpY3kge1xuICAvKiogQ29ubmVjdCBvbiBIVFRQIG9ubHkgKi9cbiAgSFRUUF9PTkxZID0gXCJodHRwLW9ubHlcIixcbiAgLyoqIENvbm5lY3Qgd2l0aCB0aGUgc2FtZSBwcm90b2NvbCBhcyB0aGUgdmlld2VyICovXG4gIE1BVENIX1ZJRVdFUiA9IFwibWF0Y2gtdmlld2VyXCIsXG4gIC8qKiBDb25uZWN0IG9uIEhUVFBTIG9ubHkgKi9cbiAgSFRUUFNfT05MWSA9IFwiaHR0cHMtb25seVwiLFxufVxuXG5leHBvcnQgZW51bSBPcmlnaW5Tc2xQb2xpY3kge1xuICBTU0xfVjMgPSBcIlNTTHYzXCIsXG4gIFRMU19WMSA9IFwiVExTdjFcIixcbiAgVExTX1YxXzEgPSBcIlRMU3YxLjFcIixcbiAgVExTX1YxXzIgPSBcIlRMU3YxLjJcIixcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZGlzdHJpYnV0aW9uIG9yaWdpbiwgdGhhdCBkZXNjcmliZXMgdGhlIEFtYXpvbiBTMyBidWNrZXQsIEhUVFAgc2VydmVyIChmb3IgZXhhbXBsZSwgYSB3ZWIgc2VydmVyKSxcbiAqIEFtYXpvbiBNZWRpYVN0b3JlLCBvciBvdGhlciBzZXJ2ZXIgZnJvbSB3aGljaCBDbG91ZEZyb250IGdldHMgeW91ciBmaWxlcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE9yaWdpbkJhc2UgaW1wbGVtZW50cyBJT3JpZ2luIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb21haW5OYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3JpZ2luUGF0aD86IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjb25uZWN0aW9uVGltZW91dD86IER1cmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbm5lY3Rpb25BdHRlbXB0cz86IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21IZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGRvbWFpbk5hbWU6IHN0cmluZywgcHJvcHM6IE9yaWdpblByb3BzID0ge30pIHtcbiAgICB2YWxpZGF0ZUludEluUmFuZ2VPclVuZGVmaW5lZChcbiAgICAgIFwiY29ubmVjdGlvblRpbWVvdXRcIixcbiAgICAgIDEsXG4gICAgICAxMCxcbiAgICAgIHByb3BzLmNvbm5lY3Rpb25UaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICApO1xuICAgIHZhbGlkYXRlSW50SW5SYW5nZU9yVW5kZWZpbmVkKFxuICAgICAgXCJjb25uZWN0aW9uQXR0ZW1wdHNcIixcbiAgICAgIDEsXG4gICAgICAzLFxuICAgICAgcHJvcHMuY29ubmVjdGlvbkF0dGVtcHRzLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgICB2YWxpZGF0ZUN1c3RvbUhlYWRlcnMocHJvcHMuY3VzdG9tSGVhZGVycyk7XG5cbiAgICB0aGlzLmRvbWFpbk5hbWUgPSBkb21haW5OYW1lO1xuICAgIHRoaXMub3JpZ2luUGF0aCA9IHRoaXMudmFsaWRhdGVPcmlnaW5QYXRoKHByb3BzLm9yaWdpblBhdGgpO1xuICAgIHRoaXMuY29ubmVjdGlvblRpbWVvdXQgPSBwcm9wcy5jb25uZWN0aW9uVGltZW91dDtcbiAgICB0aGlzLmNvbm5lY3Rpb25BdHRlbXB0cyA9IHByb3BzLmNvbm5lY3Rpb25BdHRlbXB0cztcbiAgICB0aGlzLmN1c3RvbUhlYWRlcnMgPSBwcm9wcy5jdXN0b21IZWFkZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBpbnRlcm5hbGx5IGJ5IHRoZSBEaXN0cmlidXRpb24gdG8gcmVuZGVyIHRoZSBvcmlnaW4uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKFxuICAgIG9yaWdpbklkOiBzdHJpbmcsXG4gICk6IGNsb3VkZnJvbnREaXN0cmlidXRpb24uQ2xvdWRmcm9udERpc3RyaWJ1dGlvbk9yaWdpbiB7XG4gICAgY29uc3QgczNPcmlnaW5Db25maWcgPSB0aGlzLnJlbmRlclMzT3JpZ2luQ29uZmlnKCk7XG4gICAgY29uc3QgY3VzdG9tT3JpZ2luQ29uZmlnID0gdGhpcy5yZW5kZXJDdXN0b21PcmlnaW5Db25maWcoKTtcblxuICAgIGlmICghczNPcmlnaW5Db25maWcgJiYgIWN1c3RvbU9yaWdpbkNvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlN1YmNsYXNzIG11c3Qgb3ZlcnJpZGUgYW5kIHByb3ZpZGUgZWl0aGVyIHMzT3JpZ2luQ29uZmlnIG9yIGN1c3RvbU9yaWdpbkNvbmZpZ1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgb3JpZ2luSWQsXG4gICAgICBkb21haW5OYW1lOiB0aGlzLmRvbWFpbk5hbWUsXG4gICAgICBvcmlnaW5QYXRoOiB0aGlzLm9yaWdpblBhdGgsXG4gICAgICBjb25uZWN0aW9uQXR0ZW1wdHM6IHRoaXMuY29ubmVjdGlvbkF0dGVtcHRzLFxuICAgICAgY29ubmVjdGlvblRpbWVvdXQ6IHRoaXMuY29ubmVjdGlvblRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgY3VzdG9tSGVhZGVyOiB0aGlzLnJlbmRlckN1c3RvbUhlYWRlcnMoKSxcbiAgICAgIHMzT3JpZ2luQ29uZmlnLFxuICAgICAgY3VzdG9tT3JpZ2luQ29uZmlnLFxuICAgIH07XG4gIH1cblxuICAvLyBPdmVycmlkZGVuIGJ5IHN1Yi1jbGFzc2VzIHRvIHByb3ZpZGUgUzMgb3JpZ2luIGNvbmZpZy5cbiAgcHJvdGVjdGVkIHJlbmRlclMzT3JpZ2luQ29uZmlnKCk6XG4gICAgfCBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW5TM09yaWdpbkNvbmZpZ1xuICAgIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGRlbiBieSBzdWItY2xhc3NlcyB0byBwcm92aWRlIGN1c3RvbSBvcmlnaW4gY29uZmlnLlxuICBwcm90ZWN0ZWQgcmVuZGVyQ3VzdG9tT3JpZ2luQ29uZmlnKCk6XG4gICAgfCBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW5DdXN0b21PcmlnaW5Db25maWdcbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQ3VzdG9tSGVhZGVycygpOlxuICAgIHwgY2xvdWRmcm9udERpc3RyaWJ1dGlvbi5DbG91ZGZyb250RGlzdHJpYnV0aW9uT3JpZ2luQ3VzdG9tSGVhZGVyW11cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY3VzdG9tSGVhZGVycyB8fFxuICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5jdXN0b21IZWFkZXJzKS5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbUhlYWRlcnMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIHsgbmFtZSwgdmFsdWUgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgcGF0aCBpcyBkZWZpbmVkLCBpdCBtdXN0IHN0YXJ0IHdpdGggYSAnLycgYW5kIG5vdCBlbmQgd2l0aCBhICcvJy5cbiAgICogVGhpcyBtZXRob2QgdGFrZXMgaW4gdGhlIG9yaWdpblBhdGgsIGFuZCByZXR1cm5zIGl0IGJhY2sgKGlmIHVuZGVmaW5lZCkgb3IgYWRkcy9yZW1vdmVzIHRoZSAnLycgYXMgYXBwcm9wcmlhdGUuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlT3JpZ2luUGF0aChvcmlnaW5QYXRoPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKG9yaWdpblBhdGgpKSB7XG4gICAgICByZXR1cm4gb3JpZ2luUGF0aDtcbiAgICB9XG4gICAgaWYgKG9yaWdpblBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IHBhdGggPSBvcmlnaW5QYXRoO1xuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgcGF0aCA9IFwiL1wiICsgcGF0aDtcbiAgICB9XG4gICAgaWYgKHBhdGguZW5kc1dpdGgoXCIvXCIpKSB7XG4gICAgICBwYXRoID0gcGF0aC5zbGljZSgwLCAtMSk7XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xuICB9XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGVycm9yIGlmIGEgdmFsdWUgaXMgZGVmaW5lZCBhbmQgbm90IGFuIGludGVnZXIgb3Igbm90IGluIGEgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlSW50SW5SYW5nZU9yVW5kZWZpbmVkKFxuICBuYW1lOiBzdHJpbmcsXG4gIG1pbjogbnVtYmVyLFxuICBtYXg6IG51bWJlcixcbiAgdmFsdWU/OiBudW1iZXIsXG4gIGlzRHVyYXRpb246IGJvb2xlYW4gPSB0cnVlLFxuKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCBtaW4gfHwgdmFsdWUgPiBtYXgpIHtcbiAgICBjb25zdCBzZWNvbmRzID0gaXNEdXJhdGlvbiA/IFwiIHNlY29uZHNcIiA6IFwiXCI7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7bmFtZX06IE11c3QgYmUgYW4gaW50IGJldHdlZW4gJHttaW59IGFuZCAke21heH0ke3NlY29uZHN9IChpbmNsdXNpdmUpOyByZWNlaXZlZCAke3ZhbHVlfS5gLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgY3VzdG9tIGhlYWRlciBhc3NpZ25tZW50IGlzIHByb2hpYml0ZWQgYnkgQ2xvdWRGcm9udC5cbiAqIEBsaW5rOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvYWRkLW9yaWdpbi1jdXN0b20taGVhZGVycy5odG1sI2FkZC1vcmlnaW4tY3VzdG9tLWhlYWRlcnMtZGVueWxpc3RcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDdXN0b21IZWFkZXJzKGN1c3RvbUhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIGlmICghY3VzdG9tSGVhZGVycyB8fCBPYmplY3QuZW50cmllcyhjdXN0b21IZWFkZXJzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgY3VzdG9tSGVhZGVyS2V5cyA9IE9iamVjdC5rZXlzKGN1c3RvbUhlYWRlcnMpO1xuICBjb25zdCBwcm9oaWJpdGVkSGVhZGVyS2V5cyA9IFtcbiAgICBcIkNhY2hlLUNvbnRyb2xcIixcbiAgICBcIkNvbm5lY3Rpb25cIixcbiAgICBcIkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgXCJDb29raWVcIixcbiAgICBcIkhvc3RcIixcbiAgICBcIklmLU1hdGNoXCIsXG4gICAgXCJJZi1Nb2RpZmllZC1TaW5jZVwiLFxuICAgIFwiSWYtTm9uZS1NYXRjaFwiLFxuICAgIFwiSWYtUmFuZ2VcIixcbiAgICBcIklmLVVubW9kaWZpZWQtU2luY2VcIixcbiAgICBcIk1heC1Gb3J3YXJkc1wiLFxuICAgIFwiUHJhZ21hXCIsXG4gICAgXCJQcm94eS1BdXRob3JpemF0aW9uXCIsXG4gICAgXCJQcm94eS1Db25uZWN0aW9uXCIsXG4gICAgXCJSYW5nZVwiLFxuICAgIFwiUmVxdWVzdC1SYW5nZVwiLFxuICAgIFwiVEVcIixcbiAgICBcIlRyYWlsZXJcIixcbiAgICBcIlRyYW5zZmVyLUVuY29kaW5nXCIsXG4gICAgXCJVcGdyYWRlXCIsXG4gICAgXCJWaWFcIixcbiAgICBcIlgtUmVhbC1JcFwiLFxuICBdO1xuICBjb25zdCBwcm9oaWJpdGVkSGVhZGVyS2V5UHJlZml4ZXMgPSBbXCJYLUFtei1cIiwgXCJYLUVkZ2UtXCJdO1xuXG4gIGNvbnN0IHByb2hpYml0ZWRIZWFkZXJzS2V5c01hdGNoZXMgPSBjdXN0b21IZWFkZXJLZXlzLmZpbHRlcigoY3VzdG9tS2V5KSA9PiB7XG4gICAgcmV0dXJuIHByb2hpYml0ZWRIZWFkZXJLZXlzXG4gICAgICAubWFwKChwcm9oaWJpdGVkS2V5KSA9PiBwcm9oaWJpdGVkS2V5LnRvTG93ZXJDYXNlKCkpXG4gICAgICAuaW5jbHVkZXMoY3VzdG9tS2V5LnRvTG93ZXJDYXNlKCkpO1xuICB9KTtcbiAgY29uc3QgcHJvaGliaXRlZEhlYWRlclByZWZpeE1hdGNoZXMgPSBjdXN0b21IZWFkZXJLZXlzLmZpbHRlcigoY3VzdG9tS2V5KSA9PiB7XG4gICAgcmV0dXJuIHByb2hpYml0ZWRIZWFkZXJLZXlQcmVmaXhlcy5zb21lKChwcm9oaWJpdGVkS2V5UHJlZml4KSA9PlxuICAgICAgY3VzdG9tS2V5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChwcm9oaWJpdGVkS2V5UHJlZml4LnRvTG93ZXJDYXNlKCkpLFxuICAgICk7XG4gIH0pO1xuXG4gIGlmIChwcm9oaWJpdGVkSGVhZGVyc0tleXNNYXRjaGVzLmxlbmd0aCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBUaGUgZm9sbG93aW5nIGhlYWRlcnMgY2Fubm90IGJlIGNvbmZpZ3VyZWQgYXMgY3VzdG9tIG9yaWdpbiBoZWFkZXJzOiAke3Byb2hpYml0ZWRIZWFkZXJzS2V5c01hdGNoZXMuam9pbihcIiwgXCIpfWAsXG4gICAgKTtcbiAgfVxuICBpZiAocHJvaGliaXRlZEhlYWRlclByZWZpeE1hdGNoZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSBmb2xsb3dpbmcgaGVhZGVycyBjYW5ub3QgYmUgdXNlZCBhcyBwcmVmaXhlcyBmb3IgY3VzdG9tIG9yaWdpbiBoZWFkZXJzOiAke3Byb2hpYml0ZWRIZWFkZXJQcmVmaXhNYXRjaGVzLmpvaW4oXCIsIFwiKX1gLFxuICAgICk7XG4gIH1cbn1cblxuLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udC1vcmlnaW5zL2xpYi9zMy1vcmlnaW4udHNcblxuLyoqXG4gKiBBbiBPcmlnaW4gdGhhdCBpcyBiYWNrZWQgYnkgYW4gUzMgYnVja2V0LlxuICpcbiAqIElmIHRoZSBidWNrZXQgaXMgY29uZmlndXJlZCBmb3Igd2Vic2l0ZSBob3N0aW5nLCB0aGlzIG9yaWdpbiB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBidWNrZXQgYXMgYW5cbiAqIEhUVFAgc2VydmVyIG9yaWdpbiBhbmQgd2lsbCB1c2UgdGhlIGJ1Y2tldCdzIGNvbmZpZ3VyZWQgd2Vic2l0ZSByZWRpcmVjdHMgYW5kIGVycm9yIGhhbmRsaW5nLiBPdGhlcndpc2UsXG4gKiB0aGUgb3JpZ2luIGlzIGNyZWF0ZWQgYXMgYSBidWNrZXQgb3JpZ2luIGFuZCB3aWxsIHVzZSBDbG91ZEZyb250J3MgcmVkaXJlY3QgYW5kIGVycm9yIGhhbmRsaW5nLlxuICovXG5leHBvcnQgY2xhc3MgUzNPcmlnaW4gaW1wbGVtZW50cyBJT3JpZ2luIHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcmlnaW46IElPcmlnaW47XG5cbiAgY29uc3RydWN0b3IoYnVja2V0OiBJQnVja2V0LCBwcm9wczogT3JpZ2luUHJvcHMgPSB7fSkge1xuICAgIHRoaXMub3JpZ2luID0gYnVja2V0LmlzV2Vic2l0ZSgpXG4gICAgICA/IG5ldyBIdHRwT3JpZ2luKGJ1Y2tldC5idWNrZXRPdXRwdXRzLndlYnNpdGVEb21haW5OYW1lLCB7XG4gICAgICAgICAgcHJvdG9jb2xQb2xpY3k6IE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBfT05MWSwgLy8gUzMgb25seSBzdXBwb3J0cyBIVFRQIGZvciB3ZWJzaXRlIGJ1Y2tldHNcbiAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgfSlcbiAgICAgIDogbmV3IFMzQnVja2V0T3JpZ2luKGJ1Y2tldCwgcHJvcHMpO1xuICB9XG5cbiAgcHVibGljIHJlbmRlcihcbiAgICBvcmlnaW5JZDogc3RyaW5nLFxuICApOiBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW4ge1xuICAgIHJldHVybiB0aGlzLm9yaWdpbi5yZW5kZXIob3JpZ2luSWQpO1xuICB9XG59XG5cbi8qKlxuICogQW4gT3JpZ2luIHNwZWNpZmljIHRvIGEgUzMgYnVja2V0IChub3QgY29uZmlndXJlZCBmb3Igd2Vic2l0ZSBob3N0aW5nKS5cbiAqXG4gKiBDb250YWlucyBhZGRpdGlvbmFsIGxvZ2ljIGFyb3VuZCBidWNrZXQgcGVybWlzc2lvbnMgYW5kIG9yaWdpbiBhY2Nlc3MgaWRlbnRpdGllcy5cbiAqL1xuY2xhc3MgUzNCdWNrZXRPcmlnaW4gZXh0ZW5kcyBPcmlnaW5CYXNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBidWNrZXQ6IElCdWNrZXQsXG4gICAgcHJvcHM6IE9yaWdpblByb3BzLFxuICApIHtcbiAgICBzdXBlcihidWNrZXQuYnVja2V0T3V0cHV0cy5yZWdpb25hbERvbWFpbk5hbWUsIHByb3BzKTtcbiAgICBpZiAoIXRoaXMuYnVja2V0LmJ1Y2tldE91dHB1dHMub3JpZ2luQWNjZXNzSWRlbnRpdHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgYnVja2V0IG11c3QgaGF2ZSBhbiBvcmlnaW4gYWNjZXNzIGlkZW50aXR5IHRvIGJlIHVzZWQgYXMgYSBDbG91ZEZyb250IG9yaWdpbi5cIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlclMzT3JpZ2luQ29uZmlnKCk6XG4gICAgfCBjbG91ZGZyb250RGlzdHJpYnV0aW9uLkNsb3VkZnJvbnREaXN0cmlidXRpb25PcmlnaW5TM09yaWdpbkNvbmZpZ1xuICAgIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gY29uc3RydWN0b3IgdGhyb3dzIGlmIHVuZGVmaW5lZCwgc28gdGhpcyBpcyBzYWZlP1xuICAgICAgb3JpZ2luQWNjZXNzSWRlbnRpdHk6IHRoaXMuYnVja2V0LmJ1Y2tldE91dHB1dHMub3JpZ2luQWNjZXNzSWRlbnRpdHkhLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBPcmlnaW4gYmFja2VkIGJ5IGFuIFMzIHdlYnNpdGUtY29uZmlndXJlZCBidWNrZXQsIGxvYWQgYmFsYW5jZXIsIG9yIGN1c3RvbSBIVFRQIHNlcnZlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwT3JpZ2luUHJvcHMgZXh0ZW5kcyBPcmlnaW5Qcm9wcyB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHByb3RvY29sIChIVFRQIG9yIEhUVFBTKSB0aGF0IENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBTX09OTFlcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sUG9saWN5PzogT3JpZ2luUHJvdG9jb2xQb2xpY3k7XG5cbiAgLyoqXG4gICAqIFRoZSBTU0wgdmVyc2lvbnMgdG8gdXNlIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgb3JpZ2luLlxuICAgKlxuICAgKiBAZGVmYXVsdCBPcmlnaW5Tc2xQb2xpY3kuVExTX1YxXzJcbiAgICovXG4gIHJlYWRvbmx5IG9yaWdpblNzbFByb3RvY29scz86IE9yaWdpblNzbFBvbGljeVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgSFRUUCBwb3J0IHRoYXQgQ2xvdWRGcm9udCB1c2VzIHRvIGNvbm5lY3QgdG8gdGhlIG9yaWdpbi5cbiAgICpcbiAgICogQGRlZmF1bHQgODBcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBQb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgSFRUUFMgcG9ydCB0aGF0IENsb3VkRnJvbnQgdXNlcyB0byBjb25uZWN0IHRvIHRoZSBvcmlnaW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IDQ0M1xuICAgKi9cbiAgcmVhZG9ubHkgaHR0cHNQb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgd2FpdHMgZm9yIGEgcmVzcG9uc2UgZnJvbSB0aGUgb3JpZ2luLCBhbHNvIGtub3duIGFzIHRoZSBvcmlnaW4gcmVzcG9uc2UgdGltZW91dC5cbiAgICogVGhlIHZhbGlkIHJhbmdlIGlzIGZyb20gMSB0byAxODAgc2Vjb25kcywgaW5jbHVzaXZlLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdmFsdWVzIG92ZXIgNjAgc2Vjb25kcyBhcmUgcG9zc2libGUgb25seSBhZnRlciBhIGxpbWl0IGluY3JlYXNlIHJlcXVlc3QgZm9yIHRoZSBvcmlnaW4gcmVzcG9uc2UgdGltZW91dCBxdW90YVxuICAgKiBoYXMgYmVlbiBhcHByb3ZlZCBpbiB0aGUgdGFyZ2V0IGFjY291bnQ7IG90aGVyd2lzZSwgdmFsdWVzIG92ZXIgNjAgc2Vjb25kcyB3aWxsIHByb2R1Y2UgYW4gZXJyb3IgYXQgZGVwbG95IHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoMzApXG4gICAqL1xuICByZWFkb25seSByZWFkVGltZW91dD86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IGxvbmcsIGluIHNlY29uZHMsIENsb3VkRnJvbnQgcGVyc2lzdHMgaXRzIGNvbm5lY3Rpb24gdG8gdGhlIG9yaWdpbi5cbiAgICogVGhlIHZhbGlkIHJhbmdlIGlzIGZyb20gMSB0byAxODAgc2Vjb25kcywgaW5jbHVzaXZlLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdmFsdWVzIG92ZXIgNjAgc2Vjb25kcyBhcmUgcG9zc2libGUgb25seSBhZnRlciBhIGxpbWl0IGluY3JlYXNlIHJlcXVlc3QgZm9yIHRoZSBvcmlnaW4gcmVzcG9uc2UgdGltZW91dCBxdW90YVxuICAgKiBoYXMgYmVlbiBhcHByb3ZlZCBpbiB0aGUgdGFyZ2V0IGFjY291bnQ7IG90aGVyd2lzZSwgdmFsdWVzIG92ZXIgNjAgc2Vjb25kcyB3aWxsIHByb2R1Y2UgYW4gZXJyb3IgYXQgZGVwbG95IHRpbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoNSlcbiAgICovXG4gIHJlYWRvbmx5IGtlZXBhbGl2ZVRpbWVvdXQ/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBBbiBPcmlnaW4gZm9yIGFuIEhUVFAgc2VydmVyIG9yIFMzIGJ1Y2tldCBjb25maWd1cmVkIGZvciB3ZWJzaXRlIGhvc3RpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBIdHRwT3JpZ2luIGV4dGVuZHMgT3JpZ2luQmFzZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGRvbWFpbk5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBIdHRwT3JpZ2luUHJvcHMgPSB7fSxcbiAgKSB7XG4gICAgc3VwZXIoZG9tYWluTmFtZSwgcHJvcHMpO1xuXG4gICAgdmFsaWRhdGVTZWNvbmRzSW5SYW5nZU9yVW5kZWZpbmVkKFwicmVhZFRpbWVvdXRcIiwgMSwgMTgwLCBwcm9wcy5yZWFkVGltZW91dCk7XG4gICAgdmFsaWRhdGVTZWNvbmRzSW5SYW5nZU9yVW5kZWZpbmVkKFxuICAgICAgXCJrZWVwYWxpdmVUaW1lb3V0XCIsXG4gICAgICAxLFxuICAgICAgMTgwLFxuICAgICAgcHJvcHMua2VlcGFsaXZlVGltZW91dCxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlbmRlckN1c3RvbU9yaWdpbkNvbmZpZygpOlxuICAgIHwgY2xvdWRmcm9udERpc3RyaWJ1dGlvbi5DbG91ZGZyb250RGlzdHJpYnV0aW9uT3JpZ2luQ3VzdG9tT3JpZ2luQ29uZmlnXG4gICAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB7XG4gICAgICBvcmlnaW5Tc2xQcm90b2NvbHM6IHRoaXMucHJvcHMub3JpZ2luU3NsUHJvdG9jb2xzID8/IFtcbiAgICAgICAgT3JpZ2luU3NsUG9saWN5LlRMU19WMV8yLFxuICAgICAgXSxcbiAgICAgIG9yaWdpblByb3RvY29sUG9saWN5OlxuICAgICAgICB0aGlzLnByb3BzLnByb3RvY29sUG9saWN5ID8/IE9yaWdpblByb3RvY29sUG9saWN5LkhUVFBTX09OTFksXG4gICAgICBodHRwUG9ydDogdGhpcy5wcm9wcy5odHRwUG9ydCA/PyA4MCxcbiAgICAgIGh0dHBzUG9ydDogdGhpcy5wcm9wcy5odHRwc1BvcnQgPz8gNDQzLFxuICAgICAgb3JpZ2luUmVhZFRpbWVvdXQ6IHRoaXMucHJvcHMucmVhZFRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgb3JpZ2luS2VlcGFsaXZlVGltZW91dDogdGhpcy5wcm9wcy5rZWVwYWxpdmVUaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGVycm9yIGlmIGEgZHVyYXRpb24gaXMgZGVmaW5lZCBhbmQgbm90IGFuIGludGVnZXIgbnVtYmVyIG9mIHNlY29uZHMgd2l0aGluIGEgcmFuZ2UuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU2Vjb25kc0luUmFuZ2VPclVuZGVmaW5lZChcbiAgbmFtZTogc3RyaW5nLFxuICBtaW46IG51bWJlcixcbiAgbWF4OiBudW1iZXIsXG4gIGR1cmF0aW9uPzogRHVyYXRpb24sXG4pIHtcbiAgaWYgKGR1cmF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdmFsdWUgPSBkdXJhdGlvbi50b1NlY29uZHMoKTtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IG1pbiB8fCB2YWx1ZSA+IG1heCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGAke25hbWV9OiBNdXN0IGJlIGFuIGludCBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9IHNlY29uZHMgKGluY2x1c2l2ZSk7IHJlY2VpdmVkICR7dmFsdWV9LmAsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,137 @@
1
+ import { kmsAlias } from "@cdktf/provider-aws";
2
+ import { Construct } from "constructs";
3
+ import { AwsConstructProps, AwsConstructBase } from "../aws-construct";
4
+ import { IKey, KeyOutputs } from "./key";
5
+ import * as iam from "../iam";
6
+ /**
7
+ * Outputs which may be registered for output via the Grid.
8
+ */
9
+ export interface AliasOutputs {
10
+ /**
11
+ * The name of the alias.
12
+ *
13
+ * @attribute
14
+ */
15
+ readonly aliasName: string;
16
+ /**
17
+ * The Key to which the Alias refers.
18
+ *
19
+ * @attribute
20
+ */
21
+ readonly aliasTargetKey: KeyOutputs;
22
+ }
23
+ /**
24
+ * A KMS Key alias.
25
+ * An alias can be used in all places that expect a key.
26
+ */
27
+ export interface IAlias extends IKey {
28
+ /** Strongly typed outputs */
29
+ readonly aliasOutputs: AliasOutputs;
30
+ /**
31
+ * The name of the alias.
32
+ *
33
+ * @attribute
34
+ */
35
+ readonly aliasName: string;
36
+ /**
37
+ * The Key to which the Alias refers.
38
+ *
39
+ * @attribute
40
+ */
41
+ readonly aliasTargetKey: IKey;
42
+ }
43
+ /**
44
+ * Construction properties for a KMS Key Alias object.
45
+ */
46
+ export interface AliasProps extends AwsConstructProps {
47
+ /**
48
+ * The name of the alias. The name must start with alias followed by a
49
+ * forward slash, such as alias/. You can't specify aliases that begin with
50
+ * alias/AWS. These aliases are reserved.
51
+ */
52
+ readonly aliasName: string;
53
+ /**
54
+ * The ID of the key for which you are creating the alias. Specify the key's
55
+ * globally unique identifier or Amazon Resource Name (ARN). You can't
56
+ * specify another alias.
57
+ */
58
+ readonly targetKey: IKey;
59
+ }
60
+ declare abstract class AliasBase extends AwsConstructBase implements IAlias {
61
+ abstract readonly aliasName: string;
62
+ abstract readonly aliasTargetKey: IKey;
63
+ get aliasOutputs(): AliasOutputs;
64
+ get keyOutputs(): KeyOutputs;
65
+ get outputs(): Record<string, any>;
66
+ /**
67
+ * The ARN of the alias.
68
+ *
69
+ * @attribute
70
+ * @deprecated use `aliasArn` instead
71
+ */
72
+ get keyArn(): string;
73
+ /**
74
+ * The ARN of the alias.
75
+ *
76
+ * @attribute
77
+ */
78
+ get aliasArn(): string;
79
+ get keyId(): string;
80
+ addAlias(alias: string): Alias;
81
+ addToResourcePolicy(statement: iam.PolicyStatement, allowNoOp?: boolean): iam.AddToResourcePolicyResult;
82
+ grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
83
+ grantDecrypt(grantee: iam.IGrantable): iam.Grant;
84
+ grantEncrypt(grantee: iam.IGrantable): iam.Grant;
85
+ grantEncryptDecrypt(grantee: iam.IGrantable): iam.Grant;
86
+ grantGenerateMac(grantee: iam.IGrantable): iam.Grant;
87
+ grantVerifyMac(grantee: iam.IGrantable): iam.Grant;
88
+ }
89
+ /**
90
+ * Properties of a reference to an existing KMS Alias
91
+ */
92
+ export interface AliasAttributes {
93
+ /**
94
+ * Specifies the alias name. This value must begin with alias/ followed by a name (i.e. alias/ExampleAlias)
95
+ */
96
+ readonly aliasName: string;
97
+ /**
98
+ * The customer master key (CMK) to which the Alias refers.
99
+ */
100
+ readonly aliasTargetKey: IKey;
101
+ }
102
+ /**
103
+ * Defines a display name for a customer master key (CMK) in AWS Key Management
104
+ * Service (AWS KMS). Using an alias to refer to a key can help you simplify key
105
+ * management. For example, when rotating keys, you can just update the alias
106
+ * mapping instead of tracking and changing key IDs. For more information, see
107
+ * Working with Aliases in the AWS Key Management Service Developer Guide.
108
+ *
109
+ * You can also add an alias for a key by calling `key.addAlias(alias)`.
110
+ *
111
+ * @resource AWS::KMS::Alias
112
+ */
113
+ export declare class Alias extends AliasBase {
114
+ /**
115
+ * Import an existing KMS Alias defined outside the CDK app.
116
+ *
117
+ * @param scope The parent creating construct (usually `this`).
118
+ * @param id The construct's name.
119
+ * @param attrs the properties of the referenced KMS Alias
120
+ */
121
+ static fromAliasAttributes(scope: Construct, id: string, attrs: AliasAttributes): IAlias;
122
+ /**
123
+ * Import an existing KMS Alias defined outside the CDK app, by the alias name. This method should be used
124
+ * instead of 'fromAliasAttributes' when the underlying KMS Key ARN is not available.
125
+ * This Alias will not have a direct reference to the KMS Key, so addAlias and grant* methods are not supported.
126
+ *
127
+ * @param scope The parent creating construct (usually `this`).
128
+ * @param id The construct's name.
129
+ * @param aliasName The full name of the KMS Alias (e.g., 'alias/aws/s3', 'alias/myKeyAlias').
130
+ */
131
+ static fromAliasName(scope: Construct, id: string, aliasName: string): IAlias;
132
+ readonly aliasName: string;
133
+ readonly aliasTargetKey: IKey;
134
+ readonly resource: kmsAlias.KmsAlias;
135
+ constructor(scope: Construct, id: string, props: AliasProps);
136
+ }
137
+ export {};