terraconstructs 0.0.17 → 0.0.19

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 (225) hide show
  1. package/.jsii +4536 -6
  2. package/lib/aws/arn.js +1 -1
  3. package/lib/aws/aws-construct.js +1 -1
  4. package/lib/aws/aws-stack.js +1 -1
  5. package/lib/aws/aws-tags.js +2 -2
  6. package/lib/aws/cloudwatch/actions/ec2.js +1 -1
  7. package/lib/aws/cloudwatch/actions/lambda.js +1 -1
  8. package/lib/aws/cloudwatch/alarm-base.js +1 -1
  9. package/lib/aws/cloudwatch/alarm-rule.js +1 -1
  10. package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
  11. package/lib/aws/cloudwatch/alarm.js +1 -1
  12. package/lib/aws/cloudwatch/composite-alarm.js +1 -1
  13. package/lib/aws/cloudwatch/dashboard.js +1 -1
  14. package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
  15. package/lib/aws/cloudwatch/graph.js +8 -8
  16. package/lib/aws/cloudwatch/layout.js +3 -3
  17. package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
  18. package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
  19. package/lib/aws/cloudwatch/log-group.js +1 -1
  20. package/lib/aws/cloudwatch/log-query.js +1 -1
  21. package/lib/aws/cloudwatch/log-stream.js +1 -1
  22. package/lib/aws/cloudwatch/metric-filter.js +1 -1
  23. package/lib/aws/cloudwatch/metric.js +2 -2
  24. package/lib/aws/cloudwatch/pattern.js +3 -3
  25. package/lib/aws/cloudwatch/policy.js +1 -1
  26. package/lib/aws/cloudwatch/query-definition.js +2 -2
  27. package/lib/aws/cloudwatch/stats.js +1 -1
  28. package/lib/aws/cloudwatch/subscription-filter.js +1 -1
  29. package/lib/aws/cloudwatch/text.js +1 -1
  30. package/lib/aws/cloudwatch/variable.js +3 -3
  31. package/lib/aws/cloudwatch/widget.js +1 -1
  32. package/lib/aws/compute/activity.js +1 -1
  33. package/lib/aws/compute/alb/application-listener-action.js +1 -1
  34. package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
  35. package/lib/aws/compute/alb/application-listener-rule.js +1 -1
  36. package/lib/aws/compute/alb/application-listener.js +1 -1
  37. package/lib/aws/compute/alb/application-load-balancer.js +1 -1
  38. package/lib/aws/compute/alb/application-target-group.js +1 -1
  39. package/lib/aws/compute/alb/conditions.js +1 -1
  40. package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
  41. package/lib/aws/compute/alb/trust-store.js +1 -1
  42. package/lib/aws/compute/architecture.js +1 -1
  43. package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
  44. package/lib/aws/compute/bastion-host.js +1 -1
  45. package/lib/aws/compute/chain.js +1 -1
  46. package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
  47. package/lib/aws/compute/client-vpn-endpoint.js +2 -2
  48. package/lib/aws/compute/client-vpn-route.js +2 -2
  49. package/lib/aws/compute/condition.js +1 -1
  50. package/lib/aws/compute/connections.js +1 -1
  51. package/lib/aws/compute/event-invoke-config.js +1 -1
  52. package/lib/aws/compute/event-source-filter.js +2 -2
  53. package/lib/aws/compute/event-source-mapping.js +1 -1
  54. package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
  55. package/lib/aws/compute/event-sources/s3.js +1 -1
  56. package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
  57. package/lib/aws/compute/event-sources/sqs.js +1 -1
  58. package/lib/aws/compute/fields.js +4 -4
  59. package/lib/aws/compute/function-alias.js +1 -1
  60. package/lib/aws/compute/function-base.js +2 -2
  61. package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
  62. package/lib/aws/compute/function-destinations/function.js +1 -1
  63. package/lib/aws/compute/function-destinations/sqs.js +1 -1
  64. package/lib/aws/compute/function-nodejs.js +1 -1
  65. package/lib/aws/compute/function-url.js +1 -1
  66. package/lib/aws/compute/function.js +1 -1
  67. package/lib/aws/compute/instance-types.js +1 -1
  68. package/lib/aws/compute/instance.js +1 -1
  69. package/lib/aws/compute/ip-addresses.js +2 -2
  70. package/lib/aws/compute/ipam.js +1 -1
  71. package/lib/aws/compute/key-pair.js +1 -1
  72. package/lib/aws/compute/launch-template.js +3 -7
  73. package/lib/aws/compute/lb-shared/base-listener.js +1 -1
  74. package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
  75. package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
  76. package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
  77. package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
  78. package/lib/aws/compute/lb-targets/alb-target.js +3 -3
  79. package/lib/aws/compute/lb-targets/instance-target.js +2 -2
  80. package/lib/aws/compute/lb-targets/ip-target.js +1 -1
  81. package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
  82. package/lib/aws/compute/load-balancer.js +3 -3
  83. package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
  84. package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
  85. package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
  86. package/lib/aws/compute/machine-image/common.js +1 -1
  87. package/lib/aws/compute/machine-image/machine-image.js +8 -8
  88. package/lib/aws/compute/nat.js +5 -5
  89. package/lib/aws/compute/network-acl-types.js +2 -2
  90. package/lib/aws/compute/network-acl.js +3 -3
  91. package/lib/aws/compute/nlb/network-listener-action.js +1 -1
  92. package/lib/aws/compute/nlb/network-listener.js +1 -1
  93. package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
  94. package/lib/aws/compute/nlb/network-target-group.js +1 -1
  95. package/lib/aws/compute/peer.js +1 -1
  96. package/lib/aws/compute/placement-group.js +1 -1
  97. package/lib/aws/compute/port.js +1 -1
  98. package/lib/aws/compute/prefix-list.js +1 -1
  99. package/lib/aws/compute/route.js +8 -8
  100. package/lib/aws/compute/security-group.js +1 -1
  101. package/lib/aws/compute/state-graph.js +1 -1
  102. package/lib/aws/compute/state-machine-fragment.js +1 -1
  103. package/lib/aws/compute/state-machine.js +4 -4
  104. package/lib/aws/compute/states/choice.js +1 -1
  105. package/lib/aws/compute/states/custom-state.js +1 -1
  106. package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
  107. package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
  108. package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
  109. package/lib/aws/compute/states/distributed-map.js +1 -1
  110. package/lib/aws/compute/states/fail.js +1 -1
  111. package/lib/aws/compute/states/map-base.js +1 -1
  112. package/lib/aws/compute/states/map.js +1 -1
  113. package/lib/aws/compute/states/parallel.js +1 -1
  114. package/lib/aws/compute/states/pass.js +2 -2
  115. package/lib/aws/compute/states/state.js +1 -1
  116. package/lib/aws/compute/states/succeed.js +1 -1
  117. package/lib/aws/compute/states/task-base.js +2 -2
  118. package/lib/aws/compute/states/task.js +1 -1
  119. package/lib/aws/compute/states/wait.js +2 -2
  120. package/lib/aws/compute/subnet-v2.js +2 -2
  121. package/lib/aws/compute/subnet.js +1 -1
  122. package/lib/aws/compute/task-credentials.js +1 -1
  123. package/lib/aws/compute/task-input.js +1 -1
  124. package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
  125. package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
  126. package/lib/aws/compute/tasks/http/invoke.js +1 -1
  127. package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
  128. package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
  129. package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
  130. package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
  131. package/lib/aws/compute/types.js +1 -1
  132. package/lib/aws/compute/user-data.js +3 -3
  133. package/lib/aws/compute/volume.js +2 -2
  134. package/lib/aws/compute/vpc-endpoint-service.js +1 -1
  135. package/lib/aws/compute/vpc-endpoint.js +6 -6
  136. package/lib/aws/compute/vpc-flow-logs.js +4 -4
  137. package/lib/aws/compute/vpc-v2-base.js +1 -1
  138. package/lib/aws/compute/vpc-v2.js +2 -2
  139. package/lib/aws/compute/vpc.js +4 -4
  140. package/lib/aws/compute/vpn.js +3 -3
  141. package/lib/aws/edge/certificate.js +1 -1
  142. package/lib/aws/edge/distribution.js +3 -3
  143. package/lib/aws/edge/dns-alias-record-targets.js +3 -3
  144. package/lib/aws/edge/dns-record.js +13 -13
  145. package/lib/aws/edge/dns-zone.js +1 -1
  146. package/lib/aws/edge/function.js +2 -2
  147. package/lib/aws/edge/key-value-store.js +4 -4
  148. package/lib/aws/edge/origin.js +3 -3
  149. package/lib/aws/edge/response-headers-policy.js +1 -1
  150. package/lib/aws/encryption/alias.js +1 -1
  151. package/lib/aws/encryption/key.js +1 -1
  152. package/lib/aws/encryption/via-service-principal.js +1 -1
  153. package/lib/aws/iam/grant.js +2 -2
  154. package/lib/aws/iam/group.js +1 -1
  155. package/lib/aws/iam/instance-profile.js +1 -1
  156. package/lib/aws/iam/managed-policy.js +1 -1
  157. package/lib/aws/iam/oidc-provider.js +1 -1
  158. package/lib/aws/iam/policy-document.js +1 -1
  159. package/lib/aws/iam/policy-statement.js +1 -1
  160. package/lib/aws/iam/policy.js +1 -1
  161. package/lib/aws/iam/principals.js +20 -20
  162. package/lib/aws/iam/role.js +1 -1
  163. package/lib/aws/iam/saml-provider.js +2 -2
  164. package/lib/aws/iam/unknown-principal.js +1 -1
  165. package/lib/aws/iam/user.js +1 -1
  166. package/lib/aws/network/simple-ipv4-vpc.js +1 -1
  167. package/lib/aws/network/subnet-group.js +3 -3
  168. package/lib/aws/network/subnet.js +4 -4
  169. package/lib/aws/notify/archive.js +1 -1
  170. package/lib/aws/notify/connection.js +3 -3
  171. package/lib/aws/notify/delivery-policy.d.ts +114 -0
  172. package/lib/aws/notify/delivery-policy.js +27 -0
  173. package/lib/aws/notify/event-bus.js +3 -3
  174. package/lib/aws/notify/event-pattern.js +1 -1
  175. package/lib/aws/notify/index.d.ts +11 -0
  176. package/lib/aws/notify/index.js +14 -1
  177. package/lib/aws/notify/input.js +2 -2
  178. package/lib/aws/notify/kinesis-stream.js +1 -1
  179. package/lib/aws/notify/notification-rule-source.d.ts +20 -0
  180. package/lib/aws/notify/notification-rule-source.js +4 -0
  181. package/lib/aws/notify/notification-rule-target.d.ts +24 -0
  182. package/lib/aws/notify/notification-rule-target.js +4 -0
  183. package/lib/aws/notify/notification-rule.d.ts +123 -0
  184. package/lib/aws/notify/notification-rule.js +129 -0
  185. package/lib/aws/notify/policy.d.ts +56 -0
  186. package/lib/aws/notify/policy.js +83 -0
  187. package/lib/aws/notify/queue-policy.js +1 -1
  188. package/lib/aws/notify/queue.js +1 -1
  189. package/lib/aws/notify/resource-policy.js +1 -1
  190. package/lib/aws/notify/rule.js +1 -1
  191. package/lib/aws/notify/schedule.js +1 -1
  192. package/lib/aws/notify/sns-augmentations.generated.d.ts +125 -0
  193. package/lib/aws/notify/sns-augmentations.generated.js +71 -0
  194. package/lib/aws/notify/sns-canned-metrics.generated.d.ts +33 -0
  195. package/lib/aws/notify/sns-canned-metrics.generated.js +47 -0
  196. package/lib/aws/notify/subscriber.d.ts +44 -0
  197. package/lib/aws/notify/subscriber.js +4 -0
  198. package/lib/aws/notify/subscription-filter.d.ts +129 -0
  199. package/lib/aws/notify/subscription-filter.js +105 -0
  200. package/lib/aws/notify/subscription.d.ts +219 -0
  201. package/lib/aws/notify/subscription.js +357 -0
  202. package/lib/aws/notify/targets/event-bus.js +1 -1
  203. package/lib/aws/notify/targets/function.js +1 -1
  204. package/lib/aws/notify/targets/log-group.js +2 -2
  205. package/lib/aws/notify/targets/sqs.js +1 -1
  206. package/lib/aws/notify/targets/state-machine.js +1 -1
  207. package/lib/aws/notify/topic-base.d.ts +155 -0
  208. package/lib/aws/notify/topic-base.js +175 -0
  209. package/lib/aws/notify/topic.d.ts +222 -0
  210. package/lib/aws/notify/topic.js +219 -0
  211. package/lib/aws/storage/bucket-notifications.js +1 -1
  212. package/lib/aws/storage/bucket-policy.js +1 -1
  213. package/lib/aws/storage/bucket-source.js +1 -1
  214. package/lib/aws/storage/bucket.js +2 -2
  215. package/lib/aws/storage/notification-targets/function.js +1 -1
  216. package/lib/aws/storage/notification-targets/queue.js +1 -1
  217. package/lib/aws/storage/origin-access-identity.js +1 -1
  218. package/lib/aws/storage/parameter.js +2 -2
  219. package/lib/construct-base.js +2 -2
  220. package/lib/duration.js +1 -1
  221. package/lib/expiration.js +1 -1
  222. package/lib/size.js +1 -1
  223. package/lib/stack-base.js +1 -1
  224. package/lib/terra-func.js +1 -1
  225. package/package.json +1 -1
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Conditions that can be applied to string attributes.
3
+ */
4
+ export interface StringConditions {
5
+ /**
6
+ * Match one or more values.
7
+ *
8
+ * @deprecated use `allowlist`
9
+ * @default - None
10
+ */
11
+ readonly whitelist?: string[];
12
+ /**
13
+ * Match any value that doesn't include any of the specified values.
14
+ * @deprecated use `denylist`
15
+ * @default - None
16
+ */
17
+ readonly blacklist?: string[];
18
+ /**
19
+ * Match one or more values.
20
+ * @default - None
21
+ */
22
+ readonly allowlist?: string[];
23
+ /**
24
+ * Match any value that doesn't include any of the specified values.
25
+ * @default - None
26
+ */
27
+ readonly denylist?: string[];
28
+ /**
29
+ * Matches values that begins with the specified prefixes.
30
+ *
31
+ * @default - None
32
+ */
33
+ readonly matchPrefixes?: string[];
34
+ /**
35
+ * Matches values that end with the specified suffixes.
36
+ *
37
+ * @default - None
38
+ */
39
+ readonly matchSuffixes?: string[];
40
+ }
41
+ /**
42
+ * Between condition for a numeric attribute.
43
+ */
44
+ export interface BetweenCondition {
45
+ /**
46
+ * The start value.
47
+ */
48
+ readonly start: number;
49
+ /**
50
+ * The stop value.
51
+ */
52
+ readonly stop: number;
53
+ }
54
+ /**
55
+ * Conditions that can be applied to numeric attributes.
56
+ */
57
+ export interface NumericConditions {
58
+ /**
59
+ * Match one or more values.
60
+ * @deprecated use `allowlist`
61
+ * @default - None
62
+ */
63
+ readonly whitelist?: number[];
64
+ /**
65
+ * Match one or more values.
66
+ *
67
+ * @default - None
68
+ */
69
+ readonly allowlist?: number[];
70
+ /**
71
+ * Match values that are greater than the specified value.
72
+ *
73
+ * @default - None
74
+ */
75
+ readonly greaterThan?: number;
76
+ /**
77
+ * Match values that are greater than or equal to the specified value.
78
+ *
79
+ * @default - None
80
+ */
81
+ readonly greaterThanOrEqualTo?: number;
82
+ /**
83
+ * Match values that are less than the specified value.
84
+ *
85
+ * @default - None
86
+ */
87
+ readonly lessThan?: number;
88
+ /**
89
+ * Match values that are less than or equal to the specified value.
90
+ *
91
+ * @default - None
92
+ */
93
+ readonly lessThanOrEqualTo?: number;
94
+ /**
95
+ * Match values that are between the specified values.
96
+ *
97
+ * @default - None
98
+ */
99
+ readonly between?: BetweenCondition;
100
+ /**
101
+ * Match values that are strictly between the specified values.
102
+ *
103
+ * @default - None
104
+ */
105
+ readonly betweenStrict?: BetweenCondition;
106
+ }
107
+ /**
108
+ * A subscription filter for an attribute.
109
+ */
110
+ export declare class SubscriptionFilter {
111
+ readonly conditions: any[];
112
+ /**
113
+ * Returns a subscription filter for a string attribute.
114
+ */
115
+ static stringFilter(stringConditions: StringConditions): SubscriptionFilter;
116
+ /**
117
+ * Returns a subscription filter for a numeric attribute.
118
+ */
119
+ static numericFilter(numericConditions: NumericConditions): SubscriptionFilter;
120
+ /**
121
+ * Returns a subscription filter for attribute key matching.
122
+ */
123
+ static existsFilter(): SubscriptionFilter;
124
+ /**
125
+ *
126
+ * @param conditions conditions that specify the message attributes that should be included, excluded, matched, etc.
127
+ */
128
+ constructor(conditions?: any[]);
129
+ }
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.SubscriptionFilter = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ /**
7
+ * A subscription filter for an attribute.
8
+ */
9
+ class SubscriptionFilter {
10
+ /**
11
+ * Returns a subscription filter for a string attribute.
12
+ */
13
+ static stringFilter(stringConditions) {
14
+ const conditions = new Array();
15
+ if (stringConditions.whitelist && stringConditions.allowlist) {
16
+ // TODO: Adopt UnscopedValidationError
17
+ throw new Error("`whitelist` is deprecated; please use `allowlist` instead");
18
+ }
19
+ if (stringConditions.blacklist && stringConditions.denylist) {
20
+ // TODO: Adopt UnscopedValidationError
21
+ throw new Error("`blacklist` is deprecated; please use `denylist` instead");
22
+ }
23
+ const allowlist = stringConditions.allowlist ?? stringConditions.whitelist;
24
+ const denylist = stringConditions.denylist ?? stringConditions.blacklist;
25
+ if (allowlist) {
26
+ conditions.push(...allowlist);
27
+ }
28
+ if (denylist) {
29
+ conditions.push({ "anything-but": denylist });
30
+ }
31
+ if (stringConditions.matchPrefixes) {
32
+ conditions.push(...stringConditions.matchPrefixes.map((p) => ({ prefix: p })));
33
+ }
34
+ if (stringConditions.matchSuffixes) {
35
+ conditions.push(...stringConditions.matchSuffixes.map((s) => ({ suffix: s })));
36
+ }
37
+ return new SubscriptionFilter(conditions);
38
+ }
39
+ /**
40
+ * Returns a subscription filter for a numeric attribute.
41
+ */
42
+ static numericFilter(numericConditions) {
43
+ const conditions = new Array();
44
+ if (numericConditions.whitelist && numericConditions.allowlist) {
45
+ // TODO: Adopt UnscopedValidationError
46
+ throw new Error("`whitelist` is deprecated; please use `allowlist` instead");
47
+ }
48
+ const allowlist = numericConditions.allowlist ?? numericConditions.whitelist;
49
+ if (allowlist) {
50
+ conditions.push(...allowlist.map((v) => ({ numeric: ["=", v] })));
51
+ }
52
+ if (numericConditions.greaterThan !== undefined) {
53
+ conditions.push({ numeric: [">", numericConditions.greaterThan] });
54
+ }
55
+ if (numericConditions.greaterThanOrEqualTo !== undefined) {
56
+ conditions.push({
57
+ numeric: [">=", numericConditions.greaterThanOrEqualTo],
58
+ });
59
+ }
60
+ if (numericConditions.lessThan !== undefined) {
61
+ conditions.push({ numeric: ["<", numericConditions.lessThan] });
62
+ }
63
+ if (numericConditions.lessThanOrEqualTo !== undefined) {
64
+ conditions.push({ numeric: ["<=", numericConditions.lessThanOrEqualTo] });
65
+ }
66
+ if (numericConditions.between) {
67
+ conditions.push({
68
+ numeric: [
69
+ ">=",
70
+ numericConditions.between.start,
71
+ "<=",
72
+ numericConditions.between.stop,
73
+ ],
74
+ });
75
+ }
76
+ if (numericConditions.betweenStrict) {
77
+ conditions.push({
78
+ numeric: [
79
+ ">",
80
+ numericConditions.betweenStrict.start,
81
+ "<",
82
+ numericConditions.betweenStrict.stop,
83
+ ],
84
+ });
85
+ }
86
+ return new SubscriptionFilter(conditions);
87
+ }
88
+ /**
89
+ * Returns a subscription filter for attribute key matching.
90
+ */
91
+ static existsFilter() {
92
+ return new SubscriptionFilter([{ exists: true }]);
93
+ }
94
+ /**
95
+ *
96
+ * @param conditions conditions that specify the message attributes that should be included, excluded, matched, etc.
97
+ */
98
+ constructor(conditions = []) {
99
+ this.conditions = conditions;
100
+ }
101
+ }
102
+ exports.SubscriptionFilter = SubscriptionFilter;
103
+ _a = JSII_RTTI_SYMBOL_1;
104
+ SubscriptionFilter[_a] = { fqn: "terraconstructs.aws.notify.SubscriptionFilter", version: "0.0.19" };
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLWZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3Mvbm90aWZ5L3N1YnNjcmlwdGlvbi1maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFpSUE7O0dBRUc7QUFDSCxNQUFhLGtCQUFrQjtJQUM3Qjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsZ0JBQWtDO1FBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksS0FBSyxFQUFPLENBQUM7UUFFcEMsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0Qsc0NBQXNDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUQsc0NBQXNDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMERBQTBELENBQzNELENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztRQUMzRSxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1FBRXpFLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELElBQUksZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkMsVUFBVSxDQUFDLElBQUksQ0FDYixHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM5RCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkMsVUFBVSxDQUFDLElBQUksQ0FDYixHQUFHLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM5RCxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLGlCQUFvQztRQUM5RCxNQUFNLFVBQVUsR0FBRyxJQUFJLEtBQUssRUFBTyxDQUFDO1FBRXBDLElBQUksaUJBQWlCLENBQUMsU0FBUyxJQUFJLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9ELHNDQUFzQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUNiLDJEQUEyRCxDQUM1RCxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sU0FBUyxHQUNiLGlCQUFpQixDQUFDLFNBQVMsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7UUFFN0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUVELElBQUksaUJBQWlCLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hELFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFFRCxJQUFJLGlCQUFpQixDQUFDLG9CQUFvQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pELFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLG9CQUFvQixDQUFDO2FBQ3hELENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLGlCQUFpQixDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsSUFBSSxpQkFBaUIsQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0RCxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFFRCxJQUFJLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzlCLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsT0FBTyxFQUFFO29CQUNQLElBQUk7b0JBQ0osaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUs7b0JBQy9CLElBQUk7b0JBQ0osaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUk7aUJBQy9CO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDcEMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDZCxPQUFPLEVBQUU7b0JBQ1AsR0FBRztvQkFDSCxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsS0FBSztvQkFDckMsR0FBRztvQkFDSCxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSTtpQkFDckM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZO1FBQ3hCLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBNEIsYUFBb0IsRUFBRTtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQzs7QUF0SHhELGdEQXVIQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iLzc0NTI0NjI1NTBhMTAwZjViZDJkY2FiNmY0OTVjOWY2OGJmMGRiNGEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLXNucy9saWIvc3Vic2NyaXB0aW9uLWZpbHRlci50c1xuXG4vLyBUT0RPOiBBZG9wdCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvclxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvcHVsbC8zMzM4Mi9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL3B1bGwvMzMwNDVcbi8vIGltcG9ydCB7IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4uLy4uL2NvcmUvbGliL2Vycm9yc1wiO1xuXG4vKipcbiAqIENvbmRpdGlvbnMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBzdHJpbmcgYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdDb25kaXRpb25zIHtcbiAgLyoqXG4gICAqIE1hdGNoIG9uZSBvciBtb3JlIHZhbHVlcy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBhbGxvd2xpc3RgXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgd2hpdGVsaXN0Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE1hdGNoIGFueSB2YWx1ZSB0aGF0IGRvZXNuJ3QgaW5jbHVkZSBhbnkgb2YgdGhlIHNwZWNpZmllZCB2YWx1ZXMuXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgZGVueWxpc3RgXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYmxhY2tsaXN0Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE1hdGNoIG9uZSBvciBtb3JlIHZhbHVlcy5cbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBhbGxvd2xpc3Q/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTWF0Y2ggYW55IHZhbHVlIHRoYXQgZG9lc24ndCBpbmNsdWRlIGFueSBvZiB0aGUgc3BlY2lmaWVkIHZhbHVlcy5cbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBkZW55bGlzdD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNYXRjaGVzIHZhbHVlcyB0aGF0IGJlZ2lucyB3aXRoIHRoZSBzcGVjaWZpZWQgcHJlZml4ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2hQcmVmaXhlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNYXRjaGVzIHZhbHVlcyB0aGF0IGVuZCB3aXRoIHRoZSBzcGVjaWZpZWQgc3VmZml4ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbWF0Y2hTdWZmaXhlcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEJldHdlZW4gY29uZGl0aW9uIGZvciBhIG51bWVyaWMgYXR0cmlidXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJldHdlZW5Db25kaXRpb24ge1xuICAvKipcbiAgICogVGhlIHN0YXJ0IHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHN0b3AgdmFsdWUuXG4gICAqL1xuICByZWFkb25seSBzdG9wOiBudW1iZXI7XG59XG5cbi8qKlxuICogQ29uZGl0aW9ucyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG51bWVyaWMgYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdW1lcmljQ29uZGl0aW9ucyB7XG4gIC8qKlxuICAgKiBNYXRjaCBvbmUgb3IgbW9yZSB2YWx1ZXMuXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgYWxsb3dsaXN0YFxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHdoaXRlbGlzdD86IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBNYXRjaCBvbmUgb3IgbW9yZSB2YWx1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dsaXN0PzogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIE1hdGNoIHZhbHVlcyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gdGhlIHNwZWNpZmllZCB2YWx1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBncmVhdGVyVGhhbj86IG51bWJlcjtcblxuICAvKipcbiAgICogTWF0Y2ggdmFsdWVzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGdyZWF0ZXJUaGFuT3JFcXVhbFRvPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNYXRjaCB2YWx1ZXMgdGhhdCBhcmUgbGVzcyB0aGFuIHRoZSBzcGVjaWZpZWQgdmFsdWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbGVzc1RoYW4/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1hdGNoIHZhbHVlcyB0aGF0IGFyZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBsZXNzVGhhbk9yRXF1YWxUbz86IG51bWJlcjtcblxuICAvKipcbiAgICogTWF0Y2ggdmFsdWVzIHRoYXQgYXJlIGJldHdlZW4gdGhlIHNwZWNpZmllZCB2YWx1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYmV0d2Vlbj86IEJldHdlZW5Db25kaXRpb247XG5cbiAgLyoqXG4gICAqIE1hdGNoIHZhbHVlcyB0aGF0IGFyZSBzdHJpY3RseSBiZXR3ZWVuIHRoZSBzcGVjaWZpZWQgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGJldHdlZW5TdHJpY3Q/OiBCZXR3ZWVuQ29uZGl0aW9uO1xufVxuXG4vKipcbiAqIEEgc3Vic2NyaXB0aW9uIGZpbHRlciBmb3IgYW4gYXR0cmlidXRlLlxuICovXG5leHBvcnQgY2xhc3MgU3Vic2NyaXB0aW9uRmlsdGVyIHtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdWJzY3JpcHRpb24gZmlsdGVyIGZvciBhIHN0cmluZyBhdHRyaWJ1dGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHN0cmluZ0ZpbHRlcihzdHJpbmdDb25kaXRpb25zOiBTdHJpbmdDb25kaXRpb25zKSB7XG4gICAgY29uc3QgY29uZGl0aW9ucyA9IG5ldyBBcnJheTxhbnk+KCk7XG5cbiAgICBpZiAoc3RyaW5nQ29uZGl0aW9ucy53aGl0ZWxpc3QgJiYgc3RyaW5nQ29uZGl0aW9ucy5hbGxvd2xpc3QpIHtcbiAgICAgIC8vIFRPRE86IEFkb3B0IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiYHdoaXRlbGlzdGAgaXMgZGVwcmVjYXRlZDsgcGxlYXNlIHVzZSBgYWxsb3dsaXN0YCBpbnN0ZWFkXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc3RyaW5nQ29uZGl0aW9ucy5ibGFja2xpc3QgJiYgc3RyaW5nQ29uZGl0aW9ucy5kZW55bGlzdCkge1xuICAgICAgLy8gVE9ETzogQWRvcHQgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3JcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJgYmxhY2tsaXN0YCBpcyBkZXByZWNhdGVkOyBwbGVhc2UgdXNlIGBkZW55bGlzdGAgaW5zdGVhZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgYWxsb3dsaXN0ID0gc3RyaW5nQ29uZGl0aW9ucy5hbGxvd2xpc3QgPz8gc3RyaW5nQ29uZGl0aW9ucy53aGl0ZWxpc3Q7XG4gICAgY29uc3QgZGVueWxpc3QgPSBzdHJpbmdDb25kaXRpb25zLmRlbnlsaXN0ID8/IHN0cmluZ0NvbmRpdGlvbnMuYmxhY2tsaXN0O1xuXG4gICAgaWYgKGFsbG93bGlzdCkge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKC4uLmFsbG93bGlzdCk7XG4gICAgfVxuXG4gICAgaWYgKGRlbnlsaXN0KSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goeyBcImFueXRoaW5nLWJ1dFwiOiBkZW55bGlzdCB9KTtcbiAgICB9XG5cbiAgICBpZiAoc3RyaW5nQ29uZGl0aW9ucy5tYXRjaFByZWZpeGVzKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goXG4gICAgICAgIC4uLnN0cmluZ0NvbmRpdGlvbnMubWF0Y2hQcmVmaXhlcy5tYXAoKHApID0+ICh7IHByZWZpeDogcCB9KSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzdHJpbmdDb25kaXRpb25zLm1hdGNoU3VmZml4ZXMpIHtcbiAgICAgIGNvbmRpdGlvbnMucHVzaChcbiAgICAgICAgLi4uc3RyaW5nQ29uZGl0aW9ucy5tYXRjaFN1ZmZpeGVzLm1hcCgocykgPT4gKHsgc3VmZml4OiBzIH0pKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb25GaWx0ZXIoY29uZGl0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHN1YnNjcmlwdGlvbiBmaWx0ZXIgZm9yIGEgbnVtZXJpYyBhdHRyaWJ1dGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG51bWVyaWNGaWx0ZXIobnVtZXJpY0NvbmRpdGlvbnM6IE51bWVyaWNDb25kaXRpb25zKSB7XG4gICAgY29uc3QgY29uZGl0aW9ucyA9IG5ldyBBcnJheTxhbnk+KCk7XG5cbiAgICBpZiAobnVtZXJpY0NvbmRpdGlvbnMud2hpdGVsaXN0ICYmIG51bWVyaWNDb25kaXRpb25zLmFsbG93bGlzdCkge1xuICAgICAgLy8gVE9ETzogQWRvcHQgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3JcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJgd2hpdGVsaXN0YCBpcyBkZXByZWNhdGVkOyBwbGVhc2UgdXNlIGBhbGxvd2xpc3RgIGluc3RlYWRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGFsbG93bGlzdCA9XG4gICAgICBudW1lcmljQ29uZGl0aW9ucy5hbGxvd2xpc3QgPz8gbnVtZXJpY0NvbmRpdGlvbnMud2hpdGVsaXN0O1xuXG4gICAgaWYgKGFsbG93bGlzdCkge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKC4uLmFsbG93bGlzdC5tYXAoKHYpID0+ICh7IG51bWVyaWM6IFtcIj1cIiwgdl0gfSkpKTtcbiAgICB9XG5cbiAgICBpZiAobnVtZXJpY0NvbmRpdGlvbnMuZ3JlYXRlclRoYW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKHsgbnVtZXJpYzogW1wiPlwiLCBudW1lcmljQ29uZGl0aW9ucy5ncmVhdGVyVGhhbl0gfSk7XG4gICAgfVxuXG4gICAgaWYgKG51bWVyaWNDb25kaXRpb25zLmdyZWF0ZXJUaGFuT3JFcXVhbFRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbmRpdGlvbnMucHVzaCh7XG4gICAgICAgIG51bWVyaWM6IFtcIj49XCIsIG51bWVyaWNDb25kaXRpb25zLmdyZWF0ZXJUaGFuT3JFcXVhbFRvXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChudW1lcmljQ29uZGl0aW9ucy5sZXNzVGhhbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goeyBudW1lcmljOiBbXCI8XCIsIG51bWVyaWNDb25kaXRpb25zLmxlc3NUaGFuXSB9KTtcbiAgICB9XG5cbiAgICBpZiAobnVtZXJpY0NvbmRpdGlvbnMubGVzc1RoYW5PckVxdWFsVG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKHsgbnVtZXJpYzogW1wiPD1cIiwgbnVtZXJpY0NvbmRpdGlvbnMubGVzc1RoYW5PckVxdWFsVG9dIH0pO1xuICAgIH1cblxuICAgIGlmIChudW1lcmljQ29uZGl0aW9ucy5iZXR3ZWVuKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goe1xuICAgICAgICBudW1lcmljOiBbXG4gICAgICAgICAgXCI+PVwiLFxuICAgICAgICAgIG51bWVyaWNDb25kaXRpb25zLmJldHdlZW4uc3RhcnQsXG4gICAgICAgICAgXCI8PVwiLFxuICAgICAgICAgIG51bWVyaWNDb25kaXRpb25zLmJldHdlZW4uc3RvcCxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChudW1lcmljQ29uZGl0aW9ucy5iZXR3ZWVuU3RyaWN0KSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goe1xuICAgICAgICBudW1lcmljOiBbXG4gICAgICAgICAgXCI+XCIsXG4gICAgICAgICAgbnVtZXJpY0NvbmRpdGlvbnMuYmV0d2VlblN0cmljdC5zdGFydCxcbiAgICAgICAgICBcIjxcIixcbiAgICAgICAgICBudW1lcmljQ29uZGl0aW9ucy5iZXR3ZWVuU3RyaWN0LnN0b3AsXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbkZpbHRlcihjb25kaXRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3Vic2NyaXB0aW9uIGZpbHRlciBmb3IgYXR0cmlidXRlIGtleSBtYXRjaGluZy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXhpc3RzRmlsdGVyKCkge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uRmlsdGVyKFt7IGV4aXN0czogdHJ1ZSB9XSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvbmRpdGlvbnMgY29uZGl0aW9ucyB0aGF0IHNwZWNpZnkgdGhlIG1lc3NhZ2UgYXR0cmlidXRlcyB0aGF0IHNob3VsZCBiZSBpbmNsdWRlZCwgZXhjbHVkZWQsIG1hdGNoZWQsIGV0Yy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjb25kaXRpb25zOiBhbnlbXSA9IFtdKSB7fVxufVxuIl19
@@ -0,0 +1,219 @@
1
+ import { Construct } from "constructs";
2
+ import { DeliveryPolicy } from "./delivery-policy";
3
+ import { SubscriptionFilter } from "./subscription-filter";
4
+ import { ITopic } from "./topic-base";
5
+ import { AwsConstructBase, AwsConstructProps } from "../aws-construct";
6
+ import * as notify from "../notify";
7
+ /**
8
+ * Outputs for the Subscription construct.
9
+ */
10
+ export interface SubscriptionOutputs {
11
+ /**
12
+ * The ARN of the subscription.
13
+ */
14
+ readonly subscriptionArn: string;
15
+ }
16
+ /**
17
+ * Options for creating a new subscription
18
+ */
19
+ export interface SubscriptionOptions extends AwsConstructProps {
20
+ /**
21
+ * What type of subscription to add.
22
+ */
23
+ readonly protocol: SubscriptionProtocol;
24
+ /**
25
+ * The subscription endpoint.
26
+ *
27
+ * The meaning of this value depends on the value for 'protocol'.
28
+ */
29
+ readonly endpoint: string;
30
+ /**
31
+ * true if raw message delivery is enabled for the subscription. Raw messages are free of JSON formatting and can be
32
+ * sent to HTTP/S and Amazon SQS endpoints. For more information, see GetSubscriptionAttributes in the Amazon Simple
33
+ * Notification Service API Reference.
34
+ *
35
+ * @default false
36
+ */
37
+ readonly rawMessageDelivery?: boolean;
38
+ /**
39
+ * The filter policy.
40
+ *
41
+ * @default - all messages are delivered
42
+ */
43
+ readonly filterPolicy?: {
44
+ [attribute: string]: SubscriptionFilter;
45
+ };
46
+ /**
47
+ * The filter policy that is applied on the message body.
48
+ * To apply a filter policy to the message attributes, use `filterPolicy`. A maximum of one of `filterPolicyWithMessageBody` and `filterPolicy` may be used.
49
+ *
50
+ * @default - all messages are delivered
51
+ */
52
+ readonly filterPolicyWithMessageBody?: {
53
+ [attribute: string]: FilterOrPolicy;
54
+ };
55
+ /**
56
+ * Queue to be used as dead letter queue.
57
+ * If not passed no dead letter queue is enabled.
58
+ *
59
+ * @default - No dead letter queue enabled.
60
+ */
61
+ readonly deadLetterQueue?: notify.IQueue;
62
+ /**
63
+ * Arn of role allowing access to firehose delivery stream.
64
+ * Required for a firehose subscription protocol.
65
+ * @default - No subscription role is provided
66
+ */
67
+ readonly subscriptionRoleArn?: string;
68
+ /**
69
+ * The delivery policy.
70
+ *
71
+ * @default - if the initial delivery of the message fails, three retries with a delay between failed attempts set at 20 seconds
72
+ */
73
+ readonly deliveryPolicy?: DeliveryPolicy;
74
+ }
75
+ /**
76
+ * Properties for creating a new subscription
77
+ */
78
+ export interface SubscriptionProps extends SubscriptionOptions {
79
+ /**
80
+ * The topic to subscribe to.
81
+ */
82
+ readonly topic: ITopic;
83
+ }
84
+ /**
85
+ * A new subscription.
86
+ *
87
+ * Prefer to use the `ITopic.addSubscription()` methods to create instances of
88
+ * this class.
89
+ *
90
+ * @resource aws_sns_topic_subscription
91
+ */
92
+ export declare class Subscription extends AwsConstructBase {
93
+ /**
94
+ * The DLQ associated with this subscription if present.
95
+ */
96
+ readonly deadLetterQueue?: notify.IQueue;
97
+ private readonly resource;
98
+ readonly subscriptionOutputs: SubscriptionOutputs;
99
+ get outputs(): Record<string, any>;
100
+ constructor(scope: Construct, id: string, props: SubscriptionProps);
101
+ private renderDeliveryPolicy;
102
+ private buildDeadLetterQueue;
103
+ private buildDeadLetterConfig;
104
+ }
105
+ /**
106
+ * The type of subscription, controlling the type of the endpoint parameter.
107
+ */
108
+ export declare enum SubscriptionProtocol {
109
+ /**
110
+ * JSON-encoded message is POSTED to an HTTP url.
111
+ */
112
+ HTTP = "http",
113
+ /**
114
+ * JSON-encoded message is POSTed to an HTTPS url.
115
+ */
116
+ HTTPS = "https",
117
+ /**
118
+ * Notifications are sent via email.
119
+ */
120
+ EMAIL = "email",
121
+ /**
122
+ * Notifications are JSON-encoded and sent via mail.
123
+ */
124
+ EMAIL_JSON = "email-json",
125
+ /**
126
+ * Notification is delivered by SMS
127
+ */
128
+ SMS = "sms",
129
+ /**
130
+ * Notifications are enqueued into an SQS queue.
131
+ */
132
+ SQS = "sqs",
133
+ /**
134
+ * JSON-encoded notifications are sent to a mobile app endpoint.
135
+ */
136
+ APPLICATION = "application",
137
+ /**
138
+ * Notifications trigger a Lambda function.
139
+ */
140
+ LAMBDA = "lambda",
141
+ /**
142
+ * Notifications put records into a firehose delivery stream.
143
+ */
144
+ FIREHOSE = "firehose"
145
+ }
146
+ /**
147
+ * The type of the MessageBody at a given key value pair
148
+ */
149
+ export declare enum FilterOrPolicyType {
150
+ /**
151
+ * The filter of the MessageBody
152
+ */
153
+ FILTER = 0,
154
+ /**
155
+ * A nested key of the MessageBody
156
+ */
157
+ POLICY = 1
158
+ }
159
+ /**
160
+ * Class for building the FilterPolicy by avoiding union types
161
+ */
162
+ export declare abstract class FilterOrPolicy {
163
+ /**
164
+ * Filter of MessageBody
165
+ */
166
+ static filter(filter: SubscriptionFilter): notify.Filter;
167
+ /**
168
+ * Policy of MessageBody
169
+ */
170
+ static policy(policy: {
171
+ [attribute: string]: FilterOrPolicy;
172
+ }): notify.Policy;
173
+ /**
174
+ * Type switch for disambiguating between subclasses
175
+ */
176
+ abstract readonly type: FilterOrPolicyType;
177
+ /**
178
+ * Check if instance is `Policy` type
179
+ */
180
+ isPolicy(): this is Policy;
181
+ /**
182
+ * Check if instance is `Filter` type
183
+ */
184
+ isFilter(): this is Filter;
185
+ }
186
+ /**
187
+ * Filter implementation of FilterOrPolicy
188
+ */
189
+ export declare class Filter extends FilterOrPolicy {
190
+ readonly filterDoc: SubscriptionFilter;
191
+ /**
192
+ * Type used in DFS buildFilterPolicyWithMessageBody to determine json value type
193
+ */
194
+ readonly type = notify.FilterOrPolicyType.FILTER;
195
+ /**
196
+ * Policy constructor
197
+ * @param filterDoc filter argument to construct
198
+ */
199
+ constructor(filterDoc: SubscriptionFilter);
200
+ }
201
+ /**
202
+ * Policy Implementation of FilterOrPolicy
203
+ */
204
+ export declare class Policy extends FilterOrPolicy {
205
+ readonly policyDoc: {
206
+ [attribute: string]: FilterOrPolicy;
207
+ };
208
+ /**
209
+ * Type used in DFS buildFilterPolicyWithMessageBody to determine json value type
210
+ */
211
+ readonly type = notify.FilterOrPolicyType.POLICY;
212
+ /**
213
+ * Policy constructor
214
+ * @param policyDoc policy argument to construct
215
+ */
216
+ constructor(policyDoc: {
217
+ [attribute: string]: FilterOrPolicy;
218
+ });
219
+ }