terraconstructs 0.0.10 → 0.0.12

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 (410) hide show
  1. package/.jsii +104486 -34582
  2. package/lib/aws/arn.js +1 -1
  3. package/lib/aws/aws-construct.d.ts +1 -1
  4. package/lib/aws/aws-construct.js +28 -2
  5. package/lib/aws/aws-stack.d.ts +2 -4
  6. package/lib/aws/aws-stack.js +21 -8
  7. package/lib/aws/aws-tags.d.ts +58 -0
  8. package/lib/aws/aws-tags.js +77 -0
  9. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  10. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  11. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  12. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  13. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  14. package/lib/aws/cloudwatch/alarm.js +1 -1
  15. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  16. package/lib/aws/cloudwatch/dashboard.js +1 -1
  17. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  18. package/lib/aws/cloudwatch/graph.js +8 -8
  19. package/lib/aws/cloudwatch/layout.js +3 -3
  20. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  21. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  22. package/lib/aws/cloudwatch/log-group.js +1 -1
  23. package/lib/aws/cloudwatch/log-query.js +1 -1
  24. package/lib/aws/cloudwatch/log-stream.js +1 -1
  25. package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
  26. package/lib/aws/cloudwatch/metric-filter.js +4 -4
  27. package/lib/aws/cloudwatch/metric.js +2 -2
  28. package/lib/aws/cloudwatch/pattern.js +3 -3
  29. package/lib/aws/cloudwatch/policy.js +1 -1
  30. package/lib/aws/cloudwatch/private/env-tokens.js +5 -6
  31. package/lib/aws/cloudwatch/private/metric-util.js +4 -5
  32. package/lib/aws/cloudwatch/private/object.js +2 -3
  33. package/lib/aws/cloudwatch/private/rendering.js +3 -3
  34. package/lib/aws/cloudwatch/private/statistic.js +6 -7
  35. package/lib/aws/cloudwatch/query-definition.js +2 -2
  36. package/lib/aws/cloudwatch/stats.js +1 -1
  37. package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
  38. package/lib/aws/cloudwatch/subscription-filter.js +4 -4
  39. package/lib/aws/cloudwatch/text.js +1 -1
  40. package/lib/aws/cloudwatch/variable.js +3 -3
  41. package/lib/aws/cloudwatch/widget.d.ts +1 -1
  42. package/lib/aws/cloudwatch/widget.js +4 -4
  43. package/lib/aws/compute/activity.js +3 -2
  44. package/lib/aws/compute/alb/application-listener-action.d.ts +334 -0
  45. package/lib/aws/compute/alb/application-listener-action.js +281 -0
  46. package/lib/aws/compute/alb/application-listener-certificate.d.ts +35 -0
  47. package/lib/aws/compute/alb/application-listener-certificate.js +35 -0
  48. package/lib/aws/compute/alb/application-listener-rule.d.ts +233 -0
  49. package/lib/aws/compute/alb/application-listener-rule.js +220 -0
  50. package/lib/aws/compute/alb/application-listener.d.ts +574 -0
  51. package/lib/aws/compute/alb/application-listener.js +538 -0
  52. package/lib/aws/compute/alb/application-load-balancer.d.ts +715 -0
  53. package/lib/aws/compute/alb/application-load-balancer.js +780 -0
  54. package/lib/aws/compute/alb/application-target-group.d.ts +339 -0
  55. package/lib/aws/compute/alb/application-target-group.js +427 -0
  56. package/lib/aws/compute/alb/conditions.d.ts +61 -0
  57. package/lib/aws/compute/alb/conditions.js +164 -0
  58. package/lib/aws/compute/alb/trust-store-revocation.d.ts +59 -0
  59. package/lib/aws/compute/alb/trust-store-revocation.js +46 -0
  60. package/lib/aws/compute/alb/trust-store.d.ts +86 -0
  61. package/lib/aws/compute/alb/trust-store.js +79 -0
  62. package/lib/aws/compute/architecture.js +1 -1
  63. package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +75 -0
  64. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +106 -0
  65. package/lib/aws/compute/bastion-host.d.ts +172 -0
  66. package/lib/aws/compute/bastion-host.js +114 -0
  67. package/lib/aws/compute/chain.js +1 -1
  68. package/lib/aws/compute/cidr-splits.d.ts +49 -0
  69. package/lib/aws/compute/cidr-splits.js +59 -0
  70. package/lib/aws/compute/client-vpn-authorization-rule.d.ts +43 -0
  71. package/lib/aws/compute/client-vpn-authorization-rule.js +30 -0
  72. package/lib/aws/compute/client-vpn-endpoint-types.d.ts +62 -0
  73. package/lib/aws/compute/client-vpn-endpoint-types.js +25 -0
  74. package/lib/aws/compute/client-vpn-endpoint.d.ts +239 -0
  75. package/lib/aws/compute/client-vpn-endpoint.js +259 -0
  76. package/lib/aws/compute/client-vpn-route.d.ts +67 -0
  77. package/lib/aws/compute/client-vpn-route.js +57 -0
  78. package/lib/aws/compute/condition.js +1 -1
  79. package/lib/aws/compute/connections.d.ts +137 -0
  80. package/lib/aws/compute/connections.js +208 -0
  81. package/lib/aws/compute/ec2-augmentations.generated.d.ts +53 -0
  82. package/lib/aws/compute/ec2-augmentations.generated.js +35 -0
  83. package/lib/aws/compute/ec2-canned-metrics.generated.d.ts +555 -0
  84. package/lib/aws/compute/ec2-canned-metrics.generated.js +681 -0
  85. package/lib/aws/compute/ec2-util-v2.d.ts +141 -0
  86. package/lib/aws/compute/ec2-util-v2.js +286 -0
  87. package/lib/aws/compute/ec2-util.d.ts +52 -0
  88. package/lib/aws/compute/ec2-util.js +138 -0
  89. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.d.ts +176 -0
  90. package/lib/aws/compute/elasticloadbalancing-canned-metrics.generated.js +119 -0
  91. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.d.ts +860 -0
  92. package/lib/aws/compute/elasticloadbalancingv2-canned-metrics.generated.js +597 -0
  93. package/lib/aws/compute/event-invoke-config.js +1 -1
  94. package/lib/aws/compute/event-source-filter.js +2 -2
  95. package/lib/aws/compute/event-source-mapping.js +1 -1
  96. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  97. package/lib/aws/compute/event-sources/s3.js +1 -1
  98. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  99. package/lib/aws/compute/event-sources/sqs.js +1 -1
  100. package/lib/aws/compute/fields.js +4 -4
  101. package/lib/aws/compute/function-alias.js +1 -1
  102. package/lib/aws/compute/function-base.js +2 -2
  103. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  104. package/lib/aws/compute/function-destinations/function.js +1 -1
  105. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  106. package/lib/aws/compute/function-nodejs.js +1 -1
  107. package/lib/aws/compute/function-url.js +1 -1
  108. package/lib/aws/compute/function-vpc-config.generated.d.ts +3 -3
  109. package/lib/aws/compute/function-vpc-config.generated.js +1 -1
  110. package/lib/aws/compute/function.d.ts +1 -1
  111. package/lib/aws/compute/function.js +5 -5
  112. package/lib/aws/compute/index-alpha.d.ts +5 -0
  113. package/lib/aws/compute/index-alpha.js +22 -0
  114. package/lib/aws/compute/index.d.ts +60 -0
  115. package/lib/aws/compute/index.js +70 -2
  116. package/lib/aws/compute/instance-types.d.ts +1354 -0
  117. package/lib/aws/compute/instance-types.js +1683 -0
  118. package/lib/aws/compute/instance.d.ts +436 -0
  119. package/lib/aws/compute/instance.js +262 -0
  120. package/lib/aws/compute/ip-addresses.d.ts +249 -0
  121. package/lib/aws/compute/ip-addresses.js +248 -0
  122. package/lib/aws/compute/ipam.d.ts +309 -0
  123. package/lib/aws/compute/ipam.js +306 -0
  124. package/lib/aws/compute/key-pair.d.ts +178 -0
  125. package/lib/aws/compute/key-pair.js +194 -0
  126. package/lib/aws/compute/lambda-augmentations.generated.d.ts +65 -0
  127. package/lib/aws/compute/lambda-augmentations.generated.js +41 -0
  128. package/lib/aws/compute/lambda-canned-metrics.generated.d.ts +316 -0
  129. package/lib/aws/compute/lambda-canned-metrics.generated.js +119 -0
  130. package/lib/aws/compute/launch-template.d.ts +540 -0
  131. package/lib/aws/compute/launch-template.js +468 -0
  132. package/lib/aws/compute/lb-shared/access-logs-accounts.d.ts +7 -0
  133. package/lib/aws/compute/lb-shared/access-logs-accounts.js +46 -0
  134. package/lib/aws/compute/lb-shared/base-listener.d.ts +113 -0
  135. package/lib/aws/compute/lb-shared/base-listener.js +181 -0
  136. package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +212 -0
  137. package/lib/aws/compute/lb-shared/base-load-balancer.js +290 -0
  138. package/lib/aws/compute/lb-shared/base-target-group.d.ts +382 -0
  139. package/lib/aws/compute/lb-shared/base-target-group.js +364 -0
  140. package/lib/aws/compute/lb-shared/enums.d.ts +282 -0
  141. package/lib/aws/compute/lb-shared/enums.js +301 -0
  142. package/lib/aws/compute/lb-shared/grid-lookup-types.d.ts +42 -0
  143. package/lib/aws/compute/lb-shared/grid-lookup-types.js +53 -0
  144. package/lib/aws/compute/lb-shared/imported.d.ts +24 -0
  145. package/lib/aws/compute/lb-shared/imported.js +27 -0
  146. package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +194 -0
  147. package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +3 -0
  148. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +56 -0
  149. package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +3 -0
  150. package/lib/aws/compute/lb-shared/listener-action.d.ts +14 -0
  151. package/lib/aws/compute/lb-shared/listener-action.js +4 -0
  152. package/lib/aws/compute/lb-shared/listener-certificate.d.ts +28 -0
  153. package/lib/aws/compute/lb-shared/listener-certificate.js +29 -0
  154. package/lib/aws/compute/lb-shared/load-balancer-targets.d.ts +93 -0
  155. package/lib/aws/compute/lb-shared/load-balancer-targets.js +127 -0
  156. package/lib/aws/compute/lb-shared/util.d.ts +113 -0
  157. package/lib/aws/compute/lb-shared/util.js +264 -0
  158. package/lib/aws/compute/lb-targets/alb-target.d.ts +67 -0
  159. package/lib/aws/compute/lb-targets/alb-target.js +100 -0
  160. package/lib/aws/compute/lb-targets/index.d.ts +4 -0
  161. package/lib/aws/compute/lb-targets/index.js +22 -0
  162. package/lib/aws/compute/lb-targets/instance-target.d.ts +42 -0
  163. package/lib/aws/compute/lb-targets/instance-target.js +67 -0
  164. package/lib/aws/compute/lb-targets/ip-target.d.ts +55 -0
  165. package/lib/aws/compute/lb-targets/ip-target.js +79 -0
  166. package/lib/aws/compute/lb-targets/lambda-target.d.ts +25 -0
  167. package/lib/aws/compute/lb-targets/lambda-target.js +50 -0
  168. package/lib/aws/compute/load-balancer.d.ts +336 -0
  169. package/lib/aws/compute/load-balancer.js +287 -0
  170. package/lib/aws/compute/machine-image/amazon-linux-2022.d.ts +63 -0
  171. package/lib/aws/compute/machine-image/amazon-linux-2022.js +84 -0
  172. package/lib/aws/compute/machine-image/amazon-linux-2023.d.ts +63 -0
  173. package/lib/aws/compute/machine-image/amazon-linux-2023.js +84 -0
  174. package/lib/aws/compute/machine-image/amazon-linux2.d.ts +76 -0
  175. package/lib/aws/compute/machine-image/amazon-linux2.js +87 -0
  176. package/lib/aws/compute/machine-image/common.d.ts +181 -0
  177. package/lib/aws/compute/machine-image/common.js +122 -0
  178. package/lib/aws/compute/machine-image/index.d.ts +5 -0
  179. package/lib/aws/compute/machine-image/index.js +22 -0
  180. package/lib/aws/compute/machine-image/machine-image.d.ts +463 -0
  181. package/lib/aws/compute/machine-image/machine-image.js +566 -0
  182. package/lib/aws/compute/machine-image/utils.d.ts +2 -0
  183. package/lib/aws/compute/machine-image/utils.js +17 -0
  184. package/lib/aws/compute/nat.d.ts +325 -0
  185. package/lib/aws/compute/nat.js +455 -0
  186. package/lib/aws/compute/network-acl-types.d.ts +152 -0
  187. package/lib/aws/compute/network-acl-types.js +156 -0
  188. package/lib/aws/compute/network-acl.d.ts +285 -0
  189. package/lib/aws/compute/network-acl.js +207 -0
  190. package/lib/aws/compute/network-util.d.ts +116 -0
  191. package/lib/aws/compute/network-util.js +241 -0
  192. package/lib/aws/compute/nlb/network-listener-action.d.ts +92 -0
  193. package/lib/aws/compute/nlb/network-listener-action.js +146 -0
  194. package/lib/aws/compute/nlb/network-listener-certificate.d.ts +24 -0
  195. package/lib/aws/compute/nlb/network-listener-certificate.js +25 -0
  196. package/lib/aws/compute/nlb/network-listener.d.ts +248 -0
  197. package/lib/aws/compute/nlb/network-listener.js +217 -0
  198. package/lib/aws/compute/nlb/network-load-balancer.d.ts +315 -0
  199. package/lib/aws/compute/nlb/network-load-balancer.js +360 -0
  200. package/lib/aws/compute/nlb/network-target-group.d.ts +153 -0
  201. package/lib/aws/compute/nlb/network-target-group.js +223 -0
  202. package/lib/aws/compute/peer.d.ts +64 -0
  203. package/lib/aws/compute/peer.js +235 -0
  204. package/lib/aws/compute/placement-group.d.ts +161 -0
  205. package/lib/aws/compute/placement-group.js +133 -0
  206. package/lib/aws/compute/port.d.ts +287 -0
  207. package/lib/aws/compute/port.js +390 -0
  208. package/lib/aws/compute/prefix-list.d.ts +131 -0
  209. package/lib/aws/compute/prefix-list.js +114 -0
  210. package/lib/aws/compute/private/context-stub.d.ts +7 -0
  211. package/lib/aws/compute/private/context-stub.js +43 -0
  212. package/lib/aws/compute/private/ebs-util.d.ts +14 -0
  213. package/lib/aws/compute/private/ebs-util.js +145 -0
  214. package/lib/aws/compute/private/intrinstics.js +2 -1
  215. package/lib/aws/compute/private/json-path.js +8 -8
  216. package/lib/aws/compute/private/util.js +2 -3
  217. package/lib/aws/compute/route.d.ts +547 -0
  218. package/lib/aws/compute/route.js +469 -0
  219. package/lib/aws/compute/security-group.d.ts +414 -0
  220. package/lib/aws/compute/security-group.js +538 -0
  221. package/lib/aws/compute/state-graph.js +1 -1
  222. package/lib/aws/compute/state-machine-fragment.js +1 -1
  223. package/lib/aws/compute/state-machine.d.ts +2 -2
  224. package/lib/aws/compute/state-machine.js +14 -12
  225. package/lib/aws/compute/states/choice.js +1 -1
  226. package/lib/aws/compute/states/custom-state.js +1 -1
  227. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  228. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  229. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  230. package/lib/aws/compute/states/distributed-map.js +1 -1
  231. package/lib/aws/compute/states/fail.js +1 -1
  232. package/lib/aws/compute/states/map-base.js +1 -1
  233. package/lib/aws/compute/states/map.js +1 -1
  234. package/lib/aws/compute/states/parallel.js +1 -1
  235. package/lib/aws/compute/states/pass.js +2 -2
  236. package/lib/aws/compute/states/state.js +5 -5
  237. package/lib/aws/compute/states/succeed.js +1 -1
  238. package/lib/aws/compute/states/task-base.js +2 -2
  239. package/lib/aws/compute/states/task.js +1 -1
  240. package/lib/aws/compute/states/wait.js +2 -2
  241. package/lib/aws/compute/stepfunctions-canned-metrics.generated.d.ts +83 -0
  242. package/lib/aws/compute/stepfunctions-canned-metrics.generated.js +127 -0
  243. package/lib/aws/compute/subnet-v2.d.ts +213 -0
  244. package/lib/aws/compute/subnet-v2.js +405 -0
  245. package/lib/aws/compute/subnet.d.ts +37 -0
  246. package/lib/aws/compute/subnet.js +181 -0
  247. package/lib/aws/compute/task-credentials.js +1 -1
  248. package/lib/aws/compute/task-input.js +1 -1
  249. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  250. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  251. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  252. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  253. package/lib/aws/compute/tasks/private/task-utils.js +3 -4
  254. package/lib/aws/compute/tasks/resource-arn-suffix.js +2 -3
  255. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  256. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  257. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  258. package/lib/aws/compute/types.js +2 -2
  259. package/lib/aws/compute/user-data.d.ts +270 -0
  260. package/lib/aws/compute/user-data.js +487 -0
  261. package/lib/aws/compute/util.d.ts +1 -1
  262. package/lib/aws/compute/util.js +4 -5
  263. package/lib/aws/compute/volume.d.ts +480 -0
  264. package/lib/aws/compute/volume.js +426 -0
  265. package/lib/aws/compute/vpc-endpoint-service.d.ts +149 -0
  266. package/lib/aws/compute/vpc-endpoint-service.js +90 -0
  267. package/lib/aws/compute/vpc-endpoint.d.ts +742 -0
  268. package/lib/aws/compute/vpc-endpoint.js +811 -0
  269. package/lib/aws/compute/vpc-flow-logs.d.ts +551 -0
  270. package/lib/aws/compute/vpc-flow-logs.js +693 -0
  271. package/lib/aws/compute/vpc-lookup.d.ts +73 -0
  272. package/lib/aws/compute/vpc-lookup.js +3 -0
  273. package/lib/aws/compute/vpc-v2-base.d.ts +353 -0
  274. package/lib/aws/compute/vpc-v2-base.js +493 -0
  275. package/lib/aws/compute/vpc-v2.d.ts +385 -0
  276. package/lib/aws/compute/vpc-v2.js +408 -0
  277. package/lib/aws/compute/vpc.d.ts +1448 -0
  278. package/lib/aws/compute/vpc.js +1495 -0
  279. package/lib/aws/compute/vpn.d.ts +443 -0
  280. package/lib/aws/compute/vpn.js +397 -0
  281. package/lib/aws/compute/windows-versions.d.ts +418 -0
  282. package/lib/aws/compute/windows-versions.js +426 -0
  283. package/lib/aws/edge/certificate-base.d.ts +20 -0
  284. package/lib/aws/edge/certificate-base.js +28 -0
  285. package/lib/aws/edge/certificate.d.ts +23 -2
  286. package/lib/aws/edge/certificate.js +54 -4
  287. package/lib/aws/edge/distribution.js +3 -3
  288. package/lib/aws/edge/dns-alias-record-targets.js +2 -2
  289. package/lib/aws/edge/dns-record.js +16 -16
  290. package/lib/aws/edge/dns-zone.d.ts +20 -2
  291. package/lib/aws/edge/dns-zone.js +25 -10
  292. package/lib/aws/edge/function.js +2 -2
  293. package/lib/aws/edge/index.d.ts +1 -0
  294. package/lib/aws/edge/index.js +2 -1
  295. package/lib/aws/edge/key-value-store.js +4 -4
  296. package/lib/aws/edge/origin.js +8 -6
  297. package/lib/aws/edge/response-headers-policy.js +1 -1
  298. package/lib/aws/encryption/alias.js +1 -1
  299. package/lib/aws/encryption/key.js +1 -1
  300. package/lib/aws/encryption/via-service-principal.js +1 -1
  301. package/lib/aws/iam/grant.js +2 -2
  302. package/lib/aws/iam/index.d.ts +1 -0
  303. package/lib/aws/iam/index.js +2 -1
  304. package/lib/aws/iam/instance-profile.d.ts +155 -0
  305. package/lib/aws/iam/instance-profile.js +124 -0
  306. package/lib/aws/iam/managed-policy.js +1 -1
  307. package/lib/aws/iam/oidc-provider.js +1 -1
  308. package/lib/aws/iam/policy-document-config.generated.d.ts +8 -8
  309. package/lib/aws/iam/policy-document-config.generated.js +1 -1
  310. package/lib/aws/iam/policy-document.js +1 -1
  311. package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
  312. package/lib/aws/iam/policy-statement-props.generated.js +1 -1
  313. package/lib/aws/iam/policy-statement.js +9 -9
  314. package/lib/aws/iam/policy.js +1 -1
  315. package/lib/aws/iam/principals.js +26 -26
  316. package/lib/aws/iam/private/assume-role-policy.js +2 -3
  317. package/lib/aws/iam/private/comparable-principal.js +2 -3
  318. package/lib/aws/iam/private/immutable-role.d.ts +2 -1
  319. package/lib/aws/iam/private/immutable-role.js +3 -3
  320. package/lib/aws/iam/private/imported-role.d.ts +1 -1
  321. package/lib/aws/iam/private/imported-role.js +3 -3
  322. package/lib/aws/iam/private/merge-statements.js +2 -3
  323. package/lib/aws/iam/private/util.js +4 -4
  324. package/lib/aws/iam/role.js +1 -1
  325. package/lib/aws/iam/saml-provider.d.ts +1 -1
  326. package/lib/aws/iam/saml-provider.js +6 -6
  327. package/lib/aws/iam/unknown-principal.js +1 -1
  328. package/lib/aws/iam/utils.js +2 -3
  329. package/lib/aws/index.d.ts +1 -0
  330. package/lib/aws/index.js +4 -1
  331. package/lib/aws/network/simple-ipv4-vpc.js +5 -5
  332. package/lib/aws/network/subnet-group.js +3 -3
  333. package/lib/aws/network/subnet.d.ts +1 -1
  334. package/lib/aws/network/subnet.js +7 -7
  335. package/lib/aws/notify/archive.js +3 -2
  336. package/lib/aws/notify/connection.js +5 -4
  337. package/lib/aws/notify/event-bus.js +5 -4
  338. package/lib/aws/notify/event-pattern.js +3 -3
  339. package/lib/aws/notify/index.js +3 -1
  340. package/lib/aws/notify/input.js +4 -3
  341. package/lib/aws/notify/kinesis-stream.js +3 -2
  342. package/lib/aws/notify/on-event-options.js +2 -1
  343. package/lib/aws/notify/queue-config.generated.d.ts +18 -11
  344. package/lib/aws/notify/queue-config.generated.js +1 -1
  345. package/lib/aws/notify/queue-policy.js +1 -1
  346. package/lib/aws/notify/queue.js +1 -1
  347. package/lib/aws/notify/resource-policy.js +1 -1
  348. package/lib/aws/notify/rule.js +3 -2
  349. package/lib/aws/notify/schedule.js +2 -2
  350. package/lib/aws/notify/sqs-augmentations.generated.d.ts +125 -0
  351. package/lib/aws/notify/sqs-augmentations.generated.js +74 -0
  352. package/lib/aws/notify/target.js +2 -1
  353. package/lib/aws/notify/targets/event-bus.js +1 -1
  354. package/lib/aws/notify/targets/function.js +1 -1
  355. package/lib/aws/notify/targets/log-group.js +2 -2
  356. package/lib/aws/notify/targets/sqs.js +1 -1
  357. package/lib/aws/notify/targets/state-machine.js +1 -1
  358. package/lib/aws/notify/targets/util.d.ts +1 -1
  359. package/lib/aws/notify/targets/util.js +10 -11
  360. package/lib/aws/notify/util.js +4 -4
  361. package/lib/aws/provider-config.generated.d.ts +33 -33
  362. package/lib/aws/provider-config.generated.js +1 -1
  363. package/lib/aws/storage/bucket-notifications.js +1 -1
  364. package/lib/aws/storage/bucket-policy.js +1 -1
  365. package/lib/aws/storage/bucket-source.js +1 -1
  366. package/lib/aws/storage/bucket.d.ts +298 -65
  367. package/lib/aws/storage/bucket.js +548 -225
  368. package/lib/aws/storage/cors-config.generated.d.ts +3 -3
  369. package/lib/aws/storage/cors-config.generated.js +1 -1
  370. package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
  371. package/lib/aws/storage/cors-rule-config.generated.js +1 -1
  372. package/lib/aws/storage/index.d.ts +1 -0
  373. package/lib/aws/storage/index.js +2 -1
  374. package/lib/aws/storage/lifecycle-config.generated.d.ts +11 -11
  375. package/lib/aws/storage/lifecycle-config.generated.js +1 -1
  376. package/lib/aws/storage/notification-targets/function.js +6 -6
  377. package/lib/aws/storage/notification-targets/queue.js +1 -1
  378. package/lib/aws/storage/origin-access-identity.d.ts +1 -1
  379. package/lib/aws/storage/origin-access-identity.js +5 -4
  380. package/lib/aws/storage/parameter-util.d.ts +12 -0
  381. package/lib/aws/storage/parameter-util.js +65 -0
  382. package/lib/aws/storage/parameter.d.ts +526 -0
  383. package/lib/aws/storage/parameter.js +606 -0
  384. package/lib/aws/storage/s3-canned-metrics.generated.d.ts +22 -0
  385. package/lib/aws/storage/s3-canned-metrics.generated.js +23 -0
  386. package/lib/aws/storage/util.d.ts +25 -3
  387. package/lib/aws/storage/util.js +84 -17
  388. package/lib/aws/storage/website-config.generated.d.ts +5 -5
  389. package/lib/aws/storage/website-config.generated.js +1 -1
  390. package/lib/aws/util.js +2 -3
  391. package/lib/construct-base.d.ts +10 -1
  392. package/lib/construct-base.js +9 -6
  393. package/lib/duration.js +1 -1
  394. package/lib/expiration.d.ts +48 -0
  395. package/lib/expiration.js +68 -0
  396. package/lib/helpers-internal/index.d.ts +1 -0
  397. package/lib/helpers-internal/index.js +7 -0
  398. package/lib/index.d.ts +2 -0
  399. package/lib/index.js +3 -1
  400. package/lib/private/md5.d.ts +4 -0
  401. package/lib/private/md5.js +14 -0
  402. package/lib/private/unique-resource-name.js +3 -4
  403. package/lib/size.js +2 -2
  404. package/lib/stack-base.d.ts +4 -23
  405. package/lib/stack-base.js +9 -30
  406. package/lib/terra-func.d.ts +103 -0
  407. package/lib/terra-func.js +170 -0
  408. package/lib/token.js +5 -5
  409. package/package.json +15 -8
  410. package/bun.lockb +0 -0
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ var _a, _b;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ClientVpnEndpoint = exports.ClientVpnUserBasedAuthentication = exports.ClientVpnSessionTimeout = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-endpoint.ts
7
+ const provider_aws_1 = require("@cdktf/provider-aws");
8
+ const cdktf_1 = require("cdktf");
9
+ const constructs_1 = require("constructs");
10
+ const client_vpn_authorization_rule_1 = require("./client-vpn-authorization-rule");
11
+ const client_vpn_route_1 = require("./client-vpn-route");
12
+ const connections_1 = require("./connections");
13
+ const network_util_1 = require("./network-util");
14
+ const security_group_1 = require("./security-group");
15
+ const aws_construct_1 = require("../aws-construct");
16
+ const logs = require("../cloudwatch");
17
+ /**
18
+ * Maximum VPN session duration time
19
+ */
20
+ var ClientVpnSessionTimeout;
21
+ (function (ClientVpnSessionTimeout) {
22
+ /** 8 hours */
23
+ ClientVpnSessionTimeout[ClientVpnSessionTimeout["EIGHT_HOURS"] = 8] = "EIGHT_HOURS";
24
+ /** 10 hours */
25
+ ClientVpnSessionTimeout[ClientVpnSessionTimeout["TEN_HOURS"] = 10] = "TEN_HOURS";
26
+ /** 12 hours */
27
+ ClientVpnSessionTimeout[ClientVpnSessionTimeout["TWELVE_HOURS"] = 12] = "TWELVE_HOURS";
28
+ /** 24 hours */
29
+ ClientVpnSessionTimeout[ClientVpnSessionTimeout["TWENTY_FOUR_HOURS"] = 24] = "TWENTY_FOUR_HOURS";
30
+ })(ClientVpnSessionTimeout || (exports.ClientVpnSessionTimeout = ClientVpnSessionTimeout = {}));
31
+ /**
32
+ * User-based authentication for a client VPN endpoint
33
+ */
34
+ class ClientVpnUserBasedAuthentication {
35
+ /**
36
+ * Active Directory authentication
37
+ */
38
+ static activeDirectory(directoryId) {
39
+ return new ActiveDirectoryAuthentication(directoryId);
40
+ }
41
+ /** Federated authentication */
42
+ static federated(samlProvider, selfServiceSamlProvider) {
43
+ return new FederatedAuthentication(samlProvider, selfServiceSamlProvider);
44
+ }
45
+ }
46
+ exports.ClientVpnUserBasedAuthentication = ClientVpnUserBasedAuthentication;
47
+ _a = JSII_RTTI_SYMBOL_1;
48
+ ClientVpnUserBasedAuthentication[_a] = { fqn: "terraconstructs.aws.compute.ClientVpnUserBasedAuthentication", version: "0.0.12" };
49
+ /**
50
+ * Active Directory authentication
51
+ */
52
+ class ActiveDirectoryAuthentication extends ClientVpnUserBasedAuthentication {
53
+ constructor(directoryId) {
54
+ super();
55
+ this.directoryId = directoryId;
56
+ }
57
+ render() {
58
+ return {
59
+ type: "directory-service-authentication",
60
+ activeDirectoryId: this.directoryId,
61
+ };
62
+ }
63
+ }
64
+ /**
65
+ * Federated authentication
66
+ */
67
+ class FederatedAuthentication extends ClientVpnUserBasedAuthentication {
68
+ constructor(samlProvider, selfServiceSamlProvider) {
69
+ super();
70
+ this.samlProvider = samlProvider;
71
+ this.selfServiceSamlProvider = selfServiceSamlProvider;
72
+ }
73
+ render() {
74
+ return {
75
+ type: "federated-authentication",
76
+ samlProviderArn: this.samlProvider.samlProviderArn,
77
+ selfServiceSamlProviderArn: this.selfServiceSamlProvider?.samlProviderArn,
78
+ };
79
+ }
80
+ }
81
+ /**
82
+ * A client VPN connnection
83
+ */
84
+ class ClientVpnEndpoint extends aws_construct_1.AwsConstructBase {
85
+ /**
86
+ * Import an existing client VPN endpoint
87
+ */
88
+ static fromEndpointAttributes(scope, id, attrs) {
89
+ class Import extends aws_construct_1.AwsConstructBase {
90
+ constructor() {
91
+ super(...arguments);
92
+ this.endpointId = attrs.endpointId;
93
+ this.connections = new connections_1.Connections({
94
+ securityGroups: attrs.securityGroups,
95
+ });
96
+ this.targetNetworksAssociated = new constructs_1.DependencyGroup();
97
+ }
98
+ get clientVpnOutputs() {
99
+ return {
100
+ clientVpnEndpointId: this.endpointId,
101
+ };
102
+ }
103
+ get outputs() {
104
+ return this.clientVpnOutputs;
105
+ }
106
+ }
107
+ return new Import(scope, id);
108
+ }
109
+ get clientVpnOutputs() {
110
+ return {
111
+ clientVpnEndpointId: this.endpointId,
112
+ selfServicePortalUrl: this.selfServicePortalUrl,
113
+ };
114
+ }
115
+ get outputs() {
116
+ return this.clientVpnOutputs;
117
+ }
118
+ constructor(scope, id, props) {
119
+ super(scope, id, props);
120
+ this._targetNetworksAssociated = new constructs_1.DependencyGroup();
121
+ if (!cdktf_1.Token.isUnresolved(props.vpc.vpcCidrBlock)) {
122
+ const clientCidr = new network_util_1.CidrBlock(props.cidr);
123
+ const vpcCidr = new network_util_1.CidrBlock(props.vpc.vpcCidrBlock);
124
+ if (vpcCidr.containsCidr(clientCidr)) {
125
+ throw new Error("The client CIDR cannot overlap with the local CIDR of the VPC");
126
+ }
127
+ }
128
+ if (props.dnsServers && props.dnsServers.length > 2) {
129
+ throw new Error("A client VPN endpoint can have up to two DNS servers");
130
+ }
131
+ if (props.logging == false && (props.logGroup || props.logStream)) {
132
+ throw new Error("Cannot specify `logGroup` or `logStream` when logging is disabled");
133
+ }
134
+ if (props.clientConnectionHandler &&
135
+ !cdktf_1.Token.isUnresolved(props.clientConnectionHandler.functionName) &&
136
+ !props.clientConnectionHandler.functionName.startsWith("AWSClientVPN-")) {
137
+ throw new Error("The name of the Lambda function must begin with the `AWSClientVPN-` prefix");
138
+ }
139
+ if (props.clientLoginBanner &&
140
+ !cdktf_1.Token.isUnresolved(props.clientLoginBanner) &&
141
+ props.clientLoginBanner.length > 1400) {
142
+ throw new Error(`The maximum length for the client login banner is 1400, got ${props.clientLoginBanner.length}`);
143
+ }
144
+ const logging = props.logging ?? true;
145
+ const logGroup = logging
146
+ ? (props.logGroup ?? new logs.LogGroup(this, "LogGroup"))
147
+ : undefined;
148
+ const securityGroups = props.securityGroups ?? [
149
+ new security_group_1.SecurityGroup(this, "SecurityGroup", {
150
+ vpc: props.vpc,
151
+ }),
152
+ ];
153
+ this.connections = new connections_1.Connections({ securityGroups });
154
+ this.resource = new provider_aws_1.ec2ClientVpnEndpoint.Ec2ClientVpnEndpoint(this, "Resource", {
155
+ authenticationOptions: renderAuthenticationOptions(props.clientCertificateArn, props.userBasedAuthentication),
156
+ clientCidrBlock: props.cidr,
157
+ clientConnectOptions: props.clientConnectionHandler
158
+ ? {
159
+ enabled: true,
160
+ lambdaFunctionArn: props.clientConnectionHandler.functionArn,
161
+ }
162
+ : undefined,
163
+ connectionLogOptions: {
164
+ enabled: logging,
165
+ cloudwatchLogGroup: logGroup?.logGroupName,
166
+ cloudwatchLogStream: props.logStream?.logStreamName,
167
+ },
168
+ description: props.description,
169
+ dnsServers: props.dnsServers,
170
+ securityGroupIds: securityGroups.map((s) => s.securityGroupId),
171
+ selfServicePortal: booleanToEnabledDisabled(props.selfServicePortal),
172
+ serverCertificateArn: props.serverCertificateArn,
173
+ splitTunnel: props.splitTunnel,
174
+ transportProtocol: props.transportProtocol,
175
+ vpcId: props.vpc.vpcId,
176
+ vpnPort: props.port,
177
+ sessionTimeoutHours: props.sessionTimeout,
178
+ clientLoginBannerOptions: props.clientLoginBanner
179
+ ? {
180
+ enabled: true,
181
+ bannerText: props.clientLoginBanner,
182
+ }
183
+ : undefined,
184
+ });
185
+ this.endpointId = this.resource.id;
186
+ if (props.userBasedAuthentication && (props.selfServicePortal ?? true)) {
187
+ // Output self-service portal URL
188
+ this.selfServicePortalUrl = this.resource.selfServicePortalUrl;
189
+ // new TerraformOutput(this, "SelfServicePortalUrl", {
190
+ // value: `https://self-service.clientvpn.amazonaws.com/endpoints/${this.endpointId}`,
191
+ // });
192
+ }
193
+ // Associate subnets
194
+ const subnetIds = props.vpc.selectSubnets(props.vpcSubnets).subnetIds;
195
+ if (cdktf_1.Token.isUnresolved(subnetIds)) {
196
+ throw new Error("Cannot associate subnets when VPC are imported from parameters or exports containing lists of subnet IDs.");
197
+ }
198
+ for (const [idx, subnetId] of Object.entries(subnetIds)) {
199
+ this._targetNetworksAssociated.add(new provider_aws_1.ec2ClientVpnNetworkAssociation.Ec2ClientVpnNetworkAssociation(this, `Association${idx}`, {
200
+ clientVpnEndpointId: this.endpointId,
201
+ subnetId,
202
+ }));
203
+ }
204
+ this.targetNetworksAssociated = this._targetNetworksAssociated;
205
+ if (props.authorizeAllUsersToVpcCidr ?? true) {
206
+ this.addAuthorizationRule("AuthorizeAll", {
207
+ cidr: props.vpc.vpcCidrBlock,
208
+ });
209
+ }
210
+ }
211
+ /**
212
+ * Adds an authorization rule to this endpoint
213
+ */
214
+ addAuthorizationRule(id, props) {
215
+ return new client_vpn_authorization_rule_1.ClientVpnAuthorizationRule(this, id, {
216
+ ...props,
217
+ clientVpnEndpoint: this,
218
+ });
219
+ }
220
+ /**
221
+ * Adds a route to this endpoint
222
+ */
223
+ addRoute(id, props) {
224
+ return new client_vpn_route_1.ClientVpnRoute(this, id, {
225
+ ...props,
226
+ clientVpnEndpoint: this,
227
+ });
228
+ }
229
+ }
230
+ exports.ClientVpnEndpoint = ClientVpnEndpoint;
231
+ _b = JSII_RTTI_SYMBOL_1;
232
+ ClientVpnEndpoint[_b] = { fqn: "terraconstructs.aws.compute.ClientVpnEndpoint", version: "0.0.12" };
233
+ function renderAuthenticationOptions(clientCertificateArn, userBasedAuthentication) {
234
+ const authenticationOptions = [];
235
+ if (clientCertificateArn) {
236
+ authenticationOptions.push({
237
+ type: "certificate-authentication",
238
+ rootCertificateChainArn: clientCertificateArn,
239
+ });
240
+ }
241
+ if (userBasedAuthentication) {
242
+ authenticationOptions.push(userBasedAuthentication.render());
243
+ }
244
+ if (authenticationOptions.length === 0) {
245
+ throw new Error("A client VPN endpoint must use at least one authentication option");
246
+ }
247
+ return authenticationOptions;
248
+ }
249
+ function booleanToEnabledDisabled(val) {
250
+ switch (val) {
251
+ case undefined:
252
+ return undefined;
253
+ case true:
254
+ return "enabled";
255
+ case false:
256
+ return "disabled";
257
+ }
258
+ }
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXZwbi1lbmRwb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9jbGllbnQtdnBuLWVuZHBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsdUdBQXVHO0FBRXZHLHNEQUc2QjtBQUM3QixpQ0FBOEI7QUFDOUIsMkNBQXFFO0FBQ3JFLG1GQUd5QztBQVF6Qyx5REFBMkU7QUFDM0UsK0NBQTRDO0FBQzVDLGlEQUEyQztBQUMzQyxxREFBaUU7QUFHakUsb0RBQXVFO0FBQ3ZFLHNDQUFzQztBQTZLdEM7O0dBRUc7QUFDSCxJQUFZLHVCQVNYO0FBVEQsV0FBWSx1QkFBdUI7SUFDakMsY0FBYztJQUNkLG1GQUFlLENBQUE7SUFDZixlQUFlO0lBQ2YsZ0ZBQWMsQ0FBQTtJQUNkLGVBQWU7SUFDZixzRkFBaUIsQ0FBQTtJQUNqQixlQUFlO0lBQ2YsZ0dBQXNCLENBQUE7QUFDeEIsQ0FBQyxFQVRXLHVCQUF1Qix1Q0FBdkIsdUJBQXVCLFFBU2xDO0FBRUQ7O0dBRUc7QUFDSCxNQUFzQixnQ0FBZ0M7SUFDcEQ7O09BRUc7SUFDSSxNQUFNLENBQUMsZUFBZSxDQUMzQixXQUFtQjtRQUVuQixPQUFPLElBQUksNkJBQTZCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELCtCQUErQjtJQUN4QixNQUFNLENBQUMsU0FBUyxDQUNyQixZQUEyQixFQUMzQix1QkFBdUM7UUFFdkMsT0FBTyxJQUFJLHVCQUF1QixDQUFDLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQzVFLENBQUM7O0FBaEJILDRFQW9CQzs7O0FBRUQ7O0dBRUc7QUFDSCxNQUFNLDZCQUE4QixTQUFRLGdDQUFnQztJQUMxRSxZQUE2QixXQUFtQjtRQUM5QyxLQUFLLEVBQUUsQ0FBQztRQURtQixnQkFBVyxHQUFYLFdBQVcsQ0FBUTtJQUVoRCxDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU87WUFDTCxJ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QUNaLEtBQUssU0FBUztZQUNaLE9BQU8sU0FBUyxDQUFDO1FBQ25CLEtBQUssSUFBSTtZQUNQLE9BQU8sU0FBUyxDQUFDO1FBQ25CLEtBQUssS0FBSztZQUNSLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIvY2xpZW50LXZwbi1lbmRwb2ludC50c1xuXG5pbXBvcnQge1xuICBlYzJDbGllbnRWcG5FbmRwb2ludCxcbiAgZWMyQ2xpZW50VnBuTmV0d29ya0Fzc29jaWF0aW9uLFxufSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCwgRGVwZW5kZW5jeUdyb3VwLCBJRGVwZW5kYWJsZSB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBDbGllbnRWcG5BdXRob3JpemF0aW9uUnVsZSxcbiAgQ2xpZW50VnBuQXV0aG9yaXphdGlvblJ1bGVPcHRpb25zLFxufSBmcm9tIFwiLi9jbGllbnQtdnBuLWF1dGhvcml6YXRpb24tcnVsZVwiO1xuaW1wb3J0IHtcbiAgSUNsaWVudFZwbkNvbm5lY3Rpb25IYW5kbGVyLFxuICBJQ2xpZW50VnBuRW5kcG9pbnQsXG4gIENsaWVudFZwbk91dHB1dHMsXG4gIFRyYW5zcG9ydFByb3RvY29sLFxuICBWcG5Qb3J0LFxufSBmcm9tIFwiLi9jbGllbnQtdnBuLWVuZHBvaW50LXR5cGVzXCI7XG5pbXBvcnQgeyBDbGllbnRWcG5Sb3V0ZSwgQ2xpZW50VnBuUm91dGVPcHRpb25zIH0gZnJvbSBcIi4vY2xpZW50LXZwbi1yb3V0ZVwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbnMgfSBmcm9tIFwiLi9jb25uZWN0aW9uc1wiO1xuaW1wb3J0IHsgQ2lkckJsb2NrIH0gZnJvbSBcIi4vbmV0d29yay11dGlsXCI7XG5pbXBvcnQgeyBJU2VjdXJpdHlHcm91cCwgU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuL3NlY3VyaXR5LWdyb3VwXCI7XG5pbXBvcnQgeyBJU2FtbFByb3ZpZGVyIH0gZnJvbSBcIi4uL2lhbVwiO1xuaW1wb3J0IHsgSVZwYywgU3VibmV0U2VsZWN0aW9uIH0gZnJvbSBcIi4vdnBjXCI7XG5pbXBvcnQgeyBBd3NDb25zdHJ1Y3RCYXNlLCBBd3NDb25zdHJ1Y3RQcm9wcyB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gXCIuLi9jbG91ZHdhdGNoXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYSBjbGllbnQgVlBOIGVuZHBvaW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50VnBuRW5kcG9pbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBJUHY0IGFkZHJlc3MgcmFuZ2UsIGluIENJRFIgbm90YXRpb24sIGZyb20gd2hpY2ggdG8gYXNzaWduIGNsaWVudCBJUFxuICAgKiBhZGRyZXNzZXMuIFRoZSBhZGRyZXNzIHJhbmdlIGNhbm5vdCBvdmVybGFwIHdpdGggdGhlIGxvY2FsIENJRFIgb2YgdGhlIFZQQ1xuICAgKiBpbiB3aGljaCB0aGUgYXNzb2NpYXRlZCBzdWJuZXQgaXMgbG9jYXRlZCwgb3IgdGhlIHJvdXRlcyB0aGF0IHlvdSBhZGQgbWFudWFsbHkuXG4gICAqXG4gICAqIENoYW5naW5nIHRoZSBhZGRyZXNzIHJhbmdlIHdpbGwgcmVwbGFjZSB0aGUgQ2xpZW50IFZQTiBlbmRwb2ludC5cbiAgICpcbiAgICogVGhlIENJRFIgYmxvY2sgc2hvdWxkIGJlIC8yMiBvciBncmVhdGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY2lkcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgZm9yIG11dHVhbCBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogVGhlIGNlcnRpZmljYXRlIG11c3QgYmUgc2lnbmVkIGJ5IGEgY2VydGlmaWNhdGUgYXV0aG9yaXR5IChDQSkgYW5kIGl0IG11c3RcbiAgICogYmUgcHJvdmlzaW9uZWQgaW4gQVdTIENlcnRpZmljYXRlIE1hbmFnZXIgKEFDTSkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIHVzZXItYmFzZWQgYXV0aGVudGljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudENlcnRpZmljYXRlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB1c2VyLWJhc2VkIGF1dGhlbnRpY2F0aW9uIHRvIHVzZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBuL2xhdGVzdC9jbGllbnR2cG4tYWRtaW4vY2xpZW50LWF1dGhlbnRpY2F0aW9uLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2UgbXV0dWFsIGF1dGhlbnRpY2F0aW9uXG4gICAqL1xuICByZWFkb25seSB1c2VyQmFzZWRBdXRoZW50aWNhdGlvbj86IENsaWVudFZwblVzZXJCYXNlZEF1dGhlbnRpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSBjb25uZWN0aW9ucyBsb2dnaW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGxvZ2dpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIENsb3VkV2F0Y2ggTG9ncyBsb2cgZ3JvdXAgZm9yIGNvbm5lY3Rpb24gbG9nZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IGdyb3VwIGlzIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwPzogbG9ncy5JTG9nR3JvdXA7XG5cbiAgLyoqXG4gICAqIEEgQ2xvdWRXYXRjaCBMb2dzIGxvZyBzdHJlYW0gZm9yIGNvbm5lY3Rpb24gbG9nZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmV3IHN0cmVhbSBpcyBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBsb2dTdHJlYW0/OiBsb2dzLklMb2dTdHJlYW07XG5cbiAgLyoqXG4gICAqIFRoZSBBV1MgTGFtYmRhIGZ1bmN0aW9uIHVzZWQgZm9yIGNvbm5lY3Rpb24gYXV0aG9yaXphdGlvblxuICAgKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uIG11c3QgYmVnaW4gd2l0aCB0aGUgYEFXU0NsaWVudFZQTi1gIHByZWZpeFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGNvbm5lY3Rpb24gaGFuZGxlclxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50Q29ubmVjdGlvbkhhbmRsZXI/OiBJQ2xpZW50VnBuQ29ubmVjdGlvbkhhbmRsZXI7XG5cbiAgLyoqXG4gICAqIEEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIENsaWVudCBWUE4gZW5kcG9pbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gZGVzY3JpcHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdXJpdHkgZ3JvdXBzIHRvIGFwcGx5IHRvIHRoZSB0YXJnZXQgbmV0d29yay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5ldyBzZWN1cml0eSBncm91cCBpcyBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUdyb3Vwcz86IElTZWN1cml0eUdyb3VwW107XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciB0byBlbmFibGUgdGhlIHNlbGYtc2VydmljZSBwb3J0YWwgZm9yIHRoZSBDbGllbnQgVlBOIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzZWxmU2VydmljZVBvcnRhbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVyQ2VydGlmaWNhdGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgc3BsaXQtdHVubmVsIGlzIGVuYWJsZWQgb24gdGhlIEFXUyBDbGllbnQgVlBOIGVuZHBvaW50LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cG4vbGF0ZXN0L2NsaWVudHZwbi1hZG1pbi9zcGxpdC10dW5uZWwtdnBuLmh0bWxcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNwbGl0VHVubmVsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRyYW5zcG9ydCBwcm90b2NvbCB0byBiZSB1c2VkIGJ5IHRoZSBWUE4gc2Vzc2lvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgVHJhbnNwb3J0UHJvdG9jb2wuVURQXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BvcnRQcm90b2NvbD86IFRyYW5zcG9ydFByb3RvY29sO1xuXG4gIC8qKlxuICAgKiBUaGUgcG9ydCBudW1iZXIgdG8gYXNzaWduIHRvIHRoZSBDbGllbnQgVlBOIGVuZHBvaW50IGZvciBUQ1AgYW5kIFVEUFxuICAgKiB0cmFmZmljLlxuICAgKlxuICAgKiBAZGVmYXVsdCBWcG5Qb3J0LkhUVFBTXG4gICAqL1xuICByZWFkb25seSBwb3J0PzogVnBuUG9ydDtcblxuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIEROUyBzZXJ2ZXJzIHRvIGJlIHVzZWQgZm9yIEROUyByZXNvbHV0aW9uLlxuICAgKlxuICAgKiBBIENsaWVudCBWUE4gZW5kcG9pbnQgY2FuIGhhdmUgdXAgdG8gdHdvIEROUyBzZXJ2ZXJzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVzZSB0aGUgRE5TIGFkZHJlc3MgY29uZmlndXJlZCBvbiB0aGUgZGV2aWNlXG4gICAqL1xuICByZWFkb25seSBkbnNTZXJ2ZXJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFN1Ym5ldHMgdG8gYXNzb2NpYXRlIHRvIHRoZSBjbGllbnQgVlBOIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBWUEMgZGVmYXVsdCBzdHJhdGVneVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhdXRob3JpemUgYWxsIHVzZXJzIHRvIHRoZSBWUEMgQ0lEUlxuICAgKlxuICAgKiBUaGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlcyBhbiBhdXRob3JpemF0aW9uIHJ1bGUuIFNldCB0aGlzIHRvIGBmYWxzZWAgYW5kXG4gICAqIHVzZSBgYWRkQXV0aG9yaXphdGlvblJ1bGUoKWAgdG8gY3JlYXRlIHlvdXIgb3duIHJ1bGVzIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6ZUFsbFVzZXJzVG9WcGNDaWRyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gVlBOIHNlc3Npb24gZHVyYXRpb24gdGltZS5cbiAgICpcbiAgICogQGRlZmF1bHQgQ2xpZW50VnBuU2Vzc2lvblRpbWVvdXQuVFdFTlRZX0ZPVVJfSE9VUlNcbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25UaW1lb3V0PzogQ2xpZW50VnBuU2Vzc2lvblRpbWVvdXQ7XG5cbiAgLyoqXG4gICAqIEN1c3RvbWl6YWJsZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gYSBiYW5uZXIgb24gQVdTIHByb3ZpZGVkIGNsaWVudHNcbiAgICogd2hlbiBhIFZQTiBzZXNzaW9uIGlzIGVzdGFibGlzaGVkLlxuICAgKlxuICAgKiBVVEYtOCBlbmNvZGVkIGNoYXJhY3RlcnMgb25seS4gTWF4aW11bSBvZiAxNDAwIGNoYXJhY3RlcnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYmFubmVyIGlzIHByZXNlbnRlZCB0byB0aGUgY2xpZW50XG4gICAqL1xuICByZWFkb25seSBjbGllbnRMb2dpbkJhbm5lcj86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVnaXN0ZXIgVGVycmFmb3JtIG91dHB1dHMgZm9yIHRoaXMgVGVycmFDb25zdHJ1Y3RcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdGVyT3V0cHV0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgb3V0cHV0cyBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IGlkXG4gICAqL1xuICByZWFkb25seSBvdXRwdXROYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1heGltdW0gVlBOIHNlc3Npb24gZHVyYXRpb24gdGltZVxuICovXG5leHBvcnQgZW51bSBDbGllbnRWcG5TZXNzaW9uVGltZW91dCB7XG4gIC8qKiA4IGhvdXJzICovXG4gIEVJR0hUX0hPVVJTID0gOCxcbiAgLyoqIDEwIGhvdXJzICovXG4gIFRFTl9IT1VSUyA9IDEwLFxuICAvKiogMTIgaG91cnMgKi9cbiAgVFdFTFZFX0hPVVJTID0gMTIsXG4gIC8qKiAyNCBob3VycyAqL1xuICBUV0VOVFlfRk9VUl9IT1VSUyA9IDI0LFxufVxuXG4vKipcbiAqIFVzZXItYmFzZWQgYXV0aGVudGljYXRpb24gZm9yIGEgY2xpZW50IFZQTiBlbmRwb2ludFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2xpZW50VnBuVXNlckJhc2VkQXV0aGVudGljYXRpb24ge1xuICAvKipcbiAgICogQWN0aXZlIERpcmVjdG9yeSBhdXRoZW50aWNhdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhY3RpdmVEaXJlY3RvcnkoXG4gICAgZGlyZWN0b3J5SWQ6IHN0cmluZyxcbiAgKTogQ2xpZW50VnBuVXNlckJhc2VkQXV0aGVudGljYXRpb24ge1xuICAgIHJldHVybiBuZXcgQWN0aXZlRGlyZWN0b3J5QXV0aGVudGljYXRpb24oZGlyZWN0b3J5SWQpO1xuICB9XG5cbiAgLyoqIEZlZGVyYXRlZCBhdXRoZW50aWNhdGlvbiAqL1xuICBwdWJsaWMgc3RhdGljIGZlZGVyYXRlZChcbiAgICBzYW1sUHJvdmlkZXI6IElTYW1sUHJvdmlkZXIsXG4gICAgc2VsZlNlcnZpY2VTYW1sUHJvdmlkZXI/OiBJU2FtbFByb3ZpZGVyLFxuICApOiBDbGllbnRWcG5Vc2VyQmFzZWRBdXRoZW50aWNhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBGZWRlcmF0ZWRBdXRoZW50aWNhdGlvbihzYW1sUHJvdmlkZXIsIHNlbGZTZXJ2aWNlU2FtbFByb3ZpZGVyKTtcbiAgfVxuXG4gIC8qKiBSZW5kZXJzIHRoZSB1c2VyIGJhc2VkIGF1dGhlbnRpY2F0aW9uICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZW5kZXIoKTogYW55O1xufVxuXG4vKipcbiAqIEFjdGl2ZSBEaXJlY3RvcnkgYXV0aGVudGljYXRpb25cbiAqL1xuY2xhc3MgQWN0aXZlRGlyZWN0b3J5QXV0aGVudGljYXRpb24gZXh0ZW5kcyBDbGllbnRWcG5Vc2VyQmFzZWRBdXRoZW50aWNhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGlyZWN0b3J5SWQ6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICByZW5kZXIoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJkaXJlY3Rvcnktc2VydmljZS1hdXRoZW50aWNhdGlvblwiLFxuICAgICAgYWN0aXZlRGlyZWN0b3J5SWQ6IHRoaXMuZGlyZWN0b3J5SWQsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEZlZGVyYXRlZCBhdXRoZW50aWNhdGlvblxuICovXG5jbGFzcyBGZWRlcmF0ZWRBdXRoZW50aWNhdGlvbiBleHRlbmRzIENsaWVudFZwblVzZXJCYXNlZEF1dGhlbnRpY2F0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBzYW1sUHJvdmlkZXI6IElTYW1sUHJvdmlkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZWxmU2VydmljZVNhbWxQcm92aWRlcj86IElTYW1sUHJvdmlkZXIsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICByZW5kZXIoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJmZWRlcmF0ZWQtYXV0aGVudGljYXRpb25cIixcbiAgICAgIHNhbWxQcm92aWRlckFybjogdGhpcy5zYW1sUHJvdmlkZXIuc2FtbFByb3ZpZGVyQXJuLFxuICAgICAgc2VsZlNlcnZpY2VTYW1sUHJvdmlkZXJBcm46IHRoaXMuc2VsZlNlcnZpY2VTYW1sUHJvdmlkZXI/LnNhbWxQcm92aWRlckFybixcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYSBjbGllbnQgVlBOIGVuZHBvaW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50VnBuRW5kcG9pbnRQcm9wc1xuICBleHRlbmRzIENsaWVudFZwbkVuZHBvaW50T3B0aW9ucyxcbiAgICBBd3NDb25zdHJ1Y3RQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRvIGNvbm5lY3QgdG8uXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGM7XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyB3aGVuIGltcG9ydGluZyBhbiBleGlzdGluZyBjbGllbnQgVlBOIGVuZHBvaW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50VnBuRW5kcG9pbnRBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBlbmRwb2ludCBJRFxuICAgKi9cbiAgcmVhZG9ubHkgZW5kcG9pbnRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjdXJpdHkgZ3JvdXBzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW5kcG9pbnRcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzOiBJU2VjdXJpdHlHcm91cFtdO1xufVxuXG4vKipcbiAqIEEgY2xpZW50IFZQTiBjb25ubmVjdGlvblxuICovXG5leHBvcnQgY2xhc3MgQ2xpZW50VnBuRW5kcG9pbnRcbiAgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlXG4gIGltcGxlbWVudHMgSUNsaWVudFZwbkVuZHBvaW50XG57XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgY2xpZW50IFZQTiBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRW5kcG9pbnRBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogQ2xpZW50VnBuRW5kcG9pbnRBdHRyaWJ1dGVzLFxuICApOiBJQ2xpZW50VnBuRW5kcG9pbnQge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJQ2xpZW50VnBuRW5kcG9pbnQge1xuICAgICAgcHVibGljIHJlYWRvbmx5IGVuZHBvaW50SWQgPSBhdHRycy5lbmRwb2ludElkO1xuICAgICAgcHVibGljIGdldCBjbGllbnRWcG5PdXRwdXRzKCk6IENsaWVudFZwbk91dHB1dHMge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNsaWVudFZwbkVuZHBvaW50SWQ6IHRoaXMuZW5kcG9pbnRJZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50VnBuT3V0cHV0cztcbiAgICAgIH1cbiAgICAgIHB1YmxpYyByZWFkb25seSBjb25uZWN0aW9ucyA9IG5ldyBDb25uZWN0aW9ucyh7XG4gICAgICAgIHNlY3VyaXR5R3JvdXBzOiBhdHRycy5zZWN1cml0eUdyb3VwcyxcbiAgICAgIH0pO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhcmdldE5ldHdvcmtzQXNzb2NpYXRlZDogSURlcGVuZGFibGUgPVxuICAgICAgICBuZXcgRGVwZW5kZW5jeUdyb3VwKCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZW5kcG9pbnRJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgc2VsZlNlcnZpY2VQb3J0YWxVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93cyBzcGVjaWZ5IHNlY3VyaXR5IGdyb3VwIGNvbm5lY3Rpb25zIGZvciB0aGUgZW5kcG9pbnQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29ubmVjdGlvbnM6IENvbm5lY3Rpb25zO1xuXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXROZXR3b3Jrc0Fzc29jaWF0ZWQ6IElEZXBlbmRhYmxlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RhcmdldE5ldHdvcmtzQXNzb2NpYXRlZCA9IG5ldyBEZXBlbmRlbmN5R3JvdXAoKTtcblxuICBwdWJsaWMgZ2V0IGNsaWVudFZwbk91dHB1dHMoKTogQ2xpZW50VnBuT3V0cHV0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWVudFZwbkVuZHBvaW50SWQ6IHRoaXMuZW5kcG9pbnRJZCxcbiAgICAgIHNlbGZTZXJ2aWNlUG9ydGFsVXJsOiB0aGlzLnNlbGZTZXJ2aWNlUG9ydGFsVXJsLFxuICAgIH07XG4gIH1cbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNsaWVudFZwbk91dHB1dHM7XG4gIH1cbiAgcHVibGljIHJlc291cmNlOiBlYzJDbGllbnRWcG5FbmRwb2ludC5FYzJDbGllbnRWcG5FbmRwb2ludDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQ2xpZW50VnBuRW5kcG9pbnRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMudnBjLnZwY0NpZHJCbG9jaykpIHtcbiAgICAgIGNvbnN0IGNsaWVudENpZHIgPSBuZXcgQ2lkckJsb2NrKHByb3BzLmNpZHIpO1xuICAgICAgY29uc3QgdnBjQ2lkciA9IG5ldyBDaWRyQmxvY2socHJvcHMudnBjLnZwY0NpZHJCbG9jayk7XG4gICAgICBpZiAodnBjQ2lkci5jb250YWluc0NpZHIoY2xpZW50Q2lkcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGNsaWVudCBDSURSIGNhbm5vdCBvdmVybGFwIHdpdGggdGhlIGxvY2FsIENJRFIgb2YgdGhlIFZQQ1wiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5kbnNTZXJ2ZXJzICYmIHByb3BzLmRuc1NlcnZlcnMubGVuZ3RoID4gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjbGllbnQgVlBOIGVuZHBvaW50IGNhbiBoYXZlIHVwIHRvIHR3byBETlMgc2VydmVyc1wiKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMubG9nZ2luZyA9PSBmYWxzZSAmJiAocHJvcHMubG9nR3JvdXAgfHwgcHJvcHMubG9nU3RyZWFtKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBzcGVjaWZ5IGBsb2dHcm91cGAgb3IgYGxvZ1N0cmVhbWAgd2hlbiBsb2dnaW5nIGlzIGRpc2FibGVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLmNsaWVudENvbm5lY3Rpb25IYW5kbGVyICYmXG4gICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLmNsaWVudENvbm5lY3Rpb25IYW5kbGVyLmZ1bmN0aW9uTmFtZSkgJiZcbiAgICAgICFwcm9wcy5jbGllbnRDb25uZWN0aW9uSGFuZGxlci5mdW5jdGlvbk5hbWUuc3RhcnRzV2l0aChcIkFXU0NsaWVudFZQTi1cIilcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJUaGUgbmFtZSBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uIG11c3QgYmVnaW4gd2l0aCB0aGUgYEFXU0NsaWVudFZQTi1gIHByZWZpeFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5jbGllbnRMb2dpbkJhbm5lciAmJlxuICAgICAgIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy5jbGllbnRMb2dpbkJhbm5lcikgJiZcbiAgICAgIHByb3BzLmNsaWVudExvZ2luQmFubmVyLmxlbmd0aCA+IDE0MDBcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBtYXhpbXVtIGxlbmd0aCBmb3IgdGhlIGNsaWVudCBsb2dpbiBiYW5uZXIgaXMgMTQwMCwgZ290ICR7cHJvcHMuY2xpZW50TG9naW5CYW5uZXIubGVuZ3RofWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGxvZ2dpbmcgPSBwcm9wcy5sb2dnaW5nID8/IHRydWU7XG4gICAgY29uc3QgbG9nR3JvdXAgPSBsb2dnaW5nXG4gICAgICA/IChwcm9wcy5sb2dHcm91cCA/PyBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCBcIkxvZ0dyb3VwXCIpKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBzZWN1cml0eUdyb3VwcyA9IHByb3BzLnNlY3VyaXR5R3JvdXBzID8/IFtcbiAgICAgIG5ldyBTZWN1cml0eUdyb3VwKHRoaXMsIFwiU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgfSksXG4gICAgXTtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cHMgfSk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IGVjMkNsaWVudFZwbkVuZHBvaW50LkVjMkNsaWVudFZwbkVuZHBvaW50KFxuICAgICAgdGhpcyxcbiAgICAgIFwiUmVzb3VyY2VcIixcbiAgICAgIHtcbiAgICAgICAgYXV0aGVudGljYXRpb25PcHRpb25zOiByZW5kZXJBdXRoZW50aWNhdGlvbk9wdGlvbnMoXG4gICAgICAgICAgcHJvcHMuY2xpZW50Q2VydGlmaWNhdGVBcm4sXG4gICAgICAgICAgcHJvcHMudXNlckJhc2VkQXV0aGVudGljYXRpb24sXG4gICAgICAgICksXG4gICAgICAgIGNsaWVudENpZHJCbG9jazogcHJvcHMuY2lkcixcbiAgICAgICAgY2xpZW50Q29ubmVjdE9wdGlvbnM6IHByb3BzLmNsaWVudENvbm5lY3Rpb25IYW5kbGVyXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICAgIGxhbWJkYUZ1bmN0aW9uQXJuOiBwcm9wcy5jbGllbnRDb25uZWN0aW9uSGFuZGxlci5mdW5jdGlvbkFybixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgY29ubmVjdGlvbkxvZ09wdGlvbnM6IHtcbiAgICAgICAgICBlbmFibGVkOiBsb2dnaW5nLFxuICAgICAgICAgIGNsb3Vkd2F0Y2hMb2dHcm91cDogbG9nR3JvdXA/LmxvZ0dyb3VwTmFtZSxcbiAgICAgICAgICBjbG91ZHdhdGNoTG9nU3RyZWFtOiBwcm9wcy5sb2dTdHJlYW0/LmxvZ1N0cmVhbU5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgICAgZG5zU2VydmVyczogcHJvcHMuZG5zU2VydmVycyxcbiAgICAgICAgc2VjdXJpdHlHcm91cElkczogc2VjdXJpdHlHcm91cHMubWFwKChzKSA9PiBzLnNlY3VyaXR5R3JvdXBJZCksXG4gICAgICAgIHNlbGZTZXJ2aWNlUG9ydGFsOiBib29sZWFuVG9FbmFibGVkRGlzYWJsZWQocHJvcHMuc2VsZlNlcnZpY2VQb3J0YWwpLFxuICAgICAgICBzZXJ2ZXJDZXJ0aWZpY2F0ZUFybjogcHJvcHMuc2VydmVyQ2VydGlmaWNhdGVBcm4sXG4gICAgICAgIHNwbGl0VHVubmVsOiBwcm9wcy5zcGxpdFR1bm5lbCxcbiAgICAgICAgdHJhbnNwb3J0UHJvdG9jb2w6IHByb3BzLnRyYW5zcG9ydFByb3RvY29sLFxuICAgICAgICB2cGNJZDogcHJvcHMudnBjLnZwY0lkLFxuICAgICAgICB2cG5Qb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgICBzZXNzaW9uVGltZW91dEhvdXJzOiBwcm9wcy5zZXNzaW9uVGltZW91dCxcbiAgICAgICAgY2xpZW50TG9naW5CYW5uZXJPcHRpb25zOiBwcm9wcy5jbGllbnRMb2dpbkJhbm5lclxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICBiYW5uZXJUZXh0OiBwcm9wcy5jbGllbnRMb2dpbkJhbm5lcixcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuZW5kcG9pbnRJZCA9IHRoaXMucmVzb3VyY2UuaWQ7XG5cbiAgICBpZiAocHJvcHMudXNlckJhc2VkQXV0aGVudGljYXRpb24gJiYgKHByb3BzLnNlbGZTZXJ2aWNlUG9ydGFsID8/IHRydWUpKSB7XG4gICAgICAvLyBPdXRwdXQgc2VsZi1zZXJ2aWNlIHBvcnRhbCBVUkxcbiAgICAgIHRoaXMuc2VsZlNlcnZpY2VQb3J0YWxVcmwgPSB0aGlzLnJlc291cmNlLnNlbGZTZXJ2aWNlUG9ydGFsVXJsO1xuICAgICAgLy8gbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIlNlbGZTZXJ2aWNlUG9ydGFsVXJsXCIsIHtcbiAgICAgIC8vICAgdmFsdWU6IGBodHRwczovL3NlbGYtc2VydmljZS5jbGllbnR2cG4uYW1hem9uYXdzLmNvbS9lbmRwb2ludHMvJHt0aGlzLmVuZHBvaW50SWR9YCxcbiAgICAgIC8vIH0pO1xuICAgIH1cblxuICAgIC8vIEFzc29jaWF0ZSBzdWJuZXRzXG4gICAgY29uc3Qgc3VibmV0SWRzID0gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMocHJvcHMudnBjU3VibmV0cykuc3VibmV0SWRzO1xuXG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChzdWJuZXRJZHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2Fubm90IGFzc29jaWF0ZSBzdWJuZXRzIHdoZW4gVlBDIGFyZSBpbXBvcnRlZCBmcm9tIHBhcmFtZXRlcnMgb3IgZXhwb3J0cyBjb250YWluaW5nIGxpc3RzIG9mIHN1Ym5ldCBJRHMuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2lkeCwgc3VibmV0SWRdIG9mIE9iamVjdC5lbnRyaWVzKHN1Ym5ldElkcykpIHtcbiAgICAgIHRoaXMuX3RhcmdldE5ldHdvcmtzQXNzb2NpYXRlZC5hZGQoXG4gICAgICAgIG5ldyBlYzJDbGllbnRWcG5OZXR3b3JrQXNzb2NpYXRpb24uRWMyQ2xpZW50VnBuTmV0d29ya0Fzc29jaWF0aW9uKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYEFzc29jaWF0aW9uJHtpZHh9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGllbnRWcG5FbmRwb2ludElkOiB0aGlzLmVuZHBvaW50SWQsXG4gICAgICAgICAgICBzdWJuZXRJZCxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy50YXJnZXROZXR3b3Jrc0Fzc29jaWF0ZWQgPSB0aGlzLl90YXJnZXROZXR3b3Jrc0Fzc29jaWF0ZWQ7XG5cbiAgICBpZiAocHJvcHMuYXV0aG9yaXplQWxsVXNlcnNUb1ZwY0NpZHIgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5hZGRBdXRob3JpemF0aW9uUnVsZShcIkF1dGhvcml6ZUFsbFwiLCB7XG4gICAgICAgIGNpZHI6IHByb3BzLnZwYy52cGNDaWRyQmxvY2ssXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBhdXRob3JpemF0aW9uIHJ1bGUgdG8gdGhpcyBlbmRwb2ludFxuICAgKi9cbiAgcHVibGljIGFkZEF1dGhvcml6YXRpb25SdWxlKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IENsaWVudFZwbkF1dGhvcml6YXRpb25SdWxlT3B0aW9ucyxcbiAgKTogQ2xpZW50VnBuQXV0aG9yaXphdGlvblJ1bGUge1xuICAgIHJldHVybiBuZXcgQ2xpZW50VnBuQXV0aG9yaXphdGlvblJ1bGUodGhpcywgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgY2xpZW50VnBuRW5kcG9pbnQ6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJvdXRlIHRvIHRoaXMgZW5kcG9pbnRcbiAgICovXG4gIHB1YmxpYyBhZGRSb3V0ZShpZDogc3RyaW5nLCBwcm9wczogQ2xpZW50VnBuUm91dGVPcHRpb25zKTogQ2xpZW50VnBuUm91dGUge1xuICAgIHJldHVybiBuZXcgQ2xpZW50VnBuUm91dGUodGhpcywgaWQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgY2xpZW50VnBuRW5kcG9pbnQ6IHRoaXMsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyQXV0aGVudGljYXRpb25PcHRpb25zKFxuICBjbGllbnRDZXJ0aWZpY2F0ZUFybj86IHN0cmluZyxcbiAgdXNlckJhc2VkQXV0aGVudGljYXRpb24/OiBDbGllbnRWcG5Vc2VyQmFzZWRBdXRoZW50aWNhdGlvbixcbik6IGVjMkNsaWVudFZwbkVuZHBvaW50LkVjMkNsaWVudFZwbkVuZHBvaW50QXV0aGVudGljYXRpb25PcHRpb25zW10ge1xuICBjb25zdCBhdXRoZW50aWNhdGlvbk9wdGlvbnM6IGVjMkNsaWVudFZwbkVuZHBvaW50LkVjMkNsaWVudFZwbkVuZHBvaW50QXV0aGVudGljYXRpb25PcHRpb25zW10gPVxuICAgIFtdO1xuXG4gIGlmIChjbGllbnRDZXJ0aWZpY2F0ZUFybikge1xuICAgIGF1dGhlbnRpY2F0aW9uT3B0aW9ucy5wdXNoKHtcbiAgICAgIHR5cGU6IFwiY2VydGlmaWNhdGUtYXV0aGVudGljYXRpb25cIixcbiAgICAgIHJvb3RDZXJ0aWZpY2F0ZUNoYWluQXJuOiBjbGllbnRDZXJ0aWZpY2F0ZUFybixcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh1c2VyQmFzZWRBdXRoZW50aWNhdGlvbikge1xuICAgIGF1dGhlbnRpY2F0aW9uT3B0aW9ucy5wdXNoKHVzZXJCYXNlZEF1dGhlbnRpY2F0aW9uLnJlbmRlcigpKTtcbiAgfVxuXG4gIGlmIChhdXRoZW50aWNhdGlvbk9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJBIGNsaWVudCBWUE4gZW5kcG9pbnQgbXVzdCB1c2UgYXQgbGVhc3Qgb25lIGF1dGhlbnRpY2F0aW9uIG9wdGlvblwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGF1dGhlbnRpY2F0aW9uT3B0aW9ucztcbn1cblxuZnVuY3Rpb24gYm9vbGVhblRvRW5hYmxlZERpc2FibGVkKFxuICB2YWw/OiBib29sZWFuLFxuKTogXCJlbmFibGVkXCIgfCBcImRpc2FibGVkXCIgfCB1bmRlZmluZWQge1xuICBzd2l0Y2ggKHZhbCkge1xuICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjYXNlIHRydWU6XG4gICAgICByZXR1cm4gXCJlbmFibGVkXCI7XG4gICAgY2FzZSBmYWxzZTpcbiAgICAgIHJldHVybiBcImRpc2FibGVkXCI7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,67 @@
1
+ import { ec2ClientVpnRoute } from "@cdktf/provider-aws";
2
+ import { Construct } from "constructs";
3
+ import { IClientVpnEndpoint } from "./client-vpn-endpoint-types";
4
+ import { ISubnet } from "./vpc";
5
+ import { AwsConstructBase, AwsConstructProps } from "../aws-construct";
6
+ /**
7
+ * Options for a ClientVpnRoute
8
+ */
9
+ export interface ClientVpnRouteOptions {
10
+ /**
11
+ * The IPv4 address range, in CIDR notation, of the route destination.
12
+ *
13
+ * For example:
14
+ * - To add a route for Internet access, enter 0.0.0.0/0
15
+ * - To add a route for a peered VPC, enter the peered VPC's IPv4 CIDR range
16
+ * - To add a route for an on-premises network, enter the AWS Site-to-Site VPN
17
+ * connection's IPv4 CIDR range
18
+ * - To add a route for the local network, enter the client CIDR range
19
+ */
20
+ readonly cidr: string;
21
+ /**
22
+ * A brief description of the authorization rule.
23
+ *
24
+ * @default - no description
25
+ */
26
+ readonly description?: string;
27
+ /**
28
+ * The target for the route
29
+ */
30
+ readonly target: ClientVpnRouteTarget;
31
+ }
32
+ /**
33
+ * Target for a client VPN route
34
+ */
35
+ export declare abstract class ClientVpnRouteTarget {
36
+ /**
37
+ * Subnet
38
+ *
39
+ * The specified subnet must be an existing target network of the client VPN
40
+ * endpoint.
41
+ */
42
+ static subnet(subnet: ISubnet): ClientVpnRouteTarget;
43
+ /**
44
+ * Local network
45
+ */
46
+ static local(): ClientVpnRouteTarget;
47
+ /** The subnet ID */
48
+ abstract readonly subnetId: string;
49
+ }
50
+ /**
51
+ * Properties for a ClientVpnRoute
52
+ */
53
+ export interface ClientVpnRouteProps extends ClientVpnRouteOptions, AwsConstructProps {
54
+ /**
55
+ * The client VPN endpoint to which to add the route.
56
+ * @default clientVpnEndpoint is required
57
+ */
58
+ readonly clientVpnEndpoint: IClientVpnEndpoint;
59
+ }
60
+ /**
61
+ * A client VPN route
62
+ */
63
+ export declare class ClientVpnRoute extends AwsConstructBase {
64
+ resource: ec2ClientVpnRoute.Ec2ClientVpnRoute;
65
+ get outputs(): Record<string, any>;
66
+ constructor(scope: Construct, id: string, props: ClientVpnRouteProps);
67
+ }
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var _a, _b;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ClientVpnRoute = exports.ClientVpnRouteTarget = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ // https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ec2/lib/client-vpn-route.ts
7
+ const provider_aws_1 = require("@cdktf/provider-aws");
8
+ const aws_construct_1 = require("../aws-construct");
9
+ /**
10
+ * Target for a client VPN route
11
+ */
12
+ class ClientVpnRouteTarget {
13
+ /**
14
+ * Subnet
15
+ *
16
+ * The specified subnet must be an existing target network of the client VPN
17
+ * endpoint.
18
+ */
19
+ static subnet(subnet) {
20
+ return { subnetId: subnet.subnetId };
21
+ }
22
+ /**
23
+ * Local network
24
+ */
25
+ static local() {
26
+ return { subnetId: "local" };
27
+ }
28
+ }
29
+ exports.ClientVpnRouteTarget = ClientVpnRouteTarget;
30
+ _a = JSII_RTTI_SYMBOL_1;
31
+ ClientVpnRouteTarget[_a] = { fqn: "terraconstructs.aws.compute.ClientVpnRouteTarget", version: "0.0.12" };
32
+ /**
33
+ * A client VPN route
34
+ */
35
+ class ClientVpnRoute extends aws_construct_1.AwsConstructBase {
36
+ get outputs() {
37
+ return {
38
+ // is this the ID of the Client VPN endpoint or the VPN route?
39
+ clientVpnRouteId: this.resource.id,
40
+ };
41
+ }
42
+ constructor(scope, id, props) {
43
+ super(scope, id, props);
44
+ this.resource = new provider_aws_1.ec2ClientVpnRoute.Ec2ClientVpnRoute(this, "Resource", {
45
+ clientVpnEndpointId: props.clientVpnEndpoint.endpointId,
46
+ description: props.description,
47
+ destinationCidrBlock: props.cidr,
48
+ targetVpcSubnetId: props.target.subnetId,
49
+ });
50
+ // See https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-clientvpnroute.html
51
+ this.resource.node.addDependency(props.clientVpnEndpoint.targetNetworksAssociated);
52
+ }
53
+ }
54
+ exports.ClientVpnRoute = ClientVpnRoute;
55
+ _b = JSII_RTTI_SYMBOL_1;
56
+ ClientVpnRoute[_b] = { fqn: "terraconstructs.aws.compute.ClientVpnRoute", version: "0.0.12" };
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXZwbi1yb3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9jbGllbnQtdnBuLXJvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0dBQW9HO0FBRXBHLHNEQUF3RDtBQUl4RCxvREFBdUU7QUErQnZFOztHQUVHO0FBQ0gsTUFBc0Isb0JBQW9CO0lBQ3hDOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFlO1FBQ2xDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxLQUFLO1FBQ2pCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQzs7QUFoQkgsb0RBb0JDOzs7QUFlRDs7R0FFRztBQUNILE1BQWEsY0FBZSxTQUFRLGdDQUFnQjtJQUVsRCxJQUFXLE9BQU87UUFDaEIsT0FBTztZQUNMLDhEQUE4RDtZQUM5RCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFDRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxnQ0FBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3hFLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVO1lBQ3ZELFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixvQkFBb0IsRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVE7U0FDekMsQ0FBQyxDQUFDO1FBRUgsMEdBQTBHO1FBQzFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FDOUIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixDQUNqRCxDQUFDO0lBQ0osQ0FBQzs7QUFyQkgsd0NBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWVjMi9saWIvY2xpZW50LXZwbi1yb3V0ZS50c1xuXG5pbXBvcnQgeyBlYzJDbGllbnRWcG5Sb3V0ZSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSUNsaWVudFZwbkVuZHBvaW50IH0gZnJvbSBcIi4vY2xpZW50LXZwbi1lbmRwb2ludC10eXBlc1wiO1xuaW1wb3J0IHsgSVN1Ym5ldCB9IGZyb20gXCIuL3ZwY1wiO1xuaW1wb3J0IHsgQXdzQ29uc3RydWN0QmFzZSwgQXdzQ29uc3RydWN0UHJvcHMgfSBmcm9tIFwiLi4vYXdzLWNvbnN0cnVjdFwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGEgQ2xpZW50VnBuUm91dGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGllbnRWcG5Sb3V0ZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIElQdjQgYWRkcmVzcyByYW5nZSwgaW4gQ0lEUiBub3RhdGlvbiwgb2YgdGhlIHJvdXRlIGRlc3RpbmF0aW9uLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICogICAtIFRvIGFkZCBhIHJvdXRlIGZvciBJbnRlcm5ldCBhY2Nlc3MsIGVudGVyIDAuMC4wLjAvMFxuICAgKiAgIC0gVG8gYWRkIGEgcm91dGUgZm9yIGEgcGVlcmVkIFZQQywgZW50ZXIgdGhlIHBlZXJlZCBWUEMncyBJUHY0IENJRFIgcmFuZ2VcbiAgICogICAtIFRvIGFkZCBhIHJvdXRlIGZvciBhbiBvbi1wcmVtaXNlcyBuZXR3b3JrLCBlbnRlciB0aGUgQVdTIFNpdGUtdG8tU2l0ZSBWUE5cbiAgICogICAgIGNvbm5lY3Rpb24ncyBJUHY0IENJRFIgcmFuZ2VcbiAgICogICAtIFRvIGFkZCBhIHJvdXRlIGZvciB0aGUgbG9jYWwgbmV0d29yaywgZW50ZXIgdGhlIGNsaWVudCBDSURSIHJhbmdlXG4gICAqL1xuICByZWFkb25seSBjaWRyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGF1dGhvcml6YXRpb24gcnVsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgZm9yIHRoZSByb3V0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBDbGllbnRWcG5Sb3V0ZVRhcmdldDtcbn1cblxuLyoqXG4gKiBUYXJnZXQgZm9yIGEgY2xpZW50IFZQTiByb3V0ZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2xpZW50VnBuUm91dGVUYXJnZXQge1xuICAvKipcbiAgICogU3VibmV0XG4gICAqXG4gICAqIFRoZSBzcGVjaWZpZWQgc3VibmV0IG11c3QgYmUgYW4gZXhpc3RpbmcgdGFyZ2V0IG5ldHdvcmsgb2YgdGhlIGNsaWVudCBWUE5cbiAgICogZW5kcG9pbnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHN1Ym5ldChzdWJuZXQ6IElTdWJuZXQpOiBDbGllbnRWcG5Sb3V0ZVRhcmdldCB7XG4gICAgcmV0dXJuIHsgc3VibmV0SWQ6IHN1Ym5ldC5zdWJuZXRJZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2FsIG5ldHdvcmtcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbG9jYWwoKTogQ2xpZW50VnBuUm91dGVUYXJnZXQge1xuICAgIHJldHVybiB7IHN1Ym5ldElkOiBcImxvY2FsXCIgfTtcbiAgfVxuXG4gIC8qKiBUaGUgc3VibmV0IElEICovXG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBzdWJuZXRJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgQ2xpZW50VnBuUm91dGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGllbnRWcG5Sb3V0ZVByb3BzXG4gIGV4dGVuZHMgQ2xpZW50VnBuUm91dGVPcHRpb25zLFxuICAgIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjbGllbnQgVlBOIGVuZHBvaW50IHRvIHdoaWNoIHRvIGFkZCB0aGUgcm91dGUuXG4gICAqIEBkZWZhdWx0IGNsaWVudFZwbkVuZHBvaW50IGlzIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBjbGllbnRWcG5FbmRwb2ludDogSUNsaWVudFZwbkVuZHBvaW50O1xufVxuXG4vKipcbiAqIEEgY2xpZW50IFZQTiByb3V0ZVxuICovXG5leHBvcnQgY2xhc3MgQ2xpZW50VnBuUm91dGUgZXh0ZW5kcyBBd3NDb25zdHJ1Y3RCYXNlIHtcbiAgcHVibGljIHJlc291cmNlOiBlYzJDbGllbnRWcG5Sb3V0ZS5FYzJDbGllbnRWcG5Sb3V0ZTtcbiAgcHVibGljIGdldCBvdXRwdXRzKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBpcyB0aGlzIHRoZSBJRCBvZiB0aGUgQ2xpZW50IFZQTiBlbmRwb2ludCBvciB0aGUgVlBOIHJvdXRlP1xuICAgICAgY2xpZW50VnBuUm91dGVJZDogdGhpcy5yZXNvdXJjZS5pZCxcbiAgICB9O1xuICB9XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbGllbnRWcG5Sb3V0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBlYzJDbGllbnRWcG5Sb3V0ZS5FYzJDbGllbnRWcG5Sb3V0ZSh0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIGNsaWVudFZwbkVuZHBvaW50SWQ6IHByb3BzLmNsaWVudFZwbkVuZHBvaW50LmVuZHBvaW50SWQsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBkZXN0aW5hdGlvbkNpZHJCbG9jazogcHJvcHMuY2lkcixcbiAgICAgIHRhcmdldFZwY1N1Ym5ldElkOiBwcm9wcy50YXJnZXQuc3VibmV0SWQsXG4gICAgfSk7XG5cbiAgICAvLyBTZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1jbGllbnR2cG5yb3V0ZS5odG1sXG4gICAgdGhpcy5yZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3koXG4gICAgICBwcm9wcy5jbGllbnRWcG5FbmRwb2ludC50YXJnZXROZXR3b3Jrc0Fzc29jaWF0ZWQsXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -300,7 +300,7 @@ class Condition {
300
300
  }
