terraconstructs 0.0.11 → 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 +7 -5
  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,281 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.UnauthenticatedAction = exports.ListenerAction = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const cdktf_1 = require("cdktf");
7
+ const port_1 = require("../port");
8
+ /**
9
+ * What to do when a client makes a request to a listener
10
+ *
11
+ * Some actions can be combined with other ones (specifically,
12
+ * you can perform authentication before serving the request).
13
+ *
14
+ * Multiple actions form a linked chain; the chain must always terminate in a
15
+ * *(weighted)forward*, *fixedResponse* or *redirect* action.
16
+ *
17
+ * If an action supports chaining, the next action can be indicated
18
+ * by passing it in the `next` property.
19
+ *
20
+ * (Called `ListenerAction` instead of the more strictly correct
21
+ * `ListenerAction` because this is the class most users interact
22
+ * with, and we want to make it not too visually overwhelming).
23
+ */
24
+ class ListenerAction {
25
+ /**
26
+ * Authenticate using an identity provider (IdP) that is compliant with OpenID Connect (OIDC)
27
+ *
28
+ * @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html#oidc-requirements
29
+ */
30
+ static authenticateOidc(options) {
31
+ return new AuthenticateOidcAction(options);
32
+ }
33
+ /**
34
+ * Forward to one or more Target Groups
35
+ *
36
+ * @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#forward-actions
37
+ */
38
+ static forward(targetGroups, options = {}) {
39
+ if (targetGroups.length === 0) {
40
+ throw new Error("Need at least one targetGroup in a ListenerAction.forward()");
41
+ }
42
+ if (targetGroups.length === 1 && options.stickinessDuration === undefined) {
43
+ // Render a "simple" action for backwards compatibility with old templates
44
+ return new TargetGroupListenerAction(targetGroups, {
45
+ type: "forward",
46
+ targetGroupArn: targetGroups[0].targetGroupArn,
47
+ });
48
+ }
49
+ return ListenerAction.weightedForward(targetGroups.map((g) => ({ targetGroup: g, weight: 1 })), options);
50
+ }
51
+ /**
52
+ * Forward to one or more Target Groups which are weighted differently
53
+ *
54
+ * @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#forward-actions
55
+ */
56
+ static weightedForward(targetGroups, options = {}) {
57
+ if (targetGroups.length === 0) {
58
+ throw new Error("Need at least one targetGroup in a ListenerAction.weightedForward()");
59
+ }
60
+ return new TargetGroupListenerAction(targetGroups.map((g) => g.targetGroup), {
61
+ type: "forward",
62
+ forward: {
63
+ targetGroup: targetGroups.map((g) => ({
64
+ arn: g.targetGroup.targetGroupArn,
65
+ weight: g.weight,
66
+ })),
67
+ stickiness: options.stickinessDuration
68
+ ? {
69
+ duration: options.stickinessDuration.toSeconds(),
70
+ enabled: true,
71
+ }
72
+ : undefined,
73
+ },
74
+ });
75
+ }
76
+ /**
77
+ * Return a fixed response
78
+ *
79
+ * @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#fixed-response-actions
80
+ */
81
+ static fixedResponse(statusCode, options = {}) {
82
+ return new ListenerAction({
83
+ type: "fixed-response",
84
+ fixedResponse: {
85
+ statusCode: cdktf_1.Tokenization.stringifyNumber(statusCode),
86
+ contentType: options.contentType ?? "text/plain",
87
+ messageBody: options.messageBody,
88
+ },
89
+ });
90
+ }
91
+ /**
92
+ * Redirect to a different URI
93
+ *
94
+ * A URI consists of the following components:
95
+ * protocol://hostname:port/path?query. You must modify at least one of the
96
+ * following components to avoid a redirect loop: protocol, hostname, port, or
97
+ * path. Any components that you do not modify retain their original values.
98
+ *
99
+ * You can reuse URI components using the following reserved keywords:
100
+ *
101
+ * - `#{protocol}`
102
+ * - `#{host}`
103
+ * - `#{port}`
104
+ * - `#{path}` (the leading "/" is removed)
105
+ * - `#{query}`
106
+ *
107
+ * For example, you can change the path to "/new/#{path}", the hostname to
108
+ * "example.#{host}", or the query to "#{query}&value=xyz".
109
+ *
110
+ * @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#redirect-actions
111
+ */
112
+ static redirect(options) {
113
+ if ([
114
+ options.host,
115
+ options.path,
116
+ options.port,
117
+ options.protocol,
118
+ options.query,
119
+ ].findIndex((x) => x !== undefined) === -1) {
120
+ throw new Error("To prevent redirect loops, set at least one of 'protocol', 'host', 'port', 'path', or 'query'.");
121
+ }
122
+ if (options.path &&
123
+ !cdktf_1.Token.isUnresolved(options.path) &&
124
+ !options.path.startsWith("/")) {
125
+ throw new Error(`Redirect path must start with a \'/\', got: ${options.path}`);
126
+ }
127
+ return new ListenerAction({
128
+ type: "redirect",
129
+ redirect: {
130
+ statusCode: options.permanent ? "HTTP_301" : "HTTP_302",
131
+ host: options.host,
132
+ path: options.path,
133
+ port: options.port,
134
+ protocol: options.protocol,
135
+ query: options.query,
136
+ },
137
+ });
138
+ }
139
+ /**
140
+ * Create an instance of ListenerAction
141
+ *
142
+ * The default class should be good enough for most cases and
143
+ * should be created by using one of the static factory functions,
144
+ * but allow overriding to make sure we allow flexibility for the future.
145
+ */
146
+ constructor(defaultActionJson, next) {
147
+ this.defaultActionJson = defaultActionJson;
148
+ this.next = next;
149
+ }
150
+ /**
151
+ * Render the listener rule actions in this chain
152
+ */
153
+ renderRuleActions() {
154
+ const actionJson = this._actionJson ??
155
+ this.defaultActionJson;
156
+ return this._renumber([
157
+ actionJson,
158
+ ...(this.next?.renderRuleActions() ?? []),
159
+ ]);
160
+ }
161
+ /**
162
+ * Render the listener default actions in this chain
163
+ */
164
+ renderActions() {
165
+ return this._renumber([
166
+ this.defaultActionJson,
167
+ ...(this.next?.renderActions() ?? []),
168
+ ]);
169
+ }
170
+ /**
171
+ * Called when the action is being used in a listener
172
+ */
173
+ bind(scope, listener, associatingConstruct) {
174
+ this.next?.bind(scope, listener, associatingConstruct);
175
+ }
176
+ _renumber(actions) {
177
+ if (actions.length < 2) {
178
+ return actions;
179
+ }
180
+ return actions.map((action, i) => ({ ...action, order: i + 1 }));
181
+ }
182
+ /**
183
+ * Renumber the "order" fields in the actions array.
184
+ *
185
+ * We don't number for 0 or 1 elements, but otherwise number them 1...#actions
186
+ * so ELB knows about the right order.
187
+ *
188
+ * Do this in `ListenerAction` instead of in `Listener` so that we give
189
+ * users the opportunity to override by subclassing and overriding `renderActions`.
190
+ */
191
+ renumber(actions) {
192
+ return this._renumber(actions);
193
+ }
194
+ /**
195
+ * Sets the Action for the `ListenerRule`.
196
+ * This method is required to set a dedicated Action to a `ListenerRule`
197
+ * when the Action for the `CfnListener` and the Action for the `CfnListenerRule`
198
+ * have different structures. (e.g. `AuthenticateOidcConfig`)
199
+ * @param actionJson Action for `ListenerRule`
200
+ */
201
+ addRuleAction(actionJson) {
202
+ if (this._actionJson) {
203
+ throw new Error("rule action is already set");
204
+ }
205
+ this._actionJson = actionJson;
206
+ }
207
+ }
208
+ exports.ListenerAction = ListenerAction;
209
+ _a = JSII_RTTI_SYMBOL_1;
210
+ ListenerAction[_a] = { fqn: "terraconstructs.aws.compute.ListenerAction", version: "0.0.12" };
211
+ /**
212
+ * What to do with unauthenticated requests
213
+ */
214
+ var UnauthenticatedAction;
215
+ (function (UnauthenticatedAction) {
216
+ /**
217
+ * Return an HTTP 401 Unauthorized error.
218
+ */
219
+ UnauthenticatedAction["DENY"] = "deny";
220
+ /**
221
+ * Allow the request to be forwarded to the target.
222
+ */
223
+ UnauthenticatedAction["ALLOW"] = "allow";
224
+ /**
225
+ * Redirect the request to the IdP authorization endpoint.
226
+ */
227
+ UnauthenticatedAction["AUTHENTICATE"] = "authenticate";
228
+ })(UnauthenticatedAction || (exports.UnauthenticatedAction = UnauthenticatedAction = {}));
229
+ /**
230
+ * Listener Action that calls "registerListener" on TargetGroups
231
+ */
232
+ class TargetGroupListenerAction extends ListenerAction {
233
+ constructor(targetGroups, defaultActionJson) {
234
+ super(defaultActionJson);
235
+ this.targetGroups = targetGroups;
236
+ }
237
+ bind(_scope, listener, associatingConstruct) {
238
+ for (const tg of this.targetGroups) {
239
+ tg.registerListener(listener, associatingConstruct);
240
+ }
241
+ }
242
+ }
243
+ /**
244
+ * A Listener Action to authenticate with OIDC
245
+ */
246
+ class AuthenticateOidcAction extends ListenerAction {
247
+ constructor(options) {
248
+ const defaultActionConfig = {
249
+ authorizationEndpoint: options.authorizationEndpoint,
250
+ clientId: options.clientId,
251
+ clientSecret: options.clientSecret, //.unsafeUnwrap(), // Safe usage
252
+ issuer: options.issuer,
253
+ tokenEndpoint: options.tokenEndpoint,
254
+ userInfoEndpoint: options.userInfoEndpoint,
255
+ authenticationRequestExtraParams: options.authenticationRequestExtraParams,
256
+ onUnauthenticatedRequest: options.onUnauthenticatedRequest,
257
+ scope: options.scope,
258
+ sessionCookieName: options.sessionCookieName,
259
+ sessionTimeout: options.sessionTimeout?.toSeconds(),
260
+ };
261
+ super({
262
+ type: "authenticate-oidc",
263
+ authenticateOidc: defaultActionConfig,
264
+ }, options.next);
265
+ this.allowHttpsOutbound = options.allowHttpsOutbound ?? true;
266
+ this.addRuleAction({
267
+ type: "authenticate-oidc",
268
+ authenticateOidc: {
269
+ ...defaultActionConfig,
270
+ sessionTimeout: options.sessionTimeout?.toSeconds(),
271
+ },
272
+ });
273
+ }
274
+ bind(scope, listener, associatingConstruct) {
275
+ super.bind(scope, listener, associatingConstruct);
276
+ if (!this.allowHttpsOutbound)
277
+ return;
278
+ listener.connections.allowToAnyIpv4(port_1.Port.tcp(443), "Allow to IdP endpoint");
279
+ }
280
+ }
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tbGlzdGVuZXItYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2F3cy9jb21wdXRlL2FsYi9hcHBsaWNhdGlvbi1saXN0ZW5lci1hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFNQSxpQ0FJZTtBQU1mLGtDQUErQjtBQUUvQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFhLGNBQWM7SUFDekI7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FDNUIsT0FBZ0M7UUFFaEMsT0FBTyxJQUFJLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FDbkIsWUFBdUMsRUFDdkMsVUFBMEIsRUFBRTtRQUU1QixJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FDYiw2REFBNkQsQ0FDOUQsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxRSwwRUFBMEU7WUFDMUUsT0FBTyxJQUFJLHlCQUF5QixDQUFDLFlBQVksRUFBRTtnQkFDakQsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjO2FBQy9DLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLGNBQWMsQ0FBQyxlQUFlLENBQ25DLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3hELE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09B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d3MvYXdzLWNkay9ibG9iL3YyLjE3NS4xL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyL2xpYi9hbGIvYXBwbGljYXRpb24tbGlzdGVuZXItYWN0aW9uLnRzXG5cbmltcG9ydCB7XG4gIGxiTGlzdGVuZXIgYXMgdGZMaXN0ZW5lcixcbiAgbGJMaXN0ZW5lclJ1bGUgYXMgdGZMaXN0ZW5lclJ1bGUsXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQge1xuICAvL1NlY3JldFZhbHVlLFxuICBUb2tlbixcbiAgVG9rZW5pemF0aW9uLFxufSBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBJQXBwbGljYXRpb25MaXN0ZW5lciB9IGZyb20gXCIuL2FwcGxpY2F0aW9uLWxpc3RlbmVyXCI7XG5pbXBvcnQgeyBJQXBwbGljYXRpb25UYXJnZXRHcm91cCB9IGZyb20gXCIuL2FwcGxpY2F0aW9uLXRhcmdldC1ncm91cFwiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vZHVyYXRpb25cIjtcbmltcG9ydCB7IElMaXN0ZW5lckFjdGlvbiB9IGZyb20gXCIuLi9sYi1zaGFyZWQvbGlzdGVuZXItYWN0aW9uXCI7XG5pbXBvcnQgeyBQb3J0IH0gZnJvbSBcIi4uL3BvcnRcIjtcblxuLyoqXG4gKiBXaGF0IHRvIGRvIHdoZW4gYSBjbGllbnQgbWFrZXMgYSByZXF1ZXN0IHRvIGEgbGlzdGVuZXJcbiAqXG4gKiBTb21lIGFjdGlvbnMgY2FuIGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgb25lcyAoc3BlY2lmaWNhbGx5LFxuICogeW91IGNhbiBwZXJmb3JtIGF1dGhlbnRpY2F0aW9uIGJlZm9yZSBzZXJ2aW5nIHRoZSByZXF1ZXN0KS5cbiAqXG4gKiBNdWx0aXBsZSBhY3Rpb25zIGZvcm0gYSBsaW5rZWQgY2hhaW47IHRoZSBjaGFpbiBtdXN0IGFsd2F5cyB0ZXJtaW5hdGUgaW4gYVxuICogKih3ZWlnaHRlZClmb3J3YXJkKiwgKmZpeGVkUmVzcG9uc2UqIG9yICpyZWRpcmVjdCogYWN0aW9uLlxuICpcbiAqIElmIGFuIGFjdGlvbiBzdXBwb3J0cyBjaGFpbmluZywgdGhlIG5leHQgYWN0aW9uIGNhbiBiZSBpbmRpY2F0ZWRcbiAqIGJ5IHBhc3NpbmcgaXQgaW4gdGhlIGBuZXh0YCBwcm9wZXJ0eS5cbiAqXG4gKiAoQ2FsbGVkIGBMaXN0ZW5lckFjdGlvbmAgaW5zdGVhZCBvZiB0aGUgbW9yZSBzdHJpY3RseSBjb3JyZWN0XG4gKiBgTGlzdGVuZXJBY3Rpb25gIGJlY2F1c2UgdGhpcyBpcyB0aGUgY2xhc3MgbW9zdCB1c2VycyBpbnRlcmFjdFxuICogd2l0aCwgYW5kIHdlIHdhbnQgdG8gbWFrZSBpdCBub3QgdG9vIHZpc3VhbGx5IG92ZXJ3aGVsbWluZykuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXN0ZW5lckFjdGlvbiBpbXBsZW1lbnRzIElMaXN0ZW5lckFjdGlvbiB7XG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGUgdXNpbmcgYW4gaWRlbnRpdHkgcHJvdmlkZXIgKElkUCkgdGhhdCBpcyBjb21wbGlhbnQgd2l0aCBPcGVuSUQgQ29ubmVjdCAoT0lEQylcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2xpc3RlbmVyLWF1dGhlbnRpY2F0ZS11c2Vycy5odG1sI29pZGMtcmVxdWlyZW1lbnRzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGF1dGhlbnRpY2F0ZU9pZGMoXG4gICAgb3B0aW9uczogQXV0aGVudGljYXRlT2lkY09wdGlvbnMsXG4gICk6IExpc3RlbmVyQWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IEF1dGhlbnRpY2F0ZU9pZGNBY3Rpb24ob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRm9yd2FyZCB0byBvbmUgb3IgbW9yZSBUYXJnZXQgR3JvdXBzXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9sb2FkLWJhbGFuY2VyLWxpc3RlbmVycy5odG1sI2ZvcndhcmQtYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmb3J3YXJkKFxuICAgIHRhcmdldEdyb3VwczogSUFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBbXSxcbiAgICBvcHRpb25zOiBGb3J3YXJkT3B0aW9ucyA9IHt9LFxuICApOiBMaXN0ZW5lckFjdGlvbiB7XG4gICAgaWYgKHRhcmdldEdyb3Vwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJOZWVkIGF0IGxlYXN0IG9uZSB0YXJnZXRHcm91cCBpbiBhIExpc3RlbmVyQWN0aW9uLmZvcndhcmQoKVwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRhcmdldEdyb3Vwcy5sZW5ndGggPT09IDEgJiYgb3B0aW9ucy5zdGlja2luZXNzRHVyYXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gUmVuZGVyIGEgXCJzaW1wbGVcIiBhY3Rpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkIHRlbXBsYXRlc1xuICAgICAgcmV0dXJuIG5ldyBUYXJnZXRHcm91cExpc3RlbmVyQWN0aW9uKHRhcmdldEdyb3Vwcywge1xuICAgICAgICB0eXBlOiBcImZvcndhcmRcIixcbiAgICAgICAgdGFyZ2V0R3JvdXBBcm46IHRhcmdldEdyb3Vwc1swXS50YXJnZXRHcm91cEFybixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBMaXN0ZW5lckFjdGlvbi53ZWlnaHRlZEZvcndhcmQoXG4gICAgICB0YXJnZXRHcm91cHMubWFwKChnKSA9PiAoeyB0YXJnZXRHcm91cDogZywgd2VpZ2h0OiAxIH0pKSxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3J3YXJkIHRvIG9uZSBvciBtb3JlIFRhcmdldCBHcm91cHMgd2hpY2ggYXJlIHdlaWdodGVkIGRpZmZlcmVudGx5XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VsYXN0aWNsb2FkYmFsYW5jaW5nL2xhdGVzdC9hcHBsaWNhdGlvbi9sb2FkLWJhbGFuY2VyLWxpc3RlbmVycy5odG1sI2ZvcndhcmQtYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyB3ZWlnaHRlZEZvcndhcmQoXG4gICAgdGFyZ2V0R3JvdXBzOiBXZWlnaHRlZFRhcmdldEdyb3VwW10sXG4gICAgb3B0aW9uczogRm9yd2FyZE9wdGlvbnMgPSB7fSxcbiAgKTogTGlzdGVuZXJBY3Rpb24ge1xuICAgIGlmICh0YXJnZXRHcm91cHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTmVlZCBhdCBsZWFzdCBvbmUgdGFyZ2V0R3JvdXAgaW4gYSBMaXN0ZW5lckFjdGlvbi53ZWlnaHRlZEZvcndhcmQoKVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFRhcmdldEdyb3VwTGlzdGVuZXJBY3Rpb24oXG4gICAgICB0YXJnZXRHcm91cHMubWFwKChnKSA9PiBnLnRhcmdldEdyb3VwKSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJmb3J3YXJkXCIsXG4gICAgICAgIGZvcndhcmQ6IHtcbiAgICAgICAgICB0YXJnZXRHcm91cDogdGFyZ2V0R3JvdXBzLm1hcCgoZykgPT4gKHtcbiAgICAgICAgICAgIGFybjogZy50YXJnZXRHcm91cC50YXJnZXRHcm91cEFybixcbiAgICAgICAgICAgIHdlaWdodDogZy53ZWlnaHQsXG4gICAgICAgICAgfSkpLFxuICAgICAgICAgIHN0aWNraW5lc3M6IG9wdGlvbnMuc3RpY2tpbmVzc0R1cmF0aW9uXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogb3B0aW9ucy5zdGlja2luZXNzRHVyYXRpb24udG9TZWNvbmRzKCksXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgZml4ZWQgcmVzcG9uc2VcbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2xvYWQtYmFsYW5jZXItbGlzdGVuZXJzLmh0bWwjZml4ZWQtcmVzcG9uc2UtYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmaXhlZFJlc3BvbnNlKFxuICAgIHN0YXR1c0NvZGU6IG51bWJlcixcbiAgICBvcHRpb25zOiBGaXhlZFJlc3BvbnNlT3B0aW9ucyA9IHt9LFxuICApOiBMaXN0ZW5lckFjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBMaXN0ZW5lckFjdGlvbih7XG4gICAgICB0eXBlOiBcImZpeGVkLXJlc3BvbnNlXCIsXG4gICAgICBmaXhlZFJlc3BvbnNlOiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IFRva2VuaXphdGlvbi5zdHJpbmdpZnlOdW1iZXIoc3RhdHVzQ29kZSksXG4gICAgICAgIGNvbnRlbnRUeXBlOiBvcHRpb25zLmNvbnRlbnRUeXBlID8/IFwidGV4dC9wbGFpblwiLFxuICAgICAgICBtZXNzYWdlQm9keTogb3B0aW9ucy5tZXNzYWdlQm9keSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVkaXJlY3QgdG8gYSBkaWZmZXJlbnQgVVJJXG4gICAqXG4gICAqIEEgVVJJIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czpcbiAgICogcHJvdG9jb2w6Ly9ob3N0bmFtZTpwb3J0L3BhdGg/cXVlcnkuIFlvdSBtdXN0IG1vZGlmeSBhdCBsZWFzdCBvbmUgb2YgdGhlXG4gICAqIGZvbGxvd2luZyBjb21wb25lbnRzIHRvIGF2b2lkIGEgcmVkaXJlY3QgbG9vcDogcHJvdG9jb2wsIGhvc3RuYW1lLCBwb3J0LCBvclxuICAgKiBwYXRoLiBBbnkgY29tcG9uZW50cyB0aGF0IHlvdSBkbyBub3QgbW9kaWZ5IHJldGFpbiB0aGVpciBvcmlnaW5hbCB2YWx1ZXMuXG4gICAqXG4gICAqIFlvdSBjYW4gcmV1c2UgVVJJIGNvbXBvbmVudHMgdXNpbmcgdGhlIGZvbGxvd2luZyByZXNlcnZlZCBrZXl3b3JkczpcbiAgICpcbiAgICogLSBgI3twcm90b2NvbH1gXG4gICAqIC0gYCN7aG9zdH1gXG4gICAqIC0gYCN7cG9ydH1gXG4gICAqIC0gYCN7cGF0aH1gICh0aGUgbGVhZGluZyBcIi9cIiBpcyByZW1vdmVkKVxuICAgKiAtIGAje3F1ZXJ5fWBcbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2hhbmdlIHRoZSBwYXRoIHRvIFwiL25ldy8je3BhdGh9XCIsIHRoZSBob3N0bmFtZSB0b1xuICAgKiBcImV4YW1wbGUuI3tob3N0fVwiLCBvciB0aGUgcXVlcnkgdG8gXCIje3F1ZXJ5fSZ2YWx1ZT14eXpcIi5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L2FwcGxpY2F0aW9uL2xvYWQtYmFsYW5jZXItbGlzdGVuZXJzLmh0bWwjcmVkaXJlY3QtYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWRpcmVjdChvcHRpb25zOiBSZWRpcmVjdE9wdGlvbnMpOiBMaXN0ZW5lckFjdGlvbiB7XG4gICAgaWYgKFxuICAgICAgW1xuICAgICAgICBvcHRpb25zLmhvc3QsXG4gICAgICAgIG9wdGlvbnMucGF0aCxcbiAgICAgICAgb3B0aW9ucy5wb3J0LFxuICAgICAgICBvcHRpb25zLnByb3RvY29sLFxuICAgICAgICBvcHRpb25zLnF1ZXJ5LFxuICAgICAgXS5maW5kSW5kZXgoKHgpID0+IHggIT09IHVuZGVmaW5lZCkgPT09IC0xXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVG8gcHJldmVudCByZWRpcmVjdCBsb29wcywgc2V0IGF0IGxlYXN0IG9uZSBvZiAncHJvdG9jb2wnLCAnaG9zdCcsICdwb3J0JywgJ3BhdGgnLCBvciAncXVlcnknLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgb3B0aW9ucy5wYXRoICYmXG4gICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKG9wdGlvbnMucGF0aCkgJiZcbiAgICAgICFvcHRpb25zLnBhdGguc3RhcnRzV2l0aChcIi9cIilcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFJlZGlyZWN0IHBhdGggbXVzdCBzdGFydCB3aXRoIGEgXFwnL1xcJywgZ290OiAke29wdGlvbnMucGF0aH1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IExpc3RlbmVyQWN0aW9uKHtcbiAgICAgIHR5cGU6IFwicmVkaXJlY3RcIixcbiAgICAgIHJlZGlyZWN0OiB7XG4gICAgICAgIHN0YXR1c0NvZGU6IG9wdGlvbnMucGVybWFuZW50ID8gXCJIVFRQXzMwMVwiIDogXCJIVFRQXzMwMlwiLFxuICAgICAgICBob3N0OiBvcHRpb25zLmhvc3QsXG4gICAgICAgIHBhdGg6IG9wdGlvbnMucGF0aCxcbiAgICAgICAgcG9ydDogb3B0aW9ucy5wb3J0LFxuICAgICAgICBwcm90b2NvbDogb3B0aW9ucy5wcm90b2NvbCxcbiAgICAgICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHNldCwgaXQgaXMgcHJlZmVycmVkIGFzIEFjdGlvbiBmb3IgdGhlIGBMaXN0ZW5lclJ1bGVgLlxuICAgKiBUaGlzIGlzIG5lY2Vzc2FyeSBpZiBgQ2ZuTGlzdGVuZXIuQWN0aW9uUHJvcGVydHlgIGFuZCBgQ2ZuTGlzdGVuZXJSdWxlLkFjdGlvblByb3BlcnR5YFxuICAgKiBoYXZlIGRpZmZlcmVudCBzdHJ1Y3R1cmVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfYWN0aW9uSnNvbj86IHRmTGlzdGVuZXJSdWxlLkxiTGlzdGVuZXJSdWxlQWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgTGlzdGVuZXJBY3Rpb25cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgY2xhc3Mgc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZvciBtb3N0IGNhc2VzIGFuZFxuICAgKiBzaG91bGQgYmUgY3JlYXRlZCBieSB1c2luZyBvbmUgb2YgdGhlIHN0YXRpYyBmYWN0b3J5IGZ1bmN0aW9ucyxcbiAgICogYnV0IGFsbG93IG92ZXJyaWRpbmcgdG8gbWFrZSBzdXJlIHdlIGFsbG93IGZsZXhpYmlsaXR5IGZvciB0aGUgZnV0dXJlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEFjdGlvbkpzb246IHRmTGlzdGVuZXIuTGJMaXN0ZW5lckRlZmF1bHRBY3Rpb24sXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5leHQ/OiBMaXN0ZW5lckFjdGlvbixcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGxpc3RlbmVyIHJ1bGUgYWN0aW9ucyBpbiB0aGlzIGNoYWluXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyUnVsZUFjdGlvbnMoKTogdGZMaXN0ZW5lclJ1bGUuTGJMaXN0ZW5lclJ1bGVBY3Rpb25bXSB7XG4gICAgY29uc3QgYWN0aW9uSnNvbiA9XG4gICAgICB0aGlzLl9hY3Rpb25Kc29uID8/XG4gICAgICAodGhpcy5kZWZhdWx0QWN0aW9uSnNvbiBhcyB0Zkxpc3RlbmVyUnVsZS5MYkxpc3RlbmVyUnVsZUFjdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuX3JlbnVtYmVyKFtcbiAgICAgIGFjdGlvbkpzb24sXG4gICAgICAuLi4odGhpcy5uZXh0Py5yZW5kZXJSdWxlQWN0aW9ucygpID8/IFtdKSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGxpc3RlbmVyIGRlZmF1bHQgYWN0aW9ucyBpbiB0aGlzIGNoYWluXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyQWN0aW9ucygpOiB0Zkxpc3RlbmVyLkxiTGlzdGVuZXJEZWZhdWx0QWN0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLl9yZW51bWJlcihbXG4gICAgICB0aGlzLmRlZmF1bHRBY3Rpb25Kc29uLFxuICAgICAgLi4uKHRoaXMubmV4dD8ucmVuZGVyQWN0aW9ucygpID8/IFtdKSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgYWN0aW9uIGlzIGJlaW5nIHVzZWQgaW4gYSBsaXN0ZW5lclxuICAgKi9cbiAgcHVibGljIGJpbmQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBsaXN0ZW5lcjogSUFwcGxpY2F0aW9uTGlzdGVuZXIsXG4gICAgYXNzb2NpYXRpbmdDb25zdHJ1Y3Q/OiBJQ29uc3RydWN0LFxuICApIHtcbiAgICB0aGlzLm5leHQ/LmJpbmQoc2NvcGUsIGxpc3RlbmVyLCBhc3NvY2lhdGluZ0NvbnN0cnVjdCk7XG4gIH1cblxuICBwcml2YXRlIF9yZW51bWJlcjxcbiAgICBBY3Rpb25Qcm9wZXJ0eSBleHRlbmRzXG4gICAgICB8IHRmTGlzdGVuZXIuTGJMaXN0ZW5lckRlZmF1bHRBY3Rpb25cbiAgICAgIHwgdGZMaXN0ZW5lclJ1bGUuTGJMaXN0ZW5lclJ1bGVBY3Rpb24gPSB0Zkxpc3RlbmVyLkxiTGlzdGVuZXJEZWZhdWx0QWN0aW9uLFxuICA+KGFjdGlvbnM6IEFjdGlvblByb3BlcnR5W10pOiBBY3Rpb25Qcm9wZXJ0eVtdIHtcbiAgICBpZiAoYWN0aW9ucy5sZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gYWN0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0aW9ucy5tYXAoKGFjdGlvbiwgaSkgPT4gKHsgLi4uYWN0aW9uLCBvcmRlcjogaSArIDEgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbnVtYmVyIHRoZSBcIm9yZGVyXCIgZmllbGRzIGluIHRoZSBhY3Rpb25zIGFycmF5LlxuICAgKlxuICAgKiBXZSBkb24ndCBudW1iZXIgZm9yIDAgb3IgMSBlbGVtZW50cywgYnV0IG90aGVyd2lzZSBudW1iZXIgdGhlbSAxLi4uI2FjdGlvbnNcbiAgICogc28gRUxCIGtub3dzIGFib3V0IHRoZSByaWdodCBvcmRlci5cbiAgICpcbiAgICogRG8gdGhpcyBpbiBgTGlzdGVuZXJBY3Rpb25gIGluc3RlYWQgb2YgaW4gYExpc3RlbmVyYCBzbyB0aGF0IHdlIGdpdmVcbiAgICogdXNlcnMgdGhlIG9wcG9ydHVuaXR5IHRvIG92ZXJyaWRlIGJ5IHN1YmNsYXNzaW5nIGFuZCBvdmVycmlkaW5nIGByZW5kZXJBY3Rpb25zYC5cbiAgICovXG4gIHByb3RlY3RlZCByZW51bWJlcihcbiAgICBhY3Rpb25zOiB0Zkxpc3RlbmVyLkxiTGlzdGVuZXJEZWZhdWx0QWN0aW9uW10sXG4gICk6IHRmTGlzdGVuZXIuTGJMaXN0ZW5lckRlZmF1bHRBY3Rpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbnVtYmVyKGFjdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIEFjdGlvbiBmb3IgdGhlIGBMaXN0ZW5lclJ1bGVgLlxuICAgKiBUaGlzIG1ldGhvZCBpcyByZXF1aXJlZCB0byBzZXQgYSBkZWRpY2F0ZWQgQWN0aW9uIHRvIGEgYExpc3RlbmVyUnVsZWBcbiAgICogd2hlbiB0aGUgQWN0aW9uIGZvciB0aGUgYENmbkxpc3RlbmVyYCBhbmQgdGhlIEFjdGlvbiBmb3IgdGhlIGBDZm5MaXN0ZW5lclJ1bGVgXG4gICAqIGhhdmUgZGlmZmVyZW50IHN0cnVjdHVyZXMuIChlLmcuIGBBdXRoZW50aWNhdGVPaWRjQ29uZmlnYClcbiAgICogQHBhcmFtIGFjdGlvbkpzb24gQWN0aW9uIGZvciBgTGlzdGVuZXJSdWxlYFxuICAgKi9cbiAgcHJvdGVjdGVkIGFkZFJ1bGVBY3Rpb24oYWN0aW9uSnNvbjogdGZMaXN0ZW5lclJ1bGUuTGJMaXN0ZW5lclJ1bGVBY3Rpb24pIHtcbiAgICBpZiAodGhpcy5fYWN0aW9uSnNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicnVsZSBhY3Rpb24gaXMgYWxyZWFkeSBzZXRcIik7XG4gICAgfVxuICAgIHRoaXMuX2FjdGlvbkpzb24gPSBhY3Rpb25Kc29uO1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYExpc3RlbmVyQWN0aW9uLmZvcndhcmQoKWBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb3J3YXJkT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBGb3IgaG93IGxvbmcgY2xpZW50cyBzaG91bGQgYmUgZGlyZWN0ZWQgdG8gdGhlIHNhbWUgdGFyZ2V0IGdyb3VwXG4gICAqXG4gICAqIFJhbmdlIGJldHdlZW4gMSBzZWNvbmQgYW5kIDcgZGF5cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBzdGlja2luZXNzXG4gICAqL1xuICByZWFkb25seSBzdGlja2luZXNzRHVyYXRpb24/OiBEdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBBIFRhcmdldCBHcm91cCBhbmQgd2VpZ2h0IGNvbWJpbmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2VpZ2h0ZWRUYXJnZXRHcm91cCB7XG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IGdyb3VwXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRHcm91cDogSUFwcGxpY2F0aW9uVGFyZ2V0R3JvdXA7XG5cbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgZ3JvdXAncyB3ZWlnaHRcbiAgICpcbiAgICogUmFuZ2UgaXMgWzAuLjEwMDApLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICByZWFkb25seSB3ZWlnaHQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYExpc3RlbmVyQWN0aW9uLmZpeGVkUmVzcG9uc2UoKWBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaXhlZFJlc3BvbnNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb250ZW50IFR5cGUgb2YgdGhlIHJlc3BvbnNlXG4gICAqXG4gICAqIFZhbGlkIFZhbHVlczogdGV4dC9wbGFpbiB8IHRleHQvY3NzIHwgdGV4dC9odG1sIHwgYXBwbGljYXRpb24vamF2YXNjcmlwdCB8IGFwcGxpY2F0aW9uL2pzb25cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnRUeXBlPzogc3RyaW5nO1xuXG4gIC8vIFRPRE86IEF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIGNvbnRlbnQgdHlwZT9cbiAgLy8gKiBAZGVmYXVsdCAtIEF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZFxuICAvLyBSZXF1aXJlZCBpbiBlbGJ2MiAtIENyZWF0ZVJ1bGUgLSBBUEkgQ2FsbFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZWxhc3RpY2xvYWRiYWxhbmNpbmcvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRml4ZWRSZXNwb25zZUFjdGlvbkNvbmZpZy5odG1sXG4gIC8vIE9wdGlvbmFsIGluIENsb3VkRm9ybWF0aW9uIHJlc291cmNlXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1wcm9wZXJ0aWVzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjItbGlzdGVuZXItZml4ZWRyZXNwb25zZWNvbmZpZy5odG1sI2Nmbi1lbGFzdGljbG9hZGJhbGFuY2luZ3YyLWxpc3RlbmVyLWZpeGVkcmVzcG9uc2Vjb25maWctY29udGVudHR5cGVcblxuICAvKipcbiAgICogVGhlIHJlc3BvbnNlIGJvZHlcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBib2R5XG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlQm9keT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgTGlzdGVuZXJBY3Rpb24ucmVkaXJlY3QoKWBcbiAqXG4gKiBBIFVSSSBjb25zaXN0cyBvZiB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKiBwcm90b2NvbDovL2hvc3RuYW1lOnBvcnQvcGF0aD9xdWVyeS4gWW91IG11c3QgbW9kaWZ5IGF0IGxlYXN0IG9uZSBvZiB0aGVcbiAqIGZvbGxvd2luZyBjb21wb25lbnRzIHRvIGF2b2lkIGEgcmVkaXJlY3QgbG9vcDogcHJvdG9jb2wsIGhvc3RuYW1lLCBwb3J0LCBvclxuICogcGF0aC4gQW55IGNvbXBvbmVudHMgdGhhdCB5b3UgZG8gbm90IG1vZGlmeSByZXRhaW4gdGhlaXIgb3JpZ2luYWwgdmFsdWVzLlxuICpcbiAqIFlvdSBjYW4gcmV1c2UgVVJJIGNvbXBvbmVudHMgdXNpbmcgdGhlIGZvbGxvd2luZyByZXNlcnZlZCBrZXl3b3JkczpcbiAqXG4gKiAtIGAje3Byb3RvY29sfWBcbiAqIC0gYCN7aG9zdH1gXG4gKiAtIGAje3BvcnR9YFxuICogLSBgI3twYXRofWAgKHRoZSBsZWFkaW5nIFwiL1wiIGlzIHJlbW92ZWQpXG4gKiAtIGAje3F1ZXJ5fWBcbiAqXG4gKiBGb3IgZXhhbXBsZSwgeW91IGNhbiBjaGFuZ2UgdGhlIHBhdGggdG8gXCIvbmV3LyN7cGF0aH1cIiwgdGhlIGhvc3RuYW1lIHRvXG4gKiBcImV4YW1wbGUuI3tob3N0fVwiLCBvciB0aGUgcXVlcnkgdG8gXCIje3F1ZXJ5fSZ2YWx1ZT14eXpcIi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWRpcmVjdE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGhvc3RuYW1lLlxuICAgKlxuICAgKiBUaGlzIGNvbXBvbmVudCBpcyBub3QgcGVyY2VudC1lbmNvZGVkLiBUaGUgaG9zdG5hbWUgY2FuIGNvbnRhaW4gI3tob3N0fS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoLCBzdGFydGluZyB3aXRoIHRoZSBsZWFkaW5nIFwiL1wiLlxuICAgKlxuICAgKiBUaGlzIGNvbXBvbmVudCBpcyBub3QgcGVyY2VudC1lbmNvZGVkLiBUaGUgcGF0aCBjYW4gY29udGFpbiAje2hvc3R9LCAje3BhdGh9LCBhbmQgI3twb3J0fS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3J0LlxuICAgKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgYSB2YWx1ZSBmcm9tIDEgdG8gNjU1MzUgb3IgI3twb3J0fS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm90b2NvbC5cbiAgICpcbiAgICogWW91IGNhbiBzcGVjaWZ5IEhUVFAsIEhUVFBTLCBvciAje3Byb3RvY29sfS4gWW91IGNhbiByZWRpcmVjdCBIVFRQIHRvIEhUVFAsIEhUVFAgdG8gSFRUUFMsIGFuZCBIVFRQUyB0byBIVFRQUy4gWW91IGNhbm5vdCByZWRpcmVjdCBIVFRQUyB0byBIVFRQLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGNoYW5nZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdG9jb2w/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBxdWVyeSBwYXJhbWV0ZXJzLCBVUkwtZW5jb2RlZCB3aGVuIG5lY2Vzc2FyeSwgYnV0IG5vdCBwZXJjZW50LWVuY29kZWQuXG4gICAqXG4gICAqIERvIG5vdCBpbmNsdWRlIHRoZSBsZWFkaW5nIFwiP1wiLCBhcyBpdCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkLiBZb3UgY2FuIHNwZWNpZnkgYW55IG9mIHRoZSByZXNlcnZlZCBrZXl3b3Jkcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBjaGFuZ2VcbiAgICovXG4gIHJlYWRvbmx5IHF1ZXJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSFRUUCByZWRpcmVjdCBjb2RlLlxuICAgKlxuICAgKiBUaGUgcmVkaXJlY3QgaXMgZWl0aGVyIHBlcm1hbmVudCAoSFRUUCAzMDEpIG9yIHRlbXBvcmFyeSAoSFRUUCAzMDIpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcGVybWFuZW50PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgTGlzdGVuZXJBY3Rpb24uYXV0aGVuY2lhdGVPaWRjKClgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aGVudGljYXRlT2lkY09wdGlvbnMge1xuICAvKipcbiAgICogV2hhdCBhY3Rpb24gdG8gZXhlY3V0ZSBuZXh0XG4gICAqL1xuICByZWFkb25seSBuZXh0OiBMaXN0ZW5lckFjdGlvbjtcblxuICAvKipcbiAgICogVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgKHVwIHRvIDEwKSB0byBpbmNsdWRlIGluIHRoZSByZWRpcmVjdCByZXF1ZXN0IHRvIHRoZSBhdXRob3JpemF0aW9uIGVuZHBvaW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGV4dHJhIHBhcmFtZXRlcnNcbiAgICovXG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUmVxdWVzdEV4dHJhUGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIGF1dGhvcml6YXRpb24gZW5kcG9pbnQgb2YgdGhlIElkUC5cbiAgICpcbiAgICogVGhpcyBtdXN0IGJlIGEgZnVsbCBVUkwsIGluY2x1ZGluZyB0aGUgSFRUUFMgcHJvdG9jb2wsIHRoZSBkb21haW4sIGFuZCB0aGUgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IGF1dGhvcml6YXRpb25FbmRwb2ludDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgT0F1dGggMi4wIGNsaWVudCBpZGVudGlmaWVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9BdXRoIDIuMCBjbGllbnQgc2VjcmV0LlxuICAgKi9cbiAgcmVhZG9ubHkgY2xpZW50U2VjcmV0OiBzdHJpbmc7IC8vU2VjcmV0VmFsdWU7XG5cbiAgLyoqXG4gICAqIFRoZSBPSURDIGlzc3VlciBpZGVudGlmaWVyIG9mIHRoZSBJZFAuXG4gICAqXG4gICAqIFRoaXMgbXVzdCBiZSBhIGZ1bGwgVVJMLCBpbmNsdWRpbmcgdGhlIEhUVFBTIHByb3RvY29sLCB0aGUgZG9tYWluLCBhbmQgdGhlIHBhdGguXG4gICAqL1xuICByZWFkb25seSBpc3N1ZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGJlaGF2aW9yIGlmIHRoZSB1c2VyIGlzIG5vdCBhdXRoZW50aWNhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBVbmF1dGhlbnRpY2F0ZWRBY3Rpb24uQVVUSEVOVElDQVRFXG4gICAqL1xuICByZWFkb25seSBvblVuYXV0aGVudGljYXRlZFJlcXVlc3Q/OiBVbmF1dGhlbnRpY2F0ZWRBY3Rpb247XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgdXNlciBjbGFpbXMgdG8gYmUgcmVxdWVzdGVkIGZyb20gdGhlIElkUC5cbiAgICpcbiAgICogVG8gdmVyaWZ5IHdoaWNoIHNjb3BlIHZhbHVlcyB5b3VyIElkUCBzdXBwb3J0cyBhbmQgaG93IHRvIHNlcGFyYXRlIG11bHRpcGxlIHZhbHVlcywgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB5b3VyIElkUC5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJvcGVuaWRcIlxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb29raWUgdXNlZCB0byBtYWludGFpbiBzZXNzaW9uIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIkFXU0VMQkF1dGhTZXNzaW9uQ29va2llXCJcbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25Db29raWVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBkdXJhdGlvbiBvZiB0aGUgYXV0aGVudGljYXRpb24gc2Vzc2lvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgRHVyYXRpb24uZGF5cyg3KVxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvblRpbWVvdXQ/OiBEdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHRva2VuIGVuZHBvaW50IG9mIHRoZSBJZFAuXG4gICAqXG4gICAqIFRoaXMgbXVzdCBiZSBhIGZ1bGwgVVJMLCBpbmNsdWRpbmcgdGhlIEhUVFBTIHByb3RvY29sLCB0aGUgZG9tYWluLCBhbmQgdGhlIHBhdGguXG4gICAqL1xuICByZWFkb25seSB0b2tlbkVuZHBvaW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1c2VyIGluZm8gZW5kcG9pbnQgb2YgdGhlIElkUC5cbiAgICpcbiAgICogVGhpcyBtdXN0IGJlIGEgZnVsbCBVUkwsIGluY2x1ZGluZyB0aGUgSFRUUFMgcHJvdG9jb2wsIHRoZSBkb21haW4sIGFuZCB0aGUgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IHVzZXJJbmZvRW5kcG9pbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3cgSFRUUFMgb3V0Ym91bmQgdHJhZmZpYyB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBJZFAuXG4gICAqXG4gICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIGZhbHNlIGlmIHRoZSBJUCBhZGRyZXNzIHVzZWQgZm9yIHRoZSBJZFAgZW5kcG9pbnQgaXMgaWRlbnRpZmlhYmxlXG4gICAqIGFuZCB5b3Ugd2FudCB0byBjb250cm9sIG91dGJvdW5kIHRyYWZmaWMuXG4gICAqIFRoZW4gYWxsb3cgSFRUUFMgb3V0Ym91bmQgdHJhZmZpYyB0byB0aGUgSWRQJ3MgSVAgYWRkcmVzcyB1c2luZyB0aGUgbGlzdGVuZXIncyBgY29ubmVjdGlvbnNgIHByb3BlcnR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBzZWUgaHR0cHM6Ly9yZXBvc3QuYXdzL2tub3dsZWRnZS1jZW50ZXIvZWxiLWNvbmZpZ3VyZS1hdXRoZW50aWNhdGlvbi1hbGJcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93SHR0cHNPdXRib3VuZD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogV2hhdCB0byBkbyB3aXRoIHVuYXV0aGVudGljYXRlZCByZXF1ZXN0c1xuICovXG5leHBvcnQgZW51bSBVbmF1dGhlbnRpY2F0ZWRBY3Rpb24ge1xuICAvKipcbiAgICogUmV0dXJuIGFuIEhUVFAgNDAxIFVuYXV0aG9yaXplZCBlcnJvci5cbiAgICovXG4gIERFTlkgPSBcImRlbnlcIixcblxuICAvKipcbiAgICogQWxsb3cgdGhlIHJlcXVlc3QgdG8gYmUgZm9yd2FyZGVkIHRvIHRoZSB0YXJnZXQuXG4gICAqL1xuICBBTExPVyA9IFwiYWxsb3dcIixcblxuICAvKipcbiAgICogUmVkaXJlY3QgdGhlIHJlcXVlc3QgdG8gdGhlIElkUCBhdXRob3JpemF0aW9uIGVuZHBvaW50LlxuICAgKi9cbiAgQVVUSEVOVElDQVRFID0gXCJhdXRoZW50aWNhdGVcIixcbn1cblxuLyoqXG4gKiBMaXN0ZW5lciBBY3Rpb24gdGhhdCBjYWxscyBcInJlZ2lzdGVyTGlzdGVuZXJcIiBvbiBUYXJnZXRHcm91cHNcbiAqL1xuY2xhc3MgVGFyZ2V0R3JvdXBMaXN0ZW5lckFjdGlvbiBleHRlbmRzIExpc3RlbmVyQWN0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRHcm91cHM6IElBcHBsaWNhdGlvblRhcmdldEdyb3VwW10sXG4gICAgZGVmYXVsdEFjdGlvbkpzb246IHRmTGlzdGVuZXIuTGJMaXN0ZW5lckRlZmF1bHRBY3Rpb24sXG4gICkge1xuICAgIHN1cGVyKGRlZmF1bHRBY3Rpb25Kc29uKTtcbiAgfVxuXG4gIHB1YmxpYyBiaW5kKFxuICAgIF9zY29wZTogQ29uc3RydWN0LFxuICAgIGxpc3RlbmVyOiBJQXBwbGljYXRpb25MaXN0ZW5lcixcbiAgICBhc3NvY2lhdGluZ0NvbnN0cnVjdD86IElDb25zdHJ1Y3QsXG4gICkge1xuICAgIGZvciAoY29uc3QgdGcgb2YgdGhpcy50YXJnZXRHcm91cHMpIHtcbiAgICAgIHRnLnJlZ2lzdGVyTGlzdGVuZXIobGlzdGVuZXIsIGFzc29jaWF0aW5nQ29uc3RydWN0KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBIExpc3RlbmVyIEFjdGlvbiB0byBhdXRoZW50aWNhdGUgd2l0aCBPSURDXG4gKi9cbmNsYXNzIEF1dGhlbnRpY2F0ZU9pZGNBY3Rpb24gZXh0ZW5kcyBMaXN0ZW5lckFjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dIdHRwc091dGJvdW5kOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEF1dGhlbnRpY2F0ZU9pZGNPcHRpb25zKSB7XG4gICAgY29uc3QgZGVmYXVsdEFjdGlvbkNvbmZpZzogdGZMaXN0ZW5lci5MYkxpc3RlbmVyRGVmYXVsdEFjdGlvbkF1dGhlbnRpY2F0ZU9pZGMgPVxuICAgICAge1xuICAgICAgICBhdXRob3JpemF0aW9uRW5kcG9pbnQ6IG9wdGlvbnMuYXV0aG9yaXphdGlvbkVuZHBvaW50LFxuICAgICAgICBjbGllbnRJZDogb3B0aW9ucy5jbGllbnRJZCxcbiAgICAgICAgY2xpZW50U2VjcmV0OiBvcHRpb25zLmNsaWVudFNlY3JldCwgLy8udW5zYWZlVW53cmFwKCksIC8vIFNhZmUgdXNhZ2VcbiAgICAgICAgaXNzdWVyOiBvcHRpb25zLmlzc3VlcixcbiAgICAgICAgdG9rZW5FbmRwb2ludDogb3B0aW9ucy50b2tlbkVuZHBvaW50LFxuICAgICAgICB1c2VySW5mb0VuZHBvaW50OiBvcHRpb25zLnVzZXJJbmZvRW5kcG9pbnQsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uUmVxdWVzdEV4dHJhUGFyYW1zOlxuICAgICAgICAgIG9wdGlvbnMuYXV0aGVudGljYXRpb25SZXF1ZXN0RXh0cmFQYXJhbXMsXG4gICAgICAgIG9uVW5hdXRoZW50aWNhdGVkUmVxdWVzdDogb3B0aW9ucy5vblVuYXV0aGVudGljYXRlZFJlcXVlc3QsXG4gICAgICAgIHNjb3BlOiBvcHRpb25zLnNjb3BlLFxuICAgICAgICBzZXNzaW9uQ29va2llTmFtZTogb3B0aW9ucy5zZXNzaW9uQ29va2llTmFtZSxcbiAgICAgICAgc2Vzc2lvblRpbWVvdXQ6IG9wdGlvbnMuc2Vzc2lvblRpbWVvdXQ/LnRvU2Vjb25kcygpLFxuICAgICAgfTtcbiAgICBzdXBlcihcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJhdXRoZW50aWNhdGUtb2lkY1wiLFxuICAgICAgICBhdXRoZW50aWNhdGVPaWRjOiBkZWZhdWx0QWN0aW9uQ29uZmlnLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnMubmV4dCxcbiAgICApO1xuXG4gICAgdGhpcy5hbGxvd0h0dHBzT3V0Ym91bmQgPSBvcHRpb25zLmFsbG93SHR0cHNPdXRib3VuZCA/PyB0cnVlO1xuICAgIHRoaXMuYWRkUnVsZUFjdGlvbih7XG4gICAgICB0eXBlOiBcImF1dGhlbnRpY2F0ZS1vaWRjXCIsXG4gICAgICBhdXRoZW50aWNhdGVPaWRjOiB7XG4gICAgICAgIC4uLmRlZmF1bHRBY3Rpb25Db25maWcsXG4gICAgICAgIHNlc3Npb25UaW1lb3V0OiBvcHRpb25zLnNlc3Npb25UaW1lb3V0Py50b1NlY29uZHMoKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGJpbmQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBsaXN0ZW5lcjogSUFwcGxpY2F0aW9uTGlzdGVuZXIsXG4gICAgYXNzb2NpYXRpbmdDb25zdHJ1Y3Q/OiBJQ29uc3RydWN0IHwgdW5kZWZpbmVkLFxuICApOiB2b2lkIHtcbiAgICBzdXBlci5iaW5kKHNjb3BlLCBsaXN0ZW5lciwgYXNzb2NpYXRpbmdDb25zdHJ1Y3QpO1xuXG4gICAgaWYgKCF0aGlzLmFsbG93SHR0cHNPdXRib3VuZCkgcmV0dXJuO1xuICAgIGxpc3RlbmVyLmNvbm5lY3Rpb25zLmFsbG93VG9BbnlJcHY0KFBvcnQudGNwKDQ0MyksIFwiQWxsb3cgdG8gSWRQIGVuZHBvaW50XCIpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,35 @@
1
+ import { Construct } from "constructs";
2
+ import { IApplicationListener } from "./application-listener";
3
+ import { IListenerCertificate } from "../lb-shared/listener-certificate";
4
+ /**
5
+ * Properties for adding a set of certificates to a listener
6
+ */
7
+ export interface ApplicationListenerCertificateProps {
8
+ /**
9
+ * The listener to attach the rule to
10
+ */
11
+ readonly listener: IApplicationListener;
12
+ /**
13
+ * ARNs of certificates to attach
14
+ *
15
+ * Duplicates are not allowed.
16
+ *
17
+ * @deprecated Use `certificates` instead.
18
+ * @default - One of 'certificates' and 'certificateArns' is required.
19
+ */
20
+ readonly certificateArns?: string[];
21
+ /**
22
+ * Certificates to attach
23
+ *
24
+ * Duplicates are not allowed.
25
+ *
26
+ * @default - One of 'certificates' and 'certificateArns' is required.
27
+ */
28
+ readonly certificates?: IListenerCertificate[];
29
+ }
30
+ /**
31
+ * Add certificates to a listener
32
+ */
33
+ export declare class ApplicationListenerCertificate extends Construct {
34
+ constructor(scope: Construct, id: string, props: ApplicationListenerCertificateProps);
35
+ }
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ApplicationListenerCertificate = 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/alb/application-listener-certificate.ts
7
+ const provider_aws_1 = require("@cdktf/provider-aws");
8
+ const constructs_1 = require("constructs");
9
+ /**
10
+ * Add certificates to a listener
11
+ */
12
+ class ApplicationListenerCertificate extends constructs_1.Construct {
13
+ constructor(scope, id, props) {
14
+ super(scope, id);
15
+ if (!props.certificateArns && !props.certificates) {
16
+ throw new Error("At least one of 'certificateArns' or 'certificates' is required");
17
+ }
18
+ const certificates = [
19
+ ...(props.certificates || []).map((c) => ({
20
+ certificateArn: c.certificateArn,
21
+ })),
22
+ ...(props.certificateArns || []).map((certificateArn) => ({
23
+ certificateArn,
24
+ })),
25
+ ];
26
+ new provider_aws_1.lbListenerCertificate.LbListenerCertificate(this, "Resource", {
27
+ listenerArn: props.listener.listenerArn,
28
+ certificateArn: certificates[0].certificateArn,
29
+ });
30
+ }
31
+ }
32
+ exports.ApplicationListenerCertificate = ApplicationListenerCertificate;
33
+ _a = JSII_RTTI_SYMBOL_1;
34
+ ApplicationListenerCertificate[_a] = { fqn: "terraconstructs.aws.compute.ApplicationListenerCertificate", version: "0.0.12" };
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24tbGlzdGVuZXItY2VydGlmaWNhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvYWxiL2FwcGxpY2F0aW9uLWxpc3RlbmVyLWNlcnRpZmljYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMklBQTJJO0FBRTNJLHNEQUFxRjtBQUNyRiwyQ0FBdUM7QUFpQ3ZDOztHQUVHO0FBQ0gsTUFBYSw4QkFBK0IsU0FBUSxzQkFBUztJQUMzRCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUEwQztRQUUxQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xELE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVBQWlFLENBQ2xFLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUc7WUFDbkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxjQUFjLEVBQUUsQ0FBQyxDQUFDLGNBQWM7YUFDakMsQ0FBQyxDQUFDO1lBQ0gsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4RCxjQUFjO2FBQ2YsQ0FBQyxDQUFDO1NBQ0osQ0FBQztRQUVGLElBQUksb0NBQXFCLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNoRSxXQUFXLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXO1lBQ3ZDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYztTQUMvQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTNCSCx3RUE0QkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNzUuMS9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mi9saWIvYWxiL2FwcGxpY2F0aW9uLWxpc3RlbmVyLWNlcnRpZmljYXRlLnRzXG5cbmltcG9ydCB7IGxiTGlzdGVuZXJDZXJ0aWZpY2F0ZSBhcyB0Zkxpc3RlbmVyQ2VydGlmaWNhdGUgfSBmcm9tIFwiQGNka3RmL3Byb3ZpZGVyLWF3c1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IElBcHBsaWNhdGlvbkxpc3RlbmVyIH0gZnJvbSBcIi4vYXBwbGljYXRpb24tbGlzdGVuZXJcIjtcbmltcG9ydCB7IElMaXN0ZW5lckNlcnRpZmljYXRlIH0gZnJvbSBcIi4uL2xiLXNoYXJlZC9saXN0ZW5lci1jZXJ0aWZpY2F0ZVwiO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFkZGluZyBhIHNldCBvZiBjZXJ0aWZpY2F0ZXMgdG8gYSBsaXN0ZW5lclxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFwcGxpY2F0aW9uTGlzdGVuZXJDZXJ0aWZpY2F0ZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0ZW5lciB0byBhdHRhY2ggdGhlIHJ1bGUgdG9cbiAgICovXG4gIHJlYWRvbmx5IGxpc3RlbmVyOiBJQXBwbGljYXRpb25MaXN0ZW5lcjtcblxuICAvKipcbiAgICogQVJOcyBvZiBjZXJ0aWZpY2F0ZXMgdG8gYXR0YWNoXG4gICAqXG4gICAqIER1cGxpY2F0ZXMgYXJlIG5vdCBhbGxvd2VkLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGNlcnRpZmljYXRlc2AgaW5zdGVhZC5cbiAgICogQGRlZmF1bHQgLSBPbmUgb2YgJ2NlcnRpZmljYXRlcycgYW5kICdjZXJ0aWZpY2F0ZUFybnMnIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2VydGlmaWNhdGVBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENlcnRpZmljYXRlcyB0byBhdHRhY2hcbiAgICpcbiAgICogRHVwbGljYXRlcyBhcmUgbm90IGFsbG93ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gT25lIG9mICdjZXJ0aWZpY2F0ZXMnIGFuZCAnY2VydGlmaWNhdGVBcm5zJyBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNlcnRpZmljYXRlcz86IElMaXN0ZW5lckNlcnRpZmljYXRlW107XG59XG5cbi8qKlxuICogQWRkIGNlcnRpZmljYXRlcyB0byBhIGxpc3RlbmVyXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHBsaWNhdGlvbkxpc3RlbmVyQ2VydGlmaWNhdGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IEFwcGxpY2F0aW9uTGlzdGVuZXJDZXJ0aWZpY2F0ZVByb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgaWYgKCFwcm9wcy5jZXJ0aWZpY2F0ZUFybnMgJiYgIXByb3BzLmNlcnRpZmljYXRlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkF0IGxlYXN0IG9uZSBvZiAnY2VydGlmaWNhdGVBcm5zJyBvciAnY2VydGlmaWNhdGVzJyBpcyByZXF1aXJlZFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjZXJ0aWZpY2F0ZXMgPSBbXG4gICAgICAuLi4ocHJvcHMuY2VydGlmaWNhdGVzIHx8IFtdKS5tYXAoKGMpID0+ICh7XG4gICAgICAgIGNlcnRpZmljYXRlQXJuOiBjLmNlcnRpZmljYXRlQXJuLFxuICAgICAgfSkpLFxuICAgICAgLi4uKHByb3BzLmNlcnRpZmljYXRlQXJucyB8fCBbXSkubWFwKChjZXJ0aWZpY2F0ZUFybikgPT4gKHtcbiAgICAgICAgY2VydGlmaWNhdGVBcm4sXG4gICAgICB9KSksXG4gICAgXTtcblxuICAgIG5ldyB0Zkxpc3RlbmVyQ2VydGlmaWNhdGUuTGJMaXN0ZW5lckNlcnRpZmljYXRlKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgbGlzdGVuZXJBcm46IHByb3BzLmxpc3RlbmVyLmxpc3RlbmVyQXJuLFxuICAgICAgY2VydGlmaWNhdGVBcm46IGNlcnRpZmljYXRlc1swXS5jZXJ0aWZpY2F0ZUFybixcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,233 @@
1
+ import { Construct } from "constructs";
2
+ import { IApplicationListener } from "./application-listener";
3
+ import { ListenerAction } from "./application-listener-action";
4
+ import { IApplicationTargetGroup } from "./application-target-group";
5
+ import { ListenerCondition } from "./conditions";
6
+ /**
7
+ * Basic properties for defining a rule on a listener
8
+ */
9
+ export interface BaseApplicationListenerRuleProps {
10
+ /**
11
+ * Priority of the rule
12
+ *
13
+ * The rule with the lowest priority will be used for every request.
14
+ *
15
+ * Priorities must be unique.
16
+ */
17
+ readonly priority: number;
18
+ /**
19
+ * Target groups to forward requests to.
20
+ *
21
+ * Only one of `action`, `fixedResponse`, `redirectResponse` or `targetGroups` can be specified.
22
+ *
23
+ * Implies a `forward` action.
24
+ *
25
+ * @default - No target groups.
26
+ */
27
+ readonly targetGroups?: IApplicationTargetGroup[];
28
+ /**
29
+ * Action to perform when requests are received
30
+ *
31
+ * Only one of `action`, `fixedResponse`, `redirectResponse` or `targetGroups` can be specified.
32
+ *
33
+ * @default - No action
34
+ */
35
+ readonly action?: ListenerAction;
36
+ /**
37
+ * Fixed response to return.
38
+ *
39
+ * Only one of `action`, `fixedResponse`, `redirectResponse` or `targetGroups` can be specified.
40
+ *
41
+ * @default - No fixed response.
42
+ * @deprecated Use `action` instead.
43
+ */
44
+ readonly fixedResponse?: FixedResponse;
45
+ /**
46
+ * Redirect response to return.
47
+ *
48
+ * Only one of `action`, `fixedResponse`, `redirectResponse` or `targetGroups` can be specified.
49
+ *
50
+ * @default - No redirect response.
51
+ * @deprecated Use `action` instead.
52
+ */
53
+ readonly redirectResponse?: RedirectResponse;
54
+ /**
55
+ * Rule applies if matches the conditions.
56
+ *
57
+ * @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html
58
+ *
59
+ * @default - No conditions.
60
+ */
61
+ readonly conditions?: ListenerCondition[];
62
+ /**
63
+ * Rule applies if the requested host matches the indicated host
64
+ *
65
+ * May contain up to three '*' wildcards.
66
+ *
67
+ * @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#host-conditions
68
+ *
69
+ * @default - No host condition.
70
+ * @deprecated Use `conditions` instead.
71
+ */
72
+ readonly hostHeader?: string;
73
+ /**
74
+ * Rule applies if the requested path matches the given path pattern
75
+ *
76
+ * @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#path-conditions
77
+ * @default - No path condition.
78
+ * @deprecated Use `conditions` instead.
79
+ */
80
+ readonly pathPattern?: string;
81
+ /**
82
+ * Rule applies if the requested path matches any of the given patterns.
83
+ *
84
+ * Paths may contain up to three '*' wildcards.
85
+ *
86
+ * @see https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listeners.html#path-conditions
87
+ * @default - No path conditions.
88
+ * @deprecated Use `conditions` instead.
89
+ */
90
+ readonly pathPatterns?: string[];
91
+ }
92
+ /**
93
+ * Properties for defining a listener rule
94
+ */
95
+ export interface ApplicationListenerRuleProps extends BaseApplicationListenerRuleProps {
96
+ /**
97
+ * The listener to attach the rule to
98
+ */
99
+ readonly listener: IApplicationListener;
100
+ }
101
+ /**
102
+ * The content type for a fixed response
103
+ * @deprecated superseded by `FixedResponseOptions`.
104
+ */
105
+ export declare enum ContentType {
106
+ TEXT_PLAIN = "text/plain",
107
+ TEXT_CSS = "text/css",
108
+ TEXT_HTML = "text/html",
109
+ APPLICATION_JAVASCRIPT = "application/javascript",
110
+ APPLICATION_JSON = "application/json"
111
+ }
112
+ /**
113
+ * A fixed response
114
+ * @deprecated superseded by `ListenerAction.fixedResponse()`.
115
+ */
116
+ export interface FixedResponse {
117
+ /**
118
+ * The HTTP response code (2XX, 4XX or 5XX)
119
+ */
120
+ readonly statusCode: string;
121
+ /**
122
+ * The content type
123
+ *
124
+ * @default text/plain
125
+ */
126
+ readonly contentType?: ContentType;
127
+ /**
128
+ * The message
129
+ *
130
+ * @default no message
131
+ */
132
+ readonly messageBody?: string;
133
+ }
134
+ /**
135
+ * A redirect response
136
+ * @deprecated superseded by `ListenerAction.redirect()`.
137
+ */
138
+ export interface RedirectResponse {
139
+ /**
140
+ * The hostname. This component is not percent-encoded. The hostname can contain #{host}.
141
+ *
142
+ * @default origin host of request
143
+ */
144
+ readonly host?: string;
145
+ /**
146
+ * The absolute path, starting with the leading "/". This component is not percent-encoded.
147
+ * The path can contain #{host}, #{path}, and #{port}.
148
+ *
149
+ * @default origin path of request
150
+ */
151
+ readonly path?: string;
152
+ /**
153
+ * The port. You can specify a value from 1 to 65535 or #{port}.
154
+ *
155
+ * @default origin port of request
156
+ */
157
+ readonly port?: string;
158
+ /**
159
+ * The protocol. You can specify HTTP, HTTPS, or #{protocol}. You can redirect HTTP to HTTP,
160
+ * HTTP to HTTPS, and HTTPS to HTTPS. You cannot redirect HTTPS to HTTP.
161
+ *
162
+ * @default origin protocol of request
163
+ */
164
+ readonly protocol?: string;
165
+ /**
166
+ * The query parameters, URL-encoded when necessary, but not percent-encoded.
167
+ * Do not include the leading "?", as it is automatically added.
168
+ * You can specify any of the reserved keywords.
169
+ *
170
+ * @default origin query string of request
171
+ */
172
+ readonly query?: string;
173
+ /**
174
+ * The HTTP redirect code (HTTP_301 or HTTP_302)
175
+ */
176
+ readonly statusCode: string;
177
+ }
178
+ /**
179
+ * Define a new listener rule
180
+ */
181
+ export declare class ApplicationListenerRule extends Construct {
182
+ /**
183
+ * The ARN of this rule
184
+ */
185
+ readonly listenerRuleArn: string;
186
+ private readonly conditions;
187
+ private readonly legacyConditions;
188
+ private readonly listener;
189
+ private action?;
190
+ constructor(scope: Construct, id: string, props: ApplicationListenerRuleProps);
191
+ /**
192
+ * Add a non-standard condition to this rule
193
+ *
194
+ * If the condition conflicts with an already set condition, it will be overwritten by the one you specified.
195
+ *
196
+ * @deprecated use `addCondition` instead.
197
+ */
198
+ setCondition(field: string, values: string[] | undefined): void;
199
+ /**
200
+ * Add a non-standard condition to this rule
201
+ */
202
+ addCondition(condition: ListenerCondition): void;
203
+ /**
204
+ * Configure the action to perform for this rule
205
+ */
206
+ configureAction(action: ListenerAction): void;
207
+ /**
208
+ * Add a TargetGroup to load balance to
209
+ *
210
+ * @deprecated Use configureAction instead
211
+ */
212
+ addTargetGroup(targetGroup: IApplicationTargetGroup): void;
213
+ /**
214
+ * Add a fixed response
215
+ *
216
+ * @deprecated Use configureAction instead
217
+ */
218
+ addFixedResponse(fixedResponse: FixedResponse): void;
219
+ /**
220
+ * Add a redirect response
221
+ *
222
+ * @deprecated Use configureAction instead
223
+ */
224
+ addRedirectResponse(redirectResponse: RedirectResponse): void;
225
+ /**
226
+ * Validate the rule
227
+ */
228
+ private validateListenerRule;
229
+ /**
230
+ * Render the conditions for this rule
231
+ */
232
+ private renderConditions;
233
+ }