import * as HttpClient from "effect/unstable/http/HttpClient";
import * as redacted from "effect/Redacted";
import * as S from "effect/Schema";
import * as stream from "effect/Stream";
import * as API from "../client/api.js";
import * as T from "../traits.js";
import * as C from "../category.js";
import { SensitiveString } from "../sensitive.js";
const ns = T.XmlNamespace("http://sns.amazonaws.com/doc/2010-03-31/");
const svc = T.AwsApiService({
    sdkId: "SNS",
    serviceShapeName: "AmazonSimpleNotificationService",
});
const auth = T.AwsAuthSigv4({ name: "sns" });
const ver = T.ServiceVersion("2010-03-31");
const proto = T.AwsProtocolsAwsQuery();
const rules = T.EndpointResolver((p, _) => {
    const { Region, UseDualStack = false, UseFIPS = false, Endpoint } = p;
    const e = (u, p = {}, h = {}) => ({
        type: "endpoint",
        endpoint: { url: u, properties: p, headers: h },
    });
    const err = (m) => ({
        type: "error",
        message: m,
    });
    if (Endpoint != null) {
        if (UseFIPS === true) {
            return err("Invalid Configuration: FIPS and custom endpoint are not supported");
        }
        if (UseDualStack === true) {
            return err("Invalid Configuration: Dualstack and custom endpoint are not supported");
        }
        return e(Endpoint);
    }
    if (Region != null) {
        {
            const PartitionResult = _.partition(Region);
            if (PartitionResult != null && PartitionResult !== false) {
                if (UseFIPS === true && UseDualStack === true) {
                    if (true === _.getAttr(PartitionResult, "supportsFIPS") &&
                        true === _.getAttr(PartitionResult, "supportsDualStack")) {
                        return e(`https://sns-fips.${Region}.${_.getAttr(PartitionResult, "dualStackDnsSuffix")}`);
                    }
                    return err("FIPS and DualStack are enabled, but this partition does not support one or both");
                }
                if (UseFIPS === true) {
                    if (_.getAttr(PartitionResult, "supportsFIPS") === true) {
                        if (Region === "us-gov-east-1") {
                            return e("https://sns.us-gov-east-1.amazonaws.com");
                        }
                        if (Region === "us-gov-west-1") {
                            return e("https://sns.us-gov-west-1.amazonaws.com");
                        }
                        return e(`https://sns-fips.${Region}.${_.getAttr(PartitionResult, "dnsSuffix")}`);
                    }
                    return err("FIPS is enabled but this partition does not support FIPS");
                }
                if (UseDualStack === true) {
                    if (true === _.getAttr(PartitionResult, "supportsDualStack")) {
                        return e(`https://sns.${Region}.${_.getAttr(PartitionResult, "dualStackDnsSuffix")}`);
                    }
                    return err("DualStack is enabled but this partition does not support DualStack");
                }
                return e(`https://sns.${Region}.${_.getAttr(PartitionResult, "dnsSuffix")}`);
            }
        }
    }
    return err("Invalid Configuration: Missing Region");
});
export const DelegatesList = /*@__PURE__*/ /*#__PURE__*/ S.Array(S.String);
export const ActionsList = /*@__PURE__*/ /*#__PURE__*/ S.Array(S.String);
export const AddPermissionInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    TopicArn: S.String,
    Label: S.String,
    AWSAccountId: DelegatesList,
    ActionName: ActionsList,
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "AddPermissionInput",
});
export const AddPermissionResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "AddPermissionResponse",
});
export const CheckIfPhoneNumberIsOptedOutInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ phoneNumber: SensitiveString }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "CheckIfPhoneNumberIsOptedOutInput",
});
export const CheckIfPhoneNumberIsOptedOutResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ isOptedOut: S.optional(S.Boolean) }).pipe(ns)).annotate({
    identifier: "CheckIfPhoneNumberIsOptedOutResponse",
});
export const ConfirmSubscriptionInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    TopicArn: S.String,
    Token: S.String,
    AuthenticateOnUnsubscribe: S.optional(S.String),
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "ConfirmSubscriptionInput",
});
export const ConfirmSubscriptionResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ SubscriptionArn: S.optional(S.String) }).pipe(ns)).annotate({
    identifier: "ConfirmSubscriptionResponse",
});
export const MapStringToString = /*@__PURE__*/ /*#__PURE__*/ S.Record(S.String, S.String.pipe(S.optional));
export const CreatePlatformApplicationInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    Name: S.String,
    Platform: S.String,
    Attributes: MapStringToString,
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "CreatePlatformApplicationInput",
});
export const CreatePlatformApplicationResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ PlatformApplicationArn: S.optional(S.String) }).pipe(ns)).annotate({
    identifier: "CreatePlatformApplicationResponse",
});
export const CreatePlatformEndpointInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    PlatformApplicationArn: S.String,
    Token: S.String,
    CustomUserData: S.optional(S.String),
    Attributes: S.optional(MapStringToString),
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "CreatePlatformEndpointInput",
});
export const CreateEndpointResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ EndpointArn: S.optional(S.String) }).pipe(ns)).annotate({
    identifier: "CreateEndpointResponse",
});
export const LanguageCodeString = /*@__PURE__*/ /*#__PURE__*/ S.String;
export const CreateSMSSandboxPhoneNumberInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    PhoneNumber: SensitiveString,
    LanguageCode: S.optional(LanguageCodeString),
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "CreateSMSSandboxPhoneNumberInput",
});
export const CreateSMSSandboxPhoneNumberResult = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "CreateSMSSandboxPhoneNumberResult",
});
export const TopicAttributesMap = /*@__PURE__*/ /*#__PURE__*/ S.Record(S.String, S.String.pipe(S.optional));
export const Tag = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ Key: S.String, Value: S.String })).annotate({ identifier: "Tag" });
export const TagList = /*@__PURE__*/ /*#__PURE__*/ S.Array(Tag);
export const CreateTopicInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    Name: S.String,
    Attributes: S.optional(TopicAttributesMap),
    Tags: S.optional(TagList),
    DataProtectionPolicy: S.optional(S.String),
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "CreateTopicInput",
});
export const CreateTopicResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ TopicArn: S.optional(S.String) }).pipe(ns)).annotate({
    identifier: "CreateTopicResponse",
});
export const DeleteEndpointInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ EndpointArn: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "DeleteEndpointInput",
});
export const DeleteEndpointResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "DeleteEndpointResponse",
});
export const DeletePlatformApplicationInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ PlatformApplicationArn: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "DeletePlatformApplicationInput",
});
export const DeletePlatformApplicationResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "DeletePlatformApplicationResponse",
});
export const DeleteSMSSandboxPhoneNumberInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ PhoneNumber: SensitiveString }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "DeleteSMSSandboxPhoneNumberInput",
});
export const DeleteSMSSandboxPhoneNumberResult = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "DeleteSMSSandboxPhoneNumberResult",
});
export const DeleteTopicInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ TopicArn: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "DeleteTopicInput",
});
export const DeleteTopicResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "DeleteTopicResponse",
});
export const GetDataProtectionPolicyInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ ResourceArn: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "GetDataProtectionPolicyInput",
});
export const GetDataProtectionPolicyResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ DataProtectionPolicy: S.optional(S.String) }).pipe(ns)).annotate({
    identifier: "GetDataProtectionPolicyResponse",
});
export const GetEndpointAttributesInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ EndpointArn: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "GetEndpointAttributesInput",
});
export const GetEndpointAttributesResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ Attributes: S.optional(MapStringToString) }).pipe(ns)).annotate({
    identifier: "GetEndpointAttributesResponse",
});
export const GetPlatformApplicationAttributesInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ PlatformApplicationArn: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "GetPlatformApplicationAttributesInput",
});
export const GetPlatformApplicationAttributesResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ Attributes: S.optional(MapStringToString) }).pipe(ns)).annotate({
    identifier: "GetPlatformApplicationAttributesResponse",
});
export const ListString = /*@__PURE__*/ /*#__PURE__*/ S.Array(S.String);
export const GetSMSAttributesInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ attributes: S.optional(ListString) }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "GetSMSAttributesInput",
});
export const GetSMSAttributesResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ attributes: S.optional(MapStringToString) }).pipe(ns)).annotate({
    identifier: "GetSMSAttributesResponse",
});
export const GetSMSSandboxAccountStatusInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "GetSMSSandboxAccountStatusInput",
});
export const GetSMSSandboxAccountStatusResult = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ IsInSandbox: S.Boolean }).pipe(ns)).annotate({
    identifier: "GetSMSSandboxAccountStatusResult",
});
export const GetSubscriptionAttributesInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ SubscriptionArn: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "GetSubscriptionAttributesInput",
});
export const SubscriptionAttributesMap = /*@__PURE__*/ /*#__PURE__*/ S.Record(S.String, S.String.pipe(S.optional));
export const GetSubscriptionAttributesResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ Attributes: S.optional(SubscriptionAttributesMap) }).pipe(ns)).annotate({
    identifier: "GetSubscriptionAttributesResponse",
});
export const GetTopicAttributesInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ TopicArn: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "GetTopicAttributesInput",
});
export const GetTopicAttributesResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ Attributes: S.optional(TopicAttributesMap) }).pipe(ns)).annotate({
    identifier: "GetTopicAttributesResponse",
});
export const ListEndpointsByPlatformApplicationInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    PlatformApplicationArn: S.String,
    NextToken: S.optional(S.String),
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "ListEndpointsByPlatformApplicationInput",
});
export const Endpoint = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    EndpointArn: S.optional(S.String),
    Attributes: S.optional(MapStringToString),
})).annotate({ identifier: "Endpoint" });
export const ListOfEndpoints = /*@__PURE__*/ /*#__PURE__*/ S.Array(Endpoint);
export const ListEndpointsByPlatformApplicationResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    Endpoints: S.optional(ListOfEndpoints),
    NextToken: S.optional(S.String),
}).pipe(ns)).annotate({
    identifier: "ListEndpointsByPlatformApplicationResponse",
});
export const ListOriginationNumbersRequest = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    NextToken: S.optional(S.String),
    MaxResults: S.optional(S.Number),
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "ListOriginationNumbersRequest",
});
export const RouteType = /*@__PURE__*/ /*#__PURE__*/ S.String;
export const NumberCapability = /*@__PURE__*/ /*#__PURE__*/ S.String;
export const NumberCapabilityList = 
/*@__PURE__*/ /*#__PURE__*/ S.Array(NumberCapability);
export const PhoneNumberInformation = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    CreatedAt: S.optional(T.DateFromString.pipe(T.TimestampFormat("date-time"))),
    PhoneNumber: S.optional(SensitiveString),
    Status: S.optional(S.String),
    Iso2CountryCode: S.optional(S.String),
    RouteType: S.optional(RouteType),
    NumberCapabilities: S.optional(NumberCapabilityList),
})).annotate({
    identifier: "PhoneNumberInformation",
});
export const PhoneNumberInformationList = /*@__PURE__*/ /*#__PURE__*/ S.Array(PhoneNumberInformation);
export const ListOriginationNumbersResult = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    NextToken: S.optional(S.String),
    PhoneNumbers: S.optional(PhoneNumberInformationList),
}).pipe(ns)).annotate({
    identifier: "ListOriginationNumbersResult",
});
export const ListPhoneNumbersOptedOutInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ nextToken: S.optional(S.String) }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "ListPhoneNumbersOptedOutInput",
});
export const PhoneNumberList = 
/*@__PURE__*/ /*#__PURE__*/ S.Array(SensitiveString);
export const ListPhoneNumbersOptedOutResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    phoneNumbers: S.optional(PhoneNumberList),
    nextToken: S.optional(S.String),
}).pipe(ns)).annotate({
    identifier: "ListPhoneNumbersOptedOutResponse",
});
export const ListPlatformApplicationsInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ NextToken: S.optional(S.String) }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "ListPlatformApplicationsInput",
});
export const PlatformApplication = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    PlatformApplicationArn: S.optional(S.String),
    Attributes: S.optional(MapStringToString),
})).annotate({
    identifier: "PlatformApplication",
});
export const ListOfPlatformApplications = 
/*@__PURE__*/ /*#__PURE__*/ S.Array(PlatformApplication);
export const ListPlatformApplicationsResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    PlatformApplications: S.optional(ListOfPlatformApplications),
    NextToken: S.optional(S.String),
}).pipe(ns)).annotate({
    identifier: "ListPlatformApplicationsResponse",
});
export const ListSMSSandboxPhoneNumbersInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    NextToken: S.optional(S.String),
    MaxResults: S.optional(S.Number),
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "ListSMSSandboxPhoneNumbersInput",
});
export const SMSSandboxPhoneNumberVerificationStatus = 
/*@__PURE__*/ /*#__PURE__*/ S.String;
export const SMSSandboxPhoneNumber = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    PhoneNumber: S.optional(SensitiveString),
    Status: S.optional(SMSSandboxPhoneNumberVerificationStatus),
})).annotate({
    identifier: "SMSSandboxPhoneNumber",
});
export const SMSSandboxPhoneNumberList = /*@__PURE__*/ /*#__PURE__*/ S.Array(SMSSandboxPhoneNumber);
export const ListSMSSandboxPhoneNumbersResult = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    PhoneNumbers: SMSSandboxPhoneNumberList,
    NextToken: S.optional(S.String),
}).pipe(ns)).annotate({
    identifier: "ListSMSSandboxPhoneNumbersResult",
});
export const ListSubscriptionsInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ NextToken: S.optional(S.String) }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "ListSubscriptionsInput",
});
export const Subscription = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    SubscriptionArn: S.optional(S.String),
    Owner: S.optional(S.String),
    Protocol: S.optional(S.String),
    Endpoint: S.optional(S.String),
    TopicArn: S.optional(S.String),
})).annotate({ identifier: "Subscription" });
export const SubscriptionsList = 
/*@__PURE__*/ /*#__PURE__*/ S.Array(Subscription);
export const ListSubscriptionsResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    Subscriptions: S.optional(SubscriptionsList),
    NextToken: S.optional(S.String),
}).pipe(ns)).annotate({
    identifier: "ListSubscriptionsResponse",
});
export const ListSubscriptionsByTopicInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ TopicArn: S.String, NextToken: S.optional(S.String) }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "ListSubscriptionsByTopicInput",
});
export const ListSubscriptionsByTopicResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    Subscriptions: S.optional(SubscriptionsList),
    NextToken: S.optional(S.String),
}).pipe(ns)).annotate({
    identifier: "ListSubscriptionsByTopicResponse",
});
export const ListTagsForResourceRequest = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ ResourceArn: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "ListTagsForResourceRequest",
});
export const ListTagsForResourceResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ Tags: S.optional(TagList) }).pipe(ns)).annotate({
    identifier: "ListTagsForResourceResponse",
});
export const ListTopicsInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ NextToken: S.optional(S.String) }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "ListTopicsInput",
});
export const Topic = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ TopicArn: S.optional(S.String) })).annotate({ identifier: "Topic" });
export const TopicsList = /*@__PURE__*/ /*#__PURE__*/ S.Array(Topic);
export const ListTopicsResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    Topics: S.optional(TopicsList),
    NextToken: S.optional(S.String),
}).pipe(ns)).annotate({
    identifier: "ListTopicsResponse",
});
export const OptInPhoneNumberInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ phoneNumber: SensitiveString }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "OptInPhoneNumberInput",
});
export const OptInPhoneNumberResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "OptInPhoneNumberResponse",
});
export const MessageAttributeValue = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    DataType: S.String,
    StringValue: S.optional(S.String),
    BinaryValue: S.optional(T.Blob),
})).annotate({
    identifier: "MessageAttributeValue",
});
export const MessageAttributeMap = /*@__PURE__*/ /*#__PURE__*/ S.Record(S.String.pipe(T.XmlName("Name")), MessageAttributeValue.pipe(T.XmlName("Value"))
    .annotate({ identifier: "MessageAttributeValue" })
    .pipe(S.optional));