301
301
  exports.Condition = Condition;
302
302
  _a = JSII_RTTI_SYMBOL_1;
303
- Condition[_a] = { fqn: "terraconstructs.aws.compute.Condition", version: "0.0.10" };
303
+ Condition[_a] = { fqn: "terraconstructs.aws.compute.Condition", version: "0.0.12" };
304
304
  /**
305
305
  * Comparison Operator types
306
306
  */
@@ -0,0 +1,137 @@
1
+ import { IPeer } from "./peer";
2
+ import { Port } from "./port";
3
+ import { ISecurityGroup } from "./security-group";
4
+ /**
5
+ * The goal of this module is to make possible to write statements like this:
6
+ *
7
+ * ```ts
8
+ * database.connections.allowFrom(fleet);
9
+ * fleet.connections.allowTo(database);
10
+ * rdgw.connections.allowFromCidrIp('0.3.1.5/86');
11
+ * rgdw.connections.allowTrafficTo(fleet, new AllPorts());
12
+ * ```
13
+ *
14
+ * The insight here is that some connecting peers have information on what ports should
15
+ * be involved in the connection, and some don't.
16
+ */
17
+ /**
18
+ * An object that has a Connections object
19
+ */
20
+ export interface IConnectable {
21
+ /**
22
+ * The network connections associated with this resource.
23
+ */
24
+ readonly connections: Connections;
25
+ }
26
+ /**
27
+ * Properties to intialize a new Connections object
28
+ */
29
+ export interface ConnectionsProps {
30
+ /**
31
+ * Class that represents the rule by which others can connect to this connectable
32
+ *
33
+ * This object is required, but will be derived from securityGroup if that is passed.
34
+ *
35
+ * @default Derived from securityGroup if set.
36
+ */
37
+ readonly peer?: IPeer;
38
+ /**
39
+ * What securityGroup(s) this object is managing connections for
40
+ *
41
+ * @default No security groups
42
+ */
43
+ readonly securityGroups?: ISecurityGroup[];
44
+ /**
45
+ * Default port range for initiating connections to and from this object
46
+ *
47
+ * @default - No default port
48
+ */
49
+ readonly defaultPort?: Port;
50
+ }
51
+ /**
52
+ * Manage the allowed network connections for constructs with Security Groups.
53
+ *
54
+ * Security Groups can be thought of as a firewall for network-connected
55
+ * devices. This class makes it easy to allow network connections to and
56
+ * from security groups, and between security groups individually. When
57
+ * establishing connectivity between security groups, it will automatically
58
+ * add rules in both security groups
59
+ *
60
+ * This object can manage one or more security groups.
61
+ */
62
+ export declare class Connections implements IConnectable {
63
+ readonly connections: Connections;
64
+ /**
65
+ * The default port configured for this connection peer, if available
66
+ */
67
+ readonly defaultPort?: Port;
68
+ /**
69
+ * Underlying securityGroup for this Connections object, if present
70
+ *
71
+ * May be empty if this Connections object is not managing a SecurityGroup,
72
+ * but simply representing a Connectable peer.
73
+ */
74
+ private readonly _securityGroups;
75
+ /**
76
+ * The rule that defines how to represent this peer in a security group
77
+ */
78
+ private readonly _securityGroupRules;
79
+ /**
80
+ * When doing bidirectional grants between Connections, make sure we don't recursive infinitely
81
+ */
82
+ private skip;
83
+ /**
84
+ * When doing bidirectional grants between Security Groups in different stacks, put the rule on the other SG
85
+ */
86
+ private remoteRule;
87
+ constructor(props?: ConnectionsProps);
88
+ get securityGroups(): ISecurityGroup[];
89
+ /**
90
+ * Add a security group to the list of security groups managed by this object
91
+ */
92
+ addSecurityGroup(...securityGroups: ISecurityGroup[]): void;
93
+ /**
94
+ * Allow connections to the peer on the given port
95
+ */
96
+ allowTo(other: IConnectable, portRange: Port, description?: string): void;
97
+ /**
98
+ * Allow connections from the peer on the given port
99
+ */
100
+ allowFrom(other: IConnectable, portRange: Port, description?: string): void;
101
+ /**
102
+ * Allow hosts inside the security group to connect to each other on the given port
103
+ */
104
+ allowInternally(portRange: Port, description?: string): void;
105
+ /**
106
+ * Allow to all IPv4 ranges
107
+ */
108
+ allowToAnyIpv4(portRange: Port, description?: string): void;
109
+ /**
110
+ * Allow from any IPv4 ranges
111
+ */
112
+ allowFromAnyIpv4(portRange: Port, description?: string): void;
113
+ /**
114
+ * Allow connections from the peer on our default port
115
+ *
116
+ * Even if the peer has a default port, we will always use our default port.
117
+ */
118
+ allowDefaultPortFrom(other: IConnectable, description?: string): void;
119
+ /**
120
+ * Allow hosts inside the security group to connect to each other
121
+ */
122
+ allowDefaultPortInternally(description?: string): void;
123
+ /**
124
+ * Allow default connections from all IPv4 ranges
125
+ */
126
+ allowDefaultPortFromAnyIpv4(description?: string): void;
127
+ /**
128
+ * Allow connections to the security group on their default port
129
+ */
130
+ allowToDefaultPort(other: IConnectable, description?: string): void;
131
+ /**
132
+ * Allow connections from the peer on our default port
133
+ *
134
+ * Even if the peer has a default port, we will always use our default port.
135
+ */
136
+ allowDefaultPortTo(other: IConnectable, description?: string): void;
137
+ }