// // Copyright 2010-2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"). // You may not use this file except in compliance with the License. // A copy of the License is located at // // http://aws.amazon.com/apache2.0 // // or in the "license" file accompanying this file. This file is distributed // on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either // express or implied. See the License for the specific language governing // permissions and limitations under the License. // #import "AWSSNSService.h" #import #import #import #import #import #import #import #import #import "AWSSNSResources.h" static NSString *const AWSInfoSNS = @"SNS"; NSString *const AWSSNSSDKVersion = @"2.33.3"; @interface AWSSNSResponseSerializer : AWSXMLResponseSerializer @end @implementation AWSSNSResponseSerializer #pragma mark - Service errors static NSDictionary *errorCodeDictionary = nil; + (void)initialize { errorCodeDictionary = @{ @"AuthorizationError" : @(AWSSNSErrorAuthorizationError), @"BatchEntryIdsNotDistinct" : @(AWSSNSErrorBatchEntryIdsNotDistinct), @"BatchRequestTooLong" : @(AWSSNSErrorBatchRequestTooLong), @"ConcurrentAccess" : @(AWSSNSErrorConcurrentAccess), @"EmptyBatchRequest" : @(AWSSNSErrorEmptyBatchRequest), @"EndpointDisabled" : @(AWSSNSErrorEndpointDisabled), @"FilterPolicyLimitExceeded" : @(AWSSNSErrorFilterPolicyLimitExceeded), @"InternalError" : @(AWSSNSErrorInternalError), @"InvalidBatchEntryId" : @(AWSSNSErrorInvalidBatchEntryId), @"InvalidParameter" : @(AWSSNSErrorInvalidParameter), @"ParameterValueInvalid" : @(AWSSNSErrorInvalidParameterValue), @"InvalidSecurity" : @(AWSSNSErrorInvalidSecurity), @"KMSAccessDenied" : @(AWSSNSErrorKMSAccessDenied), @"KMSDisabled" : @(AWSSNSErrorKMSDisabled), @"KMSInvalidState" : @(AWSSNSErrorKMSInvalidState), @"KMSNotFound" : @(AWSSNSErrorKMSNotFound), @"KMSOptInRequired" : @(AWSSNSErrorKMSOptInRequired), @"KMSThrottling" : @(AWSSNSErrorKMSThrottling), @"NotFound" : @(AWSSNSErrorNotFound), @"OptedOut" : @(AWSSNSErrorOptedOut), @"PlatformApplicationDisabled" : @(AWSSNSErrorPlatformApplicationDisabled), @"ResourceNotFound" : @(AWSSNSErrorResourceNotFound), @"StaleTag" : @(AWSSNSErrorStaleTag), @"SubscriptionLimitExceeded" : @(AWSSNSErrorSubscriptionLimitExceeded), @"TagLimitExceeded" : @(AWSSNSErrorTagLimitExceeded), @"TagPolicy" : @(AWSSNSErrorTagPolicy), @"Throttled" : @(AWSSNSErrorThrottled), @"TooManyEntriesInBatchRequest" : @(AWSSNSErrorTooManyEntriesInBatchRequest), @"TopicLimitExceeded" : @(AWSSNSErrorTopicLimitExceeded), @"UserError" : @(AWSSNSErrorUserError), @"ValidationException" : @(AWSSNSErrorValidation), @"VerificationException" : @(AWSSNSErrorVerification), }; } #pragma mark - - (id)responseObjectForResponse:(NSHTTPURLResponse *)response originalRequest:(NSURLRequest *)originalRequest currentRequest:(NSURLRequest *)currentRequest data:(id)data error:(NSError *__autoreleasing *)error { id responseObject = [super responseObjectForResponse:response originalRequest:originalRequest currentRequest:currentRequest data:data error:error]; if (!*error && [responseObject isKindOfClass:[NSDictionary class]]) { NSDictionary *errorInfo = responseObject[@"Error"]; if (errorInfo[@"Code"] && errorCodeDictionary[errorInfo[@"Code"]]) { if (error) { *error = [NSError errorWithDomain:AWSSNSErrorDomain code:[errorCodeDictionary[errorInfo[@"Code"]] integerValue] userInfo:errorInfo ]; return responseObject; } } else if (errorInfo) { if (error) { *error = [NSError errorWithDomain:AWSSNSErrorDomain code:AWSSNSErrorUnknown userInfo:errorInfo]; return responseObject; } } } if (!*error && response.statusCode/100 != 2) { *error = [NSError errorWithDomain:AWSSNSErrorDomain code:AWSSNSErrorUnknown userInfo:nil]; } if (!*error && [responseObject isKindOfClass:[NSDictionary class]]) { if (self.outputClass) { responseObject = [AWSMTLJSONAdapter modelOfClass:self.outputClass fromJSONDictionary:responseObject error:error]; } } return responseObject; } @end @interface AWSSNSRequestRetryHandler : AWSURLRequestRetryHandler @end @implementation AWSSNSRequestRetryHandler @end @interface AWSRequest() @property (nonatomic, strong) AWSNetworkingRequest *internalRequest; @end @interface AWSSNS() @property (nonatomic, strong) AWSNetworking *networking; @property (nonatomic, strong) AWSServiceConfiguration *configuration; @end @interface AWSServiceConfiguration() @property (nonatomic, strong) AWSEndpoint *endpoint; @end @interface AWSEndpoint() - (void) setRegion:(AWSRegionType)regionType service:(AWSServiceType)serviceType; @end @implementation AWSSNS + (void)initialize { [super initialize]; if (![AWSiOSSDKVersion isEqualToString:AWSSNSSDKVersion]) { @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:[NSString stringWithFormat:@"AWSCore and AWSSNS versions need to match. Check your SDK installation. AWSCore: %@ AWSSNS: %@", AWSiOSSDKVersion, AWSSNSSDKVersion] userInfo:nil]; } } #pragma mark - Setup static AWSSynchronizedMutableDictionary *_serviceClients = nil; + (instancetype)defaultSNS { static AWSSNS *_defaultSNS = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ AWSServiceConfiguration *serviceConfiguration = nil; AWSServiceInfo *serviceInfo = [[AWSInfo defaultAWSInfo] defaultServiceInfo:AWSInfoSNS]; if (serviceInfo) { serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:serviceInfo.region credentialsProvider:serviceInfo.cognitoCredentialsProvider]; } if (!serviceConfiguration) { serviceConfiguration = [AWSServiceManager defaultServiceManager].defaultServiceConfiguration; } if (!serviceConfiguration) { @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"The service configuration is `nil`. You need to configure `awsconfiguration.json`, `Info.plist` or set `defaultServiceConfiguration` before using this method." userInfo:nil]; } _defaultSNS = [[AWSSNS alloc] initWithConfiguration:serviceConfiguration]; }); return _defaultSNS; } + (void)registerSNSWithConfiguration:(AWSServiceConfiguration *)configuration forKey:(NSString *)key { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _serviceClients = [AWSSynchronizedMutableDictionary new]; }); [_serviceClients setObject:[[AWSSNS alloc] initWithConfiguration:configuration] forKey:key]; } + (instancetype)SNSForKey:(NSString *)key { @synchronized(self) { AWSSNS *serviceClient = [_serviceClients objectForKey:key]; if (serviceClient) { return serviceClient; } AWSServiceInfo *serviceInfo = [[AWSInfo defaultAWSInfo] serviceInfo:AWSInfoSNS forKey:key]; if (serviceInfo) { AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:serviceInfo.region credentialsProvider:serviceInfo.cognitoCredentialsProvider]; [AWSSNS registerSNSWithConfiguration:serviceConfiguration forKey:key]; } return [_serviceClients objectForKey:key]; } } + (void)removeSNSForKey:(NSString *)key { [_serviceClients removeObjectForKey:key]; } - (instancetype)init { @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"`- init` is not a valid initializer. Use `+ defaultSNS` or `+ SNSForKey:` instead." userInfo:nil]; return nil; } #pragma mark - - (instancetype)initWithConfiguration:(AWSServiceConfiguration *)configuration { if (self = [super init]) { _configuration = [configuration copy]; if(!configuration.endpoint){ _configuration.endpoint = [[AWSEndpoint alloc] initWithRegion:_configuration.regionType service:AWSServiceSNS useUnsafeURL:NO]; }else{ [_configuration.endpoint setRegion:_configuration.regionType service:AWSServiceSNS]; } AWSSignatureV4Signer *signer = [[AWSSignatureV4Signer alloc] initWithCredentialsProvider:_configuration.credentialsProvider endpoint:_configuration.endpoint]; AWSNetworkingRequestInterceptor *baseInterceptor = [[AWSNetworkingRequestInterceptor alloc] initWithUserAgent:_configuration.userAgent]; _configuration.requestInterceptors = @[baseInterceptor, signer]; _configuration.baseURL = _configuration.endpoint.URL; _configuration.retryHandler = [[AWSSNSRequestRetryHandler alloc] initWithMaximumRetryCount:_configuration.maxRetryCount]; _networking = [[AWSNetworking alloc] initWithConfiguration:_configuration]; } return self; } - (AWSTask *)invokeRequest:(AWSRequest *)request HTTPMethod:(AWSHTTPMethod)HTTPMethod URLString:(NSString *) URLString targetPrefix:(NSString *)targetPrefix operationName:(NSString *)operationName outputClass:(Class)outputClass { @autoreleasepool { if (!request) { request = [AWSRequest new]; } AWSNetworkingRequest *networkingRequest = request.internalRequest; if (request) { networkingRequest.parameters = [[AWSMTLJSONAdapter JSONDictionaryFromModel:request] aws_removeNullValues]; } else { networkingRequest.parameters = @{}; } networkingRequest.HTTPMethod = HTTPMethod; networkingRequest.requestSerializer = [[AWSQueryStringRequestSerializer alloc] initWithJSONDefinition:[[AWSSNSResources sharedInstance] JSONObject] actionName:operationName]; networkingRequest.responseSerializer = [[AWSSNSResponseSerializer alloc] initWithJSONDefinition:[[AWSSNSResources sharedInstance] JSONObject] actionName:operationName outputClass:outputClass]; return [self.networking sendRequest:networkingRequest]; } } #pragma mark - Service method - (AWSTask *)addPermission:(AWSSNSAddPermissionInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"AddPermission" outputClass:nil]; } - (void)addPermission:(AWSSNSAddPermissionInput *)request completionHandler:(void (^)(NSError *error))completionHandler { [[self addPermission:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { NSError *error = task.error; if (completionHandler) { completionHandler(error); } return nil; }]; } - (AWSTask *)checkIfPhoneNumberIsOptedOut:(AWSSNSCheckIfPhoneNumberIsOptedOutInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"CheckIfPhoneNumberIsOptedOut" outputClass:[AWSSNSCheckIfPhoneNumberIsOptedOutResponse class]]; } - (void)checkIfPhoneNumberIsOptedOut:(AWSSNSCheckIfPhoneNumberIsOptedOutInput *)request completionHandler:(void (^)(AWSSNSCheckIfPhoneNumberIsOptedOutResponse *response, NSError *error))completionHandler { [[self checkIfPhoneNumberIsOptedOut:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSCheckIfPhoneNumberIsOptedOutResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)confirmSubscription:(AWSSNSConfirmSubscriptionInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"ConfirmSubscription" outputClass:[AWSSNSConfirmSubscriptionResponse class]]; } - (void)confirmSubscription:(AWSSNSConfirmSubscriptionInput *)request completionHandler:(void (^)(AWSSNSConfirmSubscriptionResponse *response, NSError *error))completionHandler { [[self confirmSubscription:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSConfirmSubscriptionResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)createPlatformApplication:(AWSSNSCreatePlatformApplicationInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"CreatePlatformApplication" outputClass:[AWSSNSCreatePlatformApplicationResponse class]]; } - (void)createPlatformApplication:(AWSSNSCreatePlatformApplicationInput *)request completionHandler:(void (^)(AWSSNSCreatePlatformApplicationResponse *response, NSError *error))completionHandler { [[self createPlatformApplication:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSCreatePlatformApplicationResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)createPlatformEndpoint:(AWSSNSCreatePlatformEndpointInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"CreatePlatformEndpoint" outputClass:[AWSSNSCreateEndpointResponse class]]; } - (void)createPlatformEndpoint:(AWSSNSCreatePlatformEndpointInput *)request completionHandler:(void (^)(AWSSNSCreateEndpointResponse *response, NSError *error))completionHandler { [[self createPlatformEndpoint:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSCreateEndpointResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)createSMSSandboxPhoneNumber:(AWSSNSCreateSMSSandboxPhoneNumberInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"CreateSMSSandboxPhoneNumber" outputClass:[AWSSNSCreateSMSSandboxPhoneNumberResult class]]; } - (void)createSMSSandboxPhoneNumber:(AWSSNSCreateSMSSandboxPhoneNumberInput *)request completionHandler:(void (^)(AWSSNSCreateSMSSandboxPhoneNumberResult *response, NSError *error))completionHandler { [[self createSMSSandboxPhoneNumber:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSCreateSMSSandboxPhoneNumberResult *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)createTopic:(AWSSNSCreateTopicInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"CreateTopic" outputClass:[AWSSNSCreateTopicResponse class]]; } - (void)createTopic:(AWSSNSCreateTopicInput *)request completionHandler:(void (^)(AWSSNSCreateTopicResponse *response, NSError *error))completionHandler { [[self createTopic:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSCreateTopicResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)deleteEndpoint:(AWSSNSDeleteEndpointInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"DeleteEndpoint" outputClass:nil]; } - (void)deleteEndpoint:(AWSSNSDeleteEndpointInput *)request completionHandler:(void (^)(NSError *error))completionHandler { [[self deleteEndpoint:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { NSError *error = task.error; if (completionHandler) { completionHandler(error); } return nil; }]; } - (AWSTask *)deletePlatformApplication:(AWSSNSDeletePlatformApplicationInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"DeletePlatformApplication" outputClass:nil]; } - (void)deletePlatformApplication:(AWSSNSDeletePlatformApplicationInput *)request completionHandler:(void (^)(NSError *error))completionHandler { [[self deletePlatformApplication:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { NSError *error = task.error; if (completionHandler) { completionHandler(error); } return nil; }]; } - (AWSTask *)deleteSMSSandboxPhoneNumber:(AWSSNSDeleteSMSSandboxPhoneNumberInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"DeleteSMSSandboxPhoneNumber" outputClass:[AWSSNSDeleteSMSSandboxPhoneNumberResult class]]; } - (void)deleteSMSSandboxPhoneNumber:(AWSSNSDeleteSMSSandboxPhoneNumberInput *)request completionHandler:(void (^)(AWSSNSDeleteSMSSandboxPhoneNumberResult *response, NSError *error))completionHandler { [[self deleteSMSSandboxPhoneNumber:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSDeleteSMSSandboxPhoneNumberResult *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)deleteTopic:(AWSSNSDeleteTopicInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"DeleteTopic" outputClass:nil]; } - (void)deleteTopic:(AWSSNSDeleteTopicInput *)request completionHandler:(void (^)(NSError *error))completionHandler { [[self deleteTopic:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { NSError *error = task.error; if (completionHandler) { completionHandler(error); } return nil; }]; } - (AWSTask *)getDataProtectionPolicy:(AWSSNSGetDataProtectionPolicyInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"GetDataProtectionPolicy" outputClass:[AWSSNSGetDataProtectionPolicyResponse class]]; } - (void)getDataProtectionPolicy:(AWSSNSGetDataProtectionPolicyInput *)request completionHandler:(void (^)(AWSSNSGetDataProtectionPolicyResponse *response, NSError *error))completionHandler { [[self getDataProtectionPolicy:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSGetDataProtectionPolicyResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)getEndpointAttributes:(AWSSNSGetEndpointAttributesInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"GetEndpointAttributes" outputClass:[AWSSNSGetEndpointAttributesResponse class]]; } - (void)getEndpointAttributes:(AWSSNSGetEndpointAttributesInput *)request completionHandler:(void (^)(AWSSNSGetEndpointAttributesResponse *response, NSError *error))completionHandler { [[self getEndpointAttributes:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSGetEndpointAttributesResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)getPlatformApplicationAttributes:(AWSSNSGetPlatformApplicationAttributesInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"GetPlatformApplicationAttributes" outputClass:[AWSSNSGetPlatformApplicationAttributesResponse class]]; } - (void)getPlatformApplicationAttributes:(AWSSNSGetPlatformApplicationAttributesInput *)request completionHandler:(void (^)(AWSSNSGetPlatformApplicationAttributesResponse *response, NSError *error))completionHandler { [[self getPlatformApplicationAttributes:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSGetPlatformApplicationAttributesResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)getSMSAttributes:(AWSSNSGetSMSAttributesInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"GetSMSAttributes" outputClass:[AWSSNSGetSMSAttributesResponse class]]; } - (void)getSMSAttributes:(AWSSNSGetSMSAttributesInput *)request completionHandler:(void (^)(AWSSNSGetSMSAttributesResponse *response, NSError *error))completionHandler { [[self getSMSAttributes:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSGetSMSAttributesResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)getSMSSandboxAccountStatus:(AWSSNSGetSMSSandboxAccountStatusInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"GetSMSSandboxAccountStatus" outputClass:[AWSSNSGetSMSSandboxAccountStatusResult class]]; } - (void)getSMSSandboxAccountStatus:(AWSSNSGetSMSSandboxAccountStatusInput *)request completionHandler:(void (^)(AWSSNSGetSMSSandboxAccountStatusResult *response, NSError *error))completionHandler { [[self getSMSSandboxAccountStatus:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSGetSMSSandboxAccountStatusResult *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)getSubscriptionAttributes:(AWSSNSGetSubscriptionAttributesInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"GetSubscriptionAttributes" outputClass:[AWSSNSGetSubscriptionAttributesResponse class]]; } - (void)getSubscriptionAttributes:(AWSSNSGetSubscriptionAttributesInput *)request completionHandler:(void (^)(AWSSNSGetSubscriptionAttributesResponse *response, NSError *error))completionHandler { [[self getSubscriptionAttributes:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSGetSubscriptionAttributesResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)getTopicAttributes:(AWSSNSGetTopicAttributesInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"GetTopicAttributes" outputClass:[AWSSNSGetTopicAttributesResponse class]]; } - (void)getTopicAttributes:(AWSSNSGetTopicAttributesInput *)request completionHandler:(void (^)(AWSSNSGetTopicAttributesResponse *response, NSError *error))completionHandler { [[self getTopicAttributes:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSGetTopicAttributesResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)listEndpointsByPlatformApplication:(AWSSNSListEndpointsByPlatformApplicationInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"ListEndpointsByPlatformApplication" outputClass:[AWSSNSListEndpointsByPlatformApplicationResponse class]]; } - (void)listEndpointsByPlatformApplication:(AWSSNSListEndpointsByPlatformApplicationInput *)request completionHandler:(void (^)(AWSSNSListEndpointsByPlatformApplicationResponse *response, NSError *error))completionHandler { [[self listEndpointsByPlatformApplication:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSListEndpointsByPlatformApplicationResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)listOriginationNumbers:(AWSSNSListOriginationNumbersRequest *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"ListOriginationNumbers" outputClass:[AWSSNSListOriginationNumbersResult class]]; } - (void)listOriginationNumbers:(AWSSNSListOriginationNumbersRequest *)request completionHandler:(void (^)(AWSSNSListOriginationNumbersResult *response, NSError *error))completionHandler { [[self listOriginationNumbers:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSListOriginationNumbersResult *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)listPhoneNumbersOptedOut:(AWSSNSListPhoneNumbersOptedOutInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"ListPhoneNumbersOptedOut" outputClass:[AWSSNSListPhoneNumbersOptedOutResponse class]]; } - (void)listPhoneNumbersOptedOut:(AWSSNSListPhoneNumbersOptedOutInput *)request completionHandler:(void (^)(AWSSNSListPhoneNumbersOptedOutResponse *response, NSError *error))completionHandler { [[self listPhoneNumbersOptedOut:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSListPhoneNumbersOptedOutResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)listPlatformApplications:(AWSSNSListPlatformApplicationsInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"ListPlatformApplications" outputClass:[AWSSNSListPlatformApplicationsResponse class]]; } - (void)listPlatformApplications:(AWSSNSListPlatformApplicationsInput *)request completionHandler:(void (^)(AWSSNSListPlatformApplicationsResponse *response, NSError *error))completionHandler { [[self listPlatformApplications:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSListPlatformApplicationsResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)listSMSSandboxPhoneNumbers:(AWSSNSListSMSSandboxPhoneNumbersInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"ListSMSSandboxPhoneNumbers" outputClass:[AWSSNSListSMSSandboxPhoneNumbersResult class]]; } - (void)listSMSSandboxPhoneNumbers:(AWSSNSListSMSSandboxPhoneNumbersInput *)request completionHandler:(void (^)(AWSSNSListSMSSandboxPhoneNumbersResult *response, NSError *error))completionHandler { [[self listSMSSandboxPhoneNumbers:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSListSMSSandboxPhoneNumbersResult *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)listSubscriptions:(AWSSNSListSubscriptionsInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"ListSubscriptions" outputClass:[AWSSNSListSubscriptionsResponse class]]; } - (void)listSubscriptions:(AWSSNSListSubscriptionsInput *)request completionHandler:(void (^)(AWSSNSListSubscriptionsResponse *response, NSError *error))completionHandler { [[self listSubscriptions:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSListSubscriptionsResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)listSubscriptionsByTopic:(AWSSNSListSubscriptionsByTopicInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"ListSubscriptionsByTopic" outputClass:[AWSSNSListSubscriptionsByTopicResponse class]]; } - (void)listSubscriptionsByTopic:(AWSSNSListSubscriptionsByTopicInput *)request completionHandler:(void (^)(AWSSNSListSubscriptionsByTopicResponse *response, NSError *error))completionHandler { [[self listSubscriptionsByTopic:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSListSubscriptionsByTopicResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)listTagsForResource:(AWSSNSListTagsForResourceRequest *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"ListTagsForResource" outputClass:[AWSSNSListTagsForResourceResponse class]]; } - (void)listTagsForResource:(AWSSNSListTagsForResourceRequest *)request completionHandler:(void (^)(AWSSNSListTagsForResourceResponse *response, NSError *error))completionHandler { [[self listTagsForResource:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSListTagsForResourceResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)listTopics:(AWSSNSListTopicsInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"ListTopics" outputClass:[AWSSNSListTopicsResponse class]]; } - (void)listTopics:(AWSSNSListTopicsInput *)request completionHandler:(void (^)(AWSSNSListTopicsResponse *response, NSError *error))completionHandler { [[self listTopics:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSListTopicsResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)optInPhoneNumber:(AWSSNSOptInPhoneNumberInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"OptInPhoneNumber" outputClass:[AWSSNSOptInPhoneNumberResponse class]]; } - (void)optInPhoneNumber:(AWSSNSOptInPhoneNumberInput *)request completionHandler:(void (^)(AWSSNSOptInPhoneNumberResponse *response, NSError *error))completionHandler { [[self optInPhoneNumber:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSOptInPhoneNumberResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)publish:(AWSSNSPublishInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"Publish" outputClass:[AWSSNSPublishResponse class]]; } - (void)publish:(AWSSNSPublishInput *)request completionHandler:(void (^)(AWSSNSPublishResponse *response, NSError *error))completionHandler { [[self publish:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSPublishResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)publishBatch:(AWSSNSPublishBatchInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"PublishBatch" outputClass:[AWSSNSPublishBatchResponse class]]; } - (void)publishBatch:(AWSSNSPublishBatchInput *)request completionHandler:(void (^)(AWSSNSPublishBatchResponse *response, NSError *error))completionHandler { [[self publishBatch:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSPublishBatchResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)putDataProtectionPolicy:(AWSSNSPutDataProtectionPolicyInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"PutDataProtectionPolicy" outputClass:nil]; } - (void)putDataProtectionPolicy:(AWSSNSPutDataProtectionPolicyInput *)request completionHandler:(void (^)(NSError *error))completionHandler { [[self putDataProtectionPolicy:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { NSError *error = task.error; if (completionHandler) { completionHandler(error); } return nil; }]; } - (AWSTask *)removePermission:(AWSSNSRemovePermissionInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"RemovePermission" outputClass:nil]; } - (void)removePermission:(AWSSNSRemovePermissionInput *)request completionHandler:(void (^)(NSError *error))completionHandler { [[self removePermission:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { NSError *error = task.error; if (completionHandler) { completionHandler(error); } return nil; }]; } - (AWSTask *)setEndpointAttributes:(AWSSNSSetEndpointAttributesInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"SetEndpointAttributes" outputClass:nil]; } - (void)setEndpointAttributes:(AWSSNSSetEndpointAttributesInput *)request completionHandler:(void (^)(NSError *error))completionHandler { [[self setEndpointAttributes:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { NSError *error = task.error; if (completionHandler) { completionHandler(error); } return nil; }]; } - (AWSTask *)setPlatformApplicationAttributes:(AWSSNSSetPlatformApplicationAttributesInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"SetPlatformApplicationAttributes" outputClass:nil]; } - (void)setPlatformApplicationAttributes:(AWSSNSSetPlatformApplicationAttributesInput *)request completionHandler:(void (^)(NSError *error))completionHandler { [[self setPlatformApplicationAttributes:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { NSError *error = task.error; if (completionHandler) { completionHandler(error); } return nil; }]; } - (AWSTask *)setSMSAttributes:(AWSSNSSetSMSAttributesInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"SetSMSAttributes" outputClass:[AWSSNSSetSMSAttributesResponse class]]; } - (void)setSMSAttributes:(AWSSNSSetSMSAttributesInput *)request completionHandler:(void (^)(AWSSNSSetSMSAttributesResponse *response, NSError *error))completionHandler { [[self setSMSAttributes:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSSetSMSAttributesResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)setSubscriptionAttributes:(AWSSNSSetSubscriptionAttributesInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"SetSubscriptionAttributes" outputClass:nil]; } - (void)setSubscriptionAttributes:(AWSSNSSetSubscriptionAttributesInput *)request completionHandler:(void (^)(NSError *error))completionHandler { [[self setSubscriptionAttributes:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { NSError *error = task.error; if (completionHandler) { completionHandler(error); } return nil; }]; } - (AWSTask *)setTopicAttributes:(AWSSNSSetTopicAttributesInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"SetTopicAttributes" outputClass:nil]; } - (void)setTopicAttributes:(AWSSNSSetTopicAttributesInput *)request completionHandler:(void (^)(NSError *error))completionHandler { [[self setTopicAttributes:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { NSError *error = task.error; if (completionHandler) { completionHandler(error); } return nil; }]; } - (AWSTask *)subscribe:(AWSSNSSubscribeInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"Subscribe" outputClass:[AWSSNSSubscribeResponse class]]; } - (void)subscribe:(AWSSNSSubscribeInput *)request completionHandler:(void (^)(AWSSNSSubscribeResponse *response, NSError *error))completionHandler { [[self subscribe:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSSubscribeResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)tagResource:(AWSSNSTagResourceRequest *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"TagResource" outputClass:[AWSSNSTagResourceResponse class]]; } - (void)tagResource:(AWSSNSTagResourceRequest *)request completionHandler:(void (^)(AWSSNSTagResourceResponse *response, NSError *error))completionHandler { [[self tagResource:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSTagResourceResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)unsubscribe:(AWSSNSUnsubscribeInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"Unsubscribe" outputClass:nil]; } - (void)unsubscribe:(AWSSNSUnsubscribeInput *)request completionHandler:(void (^)(NSError *error))completionHandler { [[self unsubscribe:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { NSError *error = task.error; if (completionHandler) { completionHandler(error); } return nil; }]; } - (AWSTask *)untagResource:(AWSSNSUntagResourceRequest *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"UntagResource" outputClass:[AWSSNSUntagResourceResponse class]]; } - (void)untagResource:(AWSSNSUntagResourceRequest *)request completionHandler:(void (^)(AWSSNSUntagResourceResponse *response, NSError *error))completionHandler { [[self untagResource:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSUntagResourceResponse *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } - (AWSTask *)verifySMSSandboxPhoneNumber:(AWSSNSVerifySMSSandboxPhoneNumberInput *)request { return [self invokeRequest:request HTTPMethod:AWSHTTPMethodPOST URLString:@"" targetPrefix:@"" operationName:@"VerifySMSSandboxPhoneNumber" outputClass:[AWSSNSVerifySMSSandboxPhoneNumberResult class]]; } - (void)verifySMSSandboxPhoneNumber:(AWSSNSVerifySMSSandboxPhoneNumberInput *)request completionHandler:(void (^)(AWSSNSVerifySMSSandboxPhoneNumberResult *response, NSError *error))completionHandler { [[self verifySMSSandboxPhoneNumber:request] continueWithBlock:^id _Nullable(AWSTask * _Nonnull task) { AWSSNSVerifySMSSandboxPhoneNumberResult *result = task.result; NSError *error = task.error; if (completionHandler) { completionHandler(result, error); } return nil; }]; } #pragma mark - @end