export const PublishInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    TopicArn: S.optional(S.String),
    TargetArn: S.optional(S.String),
    PhoneNumber: S.optional(SensitiveString),
    Message: S.String,
    Subject: S.optional(S.String),
    MessageStructure: S.optional(S.String),
    MessageAttributes: S.optional(MessageAttributeMap),
    MessageDeduplicationId: S.optional(S.String),
    MessageGroupId: S.optional(S.String),
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({ identifier: "PublishInput" });
export const PublishResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    MessageId: S.optional(S.String),
    SequenceNumber: S.optional(S.String),
}).pipe(ns)).annotate({
    identifier: "PublishResponse",
});
export const PublishBatchRequestEntry = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    Id: S.String,
    Message: S.String,
    Subject: S.optional(S.String),
    MessageStructure: S.optional(S.String),
    MessageAttributes: S.optional(MessageAttributeMap),
    MessageDeduplicationId: S.optional(S.String),
    MessageGroupId: S.optional(S.String),
})).annotate({
    identifier: "PublishBatchRequestEntry",
});
export const PublishBatchRequestEntryList = /*@__PURE__*/ /*#__PURE__*/ S.Array(PublishBatchRequestEntry);
export const PublishBatchInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    TopicArn: S.String,
    PublishBatchRequestEntries: PublishBatchRequestEntryList,
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "PublishBatchInput",
});
export const PublishBatchResultEntry = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    Id: S.optional(S.String),
    MessageId: S.optional(S.String),
    SequenceNumber: S.optional(S.String),
})).annotate({
    identifier: "PublishBatchResultEntry",
});
export const PublishBatchResultEntryList = /*@__PURE__*/ /*#__PURE__*/ S.Array(PublishBatchResultEntry);
export const BatchResultErrorEntry = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    Id: S.String,
    Code: S.String,
    Message: S.optional(S.String),
    SenderFault: S.Boolean,
})).annotate({
    identifier: "BatchResultErrorEntry",
});
export const BatchResultErrorEntryList = /*@__PURE__*/ /*#__PURE__*/ S.Array(BatchResultErrorEntry);
export const PublishBatchResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    Successful: S.optional(PublishBatchResultEntryList),
    Failed: S.optional(BatchResultErrorEntryList),
}).pipe(ns)).annotate({
    identifier: "PublishBatchResponse",
});
export const PutDataProtectionPolicyInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ ResourceArn: S.String, DataProtectionPolicy: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "PutDataProtectionPolicyInput",
});
export const PutDataProtectionPolicyResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "PutDataProtectionPolicyResponse",
});
export const RemovePermissionInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ TopicArn: S.String, Label: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "RemovePermissionInput",
});
export const RemovePermissionResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "RemovePermissionResponse",
});
export const SetEndpointAttributesInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ EndpointArn: S.String, Attributes: MapStringToString }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "SetEndpointAttributesInput",
});
export const SetEndpointAttributesResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "SetEndpointAttributesResponse",
});
export const SetPlatformApplicationAttributesInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    PlatformApplicationArn: S.String,
    Attributes: MapStringToString,
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "SetPlatformApplicationAttributesInput",
});
export const SetPlatformApplicationAttributesResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "SetPlatformApplicationAttributesResponse",
});
export const SetSMSAttributesInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ attributes: MapStringToString }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "SetSMSAttributesInput",
});
export const SetSMSAttributesResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "SetSMSAttributesResponse",
});
export const SetSubscriptionAttributesInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    SubscriptionArn: S.String,
    AttributeName: S.String,
    AttributeValue: S.optional(S.String),
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "SetSubscriptionAttributesInput",
});
export const SetSubscriptionAttributesResponse = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "SetSubscriptionAttributesResponse",
});
export const SetTopicAttributesInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    TopicArn: S.String,
    AttributeName: S.String,
    AttributeValue: S.optional(S.String),
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "SetTopicAttributesInput",
});
export const SetTopicAttributesResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "SetTopicAttributesResponse",
});
export const SubscribeInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({
    TopicArn: S.String,
    Protocol: S.String,
    Endpoint: S.optional(S.String),
    Attributes: S.optional(SubscriptionAttributesMap),
    ReturnSubscriptionArn: S.optional(S.Boolean),
}).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({ identifier: "SubscribeInput" });
export const SubscribeResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ SubscriptionArn: S.optional(S.String) }).pipe(ns)).annotate({
    identifier: "SubscribeResponse",
});
export const TagResourceRequest = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ ResourceArn: S.String, Tags: TagList }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "TagResourceRequest",
});
export const TagResourceResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "TagResourceResponse",
});
export const UnsubscribeInput = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ SubscriptionArn: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "UnsubscribeInput",
});
export const UnsubscribeResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "UnsubscribeResponse",
});
export const TagKeyList = /*@__PURE__*/ /*#__PURE__*/ S.Array(S.String);
export const UntagResourceRequest = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ ResourceArn: S.String, TagKeys: TagKeyList }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "UntagResourceRequest",
});
export const UntagResourceResponse = /*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "UntagResourceResponse",
});
export const VerifySMSSandboxPhoneNumberInput = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({ PhoneNumber: SensitiveString, OneTimePassword: S.String }).pipe(T.all(ns, T.Http({ method: "POST", uri: "/" }), svc, auth, proto, ver, rules))).annotate({
    identifier: "VerifySMSSandboxPhoneNumberInput",
});
export const VerifySMSSandboxPhoneNumberResult = 
/*@__PURE__*/ /*#__PURE__*/ S.suspend(() => S.Struct({}).pipe(ns)).annotate({
    identifier: "VerifySMSSandboxPhoneNumberResult",
});
//# Errors
export class AuthorizationErrorException extends S.TaggedErrorClass()("AuthorizationErrorException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "AuthorizationError", httpResponseCode: 403 })).pipe(C.withAuthError) {
}
export class InternalErrorException extends S.TaggedErrorClass()("InternalErrorException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "InternalError", httpResponseCode: 500 })).pipe(C.withServerError) {
}
export class InvalidParameterException extends S.TaggedErrorClass()("InvalidParameterException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "InvalidParameter", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class NotFoundException extends S.TaggedErrorClass()("NotFoundException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "NotFound", httpResponseCode: 404 })).pipe(C.withBadRequestError) {
}
export class RequestLimitExceeded extends S.TaggedErrorClass()("RequestLimitExceeded", {}).pipe(C.withThrottlingError) {
}
export class InvalidClientTokenId extends S.TaggedErrorClass()("InvalidClientTokenId", {}).pipe(C.withAuthError) {
}
export class ThrottledException extends S.TaggedErrorClass()("ThrottledException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "Throttled", httpResponseCode: 429 })).pipe(C.withThrottlingError) {
}
export class FilterPolicyLimitExceededException extends S.TaggedErrorClass()("FilterPolicyLimitExceededException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "FilterPolicyLimitExceeded", httpResponseCode: 403 })).pipe(C.withAuthError) {
}
export class ReplayLimitExceededException extends S.TaggedErrorClass()("ReplayLimitExceededException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "ReplayLimitExceeded", httpResponseCode: 403 })).pipe(C.withAuthError) {
}
export class SubscriptionLimitExceededException extends S.TaggedErrorClass()("SubscriptionLimitExceededException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "SubscriptionLimitExceeded", httpResponseCode: 403 })).pipe(C.withAuthError) {
}
export class OptedOutException extends S.TaggedErrorClass()("OptedOutException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "OptedOut", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class UserErrorException extends S.TaggedErrorClass()("UserErrorException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "UserError", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class ConcurrentAccessException extends S.TaggedErrorClass()("ConcurrentAccessException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "ConcurrentAccess", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class InvalidSecurityException extends S.TaggedErrorClass()("InvalidSecurityException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "InvalidSecurity", httpResponseCode: 403 })).pipe(C.withAuthError) {
}
export class StaleTagException extends S.TaggedErrorClass()("StaleTagException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "StaleTag", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class TagLimitExceededException extends S.TaggedErrorClass()("TagLimitExceededException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "TagLimitExceeded", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class TagPolicyException extends S.TaggedErrorClass()("TagPolicyException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "TagPolicy", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class TopicLimitExceededException extends S.TaggedErrorClass()("TopicLimitExceededException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "TopicLimitExceeded", httpResponseCode: 403 })).pipe(C.withAuthError) {
}
export class ResourceNotFoundException extends S.TaggedErrorClass()("ResourceNotFoundException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "ResourceNotFound", httpResponseCode: 404 })).pipe(C.withBadRequestError) {
}
export class InvalidStateException extends S.TaggedErrorClass()("InvalidStateException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "InvalidState", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class ValidationException extends S.TaggedErrorClass()("ValidationException", { Message: S.String }, T.AwsQueryError({ code: "ValidationException", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class EndpointDisabledException extends S.TaggedErrorClass()("EndpointDisabledException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "EndpointDisabled", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class InvalidParameterValueException extends S.TaggedErrorClass()("InvalidParameterValueException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "ParameterValueInvalid", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class KMSAccessDeniedException extends S.TaggedErrorClass()("KMSAccessDeniedException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "KMSAccessDenied", httpResponseCode: 400 })).pipe(C.withBadRequestError, C.withAuthError) {
}
export class KMSDisabledException extends S.TaggedErrorClass()("KMSDisabledException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "KMSDisabled", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class KMSInvalidStateException extends S.TaggedErrorClass()("KMSInvalidStateException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "KMSInvalidState", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class KMSNotFoundException extends S.TaggedErrorClass()("KMSNotFoundException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "KMSNotFound", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class KMSOptInRequired extends S.TaggedErrorClass()("KMSOptInRequired", { message: S.optional(S.String) }, T.AwsQueryError({ code: "KMSOptInRequired", httpResponseCode: 403 })).pipe(C.withAuthError) {
}
export class KMSThrottlingException extends S.TaggedErrorClass()("KMSThrottlingException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "KMSThrottling", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class PlatformApplicationDisabledException extends S.TaggedErrorClass()("PlatformApplicationDisabledException", { message: S.optional(S.String) }, T.AwsQueryError({
    code: "PlatformApplicationDisabled",
    httpResponseCode: 400,
})).pipe(C.withBadRequestError) {
}
export class BatchEntryIdsNotDistinctException extends S.TaggedErrorClass()("BatchEntryIdsNotDistinctException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "BatchEntryIdsNotDistinct", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class BatchRequestTooLongException extends S.TaggedErrorClass()("BatchRequestTooLongException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "BatchRequestTooLong", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class EmptyBatchRequestException extends S.TaggedErrorClass()("EmptyBatchRequestException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "EmptyBatchRequest", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class InvalidBatchEntryIdException extends S.TaggedErrorClass()("InvalidBatchEntryIdException", { message: S.optional(S.String) }, T.AwsQueryError({ code: "InvalidBatchEntryId", httpResponseCode: 400 })).pipe(C.withBadRequestError) {
}
export class TooManyEntriesInBatchRequestException extends S.TaggedErrorClass()("TooManyEntriesInBatchRequestException", { message: S.optional(S.String) }, T.AwsQueryError({
    code: "TooManyEntriesInBatchRequest",
    httpResponseCode: 400,
})).pipe(C.withBadRequestError) {
}
export class VerificationException extends S.TaggedErrorClass()("VerificationException", { Message: S.String, Status: S.String }) {
}
/**
 * Adds a statement to a topic's access control policy, granting access for the specified
 * Amazon Web Services accounts to the specified actions.
 *
 * To remove the ability to change topic permissions, you must deny permissions to
 * the `AddPermission`, `RemovePermission`, and
 * `SetTopicAttributes` actions in your IAM policy.
 */
export const addPermission = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: AddPermissionInput,
    output: AddPermissionResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Accepts a phone number and indicates whether the phone holder has opted out of
 * receiving SMS messages from your Amazon Web Services account. You cannot send SMS messages to a number
 * that is opted out.
 *
 * To resume sending messages, you can opt in the number by using the
 * `OptInPhoneNumber` action.
 */
export const checkIfPhoneNumberIsOptedOut = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: CheckIfPhoneNumberIsOptedOutInput,
    output: CheckIfPhoneNumberIsOptedOutResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        ThrottledException,
    ],
}));
/**
 * Verifies an endpoint owner's intent to receive messages by validating the token sent
 * to the endpoint by an earlier `Subscribe` action. If the token is valid, the
 * action creates a new subscription and returns its Amazon Resource Name (ARN). This call
 * requires an AWS signature only when the `AuthenticateOnUnsubscribe` flag is
 * set to "true".
 */
