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,217 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.NetworkListener = 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-elasticloadbalancingv2/lib/nlb/network-listener.ts
7
+ const cdktf_1 = require("cdktf");
8
+ const network_listener_action_1 = require("./network-listener-action");
9
+ const network_listener_certificate_1 = require("./network-listener-certificate");
10
+ const network_target_group_1 = require("./network-target-group");
11
+ const duration_1 = require("../../../duration");
12
+ const aws_construct_1 = require("../../aws-construct");
13
+ const base_listener_1 = require("../lb-shared/base-listener");
14
+ const enums_1 = require("../lb-shared/enums");
15
+ const util_1 = require("../lb-shared/util");
16
+ /**
17
+ * Define a Network Listener
18
+ *
19
+ * @resource AWS::ElasticLoadBalancingV2::Listener
20
+ */
21
+ class NetworkListener extends base_listener_1.BaseListener {
22
+ // TODO: Add Grid Lookup support
23
+ // /**
24
+ // * Looks up a network listener
25
+ // */
26
+ // public static fromLookup(
27
+ // scope: Construct,
28
+ // id: string,
29
+ // options: NetworkListenerLookupOptions,
30
+ // ): INetworkListener {
31
+ // let listenerProtocol: LoadBalancerListenerProtocol | undefined;
32
+ // if (options.listenerProtocol) {
33
+ // validateNetworkProtocol(options.listenerProtocol);
34
+ // switch (options.listenerProtocol) {
35
+ // case Protocol.TCP:
36
+ // listenerProtocol = LoadBalancerListenerProtocol.TCP;
37
+ // break;
38
+ // case Protocol.UDP:
39
+ // listenerProtocol = LoadBalancerListenerProtocol.UDP;
40
+ // break;
41
+ // case Protocol.TCP_UDP:
42
+ // listenerProtocol = LoadBalancerListenerProtocol.TCP_UDP;
43
+ // break;
44
+ // case Protocol.TLS:
45
+ // listenerProtocol = LoadBalancerListenerProtocol.TLS;
46
+ // break;
47
+ // }
48
+ // }
49
+ // const props = BaseListener._queryContextProvider(scope, {
50
+ // userOptions: options,
51
+ // listenerProtocol: listenerProtocol,
52
+ // loadBalancerType: LoadBalancerType.NETWORK,
53
+ // });
54
+ // class LookedUp extends AwsConstructBase implements INetworkListener {
55
+ // public listenerArn = props.listenerArn;
56
+ // }
57
+ // return new LookedUp(scope, id);
58
+ // }
59
+ /**
60
+ * Import an existing listener
61
+ */
62
+ static fromNetworkListenerArn(scope, id, networkListenerArn) {
63
+ class Import extends aws_construct_1.AwsConstructBase {
64
+ constructor() {
65
+ super(...arguments);
66
+ this.listenerArn = networkListenerArn;
67
+ this.listenerOutputs = {
68
+ listenerArn: networkListenerArn,
69
+ };
70
+ this.outputs = {
71
+ listenerArn: networkListenerArn,
72
+ };
73
+ }
74
+ }
75
+ return new Import(scope, id);
76
+ }
77
+ constructor(scope, id, props) {
78
+ const certs = props.certificates || [];
79
+ const proto = props.protocol || (certs.length > 0 ? enums_1.LbProtocol.TLS : enums_1.LbProtocol.TCP);
80
+ (0, util_1.validateNetworkProtocol)(proto);
81
+ if (proto === enums_1.LbProtocol.TLS &&
82
+ certs.filter((v) => v != null).length === 0) {
83
+ throw new Error("When the protocol is set to TLS, you must specify certificates");
84
+ }
85
+ if (proto !== enums_1.LbProtocol.TLS && certs.length > 0) {
86
+ throw new Error("Protocol must be TLS when certificates have been specified");
87
+ }
88
+ if (proto !== enums_1.LbProtocol.TLS && props.alpnPolicy) {
89
+ throw new Error("Protocol must be TLS when alpnPolicy have been specified");
90
+ }
91
+ super(scope, id, {
92
+ loadBalancerArn: props.loadBalancer.loadBalancerArn,
93
+ protocol: proto,
94
+ port: props.port,
95
+ sslPolicy: props.sslPolicy,
96
+ certificateArn: cdktf_1.Lazy.stringValue({
97
+ produce: () => this.certificateArns.length > 0 ? this.certificateArns[0] : undefined,
98
+ }),
99
+ alpnPolicy: props.alpnPolicy ? props.alpnPolicy : undefined,
100
+ });
101
+ this.certificateArns = [];
102
+ this.loadBalancer = props.loadBalancer;
103
+ this.protocol = proto;
104
+ if (certs.length > 0) {
105
+ this.addCertificates("DefaultCertificates", certs);
106
+ }
107
+ if (props.defaultAction && props.defaultTargetGroups) {
108
+ throw new Error("Specify at most one of 'defaultAction' and 'defaultTargetGroups'");
109
+ }
110
+ if (props.defaultAction) {
111
+ this.setDefaultAction(props.defaultAction);
112
+ }
113
+ if (props.defaultTargetGroups) {
114
+ this.setDefaultAction(network_listener_action_1.NetworkListenerAction.forward(props.defaultTargetGroups));
115
+ }
116
+ if (props.tcpIdleTimeout !== undefined &&
117
+ !cdktf_1.Token.isUnresolved(props.tcpIdleTimeout)) {
118
+ if (props.tcpIdleTimeout.toMilliseconds() <
119
+ duration_1.Duration.seconds(1).toMilliseconds()) {
120
+ throw new Error(`\`tcpIdleTimeout\` must be between 60 and 6000 seconds, got ${props.tcpIdleTimeout.toMilliseconds()} milliseconds.`);
121
+ }
122
+ const tcpIdleTimeoutSeconds = props.tcpIdleTimeout.toSeconds();
123
+ if (proto === enums_1.LbProtocol.UDP) {
124
+ throw new Error("`tcpIdleTimeout` cannot be set when `protocol` is `Protocol.UDP`.");
125
+ }
126
+ if (tcpIdleTimeoutSeconds < 60 || tcpIdleTimeoutSeconds > 6000) {
127
+ throw new Error(`\`tcpIdleTimeout\` must be between 60 and 6000 seconds, got ${tcpIdleTimeoutSeconds} seconds.`);
128
+ }
129
+ this.setAttribute("tcp.idle_timeout.seconds", tcpIdleTimeoutSeconds.toString());
130
+ }
131
+ }
132
+ /**
133
+ * Add one or more certificates to this listener.
134
+ *
135
+ * After the first certificate, this creates NetworkListenerCertificates
136
+ * resources since cloudformation requires the certificates array on the
137
+ * listener resource to have a length of 1.
138
+ */
139
+ addCertificates(id, certificates) {
140
+ const additionalCerts = [...certificates];
141
+ if (this.certificateArns.length === 0 && additionalCerts.length > 0) {
142
+ const first = additionalCerts.splice(0, 1)[0];
143
+ this.certificateArns.push(first.certificateArn);
144
+ }
145
+ // Only one certificate can be specified per resource, even though
146
+ // `certificates` is of type Array
147
+ for (let i = 0; i < additionalCerts.length; i++) {
148
+ new network_listener_certificate_1.NetworkListenerCertificate(this, `${id}${i + 1}`, {
149
+ listener: this,
150
+ certificates: [additionalCerts[i]],
151
+ });
152
+ }
153
+ }
154
+ /**
155
+ * Load balance incoming requests to the given target groups.
156
+ *
157
+ * All target groups will be load balanced to with equal weight and without
158
+ * stickiness. For a more complex configuration than that, use `addAction()`.
159
+ */
160
+ addTargetGroups(_id, ...targetGroups) {
161
+ this.setDefaultAction(network_listener_action_1.NetworkListenerAction.forward(targetGroups));
162
+ }
163
+ /**
164
+ * Perform the given Action on incoming requests
165
+ *
166
+ * This allows full control of the default Action of the load balancer,
167
+ * including weighted forwarding. See the `NetworkListenerAction` class for
168
+ * all options.
169
+ */
170
+ addAction(_id, props) {
171
+ this.setDefaultAction(props.action);
172
+ }
173
+ /**
174
+ * Load balance incoming requests to the given load balancing targets.
175
+ *
176
+ * This method implicitly creates a NetworkTargetGroup for the targets
177
+ * involved, and a 'forward' action to route traffic to the given TargetGroup.
178
+ *
179
+ * If you want more control over the precise setup, create the TargetGroup
180
+ * and use `addAction` yourself.
181
+ *
182
+ * It's possible to add conditions to the targets added in this way. At least
183
+ * one set of targets must be added without conditions.
184
+ *
185
+ * @returns The newly created target group
186
+ */
187
+ addTargets(id, props) {
188
+ if (!this.loadBalancer.vpc) {
189
+ // eslint-disable-next-line max-len
190
+ throw new Error("Can only call addTargets() when using a constructed Load Balancer or imported Load Balancer with specified VPC; construct a new TargetGroup and use addTargetGroup");
191
+ }
192
+ const group = new network_target_group_1.NetworkTargetGroup(this, id + "Group", {
193
+ deregistrationDelay: props.deregistrationDelay,
194
+ healthCheck: props.healthCheck,
195
+ port: props.port,
196
+ protocol: props.protocol ?? this.protocol,
197
+ proxyProtocolV2: props.proxyProtocolV2,
198
+ preserveClientIp: props.preserveClientIp,
199
+ targetGroupName: props.targetGroupName,
200
+ targets: props.targets,
201
+ vpc: this.loadBalancer.vpc,
202
+ });
203
+ this.addTargetGroups(id, group);
204
+ return group;
205
+ }
206
+ /**
207
+ * Wrapper for _setDefaultAction which does a type-safe bind
208
+ */
209
+ setDefaultAction(action) {
210
+ action.bind(this, this);
211
+ this._setDefaultAction(action);
212
+ }
213
+ }
214
+ exports.NetworkListener = NetworkListener;
215
+ _a = JSII_RTTI_SYMBOL_1;
216
+ NetworkListener[_a] = { fqn: "terraconstructs.aws.compute.NetworkListener", version: "0.0.12" };
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1saXN0ZW5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9ubGIvbmV0d29yay1saXN0ZW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJIQUEySDtBQUUzSCxpQ0FBb0M7QUFFcEMsdUVBQWtFO0FBQ2xFLGlGQUE0RTtBQUU1RSxpRUFJZ0M7QUFDaEMsZ0RBQTZDO0FBQzdDLHVEQUF1RDtBQUN2RCw4REFJb0M7QUFFcEMsOENBQXVFO0FBTXZFLDRDQUE0RDtBQTRHNUQ7Ozs7R0FJRztBQUNILE1BQWEsZUFBZ0IsU0FBUSw0QkFBWTtJQUMvQyxnQ0FBZ0M7SUFDaEMsTUFBTTtJQUNOLGlDQUFpQztJQUNqQyxNQUFNO0lBQ04sNEJBQTRCO0lBQzVCLHNCQUFzQjtJQUN0QixnQkFBZ0I7SUFDaEIsMkNBQTJDO0lBQzNDLHdCQUF3QjtJQUN4QixvRUFBb0U7SUFDcEUsb0NBQW9DO0lBQ3BDLHlEQUF5RDtJQUV6RCwwQ0FBMEM7SUFDMUMsMkJBQTJCO0lBQzNCLCtEQUErRDtJQUMvRCxpQkFBaUI7SUFDakIsMkJBQTJCO0lBQzNCLCtEQUErRDtJQUMvRCxpQkFBaUI7SUFDakIsK0JBQStCO0lBQy9CLG1FQUFtRTtJQUNuRSxpQkFBaUI7SUFDakIsMkJBQTJCO0lBQzNCLCtEQUErRDtJQUMvRCxpQkFBaUI7SUFDakIsUUFBUTtJQUNSLE1BQU07SUFFTiw4REFBOEQ7SUFDOUQsNEJBQTRCO0lBQzVCLDBDQUEwQztJQUMxQyxrREFBa0Q7SUFDbEQsUUFBUTtJQUVSLDBFQUEwRTtJQUMxRSw4Q0FBOEM7SUFDOUMsTUFBTTtJQUVOLG9DQUFvQztJQUNwQyxJQUFJO0lBRUo7O09BRUc7SUFDSSxNQUFNLENBQUMsc0JBQXNCLENBQ2xDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixrQkFBMEI7UUFFMUIsTUFBTSxNQUFPLFNBQVEsZ0NBQWdCO1lBQXJDOztnQkFDUyxnQkFBVyxH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UUFDSixDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSx5Q0FBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRTtZQUN2RCxtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CO1lBQzlDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDaEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVE7WUFDekMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ3RDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7WUFDeEMsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ3RDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHO1NBQzNCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsTUFBNkI7UUFDcEQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7O0FBcFJILDBDQXFSQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyL2xpYi9ubGIvbmV0d29yay1saXN0ZW5lci50c1xuXG5pbXBvcnQgeyBMYXp5LCBUb2tlbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE5ldHdvcmtMaXN0ZW5lckFjdGlvbiB9IGZyb20gXCIuL25ldHdvcmstbGlzdGVuZXItYWN0aW9uXCI7XG5pbXBvcnQgeyBOZXR3b3JrTGlzdGVuZXJDZXJ0aWZpY2F0ZSB9IGZyb20gXCIuL25ldHdvcmstbGlzdGVuZXItY2VydGlmaWNhdGVcIjtcbmltcG9ydCB7IElOZXR3b3JrTG9hZEJhbGFuY2VyIH0gZnJvbSBcIi4vbmV0d29yay1sb2FkLWJhbGFuY2VyXCI7XG5pbXBvcnQge1xuICBJTmV0d29ya0xvYWRCYWxhbmNlclRhcmdldCxcbiAgSU5ldHdvcmtUYXJnZXRHcm91cCxcbiAgTmV0d29ya1RhcmdldEdyb3VwLFxufSBmcm9tIFwiLi9uZXR3b3JrLXRhcmdldC1ncm91cFwiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vZHVyYXRpb25cIjtcbmltcG9ydCB7IEF3c0NvbnN0cnVjdEJhc2UgfSBmcm9tIFwiLi4vLi4vYXdzLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHtcbiAgQmFzZUxpc3RlbmVyLFxuICBCYXNlTGlzdGVuZXJMb29rdXBPcHRpb25zLFxuICBJTGlzdGVuZXIsXG59IGZyb20gXCIuLi9sYi1zaGFyZWQvYmFzZS1saXN0ZW5lclwiO1xuaW1wb3J0IHsgSGVhbHRoQ2hlY2sgfSBmcm9tIFwiLi4vbGItc2hhcmVkL2Jhc2UtdGFyZ2V0LWdyb3VwXCI7XG5pbXBvcnQgeyBBbHBuUG9saWN5LCBMYlByb3RvY29sLCBTc2xQb2xpY3kgfSBmcm9tIFwiLi4vbGItc2hhcmVkL2VudW1zXCI7XG4vLyBpbXBvcnQge1xuLy8gICBMb2FkQmFsYW5jZXJUeXBlLFxuLy8gICBMb2FkQmFsYW5jZXJMaXN0ZW5lclByb3RvY29sLFxuLy8gfSBmcm9tIFwiLi4vbGItc2hhcmVkL2dyaWQtbG9va3VwLXR5cGVzXCI7XG5pbXBvcnQgeyBJTGlzdGVuZXJDZXJ0aWZpY2F0ZSB9IGZyb20gXCIuLi9sYi1zaGFyZWQvbGlzdGVuZXItY2VydGlmaWNhdGVcIjtcbmltcG9ydCB7IHZhbGlkYXRlTmV0d29ya1Byb3RvY29sIH0gZnJvbSBcIi4uL2xiLXNoYXJlZC91dGlsXCI7XG5cbi8qKlxuICogQmFzaWMgcHJvcGVydGllcyBmb3IgYSBOZXR3b3JrIExpc3RlbmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZU5ldHdvcmtMaXN0ZW5lclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwb3J0IG9uIHdoaWNoIHRoZSBsaXN0ZW5lciBsaXN0ZW5zIGZvciByZXF1ZXN0cy5cbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogRGVmYXVsdCB0YXJnZXQgZ3JvdXBzIHRvIGxvYWQgYmFsYW5jZSB0b1xuICAgKlxuICAgKiBBbGwgdGFyZ2V0IGdyb3VwcyB3aWxsIGJlIGxvYWQgYmFsYW5jZWQgdG8gd2l0aCBlcXVhbCB3ZWlnaHQgYW5kIHdpdGhvdXRcbiAgICogc3RpY2tpbmVzcy4gRm9yIGEgbW9yZSBjb21wbGV4IGNvbmZpZ3VyYXRpb24gdGhhbiB0aGF0LCB1c2VcbiAgICogZWl0aGVyIGBkZWZhdWx0QWN0aW9uYCBvciBgYWRkQWN0aW9uKClgLlxuICAgKlxuICAgKiBDYW5ub3QgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggYGRlZmF1bHRBY3Rpb25gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmUuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0VGFyZ2V0R3JvdXBzPzogSU5ldHdvcmtUYXJnZXRHcm91cFtdO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGFjdGlvbiB0byB0YWtlIGZvciByZXF1ZXN0cyB0byB0aGlzIGxpc3RlbmVyXG4gICAqXG4gICAqIFRoaXMgYWxsb3dzIGZ1bGwgY29udHJvbCBvZiB0aGUgZGVmYXVsdCBBY3Rpb24gb2YgdGhlIGxvYWQgYmFsYW5jZXIsXG4gICAqIGluY2x1ZGluZyB3ZWlnaHRlZCBmb3J3YXJkaW5nLiBTZWUgdGhlIGBOZXR3b3JrTGlzdGVuZXJBY3Rpb25gIGNsYXNzIGZvclxuICAgKiBhbGwgb3B0aW9ucy5cbiAgICpcbiAgICogQ2Fubm90IGJlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoIGBkZWZhdWx0VGFyZ2V0R3JvdXBzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEFjdGlvbj86IE5ldHdvcmtMaXN0ZW5lckFjdGlvbjtcblxuICAvKipcbiAgICogUHJvdG9jb2wgZm9yIGxpc3RlbmVyLCBleHBlY3RzIFRDUCwgVExTLCBVRFAsIG9yIFRDUF9VRFAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVExTIGlmIGNlcnRpZmljYXRlcyBhcmUgcHJvdmlkZWQuIFRDUCBvdGhlcndpc2UuXG4gICAqL1xuICByZWFkb25seSBwcm90b2NvbD86IExiUHJvdG9jb2w7XG5cbiAgLyoqXG4gICAqIENlcnRpZmljYXRlIGxpc3Qgb2YgQUNNIGNlcnQgQVJOcy4gWW91IG11c3QgcHJvdmlkZSBleGFjdGx5IG9uZSBjZXJ0aWZpY2F0ZSBpZiB0aGUgbGlzdGVuZXIgcHJvdG9jb2wgaXMgSFRUUFMgb3IgVExTLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGNlcnRpZmljYXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlcz86IElMaXN0ZW5lckNlcnRpZmljYXRlW107XG5cbiAgLyoqXG4gICAqIFNTTCBQb2xpY3lcbiAgICpcbiAgICogQGRlZmF1bHQgLSBDdXJyZW50IHByZWRlZmluZWQgc2VjdXJpdHkgcG9saWN5LlxuICAgKi9cbiAgcmVhZG9ubHkgc3NsUG9saWN5PzogU3NsUG9saWN5O1xuXG4gIC8qKlxuICAgKiBBcHBsaWNhdGlvbi1MYXllciBQcm90b2NvbCBOZWdvdGlhdGlvbiAoQUxQTikgaXMgYSBUTFMgZXh0ZW5zaW9uIHRoYXQgaXMgc2VudCBvbiB0aGUgaW5pdGlhbCBUTFMgaGFuZHNoYWtlIGhlbGxvIG1lc3NhZ2VzLlxuICAgKiBBTFBOIGVuYWJsZXMgdGhlIGFwcGxpY2F0aW9uIGxheWVyIHRvIG5lZ290aWF0ZSB3aGljaCBwcm90b2NvbHMgc2hvdWxkIGJlIHVzZWQgb3ZlciBhIHNlY3VyZSBjb25uZWN0aW9uLCBzdWNoIGFzIEhUVFAvMSBhbmQgSFRUUC8yLlxuICAgKlxuICAgKiBDYW4gb25seSBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgd2l0aCBQcm90b2NvbCBUTFMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxwblBvbGljeT86IEFscG5Qb2xpY3k7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2FkIGJhbGFuY2VyIFRDUCBpZGxlIHRpbWVvdXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoMzUwKVxuICAgKi9cbiAgcmVhZG9ubHkgdGNwSWRsZVRpbWVvdXQ/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhZGRpbmcgYSBjZXJ0aWZpY2F0ZSB0byBhIGxpc3RlbmVyXG4gKlxuICogVGhpcyBpbnRlcmZhY2UgZXhpc3RzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBVc2UgSUxpc3RlbmVyQ2VydGlmaWNhdGUgaW5zdGVhZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIElOZXR3b3JrTGlzdGVuZXJDZXJ0aWZpY2F0ZVByb3BzXG4gIGV4dGVuZHMgSUxpc3RlbmVyQ2VydGlmaWNhdGUge31cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIE5ldHdvcmsgTGlzdGVuZXIgYXR0YWNoZWQgdG8gYSBMb2FkIEJhbGFuY2VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0xpc3RlbmVyUHJvcHMgZXh0ZW5kcyBCYXNlTmV0d29ya0xpc3RlbmVyUHJvcHMge1xuICAvKipcbiAgICogVGhlIGxvYWQgYmFsYW5jZXIgdG8gYXR0YWNoIHRoaXMgbGlzdGVuZXIgdG9cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlcjogSU5ldHdvcmtMb2FkQmFsYW5jZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgbG9va2luZyB1cCBhIG5ldHdvcmsgbGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0xpc3RlbmVyTG9va3VwT3B0aW9uc1xuICBleHRlbmRzIEJhc2VMaXN0ZW5lckxvb2t1cE9wdGlvbnMge1xuICAvKipcbiAgICogUHJvdG9jb2wgb2YgdGhlIGxpc3RlbmVyIHBvcnRcbiAgICogQGRlZmF1bHQgLSBsaXN0ZW5lciBpcyBub3QgZmlsdGVyZWQgYnkgcHJvdG9jb2xcbiAgICovXG4gIHJlYWRvbmx5IGxpc3RlbmVyUHJvdG9jb2w/OiBMYlByb3RvY29sO1xufVxuXG4vKipcbiAqIERlZmluZSBhIE5ldHdvcmsgTGlzdGVuZXJcbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpFbGFzdGljTG9hZEJhbGFuY2luZ1YyOjpMaXN0ZW5lclxuICovXG5leHBvcnQgY2xhc3MgTmV0d29ya0xpc3RlbmVyIGV4dGVuZHMgQmFzZUxpc3RlbmVyIGltcGxlbWVudHMgSU5ldHdvcmtMaXN0ZW5lciB7XG4gIC8vIFRPRE86IEFkZCBHcmlkIExvb2t1cCBzdXBwb3J0XG4gIC8vIC8qKlxuICAvLyAgKiBMb29rcyB1cCBhIG5ldHdvcmsgbGlzdGVuZXJcbiAgLy8gICovXG4gIC8vIHB1YmxpYyBzdGF0aWMgZnJvbUxvb2t1cChcbiAgLy8gICBzY29wZTogQ29uc3RydWN0LFxuICAvLyAgIGlkOiBzdHJpbmcsXG4gIC8vICAgb3B0aW9uczogTmV0d29ya0xpc3RlbmVyTG9va3VwT3B0aW9ucyxcbiAgLy8gKTogSU5ldHdvcmtMaXN0ZW5lciB7XG4gIC8vICAgbGV0IGxpc3RlbmVyUHJvdG9jb2w6IExvYWRCYWxhbmNlckxpc3RlbmVyUHJvdG9jb2wgfCB1bmRlZmluZWQ7XG4gIC8vICAgaWYgKG9wdGlvbnMubGlzdGVuZXJQcm90b2NvbCkge1xuICAvLyAgICAgdmFsaWRhdGVOZXR3b3JrUHJvdG9jb2wob3B0aW9ucy5saXN0ZW5lclByb3RvY29sKTtcblxuICAvLyAgICAgc3dpdGNoIChvcHRpb25zLmxpc3RlbmVyUHJvdG9jb2wpIHtcbiAgLy8gICAgICAgY2FzZSBQcm90b2NvbC5UQ1A6XG4gIC8vICAgICAgICAgbGlzdGVuZXJQcm90b2NvbCA9IExvYWRCYWxhbmNlckxpc3RlbmVyUHJvdG9jb2wuVENQO1xuICAvLyAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICBjYXNlIFByb3RvY29sLlVEUDpcbiAgLy8gICAgICAgICBsaXN0ZW5lclByb3RvY29sID0gTG9hZEJhbGFuY2VyTGlzdGVuZXJQcm90b2NvbC5VRFA7XG4gIC8vICAgICAgICAgYnJlYWs7XG4gIC8vICAgICAgIGNhc2UgUHJvdG9jb2wuVENQX1VEUDpcbiAgLy8gICAgICAgICBsaXN0ZW5lclByb3RvY29sID0gTG9hZEJhbGFuY2VyTGlzdGVuZXJQcm90b2NvbC5UQ1BfVURQO1xuICAvLyAgICAgICAgIGJyZWFrO1xuICAvLyAgICAgICBjYXNlIFByb3RvY29sLlRMUzpcbiAgLy8gICAgICAgICBsaXN0ZW5lclByb3RvY29sID0gTG9hZEJhbGFuY2VyTGlzdGVuZXJQcm90b2NvbC5UTFM7XG4gIC8vICAgICAgICAgYnJlYWs7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuXG4gIC8vICAgY29uc3QgcHJvcHMgPSBCYXNlTGlzdGVuZXIuX3F1ZXJ5Q29udGV4dFByb3ZpZGVyKHNjb3BlLCB7XG4gIC8vICAgICB1c2VyT3B0aW9uczogb3B0aW9ucyxcbiAgLy8gICAgIGxpc3RlbmVyUHJvdG9jb2w6IGxpc3RlbmVyUHJvdG9jb2wsXG4gIC8vICAgICBsb2FkQmFsYW5jZXJUeXBlOiBMb2FkQmFsYW5jZXJUeXBlLk5FVFdPUkssXG4gIC8vICAgfSk7XG5cbiAgLy8gICBjbGFzcyBMb29rZWRVcCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJTmV0d29ya0xpc3RlbmVyIHtcbiAgLy8gICAgIHB1YmxpYyBsaXN0ZW5lckFybiA9IHByb3BzLmxpc3RlbmVyQXJuO1xuICAvLyAgIH1cblxuICAvLyAgIHJldHVybiBuZXcgTG9va2VkVXAoc2NvcGUsIGlkKTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgbGlzdGVuZXJcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU5ldHdvcmtMaXN0ZW5lckFybihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgbmV0d29ya0xpc3RlbmVyQXJuOiBzdHJpbmcsXG4gICk6IElOZXR3b3JrTGlzdGVuZXIge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2UgaW1wbGVtZW50cyBJTmV0d29ya0xpc3RlbmVyIHtcbiAgICAgIHB1YmxpYyBsaXN0ZW5lckFybiA9IG5ldHdvcmtMaXN0ZW5lckFybjtcbiAgICAgIHB1YmxpYyBsaXN0ZW5lck91dHB1dHMgPSB7XG4gICAgICAgIGxpc3RlbmVyQXJuOiBuZXR3b3JrTGlzdGVuZXJBcm4sXG4gICAgICB9O1xuICAgICAgcHVibGljIG91dHB1dHMgPSB7XG4gICAgICAgIGxpc3RlbmVyQXJuOiBuZXR3b3JrTGlzdGVuZXJBcm4sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxvYWQgYmFsYW5jZXIgdGhpcyBsaXN0ZW5lciBpcyBhdHRhY2hlZCB0b1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGxvYWRCYWxhbmNlcjogSU5ldHdvcmtMb2FkQmFsYW5jZXI7XG5cbiAgLyoqXG4gICAqIEFSTnMgb2YgY2VydGlmaWNhdGVzIGFkZGVkIHRvIHRoaXMgbGlzdGVuZXJcbiAgICpcbiAgICogVGhlIGZpcnN0IGNlcnRpZmljYXRlIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgY2VydGlmaWNhdGUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNlcnRpZmljYXRlQXJuczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIHRoZSBwcm90b2NvbCBvZiB0aGUgbGlzdGVuZXJcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdG9jb2w6IExiUHJvdG9jb2w7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5ldHdvcmtMaXN0ZW5lclByb3BzKSB7XG4gICAgY29uc3QgY2VydHMgPSBwcm9wcy5jZXJ0aWZpY2F0ZXMgfHwgW107XG4gICAgY29uc3QgcHJvdG8gPVxuICAgICAgcHJvcHMucHJvdG9jb2wgfHwgKGNlcnRzLmxlbmd0aCA+IDAgPyBMYlByb3RvY29sLlRMUyA6IExiUHJvdG9jb2wuVENQKTtcblxuICAgIHZhbGlkYXRlTmV0d29ya1Byb3RvY29sKHByb3RvKTtcblxuICAgIGlmIChcbiAgICAgIHByb3RvID09PSBMYlByb3RvY29sLlRMUyAmJlxuICAgICAgY2VydHMuZmlsdGVyKCh2KSA9PiB2ICE9IG51bGwpLmxlbmd0aCA9PT0gMFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIldoZW4gdGhlIHByb3RvY29sIGlzIHNldCB0byBUTFMsIHlvdSBtdXN0IHNwZWNpZnkgY2VydGlmaWNhdGVzXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm90byAhPT0gTGJQcm90b2NvbC5UTFMgJiYgY2VydHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlByb3RvY29sIG11c3QgYmUgVExTIHdoZW4gY2VydGlmaWNhdGVzIGhhdmUgYmVlbiBzcGVjaWZpZWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb3RvICE9PSBMYlByb3RvY29sLlRMUyAmJiBwcm9wcy5hbHBuUG9saWN5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiUHJvdG9jb2wgbXVzdCBiZSBUTFMgd2hlbiBhbHBuUG9saWN5IGhhdmUgYmVlbiBzcGVjaWZpZWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBsb2FkQmFsYW5jZXJBcm46IHByb3BzLmxvYWRCYWxhbmNlci5sb2FkQmFsYW5jZXJBcm4sXG4gICAgICBwcm90b2NvbDogcHJvdG8sXG4gICAgICBwb3J0OiBwcm9wcy5wb3J0LFxuICAgICAgc3NsUG9saWN5OiBwcm9wcy5zc2xQb2xpY3ksXG4gICAgICBjZXJ0aWZpY2F0ZUFybjogTGF6eS5zdHJpbmdWYWx1ZSh7XG4gICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgdGhpcy5jZXJ0aWZpY2F0ZUFybnMubGVuZ3RoID4gMCA/IHRoaXMuY2VydGlmaWNhdGVBcm5zWzBdIDogdW5kZWZpbmVkLFxuICAgICAgfSksXG4gICAgICBhbHBuUG9saWN5OiBwcm9wcy5hbHBuUG9saWN5ID8gcHJvcHMuYWxwblBvbGljeSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHRoaXMuY2VydGlmaWNhdGVBcm5zID0gW107XG4gICAgdGhpcy5sb2FkQmFsYW5jZXIgPSBwcm9wcy5sb2FkQmFsYW5jZXI7XG4gICAgdGhpcy5wcm90b2NvbCA9IHByb3RvO1xuXG4gICAgaWYgKGNlcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYWRkQ2VydGlmaWNhdGVzKFwiRGVmYXVsdENlcnRpZmljYXRlc1wiLCBjZXJ0cyk7XG4gICAgfVxuICAgIGlmIChwcm9wcy5kZWZhdWx0QWN0aW9uICYmIHByb3BzLmRlZmF1bHRUYXJnZXRHcm91cHMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJTcGVjaWZ5IGF0IG1vc3Qgb25lIG9mICdkZWZhdWx0QWN0aW9uJyBhbmQgJ2RlZmF1bHRUYXJnZXRHcm91cHMnXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5kZWZhdWx0QWN0aW9uKSB7XG4gICAgICB0aGlzLnNldERlZmF1bHRBY3Rpb24ocHJvcHMuZGVmYXVsdEFjdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRUYXJnZXRHcm91cHMpIHtcbiAgICAgIHRoaXMuc2V0RGVmYXVsdEFjdGlvbihcbiAgICAgICAgTmV0d29ya0xpc3RlbmVyQWN0aW9uLmZvcndhcmQocHJvcHMuZGVmYXVsdFRhcmdldEdyb3VwcyksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHByb3BzLnRjcElkbGVUaW1lb3V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMudGNwSWRsZVRpbWVvdXQpXG4gICAgKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHByb3BzLnRjcElkbGVUaW1lb3V0LnRvTWlsbGlzZWNvbmRzKCkgPFxuICAgICAgICBEdXJhdGlvbi5zZWNvbmRzKDEpLnRvTWlsbGlzZWNvbmRzKClcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFxcYHRjcElkbGVUaW1lb3V0XFxgIG11c3QgYmUgYmV0d2VlbiA2MCBhbmQgNjAwMCBzZWNvbmRzLCBnb3QgJHtwcm9wcy50Y3BJZGxlVGltZW91dC50b01pbGxpc2Vjb25kcygpfSBtaWxsaXNlY29uZHMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGNwSWRsZVRpbWVvdXRTZWNvbmRzID0gcHJvcHMudGNwSWRsZVRpbWVvdXQudG9TZWNvbmRzKCk7XG5cbiAgICAgIGlmIChwcm90byA9PT0gTGJQcm90b2NvbC5VRFApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIFwiYHRjcElkbGVUaW1lb3V0YCBjYW5ub3QgYmUgc2V0IHdoZW4gYHByb3RvY29sYCBpcyBgUHJvdG9jb2wuVURQYC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRjcElkbGVUaW1lb3V0U2Vjb25kcyA8IDYwIHx8IHRjcElkbGVUaW1lb3V0U2Vjb25kcyA+IDYwMDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBcXGB0Y3BJZGxlVGltZW91dFxcYCBtdXN0IGJlIGJldHdlZW4gNjAgYW5kIDYwMDAgc2Vjb25kcywgZ290ICR7dGNwSWRsZVRpbWVvdXRTZWNvbmRzfSBzZWNvbmRzLmAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKFxuICAgICAgICBcInRjcC5pZGxlX3RpbWVvdXQuc2Vjb25kc1wiLFxuICAgICAgICB0Y3BJZGxlVGltZW91dFNlY29uZHMudG9TdHJpbmcoKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBvbmUgb3IgbW9yZSBjZXJ0aWZpY2F0ZXMgdG8gdGhpcyBsaXN0ZW5lci5cbiAgICpcbiAgICogQWZ0ZXIgdGhlIGZpcnN0IGNlcnRpZmljYXRlLCB0aGlzIGNyZWF0ZXMgTmV0d29ya0xpc3RlbmVyQ2VydGlmaWNhdGVzXG4gICAqIHJlc291cmNlcyBzaW5jZSBjbG91ZGZvcm1hdGlvbiByZXF1aXJlcyB0aGUgY2VydGlmaWNhdGVzIGFycmF5IG9uIHRoZVxuICAgKiBsaXN0ZW5lciByZXNvdXJjZSB0byBoYXZlIGEgbGVuZ3RoIG9mIDEuXG4gICAqL1xuICBwdWJsaWMgYWRkQ2VydGlmaWNhdGVzKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgY2VydGlmaWNhdGVzOiBJTGlzdGVuZXJDZXJ0aWZpY2F0ZVtdLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhZGRpdGlvbmFsQ2VydHMgPSBbLi4uY2VydGlmaWNhdGVzXTtcbiAgICBpZiAodGhpcy5jZXJ0aWZpY2F0ZUFybnMubGVuZ3RoID09PSAwICYmIGFkZGl0aW9uYWxDZXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IGFkZGl0aW9uYWxDZXJ0cy5zcGxpY2UoMCwgMSlbMF07XG4gICAgICB0aGlzLmNlcnRpZmljYXRlQXJucy5wdXNoKGZpcnN0LmNlcnRpZmljYXRlQXJuKTtcbiAgICB9XG4gICAgLy8gT25seSBvbmUgY2VydGlmaWNhdGUgY2FuIGJlIHNwZWNpZmllZCBwZXIgcmVzb3VyY2UsIGV2ZW4gdGhvdWdoXG4gICAgLy8gYGNlcnRpZmljYXRlc2AgaXMgb2YgdHlwZSBBcnJheVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkaXRpb25hbENlcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXcgTmV0d29ya0xpc3RlbmVyQ2VydGlmaWNhdGUodGhpcywgYCR7aWR9JHtpICsgMX1gLCB7XG4gICAgICAgIGxpc3RlbmVyOiB0aGlzLFxuICAgICAgICBjZXJ0aWZpY2F0ZXM6IFthZGRpdGlvbmFsQ2VydHNbaV1dLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYmFsYW5jZSBpbmNvbWluZyByZXF1ZXN0cyB0byB0aGUgZ2l2ZW4gdGFyZ2V0IGdyb3Vwcy5cbiAgICpcbiAgICogQWxsIHRhcmdldCBncm91cHMgd2lsbCBiZSBsb2FkIGJhbGFuY2VkIHRvIHdpdGggZXF1YWwgd2VpZ2h0IGFuZCB3aXRob3V0XG4gICAqIHN0aWNraW5lc3MuIEZvciBhIG1vcmUgY29tcGxleCBjb25maWd1cmF0aW9uIHRoYW4gdGhhdCwgdXNlIGBhZGRBY3Rpb24oKWAuXG4gICAqL1xuICBwdWJsaWMgYWRkVGFyZ2V0R3JvdXBzKFxuICAgIF9pZDogc3RyaW5nLFxuICAgIC4uLnRhcmdldEdyb3VwczogSU5ldHdvcmtUYXJnZXRHcm91cFtdXG4gICk6IHZvaWQge1xuICAgIHRoaXMuc2V0RGVmYXVsdEFjdGlvbihOZXR3b3JrTGlzdGVuZXJBY3Rpb24uZm9yd2FyZCh0YXJnZXRHcm91cHMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIHRoZSBnaXZlbiBBY3Rpb24gb24gaW5jb21pbmcgcmVxdWVzdHNcbiAgICpcbiAgICogVGhpcyBhbGxvd3MgZnVsbCBjb250cm9sIG9mIHRoZSBkZWZhdWx0IEFjdGlvbiBvZiB0aGUgbG9hZCBiYWxhbmNlcixcbiAgICogaW5jbHVkaW5nIHdlaWdodGVkIGZvcndhcmRpbmcuIFNlZSB0aGUgYE5ldHdvcmtMaXN0ZW5lckFjdGlvbmAgY2xhc3MgZm9yXG4gICAqIGFsbCBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGFkZEFjdGlvbihfaWQ6IHN0cmluZywgcHJvcHM6IEFkZE5ldHdvcmtBY3Rpb25Qcm9wcyk6IHZvaWQge1xuICAgIHRoaXMuc2V0RGVmYXVsdEFjdGlvbihwcm9wcy5hY3Rpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYmFsYW5jZSBpbmNvbWluZyByZXF1ZXN0cyB0byB0aGUgZ2l2ZW4gbG9hZCBiYWxhbmNpbmcgdGFyZ2V0cy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaW1wbGljaXRseSBjcmVhdGVzIGEgTmV0d29ya1RhcmdldEdyb3VwIGZvciB0aGUgdGFyZ2V0c1xuICAgKiBpbnZvbHZlZCwgYW5kIGEgJ2ZvcndhcmQnIGFjdGlvbiB0byByb3V0ZSB0cmFmZmljIHRvIHRoZSBnaXZlbiBUYXJnZXRHcm91cC5cbiAgICpcbiAgICogSWYgeW91IHdhbnQgbW9yZSBjb250cm9sIG92ZXIgdGhlIHByZWNpc2Ugc2V0dXAsIGNyZWF0ZSB0aGUgVGFyZ2V0R3JvdXBcbiAgICogYW5kIHVzZSBgYWRkQWN0aW9uYCB5b3Vyc2VsZi5cbiAgICpcbiAgICogSXQncyBwb3NzaWJsZSB0byBhZGQgY29uZGl0aW9ucyB0byB0aGUgdGFyZ2V0cyBhZGRlZCBpbiB0aGlzIHdheS4gQXQgbGVhc3RcbiAgICogb25lIHNldCBvZiB0YXJnZXRzIG11c3QgYmUgYWRkZWQgd2l0aG91dCBjb25kaXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgbmV3bHkgY3JlYXRlZCB0YXJnZXQgZ3JvdXBcbiAgICovXG4gIHB1YmxpYyBhZGRUYXJnZXRzKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFkZE5ldHdvcmtUYXJnZXRzUHJvcHMsXG4gICk6IE5ldHdvcmtUYXJnZXRHcm91cCB7XG4gICAgaWYgKCF0aGlzLmxvYWRCYWxhbmNlci52cGMpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQ2FuIG9ubHkgY2FsbCBhZGRUYXJnZXRzKCkgd2hlbiB1c2luZyBhIGNvbnN0cnVjdGVkIExvYWQgQmFsYW5jZXIgb3IgaW1wb3J0ZWQgTG9hZCBCYWxhbmNlciB3aXRoIHNwZWNpZmllZCBWUEM7IGNvbnN0cnVjdCBhIG5ldyBUYXJnZXRHcm91cCBhbmQgdXNlIGFkZFRhcmdldEdyb3VwXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwID0gbmV3IE5ldHdvcmtUYXJnZXRHcm91cCh0aGlzLCBpZCArIFwiR3JvdXBcIiwge1xuICAgICAgZGVyZWdpc3RyYXRpb25EZWxheTogcHJvcHMuZGVyZWdpc3RyYXRpb25EZWxheSxcbiAgICAgIGhlYWx0aENoZWNrOiBwcm9wcy5oZWFsdGhDaGVjayxcbiAgICAgIHBvcnQ6IHByb3BzLnBvcnQsXG4gICAgICBwcm90b2NvbDogcHJvcHMucHJvdG9jb2wgPz8gdGhpcy5wcm90b2NvbCxcbiAgICAgIHByb3h5UHJvdG9jb2xWMjogcHJvcHMucHJveHlQcm90b2NvbFYyLFxuICAgICAgcHJlc2VydmVDbGllbnRJcDogcHJvcHMucHJlc2VydmVDbGllbnRJcCxcbiAgICAgIHRhcmdldEdyb3VwTmFtZTogcHJvcHMudGFyZ2V0R3JvdXBOYW1lLFxuICAgICAgdGFyZ2V0czogcHJvcHMudGFyZ2V0cyxcbiAgICAgIHZwYzogdGhpcy5sb2FkQmFsYW5jZXIudnBjLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRUYXJnZXRHcm91cHMoaWQsIGdyb3VwKTtcblxuICAgIHJldHVybiBncm91cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwcGVyIGZvciBfc2V0RGVmYXVsdEFjdGlvbiB3aGljaCBkb2VzIGEgdHlwZS1zYWZlIGJpbmRcbiAgICovXG4gIHByaXZhdGUgc2V0RGVmYXVsdEFjdGlvbihhY3Rpb246IE5ldHdvcmtMaXN0ZW5lckFjdGlvbikge1xuICAgIGFjdGlvbi5iaW5kKHRoaXMsIHRoaXMpO1xuICAgIHRoaXMuX3NldERlZmF1bHRBY3Rpb24oYWN0aW9uKTtcbiAgfVxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gcmVmZXJlbmNlIGFuIGV4aXN0aW5nIGxpc3RlbmVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSU5ldHdvcmtMaXN0ZW5lciBleHRlbmRzIElMaXN0ZW5lciB7fVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFkZGluZyBhIG5ldyBhY3Rpb24gdG8gYSBsaXN0ZW5lclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZE5ldHdvcmtBY3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBBY3Rpb24gdG8gcGVyZm9ybVxuICAgKi9cbiAgcmVhZG9ubHkgYWN0aW9uOiBOZXR3b3JrTGlzdGVuZXJBY3Rpb247XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYWRkaW5nIG5ldyBuZXR3b3JrIHRhcmdldHMgdG8gYSBsaXN0ZW5lclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFkZE5ldHdvcmtUYXJnZXRzUHJvcHMge1xuICAvKipcbiAgICogVGhlIHBvcnQgb24gd2hpY2ggdGhlIHRhcmdldCByZWNlaXZlcyB0cmFmZmljLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEZXRlcm1pbmVkIGZyb20gcHJvdG9jb2wgaWYga25vd25cbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogUHJvdG9jb2wgZm9yIHRhcmdldCBncm91cCwgZXhwZWN0cyBUQ1AsIFRMUywgVURQLCBvciBUQ1BfVURQLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGluaGVyaXRzIHRoZSBwcm90b2NvbCBvZiB0aGUgbGlzdGVuZXJcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogTGJQcm90b2NvbDtcblxuICAvKipcbiAgICogVGhlIHRhcmdldHMgdG8gYWRkIHRvIHRoaXMgdGFyZ2V0IGdyb3VwLlxuICAgKlxuICAgKiBDYW4gYmUgYEluc3RhbmNlYCwgYElQQWRkcmVzc2AsIG9yIGFueSBzZWxmLXJlZ2lzdGVyaW5nIGxvYWQgYmFsYW5jaW5nXG4gICAqIHRhcmdldC4gSWYgeW91IHVzZSBlaXRoZXIgYEluc3RhbmNlYCBvciBgSVBBZGRyZXNzYCBhcyB0YXJnZXRzLCBhbGxcbiAgICogdGFyZ2V0IG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZS5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldHM/OiBJTmV0d29ya0xvYWRCYWxhbmNlclRhcmdldFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IGdyb3VwLlxuICAgKlxuICAgKiBUaGlzIG5hbWUgbXVzdCBiZSB1bmlxdWUgcGVyIHJlZ2lvbiBwZXIgYWNjb3VudCwgY2FuIGhhdmUgYSBtYXhpbXVtIG9mXG4gICAqIDMyIGNoYXJhY3RlcnMsIG11c3QgY29udGFpbiBvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yIGh5cGhlbnMsIGFuZFxuICAgKiBtdXN0IG5vdCBiZWdpbiBvciBlbmQgd2l0aCBhIGh5cGhlbi5cbiAgICpcbiAgICogQGRlZmF1bHQgQXV0b21hdGljYWxseSBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldEdyb3VwTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiB0aW1lIGZvciBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRvIHdhaXQgYmVmb3JlIGRlcmVnaXN0ZXJpbmcgYSB0YXJnZXQuXG4gICAqXG4gICAqIFRoZSByYW5nZSBpcyAwLTM2MDAgc2Vjb25kcy5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24ubWludXRlcyg1KVxuICAgKi9cbiAgcmVhZG9ubHkgZGVyZWdpc3RyYXRpb25EZWxheT86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBQcm94eSBQcm90b2NvbCB2ZXJzaW9uIDIgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByb3h5UHJvdG9jb2xWMj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGNsaWVudCBJUCBwcmVzZXJ2YXRpb24gaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2UgaWYgdGhlIHRhcmdldCBncm91cCB0eXBlIGlzIElQIGFkZHJlc3MgYW5kIHRoZVxuICAgKiB0YXJnZXQgZ3JvdXAgcHJvdG9jb2wgaXMgVENQIG9yIFRMUy4gT3RoZXJ3aXNlLCB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlc2VydmVDbGllbnRJcD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEhlYWx0aCBjaGVjayBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGVhY2ggcHJvcGVydHkgaW4gdGhpcyBjb25maWd1cmF0aW9uIHZhcmllcyBkZXBlbmRpbmcgb24gdGhlIHRhcmdldC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi10YXJnZXRncm91cC5odG1sI2F3cy1yZXNvdXJjZS1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLXRhcmdldGdyb3VwLXByb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aENoZWNrPzogSGVhbHRoQ2hlY2s7XG59XG4iXX0=
@@ -0,0 +1,315 @@
1
+ import { Construct } from "constructs";
2
+ import { BaseNetworkListenerProps, NetworkListener } from "./network-listener";
3
+ import * as cloudwatch from "../../cloudwatch";
4
+ import { Connections, IConnectable } from "../connections";
5
+ import { BaseLoadBalancer, BaseLoadBalancerLookupOptions, BaseLoadBalancerProps, ILoadBalancerV2 } from "../lb-shared/base-load-balancer";
6
+ import { IpAddressType } from "../lb-shared/enums";
7
+ import { ISecurityGroup } from "../security-group";
8
+ import { IVpc } from "../vpc";
9
+ import { IVpcEndpointServiceLoadBalancer } from "../vpc-endpoint-service";
10
+ /**
11
+ * Indicates how traffic is distributed among the load balancer Availability Zones.
12
+ *
13
+ * @see https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html#zonal-dns-affinity
14
+ */
15
+ export declare enum ClientRoutingPolicy {
16
+ /**
17
+ * 100 percent zonal affinity
18
+ */
19
+ AVAILABILITY_ZONE_AFFINITY = "availability_zone_affinity",
20
+ /**
21
+ * 85 percent zonal affinity
22
+ */
23
+ PARTIAL_AVAILABILITY_ZONE_AFFINITY = "partial_availability_zone_affinity",
24
+ /**
25
+ * No zonal affinity
26
+ */
27
+ ANY_AVAILABILITY_ZONE = "any_availability_zone"
28
+ }
29
+ /**
30
+ * Properties for a network load balancer
31
+ */
32
+ export interface NetworkLoadBalancerProps extends BaseLoadBalancerProps {
33
+ /**
34
+ * Security groups to associate with this load balancer
35
+ *
36
+ * @default - No security groups associated with the load balancer.
37
+ */
38
+ readonly securityGroups?: ISecurityGroup[];
39
+ /**
40
+ * The type of IP addresses to use
41
+ *
42
+ * If you want to add a UDP or TCP_UDP listener to the load balancer,
43
+ * you must choose IPv4.
44
+ *
45
+ * @default IpAddressType.IPV4
46
+ */
47
+ readonly ipAddressType?: IpAddressType;
48
+ /**
49
+ * The AZ affinity routing policy
50
+ *
51
+ * @see https://docs.aws.amazon.com/elasticloadbalancing/latest/network/network-load-balancers.html#zonal-dns-affinity
52
+ *
53
+ * @default - AZ affinity is disabled.
54
+ */
55
+ readonly clientRoutingPolicy?: ClientRoutingPolicy;
56
+ /**
57
+ * Indicates whether to evaluate inbound security group rules for traffic sent to a Network Load Balancer through AWS PrivateLink.
58
+ *
59
+ * @default true
60
+ */
61
+ readonly enforceSecurityGroupInboundRulesOnPrivateLinkTraffic?: boolean;
62
+ /**
63
+ * Indicates whether zonal shift is enabled
64
+ *
65
+ * @see https://docs.aws.amazon.com/elasticloadbalancing/latest/network/zonal-shift.html
66
+ *
67
+ * @default false
68
+ */
69
+ readonly zonalShift?: boolean;
70
+ }
71
+ /**
72
+ * Properties to reference an existing load balancer
73
+ */
74
+ export interface NetworkLoadBalancerAttributes {
75
+ /**
76
+ * ARN of the load balancer
77
+ */
78
+ readonly loadBalancerArn: string;
79
+ /**
80
+ * The canonical hosted zone ID of this load balancer
81
+ *
82
+ * @default - Token via data source from loadBalancerArn.
83
+ */
84
+ readonly loadBalancerCanonicalHostedZoneId?: string;
85
+ /**
86
+ * The DNS name of this load balancer
87
+ *
88
+ * @default - Token via data source from loadBalancerArn.
89
+ */
90
+ readonly loadBalancerDnsName?: string;
91
+ /**
92
+ * The VPC to associate with the load balancer.
93
+ *
94
+ * @default - When not provided, listeners cannot be created on imported load
95
+ * balancers.
96
+ */
97
+ readonly vpc?: IVpc;
98
+ /**
99
+ * Security groups to associate with this load balancer
100
+ *
101
+ * @default - No security groups associated with the load balancer.
102
+ */
103
+ readonly loadBalancerSecurityGroups?: string[];
104
+ }
105
+ /**
106
+ * Options for looking up an NetworkLoadBalancer
107
+ */
108
+ export interface NetworkLoadBalancerLookupOptions extends BaseLoadBalancerLookupOptions {
109
+ }
110
+ /**
111
+ * Define a new network load balancer
112
+ *
113
+ * @resource AWS::ElasticLoadBalancingV2::LoadBalancer
114
+ */
115
+ export declare class NetworkLoadBalancer extends BaseLoadBalancer implements INetworkLoadBalancer {
116
+ static fromNetworkLoadBalancerAttributes(scope: Construct, id: string, attrs: NetworkLoadBalancerAttributes): INetworkLoadBalancer;
117
+ readonly metrics: INetworkLoadBalancerMetrics;
118
+ readonly ipAddressType?: IpAddressType;
119
+ readonly connections: Connections;
120
+ private readonly isSecurityGroupsPropertyDefined;
121
+ private readonly _enforceSecurityGroupInboundRulesOnPrivateLinkTraffic?;
122
+ /**
123
+ * After the implementation of `IConnectable` (see https://github.com/aws/aws-cdk/pull/28494), the default
124
+ * value for `securityGroups` is set by the `Connections` constructor to an empty array.
125
+ * To keep backward compatibility (`securityGroups` is `undefined` if the related property is not specified)
126
+ * a getter has been added.
127
+ */
128
+ get securityGroups(): string[] | undefined;
129
+ constructor(scope: Construct, id: string, props: NetworkLoadBalancerProps);
130
+ get enforceSecurityGroupInboundRulesOnPrivateLinkTraffic(): string | undefined;
131
+ /**
132
+ * Add a listener to this load balancer
133
+ *
134
+ * @returns The newly created listener
135
+ */
136
+ addListener(id: string, props: BaseNetworkListenerProps): NetworkListener;
137
+ /**
138
+ * Add a security group to this load balancer
139
+ */
140
+ addSecurityGroup(securityGroup: ISecurityGroup): void;
141
+ /**
142
+ * Return the given named metric for this Network Load Balancer
143
+ *
144
+ * @default Average over 5 minutes
145
+ * @deprecated Use ``NetworkLoadBalancer.metrics.custom`` instead
146
+ */
147
+ metric(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
148
+ /**
149
+ * The total number of concurrent TCP flows (or connections) from clients to targets.
150
+ *
151
+ * This metric includes connections in the SYN_SENT and ESTABLISHED states.
152
+ * TCP connections are not terminated at the load balancer, so a client
153
+ * opening a TCP connection to a target counts as a single flow.
154
+ *
155
+ * @default Average over 5 minutes
156
+ * @deprecated Use ``NetworkLoadBalancer.metrics.activeFlowCount`` instead
157
+ */
158
+ metricActiveFlowCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
159
+ /**
160
+ * The number of load balancer capacity units (LCU) used by your load balancer.
161
+ *
162
+ * @default Sum over 5 minutes
163
+ * @deprecated Use ``NetworkLoadBalancer.metrics.activeFlowCount`` instead
164
+ */
165
+ metricConsumedLCUs(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
166
+ /**
167
+ * The number of targets that are considered healthy.
168
+ *
169
+ * @default Average over 5 minutes
170
+ * @deprecated use ``NetworkTargetGroup.metricHealthyHostCount`` instead
171
+ */
172
+ metricHealthyHostCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
173
+ /**
174
+ * The number of targets that are considered unhealthy.
175
+ *
176
+ * @default Average over 5 minutes
177
+ * @deprecated use ``NetworkTargetGroup.metricUnHealthyHostCount`` instead
178
+ */
179
+ metricUnHealthyHostCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
180
+ /**
181
+ * The total number of new TCP flows (or connections) established from clients to targets in the time period.
182
+ *
183
+ * @default Sum over 5 minutes
184
+ * @deprecated Use ``NetworkLoadBalancer.metrics.newFlowCount`` instead
185
+ */
186
+ metricNewFlowCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
187
+ /**
188
+ * The total number of bytes processed by the load balancer, including TCP/IP headers.
189
+ *
190
+ * @default Sum over 5 minutes
191
+ * @deprecated Use ``NetworkLoadBalancer.metrics.processedBytes`` instead
192
+ */
193
+ metricProcessedBytes(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
194
+ /**
195
+ * The total number of reset (RST) packets sent from a client to a target.
196
+ *
197
+ * These resets are generated by the client and forwarded by the load balancer.
198
+ *
199
+ * @default Sum over 5 minutes
200
+ * @deprecated Use ``NetworkLoadBalancer.metrics.tcpClientResetCount`` instead
201
+ */
202
+ metricTcpClientResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
203
+ /**
204
+ * The total number of reset (RST) packets generated by the load balancer.
205
+ *
206
+ * @default Sum over 5 minutes
207
+ * @deprecated Use ``NetworkLoadBalancer.metrics.tcpElbResetCount`` instead
208
+ */
209
+ metricTcpElbResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
210
+ /**
211
+ * The total number of reset (RST) packets sent from a target to a client.
212
+ *
213
+ * These resets are generated by the target and forwarded by the load balancer.
214
+ *
215
+ * @default Sum over 5 minutes
216
+ * @deprecated Use ``NetworkLoadBalancer.metrics.tcpTargetResetCount`` instead
217
+ */
218
+ metricTcpTargetResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
219
+ }
220
+ /**
221
+ * Contains all metrics for a Network Load Balancer.
222
+ */
223
+ export interface INetworkLoadBalancerMetrics {
224
+ /**
225
+ * Return the given named metric for this Network Load Balancer
226
+ *
227
+ * @default Average over 5 minutes
228
+ */
229
+ custom(metricName: string, props?: cloudwatch.MetricOptions): cloudwatch.Metric;
230
+ /**
231
+ * The total number of concurrent TCP flows (or connections) from clients to targets.
232
+ *
233
+ * This metric includes connections in the SYN_SENT and ESTABLISHED states.
234
+ * TCP connections are not terminated at the load balancer, so a client
235
+ * opening a TCP connection to a target counts as a single flow.
236
+ *
237
+ * @default Average over 5 minutes
238
+ */
239
+ activeFlowCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
240
+ /**
241
+ * The number of load balancer capacity units (LCU) used by your load balancer.
242
+ *
243
+ * @default Sum over 5 minutes
244
+ */
245
+ consumedLCUs(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
246
+ /**
247
+ * The total number of new TCP flows (or connections) established from clients to targets in the time period.
248
+ *
249
+ * @default Sum over 5 minutes
250
+ */
251
+ newFlowCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
252
+ /**
253
+ * The total number of bytes processed by the load balancer, including TCP/IP headers.
254
+ *
255
+ * @default Sum over 5 minutes
256
+ */
257
+ processedBytes(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
258
+ /**
259
+ * The total number of reset (RST) packets sent from a client to a target.
260
+ *
261
+ * These resets are generated by the client and forwarded by the load balancer.
262
+ *
263
+ * @default Sum over 5 minutes
264
+ */
265
+ tcpClientResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
266
+ /**
267
+ * The total number of reset (RST) packets generated by the load balancer.
268
+ *
269
+ * @default Sum over 5 minutes
270
+ */
271
+ tcpElbResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
272
+ /**
273
+ * The total number of reset (RST) packets sent from a target to a client.
274
+ *
275
+ * These resets are generated by the target and forwarded by the load balancer.
276
+ *
277
+ * @default Sum over 5 minutes
278
+ */
279
+ tcpTargetResetCount(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
280
+ }
281
+ /**
282
+ * A network load balancer
283
+ */
284
+ export interface INetworkLoadBalancer extends ILoadBalancerV2, IVpcEndpointServiceLoadBalancer, IConnectable {
285
+ /**
286
+ * The VPC this load balancer has been created in (if available)
287
+ */
288
+ readonly vpc?: IVpc;
289
+ /**
290
+ * All metrics available for this load balancer
291
+ */
292
+ readonly metrics: INetworkLoadBalancerMetrics;
293
+ /**
294
+ * Security groups associated with this load balancer
295
+ */
296
+ readonly securityGroups?: string[];
297
+ /**
298
+ * The type of IP addresses to use
299
+ *
300
+ * @default IpAddressType.IPV4
301
+ */
302
+ readonly ipAddressType?: IpAddressType;
303
+ /**
304
+ * Indicates whether to evaluate inbound security group rules for traffic sent to a Network Load Balancer through AWS PrivateLink
305
+ *
306
+ * @default on
307
+ */
308
+ readonly enforceSecurityGroupInboundRulesOnPrivateLinkTraffic?: string;
309
+ /**
310
+ * Add a listener to this load balancer
311
+ *
312
+ * @returns The newly created listener
313
+ */
314
+ addListener(id: string, props: BaseNetworkListenerProps): NetworkListener;
315
+ }