diff --git a/.changelog/12659648a3074e19bc0aa0f0b0ee6928.json b/.changelog/12659648a3074e19bc0aa0f0b0ee6928.json new file mode 100644 index 00000000000..8430b60beb4 --- /dev/null +++ b/.changelog/12659648a3074e19bc0aa0f0b0ee6928.json @@ -0,0 +1,8 @@ +{ + "id": "12659648-a307-4e19-bc0a-a0f0b0ee6928", + "type": "feature", + "description": "Updated condition key inference from Workload Estimate, Bill Scenario, and Bill Estimate resources. Updated documentation links.", + "modules": [ + "service/bcmpricingcalculator" + ] +} \ No newline at end of file diff --git a/.changelog/1663b7a4b7e745ae9d611d24dd25ec83.json b/.changelog/1663b7a4b7e745ae9d611d24dd25ec83.json new file mode 100644 index 00000000000..b0d1ffcb1e8 --- /dev/null +++ b/.changelog/1663b7a4b7e745ae9d611d24dd25ec83.json @@ -0,0 +1,8 @@ +{ + "id": "1663b7a4-b7e7-45ae-9d61-1d24dd25ec83", + "type": "documentation", + "description": "Doc only update to examples for DeleteMultiRegionClusters \u0026 CreateMultiRegionClusters", + "modules": [ + "service/dsql" + ] +} \ No newline at end of file diff --git a/.changelog/4ea9c355e6b54bbda80350a7b486a50b.json b/.changelog/4ea9c355e6b54bbda80350a7b486a50b.json new file mode 100644 index 00000000000..3f1876b5233 --- /dev/null +++ b/.changelog/4ea9c355e6b54bbda80350a7b486a50b.json @@ -0,0 +1,8 @@ +{ + "id": "4ea9c355-e6b5-4bbd-a803-50a7b486a50b", + "type": "feature", + "description": "Introduces support for creating DEED (Deterministic Easy-DKIM) identities.", + "modules": [ + "service/sesv2" + ] +} \ No newline at end of file diff --git a/.changelog/61fb913176e94bcfb2724ba1064987fa.json b/.changelog/61fb913176e94bcfb2724ba1064987fa.json new file mode 100644 index 00000000000..ebccf29b423 --- /dev/null +++ b/.changelog/61fb913176e94bcfb2724ba1064987fa.json @@ -0,0 +1,8 @@ +{ + "id": "61fb9131-76e9-4bcf-b272-4ba1064987fa", + "type": "documentation", + "description": "Doc only update for AAS Predictive Scaling policy configuration API.", + "modules": [ + "service/applicationautoscaling" + ] +} \ No newline at end of file diff --git a/.changelog/7acd60b316ce4c309a041258bbc4d824.json b/.changelog/7acd60b316ce4c309a041258bbc4d824.json new file mode 100644 index 00000000000..964bfd2191e --- /dev/null +++ b/.changelog/7acd60b316ce4c309a041258bbc4d824.json @@ -0,0 +1,8 @@ +{ + "id": "7acd60b3-16ce-4c30-9a04-1258bbc4d824", + "type": "feature", + "description": "Update KxCommandLineArgument value parameter regex to allow for spaces and semicolons", + "modules": [ + "service/finspace" + ] +} \ No newline at end of file diff --git a/.changelog/8dbd2253fe7d4235945c9d9ca5814ba5.json b/.changelog/8dbd2253fe7d4235945c9d9ca5814ba5.json new file mode 100644 index 00000000000..28be32936ba --- /dev/null +++ b/.changelog/8dbd2253fe7d4235945c9d9ca5814ba5.json @@ -0,0 +1,8 @@ +{ + "id": "8dbd2253-fe7d-4235-945c-9d9ca5814ba5", + "type": "feature", + "description": "Add support for Push Notifications for Amazon Connect chat. With Push Notifications enabled an alert could be sent to customers about new messages even when they aren't actively using the mobile application.", + "modules": [ + "service/connect" + ] +} \ No newline at end of file diff --git a/.changelog/fd1431c3174e44c69e30fc1a066deba8.json b/.changelog/fd1431c3174e44c69e30fc1a066deba8.json new file mode 100644 index 00000000000..366c94108c0 --- /dev/null +++ b/.changelog/fd1431c3174e44c69e30fc1a066deba8.json @@ -0,0 +1,8 @@ +{ + "id": "fd1431c3-174e-44c6-9e30-fc1a066deba8", + "type": "feature", + "description": "IVS Real-Time now offers customers the ability to customize thumbnails recording mode and interval for both Individual Participant Recording (IPR) and Server-Side Compositions (SSC).", + "modules": [ + "service/ivsrealtime" + ] +} \ No newline at end of file diff --git a/service/applicationautoscaling/types/types.go b/service/applicationautoscaling/types/types.go index 7a37ccdeb14..56056c46afd 100644 --- a/service/applicationautoscaling/types/types.go +++ b/service/applicationautoscaling/types/types.go @@ -385,7 +385,9 @@ type PredictiveScalingMetricStat struct { noSmithyDocumentSerde } -// Represents a predictive scaling policy configuration. +// Represents a predictive scaling policy configuration. Predictive scaling is +// +// supported on Amazon ECS services. type PredictiveScalingPolicyConfiguration struct { // This structure includes the metrics and target utilization to use for diff --git a/service/connect/api_op_CreatePushNotificationRegistration.go b/service/connect/api_op_CreatePushNotificationRegistration.go new file mode 100644 index 00000000000..295703fe44d --- /dev/null +++ b/service/connect/api_op_CreatePushNotificationRegistration.go @@ -0,0 +1,229 @@ +// Code generated by smithy-go-codegen DO NOT EDIT. + +package connect + +import ( + "context" + "fmt" + awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" + "github.com/aws/aws-sdk-go-v2/service/connect/types" + "github.com/aws/smithy-go/middleware" + smithyhttp "github.com/aws/smithy-go/transport/http" +) + +// Creates registration for a device token and a chat contact to receive real-time +// push notifications. For more information about push notifications, see [Set up push notifications in Amazon Connect for mobile chat]in the +// Amazon Connect Administrator Guide. +// +// [Set up push notifications in Amazon Connect for mobile chat]: https://docs.aws.amazon.com/connect/latest/adminguide/set-up-push-notifications-for-mobile-chat.html +func (c *Client) CreatePushNotificationRegistration(ctx context.Context, params *CreatePushNotificationRegistrationInput, optFns ...func(*Options)) (*CreatePushNotificationRegistrationOutput, error) { + if params == nil { + params = &CreatePushNotificationRegistrationInput{} + } + + result, metadata, err := c.invokeOperation(ctx, "CreatePushNotificationRegistration", params, optFns, c.addOperationCreatePushNotificationRegistrationMiddlewares) + if err != nil { + return nil, err + } + + out := result.(*CreatePushNotificationRegistrationOutput) + out.ResultMetadata = metadata + return out, nil +} + +type CreatePushNotificationRegistrationInput struct { + + // The contact configuration for push notification registration. + // + // This member is required. + ContactConfiguration *types.ContactConfiguration + + // The push notification token issued by the Apple or Google gateways. + // + // This member is required. + DeviceToken *string + + // The device type to use when sending the message. + // + // This member is required. + DeviceType types.DeviceType + + // The identifier of the Amazon Connect instance. You can [find the instance ID] in the Amazon Resource + // Name (ARN) of the instance. + // + // [find the instance ID]: https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html + // + // This member is required. + InstanceId *string + + // The Amazon Resource Name (ARN) of the Pinpoint application. + // + // This member is required. + PinpointAppArn *string + + // A unique, case-sensitive identifier that you provide to ensure the idempotency + // of the request. If not provided, the Amazon Web Services SDK populates this + // field. For more information about idempotency, see [Making retries safe with idempotent APIs]. + // + // [Making retries safe with idempotent APIs]: https://aws.amazon.com/builders-library/making-retries-safe-with-idempotent-APIs/ + ClientToken *string + + noSmithyDocumentSerde +} + +type CreatePushNotificationRegistrationOutput struct { + + // The identifier for the registration. + // + // This member is required. + RegistrationId *string + + // Metadata pertaining to the operation's result. + ResultMetadata middleware.Metadata + + noSmithyDocumentSerde +} + +func (c *Client) addOperationCreatePushNotificationRegistrationMiddlewares(stack *middleware.Stack, options Options) (err error) { + if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil { + return err + } + err = stack.Serialize.Add(&awsRestjson1_serializeOpCreatePushNotificationRegistration{}, middleware.After) + if err != nil { + return err + } + err = stack.Deserialize.Add(&awsRestjson1_deserializeOpCreatePushNotificationRegistration{}, middleware.After) + if err != nil { + return err + } + if err := addProtocolFinalizerMiddlewares(stack, options, "CreatePushNotificationRegistration"); err != nil { + return fmt.Errorf("add protocol finalizers: %v", err) + } + + if err = addlegacyEndpointContextSetter(stack, options); err != nil { + return err + } + if err = addSetLoggerMiddleware(stack, options); err != nil { + return err + } + if err = addClientRequestID(stack); err != nil { + return err + } + if err = addComputeContentLength(stack); err != nil { + return err + } + if err = addResolveEndpointMiddleware(stack, options); err != nil { + return err + } + if err = addComputePayloadSHA256(stack); err != nil { + return err + } + if err = addRetry(stack, options); err != nil { + return err + } + if err = addRawResponseToMetadata(stack); err != nil { + return err + } + if err = addRecordResponseTiming(stack); err != nil { + return err + } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } + if err = addClientUserAgent(stack, options); err != nil { + return err + } + if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil { + return err + } + if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil { + return err + } + if err = addSetLegacyContextSigningOptionsMiddleware(stack); err != nil { + return err + } + if err = addTimeOffsetBuild(stack, c); err != nil { + return err + } + if err = addUserAgentRetryMode(stack, options); err != nil { + return err + } + if err = addIdempotencyToken_opCreatePushNotificationRegistrationMiddleware(stack, options); err != nil { + return err + } + if err = addOpCreatePushNotificationRegistrationValidationMiddleware(stack); err != nil { + return err + } + if err = stack.Initialize.Add(newServiceMetadataMiddleware_opCreatePushNotificationRegistration(options.Region), middleware.Before); err != nil { + return err + } + if err = addRecursionDetection(stack); err != nil { + return err + } + if err = addRequestIDRetrieverMiddleware(stack); err != nil { + return err + } + if err = addResponseErrorMiddleware(stack); err != nil { + return err + } + if err = addRequestResponseLogging(stack, options); err != nil { + return err + } + if err = addDisableHTTPSMiddleware(stack, options); err != nil { + return err + } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } + return nil +} + +type idempotencyToken_initializeOpCreatePushNotificationRegistration struct { + tokenProvider IdempotencyTokenProvider +} + +func (*idempotencyToken_initializeOpCreatePushNotificationRegistration) ID() string { + return "OperationIdempotencyTokenAutoFill" +} + +func (m *idempotencyToken_initializeOpCreatePushNotificationRegistration) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) ( + out middleware.InitializeOutput, metadata middleware.Metadata, err error, +) { + if m.tokenProvider == nil { + return next.HandleInitialize(ctx, in) + } + + input, ok := in.Parameters.(*CreatePushNotificationRegistrationInput) + if !ok { + return out, metadata, fmt.Errorf("expected middleware input to be of type *CreatePushNotificationRegistrationInput ") + } + + if input.ClientToken == nil { + t, err := m.tokenProvider.GetIdempotencyToken() + if err != nil { + return out, metadata, err + } + input.ClientToken = &t + } + return next.HandleInitialize(ctx, in) +} +func addIdempotencyToken_opCreatePushNotificationRegistrationMiddleware(stack *middleware.Stack, cfg Options) error { + return stack.Initialize.Add(&idempotencyToken_initializeOpCreatePushNotificationRegistration{tokenProvider: cfg.IdempotencyTokenProvider}, middleware.Before) +} + +func newServiceMetadataMiddleware_opCreatePushNotificationRegistration(region string) *awsmiddleware.RegisterServiceMetadata { + return &awsmiddleware.RegisterServiceMetadata{ + Region: region, + ServiceID: ServiceID, + OperationName: "CreatePushNotificationRegistration", + } +} diff --git a/service/connect/api_op_DeletePushNotificationRegistration.go b/service/connect/api_op_DeletePushNotificationRegistration.go new file mode 100644 index 00000000000..417b697df58 --- /dev/null +++ b/service/connect/api_op_DeletePushNotificationRegistration.go @@ -0,0 +1,165 @@ +// Code generated by smithy-go-codegen DO NOT EDIT. + +package connect + +import ( + "context" + "fmt" + awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware" + "github.com/aws/smithy-go/middleware" + smithyhttp "github.com/aws/smithy-go/transport/http" +) + +// Deletes registration for a device token and a chat contact. +func (c *Client) DeletePushNotificationRegistration(ctx context.Context, params *DeletePushNotificationRegistrationInput, optFns ...func(*Options)) (*DeletePushNotificationRegistrationOutput, error) { + if params == nil { + params = &DeletePushNotificationRegistrationInput{} + } + + result, metadata, err := c.invokeOperation(ctx, "DeletePushNotificationRegistration", params, optFns, c.addOperationDeletePushNotificationRegistrationMiddlewares) + if err != nil { + return nil, err + } + + out := result.(*DeletePushNotificationRegistrationOutput) + out.ResultMetadata = metadata + return out, nil +} + +type DeletePushNotificationRegistrationInput struct { + + // The identifier of the contact within the Amazon Connect instance. + // + // This member is required. + ContactId *string + + // The identifier of the Amazon Connect instance. You can [find the instance ID] in the Amazon Resource + // Name (ARN) of the instance. + // + // [find the instance ID]: https://docs.aws.amazon.com/connect/latest/adminguide/find-instance-arn.html + // + // This member is required. + InstanceId *string + + // The identifier for the registration. + // + // This member is required. + RegistrationId *string + + noSmithyDocumentSerde +} + +type DeletePushNotificationRegistrationOutput struct { + // Metadata pertaining to the operation's result. + ResultMetadata middleware.Metadata + + noSmithyDocumentSerde +} + +func (c *Client) addOperationDeletePushNotificationRegistrationMiddlewares(stack *middleware.Stack, options Options) (err error) { + if err := stack.Serialize.Add(&setOperationInputMiddleware{}, middleware.After); err != nil { + return err + } + err = stack.Serialize.Add(&awsRestjson1_serializeOpDeletePushNotificationRegistration{}, middleware.After) + if err != nil { + return err + } + err = stack.Deserialize.Add(&awsRestjson1_deserializeOpDeletePushNotificationRegistration{}, middleware.After) + if err != nil { + return err + } + if err := addProtocolFinalizerMiddlewares(stack, options, "DeletePushNotificationRegistration"); err != nil { + return fmt.Errorf("add protocol finalizers: %v", err) + } + + if err = addlegacyEndpointContextSetter(stack, options); err != nil { + return err + } + if err = addSetLoggerMiddleware(stack, options); err != nil { + return err + } + if err = addClientRequestID(stack); err != nil { + return err + } + if err = addComputeContentLength(stack); err != nil { + return err + } + if err = addResolveEndpointMiddleware(stack, options); err != nil { + return err + } + if err = addComputePayloadSHA256(stack); err != nil { + return err + } + if err = addRetry(stack, options); err != nil { + return err + } + if err = addRawResponseToMetadata(stack); err != nil { + return err + } + if err = addRecordResponseTiming(stack); err != nil { + return err + } + if err = addSpanRetryLoop(stack, options); err != nil { + return err + } + if err = addClientUserAgent(stack, options); err != nil { + return err + } + if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil { + return err + } + if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil { + return err + } + if err = addSetLegacyContextSigningOptionsMiddleware(stack); err != nil { + return err + } + if err = addTimeOffsetBuild(stack, c); err != nil { + return err + } + if err = addUserAgentRetryMode(stack, options); err != nil { + return err + } + if err = addOpDeletePushNotificationRegistrationValidationMiddleware(stack); err != nil { + return err + } + if err = stack.Initialize.Add(newServiceMetadataMiddleware_opDeletePushNotificationRegistration(options.Region), middleware.Before); err != nil { + return err + } + if err = addRecursionDetection(stack); err != nil { + return err + } + if err = addRequestIDRetrieverMiddleware(stack); err != nil { + return err + } + if err = addResponseErrorMiddleware(stack); err != nil { + return err + } + if err = addRequestResponseLogging(stack, options); err != nil { + return err + } + if err = addDisableHTTPSMiddleware(stack, options); err != nil { + return err + } + if err = addSpanInitializeStart(stack); err != nil { + return err + } + if err = addSpanInitializeEnd(stack); err != nil { + return err + } + if err = addSpanBuildRequestStart(stack); err != nil { + return err + } + if err = addSpanBuildRequestEnd(stack); err != nil { + return err + } + return nil +} + +func newServiceMetadataMiddleware_opDeletePushNotificationRegistration(region string) *awsmiddleware.RegisterServiceMetadata { + return &awsmiddleware.RegisterServiceMetadata{ + Region: region, + ServiceID: ServiceID, + OperationName: "DeletePushNotificationRegistration", + } +} diff --git a/service/connect/deserializers.go b/service/connect/deserializers.go index 46f98c729fb..87579ca350b 100644 --- a/service/connect/deserializers.go +++ b/service/connect/deserializers.go @@ -5559,6 +5559,177 @@ func awsRestjson1_deserializeOpDocumentCreatePromptOutput(v **CreatePromptOutput return nil } +type awsRestjson1_deserializeOpCreatePushNotificationRegistration struct { +} + +func (*awsRestjson1_deserializeOpCreatePushNotificationRegistration) ID() string { + return "OperationDeserializer" +} + +func (m *awsRestjson1_deserializeOpCreatePushNotificationRegistration) HandleDeserialize(ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) ( + out middleware.DeserializeOutput, metadata middleware.Metadata, err error, +) { + out, metadata, err = next.HandleDeserialize(ctx, in) + if err != nil { + return out, metadata, err + } + + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() + response, ok := out.RawResponse.(*smithyhttp.Response) + if !ok { + return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} + } + + if response.StatusCode < 200 || response.StatusCode >= 300 { + return out, metadata, awsRestjson1_deserializeOpErrorCreatePushNotificationRegistration(response, &metadata) + } + output := &CreatePushNotificationRegistrationOutput{} + out.Result = output + + var buff [1024]byte + ringBuffer := smithyio.NewRingBuffer(buff[:]) + + body := io.TeeReader(response.Body, ringBuffer) + + decoder := json.NewDecoder(body) + decoder.UseNumber() + var shape interface{} + if err := decoder.Decode(&shape); err != nil && err != io.EOF { + var snapshot bytes.Buffer + io.Copy(&snapshot, ringBuffer) + err = &smithy.DeserializationError{ + Err: fmt.Errorf("failed to decode response body, %w", err), + Snapshot: snapshot.Bytes(), + } + return out, metadata, err + } + + err = awsRestjson1_deserializeOpDocumentCreatePushNotificationRegistrationOutput(&output, shape) + if err != nil { + var snapshot bytes.Buffer + io.Copy(&snapshot, ringBuffer) + return out, metadata, &smithy.DeserializationError{ + Err: fmt.Errorf("failed to decode response body with invalid JSON, %w", err), + Snapshot: snapshot.Bytes(), + } + } + + span.End() + return out, metadata, err +} + +func awsRestjson1_deserializeOpErrorCreatePushNotificationRegistration(response *smithyhttp.Response, metadata *middleware.Metadata) error { + var errorBuffer bytes.Buffer + if _, err := io.Copy(&errorBuffer, response.Body); err != nil { + return &smithy.DeserializationError{Err: fmt.Errorf("failed to copy error response body, %w", err)} + } + errorBody := bytes.NewReader(errorBuffer.Bytes()) + + errorCode := "UnknownError" + errorMessage := errorCode + + headerCode := response.Header.Get("X-Amzn-ErrorType") + if len(headerCode) != 0 { + errorCode = restjson.SanitizeErrorCode(headerCode) + } + + var buff [1024]byte + ringBuffer := smithyio.NewRingBuffer(buff[:]) + + body := io.TeeReader(errorBody, ringBuffer) + decoder := json.NewDecoder(body) + decoder.UseNumber() + jsonCode, message, err := restjson.GetErrorInfo(decoder) + if err != nil { + var snapshot bytes.Buffer + io.Copy(&snapshot, ringBuffer) + err = &smithy.DeserializationError{ + Err: fmt.Errorf("failed to decode response body, %w", err), + Snapshot: snapshot.Bytes(), + } + return err + } + + errorBody.Seek(0, io.SeekStart) + if len(headerCode) == 0 && len(jsonCode) != 0 { + errorCode = restjson.SanitizeErrorCode(jsonCode) + } + if len(message) != 0 { + errorMessage = message + } + + switch { + case strings.EqualFold("AccessDeniedException", errorCode): + return awsRestjson1_deserializeErrorAccessDeniedException(response, errorBody) + + case strings.EqualFold("InternalServiceException", errorCode): + return awsRestjson1_deserializeErrorInternalServiceException(response, errorBody) + + case strings.EqualFold("InvalidParameterException", errorCode): + return awsRestjson1_deserializeErrorInvalidParameterException(response, errorBody) + + case strings.EqualFold("ResourceNotFoundException", errorCode): + return awsRestjson1_deserializeErrorResourceNotFoundException(response, errorBody) + + case strings.EqualFold("ServiceQuotaExceededException", errorCode): + return awsRestjson1_deserializeErrorServiceQuotaExceededException(response, errorBody) + + case strings.EqualFold("ThrottlingException", errorCode): + return awsRestjson1_deserializeErrorThrottlingException(response, errorBody) + + default: + genericError := &smithy.GenericAPIError{ + Code: errorCode, + Message: errorMessage, + } + return genericError + + } +} + +func awsRestjson1_deserializeOpDocumentCreatePushNotificationRegistrationOutput(v **CreatePushNotificationRegistrationOutput, value interface{}) error { + if v == nil { + return fmt.Errorf("unexpected nil of type %T", v) + } + if value == nil { + return nil + } + + shape, ok := value.(map[string]interface{}) + if !ok { + return fmt.Errorf("unexpected JSON type %v", value) + } + + var sv *CreatePushNotificationRegistrationOutput + if *v == nil { + sv = &CreatePushNotificationRegistrationOutput{} + } else { + sv = *v + } + + for key, value := range shape { + switch key { + case "RegistrationId": + if value != nil { + jtv, ok := value.(string) + if !ok { + return fmt.Errorf("expected RegistrationId to be of type string, got %T instead", value) + } + sv.RegistrationId = ptr.String(jtv) + } + + default: + _, _ = key, value + + } + } + *v = sv + return nil +} + type awsRestjson1_deserializeOpCreateQueue struct { } @@ -9262,6 +9433,106 @@ func awsRestjson1_deserializeOpErrorDeletePrompt(response *smithyhttp.Response, } } +type awsRestjson1_deserializeOpDeletePushNotificationRegistration struct { +} + +func (*awsRestjson1_deserializeOpDeletePushNotificationRegistration) ID() string { + return "OperationDeserializer" +} + +func (m *awsRestjson1_deserializeOpDeletePushNotificationRegistration) HandleDeserialize(ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) ( + out middleware.DeserializeOutput, metadata middleware.Metadata, err error, +) { + out, metadata, err = next.HandleDeserialize(ctx, in) + if err != nil { + return out, metadata, err + } + + _, span := tracing.StartSpan(ctx, "OperationDeserializer") + endTimer := startMetricTimer(ctx, "client.call.deserialization_duration") + defer endTimer() + defer span.End() + response, ok := out.RawResponse.(*smithyhttp.Response) + if !ok { + return out, metadata, &smithy.DeserializationError{Err: fmt.Errorf("unknown transport type %T", out.RawResponse)} + } + + if response.StatusCode < 200 || response.StatusCode >= 300 { + return out, metadata, awsRestjson1_deserializeOpErrorDeletePushNotificationRegistration(response, &metadata) + } + output := &DeletePushNotificationRegistrationOutput{} + out.Result = output + + span.End() + return out, metadata, err +} + +func awsRestjson1_deserializeOpErrorDeletePushNotificationRegistration(response *smithyhttp.Response, metadata *middleware.Metadata) error { + var errorBuffer bytes.Buffer + if _, err := io.Copy(&errorBuffer, response.Body); err != nil { + return &smithy.DeserializationError{Err: fmt.Errorf("failed to copy error response body, %w", err)} + } + errorBody := bytes.NewReader(errorBuffer.Bytes()) + + errorCode := "UnknownError" + errorMessage := errorCode + + headerCode := response.Header.Get("X-Amzn-ErrorType") + if len(headerCode) != 0 { + errorCode = restjson.SanitizeErrorCode(headerCode) + } + + var buff [1024]byte + ringBuffer := smithyio.NewRingBuffer(buff[:]) + + body := io.TeeReader(errorBody, ringBuffer) + decoder := json.NewDecoder(body) + decoder.UseNumber() + jsonCode, message, err := restjson.GetErrorInfo(decoder) + if err != nil { + var snapshot bytes.Buffer + io.Copy(&snapshot, ringBuffer) + err = &smithy.DeserializationError{ + Err: fmt.Errorf("failed to decode response body, %w", err), + Snapshot: snapshot.Bytes(), + } + return err + } + + errorBody.Seek(0, io.SeekStart) + if len(headerCode) == 0 && len(jsonCode) != 0 { + errorCode = restjson.SanitizeErrorCode(jsonCode) + } + if len(message) != 0 { + errorMessage = message + } + + switch { + case strings.EqualFold("AccessDeniedException", errorCode): + return awsRestjson1_deserializeErrorAccessDeniedException(response, errorBody) + + case strings.EqualFold("InternalServiceException", errorCode): + return awsRestjson1_deserializeErrorInternalServiceException(response, errorBody) + + case strings.EqualFold("InvalidParameterException", errorCode): + return awsRestjson1_deserializeErrorInvalidParameterException(response, errorBody) + + case strings.EqualFold("ResourceNotFoundException", errorCode): + return awsRestjson1_deserializeErrorResourceNotFoundException(response, errorBody) + + case strings.EqualFold("ThrottlingException", errorCode): + return awsRestjson1_deserializeErrorThrottlingException(response, errorBody) + + default: + genericError := &smithy.GenericAPIError{ + Code: errorCode, + Message: errorMessage, + } + return genericError + + } +} + type awsRestjson1_deserializeOpDeleteQueue struct { } diff --git a/service/connect/generated.json b/service/connect/generated.json index 7b1acded4a9..f8fd5c4ffde 100644 --- a/service/connect/generated.json +++ b/service/connect/generated.json @@ -44,6 +44,7 @@ "api_op_CreatePersistentContactAssociation.go", "api_op_CreatePredefinedAttribute.go", "api_op_CreatePrompt.go", + "api_op_CreatePushNotificationRegistration.go", "api_op_CreateQueue.go", "api_op_CreateQuickConnect.go", "api_op_CreateRoutingProfile.go", @@ -69,6 +70,7 @@ "api_op_DeleteIntegrationAssociation.go", "api_op_DeletePredefinedAttribute.go", "api_op_DeletePrompt.go", + "api_op_DeletePushNotificationRegistration.go", "api_op_DeleteQueue.go", "api_op_DeleteQuickConnect.go", "api_op_DeleteRoutingProfile.go", diff --git a/service/connect/serializers.go b/service/connect/serializers.go index d52ca6d4d0b..ebffa71fc5c 100644 --- a/service/connect/serializers.go +++ b/service/connect/serializers.go @@ -3846,6 +3846,122 @@ func awsRestjson1_serializeOpDocumentCreatePromptInput(v *CreatePromptInput, val return nil } +type awsRestjson1_serializeOpCreatePushNotificationRegistration struct { +} + +func (*awsRestjson1_serializeOpCreatePushNotificationRegistration) ID() string { + return "OperationSerializer" +} + +func (m *awsRestjson1_serializeOpCreatePushNotificationRegistration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( + out middleware.SerializeOutput, metadata middleware.Metadata, err error, +) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() + request, ok := in.Request.(*smithyhttp.Request) + if !ok { + return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} + } + + input, ok := in.Parameters.(*CreatePushNotificationRegistrationInput) + _ = input + if !ok { + return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown input parameters type %T", in.Parameters)} + } + + opPath, opQuery := httpbinding.SplitURI("/push-notification/{InstanceId}/registrations") + request.URL.Path = smithyhttp.JoinPath(request.URL.Path, opPath) + request.URL.RawQuery = smithyhttp.JoinRawQuery(request.URL.RawQuery, opQuery) + request.Method = "PUT" + var restEncoder *httpbinding.Encoder + if request.URL.RawPath == "" { + restEncoder, err = httpbinding.NewEncoder(request.URL.Path, request.URL.RawQuery, request.Header) + } else { + request.URL.RawPath = smithyhttp.JoinPath(request.URL.RawPath, opPath) + restEncoder, err = httpbinding.NewEncoderWithRawPath(request.URL.Path, request.URL.RawPath, request.URL.RawQuery, request.Header) + } + + if err != nil { + return out, metadata, &smithy.SerializationError{Err: err} + } + + if err := awsRestjson1_serializeOpHttpBindingsCreatePushNotificationRegistrationInput(input, restEncoder); err != nil { + return out, metadata, &smithy.SerializationError{Err: err} + } + + restEncoder.SetHeader("Content-Type").String("application/json") + + jsonEncoder := smithyjson.NewEncoder() + if err := awsRestjson1_serializeOpDocumentCreatePushNotificationRegistrationInput(input, jsonEncoder.Value); err != nil { + return out, metadata, &smithy.SerializationError{Err: err} + } + + if request, err = request.SetStream(bytes.NewReader(jsonEncoder.Bytes())); err != nil { + return out, metadata, &smithy.SerializationError{Err: err} + } + + if request.Request, err = restEncoder.Encode(request.Request); err != nil { + return out, metadata, &smithy.SerializationError{Err: err} + } + in.Request = request + + endTimer() + span.End() + return next.HandleSerialize(ctx, in) +} +func awsRestjson1_serializeOpHttpBindingsCreatePushNotificationRegistrationInput(v *CreatePushNotificationRegistrationInput, encoder *httpbinding.Encoder) error { + if v == nil { + return fmt.Errorf("unsupported serialization of nil %T", v) + } + + if v.InstanceId == nil || len(*v.InstanceId) == 0 { + return &smithy.SerializationError{Err: fmt.Errorf("input member InstanceId must not be empty")} + } + if v.InstanceId != nil { + if err := encoder.SetURI("InstanceId").String(*v.InstanceId); err != nil { + return err + } + } + + return nil +} + +func awsRestjson1_serializeOpDocumentCreatePushNotificationRegistrationInput(v *CreatePushNotificationRegistrationInput, value smithyjson.Value) error { + object := value.Object() + defer object.Close() + + if v.ClientToken != nil { + ok := object.Key("ClientToken") + ok.String(*v.ClientToken) + } + + if v.ContactConfiguration != nil { + ok := object.Key("ContactConfiguration") + if err := awsRestjson1_serializeDocumentContactConfiguration(v.ContactConfiguration, ok); err != nil { + return err + } + } + + if v.DeviceToken != nil { + ok := object.Key("DeviceToken") + ok.String(*v.DeviceToken) + } + + if len(v.DeviceType) > 0 { + ok := object.Key("DeviceType") + ok.String(string(v.DeviceType)) + } + + if v.PinpointAppArn != nil { + ok := object.Key("PinpointAppArn") + ok.String(*v.PinpointAppArn) + } + + return nil +} + type awsRestjson1_serializeOpCreateQueue struct { } @@ -6425,6 +6541,90 @@ func awsRestjson1_serializeOpHttpBindingsDeletePromptInput(v *DeletePromptInput, return nil } +type awsRestjson1_serializeOpDeletePushNotificationRegistration struct { +} + +func (*awsRestjson1_serializeOpDeletePushNotificationRegistration) ID() string { + return "OperationSerializer" +} + +func (m *awsRestjson1_serializeOpDeletePushNotificationRegistration) HandleSerialize(ctx context.Context, in middleware.SerializeInput, next middleware.SerializeHandler) ( + out middleware.SerializeOutput, metadata middleware.Metadata, err error, +) { + _, span := tracing.StartSpan(ctx, "OperationSerializer") + endTimer := startMetricTimer(ctx, "client.call.serialization_duration") + defer endTimer() + defer span.End() + request, ok := in.Request.(*smithyhttp.Request) + if !ok { + return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown transport type %T", in.Request)} + } + + input, ok := in.Parameters.(*DeletePushNotificationRegistrationInput) + _ = input + if !ok { + return out, metadata, &smithy.SerializationError{Err: fmt.Errorf("unknown input parameters type %T", in.Parameters)} + } + + opPath, opQuery := httpbinding.SplitURI("/push-notification/{InstanceId}/registrations/{RegistrationId}") + request.URL.Path = smithyhttp.JoinPath(request.URL.Path, opPath) + request.URL.RawQuery = smithyhttp.JoinRawQuery(request.URL.RawQuery, opQuery) + request.Method = "DELETE" + var restEncoder *httpbinding.Encoder + if request.URL.RawPath == "" { + restEncoder, err = httpbinding.NewEncoder(request.URL.Path, request.URL.RawQuery, request.Header) + } else { + request.URL.RawPath = smithyhttp.JoinPath(request.URL.RawPath, opPath) + restEncoder, err = httpbinding.NewEncoderWithRawPath(request.URL.Path, request.URL.RawPath, request.URL.RawQuery, request.Header) + } + + if err != nil { + return out, metadata, &smithy.SerializationError{Err: err} + } + + if err := awsRestjson1_serializeOpHttpBindingsDeletePushNotificationRegistrationInput(input, restEncoder); err != nil { + return out, metadata, &smithy.SerializationError{Err: err} + } + + if request.Request, err = restEncoder.Encode(request.Request); err != nil { + return out, metadata, &smithy.SerializationError{Err: err} + } + in.Request = request + + endTimer() + span.End() + return next.HandleSerialize(ctx, in) +} +func awsRestjson1_serializeOpHttpBindingsDeletePushNotificationRegistrationInput(v *DeletePushNotificationRegistrationInput, encoder *httpbinding.Encoder) error { + if v == nil { + return fmt.Errorf("unsupported serialization of nil %T", v) + } + + if v.ContactId != nil { + encoder.SetQuery("contactId").String(*v.ContactId) + } + + if v.InstanceId == nil || len(*v.InstanceId) == 0 { + return &smithy.SerializationError{Err: fmt.Errorf("input member InstanceId must not be empty")} + } + if v.InstanceId != nil { + if err := encoder.SetURI("InstanceId").String(*v.InstanceId); err != nil { + return err + } + } + + if v.RegistrationId == nil || len(*v.RegistrationId) == 0 { + return &smithy.SerializationError{Err: fmt.Errorf("input member RegistrationId must not be empty")} + } + if v.RegistrationId != nil { + if err := encoder.SetURI("RegistrationId").String(*v.RegistrationId); err != nil { + return err + } + } + + return nil +} + type awsRestjson1_serializeOpDeleteQueue struct { } @@ -27001,6 +27201,28 @@ func awsRestjson1_serializeDocumentContactAnalysis(v *types.ContactAnalysis, val return nil } +func awsRestjson1_serializeDocumentContactConfiguration(v *types.ContactConfiguration, value smithyjson.Value) error { + object := value.Object() + defer object.Close() + + if v.ContactId != nil { + ok := object.Key("ContactId") + ok.String(*v.ContactId) + } + + if v.IncludeRawMessage { + ok := object.Key("IncludeRawMessage") + ok.Boolean(v.IncludeRawMessage) + } + + if len(v.ParticipantRole) > 0 { + ok := object.Key("ParticipantRole") + ok.String(string(v.ParticipantRole)) + } + + return nil +} + func awsRestjson1_serializeDocumentContactDataRequest(v *types.ContactDataRequest, value smithyjson.Value) error { object := value.Object() defer object.Close() diff --git a/service/connect/snapshot/api_op_CreatePushNotificationRegistration.go.snap b/service/connect/snapshot/api_op_CreatePushNotificationRegistration.go.snap new file mode 100644 index 00000000000..ac3bc4092f7 --- /dev/null +++ b/service/connect/snapshot/api_op_CreatePushNotificationRegistration.go.snap @@ -0,0 +1,42 @@ +CreatePushNotificationRegistration + Initialize stack step + spanInitializeStart + RegisterServiceMetadata + OperationIdempotencyTokenAutoFill + legacyEndpointContextSetter + SetLogger + OperationInputValidation + spanInitializeEnd + Serialize stack step + spanBuildRequestStart + setOperationInput + ResolveEndpoint + OperationSerializer + Build stack step + ClientRequestID + ComputeContentLength + UserAgent + AddTimeOffsetMiddleware + RecursionDetection + spanBuildRequestEnd + Finalize stack step + ResolveAuthScheme + GetIdentity + ResolveEndpointV2 + disableHTTPS + ComputePayloadHash + spanRetryLoop + Retry + RetryMetricsHeader + setLegacyContextSigningOptions + Signing + Deserialize stack step + AddRawResponseToMetadata + ErrorCloseResponseBody + CloseResponseBody + ResponseErrorWrapper + RequestIDRetriever + OperationDeserializer + AddTimeOffsetMiddleware + RecordResponseTiming + RequestResponseLogger diff --git a/service/connect/snapshot/api_op_DeletePushNotificationRegistration.go.snap b/service/connect/snapshot/api_op_DeletePushNotificationRegistration.go.snap new file mode 100644 index 00000000000..d8c15602b95 --- /dev/null +++ b/service/connect/snapshot/api_op_DeletePushNotificationRegistration.go.snap @@ -0,0 +1,41 @@ +DeletePushNotificationRegistration + Initialize stack step + spanInitializeStart + RegisterServiceMetadata + legacyEndpointContextSetter + SetLogger + OperationInputValidation + spanInitializeEnd + Serialize stack step + spanBuildRequestStart + setOperationInput + ResolveEndpoint + OperationSerializer + Build stack step + ClientRequestID + ComputeContentLength + UserAgent + AddTimeOffsetMiddleware + RecursionDetection + spanBuildRequestEnd + Finalize stack step + ResolveAuthScheme + GetIdentity + ResolveEndpointV2 + disableHTTPS + ComputePayloadHash + spanRetryLoop + Retry + RetryMetricsHeader + setLegacyContextSigningOptions + Signing + Deserialize stack step + AddRawResponseToMetadata + ErrorCloseResponseBody + CloseResponseBody + ResponseErrorWrapper + RequestIDRetriever + OperationDeserializer + AddTimeOffsetMiddleware + RecordResponseTiming + RequestResponseLogger diff --git a/service/connect/snapshot_test.go b/service/connect/snapshot_test.go index f94fc1c135a..844221ba5ac 100644 --- a/service/connect/snapshot_test.go +++ b/service/connect/snapshot_test.go @@ -494,6 +494,18 @@ func TestCheckSnapshot_CreatePrompt(t *testing.T) { } } +func TestCheckSnapshot_CreatePushNotificationRegistration(t *testing.T) { + svc := New(Options{}) + _, err := svc.CreatePushNotificationRegistration(context.Background(), nil, func(o *Options) { + o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error { + return testSnapshot(stack, "CreatePushNotificationRegistration") + }) + }) + if _, ok := err.(snapshotOK); !ok && err != nil { + t.Fatal(err) + } +} + func TestCheckSnapshot_CreateQueue(t *testing.T) { svc := New(Options{}) _, err := svc.CreateQueue(context.Background(), nil, func(o *Options) { @@ -794,6 +806,18 @@ func TestCheckSnapshot_DeletePrompt(t *testing.T) { } } +func TestCheckSnapshot_DeletePushNotificationRegistration(t *testing.T) { + svc := New(Options{}) + _, err := svc.DeletePushNotificationRegistration(context.Background(), nil, func(o *Options) { + o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error { + return testSnapshot(stack, "DeletePushNotificationRegistration") + }) + }) + if _, ok := err.(snapshotOK); !ok && err != nil { + t.Fatal(err) + } +} + func TestCheckSnapshot_DeleteQueue(t *testing.T) { svc := New(Options{}) _, err := svc.DeleteQueue(context.Background(), nil, func(o *Options) { @@ -3733,6 +3757,18 @@ func TestUpdateSnapshot_CreatePrompt(t *testing.T) { } } +func TestUpdateSnapshot_CreatePushNotificationRegistration(t *testing.T) { + svc := New(Options{}) + _, err := svc.CreatePushNotificationRegistration(context.Background(), nil, func(o *Options) { + o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error { + return updateSnapshot(stack, "CreatePushNotificationRegistration") + }) + }) + if _, ok := err.(snapshotOK); !ok && err != nil { + t.Fatal(err) + } +} + func TestUpdateSnapshot_CreateQueue(t *testing.T) { svc := New(Options{}) _, err := svc.CreateQueue(context.Background(), nil, func(o *Options) { @@ -4033,6 +4069,18 @@ func TestUpdateSnapshot_DeletePrompt(t *testing.T) { } } +func TestUpdateSnapshot_DeletePushNotificationRegistration(t *testing.T) { + svc := New(Options{}) + _, err := svc.DeletePushNotificationRegistration(context.Background(), nil, func(o *Options) { + o.APIOptions = append(o.APIOptions, func(stack *middleware.Stack) error { + return updateSnapshot(stack, "DeletePushNotificationRegistration") + }) + }) + if _, ok := err.(snapshotOK); !ok && err != nil { + t.Fatal(err) + } +} + func TestUpdateSnapshot_DeleteQueue(t *testing.T) { svc := New(Options{}) _, err := svc.DeleteQueue(context.Background(), nil, func(o *Options) { diff --git a/service/connect/types/enums.go b/service/connect/types/enums.go index 5340cf2039f..1f0bc62e180 100644 --- a/service/connect/types/enums.go +++ b/service/connect/types/enums.go @@ -522,6 +522,27 @@ func (CurrentMetricName) Values() []CurrentMetricName { } } +type DeviceType string + +// Enum values for DeviceType +const ( + DeviceTypeGcm DeviceType = "GCM" + DeviceTypeApns DeviceType = "APNS" + DeviceTypeApnsSandbox DeviceType = "APNS_SANDBOX" +) + +// Values returns all known values for DeviceType. Note that this can be expanded +// in the future, and so it is only as up to date as the client. +// +// The ordering of this slice is not guaranteed to be stable across updates. +func (DeviceType) Values() []DeviceType { + return []DeviceType{ + "GCM", + "APNS", + "APNS_SANDBOX", + } +} + type DirectoryType string // Enum values for DirectoryType diff --git a/service/connect/types/types.go b/service/connect/types/types.go index ab486d49a4a..1e92336922a 100644 --- a/service/connect/types/types.go +++ b/service/connect/types/types.go @@ -1032,6 +1032,24 @@ type ContactAnalysis struct { noSmithyDocumentSerde } +// The contact configuration for push notification registration. +type ContactConfiguration struct { + + // The identifier of the contact within the Amazon Connect instance. + // + // This member is required. + ContactId *string + + // Whether to include raw connect message in the push notification payload. + // Default is False . + IncludeRawMessage bool + + // The role of the participant in the chat conversation. + ParticipantRole ParticipantRole + + noSmithyDocumentSerde +} + // Request object with information to create a contact. type ContactDataRequest struct { @@ -3727,14 +3745,10 @@ type MetricFilterV2 struct { // description for the [Flow outcome]metric in the Amazon Connect Administrator Guide. // // For valid values of the metric-level filter BOT_CONVERSATION_OUTCOME_TYPE , see - // the description for the [Bot conversations completed] - // - // in the Amazon Connect Administrator Guide. + // the description for the [Bot conversations completed]in the Amazon Connect Administrator Guide. // // For valid values of the metric-level filter BOT_INTENT_OUTCOME_TYPE , see the - // description for the [Bot intents completed] - // - // metric in the Amazon Connect Administrator Guide. + // description for the [Bot intents completed]metric in the Amazon Connect Administrator Guide. // // [Bot intents completed]: https://docs.aws.amazon.com/connect/latest/adminguide/bot-metrics.html#bot-intents-completed-metric // [ContactTraceRecord]: https://docs.aws.amazon.com/connect/latest/adminguide/ctr-data-model.html#ctr-ContactTraceRecord diff --git a/service/connect/validators.go b/service/connect/validators.go index 1b8e3f692ae..038a36e9e65 100644 --- a/service/connect/validators.go +++ b/service/connect/validators.go @@ -730,6 +730,26 @@ func (m *validateOpCreatePrompt) HandleInitialize(ctx context.Context, in middle return next.HandleInitialize(ctx, in) } +type validateOpCreatePushNotificationRegistration struct { +} + +func (*validateOpCreatePushNotificationRegistration) ID() string { + return "OperationInputValidation" +} + +func (m *validateOpCreatePushNotificationRegistration) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) ( + out middleware.InitializeOutput, metadata middleware.Metadata, err error, +) { + input, ok := in.Parameters.(*CreatePushNotificationRegistrationInput) + if !ok { + return out, metadata, fmt.Errorf("unknown input parameters type %T", in.Parameters) + } + if err := validateOpCreatePushNotificationRegistrationInput(input); err != nil { + return out, metadata, err + } + return next.HandleInitialize(ctx, in) +} + type validateOpCreateQueue struct { } @@ -1230,6 +1250,26 @@ func (m *validateOpDeletePrompt) HandleInitialize(ctx context.Context, in middle return next.HandleInitialize(ctx, in) } +type validateOpDeletePushNotificationRegistration struct { +} + +func (*validateOpDeletePushNotificationRegistration) ID() string { + return "OperationInputValidation" +} + +func (m *validateOpDeletePushNotificationRegistration) HandleInitialize(ctx context.Context, in middleware.InitializeInput, next middleware.InitializeHandler) ( + out middleware.InitializeOutput, metadata middleware.Metadata, err error, +) { + input, ok := in.Parameters.(*DeletePushNotificationRegistrationInput) + if !ok { + return out, metadata, fmt.Errorf("unknown input parameters type %T", in.Parameters) + } + if err := validateOpDeletePushNotificationRegistrationInput(input); err != nil { + return out, metadata, err + } + return next.HandleInitialize(ctx, in) +} + type validateOpDeleteQueue struct { } @@ -5494,6 +5534,10 @@ func addOpCreatePromptValidationMiddleware(stack *middleware.Stack) error { return stack.Initialize.Add(&validateOpCreatePrompt{}, middleware.After) } +func addOpCreatePushNotificationRegistrationValidationMiddleware(stack *middleware.Stack) error { + return stack.Initialize.Add(&validateOpCreatePushNotificationRegistration{}, middleware.After) +} + func addOpCreateQueueValidationMiddleware(stack *middleware.Stack) error { return stack.Initialize.Add(&validateOpCreateQueue{}, middleware.After) } @@ -5594,6 +5638,10 @@ func addOpDeletePromptValidationMiddleware(stack *middleware.Stack) error { return stack.Initialize.Add(&validateOpDeletePrompt{}, middleware.After) } +func addOpDeletePushNotificationRegistrationValidationMiddleware(stack *middleware.Stack) error { + return stack.Initialize.Add(&validateOpDeletePushNotificationRegistration{}, middleware.After) +} + func addOpDeleteQueueValidationMiddleware(stack *middleware.Stack) error { return stack.Initialize.Add(&validateOpDeleteQueue{}, middleware.After) } @@ -6521,6 +6569,21 @@ func validateContactAnalysis(v *types.ContactAnalysis) error { } } +func validateContactConfiguration(v *types.ContactConfiguration) error { + if v == nil { + return nil + } + invalidParams := smithy.InvalidParamsError{Context: "ContactConfiguration"} + if v.ContactId == nil { + invalidParams.Add(smithy.NewErrParamRequired("ContactId")) + } + if invalidParams.Len() > 0 { + return invalidParams + } else { + return nil + } +} + func validateContactReferences(v map[string]types.Reference) error { if v == nil { return nil @@ -9130,6 +9193,37 @@ func validateOpCreatePromptInput(v *CreatePromptInput) error { } } +func validateOpCreatePushNotificationRegistrationInput(v *CreatePushNotificationRegistrationInput) error { + if v == nil { + return nil + } + invalidParams := smithy.InvalidParamsError{Context: "CreatePushNotificationRegistrationInput"} + if v.InstanceId == nil { + invalidParams.Add(smithy.NewErrParamRequired("InstanceId")) + } + if v.PinpointAppArn == nil { + invalidParams.Add(smithy.NewErrParamRequired("PinpointAppArn")) + } + if v.DeviceToken == nil { + invalidParams.Add(smithy.NewErrParamRequired("DeviceToken")) + } + if len(v.DeviceType) == 0 { + invalidParams.Add(smithy.NewErrParamRequired("DeviceType")) + } + if v.ContactConfiguration == nil { + invalidParams.Add(smithy.NewErrParamRequired("ContactConfiguration")) + } else if v.ContactConfiguration != nil { + if err := validateContactConfiguration(v.ContactConfiguration); err != nil { + invalidParams.AddNested("ContactConfiguration", err.(smithy.InvalidParamsError)) + } + } + if invalidParams.Len() > 0 { + return invalidParams + } else { + return nil + } +} + func validateOpCreateQueueInput(v *CreateQueueInput) error { if v == nil { return nil @@ -9663,6 +9757,27 @@ func validateOpDeletePromptInput(v *DeletePromptInput) error { } } +func validateOpDeletePushNotificationRegistrationInput(v *DeletePushNotificationRegistrationInput) error { + if v == nil { + return nil + } + invalidParams := smithy.InvalidParamsError{Context: "DeletePushNotificationRegistrationInput"} + if v.InstanceId == nil { + invalidParams.Add(smithy.NewErrParamRequired("InstanceId")) + } + if v.RegistrationId == nil { + invalidParams.Add(smithy.NewErrParamRequired("RegistrationId")) + } + if v.ContactId == nil { + invalidParams.Add(smithy.NewErrParamRequired("ContactId")) + } + if invalidParams.Len() > 0 { + return invalidParams + } else { + return nil + } +} + func validateOpDeleteQueueInput(v *DeleteQueueInput) error { if v == nil { return nil diff --git a/service/ivsrealtime/deserializers.go b/service/ivsrealtime/deserializers.go index a63de8a63f9..d87d8686c1c 100644 --- a/service/ivsrealtime/deserializers.go +++ b/service/ivsrealtime/deserializers.go @@ -5703,6 +5703,11 @@ func awsRestjson1_deserializeDocumentAutoParticipantRecordingConfiguration(v **t sv.StorageConfigurationArn = ptr.String(jtv) } + case "thumbnailConfiguration": + if err := awsRestjson1_deserializeDocumentParticipantThumbnailConfiguration(&sv.ThumbnailConfiguration, value); err != nil { + return err + } + default: _, _ = key, value @@ -5988,6 +5993,89 @@ func awsRestjson1_deserializeDocumentCompositionSummaryList(v *[]types.Compositi return nil } +func awsRestjson1_deserializeDocumentCompositionThumbnailConfiguration(v **types.CompositionThumbnailConfiguration, value interface{}) error { + if v == nil { + return fmt.Errorf("unexpected nil of type %T", v) + } + if value == nil { + return nil + } + + shape, ok := value.(map[string]interface{}) + if !ok { + return fmt.Errorf("unexpected JSON type %v", value) + } + + var sv *types.CompositionThumbnailConfiguration + if *v == nil { + sv = &types.CompositionThumbnailConfiguration{} + } else { + sv = *v + } + + for key, value := range shape { + switch key { + case "storage": + if err := awsRestjson1_deserializeDocumentThumbnailStorageTypeList(&sv.Storage, value); err != nil { + return err + } + + case "targetIntervalSeconds": + if value != nil { + jtv, ok := value.(json.Number) + if !ok { + return fmt.Errorf("expected ThumbnailIntervalSeconds to be json.Number, got %T instead", value) + } + i64, err := jtv.Int64() + if err != nil { + return err + } + sv.TargetIntervalSeconds = ptr.Int32(int32(i64)) + } + + default: + _, _ = key, value + + } + } + *v = sv + return nil +} + +func awsRestjson1_deserializeDocumentCompositionThumbnailConfigurationList(v *[]types.CompositionThumbnailConfiguration, value interface{}) error { + if v == nil { + return fmt.Errorf("unexpected nil of type %T", v) + } + if value == nil { + return nil + } + + shape, ok := value.([]interface{}) + if !ok { + return fmt.Errorf("unexpected JSON type %v", value) + } + + var cv []types.CompositionThumbnailConfiguration + if *v == nil { + cv = []types.CompositionThumbnailConfiguration{} + } else { + cv = *v + } + + for _, value := range shape { + var col types.CompositionThumbnailConfiguration + destAddr := &col + if err := awsRestjson1_deserializeDocumentCompositionThumbnailConfiguration(&destAddr, value); err != nil { + return err + } + col = *destAddr + cv = append(cv, col) + + } + *v = cv + return nil +} + func awsRestjson1_deserializeDocumentConflictException(v **types.ConflictException, value interface{}) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) @@ -7411,6 +7499,64 @@ func awsRestjson1_deserializeDocumentParticipantSummary(v **types.ParticipantSum return nil } +func awsRestjson1_deserializeDocumentParticipantThumbnailConfiguration(v **types.ParticipantThumbnailConfiguration, value interface{}) error { + if v == nil { + return fmt.Errorf("unexpected nil of type %T", v) + } + if value == nil { + return nil + } + + shape, ok := value.(map[string]interface{}) + if !ok { + return fmt.Errorf("unexpected JSON type %v", value) + } + + var sv *types.ParticipantThumbnailConfiguration + if *v == nil { + sv = &types.ParticipantThumbnailConfiguration{} + } else { + sv = *v + } + + for key, value := range shape { + switch key { + case "recordingMode": + if value != nil { + jtv, ok := value.(string) + if !ok { + return fmt.Errorf("expected ThumbnailRecordingMode to be of type string, got %T instead", value) + } + sv.RecordingMode = types.ThumbnailRecordingMode(jtv) + } + + case "storage": + if err := awsRestjson1_deserializeDocumentThumbnailStorageTypeList(&sv.Storage, value); err != nil { + return err + } + + case "targetIntervalSeconds": + if value != nil { + jtv, ok := value.(json.Number) + if !ok { + return fmt.Errorf("expected ThumbnailIntervalSeconds to be json.Number, got %T instead", value) + } + i64, err := jtv.Int64() + if err != nil { + return err + } + sv.TargetIntervalSeconds = ptr.Int32(int32(i64)) + } + + default: + _, _ = key, value + + } + } + *v = sv + return nil +} + func awsRestjson1_deserializeDocumentParticipantToken(v **types.ParticipantToken, value interface{}) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) @@ -8069,6 +8215,11 @@ func awsRestjson1_deserializeDocumentS3DestinationConfiguration(v **types.S3Dest sv.StorageConfigurationArn = ptr.String(jtv) } + case "thumbnailConfigurations": + if err := awsRestjson1_deserializeDocumentCompositionThumbnailConfigurationList(&sv.ThumbnailConfigurations, value); err != nil { + return err + } + default: _, _ = key, value @@ -8789,6 +8940,42 @@ func awsRestjson1_deserializeDocumentTags(v *map[string]string, value interface{ return nil } +func awsRestjson1_deserializeDocumentThumbnailStorageTypeList(v *[]types.ThumbnailStorageType, value interface{}) error { + if v == nil { + return fmt.Errorf("unexpected nil of type %T", v) + } + if value == nil { + return nil + } + + shape, ok := value.([]interface{}) + if !ok { + return fmt.Errorf("unexpected JSON type %v", value) + } + + var cv []types.ThumbnailStorageType + if *v == nil { + cv = []types.ThumbnailStorageType{} + } else { + cv = *v + } + + for _, value := range shape { + var col types.ThumbnailStorageType + if value != nil { + jtv, ok := value.(string) + if !ok { + return fmt.Errorf("expected ThumbnailStorageType to be of type string, got %T instead", value) + } + col = types.ThumbnailStorageType(jtv) + } + cv = append(cv, col) + + } + *v = cv + return nil +} + func awsRestjson1_deserializeDocumentValidationException(v **types.ValidationException, value interface{}) error { if v == nil { return fmt.Errorf("unexpected nil of type %T", v) diff --git a/service/ivsrealtime/serializers.go b/service/ivsrealtime/serializers.go index 1582b45bc4e..dc720bd0d2c 100644 --- a/service/ivsrealtime/serializers.go +++ b/service/ivsrealtime/serializers.go @@ -3256,6 +3256,13 @@ func awsRestjson1_serializeDocumentAutoParticipantRecordingConfiguration(v *type ok.String(*v.StorageConfigurationArn) } + if v.ThumbnailConfiguration != nil { + ok := object.Key("thumbnailConfiguration") + if err := awsRestjson1_serializeDocumentParticipantThumbnailConfiguration(v.ThumbnailConfiguration, ok); err != nil { + return err + } + } + return nil } @@ -3276,6 +3283,38 @@ func awsRestjson1_serializeDocumentChannelDestinationConfiguration(v *types.Chan return nil } +func awsRestjson1_serializeDocumentCompositionThumbnailConfiguration(v *types.CompositionThumbnailConfiguration, value smithyjson.Value) error { + object := value.Object() + defer object.Close() + + if v.Storage != nil { + ok := object.Key("storage") + if err := awsRestjson1_serializeDocumentThumbnailStorageTypeList(v.Storage, ok); err != nil { + return err + } + } + + if v.TargetIntervalSeconds != nil { + ok := object.Key("targetIntervalSeconds") + ok.Integer(*v.TargetIntervalSeconds) + } + + return nil +} + +func awsRestjson1_serializeDocumentCompositionThumbnailConfigurationList(v []types.CompositionThumbnailConfiguration, value smithyjson.Value) error { + array := value.Array() + defer array.Close() + + for i := range v { + av := array.Value() + if err := awsRestjson1_serializeDocumentCompositionThumbnailConfiguration(&v[i], av); err != nil { + return err + } + } + return nil +} + func awsRestjson1_serializeDocumentDestinationConfiguration(v *types.DestinationConfiguration, value smithyjson.Value) error { object := value.Object() defer object.Close() @@ -3401,6 +3440,30 @@ func awsRestjson1_serializeDocumentParticipantRecordingMediaTypeList(v []types.P return nil } +func awsRestjson1_serializeDocumentParticipantThumbnailConfiguration(v *types.ParticipantThumbnailConfiguration, value smithyjson.Value) error { + object := value.Object() + defer object.Close() + + if len(v.RecordingMode) > 0 { + ok := object.Key("recordingMode") + ok.String(string(v.RecordingMode)) + } + + if v.Storage != nil { + ok := object.Key("storage") + if err := awsRestjson1_serializeDocumentThumbnailStorageTypeList(v.Storage, ok); err != nil { + return err + } + } + + if v.TargetIntervalSeconds != nil { + ok := object.Key("targetIntervalSeconds") + ok.Integer(*v.TargetIntervalSeconds) + } + + return nil +} + func awsRestjson1_serializeDocumentParticipantTokenAttributes(v map[string]string, value smithyjson.Value) error { object := value.Object() defer object.Close() @@ -3559,6 +3622,13 @@ func awsRestjson1_serializeDocumentS3DestinationConfiguration(v *types.S3Destina ok.String(*v.StorageConfigurationArn) } + if v.ThumbnailConfigurations != nil { + ok := object.Key("thumbnailConfigurations") + if err := awsRestjson1_serializeDocumentCompositionThumbnailConfigurationList(v.ThumbnailConfigurations, ok); err != nil { + return err + } + } + return nil } @@ -3585,6 +3655,17 @@ func awsRestjson1_serializeDocumentTags(v map[string]string, value smithyjson.Va return nil } +func awsRestjson1_serializeDocumentThumbnailStorageTypeList(v []types.ThumbnailStorageType, value smithyjson.Value) error { + array := value.Array() + defer array.Close() + + for i := range v { + av := array.Value() + av.String(string(v[i])) + } + return nil +} + func awsRestjson1_serializeDocumentVideo(v *types.Video, value smithyjson.Value) error { object := value.Object() defer object.Close() diff --git a/service/ivsrealtime/types/enums.go b/service/ivsrealtime/types/enums.go index 927519b390a..fa353ee3348 100644 --- a/service/ivsrealtime/types/enums.go +++ b/service/ivsrealtime/types/enums.go @@ -223,6 +223,7 @@ type ParticipantRecordingMediaType string const ( ParticipantRecordingMediaTypeAudioVideo ParticipantRecordingMediaType = "AUDIO_VIDEO" ParticipantRecordingMediaTypeAudioOnly ParticipantRecordingMediaType = "AUDIO_ONLY" + ParticipantRecordingMediaTypeNone ParticipantRecordingMediaType = "NONE" ) // Values returns all known values for ParticipantRecordingMediaType. Note that @@ -234,6 +235,7 @@ func (ParticipantRecordingMediaType) Values() []ParticipantRecordingMediaType { return []ParticipantRecordingMediaType{ "AUDIO_VIDEO", "AUDIO_ONLY", + "NONE", } } @@ -362,6 +364,44 @@ func (RecordingConfigurationFormat) Values() []RecordingConfigurationFormat { } } +type ThumbnailRecordingMode string + +// Enum values for ThumbnailRecordingMode +const ( + ThumbnailRecordingModeInterval ThumbnailRecordingMode = "INTERVAL" + ThumbnailRecordingModeDisabled ThumbnailRecordingMode = "DISABLED" +) + +// Values returns all known values for ThumbnailRecordingMode. Note that this can +// be expanded in the future, and so it is only as up to date as the client. +// +// The ordering of this slice is not guaranteed to be stable across updates. +func (ThumbnailRecordingMode) Values() []ThumbnailRecordingMode { + return []ThumbnailRecordingMode{ + "INTERVAL", + "DISABLED", + } +} + +type ThumbnailStorageType string + +// Enum values for ThumbnailStorageType +const ( + ThumbnailStorageTypeSequential ThumbnailStorageType = "SEQUENTIAL" + ThumbnailStorageTypeLatest ThumbnailStorageType = "LATEST" +) + +// Values returns all known values for ThumbnailStorageType. Note that this can be +// expanded in the future, and so it is only as up to date as the client. +// +// The ordering of this slice is not guaranteed to be stable across updates. +func (ThumbnailStorageType) Values() []ThumbnailStorageType { + return []ThumbnailStorageType{ + "SEQUENTIAL", + "LATEST", + } +} + type VideoAspectRatio string // Enum values for VideoAspectRatio diff --git a/service/ivsrealtime/types/types.go b/service/ivsrealtime/types/types.go index 0db2b3933ea..c6cd1cdfcb9 100644 --- a/service/ivsrealtime/types/types.go +++ b/service/ivsrealtime/types/types.go @@ -21,6 +21,11 @@ type AutoParticipantRecordingConfiguration struct { // Types of media to be recorded. Default: AUDIO_VIDEO . MediaTypes []ParticipantRecordingMediaType + // A complex type that allows you to enable/disable the recording of thumbnails + // for individual participant recording and modify the interval at which thumbnails + // are generated for the live session. + ThumbnailConfiguration *ParticipantThumbnailConfiguration + noSmithyDocumentSerde } @@ -133,6 +138,24 @@ type CompositionSummary struct { noSmithyDocumentSerde } +// An object representing a configuration of thumbnails for recorded video for a Composition. +type CompositionThumbnailConfiguration struct { + + // Indicates the format in which thumbnails are recorded. SEQUENTIAL records all + // generated thumbnails in a serial manner, to the + // media/thumbnails/(width)x(height) directory, where (width) and (height) are the + // width and height of the thumbnail. LATEST saves the latest thumbnail in + // media/latest_thumbnail/(width)x(height)/thumb.jpg and overwrites it at the + // interval specified by targetIntervalSeconds . You can enable both SEQUENTIAL + // and LATEST . Default: SEQUENTIAL . + Storage []ThumbnailStorageType + + // The targeted thumbnail-generation interval in seconds. Default: 60. + TargetIntervalSeconds *int32 + + noSmithyDocumentSerde +} + // Object specifying the status of a Destination. type Destination struct { @@ -578,6 +601,27 @@ type ParticipantSummary struct { noSmithyDocumentSerde } +// An object representing a configuration of thumbnails for recorded video from an +// individual participant. +type ParticipantThumbnailConfiguration struct { + + // Thumbnail recording mode. Default: DISABLED . + RecordingMode ThumbnailRecordingMode + + // Indicates the format in which thumbnails are recorded. SEQUENTIAL records all + // generated thumbnails in a serial manner, to the media/thumbnails/high directory. + // LATEST saves the latest thumbnail in media/latest_thumbnail/high/thumb.jpg and + // overwrites it at the interval specified by targetIntervalSeconds . You can + // enable both SEQUENTIAL and LATEST . Default: SEQUENTIAL . + Storage []ThumbnailStorageType + + // The targeted thumbnail-generation interval in seconds. This is configurable + // only if recordingMode is INTERVAL . Default: 60. + TargetIntervalSeconds *int32 + + noSmithyDocumentSerde +} + // Object specifying a participant token in a stage. // // Important: Treat tokens as opaque; i.e., do not build functionality based on @@ -769,6 +813,11 @@ type S3DestinationConfiguration struct { // storing a recording in Amazon S3. RecordingConfiguration *RecordingConfiguration + // A complex type that allows you to enable/disable the recording of thumbnails + // for a Compositionand modify the interval at which thumbnails are generated for the live + // session. + ThumbnailConfigurations []CompositionThumbnailConfiguration + noSmithyDocumentSerde } diff --git a/service/marketplaceagreement/internal/endpoints/endpoints.go b/service/marketplaceagreement/internal/endpoints/endpoints.go index 511861167f0..582013756b8 100644 --- a/service/marketplaceagreement/internal/endpoints/endpoints.go +++ b/service/marketplaceagreement/internal/endpoints/endpoints.go @@ -199,6 +199,26 @@ var defaultPartitions = endpoints.Partitions{ }, RegionRegex: partitionRegexp.AwsIso, IsRegionalized: true, + Endpoints: endpoints.Endpoints{ + endpoints.EndpointKey{ + Region: "fips-us-iso-east-1", + }: endpoints.Endpoint{ + Hostname: "agreement-marketplace-fips.us-iso-east-1.c2s.ic.gov", + CredentialScope: endpoints.CredentialScope{ + Region: "us-iso-east-1", + }, + Deprecated: aws.TrueTernary, + }, + endpoints.EndpointKey{ + Region: "us-iso-east-1", + }: endpoints.Endpoint{}, + endpoints.EndpointKey{ + Region: "us-iso-east-1", + Variant: endpoints.FIPSVariant, + }: { + Hostname: "agreement-marketplace-fips.us-iso-east-1.c2s.ic.gov", + }, + }, }, { ID: "aws-iso-b", diff --git a/service/sesv2/serializers.go b/service/sesv2/serializers.go index 4d76342e454..3e4951a2702 100644 --- a/service/sesv2/serializers.go +++ b/service/sesv2/serializers.go @@ -8233,6 +8233,11 @@ func awsRestjson1_serializeDocumentDkimSigningAttributes(v *types.DkimSigningAtt object := value.Object() defer object.Close() + if len(v.DomainSigningAttributesOrigin) > 0 { + ok := object.Key("DomainSigningAttributesOrigin") + ok.String(string(v.DomainSigningAttributesOrigin)) + } + if v.DomainSigningPrivateKey != nil { ok := object.Key("DomainSigningPrivateKey") ok.String(*v.DomainSigningPrivateKey) diff --git a/service/sesv2/types/enums.go b/service/sesv2/types/enums.go index 6b312ae8d86..f620ab19455 100644 --- a/service/sesv2/types/enums.go +++ b/service/sesv2/types/enums.go @@ -235,8 +235,30 @@ type DkimSigningAttributesOrigin string // Enum values for DkimSigningAttributesOrigin const ( - DkimSigningAttributesOriginAwsSes DkimSigningAttributesOrigin = "AWS_SES" - DkimSigningAttributesOriginExternal DkimSigningAttributesOrigin = "EXTERNAL" + DkimSigningAttributesOriginAwsSes DkimSigningAttributesOrigin = "AWS_SES" + DkimSigningAttributesOriginExternal DkimSigningAttributesOrigin = "EXTERNAL" + DkimSigningAttributesOriginAwsSesAfSouth1 DkimSigningAttributesOrigin = "AWS_SES_AF_SOUTH_1" + DkimSigningAttributesOriginAwsSesEuNorth1 DkimSigningAttributesOrigin = "AWS_SES_EU_NORTH_1" + DkimSigningAttributesOriginAwsSesApSouth1 DkimSigningAttributesOrigin = "AWS_SES_AP_SOUTH_1" + DkimSigningAttributesOriginAwsSesEuWest3 DkimSigningAttributesOrigin = "AWS_SES_EU_WEST_3" + DkimSigningAttributesOriginAwsSesEuWest2 DkimSigningAttributesOrigin = "AWS_SES_EU_WEST_2" + DkimSigningAttributesOriginAwsSesEuSouth1 DkimSigningAttributesOrigin = "AWS_SES_EU_SOUTH_1" + DkimSigningAttributesOriginAwsSesEuWest1 DkimSigningAttributesOrigin = "AWS_SES_EU_WEST_1" + DkimSigningAttributesOriginAwsSesApNortheast3 DkimSigningAttributesOrigin = "AWS_SES_AP_NORTHEAST_3" + DkimSigningAttributesOriginAwsSesApNortheast2 DkimSigningAttributesOrigin = "AWS_SES_AP_NORTHEAST_2" + DkimSigningAttributesOriginAwsSesMeSouth1 DkimSigningAttributesOrigin = "AWS_SES_ME_SOUTH_1" + DkimSigningAttributesOriginAwsSesApNortheast1 DkimSigningAttributesOrigin = "AWS_SES_AP_NORTHEAST_1" + DkimSigningAttributesOriginAwsSesIlCentral1 DkimSigningAttributesOrigin = "AWS_SES_IL_CENTRAL_1" + DkimSigningAttributesOriginAwsSesSaEast1 DkimSigningAttributesOrigin = "AWS_SES_SA_EAST_1" + DkimSigningAttributesOriginAwsSesCaCentral1 DkimSigningAttributesOrigin = "AWS_SES_CA_CENTRAL_1" + DkimSigningAttributesOriginAwsSesApSoutheast1 DkimSigningAttributesOrigin = "AWS_SES_AP_SOUTHEAST_1" + DkimSigningAttributesOriginAwsSesApSoutheast2 DkimSigningAttributesOrigin = "AWS_SES_AP_SOUTHEAST_2" + DkimSigningAttributesOriginAwsSesApSoutheast3 DkimSigningAttributesOrigin = "AWS_SES_AP_SOUTHEAST_3" + DkimSigningAttributesOriginAwsSesEuCentral1 DkimSigningAttributesOrigin = "AWS_SES_EU_CENTRAL_1" + DkimSigningAttributesOriginAwsSesUsEast1 DkimSigningAttributesOrigin = "AWS_SES_US_EAST_1" + DkimSigningAttributesOriginAwsSesUsEast2 DkimSigningAttributesOrigin = "AWS_SES_US_EAST_2" + DkimSigningAttributesOriginAwsSesUsWest1 DkimSigningAttributesOrigin = "AWS_SES_US_WEST_1" + DkimSigningAttributesOriginAwsSesUsWest2 DkimSigningAttributesOrigin = "AWS_SES_US_WEST_2" ) // Values returns all known values for DkimSigningAttributesOrigin. Note that this @@ -247,6 +269,28 @@ func (DkimSigningAttributesOrigin) Values() []DkimSigningAttributesOrigin { return []DkimSigningAttributesOrigin{ "AWS_SES", "EXTERNAL", + "AWS_SES_AF_SOUTH_1", + "AWS_SES_EU_NORTH_1", + "AWS_SES_AP_SOUTH_1", + "AWS_SES_EU_WEST_3", + "AWS_SES_EU_WEST_2", + "AWS_SES_EU_SOUTH_1", + "AWS_SES_EU_WEST_1", + "AWS_SES_AP_NORTHEAST_3", + "AWS_SES_AP_NORTHEAST_2", + "AWS_SES_ME_SOUTH_1", + "AWS_SES_AP_NORTHEAST_1", + "AWS_SES_IL_CENTRAL_1", + "AWS_SES_SA_EAST_1", + "AWS_SES_CA_CENTRAL_1", + "AWS_SES_AP_SOUTHEAST_1", + "AWS_SES_AP_SOUTHEAST_2", + "AWS_SES_AP_SOUTHEAST_3", + "AWS_SES_EU_CENTRAL_1", + "AWS_SES_US_EAST_1", + "AWS_SES_US_EAST_2", + "AWS_SES_US_WEST_1", + "AWS_SES_US_WEST_2", } } @@ -832,11 +876,16 @@ type VerificationError string // Enum values for VerificationError const ( - VerificationErrorServiceError VerificationError = "SERVICE_ERROR" - VerificationErrorDnsServerError VerificationError = "DNS_SERVER_ERROR" - VerificationErrorHostNotFound VerificationError = "HOST_NOT_FOUND" - VerificationErrorTypeNotFound VerificationError = "TYPE_NOT_FOUND" - VerificationErrorInvalidValue VerificationError = "INVALID_VALUE" + VerificationErrorServiceError VerificationError = "SERVICE_ERROR" + VerificationErrorDnsServerError VerificationError = "DNS_SERVER_ERROR" + VerificationErrorHostNotFound VerificationError = "HOST_NOT_FOUND" + VerificationErrorTypeNotFound VerificationError = "TYPE_NOT_FOUND" + VerificationErrorInvalidValue VerificationError = "INVALID_VALUE" + VerificationErrorReplicationAccessDenied VerificationError = "REPLICATION_ACCESS_DENIED" + VerificationErrorReplicationPrimaryNotFound VerificationError = "REPLICATION_PRIMARY_NOT_FOUND" + VerificationErrorReplicationPrimaryByoDkimNotSupported VerificationError = "REPLICATION_PRIMARY_BYO_DKIM_NOT_SUPPORTED" + VerificationErrorReplicationReplicaAsPrimaryNotSupported VerificationError = "REPLICATION_REPLICA_AS_PRIMARY_NOT_SUPPORTED" + VerificationErrorReplicationPrimaryInvalidRegion VerificationError = "REPLICATION_PRIMARY_INVALID_REGION" ) // Values returns all known values for VerificationError. Note that this can be @@ -850,6 +899,11 @@ func (VerificationError) Values() []VerificationError { "HOST_NOT_FOUND", "TYPE_NOT_FOUND", "INVALID_VALUE", + "REPLICATION_ACCESS_DENIED", + "REPLICATION_PRIMARY_NOT_FOUND", + "REPLICATION_PRIMARY_BYO_DKIM_NOT_SUPPORTED", + "REPLICATION_REPLICA_AS_PRIMARY_NOT_SUPPORTED", + "REPLICATION_PRIMARY_INVALID_REGION", } } diff --git a/service/sesv2/types/types.go b/service/sesv2/types/types.go index bc8def8bb34..1b968d6d8e0 100644 --- a/service/sesv2/types/types.go +++ b/service/sesv2/types/types.go @@ -676,6 +676,94 @@ type DkimAttributes struct { // - EXTERNAL – Indicates that DKIM was configured for the identity by using // Bring Your Own DKIM (BYODKIM). // + // - AWS_SES_AF_SOUTH_1 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in Africa (Cape Town) + // region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_EU_NORTH_1 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in Europe (Stockholm) + // region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_AP_SOUTH_1 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in Asia Pacific (Mumbai) + // region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_EU_WEST_3 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in Europe (Paris) region + // using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_EU_WEST_2 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in Europe (London) region + // using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_EU_SOUTH_1 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in Europe (Milan) region + // using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_EU_WEST_1 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in Europe (Ireland) region + // using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_AP_NORTHEAST_3 – Indicates that DKIM was configured for the identity + // by replicating signing attributes from a parent identity in Asia Pacific (Osaka) + // region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_AP_NORTHEAST_2 – Indicates that DKIM was configured for the identity + // by replicating signing attributes from a parent identity in Asia Pacific (Seoul) + // region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_ME_SOUTH_1 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in Middle East (Bahrain) + // region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_AP_NORTHEAST_1 – Indicates that DKIM was configured for the identity + // by replicating signing attributes from a parent identity in Asia Pacific (Tokyo) + // region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_IL_CENTRAL_1 – Indicates that DKIM was configured for the identity + // by replicating signing attributes from a parent identity in Israel (Tel Aviv) + // region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_SA_EAST_1 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in South America (São + // Paulo) region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_CA_CENTRAL_1 – Indicates that DKIM was configured for the identity + // by replicating signing attributes from a parent identity in Canada (Central) + // region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_AP_SOUTHEAST_1 – Indicates that DKIM was configured for the identity + // by replicating signing attributes from a parent identity in Asia Pacific + // (Singapore) region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_AP_SOUTHEAST_2 – Indicates that DKIM was configured for the identity + // by replicating signing attributes from a parent identity in Asia Pacific + // (Sydney) region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_AP_SOUTHEAST_3 – Indicates that DKIM was configured for the identity + // by replicating signing attributes from a parent identity in Asia Pacific + // (Jakarta) region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_EU_CENTRAL_1 – Indicates that DKIM was configured for the identity + // by replicating signing attributes from a parent identity in Europe (Frankfurt) + // region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_US_EAST_1 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in US East (N. Virginia) + // region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_US_EAST_2 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in US East (Ohio) region + // using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_US_WEST_1 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in US West (N. California) + // region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_US_WEST_2 – Indicates that DKIM was configured for the identity by + // replicating signing attributes from a parent identity in US West (Oregon) region + // using Deterministic Easy-DKIM (DEED). + // // [Easy DKIM]: https://docs.aws.amazon.com/ses/latest/DeveloperGuide/easy-dkim.html SigningAttributesOrigin DkimSigningAttributesOrigin @@ -726,6 +814,109 @@ type DkimAttributes struct { // for Easy DKIM type DkimSigningAttributes struct { + // The attribute to use for configuring DKIM for the identity depends on the + // operation: + // + // - For PutEmailIdentityDkimSigningAttributes : + // + // - None of the values are allowed - use the [SigningAttributesOrigin]SigningAttributesOrigin parameter + // instead + // + // - For CreateEmailIdentity when replicating a parent identity's DKIM + // configuration: + // + // - Allowed values: All values except AWS_SES and EXTERNAL + // + // - AWS_SES – Configure DKIM for the identity by using Easy DKIM. + // + // - EXTERNAL – Configure DKIM for the identity by using Bring Your Own DKIM + // (BYODKIM). + // + // - AWS_SES_AF_SOUTH_1 – Configure DKIM for the identity by replicating from a + // parent identity in Africa (Cape Town) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_EU_NORTH_1 – Configure DKIM for the identity by replicating from a + // parent identity in Europe (Stockholm) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_AP_SOUTH_1 – Configure DKIM for the identity by replicating from a + // parent identity in Asia Pacific (Mumbai) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_EU_WEST_3 – Configure DKIM for the identity by replicating from a + // parent identity in Europe (Paris) region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_EU_WEST_2 – Configure DKIM for the identity by replicating from a + // parent identity in Europe (London) region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_EU_SOUTH_1 – Configure DKIM for the identity by replicating from a + // parent identity in Europe (Milan) region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_EU_WEST_1 – Configure DKIM for the identity by replicating from a + // parent identity in Europe (Ireland) region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_AP_NORTHEAST_3 – Configure DKIM for the identity by replicating from + // a parent identity in Asia Pacific (Osaka) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_AP_NORTHEAST_2 – Configure DKIM for the identity by replicating from + // a parent identity in Asia Pacific (Seoul) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_ME_SOUTH_1 – Configure DKIM for the identity by replicating from a + // parent identity in Middle East (Bahrain) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_AP_NORTHEAST_1 – Configure DKIM for the identity by replicating from + // a parent identity in Asia Pacific (Tokyo) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_IL_CENTRAL_1 – Configure DKIM for the identity by replicating from a + // parent identity in Israel (Tel Aviv) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_SA_EAST_1 – Configure DKIM for the identity by replicating from a + // parent identity in South America (São Paulo) region using Deterministic + // Easy-DKIM (DEED). + // + // - AWS_SES_CA_CENTRAL_1 – Configure DKIM for the identity by replicating from a + // parent identity in Canada (Central) region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_AP_SOUTHEAST_1 – Configure DKIM for the identity by replicating from + // a parent identity in Asia Pacific (Singapore) region using Deterministic + // Easy-DKIM (DEED). + // + // - AWS_SES_AP_SOUTHEAST_2 – Configure DKIM for the identity by replicating from + // a parent identity in Asia Pacific (Sydney) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_AP_SOUTHEAST_3 – Configure DKIM for the identity by replicating from + // a parent identity in Asia Pacific (Jakarta) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_EU_CENTRAL_1 – Configure DKIM for the identity by replicating from a + // parent identity in Europe (Frankfurt) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_US_EAST_1 – Configure DKIM for the identity by replicating from a + // parent identity in US East (N. Virginia) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_US_EAST_2 – Configure DKIM for the identity by replicating from a + // parent identity in US East (Ohio) region using Deterministic Easy-DKIM (DEED). + // + // - AWS_SES_US_WEST_1 – Configure DKIM for the identity by replicating from a + // parent identity in US West (N. California) region using Deterministic Easy-DKIM + // (DEED). + // + // - AWS_SES_US_WEST_2 – Configure DKIM for the identity by replicating from a + // parent identity in US West (Oregon) region using Deterministic Easy-DKIM (DEED). + // + // + // [SigningAttributesOrigin]: https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_PutEmailIdentityDkimSigningAttributes.html#SES-PutEmailIdentityDkimSigningAttributes-request-SigningAttributesOrigin + DomainSigningAttributesOrigin DkimSigningAttributesOrigin + // [Bring Your Own DKIM] A private key that's used to generate a DKIM signature. // // The private key must use 1024 or 2048-bit RSA encryption, and must be encoded @@ -2338,6 +2529,29 @@ type VerificationInfo struct { // // - DNS_SERVER_ERROR – The DNS server encountered an issue and was unable to // complete the request. + // + // - REPLICATION_ACCESS_DENIED – The verification failed because the user does + // not have the required permissions to replicate the DKIM key from the primary + // region. Ensure you have the necessary permissions in both primary and replica + // regions. + // + // - REPLICATION_PRIMARY_NOT_FOUND – The verification failed because no + // corresponding identity was found in the specified primary region. Ensure the + // identity exists in the primary region before attempting replication. + // + // - REPLICATION_PRIMARY_BYO_DKIM_NOT_SUPPORTED – The verification failed because + // the identity in the primary region is configured with Bring Your Own DKIM + // (BYODKIM). DKIM key replication is only supported for identities using Easy + // DKIM. + // + // - REPLICATION_REPLICA_AS_PRIMARY_NOT_SUPPORTED – The verification failed + // because the specified primary identity is a replica of another identity, and + // multi-level replication is not supported; the primary identity must be a + // non-replica identity. + // + // - REPLICATION_PRIMARY_INVALID_REGION – The verification failed due to an + // invalid primary region specified. Ensure you provide a valid AWS region where + // Amazon SES is available and different from the replica region. ErrorType VerificationError // The last time a verification attempt was made for this identity.