export const confirmSubscription = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: ConfirmSubscriptionInput,
    output: ConfirmSubscriptionResponse,
    errors: [
        AuthorizationErrorException,
        FilterPolicyLimitExceededException,
        InternalErrorException,
        InvalidParameterException,
        NotFoundException,
        ReplayLimitExceededException,
        SubscriptionLimitExceededException,
    ],
}));
/**
 * Creates a platform application object for one of the supported push notification
 * services, such as APNS and GCM (Firebase Cloud Messaging), to which devices and mobile
 * apps may register. You must specify `PlatformPrincipal` and
 * `PlatformCredential` attributes when using the
 * `CreatePlatformApplication` action.
 *
 * `PlatformPrincipal` and `PlatformCredential` are received from
 * the notification service.
 *
 * - For ADM, `PlatformPrincipal` is `client id` and
 * `PlatformCredential` is `client secret`.
 *
 * - For APNS and `APNS_SANDBOX` using certificate credentials,
 * `PlatformPrincipal` is `SSL certificate` and
 * `PlatformCredential` is `private key`.
 *
 * - For APNS and `APNS_SANDBOX` using token credentials,
 * `PlatformPrincipal` is `signing key ID` and
 * `PlatformCredential` is `signing key`.
 *
 * - For Baidu, `PlatformPrincipal` is `API key` and
 * `PlatformCredential` is `secret key`.
 *
 * - For GCM (Firebase Cloud Messaging) using key credentials, there is no
 * `PlatformPrincipal`. The `PlatformCredential` is
 * `API key`.
 *
 * - For GCM (Firebase Cloud Messaging) using token credentials, there is no
 * `PlatformPrincipal`. The `PlatformCredential` is a
 * JSON formatted private key file. When using the Amazon Web Services CLI or Amazon Web Services SDKs, the
 * file must be in string format and special characters must be ignored. To format
 * the file correctly, Amazon SNS recommends using the following command:
 * `SERVICE_JSON=$(jq @json Package Security
 * Identifier and `PlatformCredential` is secret
 * key.
 *
 * You can use the returned `PlatformApplicationArn` as an attribute for the
 * `CreatePlatformEndpoint` action.
 */
