UNPKG

aws-cdk-lib

Version:

Version 2 of the AWS Cloud Development Kit library

214 lines (213 loc) 6.16 kB
import { Construct } from 'constructs'; import { DeliveryPolicy } from './delivery-policy'; import { SubscriptionFilter } from './subscription-filter'; import { ITopic } from './topic-base'; import { IQueue } from '../../aws-sqs'; import { Resource } from '../../core'; /** * Options for creating a new subscription */ export interface SubscriptionOptions { /** * What type of subscription to add. */ readonly protocol: SubscriptionProtocol; /** * The subscription endpoint. * * The meaning of this value depends on the value for 'protocol'. */ readonly endpoint: string; /** * true if raw message delivery is enabled for the subscription. Raw messages are free of JSON formatting and can be * sent to HTTP/S and Amazon SQS endpoints. For more information, see GetSubscriptionAttributes in the Amazon Simple * Notification Service API Reference. * * @default false */ readonly rawMessageDelivery?: boolean; /** * The filter policy. * * @default - all messages are delivered */ readonly filterPolicy?: { [attribute: string]: SubscriptionFilter; }; /** * The filter policy that is applied on the message body. * To apply a filter policy to the message attributes, use `filterPolicy`. A maximum of one of `filterPolicyWithMessageBody` and `filterPolicy` may be used. * * @default - all messages are delivered */ readonly filterPolicyWithMessageBody?: { [attribute: string]: FilterOrPolicy; }; /** * The region where the topic resides, in the case of cross-region subscriptions * @link https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-sns-subscription.html#cfn-sns-subscription-region * @default - the region where the CloudFormation stack is being deployed. */ readonly region?: string; /** * Queue to be used as dead letter queue. * If not passed no dead letter queue is enabled. * * @default - No dead letter queue enabled. */ readonly deadLetterQueue?: IQueue; /** * Arn of role allowing access to firehose delivery stream. * Required for a firehose subscription protocol. * @default - No subscription role is provided */ readonly subscriptionRoleArn?: string; /** * The delivery policy. * * @default - if the initial delivery of the message fails, three retries with a delay between failed attempts set at 20 seconds */ readonly deliveryPolicy?: DeliveryPolicy; } /** * Properties for creating a new subscription */ export interface SubscriptionProps extends SubscriptionOptions { /** * The topic to subscribe to. */ readonly topic: ITopic; } /** * A new subscription. * * Prefer to use the `ITopic.addSubscription()` methods to create instances of * this class. */ export declare class Subscription extends Resource { /** * The DLQ associated with this subscription if present. */ readonly deadLetterQueue?: IQueue; private readonly filterPolicy?; private readonly filterPolicyWithMessageBody?; constructor(scope: Construct, id: string, props: SubscriptionProps); private renderDeliveryPolicy; private buildDeadLetterQueue; private buildDeadLetterConfig; } /** * The type of subscription, controlling the type of the endpoint parameter. */ export declare enum SubscriptionProtocol { /** * JSON-encoded message is POSTED to an HTTP url. */ HTTP = "http", /** * JSON-encoded message is POSTed to an HTTPS url. */ HTTPS = "https", /** * Notifications are sent via email. */ EMAIL = "email", /** * Notifications are JSON-encoded and sent via mail. */ EMAIL_JSON = "email-json", /** * Notification is delivered by SMS */ SMS = "sms", /** * Notifications are enqueued into an SQS queue. */ SQS = "sqs", /** * JSON-encoded notifications are sent to a mobile app endpoint. */ APPLICATION = "application", /** * Notifications trigger a Lambda function. */ LAMBDA = "lambda", /** * Notifications put records into a firehose delivery stream. */ FIREHOSE = "firehose" } /** * The type of the MessageBody at a given key value pair */ export declare enum FilterOrPolicyType { /** * The filter of the MessageBody */ FILTER = 0, /** * A nested key of the MessageBody */ POLICY = 1 } /** * Class for building the FilterPolicy by avoiding union types */ export declare abstract class FilterOrPolicy { /** * Filter of MessageBody */ static filter(filter: SubscriptionFilter): Filter; /** * Policy of MessageBody */ static policy(policy: { [attribute: string]: FilterOrPolicy; }): Policy; /** * Type switch for disambiguating between subclasses */ abstract readonly type: FilterOrPolicyType; /** * Check if instance is `Policy` type */ isPolicy(): this is Policy; /** * Check if instance is `Filter` type */ isFilter(): this is Filter; } /** * Filter implementation of FilterOrPolicy */ export declare class Filter extends FilterOrPolicy { readonly filterDoc: SubscriptionFilter; /** * Type used in DFS buildFilterPolicyWithMessageBody to determine json value type */ readonly type = FilterOrPolicyType.FILTER; /** * Policy constructor * @param filterDoc filter argument to construct */ constructor(filterDoc: SubscriptionFilter); } /** * Policy Implementation of FilterOrPolicy */ export declare class Policy extends FilterOrPolicy { readonly policyDoc: { [attribute: string]: FilterOrPolicy; }; /** * Type used in DFS buildFilterPolicyWithMessageBody to determine json value type */ readonly type = FilterOrPolicyType.POLICY; /** * Policy constructor * @param policyDoc policy argument to construct */ constructor(policyDoc: { [attribute: string]: FilterOrPolicy; }); }