terraconstructs 0.0.16 → 0.0.18
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.
- package/.jsii +4809 -76
- package/lib/aws/arn.js +1 -1
- package/lib/aws/aws-construct.js +1 -1
- package/lib/aws/aws-stack.js +1 -1
- package/lib/aws/aws-tags.js +2 -2
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/lambda.js +1 -1
- package/lib/aws/cloudwatch/alarm-base.js +1 -1
- package/lib/aws/cloudwatch/alarm-rule.js +1 -1
- package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
- package/lib/aws/cloudwatch/alarm.js +1 -1
- package/lib/aws/cloudwatch/composite-alarm.js +1 -1
- package/lib/aws/cloudwatch/dashboard.js +1 -1
- package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
- package/lib/aws/cloudwatch/graph.js +8 -8
- package/lib/aws/cloudwatch/layout.js +3 -3
- package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
- package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
- package/lib/aws/cloudwatch/log-group.js +1 -1
- package/lib/aws/cloudwatch/log-query.js +1 -1
- package/lib/aws/cloudwatch/log-stream.js +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +1 -1
- package/lib/aws/cloudwatch/metric.js +2 -2
- package/lib/aws/cloudwatch/pattern.js +3 -3
- package/lib/aws/cloudwatch/policy.js +1 -1
- package/lib/aws/cloudwatch/query-definition.js +2 -2
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +1 -1
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.js +1 -1
- package/lib/aws/compute/activity.js +1 -1
- package/lib/aws/compute/alb/application-listener-action.js +1 -1
- package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
- package/lib/aws/compute/alb/application-listener-rule.js +1 -1
- package/lib/aws/compute/alb/application-listener.js +1 -1
- package/lib/aws/compute/alb/application-load-balancer.js +1 -1
- package/lib/aws/compute/alb/application-target-group.js +1 -1
- package/lib/aws/compute/alb/conditions.js +1 -1
- package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
- package/lib/aws/compute/alb/trust-store.js +1 -1
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
- package/lib/aws/compute/bastion-host.js +1 -1
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
- package/lib/aws/compute/client-vpn-endpoint.js +2 -2
- package/lib/aws/compute/client-vpn-route.js +2 -2
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.js +1 -1
- package/lib/aws/compute/event-invoke-config.js +1 -1
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.js +1 -1
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
- package/lib/aws/compute/event-sources/s3.js +1 -1
- package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
- package/lib/aws/compute/event-sources/sqs.js +1 -1
- package/lib/aws/compute/fields.js +4 -4
- package/lib/aws/compute/function-alias.js +1 -1
- package/lib/aws/compute/function-base.js +2 -2
- package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
- package/lib/aws/compute/function-destinations/function.js +1 -1
- package/lib/aws/compute/function-destinations/sqs.js +1 -1
- package/lib/aws/compute/function-nodejs.js +1 -1
- package/lib/aws/compute/function-url.js +1 -1
- package/lib/aws/compute/function.js +1 -1
- package/lib/aws/compute/instance-types.js +1 -1
- package/lib/aws/compute/instance.js +1 -1
- package/lib/aws/compute/ip-addresses.js +2 -2
- package/lib/aws/compute/ipam.js +1 -1
- package/lib/aws/compute/key-pair.js +1 -1
- package/lib/aws/compute/launch-template.js +2 -2
- package/lib/aws/compute/lb-shared/base-listener.js +1 -1
- package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +13 -3
- package/lib/aws/compute/lb-shared/base-load-balancer.js +16 -4
- package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
- package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
- package/lib/aws/compute/lb-targets/alb-target.js +3 -3
- package/lib/aws/compute/lb-targets/instance-target.js +2 -2
- package/lib/aws/compute/lb-targets/ip-target.js +1 -1
- package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
- package/lib/aws/compute/load-balancer.js +3 -3
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
- package/lib/aws/compute/machine-image/common.js +1 -1
- package/lib/aws/compute/machine-image/machine-image.js +8 -8
- package/lib/aws/compute/nat.js +5 -5
- package/lib/aws/compute/network-acl-types.js +2 -2
- package/lib/aws/compute/network-acl.js +3 -3
- package/lib/aws/compute/nlb/network-listener-action.js +1 -1
- package/lib/aws/compute/nlb/network-listener.js +1 -1
- package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
- package/lib/aws/compute/nlb/network-target-group.js +1 -1
- package/lib/aws/compute/peer.js +1 -1
- package/lib/aws/compute/placement-group.js +1 -1
- package/lib/aws/compute/port.js +1 -1
- package/lib/aws/compute/prefix-list.js +1 -1
- package/lib/aws/compute/route.js +8 -8
- package/lib/aws/compute/security-group.js +1 -1
- package/lib/aws/compute/state-graph.js +1 -1
- package/lib/aws/compute/state-machine-fragment.js +1 -1
- package/lib/aws/compute/state-machine.js +4 -4
- package/lib/aws/compute/states/choice.js +1 -1
- package/lib/aws/compute/states/custom-state.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
- package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
- package/lib/aws/compute/states/distributed-map.js +1 -1
- package/lib/aws/compute/states/fail.js +1 -1
- package/lib/aws/compute/states/map-base.js +1 -1
- package/lib/aws/compute/states/map.js +1 -1
- package/lib/aws/compute/states/parallel.js +1 -1
- package/lib/aws/compute/states/pass.js +2 -2
- package/lib/aws/compute/states/state.js +1 -1
- package/lib/aws/compute/states/succeed.js +1 -1
- package/lib/aws/compute/states/task-base.js +2 -2
- package/lib/aws/compute/states/task.js +1 -1
- package/lib/aws/compute/states/wait.js +2 -2
- package/lib/aws/compute/subnet-v2.js +2 -2
- package/lib/aws/compute/subnet.js +1 -1
- package/lib/aws/compute/task-credentials.js +1 -1
- package/lib/aws/compute/task-input.js +1 -1
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
- package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
- package/lib/aws/compute/tasks/http/invoke.js +1 -1
- package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
- package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
- package/lib/aws/compute/types.js +1 -1
- package/lib/aws/compute/user-data.js +3 -3
- package/lib/aws/compute/volume.js +2 -2
- package/lib/aws/compute/vpc-endpoint-service.js +1 -1
- package/lib/aws/compute/vpc-endpoint.js +6 -6
- package/lib/aws/compute/vpc-flow-logs.js +4 -4
- package/lib/aws/compute/vpc-v2-base.js +1 -1
- package/lib/aws/compute/vpc-v2.js +2 -2
- package/lib/aws/compute/vpc.js +4 -4
- package/lib/aws/compute/vpn.js +3 -3
- package/lib/aws/edge/certificate.js +1 -1
- package/lib/aws/edge/distribution.js +3 -3
- package/lib/aws/edge/dns-alias-record-targets.d.ts +7 -0
- package/lib/aws/edge/dns-alias-record-targets.js +28 -5
- package/lib/aws/edge/dns-record.js +13 -13
- package/lib/aws/edge/dns-zone.js +1 -1
- package/lib/aws/edge/function.js +2 -2
- package/lib/aws/edge/key-value-store.js +4 -4
- package/lib/aws/edge/origin.js +3 -3
- package/lib/aws/edge/response-headers-policy.js +1 -1
- package/lib/aws/encryption/alias.js +1 -1
- package/lib/aws/encryption/key.js +1 -1
- package/lib/aws/encryption/via-service-principal.js +1 -1
- package/lib/aws/iam/grant.js +2 -2
- package/lib/aws/iam/group.js +1 -1
- package/lib/aws/iam/instance-profile.js +1 -1
- package/lib/aws/iam/managed-policy.js +1 -1
- package/lib/aws/iam/oidc-provider.js +1 -1
- package/lib/aws/iam/policy-document.js +1 -1
- package/lib/aws/iam/policy-statement.js +1 -1
- package/lib/aws/iam/policy.js +1 -1
- package/lib/aws/iam/principals.js +20 -20
- package/lib/aws/iam/role.js +1 -1
- package/lib/aws/iam/saml-provider.js +2 -2
- package/lib/aws/iam/unknown-principal.js +1 -1
- package/lib/aws/iam/user.js +1 -1
- package/lib/aws/network/simple-ipv4-vpc.js +1 -1
- package/lib/aws/network/subnet-group.js +3 -3
- package/lib/aws/network/subnet.js +4 -4
- package/lib/aws/notify/archive.js +1 -1
- package/lib/aws/notify/connection.js +3 -3
- package/lib/aws/notify/delivery-policy.d.ts +114 -0
- package/lib/aws/notify/delivery-policy.js +27 -0
- package/lib/aws/notify/event-bus.js +3 -3
- package/lib/aws/notify/event-pattern.js +1 -1
- package/lib/aws/notify/index.d.ts +11 -0
- package/lib/aws/notify/index.js +14 -1
- package/lib/aws/notify/input.js +2 -2
- package/lib/aws/notify/kinesis-stream.js +1 -1
- package/lib/aws/notify/notification-rule-source.d.ts +20 -0
- package/lib/aws/notify/notification-rule-source.js +4 -0
- package/lib/aws/notify/notification-rule-target.d.ts +24 -0
- package/lib/aws/notify/notification-rule-target.js +4 -0
- package/lib/aws/notify/notification-rule.d.ts +123 -0
- package/lib/aws/notify/notification-rule.js +129 -0
- package/lib/aws/notify/policy.d.ts +56 -0
- package/lib/aws/notify/policy.js +83 -0
- package/lib/aws/notify/queue-policy.js +1 -1
- package/lib/aws/notify/queue.js +1 -1
- package/lib/aws/notify/resource-policy.js +1 -1
- package/lib/aws/notify/rule.js +1 -1
- package/lib/aws/notify/schedule.js +1 -1
- package/lib/aws/notify/sns-augmentations.generated.d.ts +125 -0
- package/lib/aws/notify/sns-augmentations.generated.js +71 -0
- package/lib/aws/notify/sns-canned-metrics.generated.d.ts +33 -0
- package/lib/aws/notify/sns-canned-metrics.generated.js +47 -0
- package/lib/aws/notify/subscriber.d.ts +44 -0
- package/lib/aws/notify/subscriber.js +4 -0
- package/lib/aws/notify/subscription-filter.d.ts +129 -0
- package/lib/aws/notify/subscription-filter.js +105 -0
- package/lib/aws/notify/subscription.d.ts +219 -0
- package/lib/aws/notify/subscription.js +357 -0
- package/lib/aws/notify/targets/event-bus.js +1 -1
- package/lib/aws/notify/targets/function.js +1 -1
- package/lib/aws/notify/targets/log-group.js +2 -2
- package/lib/aws/notify/targets/sqs.js +1 -1
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/topic-base.d.ts +155 -0
- package/lib/aws/notify/topic-base.js +175 -0
- package/lib/aws/notify/topic.d.ts +222 -0
- package/lib/aws/notify/topic.js +219 -0
- package/lib/aws/storage/bucket-notifications.js +1 -1
- package/lib/aws/storage/bucket-policy.js +1 -1
- package/lib/aws/storage/bucket-source.js +1 -1
- package/lib/aws/storage/bucket.js +2 -2
- package/lib/aws/storage/notification-targets/function.js +1 -1
- package/lib/aws/storage/notification-targets/queue.js +1 -1
- package/lib/aws/storage/origin-access-identity.js +1 -1
- package/lib/aws/storage/parameter.js +2 -2
- package/lib/construct-base.js +2 -2
- package/lib/duration.js +1 -1
- package/lib/expiration.js +1 -1
- package/lib/size.js +1 -1
- package/lib/stack-base.js +1 -1
- package/lib/terra-func.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface MetricWithDims<D> {
|
|
2
|
+
readonly namespace: string;
|
|
3
|
+
readonly metricName: string;
|
|
4
|
+
readonly statistic: string;
|
|
5
|
+
readonly dimensionsMap: D;
|
|
6
|
+
}
|
|
7
|
+
export declare class SNSMetrics {
|
|
8
|
+
static numberOfNotificationsDeliveredSum(dimensions: {
|
|
9
|
+
TopicName: string;
|
|
10
|
+
}): MetricWithDims<{
|
|
11
|
+
TopicName: string;
|
|
12
|
+
}>;
|
|
13
|
+
static numberOfNotificationsFailedSum(dimensions: {
|
|
14
|
+
TopicName: string;
|
|
15
|
+
}): MetricWithDims<{
|
|
16
|
+
TopicName: string;
|
|
17
|
+
}>;
|
|
18
|
+
static numberOfMessagesPublishedSum(dimensions: {
|
|
19
|
+
TopicName: string;
|
|
20
|
+
}): MetricWithDims<{
|
|
21
|
+
TopicName: string;
|
|
22
|
+
}>;
|
|
23
|
+
static publishSizeAverage(dimensions: {
|
|
24
|
+
TopicName: string;
|
|
25
|
+
}): MetricWithDims<{
|
|
26
|
+
TopicName: string;
|
|
27
|
+
}>;
|
|
28
|
+
static smsSuccessRateSum(dimensions: {
|
|
29
|
+
TopicName: string;
|
|
30
|
+
}): MetricWithDims<{
|
|
31
|
+
TopicName: string;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SNSMetrics = void 0;
|
|
4
|
+
class SNSMetrics {
|
|
5
|
+
static numberOfNotificationsDeliveredSum(dimensions) {
|
|
6
|
+
return {
|
|
7
|
+
"namespace": "AWS/SNS",
|
|
8
|
+
"metricName": "NumberOfNotificationsDelivered",
|
|
9
|
+
"dimensionsMap": dimensions,
|
|
10
|
+
"statistic": "Sum"
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
static numberOfNotificationsFailedSum(dimensions) {
|
|
14
|
+
return {
|
|
15
|
+
"namespace": "AWS/SNS",
|
|
16
|
+
"metricName": "NumberOfNotificationsFailed",
|
|
17
|
+
"dimensionsMap": dimensions,
|
|
18
|
+
"statistic": "Sum"
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
static numberOfMessagesPublishedSum(dimensions) {
|
|
22
|
+
return {
|
|
23
|
+
"namespace": "AWS/SNS",
|
|
24
|
+
"metricName": "NumberOfMessagesPublished",
|
|
25
|
+
"dimensionsMap": dimensions,
|
|
26
|
+
"statistic": "Sum"
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
static publishSizeAverage(dimensions) {
|
|
30
|
+
return {
|
|
31
|
+
"namespace": "AWS/SNS",
|
|
32
|
+
"metricName": "PublishSize",
|
|
33
|
+
"dimensionsMap": dimensions,
|
|
34
|
+
"statistic": "Average"
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
static smsSuccessRateSum(dimensions) {
|
|
38
|
+
return {
|
|
39
|
+
"namespace": "AWS/SNS",
|
|
40
|
+
"metricName": "SMSSuccessRate",
|
|
41
|
+
"dimensionsMap": dimensions,
|
|
42
|
+
"statistic": "Sum"
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.SNSMetrics = SNSMetrics;
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25zLWNhbm5lZC1tZXRyaWNzLmdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3Mvbm90aWZ5L3Nucy1jYW5uZWQtbWV0cmljcy5nZW5lcmF0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBV0EsTUFBYSxVQUFVO0lBQ2QsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLFVBQWtDO1FBQ2hGLE9BQU87WUFDTCxXQUFXLEVBQUUsU0FBUztZQUN0QixZQUFZLEVBQUUsZ0NBQWdDO1lBQzlDLGVBQWUsRUFBRSxVQUFVO1lBQzNCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLDhCQUE4QixDQUFDLFVBQWtDO1FBQzdFLE9BQU87WUFDTCxXQUFXLEVBQUUsU0FBUztZQUN0QixZQUFZLEVBQUUsNkJBQTZCO1lBQzNDLGVBQWUsRUFBRSxVQUFVO1lBQzNCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLDRCQUE0QixDQUFDLFVBQWtDO1FBQzNFLE9BQU87WUFDTCxXQUFXLEVBQUUsU0FBUztZQUN0QixZQUFZLEVBQUUsMkJBQTJCO1lBQ3pDLGVBQWUsRUFBRSxVQUFVO1lBQzNCLFdBQVcsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUFDSixDQUFDO0lBRU0sTUFBTSxDQUFDLGtCQUFrQixDQUFDLFVBQWtDO1FBQ2pFLE9BQU87WUFDTCxXQUFXLEVBQUUsU0FBUztZQUN0QixZQUFZLEVBQUUsYUFBYTtZQUMzQixlQUFlLEVBQUUsVUFBVTtZQUMzQixXQUFXLEVBQUUsU0FBUztTQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxVQUFrQztRQUNoRSxPQUFPO1lBQ0wsV0FBVyxFQUFFLFNBQVM7WUFDdEIsWUFBWSxFQUFFLGdCQUFnQjtZQUM5QixlQUFlLEVBQUUsVUFBVTtZQUMzQixXQUFXLEVBQUUsS0FBSztTQUNuQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBN0NELGdDQTZDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHByZXR0aWVyL3ByZXR0aWVyLG1heC1sZW4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWV0cmljV2l0aERpbXM8RD4ge1xuICByZWFkb25seSBuYW1lc3BhY2U6IHN0cmluZztcblxuICByZWFkb25seSBtZXRyaWNOYW1lOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgc3RhdGlzdGljOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgZGltZW5zaW9uc01hcDogRDtcbn1cblxuZXhwb3J0IGNsYXNzIFNOU01ldHJpY3Mge1xuICBwdWJsaWMgc3RhdGljIG51bWJlck9mTm90aWZpY2F0aW9uc0RlbGl2ZXJlZFN1bShkaW1lbnNpb25zOiB7IFRvcGljTmFtZTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBUb3BpY05hbWU6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9TTlNcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIk51bWJlck9mTm90aWZpY2F0aW9uc0RlbGl2ZXJlZFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgbnVtYmVyT2ZOb3RpZmljYXRpb25zRmFpbGVkU3VtKGRpbWVuc2lvbnM6IHsgVG9waWNOYW1lOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IFRvcGljTmFtZTogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL1NOU1wiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiTnVtYmVyT2ZOb3RpZmljYXRpb25zRmFpbGVkXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBudW1iZXJPZk1lc3NhZ2VzUHVibGlzaGVkU3VtKGRpbWVuc2lvbnM6IHsgVG9waWNOYW1lOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IFRvcGljTmFtZTogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL1NOU1wiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiTnVtYmVyT2ZNZXNzYWdlc1B1Ymxpc2hlZFwiLFxuICAgICAgXCJkaW1lbnNpb25zTWFwXCI6IGRpbWVuc2lvbnMsXG4gICAgICBcInN0YXRpc3RpY1wiOiBcIlN1bVwiXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcHVibGlzaFNpemVBdmVyYWdlKGRpbWVuc2lvbnM6IHsgVG9waWNOYW1lOiBzdHJpbmc7IH0pOiBNZXRyaWNXaXRoRGltczx7IFRvcGljTmFtZTogc3RyaW5nOyB9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibmFtZXNwYWNlXCI6IFwiQVdTL1NOU1wiLFxuICAgICAgXCJtZXRyaWNOYW1lXCI6IFwiUHVibGlzaFNpemVcIixcbiAgICAgIFwiZGltZW5zaW9uc01hcFwiOiBkaW1lbnNpb25zLFxuICAgICAgXCJzdGF0aXN0aWNcIjogXCJBdmVyYWdlXCJcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzbXNTdWNjZXNzUmF0ZVN1bShkaW1lbnNpb25zOiB7IFRvcGljTmFtZTogc3RyaW5nOyB9KTogTWV0cmljV2l0aERpbXM8eyBUb3BpY05hbWU6IHN0cmluZzsgfT4ge1xuICAgIHJldHVybiB7XG4gICAgICBcIm5hbWVzcGFjZVwiOiBcIkFXUy9TTlNcIixcbiAgICAgIFwibWV0cmljTmFtZVwiOiBcIlNNU1N1Y2Nlc3NSYXRlXCIsXG4gICAgICBcImRpbWVuc2lvbnNNYXBcIjogZGltZW5zaW9ucyxcbiAgICAgIFwic3RhdGlzdGljXCI6IFwiU3VtXCJcbiAgICB9O1xuICB9XG59Il19
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Construct, IDependable } from "constructs";
|
|
2
|
+
import { SubscriptionOptions } from "./subscription";
|
|
3
|
+
import { ITopic } from "./topic-base";
|
|
4
|
+
/**
|
|
5
|
+
* Subscription configuration
|
|
6
|
+
*/
|
|
7
|
+
export interface TopicSubscriptionConfig extends SubscriptionOptions {
|
|
8
|
+
/**
|
|
9
|
+
* The scope in which to create the SNS subscription resource. Normally you'd
|
|
10
|
+
* want the subscription to be created on the consuming stack because the
|
|
11
|
+
* topic is usually referenced by the consumer's resource policy (e.g. SQS
|
|
12
|
+
* queue policy). Otherwise, it will cause a cyclic reference.
|
|
13
|
+
*
|
|
14
|
+
* If this is undefined, the subscription will be created on the topic's stack.
|
|
15
|
+
*
|
|
16
|
+
* @default - use the topic as the scope of the subscription, in which case `subscriberId` must be defined.
|
|
17
|
+
*/
|
|
18
|
+
readonly subscriberScope?: Construct;
|
|
19
|
+
/**
|
|
20
|
+
* The id of the SNS subscription resource created under `scope`. In most
|
|
21
|
+
* cases, it is recommended to use the `uniqueId` of the topic you are
|
|
22
|
+
* subscribing to.
|
|
23
|
+
*/
|
|
24
|
+
readonly subscriberId: string;
|
|
25
|
+
/**
|
|
26
|
+
* The resources that need to be created before the subscription can be safely created.
|
|
27
|
+
* For example for SQS subscription, the subscription needs to have a dependency on the SQS queue policy
|
|
28
|
+
* in order for the subscription to successfully deliver messages.
|
|
29
|
+
*
|
|
30
|
+
* @default - empty list
|
|
31
|
+
*/
|
|
32
|
+
readonly subscriptionDependency?: IDependable;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Topic subscription
|
|
36
|
+
*/
|
|
37
|
+
export interface ITopicSubscription {
|
|
38
|
+
/**
|
|
39
|
+
* Returns a configuration used to subscribe to an SNS topic
|
|
40
|
+
*
|
|
41
|
+
* @param topic topic for which subscription will be configured
|
|
42
|
+
*/
|
|
43
|
+
bind(topic: ITopic): TopicSubscriptionConfig;
|
|
44
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// https://github.com/aws/aws-cdk/blob/a2c633f1e698249496f11338312ab42bd7b1e4f0/packages/aws-cdk-lib/aws-sns/lib/subscriber.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaWJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3Mvbm90aWZ5L3N1YnNjcmliZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDhIQUE4SCIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL2EyYzYzM2YxZTY5ODI0OTQ5NmYxMTMzODMxMmFiNDJiZDdiMWU0ZjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLXNucy9saWIvc3Vic2NyaWJlci50c1xuXG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElEZXBlbmRhYmxlIH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbk9wdGlvbnMgfSBmcm9tIFwiLi9zdWJzY3JpcHRpb25cIjtcbmltcG9ydCB7IElUb3BpYyB9IGZyb20gXCIuL3RvcGljLWJhc2VcIjtcblxuLyoqXG4gKiBTdWJzY3JpcHRpb24gY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvcGljU3Vic2NyaXB0aW9uQ29uZmlnIGV4dGVuZHMgU3Vic2NyaXB0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gY3JlYXRlIHRoZSBTTlMgc3Vic2NyaXB0aW9uIHJlc291cmNlLiBOb3JtYWxseSB5b3UnZFxuICAgKiB3YW50IHRoZSBzdWJzY3JpcHRpb24gdG8gYmUgY3JlYXRlZCBvbiB0aGUgY29uc3VtaW5nIHN0YWNrIGJlY2F1c2UgdGhlXG4gICAqIHRvcGljIGlzIHVzdWFsbHkgcmVmZXJlbmNlZCBieSB0aGUgY29uc3VtZXIncyByZXNvdXJjZSBwb2xpY3kgKGUuZy4gU1FTXG4gICAqIHF1ZXVlIHBvbGljeSkuIE90aGVyd2lzZSwgaXQgd2lsbCBjYXVzZSBhIGN5Y2xpYyByZWZlcmVuY2UuXG4gICAqXG4gICAqIElmIHRoaXMgaXMgdW5kZWZpbmVkLCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgYmUgY3JlYXRlZCBvbiB0aGUgdG9waWMncyBzdGFjay5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2UgdGhlIHRvcGljIGFzIHRoZSBzY29wZSBvZiB0aGUgc3Vic2NyaXB0aW9uLCBpbiB3aGljaCBjYXNlIGBzdWJzY3JpYmVySWRgIG11c3QgYmUgZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IHN1YnNjcmliZXJTY29wZT86IENvbnN0cnVjdDtcblxuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBTTlMgc3Vic2NyaXB0aW9uIHJlc291cmNlIGNyZWF0ZWQgdW5kZXIgYHNjb3BlYC4gSW4gbW9zdFxuICAgKiBjYXNlcywgaXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgdW5pcXVlSWRgIG9mIHRoZSB0b3BpYyB5b3UgYXJlXG4gICAqIHN1YnNjcmliaW5nIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgc3Vic2NyaWJlcklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZXMgdGhhdCBuZWVkIHRvIGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBzdWJzY3JpcHRpb24gY2FuIGJlIHNhZmVseSBjcmVhdGVkLlxuICAgKiBGb3IgZXhhbXBsZSBmb3IgU1FTIHN1YnNjcmlwdGlvbiwgdGhlIHN1YnNjcmlwdGlvbiBuZWVkcyB0byBoYXZlIGEgZGVwZW5kZW5jeSBvbiB0aGUgU1FTIHF1ZXVlIHBvbGljeVxuICAgKiBpbiBvcmRlciBmb3IgdGhlIHN1YnNjcmlwdGlvbiB0byBzdWNjZXNzZnVsbHkgZGVsaXZlciBtZXNzYWdlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbXB0eSBsaXN0XG4gICAqL1xuICByZWFkb25seSBzdWJzY3JpcHRpb25EZXBlbmRlbmN5PzogSURlcGVuZGFibGU7XG59XG5cbi8qKlxuICogVG9waWMgc3Vic2NyaXB0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVRvcGljU3Vic2NyaXB0aW9uIHtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBjb25maWd1cmF0aW9uIHVzZWQgdG8gc3Vic2NyaWJlIHRvIGFuIFNOUyB0b3BpY1xuICAgKlxuICAgKiBAcGFyYW0gdG9waWMgdG9waWMgZm9yIHdoaWNoIHN1YnNjcmlwdGlvbiB3aWxsIGJlIGNvbmZpZ3VyZWRcbiAgICovXG4gIGJpbmQodG9waWM6IElUb3BpYyk6IFRvcGljU3Vic2NyaXB0aW9uQ29uZmlnO1xufVxuIl19
|
|
@@ -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.18" };
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLWZpbHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3Mvbm90aWZ5L3N1YnNjcmlwdGlvbi1maWx0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFpSUE7O0dBRUc7QUFDSCxNQUFhLGtCQUFrQjtJQUM3Qjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsZ0JBQWtDO1FBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksS0FBSyxFQUFPLENBQUM7UUFFcEMsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0Qsc0NBQXNDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUQsc0NBQXNDO1lBQ3RDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMERBQTBELENBQzNELENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztRQUMzRSxNQUFNLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1FBRXpFLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUVELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELElBQUksZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkMsVUFBVSxDQUFDLElBQUksQ0FDYixHQUFHLGdCQUFnQixD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QUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxJQUFJLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZO1FBQ3hCLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBNEIsYUFBb0IsRUFBRTtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQzs7QUF0SHhELGdEQXVIQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iLzc0NTI0NjI1NTBhMTAwZjViZDJkY2FiNmY0OTVjOWY2OGJmMGRiNGEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLXNucy9saWIvc3Vic2NyaXB0aW9uLWZpbHRlci50c1xuXG4vLyBUT0RPOiBBZG9wdCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvclxuLy8gLSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvcHVsbC8zMzM4Mi9cbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL3B1bGwvMzMwNDVcbi8vIGltcG9ydCB7IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4uLy4uL2NvcmUvbGliL2Vycm9yc1wiO1xuXG4vKipcbiAqIENvbmRpdGlvbnMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byBzdHJpbmcgYXR0cmlidXRlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJpbmdDb25kaXRpb25zIHtcbiAgLyoqXG4gICAqIE1hdGNoIG9uZSBvciBtb3JlIHZhbHVlcy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBhbGxvd2xpc3RgXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgd2hpdGVsaXN0Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE1hdGNoIGFueSB2YWx1ZSB0aGF0IGRvZXNuJ3QgaW5jbHVkZSBhbnkgb2YgdGhlIHNwZWNpZmllZCB2YWx1ZXMuXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgZGVueWxpc3RgXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYmxhY2tsaXN0Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE1hdGNoIG9uZSBvciBtb3JlIHZhbHVlcy5cbiAgICogQGRlZmF1bHQgLSBOb25lXG4gICAqL1xuICByZWFkb25seSBhbGxvd2xpc3Q/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
|
+
}
|