export const createPlatformApplication = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: CreatePlatformApplicationInput,
    output: CreatePlatformApplicationResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
    ],
}));
/**
 * Creates an endpoint for a device and mobile app on one of the supported push
 * notification services, such as GCM (Firebase Cloud Messaging) and APNS.
 * `CreatePlatformEndpoint` requires the `PlatformApplicationArn`
 * that is returned from `CreatePlatformApplication`. You can use the returned
 * `EndpointArn` to send a message to a mobile app or by the
 * `Subscribe` action for subscription to a topic. The
 * `CreatePlatformEndpoint` action is idempotent, so if the requester
 * already owns an endpoint with the same device token and attributes, that endpoint's ARN
 * is returned without creating a new endpoint. For more information, see Using Amazon SNS Mobile Push
 * Notifications.
 *
 * When using `CreatePlatformEndpoint` with Baidu, two attributes must be
 * provided: ChannelId and UserId. The token field must also contain the ChannelId. For
 * more information, see Creating an Amazon SNS Endpoint for
 * Baidu.
 */
export const createPlatformEndpoint = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: CreatePlatformEndpointInput,
    output: CreateEndpointResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Adds a destination phone number to an Amazon Web Services account in the SMS sandbox and sends a
 * one-time password (OTP) to that phone number.
 *
 * When you start using Amazon SNS to send SMS messages, your Amazon Web Services account is in the
 * *SMS sandbox*. The SMS sandbox provides a safe environment for
 * you to try Amazon SNS features without risking your reputation as an SMS sender. While your
 * Amazon Web Services account is in the SMS sandbox, you can use all of the features of Amazon SNS. However, you can send
 * SMS messages only to verified destination phone numbers. For more information, including how to
 * move out of the sandbox to send messages without restrictions,
 * see SMS sandbox in
 * the *Amazon SNS Developer Guide*.
 */
export const createSMSSandboxPhoneNumber = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: CreateSMSSandboxPhoneNumberInput,
    output: CreateSMSSandboxPhoneNumberResult,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        OptedOutException,
        ThrottledException,
        UserErrorException,
    ],
}));
/**
 * Creates a topic to which notifications can be published. Users can create at most
 * 100,000 standard topics (at most 1,000 FIFO topics). For more information, see Creating an Amazon SNS
 * topic in the *Amazon SNS Developer Guide*. This action is
 * idempotent, so if the requester already owns a topic with the specified name, that
 * topic's ARN is returned without creating a new topic.
 */
export const createTopic = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: CreateTopicInput,
    output: CreateTopicResponse,
    errors: [
        AuthorizationErrorException,
        ConcurrentAccessException,
        InternalErrorException,
        InvalidParameterException,
        InvalidSecurityException,
        StaleTagException,
        TagLimitExceededException,
        TagPolicyException,
        TopicLimitExceededException,
    ],
}));
/**
 * Deletes the endpoint for a device and mobile app from Amazon SNS. This action is
 * idempotent. For more information, see Using Amazon SNS Mobile Push
 * Notifications.
 *
 * When you delete an endpoint that is also subscribed to a topic, then you must also
 * unsubscribe the endpoint from the topic.
 */
export const deleteEndpoint = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: DeleteEndpointInput,
    output: DeleteEndpointResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Deletes a platform application object for one of the supported push notification
 * services, such as APNS and GCM (Firebase Cloud Messaging). For more information, see
 * Using Amazon SNS
 * Mobile Push Notifications.
 */
export const deletePlatformApplication = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: DeletePlatformApplicationInput,
    output: DeletePlatformApplicationResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Deletes an Amazon Web Services account's verified or pending phone number from the SMS
 * sandbox.
 *
 * When you start using Amazon SNS to send SMS messages, your Amazon Web Services account is in the
 * *SMS sandbox*. The SMS sandbox provides a safe environment for
 * you to try Amazon SNS features without risking your reputation as an SMS sender. While your
 * Amazon Web Services account is in the SMS sandbox, you can use all of the features of Amazon SNS. However, you can send
 * SMS messages only to verified destination phone numbers. For more information, including how to
 * move out of the sandbox to send messages without restrictions,
 * see SMS sandbox in
 * the *Amazon SNS Developer Guide*.
 */
export const deleteSMSSandboxPhoneNumber = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: DeleteSMSSandboxPhoneNumberInput,
    output: DeleteSMSSandboxPhoneNumberResult,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        ResourceNotFoundException,
        ThrottledException,
        UserErrorException,
    ],
}));
/**
 * Deletes a topic and all its subscriptions. Deleting a topic might prevent some
 * messages previously sent to the topic from being delivered to subscribers. This action
 * is idempotent, so deleting a topic that does not exist does not result in an
 * error.
 */
export const deleteTopic = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: DeleteTopicInput,
    output: DeleteTopicResponse,
    errors: [
        AuthorizationErrorException,
        ConcurrentAccessException,
        InternalErrorException,
        InvalidParameterException,
        InvalidStateException,
        NotFoundException,
        StaleTagException,
        TagPolicyException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Retrieves the specified inline `DataProtectionPolicy` document that is
 * stored in the specified Amazon SNS topic.
 */
export const getDataProtectionPolicy = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: GetDataProtectionPolicyInput,
    output: GetDataProtectionPolicyResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        InvalidSecurityException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Retrieves the endpoint attributes for a device on one of the supported push
 * notification services, such as GCM (Firebase Cloud Messaging) and APNS. For more
 * information, see Using Amazon SNS Mobile Push Notifications.
 */
export const getEndpointAttributes = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: GetEndpointAttributesInput,
    output: GetEndpointAttributesResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Retrieves the attributes of the platform application object for the supported push
 * notification services, such as APNS and GCM (Firebase Cloud Messaging). For more
 * information, see Using Amazon SNS Mobile Push Notifications.
 */
export const getPlatformApplicationAttributes = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: GetPlatformApplicationAttributesInput,
    output: GetPlatformApplicationAttributesResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Returns the settings for sending SMS messages from your Amazon Web Services account.
 *
 * These settings are set with the `SetSMSAttributes` action.
 */
export const getSMSAttributes = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: GetSMSAttributesInput,
    output: GetSMSAttributesResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        ThrottledException,
    ],
}));
/**
 * Retrieves the SMS sandbox status for the calling Amazon Web Services account in the target
 * Amazon Web Services Region.
 *
 * When you start using Amazon SNS to send SMS messages, your Amazon Web Services account is in the
 * *SMS sandbox*. The SMS sandbox provides a safe environment for
 * you to try Amazon SNS features without risking your reputation as an SMS sender. While your
 * Amazon Web Services account is in the SMS sandbox, you can use all of the features of Amazon SNS. However, you can send
 * SMS messages only to verified destination phone numbers. For more information, including how to
 * move out of the sandbox to send messages without restrictions,
 * see SMS sandbox in
 * the *Amazon SNS Developer Guide*.
 */
export const getSMSSandboxAccountStatus = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: GetSMSSandboxAccountStatusInput,
    output: GetSMSSandboxAccountStatusResult,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        ThrottledException,
    ],
}));
/**
 * Returns all of the properties of a subscription.
 */
export const getSubscriptionAttributes = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: GetSubscriptionAttributesInput,
    output: GetSubscriptionAttributesResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        NotFoundException,
    ],
}));
/**
 * Returns all of the properties of a topic. Topic properties returned might differ based
 * on the authorization of the user.
 */
export const getTopicAttributes = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: GetTopicAttributesInput,
    output: GetTopicAttributesResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        InvalidSecurityException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Lists the endpoints and endpoint attributes for devices in a supported push
 * notification service, such as GCM (Firebase Cloud Messaging) and APNS. The results for
 * `ListEndpointsByPlatformApplication` are paginated and return a limited
 * list of endpoints, up to 100. If additional records are available after the first page
 * results, then a NextToken string will be returned. To receive the next page, you call
 * `ListEndpointsByPlatformApplication` again using the NextToken string
 * received from the previous call. When there are no more records to return, NextToken
 * will be null. For more information, see Using Amazon SNS Mobile Push
 * Notifications.
 *
 * This action is throttled at 30 transactions per second (TPS).
 */
export const listEndpointsByPlatformApplication = /*@__PURE__*/ /*#__PURE__*/ API.makePaginated(() => ({
    input: ListEndpointsByPlatformApplicationInput,
    output: ListEndpointsByPlatformApplicationResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
    pagination: {
        inputToken: "NextToken",
        outputToken: "NextToken",
        items: "Endpoints",
    },
}));
/**
 * Lists the calling Amazon Web Services account's dedicated origination numbers and their metadata.
 * For more information about origination numbers, see Origination numbers in the Amazon SNS Developer
 * Guide.
 */
export const listOriginationNumbers = /*@__PURE__*/ /*#__PURE__*/ API.makePaginated(() => ({
    input: ListOriginationNumbersRequest,
    output: ListOriginationNumbersResult,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        ThrottledException,
        ValidationException,
    ],
    pagination: {
        inputToken: "NextToken",
        outputToken: "NextToken",
        items: "PhoneNumbers",
        pageSize: "MaxResults",
    },
}));
/**
 * Returns a list of phone numbers that are opted out, meaning you cannot send SMS
 * messages to them.
 *
 * The results for `ListPhoneNumbersOptedOut` are paginated, and each page
 * returns up to 100 phone numbers. If additional phone numbers are available after the
 * first page of results, then a `NextToken` string will be returned. To receive
 * the next page, you call `ListPhoneNumbersOptedOut` again using the
 * `NextToken` string received from the previous call. When there are no
 * more records to return, `NextToken` will be null.
 */
export const listPhoneNumbersOptedOut = /*@__PURE__*/ /*#__PURE__*/ API.makePaginated(() => ({
    input: ListPhoneNumbersOptedOutInput,
    output: ListPhoneNumbersOptedOutResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        ThrottledException,
    ],
    pagination: {
        inputToken: "nextToken",
        outputToken: "nextToken",
        items: "phoneNumbers",
    },
}));
/**
 * Lists the platform application objects for the supported push notification services,
 * such as APNS and GCM (Firebase Cloud Messaging). The results for
 * `ListPlatformApplications` are paginated and return a limited list of
 * applications, up to 100. If additional records are available after the first page
 * results, then a NextToken string will be returned. To receive the next page, you call
 * `ListPlatformApplications` using the NextToken string received from the
 * previous call. When there are no more records to return, `NextToken` will be
 * null. For more information, see Using Amazon SNS Mobile Push
 * Notifications.
 *
 * This action is throttled at 15 transactions per second (TPS).
 */
export const listPlatformApplications = /*@__PURE__*/ /*#__PURE__*/ API.makePaginated(() => ({
    input: ListPlatformApplicationsInput,
    output: ListPlatformApplicationsResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
    ],
    pagination: {
        inputToken: "NextToken",
        outputToken: "NextToken",
        items: "PlatformApplications",
    },
}));
/**
 * Lists the calling Amazon Web Services account's current verified and pending destination phone
 * numbers in the SMS sandbox.
 *
 * When you start using Amazon SNS to send SMS messages, your Amazon Web Services account is in the
 * *SMS sandbox*. The SMS sandbox provides a safe environment for
 * you to try Amazon SNS features without risking your reputation as an SMS sender. While your
 * Amazon Web Services account is in the SMS sandbox, you can use all of the features of Amazon SNS. However, you can send
 * SMS messages only to verified destination phone numbers. For more information, including how to
 * move out of the sandbox to send messages without restrictions,
 * see SMS sandbox in
 * the *Amazon SNS Developer Guide*.
 */
export const listSMSSandboxPhoneNumbers = /*@__PURE__*/ /*#__PURE__*/ API.makePaginated(() => ({
    input: ListSMSSandboxPhoneNumbersInput,
    output: ListSMSSandboxPhoneNumbersResult,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        ResourceNotFoundException,
        ThrottledException,
    ],
    pagination: {
        inputToken: "NextToken",
        outputToken: "NextToken",
        items: "PhoneNumbers",
        pageSize: "MaxResults",
    },
}));
/**
 * Returns a list of the requester's subscriptions. Each call returns a limited list of
 * subscriptions, up to 100. If there are more subscriptions, a `NextToken` is
 * also returned. Use the `NextToken` parameter in a new
 * `ListSubscriptions` call to get further results.
 *
 * This action is throttled at 30 transactions per second (TPS).
 */
export const listSubscriptions = /*@__PURE__*/ /*#__PURE__*/ API.makePaginated(() => ({
    input: ListSubscriptionsInput,
    output: ListSubscriptionsResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
    ],
    pagination: {
        inputToken: "NextToken",
        outputToken: "NextToken",
        items: "Subscriptions",
    },
}));
/**
 * Returns a list of the subscriptions to a specific topic. Each call returns a limited
 * list of subscriptions, up to 100. If there are more subscriptions, a
 * `NextToken` is also returned. Use the `NextToken` parameter in
 * a new `ListSubscriptionsByTopic` call to get further results.
 *
 * This action is throttled at 30 transactions per second (TPS).
 */
export const listSubscriptionsByTopic = /*@__PURE__*/ /*#__PURE__*/ API.makePaginated(() => ({
    input: ListSubscriptionsByTopicInput,
    output: ListSubscriptionsByTopicResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
    pagination: {
        inputToken: "NextToken",
        outputToken: "NextToken",
        items: "Subscriptions",
    },
}));
/**
 * List all tags added to the specified Amazon SNS topic. For an overview, see Amazon SNS Tags in the
 * *Amazon Simple Notification Service Developer Guide*.
 */
export const listTagsForResource = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: ListTagsForResourceRequest,
    output: ListTagsForResourceResponse,
    errors: [
        AuthorizationErrorException,
        ConcurrentAccessException,
        InvalidParameterException,
        ResourceNotFoundException,
        TagPolicyException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Returns a list of the requester's topics. Each call returns a limited list of topics,
 * up to 100. If there are more topics, a `NextToken` is also returned. Use the
 * `NextToken` parameter in a new `ListTopics` call to get
 * further results.
 *
 * This action is throttled at 30 transactions per second (TPS).
 */
export const listTopics = /*@__PURE__*/ /*#__PURE__*/ API.makePaginated(() => ({
    input: ListTopicsInput,
    output: ListTopicsResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
    ],
    pagination: {
        inputToken: "NextToken",
        outputToken: "NextToken",
        items: "Topics",
    },
}));
/**
 * Use this request to opt in a phone number that is opted out, which enables you to
 * resume sending SMS messages to the number.
 *
 * You can opt in a phone number only once every 30 days.
 */
export const optInPhoneNumber = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: OptInPhoneNumberInput,
    output: OptInPhoneNumberResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        ThrottledException,
    ],
}));
/**
 * Sends a message to an Amazon SNS topic, a text message (SMS message) directly to a phone
 * number, or a message to a mobile platform endpoint (when you specify the
 * `TargetArn`).
 *
 * If you send a message to a topic, Amazon SNS delivers the message to each endpoint that is
 * subscribed to the topic. The format of the message depends on the notification protocol
 * for each subscribed endpoint.
 *
 * When a `messageId` is returned, the message is saved and Amazon SNS immediately
 * delivers it to subscribers.
 *
 * To use the `Publish` action for publishing a message to a mobile endpoint,
 * such as an app on a Kindle device or mobile phone, you must specify the EndpointArn for
 * the TargetArn parameter. The EndpointArn is returned when making a call with the
 * `CreatePlatformEndpoint` action.
 *
 * For more information about formatting messages, see Send Custom
 * Platform-Specific Payloads in Messages to Mobile Devices.
 *
 * You can publish messages only to topics and endpoints in the same
 * Amazon Web Services Region.
 */
export const publish = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: PublishInput,
    output: PublishResponse,
    errors: [
        AuthorizationErrorException,
        EndpointDisabledException,
        InternalErrorException,
        InvalidParameterException,
        InvalidParameterValueException,
        InvalidSecurityException,
        KMSAccessDeniedException,
        KMSDisabledException,
        KMSInvalidStateException,
        KMSNotFoundException,
        KMSOptInRequired,
        KMSThrottlingException,
        NotFoundException,
        PlatformApplicationDisabledException,
        ValidationException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Publishes up to 10 messages to the specified topic in a single batch. This is a batch
 * version of the `Publish` API. If you try to send more than 10 messages in a
 * single batch request, you will receive a `TooManyEntriesInBatchRequest`
 * exception.
 *
 * For FIFO topics, multiple messages within a single batch are published in the order
 * they are sent, and messages are deduplicated within the batch and across batches for
 * five minutes.
 *
 * The result of publishing each message is reported individually in the response.
 * Because the batch request can result in a combination of successful and unsuccessful
 * actions, you should check for batch errors even when the call returns an HTTP status
 * code of 200.
 *
 * The maximum allowed individual message size and the maximum total payload size (the sum
 * of the individual lengths of all of the batched messages) are both 256 KB (262,144
 * bytes).
 *
 * The `PublishBatch` API can send up to 10 messages at a time. If you
 * attempt to send more than 10 messages in one request, you will encounter a
 * `TooManyEntriesInBatchRequest` exception. In such cases, split your
 * messages into multiple requests, each containing no more than 10 messages.
 *
 * Some actions take lists of parameters. These lists are specified using the
 * `param.n` notation. Values of `n` are integers starting from
 * **1**. For example, a parameter list with two elements
 * looks like this:
 *
 * `&AttributeName.1=first`
 *
 * `&AttributeName.2=second`
 *
 * If you send a batch message to a topic, Amazon SNS publishes the batch message to each
 * endpoint that is subscribed to the topic. The format of the batch message depends on the
 * notification protocol for each subscribed endpoint.
 *
 * When a `messageId` is returned, the batch message is saved, and Amazon SNS
 * immediately delivers the message to subscribers.
 */
export const publishBatch = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: PublishBatchInput,
    output: PublishBatchResponse,
    errors: [
        AuthorizationErrorException,
        BatchEntryIdsNotDistinctException,
        BatchRequestTooLongException,
        EmptyBatchRequestException,
        EndpointDisabledException,
        InternalErrorException,
        InvalidBatchEntryIdException,
        InvalidParameterException,
        InvalidParameterValueException,
        InvalidSecurityException,
        KMSAccessDeniedException,
        KMSDisabledException,
        KMSInvalidStateException,
        KMSNotFoundException,
        KMSOptInRequired,
        KMSThrottlingException,
        NotFoundException,
        PlatformApplicationDisabledException,
        TooManyEntriesInBatchRequestException,
        ValidationException,
    ],
}));
/**
 * Adds or updates an inline policy document that is stored in the specified Amazon SNS
 * topic.
 */
export const putDataProtectionPolicy = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: PutDataProtectionPolicyInput,
    output: PutDataProtectionPolicyResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        InvalidSecurityException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Removes a statement from a topic's access control policy.
 *
 * To remove the ability to change topic permissions, you must deny permissions to
 * the `AddPermission`, `RemovePermission`, and
 * `SetTopicAttributes` actions in your IAM policy.
 */
export const removePermission = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: RemovePermissionInput,
    output: RemovePermissionResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Sets the attributes for an endpoint for a device on one of the supported push
 * notification services, such as GCM (Firebase Cloud Messaging) and APNS. For more
 * information, see Using Amazon SNS Mobile Push Notifications.
 */
export const setEndpointAttributes = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: SetEndpointAttributesInput,
    output: SetEndpointAttributesResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Sets the attributes of the platform application object for the supported push
 * notification services, such as APNS and GCM (Firebase Cloud Messaging). For more
 * information, see Using Amazon SNS Mobile Push Notifications. For information on configuring
 * attributes for message delivery status, see Using Amazon SNS Application Attributes for
 * Message Delivery Status.
 */
export const setPlatformApplicationAttributes = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: SetPlatformApplicationAttributesInput,
    output: SetPlatformApplicationAttributesResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Use this request to set the default settings for sending SMS messages and receiving
 * daily SMS usage reports.
 *
 * You can override some of these settings for a single message when you use the
 * `Publish` action with the `MessageAttributes.entry.N`
 * parameter. For more information, see Publishing to a mobile phone
 * in the *Amazon SNS Developer Guide*.
 *
 * To use this operation, you must grant the Amazon SNS service principal
 * (`sns.amazonaws.com`) permission to perform the
 * `s3:ListBucket` action.
 */
export const setSMSAttributes = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: SetSMSAttributesInput,
    output: SetSMSAttributesResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        ThrottledException,
    ],
}));
/**
 * Allows a subscription owner to set an attribute of the subscription to a new
 * value.
 */
export const setSubscriptionAttributes = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: SetSubscriptionAttributesInput,
    output: SetSubscriptionAttributesResponse,
    errors: [
        AuthorizationErrorException,
        FilterPolicyLimitExceededException,
        InternalErrorException,
        InvalidParameterException,
        NotFoundException,
        ReplayLimitExceededException,
    ],
}));
/**
 * Allows a topic owner to set an attribute of the topic to a new value.
 *
 * To remove the ability to change topic permissions, you must deny permissions to
 * the `AddPermission`, `RemovePermission`, and
 * `SetTopicAttributes` actions in your IAM policy.
 */
export const setTopicAttributes = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: SetTopicAttributesInput,
    output: SetTopicAttributesResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        InvalidSecurityException,
        NotFoundException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Subscribes an endpoint to an Amazon SNS topic. If the endpoint type is HTTP/S or email, or
 * if the endpoint and the topic are not in the same Amazon Web Services account, the endpoint owner must
 * run the `ConfirmSubscription` action to confirm the subscription.
 *
 * You call the `ConfirmSubscription` action with the token from the
 * subscription response. Confirmation tokens are valid for two days.
 *
 * This action is throttled at 100 transactions per second (TPS).
 */
export const subscribe = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: SubscribeInput,
    output: SubscribeResponse,
    errors: [
        AuthorizationErrorException,
        FilterPolicyLimitExceededException,
        InternalErrorException,
        InvalidParameterException,
        InvalidSecurityException,
        NotFoundException,
        ReplayLimitExceededException,
        SubscriptionLimitExceededException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Add tags to the specified Amazon SNS topic. For an overview, see Amazon SNS Tags in the
 * *Amazon SNS Developer Guide*.
 *
 * When you use topic tags, keep the following guidelines in mind:
 *
 * - Adding more than 50 tags to a topic isn't recommended.
 *
 * - Tags don't have any semantic meaning. Amazon SNS interprets tags as character
 * strings.
 *
 * - Tags are case-sensitive.
 *
 * - A new tag with a key identical to that of an existing tag overwrites the
 * existing tag.
 *
 * - Tagging actions are limited to 10 TPS per Amazon Web Services account, per Amazon Web Services Region. If
 * your application requires a higher throughput, file a technical support request.
 */
export const tagResource = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: TagResourceRequest,
    output: TagResourceResponse,
    errors: [
        AuthorizationErrorException,
        ConcurrentAccessException,
        InvalidParameterException,
        ResourceNotFoundException,
        StaleTagException,
        TagLimitExceededException,
        TagPolicyException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Deletes a subscription. If the subscription requires authentication for deletion, only
 * the owner of the subscription or the topic's owner can unsubscribe, and an Amazon Web Services
 * signature is required. If the `Unsubscribe` call does not require
 * authentication and the requester is not the subscription owner, a final cancellation
 * message is delivered to the endpoint, so that the endpoint owner can easily resubscribe
 * to the topic if the `Unsubscribe` request was unintended.
 *
 * This action is throttled at 100 transactions per second (TPS).
 */
export const unsubscribe = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: UnsubscribeInput,
    output: UnsubscribeResponse,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        InvalidSecurityException,
        NotFoundException,
    ],
}));
/**
 * Remove tags from the specified Amazon SNS topic. For an overview, see Amazon SNS Tags in the
 * *Amazon SNS Developer Guide*.
 */
export const untagResource = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: UntagResourceRequest,
    output: UntagResourceResponse,
    errors: [
        AuthorizationErrorException,
        ConcurrentAccessException,
        InvalidParameterException,
        ResourceNotFoundException,
        StaleTagException,
        TagLimitExceededException,
        TagPolicyException,
        RequestLimitExceeded,
        InvalidClientTokenId,
    ],
}));
/**
 * Verifies a destination phone number with a one-time password (OTP) for the calling
 * Amazon Web Services account.
 *
 * When you start using Amazon SNS to send SMS messages, your Amazon Web Services account is in the
 * *SMS sandbox*. The SMS sandbox provides a safe environment for
 * you to try Amazon SNS features without risking your reputation as an SMS sender. While your
 * Amazon Web Services account is in the SMS sandbox, you can use all of the features of Amazon SNS. However, you can send
 * SMS messages only to verified destination phone numbers. For more information, including how to
 * move out of the sandbox to send messages without restrictions,
 * see SMS sandbox in
 * the *Amazon SNS Developer Guide*.
 */
export const verifySMSSandboxPhoneNumber = /*@__PURE__*/ /*#__PURE__*/ API.make(() => ({
    input: VerifySMSSandboxPhoneNumberInput,
    output: VerifySMSSandboxPhoneNumberResult,
    errors: [
        AuthorizationErrorException,
        InternalErrorException,
        InvalidParameterException,
        ResourceNotFoundException,
        ThrottledException,
        VerificationException,
    ],
}));
//# sourceMappingURL=sns.js.map