From 274ccd15aa573fe6f7a8a93fb56c3d9f33926ff2 Mon Sep 17 00:00:00 2001 From: Sung-Kyu Yoo Date: Sun, 9 Aug 2026 12:50:46 +0900 Subject: [PATCH 1/6] fix(codegen): parse operations bound to Smithy resource shapes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The parser walked only the service shape's `operations` list, so every operation a model binds through a `resource` shape was invisible to codegen: 285 operations across 5 models, including bedrock at 0 of 101. `internal/services/bedrock/provider.go` already carried the workaround comment "since bedrock router is empty". Collect operations from resources too — `operations`, `collectionOperations` and the lifecycle slots — walking nested resources and visiting each once so a cyclic resource graph terminates. Regenerating adds 109 operations to the CRUD registry (ecs 56, transfer 41, ssoadmin 12) and removes none. Those operations previously returned InvalidAction and are now engine-served, consistent with the other 46 JSON-protocol services; the fidelity manifest declares the tier either way. bedrock and lambda are rest-json, so the engine does not serve them. Recovered per model: bedrock 0->101, lambda 19->85, ecs 12->76, transfer 29->71, sso-admin 67->79. --- changes/unreleased/Fixed-20260809-120100.yaml | 5 + internal/codegen/parser.go | 67 ++- internal/codegen/parser_test.go | 93 ++++ internal/generated/bedrock/base_provider.go | 405 ++++++++++++++++++ internal/generated/bedrock/router.go | 104 ++++- .../generated/crudregistry/registry_gen.go | 167 ++++++-- internal/generated/ecs/base_provider.go | 256 +++++++++++ internal/generated/ecs/router.go | 64 +++ internal/generated/lambda/base_provider.go | 264 ++++++++++++ internal/generated/lambda/router.go | 66 +++ internal/generated/ssoadmin/base_provider.go | 48 +++ internal/generated/ssoadmin/router.go | 12 + internal/generated/ssoadmin/types.go | 3 + internal/generated/transfer/base_provider.go | 168 ++++++++ internal/generated/transfer/router.go | 42 ++ 15 files changed, 1731 insertions(+), 33 deletions(-) create mode 100644 changes/unreleased/Fixed-20260809-120100.yaml diff --git a/changes/unreleased/Fixed-20260809-120100.yaml b/changes/unreleased/Fixed-20260809-120100.yaml new file mode 100644 index 0000000..7d4df19 --- /dev/null +++ b/changes/unreleased/Fixed-20260809-120100.yaml @@ -0,0 +1,5 @@ +kind: Fixed +body: Codegen now parses operations bound to Smithy resource shapes, recovering 285 operations that were invisible to the generator (bedrock 0 of 101, lambda 19 of 85, ecs 12 of 76, transfer 29 of 71, sso-admin 67 of 79) +time: 2026-08-09T12:01:00.000000+09:00 +custom: + Issue: "" diff --git a/internal/codegen/parser.go b/internal/codegen/parser.go index de1044c..8ca171f 100644 --- a/internal/codegen/parser.go +++ b/internal/codegen/parser.go @@ -28,6 +28,18 @@ type rawShape struct { Value *rawMember `json:"value"` Version string `json:"version"` Traits map[string]json.RawMessage `json:"traits"` + + // Resource bindings. Services and resources both nest resources, and a + // resource binds operations through `operations`, `collectionOperations` and + // the lifecycle slots below. + Resources []rawTarget `json:"resources"` + CollectionOperations []rawTarget `json:"collectionOperations"` + Create *rawTarget `json:"create"` + Put *rawTarget `json:"put"` + Read *rawTarget `json:"read"` + Update *rawTarget `json:"update"` + Delete *rawTarget `json:"delete"` + List *rawTarget `json:"list"` } type rawTarget struct { @@ -80,12 +92,12 @@ func ParseSmithyJSON(data []byte) (*SmithyModel, error) { } // Parse operations - for _, opRef := range serviceShape.Operations { - opShape, ok := parsed[opRef.Target] + for _, opFQN := range collectOperationTargets(parsed, serviceShape) { + opShape, ok := parsed[opFQN] if !ok { continue } - op := Operation{Name: shortName(opRef.Target)} + op := Operation{Name: shortName(opFQN)} if opShape.Input != nil { if opShape.Input.Target == "smithy.api#Unit" { op.InputName = "SmithyUnit" @@ -261,6 +273,55 @@ func resolveSimpleType(shapes map[string]*Shape) { } } +// collectOperationTargets returns the FQN of every operation the service binds, +// walking both the service's own operations list and every resource reachable +// from it. Smithy lets a resource carry operations through `operations`, +// `collectionOperations` and the lifecycle slots, so a model built around +// resources (lambda, ecs, bedrock) exposes only a fraction of its API when the +// service list is read alone. Resources are visited once, so a cyclic resource +// graph terminates. +func collectOperationTargets(shapes map[string]*rawShape, service *rawShape) []string { + var targets []string + seen := make(map[string]bool) + add := func(refs ...*rawTarget) { + for _, ref := range refs { + if ref == nil || ref.Target == "" || seen[ref.Target] { + continue + } + seen[ref.Target] = true + targets = append(targets, ref.Target) + } + } + addAll := func(refs []rawTarget) { + for i := range refs { + add(&refs[i]) + } + } + + addAll(service.Operations) + + visited := make(map[string]bool) + queue := append([]rawTarget(nil), service.Resources...) + for len(queue) > 0 { + ref := queue[0] + queue = queue[1:] + if visited[ref.Target] { + continue + } + visited[ref.Target] = true + + res, ok := shapes[ref.Target] + if !ok || res.Type != "resource" { + continue + } + addAll(res.Operations) + addAll(res.CollectionOperations) + add(res.Create, res.Put, res.Read, res.Update, res.Delete, res.List) + queue = append(queue, res.Resources...) + } + return targets +} + func shortName(fqn string) string { parts := strings.Split(fqn, "#") if len(parts) == 2 { diff --git a/internal/codegen/parser_test.go b/internal/codegen/parser_test.go index b0bffcb..878adb1 100644 --- a/internal/codegen/parser_test.go +++ b/internal/codegen/parser_test.go @@ -72,3 +72,96 @@ func TestParseSmithyJSON(t *testing.T) { require.True(t, ok) assert.Equal(t, ShapeList, bucketList.Type) } + +// resourceModel is a minimal model whose operations hang off resource shapes +// rather than the service's own operations list — the shape real AWS models like +// lambda, ecs and bedrock use. +const resourceModel = `{ + "smithy": "2.0", + "shapes": { + "com.amazonaws.demo#Demo": { + "type": "service", + "version": "2020-01-01", + "operations": [{"target": "com.amazonaws.demo#DirectOp"}], + "resources": [{"target": "com.amazonaws.demo#Widget"}], + "traits": {"aws.protocols#awsJson1_1": {}} + }, + "com.amazonaws.demo#Widget": { + "type": "resource", + "read": {"target": "com.amazonaws.demo#GetWidget"}, + "delete": {"target": "com.amazonaws.demo#DeleteWidget"}, + "list": {"target": "com.amazonaws.demo#ListWidgets"}, + "operations": [{"target": "com.amazonaws.demo#TagWidget"}], + "collectionOperations": [{"target": "com.amazonaws.demo#PurgeWidgets"}], + "resources": [{"target": "com.amazonaws.demo#Gadget"}] + }, + "com.amazonaws.demo#Gadget": { + "type": "resource", + "read": {"target": "com.amazonaws.demo#GetGadget"} + }, + "com.amazonaws.demo#DirectOp": {"type": "operation"}, + "com.amazonaws.demo#GetWidget": {"type": "operation", "output": {"target": "com.amazonaws.demo#GetWidgetOutput"}}, + "com.amazonaws.demo#DeleteWidget": {"type": "operation"}, + "com.amazonaws.demo#ListWidgets": {"type": "operation"}, + "com.amazonaws.demo#TagWidget": {"type": "operation"}, + "com.amazonaws.demo#PurgeWidgets": {"type": "operation"}, + "com.amazonaws.demo#GetGadget": {"type": "operation"}, + "com.amazonaws.demo#GetWidgetOutput": {"type": "structure", "members": {}} + } +}` + +func TestParseSmithyJSON_ResourceAttachedOperations(t *testing.T) { + model, err := ParseSmithyJSON([]byte(resourceModel)) + require.NoError(t, err) + + names := make([]string, 0, len(model.Operations)) + for _, op := range model.Operations { + names = append(names, op.Name) + } + + // Lifecycle bindings, operations, collectionOperations and nested resources + // all contribute; the service's own list still counts. + assert.Equal(t, []string{ + "DeleteWidget", "DirectOp", "GetGadget", "GetWidget", + "ListWidgets", "PurgeWidgets", "TagWidget", + }, names, "operations must be collected from resources and sorted") + + // Output wiring survives the resource walk. + var getWidget *Operation + for i := range model.Operations { + if model.Operations[i].Name == "GetWidget" { + getWidget = &model.Operations[i] + } + } + require.NotNil(t, getWidget) + assert.Equal(t, "GetWidgetOutput", getWidget.OutputName) +} + +func TestParseSmithyJSON_ResourceCycleTerminates(t *testing.T) { + const cyclic = `{ + "smithy": "2.0", + "shapes": { + "com.amazonaws.demo#Demo": { + "type": "service", + "version": "2020-01-01", + "resources": [{"target": "com.amazonaws.demo#A"}], + "traits": {"aws.protocols#awsJson1_1": {}} + }, + "com.amazonaws.demo#A": { + "type": "resource", + "read": {"target": "com.amazonaws.demo#GetA"}, + "resources": [{"target": "com.amazonaws.demo#B"}] + }, + "com.amazonaws.demo#B": { + "type": "resource", + "resources": [{"target": "com.amazonaws.demo#A"}] + }, + "com.amazonaws.demo#GetA": {"type": "operation"} + } + }` + + model, err := ParseSmithyJSON([]byte(cyclic)) + require.NoError(t, err) + require.Len(t, model.Operations, 1) + assert.Equal(t, "GetA", model.Operations[0].Name) +} diff --git a/internal/generated/bedrock/base_provider.go b/internal/generated/bedrock/base_provider.go index ee98a33..a2f5341 100644 --- a/internal/generated/bedrock/base_provider.go +++ b/internal/generated/bedrock/base_provider.go @@ -3,9 +3,414 @@ package bedrock import ( + "context" "fmt" ) var ErrNotImplemented = fmt.Errorf("operation not implemented") type BaseProvider struct{} + +func (b *BaseProvider) BatchDeleteEvaluationJob(ctx context.Context, input *BatchDeleteEvaluationJobRequest) (*BatchDeleteEvaluationJobResponse, error) { + return nil, fmt.Errorf("BatchDeleteEvaluationJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CancelAutomatedReasoningPolicyBuildWorkflow(ctx context.Context, input *CancelAutomatedReasoningPolicyBuildWorkflowRequest) (*CancelAutomatedReasoningPolicyBuildWorkflowResponse, error) { + return nil, fmt.Errorf("CancelAutomatedReasoningPolicyBuildWorkflow: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateAutomatedReasoningPolicy(ctx context.Context, input *CreateAutomatedReasoningPolicyRequest) (*CreateAutomatedReasoningPolicyResponse, error) { + return nil, fmt.Errorf("CreateAutomatedReasoningPolicy: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateAutomatedReasoningPolicyTestCase(ctx context.Context, input *CreateAutomatedReasoningPolicyTestCaseRequest) (*CreateAutomatedReasoningPolicyTestCaseResponse, error) { + return nil, fmt.Errorf("CreateAutomatedReasoningPolicyTestCase: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateAutomatedReasoningPolicyVersion(ctx context.Context, input *CreateAutomatedReasoningPolicyVersionRequest) (*CreateAutomatedReasoningPolicyVersionResponse, error) { + return nil, fmt.Errorf("CreateAutomatedReasoningPolicyVersion: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateCustomModel(ctx context.Context, input *CreateCustomModelRequest) (*CreateCustomModelResponse, error) { + return nil, fmt.Errorf("CreateCustomModel: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateCustomModelDeployment(ctx context.Context, input *CreateCustomModelDeploymentRequest) (*CreateCustomModelDeploymentResponse, error) { + return nil, fmt.Errorf("CreateCustomModelDeployment: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateEvaluationJob(ctx context.Context, input *CreateEvaluationJobRequest) (*CreateEvaluationJobResponse, error) { + return nil, fmt.Errorf("CreateEvaluationJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateFoundationModelAgreement(ctx context.Context, input *CreateFoundationModelAgreementRequest) (*CreateFoundationModelAgreementResponse, error) { + return nil, fmt.Errorf("CreateFoundationModelAgreement: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateGuardrail(ctx context.Context, input *CreateGuardrailRequest) (*CreateGuardrailResponse, error) { + return nil, fmt.Errorf("CreateGuardrail: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateGuardrailVersion(ctx context.Context, input *CreateGuardrailVersionRequest) (*CreateGuardrailVersionResponse, error) { + return nil, fmt.Errorf("CreateGuardrailVersion: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateInferenceProfile(ctx context.Context, input *CreateInferenceProfileRequest) (*CreateInferenceProfileResponse, error) { + return nil, fmt.Errorf("CreateInferenceProfile: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateMarketplaceModelEndpoint(ctx context.Context, input *CreateMarketplaceModelEndpointRequest) (*CreateMarketplaceModelEndpointResponse, error) { + return nil, fmt.Errorf("CreateMarketplaceModelEndpoint: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateModelCopyJob(ctx context.Context, input *CreateModelCopyJobRequest) (*CreateModelCopyJobResponse, error) { + return nil, fmt.Errorf("CreateModelCopyJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateModelCustomizationJob(ctx context.Context, input *CreateModelCustomizationJobRequest) (*CreateModelCustomizationJobResponse, error) { + return nil, fmt.Errorf("CreateModelCustomizationJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateModelImportJob(ctx context.Context, input *CreateModelImportJobRequest) (*CreateModelImportJobResponse, error) { + return nil, fmt.Errorf("CreateModelImportJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateModelInvocationJob(ctx context.Context, input *CreateModelInvocationJobRequest) (*CreateModelInvocationJobResponse, error) { + return nil, fmt.Errorf("CreateModelInvocationJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreatePromptRouter(ctx context.Context, input *CreatePromptRouterRequest) (*CreatePromptRouterResponse, error) { + return nil, fmt.Errorf("CreatePromptRouter: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateProvisionedModelThroughput(ctx context.Context, input *CreateProvisionedModelThroughputRequest) (*CreateProvisionedModelThroughputResponse, error) { + return nil, fmt.Errorf("CreateProvisionedModelThroughput: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteAutomatedReasoningPolicy(ctx context.Context, input *DeleteAutomatedReasoningPolicyRequest) (*DeleteAutomatedReasoningPolicyResponse, error) { + return nil, fmt.Errorf("DeleteAutomatedReasoningPolicy: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteAutomatedReasoningPolicyBuildWorkflow(ctx context.Context, input *DeleteAutomatedReasoningPolicyBuildWorkflowRequest) (*DeleteAutomatedReasoningPolicyBuildWorkflowResponse, error) { + return nil, fmt.Errorf("DeleteAutomatedReasoningPolicyBuildWorkflow: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteAutomatedReasoningPolicyTestCase(ctx context.Context, input *DeleteAutomatedReasoningPolicyTestCaseRequest) (*DeleteAutomatedReasoningPolicyTestCaseResponse, error) { + return nil, fmt.Errorf("DeleteAutomatedReasoningPolicyTestCase: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteCustomModel(ctx context.Context, input *DeleteCustomModelRequest) (*DeleteCustomModelResponse, error) { + return nil, fmt.Errorf("DeleteCustomModel: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteCustomModelDeployment(ctx context.Context, input *DeleteCustomModelDeploymentRequest) (*DeleteCustomModelDeploymentResponse, error) { + return nil, fmt.Errorf("DeleteCustomModelDeployment: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteEnforcedGuardrailConfiguration(ctx context.Context, input *DeleteEnforcedGuardrailConfigurationRequest) (*DeleteEnforcedGuardrailConfigurationResponse, error) { + return nil, fmt.Errorf("DeleteEnforcedGuardrailConfiguration: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteFoundationModelAgreement(ctx context.Context, input *DeleteFoundationModelAgreementRequest) (*DeleteFoundationModelAgreementResponse, error) { + return nil, fmt.Errorf("DeleteFoundationModelAgreement: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteGuardrail(ctx context.Context, input *DeleteGuardrailRequest) (*DeleteGuardrailResponse, error) { + return nil, fmt.Errorf("DeleteGuardrail: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteImportedModel(ctx context.Context, input *DeleteImportedModelRequest) (*DeleteImportedModelResponse, error) { + return nil, fmt.Errorf("DeleteImportedModel: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteInferenceProfile(ctx context.Context, input *DeleteInferenceProfileRequest) (*DeleteInferenceProfileResponse, error) { + return nil, fmt.Errorf("DeleteInferenceProfile: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteMarketplaceModelEndpoint(ctx context.Context, input *DeleteMarketplaceModelEndpointRequest) (*DeleteMarketplaceModelEndpointResponse, error) { + return nil, fmt.Errorf("DeleteMarketplaceModelEndpoint: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteModelInvocationLoggingConfiguration(ctx context.Context, input *DeleteModelInvocationLoggingConfigurationRequest) (*DeleteModelInvocationLoggingConfigurationResponse, error) { + return nil, fmt.Errorf("DeleteModelInvocationLoggingConfiguration: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeletePromptRouter(ctx context.Context, input *DeletePromptRouterRequest) (*DeletePromptRouterResponse, error) { + return nil, fmt.Errorf("DeletePromptRouter: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteProvisionedModelThroughput(ctx context.Context, input *DeleteProvisionedModelThroughputRequest) (*DeleteProvisionedModelThroughputResponse, error) { + return nil, fmt.Errorf("DeleteProvisionedModelThroughput: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteResourcePolicy(ctx context.Context, input *DeleteResourcePolicyRequest) (*DeleteResourcePolicyResponse, error) { + return nil, fmt.Errorf("DeleteResourcePolicy: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeregisterMarketplaceModelEndpoint(ctx context.Context, input *DeregisterMarketplaceModelEndpointRequest) (*DeregisterMarketplaceModelEndpointResponse, error) { + return nil, fmt.Errorf("DeregisterMarketplaceModelEndpoint: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ExportAutomatedReasoningPolicyVersion(ctx context.Context, input *ExportAutomatedReasoningPolicyVersionRequest) (*ExportAutomatedReasoningPolicyVersionResponse, error) { + return nil, fmt.Errorf("ExportAutomatedReasoningPolicyVersion: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetAutomatedReasoningPolicy(ctx context.Context, input *GetAutomatedReasoningPolicyRequest) (*GetAutomatedReasoningPolicyResponse, error) { + return nil, fmt.Errorf("GetAutomatedReasoningPolicy: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetAutomatedReasoningPolicyAnnotations(ctx context.Context, input *GetAutomatedReasoningPolicyAnnotationsRequest) (*GetAutomatedReasoningPolicyAnnotationsResponse, error) { + return nil, fmt.Errorf("GetAutomatedReasoningPolicyAnnotations: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetAutomatedReasoningPolicyBuildWorkflow(ctx context.Context, input *GetAutomatedReasoningPolicyBuildWorkflowRequest) (*GetAutomatedReasoningPolicyBuildWorkflowResponse, error) { + return nil, fmt.Errorf("GetAutomatedReasoningPolicyBuildWorkflow: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetAutomatedReasoningPolicyBuildWorkflowResultAssets(ctx context.Context, input *GetAutomatedReasoningPolicyBuildWorkflowResultAssetsRequest) (*GetAutomatedReasoningPolicyBuildWorkflowResultAssetsResponse, error) { + return nil, fmt.Errorf("GetAutomatedReasoningPolicyBuildWorkflowResultAssets: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetAutomatedReasoningPolicyNextScenario(ctx context.Context, input *GetAutomatedReasoningPolicyNextScenarioRequest) (*GetAutomatedReasoningPolicyNextScenarioResponse, error) { + return nil, fmt.Errorf("GetAutomatedReasoningPolicyNextScenario: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetAutomatedReasoningPolicyTestCase(ctx context.Context, input *GetAutomatedReasoningPolicyTestCaseRequest) (*GetAutomatedReasoningPolicyTestCaseResponse, error) { + return nil, fmt.Errorf("GetAutomatedReasoningPolicyTestCase: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetAutomatedReasoningPolicyTestResult(ctx context.Context, input *GetAutomatedReasoningPolicyTestResultRequest) (*GetAutomatedReasoningPolicyTestResultResponse, error) { + return nil, fmt.Errorf("GetAutomatedReasoningPolicyTestResult: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetCustomModel(ctx context.Context, input *GetCustomModelRequest) (*GetCustomModelResponse, error) { + return nil, fmt.Errorf("GetCustomModel: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetCustomModelDeployment(ctx context.Context, input *GetCustomModelDeploymentRequest) (*GetCustomModelDeploymentResponse, error) { + return nil, fmt.Errorf("GetCustomModelDeployment: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetEvaluationJob(ctx context.Context, input *GetEvaluationJobRequest) (*GetEvaluationJobResponse, error) { + return nil, fmt.Errorf("GetEvaluationJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetFoundationModel(ctx context.Context, input *GetFoundationModelRequest) (*GetFoundationModelResponse, error) { + return nil, fmt.Errorf("GetFoundationModel: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetFoundationModelAvailability(ctx context.Context, input *GetFoundationModelAvailabilityRequest) (*GetFoundationModelAvailabilityResponse, error) { + return nil, fmt.Errorf("GetFoundationModelAvailability: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetGuardrail(ctx context.Context, input *GetGuardrailRequest) (*GetGuardrailResponse, error) { + return nil, fmt.Errorf("GetGuardrail: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetImportedModel(ctx context.Context, input *GetImportedModelRequest) (*GetImportedModelResponse, error) { + return nil, fmt.Errorf("GetImportedModel: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetInferenceProfile(ctx context.Context, input *GetInferenceProfileRequest) (*GetInferenceProfileResponse, error) { + return nil, fmt.Errorf("GetInferenceProfile: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetMarketplaceModelEndpoint(ctx context.Context, input *GetMarketplaceModelEndpointRequest) (*GetMarketplaceModelEndpointResponse, error) { + return nil, fmt.Errorf("GetMarketplaceModelEndpoint: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetModelCopyJob(ctx context.Context, input *GetModelCopyJobRequest) (*GetModelCopyJobResponse, error) { + return nil, fmt.Errorf("GetModelCopyJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetModelCustomizationJob(ctx context.Context, input *GetModelCustomizationJobRequest) (*GetModelCustomizationJobResponse, error) { + return nil, fmt.Errorf("GetModelCustomizationJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetModelImportJob(ctx context.Context, input *GetModelImportJobRequest) (*GetModelImportJobResponse, error) { + return nil, fmt.Errorf("GetModelImportJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetModelInvocationJob(ctx context.Context, input *GetModelInvocationJobRequest) (*GetModelInvocationJobResponse, error) { + return nil, fmt.Errorf("GetModelInvocationJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetModelInvocationLoggingConfiguration(ctx context.Context, input *GetModelInvocationLoggingConfigurationRequest) (*GetModelInvocationLoggingConfigurationResponse, error) { + return nil, fmt.Errorf("GetModelInvocationLoggingConfiguration: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetPromptRouter(ctx context.Context, input *GetPromptRouterRequest) (*GetPromptRouterResponse, error) { + return nil, fmt.Errorf("GetPromptRouter: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetProvisionedModelThroughput(ctx context.Context, input *GetProvisionedModelThroughputRequest) (*GetProvisionedModelThroughputResponse, error) { + return nil, fmt.Errorf("GetProvisionedModelThroughput: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetResourcePolicy(ctx context.Context, input *GetResourcePolicyRequest) (*GetResourcePolicyResponse, error) { + return nil, fmt.Errorf("GetResourcePolicy: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetUseCaseForModelAccess(ctx context.Context, input *GetUseCaseForModelAccessRequest) (*GetUseCaseForModelAccessResponse, error) { + return nil, fmt.Errorf("GetUseCaseForModelAccess: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListAutomatedReasoningPolicies(ctx context.Context, input *ListAutomatedReasoningPoliciesRequest) (*ListAutomatedReasoningPoliciesResponse, error) { + return nil, fmt.Errorf("ListAutomatedReasoningPolicies: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListAutomatedReasoningPolicyBuildWorkflows(ctx context.Context, input *ListAutomatedReasoningPolicyBuildWorkflowsRequest) (*ListAutomatedReasoningPolicyBuildWorkflowsResponse, error) { + return nil, fmt.Errorf("ListAutomatedReasoningPolicyBuildWorkflows: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListAutomatedReasoningPolicyTestCases(ctx context.Context, input *ListAutomatedReasoningPolicyTestCasesRequest) (*ListAutomatedReasoningPolicyTestCasesResponse, error) { + return nil, fmt.Errorf("ListAutomatedReasoningPolicyTestCases: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListAutomatedReasoningPolicyTestResults(ctx context.Context, input *ListAutomatedReasoningPolicyTestResultsRequest) (*ListAutomatedReasoningPolicyTestResultsResponse, error) { + return nil, fmt.Errorf("ListAutomatedReasoningPolicyTestResults: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListCustomModelDeployments(ctx context.Context, input *ListCustomModelDeploymentsRequest) (*ListCustomModelDeploymentsResponse, error) { + return nil, fmt.Errorf("ListCustomModelDeployments: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListCustomModels(ctx context.Context, input *ListCustomModelsRequest) (*ListCustomModelsResponse, error) { + return nil, fmt.Errorf("ListCustomModels: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListEnforcedGuardrailsConfiguration(ctx context.Context, input *ListEnforcedGuardrailsConfigurationRequest) (*ListEnforcedGuardrailsConfigurationResponse, error) { + return nil, fmt.Errorf("ListEnforcedGuardrailsConfiguration: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListEvaluationJobs(ctx context.Context, input *ListEvaluationJobsRequest) (*ListEvaluationJobsResponse, error) { + return nil, fmt.Errorf("ListEvaluationJobs: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListFoundationModelAgreementOffers(ctx context.Context, input *ListFoundationModelAgreementOffersRequest) (*ListFoundationModelAgreementOffersResponse, error) { + return nil, fmt.Errorf("ListFoundationModelAgreementOffers: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListFoundationModels(ctx context.Context, input *ListFoundationModelsRequest) (*ListFoundationModelsResponse, error) { + return nil, fmt.Errorf("ListFoundationModels: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListGuardrails(ctx context.Context, input *ListGuardrailsRequest) (*ListGuardrailsResponse, error) { + return nil, fmt.Errorf("ListGuardrails: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListImportedModels(ctx context.Context, input *ListImportedModelsRequest) (*ListImportedModelsResponse, error) { + return nil, fmt.Errorf("ListImportedModels: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListInferenceProfiles(ctx context.Context, input *ListInferenceProfilesRequest) (*ListInferenceProfilesResponse, error) { + return nil, fmt.Errorf("ListInferenceProfiles: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListMarketplaceModelEndpoints(ctx context.Context, input *ListMarketplaceModelEndpointsRequest) (*ListMarketplaceModelEndpointsResponse, error) { + return nil, fmt.Errorf("ListMarketplaceModelEndpoints: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListModelCopyJobs(ctx context.Context, input *ListModelCopyJobsRequest) (*ListModelCopyJobsResponse, error) { + return nil, fmt.Errorf("ListModelCopyJobs: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListModelCustomizationJobs(ctx context.Context, input *ListModelCustomizationJobsRequest) (*ListModelCustomizationJobsResponse, error) { + return nil, fmt.Errorf("ListModelCustomizationJobs: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListModelImportJobs(ctx context.Context, input *ListModelImportJobsRequest) (*ListModelImportJobsResponse, error) { + return nil, fmt.Errorf("ListModelImportJobs: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListModelInvocationJobs(ctx context.Context, input *ListModelInvocationJobsRequest) (*ListModelInvocationJobsResponse, error) { + return nil, fmt.Errorf("ListModelInvocationJobs: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListPromptRouters(ctx context.Context, input *ListPromptRoutersRequest) (*ListPromptRoutersResponse, error) { + return nil, fmt.Errorf("ListPromptRouters: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListProvisionedModelThroughputs(ctx context.Context, input *ListProvisionedModelThroughputsRequest) (*ListProvisionedModelThroughputsResponse, error) { + return nil, fmt.Errorf("ListProvisionedModelThroughputs: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListTagsForResource(ctx context.Context, input *ListTagsForResourceRequest) (*ListTagsForResourceResponse, error) { + return nil, fmt.Errorf("ListTagsForResource: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PutEnforcedGuardrailConfiguration(ctx context.Context, input *PutEnforcedGuardrailConfigurationRequest) (*PutEnforcedGuardrailConfigurationResponse, error) { + return nil, fmt.Errorf("PutEnforcedGuardrailConfiguration: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PutModelInvocationLoggingConfiguration(ctx context.Context, input *PutModelInvocationLoggingConfigurationRequest) (*PutModelInvocationLoggingConfigurationResponse, error) { + return nil, fmt.Errorf("PutModelInvocationLoggingConfiguration: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PutResourcePolicy(ctx context.Context, input *PutResourcePolicyRequest) (*PutResourcePolicyResponse, error) { + return nil, fmt.Errorf("PutResourcePolicy: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PutUseCaseForModelAccess(ctx context.Context, input *PutUseCaseForModelAccessRequest) (*PutUseCaseForModelAccessResponse, error) { + return nil, fmt.Errorf("PutUseCaseForModelAccess: %w", ErrNotImplemented) +} + +func (b *BaseProvider) RegisterMarketplaceModelEndpoint(ctx context.Context, input *RegisterMarketplaceModelEndpointRequest) (*RegisterMarketplaceModelEndpointResponse, error) { + return nil, fmt.Errorf("RegisterMarketplaceModelEndpoint: %w", ErrNotImplemented) +} + +func (b *BaseProvider) StartAutomatedReasoningPolicyBuildWorkflow(ctx context.Context, input *StartAutomatedReasoningPolicyBuildWorkflowRequest) (*StartAutomatedReasoningPolicyBuildWorkflowResponse, error) { + return nil, fmt.Errorf("StartAutomatedReasoningPolicyBuildWorkflow: %w", ErrNotImplemented) +} + +func (b *BaseProvider) StartAutomatedReasoningPolicyTestWorkflow(ctx context.Context, input *StartAutomatedReasoningPolicyTestWorkflowRequest) (*StartAutomatedReasoningPolicyTestWorkflowResponse, error) { + return nil, fmt.Errorf("StartAutomatedReasoningPolicyTestWorkflow: %w", ErrNotImplemented) +} + +func (b *BaseProvider) StopEvaluationJob(ctx context.Context, input *StopEvaluationJobRequest) (*StopEvaluationJobResponse, error) { + return nil, fmt.Errorf("StopEvaluationJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) StopModelCustomizationJob(ctx context.Context, input *StopModelCustomizationJobRequest) (*StopModelCustomizationJobResponse, error) { + return nil, fmt.Errorf("StopModelCustomizationJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) StopModelInvocationJob(ctx context.Context, input *StopModelInvocationJobRequest) (*StopModelInvocationJobResponse, error) { + return nil, fmt.Errorf("StopModelInvocationJob: %w", ErrNotImplemented) +} + +func (b *BaseProvider) TagResource(ctx context.Context, input *TagResourceRequest) (*TagResourceResponse, error) { + return nil, fmt.Errorf("TagResource: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UntagResource(ctx context.Context, input *UntagResourceRequest) (*UntagResourceResponse, error) { + return nil, fmt.Errorf("UntagResource: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateAutomatedReasoningPolicy(ctx context.Context, input *UpdateAutomatedReasoningPolicyRequest) (*UpdateAutomatedReasoningPolicyResponse, error) { + return nil, fmt.Errorf("UpdateAutomatedReasoningPolicy: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateAutomatedReasoningPolicyAnnotations(ctx context.Context, input *UpdateAutomatedReasoningPolicyAnnotationsRequest) (*UpdateAutomatedReasoningPolicyAnnotationsResponse, error) { + return nil, fmt.Errorf("UpdateAutomatedReasoningPolicyAnnotations: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateAutomatedReasoningPolicyTestCase(ctx context.Context, input *UpdateAutomatedReasoningPolicyTestCaseRequest) (*UpdateAutomatedReasoningPolicyTestCaseResponse, error) { + return nil, fmt.Errorf("UpdateAutomatedReasoningPolicyTestCase: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateCustomModelDeployment(ctx context.Context, input *UpdateCustomModelDeploymentRequest) (*UpdateCustomModelDeploymentResponse, error) { + return nil, fmt.Errorf("UpdateCustomModelDeployment: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateGuardrail(ctx context.Context, input *UpdateGuardrailRequest) (*UpdateGuardrailResponse, error) { + return nil, fmt.Errorf("UpdateGuardrail: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateMarketplaceModelEndpoint(ctx context.Context, input *UpdateMarketplaceModelEndpointRequest) (*UpdateMarketplaceModelEndpointResponse, error) { + return nil, fmt.Errorf("UpdateMarketplaceModelEndpoint: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateProvisionedModelThroughput(ctx context.Context, input *UpdateProvisionedModelThroughputRequest) (*UpdateProvisionedModelThroughputResponse, error) { + return nil, fmt.Errorf("UpdateProvisionedModelThroughput: %w", ErrNotImplemented) +} diff --git a/internal/generated/bedrock/router.go b/internal/generated/bedrock/router.go index 02ef340..f1a2cb6 100644 --- a/internal/generated/bedrock/router.go +++ b/internal/generated/bedrock/router.go @@ -15,7 +15,109 @@ type OperationRoute struct { } // OperationRoutes is the list of all routes for this service. -var OperationRoutes = []OperationRoute{} +var OperationRoutes = []OperationRoute{ + {Method: "POST", Pattern: "/evaluation-jobs/batch-delete", Operation: "BatchDeleteEvaluationJob"}, + {Method: "POST", Pattern: "/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/cancel", Operation: "CancelAutomatedReasoningPolicyBuildWorkflow"}, + {Method: "POST", Pattern: "/automated-reasoning-policies", Operation: "CreateAutomatedReasoningPolicy"}, + {Method: "POST", Pattern: "/automated-reasoning-policies/{policyArn}/test-cases", Operation: "CreateAutomatedReasoningPolicyTestCase"}, + {Method: "POST", Pattern: "/automated-reasoning-policies/{policyArn}/versions", Operation: "CreateAutomatedReasoningPolicyVersion"}, + {Method: "POST", Pattern: "/custom-models/create-custom-model", Operation: "CreateCustomModel"}, + {Method: "POST", Pattern: "/model-customization/custom-model-deployments", Operation: "CreateCustomModelDeployment"}, + {Method: "POST", Pattern: "/evaluation-jobs", Operation: "CreateEvaluationJob"}, + {Method: "POST", Pattern: "/create-foundation-model-agreement", Operation: "CreateFoundationModelAgreement"}, + {Method: "POST", Pattern: "/guardrails", Operation: "CreateGuardrail"}, + {Method: "POST", Pattern: "/guardrails/{guardrailIdentifier}", Operation: "CreateGuardrailVersion"}, + {Method: "POST", Pattern: "/inference-profiles", Operation: "CreateInferenceProfile"}, + {Method: "POST", Pattern: "/marketplace-model/endpoints", Operation: "CreateMarketplaceModelEndpoint"}, + {Method: "POST", Pattern: "/model-copy-jobs", Operation: "CreateModelCopyJob"}, + {Method: "POST", Pattern: "/model-customization-jobs", Operation: "CreateModelCustomizationJob"}, + {Method: "POST", Pattern: "/model-import-jobs", Operation: "CreateModelImportJob"}, + {Method: "POST", Pattern: "/model-invocation-job", Operation: "CreateModelInvocationJob"}, + {Method: "POST", Pattern: "/prompt-routers", Operation: "CreatePromptRouter"}, + {Method: "POST", Pattern: "/provisioned-model-throughput", Operation: "CreateProvisionedModelThroughput"}, + {Method: "DELETE", Pattern: "/automated-reasoning-policies/{policyArn}", Operation: "DeleteAutomatedReasoningPolicy"}, + {Method: "DELETE", Pattern: "/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}", Operation: "DeleteAutomatedReasoningPolicyBuildWorkflow"}, + {Method: "DELETE", Pattern: "/automated-reasoning-policies/{policyArn}/test-cases/{testCaseId}", Operation: "DeleteAutomatedReasoningPolicyTestCase"}, + {Method: "DELETE", Pattern: "/custom-models/{modelIdentifier}", Operation: "DeleteCustomModel"}, + {Method: "DELETE", Pattern: "/model-customization/custom-model-deployments/{customModelDeploymentIdentifier}", Operation: "DeleteCustomModelDeployment"}, + {Method: "DELETE", Pattern: "/enforcedGuardrailsConfiguration/{configId}", Operation: "DeleteEnforcedGuardrailConfiguration"}, + {Method: "POST", Pattern: "/delete-foundation-model-agreement", Operation: "DeleteFoundationModelAgreement"}, + {Method: "DELETE", Pattern: "/guardrails/{guardrailIdentifier}", Operation: "DeleteGuardrail"}, + {Method: "DELETE", Pattern: "/imported-models/{modelIdentifier}", Operation: "DeleteImportedModel"}, + {Method: "DELETE", Pattern: "/inference-profiles/{inferenceProfileIdentifier}", Operation: "DeleteInferenceProfile"}, + {Method: "DELETE", Pattern: "/marketplace-model/endpoints/{endpointArn}", Operation: "DeleteMarketplaceModelEndpoint"}, + {Method: "DELETE", Pattern: "/logging/modelinvocations", Operation: "DeleteModelInvocationLoggingConfiguration"}, + {Method: "DELETE", Pattern: "/prompt-routers/{promptRouterArn}", Operation: "DeletePromptRouter"}, + {Method: "DELETE", Pattern: "/provisioned-model-throughput/{provisionedModelId}", Operation: "DeleteProvisionedModelThroughput"}, + {Method: "DELETE", Pattern: "/resource-policy/{resourceArn}", Operation: "DeleteResourcePolicy"}, + {Method: "DELETE", Pattern: "/marketplace-model/endpoints/{endpointArn}/registration", Operation: "DeregisterMarketplaceModelEndpoint"}, + {Method: "GET", Pattern: "/automated-reasoning-policies/{policyArn}/export", Operation: "ExportAutomatedReasoningPolicyVersion"}, + {Method: "GET", Pattern: "/automated-reasoning-policies/{policyArn}", Operation: "GetAutomatedReasoningPolicy"}, + {Method: "GET", Pattern: "/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/annotations", Operation: "GetAutomatedReasoningPolicyAnnotations"}, + {Method: "GET", Pattern: "/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}", Operation: "GetAutomatedReasoningPolicyBuildWorkflow"}, + {Method: "GET", Pattern: "/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/result-assets", Operation: "GetAutomatedReasoningPolicyBuildWorkflowResultAssets"}, + {Method: "GET", Pattern: "/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/scenarios", Operation: "GetAutomatedReasoningPolicyNextScenario"}, + {Method: "GET", Pattern: "/automated-reasoning-policies/{policyArn}/test-cases/{testCaseId}", Operation: "GetAutomatedReasoningPolicyTestCase"}, + {Method: "GET", Pattern: "/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/test-cases/{testCaseId}/test-results", Operation: "GetAutomatedReasoningPolicyTestResult"}, + {Method: "GET", Pattern: "/custom-models/{modelIdentifier}", Operation: "GetCustomModel"}, + {Method: "GET", Pattern: "/model-customization/custom-model-deployments/{customModelDeploymentIdentifier}", Operation: "GetCustomModelDeployment"}, + {Method: "GET", Pattern: "/evaluation-jobs/{jobIdentifier}", Operation: "GetEvaluationJob"}, + {Method: "GET", Pattern: "/foundation-models/{modelIdentifier}", Operation: "GetFoundationModel"}, + {Method: "GET", Pattern: "/foundation-model-availability/{modelId}", Operation: "GetFoundationModelAvailability"}, + {Method: "GET", Pattern: "/guardrails/{guardrailIdentifier}", Operation: "GetGuardrail"}, + {Method: "GET", Pattern: "/imported-models/{modelIdentifier}", Operation: "GetImportedModel"}, + {Method: "GET", Pattern: "/inference-profiles/{inferenceProfileIdentifier}", Operation: "GetInferenceProfile"}, + {Method: "GET", Pattern: "/marketplace-model/endpoints/{endpointArn}", Operation: "GetMarketplaceModelEndpoint"}, + {Method: "GET", Pattern: "/model-copy-jobs/{jobArn}", Operation: "GetModelCopyJob"}, + {Method: "GET", Pattern: "/model-customization-jobs/{jobIdentifier}", Operation: "GetModelCustomizationJob"}, + {Method: "GET", Pattern: "/model-import-jobs/{jobIdentifier}", Operation: "GetModelImportJob"}, + {Method: "GET", Pattern: "/model-invocation-job/{jobIdentifier}", Operation: "GetModelInvocationJob"}, + {Method: "GET", Pattern: "/logging/modelinvocations", Operation: "GetModelInvocationLoggingConfiguration"}, + {Method: "GET", Pattern: "/prompt-routers/{promptRouterArn}", Operation: "GetPromptRouter"}, + {Method: "GET", Pattern: "/provisioned-model-throughput/{provisionedModelId}", Operation: "GetProvisionedModelThroughput"}, + {Method: "GET", Pattern: "/resource-policy/{resourceArn}", Operation: "GetResourcePolicy"}, + {Method: "GET", Pattern: "/use-case-for-model-access", Operation: "GetUseCaseForModelAccess"}, + {Method: "GET", Pattern: "/automated-reasoning-policies", Operation: "ListAutomatedReasoningPolicies"}, + {Method: "GET", Pattern: "/automated-reasoning-policies/{policyArn}/build-workflows", Operation: "ListAutomatedReasoningPolicyBuildWorkflows"}, + {Method: "GET", Pattern: "/automated-reasoning-policies/{policyArn}/test-cases", Operation: "ListAutomatedReasoningPolicyTestCases"}, + {Method: "GET", Pattern: "/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/test-results", Operation: "ListAutomatedReasoningPolicyTestResults"}, + {Method: "GET", Pattern: "/model-customization/custom-model-deployments", Operation: "ListCustomModelDeployments"}, + {Method: "GET", Pattern: "/custom-models", Operation: "ListCustomModels"}, + {Method: "GET", Pattern: "/enforcedGuardrailsConfiguration", Operation: "ListEnforcedGuardrailsConfiguration"}, + {Method: "GET", Pattern: "/evaluation-jobs", Operation: "ListEvaluationJobs"}, + {Method: "GET", Pattern: "/list-foundation-model-agreement-offers/{modelId}", Operation: "ListFoundationModelAgreementOffers"}, + {Method: "GET", Pattern: "/foundation-models", Operation: "ListFoundationModels"}, + {Method: "GET", Pattern: "/guardrails", Operation: "ListGuardrails"}, + {Method: "GET", Pattern: "/imported-models", Operation: "ListImportedModels"}, + {Method: "GET", Pattern: "/inference-profiles", Operation: "ListInferenceProfiles"}, + {Method: "GET", Pattern: "/marketplace-model/endpoints", Operation: "ListMarketplaceModelEndpoints"}, + {Method: "GET", Pattern: "/model-copy-jobs", Operation: "ListModelCopyJobs"}, + {Method: "GET", Pattern: "/model-customization-jobs", Operation: "ListModelCustomizationJobs"}, + {Method: "GET", Pattern: "/model-import-jobs", Operation: "ListModelImportJobs"}, + {Method: "GET", Pattern: "/model-invocation-jobs", Operation: "ListModelInvocationJobs"}, + {Method: "GET", Pattern: "/prompt-routers", Operation: "ListPromptRouters"}, + {Method: "GET", Pattern: "/provisioned-model-throughputs", Operation: "ListProvisionedModelThroughputs"}, + {Method: "POST", Pattern: "/listTagsForResource", Operation: "ListTagsForResource"}, + {Method: "PUT", Pattern: "/enforcedGuardrailsConfiguration", Operation: "PutEnforcedGuardrailConfiguration"}, + {Method: "PUT", Pattern: "/logging/modelinvocations", Operation: "PutModelInvocationLoggingConfiguration"}, + {Method: "POST", Pattern: "/resource-policy", Operation: "PutResourcePolicy"}, + {Method: "POST", Pattern: "/use-case-for-model-access", Operation: "PutUseCaseForModelAccess"}, + {Method: "POST", Pattern: "/marketplace-model/endpoints/{endpointIdentifier}/registration", Operation: "RegisterMarketplaceModelEndpoint"}, + {Method: "POST", Pattern: "/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowType}/start", Operation: "StartAutomatedReasoningPolicyBuildWorkflow"}, + {Method: "POST", Pattern: "/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/test-workflows", Operation: "StartAutomatedReasoningPolicyTestWorkflow"}, + {Method: "POST", Pattern: "/evaluation-job/{jobIdentifier}/stop", Operation: "StopEvaluationJob"}, + {Method: "POST", Pattern: "/model-customization-jobs/{jobIdentifier}/stop", Operation: "StopModelCustomizationJob"}, + {Method: "POST", Pattern: "/model-invocation-job/{jobIdentifier}/stop", Operation: "StopModelInvocationJob"}, + {Method: "POST", Pattern: "/tagResource", Operation: "TagResource"}, + {Method: "POST", Pattern: "/untagResource", Operation: "UntagResource"}, + {Method: "PATCH", Pattern: "/automated-reasoning-policies/{policyArn}", Operation: "UpdateAutomatedReasoningPolicy"}, + {Method: "PATCH", Pattern: "/automated-reasoning-policies/{policyArn}/build-workflows/{buildWorkflowId}/annotations", Operation: "UpdateAutomatedReasoningPolicyAnnotations"}, + {Method: "PATCH", Pattern: "/automated-reasoning-policies/{policyArn}/test-cases/{testCaseId}", Operation: "UpdateAutomatedReasoningPolicyTestCase"}, + {Method: "PATCH", Pattern: "/model-customization/custom-model-deployments/{customModelDeploymentIdentifier}", Operation: "UpdateCustomModelDeployment"}, + {Method: "PUT", Pattern: "/guardrails/{guardrailIdentifier}", Operation: "UpdateGuardrail"}, + {Method: "PATCH", Pattern: "/marketplace-model/endpoints/{endpointArn}", Operation: "UpdateMarketplaceModelEndpoint"}, + {Method: "PATCH", Pattern: "/provisioned-model-throughput/{provisionedModelId}", Operation: "UpdateProvisionedModelThroughput"}, +} // MatchOperation returns the operation name and extracted path parameters for // the given HTTP method and URI path. It returns ("", nil) if no route matches. diff --git a/internal/generated/crudregistry/registry_gen.go b/internal/generated/crudregistry/registry_gen.go index e3e0ab9..a1d13e8 100644 --- a/internal/generated/crudregistry/registry_gen.go +++ b/internal/generated/crudregistry/registry_gen.go @@ -824,17 +824,73 @@ func init() { "UpdateRepositoryCreationTemplate": {Verb: "Update", Resource: "RepositoryCreationTemplate", OutputListKey: "", OutputItemKey: "repositoryCreationTemplate"}, }) crud.Register("ecs", map[string]crud.OpMeta{ - "DeleteAccountSetting": {Verb: "Delete", Resource: "AccountSetting", OutputListKey: "", OutputItemKey: "setting"}, - "DeregisterTaskDefinition": {Verb: "Delete", Resource: "TaskDefinition", OutputListKey: "", OutputItemKey: "taskDefinition"}, - "DescribeTaskDefinition": {Verb: "Get", Resource: "TaskDefinition", OutputListKey: "tags", OutputItemKey: "taskDefinition"}, - "ListAccountSettings": {Verb: "List", Resource: "AccountSetting", OutputListKey: "settings", OutputItemKey: ""}, - "ListServicesByNamespace": {Verb: "List", Resource: "ServicesByNamespace", OutputListKey: "serviceArns", OutputItemKey: ""}, - "ListTagsForResource": {Verb: "List", Resource: "TagsForResource", OutputListKey: "tags", OutputItemKey: ""}, - "ListTaskDefinitionFamilies": {Verb: "List", Resource: "TaskDefinitionFamily", OutputListKey: "families", OutputItemKey: ""}, - "PutAccountSetting": {Verb: "Update", Resource: "AccountSetting", OutputListKey: "", OutputItemKey: "setting"}, - "PutAccountSettingDefault": {Verb: "Update", Resource: "AccountSettingDefault", OutputListKey: "", OutputItemKey: "setting"}, - "TagResource": {Verb: "Tag", Resource: "Resource", OutputListKey: "", OutputItemKey: ""}, - "UntagResource": {Verb: "Untag", Resource: "Resource", OutputListKey: "", OutputItemKey: ""}, + "CreateCapacityProvider": {Verb: "Create", Resource: "CapacityProvider", OutputListKey: "", OutputItemKey: "capacityProvider"}, + "CreateCluster": {Verb: "Create", Resource: "Cluster", OutputListKey: "", OutputItemKey: "cluster"}, + "CreateDaemon": {Verb: "Create", Resource: "Daemon", OutputListKey: "", OutputItemKey: ""}, + "CreateExpressGatewayService": {Verb: "Create", Resource: "ExpressGatewayService", OutputListKey: "", OutputItemKey: "service"}, + "CreateService": {Verb: "Create", Resource: "Service", OutputListKey: "", OutputItemKey: "service"}, + "CreateTaskSet": {Verb: "Create", Resource: "TaskSet", OutputListKey: "", OutputItemKey: "taskSet"}, + "DeleteAccountSetting": {Verb: "Delete", Resource: "AccountSetting", OutputListKey: "", OutputItemKey: "setting"}, + "DeleteAttributes": {Verb: "Delete", Resource: "Attribute", OutputListKey: "attributes", OutputItemKey: ""}, + "DeleteCapacityProvider": {Verb: "Delete", Resource: "CapacityProvider", OutputListKey: "", OutputItemKey: "capacityProvider"}, + "DeleteCluster": {Verb: "Delete", Resource: "Cluster", OutputListKey: "", OutputItemKey: "cluster"}, + "DeleteDaemon": {Verb: "Delete", Resource: "Daemon", OutputListKey: "", OutputItemKey: ""}, + "DeleteDaemonTaskDefinition": {Verb: "Delete", Resource: "DaemonTaskDefinition", OutputListKey: "", OutputItemKey: ""}, + "DeleteExpressGatewayService": {Verb: "Delete", Resource: "ExpressGatewayService", OutputListKey: "", OutputItemKey: "service"}, + "DeleteService": {Verb: "Delete", Resource: "Service", OutputListKey: "", OutputItemKey: "service"}, + "DeleteTaskDefinitions": {Verb: "Delete", Resource: "TaskDefinition", OutputListKey: "failures", OutputItemKey: ""}, + "DeleteTaskSet": {Verb: "Delete", Resource: "TaskSet", OutputListKey: "", OutputItemKey: "taskSet"}, + "DeregisterContainerInstance": {Verb: "Delete", Resource: "ContainerInstance", OutputListKey: "", OutputItemKey: "containerInstance"}, + "DeregisterTaskDefinition": {Verb: "Delete", Resource: "TaskDefinition", OutputListKey: "", OutputItemKey: "taskDefinition"}, + "DescribeCapacityProviders": {Verb: "Get", Resource: "CapacityProvider", OutputListKey: "capacityProviders", OutputItemKey: ""}, + "DescribeClusters": {Verb: "Get", Resource: "Cluster", OutputListKey: "clusters", OutputItemKey: ""}, + "DescribeContainerInstances": {Verb: "Get", Resource: "ContainerInstance", OutputListKey: "containerInstances", OutputItemKey: ""}, + "DescribeDaemon": {Verb: "Get", Resource: "Daemon", OutputListKey: "", OutputItemKey: "daemon"}, + "DescribeDaemonDeployments": {Verb: "Get", Resource: "DaemonDeployment", OutputListKey: "daemonDeployments", OutputItemKey: ""}, + "DescribeDaemonRevisions": {Verb: "Get", Resource: "DaemonRevision", OutputListKey: "daemonRevisions", OutputItemKey: ""}, + "DescribeDaemonTaskDefinition": {Verb: "Get", Resource: "DaemonTaskDefinition", OutputListKey: "", OutputItemKey: "daemonTaskDefinition"}, + "DescribeExpressGatewayService": {Verb: "Get", Resource: "ExpressGatewayService", OutputListKey: "", OutputItemKey: "service"}, + "DescribeServiceDeployments": {Verb: "Get", Resource: "ServiceDeployment", OutputListKey: "failures", OutputItemKey: ""}, + "DescribeServiceRevisions": {Verb: "Get", Resource: "ServiceRevision", OutputListKey: "failures", OutputItemKey: ""}, + "DescribeServices": {Verb: "Get", Resource: "Service", OutputListKey: "failures", OutputItemKey: ""}, + "DescribeTaskDefinition": {Verb: "Get", Resource: "TaskDefinition", OutputListKey: "tags", OutputItemKey: "taskDefinition"}, + "DescribeTaskSets": {Verb: "Get", Resource: "TaskSet", OutputListKey: "failures", OutputItemKey: ""}, + "DescribeTasks": {Verb: "Get", Resource: "Task", OutputListKey: "failures", OutputItemKey: ""}, + "GetTaskProtection": {Verb: "Get", Resource: "TaskProtection", OutputListKey: "failures", OutputItemKey: ""}, + "ListAccountSettings": {Verb: "List", Resource: "AccountSetting", OutputListKey: "settings", OutputItemKey: ""}, + "ListAttributes": {Verb: "List", Resource: "Attribute", OutputListKey: "attributes", OutputItemKey: ""}, + "ListClusters": {Verb: "List", Resource: "Cluster", OutputListKey: "clusterArns", OutputItemKey: ""}, + "ListContainerInstances": {Verb: "List", Resource: "ContainerInstance", OutputListKey: "containerInstanceArns", OutputItemKey: ""}, + "ListDaemonDeployments": {Verb: "List", Resource: "DaemonDeployment", OutputListKey: "daemonDeployments", OutputItemKey: ""}, + "ListDaemonTaskDefinitions": {Verb: "List", Resource: "DaemonTaskDefinition", OutputListKey: "daemonTaskDefinitions", OutputItemKey: ""}, + "ListDaemons": {Verb: "List", Resource: "Daemon", OutputListKey: "daemonSummariesList", OutputItemKey: ""}, + "ListServiceDeployments": {Verb: "List", Resource: "ServiceDeployment", OutputListKey: "serviceDeployments", OutputItemKey: ""}, + "ListServices": {Verb: "List", Resource: "Service", OutputListKey: "serviceArns", OutputItemKey: ""}, + "ListServicesByNamespace": {Verb: "List", Resource: "ServicesByNamespace", OutputListKey: "serviceArns", OutputItemKey: ""}, + "ListTagsForResource": {Verb: "List", Resource: "TagsForResource", OutputListKey: "tags", OutputItemKey: ""}, + "ListTaskDefinitionFamilies": {Verb: "List", Resource: "TaskDefinitionFamily", OutputListKey: "families", OutputItemKey: ""}, + "ListTaskDefinitions": {Verb: "List", Resource: "TaskDefinition", OutputListKey: "taskDefinitionArns", OutputItemKey: ""}, + "ListTasks": {Verb: "List", Resource: "Task", OutputListKey: "taskArns", OutputItemKey: ""}, + "PutAccountSetting": {Verb: "Update", Resource: "AccountSetting", OutputListKey: "", OutputItemKey: "setting"}, + "PutAccountSettingDefault": {Verb: "Update", Resource: "AccountSettingDefault", OutputListKey: "", OutputItemKey: "setting"}, + "PutAttributes": {Verb: "Update", Resource: "Attribute", OutputListKey: "attributes", OutputItemKey: ""}, + "PutClusterCapacityProviders": {Verb: "Update", Resource: "ClusterCapacityProvider", OutputListKey: "", OutputItemKey: "cluster"}, + "RegisterContainerInstance": {Verb: "Create", Resource: "ContainerInstance", OutputListKey: "", OutputItemKey: "containerInstance"}, + "RegisterDaemonTaskDefinition": {Verb: "Create", Resource: "DaemonTaskDefinition", OutputListKey: "", OutputItemKey: ""}, + "RegisterTaskDefinition": {Verb: "Create", Resource: "TaskDefinition", OutputListKey: "tags", OutputItemKey: "taskDefinition"}, + "TagResource": {Verb: "Tag", Resource: "Resource", OutputListKey: "", OutputItemKey: ""}, + "UntagResource": {Verb: "Untag", Resource: "Resource", OutputListKey: "", OutputItemKey: ""}, + "UpdateCapacityProvider": {Verb: "Update", Resource: "CapacityProvider", OutputListKey: "", OutputItemKey: "capacityProvider"}, + "UpdateCluster": {Verb: "Update", Resource: "Cluster", OutputListKey: "", OutputItemKey: "cluster"}, + "UpdateClusterSettings": {Verb: "Update", Resource: "ClusterSetting", OutputListKey: "", OutputItemKey: "cluster"}, + "UpdateContainerAgent": {Verb: "Update", Resource: "ContainerAgent", OutputListKey: "", OutputItemKey: "containerInstance"}, + "UpdateContainerInstancesState": {Verb: "Update", Resource: "ContainerInstancesState", OutputListKey: "containerInstances", OutputItemKey: ""}, + "UpdateDaemon": {Verb: "Update", Resource: "Daemon", OutputListKey: "", OutputItemKey: ""}, + "UpdateExpressGatewayService": {Verb: "Update", Resource: "ExpressGatewayService", OutputListKey: "", OutputItemKey: "service"}, + "UpdateService": {Verb: "Update", Resource: "Service", OutputListKey: "", OutputItemKey: "service"}, + "UpdateServicePrimaryTaskSet": {Verb: "Update", Resource: "ServicePrimaryTaskSet", OutputListKey: "", OutputItemKey: "taskSet"}, + "UpdateTaskProtection": {Verb: "Update", Resource: "TaskProtection", OutputListKey: "failures", OutputItemKey: ""}, + "UpdateTaskSet": {Verb: "Update", Resource: "TaskSet", OutputListKey: "", OutputItemKey: "taskSet"}, }) crud.Register("emr", map[string]crud.OpMeta{ "CreatePersistentAppUI": {Verb: "Create", Resource: "PersistentAppUI", OutputListKey: "", OutputItemKey: ""}, @@ -2004,7 +2060,10 @@ func init() { "CreateTrustedTokenIssuer": {Verb: "Create", Resource: "TrustedTokenIssuer", OutputListKey: "", OutputItemKey: ""}, "DeleteAccountAssignment": {Verb: "Delete", Resource: "AccountAssignment", OutputListKey: "", OutputItemKey: "AccountAssignmentDeletionStatus"}, "DeleteApplication": {Verb: "Delete", Resource: "Application", OutputListKey: "", OutputItemKey: ""}, + "DeleteApplicationAccessScope": {Verb: "Delete", Resource: "ApplicationAccessScope", OutputListKey: "", OutputItemKey: ""}, "DeleteApplicationAssignment": {Verb: "Delete", Resource: "ApplicationAssignment", OutputListKey: "", OutputItemKey: ""}, + "DeleteApplicationAuthenticationMethod": {Verb: "Delete", Resource: "ApplicationAuthenticationMethod", OutputListKey: "", OutputItemKey: ""}, + "DeleteApplicationGrant": {Verb: "Delete", Resource: "ApplicationGrant", OutputListKey: "", OutputItemKey: ""}, "DeleteInlinePolicyFromPermissionSet": {Verb: "Delete", Resource: "InlinePolicyFromPermissionSet", OutputListKey: "", OutputItemKey: ""}, "DeleteInstance": {Verb: "Delete", Resource: "Instance", OutputListKey: "", OutputItemKey: ""}, "DeleteInstanceAccessControlAttributeConfiguration": {Verb: "Delete", Resource: "InstanceAccessControlAttributeConfiguration", OutputListKey: "", OutputItemKey: ""}, @@ -2022,7 +2081,10 @@ func init() { "DescribePermissionSetProvisioningStatus": {Verb: "Get", Resource: "PermissionSetProvisioningStatu", OutputListKey: "", OutputItemKey: "PermissionSetProvisioningStatus"}, "DescribeRegion": {Verb: "Get", Resource: "Region", OutputListKey: "", OutputItemKey: ""}, "DescribeTrustedTokenIssuer": {Verb: "Get", Resource: "TrustedTokenIssuer", OutputListKey: "", OutputItemKey: ""}, + "GetApplicationAccessScope": {Verb: "Get", Resource: "ApplicationAccessScope", OutputListKey: "AuthorizedTargets", OutputItemKey: ""}, "GetApplicationAssignmentConfiguration": {Verb: "Get", Resource: "ApplicationAssignmentConfiguration", OutputListKey: "", OutputItemKey: ""}, + "GetApplicationAuthenticationMethod": {Verb: "Get", Resource: "ApplicationAuthenticationMethod", OutputListKey: "", OutputItemKey: ""}, + "GetApplicationGrant": {Verb: "Get", Resource: "ApplicationGrant", OutputListKey: "", OutputItemKey: ""}, "GetApplicationSessionConfiguration": {Verb: "Get", Resource: "ApplicationSessionConfiguration", OutputListKey: "", OutputItemKey: ""}, "GetInlinePolicyForPermissionSet": {Verb: "Get", Resource: "InlinePolicyForPermissionSet", OutputListKey: "", OutputItemKey: ""}, "GetPermissionsBoundaryForPermissionSet": {Verb: "Get", Resource: "PermissionsBoundaryForPermissionSet", OutputListKey: "", OutputItemKey: "PermissionsBoundary"}, @@ -2031,8 +2093,11 @@ func init() { "ListAccountAssignments": {Verb: "List", Resource: "AccountAssignment", OutputListKey: "AccountAssignments", OutputItemKey: ""}, "ListAccountAssignmentsForPrincipal": {Verb: "List", Resource: "AccountAssignmentsForPrincipal", OutputListKey: "AccountAssignments", OutputItemKey: ""}, "ListAccountsForProvisionedPermissionSet": {Verb: "List", Resource: "AccountsForProvisionedPermissionSet", OutputListKey: "AccountIds", OutputItemKey: ""}, + "ListApplicationAccessScopes": {Verb: "List", Resource: "ApplicationAccessScope", OutputListKey: "Scopes", OutputItemKey: ""}, "ListApplicationAssignments": {Verb: "List", Resource: "ApplicationAssignment", OutputListKey: "ApplicationAssignments", OutputItemKey: ""}, "ListApplicationAssignmentsForPrincipal": {Verb: "List", Resource: "ApplicationAssignmentsForPrincipal", OutputListKey: "ApplicationAssignments", OutputItemKey: ""}, + "ListApplicationAuthenticationMethods": {Verb: "List", Resource: "ApplicationAuthenticationMethod", OutputListKey: "AuthenticationMethods", OutputItemKey: ""}, + "ListApplicationGrants": {Verb: "List", Resource: "ApplicationGrant", OutputListKey: "Grants", OutputItemKey: ""}, "ListApplicationProviders": {Verb: "List", Resource: "ApplicationProvider", OutputListKey: "ApplicationProviders", OutputItemKey: ""}, "ListApplications": {Verb: "List", Resource: "Application", OutputListKey: "Applications", OutputItemKey: ""}, "ListCustomerManagedPolicyReferencesInPermissionSet": {Verb: "List", Resource: "CustomerManagedPolicyReferencesInPermissionSet", OutputListKey: "CustomerManagedPolicyReferences", OutputItemKey: ""}, @@ -2044,7 +2109,10 @@ func init() { "ListRegions": {Verb: "List", Resource: "Region", OutputListKey: "Regions", OutputItemKey: ""}, "ListTagsForResource": {Verb: "List", Resource: "TagsForResource", OutputListKey: "Tags", OutputItemKey: ""}, "ListTrustedTokenIssuers": {Verb: "List", Resource: "TrustedTokenIssuer", OutputListKey: "TrustedTokenIssuers", OutputItemKey: ""}, + "PutApplicationAccessScope": {Verb: "Update", Resource: "ApplicationAccessScope", OutputListKey: "", OutputItemKey: ""}, "PutApplicationAssignmentConfiguration": {Verb: "Update", Resource: "ApplicationAssignmentConfiguration", OutputListKey: "", OutputItemKey: ""}, + "PutApplicationAuthenticationMethod": {Verb: "Update", Resource: "ApplicationAuthenticationMethod", OutputListKey: "", OutputItemKey: ""}, + "PutApplicationGrant": {Verb: "Update", Resource: "ApplicationGrant", OutputListKey: "", OutputItemKey: ""}, "PutApplicationSessionConfiguration": {Verb: "Update", Resource: "ApplicationSessionConfiguration", OutputListKey: "", OutputItemKey: ""}, "PutInlinePolicyToPermissionSet": {Verb: "Update", Resource: "InlinePolicyToPermissionSet", OutputListKey: "", OutputItemKey: ""}, "PutPermissionsBoundaryToPermissionSet": {Verb: "Update", Resource: "PermissionsBoundaryToPermissionSet", OutputListKey: "", OutputItemKey: ""}, @@ -2170,24 +2238,65 @@ func init() { "UpdateVocabularyFilter": {Verb: "Update", Resource: "VocabularyFilter", OutputListKey: "", OutputItemKey: ""}, }) crud.Register("transfer", map[string]crud.OpMeta{ - "CreateAccess": {Verb: "Create", Resource: "Access", OutputListKey: "", OutputItemKey: ""}, - "DeleteAccess": {Verb: "Delete", Resource: "Access", OutputListKey: "", OutputItemKey: ""}, - "DeleteHostKey": {Verb: "Delete", Resource: "HostKey", OutputListKey: "", OutputItemKey: ""}, - "DeleteSshPublicKey": {Verb: "Delete", Resource: "SshPublicKey", OutputListKey: "", OutputItemKey: ""}, - "DescribeAccess": {Verb: "Get", Resource: "Access", OutputListKey: "", OutputItemKey: "Access"}, - "DescribeExecution": {Verb: "Get", Resource: "Execution", OutputListKey: "", OutputItemKey: "Execution"}, - "DescribeHostKey": {Verb: "Get", Resource: "HostKey", OutputListKey: "", OutputItemKey: "HostKey"}, - "DescribeSecurityPolicy": {Verb: "Get", Resource: "SecurityPolicy", OutputListKey: "", OutputItemKey: "SecurityPolicy"}, - "ListAccesses": {Verb: "List", Resource: "Access", OutputListKey: "Accesses", OutputItemKey: ""}, - "ListExecutions": {Verb: "List", Resource: "Execution", OutputListKey: "Executions", OutputItemKey: ""}, - "ListFileTransferResults": {Verb: "List", Resource: "FileTransferResult", OutputListKey: "FileTransferResults", OutputItemKey: ""}, - "ListHostKeys": {Verb: "List", Resource: "HostKey", OutputListKey: "HostKeys", OutputItemKey: ""}, - "ListSecurityPolicies": {Verb: "List", Resource: "SecurityPolicy", OutputListKey: "SecurityPolicyNames", OutputItemKey: ""}, - "ListTagsForResource": {Verb: "List", Resource: "TagsForResource", OutputListKey: "Tags", OutputItemKey: ""}, - "TagResource": {Verb: "Tag", Resource: "Resource", OutputListKey: "", OutputItemKey: ""}, - "UntagResource": {Verb: "Untag", Resource: "Resource", OutputListKey: "", OutputItemKey: ""}, - "UpdateAccess": {Verb: "Update", Resource: "Access", OutputListKey: "", OutputItemKey: ""}, - "UpdateHostKey": {Verb: "Update", Resource: "HostKey", OutputListKey: "", OutputItemKey: ""}, + "CreateAccess": {Verb: "Create", Resource: "Access", OutputListKey: "", OutputItemKey: ""}, + "CreateAgreement": {Verb: "Create", Resource: "Agreement", OutputListKey: "", OutputItemKey: ""}, + "CreateConnector": {Verb: "Create", Resource: "Connector", OutputListKey: "", OutputItemKey: ""}, + "CreateProfile": {Verb: "Create", Resource: "Profile", OutputListKey: "", OutputItemKey: ""}, + "CreateServer": {Verb: "Create", Resource: "Server", OutputListKey: "", OutputItemKey: ""}, + "CreateUser": {Verb: "Create", Resource: "User", OutputListKey: "", OutputItemKey: ""}, + "CreateWebApp": {Verb: "Create", Resource: "WebApp", OutputListKey: "", OutputItemKey: ""}, + "CreateWorkflow": {Verb: "Create", Resource: "Workflow", OutputListKey: "", OutputItemKey: ""}, + "DeleteAccess": {Verb: "Delete", Resource: "Access", OutputListKey: "", OutputItemKey: ""}, + "DeleteAgreement": {Verb: "Delete", Resource: "Agreement", OutputListKey: "", OutputItemKey: ""}, + "DeleteCertificate": {Verb: "Delete", Resource: "Certificate", OutputListKey: "", OutputItemKey: ""}, + "DeleteConnector": {Verb: "Delete", Resource: "Connector", OutputListKey: "", OutputItemKey: ""}, + "DeleteHostKey": {Verb: "Delete", Resource: "HostKey", OutputListKey: "", OutputItemKey: ""}, + "DeleteProfile": {Verb: "Delete", Resource: "Profile", OutputListKey: "", OutputItemKey: ""}, + "DeleteServer": {Verb: "Delete", Resource: "Server", OutputListKey: "", OutputItemKey: ""}, + "DeleteSshPublicKey": {Verb: "Delete", Resource: "SshPublicKey", OutputListKey: "", OutputItemKey: ""}, + "DeleteUser": {Verb: "Delete", Resource: "User", OutputListKey: "", OutputItemKey: ""}, + "DeleteWebApp": {Verb: "Delete", Resource: "WebApp", OutputListKey: "", OutputItemKey: ""}, + "DeleteWebAppCustomization": {Verb: "Delete", Resource: "WebAppCustomization", OutputListKey: "", OutputItemKey: ""}, + "DeleteWorkflow": {Verb: "Delete", Resource: "Workflow", OutputListKey: "", OutputItemKey: ""}, + "DescribeAccess": {Verb: "Get", Resource: "Access", OutputListKey: "", OutputItemKey: "Access"}, + "DescribeAgreement": {Verb: "Get", Resource: "Agreement", OutputListKey: "", OutputItemKey: "Agreement"}, + "DescribeCertificate": {Verb: "Get", Resource: "Certificate", OutputListKey: "", OutputItemKey: "Certificate"}, + "DescribeConnector": {Verb: "Get", Resource: "Connector", OutputListKey: "", OutputItemKey: "Connector"}, + "DescribeExecution": {Verb: "Get", Resource: "Execution", OutputListKey: "", OutputItemKey: "Execution"}, + "DescribeHostKey": {Verb: "Get", Resource: "HostKey", OutputListKey: "", OutputItemKey: "HostKey"}, + "DescribeProfile": {Verb: "Get", Resource: "Profile", OutputListKey: "", OutputItemKey: "Profile"}, + "DescribeSecurityPolicy": {Verb: "Get", Resource: "SecurityPolicy", OutputListKey: "", OutputItemKey: "SecurityPolicy"}, + "DescribeServer": {Verb: "Get", Resource: "Server", OutputListKey: "", OutputItemKey: "Server"}, + "DescribeUser": {Verb: "Get", Resource: "User", OutputListKey: "", OutputItemKey: "User"}, + "DescribeWebApp": {Verb: "Get", Resource: "WebApp", OutputListKey: "", OutputItemKey: "WebApp"}, + "DescribeWebAppCustomization": {Verb: "Get", Resource: "WebAppCustomization", OutputListKey: "", OutputItemKey: "WebAppCustomization"}, + "DescribeWorkflow": {Verb: "Get", Resource: "Workflow", OutputListKey: "", OutputItemKey: "Workflow"}, + "ListAccesses": {Verb: "List", Resource: "Access", OutputListKey: "Accesses", OutputItemKey: ""}, + "ListAgreements": {Verb: "List", Resource: "Agreement", OutputListKey: "Agreements", OutputItemKey: ""}, + "ListCertificates": {Verb: "List", Resource: "Certificate", OutputListKey: "Certificates", OutputItemKey: ""}, + "ListConnectors": {Verb: "List", Resource: "Connector", OutputListKey: "Connectors", OutputItemKey: ""}, + "ListExecutions": {Verb: "List", Resource: "Execution", OutputListKey: "Executions", OutputItemKey: ""}, + "ListFileTransferResults": {Verb: "List", Resource: "FileTransferResult", OutputListKey: "FileTransferResults", OutputItemKey: ""}, + "ListHostKeys": {Verb: "List", Resource: "HostKey", OutputListKey: "HostKeys", OutputItemKey: ""}, + "ListProfiles": {Verb: "List", Resource: "Profile", OutputListKey: "Profiles", OutputItemKey: ""}, + "ListSecurityPolicies": {Verb: "List", Resource: "SecurityPolicy", OutputListKey: "SecurityPolicyNames", OutputItemKey: ""}, + "ListServers": {Verb: "List", Resource: "Server", OutputListKey: "Servers", OutputItemKey: ""}, + "ListTagsForResource": {Verb: "List", Resource: "TagsForResource", OutputListKey: "Tags", OutputItemKey: ""}, + "ListUsers": {Verb: "List", Resource: "User", OutputListKey: "Users", OutputItemKey: ""}, + "ListWebApps": {Verb: "List", Resource: "WebApp", OutputListKey: "WebApps", OutputItemKey: ""}, + "ListWorkflows": {Verb: "List", Resource: "Workflow", OutputListKey: "Workflows", OutputItemKey: ""}, + "TagResource": {Verb: "Tag", Resource: "Resource", OutputListKey: "", OutputItemKey: ""}, + "UntagResource": {Verb: "Untag", Resource: "Resource", OutputListKey: "", OutputItemKey: ""}, + "UpdateAccess": {Verb: "Update", Resource: "Access", OutputListKey: "", OutputItemKey: ""}, + "UpdateAgreement": {Verb: "Update", Resource: "Agreement", OutputListKey: "", OutputItemKey: ""}, + "UpdateCertificate": {Verb: "Update", Resource: "Certificate", OutputListKey: "", OutputItemKey: ""}, + "UpdateConnector": {Verb: "Update", Resource: "Connector", OutputListKey: "", OutputItemKey: ""}, + "UpdateHostKey": {Verb: "Update", Resource: "HostKey", OutputListKey: "", OutputItemKey: ""}, + "UpdateProfile": {Verb: "Update", Resource: "Profile", OutputListKey: "", OutputItemKey: ""}, + "UpdateServer": {Verb: "Update", Resource: "Server", OutputListKey: "", OutputItemKey: ""}, + "UpdateUser": {Verb: "Update", Resource: "User", OutputListKey: "", OutputItemKey: ""}, + "UpdateWebApp": {Verb: "Update", Resource: "WebApp", OutputListKey: "", OutputItemKey: ""}, + "UpdateWebAppCustomization": {Verb: "Update", Resource: "WebAppCustomization", OutputListKey: "", OutputItemKey: ""}, }) crud.Register("waf", map[string]crud.OpMeta{ "CreateByteMatchSet": {Verb: "Create", Resource: "ByteMatchSet", OutputListKey: "", OutputItemKey: "ByteMatchSet"}, diff --git a/internal/generated/ecs/base_provider.go b/internal/generated/ecs/base_provider.go index 3f340b6..b508625 100644 --- a/internal/generated/ecs/base_provider.go +++ b/internal/generated/ecs/base_provider.go @@ -11,26 +11,182 @@ var ErrNotImplemented = fmt.Errorf("operation not implemented") type BaseProvider struct{} +func (b *BaseProvider) CreateCapacityProvider(ctx context.Context, input *CreateCapacityProviderRequest) (*CreateCapacityProviderResponse, error) { + return nil, fmt.Errorf("CreateCapacityProvider: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateCluster(ctx context.Context, input *CreateClusterRequest) (*CreateClusterResponse, error) { + return nil, fmt.Errorf("CreateCluster: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateDaemon(ctx context.Context, input *CreateDaemonRequest) (*CreateDaemonResponse, error) { + return nil, fmt.Errorf("CreateDaemon: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateExpressGatewayService(ctx context.Context, input *CreateExpressGatewayServiceRequest) (*CreateExpressGatewayServiceResponse, error) { + return nil, fmt.Errorf("CreateExpressGatewayService: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateService(ctx context.Context, input *CreateServiceRequest) (*CreateServiceResponse, error) { + return nil, fmt.Errorf("CreateService: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateTaskSet(ctx context.Context, input *CreateTaskSetRequest) (*CreateTaskSetResponse, error) { + return nil, fmt.Errorf("CreateTaskSet: %w", ErrNotImplemented) +} + func (b *BaseProvider) DeleteAccountSetting(ctx context.Context, input *DeleteAccountSettingRequest) (*DeleteAccountSettingResponse, error) { return nil, fmt.Errorf("DeleteAccountSetting: %w", ErrNotImplemented) } +func (b *BaseProvider) DeleteAttributes(ctx context.Context, input *DeleteAttributesRequest) (*DeleteAttributesResponse, error) { + return nil, fmt.Errorf("DeleteAttributes: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteCapacityProvider(ctx context.Context, input *DeleteCapacityProviderRequest) (*DeleteCapacityProviderResponse, error) { + return nil, fmt.Errorf("DeleteCapacityProvider: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteCluster(ctx context.Context, input *DeleteClusterRequest) (*DeleteClusterResponse, error) { + return nil, fmt.Errorf("DeleteCluster: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteDaemon(ctx context.Context, input *DeleteDaemonRequest) (*DeleteDaemonResponse, error) { + return nil, fmt.Errorf("DeleteDaemon: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteDaemonTaskDefinition(ctx context.Context, input *DeleteDaemonTaskDefinitionRequest) (*DeleteDaemonTaskDefinitionResponse, error) { + return nil, fmt.Errorf("DeleteDaemonTaskDefinition: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteExpressGatewayService(ctx context.Context, input *DeleteExpressGatewayServiceRequest) (*DeleteExpressGatewayServiceResponse, error) { + return nil, fmt.Errorf("DeleteExpressGatewayService: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteService(ctx context.Context, input *DeleteServiceRequest) (*DeleteServiceResponse, error) { + return nil, fmt.Errorf("DeleteService: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteTaskDefinitions(ctx context.Context, input *DeleteTaskDefinitionsRequest) (*DeleteTaskDefinitionsResponse, error) { + return nil, fmt.Errorf("DeleteTaskDefinitions: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteTaskSet(ctx context.Context, input *DeleteTaskSetRequest) (*DeleteTaskSetResponse, error) { + return nil, fmt.Errorf("DeleteTaskSet: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeregisterContainerInstance(ctx context.Context, input *DeregisterContainerInstanceRequest) (*DeregisterContainerInstanceResponse, error) { + return nil, fmt.Errorf("DeregisterContainerInstance: %w", ErrNotImplemented) +} + func (b *BaseProvider) DeregisterTaskDefinition(ctx context.Context, input *DeregisterTaskDefinitionRequest) (*DeregisterTaskDefinitionResponse, error) { return nil, fmt.Errorf("DeregisterTaskDefinition: %w", ErrNotImplemented) } +func (b *BaseProvider) DescribeCapacityProviders(ctx context.Context, input *DescribeCapacityProvidersRequest) (*DescribeCapacityProvidersResponse, error) { + return nil, fmt.Errorf("DescribeCapacityProviders: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeClusters(ctx context.Context, input *DescribeClustersRequest) (*DescribeClustersResponse, error) { + return nil, fmt.Errorf("DescribeClusters: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeContainerInstances(ctx context.Context, input *DescribeContainerInstancesRequest) (*DescribeContainerInstancesResponse, error) { + return nil, fmt.Errorf("DescribeContainerInstances: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeDaemon(ctx context.Context, input *DescribeDaemonRequest) (*DescribeDaemonResponse, error) { + return nil, fmt.Errorf("DescribeDaemon: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeDaemonDeployments(ctx context.Context, input *DescribeDaemonDeploymentsRequest) (*DescribeDaemonDeploymentsResponse, error) { + return nil, fmt.Errorf("DescribeDaemonDeployments: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeDaemonRevisions(ctx context.Context, input *DescribeDaemonRevisionsRequest) (*DescribeDaemonRevisionsResponse, error) { + return nil, fmt.Errorf("DescribeDaemonRevisions: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeDaemonTaskDefinition(ctx context.Context, input *DescribeDaemonTaskDefinitionRequest) (*DescribeDaemonTaskDefinitionResponse, error) { + return nil, fmt.Errorf("DescribeDaemonTaskDefinition: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeExpressGatewayService(ctx context.Context, input *DescribeExpressGatewayServiceRequest) (*DescribeExpressGatewayServiceResponse, error) { + return nil, fmt.Errorf("DescribeExpressGatewayService: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeServiceDeployments(ctx context.Context, input *DescribeServiceDeploymentsRequest) (*DescribeServiceDeploymentsResponse, error) { + return nil, fmt.Errorf("DescribeServiceDeployments: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeServiceRevisions(ctx context.Context, input *DescribeServiceRevisionsRequest) (*DescribeServiceRevisionsResponse, error) { + return nil, fmt.Errorf("DescribeServiceRevisions: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeServices(ctx context.Context, input *DescribeServicesRequest) (*DescribeServicesResponse, error) { + return nil, fmt.Errorf("DescribeServices: %w", ErrNotImplemented) +} + func (b *BaseProvider) DescribeTaskDefinition(ctx context.Context, input *DescribeTaskDefinitionRequest) (*DescribeTaskDefinitionResponse, error) { return nil, fmt.Errorf("DescribeTaskDefinition: %w", ErrNotImplemented) } +func (b *BaseProvider) DescribeTaskSets(ctx context.Context, input *DescribeTaskSetsRequest) (*DescribeTaskSetsResponse, error) { + return nil, fmt.Errorf("DescribeTaskSets: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeTasks(ctx context.Context, input *DescribeTasksRequest) (*DescribeTasksResponse, error) { + return nil, fmt.Errorf("DescribeTasks: %w", ErrNotImplemented) +} + func (b *BaseProvider) DiscoverPollEndpoint(ctx context.Context, input *DiscoverPollEndpointRequest) (*DiscoverPollEndpointResponse, error) { return nil, fmt.Errorf("DiscoverPollEndpoint: %w", ErrNotImplemented) } +func (b *BaseProvider) ExecuteCommand(ctx context.Context, input *ExecuteCommandRequest) (*ExecuteCommandResponse, error) { + return nil, fmt.Errorf("ExecuteCommand: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetTaskProtection(ctx context.Context, input *GetTaskProtectionRequest) (*GetTaskProtectionResponse, error) { + return nil, fmt.Errorf("GetTaskProtection: %w", ErrNotImplemented) +} + func (b *BaseProvider) ListAccountSettings(ctx context.Context, input *ListAccountSettingsRequest) (*ListAccountSettingsResponse, error) { return nil, fmt.Errorf("ListAccountSettings: %w", ErrNotImplemented) } +func (b *BaseProvider) ListAttributes(ctx context.Context, input *ListAttributesRequest) (*ListAttributesResponse, error) { + return nil, fmt.Errorf("ListAttributes: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListClusters(ctx context.Context, input *ListClustersRequest) (*ListClustersResponse, error) { + return nil, fmt.Errorf("ListClusters: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListContainerInstances(ctx context.Context, input *ListContainerInstancesRequest) (*ListContainerInstancesResponse, error) { + return nil, fmt.Errorf("ListContainerInstances: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListDaemonDeployments(ctx context.Context, input *ListDaemonDeploymentsRequest) (*ListDaemonDeploymentsResponse, error) { + return nil, fmt.Errorf("ListDaemonDeployments: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListDaemonTaskDefinitions(ctx context.Context, input *ListDaemonTaskDefinitionsRequest) (*ListDaemonTaskDefinitionsResponse, error) { + return nil, fmt.Errorf("ListDaemonTaskDefinitions: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListDaemons(ctx context.Context, input *ListDaemonsRequest) (*ListDaemonsResponse, error) { + return nil, fmt.Errorf("ListDaemons: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListServiceDeployments(ctx context.Context, input *ListServiceDeploymentsRequest) (*ListServiceDeploymentsResponse, error) { + return nil, fmt.Errorf("ListServiceDeployments: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListServices(ctx context.Context, input *ListServicesRequest) (*ListServicesResponse, error) { + return nil, fmt.Errorf("ListServices: %w", ErrNotImplemented) +} + func (b *BaseProvider) ListServicesByNamespace(ctx context.Context, input *ListServicesByNamespaceRequest) (*ListServicesByNamespaceResponse, error) { return nil, fmt.Errorf("ListServicesByNamespace: %w", ErrNotImplemented) } @@ -43,6 +199,14 @@ func (b *BaseProvider) ListTaskDefinitionFamilies(ctx context.Context, input *Li return nil, fmt.Errorf("ListTaskDefinitionFamilies: %w", ErrNotImplemented) } +func (b *BaseProvider) ListTaskDefinitions(ctx context.Context, input *ListTaskDefinitionsRequest) (*ListTaskDefinitionsResponse, error) { + return nil, fmt.Errorf("ListTaskDefinitions: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListTasks(ctx context.Context, input *ListTasksRequest) (*ListTasksResponse, error) { + return nil, fmt.Errorf("ListTasks: %w", ErrNotImplemented) +} + func (b *BaseProvider) PutAccountSetting(ctx context.Context, input *PutAccountSettingRequest) (*PutAccountSettingResponse, error) { return nil, fmt.Errorf("PutAccountSetting: %w", ErrNotImplemented) } @@ -51,6 +215,54 @@ func (b *BaseProvider) PutAccountSettingDefault(ctx context.Context, input *PutA return nil, fmt.Errorf("PutAccountSettingDefault: %w", ErrNotImplemented) } +func (b *BaseProvider) PutAttributes(ctx context.Context, input *PutAttributesRequest) (*PutAttributesResponse, error) { + return nil, fmt.Errorf("PutAttributes: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PutClusterCapacityProviders(ctx context.Context, input *PutClusterCapacityProvidersRequest) (*PutClusterCapacityProvidersResponse, error) { + return nil, fmt.Errorf("PutClusterCapacityProviders: %w", ErrNotImplemented) +} + +func (b *BaseProvider) RegisterContainerInstance(ctx context.Context, input *RegisterContainerInstanceRequest) (*RegisterContainerInstanceResponse, error) { + return nil, fmt.Errorf("RegisterContainerInstance: %w", ErrNotImplemented) +} + +func (b *BaseProvider) RegisterDaemonTaskDefinition(ctx context.Context, input *RegisterDaemonTaskDefinitionRequest) (*RegisterDaemonTaskDefinitionResponse, error) { + return nil, fmt.Errorf("RegisterDaemonTaskDefinition: %w", ErrNotImplemented) +} + +func (b *BaseProvider) RegisterTaskDefinition(ctx context.Context, input *RegisterTaskDefinitionRequest) (*RegisterTaskDefinitionResponse, error) { + return nil, fmt.Errorf("RegisterTaskDefinition: %w", ErrNotImplemented) +} + +func (b *BaseProvider) RunTask(ctx context.Context, input *RunTaskRequest) (*RunTaskResponse, error) { + return nil, fmt.Errorf("RunTask: %w", ErrNotImplemented) +} + +func (b *BaseProvider) StartTask(ctx context.Context, input *StartTaskRequest) (*StartTaskResponse, error) { + return nil, fmt.Errorf("StartTask: %w", ErrNotImplemented) +} + +func (b *BaseProvider) StopServiceDeployment(ctx context.Context, input *StopServiceDeploymentRequest) (*StopServiceDeploymentResponse, error) { + return nil, fmt.Errorf("StopServiceDeployment: %w", ErrNotImplemented) +} + +func (b *BaseProvider) StopTask(ctx context.Context, input *StopTaskRequest) (*StopTaskResponse, error) { + return nil, fmt.Errorf("StopTask: %w", ErrNotImplemented) +} + +func (b *BaseProvider) SubmitAttachmentStateChanges(ctx context.Context, input *SubmitAttachmentStateChangesRequest) (*SubmitAttachmentStateChangesResponse, error) { + return nil, fmt.Errorf("SubmitAttachmentStateChanges: %w", ErrNotImplemented) +} + +func (b *BaseProvider) SubmitContainerStateChange(ctx context.Context, input *SubmitContainerStateChangeRequest) (*SubmitContainerStateChangeResponse, error) { + return nil, fmt.Errorf("SubmitContainerStateChange: %w", ErrNotImplemented) +} + +func (b *BaseProvider) SubmitTaskStateChange(ctx context.Context, input *SubmitTaskStateChangeRequest) (*SubmitTaskStateChangeResponse, error) { + return nil, fmt.Errorf("SubmitTaskStateChange: %w", ErrNotImplemented) +} + func (b *BaseProvider) TagResource(ctx context.Context, input *TagResourceRequest) (*TagResourceResponse, error) { return nil, fmt.Errorf("TagResource: %w", ErrNotImplemented) } @@ -58,3 +270,47 @@ func (b *BaseProvider) TagResource(ctx context.Context, input *TagResourceReques func (b *BaseProvider) UntagResource(ctx context.Context, input *UntagResourceRequest) (*UntagResourceResponse, error) { return nil, fmt.Errorf("UntagResource: %w", ErrNotImplemented) } + +func (b *BaseProvider) UpdateCapacityProvider(ctx context.Context, input *UpdateCapacityProviderRequest) (*UpdateCapacityProviderResponse, error) { + return nil, fmt.Errorf("UpdateCapacityProvider: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateCluster(ctx context.Context, input *UpdateClusterRequest) (*UpdateClusterResponse, error) { + return nil, fmt.Errorf("UpdateCluster: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateClusterSettings(ctx context.Context, input *UpdateClusterSettingsRequest) (*UpdateClusterSettingsResponse, error) { + return nil, fmt.Errorf("UpdateClusterSettings: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateContainerAgent(ctx context.Context, input *UpdateContainerAgentRequest) (*UpdateContainerAgentResponse, error) { + return nil, fmt.Errorf("UpdateContainerAgent: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateContainerInstancesState(ctx context.Context, input *UpdateContainerInstancesStateRequest) (*UpdateContainerInstancesStateResponse, error) { + return nil, fmt.Errorf("UpdateContainerInstancesState: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateDaemon(ctx context.Context, input *UpdateDaemonRequest) (*UpdateDaemonResponse, error) { + return nil, fmt.Errorf("UpdateDaemon: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateExpressGatewayService(ctx context.Context, input *UpdateExpressGatewayServiceRequest) (*UpdateExpressGatewayServiceResponse, error) { + return nil, fmt.Errorf("UpdateExpressGatewayService: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateService(ctx context.Context, input *UpdateServiceRequest) (*UpdateServiceResponse, error) { + return nil, fmt.Errorf("UpdateService: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateServicePrimaryTaskSet(ctx context.Context, input *UpdateServicePrimaryTaskSetRequest) (*UpdateServicePrimaryTaskSetResponse, error) { + return nil, fmt.Errorf("UpdateServicePrimaryTaskSet: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateTaskProtection(ctx context.Context, input *UpdateTaskProtectionRequest) (*UpdateTaskProtectionResponse, error) { + return nil, fmt.Errorf("UpdateTaskProtection: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateTaskSet(ctx context.Context, input *UpdateTaskSetRequest) (*UpdateTaskSetResponse, error) { + return nil, fmt.Errorf("UpdateTaskSet: %w", ErrNotImplemented) +} diff --git a/internal/generated/ecs/router.go b/internal/generated/ecs/router.go index 077313a..839e5df 100644 --- a/internal/generated/ecs/router.go +++ b/internal/generated/ecs/router.go @@ -16,18 +16,82 @@ type OperationRoute struct { // OperationRoutes is the list of all routes for this service. var OperationRoutes = []OperationRoute{ + {Method: "", Pattern: "", Operation: "CreateCapacityProvider"}, + {Method: "", Pattern: "", Operation: "CreateCluster"}, + {Method: "", Pattern: "", Operation: "CreateDaemon"}, + {Method: "", Pattern: "", Operation: "CreateExpressGatewayService"}, + {Method: "", Pattern: "", Operation: "CreateService"}, + {Method: "", Pattern: "", Operation: "CreateTaskSet"}, {Method: "", Pattern: "", Operation: "DeleteAccountSetting"}, + {Method: "", Pattern: "", Operation: "DeleteAttributes"}, + {Method: "", Pattern: "", Operation: "DeleteCapacityProvider"}, + {Method: "", Pattern: "", Operation: "DeleteCluster"}, + {Method: "", Pattern: "", Operation: "DeleteDaemon"}, + {Method: "", Pattern: "", Operation: "DeleteDaemonTaskDefinition"}, + {Method: "", Pattern: "", Operation: "DeleteExpressGatewayService"}, + {Method: "", Pattern: "", Operation: "DeleteService"}, + {Method: "", Pattern: "", Operation: "DeleteTaskDefinitions"}, + {Method: "", Pattern: "", Operation: "DeleteTaskSet"}, + {Method: "", Pattern: "", Operation: "DeregisterContainerInstance"}, {Method: "", Pattern: "", Operation: "DeregisterTaskDefinition"}, + {Method: "", Pattern: "", Operation: "DescribeCapacityProviders"}, + {Method: "", Pattern: "", Operation: "DescribeClusters"}, + {Method: "", Pattern: "", Operation: "DescribeContainerInstances"}, + {Method: "", Pattern: "", Operation: "DescribeDaemon"}, + {Method: "", Pattern: "", Operation: "DescribeDaemonDeployments"}, + {Method: "", Pattern: "", Operation: "DescribeDaemonRevisions"}, + {Method: "", Pattern: "", Operation: "DescribeDaemonTaskDefinition"}, + {Method: "", Pattern: "", Operation: "DescribeExpressGatewayService"}, + {Method: "", Pattern: "", Operation: "DescribeServiceDeployments"}, + {Method: "", Pattern: "", Operation: "DescribeServiceRevisions"}, + {Method: "", Pattern: "", Operation: "DescribeServices"}, {Method: "", Pattern: "", Operation: "DescribeTaskDefinition"}, + {Method: "", Pattern: "", Operation: "DescribeTaskSets"}, + {Method: "", Pattern: "", Operation: "DescribeTasks"}, {Method: "", Pattern: "", Operation: "DiscoverPollEndpoint"}, + {Method: "", Pattern: "", Operation: "ExecuteCommand"}, + {Method: "", Pattern: "", Operation: "GetTaskProtection"}, {Method: "", Pattern: "", Operation: "ListAccountSettings"}, + {Method: "", Pattern: "", Operation: "ListAttributes"}, + {Method: "", Pattern: "", Operation: "ListClusters"}, + {Method: "", Pattern: "", Operation: "ListContainerInstances"}, + {Method: "", Pattern: "", Operation: "ListDaemonDeployments"}, + {Method: "", Pattern: "", Operation: "ListDaemonTaskDefinitions"}, + {Method: "", Pattern: "", Operation: "ListDaemons"}, + {Method: "", Pattern: "", Operation: "ListServiceDeployments"}, + {Method: "", Pattern: "", Operation: "ListServices"}, {Method: "", Pattern: "", Operation: "ListServicesByNamespace"}, {Method: "", Pattern: "", Operation: "ListTagsForResource"}, {Method: "", Pattern: "", Operation: "ListTaskDefinitionFamilies"}, + {Method: "", Pattern: "", Operation: "ListTaskDefinitions"}, + {Method: "", Pattern: "", Operation: "ListTasks"}, {Method: "", Pattern: "", Operation: "PutAccountSetting"}, {Method: "", Pattern: "", Operation: "PutAccountSettingDefault"}, + {Method: "", Pattern: "", Operation: "PutAttributes"}, + {Method: "", Pattern: "", Operation: "PutClusterCapacityProviders"}, + {Method: "", Pattern: "", Operation: "RegisterContainerInstance"}, + {Method: "", Pattern: "", Operation: "RegisterDaemonTaskDefinition"}, + {Method: "", Pattern: "", Operation: "RegisterTaskDefinition"}, + {Method: "", Pattern: "", Operation: "RunTask"}, + {Method: "", Pattern: "", Operation: "StartTask"}, + {Method: "", Pattern: "", Operation: "StopServiceDeployment"}, + {Method: "", Pattern: "", Operation: "StopTask"}, + {Method: "", Pattern: "", Operation: "SubmitAttachmentStateChanges"}, + {Method: "", Pattern: "", Operation: "SubmitContainerStateChange"}, + {Method: "", Pattern: "", Operation: "SubmitTaskStateChange"}, {Method: "", Pattern: "", Operation: "TagResource"}, {Method: "", Pattern: "", Operation: "UntagResource"}, + {Method: "", Pattern: "", Operation: "UpdateCapacityProvider"}, + {Method: "", Pattern: "", Operation: "UpdateCluster"}, + {Method: "", Pattern: "", Operation: "UpdateClusterSettings"}, + {Method: "", Pattern: "", Operation: "UpdateContainerAgent"}, + {Method: "", Pattern: "", Operation: "UpdateContainerInstancesState"}, + {Method: "", Pattern: "", Operation: "UpdateDaemon"}, + {Method: "", Pattern: "", Operation: "UpdateExpressGatewayService"}, + {Method: "", Pattern: "", Operation: "UpdateService"}, + {Method: "", Pattern: "", Operation: "UpdateServicePrimaryTaskSet"}, + {Method: "", Pattern: "", Operation: "UpdateTaskProtection"}, + {Method: "", Pattern: "", Operation: "UpdateTaskSet"}, } // MatchOperation returns the operation name and extracted path parameters for diff --git a/internal/generated/lambda/base_provider.go b/internal/generated/lambda/base_provider.go index 618cb18..9f56f3d 100644 --- a/internal/generated/lambda/base_provider.go +++ b/internal/generated/lambda/base_provider.go @@ -11,22 +11,102 @@ var ErrNotImplemented = fmt.Errorf("operation not implemented") type BaseProvider struct{} +func (b *BaseProvider) AddLayerVersionPermission(ctx context.Context, input *AddLayerVersionPermissionRequest) (*AddLayerVersionPermissionResponse, error) { + return nil, fmt.Errorf("AddLayerVersionPermission: %w", ErrNotImplemented) +} + +func (b *BaseProvider) AddPermission(ctx context.Context, input *AddPermissionRequest) (*AddPermissionResponse, error) { + return nil, fmt.Errorf("AddPermission: %w", ErrNotImplemented) +} + func (b *BaseProvider) CheckpointDurableExecution(ctx context.Context, input *CheckpointDurableExecutionRequest) (*CheckpointDurableExecutionResponse, error) { return nil, fmt.Errorf("CheckpointDurableExecution: %w", ErrNotImplemented) } +func (b *BaseProvider) CreateAlias(ctx context.Context, input *CreateAliasRequest) (*AliasConfiguration, error) { + return nil, fmt.Errorf("CreateAlias: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateCapacityProvider(ctx context.Context, input *CreateCapacityProviderRequest) (*CreateCapacityProviderResponse, error) { + return nil, fmt.Errorf("CreateCapacityProvider: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateCodeSigningConfig(ctx context.Context, input *CreateCodeSigningConfigRequest) (*CreateCodeSigningConfigResponse, error) { + return nil, fmt.Errorf("CreateCodeSigningConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateEventSourceMapping(ctx context.Context, input *CreateEventSourceMappingRequest) (*EventSourceMappingConfiguration, error) { + return nil, fmt.Errorf("CreateEventSourceMapping: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateFunction(ctx context.Context, input *CreateFunctionRequest) (*FunctionConfiguration, error) { + return nil, fmt.Errorf("CreateFunction: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateFunctionUrlConfig(ctx context.Context, input *CreateFunctionUrlConfigRequest) (*CreateFunctionUrlConfigResponse, error) { + return nil, fmt.Errorf("CreateFunctionUrlConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteAlias(ctx context.Context, input *DeleteAliasRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteAlias: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteCapacityProvider(ctx context.Context, input *DeleteCapacityProviderRequest) (*DeleteCapacityProviderResponse, error) { + return nil, fmt.Errorf("DeleteCapacityProvider: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteCodeSigningConfig(ctx context.Context, input *DeleteCodeSigningConfigRequest) (*DeleteCodeSigningConfigResponse, error) { + return nil, fmt.Errorf("DeleteCodeSigningConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteEventSourceMapping(ctx context.Context, input *DeleteEventSourceMappingRequest) (*EventSourceMappingConfiguration, error) { + return nil, fmt.Errorf("DeleteEventSourceMapping: %w", ErrNotImplemented) +} + func (b *BaseProvider) DeleteFunction(ctx context.Context, input *DeleteFunctionRequest) (*DeleteFunctionResponse, error) { return nil, fmt.Errorf("DeleteFunction: %w", ErrNotImplemented) } +func (b *BaseProvider) DeleteFunctionCodeSigningConfig(ctx context.Context, input *DeleteFunctionCodeSigningConfigRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteFunctionCodeSigningConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteFunctionConcurrency(ctx context.Context, input *DeleteFunctionConcurrencyRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteFunctionConcurrency: %w", ErrNotImplemented) +} + func (b *BaseProvider) DeleteFunctionEventInvokeConfig(ctx context.Context, input *DeleteFunctionEventInvokeConfigRequest) (*SmithyUnit, error) { return nil, fmt.Errorf("DeleteFunctionEventInvokeConfig: %w", ErrNotImplemented) } +func (b *BaseProvider) DeleteFunctionUrlConfig(ctx context.Context, input *DeleteFunctionUrlConfigRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteFunctionUrlConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteLayerVersion(ctx context.Context, input *DeleteLayerVersionRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteLayerVersion: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteProvisionedConcurrencyConfig(ctx context.Context, input *DeleteProvisionedConcurrencyConfigRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteProvisionedConcurrencyConfig: %w", ErrNotImplemented) +} + func (b *BaseProvider) GetAccountSettings(ctx context.Context, input *GetAccountSettingsRequest) (*GetAccountSettingsResponse, error) { return nil, fmt.Errorf("GetAccountSettings: %w", ErrNotImplemented) } +func (b *BaseProvider) GetAlias(ctx context.Context, input *GetAliasRequest) (*AliasConfiguration, error) { + return nil, fmt.Errorf("GetAlias: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetCapacityProvider(ctx context.Context, input *GetCapacityProviderRequest) (*GetCapacityProviderResponse, error) { + return nil, fmt.Errorf("GetCapacityProvider: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetCodeSigningConfig(ctx context.Context, input *GetCodeSigningConfigRequest) (*GetCodeSigningConfigResponse, error) { + return nil, fmt.Errorf("GetCodeSigningConfig: %w", ErrNotImplemented) +} + func (b *BaseProvider) GetDurableExecution(ctx context.Context, input *GetDurableExecutionRequest) (*GetDurableExecutionResponse, error) { return nil, fmt.Errorf("GetDurableExecution: %w", ErrNotImplemented) } @@ -39,26 +119,182 @@ func (b *BaseProvider) GetDurableExecutionState(ctx context.Context, input *GetD return nil, fmt.Errorf("GetDurableExecutionState: %w", ErrNotImplemented) } +func (b *BaseProvider) GetEventSourceMapping(ctx context.Context, input *GetEventSourceMappingRequest) (*EventSourceMappingConfiguration, error) { + return nil, fmt.Errorf("GetEventSourceMapping: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetFunction(ctx context.Context, input *GetFunctionRequest) (*GetFunctionResponse, error) { + return nil, fmt.Errorf("GetFunction: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetFunctionCodeSigningConfig(ctx context.Context, input *GetFunctionCodeSigningConfigRequest) (*GetFunctionCodeSigningConfigResponse, error) { + return nil, fmt.Errorf("GetFunctionCodeSigningConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetFunctionConcurrency(ctx context.Context, input *GetFunctionConcurrencyRequest) (*GetFunctionConcurrencyResponse, error) { + return nil, fmt.Errorf("GetFunctionConcurrency: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetFunctionConfiguration(ctx context.Context, input *GetFunctionConfigurationRequest) (*FunctionConfiguration, error) { + return nil, fmt.Errorf("GetFunctionConfiguration: %w", ErrNotImplemented) +} + func (b *BaseProvider) GetFunctionEventInvokeConfig(ctx context.Context, input *GetFunctionEventInvokeConfigRequest) (*FunctionEventInvokeConfig, error) { return nil, fmt.Errorf("GetFunctionEventInvokeConfig: %w", ErrNotImplemented) } +func (b *BaseProvider) GetFunctionRecursionConfig(ctx context.Context, input *GetFunctionRecursionConfigRequest) (*GetFunctionRecursionConfigResponse, error) { + return nil, fmt.Errorf("GetFunctionRecursionConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetFunctionScalingConfig(ctx context.Context, input *GetFunctionScalingConfigRequest) (*GetFunctionScalingConfigResponse, error) { + return nil, fmt.Errorf("GetFunctionScalingConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetFunctionUrlConfig(ctx context.Context, input *GetFunctionUrlConfigRequest) (*GetFunctionUrlConfigResponse, error) { + return nil, fmt.Errorf("GetFunctionUrlConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetLayerVersion(ctx context.Context, input *GetLayerVersionRequest) (*GetLayerVersionResponse, error) { + return nil, fmt.Errorf("GetLayerVersion: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetLayerVersionByArn(ctx context.Context, input *GetLayerVersionByArnRequest) (*GetLayerVersionResponse, error) { + return nil, fmt.Errorf("GetLayerVersionByArn: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetLayerVersionPolicy(ctx context.Context, input *GetLayerVersionPolicyRequest) (*GetLayerVersionPolicyResponse, error) { + return nil, fmt.Errorf("GetLayerVersionPolicy: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetPolicy(ctx context.Context, input *GetPolicyRequest) (*GetPolicyResponse, error) { + return nil, fmt.Errorf("GetPolicy: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetProvisionedConcurrencyConfig(ctx context.Context, input *GetProvisionedConcurrencyConfigRequest) (*GetProvisionedConcurrencyConfigResponse, error) { + return nil, fmt.Errorf("GetProvisionedConcurrencyConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetRuntimeManagementConfig(ctx context.Context, input *GetRuntimeManagementConfigRequest) (*GetRuntimeManagementConfigResponse, error) { + return nil, fmt.Errorf("GetRuntimeManagementConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) Invoke(ctx context.Context, input *InvocationRequest) (*InvocationResponse, error) { + return nil, fmt.Errorf("Invoke: %w", ErrNotImplemented) +} + +func (b *BaseProvider) InvokeAsync(ctx context.Context, input *InvokeAsyncRequest) (*InvokeAsyncResponse, error) { + return nil, fmt.Errorf("InvokeAsync: %w", ErrNotImplemented) +} + +func (b *BaseProvider) InvokeWithResponseStream(ctx context.Context, input *InvokeWithResponseStreamRequest) (*InvokeWithResponseStreamResponse, error) { + return nil, fmt.Errorf("InvokeWithResponseStream: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListAliases(ctx context.Context, input *ListAliasesRequest) (*ListAliasesResponse, error) { + return nil, fmt.Errorf("ListAliases: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListCapacityProviders(ctx context.Context, input *ListCapacityProvidersRequest) (*ListCapacityProvidersResponse, error) { + return nil, fmt.Errorf("ListCapacityProviders: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListCodeSigningConfigs(ctx context.Context, input *ListCodeSigningConfigsRequest) (*ListCodeSigningConfigsResponse, error) { + return nil, fmt.Errorf("ListCodeSigningConfigs: %w", ErrNotImplemented) +} + func (b *BaseProvider) ListDurableExecutionsByFunction(ctx context.Context, input *ListDurableExecutionsByFunctionRequest) (*ListDurableExecutionsByFunctionResponse, error) { return nil, fmt.Errorf("ListDurableExecutionsByFunction: %w", ErrNotImplemented) } +func (b *BaseProvider) ListEventSourceMappings(ctx context.Context, input *ListEventSourceMappingsRequest) (*ListEventSourceMappingsResponse, error) { + return nil, fmt.Errorf("ListEventSourceMappings: %w", ErrNotImplemented) +} + func (b *BaseProvider) ListFunctionEventInvokeConfigs(ctx context.Context, input *ListFunctionEventInvokeConfigsRequest) (*ListFunctionEventInvokeConfigsResponse, error) { return nil, fmt.Errorf("ListFunctionEventInvokeConfigs: %w", ErrNotImplemented) } +func (b *BaseProvider) ListFunctionUrlConfigs(ctx context.Context, input *ListFunctionUrlConfigsRequest) (*ListFunctionUrlConfigsResponse, error) { + return nil, fmt.Errorf("ListFunctionUrlConfigs: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListFunctionVersionsByCapacityProvider(ctx context.Context, input *ListFunctionVersionsByCapacityProviderRequest) (*ListFunctionVersionsByCapacityProviderResponse, error) { + return nil, fmt.Errorf("ListFunctionVersionsByCapacityProvider: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListFunctions(ctx context.Context, input *ListFunctionsRequest) (*ListFunctionsResponse, error) { + return nil, fmt.Errorf("ListFunctions: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListFunctionsByCodeSigningConfig(ctx context.Context, input *ListFunctionsByCodeSigningConfigRequest) (*ListFunctionsByCodeSigningConfigResponse, error) { + return nil, fmt.Errorf("ListFunctionsByCodeSigningConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListLayerVersions(ctx context.Context, input *ListLayerVersionsRequest) (*ListLayerVersionsResponse, error) { + return nil, fmt.Errorf("ListLayerVersions: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListLayers(ctx context.Context, input *ListLayersRequest) (*ListLayersResponse, error) { + return nil, fmt.Errorf("ListLayers: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListProvisionedConcurrencyConfigs(ctx context.Context, input *ListProvisionedConcurrencyConfigsRequest) (*ListProvisionedConcurrencyConfigsResponse, error) { + return nil, fmt.Errorf("ListProvisionedConcurrencyConfigs: %w", ErrNotImplemented) +} + func (b *BaseProvider) ListTags(ctx context.Context, input *ListTagsRequest) (*ListTagsResponse, error) { return nil, fmt.Errorf("ListTags: %w", ErrNotImplemented) } +func (b *BaseProvider) ListVersionsByFunction(ctx context.Context, input *ListVersionsByFunctionRequest) (*ListVersionsByFunctionResponse, error) { + return nil, fmt.Errorf("ListVersionsByFunction: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PublishLayerVersion(ctx context.Context, input *PublishLayerVersionRequest) (*PublishLayerVersionResponse, error) { + return nil, fmt.Errorf("PublishLayerVersion: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PublishVersion(ctx context.Context, input *PublishVersionRequest) (*FunctionConfiguration, error) { + return nil, fmt.Errorf("PublishVersion: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PutFunctionCodeSigningConfig(ctx context.Context, input *PutFunctionCodeSigningConfigRequest) (*PutFunctionCodeSigningConfigResponse, error) { + return nil, fmt.Errorf("PutFunctionCodeSigningConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PutFunctionConcurrency(ctx context.Context, input *PutFunctionConcurrencyRequest) (*Concurrency, error) { + return nil, fmt.Errorf("PutFunctionConcurrency: %w", ErrNotImplemented) +} + func (b *BaseProvider) PutFunctionEventInvokeConfig(ctx context.Context, input *PutFunctionEventInvokeConfigRequest) (*FunctionEventInvokeConfig, error) { return nil, fmt.Errorf("PutFunctionEventInvokeConfig: %w", ErrNotImplemented) } +func (b *BaseProvider) PutFunctionRecursionConfig(ctx context.Context, input *PutFunctionRecursionConfigRequest) (*PutFunctionRecursionConfigResponse, error) { + return nil, fmt.Errorf("PutFunctionRecursionConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PutFunctionScalingConfig(ctx context.Context, input *PutFunctionScalingConfigRequest) (*PutFunctionScalingConfigResponse, error) { + return nil, fmt.Errorf("PutFunctionScalingConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PutProvisionedConcurrencyConfig(ctx context.Context, input *PutProvisionedConcurrencyConfigRequest) (*PutProvisionedConcurrencyConfigResponse, error) { + return nil, fmt.Errorf("PutProvisionedConcurrencyConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PutRuntimeManagementConfig(ctx context.Context, input *PutRuntimeManagementConfigRequest) (*PutRuntimeManagementConfigResponse, error) { + return nil, fmt.Errorf("PutRuntimeManagementConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) RemoveLayerVersionPermission(ctx context.Context, input *RemoveLayerVersionPermissionRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("RemoveLayerVersionPermission: %w", ErrNotImplemented) +} + +func (b *BaseProvider) RemovePermission(ctx context.Context, input *RemovePermissionRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("RemovePermission: %w", ErrNotImplemented) +} + func (b *BaseProvider) SendDurableExecutionCallbackFailure(ctx context.Context, input *SendDurableExecutionCallbackFailureRequest) (*SendDurableExecutionCallbackFailureResponse, error) { return nil, fmt.Errorf("SendDurableExecutionCallbackFailure: %w", ErrNotImplemented) } @@ -83,6 +319,34 @@ func (b *BaseProvider) UntagResource(ctx context.Context, input *UntagResourceRe return nil, fmt.Errorf("UntagResource: %w", ErrNotImplemented) } +func (b *BaseProvider) UpdateAlias(ctx context.Context, input *UpdateAliasRequest) (*AliasConfiguration, error) { + return nil, fmt.Errorf("UpdateAlias: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateCapacityProvider(ctx context.Context, input *UpdateCapacityProviderRequest) (*UpdateCapacityProviderResponse, error) { + return nil, fmt.Errorf("UpdateCapacityProvider: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateCodeSigningConfig(ctx context.Context, input *UpdateCodeSigningConfigRequest) (*UpdateCodeSigningConfigResponse, error) { + return nil, fmt.Errorf("UpdateCodeSigningConfig: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateEventSourceMapping(ctx context.Context, input *UpdateEventSourceMappingRequest) (*EventSourceMappingConfiguration, error) { + return nil, fmt.Errorf("UpdateEventSourceMapping: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateFunctionCode(ctx context.Context, input *UpdateFunctionCodeRequest) (*FunctionConfiguration, error) { + return nil, fmt.Errorf("UpdateFunctionCode: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateFunctionConfiguration(ctx context.Context, input *UpdateFunctionConfigurationRequest) (*FunctionConfiguration, error) { + return nil, fmt.Errorf("UpdateFunctionConfiguration: %w", ErrNotImplemented) +} + func (b *BaseProvider) UpdateFunctionEventInvokeConfig(ctx context.Context, input *UpdateFunctionEventInvokeConfigRequest) (*FunctionEventInvokeConfig, error) { return nil, fmt.Errorf("UpdateFunctionEventInvokeConfig: %w", ErrNotImplemented) } + +func (b *BaseProvider) UpdateFunctionUrlConfig(ctx context.Context, input *UpdateFunctionUrlConfigRequest) (*UpdateFunctionUrlConfigResponse, error) { + return nil, fmt.Errorf("UpdateFunctionUrlConfig: %w", ErrNotImplemented) +} diff --git a/internal/generated/lambda/router.go b/internal/generated/lambda/router.go index 75d8e68..80de47f 100644 --- a/internal/generated/lambda/router.go +++ b/internal/generated/lambda/router.go @@ -16,25 +16,91 @@ type OperationRoute struct { // OperationRoutes is the list of all routes for this service. var OperationRoutes = []OperationRoute{ + {Method: "POST", Pattern: "/2018-10-31/layers/{LayerName}/versions/{VersionNumber}/policy", Operation: "AddLayerVersionPermission"}, + {Method: "POST", Pattern: "/2015-03-31/functions/{FunctionName}/policy", Operation: "AddPermission"}, {Method: "POST", Pattern: "/2025-12-01/durable-executions/{DurableExecutionArn}/checkpoint", Operation: "CheckpointDurableExecution"}, + {Method: "POST", Pattern: "/2015-03-31/functions/{FunctionName}/aliases", Operation: "CreateAlias"}, + {Method: "POST", Pattern: "/2025-11-30/capacity-providers", Operation: "CreateCapacityProvider"}, + {Method: "POST", Pattern: "/2020-04-22/code-signing-configs", Operation: "CreateCodeSigningConfig"}, + {Method: "POST", Pattern: "/2015-03-31/event-source-mappings", Operation: "CreateEventSourceMapping"}, + {Method: "POST", Pattern: "/2015-03-31/functions", Operation: "CreateFunction"}, + {Method: "POST", Pattern: "/2021-10-31/functions/{FunctionName}/url", Operation: "CreateFunctionUrlConfig"}, + {Method: "DELETE", Pattern: "/2015-03-31/functions/{FunctionName}/aliases/{Name}", Operation: "DeleteAlias"}, + {Method: "DELETE", Pattern: "/2025-11-30/capacity-providers/{CapacityProviderName}", Operation: "DeleteCapacityProvider"}, + {Method: "DELETE", Pattern: "/2020-04-22/code-signing-configs/{CodeSigningConfigArn}", Operation: "DeleteCodeSigningConfig"}, + {Method: "DELETE", Pattern: "/2015-03-31/event-source-mappings/{UUID}", Operation: "DeleteEventSourceMapping"}, {Method: "DELETE", Pattern: "/2015-03-31/functions/{FunctionName}", Operation: "DeleteFunction"}, + {Method: "DELETE", Pattern: "/2020-06-30/functions/{FunctionName}/code-signing-config", Operation: "DeleteFunctionCodeSigningConfig"}, + {Method: "DELETE", Pattern: "/2017-10-31/functions/{FunctionName}/concurrency", Operation: "DeleteFunctionConcurrency"}, {Method: "DELETE", Pattern: "/2019-09-25/functions/{FunctionName}/event-invoke-config", Operation: "DeleteFunctionEventInvokeConfig"}, + {Method: "DELETE", Pattern: "/2021-10-31/functions/{FunctionName}/url", Operation: "DeleteFunctionUrlConfig"}, + {Method: "DELETE", Pattern: "/2018-10-31/layers/{LayerName}/versions/{VersionNumber}", Operation: "DeleteLayerVersion"}, + {Method: "DELETE", Pattern: "/2019-09-30/functions/{FunctionName}/provisioned-concurrency", Operation: "DeleteProvisionedConcurrencyConfig"}, {Method: "GET", Pattern: "/2016-08-19/account-settings", Operation: "GetAccountSettings"}, + {Method: "GET", Pattern: "/2015-03-31/functions/{FunctionName}/aliases/{Name}", Operation: "GetAlias"}, + {Method: "GET", Pattern: "/2025-11-30/capacity-providers/{CapacityProviderName}", Operation: "GetCapacityProvider"}, + {Method: "GET", Pattern: "/2020-04-22/code-signing-configs/{CodeSigningConfigArn}", Operation: "GetCodeSigningConfig"}, {Method: "GET", Pattern: "/2025-12-01/durable-executions/{DurableExecutionArn}", Operation: "GetDurableExecution"}, {Method: "GET", Pattern: "/2025-12-01/durable-executions/{DurableExecutionArn}/history", Operation: "GetDurableExecutionHistory"}, {Method: "GET", Pattern: "/2025-12-01/durable-executions/{DurableExecutionArn}/state", Operation: "GetDurableExecutionState"}, + {Method: "GET", Pattern: "/2015-03-31/event-source-mappings/{UUID}", Operation: "GetEventSourceMapping"}, + {Method: "GET", Pattern: "/2015-03-31/functions/{FunctionName}", Operation: "GetFunction"}, + {Method: "GET", Pattern: "/2020-06-30/functions/{FunctionName}/code-signing-config", Operation: "GetFunctionCodeSigningConfig"}, + {Method: "GET", Pattern: "/2019-09-30/functions/{FunctionName}/concurrency", Operation: "GetFunctionConcurrency"}, + {Method: "GET", Pattern: "/2015-03-31/functions/{FunctionName}/configuration", Operation: "GetFunctionConfiguration"}, {Method: "GET", Pattern: "/2019-09-25/functions/{FunctionName}/event-invoke-config", Operation: "GetFunctionEventInvokeConfig"}, + {Method: "GET", Pattern: "/2024-08-31/functions/{FunctionName}/recursion-config", Operation: "GetFunctionRecursionConfig"}, + {Method: "GET", Pattern: "/2025-11-30/functions/{FunctionName}/function-scaling-config", Operation: "GetFunctionScalingConfig"}, + {Method: "GET", Pattern: "/2021-10-31/functions/{FunctionName}/url", Operation: "GetFunctionUrlConfig"}, + {Method: "GET", Pattern: "/2018-10-31/layers/{LayerName}/versions/{VersionNumber}", Operation: "GetLayerVersion"}, + {Method: "GET", Pattern: "/2018-10-31/layers?find=LayerVersion", Operation: "GetLayerVersionByArn"}, + {Method: "GET", Pattern: "/2018-10-31/layers/{LayerName}/versions/{VersionNumber}/policy", Operation: "GetLayerVersionPolicy"}, + {Method: "GET", Pattern: "/2015-03-31/functions/{FunctionName}/policy", Operation: "GetPolicy"}, + {Method: "GET", Pattern: "/2019-09-30/functions/{FunctionName}/provisioned-concurrency", Operation: "GetProvisionedConcurrencyConfig"}, + {Method: "GET", Pattern: "/2021-07-20/functions/{FunctionName}/runtime-management-config", Operation: "GetRuntimeManagementConfig"}, + {Method: "POST", Pattern: "/2015-03-31/functions/{FunctionName}/invocations", Operation: "Invoke"}, + {Method: "POST", Pattern: "/2014-11-13/functions/{FunctionName}/invoke-async", Operation: "InvokeAsync"}, + {Method: "POST", Pattern: "/2021-11-15/functions/{FunctionName}/response-streaming-invocations", Operation: "InvokeWithResponseStream"}, + {Method: "GET", Pattern: "/2015-03-31/functions/{FunctionName}/aliases", Operation: "ListAliases"}, + {Method: "GET", Pattern: "/2025-11-30/capacity-providers", Operation: "ListCapacityProviders"}, + {Method: "GET", Pattern: "/2020-04-22/code-signing-configs", Operation: "ListCodeSigningConfigs"}, {Method: "GET", Pattern: "/2025-12-01/functions/{FunctionName}/durable-executions", Operation: "ListDurableExecutionsByFunction"}, + {Method: "GET", Pattern: "/2015-03-31/event-source-mappings", Operation: "ListEventSourceMappings"}, {Method: "GET", Pattern: "/2019-09-25/functions/{FunctionName}/event-invoke-config/list", Operation: "ListFunctionEventInvokeConfigs"}, + {Method: "GET", Pattern: "/2021-10-31/functions/{FunctionName}/urls", Operation: "ListFunctionUrlConfigs"}, + {Method: "GET", Pattern: "/2025-11-30/capacity-providers/{CapacityProviderName}/function-versions", Operation: "ListFunctionVersionsByCapacityProvider"}, + {Method: "GET", Pattern: "/2015-03-31/functions", Operation: "ListFunctions"}, + {Method: "GET", Pattern: "/2020-04-22/code-signing-configs/{CodeSigningConfigArn}/functions", Operation: "ListFunctionsByCodeSigningConfig"}, + {Method: "GET", Pattern: "/2018-10-31/layers/{LayerName}/versions", Operation: "ListLayerVersions"}, + {Method: "GET", Pattern: "/2018-10-31/layers", Operation: "ListLayers"}, + {Method: "GET", Pattern: "/2019-09-30/functions/{FunctionName}/provisioned-concurrency?List=ALL", Operation: "ListProvisionedConcurrencyConfigs"}, {Method: "GET", Pattern: "/2017-03-31/tags/{Resource}", Operation: "ListTags"}, + {Method: "GET", Pattern: "/2015-03-31/functions/{FunctionName}/versions", Operation: "ListVersionsByFunction"}, + {Method: "POST", Pattern: "/2018-10-31/layers/{LayerName}/versions", Operation: "PublishLayerVersion"}, + {Method: "POST", Pattern: "/2015-03-31/functions/{FunctionName}/versions", Operation: "PublishVersion"}, + {Method: "PUT", Pattern: "/2020-06-30/functions/{FunctionName}/code-signing-config", Operation: "PutFunctionCodeSigningConfig"}, + {Method: "PUT", Pattern: "/2017-10-31/functions/{FunctionName}/concurrency", Operation: "PutFunctionConcurrency"}, {Method: "PUT", Pattern: "/2019-09-25/functions/{FunctionName}/event-invoke-config", Operation: "PutFunctionEventInvokeConfig"}, + {Method: "PUT", Pattern: "/2024-08-31/functions/{FunctionName}/recursion-config", Operation: "PutFunctionRecursionConfig"}, + {Method: "PUT", Pattern: "/2025-11-30/functions/{FunctionName}/function-scaling-config", Operation: "PutFunctionScalingConfig"}, + {Method: "PUT", Pattern: "/2019-09-30/functions/{FunctionName}/provisioned-concurrency", Operation: "PutProvisionedConcurrencyConfig"}, + {Method: "PUT", Pattern: "/2021-07-20/functions/{FunctionName}/runtime-management-config", Operation: "PutRuntimeManagementConfig"}, + {Method: "DELETE", Pattern: "/2018-10-31/layers/{LayerName}/versions/{VersionNumber}/policy/{StatementId}", Operation: "RemoveLayerVersionPermission"}, + {Method: "DELETE", Pattern: "/2015-03-31/functions/{FunctionName}/policy/{StatementId}", Operation: "RemovePermission"}, {Method: "POST", Pattern: "/2025-12-01/durable-execution-callbacks/{CallbackId}/fail", Operation: "SendDurableExecutionCallbackFailure"}, {Method: "POST", Pattern: "/2025-12-01/durable-execution-callbacks/{CallbackId}/heartbeat", Operation: "SendDurableExecutionCallbackHeartbeat"}, {Method: "POST", Pattern: "/2025-12-01/durable-execution-callbacks/{CallbackId}/succeed", Operation: "SendDurableExecutionCallbackSuccess"}, {Method: "POST", Pattern: "/2025-12-01/durable-executions/{DurableExecutionArn}/stop", Operation: "StopDurableExecution"}, {Method: "POST", Pattern: "/2017-03-31/tags/{Resource}", Operation: "TagResource"}, {Method: "DELETE", Pattern: "/2017-03-31/tags/{Resource}", Operation: "UntagResource"}, + {Method: "PUT", Pattern: "/2015-03-31/functions/{FunctionName}/aliases/{Name}", Operation: "UpdateAlias"}, + {Method: "PUT", Pattern: "/2025-11-30/capacity-providers/{CapacityProviderName}", Operation: "UpdateCapacityProvider"}, + {Method: "PUT", Pattern: "/2020-04-22/code-signing-configs/{CodeSigningConfigArn}", Operation: "UpdateCodeSigningConfig"}, + {Method: "PUT", Pattern: "/2015-03-31/event-source-mappings/{UUID}", Operation: "UpdateEventSourceMapping"}, + {Method: "PUT", Pattern: "/2015-03-31/functions/{FunctionName}/code", Operation: "UpdateFunctionCode"}, + {Method: "PUT", Pattern: "/2015-03-31/functions/{FunctionName}/configuration", Operation: "UpdateFunctionConfiguration"}, {Method: "POST", Pattern: "/2019-09-25/functions/{FunctionName}/event-invoke-config", Operation: "UpdateFunctionEventInvokeConfig"}, + {Method: "PUT", Pattern: "/2021-10-31/functions/{FunctionName}/url", Operation: "UpdateFunctionUrlConfig"}, } // MatchOperation returns the operation name and extracted path parameters for diff --git a/internal/generated/ssoadmin/base_provider.go b/internal/generated/ssoadmin/base_provider.go index 42597e9..f79a08a 100644 --- a/internal/generated/ssoadmin/base_provider.go +++ b/internal/generated/ssoadmin/base_provider.go @@ -59,10 +59,22 @@ func (b *BaseProvider) DeleteApplication(ctx context.Context, input *DeleteAppli return nil, fmt.Errorf("DeleteApplication: %w", ErrNotImplemented) } +func (b *BaseProvider) DeleteApplicationAccessScope(ctx context.Context, input *DeleteApplicationAccessScopeRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteApplicationAccessScope: %w", ErrNotImplemented) +} + func (b *BaseProvider) DeleteApplicationAssignment(ctx context.Context, input *DeleteApplicationAssignmentRequest) (*DeleteApplicationAssignmentResponse, error) { return nil, fmt.Errorf("DeleteApplicationAssignment: %w", ErrNotImplemented) } +func (b *BaseProvider) DeleteApplicationAuthenticationMethod(ctx context.Context, input *DeleteApplicationAuthenticationMethodRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteApplicationAuthenticationMethod: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteApplicationGrant(ctx context.Context, input *DeleteApplicationGrantRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteApplicationGrant: %w", ErrNotImplemented) +} + func (b *BaseProvider) DeleteInlinePolicyFromPermissionSet(ctx context.Context, input *DeleteInlinePolicyFromPermissionSetRequest) (*DeleteInlinePolicyFromPermissionSetResponse, error) { return nil, fmt.Errorf("DeleteInlinePolicyFromPermissionSet: %w", ErrNotImplemented) } @@ -139,10 +151,22 @@ func (b *BaseProvider) DetachManagedPolicyFromPermissionSet(ctx context.Context, return nil, fmt.Errorf("DetachManagedPolicyFromPermissionSet: %w", ErrNotImplemented) } +func (b *BaseProvider) GetApplicationAccessScope(ctx context.Context, input *GetApplicationAccessScopeRequest) (*GetApplicationAccessScopeResponse, error) { + return nil, fmt.Errorf("GetApplicationAccessScope: %w", ErrNotImplemented) +} + func (b *BaseProvider) GetApplicationAssignmentConfiguration(ctx context.Context, input *GetApplicationAssignmentConfigurationRequest) (*GetApplicationAssignmentConfigurationResponse, error) { return nil, fmt.Errorf("GetApplicationAssignmentConfiguration: %w", ErrNotImplemented) } +func (b *BaseProvider) GetApplicationAuthenticationMethod(ctx context.Context, input *GetApplicationAuthenticationMethodRequest) (*GetApplicationAuthenticationMethodResponse, error) { + return nil, fmt.Errorf("GetApplicationAuthenticationMethod: %w", ErrNotImplemented) +} + +func (b *BaseProvider) GetApplicationGrant(ctx context.Context, input *GetApplicationGrantRequest) (*GetApplicationGrantResponse, error) { + return nil, fmt.Errorf("GetApplicationGrant: %w", ErrNotImplemented) +} + func (b *BaseProvider) GetApplicationSessionConfiguration(ctx context.Context, input *GetApplicationSessionConfigurationRequest) (*GetApplicationSessionConfigurationResponse, error) { return nil, fmt.Errorf("GetApplicationSessionConfiguration: %w", ErrNotImplemented) } @@ -175,6 +199,10 @@ func (b *BaseProvider) ListAccountsForProvisionedPermissionSet(ctx context.Conte return nil, fmt.Errorf("ListAccountsForProvisionedPermissionSet: %w", ErrNotImplemented) } +func (b *BaseProvider) ListApplicationAccessScopes(ctx context.Context, input *ListApplicationAccessScopesRequest) (*ListApplicationAccessScopesResponse, error) { + return nil, fmt.Errorf("ListApplicationAccessScopes: %w", ErrNotImplemented) +} + func (b *BaseProvider) ListApplicationAssignments(ctx context.Context, input *ListApplicationAssignmentsRequest) (*ListApplicationAssignmentsResponse, error) { return nil, fmt.Errorf("ListApplicationAssignments: %w", ErrNotImplemented) } @@ -183,6 +211,14 @@ func (b *BaseProvider) ListApplicationAssignmentsForPrincipal(ctx context.Contex return nil, fmt.Errorf("ListApplicationAssignmentsForPrincipal: %w", ErrNotImplemented) } +func (b *BaseProvider) ListApplicationAuthenticationMethods(ctx context.Context, input *ListApplicationAuthenticationMethodsRequest) (*ListApplicationAuthenticationMethodsResponse, error) { + return nil, fmt.Errorf("ListApplicationAuthenticationMethods: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListApplicationGrants(ctx context.Context, input *ListApplicationGrantsRequest) (*ListApplicationGrantsResponse, error) { + return nil, fmt.Errorf("ListApplicationGrants: %w", ErrNotImplemented) +} + func (b *BaseProvider) ListApplicationProviders(ctx context.Context, input *ListApplicationProvidersRequest) (*ListApplicationProvidersResponse, error) { return nil, fmt.Errorf("ListApplicationProviders: %w", ErrNotImplemented) } @@ -231,10 +267,22 @@ func (b *BaseProvider) ProvisionPermissionSet(ctx context.Context, input *Provis return nil, fmt.Errorf("ProvisionPermissionSet: %w", ErrNotImplemented) } +func (b *BaseProvider) PutApplicationAccessScope(ctx context.Context, input *PutApplicationAccessScopeRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("PutApplicationAccessScope: %w", ErrNotImplemented) +} + func (b *BaseProvider) PutApplicationAssignmentConfiguration(ctx context.Context, input *PutApplicationAssignmentConfigurationRequest) (*PutApplicationAssignmentConfigurationResponse, error) { return nil, fmt.Errorf("PutApplicationAssignmentConfiguration: %w", ErrNotImplemented) } +func (b *BaseProvider) PutApplicationAuthenticationMethod(ctx context.Context, input *PutApplicationAuthenticationMethodRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("PutApplicationAuthenticationMethod: %w", ErrNotImplemented) +} + +func (b *BaseProvider) PutApplicationGrant(ctx context.Context, input *PutApplicationGrantRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("PutApplicationGrant: %w", ErrNotImplemented) +} + func (b *BaseProvider) PutApplicationSessionConfiguration(ctx context.Context, input *PutApplicationSessionConfigurationRequest) (*PutApplicationSessionConfigurationResponse, error) { return nil, fmt.Errorf("PutApplicationSessionConfiguration: %w", ErrNotImplemented) } diff --git a/internal/generated/ssoadmin/router.go b/internal/generated/ssoadmin/router.go index 268c99d..382b5a1 100644 --- a/internal/generated/ssoadmin/router.go +++ b/internal/generated/ssoadmin/router.go @@ -28,7 +28,10 @@ var OperationRoutes = []OperationRoute{ {Method: "", Pattern: "", Operation: "CreateTrustedTokenIssuer"}, {Method: "", Pattern: "", Operation: "DeleteAccountAssignment"}, {Method: "", Pattern: "", Operation: "DeleteApplication"}, + {Method: "", Pattern: "", Operation: "DeleteApplicationAccessScope"}, {Method: "", Pattern: "", Operation: "DeleteApplicationAssignment"}, + {Method: "", Pattern: "", Operation: "DeleteApplicationAuthenticationMethod"}, + {Method: "", Pattern: "", Operation: "DeleteApplicationGrant"}, {Method: "", Pattern: "", Operation: "DeleteInlinePolicyFromPermissionSet"}, {Method: "", Pattern: "", Operation: "DeleteInstance"}, {Method: "", Pattern: "", Operation: "DeleteInstanceAccessControlAttributeConfiguration"}, @@ -48,7 +51,10 @@ var OperationRoutes = []OperationRoute{ {Method: "", Pattern: "", Operation: "DescribeTrustedTokenIssuer"}, {Method: "", Pattern: "", Operation: "DetachCustomerManagedPolicyReferenceFromPermissionSet"}, {Method: "", Pattern: "", Operation: "DetachManagedPolicyFromPermissionSet"}, + {Method: "", Pattern: "", Operation: "GetApplicationAccessScope"}, {Method: "", Pattern: "", Operation: "GetApplicationAssignmentConfiguration"}, + {Method: "", Pattern: "", Operation: "GetApplicationAuthenticationMethod"}, + {Method: "", Pattern: "", Operation: "GetApplicationGrant"}, {Method: "", Pattern: "", Operation: "GetApplicationSessionConfiguration"}, {Method: "", Pattern: "", Operation: "GetInlinePolicyForPermissionSet"}, {Method: "", Pattern: "", Operation: "GetPermissionsBoundaryForPermissionSet"}, @@ -57,8 +63,11 @@ var OperationRoutes = []OperationRoute{ {Method: "", Pattern: "", Operation: "ListAccountAssignments"}, {Method: "", Pattern: "", Operation: "ListAccountAssignmentsForPrincipal"}, {Method: "", Pattern: "", Operation: "ListAccountsForProvisionedPermissionSet"}, + {Method: "", Pattern: "", Operation: "ListApplicationAccessScopes"}, {Method: "", Pattern: "", Operation: "ListApplicationAssignments"}, {Method: "", Pattern: "", Operation: "ListApplicationAssignmentsForPrincipal"}, + {Method: "", Pattern: "", Operation: "ListApplicationAuthenticationMethods"}, + {Method: "", Pattern: "", Operation: "ListApplicationGrants"}, {Method: "", Pattern: "", Operation: "ListApplicationProviders"}, {Method: "", Pattern: "", Operation: "ListApplications"}, {Method: "", Pattern: "", Operation: "ListCustomerManagedPolicyReferencesInPermissionSet"}, @@ -71,7 +80,10 @@ var OperationRoutes = []OperationRoute{ {Method: "", Pattern: "", Operation: "ListTagsForResource"}, {Method: "", Pattern: "", Operation: "ListTrustedTokenIssuers"}, {Method: "", Pattern: "", Operation: "ProvisionPermissionSet"}, + {Method: "", Pattern: "", Operation: "PutApplicationAccessScope"}, {Method: "", Pattern: "", Operation: "PutApplicationAssignmentConfiguration"}, + {Method: "", Pattern: "", Operation: "PutApplicationAuthenticationMethod"}, + {Method: "", Pattern: "", Operation: "PutApplicationGrant"}, {Method: "", Pattern: "", Operation: "PutApplicationSessionConfiguration"}, {Method: "", Pattern: "", Operation: "PutInlinePolicyToPermissionSet"}, {Method: "", Pattern: "", Operation: "PutPermissionsBoundaryToPermissionSet"}, diff --git a/internal/generated/ssoadmin/types.go b/internal/generated/ssoadmin/types.go index 2c21815..2aa66f3 100644 --- a/internal/generated/ssoadmin/types.go +++ b/internal/generated/ssoadmin/types.go @@ -959,6 +959,9 @@ type SignInOptions struct { Origin string `json:"origin" xml:"Origin"` } +type SmithyUnit struct { +} + type Tag struct { Key string `json:"key" xml:"Key"` Value string `json:"value" xml:"Value"` diff --git a/internal/generated/transfer/base_provider.go b/internal/generated/transfer/base_provider.go index cceca0d..441b752 100644 --- a/internal/generated/transfer/base_provider.go +++ b/internal/generated/transfer/base_provider.go @@ -15,22 +15,98 @@ func (b *BaseProvider) CreateAccess(ctx context.Context, input *CreateAccessRequ return nil, fmt.Errorf("CreateAccess: %w", ErrNotImplemented) } +func (b *BaseProvider) CreateAgreement(ctx context.Context, input *CreateAgreementRequest) (*CreateAgreementResponse, error) { + return nil, fmt.Errorf("CreateAgreement: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateConnector(ctx context.Context, input *CreateConnectorRequest) (*CreateConnectorResponse, error) { + return nil, fmt.Errorf("CreateConnector: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateProfile(ctx context.Context, input *CreateProfileRequest) (*CreateProfileResponse, error) { + return nil, fmt.Errorf("CreateProfile: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateServer(ctx context.Context, input *CreateServerRequest) (*CreateServerResponse, error) { + return nil, fmt.Errorf("CreateServer: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateUser(ctx context.Context, input *CreateUserRequest) (*CreateUserResponse, error) { + return nil, fmt.Errorf("CreateUser: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateWebApp(ctx context.Context, input *CreateWebAppRequest) (*CreateWebAppResponse, error) { + return nil, fmt.Errorf("CreateWebApp: %w", ErrNotImplemented) +} + +func (b *BaseProvider) CreateWorkflow(ctx context.Context, input *CreateWorkflowRequest) (*CreateWorkflowResponse, error) { + return nil, fmt.Errorf("CreateWorkflow: %w", ErrNotImplemented) +} + func (b *BaseProvider) DeleteAccess(ctx context.Context, input *DeleteAccessRequest) (*SmithyUnit, error) { return nil, fmt.Errorf("DeleteAccess: %w", ErrNotImplemented) } +func (b *BaseProvider) DeleteAgreement(ctx context.Context, input *DeleteAgreementRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteAgreement: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteCertificate(ctx context.Context, input *DeleteCertificateRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteCertificate: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteConnector(ctx context.Context, input *DeleteConnectorRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteConnector: %w", ErrNotImplemented) +} + func (b *BaseProvider) DeleteHostKey(ctx context.Context, input *DeleteHostKeyRequest) (*SmithyUnit, error) { return nil, fmt.Errorf("DeleteHostKey: %w", ErrNotImplemented) } +func (b *BaseProvider) DeleteProfile(ctx context.Context, input *DeleteProfileRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteProfile: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteServer(ctx context.Context, input *DeleteServerRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteServer: %w", ErrNotImplemented) +} + func (b *BaseProvider) DeleteSshPublicKey(ctx context.Context, input *DeleteSshPublicKeyRequest) (*SmithyUnit, error) { return nil, fmt.Errorf("DeleteSshPublicKey: %w", ErrNotImplemented) } +func (b *BaseProvider) DeleteUser(ctx context.Context, input *DeleteUserRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteUser: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteWebApp(ctx context.Context, input *DeleteWebAppRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteWebApp: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteWebAppCustomization(ctx context.Context, input *DeleteWebAppCustomizationRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteWebAppCustomization: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DeleteWorkflow(ctx context.Context, input *DeleteWorkflowRequest) (*SmithyUnit, error) { + return nil, fmt.Errorf("DeleteWorkflow: %w", ErrNotImplemented) +} + func (b *BaseProvider) DescribeAccess(ctx context.Context, input *DescribeAccessRequest) (*DescribeAccessResponse, error) { return nil, fmt.Errorf("DescribeAccess: %w", ErrNotImplemented) } +func (b *BaseProvider) DescribeAgreement(ctx context.Context, input *DescribeAgreementRequest) (*DescribeAgreementResponse, error) { + return nil, fmt.Errorf("DescribeAgreement: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeCertificate(ctx context.Context, input *DescribeCertificateRequest) (*DescribeCertificateResponse, error) { + return nil, fmt.Errorf("DescribeCertificate: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeConnector(ctx context.Context, input *DescribeConnectorRequest) (*DescribeConnectorResponse, error) { + return nil, fmt.Errorf("DescribeConnector: %w", ErrNotImplemented) +} + func (b *BaseProvider) DescribeExecution(ctx context.Context, input *DescribeExecutionRequest) (*DescribeExecutionResponse, error) { return nil, fmt.Errorf("DescribeExecution: %w", ErrNotImplemented) } @@ -39,10 +115,38 @@ func (b *BaseProvider) DescribeHostKey(ctx context.Context, input *DescribeHostK return nil, fmt.Errorf("DescribeHostKey: %w", ErrNotImplemented) } +func (b *BaseProvider) DescribeProfile(ctx context.Context, input *DescribeProfileRequest) (*DescribeProfileResponse, error) { + return nil, fmt.Errorf("DescribeProfile: %w", ErrNotImplemented) +} + func (b *BaseProvider) DescribeSecurityPolicy(ctx context.Context, input *DescribeSecurityPolicyRequest) (*DescribeSecurityPolicyResponse, error) { return nil, fmt.Errorf("DescribeSecurityPolicy: %w", ErrNotImplemented) } +func (b *BaseProvider) DescribeServer(ctx context.Context, input *DescribeServerRequest) (*DescribeServerResponse, error) { + return nil, fmt.Errorf("DescribeServer: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeUser(ctx context.Context, input *DescribeUserRequest) (*DescribeUserResponse, error) { + return nil, fmt.Errorf("DescribeUser: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeWebApp(ctx context.Context, input *DescribeWebAppRequest) (*DescribeWebAppResponse, error) { + return nil, fmt.Errorf("DescribeWebApp: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeWebAppCustomization(ctx context.Context, input *DescribeWebAppCustomizationRequest) (*DescribeWebAppCustomizationResponse, error) { + return nil, fmt.Errorf("DescribeWebAppCustomization: %w", ErrNotImplemented) +} + +func (b *BaseProvider) DescribeWorkflow(ctx context.Context, input *DescribeWorkflowRequest) (*DescribeWorkflowResponse, error) { + return nil, fmt.Errorf("DescribeWorkflow: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ImportCertificate(ctx context.Context, input *ImportCertificateRequest) (*ImportCertificateResponse, error) { + return nil, fmt.Errorf("ImportCertificate: %w", ErrNotImplemented) +} + func (b *BaseProvider) ImportHostKey(ctx context.Context, input *ImportHostKeyRequest) (*ImportHostKeyResponse, error) { return nil, fmt.Errorf("ImportHostKey: %w", ErrNotImplemented) } @@ -55,6 +159,18 @@ func (b *BaseProvider) ListAccesses(ctx context.Context, input *ListAccessesRequ return nil, fmt.Errorf("ListAccesses: %w", ErrNotImplemented) } +func (b *BaseProvider) ListAgreements(ctx context.Context, input *ListAgreementsRequest) (*ListAgreementsResponse, error) { + return nil, fmt.Errorf("ListAgreements: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListCertificates(ctx context.Context, input *ListCertificatesRequest) (*ListCertificatesResponse, error) { + return nil, fmt.Errorf("ListCertificates: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListConnectors(ctx context.Context, input *ListConnectorsRequest) (*ListConnectorsResponse, error) { + return nil, fmt.Errorf("ListConnectors: %w", ErrNotImplemented) +} + func (b *BaseProvider) ListExecutions(ctx context.Context, input *ListExecutionsRequest) (*ListExecutionsResponse, error) { return nil, fmt.Errorf("ListExecutions: %w", ErrNotImplemented) } @@ -67,14 +183,34 @@ func (b *BaseProvider) ListHostKeys(ctx context.Context, input *ListHostKeysRequ return nil, fmt.Errorf("ListHostKeys: %w", ErrNotImplemented) } +func (b *BaseProvider) ListProfiles(ctx context.Context, input *ListProfilesRequest) (*ListProfilesResponse, error) { + return nil, fmt.Errorf("ListProfiles: %w", ErrNotImplemented) +} + func (b *BaseProvider) ListSecurityPolicies(ctx context.Context, input *ListSecurityPoliciesRequest) (*ListSecurityPoliciesResponse, error) { return nil, fmt.Errorf("ListSecurityPolicies: %w", ErrNotImplemented) } +func (b *BaseProvider) ListServers(ctx context.Context, input *ListServersRequest) (*ListServersResponse, error) { + return nil, fmt.Errorf("ListServers: %w", ErrNotImplemented) +} + func (b *BaseProvider) ListTagsForResource(ctx context.Context, input *ListTagsForResourceRequest) (*ListTagsForResourceResponse, error) { return nil, fmt.Errorf("ListTagsForResource: %w", ErrNotImplemented) } +func (b *BaseProvider) ListUsers(ctx context.Context, input *ListUsersRequest) (*ListUsersResponse, error) { + return nil, fmt.Errorf("ListUsers: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListWebApps(ctx context.Context, input *ListWebAppsRequest) (*ListWebAppsResponse, error) { + return nil, fmt.Errorf("ListWebApps: %w", ErrNotImplemented) +} + +func (b *BaseProvider) ListWorkflows(ctx context.Context, input *ListWorkflowsRequest) (*ListWorkflowsResponse, error) { + return nil, fmt.Errorf("ListWorkflows: %w", ErrNotImplemented) +} + func (b *BaseProvider) SendWorkflowStepState(ctx context.Context, input *SendWorkflowStepStateRequest) (*SendWorkflowStepStateResponse, error) { return nil, fmt.Errorf("SendWorkflowStepState: %w", ErrNotImplemented) } @@ -123,6 +259,38 @@ func (b *BaseProvider) UpdateAccess(ctx context.Context, input *UpdateAccessRequ return nil, fmt.Errorf("UpdateAccess: %w", ErrNotImplemented) } +func (b *BaseProvider) UpdateAgreement(ctx context.Context, input *UpdateAgreementRequest) (*UpdateAgreementResponse, error) { + return nil, fmt.Errorf("UpdateAgreement: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateCertificate(ctx context.Context, input *UpdateCertificateRequest) (*UpdateCertificateResponse, error) { + return nil, fmt.Errorf("UpdateCertificate: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateConnector(ctx context.Context, input *UpdateConnectorRequest) (*UpdateConnectorResponse, error) { + return nil, fmt.Errorf("UpdateConnector: %w", ErrNotImplemented) +} + func (b *BaseProvider) UpdateHostKey(ctx context.Context, input *UpdateHostKeyRequest) (*UpdateHostKeyResponse, error) { return nil, fmt.Errorf("UpdateHostKey: %w", ErrNotImplemented) } + +func (b *BaseProvider) UpdateProfile(ctx context.Context, input *UpdateProfileRequest) (*UpdateProfileResponse, error) { + return nil, fmt.Errorf("UpdateProfile: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateServer(ctx context.Context, input *UpdateServerRequest) (*UpdateServerResponse, error) { + return nil, fmt.Errorf("UpdateServer: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateUser(ctx context.Context, input *UpdateUserRequest) (*UpdateUserResponse, error) { + return nil, fmt.Errorf("UpdateUser: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateWebApp(ctx context.Context, input *UpdateWebAppRequest) (*UpdateWebAppResponse, error) { + return nil, fmt.Errorf("UpdateWebApp: %w", ErrNotImplemented) +} + +func (b *BaseProvider) UpdateWebAppCustomization(ctx context.Context, input *UpdateWebAppCustomizationRequest) (*UpdateWebAppCustomizationResponse, error) { + return nil, fmt.Errorf("UpdateWebAppCustomization: %w", ErrNotImplemented) +} diff --git a/internal/generated/transfer/router.go b/internal/generated/transfer/router.go index 71e5d96..500f49c 100644 --- a/internal/generated/transfer/router.go +++ b/internal/generated/transfer/router.go @@ -17,21 +17,55 @@ type OperationRoute struct { // OperationRoutes is the list of all routes for this service. var OperationRoutes = []OperationRoute{ {Method: "", Pattern: "", Operation: "CreateAccess"}, + {Method: "", Pattern: "", Operation: "CreateAgreement"}, + {Method: "", Pattern: "", Operation: "CreateConnector"}, + {Method: "", Pattern: "", Operation: "CreateProfile"}, + {Method: "", Pattern: "", Operation: "CreateServer"}, + {Method: "", Pattern: "", Operation: "CreateUser"}, + {Method: "POST", Pattern: "/createWebApp", Operation: "CreateWebApp"}, + {Method: "", Pattern: "", Operation: "CreateWorkflow"}, {Method: "", Pattern: "", Operation: "DeleteAccess"}, + {Method: "", Pattern: "", Operation: "DeleteAgreement"}, + {Method: "", Pattern: "", Operation: "DeleteCertificate"}, + {Method: "", Pattern: "", Operation: "DeleteConnector"}, {Method: "", Pattern: "", Operation: "DeleteHostKey"}, + {Method: "", Pattern: "", Operation: "DeleteProfile"}, + {Method: "", Pattern: "", Operation: "DeleteServer"}, {Method: "", Pattern: "", Operation: "DeleteSshPublicKey"}, + {Method: "", Pattern: "", Operation: "DeleteUser"}, + {Method: "POST", Pattern: "/deleteWebApp", Operation: "DeleteWebApp"}, + {Method: "POST", Pattern: "/deleteWebAppCustomization", Operation: "DeleteWebAppCustomization"}, + {Method: "", Pattern: "", Operation: "DeleteWorkflow"}, {Method: "", Pattern: "", Operation: "DescribeAccess"}, + {Method: "", Pattern: "", Operation: "DescribeAgreement"}, + {Method: "", Pattern: "", Operation: "DescribeCertificate"}, + {Method: "", Pattern: "", Operation: "DescribeConnector"}, {Method: "", Pattern: "", Operation: "DescribeExecution"}, {Method: "", Pattern: "", Operation: "DescribeHostKey"}, + {Method: "", Pattern: "", Operation: "DescribeProfile"}, {Method: "", Pattern: "", Operation: "DescribeSecurityPolicy"}, + {Method: "", Pattern: "", Operation: "DescribeServer"}, + {Method: "", Pattern: "", Operation: "DescribeUser"}, + {Method: "POST", Pattern: "/describeWebApp", Operation: "DescribeWebApp"}, + {Method: "POST", Pattern: "/describeWebAppCustomization", Operation: "DescribeWebAppCustomization"}, + {Method: "", Pattern: "", Operation: "DescribeWorkflow"}, + {Method: "", Pattern: "", Operation: "ImportCertificate"}, {Method: "", Pattern: "", Operation: "ImportHostKey"}, {Method: "", Pattern: "", Operation: "ImportSshPublicKey"}, {Method: "", Pattern: "", Operation: "ListAccesses"}, + {Method: "", Pattern: "", Operation: "ListAgreements"}, + {Method: "", Pattern: "", Operation: "ListCertificates"}, + {Method: "", Pattern: "", Operation: "ListConnectors"}, {Method: "", Pattern: "", Operation: "ListExecutions"}, {Method: "POST", Pattern: "/listFileTransferResults", Operation: "ListFileTransferResults"}, {Method: "", Pattern: "", Operation: "ListHostKeys"}, + {Method: "", Pattern: "", Operation: "ListProfiles"}, {Method: "", Pattern: "", Operation: "ListSecurityPolicies"}, + {Method: "", Pattern: "", Operation: "ListServers"}, {Method: "", Pattern: "", Operation: "ListTagsForResource"}, + {Method: "", Pattern: "", Operation: "ListUsers"}, + {Method: "POST", Pattern: "/listWebApps", Operation: "ListWebApps"}, + {Method: "", Pattern: "", Operation: "ListWorkflows"}, {Method: "", Pattern: "", Operation: "SendWorkflowStepState"}, {Method: "", Pattern: "", Operation: "StartDirectoryListing"}, {Method: "", Pattern: "", Operation: "StartFileTransfer"}, @@ -44,7 +78,15 @@ var OperationRoutes = []OperationRoute{ {Method: "", Pattern: "", Operation: "TestIdentityProvider"}, {Method: "", Pattern: "", Operation: "UntagResource"}, {Method: "", Pattern: "", Operation: "UpdateAccess"}, + {Method: "", Pattern: "", Operation: "UpdateAgreement"}, + {Method: "", Pattern: "", Operation: "UpdateCertificate"}, + {Method: "", Pattern: "", Operation: "UpdateConnector"}, {Method: "", Pattern: "", Operation: "UpdateHostKey"}, + {Method: "", Pattern: "", Operation: "UpdateProfile"}, + {Method: "", Pattern: "", Operation: "UpdateServer"}, + {Method: "", Pattern: "", Operation: "UpdateUser"}, + {Method: "POST", Pattern: "/updateWebApp", Operation: "UpdateWebApp"}, + {Method: "POST", Pattern: "/updateWebAppCustomization", Operation: "UpdateWebAppCustomization"}, } // MatchOperation returns the operation name and extracted path parameters for From 00c7b63dbbacaba53af13ec077e2c049df7b532a Mon Sep 17 00:00:00 2001 From: Sung-Kyu Yoo Date: Sun, 9 Aug 2026 12:51:15 +0900 Subject: [PATCH 2/6] feat(fidelity): declare every operation's fidelity tier in a generated manifest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DevCloud serves 104 services three different ways — hand-written providers, the generic CRUD engine, and an honest InvalidAction — but a caller had no way to tell which applied to a given operation. The tiers were defined in prose in docs/crud-engine.md and nowhere else. Generate the manifest at codegen time by joining three mechanical inputs: the Smithy models (the operation universe), the CRUD registry (auto-crud), and each provider's dispatch-case literals (hand-verified), scanned with go/ast and intersected with the model so unrelated switch literals cannot leak in. Precedence is hand-verified > auto-crud > unimplemented, mirroring the runtime, where the engine is reached only when a provider's dispatch falls through. s3, lambda and bedrock route on HTTP method and path rather than an operation name, so they declare their operations explicitly in pathRoutedOps. The universe is model union hand-verified: bedrock serves InvokeModel, which AWS models under bedrock-runtime, and hiding it would understate what DevCloud does. Result: 7,249 operations across 104 services — 4,261 hand-verified, 957 auto-crud, 2,031 unimplemented. Exposed at GET /devcloud/api/fidelity[?service=] (admin API) and via fidelity.Lookup() in Go. TestFidelityManifestCoverage fails the build when an operation carries an undeclared tier, a registered service is missing, a CRUD-registered operation is marked unimplemented, or a service resolves zero hand-verified operations — the signal that a new path-routing provider needs a pathRoutedOps entry. --- changes/unreleased/Added-20260809-120000.yaml | 5 + cmd/codegen/main.go | 44 + cmd/devcloud/fidelity_test.go | 106 + docs/crud-engine.md | 10 + docs/fidelity-manifest.md | 122 + docs/services-matrix.md | 22 +- internal/admin/api.go | 55 + internal/admin/api_test.go | 39 + internal/codegen/gen_fidelity.go | 126 + internal/codegen/scan_handverified.go | 185 + internal/codegen/scan_handverified_test.go | 134 + .../templates/fidelity_manifest.go.tmpl | 67 + internal/generated/fidelity/manifest_gen.go | 7517 +++++++++++++++++ 13 files changed, 8425 insertions(+), 7 deletions(-) create mode 100644 changes/unreleased/Added-20260809-120000.yaml create mode 100644 cmd/devcloud/fidelity_test.go create mode 100644 docs/fidelity-manifest.md create mode 100644 internal/codegen/gen_fidelity.go create mode 100644 internal/codegen/scan_handverified.go create mode 100644 internal/codegen/scan_handverified_test.go create mode 100644 internal/codegen/templates/fidelity_manifest.go.tmpl create mode 100644 internal/generated/fidelity/manifest_gen.go diff --git a/changes/unreleased/Added-20260809-120000.yaml b/changes/unreleased/Added-20260809-120000.yaml new file mode 100644 index 0000000..b15def8 --- /dev/null +++ b/changes/unreleased/Added-20260809-120000.yaml @@ -0,0 +1,5 @@ +kind: Added +body: Per-operation fidelity manifest declaring every operation as hand-verified, auto-crud or unimplemented, exposed at `GET /devcloud/api/fidelity` and enforced by a build-failing coverage test +time: 2026-08-09T12:00:00.000000+09:00 +custom: + Issue: "" diff --git a/cmd/codegen/main.go b/cmd/codegen/main.go index b2aa4d8..62c44c6 100644 --- a/cmd/codegen/main.go +++ b/cmd/codegen/main.go @@ -27,6 +27,7 @@ func main() { services := flag.String("services", "", "Comma-separated list of services to generate (empty = all)") templateDir := flag.String("templates", "./internal/codegen/templates", "Directory containing Go templates") scaffoldDir := flag.String("scaffold-output", "", "Output directory for scaffold files (provider.go, register.go)") + servicesDir := flag.String("services-dir", "./internal/services", "Directory containing hand-written providers, scanned for the fidelity manifest") flag.Parse() entries, err := os.ReadDir(*modelsDir) @@ -45,6 +46,7 @@ func main() { gen := codegen.NewGenerator(*templateDir) var crudServices []codegen.CRUDServiceData + modelOps := make(map[string][]string) for _, entry := range entries { if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".json") { @@ -63,6 +65,15 @@ func main() { continue } + // Recorded before the filters below: the fidelity manifest needs the + // operation universe of every modelled service, including the ones whose + // provider is hand-written and generates no package. + names := make([]string, 0, len(model.Operations)) + for _, op := range model.Operations { + names = append(names, op.Name) + } + modelOps[model.ServiceID] = names + if len(allowedServices) > 0 && !allowedServices[model.ServiceID] { continue } @@ -103,7 +114,40 @@ func main() { fmt.Fprintf(os.Stderr, "Error writing CRUD registry: %v\n", err) os.Exit(1) } + + if err := writeFidelityManifest(gen, *outputDir, *servicesDir, modelOps, crudServices); err != nil { + fmt.Fprintf(os.Stderr, "Error writing fidelity manifest: %v\n", err) + os.Exit(1) + } } fmt.Println("Code generation complete.") } + +// writeFidelityManifest scans the hand-written providers and emits the +// per-operation fidelity manifest. Like the CRUD registry it is only written on +// a full-fleet run, since a filtered run would produce a partial manifest. +func writeFidelityManifest( + gen *codegen.Generator, + outputDir, servicesDir string, + modelOps map[string][]string, + crudServices []codegen.CRUDServiceData, +) error { + handVerified, err := codegen.ScanHandVerified(servicesDir, modelOps) + if err != nil { + return err + } + + content, err := gen.GenerateFidelityManifest( + codegen.BuildFidelityData(modelOps, handVerified, crudServices), + ) + if err != nil { + return err + } + + dir := filepath.Join(outputDir, "fidelity") + if err := os.MkdirAll(dir, 0755); err != nil { + return err + } + return codegen.WriteGo(filepath.Join(dir, "manifest_gen.go"), content) +} diff --git a/cmd/devcloud/fidelity_test.go b/cmd/devcloud/fidelity_test.go new file mode 100644 index 0000000..f90c229 --- /dev/null +++ b/cmd/devcloud/fidelity_test.go @@ -0,0 +1,106 @@ +// SPDX-License-Identifier: Apache-2.0 + +package main + +import ( + "testing" + + "github.com/skyoo2003/devcloud/internal/generated/fidelity" + "github.com/skyoo2003/devcloud/internal/plugin" + "github.com/skyoo2003/devcloud/internal/shared/crud" +) + +// validTiers is the closed set of fidelity tiers. See docs/fidelity-manifest.md. +var validTiers = map[fidelity.Tier]bool{ + fidelity.TierHandVerified: true, + fidelity.TierAutoCRUD: true, + fidelity.TierUnimplemented: true, +} + +// TestFidelityManifestCoverage is the guarantee behind v1.0's fidelity claim: +// every operation DevCloud can serve carries a declared tier. It runs after +// package init, so both the plugin registry and the CRUD registry hold their +// full surface. Regenerate with `make codegen` when it fails. +func TestFidelityManifestCoverage(t *testing.T) { + // Conservative floors, in the spirit of TestServicePluginConformance: a + // mangled generator or a dropped scan collapses these far below the real + // numbers without the fragility of asserting an exact count. + const ( + minServices = 100 + minOperations = 6000 + ) + + if len(fidelity.Services) < minServices { + t.Fatalf("manifest covers %d services, want >= %d", len(fidelity.Services), minServices) + } + + operations := 0 + for id, svc := range fidelity.Services { + if len(svc.Operations) == 0 { + t.Errorf("%s: manifest lists no operations", id) + continue + } + operations += len(svc.Operations) + + handVerified := 0 + for op, tier := range svc.Operations { + if !validTiers[tier] { + t.Errorf("%s/%s: tier %q is not a declared tier", id, op, tier) + } + if tier == fidelity.TierHandVerified { + handVerified++ + } + } + // A service with nothing hand-verified means the scan lost its provider — + // most likely a new path-routing provider that needs a pathRoutedOps + // entry in internal/codegen/scan_handverified.go. + if handVerified == 0 { + t.Errorf("%s: no hand-verified operations; the dispatch scan probably missed this provider", id) + } + } + if operations < minOperations { + t.Errorf("manifest covers %d operations, want >= %d", operations, minOperations) + } +} + +// TestFidelityManifestCoversRegisteredServices keeps the manifest honest about +// the live surface: anything the gateway routes to must be classified. +func TestFidelityManifestCoversRegisteredServices(t *testing.T) { + for _, id := range plugin.DefaultRegistry.RegisteredServices() { + if _, ok := fidelity.Services[id]; !ok { + t.Errorf("%s: registered service is absent from the fidelity manifest", id) + } + } +} + +// TestFidelityManifestCoversCRUDRegistry checks the other direction: every +// operation the CRUD engine would serve is declared, and never as unimplemented +// — that would promise an InvalidAction the runtime does not return. +func TestFidelityManifestCoversCRUDRegistry(t *testing.T) { + for _, id := range plugin.DefaultRegistry.RegisteredServices() { + for op := range crud.RegisteredOps(id) { + tier, ok := fidelity.Lookup(id, op) + if !ok { + t.Errorf("%s/%s: engine-registered operation is absent from the manifest", id, op) + continue + } + if tier == fidelity.TierUnimplemented { + t.Errorf("%s/%s: declared unimplemented but the CRUD engine serves it", id, op) + } + } + } +} + +// TestFidelityLookup pins the accessor's contract: an unknown service and an +// unknown operation are both misses, not a zero-value tier. +func TestFidelityLookup(t *testing.T) { + if tier, ok := fidelity.Lookup("s3", "PutObject"); !ok || tier != fidelity.TierHandVerified { + t.Errorf("Lookup(s3, PutObject) = %q, %v; want hand-verified, true", tier, ok) + } + if _, ok := fidelity.Lookup("nosuchservice", "PutObject"); ok { + t.Error("Lookup on an unknown service reported a hit") + } + if _, ok := fidelity.Lookup("s3", "NoSuchOperation"); ok { + t.Error("Lookup on an unknown operation reported a hit") + } +} diff --git a/docs/crud-engine.md b/docs/crud-engine.md index 769a09b..d5dd6f0 100644 --- a/docs/crud-engine.md +++ b/docs/crud-engine.md @@ -61,3 +61,13 @@ implementation. To promote an operation from `auto-crud` to `hand-verified`, implement it as an explicit `case` in the service provider following existing patterns. + +## Which tier is *this* operation? + +The tiers above are declared per operation by the generated +[fidelity manifest](fidelity-manifest.md). Ask it directly rather than inferring +from this page (requires `admin.enabled: true`): + +```bash +curl -s 'localhost:4747/devcloud/api/fidelity?service=dynamodb' +``` diff --git a/docs/fidelity-manifest.md b/docs/fidelity-manifest.md new file mode 100644 index 0000000..c5aee7f --- /dev/null +++ b/docs/fidelity-manifest.md @@ -0,0 +1,122 @@ +# Fidelity Manifest + +DevCloud serves 104 AWS services, but not every operation is served the same +way. The **fidelity manifest** answers, per operation, *how much you can trust +this call* — so you never have to guess whether a green response means DevCloud +implemented the operation or merely made something plausible up. + +It is generated, never hand-written: `make codegen` derives it from the in-tree +Smithy models, the CRUD registry, and each provider's dispatch code. + +## Tiers + +| Tier | Meaning | Trust it for | +|------|---------|--------------| +| `hand-verified` | The service's provider implements the operation explicitly. | Behaviour, not just shape. Covered by the boto3 compatibility suite where tests exist. | +| `auto-crud` | Served by the [generic CRUD engine](crud-engine.md) with plausible, store-backed responses. No validation, no business logic, no cross-resource integrity. | Wiring your SDK calls and round-tripping create → get → list → delete. Nothing else. | +| `unimplemented` | Returns an honest `InvalidAction` (HTTP 400). | Knowing early that DevCloud will not serve this call. | + +`hand-verified` always wins: the CRUD engine is reached only when a provider's +dispatch falls through, so a hand-written implementation is never shadowed. + +## Current coverage + +| Tier | Operations | +|------|-----------:| +| `hand-verified` | 4,261 | +| `auto-crud` | 957 | +| `unimplemented` | 2,031 | +| **Total** | **7,249** across 104 services | + +Examples: + +| Service | hand-verified | auto-crud | unimplemented | +|---------|--------------:|----------:|--------------:| +| sqs | 23 | 0 | 0 | +| ecs | 51 | 22 | 3 | +| s3 | 37 | 0 | 70 | +| lambda | 25 | 0 | 60 | +| dynamodb | 20 | 28 | 9 | +| bedrock | 18 | 0 | 84 | + +_Regenerate with `make codegen`; these numbers change with the surface._ + +## Reading it + +**At runtime** — the admin API, which is off by default. Enable it in your +`devcloud.yaml` ([configuration](configuration.md)): + +```yaml +admin: + enabled: true +``` + +```bash +# Tier counts for every service +curl -s localhost:4747/devcloud/api/fidelity + +# Per-operation tiers for one service +curl -s 'localhost:4747/devcloud/api/fidelity?service=s3' +``` + +```json +{ + "s3": { + "modelBacked": true, + "counts": {"hand-verified": 37, "unimplemented": 70}, + "operations": {"PutObject": "hand-verified", "SelectObjectContent": "unimplemented"} + } +} +``` + +The unfiltered response omits `operations` — the full manifest is ~7,000 entries. + +**In Go** — [`internal/generated/fidelity`](../internal/generated/fidelity/manifest_gen.go): + +```go +tier, ok := fidelity.Lookup("s3", "PutObject") // TierHandVerified, true +``` + +`ok` is false for a service or operation DevCloud does not know at all, which is +not the same as `unimplemented`: an unknown service is not served, whereas an +unimplemented operation is served an `InvalidAction` error. + +## Limits + +- **11 services have no in-tree Smithy model** (`account`, `cloudcontrol`, + `codeconnections`, `dms`, `identitystore`, `mediaconvert`, `pipes`, `s3tables`, + `scheduler`, `serverlessrepo`, `verifiedpermissions`). Their `modelBacked` flag + is `false` and the manifest lists only what DevCloud serves — the + unimplemented tail is not enumerable without a model. +- **`hand-verified` means "the provider dispatches this operation"**, not "this + operation matches AWS byte for byte". Depth varies; the boto3 compatibility + suite (`make test-compat`) is the stronger signal for the services it covers. +- The manifest describes the **whole registered surface**, not the services + enabled in your config. + +## How it is derived + +| Input | Source | Contributes | +|-------|--------|-------------| +| Operation universe | `smithy-models/*.json`, parsed including resource-attached operations | every known operation | +| `auto-crud` | the generated [CRUD registry](crud-engine.md) | engine-servable operations | +| `hand-verified` | dispatch-case literals scanned from `internal/services/*`, intersected with the model | implemented operations | + +Three providers (`s3`, `lambda`, `bedrock`) route on HTTP method and path rather +than an operation name, so they declare their operations explicitly in +`pathRoutedOps` (`internal/codegen/scan_handverified.go`). + +The universe is *model ∪ hand-verified*: a provider may serve an operation the +model does not declare — `bedrock` serves `InvokeModel`, which AWS models under +bedrock-runtime — and hiding it would understate what DevCloud does. + +## Guarantees + +`TestFidelityManifestCoverage` (`cmd/devcloud/fidelity_test.go`) fails the build +when: + +- any operation carries a tier outside the closed set, +- any registered service is missing from the manifest, +- any CRUD-registered operation is missing or marked `unimplemented`, +- any service resolves zero `hand-verified` operations — the signal that a new + path-routing provider needs a `pathRoutedOps` entry. diff --git a/docs/services-matrix.md b/docs/services-matrix.md index 4be3ed9..45b337a 100644 --- a/docs/services-matrix.md +++ b/docs/services-matrix.md @@ -1,6 +1,6 @@ # DevCloud Services Matrix -**Total**: 104 services (run `make stats`). The boto3 compatibility suite — 729 tests in `tests/compatibility/` — passes in CI. +**Total**: 104 services (run `make stats`). The boto3 compatibility suite — 764 tests in `tests/compatibility/` — passes in CI. > To refresh these numbers, run `make stats` (service/handler counts) and `make test-compat` (compatibility suite), then update the line above. Note: `make stats`' "Operations" counts dispatch cases (a service carrying both Query and JSON protocols counts each), not distinct AWS operations. @@ -61,7 +61,7 @@ DevCloud is a Go-based local cloud environment with AWS API compatibility. This ## boto3 compatibility -- Tests: `tests/compatibility/` (729 tests) +- Tests: `tests/compatibility/` (764 tests) - Status: the full suite passes in CI (`.github/workflows/compat.yml`); any failing test fails the build - Run: `make test-compat` @@ -75,14 +75,22 @@ AWS error rather than a false success, so an SDK always gets a truthful response ## Operation coverage & the CRUD fallback engine Hand-written providers implement each service's common operations. For the long -tail of standard CRUD-shaped operations (~2,200 across 46 JSON-protocol -services), a generic engine can serve plausible, store-backed responses so SDK -calls round-trip. This coverage is **plausible, not faithful** — no validation or -business logic — and is opt-in per service. See -[crud-engine.md](crud-engine.md) for the fidelity tiers, wired services, and +tail of standard CRUD-shaped operations across 46 JSON-protocol services, a +generic engine can serve plausible, store-backed responses so SDK calls +round-trip. This coverage is **plausible, not faithful** — no validation or +business logic. See [crud-engine.md](crud-engine.md) for the wired services and limits. Operations that are neither hand-written nor CRUD-classifiable return an honest `InvalidAction` error, never a fabricated success. +Every operation's tier is declared in the generated +[fidelity manifest](fidelity-manifest.md) — 4,261 `hand-verified`, 957 +`auto-crud`, 2,031 `unimplemented` across 7,249 operations. Query it per service +(requires `admin.enabled: true`): + +```bash +curl -s 'localhost:4747/devcloud/api/fidelity?service=s3' +``` + ## Supported protocols - **JSON 1.0** (`application/x-amz-json-1.0`): DynamoDB, DynamoDB Streams, Kinesis diff --git a/internal/admin/api.go b/internal/admin/api.go index 9ab31dc..614fdff 100644 --- a/internal/admin/api.go +++ b/internal/admin/api.go @@ -9,6 +9,7 @@ import ( "strconv" "strings" + "github.com/skyoo2003/devcloud/internal/generated/fidelity" "github.com/skyoo2003/devcloud/internal/plugin" ) @@ -33,10 +34,64 @@ func (d *API) Handler() http.Handler { mux.HandleFunc("/devcloud/api/services", d.handleServices) mux.HandleFunc("/devcloud/api/services/", d.handleServiceResources) mux.HandleFunc("/devcloud/api/logs", d.handleLogs) + mux.HandleFunc("/devcloud/api/fidelity", d.handleFidelity) return mux } +// fidelityService is one service's entry in GET /devcloud/api/fidelity. +type fidelityService struct { + ModelBacked bool `json:"modelBacked"` + Counts map[string]int `json:"counts"` + Operations map[string]string `json:"operations,omitempty"` +} + +// handleFidelity handles GET /devcloud/api/fidelity[?service=s3]. +// +// Without a service filter it returns per-service tier counts only: the full +// manifest is ~7,000 operations, too much to push at a caller whose usual +// question is "how much of this service can I trust?". Naming a service adds +// that service's per-operation tiers. +func (d *API) handleFidelity(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "method not allowed", http.StatusMethodNotAllowed) + return + } + + if id := r.URL.Query().Get("service"); id != "" { + svc, ok := fidelity.Services[id] + if !ok { + writeJSON(w, http.StatusNotFound, map[string]string{"error": "unknown service: " + id}) + return + } + writeJSON(w, http.StatusOK, map[string]fidelityService{id: fidelitySummary(svc, true)}) + return + } + + out := make(map[string]fidelityService, len(fidelity.Services)) + for id, svc := range fidelity.Services { + out[id] = fidelitySummary(svc, false) + } + writeJSON(w, http.StatusOK, out) +} + +func fidelitySummary(svc fidelity.Service, withOperations bool) fidelityService { + entry := fidelityService{ + ModelBacked: svc.ModelBacked, + Counts: map[string]int{}, + } + if withOperations { + entry.Operations = make(map[string]string, len(svc.Operations)) + } + for op, tier := range svc.Operations { + entry.Counts[string(tier)]++ + if withOperations { + entry.Operations[op] = string(tier) + } + } + return entry +} + // writeJSON serialises v as JSON and writes it to w with the appropriate // Content-Type header. func writeJSON(w http.ResponseWriter, status int, v any) { diff --git a/internal/admin/api_test.go b/internal/admin/api_test.go index 0ebd2ea..c41bafa 100644 --- a/internal/admin/api_test.go +++ b/internal/admin/api_test.go @@ -82,6 +82,45 @@ func TestAPI_Services(t *testing.T) { assert.Equal(t, 2, svc.ResourceCount) } +// TestAPI_Fidelity covers both shapes of the endpoint: the unfiltered summary +// carries counts but no operation list, and naming a service adds its tiers. +func TestAPI_Fidelity(t *testing.T) { + api := NewAPI(newTestRegistry(&mockServicePlugin{id: "s3", name: "Amazon S3"}), NewLogCollector(10)) + + req := httptest.NewRequest(http.MethodGet, "/devcloud/api/fidelity", nil) + w := httptest.NewRecorder() + api.Handler().ServeHTTP(w, req) + + assert.Equal(t, http.StatusOK, w.Code) + assert.Equal(t, "application/json", w.Header().Get("Content-Type")) + + var summary map[string]fidelityService + require.NoError(t, json.NewDecoder(w.Body).Decode(&summary)) + require.Contains(t, summary, "s3") + assert.True(t, summary["s3"].ModelBacked) + assert.Greater(t, summary["s3"].Counts["hand-verified"], 0) + assert.Empty(t, summary["s3"].Operations, "the summary must not carry every operation") + + req = httptest.NewRequest(http.MethodGet, "/devcloud/api/fidelity?service=s3", nil) + w = httptest.NewRecorder() + api.Handler().ServeHTTP(w, req) + + assert.Equal(t, http.StatusOK, w.Code) + var detail map[string]fidelityService + require.NoError(t, json.NewDecoder(w.Body).Decode(&detail)) + assert.Equal(t, "hand-verified", detail["s3"].Operations["PutObject"]) +} + +func TestAPI_FidelityUnknownService(t *testing.T) { + api := NewAPI(newTestRegistry(&mockServicePlugin{id: "s3", name: "Amazon S3"}), NewLogCollector(10)) + + req := httptest.NewRequest(http.MethodGet, "/devcloud/api/fidelity?service=nosuchservice", nil) + w := httptest.NewRecorder() + api.Handler().ServeHTTP(w, req) + + assert.Equal(t, http.StatusNotFound, w.Code) +} + // TestAPI_Logs adds log entries to the collector and verifies the // /devcloud/api/logs endpoint returns them newest-first. func TestAPI_Logs(t *testing.T) { diff --git a/internal/codegen/gen_fidelity.go b/internal/codegen/gen_fidelity.go new file mode 100644 index 0000000..3054c4a --- /dev/null +++ b/internal/codegen/gen_fidelity.go @@ -0,0 +1,126 @@ +// SPDX-License-Identifier: Apache-2.0 + +// internal/codegen/gen_fidelity.go +package codegen + +import ( + "fmt" + "go/format" + "sort" +) + +// FidelityData drives fidelity_manifest.go.tmpl: every service DevCloud +// registers, with each of its operations labelled by tier. +type FidelityData struct { + Services []FidelityServiceData +} + +// FidelityServiceData is one service's classified operations. +type FidelityServiceData struct { + ServiceID string + ModelBacked bool + Ops []FidelityOpData +} + +// FidelityOpData is one operation and the template constant naming its tier. +type FidelityOpData struct { + Name string + // TierConst is the suffix of the generated Tier constant: HandVerified, + // AutoCRUD or Unimplemented. + TierConst string +} + +// BuildFidelityData joins the three inputs that decide an operation's tier. +// +// The universe of a service is its model's operations *union* what the provider +// actually serves: a provider may implement an operation the in-tree model does +// not declare (bedrock serves InvokeModel, which AWS models under +// bedrock-runtime), and dropping it would hide a served operation. +// +// Precedence is hand-verified > auto-crud > unimplemented, mirroring the runtime: +// the CRUD engine is reached only when a provider's dispatch falls through, so a +// hand-written implementation always wins. See docs/crud-engine.md. +func BuildFidelityData( + modelOps map[string][]string, + handVerified map[string][]string, + autoCRUD []CRUDServiceData, +) FidelityData { + crudOps := make(map[string]map[string]bool, len(autoCRUD)) + for _, svc := range autoCRUD { + ops := make(map[string]bool, len(svc.Ops)) + for _, op := range svc.Ops { + ops[op.Op] = true + } + crudOps[svc.ServiceID] = ops + } + + data := FidelityData{} + for _, serviceID := range sortedKeys(handVerified) { + hand := make(map[string]bool, len(handVerified[serviceID])) + universe := make(map[string]bool) + for _, op := range handVerified[serviceID] { + hand[op] = true + universe[op] = true + } + for _, op := range modelOps[serviceID] { + universe[op] = true + } + for op := range crudOps[serviceID] { + universe[op] = true + } + + names := make([]string, 0, len(universe)) + for op := range universe { + names = append(names, op) + } + sort.Strings(names) + + ops := make([]FidelityOpData, 0, len(names)) + for _, name := range names { + ops = append(ops, FidelityOpData{ + Name: name, + TierConst: tierFor(name, hand, crudOps[serviceID]), + }) + } + + data.Services = append(data.Services, FidelityServiceData{ + ServiceID: serviceID, + ModelBacked: len(modelOps[serviceID]) > 0, + Ops: ops, + }) + } + return data +} + +func tierFor(op string, hand, crud map[string]bool) string { + switch { + case hand[op]: + return "HandVerified" + case crud[op]: + return "AutoCRUD" + default: + return "Unimplemented" + } +} + +func sortedKeys(m map[string][]string) []string { + keys := make([]string, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + sort.Strings(keys) + return keys +} + +// GenerateFidelityManifest renders the single aggregate manifest file. +func (g *Generator) GenerateFidelityManifest(data FidelityData) (string, error) { + rendered, err := g.renderTemplate("fidelity_manifest.go.tmpl", data) + if err != nil { + return "", err + } + formatted, err := format.Source([]byte(rendered)) + if err != nil { + return "", fmt.Errorf("gofmt fidelity_manifest.go: %w", err) + } + return string(formatted), nil +} diff --git a/internal/codegen/scan_handverified.go b/internal/codegen/scan_handverified.go new file mode 100644 index 0000000..93d7a8f --- /dev/null +++ b/internal/codegen/scan_handverified.go @@ -0,0 +1,185 @@ +// SPDX-License-Identifier: Apache-2.0 + +// internal/codegen/scan_handverified.go +package codegen + +import ( + "fmt" + "go/ast" + "go/parser" + "go/token" + "os" + "path/filepath" + "regexp" + "sort" + "strconv" + "strings" +) + +// opNamePattern is the shape of an AWS operation name: PascalCase, letters and +// digits only. It is a pre-filter, not the decision — for a service with a +// Smithy model the scan intersects with the model's operations, which discards +// any string that merely looks like an operation name. +var opNamePattern = regexp.MustCompile(`^[A-Z][A-Za-z0-9]{3,}$`) + +// pathRoutedOps lists the operations of providers that route on HTTP method and +// path instead of an operation name, so no operation-name literal appears in +// their source for the scan to find. Keep in sync by hand when these providers +// gain operations — the fidelity manifest test fails loudly if a fourth provider +// starts routing this way, since it would resolve to an empty operation set. +// +// ponytail: hand-maintained for three services; if the list keeps growing, +// derive the mapping from the generated OperationRoutes table instead. +var pathRoutedOps = map[string][]string{ + "s3": { + "AbortMultipartUpload", "CompleteMultipartUpload", "CopyObject", "CreateBucket", + "CreateMultipartUpload", "DeleteBucket", "DeleteBucketCors", "DeleteBucketPolicy", + "DeleteBucketTagging", "DeleteObject", "DeleteObjectTagging", "DeleteObjects", + "GetBucketAcl", "GetBucketCors", "GetBucketLocation", + "GetBucketNotificationConfiguration", "GetBucketPolicy", "GetBucketTagging", + "GetBucketVersioning", "GetObject", "GetObjectTagging", "HeadBucket", "HeadObject", + "ListBuckets", "ListMultipartUploads", "ListObjects", "ListObjectsV2", "ListParts", + "PutBucketAcl", "PutBucketCors", "PutBucketNotificationConfiguration", + "PutBucketPolicy", "PutBucketTagging", "PutBucketVersioning", "PutObject", + "PutObjectTagging", "UploadPart", + }, + "lambda": { + "AddPermission", "CreateAlias", "CreateEventSourceMapping", "CreateFunction", + "DeleteAlias", "DeleteEventSourceMapping", "DeleteFunction", "GetAlias", + "GetEventSourceMapping", "GetFunction", "GetPolicy", "Invoke", "ListAliases", + "ListEventSourceMappings", "ListFunctions", "ListTags", "ListVersionsByFunction", + "PublishVersion", "RemovePermission", "TagResource", "UntagResource", + "UpdateAlias", "UpdateEventSourceMapping", "UpdateFunctionCode", + "UpdateFunctionConfiguration", + }, + // InvokeModel belongs to bedrock-runtime in AWS but is served by this + // provider, so it is hand-verified even though bedrock.json does not declare + // it. The manifest's universe is model ∪ hand-verified for exactly this case. + "bedrock": { + "CreateGuardrail", "CreateModelCustomizationJob", "DeleteCustomModel", + "DeleteGuardrail", "GetCustomModel", "GetFoundationModel", "GetGuardrail", + "GetModelCustomizationJob", "InvokeModel", "ListCustomModels", + "ListFoundationModels", "ListGuardrails", "ListModelCustomizationJobs", + "ListTagsForResource", "StopModelCustomizationJob", "TagResource", + "UntagResource", "UpdateGuardrail", + }, +} + +// ScanHandVerified returns, per registered service ID, the operation names that +// service's provider handles by hand. The scan collects the string literals of +// every case clause in a service package, then keeps only those that name an +// operation in modelOps[serviceID]; a service with no model keeps every literal +// that looks like an operation name. +// +// Intersecting with the model is what makes a crude literal scan safe: unrelated +// switches (protocol constants, expression tokens) contribute strings that no +// model declares, and a directory registering two services (iam also registers +// sts) splits correctly because each model claims only its own operations. +func ScanHandVerified(servicesDir string, modelOps map[string][]string) (map[string][]string, error) { + entries, err := os.ReadDir(servicesDir) + if err != nil { + return nil, fmt.Errorf("read services dir: %w", err) + } + + result := make(map[string][]string) + for _, entry := range entries { + if !entry.IsDir() { + continue + } + dir := filepath.Join(servicesDir, entry.Name()) + ids, literals, err := scanServiceDir(dir) + if err != nil { + return nil, err + } + for _, id := range ids { + result[id] = selectOps(id, literals, modelOps[id]) + } + } + return result, nil +} + +// selectOps narrows a package's case literals to the operations of one service. +func selectOps(serviceID string, literals map[string]bool, modelOperations []string) []string { + if declared, ok := pathRoutedOps[serviceID]; ok { + return append([]string(nil), declared...) + } + + var ops []string + if len(modelOperations) > 0 { + for _, op := range modelOperations { + if literals[op] { + ops = append(ops, op) + } + } + } else { + for lit := range literals { + ops = append(ops, lit) + } + } + sort.Strings(ops) + return ops +} + +// scanServiceDir returns the service IDs a package registers and every +// operation-shaped string literal used as a switch case in it. +func scanServiceDir(dir string) (ids []string, literals map[string]bool, err error) { + entries, err := os.ReadDir(dir) + if err != nil { + return nil, nil, fmt.Errorf("read %s: %w", dir, err) + } + + fset := token.NewFileSet() + literals = make(map[string]bool) + seenID := make(map[string]bool) + + for _, entry := range entries { + name := entry.Name() + if entry.IsDir() || !strings.HasSuffix(name, ".go") || strings.HasSuffix(name, "_test.go") { + continue + } + file, err := parser.ParseFile(fset, filepath.Join(dir, name), nil, 0) + if err != nil { + return nil, nil, fmt.Errorf("parse %s: %w", filepath.Join(dir, name), err) + } + + ast.Inspect(file, func(n ast.Node) bool { + switch node := n.(type) { + case *ast.CallExpr: + if id, ok := registeredServiceID(node); ok && !seenID[id] { + seenID[id] = true + ids = append(ids, id) + } + case *ast.CaseClause: + for _, expr := range node.List { + if lit, ok := stringLiteral(expr); ok && opNamePattern.MatchString(lit) { + literals[lit] = true + } + } + } + return true + }) + } + sort.Strings(ids) + return ids, literals, nil +} + +// registeredServiceID extracts "sqs" from plugin.DefaultRegistry.Register("sqs", …). +func registeredServiceID(call *ast.CallExpr) (string, bool) { + sel, ok := call.Fun.(*ast.SelectorExpr) + if !ok || sel.Sel.Name != "Register" || len(call.Args) == 0 { + return "", false + } + return stringLiteral(call.Args[0]) +} + +func stringLiteral(expr ast.Expr) (string, bool) { + lit, ok := expr.(*ast.BasicLit) + if !ok || lit.Kind != token.STRING { + return "", false + } + s, err := strconv.Unquote(lit.Value) + if err != nil { + return "", false + } + return s, true +} diff --git a/internal/codegen/scan_handverified_test.go b/internal/codegen/scan_handverified_test.go new file mode 100644 index 0000000..f168a01 --- /dev/null +++ b/internal/codegen/scan_handverified_test.go @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: Apache-2.0 + +// internal/codegen/scan_handverified_test.go +package codegen + +import ( + "encoding/json" + "os" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +// modelOperationsForTest reads the real Smithy models so the scan is exercised +// against the same input the generator uses. +func modelOperationsForTest(t *testing.T) map[string][]string { + t.Helper() + entries, err := os.ReadDir("../../smithy-models") + require.NoError(t, err) + + ops := make(map[string][]string) + for _, e := range entries { + if e.IsDir() || filepath.Ext(e.Name()) != ".json" { + continue + } + data, err := os.ReadFile(filepath.Join("../../smithy-models", e.Name())) + require.NoError(t, err) + model, err := ParseSmithyJSON(data) + if err != nil { + continue + } + names := make([]string, 0, len(model.Operations)) + for _, op := range model.Operations { + names = append(names, op.Name) + } + ops[model.ServiceID] = names + } + return ops +} + +func TestScanHandVerified(t *testing.T) { + got, err := ScanHandVerified("../services", modelOperationsForTest(t)) + require.NoError(t, err) + + // Every registered service resolves; the count tracks internal/services. + assert.GreaterOrEqual(t, len(got), 100, "expected the full service fleet") + + // Query and JSON providers resolve from their dispatch literals. + assert.Contains(t, got["acm"], "DescribeCertificate") + assert.Contains(t, got["sqs"], "SendMessage") + assert.Contains(t, got["dynamodb"], "PutItem") + + // A directory registering two services splits by model: sts lives in + // internal/services/iam, and neither service claims the other's operations. + assert.Contains(t, got["sts"], "AssumeRole") + assert.NotContains(t, got["iam"], "AssumeRole") + assert.Contains(t, got["iam"], "CreateUser") + + // Path-routed providers come from the override. + assert.Contains(t, got["s3"], "PutObject") + assert.Contains(t, got["bedrock"], "InvokeModel") + + // No service is silently empty — an empty set means the scan lost a provider. + for id, ops := range got { + assert.NotEmpty(t, ops, "%s resolved no hand-verified operations", id) + } +} + +func TestScanHandVerifiedIgnoresNonOperationLiterals(t *testing.T) { + dir := t.TempDir() + pkg := filepath.Join(dir, "demo") + require.NoError(t, os.MkdirAll(pkg, 0o755)) + + src := `package demo + +func init() { plugin.DefaultRegistry.Register("demo", nil) } + +func (p *Provider) HandleRequest(op string) string { + switch op { + case "GetWidget": + return "get" + case "ListWidgets": + return "list" + } + switch op { + case "attribute_exists", "GET", "NotAnOperation": + return "noise" + } + return "" +} +` + require.NoError(t, os.WriteFile(filepath.Join(pkg, "provider.go"), []byte(src), 0o600)) + + got, err := ScanHandVerified(dir, map[string][]string{"demo": {"GetWidget", "ListWidgets"}}) + require.NoError(t, err) + assert.Equal(t, []string{"GetWidget", "ListWidgets"}, got["demo"], + "literals the model does not declare must be dropped") +} + +// TestPathRoutedOverridesAreReal guards the hand-maintained override: every +// declared operation must exist in the service's model, except the documented +// bedrock-runtime borrow. +func TestPathRoutedOverridesAreReal(t *testing.T) { + models := modelOperationsForTest(t) + known := map[string]bool{"InvokeModel": true} // bedrock-runtime, see pathRoutedOps + + for id, declared := range pathRoutedOps { + modelSet := make(map[string]bool, len(models[id])) + for _, op := range models[id] { + modelSet[op] = true + } + for _, op := range declared { + if known[op] { + continue + } + assert.True(t, modelSet[op], "%s: %q is not an operation in the model", id, op) + } + } +} + +// TestScanHandVerifiedIsDeterministic keeps generated output stable across runs. +func TestScanHandVerifiedIsDeterministic(t *testing.T) { + models := modelOperationsForTest(t) + first, err := ScanHandVerified("../services", models) + require.NoError(t, err) + second, err := ScanHandVerified("../services", models) + require.NoError(t, err) + + a, _ := json.Marshal(first) + b, _ := json.Marshal(second) + assert.JSONEq(t, string(a), string(b)) +} diff --git a/internal/codegen/templates/fidelity_manifest.go.tmpl b/internal/codegen/templates/fidelity_manifest.go.tmpl new file mode 100644 index 0000000..8ca4cbb --- /dev/null +++ b/internal/codegen/templates/fidelity_manifest.go.tmpl @@ -0,0 +1,67 @@ +// Code generated by devcloud codegen. DO NOT EDIT. +// SPDX-License-Identifier: Apache-2.0 + +// Package fidelity declares, for every operation DevCloud knows about, how much +// of AWS's behaviour it actually reproduces. It is the machine-readable answer +// to "can I trust this call?" — see docs/fidelity-manifest.md. +// +// The manifest is derived, never hand-written: the operation universe comes from +// the in-tree Smithy models, auto-crud from the generated CRUD registry, and +// hand-verified from the dispatch literals of each provider. +package fidelity + +// Tier is how faithfully an operation is served. +type Tier string + +const ( + // TierHandVerified is implemented by the service's provider. Highest fidelity. + TierHandVerified Tier = "hand-verified" + // TierAutoCRUD is served by the generic CRUD engine with plausible, + // store-backed responses: no validation, no business logic. + TierAutoCRUD Tier = "auto-crud" + // TierUnimplemented returns an honest InvalidAction error. + TierUnimplemented Tier = "unimplemented" +) + +// Service is one service's operations and their tiers. +type Service struct { + // ModelBacked reports whether an in-tree Smithy model enumerates this + // service's API. When false the unimplemented tail is not knowable, so the + // manifest lists only what DevCloud serves. + ModelBacked bool + Operations map[string]Tier +} + +// Services maps a registered service ID to its operations. +var Services = map[string]Service{ +{{- range .Services }} + "{{ .ServiceID }}": {ModelBacked: {{ .ModelBacked }}, Operations: map[string]Tier{ +{{- range .Ops }} + "{{ .Name }}": Tier{{ .TierConst }}, +{{- end }} + }}, +{{- end }} +} + +// Lookup returns the tier of one operation. The second result is false when the +// service or operation is unknown to DevCloud — which is not the same as +// unimplemented, since an unknown service is not served at all. +func Lookup(service, op string) (Tier, bool) { + svc, ok := Services[service] + if !ok { + return "", false + } + tier, ok := svc.Operations[op] + return tier, ok +} + +// Counts returns the number of operations per tier across every service. +func Counts() map[Tier]int { + counts := make(map[Tier]int, 3) + for _, svc := range Services { + for _, tier := range svc.Operations { + counts[tier]++ + } + } + return counts +} diff --git a/internal/generated/fidelity/manifest_gen.go b/internal/generated/fidelity/manifest_gen.go new file mode 100644 index 0000000..0b8cfc7 --- /dev/null +++ b/internal/generated/fidelity/manifest_gen.go @@ -0,0 +1,7517 @@ +// Code generated by devcloud codegen. DO NOT EDIT. +// SPDX-License-Identifier: Apache-2.0 + +// Package fidelity declares, for every operation DevCloud knows about, how much +// of AWS's behaviour it actually reproduces. It is the machine-readable answer +// to "can I trust this call?" — see docs/fidelity-manifest.md. +// +// The manifest is derived, never hand-written: the operation universe comes from +// the in-tree Smithy models, auto-crud from the generated CRUD registry, and +// hand-verified from the dispatch literals of each provider. +package fidelity + +// Tier is how faithfully an operation is served. +type Tier string + +const ( + // TierHandVerified is implemented by the service's provider. Highest fidelity. + TierHandVerified Tier = "hand-verified" + // TierAutoCRUD is served by the generic CRUD engine with plausible, + // store-backed responses: no validation, no business logic. + TierAutoCRUD Tier = "auto-crud" + // TierUnimplemented returns an honest InvalidAction error. + TierUnimplemented Tier = "unimplemented" +) + +// Service is one service's operations and their tiers. +type Service struct { + // ModelBacked reports whether an in-tree Smithy model enumerates this + // service's API. When false the unimplemented tail is not knowable, so the + // manifest lists only what DevCloud serves. + ModelBacked bool + Operations map[string]Tier +} + +// Services maps a registered service ID to its operations. +var Services = map[string]Service{ + "account": {ModelBacked: false, Operations: map[string]Tier{ + "AcceptPrimaryEmailUpdate": TierHandVerified, + "DeleteAlternateContact": TierHandVerified, + "DeleteContactInformation": TierHandVerified, + "DisableRegion": TierHandVerified, + "EnableRegion": TierHandVerified, + "GetAccount": TierHandVerified, + "GetAlternateContact": TierHandVerified, + "GetContactInformation": TierHandVerified, + "GetPrimaryEmail": TierHandVerified, + "GetRegionOptStatus": TierHandVerified, + "ListAccountManagedUsers": TierHandVerified, + "ListRegions": TierHandVerified, + "PutAlternateContact": TierHandVerified, + "PutContactInformation": TierHandVerified, + "StartPrimaryEmailUpdate": TierHandVerified, + }}, + "acm": {ModelBacked: true, Operations: map[string]Tier{ + "AddTagsToCertificate": TierHandVerified, + "DeleteCertificate": TierHandVerified, + "DescribeCertificate": TierHandVerified, + "ExportCertificate": TierHandVerified, + "GetAccountConfiguration": TierHandVerified, + "GetCertificate": TierHandVerified, + "ImportCertificate": TierHandVerified, + "ListCertificates": TierHandVerified, + "ListTagsForCertificate": TierHandVerified, + "PutAccountConfiguration": TierHandVerified, + "RemoveTagsFromCertificate": TierHandVerified, + "RenewCertificate": TierHandVerified, + "RequestCertificate": TierHandVerified, + "ResendValidationEmail": TierHandVerified, + "RevokeCertificate": TierHandVerified, + "SearchCertificates": TierUnimplemented, + "UpdateCertificateOptions": TierHandVerified, + }}, + "acmpca": {ModelBacked: true, Operations: map[string]Tier{ + "CreateCertificateAuthority": TierHandVerified, + "CreateCertificateAuthorityAuditReport": TierHandVerified, + "CreatePermission": TierHandVerified, + "DeleteCertificateAuthority": TierHandVerified, + "DeletePermission": TierHandVerified, + "DeletePolicy": TierHandVerified, + "DescribeCertificateAuthority": TierHandVerified, + "DescribeCertificateAuthorityAuditReport": TierHandVerified, + "GetCertificate": TierHandVerified, + "GetCertificateAuthorityCertificate": TierHandVerified, + "GetCertificateAuthorityCsr": TierHandVerified, + "GetPolicy": TierHandVerified, + "ImportCertificateAuthorityCertificate": TierHandVerified, + "IssueCertificate": TierHandVerified, + "ListCertificateAuthorities": TierHandVerified, + "ListPermissions": TierHandVerified, + "ListTags": TierHandVerified, + "PutPolicy": TierHandVerified, + "RestoreCertificateAuthority": TierHandVerified, + "RevokeCertificate": TierHandVerified, + "TagCertificateAuthority": TierHandVerified, + "UntagCertificateAuthority": TierHandVerified, + "UpdateCertificateAuthority": TierHandVerified, + }}, + "amplify": {ModelBacked: true, Operations: map[string]Tier{ + "CreateApp": TierHandVerified, + "CreateBackendEnvironment": TierHandVerified, + "CreateBranch": TierHandVerified, + "CreateDeployment": TierHandVerified, + "CreateDomainAssociation": TierHandVerified, + "CreateWebhook": TierHandVerified, + "DeleteApp": TierHandVerified, + "DeleteBackendEnvironment": TierHandVerified, + "DeleteBranch": TierHandVerified, + "DeleteDomainAssociation": TierHandVerified, + "DeleteJob": TierHandVerified, + "DeleteWebhook": TierHandVerified, + "GenerateAccessLogs": TierHandVerified, + "GetApp": TierHandVerified, + "GetArtifactUrl": TierHandVerified, + "GetBackendEnvironment": TierHandVerified, + "GetBranch": TierHandVerified, + "GetDomainAssociation": TierHandVerified, + "GetJob": TierHandVerified, + "GetWebhook": TierHandVerified, + "ListApps": TierHandVerified, + "ListArtifacts": TierHandVerified, + "ListBackendEnvironments": TierHandVerified, + "ListBranches": TierHandVerified, + "ListDomainAssociations": TierHandVerified, + "ListJobs": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListWebhooks": TierHandVerified, + "StartDeployment": TierHandVerified, + "StartJob": TierHandVerified, + "StopJob": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateApp": TierHandVerified, + "UpdateBranch": TierHandVerified, + "UpdateDomainAssociation": TierHandVerified, + "UpdateWebhook": TierHandVerified, + }}, + "apigatewayv2": {ModelBacked: true, Operations: map[string]Tier{ + "CreateApi": TierHandVerified, + "CreateApiMapping": TierHandVerified, + "CreateAuthorizer": TierHandVerified, + "CreateDeployment": TierHandVerified, + "CreateDomainName": TierHandVerified, + "CreateIntegration": TierHandVerified, + "CreateIntegrationResponse": TierHandVerified, + "CreateModel": TierHandVerified, + "CreatePortal": TierUnimplemented, + "CreatePortalProduct": TierUnimplemented, + "CreateProductPage": TierUnimplemented, + "CreateProductRestEndpointPage": TierUnimplemented, + "CreateRoute": TierHandVerified, + "CreateRouteResponse": TierHandVerified, + "CreateRoutingRule": TierUnimplemented, + "CreateStage": TierHandVerified, + "CreateVpcLink": TierHandVerified, + "DeleteAccessLogSettings": TierHandVerified, + "DeleteApi": TierHandVerified, + "DeleteApiMapping": TierHandVerified, + "DeleteAuthorizer": TierHandVerified, + "DeleteCorsConfiguration": TierHandVerified, + "DeleteDeployment": TierHandVerified, + "DeleteDomainName": TierHandVerified, + "DeleteIntegration": TierHandVerified, + "DeleteIntegrationResponse": TierHandVerified, + "DeleteModel": TierHandVerified, + "DeletePortal": TierUnimplemented, + "DeletePortalProduct": TierUnimplemented, + "DeletePortalProductSharingPolicy": TierUnimplemented, + "DeleteProductPage": TierUnimplemented, + "DeleteProductRestEndpointPage": TierUnimplemented, + "DeleteRoute": TierHandVerified, + "DeleteRouteRequestParameter": TierHandVerified, + "DeleteRouteResponse": TierHandVerified, + "DeleteRouteSettings": TierHandVerified, + "DeleteRoutingRule": TierUnimplemented, + "DeleteStage": TierHandVerified, + "DeleteVpcLink": TierHandVerified, + "DisablePortal": TierUnimplemented, + "ExportApi": TierHandVerified, + "GetApi": TierHandVerified, + "GetApiMapping": TierHandVerified, + "GetApiMappings": TierHandVerified, + "GetApis": TierHandVerified, + "GetAuthorizer": TierHandVerified, + "GetAuthorizers": TierHandVerified, + "GetDeployment": TierHandVerified, + "GetDeployments": TierHandVerified, + "GetDomainName": TierHandVerified, + "GetDomainNames": TierHandVerified, + "GetIntegration": TierHandVerified, + "GetIntegrationResponse": TierHandVerified, + "GetIntegrationResponses": TierHandVerified, + "GetIntegrations": TierHandVerified, + "GetModel": TierHandVerified, + "GetModelTemplate": TierHandVerified, + "GetModels": TierHandVerified, + "GetPortal": TierUnimplemented, + "GetPortalProduct": TierUnimplemented, + "GetPortalProductSharingPolicy": TierUnimplemented, + "GetProductPage": TierUnimplemented, + "GetProductRestEndpointPage": TierUnimplemented, + "GetRoute": TierHandVerified, + "GetRouteResponse": TierHandVerified, + "GetRouteResponses": TierHandVerified, + "GetRoutes": TierHandVerified, + "GetRoutingRule": TierUnimplemented, + "GetStage": TierHandVerified, + "GetStages": TierHandVerified, + "GetTags": TierHandVerified, + "GetVpcLink": TierHandVerified, + "GetVpcLinks": TierHandVerified, + "ImportApi": TierHandVerified, + "ListPortalProducts": TierUnimplemented, + "ListPortals": TierUnimplemented, + "ListProductPages": TierUnimplemented, + "ListProductRestEndpointPages": TierUnimplemented, + "ListRoutingRules": TierUnimplemented, + "PreviewPortal": TierUnimplemented, + "PublishPortal": TierUnimplemented, + "PutPortalProductSharingPolicy": TierUnimplemented, + "PutRoutingRule": TierUnimplemented, + "ReimportApi": TierHandVerified, + "ResetAuthorizersCache": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateApi": TierHandVerified, + "UpdateApiMapping": TierHandVerified, + "UpdateAuthorizer": TierHandVerified, + "UpdateDeployment": TierHandVerified, + "UpdateDomainName": TierHandVerified, + "UpdateIntegration": TierHandVerified, + "UpdateIntegrationResponse": TierHandVerified, + "UpdateModel": TierHandVerified, + "UpdatePortal": TierUnimplemented, + "UpdatePortalProduct": TierUnimplemented, + "UpdateProductPage": TierUnimplemented, + "UpdateProductRestEndpointPage": TierUnimplemented, + "UpdateRoute": TierHandVerified, + "UpdateRouteResponse": TierUnimplemented, + "UpdateStage": TierHandVerified, + "UpdateVpcLink": TierHandVerified, + }}, + "appconfig": {ModelBacked: true, Operations: map[string]Tier{ + "CreateApplication": TierHandVerified, + "CreateConfigurationProfile": TierHandVerified, + "CreateDeploymentStrategy": TierHandVerified, + "CreateEnvironment": TierHandVerified, + "CreateExtension": TierHandVerified, + "CreateExtensionAssociation": TierHandVerified, + "CreateHostedConfigurationVersion": TierHandVerified, + "DeleteApplication": TierHandVerified, + "DeleteConfigurationProfile": TierHandVerified, + "DeleteDeploymentStrategy": TierHandVerified, + "DeleteEnvironment": TierHandVerified, + "DeleteExtension": TierHandVerified, + "DeleteExtensionAssociation": TierHandVerified, + "DeleteHostedConfigurationVersion": TierHandVerified, + "GetAccountSettings": TierHandVerified, + "GetApplication": TierHandVerified, + "GetConfiguration": TierHandVerified, + "GetConfigurationProfile": TierHandVerified, + "GetDeployment": TierHandVerified, + "GetDeploymentStrategy": TierHandVerified, + "GetEnvironment": TierHandVerified, + "GetExtension": TierHandVerified, + "GetExtensionAssociation": TierHandVerified, + "GetHostedConfigurationVersion": TierHandVerified, + "ListApplications": TierHandVerified, + "ListConfigurationProfiles": TierHandVerified, + "ListDeploymentStrategies": TierHandVerified, + "ListDeployments": TierHandVerified, + "ListEnvironments": TierHandVerified, + "ListExtensionAssociations": TierHandVerified, + "ListExtensions": TierHandVerified, + "ListHostedConfigurationVersions": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "StartDeployment": TierHandVerified, + "StopDeployment": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAccountSettings": TierHandVerified, + "UpdateApplication": TierHandVerified, + "UpdateConfigurationProfile": TierHandVerified, + "UpdateDeploymentStrategy": TierHandVerified, + "UpdateEnvironment": TierHandVerified, + "UpdateExtension": TierHandVerified, + "UpdateExtensionAssociation": TierHandVerified, + "ValidateConfiguration": TierHandVerified, + }}, + "applicationautoscaling": {ModelBacked: true, Operations: map[string]Tier{ + "DeleteScalingPolicy": TierHandVerified, + "DeleteScheduledAction": TierHandVerified, + "DeregisterScalableTarget": TierHandVerified, + "DescribeScalableTargets": TierHandVerified, + "DescribeScalingActivities": TierHandVerified, + "DescribeScalingPolicies": TierHandVerified, + "DescribeScheduledActions": TierHandVerified, + "GetPredictiveScalingForecast": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "PutScalingPolicy": TierHandVerified, + "PutScheduledAction": TierHandVerified, + "RegisterScalableTarget": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + }}, + "appsync": {ModelBacked: true, Operations: map[string]Tier{ + "AssociateApi": TierHandVerified, + "AssociateMergedGraphqlApi": TierHandVerified, + "AssociateSourceGraphqlApi": TierHandVerified, + "CreateApi": TierHandVerified, + "CreateApiCache": TierHandVerified, + "CreateApiKey": TierHandVerified, + "CreateChannelNamespace": TierHandVerified, + "CreateDataSource": TierHandVerified, + "CreateDomainName": TierHandVerified, + "CreateFunction": TierHandVerified, + "CreateGraphqlApi": TierHandVerified, + "CreateResolver": TierHandVerified, + "CreateType": TierHandVerified, + "DeleteApi": TierHandVerified, + "DeleteApiCache": TierHandVerified, + "DeleteApiKey": TierHandVerified, + "DeleteChannelNamespace": TierHandVerified, + "DeleteDataSource": TierHandVerified, + "DeleteDomainName": TierHandVerified, + "DeleteFunction": TierHandVerified, + "DeleteGraphqlApi": TierHandVerified, + "DeleteResolver": TierHandVerified, + "DeleteType": TierHandVerified, + "DisassociateApi": TierHandVerified, + "DisassociateMergedGraphqlApi": TierHandVerified, + "DisassociateSourceGraphqlApi": TierHandVerified, + "EvaluateCode": TierHandVerified, + "EvaluateMappingTemplate": TierHandVerified, + "FlushApiCache": TierHandVerified, + "GetApi": TierHandVerified, + "GetApiAssociation": TierHandVerified, + "GetApiCache": TierHandVerified, + "GetChannelNamespace": TierHandVerified, + "GetDataSource": TierHandVerified, + "GetDataSourceIntrospection": TierHandVerified, + "GetDomainName": TierHandVerified, + "GetFunction": TierHandVerified, + "GetGraphqlApi": TierHandVerified, + "GetGraphqlApiEnvironmentVariables": TierHandVerified, + "GetIntrospectionSchema": TierHandVerified, + "GetResolver": TierHandVerified, + "GetSchemaCreationStatus": TierHandVerified, + "GetSourceApiAssociation": TierHandVerified, + "GetType": TierHandVerified, + "ListApiKeys": TierHandVerified, + "ListApis": TierHandVerified, + "ListChannelNamespaces": TierHandVerified, + "ListDataSources": TierHandVerified, + "ListDomainNames": TierHandVerified, + "ListFunctions": TierHandVerified, + "ListGraphqlApis": TierHandVerified, + "ListResolvers": TierHandVerified, + "ListResolversByFunction": TierHandVerified, + "ListSourceApiAssociations": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListTypes": TierHandVerified, + "ListTypesByAssociation": TierUnimplemented, + "PutGraphqlApiEnvironmentVariables": TierHandVerified, + "StartDataSourceIntrospection": TierHandVerified, + "StartSchemaCreation": TierHandVerified, + "StartSchemaMerge": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateApi": TierHandVerified, + "UpdateApiCache": TierHandVerified, + "UpdateApiKey": TierHandVerified, + "UpdateChannelNamespace": TierHandVerified, + "UpdateDataSource": TierHandVerified, + "UpdateDomainName": TierHandVerified, + "UpdateFunction": TierHandVerified, + "UpdateGraphqlApi": TierHandVerified, + "UpdateResolver": TierHandVerified, + "UpdateSourceApiAssociation": TierHandVerified, + "UpdateType": TierHandVerified, + }}, + "athena": {ModelBacked: true, Operations: map[string]Tier{ + "BatchGetNamedQuery": TierHandVerified, + "BatchGetPreparedStatement": TierHandVerified, + "BatchGetQueryExecution": TierHandVerified, + "CancelCapacityReservation": TierHandVerified, + "CreateCapacityReservation": TierHandVerified, + "CreateDataCatalog": TierHandVerified, + "CreateNamedQuery": TierHandVerified, + "CreateNotebook": TierHandVerified, + "CreatePreparedStatement": TierHandVerified, + "CreatePresignedNotebookUrl": TierHandVerified, + "CreateWorkGroup": TierHandVerified, + "DeleteCapacityReservation": TierHandVerified, + "DeleteDataCatalog": TierHandVerified, + "DeleteNamedQuery": TierHandVerified, + "DeleteNotebook": TierHandVerified, + "DeletePreparedStatement": TierHandVerified, + "DeleteWorkGroup": TierHandVerified, + "ExportNotebook": TierHandVerified, + "GetCalculationExecution": TierHandVerified, + "GetCalculationExecutionCode": TierHandVerified, + "GetCalculationExecutionStatus": TierHandVerified, + "GetCapacityAssignmentConfiguration": TierHandVerified, + "GetCapacityReservation": TierHandVerified, + "GetDataCatalog": TierHandVerified, + "GetDatabase": TierHandVerified, + "GetNamedQuery": TierHandVerified, + "GetNotebookMetadata": TierHandVerified, + "GetPreparedStatement": TierHandVerified, + "GetQueryExecution": TierHandVerified, + "GetQueryResults": TierHandVerified, + "GetQueryRuntimeStatistics": TierHandVerified, + "GetResourceDashboard": TierHandVerified, + "GetSession": TierHandVerified, + "GetSessionEndpoint": TierHandVerified, + "GetSessionStatus": TierHandVerified, + "GetTableMetadata": TierHandVerified, + "GetWorkGroup": TierHandVerified, + "ImportNotebook": TierHandVerified, + "ListApplicationDPUSizes": TierHandVerified, + "ListCalculationExecutions": TierHandVerified, + "ListCapacityReservations": TierHandVerified, + "ListDataCatalogs": TierHandVerified, + "ListDatabases": TierHandVerified, + "ListEngineVersions": TierHandVerified, + "ListExecutors": TierHandVerified, + "ListNamedQueries": TierHandVerified, + "ListNotebookMetadata": TierHandVerified, + "ListNotebookSessions": TierHandVerified, + "ListPreparedStatements": TierHandVerified, + "ListQueryExecutions": TierHandVerified, + "ListSessions": TierHandVerified, + "ListTableMetadata": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListWorkGroups": TierHandVerified, + "PutCapacityAssignmentConfiguration": TierHandVerified, + "StartCalculationExecution": TierHandVerified, + "StartQueryExecution": TierHandVerified, + "StartSession": TierHandVerified, + "StopCalculationExecution": TierHandVerified, + "StopQueryExecution": TierHandVerified, + "TagResource": TierHandVerified, + "TerminateSession": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateCapacityReservation": TierHandVerified, + "UpdateDataCatalog": TierHandVerified, + "UpdateNamedQuery": TierHandVerified, + "UpdateNotebook": TierHandVerified, + "UpdateNotebookMetadata": TierHandVerified, + "UpdatePreparedStatement": TierHandVerified, + "UpdateWorkGroup": TierHandVerified, + }}, + "autoscaling": {ModelBacked: true, Operations: map[string]Tier{ + "AttachInstances": TierHandVerified, + "AttachLoadBalancerTargetGroups": TierHandVerified, + "AttachLoadBalancers": TierHandVerified, + "AttachTrafficSources": TierHandVerified, + "BatchDeleteScheduledAction": TierHandVerified, + "BatchPutScheduledUpdateGroupAction": TierHandVerified, + "CancelInstanceRefresh": TierHandVerified, + "CompleteLifecycleAction": TierHandVerified, + "CreateAutoScalingGroup": TierHandVerified, + "CreateLaunchConfiguration": TierHandVerified, + "CreateOrUpdateTags": TierHandVerified, + "DeleteAutoScalingGroup": TierHandVerified, + "DeleteLaunchConfiguration": TierHandVerified, + "DeleteLifecycleHook": TierHandVerified, + "DeleteNotificationConfiguration": TierUnimplemented, + "DeletePolicy": TierHandVerified, + "DeleteScheduledAction": TierHandVerified, + "DeleteTags": TierHandVerified, + "DeleteWarmPool": TierUnimplemented, + "DescribeAccountLimits": TierHandVerified, + "DescribeAdjustmentTypes": TierUnimplemented, + "DescribeAutoScalingGroups": TierHandVerified, + "DescribeAutoScalingInstances": TierHandVerified, + "DescribeAutoScalingNotificationTypes": TierUnimplemented, + "DescribeInstanceRefreshes": TierHandVerified, + "DescribeLaunchConfigurations": TierHandVerified, + "DescribeLifecycleHookTypes": TierUnimplemented, + "DescribeLifecycleHooks": TierHandVerified, + "DescribeLoadBalancerTargetGroups": TierUnimplemented, + "DescribeLoadBalancers": TierUnimplemented, + "DescribeMetricCollectionTypes": TierUnimplemented, + "DescribeNotificationConfigurations": TierUnimplemented, + "DescribePolicies": TierHandVerified, + "DescribeScalingActivities": TierUnimplemented, + "DescribeScalingProcessTypes": TierUnimplemented, + "DescribeScheduledActions": TierHandVerified, + "DescribeTags": TierHandVerified, + "DescribeTerminationPolicyTypes": TierUnimplemented, + "DescribeTrafficSources": TierUnimplemented, + "DescribeWarmPool": TierUnimplemented, + "DetachInstances": TierHandVerified, + "DetachLoadBalancerTargetGroups": TierHandVerified, + "DetachLoadBalancers": TierHandVerified, + "DetachTrafficSources": TierHandVerified, + "DisableMetricsCollection": TierHandVerified, + "EnableMetricsCollection": TierHandVerified, + "EnterStandby": TierHandVerified, + "ExecutePolicy": TierHandVerified, + "ExitStandby": TierHandVerified, + "GetPredictiveScalingForecast": TierUnimplemented, + "LaunchInstances": TierUnimplemented, + "PutLifecycleHook": TierHandVerified, + "PutNotificationConfiguration": TierUnimplemented, + "PutScalingPolicy": TierHandVerified, + "PutScheduledUpdateGroupAction": TierHandVerified, + "PutWarmPool": TierUnimplemented, + "RecordLifecycleActionHeartbeat": TierHandVerified, + "ResumeProcesses": TierHandVerified, + "RollbackInstanceRefresh": TierHandVerified, + "SetDesiredCapacity": TierHandVerified, + "SetInstanceHealth": TierHandVerified, + "SetInstanceProtection": TierHandVerified, + "StartInstanceRefresh": TierHandVerified, + "SuspendProcesses": TierHandVerified, + "TerminateInstanceInAutoScalingGroup": TierHandVerified, + "UpdateAutoScalingGroup": TierHandVerified, + }}, + "backup": {ModelBacked: true, Operations: map[string]Tier{ + "AssociateBackupVaultMpaApprovalTeam": TierUnimplemented, + "CancelLegalHold": TierUnimplemented, + "CreateBackupPlan": TierHandVerified, + "CreateBackupSelection": TierHandVerified, + "CreateBackupVault": TierHandVerified, + "CreateFramework": TierHandVerified, + "CreateLegalHold": TierUnimplemented, + "CreateLogicallyAirGappedBackupVault": TierUnimplemented, + "CreateReportPlan": TierHandVerified, + "CreateRestoreAccessBackupVault": TierUnimplemented, + "CreateRestoreTestingPlan": TierHandVerified, + "CreateRestoreTestingSelection": TierHandVerified, + "CreateTieringConfiguration": TierUnimplemented, + "DeleteBackupPlan": TierHandVerified, + "DeleteBackupSelection": TierHandVerified, + "DeleteBackupVault": TierHandVerified, + "DeleteBackupVaultAccessPolicy": TierHandVerified, + "DeleteBackupVaultLockConfiguration": TierHandVerified, + "DeleteBackupVaultNotifications": TierHandVerified, + "DeleteFramework": TierHandVerified, + "DeleteRecoveryPoint": TierHandVerified, + "DeleteReportPlan": TierHandVerified, + "DeleteRestoreTestingPlan": TierHandVerified, + "DeleteRestoreTestingSelection": TierHandVerified, + "DeleteTieringConfiguration": TierUnimplemented, + "DescribeBackupJob": TierHandVerified, + "DescribeBackupVault": TierHandVerified, + "DescribeCopyJob": TierUnimplemented, + "DescribeFramework": TierHandVerified, + "DescribeGlobalSettings": TierHandVerified, + "DescribeProtectedResource": TierHandVerified, + "DescribeRecoveryPoint": TierHandVerified, + "DescribeRegionSettings": TierHandVerified, + "DescribeReportJob": TierHandVerified, + "DescribeReportPlan": TierHandVerified, + "DescribeRestoreJob": TierHandVerified, + "DescribeScanJob": TierUnimplemented, + "DisassociateBackupVaultMpaApprovalTeam": TierUnimplemented, + "DisassociateRecoveryPoint": TierUnimplemented, + "DisassociateRecoveryPointFromParent": TierUnimplemented, + "ExportBackupPlanTemplate": TierHandVerified, + "GetBackupPlan": TierHandVerified, + "GetBackupPlanFromJSON": TierHandVerified, + "GetBackupPlanFromTemplate": TierHandVerified, + "GetBackupSelection": TierHandVerified, + "GetBackupVaultAccessPolicy": TierHandVerified, + "GetBackupVaultNotifications": TierHandVerified, + "GetLegalHold": TierUnimplemented, + "GetRecoveryPointIndexDetails": TierHandVerified, + "GetRecoveryPointRestoreMetadata": TierHandVerified, + "GetRestoreJobMetadata": TierHandVerified, + "GetRestoreTestingInferredMetadata": TierHandVerified, + "GetRestoreTestingPlan": TierHandVerified, + "GetRestoreTestingSelection": TierHandVerified, + "GetSupportedResourceTypes": TierHandVerified, + "GetTieringConfiguration": TierUnimplemented, + "ListBackupJobSummaries": TierHandVerified, + "ListBackupJobs": TierHandVerified, + "ListBackupPlanTemplates": TierHandVerified, + "ListBackupPlanVersions": TierHandVerified, + "ListBackupPlans": TierHandVerified, + "ListBackupSelections": TierHandVerified, + "ListBackupVaults": TierHandVerified, + "ListCopyJobSummaries": TierUnimplemented, + "ListCopyJobs": TierUnimplemented, + "ListFrameworks": TierHandVerified, + "ListIndexedRecoveryPoints": TierHandVerified, + "ListLegalHolds": TierUnimplemented, + "ListProtectedResources": TierHandVerified, + "ListProtectedResourcesByBackupVault": TierHandVerified, + "ListRecoveryPointsByBackupVault": TierHandVerified, + "ListRecoveryPointsByLegalHold": TierUnimplemented, + "ListRecoveryPointsByResource": TierHandVerified, + "ListReportJobs": TierHandVerified, + "ListReportPlans": TierHandVerified, + "ListRestoreAccessBackupVaults": TierUnimplemented, + "ListRestoreJobSummaries": TierHandVerified, + "ListRestoreJobs": TierHandVerified, + "ListRestoreJobsByProtectedResource": TierHandVerified, + "ListRestoreTestingPlans": TierHandVerified, + "ListRestoreTestingSelections": TierHandVerified, + "ListScanJobSummaries": TierUnimplemented, + "ListScanJobs": TierUnimplemented, + "ListTags": TierHandVerified, + "ListTieringConfigurations": TierUnimplemented, + "PutBackupVaultAccessPolicy": TierHandVerified, + "PutBackupVaultLockConfiguration": TierHandVerified, + "PutBackupVaultNotifications": TierHandVerified, + "PutRestoreValidationResult": TierHandVerified, + "RevokeRestoreAccessBackupVault": TierUnimplemented, + "StartBackupJob": TierHandVerified, + "StartCopyJob": TierUnimplemented, + "StartReportJob": TierHandVerified, + "StartRestoreJob": TierHandVerified, + "StartScanJob": TierUnimplemented, + "StopBackupJob": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateBackupPlan": TierHandVerified, + "UpdateFramework": TierHandVerified, + "UpdateGlobalSettings": TierHandVerified, + "UpdateRecoveryPointIndexSettings": TierHandVerified, + "UpdateRecoveryPointLifecycle": TierHandVerified, + "UpdateRegionSettings": TierHandVerified, + "UpdateReportPlan": TierHandVerified, + "UpdateRestoreTestingPlan": TierHandVerified, + "UpdateRestoreTestingSelection": TierHandVerified, + "UpdateTieringConfiguration": TierUnimplemented, + }}, + "batch": {ModelBacked: true, Operations: map[string]Tier{ + "CancelJob": TierHandVerified, + "CreateComputeEnvironment": TierHandVerified, + "CreateConsumableResource": TierHandVerified, + "CreateJobQueue": TierHandVerified, + "CreateQuotaShare": TierHandVerified, + "CreateSchedulingPolicy": TierHandVerified, + "CreateServiceEnvironment": TierHandVerified, + "DeleteComputeEnvironment": TierHandVerified, + "DeleteConsumableResource": TierHandVerified, + "DeleteJobQueue": TierHandVerified, + "DeleteQuotaShare": TierHandVerified, + "DeleteSchedulingPolicy": TierHandVerified, + "DeleteServiceEnvironment": TierHandVerified, + "DeregisterJobDefinition": TierHandVerified, + "DescribeComputeEnvironments": TierHandVerified, + "DescribeConsumableResource": TierHandVerified, + "DescribeJobDefinitions": TierHandVerified, + "DescribeJobQueues": TierHandVerified, + "DescribeJobs": TierHandVerified, + "DescribeQuotaShare": TierHandVerified, + "DescribeSchedulingPolicies": TierHandVerified, + "DescribeServiceEnvironments": TierHandVerified, + "DescribeServiceJob": TierHandVerified, + "GetJobQueueSnapshot": TierHandVerified, + "ListConsumableResources": TierHandVerified, + "ListJobs": TierHandVerified, + "ListJobsByConsumableResource": TierHandVerified, + "ListQuotaShares": TierHandVerified, + "ListSchedulingPolicies": TierHandVerified, + "ListServiceJobs": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "RegisterJobDefinition": TierHandVerified, + "SubmitJob": TierHandVerified, + "SubmitServiceJob": TierHandVerified, + "TagResource": TierHandVerified, + "TerminateJob": TierHandVerified, + "TerminateServiceJob": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateComputeEnvironment": TierHandVerified, + "UpdateConsumableResource": TierHandVerified, + "UpdateJobQueue": TierHandVerified, + "UpdateQuotaShare": TierHandVerified, + "UpdateSchedulingPolicy": TierHandVerified, + "UpdateServiceEnvironment": TierHandVerified, + "UpdateServiceJob": TierHandVerified, + }}, + "bedrock": {ModelBacked: true, Operations: map[string]Tier{ + "BatchDeleteEvaluationJob": TierUnimplemented, + "CancelAutomatedReasoningPolicyBuildWorkflow": TierUnimplemented, + "CreateAutomatedReasoningPolicy": TierUnimplemented, + "CreateAutomatedReasoningPolicyTestCase": TierUnimplemented, + "CreateAutomatedReasoningPolicyVersion": TierUnimplemented, + "CreateCustomModel": TierUnimplemented, + "CreateCustomModelDeployment": TierUnimplemented, + "CreateEvaluationJob": TierUnimplemented, + "CreateFoundationModelAgreement": TierUnimplemented, + "CreateGuardrail": TierHandVerified, + "CreateGuardrailVersion": TierUnimplemented, + "CreateInferenceProfile": TierUnimplemented, + "CreateMarketplaceModelEndpoint": TierUnimplemented, + "CreateModelCopyJob": TierUnimplemented, + "CreateModelCustomizationJob": TierHandVerified, + "CreateModelImportJob": TierUnimplemented, + "CreateModelInvocationJob": TierUnimplemented, + "CreatePromptRouter": TierUnimplemented, + "CreateProvisionedModelThroughput": TierUnimplemented, + "DeleteAutomatedReasoningPolicy": TierUnimplemented, + "DeleteAutomatedReasoningPolicyBuildWorkflow": TierUnimplemented, + "DeleteAutomatedReasoningPolicyTestCase": TierUnimplemented, + "DeleteCustomModel": TierHandVerified, + "DeleteCustomModelDeployment": TierUnimplemented, + "DeleteEnforcedGuardrailConfiguration": TierUnimplemented, + "DeleteFoundationModelAgreement": TierUnimplemented, + "DeleteGuardrail": TierHandVerified, + "DeleteImportedModel": TierUnimplemented, + "DeleteInferenceProfile": TierUnimplemented, + "DeleteMarketplaceModelEndpoint": TierUnimplemented, + "DeleteModelInvocationLoggingConfiguration": TierUnimplemented, + "DeletePromptRouter": TierUnimplemented, + "DeleteProvisionedModelThroughput": TierUnimplemented, + "DeleteResourcePolicy": TierUnimplemented, + "DeregisterMarketplaceModelEndpoint": TierUnimplemented, + "ExportAutomatedReasoningPolicyVersion": TierUnimplemented, + "GetAutomatedReasoningPolicy": TierUnimplemented, + "GetAutomatedReasoningPolicyAnnotations": TierUnimplemented, + "GetAutomatedReasoningPolicyBuildWorkflow": TierUnimplemented, + "GetAutomatedReasoningPolicyBuildWorkflowResultAssets": TierUnimplemented, + "GetAutomatedReasoningPolicyNextScenario": TierUnimplemented, + "GetAutomatedReasoningPolicyTestCase": TierUnimplemented, + "GetAutomatedReasoningPolicyTestResult": TierUnimplemented, + "GetCustomModel": TierHandVerified, + "GetCustomModelDeployment": TierUnimplemented, + "GetEvaluationJob": TierUnimplemented, + "GetFoundationModel": TierHandVerified, + "GetFoundationModelAvailability": TierUnimplemented, + "GetGuardrail": TierHandVerified, + "GetImportedModel": TierUnimplemented, + "GetInferenceProfile": TierUnimplemented, + "GetMarketplaceModelEndpoint": TierUnimplemented, + "GetModelCopyJob": TierUnimplemented, + "GetModelCustomizationJob": TierHandVerified, + "GetModelImportJob": TierUnimplemented, + "GetModelInvocationJob": TierUnimplemented, + "GetModelInvocationLoggingConfiguration": TierUnimplemented, + "GetPromptRouter": TierUnimplemented, + "GetProvisionedModelThroughput": TierUnimplemented, + "GetResourcePolicy": TierUnimplemented, + "GetUseCaseForModelAccess": TierUnimplemented, + "InvokeModel": TierHandVerified, + "ListAutomatedReasoningPolicies": TierUnimplemented, + "ListAutomatedReasoningPolicyBuildWorkflows": TierUnimplemented, + "ListAutomatedReasoningPolicyTestCases": TierUnimplemented, + "ListAutomatedReasoningPolicyTestResults": TierUnimplemented, + "ListCustomModelDeployments": TierUnimplemented, + "ListCustomModels": TierHandVerified, + "ListEnforcedGuardrailsConfiguration": TierUnimplemented, + "ListEvaluationJobs": TierUnimplemented, + "ListFoundationModelAgreementOffers": TierUnimplemented, + "ListFoundationModels": TierHandVerified, + "ListGuardrails": TierHandVerified, + "ListImportedModels": TierUnimplemented, + "ListInferenceProfiles": TierUnimplemented, + "ListMarketplaceModelEndpoints": TierUnimplemented, + "ListModelCopyJobs": TierUnimplemented, + "ListModelCustomizationJobs": TierHandVerified, + "ListModelImportJobs": TierUnimplemented, + "ListModelInvocationJobs": TierUnimplemented, + "ListPromptRouters": TierUnimplemented, + "ListProvisionedModelThroughputs": TierUnimplemented, + "ListTagsForResource": TierHandVerified, + "PutEnforcedGuardrailConfiguration": TierUnimplemented, + "PutModelInvocationLoggingConfiguration": TierUnimplemented, + "PutResourcePolicy": TierUnimplemented, + "PutUseCaseForModelAccess": TierUnimplemented, + "RegisterMarketplaceModelEndpoint": TierUnimplemented, + "StartAutomatedReasoningPolicyBuildWorkflow": TierUnimplemented, + "StartAutomatedReasoningPolicyTestWorkflow": TierUnimplemented, + "StopEvaluationJob": TierUnimplemented, + "StopModelCustomizationJob": TierHandVerified, + "StopModelInvocationJob": TierUnimplemented, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAutomatedReasoningPolicy": TierUnimplemented, + "UpdateAutomatedReasoningPolicyAnnotations": TierUnimplemented, + "UpdateAutomatedReasoningPolicyTestCase": TierUnimplemented, + "UpdateCustomModelDeployment": TierUnimplemented, + "UpdateGuardrail": TierHandVerified, + "UpdateMarketplaceModelEndpoint": TierUnimplemented, + "UpdateProvisionedModelThroughput": TierUnimplemented, + }}, + "cloudcontrol": {ModelBacked: false, Operations: map[string]Tier{ + "BatchGetResources": TierHandVerified, + "CancelResourceRequest": TierHandVerified, + "CloneResource": TierHandVerified, + "CreateResource": TierHandVerified, + "DeleteResource": TierHandVerified, + "DescribeResource": TierHandVerified, + "ExportResources": TierHandVerified, + "GetHookResults": TierHandVerified, + "GetResource": TierHandVerified, + "GetResourceRequestStatus": TierHandVerified, + "GetResourceSchema": TierHandVerified, + "GetResourceType": TierHandVerified, + "ImportResource": TierHandVerified, + "ListResourceOperations": TierHandVerified, + "ListResourceRequests": TierHandVerified, + "ListResourceSchemas": TierHandVerified, + "ListResourceTypes": TierHandVerified, + "ListResources": TierHandVerified, + "ListStackResources": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "RefreshResource": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateResource": TierHandVerified, + "ValidateResource": TierHandVerified, + "WaitForResource": TierHandVerified, + }}, + "cloudformation": {ModelBacked: true, Operations: map[string]Tier{ + "ActivateOrganizationsAccess": TierUnimplemented, + "ActivateType": TierHandVerified, + "BatchDescribeTypeConfigurations": TierHandVerified, + "CancelUpdateStack": TierUnimplemented, + "ContinueUpdateRollback": TierHandVerified, + "CreateChangeSet": TierHandVerified, + "CreateGeneratedTemplate": TierUnimplemented, + "CreateStack": TierHandVerified, + "CreateStackInstances": TierHandVerified, + "CreateStackRefactor": TierUnimplemented, + "CreateStackSet": TierHandVerified, + "DeactivateOrganizationsAccess": TierUnimplemented, + "DeactivateType": TierHandVerified, + "DeleteChangeSet": TierHandVerified, + "DeleteGeneratedTemplate": TierUnimplemented, + "DeleteStack": TierHandVerified, + "DeleteStackInstances": TierHandVerified, + "DeleteStackSet": TierHandVerified, + "DeregisterType": TierHandVerified, + "DescribeAccountLimits": TierHandVerified, + "DescribeChangeSet": TierHandVerified, + "DescribeChangeSetHooks": TierUnimplemented, + "DescribeEvents": TierUnimplemented, + "DescribeGeneratedTemplate": TierUnimplemented, + "DescribeOrganizationsAccess": TierUnimplemented, + "DescribePublisher": TierHandVerified, + "DescribeResourceScan": TierUnimplemented, + "DescribeStackDriftDetectionStatus": TierHandVerified, + "DescribeStackEvents": TierHandVerified, + "DescribeStackInstance": TierHandVerified, + "DescribeStackRefactor": TierUnimplemented, + "DescribeStackResource": TierHandVerified, + "DescribeStackResourceDrifts": TierHandVerified, + "DescribeStackResources": TierHandVerified, + "DescribeStackSet": TierHandVerified, + "DescribeStackSetOperation": TierHandVerified, + "DescribeStacks": TierHandVerified, + "DescribeType": TierHandVerified, + "DescribeTypeRegistration": TierHandVerified, + "DetectStackDrift": TierHandVerified, + "DetectStackResourceDrift": TierHandVerified, + "DetectStackSetDrift": TierUnimplemented, + "EstimateTemplateCost": TierUnimplemented, + "ExecuteChangeSet": TierHandVerified, + "ExecuteStackRefactor": TierUnimplemented, + "GetGeneratedTemplate": TierUnimplemented, + "GetHookResult": TierUnimplemented, + "GetStackPolicy": TierHandVerified, + "GetTemplate": TierHandVerified, + "GetTemplateSummary": TierHandVerified, + "ImportStacksToStackSet": TierHandVerified, + "ListChangeSets": TierHandVerified, + "ListExports": TierHandVerified, + "ListGeneratedTemplates": TierUnimplemented, + "ListHookResults": TierUnimplemented, + "ListImports": TierHandVerified, + "ListResourceScanRelatedResources": TierUnimplemented, + "ListResourceScanResources": TierUnimplemented, + "ListResourceScans": TierUnimplemented, + "ListStackInstanceResourceDrifts": TierUnimplemented, + "ListStackInstances": TierHandVerified, + "ListStackRefactorActions": TierUnimplemented, + "ListStackRefactors": TierUnimplemented, + "ListStackResources": TierHandVerified, + "ListStackSetAutoDeploymentTargets": TierUnimplemented, + "ListStackSetOperationResults": TierHandVerified, + "ListStackSetOperations": TierHandVerified, + "ListStackSets": TierHandVerified, + "ListStacks": TierHandVerified, + "ListTypeRegistrations": TierHandVerified, + "ListTypeVersions": TierHandVerified, + "ListTypes": TierHandVerified, + "PublishType": TierHandVerified, + "RecordHandlerProgress": TierUnimplemented, + "RegisterPublisher": TierHandVerified, + "RegisterType": TierHandVerified, + "RollbackStack": TierHandVerified, + "SetStackPolicy": TierHandVerified, + "SetTypeConfiguration": TierHandVerified, + "SetTypeDefaultVersion": TierHandVerified, + "SignalResource": TierHandVerified, + "StartResourceScan": TierUnimplemented, + "StopStackSetOperation": TierHandVerified, + "TestType": TierHandVerified, + "UpdateGeneratedTemplate": TierUnimplemented, + "UpdateStack": TierHandVerified, + "UpdateStackInstances": TierHandVerified, + "UpdateStackSet": TierHandVerified, + "UpdateTerminationProtection": TierHandVerified, + "ValidateTemplate": TierHandVerified, + }}, + "cloudfront": {ModelBacked: true, Operations: map[string]Tier{ + "AssociateAlias": TierUnimplemented, + "AssociateDistributionTenantWebACL": TierUnimplemented, + "AssociateDistributionWebACL": TierUnimplemented, + "CopyDistribution": TierUnimplemented, + "CreateAnycastIpList": TierUnimplemented, + "CreateCachePolicy": TierHandVerified, + "CreateCloudFrontOriginAccessIdentity": TierUnimplemented, + "CreateConnectionFunction": TierUnimplemented, + "CreateConnectionGroup": TierUnimplemented, + "CreateContinuousDeploymentPolicy": TierUnimplemented, + "CreateDistribution": TierHandVerified, + "CreateDistributionTenant": TierUnimplemented, + "CreateDistributionWithTags": TierHandVerified, + "CreateFieldLevelEncryptionConfig": TierUnimplemented, + "CreateFieldLevelEncryptionProfile": TierUnimplemented, + "CreateFunction": TierHandVerified, + "CreateInvalidation": TierHandVerified, + "CreateInvalidationForDistributionTenant": TierUnimplemented, + "CreateKeyGroup": TierUnimplemented, + "CreateKeyValueStore": TierUnimplemented, + "CreateMonitoringSubscription": TierUnimplemented, + "CreateOriginAccessControl": TierHandVerified, + "CreateOriginRequestPolicy": TierHandVerified, + "CreatePublicKey": TierUnimplemented, + "CreateRealtimeLogConfig": TierUnimplemented, + "CreateResponseHeadersPolicy": TierHandVerified, + "CreateStreamingDistribution": TierUnimplemented, + "CreateStreamingDistributionWithTags": TierUnimplemented, + "CreateTrustStore": TierUnimplemented, + "CreateVpcOrigin": TierUnimplemented, + "DeleteAnycastIpList": TierUnimplemented, + "DeleteCachePolicy": TierHandVerified, + "DeleteCloudFrontOriginAccessIdentity": TierUnimplemented, + "DeleteConnectionFunction": TierUnimplemented, + "DeleteConnectionGroup": TierUnimplemented, + "DeleteContinuousDeploymentPolicy": TierUnimplemented, + "DeleteDistribution": TierHandVerified, + "DeleteDistributionTenant": TierUnimplemented, + "DeleteFieldLevelEncryptionConfig": TierUnimplemented, + "DeleteFieldLevelEncryptionProfile": TierUnimplemented, + "DeleteFunction": TierHandVerified, + "DeleteKeyGroup": TierUnimplemented, + "DeleteKeyValueStore": TierUnimplemented, + "DeleteMonitoringSubscription": TierUnimplemented, + "DeleteOriginAccessControl": TierHandVerified, + "DeleteOriginRequestPolicy": TierHandVerified, + "DeletePublicKey": TierUnimplemented, + "DeleteRealtimeLogConfig": TierUnimplemented, + "DeleteResourcePolicy": TierUnimplemented, + "DeleteResponseHeadersPolicy": TierHandVerified, + "DeleteStreamingDistribution": TierUnimplemented, + "DeleteTrustStore": TierUnimplemented, + "DeleteVpcOrigin": TierUnimplemented, + "DescribeConnectionFunction": TierUnimplemented, + "DescribeFunction": TierHandVerified, + "DescribeKeyValueStore": TierUnimplemented, + "DisassociateDistributionTenantWebACL": TierUnimplemented, + "DisassociateDistributionWebACL": TierUnimplemented, + "GetAnycastIpList": TierUnimplemented, + "GetCachePolicy": TierHandVerified, + "GetCachePolicyConfig": TierHandVerified, + "GetCloudFrontOriginAccessIdentity": TierUnimplemented, + "GetCloudFrontOriginAccessIdentityConfig": TierUnimplemented, + "GetConnectionFunction": TierUnimplemented, + "GetConnectionGroup": TierUnimplemented, + "GetConnectionGroupByRoutingEndpoint": TierUnimplemented, + "GetContinuousDeploymentPolicy": TierUnimplemented, + "GetContinuousDeploymentPolicyConfig": TierUnimplemented, + "GetDistribution": TierHandVerified, + "GetDistributionConfig": TierHandVerified, + "GetDistributionTenant": TierUnimplemented, + "GetDistributionTenantByDomain": TierUnimplemented, + "GetFieldLevelEncryption": TierUnimplemented, + "GetFieldLevelEncryptionConfig": TierUnimplemented, + "GetFieldLevelEncryptionProfile": TierUnimplemented, + "GetFieldLevelEncryptionProfileConfig": TierUnimplemented, + "GetFunction": TierHandVerified, + "GetInvalidation": TierHandVerified, + "GetInvalidationForDistributionTenant": TierUnimplemented, + "GetKeyGroup": TierUnimplemented, + "GetKeyGroupConfig": TierUnimplemented, + "GetManagedCertificateDetails": TierUnimplemented, + "GetMonitoringSubscription": TierUnimplemented, + "GetOriginAccessControl": TierHandVerified, + "GetOriginAccessControlConfig": TierHandVerified, + "GetOriginRequestPolicy": TierHandVerified, + "GetOriginRequestPolicyConfig": TierHandVerified, + "GetPublicKey": TierUnimplemented, + "GetPublicKeyConfig": TierUnimplemented, + "GetRealtimeLogConfig": TierUnimplemented, + "GetResourcePolicy": TierUnimplemented, + "GetResponseHeadersPolicy": TierHandVerified, + "GetResponseHeadersPolicyConfig": TierHandVerified, + "GetStreamingDistribution": TierUnimplemented, + "GetStreamingDistributionConfig": TierUnimplemented, + "GetTrustStore": TierUnimplemented, + "GetVpcOrigin": TierUnimplemented, + "ListAnycastIpLists": TierUnimplemented, + "ListCachePolicies": TierHandVerified, + "ListCloudFrontOriginAccessIdentities": TierUnimplemented, + "ListConflictingAliases": TierUnimplemented, + "ListConnectionFunctions": TierUnimplemented, + "ListConnectionGroups": TierUnimplemented, + "ListContinuousDeploymentPolicies": TierUnimplemented, + "ListDistributionTenants": TierUnimplemented, + "ListDistributionTenantsByCustomization": TierUnimplemented, + "ListDistributions": TierHandVerified, + "ListDistributionsByAnycastIpListId": TierUnimplemented, + "ListDistributionsByCachePolicyId": TierUnimplemented, + "ListDistributionsByConnectionFunction": TierUnimplemented, + "ListDistributionsByConnectionMode": TierUnimplemented, + "ListDistributionsByKeyGroup": TierUnimplemented, + "ListDistributionsByOriginRequestPolicyId": TierUnimplemented, + "ListDistributionsByOwnedResource": TierUnimplemented, + "ListDistributionsByRealtimeLogConfig": TierUnimplemented, + "ListDistributionsByResponseHeadersPolicyId": TierUnimplemented, + "ListDistributionsByTrustStore": TierUnimplemented, + "ListDistributionsByVpcOriginId": TierUnimplemented, + "ListDistributionsByWebACLId": TierUnimplemented, + "ListDomainConflicts": TierUnimplemented, + "ListFieldLevelEncryptionConfigs": TierUnimplemented, + "ListFieldLevelEncryptionProfiles": TierUnimplemented, + "ListFunctions": TierHandVerified, + "ListInvalidations": TierHandVerified, + "ListInvalidationsForDistributionTenant": TierUnimplemented, + "ListKeyGroups": TierUnimplemented, + "ListKeyValueStores": TierUnimplemented, + "ListOriginAccessControls": TierHandVerified, + "ListOriginRequestPolicies": TierHandVerified, + "ListPublicKeys": TierUnimplemented, + "ListRealtimeLogConfigs": TierUnimplemented, + "ListResponseHeadersPolicies": TierHandVerified, + "ListStreamingDistributions": TierUnimplemented, + "ListTagsForResource": TierHandVerified, + "ListTrustStores": TierUnimplemented, + "ListVpcOrigins": TierUnimplemented, + "PublishConnectionFunction": TierUnimplemented, + "PublishFunction": TierHandVerified, + "PutResourcePolicy": TierUnimplemented, + "TagResource": TierHandVerified, + "TestConnectionFunction": TierUnimplemented, + "TestFunction": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAnycastIpList": TierUnimplemented, + "UpdateCachePolicy": TierHandVerified, + "UpdateCloudFrontOriginAccessIdentity": TierUnimplemented, + "UpdateConnectionFunction": TierUnimplemented, + "UpdateConnectionGroup": TierUnimplemented, + "UpdateContinuousDeploymentPolicy": TierUnimplemented, + "UpdateDistribution": TierHandVerified, + "UpdateDistributionTenant": TierUnimplemented, + "UpdateDistributionWithStagingConfig": TierUnimplemented, + "UpdateDomainAssociation": TierUnimplemented, + "UpdateFieldLevelEncryptionConfig": TierUnimplemented, + "UpdateFieldLevelEncryptionProfile": TierUnimplemented, + "UpdateFunction": TierHandVerified, + "UpdateKeyGroup": TierUnimplemented, + "UpdateKeyValueStore": TierUnimplemented, + "UpdateOriginAccessControl": TierHandVerified, + "UpdateOriginRequestPolicy": TierHandVerified, + "UpdatePublicKey": TierUnimplemented, + "UpdateRealtimeLogConfig": TierUnimplemented, + "UpdateResponseHeadersPolicy": TierHandVerified, + "UpdateStreamingDistribution": TierUnimplemented, + "UpdateTrustStore": TierUnimplemented, + "UpdateVpcOrigin": TierUnimplemented, + "VerifyDnsConfiguration": TierUnimplemented, + }}, + "cloudsearch": {ModelBacked: true, Operations: map[string]Tier{ + "BuildSuggesters": TierHandVerified, + "CreateDomain": TierHandVerified, + "DefineAnalysisScheme": TierHandVerified, + "DefineExpression": TierHandVerified, + "DefineIndexField": TierHandVerified, + "DefineSuggester": TierHandVerified, + "DeleteAnalysisScheme": TierHandVerified, + "DeleteDomain": TierHandVerified, + "DeleteExpression": TierHandVerified, + "DeleteIndexField": TierHandVerified, + "DeleteSuggester": TierHandVerified, + "DescribeAnalysisSchemes": TierHandVerified, + "DescribeAvailabilityOptions": TierHandVerified, + "DescribeDomainEndpointOptions": TierHandVerified, + "DescribeDomains": TierHandVerified, + "DescribeExpressions": TierHandVerified, + "DescribeIndexFields": TierHandVerified, + "DescribeScalingParameters": TierHandVerified, + "DescribeServiceAccessPolicies": TierHandVerified, + "DescribeSuggesters": TierHandVerified, + "IndexDocuments": TierHandVerified, + "ListDomainNames": TierHandVerified, + "UpdateAvailabilityOptions": TierHandVerified, + "UpdateDomainEndpointOptions": TierHandVerified, + "UpdateScalingParameters": TierHandVerified, + "UpdateServiceAccessPolicies": TierHandVerified, + }}, + "cloudtrail": {ModelBacked: true, Operations: map[string]Tier{ + "AddTags": TierHandVerified, + "CancelQuery": TierHandVerified, + "CreateChannel": TierHandVerified, + "CreateDashboard": TierHandVerified, + "CreateEventDataStore": TierHandVerified, + "CreateTrail": TierHandVerified, + "DeleteChannel": TierHandVerified, + "DeleteDashboard": TierHandVerified, + "DeleteEventDataStore": TierHandVerified, + "DeleteResourcePolicy": TierHandVerified, + "DeleteTrail": TierHandVerified, + "DeregisterOrganizationDelegatedAdmin": TierHandVerified, + "DescribeQuery": TierHandVerified, + "DescribeTrails": TierHandVerified, + "DisableFederation": TierHandVerified, + "EnableFederation": TierHandVerified, + "GenerateQuery": TierHandVerified, + "GetChannel": TierHandVerified, + "GetDashboard": TierHandVerified, + "GetEventConfiguration": TierHandVerified, + "GetEventDataStore": TierHandVerified, + "GetEventSelectors": TierHandVerified, + "GetImport": TierHandVerified, + "GetInsightSelectors": TierHandVerified, + "GetQueryResults": TierHandVerified, + "GetResourcePolicy": TierHandVerified, + "GetTrail": TierHandVerified, + "GetTrailStatus": TierHandVerified, + "ListChannels": TierHandVerified, + "ListDashboards": TierHandVerified, + "ListEventDataStores": TierHandVerified, + "ListImportFailures": TierHandVerified, + "ListImports": TierHandVerified, + "ListInsightsData": TierHandVerified, + "ListInsightsMetricData": TierHandVerified, + "ListPublicKeys": TierHandVerified, + "ListQueries": TierHandVerified, + "ListTags": TierHandVerified, + "ListTrails": TierHandVerified, + "LookupEvents": TierHandVerified, + "PutEventConfiguration": TierHandVerified, + "PutEventSelectors": TierHandVerified, + "PutInsightSelectors": TierHandVerified, + "PutResourcePolicy": TierHandVerified, + "RegisterOrganizationDelegatedAdmin": TierHandVerified, + "RemoveTags": TierHandVerified, + "RestoreEventDataStore": TierHandVerified, + "SearchSampleQueries": TierHandVerified, + "StartDashboardRefresh": TierHandVerified, + "StartEventDataStoreIngestion": TierHandVerified, + "StartImport": TierHandVerified, + "StartLogging": TierHandVerified, + "StartQuery": TierHandVerified, + "StopEventDataStoreIngestion": TierHandVerified, + "StopImport": TierHandVerified, + "StopLogging": TierHandVerified, + "UpdateChannel": TierHandVerified, + "UpdateDashboard": TierHandVerified, + "UpdateEventDataStore": TierHandVerified, + "UpdateTrail": TierHandVerified, + }}, + "cloudwatch": {ModelBacked: true, Operations: map[string]Tier{ + "DeleteAlarmMuteRule": TierAutoCRUD, + "DeleteAlarms": TierHandVerified, + "DeleteAnomalyDetector": TierHandVerified, + "DeleteDashboards": TierHandVerified, + "DeleteInsightRules": TierAutoCRUD, + "DeleteMetricStream": TierAutoCRUD, + "DescribeAlarmContributors": TierAutoCRUD, + "DescribeAlarmHistory": TierHandVerified, + "DescribeAlarms": TierHandVerified, + "DescribeAlarmsForMetric": TierHandVerified, + "DescribeAnomalyDetectors": TierHandVerified, + "DescribeInsightRules": TierAutoCRUD, + "DisableAlarmActions": TierHandVerified, + "DisableInsightRules": TierUnimplemented, + "EnableAlarmActions": TierHandVerified, + "EnableInsightRules": TierUnimplemented, + "GetAlarmMuteRule": TierAutoCRUD, + "GetDashboard": TierHandVerified, + "GetInsightRuleReport": TierAutoCRUD, + "GetMetricData": TierHandVerified, + "GetMetricStatistics": TierHandVerified, + "GetMetricStream": TierAutoCRUD, + "GetMetricWidgetImage": TierAutoCRUD, + "GetOTelEnrichment": TierAutoCRUD, + "ListAlarmMuteRules": TierAutoCRUD, + "ListDashboards": TierHandVerified, + "ListManagedInsightRules": TierAutoCRUD, + "ListMetricStreams": TierAutoCRUD, + "ListMetrics": TierHandVerified, + "ListTagsForResource": TierAutoCRUD, + "PutAlarmMuteRule": TierAutoCRUD, + "PutAnomalyDetector": TierHandVerified, + "PutCompositeAlarm": TierHandVerified, + "PutDashboard": TierHandVerified, + "PutInsightRule": TierAutoCRUD, + "PutManagedInsightRules": TierAutoCRUD, + "PutMetricAlarm": TierHandVerified, + "PutMetricData": TierHandVerified, + "PutMetricStream": TierAutoCRUD, + "SetAlarmState": TierHandVerified, + "StartMetricStreams": TierUnimplemented, + "StartOTelEnrichment": TierUnimplemented, + "StopMetricStreams": TierUnimplemented, + "StopOTelEnrichment": TierUnimplemented, + "TagResource": TierAutoCRUD, + "UntagResource": TierAutoCRUD, + }}, + "cloudwatchlogs": {ModelBacked: true, Operations: map[string]Tier{ + "AssociateKmsKey": TierUnimplemented, + "AssociateSourceToS3TableIntegration": TierUnimplemented, + "CancelExportTask": TierUnimplemented, + "CancelImportTask": TierUnimplemented, + "CreateDelivery": TierAutoCRUD, + "CreateExportTask": TierAutoCRUD, + "CreateImportTask": TierAutoCRUD, + "CreateLogAnomalyDetector": TierAutoCRUD, + "CreateLogGroup": TierHandVerified, + "CreateLogStream": TierHandVerified, + "CreateLookupTable": TierAutoCRUD, + "CreateScheduledQuery": TierAutoCRUD, + "DeleteAccountPolicy": TierAutoCRUD, + "DeleteDataProtectionPolicy": TierAutoCRUD, + "DeleteDelivery": TierAutoCRUD, + "DeleteDeliveryDestination": TierAutoCRUD, + "DeleteDeliveryDestinationPolicy": TierAutoCRUD, + "DeleteDeliverySource": TierAutoCRUD, + "DeleteDestination": TierAutoCRUD, + "DeleteIndexPolicy": TierAutoCRUD, + "DeleteIntegration": TierAutoCRUD, + "DeleteLogAnomalyDetector": TierAutoCRUD, + "DeleteLogGroup": TierHandVerified, + "DeleteLogStream": TierHandVerified, + "DeleteLookupTable": TierAutoCRUD, + "DeleteMetricFilter": TierHandVerified, + "DeleteQueryDefinition": TierAutoCRUD, + "DeleteResourcePolicy": TierAutoCRUD, + "DeleteRetentionPolicy": TierHandVerified, + "DeleteScheduledQuery": TierAutoCRUD, + "DeleteSubscriptionFilter": TierHandVerified, + "DeleteTransformer": TierAutoCRUD, + "DescribeAccountPolicies": TierAutoCRUD, + "DescribeConfigurationTemplates": TierAutoCRUD, + "DescribeDeliveries": TierAutoCRUD, + "DescribeDeliveryDestinations": TierAutoCRUD, + "DescribeDeliverySources": TierAutoCRUD, + "DescribeDestinations": TierAutoCRUD, + "DescribeExportTasks": TierAutoCRUD, + "DescribeFieldIndexes": TierAutoCRUD, + "DescribeImportTaskBatches": TierAutoCRUD, + "DescribeImportTasks": TierAutoCRUD, + "DescribeIndexPolicies": TierAutoCRUD, + "DescribeLogGroups": TierHandVerified, + "DescribeLogStreams": TierHandVerified, + "DescribeLookupTables": TierAutoCRUD, + "DescribeMetricFilters": TierHandVerified, + "DescribeQueries": TierAutoCRUD, + "DescribeQueryDefinitions": TierAutoCRUD, + "DescribeResourcePolicies": TierAutoCRUD, + "DescribeSubscriptionFilters": TierHandVerified, + "DisassociateKmsKey": TierUnimplemented, + "DisassociateSourceFromS3TableIntegration": TierUnimplemented, + "FilterLogEvents": TierHandVerified, + "GetDataProtectionPolicy": TierAutoCRUD, + "GetDelivery": TierAutoCRUD, + "GetDeliveryDestination": TierAutoCRUD, + "GetDeliveryDestinationPolicy": TierAutoCRUD, + "GetDeliverySource": TierAutoCRUD, + "GetIntegration": TierAutoCRUD, + "GetLogAnomalyDetector": TierAutoCRUD, + "GetLogEvents": TierHandVerified, + "GetLogFields": TierAutoCRUD, + "GetLogGroupFields": TierAutoCRUD, + "GetLogObject": TierAutoCRUD, + "GetLogRecord": TierAutoCRUD, + "GetLookupTable": TierAutoCRUD, + "GetQueryResults": TierAutoCRUD, + "GetScheduledQuery": TierAutoCRUD, + "GetScheduledQueryHistory": TierAutoCRUD, + "GetTransformer": TierAutoCRUD, + "ListAggregateLogGroupSummaries": TierAutoCRUD, + "ListAnomalies": TierAutoCRUD, + "ListIntegrations": TierAutoCRUD, + "ListLogAnomalyDetectors": TierAutoCRUD, + "ListLogGroups": TierAutoCRUD, + "ListLogGroupsForQuery": TierAutoCRUD, + "ListScheduledQueries": TierAutoCRUD, + "ListSourcesForS3TableIntegration": TierAutoCRUD, + "ListTagsForResource": TierHandVerified, + "ListTagsLogGroup": TierHandVerified, + "PutAccountPolicy": TierAutoCRUD, + "PutBearerTokenAuthentication": TierAutoCRUD, + "PutDataProtectionPolicy": TierAutoCRUD, + "PutDeliveryDestination": TierAutoCRUD, + "PutDeliveryDestinationPolicy": TierAutoCRUD, + "PutDeliverySource": TierAutoCRUD, + "PutDestination": TierAutoCRUD, + "PutDestinationPolicy": TierAutoCRUD, + "PutIndexPolicy": TierAutoCRUD, + "PutIntegration": TierAutoCRUD, + "PutLogEvents": TierHandVerified, + "PutLogGroupDeletionProtection": TierAutoCRUD, + "PutMetricFilter": TierHandVerified, + "PutQueryDefinition": TierAutoCRUD, + "PutResourcePolicy": TierAutoCRUD, + "PutRetentionPolicy": TierHandVerified, + "PutSubscriptionFilter": TierHandVerified, + "PutTransformer": TierAutoCRUD, + "StartLiveTail": TierUnimplemented, + "StartQuery": TierUnimplemented, + "StopQuery": TierUnimplemented, + "TagLogGroup": TierHandVerified, + "TagResource": TierHandVerified, + "TestMetricFilter": TierUnimplemented, + "TestTransformer": TierUnimplemented, + "UntagLogGroup": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAnomaly": TierAutoCRUD, + "UpdateDeliveryConfiguration": TierAutoCRUD, + "UpdateLogAnomalyDetector": TierAutoCRUD, + "UpdateLookupTable": TierAutoCRUD, + "UpdateScheduledQuery": TierAutoCRUD, + }}, + "codeartifact": {ModelBacked: true, Operations: map[string]Tier{ + "AssociateExternalConnection": TierHandVerified, + "CopyPackageVersions": TierHandVerified, + "CreateDomain": TierHandVerified, + "CreatePackageGroup": TierHandVerified, + "CreateRepository": TierHandVerified, + "DeleteDomain": TierHandVerified, + "DeleteDomainPermissionsPolicy": TierHandVerified, + "DeletePackage": TierHandVerified, + "DeletePackageGroup": TierHandVerified, + "DeletePackageVersions": TierHandVerified, + "DeleteRepository": TierHandVerified, + "DeleteRepositoryPermissionsPolicy": TierHandVerified, + "DescribeDomain": TierHandVerified, + "DescribePackage": TierHandVerified, + "DescribePackageGroup": TierHandVerified, + "DescribePackageVersion": TierHandVerified, + "DescribeRepository": TierHandVerified, + "DisassociateExternalConnection": TierHandVerified, + "DisposePackageVersions": TierHandVerified, + "GetAssociatedPackageGroup": TierHandVerified, + "GetAuthorizationToken": TierHandVerified, + "GetDomainPermissionsPolicy": TierHandVerified, + "GetPackageVersionAsset": TierHandVerified, + "GetPackageVersionReadme": TierHandVerified, + "GetRepositoryEndpoint": TierHandVerified, + "GetRepositoryPermissionsPolicy": TierHandVerified, + "ListAllowedRepositoriesForGroup": TierHandVerified, + "ListAssociatedPackages": TierHandVerified, + "ListDomains": TierHandVerified, + "ListPackageGroups": TierHandVerified, + "ListPackageVersionAssets": TierHandVerified, + "ListPackageVersionDependencies": TierHandVerified, + "ListPackageVersions": TierHandVerified, + "ListPackages": TierHandVerified, + "ListRepositories": TierHandVerified, + "ListRepositoriesInDomain": TierHandVerified, + "ListSubPackageGroups": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "PublishPackageVersion": TierHandVerified, + "PutDomainPermissionsPolicy": TierHandVerified, + "PutPackageOriginConfiguration": TierHandVerified, + "PutRepositoryPermissionsPolicy": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdatePackageGroup": TierHandVerified, + "UpdatePackageGroupOriginConfiguration": TierHandVerified, + "UpdatePackageVersionsStatus": TierHandVerified, + "UpdateRepository": TierHandVerified, + }}, + "codebuild": {ModelBacked: true, Operations: map[string]Tier{ + "BatchDeleteBuilds": TierHandVerified, + "BatchGetBuildBatches": TierAutoCRUD, + "BatchGetBuilds": TierHandVerified, + "BatchGetCommandExecutions": TierAutoCRUD, + "BatchGetFleets": TierHandVerified, + "BatchGetProjects": TierHandVerified, + "BatchGetReportGroups": TierHandVerified, + "BatchGetReports": TierAutoCRUD, + "BatchGetSandboxes": TierAutoCRUD, + "CreateFleet": TierHandVerified, + "CreateProject": TierHandVerified, + "CreateReportGroup": TierHandVerified, + "CreateWebhook": TierAutoCRUD, + "DeleteBuildBatch": TierAutoCRUD, + "DeleteFleet": TierHandVerified, + "DeleteProject": TierHandVerified, + "DeleteReport": TierAutoCRUD, + "DeleteReportGroup": TierHandVerified, + "DeleteResourcePolicy": TierAutoCRUD, + "DeleteSourceCredentials": TierHandVerified, + "DeleteWebhook": TierAutoCRUD, + "DescribeCodeCoverages": TierAutoCRUD, + "DescribeTestCases": TierAutoCRUD, + "GetReportGroupTrend": TierAutoCRUD, + "GetResourcePolicy": TierAutoCRUD, + "ImportSourceCredentials": TierHandVerified, + "InvalidateProjectCache": TierHandVerified, + "ListBuildBatches": TierAutoCRUD, + "ListBuildBatchesForProject": TierAutoCRUD, + "ListBuilds": TierHandVerified, + "ListBuildsForProject": TierHandVerified, + "ListCommandExecutionsForSandbox": TierAutoCRUD, + "ListCuratedEnvironmentImages": TierHandVerified, + "ListFleets": TierHandVerified, + "ListProjects": TierHandVerified, + "ListReportGroups": TierHandVerified, + "ListReports": TierHandVerified, + "ListReportsForReportGroup": TierHandVerified, + "ListSandboxes": TierAutoCRUD, + "ListSandboxesForProject": TierAutoCRUD, + "ListSharedProjects": TierAutoCRUD, + "ListSharedReportGroups": TierAutoCRUD, + "ListSourceCredentials": TierHandVerified, + "PutResourcePolicy": TierAutoCRUD, + "RetryBuild": TierHandVerified, + "RetryBuildBatch": TierUnimplemented, + "StartBuild": TierHandVerified, + "StartBuildBatch": TierUnimplemented, + "StartCommandExecution": TierUnimplemented, + "StartSandbox": TierUnimplemented, + "StartSandboxConnection": TierUnimplemented, + "StopBuild": TierHandVerified, + "StopBuildBatch": TierUnimplemented, + "StopSandbox": TierUnimplemented, + "UpdateFleet": TierHandVerified, + "UpdateProject": TierHandVerified, + "UpdateProjectVisibility": TierAutoCRUD, + "UpdateReportGroup": TierHandVerified, + "UpdateWebhook": TierAutoCRUD, + }}, + "codecommit": {ModelBacked: true, Operations: map[string]Tier{ + "AssociateApprovalRuleTemplateWithRepository": TierHandVerified, + "BatchAssociateApprovalRuleTemplateWithRepositories": TierHandVerified, + "BatchDescribeMergeConflicts": TierHandVerified, + "BatchDisassociateApprovalRuleTemplateFromRepositories": TierHandVerified, + "BatchGetCommits": TierHandVerified, + "BatchGetRepositories": TierHandVerified, + "CreateApprovalRuleTemplate": TierHandVerified, + "CreateBranch": TierHandVerified, + "CreateCommit": TierHandVerified, + "CreatePullRequest": TierHandVerified, + "CreatePullRequestApprovalRule": TierHandVerified, + "CreateRepository": TierHandVerified, + "CreateUnreferencedMergeCommit": TierHandVerified, + "DeleteApprovalRuleTemplate": TierHandVerified, + "DeleteBranch": TierHandVerified, + "DeleteCommentContent": TierHandVerified, + "DeleteFile": TierHandVerified, + "DeletePullRequestApprovalRule": TierHandVerified, + "DeleteRepository": TierHandVerified, + "DescribeMergeConflicts": TierHandVerified, + "DescribePullRequestEvents": TierHandVerified, + "DisassociateApprovalRuleTemplateFromRepository": TierHandVerified, + "EvaluatePullRequestApprovalRules": TierHandVerified, + "GetApprovalRuleTemplate": TierHandVerified, + "GetBlob": TierHandVerified, + "GetBranch": TierHandVerified, + "GetComment": TierHandVerified, + "GetCommentReactions": TierHandVerified, + "GetCommentsForComparedCommit": TierHandVerified, + "GetCommentsForPullRequest": TierHandVerified, + "GetCommit": TierHandVerified, + "GetDifferences": TierHandVerified, + "GetFile": TierHandVerified, + "GetFolder": TierHandVerified, + "GetMergeCommit": TierHandVerified, + "GetMergeConflicts": TierHandVerified, + "GetMergeOptions": TierHandVerified, + "GetPullRequest": TierHandVerified, + "GetPullRequestApprovalStates": TierHandVerified, + "GetPullRequestOverrideState": TierHandVerified, + "GetRepository": TierHandVerified, + "GetRepositoryTriggers": TierHandVerified, + "ListApprovalRuleTemplates": TierHandVerified, + "ListAssociatedApprovalRuleTemplatesForRepository": TierHandVerified, + "ListBranches": TierHandVerified, + "ListFileCommitHistory": TierHandVerified, + "ListPullRequests": TierHandVerified, + "ListRepositories": TierHandVerified, + "ListRepositoriesForApprovalRuleTemplate": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "MergeBranchesByFastForward": TierHandVerified, + "MergeBranchesBySquash": TierHandVerified, + "MergeBranchesByThreeWay": TierHandVerified, + "MergePullRequestByFastForward": TierHandVerified, + "MergePullRequestBySquash": TierHandVerified, + "MergePullRequestByThreeWay": TierHandVerified, + "OverridePullRequestApprovalRules": TierHandVerified, + "PostCommentForComparedCommit": TierHandVerified, + "PostCommentForPullRequest": TierHandVerified, + "PostCommentReply": TierHandVerified, + "PutCommentReaction": TierHandVerified, + "PutFile": TierHandVerified, + "PutRepositoryTriggers": TierHandVerified, + "TagResource": TierHandVerified, + "TestRepositoryTriggers": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateApprovalRuleTemplateContent": TierHandVerified, + "UpdateApprovalRuleTemplateDescription": TierHandVerified, + "UpdateApprovalRuleTemplateName": TierHandVerified, + "UpdateComment": TierHandVerified, + "UpdateDefaultBranch": TierHandVerified, + "UpdatePullRequestApprovalRuleContent": TierHandVerified, + "UpdatePullRequestApprovalState": TierHandVerified, + "UpdatePullRequestDescription": TierHandVerified, + "UpdatePullRequestStatus": TierHandVerified, + "UpdatePullRequestTitle": TierHandVerified, + "UpdateRepositoryDescription": TierHandVerified, + "UpdateRepositoryEncryptionKey": TierHandVerified, + "UpdateRepositoryName": TierHandVerified, + }}, + "codeconnections": {ModelBacked: false, Operations: map[string]Tier{ + "CreateConnection": TierHandVerified, + "CreateHost": TierHandVerified, + "CreateRepositoryLink": TierHandVerified, + "CreateSyncBlocker": TierHandVerified, + "CreateSyncConfiguration": TierHandVerified, + "DeleteConnection": TierHandVerified, + "DeleteHost": TierHandVerified, + "DeleteRepositoryLink": TierHandVerified, + "DeleteSyncConfiguration": TierHandVerified, + "DescribeConnection": TierHandVerified, + "GetConnection": TierHandVerified, + "GetHost": TierHandVerified, + "GetRepositoryLink": TierHandVerified, + "GetRepositorySyncStatus": TierHandVerified, + "GetResourceSyncStatus": TierHandVerified, + "GetSyncBlockerSummary": TierHandVerified, + "GetSyncConfiguration": TierHandVerified, + "ListConnectionOwners": TierHandVerified, + "ListConnections": TierHandVerified, + "ListHosts": TierHandVerified, + "ListRepositoryLinks": TierHandVerified, + "ListRepositorySyncDefinitions": TierHandVerified, + "ListSyncBlockerSummaries": TierHandVerified, + "ListSyncConfigurations": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "PassConnection": TierHandVerified, + "PassRepository": TierHandVerified, + "StartRepositoryLink": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateConnection": TierHandVerified, + "UpdateHost": TierHandVerified, + "UpdateRepositoryLink": TierHandVerified, + "UpdateSyncBlocker": TierHandVerified, + "UpdateSyncConfiguration": TierHandVerified, + }}, + "codedeploy": {ModelBacked: true, Operations: map[string]Tier{ + "AddTagsToOnPremisesInstances": TierUnimplemented, + "BatchGetApplicationRevisions": TierAutoCRUD, + "BatchGetApplications": TierHandVerified, + "BatchGetDeploymentGroups": TierHandVerified, + "BatchGetDeploymentInstances": TierAutoCRUD, + "BatchGetDeploymentTargets": TierAutoCRUD, + "BatchGetDeployments": TierHandVerified, + "BatchGetOnPremisesInstances": TierAutoCRUD, + "ContinueDeployment": TierUnimplemented, + "CreateApplication": TierHandVerified, + "CreateDeployment": TierHandVerified, + "CreateDeploymentConfig": TierHandVerified, + "CreateDeploymentGroup": TierHandVerified, + "DeleteApplication": TierHandVerified, + "DeleteDeploymentConfig": TierHandVerified, + "DeleteDeploymentGroup": TierHandVerified, + "DeleteGitHubAccountToken": TierAutoCRUD, + "DeleteResourcesByExternalId": TierAutoCRUD, + "DeregisterOnPremisesInstance": TierAutoCRUD, + "GetApplication": TierHandVerified, + "GetApplicationRevision": TierHandVerified, + "GetDeployment": TierHandVerified, + "GetDeploymentConfig": TierHandVerified, + "GetDeploymentGroup": TierHandVerified, + "GetDeploymentInstance": TierAutoCRUD, + "GetDeploymentTarget": TierAutoCRUD, + "GetOnPremisesInstance": TierAutoCRUD, + "ListApplicationRevisions": TierHandVerified, + "ListApplications": TierHandVerified, + "ListDeploymentConfigs": TierHandVerified, + "ListDeploymentGroups": TierHandVerified, + "ListDeploymentInstances": TierAutoCRUD, + "ListDeploymentTargets": TierAutoCRUD, + "ListDeployments": TierHandVerified, + "ListGitHubAccountTokenNames": TierAutoCRUD, + "ListOnPremisesInstances": TierAutoCRUD, + "ListTagsForResource": TierHandVerified, + "PutLifecycleEventHookExecutionStatus": TierAutoCRUD, + "RegisterApplicationRevision": TierHandVerified, + "RegisterOnPremisesInstance": TierAutoCRUD, + "RemoveTagsFromOnPremisesInstances": TierUnimplemented, + "SkipWaitTimeForInstanceTermination": TierUnimplemented, + "StopDeployment": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateApplication": TierHandVerified, + "UpdateDeploymentGroup": TierHandVerified, + }}, + "codepipeline": {ModelBacked: true, Operations: map[string]Tier{ + "AcknowledgeJob": TierHandVerified, + "AcknowledgeThirdPartyJob": TierHandVerified, + "CreateCustomActionType": TierHandVerified, + "CreatePipeline": TierHandVerified, + "DeleteCustomActionType": TierHandVerified, + "DeletePipeline": TierHandVerified, + "DeleteWebhook": TierHandVerified, + "DeregisterWebhookWithThirdParty": TierHandVerified, + "DisableStageTransition": TierHandVerified, + "EnableStageTransition": TierHandVerified, + "GetActionType": TierHandVerified, + "GetJobDetails": TierHandVerified, + "GetPipeline": TierHandVerified, + "GetPipelineExecution": TierHandVerified, + "GetPipelineState": TierHandVerified, + "GetThirdPartyJobDetails": TierHandVerified, + "ListActionExecutions": TierHandVerified, + "ListActionTypes": TierHandVerified, + "ListDeployActionExecutionTargets": TierAutoCRUD, + "ListPipelineExecutions": TierHandVerified, + "ListPipelines": TierHandVerified, + "ListRuleExecutions": TierAutoCRUD, + "ListRuleTypes": TierAutoCRUD, + "ListTagsForResource": TierHandVerified, + "ListWebhooks": TierHandVerified, + "OverrideStageCondition": TierUnimplemented, + "PollForJobs": TierHandVerified, + "PollForThirdPartyJobs": TierHandVerified, + "PutActionRevision": TierHandVerified, + "PutApprovalResult": TierHandVerified, + "PutJobFailureResult": TierHandVerified, + "PutJobSuccessResult": TierHandVerified, + "PutThirdPartyJobFailureResult": TierHandVerified, + "PutThirdPartyJobSuccessResult": TierHandVerified, + "PutWebhook": TierHandVerified, + "RegisterWebhookWithThirdParty": TierHandVerified, + "RetryStageExecution": TierHandVerified, + "RollbackStage": TierHandVerified, + "StartPipelineExecution": TierHandVerified, + "StopPipelineExecution": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateActionType": TierHandVerified, + "UpdatePipeline": TierHandVerified, + }}, + "cognitoidentity": {ModelBacked: true, Operations: map[string]Tier{ + "CreateIdentityPool": TierHandVerified, + "DeleteIdentities": TierHandVerified, + "DeleteIdentityPool": TierHandVerified, + "DescribeIdentity": TierHandVerified, + "DescribeIdentityPool": TierHandVerified, + "GetCredentialsForIdentity": TierHandVerified, + "GetId": TierHandVerified, + "GetIdentityPoolRoles": TierHandVerified, + "GetOpenIdToken": TierHandVerified, + "GetOpenIdTokenForDeveloperIdentity": TierHandVerified, + "GetPrincipalTagAttributeMap": TierHandVerified, + "ListIdentities": TierHandVerified, + "ListIdentityPools": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "LookupDeveloperIdentity": TierHandVerified, + "MergeDeveloperIdentities": TierHandVerified, + "SetIdentityPoolRoles": TierHandVerified, + "SetPrincipalTagAttributeMap": TierHandVerified, + "TagResource": TierHandVerified, + "UnlinkDeveloperIdentity": TierHandVerified, + "UnlinkIdentity": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateIdentityPool": TierHandVerified, + }}, + "cognitoidentityprovider": {ModelBacked: true, Operations: map[string]Tier{ + "AddCustomAttributes": TierUnimplemented, + "AddUserPoolClientSecret": TierUnimplemented, + "AdminAddUserToGroup": TierHandVerified, + "AdminConfirmSignUp": TierHandVerified, + "AdminCreateUser": TierHandVerified, + "AdminDeleteUser": TierHandVerified, + "AdminDeleteUserAttributes": TierHandVerified, + "AdminDisableProviderForUser": TierUnimplemented, + "AdminDisableUser": TierHandVerified, + "AdminEnableUser": TierHandVerified, + "AdminForgetDevice": TierUnimplemented, + "AdminGetDevice": TierUnimplemented, + "AdminGetUser": TierHandVerified, + "AdminInitiateAuth": TierHandVerified, + "AdminLinkProviderForUser": TierUnimplemented, + "AdminListDevices": TierUnimplemented, + "AdminListGroupsForUser": TierHandVerified, + "AdminListUserAuthEvents": TierUnimplemented, + "AdminRemoveUserFromGroup": TierHandVerified, + "AdminResetUserPassword": TierHandVerified, + "AdminRespondToAuthChallenge": TierHandVerified, + "AdminSetUserMFAPreference": TierUnimplemented, + "AdminSetUserPassword": TierHandVerified, + "AdminSetUserSettings": TierUnimplemented, + "AdminUpdateAuthEventFeedback": TierUnimplemented, + "AdminUpdateDeviceStatus": TierUnimplemented, + "AdminUpdateUserAttributes": TierHandVerified, + "AdminUserGlobalSignOut": TierHandVerified, + "AssociateSoftwareToken": TierUnimplemented, + "ChangePassword": TierHandVerified, + "CompleteWebAuthnRegistration": TierUnimplemented, + "ConfirmDevice": TierUnimplemented, + "ConfirmForgotPassword": TierHandVerified, + "ConfirmSignUp": TierHandVerified, + "CreateGroup": TierHandVerified, + "CreateIdentityProvider": TierHandVerified, + "CreateManagedLoginBranding": TierAutoCRUD, + "CreateResourceServer": TierHandVerified, + "CreateTerms": TierAutoCRUD, + "CreateUserImportJob": TierAutoCRUD, + "CreateUserPool": TierHandVerified, + "CreateUserPoolClient": TierHandVerified, + "CreateUserPoolDomain": TierAutoCRUD, + "DeleteGroup": TierHandVerified, + "DeleteIdentityProvider": TierHandVerified, + "DeleteManagedLoginBranding": TierAutoCRUD, + "DeleteResourceServer": TierHandVerified, + "DeleteTerms": TierAutoCRUD, + "DeleteUser": TierAutoCRUD, + "DeleteUserAttributes": TierAutoCRUD, + "DeleteUserPool": TierHandVerified, + "DeleteUserPoolClient": TierHandVerified, + "DeleteUserPoolClientSecret": TierAutoCRUD, + "DeleteUserPoolDomain": TierAutoCRUD, + "DeleteWebAuthnCredential": TierAutoCRUD, + "DescribeIdentityProvider": TierHandVerified, + "DescribeManagedLoginBranding": TierAutoCRUD, + "DescribeManagedLoginBrandingByClient": TierAutoCRUD, + "DescribeResourceServer": TierHandVerified, + "DescribeRiskConfiguration": TierAutoCRUD, + "DescribeTerms": TierAutoCRUD, + "DescribeUserImportJob": TierAutoCRUD, + "DescribeUserPool": TierHandVerified, + "DescribeUserPoolClient": TierHandVerified, + "DescribeUserPoolDomain": TierAutoCRUD, + "ForgetDevice": TierUnimplemented, + "ForgotPassword": TierHandVerified, + "GetCSVHeader": TierAutoCRUD, + "GetDevice": TierAutoCRUD, + "GetGroup": TierHandVerified, + "GetIdentityProviderByIdentifier": TierHandVerified, + "GetLogDeliveryConfiguration": TierAutoCRUD, + "GetSigningCertificate": TierAutoCRUD, + "GetTokensFromRefreshToken": TierAutoCRUD, + "GetUICustomization": TierAutoCRUD, + "GetUser": TierHandVerified, + "GetUserAttributeVerificationCode": TierAutoCRUD, + "GetUserAuthFactors": TierAutoCRUD, + "GetUserPoolMfaConfig": TierHandVerified, + "GlobalSignOut": TierHandVerified, + "InitiateAuth": TierHandVerified, + "ListDevices": TierAutoCRUD, + "ListGroups": TierHandVerified, + "ListIdentityProviders": TierHandVerified, + "ListResourceServers": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListTerms": TierAutoCRUD, + "ListUserImportJobs": TierAutoCRUD, + "ListUserPoolClientSecrets": TierAutoCRUD, + "ListUserPoolClients": TierHandVerified, + "ListUserPools": TierHandVerified, + "ListUsers": TierHandVerified, + "ListUsersInGroup": TierHandVerified, + "ListWebAuthnCredentials": TierAutoCRUD, + "ResendConfirmationCode": TierUnimplemented, + "RespondToAuthChallenge": TierHandVerified, + "RevokeToken": TierHandVerified, + "SetLogDeliveryConfiguration": TierUnimplemented, + "SetRiskConfiguration": TierUnimplemented, + "SetUICustomization": TierUnimplemented, + "SetUserMFAPreference": TierUnimplemented, + "SetUserPoolMfaConfig": TierHandVerified, + "SetUserSettings": TierUnimplemented, + "SignUp": TierHandVerified, + "StartUserImportJob": TierUnimplemented, + "StartWebAuthnRegistration": TierUnimplemented, + "StopUserImportJob": TierUnimplemented, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAuthEventFeedback": TierAutoCRUD, + "UpdateDeviceStatus": TierAutoCRUD, + "UpdateGroup": TierHandVerified, + "UpdateIdentityProvider": TierHandVerified, + "UpdateManagedLoginBranding": TierAutoCRUD, + "UpdateResourceServer": TierHandVerified, + "UpdateTerms": TierAutoCRUD, + "UpdateUserAttributes": TierAutoCRUD, + "UpdateUserPool": TierHandVerified, + "UpdateUserPoolClient": TierHandVerified, + "UpdateUserPoolDomain": TierAutoCRUD, + "VerifySoftwareToken": TierUnimplemented, + "VerifyUserAttribute": TierUnimplemented, + }}, + "configservice": {ModelBacked: true, Operations: map[string]Tier{ + "AssociateResourceTypes": TierUnimplemented, + "BatchGetAggregateResourceConfig": TierAutoCRUD, + "BatchGetResourceConfig": TierAutoCRUD, + "DeleteAggregationAuthorization": TierHandVerified, + "DeleteConfigRule": TierHandVerified, + "DeleteConfigurationAggregator": TierHandVerified, + "DeleteConfigurationRecorder": TierHandVerified, + "DeleteConformancePack": TierHandVerified, + "DeleteDeliveryChannel": TierHandVerified, + "DeleteEvaluationResults": TierAutoCRUD, + "DeleteOrganizationConfigRule": TierAutoCRUD, + "DeleteOrganizationConformancePack": TierAutoCRUD, + "DeletePendingAggregationRequest": TierAutoCRUD, + "DeleteRemediationConfiguration": TierHandVerified, + "DeleteRemediationExceptions": TierHandVerified, + "DeleteResourceConfig": TierAutoCRUD, + "DeleteRetentionConfiguration": TierHandVerified, + "DeleteServiceLinkedConfigurationRecorder": TierAutoCRUD, + "DeleteStoredQuery": TierHandVerified, + "DeliverConfigSnapshot": TierHandVerified, + "DescribeAggregateComplianceByConfigRules": TierAutoCRUD, + "DescribeAggregateComplianceByConformancePacks": TierAutoCRUD, + "DescribeAggregationAuthorizations": TierHandVerified, + "DescribeComplianceByConfigRule": TierAutoCRUD, + "DescribeComplianceByResource": TierAutoCRUD, + "DescribeConfigRuleEvaluationStatus": TierHandVerified, + "DescribeConfigRules": TierHandVerified, + "DescribeConfigurationAggregatorSourcesStatus": TierHandVerified, + "DescribeConfigurationAggregators": TierHandVerified, + "DescribeConfigurationRecorderStatus": TierHandVerified, + "DescribeConfigurationRecorders": TierHandVerified, + "DescribeConformancePackCompliance": TierHandVerified, + "DescribeConformancePackStatus": TierHandVerified, + "DescribeConformancePacks": TierHandVerified, + "DescribeDeliveryChannelStatus": TierHandVerified, + "DescribeDeliveryChannels": TierHandVerified, + "DescribeOrganizationConfigRuleStatuses": TierAutoCRUD, + "DescribeOrganizationConfigRules": TierAutoCRUD, + "DescribeOrganizationConformancePackStatuses": TierAutoCRUD, + "DescribeOrganizationConformancePacks": TierAutoCRUD, + "DescribePendingAggregationRequests": TierHandVerified, + "DescribeRemediationConfigurations": TierHandVerified, + "DescribeRemediationExceptions": TierHandVerified, + "DescribeRemediationExecutionStatus": TierHandVerified, + "DescribeRetentionConfigurations": TierHandVerified, + "DisassociateResourceTypes": TierUnimplemented, + "GetAggregateComplianceDetailsByConfigRule": TierAutoCRUD, + "GetAggregateConfigRuleComplianceSummary": TierAutoCRUD, + "GetAggregateConformancePackComplianceSummary": TierAutoCRUD, + "GetAggregateDiscoveredResourceCounts": TierAutoCRUD, + "GetAggregateResourceConfig": TierAutoCRUD, + "GetComplianceDetailsByConfigRule": TierAutoCRUD, + "GetComplianceDetailsByResource": TierAutoCRUD, + "GetComplianceSummaryByConfigRule": TierAutoCRUD, + "GetComplianceSummaryByResourceType": TierAutoCRUD, + "GetConformancePackComplianceDetails": TierAutoCRUD, + "GetConformancePackComplianceSummary": TierAutoCRUD, + "GetCustomRulePolicy": TierAutoCRUD, + "GetDiscoveredResourceCounts": TierAutoCRUD, + "GetOrganizationConfigRuleDetailedStatus": TierAutoCRUD, + "GetOrganizationConformancePackDetailedStatus": TierAutoCRUD, + "GetOrganizationCustomRulePolicy": TierAutoCRUD, + "GetResourceConfigHistory": TierAutoCRUD, + "GetResourceEvaluationSummary": TierAutoCRUD, + "GetStoredQuery": TierHandVerified, + "ListAggregateDiscoveredResources": TierAutoCRUD, + "ListConfigurationRecorders": TierAutoCRUD, + "ListConformancePackComplianceScores": TierAutoCRUD, + "ListDiscoveredResources": TierAutoCRUD, + "ListResourceEvaluations": TierAutoCRUD, + "ListStoredQueries": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "PutAggregationAuthorization": TierHandVerified, + "PutConfigRule": TierHandVerified, + "PutConfigurationAggregator": TierHandVerified, + "PutConfigurationRecorder": TierHandVerified, + "PutConformancePack": TierHandVerified, + "PutDeliveryChannel": TierHandVerified, + "PutEvaluations": TierHandVerified, + "PutExternalEvaluation": TierHandVerified, + "PutOrganizationConfigRule": TierAutoCRUD, + "PutOrganizationConformancePack": TierAutoCRUD, + "PutRemediationConfigurations": TierHandVerified, + "PutRemediationExceptions": TierHandVerified, + "PutResourceConfig": TierAutoCRUD, + "PutRetentionConfiguration": TierHandVerified, + "PutServiceLinkedConfigurationRecorder": TierAutoCRUD, + "PutStoredQuery": TierHandVerified, + "SelectAggregateResourceConfig": TierUnimplemented, + "SelectResourceConfig": TierUnimplemented, + "StartConfigRulesEvaluation": TierHandVerified, + "StartConfigurationRecorder": TierHandVerified, + "StartRemediationExecution": TierHandVerified, + "StartResourceEvaluation": TierUnimplemented, + "StopConfigurationRecorder": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + }}, + "costexplorer": {ModelBacked: true, Operations: map[string]Tier{ + "CreateAnomalyMonitor": TierHandVerified, + "CreateAnomalySubscription": TierHandVerified, + "CreateCostCategoryDefinition": TierHandVerified, + "DeleteAnomalyMonitor": TierHandVerified, + "DeleteAnomalySubscription": TierHandVerified, + "DeleteCostCategoryDefinition": TierHandVerified, + "DescribeCostCategoryDefinition": TierHandVerified, + "GetAnomalies": TierHandVerified, + "GetAnomalyMonitors": TierHandVerified, + "GetAnomalySubscriptions": TierHandVerified, + "GetApproximateUsageRecords": TierHandVerified, + "GetCommitmentPurchaseAnalysis": TierHandVerified, + "GetCostAndUsage": TierHandVerified, + "GetCostAndUsageComparisons": TierHandVerified, + "GetCostAndUsageWithResources": TierHandVerified, + "GetCostCategories": TierHandVerified, + "GetCostComparisonDrivers": TierHandVerified, + "GetCostForecast": TierHandVerified, + "GetDimensionValues": TierHandVerified, + "GetReservationCoverage": TierHandVerified, + "GetReservationPurchaseRecommendation": TierHandVerified, + "GetReservationUtilization": TierHandVerified, + "GetRightsizingRecommendation": TierHandVerified, + "GetSavingsPlanPurchaseRecommendationDetails": TierHandVerified, + "GetSavingsPlansCoverage": TierHandVerified, + "GetSavingsPlansPurchaseRecommendation": TierHandVerified, + "GetSavingsPlansUtilization": TierHandVerified, + "GetSavingsPlansUtilizationDetails": TierHandVerified, + "GetTags": TierHandVerified, + "GetUsageForecast": TierHandVerified, + "ListCommitmentPurchaseAnalyses": TierHandVerified, + "ListCostAllocationTagBackfillHistory": TierHandVerified, + "ListCostAllocationTags": TierHandVerified, + "ListCostCategoryDefinitions": TierHandVerified, + "ListCostCategoryResourceAssociations": TierHandVerified, + "ListSavingsPlansPurchaseRecommendationGeneration": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ProvideAnomalyFeedback": TierHandVerified, + "StartCommitmentPurchaseAnalysis": TierHandVerified, + "StartCostAllocationTagBackfill": TierHandVerified, + "StartSavingsPlansPurchaseRecommendationGeneration": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAnomalyMonitor": TierHandVerified, + "UpdateAnomalySubscription": TierHandVerified, + "UpdateCostAllocationTagsStatus": TierHandVerified, + "UpdateCostCategoryDefinition": TierHandVerified, + }}, + "dms": {ModelBacked: false, Operations: map[string]Tier{ + "AddTagsToResource": TierHandVerified, + "CreateEndpoint": TierHandVerified, + "CreateEventSubscription": TierHandVerified, + "CreateReplicationInstance": TierHandVerified, + "CreateReplicationTask": TierHandVerified, + "DeleteEndpoint": TierHandVerified, + "DeleteEventSubscription": TierHandVerified, + "DeleteReplicationInstance": TierHandVerified, + "DeleteReplicationTask": TierHandVerified, + "DescribeAccountAttributes": TierHandVerified, + "DescribeCertificates": TierHandVerified, + "DescribeConnections": TierHandVerified, + "DescribeEndpointTypes": TierHandVerified, + "DescribeEndpoints": TierHandVerified, + "DescribeEventCategories": TierHandVerified, + "DescribeEventSubscriptions": TierHandVerified, + "DescribeEvents": TierHandVerified, + "DescribeOrderableReplicationInstances": TierHandVerified, + "DescribeReplicationInstances": TierHandVerified, + "DescribeReplicationSubnetGroups": TierHandVerified, + "DescribeReplicationTaskAssessmentResults": TierHandVerified, + "DescribeReplicationTasks": TierHandVerified, + "DescribeTableStatistics": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ModifyEndpoint": TierHandVerified, + "ModifyReplicationInstance": TierHandVerified, + "ModifyReplicationTask": TierHandVerified, + "RebootReplicationInstance": TierHandVerified, + "ReloadTables": TierHandVerified, + "RemoveTagsFromResource": TierHandVerified, + "StartReplicationTask": TierHandVerified, + "StopReplicationTask": TierHandVerified, + "TestConnection": TierHandVerified, + }}, + "docdb": {ModelBacked: true, Operations: map[string]Tier{ + "AddSourceIdentifierToSubscription": TierHandVerified, + "AddTagsToResource": TierHandVerified, + "ApplyPendingMaintenanceAction": TierHandVerified, + "CopyDBClusterParameterGroup": TierHandVerified, + "CopyDBClusterSnapshot": TierHandVerified, + "CreateDBCluster": TierHandVerified, + "CreateDBClusterParameterGroup": TierHandVerified, + "CreateDBClusterSnapshot": TierHandVerified, + "CreateDBInstance": TierHandVerified, + "CreateDBSubnetGroup": TierHandVerified, + "CreateEventSubscription": TierHandVerified, + "CreateGlobalCluster": TierHandVerified, + "DeleteDBCluster": TierHandVerified, + "DeleteDBClusterParameterGroup": TierHandVerified, + "DeleteDBClusterSnapshot": TierHandVerified, + "DeleteDBInstance": TierHandVerified, + "DeleteDBSubnetGroup": TierHandVerified, + "DeleteEventSubscription": TierHandVerified, + "DeleteGlobalCluster": TierHandVerified, + "DescribeCertificates": TierHandVerified, + "DescribeDBClusterParameterGroups": TierHandVerified, + "DescribeDBClusterParameters": TierHandVerified, + "DescribeDBClusterSnapshotAttributes": TierHandVerified, + "DescribeDBClusterSnapshots": TierHandVerified, + "DescribeDBClusters": TierHandVerified, + "DescribeDBEngineVersions": TierHandVerified, + "DescribeDBInstances": TierHandVerified, + "DescribeDBSubnetGroups": TierHandVerified, + "DescribeEngineDefaultClusterParameters": TierHandVerified, + "DescribeEventCategories": TierHandVerified, + "DescribeEventSubscriptions": TierHandVerified, + "DescribeEvents": TierHandVerified, + "DescribeGlobalClusters": TierHandVerified, + "DescribeOrderableDBInstanceOptions": TierHandVerified, + "DescribePendingMaintenanceActions": TierHandVerified, + "FailoverDBCluster": TierHandVerified, + "FailoverGlobalCluster": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ModifyDBCluster": TierHandVerified, + "ModifyDBClusterParameterGroup": TierHandVerified, + "ModifyDBClusterSnapshotAttribute": TierHandVerified, + "ModifyDBInstance": TierHandVerified, + "ModifyDBSubnetGroup": TierHandVerified, + "ModifyEventSubscription": TierHandVerified, + "ModifyGlobalCluster": TierHandVerified, + "RebootDBInstance": TierHandVerified, + "RemoveFromGlobalCluster": TierHandVerified, + "RemoveSourceIdentifierFromSubscription": TierHandVerified, + "RemoveTagsFromResource": TierHandVerified, + "ResetDBClusterParameterGroup": TierHandVerified, + "RestoreDBClusterFromSnapshot": TierHandVerified, + "RestoreDBClusterToPointInTime": TierHandVerified, + "StartDBCluster": TierHandVerified, + "StopDBCluster": TierHandVerified, + "SwitchoverGlobalCluster": TierHandVerified, + }}, + "dynamodb": {ModelBacked: true, Operations: map[string]Tier{ + "BatchExecuteStatement": TierUnimplemented, + "BatchGetItem": TierHandVerified, + "BatchWriteItem": TierHandVerified, + "CreateBackup": TierAutoCRUD, + "CreateGlobalTable": TierAutoCRUD, + "CreateTable": TierHandVerified, + "DeleteBackup": TierAutoCRUD, + "DeleteItem": TierHandVerified, + "DeleteResourcePolicy": TierAutoCRUD, + "DeleteTable": TierHandVerified, + "DescribeBackup": TierAutoCRUD, + "DescribeContinuousBackups": TierAutoCRUD, + "DescribeContributorInsights": TierAutoCRUD, + "DescribeEndpoints": TierAutoCRUD, + "DescribeExport": TierAutoCRUD, + "DescribeGlobalTable": TierAutoCRUD, + "DescribeGlobalTableSettings": TierAutoCRUD, + "DescribeImport": TierAutoCRUD, + "DescribeKinesisStreamingDestination": TierAutoCRUD, + "DescribeLimits": TierAutoCRUD, + "DescribeTable": TierHandVerified, + "DescribeTableReplicaAutoScaling": TierAutoCRUD, + "DescribeTimeToLive": TierHandVerified, + "DisableKinesisStreamingDestination": TierUnimplemented, + "EnableKinesisStreamingDestination": TierUnimplemented, + "ExecuteStatement": TierUnimplemented, + "ExecuteTransaction": TierUnimplemented, + "ExportTableToPointInTime": TierUnimplemented, + "GetItem": TierHandVerified, + "GetResourcePolicy": TierAutoCRUD, + "ImportTable": TierUnimplemented, + "ListBackups": TierAutoCRUD, + "ListContributorInsights": TierAutoCRUD, + "ListExports": TierAutoCRUD, + "ListGlobalTables": TierAutoCRUD, + "ListImports": TierAutoCRUD, + "ListTables": TierHandVerified, + "ListTagsOfResource": TierHandVerified, + "PutItem": TierHandVerified, + "PutResourcePolicy": TierAutoCRUD, + "Query": TierHandVerified, + "RestoreTableFromBackup": TierUnimplemented, + "RestoreTableToPointInTime": TierUnimplemented, + "Scan": TierHandVerified, + "TagResource": TierHandVerified, + "TransactGetItems": TierHandVerified, + "TransactWriteItems": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateContinuousBackups": TierAutoCRUD, + "UpdateContributorInsights": TierAutoCRUD, + "UpdateGlobalTable": TierAutoCRUD, + "UpdateGlobalTableSettings": TierAutoCRUD, + "UpdateItem": TierHandVerified, + "UpdateKinesisStreamingDestination": TierAutoCRUD, + "UpdateTable": TierHandVerified, + "UpdateTableReplicaAutoScaling": TierAutoCRUD, + "UpdateTimeToLive": TierHandVerified, + }}, + "dynamodbstreams": {ModelBacked: true, Operations: map[string]Tier{ + "DescribeStream": TierHandVerified, + "GetRecords": TierHandVerified, + "GetShardIterator": TierHandVerified, + "ListStreams": TierHandVerified, + }}, + "ebs": {ModelBacked: true, Operations: map[string]Tier{ + "CompleteSnapshot": TierHandVerified, + "GetSnapshotBlock": TierHandVerified, + "ListChangedBlocks": TierHandVerified, + "ListSnapshotBlocks": TierHandVerified, + "PutSnapshotBlock": TierHandVerified, + "StartSnapshot": TierHandVerified, + }}, + "ec2": {ModelBacked: true, Operations: map[string]Tier{ + "AcceptAddressTransfer": TierUnimplemented, + "AcceptCapacityReservationBillingOwnership": TierUnimplemented, + "AcceptReservedInstancesExchangeQuote": TierUnimplemented, + "AcceptTransitGatewayMulticastDomainAssociations": TierUnimplemented, + "AcceptTransitGatewayPeeringAttachment": TierUnimplemented, + "AcceptTransitGatewayVpcAttachment": TierUnimplemented, + "AcceptVpcEndpointConnections": TierUnimplemented, + "AcceptVpcPeeringConnection": TierUnimplemented, + "AdvertiseByoipCidr": TierUnimplemented, + "AllocateAddress": TierHandVerified, + "AllocateHosts": TierUnimplemented, + "AllocateIpamPoolCidr": TierUnimplemented, + "ApplySecurityGroupsToClientVpnTargetNetwork": TierUnimplemented, + "AssignIpv6Addresses": TierUnimplemented, + "AssignPrivateIpAddresses": TierUnimplemented, + "AssignPrivateNatGatewayAddress": TierUnimplemented, + "AssociateAddress": TierHandVerified, + "AssociateCapacityReservationBillingOwner": TierUnimplemented, + "AssociateClientVpnTargetNetwork": TierUnimplemented, + "AssociateDhcpOptions": TierUnimplemented, + "AssociateEnclaveCertificateIamRole": TierUnimplemented, + "AssociateIamInstanceProfile": TierUnimplemented, + "AssociateInstanceEventWindow": TierUnimplemented, + "AssociateIpamByoasn": TierUnimplemented, + "AssociateIpamResourceDiscovery": TierUnimplemented, + "AssociateNatGatewayAddress": TierUnimplemented, + "AssociateRouteServer": TierUnimplemented, + "AssociateRouteTable": TierHandVerified, + "AssociateSecurityGroupVpc": TierUnimplemented, + "AssociateSubnetCidrBlock": TierUnimplemented, + "AssociateTransitGatewayMulticastDomain": TierUnimplemented, + "AssociateTransitGatewayPolicyTable": TierUnimplemented, + "AssociateTransitGatewayRouteTable": TierUnimplemented, + "AssociateTrunkInterface": TierUnimplemented, + "AssociateVpcCidrBlock": TierUnimplemented, + "AttachClassicLinkVpc": TierUnimplemented, + "AttachInternetGateway": TierHandVerified, + "AttachNetworkInterface": TierUnimplemented, + "AttachVerifiedAccessTrustProvider": TierUnimplemented, + "AttachVolume": TierHandVerified, + "AttachVpnGateway": TierUnimplemented, + "AuthorizeClientVpnIngress": TierUnimplemented, + "AuthorizeSecurityGroupEgress": TierHandVerified, + "AuthorizeSecurityGroupIngress": TierHandVerified, + "BundleInstance": TierUnimplemented, + "CancelBundleTask": TierUnimplemented, + "CancelCapacityReservation": TierUnimplemented, + "CancelCapacityReservationFleets": TierUnimplemented, + "CancelConversionTask": TierUnimplemented, + "CancelDeclarativePoliciesReport": TierUnimplemented, + "CancelExportTask": TierUnimplemented, + "CancelImageLaunchPermission": TierUnimplemented, + "CancelImportTask": TierUnimplemented, + "CancelReservedInstancesListing": TierUnimplemented, + "CancelSpotFleetRequests": TierUnimplemented, + "CancelSpotInstanceRequests": TierUnimplemented, + "ConfirmProductInstance": TierUnimplemented, + "CopyFpgaImage": TierUnimplemented, + "CopyImage": TierHandVerified, + "CopySnapshot": TierHandVerified, + "CopyVolumes": TierUnimplemented, + "CreateCapacityManagerDataExport": TierUnimplemented, + "CreateCapacityReservation": TierUnimplemented, + "CreateCapacityReservationBySplitting": TierUnimplemented, + "CreateCapacityReservationFleet": TierUnimplemented, + "CreateCarrierGateway": TierUnimplemented, + "CreateClientVpnEndpoint": TierUnimplemented, + "CreateClientVpnRoute": TierUnimplemented, + "CreateCoipCidr": TierUnimplemented, + "CreateCoipPool": TierUnimplemented, + "CreateCustomerGateway": TierUnimplemented, + "CreateDefaultSubnet": TierUnimplemented, + "CreateDefaultVpc": TierUnimplemented, + "CreateDelegateMacVolumeOwnershipTask": TierUnimplemented, + "CreateDhcpOptions": TierUnimplemented, + "CreateEgressOnlyInternetGateway": TierUnimplemented, + "CreateFleet": TierUnimplemented, + "CreateFlowLogs": TierUnimplemented, + "CreateFpgaImage": TierUnimplemented, + "CreateImage": TierHandVerified, + "CreateImageUsageReport": TierUnimplemented, + "CreateInstanceConnectEndpoint": TierUnimplemented, + "CreateInstanceEventWindow": TierUnimplemented, + "CreateInstanceExportTask": TierUnimplemented, + "CreateInternetGateway": TierHandVerified, + "CreateInterruptibleCapacityReservationAllocation": TierUnimplemented, + "CreateIpam": TierUnimplemented, + "CreateIpamExternalResourceVerificationToken": TierUnimplemented, + "CreateIpamPolicy": TierUnimplemented, + "CreateIpamPool": TierUnimplemented, + "CreateIpamPrefixListResolver": TierUnimplemented, + "CreateIpamPrefixListResolverTarget": TierUnimplemented, + "CreateIpamResourceDiscovery": TierUnimplemented, + "CreateIpamScope": TierUnimplemented, + "CreateKeyPair": TierHandVerified, + "CreateLaunchTemplate": TierUnimplemented, + "CreateLaunchTemplateVersion": TierUnimplemented, + "CreateLocalGatewayRoute": TierUnimplemented, + "CreateLocalGatewayRouteTable": TierUnimplemented, + "CreateLocalGatewayRouteTableVirtualInterfaceGroupAssociation": TierUnimplemented, + "CreateLocalGatewayRouteTableVpcAssociation": TierUnimplemented, + "CreateLocalGatewayVirtualInterface": TierUnimplemented, + "CreateLocalGatewayVirtualInterfaceGroup": TierUnimplemented, + "CreateMacSystemIntegrityProtectionModificationTask": TierUnimplemented, + "CreateManagedPrefixList": TierUnimplemented, + "CreateNatGateway": TierUnimplemented, + "CreateNetworkAcl": TierHandVerified, + "CreateNetworkAclEntry": TierHandVerified, + "CreateNetworkInsightsAccessScope": TierUnimplemented, + "CreateNetworkInsightsPath": TierUnimplemented, + "CreateNetworkInterface": TierUnimplemented, + "CreateNetworkInterfacePermission": TierUnimplemented, + "CreatePlacementGroup": TierUnimplemented, + "CreatePublicIpv4Pool": TierUnimplemented, + "CreateReplaceRootVolumeTask": TierUnimplemented, + "CreateReservedInstancesListing": TierUnimplemented, + "CreateRestoreImageTask": TierUnimplemented, + "CreateRoute": TierHandVerified, + "CreateRouteServer": TierUnimplemented, + "CreateRouteServerEndpoint": TierUnimplemented, + "CreateRouteServerPeer": TierUnimplemented, + "CreateRouteTable": TierHandVerified, + "CreateSecondaryNetwork": TierUnimplemented, + "CreateSecondarySubnet": TierUnimplemented, + "CreateSecurityGroup": TierHandVerified, + "CreateSnapshot": TierHandVerified, + "CreateSnapshots": TierUnimplemented, + "CreateSpotDatafeedSubscription": TierUnimplemented, + "CreateStoreImageTask": TierUnimplemented, + "CreateSubnet": TierHandVerified, + "CreateSubnetCidrReservation": TierUnimplemented, + "CreateTags": TierHandVerified, + "CreateTrafficMirrorFilter": TierUnimplemented, + "CreateTrafficMirrorFilterRule": TierUnimplemented, + "CreateTrafficMirrorSession": TierUnimplemented, + "CreateTrafficMirrorTarget": TierUnimplemented, + "CreateTransitGateway": TierUnimplemented, + "CreateTransitGatewayConnect": TierUnimplemented, + "CreateTransitGatewayConnectPeer": TierUnimplemented, + "CreateTransitGatewayMeteringPolicy": TierUnimplemented, + "CreateTransitGatewayMeteringPolicyEntry": TierUnimplemented, + "CreateTransitGatewayMulticastDomain": TierUnimplemented, + "CreateTransitGatewayPeeringAttachment": TierUnimplemented, + "CreateTransitGatewayPolicyTable": TierUnimplemented, + "CreateTransitGatewayPrefixListReference": TierUnimplemented, + "CreateTransitGatewayRoute": TierUnimplemented, + "CreateTransitGatewayRouteTable": TierUnimplemented, + "CreateTransitGatewayRouteTableAnnouncement": TierUnimplemented, + "CreateTransitGatewayVpcAttachment": TierUnimplemented, + "CreateVerifiedAccessEndpoint": TierUnimplemented, + "CreateVerifiedAccessGroup": TierUnimplemented, + "CreateVerifiedAccessInstance": TierUnimplemented, + "CreateVerifiedAccessTrustProvider": TierUnimplemented, + "CreateVolume": TierHandVerified, + "CreateVpc": TierHandVerified, + "CreateVpcBlockPublicAccessExclusion": TierUnimplemented, + "CreateVpcEncryptionControl": TierUnimplemented, + "CreateVpcEndpoint": TierUnimplemented, + "CreateVpcEndpointConnectionNotification": TierUnimplemented, + "CreateVpcEndpointServiceConfiguration": TierUnimplemented, + "CreateVpcPeeringConnection": TierUnimplemented, + "CreateVpnConcentrator": TierUnimplemented, + "CreateVpnConnection": TierUnimplemented, + "CreateVpnConnectionRoute": TierUnimplemented, + "CreateVpnGateway": TierUnimplemented, + "DeleteCapacityManagerDataExport": TierUnimplemented, + "DeleteCarrierGateway": TierUnimplemented, + "DeleteClientVpnEndpoint": TierUnimplemented, + "DeleteClientVpnRoute": TierUnimplemented, + "DeleteCoipCidr": TierUnimplemented, + "DeleteCoipPool": TierUnimplemented, + "DeleteCustomerGateway": TierUnimplemented, + "DeleteDhcpOptions": TierUnimplemented, + "DeleteEgressOnlyInternetGateway": TierUnimplemented, + "DeleteFleets": TierUnimplemented, + "DeleteFlowLogs": TierUnimplemented, + "DeleteFpgaImage": TierUnimplemented, + "DeleteImageUsageReport": TierUnimplemented, + "DeleteInstanceConnectEndpoint": TierUnimplemented, + "DeleteInstanceEventWindow": TierUnimplemented, + "DeleteInternetGateway": TierUnimplemented, + "DeleteIpam": TierUnimplemented, + "DeleteIpamExternalResourceVerificationToken": TierUnimplemented, + "DeleteIpamPolicy": TierUnimplemented, + "DeleteIpamPool": TierUnimplemented, + "DeleteIpamPrefixListResolver": TierUnimplemented, + "DeleteIpamPrefixListResolverTarget": TierUnimplemented, + "DeleteIpamResourceDiscovery": TierUnimplemented, + "DeleteIpamScope": TierUnimplemented, + "DeleteKeyPair": TierHandVerified, + "DeleteLaunchTemplate": TierUnimplemented, + "DeleteLaunchTemplateVersions": TierUnimplemented, + "DeleteLocalGatewayRoute": TierUnimplemented, + "DeleteLocalGatewayRouteTable": TierUnimplemented, + "DeleteLocalGatewayRouteTableVirtualInterfaceGroupAssociation": TierUnimplemented, + "DeleteLocalGatewayRouteTableVpcAssociation": TierUnimplemented, + "DeleteLocalGatewayVirtualInterface": TierUnimplemented, + "DeleteLocalGatewayVirtualInterfaceGroup": TierUnimplemented, + "DeleteManagedPrefixList": TierUnimplemented, + "DeleteNatGateway": TierUnimplemented, + "DeleteNetworkAcl": TierHandVerified, + "DeleteNetworkAclEntry": TierUnimplemented, + "DeleteNetworkInsightsAccessScope": TierUnimplemented, + "DeleteNetworkInsightsAccessScopeAnalysis": TierUnimplemented, + "DeleteNetworkInsightsAnalysis": TierUnimplemented, + "DeleteNetworkInsightsPath": TierUnimplemented, + "DeleteNetworkInterface": TierUnimplemented, + "DeleteNetworkInterfacePermission": TierUnimplemented, + "DeletePlacementGroup": TierUnimplemented, + "DeletePublicIpv4Pool": TierUnimplemented, + "DeleteQueuedReservedInstances": TierUnimplemented, + "DeleteRoute": TierHandVerified, + "DeleteRouteServer": TierUnimplemented, + "DeleteRouteServerEndpoint": TierUnimplemented, + "DeleteRouteServerPeer": TierUnimplemented, + "DeleteRouteTable": TierHandVerified, + "DeleteSecondaryNetwork": TierUnimplemented, + "DeleteSecondarySubnet": TierUnimplemented, + "DeleteSecurityGroup": TierHandVerified, + "DeleteSnapshot": TierHandVerified, + "DeleteSpotDatafeedSubscription": TierUnimplemented, + "DeleteSubnet": TierHandVerified, + "DeleteSubnetCidrReservation": TierUnimplemented, + "DeleteTags": TierHandVerified, + "DeleteTrafficMirrorFilter": TierUnimplemented, + "DeleteTrafficMirrorFilterRule": TierUnimplemented, + "DeleteTrafficMirrorSession": TierUnimplemented, + "DeleteTrafficMirrorTarget": TierUnimplemented, + "DeleteTransitGateway": TierUnimplemented, + "DeleteTransitGatewayConnect": TierUnimplemented, + "DeleteTransitGatewayConnectPeer": TierUnimplemented, + "DeleteTransitGatewayMeteringPolicy": TierUnimplemented, + "DeleteTransitGatewayMeteringPolicyEntry": TierUnimplemented, + "DeleteTransitGatewayMulticastDomain": TierUnimplemented, + "DeleteTransitGatewayPeeringAttachment": TierUnimplemented, + "DeleteTransitGatewayPolicyTable": TierUnimplemented, + "DeleteTransitGatewayPrefixListReference": TierUnimplemented, + "DeleteTransitGatewayRoute": TierUnimplemented, + "DeleteTransitGatewayRouteTable": TierUnimplemented, + "DeleteTransitGatewayRouteTableAnnouncement": TierUnimplemented, + "DeleteTransitGatewayVpcAttachment": TierUnimplemented, + "DeleteVerifiedAccessEndpoint": TierUnimplemented, + "DeleteVerifiedAccessGroup": TierUnimplemented, + "DeleteVerifiedAccessInstance": TierUnimplemented, + "DeleteVerifiedAccessTrustProvider": TierUnimplemented, + "DeleteVolume": TierHandVerified, + "DeleteVpc": TierHandVerified, + "DeleteVpcBlockPublicAccessExclusion": TierUnimplemented, + "DeleteVpcEncryptionControl": TierUnimplemented, + "DeleteVpcEndpointConnectionNotifications": TierUnimplemented, + "DeleteVpcEndpointServiceConfigurations": TierUnimplemented, + "DeleteVpcEndpoints": TierUnimplemented, + "DeleteVpcPeeringConnection": TierUnimplemented, + "DeleteVpnConcentrator": TierUnimplemented, + "DeleteVpnConnection": TierUnimplemented, + "DeleteVpnConnectionRoute": TierUnimplemented, + "DeleteVpnGateway": TierUnimplemented, + "DeprovisionByoipCidr": TierUnimplemented, + "DeprovisionIpamByoasn": TierUnimplemented, + "DeprovisionIpamPoolCidr": TierUnimplemented, + "DeprovisionPublicIpv4PoolCidr": TierUnimplemented, + "DeregisterImage": TierHandVerified, + "DeregisterInstanceEventNotificationAttributes": TierUnimplemented, + "DeregisterTransitGatewayMulticastGroupMembers": TierUnimplemented, + "DeregisterTransitGatewayMulticastGroupSources": TierUnimplemented, + "DescribeAccountAttributes": TierUnimplemented, + "DescribeAddressTransfers": TierUnimplemented, + "DescribeAddresses": TierHandVerified, + "DescribeAddressesAttribute": TierUnimplemented, + "DescribeAggregateIdFormat": TierUnimplemented, + "DescribeAvailabilityZones": TierHandVerified, + "DescribeAwsNetworkPerformanceMetricSubscriptions": TierUnimplemented, + "DescribeBundleTasks": TierUnimplemented, + "DescribeByoipCidrs": TierUnimplemented, + "DescribeCapacityBlockExtensionHistory": TierUnimplemented, + "DescribeCapacityBlockExtensionOfferings": TierUnimplemented, + "DescribeCapacityBlockOfferings": TierUnimplemented, + "DescribeCapacityBlockStatus": TierUnimplemented, + "DescribeCapacityBlocks": TierUnimplemented, + "DescribeCapacityManagerDataExports": TierUnimplemented, + "DescribeCapacityReservationBillingRequests": TierUnimplemented, + "DescribeCapacityReservationFleets": TierUnimplemented, + "DescribeCapacityReservationTopology": TierUnimplemented, + "DescribeCapacityReservations": TierUnimplemented, + "DescribeCarrierGateways": TierUnimplemented, + "DescribeClassicLinkInstances": TierUnimplemented, + "DescribeClientVpnAuthorizationRules": TierUnimplemented, + "DescribeClientVpnConnections": TierUnimplemented, + "DescribeClientVpnEndpoints": TierUnimplemented, + "DescribeClientVpnRoutes": TierUnimplemented, + "DescribeClientVpnTargetNetworks": TierUnimplemented, + "DescribeCoipPools": TierUnimplemented, + "DescribeConversionTasks": TierUnimplemented, + "DescribeCustomerGateways": TierUnimplemented, + "DescribeDeclarativePoliciesReports": TierUnimplemented, + "DescribeDhcpOptions": TierUnimplemented, + "DescribeEgressOnlyInternetGateways": TierUnimplemented, + "DescribeElasticGpus": TierUnimplemented, + "DescribeExportImageTasks": TierUnimplemented, + "DescribeExportTasks": TierUnimplemented, + "DescribeFastLaunchImages": TierUnimplemented, + "DescribeFastSnapshotRestores": TierUnimplemented, + "DescribeFleetHistory": TierUnimplemented, + "DescribeFleetInstances": TierUnimplemented, + "DescribeFleets": TierUnimplemented, + "DescribeFlowLogs": TierUnimplemented, + "DescribeFpgaImageAttribute": TierUnimplemented, + "DescribeFpgaImages": TierUnimplemented, + "DescribeHostReservationOfferings": TierUnimplemented, + "DescribeHostReservations": TierUnimplemented, + "DescribeHosts": TierUnimplemented, + "DescribeIamInstanceProfileAssociations": TierUnimplemented, + "DescribeIdFormat": TierUnimplemented, + "DescribeIdentityIdFormat": TierUnimplemented, + "DescribeImageAttribute": TierUnimplemented, + "DescribeImageReferences": TierUnimplemented, + "DescribeImageUsageReportEntries": TierUnimplemented, + "DescribeImageUsageReports": TierUnimplemented, + "DescribeImages": TierHandVerified, + "DescribeImportImageTasks": TierUnimplemented, + "DescribeImportSnapshotTasks": TierUnimplemented, + "DescribeInstanceAttribute": TierUnimplemented, + "DescribeInstanceConnectEndpoints": TierUnimplemented, + "DescribeInstanceCreditSpecifications": TierUnimplemented, + "DescribeInstanceEventNotificationAttributes": TierUnimplemented, + "DescribeInstanceEventWindows": TierUnimplemented, + "DescribeInstanceImageMetadata": TierUnimplemented, + "DescribeInstanceSqlHaHistoryStates": TierUnimplemented, + "DescribeInstanceSqlHaStates": TierUnimplemented, + "DescribeInstanceStatus": TierUnimplemented, + "DescribeInstanceTopology": TierUnimplemented, + "DescribeInstanceTypeOfferings": TierUnimplemented, + "DescribeInstanceTypes": TierUnimplemented, + "DescribeInstances": TierHandVerified, + "DescribeInternetGateways": TierHandVerified, + "DescribeIpamByoasn": TierUnimplemented, + "DescribeIpamExternalResourceVerificationTokens": TierUnimplemented, + "DescribeIpamPolicies": TierUnimplemented, + "DescribeIpamPools": TierUnimplemented, + "DescribeIpamPrefixListResolverTargets": TierUnimplemented, + "DescribeIpamPrefixListResolvers": TierUnimplemented, + "DescribeIpamResourceDiscoveries": TierUnimplemented, + "DescribeIpamResourceDiscoveryAssociations": TierUnimplemented, + "DescribeIpamScopes": TierUnimplemented, + "DescribeIpams": TierUnimplemented, + "DescribeIpv6Pools": TierUnimplemented, + "DescribeKeyPairs": TierHandVerified, + "DescribeLaunchTemplateVersions": TierUnimplemented, + "DescribeLaunchTemplates": TierUnimplemented, + "DescribeLocalGatewayRouteTableVirtualInterfaceGroupAssociations": TierUnimplemented, + "DescribeLocalGatewayRouteTableVpcAssociations": TierUnimplemented, + "DescribeLocalGatewayRouteTables": TierUnimplemented, + "DescribeLocalGatewayVirtualInterfaceGroups": TierUnimplemented, + "DescribeLocalGatewayVirtualInterfaces": TierUnimplemented, + "DescribeLocalGateways": TierUnimplemented, + "DescribeLockedSnapshots": TierUnimplemented, + "DescribeMacHosts": TierUnimplemented, + "DescribeMacModificationTasks": TierUnimplemented, + "DescribeManagedPrefixLists": TierUnimplemented, + "DescribeMovingAddresses": TierUnimplemented, + "DescribeNatGateways": TierUnimplemented, + "DescribeNetworkAcls": TierHandVerified, + "DescribeNetworkInsightsAccessScopeAnalyses": TierUnimplemented, + "DescribeNetworkInsightsAccessScopes": TierUnimplemented, + "DescribeNetworkInsightsAnalyses": TierUnimplemented, + "DescribeNetworkInsightsPaths": TierUnimplemented, + "DescribeNetworkInterfaceAttribute": TierUnimplemented, + "DescribeNetworkInterfacePermissions": TierUnimplemented, + "DescribeNetworkInterfaces": TierUnimplemented, + "DescribeOutpostLags": TierUnimplemented, + "DescribePlacementGroups": TierUnimplemented, + "DescribePrefixLists": TierUnimplemented, + "DescribePrincipalIdFormat": TierUnimplemented, + "DescribePublicIpv4Pools": TierUnimplemented, + "DescribeRegions": TierHandVerified, + "DescribeReplaceRootVolumeTasks": TierUnimplemented, + "DescribeReservedInstances": TierUnimplemented, + "DescribeReservedInstancesListings": TierUnimplemented, + "DescribeReservedInstancesModifications": TierUnimplemented, + "DescribeReservedInstancesOfferings": TierUnimplemented, + "DescribeRouteServerEndpoints": TierUnimplemented, + "DescribeRouteServerPeers": TierUnimplemented, + "DescribeRouteServers": TierUnimplemented, + "DescribeRouteTables": TierHandVerified, + "DescribeScheduledInstanceAvailability": TierUnimplemented, + "DescribeScheduledInstances": TierUnimplemented, + "DescribeSecondaryInterfaces": TierUnimplemented, + "DescribeSecondaryNetworks": TierUnimplemented, + "DescribeSecondarySubnets": TierUnimplemented, + "DescribeSecurityGroupReferences": TierUnimplemented, + "DescribeSecurityGroupRules": TierUnimplemented, + "DescribeSecurityGroupVpcAssociations": TierUnimplemented, + "DescribeSecurityGroups": TierHandVerified, + "DescribeServiceLinkVirtualInterfaces": TierUnimplemented, + "DescribeSnapshotAttribute": TierUnimplemented, + "DescribeSnapshotTierStatus": TierUnimplemented, + "DescribeSnapshots": TierHandVerified, + "DescribeSpotDatafeedSubscription": TierUnimplemented, + "DescribeSpotFleetInstances": TierUnimplemented, + "DescribeSpotFleetRequestHistory": TierUnimplemented, + "DescribeSpotFleetRequests": TierUnimplemented, + "DescribeSpotInstanceRequests": TierUnimplemented, + "DescribeSpotPriceHistory": TierUnimplemented, + "DescribeStaleSecurityGroups": TierUnimplemented, + "DescribeStoreImageTasks": TierUnimplemented, + "DescribeSubnets": TierHandVerified, + "DescribeTags": TierHandVerified, + "DescribeTrafficMirrorFilterRules": TierUnimplemented, + "DescribeTrafficMirrorFilters": TierUnimplemented, + "DescribeTrafficMirrorSessions": TierUnimplemented, + "DescribeTrafficMirrorTargets": TierUnimplemented, + "DescribeTransitGatewayAttachments": TierUnimplemented, + "DescribeTransitGatewayConnectPeers": TierUnimplemented, + "DescribeTransitGatewayConnects": TierUnimplemented, + "DescribeTransitGatewayMeteringPolicies": TierUnimplemented, + "DescribeTransitGatewayMulticastDomains": TierUnimplemented, + "DescribeTransitGatewayPeeringAttachments": TierUnimplemented, + "DescribeTransitGatewayPolicyTables": TierUnimplemented, + "DescribeTransitGatewayRouteTableAnnouncements": TierUnimplemented, + "DescribeTransitGatewayRouteTables": TierUnimplemented, + "DescribeTransitGatewayVpcAttachments": TierUnimplemented, + "DescribeTransitGateways": TierUnimplemented, + "DescribeTrunkInterfaceAssociations": TierUnimplemented, + "DescribeVerifiedAccessEndpoints": TierUnimplemented, + "DescribeVerifiedAccessGroups": TierUnimplemented, + "DescribeVerifiedAccessInstanceLoggingConfigurations": TierUnimplemented, + "DescribeVerifiedAccessInstances": TierUnimplemented, + "DescribeVerifiedAccessTrustProviders": TierUnimplemented, + "DescribeVolumeAttribute": TierUnimplemented, + "DescribeVolumeStatus": TierUnimplemented, + "DescribeVolumes": TierHandVerified, + "DescribeVolumesModifications": TierUnimplemented, + "DescribeVpcAttribute": TierHandVerified, + "DescribeVpcBlockPublicAccessExclusions": TierUnimplemented, + "DescribeVpcBlockPublicAccessOptions": TierUnimplemented, + "DescribeVpcClassicLink": TierUnimplemented, + "DescribeVpcClassicLinkDnsSupport": TierUnimplemented, + "DescribeVpcEncryptionControls": TierUnimplemented, + "DescribeVpcEndpointAssociations": TierUnimplemented, + "DescribeVpcEndpointConnectionNotifications": TierUnimplemented, + "DescribeVpcEndpointConnections": TierUnimplemented, + "DescribeVpcEndpointServiceConfigurations": TierUnimplemented, + "DescribeVpcEndpointServicePermissions": TierUnimplemented, + "DescribeVpcEndpointServices": TierUnimplemented, + "DescribeVpcEndpoints": TierUnimplemented, + "DescribeVpcPeeringConnections": TierUnimplemented, + "DescribeVpcs": TierHandVerified, + "DescribeVpnConcentrators": TierUnimplemented, + "DescribeVpnConnections": TierUnimplemented, + "DescribeVpnGateways": TierUnimplemented, + "DetachClassicLinkVpc": TierUnimplemented, + "DetachInternetGateway": TierHandVerified, + "DetachNetworkInterface": TierUnimplemented, + "DetachVerifiedAccessTrustProvider": TierUnimplemented, + "DetachVolume": TierHandVerified, + "DetachVpnGateway": TierUnimplemented, + "DisableAddressTransfer": TierUnimplemented, + "DisableAllowedImagesSettings": TierUnimplemented, + "DisableAwsNetworkPerformanceMetricSubscription": TierUnimplemented, + "DisableCapacityManager": TierUnimplemented, + "DisableEbsEncryptionByDefault": TierUnimplemented, + "DisableFastLaunch": TierUnimplemented, + "DisableFastSnapshotRestores": TierUnimplemented, + "DisableImage": TierUnimplemented, + "DisableImageBlockPublicAccess": TierUnimplemented, + "DisableImageDeprecation": TierUnimplemented, + "DisableImageDeregistrationProtection": TierUnimplemented, + "DisableInstanceSqlHaStandbyDetections": TierUnimplemented, + "DisableIpamOrganizationAdminAccount": TierUnimplemented, + "DisableIpamPolicy": TierUnimplemented, + "DisableRouteServerPropagation": TierUnimplemented, + "DisableSerialConsoleAccess": TierUnimplemented, + "DisableSnapshotBlockPublicAccess": TierUnimplemented, + "DisableTransitGatewayRouteTablePropagation": TierUnimplemented, + "DisableVgwRoutePropagation": TierUnimplemented, + "DisableVpcClassicLink": TierUnimplemented, + "DisableVpcClassicLinkDnsSupport": TierUnimplemented, + "DisassociateAddress": TierHandVerified, + "DisassociateCapacityReservationBillingOwner": TierUnimplemented, + "DisassociateClientVpnTargetNetwork": TierUnimplemented, + "DisassociateEnclaveCertificateIamRole": TierUnimplemented, + "DisassociateIamInstanceProfile": TierUnimplemented, + "DisassociateInstanceEventWindow": TierUnimplemented, + "DisassociateIpamByoasn": TierUnimplemented, + "DisassociateIpamResourceDiscovery": TierUnimplemented, + "DisassociateNatGatewayAddress": TierUnimplemented, + "DisassociateRouteServer": TierUnimplemented, + "DisassociateRouteTable": TierUnimplemented, + "DisassociateSecurityGroupVpc": TierUnimplemented, + "DisassociateSubnetCidrBlock": TierUnimplemented, + "DisassociateTransitGatewayMulticastDomain": TierUnimplemented, + "DisassociateTransitGatewayPolicyTable": TierUnimplemented, + "DisassociateTransitGatewayRouteTable": TierUnimplemented, + "DisassociateTrunkInterface": TierUnimplemented, + "DisassociateVpcCidrBlock": TierUnimplemented, + "EnableAddressTransfer": TierUnimplemented, + "EnableAllowedImagesSettings": TierUnimplemented, + "EnableAwsNetworkPerformanceMetricSubscription": TierUnimplemented, + "EnableCapacityManager": TierUnimplemented, + "EnableEbsEncryptionByDefault": TierUnimplemented, + "EnableFastLaunch": TierUnimplemented, + "EnableFastSnapshotRestores": TierUnimplemented, + "EnableImage": TierUnimplemented, + "EnableImageBlockPublicAccess": TierUnimplemented, + "EnableImageDeprecation": TierUnimplemented, + "EnableImageDeregistrationProtection": TierUnimplemented, + "EnableInstanceSqlHaStandbyDetections": TierUnimplemented, + "EnableIpamOrganizationAdminAccount": TierUnimplemented, + "EnableIpamPolicy": TierUnimplemented, + "EnableReachabilityAnalyzerOrganizationSharing": TierUnimplemented, + "EnableRouteServerPropagation": TierUnimplemented, + "EnableSerialConsoleAccess": TierUnimplemented, + "EnableSnapshotBlockPublicAccess": TierUnimplemented, + "EnableTransitGatewayRouteTablePropagation": TierUnimplemented, + "EnableVgwRoutePropagation": TierUnimplemented, + "EnableVolumeIO": TierUnimplemented, + "EnableVpcClassicLink": TierUnimplemented, + "EnableVpcClassicLinkDnsSupport": TierUnimplemented, + "ExportClientVpnClientCertificateRevocationList": TierUnimplemented, + "ExportClientVpnClientConfiguration": TierUnimplemented, + "ExportImage": TierUnimplemented, + "ExportTransitGatewayRoutes": TierUnimplemented, + "ExportVerifiedAccessInstanceClientConfiguration": TierUnimplemented, + "GetActiveVpnTunnelStatus": TierUnimplemented, + "GetAllowedImagesSettings": TierUnimplemented, + "GetAssociatedEnclaveCertificateIamRoles": TierUnimplemented, + "GetAssociatedIpv6PoolCidrs": TierUnimplemented, + "GetAwsNetworkPerformanceData": TierUnimplemented, + "GetCapacityManagerAttributes": TierUnimplemented, + "GetCapacityManagerMetricData": TierUnimplemented, + "GetCapacityManagerMetricDimensions": TierUnimplemented, + "GetCapacityReservationUsage": TierUnimplemented, + "GetCoipPoolUsage": TierUnimplemented, + "GetConsoleOutput": TierUnimplemented, + "GetConsoleScreenshot": TierUnimplemented, + "GetDeclarativePoliciesReportSummary": TierUnimplemented, + "GetDefaultCreditSpecification": TierUnimplemented, + "GetEbsDefaultKmsKeyId": TierUnimplemented, + "GetEbsEncryptionByDefault": TierUnimplemented, + "GetEnabledIpamPolicy": TierUnimplemented, + "GetFlowLogsIntegrationTemplate": TierUnimplemented, + "GetGroupsForCapacityReservation": TierUnimplemented, + "GetHostReservationPurchasePreview": TierUnimplemented, + "GetImageAncestry": TierUnimplemented, + "GetImageBlockPublicAccessState": TierUnimplemented, + "GetInstanceMetadataDefaults": TierUnimplemented, + "GetInstanceTpmEkPub": TierUnimplemented, + "GetInstanceTypesFromInstanceRequirements": TierUnimplemented, + "GetInstanceUefiData": TierUnimplemented, + "GetIpamAddressHistory": TierUnimplemented, + "GetIpamDiscoveredAccounts": TierUnimplemented, + "GetIpamDiscoveredPublicAddresses": TierUnimplemented, + "GetIpamDiscoveredResourceCidrs": TierUnimplemented, + "GetIpamPolicyAllocationRules": TierUnimplemented, + "GetIpamPolicyOrganizationTargets": TierUnimplemented, + "GetIpamPoolAllocations": TierUnimplemented, + "GetIpamPoolCidrs": TierUnimplemented, + "GetIpamPrefixListResolverRules": TierUnimplemented, + "GetIpamPrefixListResolverVersionEntries": TierUnimplemented, + "GetIpamPrefixListResolverVersions": TierUnimplemented, + "GetIpamResourceCidrs": TierUnimplemented, + "GetLaunchTemplateData": TierUnimplemented, + "GetManagedPrefixListAssociations": TierUnimplemented, + "GetManagedPrefixListEntries": TierUnimplemented, + "GetNetworkInsightsAccessScopeAnalysisFindings": TierUnimplemented, + "GetNetworkInsightsAccessScopeContent": TierUnimplemented, + "GetPasswordData": TierUnimplemented, + "GetReservedInstancesExchangeQuote": TierUnimplemented, + "GetRouteServerAssociations": TierUnimplemented, + "GetRouteServerPropagations": TierUnimplemented, + "GetRouteServerRoutingDatabase": TierUnimplemented, + "GetSecurityGroupsForVpc": TierUnimplemented, + "GetSerialConsoleAccessStatus": TierUnimplemented, + "GetSnapshotBlockPublicAccessState": TierUnimplemented, + "GetSpotPlacementScores": TierUnimplemented, + "GetSubnetCidrReservations": TierUnimplemented, + "GetTransitGatewayAttachmentPropagations": TierUnimplemented, + "GetTransitGatewayMeteringPolicyEntries": TierUnimplemented, + "GetTransitGatewayMulticastDomainAssociations": TierUnimplemented, + "GetTransitGatewayPolicyTableAssociations": TierUnimplemented, + "GetTransitGatewayPolicyTableEntries": TierUnimplemented, + "GetTransitGatewayPrefixListReferences": TierUnimplemented, + "GetTransitGatewayRouteTableAssociations": TierUnimplemented, + "GetTransitGatewayRouteTablePropagations": TierUnimplemented, + "GetVerifiedAccessEndpointPolicy": TierUnimplemented, + "GetVerifiedAccessEndpointTargets": TierUnimplemented, + "GetVerifiedAccessGroupPolicy": TierUnimplemented, + "GetVpcResourcesBlockingEncryptionEnforcement": TierUnimplemented, + "GetVpnConnectionDeviceSampleConfiguration": TierUnimplemented, + "GetVpnConnectionDeviceTypes": TierUnimplemented, + "GetVpnTunnelReplacementStatus": TierUnimplemented, + "ImportClientVpnClientCertificateRevocationList": TierUnimplemented, + "ImportImage": TierUnimplemented, + "ImportInstance": TierUnimplemented, + "ImportKeyPair": TierHandVerified, + "ImportSnapshot": TierUnimplemented, + "ImportVolume": TierUnimplemented, + "ListImagesInRecycleBin": TierUnimplemented, + "ListSnapshotsInRecycleBin": TierUnimplemented, + "ListVolumesInRecycleBin": TierUnimplemented, + "LockSnapshot": TierUnimplemented, + "ModifyAddressAttribute": TierUnimplemented, + "ModifyAvailabilityZoneGroup": TierUnimplemented, + "ModifyCapacityReservation": TierUnimplemented, + "ModifyCapacityReservationFleet": TierUnimplemented, + "ModifyClientVpnEndpoint": TierUnimplemented, + "ModifyDefaultCreditSpecification": TierUnimplemented, + "ModifyEbsDefaultKmsKeyId": TierUnimplemented, + "ModifyFleet": TierUnimplemented, + "ModifyFpgaImageAttribute": TierUnimplemented, + "ModifyHosts": TierUnimplemented, + "ModifyIdFormat": TierUnimplemented, + "ModifyIdentityIdFormat": TierUnimplemented, + "ModifyImageAttribute": TierUnimplemented, + "ModifyInstanceAttribute": TierUnimplemented, + "ModifyInstanceCapacityReservationAttributes": TierUnimplemented, + "ModifyInstanceConnectEndpoint": TierUnimplemented, + "ModifyInstanceCpuOptions": TierUnimplemented, + "ModifyInstanceCreditSpecification": TierUnimplemented, + "ModifyInstanceEventStartTime": TierUnimplemented, + "ModifyInstanceEventWindow": TierUnimplemented, + "ModifyInstanceMaintenanceOptions": TierUnimplemented, + "ModifyInstanceMetadataDefaults": TierUnimplemented, + "ModifyInstanceMetadataOptions": TierUnimplemented, + "ModifyInstanceNetworkPerformanceOptions": TierUnimplemented, + "ModifyInstancePlacement": TierUnimplemented, + "ModifyIpam": TierUnimplemented, + "ModifyIpamPolicyAllocationRules": TierUnimplemented, + "ModifyIpamPool": TierUnimplemented, + "ModifyIpamPrefixListResolver": TierUnimplemented, + "ModifyIpamPrefixListResolverTarget": TierUnimplemented, + "ModifyIpamResourceCidr": TierUnimplemented, + "ModifyIpamResourceDiscovery": TierUnimplemented, + "ModifyIpamScope": TierUnimplemented, + "ModifyLaunchTemplate": TierUnimplemented, + "ModifyLocalGatewayRoute": TierUnimplemented, + "ModifyManagedPrefixList": TierUnimplemented, + "ModifyNetworkInterfaceAttribute": TierUnimplemented, + "ModifyPrivateDnsNameOptions": TierUnimplemented, + "ModifyPublicIpDnsNameOptions": TierUnimplemented, + "ModifyReservedInstances": TierUnimplemented, + "ModifyRouteServer": TierUnimplemented, + "ModifySecurityGroupRules": TierUnimplemented, + "ModifySnapshotAttribute": TierUnimplemented, + "ModifySnapshotTier": TierUnimplemented, + "ModifySpotFleetRequest": TierUnimplemented, + "ModifySubnetAttribute": TierUnimplemented, + "ModifyTrafficMirrorFilterNetworkServices": TierUnimplemented, + "ModifyTrafficMirrorFilterRule": TierUnimplemented, + "ModifyTrafficMirrorSession": TierUnimplemented, + "ModifyTransitGateway": TierUnimplemented, + "ModifyTransitGatewayMeteringPolicy": TierUnimplemented, + "ModifyTransitGatewayPrefixListReference": TierUnimplemented, + "ModifyTransitGatewayVpcAttachment": TierUnimplemented, + "ModifyVerifiedAccessEndpoint": TierUnimplemented, + "ModifyVerifiedAccessEndpointPolicy": TierUnimplemented, + "ModifyVerifiedAccessGroup": TierUnimplemented, + "ModifyVerifiedAccessGroupPolicy": TierUnimplemented, + "ModifyVerifiedAccessInstance": TierUnimplemented, + "ModifyVerifiedAccessInstanceLoggingConfiguration": TierUnimplemented, + "ModifyVerifiedAccessTrustProvider": TierUnimplemented, + "ModifyVolume": TierHandVerified, + "ModifyVolumeAttribute": TierUnimplemented, + "ModifyVpcAttribute": TierHandVerified, + "ModifyVpcBlockPublicAccessExclusion": TierUnimplemented, + "ModifyVpcBlockPublicAccessOptions": TierUnimplemented, + "ModifyVpcEncryptionControl": TierUnimplemented, + "ModifyVpcEndpoint": TierUnimplemented, + "ModifyVpcEndpointConnectionNotification": TierUnimplemented, + "ModifyVpcEndpointServiceConfiguration": TierUnimplemented, + "ModifyVpcEndpointServicePayerResponsibility": TierUnimplemented, + "ModifyVpcEndpointServicePermissions": TierUnimplemented, + "ModifyVpcPeeringConnectionOptions": TierUnimplemented, + "ModifyVpcTenancy": TierUnimplemented, + "ModifyVpnConnection": TierUnimplemented, + "ModifyVpnConnectionOptions": TierUnimplemented, + "ModifyVpnTunnelCertificate": TierUnimplemented, + "ModifyVpnTunnelOptions": TierUnimplemented, + "MonitorInstances": TierUnimplemented, + "MoveAddressToVpc": TierUnimplemented, + "MoveByoipCidrToIpam": TierUnimplemented, + "MoveCapacityReservationInstances": TierUnimplemented, + "ProvisionByoipCidr": TierUnimplemented, + "ProvisionIpamByoasn": TierUnimplemented, + "ProvisionIpamPoolCidr": TierUnimplemented, + "ProvisionPublicIpv4PoolCidr": TierUnimplemented, + "PurchaseCapacityBlock": TierUnimplemented, + "PurchaseCapacityBlockExtension": TierUnimplemented, + "PurchaseHostReservation": TierUnimplemented, + "PurchaseReservedInstancesOffering": TierUnimplemented, + "PurchaseScheduledInstances": TierUnimplemented, + "RebootInstances": TierHandVerified, + "RegisterImage": TierHandVerified, + "RegisterInstanceEventNotificationAttributes": TierUnimplemented, + "RegisterTransitGatewayMulticastGroupMembers": TierUnimplemented, + "RegisterTransitGatewayMulticastGroupSources": TierUnimplemented, + "RejectCapacityReservationBillingOwnership": TierUnimplemented, + "RejectTransitGatewayMulticastDomainAssociations": TierUnimplemented, + "RejectTransitGatewayPeeringAttachment": TierUnimplemented, + "RejectTransitGatewayVpcAttachment": TierUnimplemented, + "RejectVpcEndpointConnections": TierUnimplemented, + "RejectVpcPeeringConnection": TierUnimplemented, + "ReleaseAddress": TierHandVerified, + "ReleaseHosts": TierUnimplemented, + "ReleaseIpamPoolAllocation": TierUnimplemented, + "ReplaceIamInstanceProfileAssociation": TierUnimplemented, + "ReplaceImageCriteriaInAllowedImagesSettings": TierUnimplemented, + "ReplaceNetworkAclAssociation": TierUnimplemented, + "ReplaceNetworkAclEntry": TierHandVerified, + "ReplaceRoute": TierUnimplemented, + "ReplaceRouteTableAssociation": TierUnimplemented, + "ReplaceTransitGatewayRoute": TierUnimplemented, + "ReplaceVpnTunnel": TierUnimplemented, + "ReportInstanceStatus": TierUnimplemented, + "RequestSpotFleet": TierUnimplemented, + "RequestSpotInstances": TierUnimplemented, + "ResetAddressAttribute": TierUnimplemented, + "ResetEbsDefaultKmsKeyId": TierUnimplemented, + "ResetFpgaImageAttribute": TierUnimplemented, + "ResetImageAttribute": TierUnimplemented, + "ResetInstanceAttribute": TierUnimplemented, + "ResetNetworkInterfaceAttribute": TierUnimplemented, + "ResetSnapshotAttribute": TierUnimplemented, + "RestoreAddressToClassic": TierUnimplemented, + "RestoreImageFromRecycleBin": TierUnimplemented, + "RestoreManagedPrefixListVersion": TierUnimplemented, + "RestoreSnapshotFromRecycleBin": TierUnimplemented, + "RestoreSnapshotTier": TierUnimplemented, + "RestoreVolumeFromRecycleBin": TierUnimplemented, + "RevokeClientVpnIngress": TierUnimplemented, + "RevokeSecurityGroupEgress": TierHandVerified, + "RevokeSecurityGroupIngress": TierHandVerified, + "RunInstances": TierHandVerified, + "RunScheduledInstances": TierUnimplemented, + "SearchLocalGatewayRoutes": TierUnimplemented, + "SearchTransitGatewayMulticastGroups": TierUnimplemented, + "SearchTransitGatewayRoutes": TierUnimplemented, + "SendDiagnosticInterrupt": TierUnimplemented, + "StartDeclarativePoliciesReport": TierUnimplemented, + "StartInstances": TierHandVerified, + "StartNetworkInsightsAccessScopeAnalysis": TierUnimplemented, + "StartNetworkInsightsAnalysis": TierUnimplemented, + "StartVpcEndpointServicePrivateDnsVerification": TierUnimplemented, + "StopInstances": TierHandVerified, + "TerminateClientVpnConnections": TierUnimplemented, + "TerminateInstances": TierHandVerified, + "UnassignIpv6Addresses": TierUnimplemented, + "UnassignPrivateIpAddresses": TierUnimplemented, + "UnassignPrivateNatGatewayAddress": TierUnimplemented, + "UnlockSnapshot": TierUnimplemented, + "UnmonitorInstances": TierUnimplemented, + "UpdateCapacityManagerOrganizationsAccess": TierUnimplemented, + "UpdateInterruptibleCapacityReservationAllocation": TierUnimplemented, + "UpdateSecurityGroupRuleDescriptionsEgress": TierUnimplemented, + "UpdateSecurityGroupRuleDescriptionsIngress": TierUnimplemented, + "WithdrawByoipCidr": TierUnimplemented, + }}, + "ecr": {ModelBacked: true, Operations: map[string]Tier{ + "BatchCheckLayerAvailability": TierHandVerified, + "BatchDeleteImage": TierHandVerified, + "BatchGetImage": TierHandVerified, + "BatchGetRepositoryScanningConfiguration": TierAutoCRUD, + "CompleteLayerUpload": TierHandVerified, + "CreatePullThroughCacheRule": TierAutoCRUD, + "CreateRepository": TierHandVerified, + "CreateRepositoryCreationTemplate": TierAutoCRUD, + "DeleteLifecyclePolicy": TierHandVerified, + "DeletePullThroughCacheRule": TierAutoCRUD, + "DeleteRegistryPolicy": TierAutoCRUD, + "DeleteRepository": TierHandVerified, + "DeleteRepositoryCreationTemplate": TierAutoCRUD, + "DeleteRepositoryPolicy": TierAutoCRUD, + "DeleteSigningConfiguration": TierAutoCRUD, + "DeregisterPullTimeUpdateExclusion": TierAutoCRUD, + "DescribeImageReplicationStatus": TierAutoCRUD, + "DescribeImageScanFindings": TierHandVerified, + "DescribeImageSigningStatus": TierAutoCRUD, + "DescribeImages": TierHandVerified, + "DescribePullThroughCacheRules": TierAutoCRUD, + "DescribeRegistry": TierAutoCRUD, + "DescribeRepositories": TierHandVerified, + "DescribeRepositoryCreationTemplates": TierAutoCRUD, + "GetAccountSetting": TierAutoCRUD, + "GetAuthorizationToken": TierHandVerified, + "GetDownloadUrlForLayer": TierHandVerified, + "GetLifecyclePolicy": TierHandVerified, + "GetLifecyclePolicyPreview": TierAutoCRUD, + "GetRegistryPolicy": TierAutoCRUD, + "GetRegistryScanningConfiguration": TierAutoCRUD, + "GetRepositoryPolicy": TierHandVerified, + "GetSigningConfiguration": TierAutoCRUD, + "InitiateLayerUpload": TierHandVerified, + "ListImageReferrers": TierAutoCRUD, + "ListImages": TierHandVerified, + "ListPullTimeUpdateExclusions": TierAutoCRUD, + "ListTagsForResource": TierHandVerified, + "PutAccountSetting": TierAutoCRUD, + "PutImage": TierHandVerified, + "PutImageScanningConfiguration": TierHandVerified, + "PutImageTagMutability": TierAutoCRUD, + "PutLifecyclePolicy": TierHandVerified, + "PutRegistryPolicy": TierAutoCRUD, + "PutRegistryScanningConfiguration": TierAutoCRUD, + "PutReplicationConfiguration": TierAutoCRUD, + "PutSigningConfiguration": TierAutoCRUD, + "RegisterPullTimeUpdateExclusion": TierAutoCRUD, + "SetRepositoryPolicy": TierHandVerified, + "StartImageScan": TierHandVerified, + "StartLifecyclePolicyPreview": TierUnimplemented, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateImageStorageClass": TierAutoCRUD, + "UpdatePullThroughCacheRule": TierAutoCRUD, + "UpdateRepositoryCreationTemplate": TierAutoCRUD, + "UploadLayerPart": TierHandVerified, + "ValidatePullThroughCacheRule": TierUnimplemented, + }}, + "ecs": {ModelBacked: true, Operations: map[string]Tier{ + "CreateCapacityProvider": TierHandVerified, + "CreateCluster": TierHandVerified, + "CreateDaemon": TierAutoCRUD, + "CreateExpressGatewayService": TierAutoCRUD, + "CreateService": TierHandVerified, + "CreateTaskSet": TierHandVerified, + "DeleteAccountSetting": TierHandVerified, + "DeleteAttributes": TierHandVerified, + "DeleteCapacityProvider": TierHandVerified, + "DeleteCluster": TierHandVerified, + "DeleteDaemon": TierAutoCRUD, + "DeleteDaemonTaskDefinition": TierAutoCRUD, + "DeleteExpressGatewayService": TierAutoCRUD, + "DeleteService": TierHandVerified, + "DeleteTaskDefinitions": TierAutoCRUD, + "DeleteTaskSet": TierHandVerified, + "DeregisterContainerInstance": TierHandVerified, + "DeregisterTaskDefinition": TierHandVerified, + "DescribeCapacityProviders": TierHandVerified, + "DescribeClusters": TierHandVerified, + "DescribeContainerInstances": TierHandVerified, + "DescribeDaemon": TierAutoCRUD, + "DescribeDaemonDeployments": TierAutoCRUD, + "DescribeDaemonRevisions": TierAutoCRUD, + "DescribeDaemonTaskDefinition": TierAutoCRUD, + "DescribeExpressGatewayService": TierAutoCRUD, + "DescribeServiceDeployments": TierAutoCRUD, + "DescribeServiceRevisions": TierAutoCRUD, + "DescribeServices": TierHandVerified, + "DescribeTaskDefinition": TierHandVerified, + "DescribeTaskSets": TierHandVerified, + "DescribeTasks": TierHandVerified, + "DiscoverPollEndpoint": TierHandVerified, + "ExecuteCommand": TierUnimplemented, + "GetTaskProtection": TierHandVerified, + "ListAccountSettings": TierHandVerified, + "ListAttributes": TierHandVerified, + "ListClusters": TierHandVerified, + "ListContainerInstances": TierHandVerified, + "ListDaemonDeployments": TierAutoCRUD, + "ListDaemonTaskDefinitions": TierAutoCRUD, + "ListDaemons": TierAutoCRUD, + "ListServiceDeployments": TierAutoCRUD, + "ListServices": TierHandVerified, + "ListServicesByNamespace": TierAutoCRUD, + "ListTagsForResource": TierHandVerified, + "ListTaskDefinitionFamilies": TierHandVerified, + "ListTaskDefinitions": TierHandVerified, + "ListTasks": TierHandVerified, + "PutAccountSetting": TierHandVerified, + "PutAccountSettingDefault": TierHandVerified, + "PutAttributes": TierHandVerified, + "PutClusterCapacityProviders": TierHandVerified, + "RegisterContainerInstance": TierHandVerified, + "RegisterDaemonTaskDefinition": TierAutoCRUD, + "RegisterTaskDefinition": TierHandVerified, + "RunTask": TierHandVerified, + "StartTask": TierHandVerified, + "StopServiceDeployment": TierUnimplemented, + "StopTask": TierHandVerified, + "SubmitAttachmentStateChanges": TierUnimplemented, + "SubmitContainerStateChange": TierHandVerified, + "SubmitTaskStateChange": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateCapacityProvider": TierHandVerified, + "UpdateCluster": TierHandVerified, + "UpdateClusterSettings": TierHandVerified, + "UpdateContainerAgent": TierAutoCRUD, + "UpdateContainerInstancesState": TierHandVerified, + "UpdateDaemon": TierAutoCRUD, + "UpdateExpressGatewayService": TierAutoCRUD, + "UpdateService": TierHandVerified, + "UpdateServicePrimaryTaskSet": TierHandVerified, + "UpdateTaskProtection": TierHandVerified, + "UpdateTaskSet": TierHandVerified, + }}, + "efs": {ModelBacked: true, Operations: map[string]Tier{ + "CreateAccessPoint": TierHandVerified, + "CreateFileSystem": TierHandVerified, + "CreateMountTarget": TierHandVerified, + "CreateReplicationConfiguration": TierUnimplemented, + "CreateTags": TierUnimplemented, + "DeleteAccessPoint": TierHandVerified, + "DeleteFileSystem": TierHandVerified, + "DeleteFileSystemPolicy": TierHandVerified, + "DeleteMountTarget": TierHandVerified, + "DeleteReplicationConfiguration": TierUnimplemented, + "DeleteTags": TierUnimplemented, + "DescribeAccessPoints": TierHandVerified, + "DescribeAccountPreferences": TierHandVerified, + "DescribeBackupPolicy": TierHandVerified, + "DescribeFileSystemPolicy": TierHandVerified, + "DescribeFileSystems": TierHandVerified, + "DescribeLifecycleConfiguration": TierHandVerified, + "DescribeMountTargetSecurityGroups": TierHandVerified, + "DescribeMountTargets": TierHandVerified, + "DescribeReplicationConfigurations": TierHandVerified, + "DescribeTags": TierUnimplemented, + "ListTagsForResource": TierHandVerified, + "ModifyMountTargetSecurityGroups": TierHandVerified, + "PutAccountPreferences": TierUnimplemented, + "PutBackupPolicy": TierHandVerified, + "PutFileSystemPolicy": TierHandVerified, + "PutLifecycleConfiguration": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateFileSystem": TierHandVerified, + "UpdateFileSystemProtection": TierUnimplemented, + }}, + "eks": {ModelBacked: true, Operations: map[string]Tier{ + "AssociateAccessPolicy": TierHandVerified, + "AssociateEncryptionConfig": TierHandVerified, + "AssociateIdentityProviderConfig": TierHandVerified, + "CreateAccessEntry": TierHandVerified, + "CreateAddon": TierHandVerified, + "CreateCapability": TierHandVerified, + "CreateCluster": TierHandVerified, + "CreateEksAnywhereSubscription": TierHandVerified, + "CreateFargateProfile": TierHandVerified, + "CreateNodegroup": TierHandVerified, + "CreatePodIdentityAssociation": TierHandVerified, + "DeleteAccessEntry": TierHandVerified, + "DeleteAddon": TierHandVerified, + "DeleteCapability": TierHandVerified, + "DeleteCluster": TierHandVerified, + "DeleteEksAnywhereSubscription": TierHandVerified, + "DeleteFargateProfile": TierHandVerified, + "DeleteNodegroup": TierHandVerified, + "DeletePodIdentityAssociation": TierHandVerified, + "DeregisterCluster": TierHandVerified, + "DescribeAccessEntry": TierHandVerified, + "DescribeAddon": TierHandVerified, + "DescribeAddonConfiguration": TierHandVerified, + "DescribeAddonVersions": TierHandVerified, + "DescribeCapability": TierHandVerified, + "DescribeCluster": TierHandVerified, + "DescribeClusterVersions": TierHandVerified, + "DescribeEksAnywhereSubscription": TierHandVerified, + "DescribeFargateProfile": TierHandVerified, + "DescribeIdentityProviderConfig": TierHandVerified, + "DescribeInsight": TierHandVerified, + "DescribeInsightsRefresh": TierHandVerified, + "DescribeNodegroup": TierHandVerified, + "DescribePodIdentityAssociation": TierHandVerified, + "DescribeUpdate": TierHandVerified, + "DisassociateAccessPolicy": TierHandVerified, + "DisassociateIdentityProviderConfig": TierHandVerified, + "ListAccessEntries": TierHandVerified, + "ListAccessPolicies": TierHandVerified, + "ListAddons": TierHandVerified, + "ListAssociatedAccessPolicies": TierHandVerified, + "ListCapabilities": TierHandVerified, + "ListClusters": TierHandVerified, + "ListEksAnywhereSubscriptions": TierHandVerified, + "ListFargateProfiles": TierHandVerified, + "ListIdentityProviderConfigs": TierHandVerified, + "ListInsights": TierHandVerified, + "ListNodegroups": TierHandVerified, + "ListPodIdentityAssociations": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListUpdates": TierHandVerified, + "RegisterCluster": TierHandVerified, + "StartInsightsRefresh": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAccessEntry": TierHandVerified, + "UpdateAddon": TierHandVerified, + "UpdateCapability": TierHandVerified, + "UpdateClusterConfig": TierHandVerified, + "UpdateClusterVersion": TierHandVerified, + "UpdateEksAnywhereSubscription": TierHandVerified, + "UpdateNodegroupConfig": TierHandVerified, + "UpdateNodegroupVersion": TierHandVerified, + "UpdatePodIdentityAssociation": TierHandVerified, + }}, + "elasticache": {ModelBacked: true, Operations: map[string]Tier{ + "AddTagsToResource": TierHandVerified, + "AuthorizeCacheSecurityGroupIngress": TierHandVerified, + "BatchApplyUpdateAction": TierUnimplemented, + "BatchStopUpdateAction": TierUnimplemented, + "CompleteMigration": TierUnimplemented, + "CopyServerlessCacheSnapshot": TierUnimplemented, + "CopySnapshot": TierHandVerified, + "CreateCacheCluster": TierHandVerified, + "CreateCacheParameterGroup": TierHandVerified, + "CreateCacheSecurityGroup": TierHandVerified, + "CreateCacheSubnetGroup": TierHandVerified, + "CreateGlobalReplicationGroup": TierUnimplemented, + "CreateReplicationGroup": TierHandVerified, + "CreateServerlessCache": TierHandVerified, + "CreateServerlessCacheSnapshot": TierUnimplemented, + "CreateSnapshot": TierHandVerified, + "CreateUser": TierHandVerified, + "CreateUserGroup": TierHandVerified, + "DecreaseNodeGroupsInGlobalReplicationGroup": TierUnimplemented, + "DecreaseReplicaCount": TierHandVerified, + "DeleteCacheCluster": TierHandVerified, + "DeleteCacheParameterGroup": TierHandVerified, + "DeleteCacheSecurityGroup": TierHandVerified, + "DeleteCacheSubnetGroup": TierHandVerified, + "DeleteGlobalReplicationGroup": TierUnimplemented, + "DeleteReplicationGroup": TierHandVerified, + "DeleteServerlessCache": TierHandVerified, + "DeleteServerlessCacheSnapshot": TierUnimplemented, + "DeleteSnapshot": TierHandVerified, + "DeleteUser": TierHandVerified, + "DeleteUserGroup": TierHandVerified, + "DescribeCacheClusters": TierHandVerified, + "DescribeCacheEngineVersions": TierUnimplemented, + "DescribeCacheParameterGroups": TierHandVerified, + "DescribeCacheParameters": TierHandVerified, + "DescribeCacheSecurityGroups": TierHandVerified, + "DescribeCacheSubnetGroups": TierHandVerified, + "DescribeEngineDefaultParameters": TierHandVerified, + "DescribeEvents": TierUnimplemented, + "DescribeGlobalReplicationGroups": TierUnimplemented, + "DescribeReplicationGroups": TierHandVerified, + "DescribeReservedCacheNodes": TierUnimplemented, + "DescribeReservedCacheNodesOfferings": TierUnimplemented, + "DescribeServerlessCacheSnapshots": TierUnimplemented, + "DescribeServerlessCaches": TierHandVerified, + "DescribeServiceUpdates": TierUnimplemented, + "DescribeSnapshots": TierHandVerified, + "DescribeUpdateActions": TierUnimplemented, + "DescribeUserGroups": TierHandVerified, + "DescribeUsers": TierHandVerified, + "DisassociateGlobalReplicationGroup": TierUnimplemented, + "ExportServerlessCacheSnapshot": TierUnimplemented, + "FailoverGlobalReplicationGroup": TierUnimplemented, + "IncreaseNodeGroupsInGlobalReplicationGroup": TierUnimplemented, + "IncreaseReplicaCount": TierHandVerified, + "ListAllowedNodeTypeModifications": TierUnimplemented, + "ListTagsForResource": TierHandVerified, + "ModifyCacheCluster": TierHandVerified, + "ModifyCacheParameterGroup": TierHandVerified, + "ModifyCacheSubnetGroup": TierHandVerified, + "ModifyGlobalReplicationGroup": TierUnimplemented, + "ModifyReplicationGroup": TierHandVerified, + "ModifyReplicationGroupShardConfiguration": TierHandVerified, + "ModifyServerlessCache": TierHandVerified, + "ModifyUser": TierHandVerified, + "ModifyUserGroup": TierHandVerified, + "PurchaseReservedCacheNodesOffering": TierUnimplemented, + "RebalanceSlotsInGlobalReplicationGroup": TierUnimplemented, + "RebootCacheCluster": TierHandVerified, + "RemoveTagsFromResource": TierHandVerified, + "ResetCacheParameterGroup": TierHandVerified, + "RevokeCacheSecurityGroupIngress": TierHandVerified, + "StartMigration": TierUnimplemented, + "TestFailover": TierHandVerified, + "TestMigration": TierUnimplemented, + }}, + "elasticbeanstalk": {ModelBacked: true, Operations: map[string]Tier{ + "AbortEnvironmentUpdate": TierHandVerified, + "ApplyEnvironmentManagedAction": TierHandVerified, + "AssociateEnvironmentOperationsRole": TierHandVerified, + "CheckDNSAvailability": TierHandVerified, + "ComposeEnvironments": TierHandVerified, + "CreateApplication": TierHandVerified, + "CreateApplicationVersion": TierHandVerified, + "CreateConfigurationTemplate": TierHandVerified, + "CreateEnvironment": TierHandVerified, + "CreatePlatformVersion": TierHandVerified, + "CreateStorageLocation": TierHandVerified, + "DeleteApplication": TierHandVerified, + "DeleteApplicationVersion": TierHandVerified, + "DeleteConfigurationTemplate": TierHandVerified, + "DeleteEnvironmentConfiguration": TierHandVerified, + "DeletePlatformVersion": TierHandVerified, + "DescribeAccountAttributes": TierHandVerified, + "DescribeApplicationVersions": TierHandVerified, + "DescribeApplications": TierHandVerified, + "DescribeConfigurationOptions": TierHandVerified, + "DescribeConfigurationSettings": TierHandVerified, + "DescribeEnvironmentHealth": TierHandVerified, + "DescribeEnvironmentManagedActionHistory": TierHandVerified, + "DescribeEnvironmentManagedActions": TierHandVerified, + "DescribeEnvironmentResources": TierHandVerified, + "DescribeEnvironments": TierHandVerified, + "DescribeEvents": TierHandVerified, + "DescribeInstancesHealth": TierHandVerified, + "DescribePlatformVersion": TierHandVerified, + "DisassociateEnvironmentOperationsRole": TierHandVerified, + "ListAvailableSolutionStacks": TierHandVerified, + "ListPlatformBranches": TierHandVerified, + "ListPlatformVersions": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "RebuildEnvironment": TierHandVerified, + "RequestEnvironmentInfo": TierHandVerified, + "RestartAppServer": TierHandVerified, + "RetrieveEnvironmentInfo": TierHandVerified, + "SwapEnvironmentCNAMEs": TierHandVerified, + "TerminateEnvironment": TierHandVerified, + "UpdateApplication": TierHandVerified, + "UpdateApplicationResourceLifecycle": TierHandVerified, + "UpdateApplicationVersion": TierHandVerified, + "UpdateConfigurationTemplate": TierHandVerified, + "UpdateEnvironment": TierHandVerified, + "UpdateTagsForResource": TierHandVerified, + "ValidateConfigurationSettings": TierHandVerified, + }}, + "elasticloadbalancingv2": {ModelBacked: true, Operations: map[string]Tier{ + "AddListenerCertificates": TierHandVerified, + "AddTags": TierHandVerified, + "AddTrustStoreRevocations": TierUnimplemented, + "CreateListener": TierHandVerified, + "CreateLoadBalancer": TierHandVerified, + "CreateRule": TierHandVerified, + "CreateTargetGroup": TierHandVerified, + "CreateTrustStore": TierUnimplemented, + "DeleteListener": TierHandVerified, + "DeleteLoadBalancer": TierHandVerified, + "DeleteRule": TierHandVerified, + "DeleteSharedTrustStoreAssociation": TierUnimplemented, + "DeleteTargetGroup": TierHandVerified, + "DeleteTrustStore": TierUnimplemented, + "DeregisterTargets": TierHandVerified, + "DescribeAccountLimits": TierHandVerified, + "DescribeCapacityReservation": TierUnimplemented, + "DescribeListenerAttributes": TierUnimplemented, + "DescribeListenerCertificates": TierHandVerified, + "DescribeListeners": TierHandVerified, + "DescribeLoadBalancerAttributes": TierHandVerified, + "DescribeLoadBalancers": TierHandVerified, + "DescribeRules": TierHandVerified, + "DescribeSSLPolicies": TierHandVerified, + "DescribeTags": TierHandVerified, + "DescribeTargetGroupAttributes": TierHandVerified, + "DescribeTargetGroups": TierHandVerified, + "DescribeTargetHealth": TierHandVerified, + "DescribeTrustStoreAssociations": TierUnimplemented, + "DescribeTrustStoreRevocations": TierUnimplemented, + "DescribeTrustStores": TierUnimplemented, + "GetResourcePolicy": TierUnimplemented, + "GetTrustStoreCaCertificatesBundle": TierUnimplemented, + "GetTrustStoreRevocationContent": TierUnimplemented, + "ModifyCapacityReservation": TierUnimplemented, + "ModifyIpPools": TierUnimplemented, + "ModifyListener": TierHandVerified, + "ModifyListenerAttributes": TierUnimplemented, + "ModifyLoadBalancerAttributes": TierHandVerified, + "ModifyRule": TierHandVerified, + "ModifyTargetGroup": TierHandVerified, + "ModifyTargetGroupAttributes": TierHandVerified, + "ModifyTrustStore": TierUnimplemented, + "RegisterTargets": TierHandVerified, + "RemoveListenerCertificates": TierHandVerified, + "RemoveTags": TierHandVerified, + "RemoveTrustStoreRevocations": TierUnimplemented, + "SetIpAddressType": TierHandVerified, + "SetRulePriorities": TierHandVerified, + "SetSecurityGroups": TierHandVerified, + "SetSubnets": TierHandVerified, + }}, + "elasticsearchservice": {ModelBacked: true, Operations: map[string]Tier{ + "AcceptInboundCrossClusterSearchConnection": TierHandVerified, + "AddTags": TierHandVerified, + "AssociatePackage": TierHandVerified, + "AuthorizeVpcEndpointAccess": TierHandVerified, + "CancelDomainConfigChange": TierHandVerified, + "CancelElasticsearchServiceSoftwareUpdate": TierHandVerified, + "CreateElasticsearchDomain": TierHandVerified, + "CreateOutboundCrossClusterSearchConnection": TierHandVerified, + "CreatePackage": TierHandVerified, + "CreateVpcEndpoint": TierHandVerified, + "DeleteElasticsearchDomain": TierHandVerified, + "DeleteElasticsearchServiceRole": TierHandVerified, + "DeleteInboundCrossClusterSearchConnection": TierHandVerified, + "DeleteOutboundCrossClusterSearchConnection": TierHandVerified, + "DeletePackage": TierHandVerified, + "DeleteVpcEndpoint": TierHandVerified, + "DescribeDomainAutoTunes": TierHandVerified, + "DescribeDomainChangeProgress": TierHandVerified, + "DescribeElasticsearchDomain": TierHandVerified, + "DescribeElasticsearchDomainConfig": TierHandVerified, + "DescribeElasticsearchDomains": TierHandVerified, + "DescribeElasticsearchInstanceTypeLimits": TierHandVerified, + "DescribeInboundCrossClusterSearchConnections": TierHandVerified, + "DescribeOutboundCrossClusterSearchConnections": TierHandVerified, + "DescribePackages": TierHandVerified, + "DescribeReservedElasticsearchInstanceOfferings": TierHandVerified, + "DescribeReservedElasticsearchInstances": TierHandVerified, + "DescribeVpcEndpoints": TierHandVerified, + "DissociatePackage": TierHandVerified, + "GetCompatibleElasticsearchVersions": TierHandVerified, + "GetPackageVersionHistory": TierHandVerified, + "GetUpgradeHistory": TierHandVerified, + "GetUpgradeStatus": TierHandVerified, + "ListDomainNames": TierHandVerified, + "ListDomainsForPackage": TierHandVerified, + "ListElasticsearchInstanceTypes": TierHandVerified, + "ListElasticsearchVersions": TierHandVerified, + "ListPackagesForDomain": TierHandVerified, + "ListTags": TierHandVerified, + "ListVpcEndpointAccess": TierHandVerified, + "ListVpcEndpoints": TierHandVerified, + "ListVpcEndpointsForDomain": TierHandVerified, + "PurchaseReservedElasticsearchInstanceOffering": TierHandVerified, + "RejectInboundCrossClusterSearchConnection": TierHandVerified, + "RemoveTags": TierHandVerified, + "RevokeVpcEndpointAccess": TierHandVerified, + "StartElasticsearchServiceSoftwareUpdate": TierHandVerified, + "UpdateElasticsearchDomainConfig": TierHandVerified, + "UpdatePackage": TierHandVerified, + "UpdateVpcEndpoint": TierHandVerified, + "UpgradeElasticsearchDomain": TierHandVerified, + }}, + "emr": {ModelBacked: true, Operations: map[string]Tier{ + "AddInstanceFleet": TierHandVerified, + "AddInstanceGroups": TierHandVerified, + "AddJobFlowSteps": TierHandVerified, + "AddTags": TierHandVerified, + "CancelSteps": TierHandVerified, + "CreatePersistentAppUI": TierHandVerified, + "CreateSecurityConfiguration": TierHandVerified, + "CreateStudio": TierHandVerified, + "CreateStudioSessionMapping": TierHandVerified, + "DeleteSecurityConfiguration": TierHandVerified, + "DeleteStudio": TierHandVerified, + "DeleteStudioSessionMapping": TierHandVerified, + "DescribeCluster": TierHandVerified, + "DescribeJobFlows": TierHandVerified, + "DescribeNotebookExecution": TierHandVerified, + "DescribePersistentAppUI": TierHandVerified, + "DescribeReleaseLabel": TierHandVerified, + "DescribeSecurityConfiguration": TierHandVerified, + "DescribeStep": TierHandVerified, + "DescribeStudio": TierHandVerified, + "GetAutoTerminationPolicy": TierHandVerified, + "GetBlockPublicAccessConfiguration": TierHandVerified, + "GetClusterSessionCredentials": TierHandVerified, + "GetManagedScalingPolicy": TierHandVerified, + "GetOnClusterAppUIPresignedURL": TierHandVerified, + "GetPersistentAppUIPresignedURL": TierHandVerified, + "GetStudioSessionMapping": TierHandVerified, + "ListBootstrapActions": TierHandVerified, + "ListClusters": TierHandVerified, + "ListInstanceFleets": TierHandVerified, + "ListInstanceGroups": TierHandVerified, + "ListInstances": TierHandVerified, + "ListNotebookExecutions": TierHandVerified, + "ListReleaseLabels": TierHandVerified, + "ListSecurityConfigurations": TierHandVerified, + "ListSteps": TierHandVerified, + "ListStudioSessionMappings": TierHandVerified, + "ListStudios": TierHandVerified, + "ListSupportedInstanceTypes": TierHandVerified, + "ModifyCluster": TierHandVerified, + "ModifyInstanceFleet": TierHandVerified, + "ModifyInstanceGroups": TierHandVerified, + "PutAutoScalingPolicy": TierHandVerified, + "PutAutoTerminationPolicy": TierHandVerified, + "PutBlockPublicAccessConfiguration": TierHandVerified, + "PutManagedScalingPolicy": TierHandVerified, + "RemoveAutoScalingPolicy": TierHandVerified, + "RemoveAutoTerminationPolicy": TierHandVerified, + "RemoveManagedScalingPolicy": TierHandVerified, + "RemoveTags": TierHandVerified, + "RunJobFlow": TierHandVerified, + "SetKeepJobFlowAliveWhenNoSteps": TierHandVerified, + "SetTerminationProtection": TierHandVerified, + "SetUnhealthyNodeReplacement": TierHandVerified, + "SetVisibleToAllUsers": TierHandVerified, + "StartNotebookExecution": TierHandVerified, + "StopNotebookExecution": TierHandVerified, + "TerminateJobFlows": TierHandVerified, + "UpdateStudio": TierHandVerified, + "UpdateStudioSessionMapping": TierHandVerified, + }}, + "eventbridge": {ModelBacked: true, Operations: map[string]Tier{ + "ActivateEventSource": TierUnimplemented, + "CancelReplay": TierHandVerified, + "CreateApiDestination": TierAutoCRUD, + "CreateArchive": TierHandVerified, + "CreateConnection": TierAutoCRUD, + "CreateEndpoint": TierAutoCRUD, + "CreateEventBus": TierHandVerified, + "CreatePartnerEventSource": TierAutoCRUD, + "DeactivateEventSource": TierUnimplemented, + "DeauthorizeConnection": TierUnimplemented, + "DeleteApiDestination": TierAutoCRUD, + "DeleteArchive": TierHandVerified, + "DeleteConnection": TierAutoCRUD, + "DeleteEndpoint": TierAutoCRUD, + "DeleteEventBus": TierHandVerified, + "DeletePartnerEventSource": TierAutoCRUD, + "DeleteRule": TierHandVerified, + "DescribeApiDestination": TierAutoCRUD, + "DescribeArchive": TierHandVerified, + "DescribeConnection": TierAutoCRUD, + "DescribeEndpoint": TierAutoCRUD, + "DescribeEventBus": TierHandVerified, + "DescribeEventSource": TierAutoCRUD, + "DescribePartnerEventSource": TierAutoCRUD, + "DescribeReplay": TierHandVerified, + "DescribeRule": TierHandVerified, + "DisableRule": TierHandVerified, + "EnableRule": TierHandVerified, + "ListApiDestinations": TierAutoCRUD, + "ListArchives": TierHandVerified, + "ListConnections": TierAutoCRUD, + "ListEndpoints": TierAutoCRUD, + "ListEventBuses": TierHandVerified, + "ListEventSources": TierAutoCRUD, + "ListPartnerEventSourceAccounts": TierAutoCRUD, + "ListPartnerEventSources": TierAutoCRUD, + "ListReplays": TierHandVerified, + "ListRuleNamesByTarget": TierAutoCRUD, + "ListRules": TierHandVerified, + "ListTagsForResource": TierAutoCRUD, + "ListTargetsByRule": TierHandVerified, + "PutEvents": TierHandVerified, + "PutPartnerEvents": TierAutoCRUD, + "PutPermission": TierAutoCRUD, + "PutRule": TierHandVerified, + "PutTargets": TierHandVerified, + "RemovePermission": TierUnimplemented, + "RemoveTargets": TierHandVerified, + "StartReplay": TierHandVerified, + "TagResource": TierAutoCRUD, + "TestEventPattern": TierHandVerified, + "UntagResource": TierAutoCRUD, + "UpdateApiDestination": TierAutoCRUD, + "UpdateArchive": TierHandVerified, + "UpdateConnection": TierAutoCRUD, + "UpdateEndpoint": TierAutoCRUD, + "UpdateEventBus": TierAutoCRUD, + }}, + "firehose": {ModelBacked: true, Operations: map[string]Tier{ + "CreateDeliveryStream": TierHandVerified, + "DeleteDeliveryStream": TierHandVerified, + "DescribeDeliveryStream": TierHandVerified, + "ListDeliveryStreams": TierHandVerified, + "ListTagsForDeliveryStream": TierHandVerified, + "PutRecord": TierHandVerified, + "PutRecordBatch": TierHandVerified, + "StartDeliveryStreamEncryption": TierHandVerified, + "StopDeliveryStreamEncryption": TierHandVerified, + "TagDeliveryStream": TierHandVerified, + "UntagDeliveryStream": TierHandVerified, + "UpdateDestination": TierHandVerified, + }}, + "fis": {ModelBacked: true, Operations: map[string]Tier{ + "CreateExperimentTemplate": TierHandVerified, + "CreateTargetAccountConfiguration": TierHandVerified, + "DeleteExperimentTemplate": TierHandVerified, + "DeleteTargetAccountConfiguration": TierHandVerified, + "GetAction": TierHandVerified, + "GetExperiment": TierHandVerified, + "GetExperimentTargetAccountConfiguration": TierHandVerified, + "GetExperimentTemplate": TierHandVerified, + "GetSafetyLever": TierHandVerified, + "GetTargetAccountConfiguration": TierHandVerified, + "GetTargetResourceType": TierHandVerified, + "ListActions": TierHandVerified, + "ListExperimentResolvedTargets": TierHandVerified, + "ListExperimentTargetAccountConfigurations": TierHandVerified, + "ListExperimentTemplates": TierHandVerified, + "ListExperiments": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListTargetAccountConfigurations": TierHandVerified, + "ListTargetResourceTypes": TierHandVerified, + "StartExperiment": TierHandVerified, + "StopExperiment": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateExperimentTemplate": TierHandVerified, + "UpdateSafetyLeverState": TierHandVerified, + "UpdateTargetAccountConfiguration": TierHandVerified, + }}, + "glacier": {ModelBacked: true, Operations: map[string]Tier{ + "AbortMultipartUpload": TierHandVerified, + "AbortVaultLock": TierHandVerified, + "AddTagsToVault": TierHandVerified, + "CompleteMultipartUpload": TierHandVerified, + "CompleteVaultLock": TierHandVerified, + "CreateVault": TierHandVerified, + "DeleteArchive": TierHandVerified, + "DeleteVault": TierHandVerified, + "DeleteVaultAccessPolicy": TierHandVerified, + "DeleteVaultNotifications": TierHandVerified, + "DescribeJob": TierHandVerified, + "DescribeVault": TierHandVerified, + "GetDataRetrievalPolicy": TierHandVerified, + "GetJobOutput": TierHandVerified, + "GetVaultAccessPolicy": TierHandVerified, + "GetVaultLock": TierHandVerified, + "GetVaultNotifications": TierHandVerified, + "InitiateJob": TierHandVerified, + "InitiateMultipartUpload": TierHandVerified, + "InitiateVaultLock": TierHandVerified, + "ListJobs": TierHandVerified, + "ListMultipartUploads": TierHandVerified, + "ListParts": TierHandVerified, + "ListProvisionedCapacity": TierHandVerified, + "ListTagsForVault": TierHandVerified, + "ListVaults": TierHandVerified, + "PurchaseProvisionedCapacity": TierHandVerified, + "RemoveTagsFromVault": TierHandVerified, + "SetDataRetrievalPolicy": TierHandVerified, + "SetVaultAccessPolicy": TierHandVerified, + "SetVaultNotifications": TierHandVerified, + "UploadArchive": TierHandVerified, + "UploadMultipartPart": TierHandVerified, + }}, + "glue": {ModelBacked: true, Operations: map[string]Tier{ + "BatchCreatePartition": TierHandVerified, + "BatchDeleteConnection": TierHandVerified, + "BatchDeletePartition": TierHandVerified, + "BatchDeleteTable": TierHandVerified, + "BatchDeleteTableVersion": TierHandVerified, + "BatchGetBlueprints": TierAutoCRUD, + "BatchGetCrawlers": TierHandVerified, + "BatchGetCustomEntityTypes": TierAutoCRUD, + "BatchGetDataQualityResult": TierAutoCRUD, + "BatchGetDevEndpoints": TierAutoCRUD, + "BatchGetJobs": TierHandVerified, + "BatchGetPartition": TierHandVerified, + "BatchGetTableOptimizer": TierAutoCRUD, + "BatchGetTriggers": TierHandVerified, + "BatchGetWorkflows": TierAutoCRUD, + "BatchPutDataQualityStatisticAnnotation": TierUnimplemented, + "BatchStopJobRun": TierHandVerified, + "BatchUpdatePartition": TierHandVerified, + "CancelDataQualityRuleRecommendationRun": TierUnimplemented, + "CancelDataQualityRulesetEvaluationRun": TierUnimplemented, + "CancelMLTaskRun": TierUnimplemented, + "CancelStatement": TierUnimplemented, + "CheckSchemaVersionValidity": TierUnimplemented, + "CreateBlueprint": TierAutoCRUD, + "CreateCatalog": TierAutoCRUD, + "CreateClassifier": TierAutoCRUD, + "CreateColumnStatisticsTaskSettings": TierAutoCRUD, + "CreateConnection": TierHandVerified, + "CreateCrawler": TierHandVerified, + "CreateCustomEntityType": TierAutoCRUD, + "CreateDataQualityRuleset": TierAutoCRUD, + "CreateDatabase": TierHandVerified, + "CreateDevEndpoint": TierAutoCRUD, + "CreateGlueIdentityCenterConfiguration": TierAutoCRUD, + "CreateIntegration": TierAutoCRUD, + "CreateIntegrationResourceProperty": TierAutoCRUD, + "CreateIntegrationTableProperties": TierAutoCRUD, + "CreateJob": TierHandVerified, + "CreateMLTransform": TierAutoCRUD, + "CreatePartition": TierHandVerified, + "CreatePartitionIndex": TierAutoCRUD, + "CreateRegistry": TierAutoCRUD, + "CreateSchema": TierAutoCRUD, + "CreateScript": TierAutoCRUD, + "CreateSecurityConfiguration": TierHandVerified, + "CreateSession": TierAutoCRUD, + "CreateTable": TierHandVerified, + "CreateTableOptimizer": TierAutoCRUD, + "CreateTrigger": TierHandVerified, + "CreateUsageProfile": TierAutoCRUD, + "CreateUserDefinedFunction": TierAutoCRUD, + "CreateWorkflow": TierAutoCRUD, + "DeleteBlueprint": TierAutoCRUD, + "DeleteCatalog": TierAutoCRUD, + "DeleteClassifier": TierAutoCRUD, + "DeleteColumnStatisticsForPartition": TierAutoCRUD, + "DeleteColumnStatisticsForTable": TierAutoCRUD, + "DeleteColumnStatisticsTaskSettings": TierAutoCRUD, + "DeleteConnection": TierHandVerified, + "DeleteConnectionType": TierAutoCRUD, + "DeleteCrawler": TierHandVerified, + "DeleteCustomEntityType": TierAutoCRUD, + "DeleteDataQualityRuleset": TierAutoCRUD, + "DeleteDatabase": TierHandVerified, + "DeleteDevEndpoint": TierAutoCRUD, + "DeleteGlueIdentityCenterConfiguration": TierAutoCRUD, + "DeleteIntegration": TierAutoCRUD, + "DeleteIntegrationResourceProperty": TierAutoCRUD, + "DeleteIntegrationTableProperties": TierAutoCRUD, + "DeleteJob": TierHandVerified, + "DeleteMLTransform": TierAutoCRUD, + "DeletePartition": TierAutoCRUD, + "DeletePartitionIndex": TierAutoCRUD, + "DeleteRegistry": TierAutoCRUD, + "DeleteResourcePolicy": TierAutoCRUD, + "DeleteSchema": TierAutoCRUD, + "DeleteSchemaVersions": TierAutoCRUD, + "DeleteSecurityConfiguration": TierHandVerified, + "DeleteSession": TierAutoCRUD, + "DeleteTable": TierHandVerified, + "DeleteTableOptimizer": TierAutoCRUD, + "DeleteTableVersion": TierHandVerified, + "DeleteTrigger": TierHandVerified, + "DeleteUsageProfile": TierAutoCRUD, + "DeleteUserDefinedFunction": TierAutoCRUD, + "DeleteWorkflow": TierAutoCRUD, + "DescribeConnectionType": TierAutoCRUD, + "DescribeEntity": TierAutoCRUD, + "DescribeInboundIntegrations": TierAutoCRUD, + "DescribeIntegrations": TierAutoCRUD, + "GetBlueprint": TierAutoCRUD, + "GetBlueprintRun": TierAutoCRUD, + "GetBlueprintRuns": TierAutoCRUD, + "GetCatalog": TierAutoCRUD, + "GetCatalogImportStatus": TierAutoCRUD, + "GetCatalogs": TierAutoCRUD, + "GetClassifier": TierAutoCRUD, + "GetClassifiers": TierAutoCRUD, + "GetColumnStatisticsForPartition": TierAutoCRUD, + "GetColumnStatisticsForTable": TierAutoCRUD, + "GetColumnStatisticsTaskRun": TierAutoCRUD, + "GetColumnStatisticsTaskRuns": TierAutoCRUD, + "GetColumnStatisticsTaskSettings": TierAutoCRUD, + "GetConnection": TierHandVerified, + "GetConnections": TierHandVerified, + "GetCrawler": TierHandVerified, + "GetCrawlerMetrics": TierHandVerified, + "GetCrawlers": TierHandVerified, + "GetCustomEntityType": TierAutoCRUD, + "GetDataCatalogEncryptionSettings": TierAutoCRUD, + "GetDataQualityModel": TierAutoCRUD, + "GetDataQualityModelResult": TierAutoCRUD, + "GetDataQualityResult": TierAutoCRUD, + "GetDataQualityRuleRecommendationRun": TierAutoCRUD, + "GetDataQualityRuleset": TierAutoCRUD, + "GetDataQualityRulesetEvaluationRun": TierAutoCRUD, + "GetDatabase": TierHandVerified, + "GetDatabases": TierHandVerified, + "GetDataflowGraph": TierAutoCRUD, + "GetDevEndpoint": TierAutoCRUD, + "GetDevEndpoints": TierAutoCRUD, + "GetEntityRecords": TierAutoCRUD, + "GetGlueIdentityCenterConfiguration": TierAutoCRUD, + "GetIntegrationResourceProperty": TierAutoCRUD, + "GetIntegrationTableProperties": TierAutoCRUD, + "GetJob": TierHandVerified, + "GetJobBookmark": TierHandVerified, + "GetJobRun": TierHandVerified, + "GetJobRuns": TierHandVerified, + "GetJobs": TierHandVerified, + "GetMLTaskRun": TierAutoCRUD, + "GetMLTaskRuns": TierAutoCRUD, + "GetMLTransform": TierAutoCRUD, + "GetMLTransforms": TierAutoCRUD, + "GetMapping": TierAutoCRUD, + "GetMaterializedViewRefreshTaskRun": TierAutoCRUD, + "GetPartition": TierHandVerified, + "GetPartitionIndexes": TierAutoCRUD, + "GetPartitions": TierHandVerified, + "GetPlan": TierAutoCRUD, + "GetRegistry": TierAutoCRUD, + "GetResourcePolicies": TierAutoCRUD, + "GetResourcePolicy": TierAutoCRUD, + "GetSchema": TierAutoCRUD, + "GetSchemaByDefinition": TierAutoCRUD, + "GetSchemaVersion": TierAutoCRUD, + "GetSchemaVersionsDiff": TierAutoCRUD, + "GetSecurityConfiguration": TierHandVerified, + "GetSecurityConfigurations": TierHandVerified, + "GetSession": TierAutoCRUD, + "GetStatement": TierAutoCRUD, + "GetTable": TierHandVerified, + "GetTableOptimizer": TierAutoCRUD, + "GetTableVersion": TierHandVerified, + "GetTableVersions": TierHandVerified, + "GetTables": TierHandVerified, + "GetTags": TierHandVerified, + "GetTrigger": TierHandVerified, + "GetTriggers": TierHandVerified, + "GetUnfilteredPartitionMetadata": TierAutoCRUD, + "GetUnfilteredPartitionsMetadata": TierAutoCRUD, + "GetUnfilteredTableMetadata": TierAutoCRUD, + "GetUsageProfile": TierAutoCRUD, + "GetUserDefinedFunction": TierAutoCRUD, + "GetUserDefinedFunctions": TierAutoCRUD, + "GetWorkflow": TierAutoCRUD, + "GetWorkflowRun": TierAutoCRUD, + "GetWorkflowRunProperties": TierAutoCRUD, + "GetWorkflowRuns": TierAutoCRUD, + "ImportCatalogToGlue": TierUnimplemented, + "ListBlueprints": TierAutoCRUD, + "ListColumnStatisticsTaskRuns": TierAutoCRUD, + "ListConnectionTypes": TierAutoCRUD, + "ListCrawlers": TierAutoCRUD, + "ListCrawls": TierAutoCRUD, + "ListCustomEntityTypes": TierAutoCRUD, + "ListDataQualityResults": TierAutoCRUD, + "ListDataQualityRuleRecommendationRuns": TierAutoCRUD, + "ListDataQualityRulesetEvaluationRuns": TierAutoCRUD, + "ListDataQualityRulesets": TierAutoCRUD, + "ListDataQualityStatisticAnnotations": TierAutoCRUD, + "ListDataQualityStatistics": TierAutoCRUD, + "ListDevEndpoints": TierAutoCRUD, + "ListEntities": TierAutoCRUD, + "ListIntegrationResourceProperties": TierAutoCRUD, + "ListJobs": TierAutoCRUD, + "ListMLTransforms": TierAutoCRUD, + "ListMaterializedViewRefreshTaskRuns": TierAutoCRUD, + "ListRegistries": TierAutoCRUD, + "ListSchemaVersions": TierAutoCRUD, + "ListSchemas": TierAutoCRUD, + "ListSessions": TierAutoCRUD, + "ListStatements": TierAutoCRUD, + "ListTableOptimizerRuns": TierAutoCRUD, + "ListTriggers": TierAutoCRUD, + "ListUsageProfiles": TierAutoCRUD, + "ListWorkflows": TierAutoCRUD, + "ModifyIntegration": TierAutoCRUD, + "PutDataCatalogEncryptionSettings": TierAutoCRUD, + "PutDataQualityProfileAnnotation": TierAutoCRUD, + "PutResourcePolicy": TierAutoCRUD, + "PutSchemaVersionMetadata": TierAutoCRUD, + "PutWorkflowRunProperties": TierAutoCRUD, + "QuerySchemaVersionMetadata": TierUnimplemented, + "RegisterConnectionType": TierAutoCRUD, + "RegisterSchemaVersion": TierAutoCRUD, + "RemoveSchemaVersionMetadata": TierUnimplemented, + "ResetJobBookmark": TierHandVerified, + "ResumeWorkflowRun": TierUnimplemented, + "RunStatement": TierUnimplemented, + "SearchTables": TierUnimplemented, + "StartBlueprintRun": TierUnimplemented, + "StartColumnStatisticsTaskRun": TierUnimplemented, + "StartColumnStatisticsTaskRunSchedule": TierUnimplemented, + "StartCrawler": TierHandVerified, + "StartCrawlerSchedule": TierUnimplemented, + "StartDataQualityRuleRecommendationRun": TierUnimplemented, + "StartDataQualityRulesetEvaluationRun": TierUnimplemented, + "StartExportLabelsTaskRun": TierUnimplemented, + "StartImportLabelsTaskRun": TierUnimplemented, + "StartJobRun": TierHandVerified, + "StartMLEvaluationTaskRun": TierUnimplemented, + "StartMLLabelingSetGenerationTaskRun": TierUnimplemented, + "StartMaterializedViewRefreshTaskRun": TierUnimplemented, + "StartTrigger": TierHandVerified, + "StartWorkflowRun": TierUnimplemented, + "StopColumnStatisticsTaskRun": TierUnimplemented, + "StopColumnStatisticsTaskRunSchedule": TierUnimplemented, + "StopCrawler": TierHandVerified, + "StopCrawlerSchedule": TierUnimplemented, + "StopMaterializedViewRefreshTaskRun": TierUnimplemented, + "StopSession": TierUnimplemented, + "StopTrigger": TierHandVerified, + "StopWorkflowRun": TierUnimplemented, + "TagResource": TierHandVerified, + "TestConnection": TierUnimplemented, + "UntagResource": TierHandVerified, + "UpdateBlueprint": TierAutoCRUD, + "UpdateCatalog": TierAutoCRUD, + "UpdateClassifier": TierAutoCRUD, + "UpdateColumnStatisticsForPartition": TierAutoCRUD, + "UpdateColumnStatisticsForTable": TierAutoCRUD, + "UpdateColumnStatisticsTaskSettings": TierAutoCRUD, + "UpdateConnection": TierHandVerified, + "UpdateCrawler": TierHandVerified, + "UpdateCrawlerSchedule": TierAutoCRUD, + "UpdateDataQualityRuleset": TierAutoCRUD, + "UpdateDatabase": TierHandVerified, + "UpdateDevEndpoint": TierAutoCRUD, + "UpdateGlueIdentityCenterConfiguration": TierAutoCRUD, + "UpdateIntegrationResourceProperty": TierAutoCRUD, + "UpdateIntegrationTableProperties": TierAutoCRUD, + "UpdateJob": TierHandVerified, + "UpdateJobFromSourceControl": TierAutoCRUD, + "UpdateMLTransform": TierAutoCRUD, + "UpdatePartition": TierHandVerified, + "UpdateRegistry": TierAutoCRUD, + "UpdateSchema": TierAutoCRUD, + "UpdateSourceControlFromJob": TierAutoCRUD, + "UpdateTable": TierHandVerified, + "UpdateTableOptimizer": TierAutoCRUD, + "UpdateTrigger": TierHandVerified, + "UpdateUsageProfile": TierAutoCRUD, + "UpdateUserDefinedFunction": TierAutoCRUD, + "UpdateWorkflow": TierAutoCRUD, + }}, + "iam": {ModelBacked: true, Operations: map[string]Tier{ + "AcceptDelegationRequest": TierUnimplemented, + "AddClientIDToOpenIDConnectProvider": TierUnimplemented, + "AddRoleToInstanceProfile": TierHandVerified, + "AddUserToGroup": TierHandVerified, + "AssociateDelegationRequest": TierUnimplemented, + "AttachGroupPolicy": TierHandVerified, + "AttachRolePolicy": TierHandVerified, + "AttachUserPolicy": TierHandVerified, + "ChangePassword": TierUnimplemented, + "CreateAccessKey": TierHandVerified, + "CreateAccountAlias": TierUnimplemented, + "CreateDelegationRequest": TierUnimplemented, + "CreateGroup": TierHandVerified, + "CreateInstanceProfile": TierHandVerified, + "CreateLoginProfile": TierUnimplemented, + "CreateOpenIDConnectProvider": TierUnimplemented, + "CreatePolicy": TierHandVerified, + "CreatePolicyVersion": TierHandVerified, + "CreateRole": TierHandVerified, + "CreateSAMLProvider": TierUnimplemented, + "CreateServiceLinkedRole": TierUnimplemented, + "CreateServiceSpecificCredential": TierUnimplemented, + "CreateUser": TierHandVerified, + "CreateVirtualMFADevice": TierUnimplemented, + "DeactivateMFADevice": TierUnimplemented, + "DeleteAccessKey": TierHandVerified, + "DeleteAccountAlias": TierUnimplemented, + "DeleteAccountPasswordPolicy": TierUnimplemented, + "DeleteGroup": TierHandVerified, + "DeleteGroupPolicy": TierHandVerified, + "DeleteInstanceProfile": TierHandVerified, + "DeleteLoginProfile": TierUnimplemented, + "DeleteOpenIDConnectProvider": TierUnimplemented, + "DeletePolicy": TierHandVerified, + "DeletePolicyVersion": TierUnimplemented, + "DeleteRole": TierHandVerified, + "DeleteRolePermissionsBoundary": TierUnimplemented, + "DeleteRolePolicy": TierHandVerified, + "DeleteSAMLProvider": TierUnimplemented, + "DeleteSSHPublicKey": TierUnimplemented, + "DeleteServerCertificate": TierUnimplemented, + "DeleteServiceLinkedRole": TierUnimplemented, + "DeleteServiceSpecificCredential": TierUnimplemented, + "DeleteSigningCertificate": TierUnimplemented, + "DeleteUser": TierHandVerified, + "DeleteUserPermissionsBoundary": TierUnimplemented, + "DeleteUserPolicy": TierHandVerified, + "DeleteVirtualMFADevice": TierUnimplemented, + "DetachGroupPolicy": TierHandVerified, + "DetachRolePolicy": TierHandVerified, + "DetachUserPolicy": TierHandVerified, + "DisableOrganizationsRootCredentialsManagement": TierUnimplemented, + "DisableOrganizationsRootSessions": TierUnimplemented, + "DisableOutboundWebIdentityFederation": TierUnimplemented, + "EnableMFADevice": TierUnimplemented, + "EnableOrganizationsRootCredentialsManagement": TierUnimplemented, + "EnableOrganizationsRootSessions": TierUnimplemented, + "EnableOutboundWebIdentityFederation": TierUnimplemented, + "GenerateCredentialReport": TierUnimplemented, + "GenerateOrganizationsAccessReport": TierUnimplemented, + "GenerateServiceLastAccessedDetails": TierUnimplemented, + "GetAccessKeyLastUsed": TierUnimplemented, + "GetAccountAuthorizationDetails": TierUnimplemented, + "GetAccountPasswordPolicy": TierUnimplemented, + "GetAccountSummary": TierUnimplemented, + "GetContextKeysForCustomPolicy": TierUnimplemented, + "GetContextKeysForPrincipalPolicy": TierUnimplemented, + "GetCredentialReport": TierUnimplemented, + "GetDelegationRequest": TierUnimplemented, + "GetGroup": TierHandVerified, + "GetGroupPolicy": TierHandVerified, + "GetHumanReadableSummary": TierUnimplemented, + "GetInstanceProfile": TierHandVerified, + "GetLoginProfile": TierUnimplemented, + "GetMFADevice": TierUnimplemented, + "GetOpenIDConnectProvider": TierUnimplemented, + "GetOrganizationsAccessReport": TierUnimplemented, + "GetOutboundWebIdentityFederationInfo": TierUnimplemented, + "GetPolicy": TierHandVerified, + "GetPolicyVersion": TierHandVerified, + "GetRole": TierHandVerified, + "GetRolePolicy": TierHandVerified, + "GetSAMLProvider": TierUnimplemented, + "GetSSHPublicKey": TierUnimplemented, + "GetServerCertificate": TierUnimplemented, + "GetServiceLastAccessedDetails": TierUnimplemented, + "GetServiceLastAccessedDetailsWithEntities": TierUnimplemented, + "GetServiceLinkedRoleDeletionStatus": TierUnimplemented, + "GetUser": TierHandVerified, + "GetUserPolicy": TierHandVerified, + "ListAccessKeys": TierHandVerified, + "ListAccountAliases": TierUnimplemented, + "ListAttachedGroupPolicies": TierHandVerified, + "ListAttachedRolePolicies": TierHandVerified, + "ListAttachedUserPolicies": TierHandVerified, + "ListDelegationRequests": TierUnimplemented, + "ListEntitiesForPolicy": TierUnimplemented, + "ListGroupPolicies": TierHandVerified, + "ListGroups": TierHandVerified, + "ListGroupsForUser": TierUnimplemented, + "ListInstanceProfileTags": TierUnimplemented, + "ListInstanceProfiles": TierHandVerified, + "ListInstanceProfilesForRole": TierUnimplemented, + "ListMFADeviceTags": TierUnimplemented, + "ListMFADevices": TierUnimplemented, + "ListOpenIDConnectProviderTags": TierUnimplemented, + "ListOpenIDConnectProviders": TierUnimplemented, + "ListOrganizationsFeatures": TierUnimplemented, + "ListPolicies": TierUnimplemented, + "ListPoliciesGrantingServiceAccess": TierUnimplemented, + "ListPolicyTags": TierUnimplemented, + "ListPolicyVersions": TierHandVerified, + "ListRolePolicies": TierHandVerified, + "ListRoleTags": TierHandVerified, + "ListRoles": TierHandVerified, + "ListSAMLProviderTags": TierUnimplemented, + "ListSAMLProviders": TierUnimplemented, + "ListSSHPublicKeys": TierUnimplemented, + "ListServerCertificateTags": TierUnimplemented, + "ListServerCertificates": TierUnimplemented, + "ListServiceSpecificCredentials": TierUnimplemented, + "ListSigningCertificates": TierUnimplemented, + "ListUserPolicies": TierHandVerified, + "ListUserTags": TierHandVerified, + "ListUsers": TierHandVerified, + "ListVirtualMFADevices": TierUnimplemented, + "PutGroupPolicy": TierHandVerified, + "PutRolePermissionsBoundary": TierUnimplemented, + "PutRolePolicy": TierHandVerified, + "PutUserPermissionsBoundary": TierUnimplemented, + "PutUserPolicy": TierHandVerified, + "RejectDelegationRequest": TierUnimplemented, + "RemoveClientIDFromOpenIDConnectProvider": TierUnimplemented, + "RemoveRoleFromInstanceProfile": TierHandVerified, + "RemoveUserFromGroup": TierHandVerified, + "ResetServiceSpecificCredential": TierUnimplemented, + "ResyncMFADevice": TierUnimplemented, + "SendDelegationToken": TierUnimplemented, + "SetDefaultPolicyVersion": TierUnimplemented, + "SetSecurityTokenServicePreferences": TierUnimplemented, + "SimulateCustomPolicy": TierUnimplemented, + "SimulatePrincipalPolicy": TierUnimplemented, + "TagInstanceProfile": TierUnimplemented, + "TagMFADevice": TierUnimplemented, + "TagOpenIDConnectProvider": TierUnimplemented, + "TagPolicy": TierUnimplemented, + "TagRole": TierHandVerified, + "TagSAMLProvider": TierUnimplemented, + "TagServerCertificate": TierUnimplemented, + "TagUser": TierHandVerified, + "UntagInstanceProfile": TierUnimplemented, + "UntagMFADevice": TierUnimplemented, + "UntagOpenIDConnectProvider": TierUnimplemented, + "UntagPolicy": TierUnimplemented, + "UntagRole": TierHandVerified, + "UntagSAMLProvider": TierUnimplemented, + "UntagServerCertificate": TierUnimplemented, + "UntagUser": TierHandVerified, + "UpdateAccessKey": TierHandVerified, + "UpdateAccountPasswordPolicy": TierUnimplemented, + "UpdateAssumeRolePolicy": TierHandVerified, + "UpdateDelegationRequest": TierUnimplemented, + "UpdateGroup": TierUnimplemented, + "UpdateLoginProfile": TierUnimplemented, + "UpdateOpenIDConnectProviderThumbprint": TierUnimplemented, + "UpdateRole": TierUnimplemented, + "UpdateRoleDescription": TierUnimplemented, + "UpdateSAMLProvider": TierUnimplemented, + "UpdateSSHPublicKey": TierUnimplemented, + "UpdateServerCertificate": TierUnimplemented, + "UpdateServiceSpecificCredential": TierUnimplemented, + "UpdateSigningCertificate": TierUnimplemented, + "UpdateUser": TierHandVerified, + "UploadSSHPublicKey": TierUnimplemented, + "UploadServerCertificate": TierUnimplemented, + "UploadSigningCertificate": TierUnimplemented, + }}, + "identitystore": {ModelBacked: false, Operations: map[string]Tier{ + "ActivateUser": TierHandVerified, + "BatchCreateGroups": TierHandVerified, + "BatchCreateUsers": TierHandVerified, + "CreateDirectory": TierHandVerified, + "CreateExternalIdentityProviderConfigurationForApplication": TierHandVerified, + "CreateGroup": TierHandVerified, + "CreateGroupMembership": TierHandVerified, + "CreateUser": TierHandVerified, + "DeactivateUser": TierHandVerified, + "DeleteDirectory": TierHandVerified, + "DeleteGroup": TierHandVerified, + "DeleteGroupMembership": TierHandVerified, + "DeleteIdentityProviderConfigurationForApplication": TierHandVerified, + "DeleteUser": TierHandVerified, + "DescribeDirectory": TierHandVerified, + "DescribeGroup": TierHandVerified, + "DescribeGroupMembership": TierHandVerified, + "DescribeUser": TierHandVerified, + "Description": TierHandVerified, + "DisplayName": TierHandVerified, + "Emails": TierHandVerified, + "GetGroupId": TierHandVerified, + "GetGroupMembershipId": TierHandVerified, + "GetUserId": TierHandVerified, + "IsMemberInGroups": TierHandVerified, + "ListDirectories": TierHandVerified, + "ListGroupMemberships": TierHandVerified, + "ListGroupMembershipsForMember": TierHandVerified, + "ListGroups": TierHandVerified, + "ListIdentityProvidersForApplication": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListUsers": TierHandVerified, + "ResetUserPassword": TierHandVerified, + "SearchGroups": TierHandVerified, + "SearchUsers": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateDirectory": TierHandVerified, + "UpdateGroup": TierHandVerified, + "UpdateUser": TierHandVerified, + }}, + "iot": {ModelBacked: true, Operations: map[string]Tier{ + "AcceptCertificateTransfer": TierUnimplemented, + "AddThingToBillingGroup": TierUnimplemented, + "AddThingToThingGroup": TierHandVerified, + "AssociateSbomWithPackageVersion": TierUnimplemented, + "AssociateTargetsWithJob": TierUnimplemented, + "AttachPolicy": TierHandVerified, + "AttachPrincipalPolicy": TierUnimplemented, + "AttachSecurityProfile": TierUnimplemented, + "AttachThingPrincipal": TierHandVerified, + "CancelAuditMitigationActionsTask": TierUnimplemented, + "CancelAuditTask": TierUnimplemented, + "CancelCertificateTransfer": TierUnimplemented, + "CancelDetectMitigationActionsTask": TierUnimplemented, + "CancelJob": TierHandVerified, + "CancelJobExecution": TierUnimplemented, + "ClearDefaultAuthorizer": TierUnimplemented, + "ConfirmTopicRuleDestination": TierUnimplemented, + "CreateAuditSuppression": TierUnimplemented, + "CreateAuthorizer": TierUnimplemented, + "CreateBillingGroup": TierUnimplemented, + "CreateCertificateFromCsr": TierUnimplemented, + "CreateCertificateProvider": TierUnimplemented, + "CreateCommand": TierUnimplemented, + "CreateCustomMetric": TierUnimplemented, + "CreateDimension": TierUnimplemented, + "CreateDomainConfiguration": TierUnimplemented, + "CreateDynamicThingGroup": TierUnimplemented, + "CreateFleetMetric": TierUnimplemented, + "CreateJob": TierHandVerified, + "CreateJobTemplate": TierUnimplemented, + "CreateKeysAndCertificate": TierHandVerified, + "CreateMitigationAction": TierUnimplemented, + "CreateOTAUpdate": TierUnimplemented, + "CreatePackage": TierUnimplemented, + "CreatePackageVersion": TierUnimplemented, + "CreatePolicy": TierHandVerified, + "CreatePolicyVersion": TierHandVerified, + "CreateProvisioningClaim": TierUnimplemented, + "CreateProvisioningTemplate": TierUnimplemented, + "CreateProvisioningTemplateVersion": TierUnimplemented, + "CreateRoleAlias": TierHandVerified, + "CreateScheduledAudit": TierUnimplemented, + "CreateSecurityProfile": TierUnimplemented, + "CreateStream": TierUnimplemented, + "CreateThing": TierHandVerified, + "CreateThingGroup": TierHandVerified, + "CreateThingType": TierHandVerified, + "CreateTopicRule": TierHandVerified, + "CreateTopicRuleDestination": TierUnimplemented, + "DeleteAccountAuditConfiguration": TierUnimplemented, + "DeleteAuditSuppression": TierUnimplemented, + "DeleteAuthorizer": TierUnimplemented, + "DeleteBillingGroup": TierUnimplemented, + "DeleteCACertificate": TierUnimplemented, + "DeleteCertificate": TierHandVerified, + "DeleteCertificateProvider": TierUnimplemented, + "DeleteCommand": TierUnimplemented, + "DeleteCommandExecution": TierUnimplemented, + "DeleteCustomMetric": TierUnimplemented, + "DeleteDimension": TierUnimplemented, + "DeleteDomainConfiguration": TierUnimplemented, + "DeleteDynamicThingGroup": TierUnimplemented, + "DeleteFleetMetric": TierUnimplemented, + "DeleteJob": TierHandVerified, + "DeleteJobExecution": TierUnimplemented, + "DeleteJobTemplate": TierUnimplemented, + "DeleteMitigationAction": TierUnimplemented, + "DeleteOTAUpdate": TierUnimplemented, + "DeletePackage": TierUnimplemented, + "DeletePackageVersion": TierUnimplemented, + "DeletePolicy": TierHandVerified, + "DeletePolicyVersion": TierHandVerified, + "DeleteProvisioningTemplate": TierUnimplemented, + "DeleteProvisioningTemplateVersion": TierUnimplemented, + "DeleteRegistrationCode": TierUnimplemented, + "DeleteRoleAlias": TierHandVerified, + "DeleteScheduledAudit": TierUnimplemented, + "DeleteSecurityProfile": TierUnimplemented, + "DeleteStream": TierUnimplemented, + "DeleteThing": TierHandVerified, + "DeleteThingGroup": TierHandVerified, + "DeleteThingType": TierHandVerified, + "DeleteTopicRule": TierHandVerified, + "DeleteTopicRuleDestination": TierUnimplemented, + "DeleteV2LoggingLevel": TierUnimplemented, + "DeprecateThingType": TierHandVerified, + "DescribeAccountAuditConfiguration": TierUnimplemented, + "DescribeAuditFinding": TierUnimplemented, + "DescribeAuditMitigationActionsTask": TierUnimplemented, + "DescribeAuditSuppression": TierUnimplemented, + "DescribeAuditTask": TierUnimplemented, + "DescribeAuthorizer": TierUnimplemented, + "DescribeBillingGroup": TierUnimplemented, + "DescribeCACertificate": TierUnimplemented, + "DescribeCertificate": TierHandVerified, + "DescribeCertificateProvider": TierUnimplemented, + "DescribeCustomMetric": TierUnimplemented, + "DescribeDefaultAuthorizer": TierUnimplemented, + "DescribeDetectMitigationActionsTask": TierUnimplemented, + "DescribeDimension": TierUnimplemented, + "DescribeDomainConfiguration": TierUnimplemented, + "DescribeEncryptionConfiguration": TierUnimplemented, + "DescribeEndpoint": TierHandVerified, + "DescribeEventConfigurations": TierUnimplemented, + "DescribeFleetMetric": TierUnimplemented, + "DescribeIndex": TierUnimplemented, + "DescribeJob": TierHandVerified, + "DescribeJobExecution": TierUnimplemented, + "DescribeJobTemplate": TierUnimplemented, + "DescribeManagedJobTemplate": TierUnimplemented, + "DescribeMitigationAction": TierUnimplemented, + "DescribeProvisioningTemplate": TierUnimplemented, + "DescribeProvisioningTemplateVersion": TierUnimplemented, + "DescribeRoleAlias": TierHandVerified, + "DescribeScheduledAudit": TierUnimplemented, + "DescribeSecurityProfile": TierUnimplemented, + "DescribeStream": TierUnimplemented, + "DescribeThing": TierHandVerified, + "DescribeThingGroup": TierHandVerified, + "DescribeThingRegistrationTask": TierUnimplemented, + "DescribeThingType": TierHandVerified, + "DetachPolicy": TierHandVerified, + "DetachPrincipalPolicy": TierUnimplemented, + "DetachSecurityProfile": TierUnimplemented, + "DetachThingPrincipal": TierHandVerified, + "DisableTopicRule": TierHandVerified, + "DisassociateSbomFromPackageVersion": TierUnimplemented, + "EnableTopicRule": TierHandVerified, + "GetBehaviorModelTrainingSummaries": TierUnimplemented, + "GetBucketsAggregation": TierUnimplemented, + "GetCardinality": TierUnimplemented, + "GetCommand": TierUnimplemented, + "GetCommandExecution": TierUnimplemented, + "GetEffectivePolicies": TierUnimplemented, + "GetIndexingConfiguration": TierUnimplemented, + "GetJobDocument": TierUnimplemented, + "GetLoggingOptions": TierUnimplemented, + "GetOTAUpdate": TierUnimplemented, + "GetPackage": TierUnimplemented, + "GetPackageConfiguration": TierUnimplemented, + "GetPackageVersion": TierUnimplemented, + "GetPercentiles": TierUnimplemented, + "GetPolicy": TierHandVerified, + "GetPolicyVersion": TierHandVerified, + "GetRegistrationCode": TierUnimplemented, + "GetStatistics": TierUnimplemented, + "GetThingConnectivityData": TierUnimplemented, + "GetTopicRule": TierHandVerified, + "GetTopicRuleDestination": TierUnimplemented, + "GetV2LoggingOptions": TierUnimplemented, + "ListActiveViolations": TierUnimplemented, + "ListAttachedPolicies": TierHandVerified, + "ListAuditFindings": TierUnimplemented, + "ListAuditMitigationActionsExecutions": TierUnimplemented, + "ListAuditMitigationActionsTasks": TierUnimplemented, + "ListAuditSuppressions": TierUnimplemented, + "ListAuditTasks": TierUnimplemented, + "ListAuthorizers": TierUnimplemented, + "ListBillingGroups": TierUnimplemented, + "ListCACertificates": TierUnimplemented, + "ListCertificateProviders": TierUnimplemented, + "ListCertificates": TierHandVerified, + "ListCertificatesByCA": TierUnimplemented, + "ListCommandExecutions": TierUnimplemented, + "ListCommands": TierUnimplemented, + "ListCustomMetrics": TierUnimplemented, + "ListDetectMitigationActionsExecutions": TierUnimplemented, + "ListDetectMitigationActionsTasks": TierUnimplemented, + "ListDimensions": TierUnimplemented, + "ListDomainConfigurations": TierUnimplemented, + "ListFleetMetrics": TierUnimplemented, + "ListIndices": TierUnimplemented, + "ListJobExecutionsForJob": TierUnimplemented, + "ListJobExecutionsForThing": TierUnimplemented, + "ListJobTemplates": TierUnimplemented, + "ListJobs": TierHandVerified, + "ListManagedJobTemplates": TierUnimplemented, + "ListMetricValues": TierUnimplemented, + "ListMitigationActions": TierUnimplemented, + "ListOTAUpdates": TierUnimplemented, + "ListOutgoingCertificates": TierUnimplemented, + "ListPackageVersions": TierUnimplemented, + "ListPackages": TierUnimplemented, + "ListPolicies": TierHandVerified, + "ListPolicyPrincipals": TierUnimplemented, + "ListPolicyVersions": TierHandVerified, + "ListPrincipalPolicies": TierUnimplemented, + "ListPrincipalThings": TierHandVerified, + "ListPrincipalThingsV2": TierUnimplemented, + "ListProvisioningTemplateVersions": TierUnimplemented, + "ListProvisioningTemplates": TierUnimplemented, + "ListRelatedResourcesForAuditFinding": TierUnimplemented, + "ListRoleAliases": TierHandVerified, + "ListSbomValidationResults": TierUnimplemented, + "ListScheduledAudits": TierUnimplemented, + "ListSecurityProfiles": TierUnimplemented, + "ListSecurityProfilesForTarget": TierUnimplemented, + "ListStreams": TierUnimplemented, + "ListTagsForResource": TierHandVerified, + "ListTargetsForPolicy": TierHandVerified, + "ListTargetsForSecurityProfile": TierUnimplemented, + "ListThingGroups": TierHandVerified, + "ListThingGroupsForThing": TierHandVerified, + "ListThingPrincipals": TierHandVerified, + "ListThingPrincipalsV2": TierUnimplemented, + "ListThingRegistrationTaskReports": TierUnimplemented, + "ListThingRegistrationTasks": TierUnimplemented, + "ListThingTypes": TierHandVerified, + "ListThings": TierHandVerified, + "ListThingsInBillingGroup": TierUnimplemented, + "ListThingsInThingGroup": TierHandVerified, + "ListTopicRuleDestinations": TierUnimplemented, + "ListTopicRules": TierHandVerified, + "ListV2LoggingLevels": TierUnimplemented, + "ListViolationEvents": TierUnimplemented, + "PutVerificationStateOnViolation": TierUnimplemented, + "RegisterCACertificate": TierUnimplemented, + "RegisterCertificate": TierHandVerified, + "RegisterCertificateWithoutCA": TierHandVerified, + "RegisterThing": TierUnimplemented, + "RejectCertificateTransfer": TierUnimplemented, + "RemoveThingFromBillingGroup": TierUnimplemented, + "RemoveThingFromThingGroup": TierHandVerified, + "ReplaceTopicRule": TierHandVerified, + "SearchIndex": TierUnimplemented, + "SetDefaultAuthorizer": TierUnimplemented, + "SetDefaultPolicyVersion": TierHandVerified, + "SetLoggingOptions": TierUnimplemented, + "SetV2LoggingLevel": TierUnimplemented, + "SetV2LoggingOptions": TierUnimplemented, + "StartAuditMitigationActionsTask": TierUnimplemented, + "StartDetectMitigationActionsTask": TierUnimplemented, + "StartOnDemandAuditTask": TierUnimplemented, + "StartThingRegistrationTask": TierUnimplemented, + "StopThingRegistrationTask": TierUnimplemented, + "TagResource": TierHandVerified, + "TestAuthorization": TierUnimplemented, + "TestInvokeAuthorizer": TierUnimplemented, + "TransferCertificate": TierUnimplemented, + "UntagResource": TierHandVerified, + "UpdateAccountAuditConfiguration": TierUnimplemented, + "UpdateAuditSuppression": TierUnimplemented, + "UpdateAuthorizer": TierUnimplemented, + "UpdateBillingGroup": TierUnimplemented, + "UpdateCACertificate": TierUnimplemented, + "UpdateCertificate": TierHandVerified, + "UpdateCertificateProvider": TierUnimplemented, + "UpdateCommand": TierUnimplemented, + "UpdateCustomMetric": TierUnimplemented, + "UpdateDimension": TierUnimplemented, + "UpdateDomainConfiguration": TierUnimplemented, + "UpdateDynamicThingGroup": TierUnimplemented, + "UpdateEncryptionConfiguration": TierUnimplemented, + "UpdateEventConfigurations": TierUnimplemented, + "UpdateFleetMetric": TierUnimplemented, + "UpdateIndexingConfiguration": TierUnimplemented, + "UpdateJob": TierUnimplemented, + "UpdateMitigationAction": TierUnimplemented, + "UpdatePackage": TierUnimplemented, + "UpdatePackageConfiguration": TierUnimplemented, + "UpdatePackageVersion": TierUnimplemented, + "UpdateProvisioningTemplate": TierUnimplemented, + "UpdateRoleAlias": TierHandVerified, + "UpdateScheduledAudit": TierUnimplemented, + "UpdateSecurityProfile": TierUnimplemented, + "UpdateStream": TierUnimplemented, + "UpdateThing": TierHandVerified, + "UpdateThingGroup": TierHandVerified, + "UpdateThingGroupsForThing": TierUnimplemented, + "UpdateThingType": TierHandVerified, + "UpdateTopicRuleDestination": TierUnimplemented, + "ValidateSecurityProfileBehaviors": TierUnimplemented, + }}, + "iotdataplane": {ModelBacked: true, Operations: map[string]Tier{ + "DeleteConnection": TierHandVerified, + "DeleteThingShadow": TierHandVerified, + "GetRetainedMessage": TierHandVerified, + "GetThingShadow": TierHandVerified, + "ListNamedShadowsForThing": TierHandVerified, + "ListRetainedMessages": TierHandVerified, + "Publish": TierHandVerified, + "UpdateThingShadow": TierHandVerified, + }}, + "iotwireless": {ModelBacked: true, Operations: map[string]Tier{ + "AssociateAwsAccountWithPartnerAccount": TierUnimplemented, + "AssociateMulticastGroupWithFuotaTask": TierUnimplemented, + "AssociateWirelessDeviceWithFuotaTask": TierUnimplemented, + "AssociateWirelessDeviceWithMulticastGroup": TierUnimplemented, + "AssociateWirelessDeviceWithThing": TierUnimplemented, + "AssociateWirelessGatewayWithCertificate": TierUnimplemented, + "AssociateWirelessGatewayWithThing": TierUnimplemented, + "CancelMulticastGroupSession": TierUnimplemented, + "CreateDestination": TierHandVerified, + "CreateDeviceProfile": TierHandVerified, + "CreateFuotaTask": TierHandVerified, + "CreateMulticastGroup": TierHandVerified, + "CreateNetworkAnalyzerConfiguration": TierHandVerified, + "CreateServiceProfile": TierHandVerified, + "CreateWirelessDevice": TierHandVerified, + "CreateWirelessGateway": TierHandVerified, + "CreateWirelessGatewayTask": TierUnimplemented, + "CreateWirelessGatewayTaskDefinition": TierUnimplemented, + "DeleteDestination": TierHandVerified, + "DeleteDeviceProfile": TierHandVerified, + "DeleteFuotaTask": TierHandVerified, + "DeleteMulticastGroup": TierHandVerified, + "DeleteNetworkAnalyzerConfiguration": TierHandVerified, + "DeleteQueuedMessages": TierUnimplemented, + "DeleteServiceProfile": TierHandVerified, + "DeleteWirelessDevice": TierHandVerified, + "DeleteWirelessDeviceImportTask": TierUnimplemented, + "DeleteWirelessGateway": TierHandVerified, + "DeleteWirelessGatewayTask": TierUnimplemented, + "DeleteWirelessGatewayTaskDefinition": TierUnimplemented, + "DeregisterWirelessDevice": TierUnimplemented, + "DisassociateAwsAccountFromPartnerAccount": TierUnimplemented, + "DisassociateMulticastGroupFromFuotaTask": TierUnimplemented, + "DisassociateWirelessDeviceFromFuotaTask": TierUnimplemented, + "DisassociateWirelessDeviceFromMulticastGroup": TierUnimplemented, + "DisassociateWirelessDeviceFromThing": TierUnimplemented, + "DisassociateWirelessGatewayFromCertificate": TierUnimplemented, + "DisassociateWirelessGatewayFromThing": TierUnimplemented, + "GetDestination": TierHandVerified, + "GetDeviceProfile": TierHandVerified, + "GetEventConfigurationByResourceTypes": TierUnimplemented, + "GetFuotaTask": TierHandVerified, + "GetLogLevelsByResourceTypes": TierUnimplemented, + "GetMetricConfiguration": TierUnimplemented, + "GetMetrics": TierUnimplemented, + "GetMulticastGroup": TierHandVerified, + "GetMulticastGroupSession": TierUnimplemented, + "GetNetworkAnalyzerConfiguration": TierHandVerified, + "GetPartnerAccount": TierUnimplemented, + "GetPosition": TierUnimplemented, + "GetPositionConfiguration": TierUnimplemented, + "GetPositionEstimate": TierUnimplemented, + "GetResourceEventConfiguration": TierUnimplemented, + "GetResourceLogLevel": TierUnimplemented, + "GetResourcePosition": TierUnimplemented, + "GetServiceEndpoint": TierUnimplemented, + "GetServiceProfile": TierHandVerified, + "GetWirelessDevice": TierHandVerified, + "GetWirelessDeviceImportTask": TierUnimplemented, + "GetWirelessDeviceStatistics": TierUnimplemented, + "GetWirelessGateway": TierHandVerified, + "GetWirelessGatewayCertificate": TierUnimplemented, + "GetWirelessGatewayFirmwareInformation": TierUnimplemented, + "GetWirelessGatewayStatistics": TierUnimplemented, + "GetWirelessGatewayTask": TierUnimplemented, + "GetWirelessGatewayTaskDefinition": TierUnimplemented, + "ListDestinations": TierHandVerified, + "ListDeviceProfiles": TierHandVerified, + "ListDevicesForWirelessDeviceImportTask": TierUnimplemented, + "ListEventConfigurations": TierUnimplemented, + "ListFuotaTasks": TierHandVerified, + "ListMulticastGroups": TierHandVerified, + "ListMulticastGroupsByFuotaTask": TierUnimplemented, + "ListNetworkAnalyzerConfigurations": TierHandVerified, + "ListPartnerAccounts": TierUnimplemented, + "ListPositionConfigurations": TierUnimplemented, + "ListQueuedMessages": TierUnimplemented, + "ListServiceProfiles": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListWirelessDeviceImportTasks": TierUnimplemented, + "ListWirelessDevices": TierHandVerified, + "ListWirelessGatewayTaskDefinitions": TierUnimplemented, + "ListWirelessGateways": TierHandVerified, + "PutPositionConfiguration": TierUnimplemented, + "PutResourceLogLevel": TierUnimplemented, + "ResetAllResourceLogLevels": TierUnimplemented, + "ResetResourceLogLevel": TierUnimplemented, + "SendDataToMulticastGroup": TierUnimplemented, + "SendDataToWirelessDevice": TierUnimplemented, + "StartBulkAssociateWirelessDeviceWithMulticastGroup": TierUnimplemented, + "StartBulkDisassociateWirelessDeviceFromMulticastGroup": TierUnimplemented, + "StartFuotaTask": TierHandVerified, + "StartMulticastGroupSession": TierUnimplemented, + "StartSingleWirelessDeviceImportTask": TierUnimplemented, + "StartWirelessDeviceImportTask": TierUnimplemented, + "TagResource": TierHandVerified, + "TestWirelessDevice": TierUnimplemented, + "UntagResource": TierHandVerified, + "UpdateDestination": TierHandVerified, + "UpdateEventConfigurationByResourceTypes": TierUnimplemented, + "UpdateFuotaTask": TierHandVerified, + "UpdateLogLevelsByResourceTypes": TierUnimplemented, + "UpdateMetricConfiguration": TierUnimplemented, + "UpdateMulticastGroup": TierHandVerified, + "UpdateNetworkAnalyzerConfiguration": TierHandVerified, + "UpdatePartnerAccount": TierUnimplemented, + "UpdatePosition": TierUnimplemented, + "UpdateResourceEventConfiguration": TierUnimplemented, + "UpdateResourcePosition": TierUnimplemented, + "UpdateWirelessDevice": TierHandVerified, + "UpdateWirelessDeviceImportTask": TierUnimplemented, + "UpdateWirelessGateway": TierHandVerified, + }}, + "kafka": {ModelBacked: true, Operations: map[string]Tier{ + "BatchAssociateScramSecret": TierHandVerified, + "BatchDisassociateScramSecret": TierHandVerified, + "CreateCluster": TierHandVerified, + "CreateClusterV2": TierHandVerified, + "CreateConfiguration": TierHandVerified, + "CreateReplicator": TierHandVerified, + "CreateTopic": TierHandVerified, + "CreateVpcConnection": TierHandVerified, + "DeleteCluster": TierHandVerified, + "DeleteClusterPolicy": TierHandVerified, + "DeleteConfiguration": TierHandVerified, + "DeleteReplicator": TierHandVerified, + "DeleteTopic": TierHandVerified, + "DeleteVpcConnection": TierHandVerified, + "DescribeCluster": TierHandVerified, + "DescribeClusterOperation": TierHandVerified, + "DescribeClusterOperationV2": TierHandVerified, + "DescribeClusterV2": TierHandVerified, + "DescribeConfiguration": TierHandVerified, + "DescribeConfigurationRevision": TierHandVerified, + "DescribeReplicator": TierHandVerified, + "DescribeTopic": TierHandVerified, + "DescribeTopicPartitions": TierHandVerified, + "DescribeVpcConnection": TierHandVerified, + "GetBootstrapBrokers": TierHandVerified, + "GetClusterPolicy": TierHandVerified, + "GetCompatibleKafkaVersions": TierHandVerified, + "ListClientVpcConnections": TierHandVerified, + "ListClusterOperations": TierHandVerified, + "ListClusterOperationsV2": TierHandVerified, + "ListClusters": TierHandVerified, + "ListClustersV2": TierHandVerified, + "ListConfigurationRevisions": TierHandVerified, + "ListConfigurations": TierHandVerified, + "ListKafkaVersions": TierHandVerified, + "ListNodes": TierHandVerified, + "ListReplicators": TierHandVerified, + "ListScramSecrets": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListTopics": TierHandVerified, + "ListVpcConnections": TierHandVerified, + "PutClusterPolicy": TierHandVerified, + "RebootBroker": TierHandVerified, + "RejectClientVpcConnection": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateBrokerCount": TierHandVerified, + "UpdateBrokerStorage": TierHandVerified, + "UpdateBrokerType": TierHandVerified, + "UpdateClusterConfiguration": TierHandVerified, + "UpdateClusterKafkaVersion": TierHandVerified, + "UpdateConfiguration": TierHandVerified, + "UpdateConnectivity": TierHandVerified, + "UpdateMonitoring": TierHandVerified, + "UpdateRebalancing": TierHandVerified, + "UpdateReplicationInfo": TierHandVerified, + "UpdateSecurity": TierHandVerified, + "UpdateStorage": TierHandVerified, + "UpdateTopic": TierHandVerified, + }}, + "kinesis": {ModelBacked: true, Operations: map[string]Tier{ + "AddTagsToStream": TierHandVerified, + "CreateStream": TierHandVerified, + "DecreaseStreamRetentionPeriod": TierHandVerified, + "DeleteResourcePolicy": TierHandVerified, + "DeleteStream": TierHandVerified, + "DeregisterStreamConsumer": TierHandVerified, + "DescribeAccountSettings": TierHandVerified, + "DescribeLimits": TierHandVerified, + "DescribeStream": TierHandVerified, + "DescribeStreamConsumer": TierHandVerified, + "DescribeStreamSummary": TierHandVerified, + "DisableEnhancedMonitoring": TierHandVerified, + "EnableEnhancedMonitoring": TierHandVerified, + "GetRecords": TierHandVerified, + "GetResourcePolicy": TierHandVerified, + "GetShardIterator": TierHandVerified, + "IncreaseStreamRetentionPeriod": TierHandVerified, + "ListShards": TierHandVerified, + "ListStreamConsumers": TierHandVerified, + "ListStreams": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListTagsForStream": TierHandVerified, + "MergeShards": TierHandVerified, + "PutRecord": TierHandVerified, + "PutRecords": TierHandVerified, + "PutResourcePolicy": TierHandVerified, + "RegisterStreamConsumer": TierHandVerified, + "RemoveTagsFromStream": TierHandVerified, + "SplitShard": TierHandVerified, + "StartStreamEncryption": TierHandVerified, + "StopStreamEncryption": TierHandVerified, + "SubscribeToShard": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAccountSettings": TierHandVerified, + "UpdateMaxRecordSize": TierHandVerified, + "UpdateShardCount": TierHandVerified, + "UpdateStreamMode": TierHandVerified, + "UpdateStreamWarmThroughput": TierHandVerified, + }}, + "kinesisanalyticsv2": {ModelBacked: true, Operations: map[string]Tier{ + "AddApplicationCloudWatchLoggingOption": TierHandVerified, + "AddApplicationInput": TierHandVerified, + "AddApplicationInputProcessingConfiguration": TierHandVerified, + "AddApplicationOutput": TierHandVerified, + "AddApplicationReferenceDataSource": TierHandVerified, + "AddApplicationVpcConfiguration": TierHandVerified, + "CreateApplication": TierHandVerified, + "CreateApplicationPresignedUrl": TierHandVerified, + "CreateApplicationSnapshot": TierHandVerified, + "DeleteApplication": TierHandVerified, + "DeleteApplicationCloudWatchLoggingOption": TierHandVerified, + "DeleteApplicationInputProcessingConfiguration": TierHandVerified, + "DeleteApplicationOutput": TierHandVerified, + "DeleteApplicationReferenceDataSource": TierHandVerified, + "DeleteApplicationSnapshot": TierHandVerified, + "DeleteApplicationVpcConfiguration": TierHandVerified, + "DescribeApplication": TierHandVerified, + "DescribeApplicationOperation": TierHandVerified, + "DescribeApplicationSnapshot": TierHandVerified, + "DescribeApplicationVersion": TierHandVerified, + "DiscoverInputSchema": TierHandVerified, + "ListApplicationOperations": TierHandVerified, + "ListApplicationSnapshots": TierHandVerified, + "ListApplicationVersions": TierHandVerified, + "ListApplications": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "RollbackApplication": TierHandVerified, + "StartApplication": TierHandVerified, + "StopApplication": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateApplication": TierHandVerified, + "UpdateApplicationMaintenanceConfiguration": TierHandVerified, + }}, + "kms": {ModelBacked: true, Operations: map[string]Tier{ + "CancelKeyDeletion": TierHandVerified, + "ConnectCustomKeyStore": TierUnimplemented, + "CreateAlias": TierHandVerified, + "CreateCustomKeyStore": TierAutoCRUD, + "CreateGrant": TierHandVerified, + "CreateKey": TierHandVerified, + "Decrypt": TierHandVerified, + "DeleteAlias": TierAutoCRUD, + "DeleteCustomKeyStore": TierAutoCRUD, + "DeleteImportedKeyMaterial": TierAutoCRUD, + "DeriveSharedSecret": TierUnimplemented, + "DescribeCustomKeyStores": TierAutoCRUD, + "DescribeKey": TierHandVerified, + "DisableKey": TierHandVerified, + "DisableKeyRotation": TierUnimplemented, + "DisconnectCustomKeyStore": TierUnimplemented, + "EnableKey": TierHandVerified, + "EnableKeyRotation": TierUnimplemented, + "Encrypt": TierHandVerified, + "GenerateDataKey": TierHandVerified, + "GenerateDataKeyPair": TierHandVerified, + "GenerateDataKeyPairWithoutPlaintext": TierHandVerified, + "GenerateDataKeyWithoutPlaintext": TierHandVerified, + "GenerateMac": TierUnimplemented, + "GenerateRandom": TierUnimplemented, + "GetKeyPolicy": TierHandVerified, + "GetKeyRotationStatus": TierAutoCRUD, + "GetParametersForImport": TierAutoCRUD, + "GetPublicKey": TierHandVerified, + "ImportKeyMaterial": TierUnimplemented, + "ListAliases": TierHandVerified, + "ListGrants": TierHandVerified, + "ListKeyPolicies": TierHandVerified, + "ListKeyRotations": TierAutoCRUD, + "ListKeys": TierHandVerified, + "ListResourceTags": TierAutoCRUD, + "ListRetirableGrants": TierHandVerified, + "PutKeyPolicy": TierHandVerified, + "ReEncrypt": TierHandVerified, + "ReplicateKey": TierUnimplemented, + "RetireGrant": TierHandVerified, + "RevokeGrant": TierHandVerified, + "RotateKeyOnDemand": TierUnimplemented, + "ScheduleKeyDeletion": TierHandVerified, + "Sign": TierHandVerified, + "TagResource": TierAutoCRUD, + "UntagResource": TierAutoCRUD, + "UpdateAlias": TierAutoCRUD, + "UpdateCustomKeyStore": TierAutoCRUD, + "UpdateKeyDescription": TierHandVerified, + "UpdatePrimaryRegion": TierAutoCRUD, + "Verify": TierHandVerified, + "VerifyMac": TierUnimplemented, + }}, + "lakeformation": {ModelBacked: true, Operations: map[string]Tier{ + "AddLFTagsToResource": TierHandVerified, + "AssumeDecoratedRoleWithSAML": TierHandVerified, + "BatchGrantPermissions": TierHandVerified, + "BatchRevokePermissions": TierHandVerified, + "CancelTransaction": TierHandVerified, + "CommitTransaction": TierHandVerified, + "CreateDataCellsFilter": TierHandVerified, + "CreateLFTag": TierHandVerified, + "CreateLFTagExpression": TierHandVerified, + "CreateLakeFormationIdentityCenterConfiguration": TierHandVerified, + "CreateLakeFormationOptIn": TierHandVerified, + "DeleteDataCellsFilter": TierHandVerified, + "DeleteLFTag": TierHandVerified, + "DeleteLFTagExpression": TierHandVerified, + "DeleteLakeFormationIdentityCenterConfiguration": TierHandVerified, + "DeleteLakeFormationOptIn": TierHandVerified, + "DeleteObjectsOnCancel": TierHandVerified, + "DeregisterResource": TierHandVerified, + "DescribeLakeFormationIdentityCenterConfiguration": TierHandVerified, + "DescribeResource": TierHandVerified, + "DescribeTransaction": TierHandVerified, + "ExtendTransaction": TierHandVerified, + "GetDataCellsFilter": TierHandVerified, + "GetDataLakePrincipal": TierHandVerified, + "GetDataLakeSettings": TierHandVerified, + "GetEffectivePermissionsForPath": TierHandVerified, + "GetLFTag": TierHandVerified, + "GetLFTagExpression": TierHandVerified, + "GetQueryState": TierHandVerified, + "GetQueryStatistics": TierHandVerified, + "GetResourceLFTags": TierHandVerified, + "GetTableObjects": TierHandVerified, + "GetTemporaryDataLocationCredentials": TierHandVerified, + "GetTemporaryGluePartitionCredentials": TierHandVerified, + "GetTemporaryGlueTableCredentials": TierHandVerified, + "GetWorkUnitResults": TierHandVerified, + "GetWorkUnits": TierHandVerified, + "GrantPermissions": TierHandVerified, + "ListDataCellsFilter": TierHandVerified, + "ListLFTagExpressions": TierHandVerified, + "ListLFTags": TierHandVerified, + "ListLakeFormationOptIns": TierHandVerified, + "ListPermissions": TierHandVerified, + "ListResources": TierHandVerified, + "ListTableStorageOptimizers": TierHandVerified, + "ListTransactions": TierHandVerified, + "PutDataLakeSettings": TierHandVerified, + "RegisterResource": TierHandVerified, + "RemoveLFTagsFromResource": TierHandVerified, + "RevokePermissions": TierHandVerified, + "SearchDatabasesByLFTags": TierHandVerified, + "SearchTablesByLFTags": TierHandVerified, + "StartQueryPlanning": TierHandVerified, + "StartTransaction": TierHandVerified, + "UpdateDataCellsFilter": TierHandVerified, + "UpdateLFTag": TierHandVerified, + "UpdateLFTagExpression": TierHandVerified, + "UpdateLakeFormationIdentityCenterConfiguration": TierHandVerified, + "UpdateResource": TierHandVerified, + "UpdateTableObjects": TierHandVerified, + "UpdateTableStorageOptimizer": TierHandVerified, + }}, + "lambda": {ModelBacked: true, Operations: map[string]Tier{ + "AddLayerVersionPermission": TierUnimplemented, + "AddPermission": TierHandVerified, + "CheckpointDurableExecution": TierUnimplemented, + "CreateAlias": TierHandVerified, + "CreateCapacityProvider": TierUnimplemented, + "CreateCodeSigningConfig": TierUnimplemented, + "CreateEventSourceMapping": TierHandVerified, + "CreateFunction": TierHandVerified, + "CreateFunctionUrlConfig": TierUnimplemented, + "DeleteAlias": TierHandVerified, + "DeleteCapacityProvider": TierUnimplemented, + "DeleteCodeSigningConfig": TierUnimplemented, + "DeleteEventSourceMapping": TierHandVerified, + "DeleteFunction": TierHandVerified, + "DeleteFunctionCodeSigningConfig": TierUnimplemented, + "DeleteFunctionConcurrency": TierUnimplemented, + "DeleteFunctionEventInvokeConfig": TierUnimplemented, + "DeleteFunctionUrlConfig": TierUnimplemented, + "DeleteLayerVersion": TierUnimplemented, + "DeleteProvisionedConcurrencyConfig": TierUnimplemented, + "GetAccountSettings": TierUnimplemented, + "GetAlias": TierHandVerified, + "GetCapacityProvider": TierUnimplemented, + "GetCodeSigningConfig": TierUnimplemented, + "GetDurableExecution": TierUnimplemented, + "GetDurableExecutionHistory": TierUnimplemented, + "GetDurableExecutionState": TierUnimplemented, + "GetEventSourceMapping": TierHandVerified, + "GetFunction": TierHandVerified, + "GetFunctionCodeSigningConfig": TierUnimplemented, + "GetFunctionConcurrency": TierUnimplemented, + "GetFunctionConfiguration": TierUnimplemented, + "GetFunctionEventInvokeConfig": TierUnimplemented, + "GetFunctionRecursionConfig": TierUnimplemented, + "GetFunctionScalingConfig": TierUnimplemented, + "GetFunctionUrlConfig": TierUnimplemented, + "GetLayerVersion": TierUnimplemented, + "GetLayerVersionByArn": TierUnimplemented, + "GetLayerVersionPolicy": TierUnimplemented, + "GetPolicy": TierHandVerified, + "GetProvisionedConcurrencyConfig": TierUnimplemented, + "GetRuntimeManagementConfig": TierUnimplemented, + "Invoke": TierHandVerified, + "InvokeAsync": TierUnimplemented, + "InvokeWithResponseStream": TierUnimplemented, + "ListAliases": TierHandVerified, + "ListCapacityProviders": TierUnimplemented, + "ListCodeSigningConfigs": TierUnimplemented, + "ListDurableExecutionsByFunction": TierUnimplemented, + "ListEventSourceMappings": TierHandVerified, + "ListFunctionEventInvokeConfigs": TierUnimplemented, + "ListFunctionUrlConfigs": TierUnimplemented, + "ListFunctionVersionsByCapacityProvider": TierUnimplemented, + "ListFunctions": TierHandVerified, + "ListFunctionsByCodeSigningConfig": TierUnimplemented, + "ListLayerVersions": TierUnimplemented, + "ListLayers": TierUnimplemented, + "ListProvisionedConcurrencyConfigs": TierUnimplemented, + "ListTags": TierHandVerified, + "ListVersionsByFunction": TierHandVerified, + "PublishLayerVersion": TierUnimplemented, + "PublishVersion": TierHandVerified, + "PutFunctionCodeSigningConfig": TierUnimplemented, + "PutFunctionConcurrency": TierUnimplemented, + "PutFunctionEventInvokeConfig": TierUnimplemented, + "PutFunctionRecursionConfig": TierUnimplemented, + "PutFunctionScalingConfig": TierUnimplemented, + "PutProvisionedConcurrencyConfig": TierUnimplemented, + "PutRuntimeManagementConfig": TierUnimplemented, + "RemoveLayerVersionPermission": TierUnimplemented, + "RemovePermission": TierHandVerified, + "SendDurableExecutionCallbackFailure": TierUnimplemented, + "SendDurableExecutionCallbackHeartbeat": TierUnimplemented, + "SendDurableExecutionCallbackSuccess": TierUnimplemented, + "StopDurableExecution": TierUnimplemented, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAlias": TierHandVerified, + "UpdateCapacityProvider": TierUnimplemented, + "UpdateCodeSigningConfig": TierUnimplemented, + "UpdateEventSourceMapping": TierHandVerified, + "UpdateFunctionCode": TierHandVerified, + "UpdateFunctionConfiguration": TierHandVerified, + "UpdateFunctionEventInvokeConfig": TierUnimplemented, + "UpdateFunctionUrlConfig": TierUnimplemented, + }}, + "managedblockchain": {ModelBacked: true, Operations: map[string]Tier{ + "CreateAccessor": TierHandVerified, + "CreateMember": TierHandVerified, + "CreateNetwork": TierHandVerified, + "CreateNode": TierHandVerified, + "CreateProposal": TierHandVerified, + "DeleteAccessor": TierHandVerified, + "DeleteMember": TierHandVerified, + "DeleteNode": TierHandVerified, + "GetAccessor": TierHandVerified, + "GetMember": TierHandVerified, + "GetNetwork": TierHandVerified, + "GetNode": TierHandVerified, + "GetProposal": TierHandVerified, + "ListAccessors": TierHandVerified, + "ListInvitations": TierHandVerified, + "ListMembers": TierHandVerified, + "ListNetworks": TierHandVerified, + "ListNodes": TierHandVerified, + "ListProposalVotes": TierUnimplemented, + "ListProposals": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "RejectInvitation": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateMember": TierHandVerified, + "UpdateNode": TierHandVerified, + "VoteOnProposal": TierHandVerified, + }}, + "mediaconvert": {ModelBacked: false, Operations: map[string]Tier{ + "AssociateCertificate": TierHandVerified, + "CancelJob": TierHandVerified, + "CreateJob": TierHandVerified, + "CreateJobTemplate": TierHandVerified, + "CreatePreset": TierHandVerified, + "CreateQueue": TierHandVerified, + "DeleteJobTemplate": TierHandVerified, + "DeletePolicy": TierHandVerified, + "DeletePreset": TierHandVerified, + "DeleteQueue": TierHandVerified, + "DescribeEndpoints": TierHandVerified, + "DescribeJob": TierHandVerified, + "DescribeJobTemplate": TierHandVerified, + "DescribePreset": TierHandVerified, + "DescribeQueue": TierHandVerified, + "DisassociateCertificate": TierHandVerified, + "GetJob": TierHandVerified, + "GetJobTemplate": TierHandVerified, + "GetPolicy": TierHandVerified, + "GetPreset": TierHandVerified, + "GetQueue": TierHandVerified, + "ListJobTemplates": TierHandVerified, + "ListJobs": TierHandVerified, + "ListPresets": TierHandVerified, + "ListQueues": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListVersions": TierHandVerified, + "ProbeMediaFile": TierHandVerified, + "PutPolicy": TierHandVerified, + "SearchJobs": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateJobTemplate": TierHandVerified, + "UpdatePreset": TierHandVerified, + "UpdateQueue": TierHandVerified, + }}, + "memorydb": {ModelBacked: true, Operations: map[string]Tier{ + "BatchUpdateCluster": TierHandVerified, + "CopySnapshot": TierHandVerified, + "CreateACL": TierHandVerified, + "CreateCluster": TierHandVerified, + "CreateMultiRegionCluster": TierHandVerified, + "CreateParameterGroup": TierHandVerified, + "CreateSnapshot": TierHandVerified, + "CreateSubnetGroup": TierHandVerified, + "CreateUser": TierHandVerified, + "DeleteACL": TierHandVerified, + "DeleteCluster": TierHandVerified, + "DeleteMultiRegionCluster": TierHandVerified, + "DeleteParameterGroup": TierHandVerified, + "DeleteSnapshot": TierHandVerified, + "DeleteSubnetGroup": TierHandVerified, + "DeleteUser": TierHandVerified, + "DescribeACLs": TierHandVerified, + "DescribeClusters": TierHandVerified, + "DescribeEngineVersions": TierHandVerified, + "DescribeEvents": TierHandVerified, + "DescribeMultiRegionClusters": TierHandVerified, + "DescribeMultiRegionParameterGroups": TierHandVerified, + "DescribeMultiRegionParameters": TierHandVerified, + "DescribeParameterGroups": TierHandVerified, + "DescribeParameters": TierHandVerified, + "DescribeReservedNodes": TierHandVerified, + "DescribeReservedNodesOfferings": TierHandVerified, + "DescribeServiceUpdates": TierHandVerified, + "DescribeSnapshots": TierHandVerified, + "DescribeSubnetGroups": TierHandVerified, + "DescribeUsers": TierHandVerified, + "FailoverShard": TierHandVerified, + "ListAllowedMultiRegionClusterUpdates": TierHandVerified, + "ListAllowedNodeTypeUpdates": TierHandVerified, + "ListTags": TierHandVerified, + "PurchaseReservedNodesOffering": TierHandVerified, + "ResetParameterGroup": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateACL": TierHandVerified, + "UpdateCluster": TierHandVerified, + "UpdateMultiRegionCluster": TierHandVerified, + "UpdateParameterGroup": TierHandVerified, + "UpdateSubnetGroup": TierHandVerified, + "UpdateUser": TierHandVerified, + }}, + "mq": {ModelBacked: true, Operations: map[string]Tier{ + "CreateBroker": TierHandVerified, + "CreateConfiguration": TierHandVerified, + "CreateTags": TierHandVerified, + "CreateUser": TierHandVerified, + "DeleteBroker": TierHandVerified, + "DeleteConfiguration": TierHandVerified, + "DeleteTags": TierHandVerified, + "DeleteUser": TierHandVerified, + "DescribeBroker": TierHandVerified, + "DescribeBrokerEngineTypes": TierHandVerified, + "DescribeBrokerInstanceOptions": TierHandVerified, + "DescribeConfiguration": TierHandVerified, + "DescribeConfigurationRevision": TierHandVerified, + "DescribeUser": TierHandVerified, + "ListBrokers": TierHandVerified, + "ListConfigurationRevisions": TierHandVerified, + "ListConfigurations": TierHandVerified, + "ListTags": TierHandVerified, + "ListUsers": TierHandVerified, + "Promote": TierHandVerified, + "RebootBroker": TierHandVerified, + "UpdateBroker": TierHandVerified, + "UpdateConfiguration": TierHandVerified, + "UpdateUser": TierHandVerified, + }}, + "mwaa": {ModelBacked: true, Operations: map[string]Tier{ + "CreateCliToken": TierHandVerified, + "CreateEnvironment": TierHandVerified, + "CreateWebLoginToken": TierHandVerified, + "DeleteEnvironment": TierHandVerified, + "GetEnvironment": TierHandVerified, + "InvokeRestApi": TierHandVerified, + "ListEnvironments": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "PublishMetrics": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateEnvironment": TierHandVerified, + }}, + "neptune": {ModelBacked: true, Operations: map[string]Tier{ + "AddRoleToDBCluster": TierHandVerified, + "AddSourceIdentifierToSubscription": TierHandVerified, + "AddTagsToResource": TierHandVerified, + "ApplyPendingMaintenanceAction": TierHandVerified, + "CopyDBClusterParameterGroup": TierHandVerified, + "CopyDBClusterSnapshot": TierHandVerified, + "CopyDBParameterGroup": TierHandVerified, + "CreateDBCluster": TierHandVerified, + "CreateDBClusterEndpoint": TierHandVerified, + "CreateDBClusterParameterGroup": TierHandVerified, + "CreateDBClusterSnapshot": TierHandVerified, + "CreateDBInstance": TierHandVerified, + "CreateDBParameterGroup": TierHandVerified, + "CreateDBSubnetGroup": TierHandVerified, + "CreateEventSubscription": TierHandVerified, + "CreateGlobalCluster": TierHandVerified, + "DeleteDBCluster": TierHandVerified, + "DeleteDBClusterEndpoint": TierHandVerified, + "DeleteDBClusterParameterGroup": TierHandVerified, + "DeleteDBClusterSnapshot": TierHandVerified, + "DeleteDBInstance": TierHandVerified, + "DeleteDBParameterGroup": TierHandVerified, + "DeleteDBSubnetGroup": TierHandVerified, + "DeleteEventSubscription": TierHandVerified, + "DeleteGlobalCluster": TierHandVerified, + "DescribeDBClusterEndpoints": TierHandVerified, + "DescribeDBClusterParameterGroups": TierHandVerified, + "DescribeDBClusterParameters": TierHandVerified, + "DescribeDBClusterSnapshotAttributes": TierHandVerified, + "DescribeDBClusterSnapshots": TierHandVerified, + "DescribeDBClusters": TierHandVerified, + "DescribeDBEngineVersions": TierHandVerified, + "DescribeDBInstances": TierHandVerified, + "DescribeDBParameterGroups": TierHandVerified, + "DescribeDBParameters": TierHandVerified, + "DescribeDBSubnetGroups": TierHandVerified, + "DescribeEngineDefaultClusterParameters": TierHandVerified, + "DescribeEngineDefaultParameters": TierHandVerified, + "DescribeEventCategories": TierHandVerified, + "DescribeEventSubscriptions": TierHandVerified, + "DescribeEvents": TierHandVerified, + "DescribeGlobalClusters": TierHandVerified, + "DescribeOrderableDBInstanceOptions": TierHandVerified, + "DescribePendingMaintenanceActions": TierHandVerified, + "DescribeValidDBInstanceModifications": TierHandVerified, + "FailoverDBCluster": TierHandVerified, + "FailoverGlobalCluster": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ModifyDBCluster": TierHandVerified, + "ModifyDBClusterEndpoint": TierHandVerified, + "ModifyDBClusterParameterGroup": TierHandVerified, + "ModifyDBClusterSnapshotAttribute": TierHandVerified, + "ModifyDBInstance": TierHandVerified, + "ModifyDBParameterGroup": TierHandVerified, + "ModifyDBSubnetGroup": TierHandVerified, + "ModifyEventSubscription": TierHandVerified, + "ModifyGlobalCluster": TierHandVerified, + "PromoteReadReplicaDBCluster": TierHandVerified, + "RebootDBInstance": TierHandVerified, + "RemoveFromGlobalCluster": TierHandVerified, + "RemoveRoleFromDBCluster": TierHandVerified, + "RemoveSourceIdentifierFromSubscription": TierHandVerified, + "RemoveTagsFromResource": TierHandVerified, + "ResetDBClusterParameterGroup": TierHandVerified, + "ResetDBParameterGroup": TierHandVerified, + "RestoreDBClusterFromSnapshot": TierHandVerified, + "RestoreDBClusterToPointInTime": TierHandVerified, + "StartDBCluster": TierHandVerified, + "StopDBCluster": TierHandVerified, + "SwitchoverGlobalCluster": TierHandVerified, + }}, + "opensearch": {ModelBacked: true, Operations: map[string]Tier{ + "AcceptInboundConnection": TierHandVerified, + "AddDataSource": TierHandVerified, + "AddDirectQueryDataSource": TierHandVerified, + "AddTags": TierHandVerified, + "AssociatePackage": TierHandVerified, + "AssociatePackages": TierHandVerified, + "AuthorizeVpcEndpointAccess": TierHandVerified, + "CancelDomainConfigChange": TierHandVerified, + "CancelServiceSoftwareUpdate": TierHandVerified, + "CreateApplication": TierHandVerified, + "CreateDomain": TierHandVerified, + "CreateIndex": TierHandVerified, + "CreateOutboundConnection": TierHandVerified, + "CreatePackage": TierHandVerified, + "CreateVpcEndpoint": TierHandVerified, + "DeleteApplication": TierHandVerified, + "DeleteDataSource": TierHandVerified, + "DeleteDirectQueryDataSource": TierHandVerified, + "DeleteDomain": TierHandVerified, + "DeleteInboundConnection": TierHandVerified, + "DeleteIndex": TierHandVerified, + "DeleteOutboundConnection": TierHandVerified, + "DeletePackage": TierHandVerified, + "DeleteVpcEndpoint": TierHandVerified, + "DeregisterCapability": TierHandVerified, + "DescribeDomain": TierHandVerified, + "DescribeDomainAutoTunes": TierHandVerified, + "DescribeDomainChangeProgress": TierHandVerified, + "DescribeDomainConfig": TierHandVerified, + "DescribeDomainHealth": TierHandVerified, + "DescribeDomainNodes": TierHandVerified, + "DescribeDomains": TierHandVerified, + "DescribeDryRunProgress": TierHandVerified, + "DescribeInboundConnections": TierHandVerified, + "DescribeInsightDetails": TierHandVerified, + "DescribeInstanceTypeLimits": TierHandVerified, + "DescribeOutboundConnections": TierHandVerified, + "DescribePackages": TierHandVerified, + "DescribeReservedInstanceOfferings": TierHandVerified, + "DescribeReservedInstances": TierHandVerified, + "DescribeVpcEndpoints": TierHandVerified, + "DissociatePackage": TierHandVerified, + "DissociatePackages": TierHandVerified, + "GetApplication": TierHandVerified, + "GetCapability": TierHandVerified, + "GetCompatibleVersions": TierHandVerified, + "GetDataSource": TierHandVerified, + "GetDefaultApplicationSetting": TierHandVerified, + "GetDirectQueryDataSource": TierHandVerified, + "GetDomainMaintenanceStatus": TierHandVerified, + "GetIndex": TierHandVerified, + "GetPackageVersionHistory": TierHandVerified, + "GetUpgradeHistory": TierHandVerified, + "GetUpgradeStatus": TierHandVerified, + "ListApplications": TierHandVerified, + "ListDataSources": TierHandVerified, + "ListDirectQueryDataSources": TierHandVerified, + "ListDomainMaintenances": TierHandVerified, + "ListDomainNames": TierHandVerified, + "ListDomainsForPackage": TierHandVerified, + "ListInsights": TierHandVerified, + "ListInstanceTypeDetails": TierHandVerified, + "ListPackagesForDomain": TierHandVerified, + "ListScheduledActions": TierHandVerified, + "ListTags": TierHandVerified, + "ListVersions": TierHandVerified, + "ListVpcEndpointAccess": TierHandVerified, + "ListVpcEndpoints": TierHandVerified, + "ListVpcEndpointsForDomain": TierHandVerified, + "PurchaseReservedInstanceOffering": TierHandVerified, + "PutDefaultApplicationSetting": TierHandVerified, + "RegisterCapability": TierHandVerified, + "RejectInboundConnection": TierHandVerified, + "RemoveTags": TierHandVerified, + "RevokeVpcEndpointAccess": TierHandVerified, + "StartDomainMaintenance": TierHandVerified, + "StartServiceSoftwareUpdate": TierHandVerified, + "UpdateApplication": TierHandVerified, + "UpdateDataSource": TierHandVerified, + "UpdateDirectQueryDataSource": TierHandVerified, + "UpdateDomainConfig": TierHandVerified, + "UpdateIndex": TierHandVerified, + "UpdatePackage": TierHandVerified, + "UpdatePackageScope": TierHandVerified, + "UpdateScheduledAction": TierHandVerified, + "UpdateVpcEndpoint": TierHandVerified, + "UpgradeDomain": TierHandVerified, + }}, + "organizations": {ModelBacked: true, Operations: map[string]Tier{ + "AcceptHandshake": TierHandVerified, + "AttachPolicy": TierHandVerified, + "CancelHandshake": TierHandVerified, + "CloseAccount": TierHandVerified, + "CreateAccount": TierHandVerified, + "CreateGovCloudAccount": TierHandVerified, + "CreateOrganization": TierHandVerified, + "CreateOrganizationalUnit": TierHandVerified, + "CreatePolicy": TierHandVerified, + "DeclineHandshake": TierHandVerified, + "DeleteOrganization": TierHandVerified, + "DeleteOrganizationalUnit": TierHandVerified, + "DeletePolicy": TierHandVerified, + "DeleteResourcePolicy": TierHandVerified, + "DeregisterDelegatedAdministrator": TierHandVerified, + "DescribeAccount": TierHandVerified, + "DescribeCreateAccountStatus": TierHandVerified, + "DescribeEffectivePolicy": TierHandVerified, + "DescribeHandshake": TierHandVerified, + "DescribeOrganization": TierHandVerified, + "DescribeOrganizationalUnit": TierHandVerified, + "DescribePolicy": TierHandVerified, + "DescribeResourcePolicy": TierHandVerified, + "DescribeResponsibilityTransfer": TierAutoCRUD, + "DetachPolicy": TierHandVerified, + "DisableAWSServiceAccess": TierHandVerified, + "DisablePolicyType": TierHandVerified, + "EnableAWSServiceAccess": TierHandVerified, + "EnableAllFeatures": TierHandVerified, + "EnablePolicyType": TierHandVerified, + "InviteAccountToOrganization": TierHandVerified, + "InviteOrganizationToTransferResponsibility": TierUnimplemented, + "LeaveOrganization": TierHandVerified, + "ListAWSServiceAccessForOrganization": TierHandVerified, + "ListAccounts": TierHandVerified, + "ListAccountsForParent": TierHandVerified, + "ListAccountsWithInvalidEffectivePolicy": TierAutoCRUD, + "ListChildren": TierHandVerified, + "ListCreateAccountStatus": TierHandVerified, + "ListDelegatedAdministrators": TierHandVerified, + "ListDelegatedServicesForAccount": TierHandVerified, + "ListEffectivePolicyValidationErrors": TierAutoCRUD, + "ListHandshakesForAccount": TierHandVerified, + "ListHandshakesForOrganization": TierHandVerified, + "ListInboundResponsibilityTransfers": TierAutoCRUD, + "ListOrganizationalUnitsForParent": TierHandVerified, + "ListOutboundResponsibilityTransfers": TierAutoCRUD, + "ListParents": TierHandVerified, + "ListPolicies": TierHandVerified, + "ListPoliciesForTarget": TierHandVerified, + "ListRoots": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListTargetsForPolicy": TierHandVerified, + "MoveAccount": TierHandVerified, + "PutResourcePolicy": TierHandVerified, + "RegisterDelegatedAdministrator": TierHandVerified, + "RemoveAccountFromOrganization": TierHandVerified, + "TagResource": TierHandVerified, + "TerminateResponsibilityTransfer": TierUnimplemented, + "UntagResource": TierHandVerified, + "UpdateOrganizationalUnit": TierHandVerified, + "UpdatePolicy": TierHandVerified, + "UpdateResponsibilityTransfer": TierAutoCRUD, + }}, + "pinpoint": {ModelBacked: true, Operations: map[string]Tier{ + "CreateApp": TierHandVerified, + "CreateCampaign": TierHandVerified, + "CreateEmailTemplate": TierHandVerified, + "CreateExportJob": TierHandVerified, + "CreateImportJob": TierHandVerified, + "CreateInAppTemplate": TierHandVerified, + "CreateJourney": TierHandVerified, + "CreatePushTemplate": TierHandVerified, + "CreateRecommenderConfiguration": TierHandVerified, + "CreateSegment": TierHandVerified, + "CreateSmsTemplate": TierHandVerified, + "CreateVoiceTemplate": TierHandVerified, + "DeleteAdmChannel": TierHandVerified, + "DeleteApnsChannel": TierHandVerified, + "DeleteApnsSandboxChannel": TierHandVerified, + "DeleteApnsVoipChannel": TierHandVerified, + "DeleteApnsVoipSandboxChannel": TierHandVerified, + "DeleteApp": TierHandVerified, + "DeleteBaiduChannel": TierHandVerified, + "DeleteCampaign": TierHandVerified, + "DeleteEmailChannel": TierHandVerified, + "DeleteEmailTemplate": TierHandVerified, + "DeleteEndpoint": TierHandVerified, + "DeleteEventStream": TierHandVerified, + "DeleteGcmChannel": TierHandVerified, + "DeleteInAppTemplate": TierHandVerified, + "DeleteJourney": TierHandVerified, + "DeletePushTemplate": TierHandVerified, + "DeleteRecommenderConfiguration": TierHandVerified, + "DeleteSegment": TierHandVerified, + "DeleteSmsChannel": TierHandVerified, + "DeleteSmsTemplate": TierHandVerified, + "DeleteUserEndpoints": TierHandVerified, + "DeleteVoiceChannel": TierHandVerified, + "DeleteVoiceTemplate": TierHandVerified, + "GetAdmChannel": TierHandVerified, + "GetApnsChannel": TierHandVerified, + "GetApnsSandboxChannel": TierHandVerified, + "GetApnsVoipChannel": TierHandVerified, + "GetApnsVoipSandboxChannel": TierHandVerified, + "GetApp": TierHandVerified, + "GetApplicationDateRangeKpi": TierHandVerified, + "GetApplicationSettings": TierHandVerified, + "GetApps": TierHandVerified, + "GetBaiduChannel": TierHandVerified, + "GetCampaign": TierHandVerified, + "GetCampaignActivities": TierHandVerified, + "GetCampaignDateRangeKpi": TierHandVerified, + "GetCampaignVersion": TierHandVerified, + "GetCampaignVersions": TierHandVerified, + "GetCampaigns": TierHandVerified, + "GetChannels": TierHandVerified, + "GetEmailChannel": TierHandVerified, + "GetEmailTemplate": TierHandVerified, + "GetEndpoint": TierHandVerified, + "GetEventStream": TierHandVerified, + "GetExportJob": TierHandVerified, + "GetExportJobs": TierHandVerified, + "GetGcmChannel": TierHandVerified, + "GetImportJob": TierHandVerified, + "GetImportJobs": TierHandVerified, + "GetInAppMessages": TierHandVerified, + "GetInAppTemplate": TierHandVerified, + "GetJourney": TierHandVerified, + "GetJourneyDateRangeKpi": TierHandVerified, + "GetJourneyExecutionActivityMetrics": TierHandVerified, + "GetJourneyExecutionMetrics": TierHandVerified, + "GetJourneyRunExecutionActivityMetrics": TierHandVerified, + "GetJourneyRunExecutionMetrics": TierHandVerified, + "GetJourneyRuns": TierHandVerified, + "GetPushTemplate": TierHandVerified, + "GetRecommenderConfiguration": TierHandVerified, + "GetRecommenderConfigurations": TierHandVerified, + "GetSegment": TierHandVerified, + "GetSegmentExportJobs": TierHandVerified, + "GetSegmentImportJobs": TierHandVerified, + "GetSegmentVersion": TierHandVerified, + "GetSegmentVersions": TierHandVerified, + "GetSegments": TierHandVerified, + "GetSmsChannel": TierHandVerified, + "GetSmsTemplate": TierHandVerified, + "GetUserEndpoints": TierHandVerified, + "GetVoiceChannel": TierHandVerified, + "GetVoiceTemplate": TierHandVerified, + "ListJourneys": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListTemplateVersions": TierHandVerified, + "ListTemplates": TierHandVerified, + "PhoneNumberValidate": TierHandVerified, + "PutEventStream": TierHandVerified, + "PutEvents": TierHandVerified, + "RemoveAttributes": TierHandVerified, + "SendMessages": TierHandVerified, + "SendOTPMessage": TierHandVerified, + "SendUsersMessages": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAdmChannel": TierHandVerified, + "UpdateApnsChannel": TierHandVerified, + "UpdateApnsSandboxChannel": TierHandVerified, + "UpdateApnsVoipChannel": TierHandVerified, + "UpdateApnsVoipSandboxChannel": TierHandVerified, + "UpdateApplicationSettings": TierHandVerified, + "UpdateBaiduChannel": TierHandVerified, + "UpdateCampaign": TierHandVerified, + "UpdateEmailChannel": TierHandVerified, + "UpdateEmailTemplate": TierHandVerified, + "UpdateEndpoint": TierHandVerified, + "UpdateEndpointsBatch": TierHandVerified, + "UpdateGcmChannel": TierHandVerified, + "UpdateInAppTemplate": TierHandVerified, + "UpdateJourney": TierHandVerified, + "UpdateJourneyState": TierHandVerified, + "UpdatePushTemplate": TierHandVerified, + "UpdateRecommenderConfiguration": TierHandVerified, + "UpdateSegment": TierHandVerified, + "UpdateSmsChannel": TierHandVerified, + "UpdateSmsTemplate": TierHandVerified, + "UpdateTemplateActiveVersion": TierHandVerified, + "UpdateVoiceChannel": TierHandVerified, + "UpdateVoiceTemplate": TierHandVerified, + "VerifyOTPMessage": TierHandVerified, + }}, + "pipes": {ModelBacked: false, Operations: map[string]Tier{ + "CreatePipe": TierHandVerified, + "DELETE": TierHandVerified, + "DeletePipe": TierHandVerified, + "DescribePipe": TierHandVerified, + "DescribePipeHealth": TierHandVerified, + "DescribePipeTargets": TierHandVerified, + "DisablePipe": TierHandVerified, + "EnablePipe": TierHandVerified, + "GetPipeConfiguration": TierHandVerified, + "GetPipeMetrics": TierHandVerified, + "GetPipeStatistics": TierHandVerified, + "ListPipeEvents": TierHandVerified, + "ListPipeExecutions": TierHandVerified, + "ListPipeTargets": TierHandVerified, + "ListPipes": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "POST": TierHandVerified, + "PutPipeConfiguration": TierHandVerified, + "StartPipe": TierHandVerified, + "StopPipe": TierHandVerified, + "TagResource": TierHandVerified, + "TestPipe": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdatePipe": TierHandVerified, + "ValidatePipeParameters": TierHandVerified, + }}, + "ram": {ModelBacked: true, Operations: map[string]Tier{ + "AcceptResourceShareInvitation": TierHandVerified, + "AssociateResourceShare": TierHandVerified, + "AssociateResourceSharePermission": TierHandVerified, + "CreatePermission": TierHandVerified, + "CreatePermissionVersion": TierUnimplemented, + "CreateResourceShare": TierHandVerified, + "DeletePermission": TierHandVerified, + "DeletePermissionVersion": TierHandVerified, + "DeleteResourceShare": TierHandVerified, + "DisassociateResourceShare": TierHandVerified, + "DisassociateResourceSharePermission": TierHandVerified, + "EnableSharingWithAwsOrganization": TierHandVerified, + "GetPermission": TierHandVerified, + "GetResourcePolicies": TierHandVerified, + "GetResourceShareAssociations": TierHandVerified, + "GetResourceShareInvitations": TierHandVerified, + "GetResourceShares": TierHandVerified, + "ListPendingInvitationResources": TierHandVerified, + "ListPermissionAssociations": TierHandVerified, + "ListPermissionVersions": TierHandVerified, + "ListPermissions": TierHandVerified, + "ListPrincipals": TierHandVerified, + "ListReplacePermissionAssociationsWork": TierHandVerified, + "ListResourceSharePermissions": TierHandVerified, + "ListResourceTypes": TierHandVerified, + "ListResources": TierHandVerified, + "ListSourceAssociations": TierHandVerified, + "PromotePermissionCreatedFromPolicy": TierHandVerified, + "PromoteResourceShareCreatedFromPolicy": TierHandVerified, + "RejectResourceShareInvitation": TierHandVerified, + "ReplacePermissionAssociations": TierHandVerified, + "SetDefaultPermissionVersion": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateResourceShare": TierHandVerified, + }}, + "rds": {ModelBacked: true, Operations: map[string]Tier{ + "AddRoleToDBCluster": TierUnimplemented, + "AddRoleToDBInstance": TierUnimplemented, + "AddSourceIdentifierToSubscription": TierUnimplemented, + "AddTagsToResource": TierHandVerified, + "ApplyPendingMaintenanceAction": TierHandVerified, + "AuthorizeDBSecurityGroupIngress": TierUnimplemented, + "BacktrackDBCluster": TierUnimplemented, + "CancelExportTask": TierUnimplemented, + "CopyDBClusterParameterGroup": TierHandVerified, + "CopyDBClusterSnapshot": TierHandVerified, + "CopyDBParameterGroup": TierHandVerified, + "CopyDBSnapshot": TierHandVerified, + "CopyOptionGroup": TierHandVerified, + "CreateBlueGreenDeployment": TierUnimplemented, + "CreateCustomDBEngineVersion": TierUnimplemented, + "CreateDBCluster": TierHandVerified, + "CreateDBClusterEndpoint": TierUnimplemented, + "CreateDBClusterParameterGroup": TierHandVerified, + "CreateDBClusterSnapshot": TierHandVerified, + "CreateDBInstance": TierHandVerified, + "CreateDBInstanceReadReplica": TierUnimplemented, + "CreateDBParameterGroup": TierHandVerified, + "CreateDBProxy": TierUnimplemented, + "CreateDBProxyEndpoint": TierUnimplemented, + "CreateDBSecurityGroup": TierUnimplemented, + "CreateDBShardGroup": TierUnimplemented, + "CreateDBSnapshot": TierHandVerified, + "CreateDBSubnetGroup": TierHandVerified, + "CreateEventSubscription": TierUnimplemented, + "CreateGlobalCluster": TierUnimplemented, + "CreateIntegration": TierUnimplemented, + "CreateOptionGroup": TierHandVerified, + "CreateTenantDatabase": TierUnimplemented, + "DeleteBlueGreenDeployment": TierUnimplemented, + "DeleteCustomDBEngineVersion": TierUnimplemented, + "DeleteDBCluster": TierHandVerified, + "DeleteDBClusterAutomatedBackup": TierUnimplemented, + "DeleteDBClusterEndpoint": TierUnimplemented, + "DeleteDBClusterParameterGroup": TierHandVerified, + "DeleteDBClusterSnapshot": TierHandVerified, + "DeleteDBInstance": TierHandVerified, + "DeleteDBInstanceAutomatedBackup": TierUnimplemented, + "DeleteDBParameterGroup": TierHandVerified, + "DeleteDBProxy": TierUnimplemented, + "DeleteDBProxyEndpoint": TierUnimplemented, + "DeleteDBSecurityGroup": TierUnimplemented, + "DeleteDBShardGroup": TierUnimplemented, + "DeleteDBSnapshot": TierHandVerified, + "DeleteDBSubnetGroup": TierHandVerified, + "DeleteEventSubscription": TierUnimplemented, + "DeleteGlobalCluster": TierUnimplemented, + "DeleteIntegration": TierUnimplemented, + "DeleteOptionGroup": TierHandVerified, + "DeleteTenantDatabase": TierUnimplemented, + "DeregisterDBProxyTargets": TierUnimplemented, + "DescribeAccountAttributes": TierHandVerified, + "DescribeBlueGreenDeployments": TierUnimplemented, + "DescribeCertificates": TierHandVerified, + "DescribeDBClusterAutomatedBackups": TierUnimplemented, + "DescribeDBClusterBacktracks": TierUnimplemented, + "DescribeDBClusterEndpoints": TierUnimplemented, + "DescribeDBClusterParameterGroups": TierHandVerified, + "DescribeDBClusterParameters": TierHandVerified, + "DescribeDBClusterSnapshotAttributes": TierUnimplemented, + "DescribeDBClusterSnapshots": TierHandVerified, + "DescribeDBClusters": TierHandVerified, + "DescribeDBEngineVersions": TierHandVerified, + "DescribeDBInstanceAutomatedBackups": TierUnimplemented, + "DescribeDBInstances": TierHandVerified, + "DescribeDBLogFiles": TierUnimplemented, + "DescribeDBMajorEngineVersions": TierUnimplemented, + "DescribeDBParameterGroups": TierHandVerified, + "DescribeDBParameters": TierHandVerified, + "DescribeDBProxies": TierUnimplemented, + "DescribeDBProxyEndpoints": TierUnimplemented, + "DescribeDBProxyTargetGroups": TierUnimplemented, + "DescribeDBProxyTargets": TierUnimplemented, + "DescribeDBRecommendations": TierUnimplemented, + "DescribeDBSecurityGroups": TierUnimplemented, + "DescribeDBShardGroups": TierUnimplemented, + "DescribeDBSnapshotAttributes": TierUnimplemented, + "DescribeDBSnapshotTenantDatabases": TierUnimplemented, + "DescribeDBSnapshots": TierHandVerified, + "DescribeDBSubnetGroups": TierHandVerified, + "DescribeEngineDefaultClusterParameters": TierHandVerified, + "DescribeEngineDefaultParameters": TierHandVerified, + "DescribeEventCategories": TierHandVerified, + "DescribeEventSubscriptions": TierUnimplemented, + "DescribeEvents": TierHandVerified, + "DescribeExportTasks": TierUnimplemented, + "DescribeGlobalClusters": TierUnimplemented, + "DescribeIntegrations": TierUnimplemented, + "DescribeOptionGroupOptions": TierHandVerified, + "DescribeOptionGroups": TierHandVerified, + "DescribeOrderableDBInstanceOptions": TierHandVerified, + "DescribePendingMaintenanceActions": TierHandVerified, + "DescribeReservedDBInstances": TierUnimplemented, + "DescribeReservedDBInstancesOfferings": TierUnimplemented, + "DescribeSourceRegions": TierHandVerified, + "DescribeTenantDatabases": TierUnimplemented, + "DescribeValidDBInstanceModifications": TierUnimplemented, + "DisableHttpEndpoint": TierUnimplemented, + "DownloadDBLogFilePortion": TierUnimplemented, + "EnableHttpEndpoint": TierUnimplemented, + "FailoverDBCluster": TierHandVerified, + "FailoverGlobalCluster": TierUnimplemented, + "ListTagsForResource": TierHandVerified, + "ModifyActivityStream": TierUnimplemented, + "ModifyCertificates": TierUnimplemented, + "ModifyCurrentDBClusterCapacity": TierUnimplemented, + "ModifyCustomDBEngineVersion": TierUnimplemented, + "ModifyDBCluster": TierHandVerified, + "ModifyDBClusterEndpoint": TierUnimplemented, + "ModifyDBClusterParameterGroup": TierHandVerified, + "ModifyDBClusterSnapshotAttribute": TierUnimplemented, + "ModifyDBInstance": TierHandVerified, + "ModifyDBParameterGroup": TierHandVerified, + "ModifyDBProxy": TierUnimplemented, + "ModifyDBProxyEndpoint": TierUnimplemented, + "ModifyDBProxyTargetGroup": TierUnimplemented, + "ModifyDBRecommendation": TierUnimplemented, + "ModifyDBShardGroup": TierUnimplemented, + "ModifyDBSnapshot": TierUnimplemented, + "ModifyDBSnapshotAttribute": TierUnimplemented, + "ModifyDBSubnetGroup": TierHandVerified, + "ModifyEventSubscription": TierUnimplemented, + "ModifyGlobalCluster": TierUnimplemented, + "ModifyIntegration": TierUnimplemented, + "ModifyOptionGroup": TierHandVerified, + "ModifyTenantDatabase": TierUnimplemented, + "PromoteReadReplica": TierUnimplemented, + "PromoteReadReplicaDBCluster": TierUnimplemented, + "PurchaseReservedDBInstancesOffering": TierUnimplemented, + "RebootDBCluster": TierHandVerified, + "RebootDBInstance": TierHandVerified, + "RebootDBShardGroup": TierUnimplemented, + "RegisterDBProxyTargets": TierUnimplemented, + "RemoveFromGlobalCluster": TierUnimplemented, + "RemoveRoleFromDBCluster": TierUnimplemented, + "RemoveRoleFromDBInstance": TierUnimplemented, + "RemoveSourceIdentifierFromSubscription": TierUnimplemented, + "RemoveTagsFromResource": TierHandVerified, + "ResetDBClusterParameterGroup": TierHandVerified, + "ResetDBParameterGroup": TierHandVerified, + "RestoreDBClusterFromS3": TierUnimplemented, + "RestoreDBClusterFromSnapshot": TierUnimplemented, + "RestoreDBClusterToPointInTime": TierUnimplemented, + "RestoreDBInstanceFromDBSnapshot": TierUnimplemented, + "RestoreDBInstanceFromS3": TierUnimplemented, + "RestoreDBInstanceToPointInTime": TierUnimplemented, + "RevokeDBSecurityGroupIngress": TierUnimplemented, + "StartActivityStream": TierUnimplemented, + "StartDBCluster": TierHandVerified, + "StartDBInstance": TierHandVerified, + "StartDBInstanceAutomatedBackupsReplication": TierUnimplemented, + "StartExportTask": TierUnimplemented, + "StopActivityStream": TierUnimplemented, + "StopDBCluster": TierHandVerified, + "StopDBInstance": TierHandVerified, + "StopDBInstanceAutomatedBackupsReplication": TierUnimplemented, + "SwitchoverBlueGreenDeployment": TierUnimplemented, + "SwitchoverGlobalCluster": TierUnimplemented, + "SwitchoverReadReplica": TierUnimplemented, + }}, + "redshift": {ModelBacked: true, Operations: map[string]Tier{ + "AcceptReservedNodeExchange": TierUnimplemented, + "AddPartner": TierUnimplemented, + "AssociateDataShareConsumer": TierUnimplemented, + "AuthorizeClusterSecurityGroupIngress": TierUnimplemented, + "AuthorizeDataShare": TierUnimplemented, + "AuthorizeEndpointAccess": TierUnimplemented, + "AuthorizeSnapshotAccess": TierUnimplemented, + "BatchDeleteClusterSnapshots": TierUnimplemented, + "BatchModifyClusterSnapshots": TierUnimplemented, + "CancelResize": TierUnimplemented, + "CopyClusterSnapshot": TierHandVerified, + "CreateAuthenticationProfile": TierUnimplemented, + "CreateCluster": TierHandVerified, + "CreateClusterParameterGroup": TierHandVerified, + "CreateClusterSecurityGroup": TierUnimplemented, + "CreateClusterSnapshot": TierHandVerified, + "CreateClusterSubnetGroup": TierHandVerified, + "CreateCustomDomainAssociation": TierUnimplemented, + "CreateEndpointAccess": TierUnimplemented, + "CreateEventSubscription": TierUnimplemented, + "CreateHsmClientCertificate": TierUnimplemented, + "CreateHsmConfiguration": TierUnimplemented, + "CreateIntegration": TierUnimplemented, + "CreateRedshiftIdcApplication": TierUnimplemented, + "CreateScheduledAction": TierUnimplemented, + "CreateSnapshotCopyGrant": TierUnimplemented, + "CreateSnapshotSchedule": TierUnimplemented, + "CreateTags": TierHandVerified, + "CreateUsageLimit": TierUnimplemented, + "DeauthorizeDataShare": TierUnimplemented, + "DeleteAuthenticationProfile": TierUnimplemented, + "DeleteCluster": TierHandVerified, + "DeleteClusterParameterGroup": TierHandVerified, + "DeleteClusterSecurityGroup": TierUnimplemented, + "DeleteClusterSnapshot": TierHandVerified, + "DeleteClusterSubnetGroup": TierHandVerified, + "DeleteCustomDomainAssociation": TierUnimplemented, + "DeleteEndpointAccess": TierUnimplemented, + "DeleteEventSubscription": TierUnimplemented, + "DeleteHsmClientCertificate": TierUnimplemented, + "DeleteHsmConfiguration": TierUnimplemented, + "DeleteIntegration": TierUnimplemented, + "DeletePartner": TierUnimplemented, + "DeleteRedshiftIdcApplication": TierUnimplemented, + "DeleteResourcePolicy": TierUnimplemented, + "DeleteScheduledAction": TierUnimplemented, + "DeleteSnapshotCopyGrant": TierUnimplemented, + "DeleteSnapshotSchedule": TierUnimplemented, + "DeleteTags": TierHandVerified, + "DeleteUsageLimit": TierUnimplemented, + "DeregisterNamespace": TierUnimplemented, + "DescribeAccountAttributes": TierUnimplemented, + "DescribeAuthenticationProfiles": TierUnimplemented, + "DescribeClusterDbRevisions": TierUnimplemented, + "DescribeClusterParameterGroups": TierHandVerified, + "DescribeClusterParameters": TierHandVerified, + "DescribeClusterSecurityGroups": TierUnimplemented, + "DescribeClusterSnapshots": TierHandVerified, + "DescribeClusterSubnetGroups": TierHandVerified, + "DescribeClusterTracks": TierUnimplemented, + "DescribeClusterVersions": TierUnimplemented, + "DescribeClusters": TierHandVerified, + "DescribeCustomDomainAssociations": TierUnimplemented, + "DescribeDataShares": TierUnimplemented, + "DescribeDataSharesForConsumer": TierUnimplemented, + "DescribeDataSharesForProducer": TierUnimplemented, + "DescribeDefaultClusterParameters": TierHandVerified, + "DescribeEndpointAccess": TierUnimplemented, + "DescribeEndpointAuthorization": TierUnimplemented, + "DescribeEventCategories": TierUnimplemented, + "DescribeEventSubscriptions": TierUnimplemented, + "DescribeEvents": TierUnimplemented, + "DescribeHsmClientCertificates": TierUnimplemented, + "DescribeHsmConfigurations": TierUnimplemented, + "DescribeInboundIntegrations": TierUnimplemented, + "DescribeIntegrations": TierUnimplemented, + "DescribeLoggingStatus": TierHandVerified, + "DescribeNodeConfigurationOptions": TierUnimplemented, + "DescribeOrderableClusterOptions": TierUnimplemented, + "DescribePartners": TierUnimplemented, + "DescribeRedshiftIdcApplications": TierUnimplemented, + "DescribeReservedNodeExchangeStatus": TierUnimplemented, + "DescribeReservedNodeOfferings": TierUnimplemented, + "DescribeReservedNodes": TierUnimplemented, + "DescribeResize": TierUnimplemented, + "DescribeScheduledActions": TierUnimplemented, + "DescribeSnapshotCopyGrants": TierUnimplemented, + "DescribeSnapshotSchedules": TierUnimplemented, + "DescribeStorage": TierUnimplemented, + "DescribeTableRestoreStatus": TierUnimplemented, + "DescribeTags": TierHandVerified, + "DescribeUsageLimits": TierUnimplemented, + "DisableLogging": TierHandVerified, + "DisableSnapshotCopy": TierUnimplemented, + "DisassociateDataShareConsumer": TierUnimplemented, + "EnableLogging": TierHandVerified, + "EnableSnapshotCopy": TierUnimplemented, + "FailoverPrimaryCompute": TierUnimplemented, + "GetClusterCredentials": TierHandVerified, + "GetClusterCredentialsWithIAM": TierHandVerified, + "GetIdentityCenterAuthToken": TierUnimplemented, + "GetReservedNodeExchangeConfigurationOptions": TierUnimplemented, + "GetReservedNodeExchangeOfferings": TierUnimplemented, + "GetResourcePolicy": TierUnimplemented, + "ListRecommendations": TierUnimplemented, + "ModifyAquaConfiguration": TierUnimplemented, + "ModifyAuthenticationProfile": TierUnimplemented, + "ModifyCluster": TierHandVerified, + "ModifyClusterDbRevision": TierUnimplemented, + "ModifyClusterIamRoles": TierUnimplemented, + "ModifyClusterMaintenance": TierUnimplemented, + "ModifyClusterParameterGroup": TierHandVerified, + "ModifyClusterSnapshot": TierUnimplemented, + "ModifyClusterSnapshotSchedule": TierUnimplemented, + "ModifyClusterSubnetGroup": TierHandVerified, + "ModifyCustomDomainAssociation": TierUnimplemented, + "ModifyEndpointAccess": TierUnimplemented, + "ModifyEventSubscription": TierUnimplemented, + "ModifyIntegration": TierUnimplemented, + "ModifyLakehouseConfiguration": TierUnimplemented, + "ModifyRedshiftIdcApplication": TierUnimplemented, + "ModifyScheduledAction": TierUnimplemented, + "ModifySnapshotCopyRetentionPeriod": TierUnimplemented, + "ModifySnapshotSchedule": TierUnimplemented, + "ModifyUsageLimit": TierUnimplemented, + "PauseCluster": TierHandVerified, + "PurchaseReservedNodeOffering": TierUnimplemented, + "PutResourcePolicy": TierUnimplemented, + "RebootCluster": TierHandVerified, + "RegisterNamespace": TierUnimplemented, + "RejectDataShare": TierUnimplemented, + "ResetClusterParameterGroup": TierHandVerified, + "ResizeCluster": TierUnimplemented, + "RestoreFromClusterSnapshot": TierHandVerified, + "RestoreTableFromClusterSnapshot": TierUnimplemented, + "ResumeCluster": TierHandVerified, + "RevokeClusterSecurityGroupIngress": TierUnimplemented, + "RevokeEndpointAccess": TierUnimplemented, + "RevokeSnapshotAccess": TierUnimplemented, + "RotateEncryptionKey": TierUnimplemented, + "UpdatePartnerStatus": TierUnimplemented, + }}, + "resourcegroups": {ModelBacked: true, Operations: map[string]Tier{ + "CancelTagSyncTask": TierHandVerified, + "CreateGroup": TierHandVerified, + "DeleteGroup": TierHandVerified, + "GetAccountSettings": TierHandVerified, + "GetGroup": TierHandVerified, + "GetGroupConfiguration": TierHandVerified, + "GetGroupQuery": TierHandVerified, + "GetTagSyncTask": TierHandVerified, + "GetTags": TierHandVerified, + "GroupResources": TierHandVerified, + "ListGroupResources": TierHandVerified, + "ListGroupingStatuses": TierHandVerified, + "ListGroups": TierHandVerified, + "ListTagSyncTasks": TierHandVerified, + "PutGroupConfiguration": TierHandVerified, + "SearchResources": TierHandVerified, + "StartTagSyncTask": TierHandVerified, + "Tag": TierUnimplemented, + "UngroupResources": TierHandVerified, + "Untag": TierHandVerified, + "UpdateAccountSettings": TierHandVerified, + "UpdateGroup": TierHandVerified, + "UpdateGroupQuery": TierHandVerified, + }}, + "resourcegroupstaggingapi": {ModelBacked: true, Operations: map[string]Tier{ + "DescribeReportCreation": TierHandVerified, + "GetComplianceSummary": TierHandVerified, + "GetResources": TierHandVerified, + "GetTagKeys": TierHandVerified, + "GetTagValues": TierHandVerified, + "ListRequiredTags": TierHandVerified, + "StartReportCreation": TierHandVerified, + "TagResources": TierHandVerified, + "UntagResources": TierHandVerified, + }}, + "route53": {ModelBacked: true, Operations: map[string]Tier{ + "ActivateKeySigningKey": TierHandVerified, + "AssociateVPCWithHostedZone": TierHandVerified, + "ChangeCidrCollection": TierHandVerified, + "ChangeResourceRecordSets": TierHandVerified, + "ChangeTagsForResource": TierHandVerified, + "CreateCidrCollection": TierHandVerified, + "CreateHealthCheck": TierHandVerified, + "CreateHostedZone": TierHandVerified, + "CreateKeySigningKey": TierHandVerified, + "CreateQueryLoggingConfig": TierHandVerified, + "CreateReusableDelegationSet": TierHandVerified, + "CreateTrafficPolicy": TierHandVerified, + "CreateTrafficPolicyInstance": TierHandVerified, + "CreateTrafficPolicyVersion": TierUnimplemented, + "CreateVPCAssociationAuthorization": TierUnimplemented, + "DeactivateKeySigningKey": TierHandVerified, + "DeleteCidrCollection": TierHandVerified, + "DeleteHealthCheck": TierHandVerified, + "DeleteHostedZone": TierHandVerified, + "DeleteKeySigningKey": TierHandVerified, + "DeleteQueryLoggingConfig": TierHandVerified, + "DeleteReusableDelegationSet": TierHandVerified, + "DeleteTrafficPolicy": TierHandVerified, + "DeleteTrafficPolicyInstance": TierHandVerified, + "DeleteVPCAssociationAuthorization": TierUnimplemented, + "DisableHostedZoneDNSSEC": TierHandVerified, + "DisassociateVPCFromHostedZone": TierHandVerified, + "EnableHostedZoneDNSSEC": TierHandVerified, + "GetAccountLimit": TierUnimplemented, + "GetChange": TierUnimplemented, + "GetCheckerIpRanges": TierUnimplemented, + "GetDNSSEC": TierHandVerified, + "GetGeoLocation": TierUnimplemented, + "GetHealthCheck": TierHandVerified, + "GetHealthCheckCount": TierUnimplemented, + "GetHealthCheckLastFailureReason": TierUnimplemented, + "GetHealthCheckStatus": TierHandVerified, + "GetHostedZone": TierHandVerified, + "GetHostedZoneCount": TierUnimplemented, + "GetHostedZoneLimit": TierUnimplemented, + "GetQueryLoggingConfig": TierHandVerified, + "GetReusableDelegationSet": TierHandVerified, + "GetReusableDelegationSetLimit": TierUnimplemented, + "GetTrafficPolicy": TierHandVerified, + "GetTrafficPolicyInstance": TierHandVerified, + "GetTrafficPolicyInstanceCount": TierUnimplemented, + "ListCidrBlocks": TierHandVerified, + "ListCidrCollections": TierHandVerified, + "ListCidrLocations": TierHandVerified, + "ListGeoLocations": TierUnimplemented, + "ListHealthChecks": TierHandVerified, + "ListHostedZones": TierHandVerified, + "ListHostedZonesByName": TierUnimplemented, + "ListHostedZonesByVPC": TierUnimplemented, + "ListQueryLoggingConfigs": TierHandVerified, + "ListResourceRecordSets": TierHandVerified, + "ListReusableDelegationSets": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListTagsForResources": TierUnimplemented, + "ListTrafficPolicies": TierHandVerified, + "ListTrafficPolicyInstances": TierHandVerified, + "ListTrafficPolicyInstancesByHostedZone": TierHandVerified, + "ListTrafficPolicyInstancesByPolicy": TierHandVerified, + "ListTrafficPolicyVersions": TierUnimplemented, + "ListVPCAssociationAuthorizations": TierUnimplemented, + "TestDNSAnswer": TierUnimplemented, + "UpdateHealthCheck": TierHandVerified, + "UpdateHostedZoneComment": TierUnimplemented, + "UpdateHostedZoneFeatures": TierUnimplemented, + "UpdateTrafficPolicyComment": TierUnimplemented, + "UpdateTrafficPolicyInstance": TierHandVerified, + }}, + "route53resolver": {ModelBacked: true, Operations: map[string]Tier{ + "AssociateFirewallRuleGroup": TierHandVerified, + "AssociateResolverEndpointIpAddress": TierHandVerified, + "AssociateResolverQueryLogConfig": TierHandVerified, + "AssociateResolverRule": TierHandVerified, + "CreateFirewallDomainList": TierHandVerified, + "CreateFirewallRule": TierHandVerified, + "CreateFirewallRuleGroup": TierHandVerified, + "CreateOutpostResolver": TierHandVerified, + "CreateResolverEndpoint": TierHandVerified, + "CreateResolverQueryLogConfig": TierHandVerified, + "CreateResolverRule": TierHandVerified, + "DeleteFirewallDomainList": TierHandVerified, + "DeleteFirewallRule": TierHandVerified, + "DeleteFirewallRuleGroup": TierHandVerified, + "DeleteOutpostResolver": TierHandVerified, + "DeleteResolverEndpoint": TierHandVerified, + "DeleteResolverQueryLogConfig": TierHandVerified, + "DeleteResolverRule": TierHandVerified, + "DisassociateFirewallRuleGroup": TierHandVerified, + "DisassociateResolverEndpointIpAddress": TierHandVerified, + "DisassociateResolverQueryLogConfig": TierHandVerified, + "DisassociateResolverRule": TierHandVerified, + "GetFirewallConfig": TierHandVerified, + "GetFirewallDomainList": TierHandVerified, + "GetFirewallRuleGroup": TierHandVerified, + "GetFirewallRuleGroupAssociation": TierHandVerified, + "GetFirewallRuleGroupPolicy": TierHandVerified, + "GetOutpostResolver": TierHandVerified, + "GetResolverConfig": TierHandVerified, + "GetResolverDnssecConfig": TierHandVerified, + "GetResolverEndpoint": TierHandVerified, + "GetResolverQueryLogConfig": TierHandVerified, + "GetResolverQueryLogConfigAssociation": TierHandVerified, + "GetResolverQueryLogConfigPolicy": TierHandVerified, + "GetResolverRule": TierHandVerified, + "GetResolverRuleAssociation": TierHandVerified, + "GetResolverRulePolicy": TierHandVerified, + "ImportFirewallDomains": TierHandVerified, + "ListFirewallConfigs": TierHandVerified, + "ListFirewallDomainLists": TierHandVerified, + "ListFirewallDomains": TierHandVerified, + "ListFirewallRuleGroupAssociations": TierHandVerified, + "ListFirewallRuleGroups": TierHandVerified, + "ListFirewallRules": TierHandVerified, + "ListOutpostResolvers": TierHandVerified, + "ListResolverConfigs": TierHandVerified, + "ListResolverDnssecConfigs": TierHandVerified, + "ListResolverEndpointIpAddresses": TierHandVerified, + "ListResolverEndpoints": TierHandVerified, + "ListResolverQueryLogConfigAssociations": TierHandVerified, + "ListResolverQueryLogConfigs": TierHandVerified, + "ListResolverRuleAssociations": TierHandVerified, + "ListResolverRules": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "PutFirewallRuleGroupPolicy": TierHandVerified, + "PutResolverQueryLogConfigPolicy": TierHandVerified, + "PutResolverRulePolicy": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateFirewallConfig": TierHandVerified, + "UpdateFirewallDomains": TierHandVerified, + "UpdateFirewallRule": TierHandVerified, + "UpdateFirewallRuleGroupAssociation": TierHandVerified, + "UpdateOutpostResolver": TierHandVerified, + "UpdateResolverConfig": TierHandVerified, + "UpdateResolverDnssecConfig": TierHandVerified, + "UpdateResolverEndpoint": TierHandVerified, + "UpdateResolverRule": TierHandVerified, + }}, + "s3": {ModelBacked: true, Operations: map[string]Tier{ + "AbortMultipartUpload": TierHandVerified, + "CompleteMultipartUpload": TierHandVerified, + "CopyObject": TierHandVerified, + "CreateBucket": TierHandVerified, + "CreateBucketMetadataConfiguration": TierUnimplemented, + "CreateBucketMetadataTableConfiguration": TierUnimplemented, + "CreateMultipartUpload": TierHandVerified, + "CreateSession": TierUnimplemented, + "DeleteBucket": TierHandVerified, + "DeleteBucketAnalyticsConfiguration": TierUnimplemented, + "DeleteBucketCors": TierHandVerified, + "DeleteBucketEncryption": TierUnimplemented, + "DeleteBucketIntelligentTieringConfiguration": TierUnimplemented, + "DeleteBucketInventoryConfiguration": TierUnimplemented, + "DeleteBucketLifecycle": TierUnimplemented, + "DeleteBucketMetadataConfiguration": TierUnimplemented, + "DeleteBucketMetadataTableConfiguration": TierUnimplemented, + "DeleteBucketMetricsConfiguration": TierUnimplemented, + "DeleteBucketOwnershipControls": TierUnimplemented, + "DeleteBucketPolicy": TierHandVerified, + "DeleteBucketReplication": TierUnimplemented, + "DeleteBucketTagging": TierHandVerified, + "DeleteBucketWebsite": TierUnimplemented, + "DeleteObject": TierHandVerified, + "DeleteObjectTagging": TierHandVerified, + "DeleteObjects": TierHandVerified, + "DeletePublicAccessBlock": TierUnimplemented, + "GetBucketAbac": TierUnimplemented, + "GetBucketAccelerateConfiguration": TierUnimplemented, + "GetBucketAcl": TierHandVerified, + "GetBucketAnalyticsConfiguration": TierUnimplemented, + "GetBucketCors": TierHandVerified, + "GetBucketEncryption": TierUnimplemented, + "GetBucketIntelligentTieringConfiguration": TierUnimplemented, + "GetBucketInventoryConfiguration": TierUnimplemented, + "GetBucketLifecycleConfiguration": TierUnimplemented, + "GetBucketLocation": TierHandVerified, + "GetBucketLogging": TierUnimplemented, + "GetBucketMetadataConfiguration": TierUnimplemented, + "GetBucketMetadataTableConfiguration": TierUnimplemented, + "GetBucketMetricsConfiguration": TierUnimplemented, + "GetBucketNotificationConfiguration": TierHandVerified, + "GetBucketOwnershipControls": TierUnimplemented, + "GetBucketPolicy": TierHandVerified, + "GetBucketPolicyStatus": TierUnimplemented, + "GetBucketReplication": TierUnimplemented, + "GetBucketRequestPayment": TierUnimplemented, + "GetBucketTagging": TierHandVerified, + "GetBucketVersioning": TierHandVerified, + "GetBucketWebsite": TierUnimplemented, + "GetObject": TierHandVerified, + "GetObjectAcl": TierUnimplemented, + "GetObjectAttributes": TierUnimplemented, + "GetObjectLegalHold": TierUnimplemented, + "GetObjectLockConfiguration": TierUnimplemented, + "GetObjectRetention": TierUnimplemented, + "GetObjectTagging": TierHandVerified, + "GetObjectTorrent": TierUnimplemented, + "GetPublicAccessBlock": TierUnimplemented, + "HeadBucket": TierHandVerified, + "HeadObject": TierHandVerified, + "ListBucketAnalyticsConfigurations": TierUnimplemented, + "ListBucketIntelligentTieringConfigurations": TierUnimplemented, + "ListBucketInventoryConfigurations": TierUnimplemented, + "ListBucketMetricsConfigurations": TierUnimplemented, + "ListBuckets": TierHandVerified, + "ListDirectoryBuckets": TierUnimplemented, + "ListMultipartUploads": TierHandVerified, + "ListObjectVersions": TierUnimplemented, + "ListObjects": TierHandVerified, + "ListObjectsV2": TierHandVerified, + "ListParts": TierHandVerified, + "PutBucketAbac": TierUnimplemented, + "PutBucketAccelerateConfiguration": TierUnimplemented, + "PutBucketAcl": TierHandVerified, + "PutBucketAnalyticsConfiguration": TierUnimplemented, + "PutBucketCors": TierHandVerified, + "PutBucketEncryption": TierUnimplemented, + "PutBucketIntelligentTieringConfiguration": TierUnimplemented, + "PutBucketInventoryConfiguration": TierUnimplemented, + "PutBucketLifecycleConfiguration": TierUnimplemented, + "PutBucketLogging": TierUnimplemented, + "PutBucketMetricsConfiguration": TierUnimplemented, + "PutBucketNotificationConfiguration": TierHandVerified, + "PutBucketOwnershipControls": TierUnimplemented, + "PutBucketPolicy": TierHandVerified, + "PutBucketReplication": TierUnimplemented, + "PutBucketRequestPayment": TierUnimplemented, + "PutBucketTagging": TierHandVerified, + "PutBucketVersioning": TierHandVerified, + "PutBucketWebsite": TierUnimplemented, + "PutObject": TierHandVerified, + "PutObjectAcl": TierUnimplemented, + "PutObjectLegalHold": TierUnimplemented, + "PutObjectLockConfiguration": TierUnimplemented, + "PutObjectRetention": TierUnimplemented, + "PutObjectTagging": TierHandVerified, + "PutPublicAccessBlock": TierUnimplemented, + "RenameObject": TierUnimplemented, + "RestoreObject": TierUnimplemented, + "SelectObjectContent": TierUnimplemented, + "UpdateBucketMetadataInventoryTableConfiguration": TierUnimplemented, + "UpdateBucketMetadataJournalTableConfiguration": TierUnimplemented, + "UpdateObjectEncryption": TierUnimplemented, + "UploadPart": TierHandVerified, + "UploadPartCopy": TierUnimplemented, + "WriteGetObjectResponse": TierUnimplemented, + }}, + "s3tables": {ModelBacked: false, Operations: map[string]Tier{ + "CreateNamespace": TierHandVerified, + "CreateTable": TierHandVerified, + "CreateTableBucket": TierHandVerified, + "DeleteNamespace": TierHandVerified, + "DeleteTable": TierHandVerified, + "DeleteTableBucket": TierHandVerified, + "DeleteTableBucketEncryption": TierHandVerified, + "DeleteTableBucketPolicy": TierHandVerified, + "DeleteTableEncryption": TierHandVerified, + "DeleteTablePolicy": TierHandVerified, + "GetNamespace": TierHandVerified, + "GetTable": TierHandVerified, + "GetTableBucket": TierHandVerified, + "GetTableBucketEncryption": TierHandVerified, + "GetTableBucketMaintenanceConfiguration": TierHandVerified, + "GetTableBucketMaintenanceJobStatus": TierHandVerified, + "GetTableBucketPolicy": TierHandVerified, + "GetTableEncryption": TierHandVerified, + "GetTableMaintenanceConfiguration": TierHandVerified, + "GetTableMaintenanceJobStatus": TierHandVerified, + "GetTableMetadataLocation": TierHandVerified, + "GetTablePolicy": TierHandVerified, + "ListNamespaces": TierHandVerified, + "ListTableBuckets": TierHandVerified, + "ListTables": TierHandVerified, + "PutTableBucketEncryption": TierHandVerified, + "PutTableBucketMaintenanceConfiguration": TierHandVerified, + "PutTableBucketPolicy": TierHandVerified, + "PutTableEncryption": TierHandVerified, + "PutTableMaintenanceConfiguration": TierHandVerified, + "PutTablePolicy": TierHandVerified, + "RenameTable": TierHandVerified, + "UpdateTableMetadataLocation": TierHandVerified, + }}, + "sagemaker": {ModelBacked: true, Operations: map[string]Tier{ + "AddAssociation": TierUnimplemented, + "AddTags": TierHandVerified, + "AssociateTrialComponent": TierUnimplemented, + "AttachClusterNodeVolume": TierUnimplemented, + "BatchAddClusterNodes": TierUnimplemented, + "BatchDeleteClusterNodes": TierUnimplemented, + "BatchDescribeModelPackage": TierUnimplemented, + "BatchRebootClusterNodes": TierUnimplemented, + "BatchReplaceClusterNodes": TierUnimplemented, + "CreateAction": TierAutoCRUD, + "CreateAlgorithm": TierAutoCRUD, + "CreateApp": TierAutoCRUD, + "CreateAppImageConfig": TierAutoCRUD, + "CreateArtifact": TierAutoCRUD, + "CreateAutoMLJob": TierAutoCRUD, + "CreateAutoMLJobV2": TierAutoCRUD, + "CreateCluster": TierAutoCRUD, + "CreateClusterSchedulerConfig": TierAutoCRUD, + "CreateCodeRepository": TierAutoCRUD, + "CreateCompilationJob": TierAutoCRUD, + "CreateComputeQuota": TierAutoCRUD, + "CreateContext": TierAutoCRUD, + "CreateDataQualityJobDefinition": TierAutoCRUD, + "CreateDeviceFleet": TierAutoCRUD, + "CreateDomain": TierHandVerified, + "CreateEdgeDeploymentPlan": TierAutoCRUD, + "CreateEdgeDeploymentStage": TierAutoCRUD, + "CreateEdgePackagingJob": TierAutoCRUD, + "CreateEndpoint": TierHandVerified, + "CreateEndpointConfig": TierHandVerified, + "CreateExperiment": TierHandVerified, + "CreateFeatureGroup": TierAutoCRUD, + "CreateFlowDefinition": TierAutoCRUD, + "CreateHub": TierAutoCRUD, + "CreateHubContentPresignedUrls": TierAutoCRUD, + "CreateHubContentReference": TierAutoCRUD, + "CreateHumanTaskUi": TierAutoCRUD, + "CreateHyperParameterTuningJob": TierAutoCRUD, + "CreateImage": TierAutoCRUD, + "CreateImageVersion": TierAutoCRUD, + "CreateInferenceComponent": TierAutoCRUD, + "CreateInferenceExperiment": TierAutoCRUD, + "CreateInferenceRecommendationsJob": TierAutoCRUD, + "CreateLabelingJob": TierAutoCRUD, + "CreateMlflowApp": TierAutoCRUD, + "CreateMlflowTrackingServer": TierAutoCRUD, + "CreateModel": TierHandVerified, + "CreateModelBiasJobDefinition": TierAutoCRUD, + "CreateModelCard": TierAutoCRUD, + "CreateModelCardExportJob": TierAutoCRUD, + "CreateModelExplainabilityJobDefinition": TierAutoCRUD, + "CreateModelPackage": TierAutoCRUD, + "CreateModelPackageGroup": TierAutoCRUD, + "CreateModelQualityJobDefinition": TierAutoCRUD, + "CreateMonitoringSchedule": TierAutoCRUD, + "CreateNotebookInstance": TierHandVerified, + "CreateNotebookInstanceLifecycleConfig": TierAutoCRUD, + "CreateOptimizationJob": TierAutoCRUD, + "CreatePartnerApp": TierAutoCRUD, + "CreatePartnerAppPresignedUrl": TierAutoCRUD, + "CreatePipeline": TierHandVerified, + "CreatePresignedDomainUrl": TierAutoCRUD, + "CreatePresignedMlflowAppUrl": TierAutoCRUD, + "CreatePresignedMlflowTrackingServerUrl": TierAutoCRUD, + "CreatePresignedNotebookInstanceUrl": TierAutoCRUD, + "CreateProcessingJob": TierHandVerified, + "CreateProject": TierAutoCRUD, + "CreateSpace": TierAutoCRUD, + "CreateStudioLifecycleConfig": TierAutoCRUD, + "CreateTrainingJob": TierHandVerified, + "CreateTrainingPlan": TierAutoCRUD, + "CreateTransformJob": TierHandVerified, + "CreateTrial": TierHandVerified, + "CreateTrialComponent": TierAutoCRUD, + "CreateUserProfile": TierHandVerified, + "CreateWorkforce": TierAutoCRUD, + "CreateWorkteam": TierAutoCRUD, + "DeleteAction": TierAutoCRUD, + "DeleteAlgorithm": TierAutoCRUD, + "DeleteApp": TierAutoCRUD, + "DeleteAppImageConfig": TierAutoCRUD, + "DeleteArtifact": TierAutoCRUD, + "DeleteAssociation": TierAutoCRUD, + "DeleteCluster": TierAutoCRUD, + "DeleteClusterSchedulerConfig": TierAutoCRUD, + "DeleteCodeRepository": TierAutoCRUD, + "DeleteCompilationJob": TierAutoCRUD, + "DeleteComputeQuota": TierAutoCRUD, + "DeleteContext": TierAutoCRUD, + "DeleteDataQualityJobDefinition": TierAutoCRUD, + "DeleteDeviceFleet": TierAutoCRUD, + "DeleteDomain": TierHandVerified, + "DeleteEdgeDeploymentPlan": TierAutoCRUD, + "DeleteEdgeDeploymentStage": TierAutoCRUD, + "DeleteEndpoint": TierHandVerified, + "DeleteEndpointConfig": TierHandVerified, + "DeleteExperiment": TierHandVerified, + "DeleteFeatureGroup": TierAutoCRUD, + "DeleteFlowDefinition": TierAutoCRUD, + "DeleteHub": TierAutoCRUD, + "DeleteHubContent": TierAutoCRUD, + "DeleteHubContentReference": TierAutoCRUD, + "DeleteHumanTaskUi": TierAutoCRUD, + "DeleteHyperParameterTuningJob": TierAutoCRUD, + "DeleteImage": TierAutoCRUD, + "DeleteImageVersion": TierAutoCRUD, + "DeleteInferenceComponent": TierAutoCRUD, + "DeleteInferenceExperiment": TierAutoCRUD, + "DeleteMlflowApp": TierAutoCRUD, + "DeleteMlflowTrackingServer": TierAutoCRUD, + "DeleteModel": TierHandVerified, + "DeleteModelBiasJobDefinition": TierAutoCRUD, + "DeleteModelCard": TierAutoCRUD, + "DeleteModelExplainabilityJobDefinition": TierAutoCRUD, + "DeleteModelPackage": TierAutoCRUD, + "DeleteModelPackageGroup": TierAutoCRUD, + "DeleteModelPackageGroupPolicy": TierAutoCRUD, + "DeleteModelQualityJobDefinition": TierAutoCRUD, + "DeleteMonitoringSchedule": TierAutoCRUD, + "DeleteNotebookInstance": TierHandVerified, + "DeleteNotebookInstanceLifecycleConfig": TierAutoCRUD, + "DeleteOptimizationJob": TierAutoCRUD, + "DeletePartnerApp": TierAutoCRUD, + "DeletePipeline": TierHandVerified, + "DeleteProcessingJob": TierAutoCRUD, + "DeleteProject": TierAutoCRUD, + "DeleteSpace": TierAutoCRUD, + "DeleteStudioLifecycleConfig": TierAutoCRUD, + "DeleteTags": TierHandVerified, + "DeleteTrainingJob": TierAutoCRUD, + "DeleteTrial": TierHandVerified, + "DeleteTrialComponent": TierAutoCRUD, + "DeleteUserProfile": TierHandVerified, + "DeleteWorkforce": TierAutoCRUD, + "DeleteWorkteam": TierAutoCRUD, + "DeregisterDevices": TierAutoCRUD, + "DescribeAction": TierAutoCRUD, + "DescribeAlgorithm": TierAutoCRUD, + "DescribeApp": TierAutoCRUD, + "DescribeAppImageConfig": TierAutoCRUD, + "DescribeArtifact": TierAutoCRUD, + "DescribeAutoMLJob": TierAutoCRUD, + "DescribeAutoMLJobV2": TierAutoCRUD, + "DescribeCluster": TierAutoCRUD, + "DescribeClusterEvent": TierAutoCRUD, + "DescribeClusterNode": TierAutoCRUD, + "DescribeClusterSchedulerConfig": TierAutoCRUD, + "DescribeCodeRepository": TierAutoCRUD, + "DescribeCompilationJob": TierAutoCRUD, + "DescribeComputeQuota": TierAutoCRUD, + "DescribeContext": TierAutoCRUD, + "DescribeDataQualityJobDefinition": TierAutoCRUD, + "DescribeDevice": TierAutoCRUD, + "DescribeDeviceFleet": TierAutoCRUD, + "DescribeDomain": TierHandVerified, + "DescribeEdgeDeploymentPlan": TierAutoCRUD, + "DescribeEdgePackagingJob": TierAutoCRUD, + "DescribeEndpoint": TierHandVerified, + "DescribeEndpointConfig": TierHandVerified, + "DescribeExperiment": TierHandVerified, + "DescribeFeatureGroup": TierAutoCRUD, + "DescribeFeatureMetadata": TierAutoCRUD, + "DescribeFlowDefinition": TierAutoCRUD, + "DescribeHub": TierAutoCRUD, + "DescribeHubContent": TierAutoCRUD, + "DescribeHumanTaskUi": TierAutoCRUD, + "DescribeHyperParameterTuningJob": TierAutoCRUD, + "DescribeImage": TierAutoCRUD, + "DescribeImageVersion": TierAutoCRUD, + "DescribeInferenceComponent": TierAutoCRUD, + "DescribeInferenceExperiment": TierAutoCRUD, + "DescribeInferenceRecommendationsJob": TierAutoCRUD, + "DescribeLabelingJob": TierAutoCRUD, + "DescribeLineageGroup": TierAutoCRUD, + "DescribeMlflowApp": TierAutoCRUD, + "DescribeMlflowTrackingServer": TierAutoCRUD, + "DescribeModel": TierHandVerified, + "DescribeModelBiasJobDefinition": TierAutoCRUD, + "DescribeModelCard": TierAutoCRUD, + "DescribeModelCardExportJob": TierAutoCRUD, + "DescribeModelExplainabilityJobDefinition": TierAutoCRUD, + "DescribeModelPackage": TierAutoCRUD, + "DescribeModelPackageGroup": TierAutoCRUD, + "DescribeModelQualityJobDefinition": TierAutoCRUD, + "DescribeMonitoringSchedule": TierAutoCRUD, + "DescribeNotebookInstance": TierHandVerified, + "DescribeNotebookInstanceLifecycleConfig": TierAutoCRUD, + "DescribeOptimizationJob": TierAutoCRUD, + "DescribePartnerApp": TierAutoCRUD, + "DescribePipeline": TierHandVerified, + "DescribePipelineDefinitionForExecution": TierAutoCRUD, + "DescribePipelineExecution": TierHandVerified, + "DescribeProcessingJob": TierHandVerified, + "DescribeProject": TierAutoCRUD, + "DescribeReservedCapacity": TierAutoCRUD, + "DescribeSpace": TierAutoCRUD, + "DescribeStudioLifecycleConfig": TierAutoCRUD, + "DescribeSubscribedWorkteam": TierAutoCRUD, + "DescribeTrainingJob": TierHandVerified, + "DescribeTrainingPlan": TierAutoCRUD, + "DescribeTrainingPlanExtensionHistory": TierAutoCRUD, + "DescribeTransformJob": TierHandVerified, + "DescribeTrial": TierHandVerified, + "DescribeTrialComponent": TierAutoCRUD, + "DescribeUserProfile": TierHandVerified, + "DescribeWorkforce": TierAutoCRUD, + "DescribeWorkteam": TierAutoCRUD, + "DetachClusterNodeVolume": TierUnimplemented, + "DisableSagemakerServicecatalogPortfolio": TierUnimplemented, + "DisassociateTrialComponent": TierUnimplemented, + "EnableSagemakerServicecatalogPortfolio": TierUnimplemented, + "ExtendTrainingPlan": TierUnimplemented, + "GetDeviceFleetReport": TierAutoCRUD, + "GetLineageGroupPolicy": TierAutoCRUD, + "GetModelPackageGroupPolicy": TierAutoCRUD, + "GetSagemakerServicecatalogPortfolioStatus": TierAutoCRUD, + "GetScalingConfigurationRecommendation": TierAutoCRUD, + "GetSearchSuggestions": TierAutoCRUD, + "ImportHubContent": TierUnimplemented, + "ListActions": TierAutoCRUD, + "ListAlgorithms": TierAutoCRUD, + "ListAliases": TierAutoCRUD, + "ListAppImageConfigs": TierAutoCRUD, + "ListApps": TierAutoCRUD, + "ListArtifacts": TierAutoCRUD, + "ListAssociations": TierAutoCRUD, + "ListAutoMLJobs": TierAutoCRUD, + "ListCandidatesForAutoMLJob": TierAutoCRUD, + "ListClusterEvents": TierAutoCRUD, + "ListClusterNodes": TierAutoCRUD, + "ListClusterSchedulerConfigs": TierAutoCRUD, + "ListClusters": TierAutoCRUD, + "ListCodeRepositories": TierAutoCRUD, + "ListCompilationJobs": TierAutoCRUD, + "ListComputeQuotas": TierAutoCRUD, + "ListContexts": TierAutoCRUD, + "ListDataQualityJobDefinitions": TierAutoCRUD, + "ListDeviceFleets": TierAutoCRUD, + "ListDevices": TierAutoCRUD, + "ListDomains": TierHandVerified, + "ListEdgeDeploymentPlans": TierAutoCRUD, + "ListEdgePackagingJobs": TierAutoCRUD, + "ListEndpointConfigs": TierHandVerified, + "ListEndpoints": TierHandVerified, + "ListExperiments": TierHandVerified, + "ListFeatureGroups": TierAutoCRUD, + "ListFlowDefinitions": TierAutoCRUD, + "ListHubContentVersions": TierAutoCRUD, + "ListHubContents": TierAutoCRUD, + "ListHubs": TierAutoCRUD, + "ListHumanTaskUis": TierAutoCRUD, + "ListHyperParameterTuningJobs": TierAutoCRUD, + "ListImageVersions": TierAutoCRUD, + "ListImages": TierAutoCRUD, + "ListInferenceComponents": TierAutoCRUD, + "ListInferenceExperiments": TierAutoCRUD, + "ListInferenceRecommendationsJobSteps": TierAutoCRUD, + "ListInferenceRecommendationsJobs": TierAutoCRUD, + "ListLabelingJobs": TierAutoCRUD, + "ListLabelingJobsForWorkteam": TierAutoCRUD, + "ListLineageGroups": TierAutoCRUD, + "ListMlflowApps": TierAutoCRUD, + "ListMlflowTrackingServers": TierAutoCRUD, + "ListModelBiasJobDefinitions": TierAutoCRUD, + "ListModelCardExportJobs": TierAutoCRUD, + "ListModelCardVersions": TierAutoCRUD, + "ListModelCards": TierAutoCRUD, + "ListModelExplainabilityJobDefinitions": TierAutoCRUD, + "ListModelMetadata": TierAutoCRUD, + "ListModelPackageGroups": TierAutoCRUD, + "ListModelPackages": TierAutoCRUD, + "ListModelQualityJobDefinitions": TierAutoCRUD, + "ListModels": TierHandVerified, + "ListMonitoringAlertHistory": TierAutoCRUD, + "ListMonitoringAlerts": TierAutoCRUD, + "ListMonitoringExecutions": TierAutoCRUD, + "ListMonitoringSchedules": TierAutoCRUD, + "ListNotebookInstanceLifecycleConfigs": TierAutoCRUD, + "ListNotebookInstances": TierHandVerified, + "ListOptimizationJobs": TierAutoCRUD, + "ListPartnerApps": TierAutoCRUD, + "ListPipelineExecutionSteps": TierAutoCRUD, + "ListPipelineExecutions": TierHandVerified, + "ListPipelineParametersForExecution": TierAutoCRUD, + "ListPipelineVersions": TierAutoCRUD, + "ListPipelines": TierHandVerified, + "ListProcessingJobs": TierHandVerified, + "ListProjects": TierAutoCRUD, + "ListResourceCatalogs": TierAutoCRUD, + "ListSpaces": TierAutoCRUD, + "ListStageDevices": TierAutoCRUD, + "ListStudioLifecycleConfigs": TierAutoCRUD, + "ListSubscribedWorkteams": TierAutoCRUD, + "ListTags": TierHandVerified, + "ListTrainingJobs": TierHandVerified, + "ListTrainingJobsForHyperParameterTuningJob": TierAutoCRUD, + "ListTrainingPlans": TierAutoCRUD, + "ListTransformJobs": TierHandVerified, + "ListTrialComponents": TierAutoCRUD, + "ListTrials": TierHandVerified, + "ListUltraServersByReservedCapacity": TierAutoCRUD, + "ListUserProfiles": TierHandVerified, + "ListWorkforces": TierAutoCRUD, + "ListWorkteams": TierAutoCRUD, + "PutModelPackageGroupPolicy": TierAutoCRUD, + "QueryLineage": TierUnimplemented, + "RegisterDevices": TierAutoCRUD, + "RenderUiTemplate": TierUnimplemented, + "RetryPipelineExecution": TierUnimplemented, + "Search": TierHandVerified, + "SearchTrainingPlanOfferings": TierUnimplemented, + "SendPipelineExecutionStepFailure": TierUnimplemented, + "SendPipelineExecutionStepSuccess": TierUnimplemented, + "StartEdgeDeploymentStage": TierUnimplemented, + "StartInferenceExperiment": TierUnimplemented, + "StartMlflowTrackingServer": TierUnimplemented, + "StartMonitoringSchedule": TierUnimplemented, + "StartNotebookInstance": TierHandVerified, + "StartPipelineExecution": TierHandVerified, + "StartSession": TierUnimplemented, + "StopAutoMLJob": TierUnimplemented, + "StopCompilationJob": TierUnimplemented, + "StopEdgeDeploymentStage": TierUnimplemented, + "StopEdgePackagingJob": TierUnimplemented, + "StopHyperParameterTuningJob": TierUnimplemented, + "StopInferenceExperiment": TierUnimplemented, + "StopInferenceRecommendationsJob": TierUnimplemented, + "StopLabelingJob": TierUnimplemented, + "StopMlflowTrackingServer": TierUnimplemented, + "StopMonitoringSchedule": TierUnimplemented, + "StopNotebookInstance": TierHandVerified, + "StopOptimizationJob": TierUnimplemented, + "StopPipelineExecution": TierHandVerified, + "StopProcessingJob": TierHandVerified, + "StopTrainingJob": TierHandVerified, + "StopTransformJob": TierHandVerified, + "UpdateAction": TierAutoCRUD, + "UpdateAppImageConfig": TierAutoCRUD, + "UpdateArtifact": TierAutoCRUD, + "UpdateCluster": TierAutoCRUD, + "UpdateClusterSchedulerConfig": TierAutoCRUD, + "UpdateClusterSoftware": TierAutoCRUD, + "UpdateCodeRepository": TierAutoCRUD, + "UpdateComputeQuota": TierAutoCRUD, + "UpdateContext": TierAutoCRUD, + "UpdateDeviceFleet": TierAutoCRUD, + "UpdateDevices": TierAutoCRUD, + "UpdateDomain": TierHandVerified, + "UpdateEndpoint": TierHandVerified, + "UpdateEndpointWeightsAndCapacities": TierAutoCRUD, + "UpdateExperiment": TierHandVerified, + "UpdateFeatureGroup": TierAutoCRUD, + "UpdateFeatureMetadata": TierAutoCRUD, + "UpdateHub": TierAutoCRUD, + "UpdateHubContent": TierAutoCRUD, + "UpdateHubContentReference": TierAutoCRUD, + "UpdateImage": TierAutoCRUD, + "UpdateImageVersion": TierAutoCRUD, + "UpdateInferenceComponent": TierAutoCRUD, + "UpdateInferenceComponentRuntimeConfig": TierAutoCRUD, + "UpdateInferenceExperiment": TierAutoCRUD, + "UpdateMlflowApp": TierAutoCRUD, + "UpdateMlflowTrackingServer": TierAutoCRUD, + "UpdateModelCard": TierAutoCRUD, + "UpdateModelPackage": TierAutoCRUD, + "UpdateMonitoringAlert": TierAutoCRUD, + "UpdateMonitoringSchedule": TierAutoCRUD, + "UpdateNotebookInstance": TierHandVerified, + "UpdateNotebookInstanceLifecycleConfig": TierAutoCRUD, + "UpdatePartnerApp": TierAutoCRUD, + "UpdatePipeline": TierHandVerified, + "UpdatePipelineExecution": TierAutoCRUD, + "UpdatePipelineVersion": TierAutoCRUD, + "UpdateProject": TierAutoCRUD, + "UpdateSpace": TierAutoCRUD, + "UpdateTrainingJob": TierAutoCRUD, + "UpdateTrial": TierHandVerified, + "UpdateTrialComponent": TierAutoCRUD, + "UpdateUserProfile": TierHandVerified, + "UpdateWorkforce": TierAutoCRUD, + "UpdateWorkteam": TierAutoCRUD, + }}, + "scheduler": {ModelBacked: false, Operations: map[string]Tier{ + "BatchCheckMaxRateLimits": TierHandVerified, + "BatchCreateSchedules": TierHandVerified, + "BatchDeleteSchedules": TierHandVerified, + "BatchUpdateSchedules": TierHandVerified, + "CreateSchedule": TierHandVerified, + "CreateScheduleGroup": TierHandVerified, + "DeleteRateLimit": TierHandVerified, + "DeleteSchedule": TierHandVerified, + "DeleteScheduleGroup": TierHandVerified, + "DisableSchedule": TierHandVerified, + "EnableSchedule": TierHandVerified, + "GetRateLimit": TierHandVerified, + "GetSchedule": TierHandVerified, + "GetScheduleAuditLogs": TierHandVerified, + "GetScheduleExecutionStatus": TierHandVerified, + "GetScheduleGroup": TierHandVerified, + "GetScheduleGroupMetrics": TierHandVerified, + "GetScheduleMetrics": TierHandVerified, + "ListConnections": TierHandVerified, + "ListFleetSchedules": TierHandVerified, + "ListRateLimits": TierHandVerified, + "ListScheduleAuditLogs": TierHandVerified, + "ListScheduleExecutions": TierHandVerified, + "ListScheduleGroups": TierHandVerified, + "ListScheduleMetrics": TierHandVerified, + "ListSchedules": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "LockSchedule": TierHandVerified, + "PreviewSchedule": TierHandVerified, + "PutRateLimit": TierHandVerified, + "StopScheduleExecution": TierHandVerified, + "TagResource": TierHandVerified, + "UnlockSchedule": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateSchedule": TierHandVerified, + "UpdateScheduleGroup": TierHandVerified, + "ValidateScheduleExpression": TierHandVerified, + }}, + "secretsmanager": {ModelBacked: true, Operations: map[string]Tier{ + "BatchGetSecretValue": TierHandVerified, + "CancelRotateSecret": TierHandVerified, + "CreateSecret": TierHandVerified, + "DeleteResourcePolicy": TierHandVerified, + "DeleteSecret": TierHandVerified, + "DescribeSecret": TierHandVerified, + "GetRandomPassword": TierHandVerified, + "GetResourcePolicy": TierHandVerified, + "GetSecretValue": TierHandVerified, + "ListSecretVersionIds": TierHandVerified, + "ListSecrets": TierHandVerified, + "PutResourcePolicy": TierHandVerified, + "PutSecretValue": TierHandVerified, + "RemoveRegionsFromReplication": TierHandVerified, + "ReplicateSecretToRegions": TierHandVerified, + "RestoreSecret": TierHandVerified, + "RotateSecret": TierHandVerified, + "StopReplicationToReplica": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateSecret": TierHandVerified, + "UpdateSecretVersionStage": TierHandVerified, + "ValidateResourcePolicy": TierHandVerified, + }}, + "serverlessrepo": {ModelBacked: false, Operations: map[string]Tier{ + "AddApplicationDependency": TierHandVerified, + "CancelCloudFormationChangeSet": TierHandVerified, + "CreateApplication": TierHandVerified, + "CreateApplicationVersion": TierHandVerified, + "CreateCloudFormationChangeSet": TierHandVerified, + "CreateCloudFormationTemplate": TierHandVerified, + "DeleteApplication": TierHandVerified, + "DeleteApplicationPolicy": TierHandVerified, + "DeleteApplicationVersion": TierHandVerified, + "DeleteCloudFormationChangeSet": TierHandVerified, + "ExecuteCloudFormationChangeSet": TierHandVerified, + "GetApplication": TierHandVerified, + "GetApplicationPolicy": TierHandVerified, + "GetApplicationPublishStatus": TierHandVerified, + "GetApplicationShares": TierHandVerified, + "GetApplicationStatistics": TierHandVerified, + "GetApplicationVersion": TierHandVerified, + "GetCloudFormationChangeSet": TierHandVerified, + "GetCloudFormationTemplate": TierHandVerified, + "ListApplicationDependencies": TierHandVerified, + "ListApplicationDeployments": TierHandVerified, + "ListApplicationReviews": TierHandVerified, + "ListApplicationShares": TierHandVerified, + "ListApplicationVersions": TierHandVerified, + "ListApplications": TierHandVerified, + "ListCategories": TierHandVerified, + "ListCloudFormationChangeSets": TierHandVerified, + "ListCloudFormationTemplates": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "PublishApplication": TierHandVerified, + "PutApplicationPolicy": TierHandVerified, + "RemoveApplicationDependency": TierHandVerified, + "SearchApplications": TierHandVerified, + "ShareApplication": TierHandVerified, + "SubmitApplicationReview": TierHandVerified, + "TagResource": TierHandVerified, + "UnpublishApplication": TierHandVerified, + "UnshareApplication": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateApplication": TierHandVerified, + "UpdateApplicationVersion": TierHandVerified, + }}, + "servicediscovery": {ModelBacked: true, Operations: map[string]Tier{ + "CreateHttpNamespace": TierHandVerified, + "CreatePrivateDnsNamespace": TierHandVerified, + "CreatePublicDnsNamespace": TierHandVerified, + "CreateService": TierHandVerified, + "DeleteNamespace": TierHandVerified, + "DeleteService": TierHandVerified, + "DeleteServiceAttributes": TierHandVerified, + "DeregisterInstance": TierHandVerified, + "DiscoverInstances": TierHandVerified, + "DiscoverInstancesRevision": TierHandVerified, + "GetInstance": TierHandVerified, + "GetInstancesHealthStatus": TierHandVerified, + "GetNamespace": TierHandVerified, + "GetOperation": TierHandVerified, + "GetService": TierHandVerified, + "GetServiceAttributes": TierHandVerified, + "ListInstances": TierHandVerified, + "ListNamespaces": TierHandVerified, + "ListOperations": TierHandVerified, + "ListServices": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "RegisterInstance": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateHttpNamespace": TierHandVerified, + "UpdateInstanceCustomHealthStatus": TierHandVerified, + "UpdatePrivateDnsNamespace": TierHandVerified, + "UpdatePublicDnsNamespace": TierHandVerified, + "UpdateService": TierHandVerified, + "UpdateServiceAttributes": TierHandVerified, + }}, + "ses": {ModelBacked: true, Operations: map[string]Tier{ + "CloneReceiptRuleSet": TierHandVerified, + "CreateConfigurationSet": TierHandVerified, + "CreateConfigurationSetEventDestination": TierHandVerified, + "CreateConfigurationSetTrackingOptions": TierHandVerified, + "CreateCustomVerificationEmailTemplate": TierHandVerified, + "CreateReceiptFilter": TierHandVerified, + "CreateReceiptRule": TierHandVerified, + "CreateReceiptRuleSet": TierHandVerified, + "CreateTemplate": TierHandVerified, + "DeleteConfigurationSet": TierHandVerified, + "DeleteConfigurationSetEventDestination": TierHandVerified, + "DeleteConfigurationSetTrackingOptions": TierHandVerified, + "DeleteCustomVerificationEmailTemplate": TierHandVerified, + "DeleteIdentity": TierHandVerified, + "DeleteIdentityPolicy": TierHandVerified, + "DeleteReceiptFilter": TierHandVerified, + "DeleteReceiptRule": TierHandVerified, + "DeleteReceiptRuleSet": TierHandVerified, + "DeleteTemplate": TierHandVerified, + "DeleteVerifiedEmailAddress": TierHandVerified, + "DescribeActiveReceiptRuleSet": TierHandVerified, + "DescribeConfigurationSet": TierHandVerified, + "DescribeReceiptRule": TierHandVerified, + "DescribeReceiptRuleSet": TierHandVerified, + "GetAccountSendingEnabled": TierHandVerified, + "GetCustomVerificationEmailTemplate": TierHandVerified, + "GetIdentityDkimAttributes": TierHandVerified, + "GetIdentityMailFromDomainAttributes": TierHandVerified, + "GetIdentityNotificationAttributes": TierHandVerified, + "GetIdentityPolicies": TierHandVerified, + "GetIdentityVerificationAttributes": TierHandVerified, + "GetSendQuota": TierHandVerified, + "GetSendStatistics": TierHandVerified, + "GetTemplate": TierHandVerified, + "ListConfigurationSets": TierHandVerified, + "ListCustomVerificationEmailTemplates": TierHandVerified, + "ListIdentities": TierHandVerified, + "ListIdentityPolicies": TierHandVerified, + "ListReceiptFilters": TierHandVerified, + "ListReceiptRuleSets": TierHandVerified, + "ListTemplates": TierHandVerified, + "ListVerifiedEmailAddresses": TierHandVerified, + "PutConfigurationSetDeliveryOptions": TierUnimplemented, + "PutIdentityPolicy": TierHandVerified, + "ReorderReceiptRuleSet": TierHandVerified, + "SendBounce": TierHandVerified, + "SendBulkTemplatedEmail": TierHandVerified, + "SendCustomVerificationEmail": TierHandVerified, + "SendEmail": TierHandVerified, + "SendRawEmail": TierHandVerified, + "SendTemplatedEmail": TierHandVerified, + "SetActiveReceiptRuleSet": TierHandVerified, + "SetIdentityDkimEnabled": TierHandVerified, + "SetIdentityFeedbackForwardingEnabled": TierHandVerified, + "SetIdentityHeadersInNotificationsEnabled": TierHandVerified, + "SetIdentityMailFromDomain": TierHandVerified, + "SetIdentityNotificationTopic": TierHandVerified, + "SetReceiptRulePosition": TierHandVerified, + "TestRenderTemplate": TierHandVerified, + "UpdateAccountSendingEnabled": TierHandVerified, + "UpdateConfigurationSetEventDestination": TierHandVerified, + "UpdateConfigurationSetReputationMetricsEnabled": TierUnimplemented, + "UpdateConfigurationSetSendingEnabled": TierUnimplemented, + "UpdateConfigurationSetTrackingOptions": TierHandVerified, + "UpdateCustomVerificationEmailTemplate": TierHandVerified, + "UpdateReceiptRule": TierHandVerified, + "UpdateTemplate": TierHandVerified, + "VerifyDomainDkim": TierHandVerified, + "VerifyDomainIdentity": TierHandVerified, + "VerifyEmailAddress": TierHandVerified, + "VerifyEmailIdentity": TierHandVerified, + }}, + "sesv2": {ModelBacked: true, Operations: map[string]Tier{ + "BatchGetMetricData": TierHandVerified, + "CancelExportJob": TierHandVerified, + "CreateConfigurationSet": TierHandVerified, + "CreateConfigurationSetEventDestination": TierHandVerified, + "CreateContact": TierHandVerified, + "CreateContactList": TierHandVerified, + "CreateCustomVerificationEmailTemplate": TierHandVerified, + "CreateDedicatedIpPool": TierHandVerified, + "CreateDeliverabilityTestReport": TierHandVerified, + "CreateEmailIdentity": TierHandVerified, + "CreateEmailIdentityPolicy": TierHandVerified, + "CreateEmailTemplate": TierHandVerified, + "CreateExportJob": TierHandVerified, + "CreateImportJob": TierHandVerified, + "CreateMultiRegionEndpoint": TierHandVerified, + "CreateTenant": TierHandVerified, + "CreateTenantResourceAssociation": TierHandVerified, + "DeleteConfigurationSet": TierHandVerified, + "DeleteConfigurationSetEventDestination": TierHandVerified, + "DeleteContact": TierHandVerified, + "DeleteContactList": TierHandVerified, + "DeleteCustomVerificationEmailTemplate": TierHandVerified, + "DeleteDedicatedIpPool": TierHandVerified, + "DeleteEmailIdentity": TierHandVerified, + "DeleteEmailIdentityPolicy": TierHandVerified, + "DeleteEmailTemplate": TierHandVerified, + "DeleteMultiRegionEndpoint": TierHandVerified, + "DeleteSuppressedDestination": TierHandVerified, + "DeleteTenant": TierHandVerified, + "DeleteTenantResourceAssociation": TierHandVerified, + "GetAccount": TierHandVerified, + "GetBlacklistReports": TierHandVerified, + "GetConfigurationSet": TierHandVerified, + "GetConfigurationSetEventDestinations": TierHandVerified, + "GetContact": TierHandVerified, + "GetContactList": TierHandVerified, + "GetCustomVerificationEmailTemplate": TierHandVerified, + "GetDedicatedIp": TierHandVerified, + "GetDedicatedIpPool": TierHandVerified, + "GetDedicatedIps": TierHandVerified, + "GetDeliverabilityDashboardOptions": TierHandVerified, + "GetDeliverabilityTestReport": TierHandVerified, + "GetDomainDeliverabilityCampaign": TierHandVerified, + "GetDomainStatisticsReport": TierHandVerified, + "GetEmailAddressInsights": TierHandVerified, + "GetEmailIdentity": TierHandVerified, + "GetEmailIdentityPolicies": TierHandVerified, + "GetEmailTemplate": TierHandVerified, + "GetExportJob": TierHandVerified, + "GetImportJob": TierHandVerified, + "GetMessageInsights": TierHandVerified, + "GetMultiRegionEndpoint": TierHandVerified, + "GetReputationEntity": TierHandVerified, + "GetSuppressedDestination": TierHandVerified, + "GetTenant": TierHandVerified, + "ListConfigurationSets": TierHandVerified, + "ListContactLists": TierHandVerified, + "ListContacts": TierHandVerified, + "ListCustomVerificationEmailTemplates": TierHandVerified, + "ListDedicatedIpPools": TierHandVerified, + "ListDeliverabilityTestReports": TierHandVerified, + "ListDomainDeliverabilityCampaigns": TierHandVerified, + "ListEmailIdentities": TierHandVerified, + "ListEmailTemplates": TierHandVerified, + "ListExportJobs": TierHandVerified, + "ListImportJobs": TierHandVerified, + "ListMultiRegionEndpoints": TierHandVerified, + "ListRecommendations": TierHandVerified, + "ListReputationEntities": TierHandVerified, + "ListResourceTenants": TierHandVerified, + "ListSuppressedDestinations": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListTenantResources": TierHandVerified, + "ListTenants": TierHandVerified, + "PutAccountDedicatedIpWarmupAttributes": TierHandVerified, + "PutAccountDetails": TierHandVerified, + "PutAccountSendingAttributes": TierHandVerified, + "PutAccountSuppressionAttributes": TierHandVerified, + "PutAccountVdmAttributes": TierHandVerified, + "PutConfigurationSetArchivingOptions": TierHandVerified, + "PutConfigurationSetDeliveryOptions": TierHandVerified, + "PutConfigurationSetReputationOptions": TierHandVerified, + "PutConfigurationSetSendingOptions": TierHandVerified, + "PutConfigurationSetSuppressionOptions": TierHandVerified, + "PutConfigurationSetTrackingOptions": TierHandVerified, + "PutConfigurationSetVdmOptions": TierHandVerified, + "PutDedicatedIpInPool": TierHandVerified, + "PutDedicatedIpPoolScalingAttributes": TierHandVerified, + "PutDedicatedIpWarmupAttributes": TierHandVerified, + "PutDeliverabilityDashboardOption": TierHandVerified, + "PutEmailIdentityConfigurationSetAttributes": TierHandVerified, + "PutEmailIdentityDkimAttributes": TierHandVerified, + "PutEmailIdentityDkimSigningAttributes": TierHandVerified, + "PutEmailIdentityFeedbackAttributes": TierHandVerified, + "PutEmailIdentityMailFromAttributes": TierHandVerified, + "PutSuppressedDestination": TierHandVerified, + "SendBulkEmail": TierHandVerified, + "SendCustomVerificationEmail": TierHandVerified, + "SendEmail": TierHandVerified, + "TagResource": TierHandVerified, + "TestRenderEmailTemplate": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateConfigurationSetEventDestination": TierHandVerified, + "UpdateContact": TierHandVerified, + "UpdateContactList": TierHandVerified, + "UpdateCustomVerificationEmailTemplate": TierHandVerified, + "UpdateEmailIdentityPolicy": TierHandVerified, + "UpdateEmailTemplate": TierHandVerified, + "UpdateReputationEntityCustomerManagedStatus": TierHandVerified, + "UpdateReputationEntityPolicy": TierHandVerified, + }}, + "sfn": {ModelBacked: true, Operations: map[string]Tier{ + "CreateActivity": TierHandVerified, + "CreateStateMachine": TierHandVerified, + "CreateStateMachineAlias": TierHandVerified, + "DeleteActivity": TierHandVerified, + "DeleteStateMachine": TierHandVerified, + "DeleteStateMachineAlias": TierHandVerified, + "DeleteStateMachineVersion": TierHandVerified, + "DescribeActivity": TierHandVerified, + "DescribeExecution": TierHandVerified, + "DescribeMapRun": TierHandVerified, + "DescribeStateMachine": TierHandVerified, + "DescribeStateMachineAlias": TierHandVerified, + "DescribeStateMachineForExecution": TierHandVerified, + "GetActivityTask": TierHandVerified, + "GetExecutionHistory": TierHandVerified, + "ListActivities": TierHandVerified, + "ListExecutions": TierHandVerified, + "ListMapRuns": TierHandVerified, + "ListStateMachineAliases": TierHandVerified, + "ListStateMachineVersions": TierHandVerified, + "ListStateMachines": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "PublishStateMachineVersion": TierHandVerified, + "RedriveExecution": TierHandVerified, + "SendTaskFailure": TierHandVerified, + "SendTaskHeartbeat": TierHandVerified, + "SendTaskSuccess": TierHandVerified, + "StartExecution": TierHandVerified, + "StartSyncExecution": TierHandVerified, + "StopExecution": TierHandVerified, + "TagResource": TierHandVerified, + "TestState": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateMapRun": TierHandVerified, + "UpdateStateMachine": TierHandVerified, + "UpdateStateMachineAlias": TierHandVerified, + "ValidateStateMachineDefinition": TierHandVerified, + }}, + "shield": {ModelBacked: true, Operations: map[string]Tier{ + "AssociateDRTLogBucket": TierHandVerified, + "AssociateDRTRole": TierHandVerified, + "AssociateHealthCheck": TierHandVerified, + "AssociateProactiveEngagementDetails": TierHandVerified, + "CreateProtection": TierHandVerified, + "CreateProtectionGroup": TierHandVerified, + "CreateSubscription": TierHandVerified, + "DeleteProtection": TierHandVerified, + "DeleteProtectionGroup": TierHandVerified, + "DeleteSubscription": TierHandVerified, + "DescribeAttack": TierHandVerified, + "DescribeAttackStatistics": TierHandVerified, + "DescribeDRTAccess": TierHandVerified, + "DescribeEmergencyContactSettings": TierHandVerified, + "DescribeProtection": TierHandVerified, + "DescribeProtectionGroup": TierHandVerified, + "DescribeSubscription": TierHandVerified, + "DisableApplicationLayerAutomaticResponse": TierHandVerified, + "DisableProactiveEngagement": TierHandVerified, + "DisassociateDRTLogBucket": TierHandVerified, + "DisassociateDRTRole": TierHandVerified, + "DisassociateHealthCheck": TierHandVerified, + "EnableApplicationLayerAutomaticResponse": TierHandVerified, + "EnableProactiveEngagement": TierHandVerified, + "GetSubscriptionState": TierHandVerified, + "ListAttacks": TierHandVerified, + "ListProtectionGroups": TierHandVerified, + "ListProtections": TierHandVerified, + "ListResourcesInProtectionGroup": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateApplicationLayerAutomaticResponse": TierHandVerified, + "UpdateEmergencyContactSettings": TierHandVerified, + "UpdateProtectionGroup": TierHandVerified, + "UpdateSubscription": TierHandVerified, + }}, + "sns": {ModelBacked: true, Operations: map[string]Tier{ + "AddPermission": TierHandVerified, + "CheckIfPhoneNumberIsOptedOut": TierHandVerified, + "ConfirmSubscription": TierHandVerified, + "CreatePlatformApplication": TierUnimplemented, + "CreatePlatformEndpoint": TierUnimplemented, + "CreateSMSSandboxPhoneNumber": TierUnimplemented, + "CreateTopic": TierHandVerified, + "DeleteEndpoint": TierUnimplemented, + "DeletePlatformApplication": TierUnimplemented, + "DeleteSMSSandboxPhoneNumber": TierUnimplemented, + "DeleteTopic": TierHandVerified, + "GetDataProtectionPolicy": TierHandVerified, + "GetEndpointAttributes": TierUnimplemented, + "GetPlatformApplicationAttributes": TierUnimplemented, + "GetSMSAttributes": TierUnimplemented, + "GetSMSSandboxAccountStatus": TierUnimplemented, + "GetSubscriptionAttributes": TierHandVerified, + "GetTopicAttributes": TierHandVerified, + "ListEndpointsByPlatformApplication": TierUnimplemented, + "ListOriginationNumbers": TierUnimplemented, + "ListPhoneNumbersOptedOut": TierHandVerified, + "ListPlatformApplications": TierUnimplemented, + "ListSMSSandboxPhoneNumbers": TierUnimplemented, + "ListSubscriptions": TierHandVerified, + "ListSubscriptionsByTopic": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListTopics": TierHandVerified, + "OptInPhoneNumber": TierUnimplemented, + "Publish": TierHandVerified, + "PublishBatch": TierUnimplemented, + "PutDataProtectionPolicy": TierHandVerified, + "RemovePermission": TierHandVerified, + "SetEndpointAttributes": TierUnimplemented, + "SetPlatformApplicationAttributes": TierUnimplemented, + "SetSMSAttributes": TierUnimplemented, + "SetSubscriptionAttributes": TierHandVerified, + "SetTopicAttributes": TierHandVerified, + "Subscribe": TierHandVerified, + "TagResource": TierHandVerified, + "Unsubscribe": TierHandVerified, + "UntagResource": TierHandVerified, + "VerifySMSSandboxPhoneNumber": TierUnimplemented, + }}, + "sqs": {ModelBacked: true, Operations: map[string]Tier{ + "AddPermission": TierHandVerified, + "CancelMessageMoveTask": TierHandVerified, + "ChangeMessageVisibility": TierHandVerified, + "ChangeMessageVisibilityBatch": TierHandVerified, + "CreateQueue": TierHandVerified, + "DeleteMessage": TierHandVerified, + "DeleteMessageBatch": TierHandVerified, + "DeleteQueue": TierHandVerified, + "GetQueueAttributes": TierHandVerified, + "GetQueueUrl": TierHandVerified, + "ListDeadLetterSourceQueues": TierHandVerified, + "ListMessageMoveTasks": TierHandVerified, + "ListQueueTags": TierHandVerified, + "ListQueues": TierHandVerified, + "PurgeQueue": TierHandVerified, + "ReceiveMessage": TierHandVerified, + "RemovePermission": TierHandVerified, + "SendMessage": TierHandVerified, + "SendMessageBatch": TierHandVerified, + "SetQueueAttributes": TierHandVerified, + "StartMessageMoveTask": TierHandVerified, + "TagQueue": TierHandVerified, + "UntagQueue": TierHandVerified, + }}, + "ssm": {ModelBacked: true, Operations: map[string]Tier{ + "AddTagsToResource": TierHandVerified, + "AssociateOpsItemRelatedItem": TierUnimplemented, + "CancelCommand": TierUnimplemented, + "CancelMaintenanceWindowExecution": TierUnimplemented, + "CreateActivation": TierAutoCRUD, + "CreateAssociation": TierAutoCRUD, + "CreateAssociationBatch": TierAutoCRUD, + "CreateDocument": TierHandVerified, + "CreateMaintenanceWindow": TierAutoCRUD, + "CreateOpsItem": TierAutoCRUD, + "CreateOpsMetadata": TierAutoCRUD, + "CreatePatchBaseline": TierAutoCRUD, + "CreateResourceDataSync": TierAutoCRUD, + "DeleteActivation": TierAutoCRUD, + "DeleteAssociation": TierAutoCRUD, + "DeleteDocument": TierHandVerified, + "DeleteInventory": TierAutoCRUD, + "DeleteMaintenanceWindow": TierAutoCRUD, + "DeleteOpsItem": TierAutoCRUD, + "DeleteOpsMetadata": TierAutoCRUD, + "DeleteParameter": TierHandVerified, + "DeleteParameters": TierAutoCRUD, + "DeletePatchBaseline": TierAutoCRUD, + "DeleteResourceDataSync": TierAutoCRUD, + "DeleteResourcePolicy": TierAutoCRUD, + "DeregisterManagedInstance": TierAutoCRUD, + "DeregisterPatchBaselineForPatchGroup": TierAutoCRUD, + "DeregisterTargetFromMaintenanceWindow": TierAutoCRUD, + "DeregisterTaskFromMaintenanceWindow": TierAutoCRUD, + "DescribeActivations": TierAutoCRUD, + "DescribeAssociation": TierAutoCRUD, + "DescribeAssociationExecutionTargets": TierAutoCRUD, + "DescribeAssociationExecutions": TierAutoCRUD, + "DescribeAutomationExecutions": TierAutoCRUD, + "DescribeAutomationStepExecutions": TierAutoCRUD, + "DescribeAvailablePatches": TierAutoCRUD, + "DescribeDocument": TierHandVerified, + "DescribeDocumentPermission": TierAutoCRUD, + "DescribeEffectiveInstanceAssociations": TierAutoCRUD, + "DescribeEffectivePatchesForPatchBaseline": TierAutoCRUD, + "DescribeInstanceAssociationsStatus": TierAutoCRUD, + "DescribeInstanceInformation": TierAutoCRUD, + "DescribeInstancePatchStates": TierAutoCRUD, + "DescribeInstancePatchStatesForPatchGroup": TierAutoCRUD, + "DescribeInstancePatches": TierAutoCRUD, + "DescribeInstanceProperties": TierAutoCRUD, + "DescribeInventoryDeletions": TierAutoCRUD, + "DescribeMaintenanceWindowExecutionTaskInvocations": TierAutoCRUD, + "DescribeMaintenanceWindowExecutionTasks": TierAutoCRUD, + "DescribeMaintenanceWindowExecutions": TierAutoCRUD, + "DescribeMaintenanceWindowSchedule": TierAutoCRUD, + "DescribeMaintenanceWindowTargets": TierAutoCRUD, + "DescribeMaintenanceWindowTasks": TierAutoCRUD, + "DescribeMaintenanceWindows": TierAutoCRUD, + "DescribeMaintenanceWindowsForTarget": TierAutoCRUD, + "DescribeOpsItems": TierAutoCRUD, + "DescribeParameters": TierHandVerified, + "DescribePatchBaselines": TierAutoCRUD, + "DescribePatchGroupState": TierAutoCRUD, + "DescribePatchGroups": TierAutoCRUD, + "DescribePatchProperties": TierAutoCRUD, + "DescribeSessions": TierAutoCRUD, + "DisassociateOpsItemRelatedItem": TierUnimplemented, + "GetAccessToken": TierAutoCRUD, + "GetAutomationExecution": TierAutoCRUD, + "GetCalendarState": TierAutoCRUD, + "GetCommandInvocation": TierAutoCRUD, + "GetConnectionStatus": TierAutoCRUD, + "GetDefaultPatchBaseline": TierAutoCRUD, + "GetDeployablePatchSnapshotForInstance": TierAutoCRUD, + "GetDocument": TierHandVerified, + "GetExecutionPreview": TierAutoCRUD, + "GetInventory": TierAutoCRUD, + "GetInventorySchema": TierAutoCRUD, + "GetMaintenanceWindow": TierAutoCRUD, + "GetMaintenanceWindowExecution": TierAutoCRUD, + "GetMaintenanceWindowExecutionTask": TierAutoCRUD, + "GetMaintenanceWindowExecutionTaskInvocation": TierAutoCRUD, + "GetMaintenanceWindowTask": TierAutoCRUD, + "GetOpsItem": TierAutoCRUD, + "GetOpsMetadata": TierAutoCRUD, + "GetOpsSummary": TierAutoCRUD, + "GetParameter": TierHandVerified, + "GetParameterHistory": TierHandVerified, + "GetParameters": TierHandVerified, + "GetParametersByPath": TierHandVerified, + "GetPatchBaseline": TierAutoCRUD, + "GetPatchBaselineForPatchGroup": TierAutoCRUD, + "GetResourcePolicies": TierAutoCRUD, + "GetServiceSetting": TierAutoCRUD, + "LabelParameterVersion": TierHandVerified, + "ListAssociationVersions": TierAutoCRUD, + "ListAssociations": TierAutoCRUD, + "ListCommandInvocations": TierAutoCRUD, + "ListCommands": TierAutoCRUD, + "ListComplianceItems": TierAutoCRUD, + "ListComplianceSummaries": TierAutoCRUD, + "ListDocumentMetadataHistory": TierAutoCRUD, + "ListDocumentVersions": TierAutoCRUD, + "ListDocuments": TierHandVerified, + "ListInventoryEntries": TierAutoCRUD, + "ListNodes": TierAutoCRUD, + "ListNodesSummary": TierAutoCRUD, + "ListOpsItemEvents": TierAutoCRUD, + "ListOpsItemRelatedItems": TierAutoCRUD, + "ListOpsMetadata": TierAutoCRUD, + "ListResourceComplianceSummaries": TierAutoCRUD, + "ListResourceDataSync": TierAutoCRUD, + "ListTagsForResource": TierHandVerified, + "ModifyDocumentPermission": TierAutoCRUD, + "PutComplianceItems": TierAutoCRUD, + "PutInventory": TierAutoCRUD, + "PutParameter": TierHandVerified, + "PutResourcePolicy": TierAutoCRUD, + "RegisterDefaultPatchBaseline": TierAutoCRUD, + "RegisterPatchBaselineForPatchGroup": TierAutoCRUD, + "RegisterTargetWithMaintenanceWindow": TierAutoCRUD, + "RegisterTaskWithMaintenanceWindow": TierAutoCRUD, + "RemoveTagsFromResource": TierHandVerified, + "ResetServiceSetting": TierUnimplemented, + "ResumeSession": TierUnimplemented, + "SendAutomationSignal": TierUnimplemented, + "SendCommand": TierUnimplemented, + "StartAccessRequest": TierUnimplemented, + "StartAssociationsOnce": TierUnimplemented, + "StartAutomationExecution": TierUnimplemented, + "StartChangeRequestExecution": TierUnimplemented, + "StartExecutionPreview": TierUnimplemented, + "StartSession": TierHandVerified, + "StopAutomationExecution": TierUnimplemented, + "TerminateSession": TierHandVerified, + "UnlabelParameterVersion": TierUnimplemented, + "UpdateAssociation": TierAutoCRUD, + "UpdateAssociationStatus": TierAutoCRUD, + "UpdateDocument": TierHandVerified, + "UpdateDocumentDefaultVersion": TierAutoCRUD, + "UpdateDocumentMetadata": TierAutoCRUD, + "UpdateMaintenanceWindow": TierAutoCRUD, + "UpdateMaintenanceWindowTarget": TierAutoCRUD, + "UpdateMaintenanceWindowTask": TierAutoCRUD, + "UpdateManagedInstanceRole": TierAutoCRUD, + "UpdateOpsItem": TierAutoCRUD, + "UpdateOpsMetadata": TierAutoCRUD, + "UpdatePatchBaseline": TierAutoCRUD, + "UpdateResourceDataSync": TierAutoCRUD, + "UpdateServiceSetting": TierAutoCRUD, + }}, + "ssoadmin": {ModelBacked: true, Operations: map[string]Tier{ + "AddRegion": TierHandVerified, + "AttachCustomerManagedPolicyReferenceToPermissionSet": TierHandVerified, + "AttachManagedPolicyToPermissionSet": TierHandVerified, + "CreateAccountAssignment": TierHandVerified, + "CreateApplication": TierHandVerified, + "CreateApplicationAssignment": TierHandVerified, + "CreateInstance": TierHandVerified, + "CreateInstanceAccessControlAttributeConfiguration": TierHandVerified, + "CreatePermissionSet": TierHandVerified, + "CreateTrustedTokenIssuer": TierHandVerified, + "DeleteAccountAssignment": TierHandVerified, + "DeleteApplication": TierHandVerified, + "DeleteApplicationAccessScope": TierAutoCRUD, + "DeleteApplicationAssignment": TierHandVerified, + "DeleteApplicationAuthenticationMethod": TierAutoCRUD, + "DeleteApplicationGrant": TierAutoCRUD, + "DeleteInlinePolicyFromPermissionSet": TierHandVerified, + "DeleteInstance": TierHandVerified, + "DeleteInstanceAccessControlAttributeConfiguration": TierHandVerified, + "DeletePermissionSet": TierHandVerified, + "DeletePermissionsBoundaryFromPermissionSet": TierHandVerified, + "DeleteTrustedTokenIssuer": TierHandVerified, + "DescribeAccountAssignmentCreationStatus": TierHandVerified, + "DescribeAccountAssignmentDeletionStatus": TierHandVerified, + "DescribeApplication": TierHandVerified, + "DescribeApplicationAssignment": TierHandVerified, + "DescribeApplicationProvider": TierHandVerified, + "DescribeInstance": TierHandVerified, + "DescribeInstanceAccessControlAttributeConfiguration": TierHandVerified, + "DescribePermissionSet": TierHandVerified, + "DescribePermissionSetProvisioningStatus": TierHandVerified, + "DescribeRegion": TierHandVerified, + "DescribeTrustedTokenIssuer": TierHandVerified, + "DetachCustomerManagedPolicyReferenceFromPermissionSet": TierHandVerified, + "DetachManagedPolicyFromPermissionSet": TierHandVerified, + "GetApplicationAccessScope": TierAutoCRUD, + "GetApplicationAssignmentConfiguration": TierHandVerified, + "GetApplicationAuthenticationMethod": TierAutoCRUD, + "GetApplicationGrant": TierAutoCRUD, + "GetApplicationSessionConfiguration": TierHandVerified, + "GetInlinePolicyForPermissionSet": TierHandVerified, + "GetPermissionsBoundaryForPermissionSet": TierHandVerified, + "ListAccountAssignmentCreationStatus": TierHandVerified, + "ListAccountAssignmentDeletionStatus": TierHandVerified, + "ListAccountAssignments": TierHandVerified, + "ListAccountAssignmentsForPrincipal": TierHandVerified, + "ListAccountsForProvisionedPermissionSet": TierHandVerified, + "ListApplicationAccessScopes": TierAutoCRUD, + "ListApplicationAssignments": TierHandVerified, + "ListApplicationAssignmentsForPrincipal": TierHandVerified, + "ListApplicationAuthenticationMethods": TierAutoCRUD, + "ListApplicationGrants": TierAutoCRUD, + "ListApplicationProviders": TierHandVerified, + "ListApplications": TierHandVerified, + "ListCustomerManagedPolicyReferencesInPermissionSet": TierHandVerified, + "ListInstances": TierHandVerified, + "ListManagedPoliciesInPermissionSet": TierHandVerified, + "ListPermissionSetProvisioningStatus": TierHandVerified, + "ListPermissionSets": TierHandVerified, + "ListPermissionSetsProvisionedToAccount": TierHandVerified, + "ListRegions": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListTrustedTokenIssuers": TierHandVerified, + "ProvisionPermissionSet": TierHandVerified, + "PutApplicationAccessScope": TierAutoCRUD, + "PutApplicationAssignmentConfiguration": TierHandVerified, + "PutApplicationAuthenticationMethod": TierAutoCRUD, + "PutApplicationGrant": TierAutoCRUD, + "PutApplicationSessionConfiguration": TierHandVerified, + "PutInlinePolicyToPermissionSet": TierHandVerified, + "PutPermissionsBoundaryToPermissionSet": TierHandVerified, + "RemoveRegion": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateApplication": TierHandVerified, + "UpdateInstance": TierHandVerified, + "UpdateInstanceAccessControlAttributeConfiguration": TierHandVerified, + "UpdatePermissionSet": TierHandVerified, + "UpdateTrustedTokenIssuer": TierHandVerified, + }}, + "sts": {ModelBacked: true, Operations: map[string]Tier{ + "AssumeRole": TierHandVerified, + "AssumeRoleWithSAML": TierUnimplemented, + "AssumeRoleWithWebIdentity": TierUnimplemented, + "AssumeRoot": TierUnimplemented, + "DecodeAuthorizationMessage": TierUnimplemented, + "GetAccessKeyInfo": TierHandVerified, + "GetCallerIdentity": TierHandVerified, + "GetDelegatedAccessToken": TierUnimplemented, + "GetFederationToken": TierUnimplemented, + "GetSessionToken": TierHandVerified, + "GetWebIdentityToken": TierUnimplemented, + }}, + "support": {ModelBacked: true, Operations: map[string]Tier{ + "AddAttachmentsToSet": TierHandVerified, + "AddCommunicationToCase": TierHandVerified, + "CreateCase": TierHandVerified, + "DescribeAttachment": TierHandVerified, + "DescribeCases": TierHandVerified, + "DescribeCommunications": TierHandVerified, + "DescribeCreateCaseOptions": TierHandVerified, + "DescribeServices": TierHandVerified, + "DescribeSeverityLevels": TierHandVerified, + "DescribeSupportedLanguages": TierHandVerified, + "DescribeTrustedAdvisorCheckRefreshStatuses": TierHandVerified, + "DescribeTrustedAdvisorCheckResult": TierHandVerified, + "DescribeTrustedAdvisorCheckSummaries": TierHandVerified, + "DescribeTrustedAdvisorChecks": TierHandVerified, + "RefreshTrustedAdvisorCheck": TierHandVerified, + "ResolveCase": TierHandVerified, + }}, + "swf": {ModelBacked: true, Operations: map[string]Tier{ + "CountClosedWorkflowExecutions": TierHandVerified, + "CountOpenWorkflowExecutions": TierHandVerified, + "CountPendingActivityTasks": TierHandVerified, + "CountPendingDecisionTasks": TierHandVerified, + "DeleteActivityType": TierHandVerified, + "DeleteWorkflowType": TierHandVerified, + "DeprecateActivityType": TierHandVerified, + "DeprecateDomain": TierHandVerified, + "DeprecateWorkflowType": TierHandVerified, + "DescribeActivityType": TierHandVerified, + "DescribeDomain": TierHandVerified, + "DescribeWorkflowExecution": TierHandVerified, + "DescribeWorkflowType": TierHandVerified, + "GetWorkflowExecutionHistory": TierHandVerified, + "ListActivityTypes": TierHandVerified, + "ListClosedWorkflowExecutions": TierHandVerified, + "ListDomains": TierHandVerified, + "ListOpenWorkflowExecutions": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListWorkflowTypes": TierHandVerified, + "PollForActivityTask": TierHandVerified, + "PollForDecisionTask": TierHandVerified, + "RecordActivityTaskHeartbeat": TierHandVerified, + "RegisterActivityType": TierHandVerified, + "RegisterDomain": TierHandVerified, + "RegisterWorkflowType": TierHandVerified, + "RequestCancelWorkflowExecution": TierHandVerified, + "RespondActivityTaskCanceled": TierHandVerified, + "RespondActivityTaskCompleted": TierHandVerified, + "RespondActivityTaskFailed": TierHandVerified, + "RespondDecisionTaskCompleted": TierHandVerified, + "SignalWorkflowExecution": TierHandVerified, + "StartWorkflowExecution": TierHandVerified, + "TagResource": TierHandVerified, + "TerminateWorkflowExecution": TierHandVerified, + "UndeprecateActivityType": TierHandVerified, + "UndeprecateDomain": TierHandVerified, + "UndeprecateWorkflowType": TierHandVerified, + "UntagResource": TierHandVerified, + }}, + "textract": {ModelBacked: true, Operations: map[string]Tier{ + "AnalyzeDocument": TierHandVerified, + "AnalyzeExpense": TierHandVerified, + "AnalyzeID": TierHandVerified, + "CreateAdapter": TierHandVerified, + "CreateAdapterVersion": TierHandVerified, + "DeleteAdapter": TierHandVerified, + "DeleteAdapterVersion": TierHandVerified, + "DetectDocumentText": TierHandVerified, + "GetAdapter": TierHandVerified, + "GetAdapterVersion": TierHandVerified, + "GetDocumentAnalysis": TierHandVerified, + "GetDocumentTextDetection": TierHandVerified, + "GetExpenseAnalysis": TierHandVerified, + "GetLendingAnalysis": TierHandVerified, + "GetLendingAnalysisSummary": TierHandVerified, + "ListAdapterVersions": TierHandVerified, + "ListAdapters": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "StartDocumentAnalysis": TierHandVerified, + "StartDocumentTextDetection": TierHandVerified, + "StartExpenseAnalysis": TierHandVerified, + "StartLendingAnalysis": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAdapter": TierHandVerified, + }}, + "timestreamwrite": {ModelBacked: true, Operations: map[string]Tier{ + "CreateBatchLoadTask": TierHandVerified, + "CreateDatabase": TierHandVerified, + "CreateTable": TierHandVerified, + "DeleteDatabase": TierHandVerified, + "DeleteTable": TierHandVerified, + "DescribeBatchLoadTask": TierHandVerified, + "DescribeDatabase": TierHandVerified, + "DescribeEndpoints": TierHandVerified, + "DescribeTable": TierHandVerified, + "ListBatchLoadTasks": TierHandVerified, + "ListDatabases": TierHandVerified, + "ListTables": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ResumeBatchLoadTask": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateDatabase": TierHandVerified, + "UpdateTable": TierHandVerified, + "WriteRecords": TierHandVerified, + }}, + "transcribe": {ModelBacked: true, Operations: map[string]Tier{ + "CreateCallAnalyticsCategory": TierHandVerified, + "CreateLanguageModel": TierHandVerified, + "CreateMedicalVocabulary": TierHandVerified, + "CreateVocabulary": TierHandVerified, + "CreateVocabularyFilter": TierHandVerified, + "DeleteCallAnalyticsCategory": TierHandVerified, + "DeleteCallAnalyticsJob": TierHandVerified, + "DeleteLanguageModel": TierHandVerified, + "DeleteMedicalScribeJob": TierHandVerified, + "DeleteMedicalTranscriptionJob": TierHandVerified, + "DeleteMedicalVocabulary": TierHandVerified, + "DeleteTranscriptionJob": TierHandVerified, + "DeleteVocabulary": TierHandVerified, + "DeleteVocabularyFilter": TierHandVerified, + "DescribeLanguageModel": TierHandVerified, + "GetCallAnalyticsCategory": TierHandVerified, + "GetCallAnalyticsJob": TierHandVerified, + "GetMedicalScribeJob": TierHandVerified, + "GetMedicalTranscriptionJob": TierHandVerified, + "GetMedicalVocabulary": TierHandVerified, + "GetTranscriptionJob": TierHandVerified, + "GetVocabulary": TierHandVerified, + "GetVocabularyFilter": TierHandVerified, + "ListCallAnalyticsCategories": TierHandVerified, + "ListCallAnalyticsJobs": TierHandVerified, + "ListLanguageModels": TierHandVerified, + "ListMedicalScribeJobs": TierHandVerified, + "ListMedicalTranscriptionJobs": TierHandVerified, + "ListMedicalVocabularies": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListTranscriptionJobs": TierHandVerified, + "ListVocabularies": TierHandVerified, + "ListVocabularyFilters": TierHandVerified, + "StartCallAnalyticsJob": TierHandVerified, + "StartMedicalScribeJob": TierHandVerified, + "StartMedicalTranscriptionJob": TierHandVerified, + "StartTranscriptionJob": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateCallAnalyticsCategory": TierHandVerified, + "UpdateMedicalVocabulary": TierHandVerified, + "UpdateVocabulary": TierHandVerified, + "UpdateVocabularyFilter": TierHandVerified, + }}, + "transfer": {ModelBacked: true, Operations: map[string]Tier{ + "CreateAccess": TierHandVerified, + "CreateAgreement": TierAutoCRUD, + "CreateConnector": TierAutoCRUD, + "CreateProfile": TierAutoCRUD, + "CreateServer": TierHandVerified, + "CreateUser": TierHandVerified, + "CreateWebApp": TierAutoCRUD, + "CreateWorkflow": TierAutoCRUD, + "DeleteAccess": TierHandVerified, + "DeleteAgreement": TierAutoCRUD, + "DeleteCertificate": TierAutoCRUD, + "DeleteConnector": TierAutoCRUD, + "DeleteHostKey": TierHandVerified, + "DeleteProfile": TierAutoCRUD, + "DeleteServer": TierHandVerified, + "DeleteSshPublicKey": TierHandVerified, + "DeleteUser": TierHandVerified, + "DeleteWebApp": TierAutoCRUD, + "DeleteWebAppCustomization": TierAutoCRUD, + "DeleteWorkflow": TierAutoCRUD, + "DescribeAccess": TierHandVerified, + "DescribeAgreement": TierAutoCRUD, + "DescribeCertificate": TierAutoCRUD, + "DescribeConnector": TierAutoCRUD, + "DescribeExecution": TierHandVerified, + "DescribeHostKey": TierHandVerified, + "DescribeProfile": TierAutoCRUD, + "DescribeSecurityPolicy": TierHandVerified, + "DescribeServer": TierHandVerified, + "DescribeUser": TierHandVerified, + "DescribeWebApp": TierAutoCRUD, + "DescribeWebAppCustomization": TierAutoCRUD, + "DescribeWorkflow": TierAutoCRUD, + "ImportCertificate": TierUnimplemented, + "ImportHostKey": TierHandVerified, + "ImportSshPublicKey": TierHandVerified, + "ListAccesses": TierHandVerified, + "ListAgreements": TierAutoCRUD, + "ListCertificates": TierAutoCRUD, + "ListConnectors": TierAutoCRUD, + "ListExecutions": TierHandVerified, + "ListFileTransferResults": TierHandVerified, + "ListHostKeys": TierHandVerified, + "ListProfiles": TierAutoCRUD, + "ListSecurityPolicies": TierHandVerified, + "ListServers": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListUsers": TierHandVerified, + "ListWebApps": TierAutoCRUD, + "ListWorkflows": TierAutoCRUD, + "SendWorkflowStepState": TierHandVerified, + "StartDirectoryListing": TierHandVerified, + "StartFileTransfer": TierHandVerified, + "StartRemoteDelete": TierHandVerified, + "StartRemoteMove": TierHandVerified, + "StartServer": TierHandVerified, + "StopServer": TierHandVerified, + "TagResource": TierHandVerified, + "TestConnection": TierHandVerified, + "TestIdentityProvider": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAccess": TierHandVerified, + "UpdateAgreement": TierAutoCRUD, + "UpdateCertificate": TierAutoCRUD, + "UpdateConnector": TierAutoCRUD, + "UpdateHostKey": TierHandVerified, + "UpdateProfile": TierAutoCRUD, + "UpdateServer": TierHandVerified, + "UpdateUser": TierHandVerified, + "UpdateWebApp": TierAutoCRUD, + "UpdateWebAppCustomization": TierAutoCRUD, + }}, + "verifiedpermissions": {ModelBacked: false, Operations: map[string]Tier{ + "BatchEvaluatePermissions": TierHandVerified, + "BatchGetEntityRelationship": TierHandVerified, + "CreateEntityRelationship": TierHandVerified, + "CreateIdentityPool": TierHandVerified, + "CreatePermission": TierHandVerified, + "CreatePermissionGroup": TierHandVerified, + "CreatePolicy": TierHandVerified, + "CreatePolicyTemplate": TierHandVerified, + "CreateSchema": TierHandVerified, + "DeleteEntityRelationship": TierHandVerified, + "DeleteIdentityPool": TierHandVerified, + "DeletePermission": TierHandVerified, + "DeletePermissionGroup": TierHandVerified, + "DeletePolicy": TierHandVerified, + "DeletePolicyTemplate": TierHandVerified, + "DeleteSchema": TierHandVerified, + "GetIdentityPool": TierHandVerified, + "GetPermission": TierHandVerified, + "GetPermissionGroup": TierHandVerified, + "GetPermissionsPolicy": TierHandVerified, + "GetPolicy": TierHandVerified, + "GetPolicyTemplate": TierHandVerified, + "GetSchema": TierHandVerified, + "IsAuthorized": TierHandVerified, + "ListEntityRelationships": TierHandVerified, + "ListIdentityPools": TierHandVerified, + "ListPermissionGroups": TierHandVerified, + "ListPermissions": TierHandVerified, + "ListPolicies": TierHandVerified, + "ListPolicyTemplates": TierHandVerified, + "ListSchemaReaders": TierHandVerified, + "ListSchemaWriters": TierHandVerified, + "PutPermissionsPolicy": TierHandVerified, + "PutPolicy": TierHandVerified, + "PutPolicyTemplate": TierHandVerified, + "PutSchema": TierHandVerified, + }}, + "waf": {ModelBacked: true, Operations: map[string]Tier{ + "CreateByteMatchSet": TierHandVerified, + "CreateGeoMatchSet": TierHandVerified, + "CreateIPSet": TierHandVerified, + "CreateRateBasedRule": TierHandVerified, + "CreateRegexMatchSet": TierHandVerified, + "CreateRegexPatternSet": TierHandVerified, + "CreateRule": TierHandVerified, + "CreateRuleGroup": TierHandVerified, + "CreateSizeConstraintSet": TierHandVerified, + "CreateSqlInjectionMatchSet": TierHandVerified, + "CreateWebACL": TierHandVerified, + "CreateWebACLMigrationStack": TierHandVerified, + "CreateXssMatchSet": TierHandVerified, + "DeleteByteMatchSet": TierHandVerified, + "DeleteGeoMatchSet": TierHandVerified, + "DeleteIPSet": TierHandVerified, + "DeleteLoggingConfiguration": TierHandVerified, + "DeletePermissionPolicy": TierHandVerified, + "DeleteRateBasedRule": TierHandVerified, + "DeleteRegexMatchSet": TierHandVerified, + "DeleteRegexPatternSet": TierHandVerified, + "DeleteRule": TierHandVerified, + "DeleteRuleGroup": TierHandVerified, + "DeleteSizeConstraintSet": TierHandVerified, + "DeleteSqlInjectionMatchSet": TierHandVerified, + "DeleteWebACL": TierHandVerified, + "DeleteXssMatchSet": TierHandVerified, + "GetByteMatchSet": TierHandVerified, + "GetChangeToken": TierHandVerified, + "GetChangeTokenStatus": TierHandVerified, + "GetGeoMatchSet": TierHandVerified, + "GetIPSet": TierHandVerified, + "GetLoggingConfiguration": TierHandVerified, + "GetPermissionPolicy": TierHandVerified, + "GetRateBasedRule": TierHandVerified, + "GetRateBasedRuleManagedKeys": TierHandVerified, + "GetRegexMatchSet": TierHandVerified, + "GetRegexPatternSet": TierHandVerified, + "GetRule": TierHandVerified, + "GetRuleGroup": TierHandVerified, + "GetSampledRequests": TierHandVerified, + "GetSizeConstraintSet": TierHandVerified, + "GetSqlInjectionMatchSet": TierHandVerified, + "GetWebACL": TierHandVerified, + "GetXssMatchSet": TierHandVerified, + "ListActivatedRulesInRuleGroup": TierHandVerified, + "ListByteMatchSets": TierHandVerified, + "ListGeoMatchSets": TierHandVerified, + "ListIPSets": TierHandVerified, + "ListLoggingConfigurations": TierHandVerified, + "ListRateBasedRules": TierHandVerified, + "ListRegexMatchSets": TierHandVerified, + "ListRegexPatternSets": TierHandVerified, + "ListRuleGroups": TierHandVerified, + "ListRules": TierHandVerified, + "ListSizeConstraintSets": TierHandVerified, + "ListSqlInjectionMatchSets": TierHandVerified, + "ListSubscribedRuleGroups": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListWebACLs": TierHandVerified, + "ListXssMatchSets": TierHandVerified, + "PutLoggingConfiguration": TierHandVerified, + "PutPermissionPolicy": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateByteMatchSet": TierHandVerified, + "UpdateGeoMatchSet": TierHandVerified, + "UpdateIPSet": TierHandVerified, + "UpdateRateBasedRule": TierHandVerified, + "UpdateRegexMatchSet": TierHandVerified, + "UpdateRegexPatternSet": TierHandVerified, + "UpdateRule": TierHandVerified, + "UpdateRuleGroup": TierHandVerified, + "UpdateSizeConstraintSet": TierHandVerified, + "UpdateSqlInjectionMatchSet": TierHandVerified, + "UpdateWebACL": TierHandVerified, + "UpdateXssMatchSet": TierHandVerified, + }}, + "wafv2": {ModelBacked: true, Operations: map[string]Tier{ + "AssociateWebACL": TierHandVerified, + "CheckCapacity": TierHandVerified, + "CreateAPIKey": TierHandVerified, + "CreateIPSet": TierHandVerified, + "CreateRegexPatternSet": TierHandVerified, + "CreateRuleGroup": TierHandVerified, + "CreateWebACL": TierHandVerified, + "DeleteAPIKey": TierHandVerified, + "DeleteFirewallManagerRuleGroups": TierHandVerified, + "DeleteIPSet": TierHandVerified, + "DeleteLoggingConfiguration": TierHandVerified, + "DeletePermissionPolicy": TierHandVerified, + "DeleteRegexPatternSet": TierHandVerified, + "DeleteRuleGroup": TierHandVerified, + "DeleteWebACL": TierHandVerified, + "DescribeAllManagedProducts": TierHandVerified, + "DescribeManagedProductsByVendor": TierHandVerified, + "DescribeManagedRuleGroup": TierHandVerified, + "DisassociateWebACL": TierHandVerified, + "GenerateMobileSdkReleaseUrl": TierUnimplemented, + "GetDecryptedAPIKey": TierHandVerified, + "GetIPSet": TierHandVerified, + "GetLoggingConfiguration": TierHandVerified, + "GetManagedRuleSet": TierHandVerified, + "GetMobileSdkRelease": TierAutoCRUD, + "GetPermissionPolicy": TierHandVerified, + "GetRateBasedStatementManagedKeys": TierHandVerified, + "GetRegexPatternSet": TierHandVerified, + "GetRuleGroup": TierHandVerified, + "GetSampledRequests": TierHandVerified, + "GetTopPathStatisticsByTraffic": TierAutoCRUD, + "GetWebACL": TierHandVerified, + "GetWebACLForResource": TierHandVerified, + "ListAPIKeys": TierHandVerified, + "ListAvailableManagedRuleGroupVersions": TierHandVerified, + "ListAvailableManagedRuleGroups": TierHandVerified, + "ListIPSets": TierHandVerified, + "ListLoggingConfigurations": TierHandVerified, + "ListManagedRuleSets": TierHandVerified, + "ListMobileSdkReleases": TierAutoCRUD, + "ListRegexPatternSets": TierHandVerified, + "ListResourcesForWebACL": TierHandVerified, + "ListRuleGroups": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListWebACLs": TierHandVerified, + "PutLoggingConfiguration": TierHandVerified, + "PutManagedRuleSetVersions": TierHandVerified, + "PutPermissionPolicy": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateIPSet": TierHandVerified, + "UpdateManagedRuleSetVersionExpiryDate": TierHandVerified, + "UpdateRegexPatternSet": TierHandVerified, + "UpdateRuleGroup": TierHandVerified, + "UpdateWebACL": TierHandVerified, + }}, + "xray": {ModelBacked: true, Operations: map[string]Tier{ + "BatchGetTraces": TierHandVerified, + "CancelTraceRetrieval": TierUnimplemented, + "CreateGroup": TierHandVerified, + "CreateSamplingRule": TierHandVerified, + "DeleteGroup": TierHandVerified, + "DeleteResourcePolicy": TierHandVerified, + "DeleteSamplingRule": TierHandVerified, + "GetEncryptionConfig": TierHandVerified, + "GetGroup": TierHandVerified, + "GetGroups": TierHandVerified, + "GetIndexingRules": TierUnimplemented, + "GetInsight": TierHandVerified, + "GetInsightEvents": TierHandVerified, + "GetInsightImpactGraph": TierHandVerified, + "GetInsightSummaries": TierHandVerified, + "GetRetrievedTracesGraph": TierUnimplemented, + "GetSamplingRules": TierHandVerified, + "GetSamplingStatisticSummaries": TierHandVerified, + "GetSamplingTargets": TierHandVerified, + "GetServiceGraph": TierHandVerified, + "GetTimeSeriesServiceStatistics": TierHandVerified, + "GetTraceGraph": TierHandVerified, + "GetTraceSegmentDestination": TierUnimplemented, + "GetTraceSummaries": TierHandVerified, + "ListResourcePolicies": TierHandVerified, + "ListRetrievedTraces": TierUnimplemented, + "ListTagsForResource": TierHandVerified, + "PutEncryptionConfig": TierHandVerified, + "PutResourcePolicy": TierHandVerified, + "PutTelemetryRecords": TierHandVerified, + "PutTraceSegments": TierHandVerified, + "StartTraceRetrieval": TierUnimplemented, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateGroup": TierHandVerified, + "UpdateIndexingRule": TierUnimplemented, + "UpdateSamplingRule": TierHandVerified, + "UpdateTraceSegmentDestination": TierUnimplemented, + }}, +} + +// Lookup returns the tier of one operation. The second result is false when the +// service or operation is unknown to DevCloud — which is not the same as +// unimplemented, since an unknown service is not served at all. +func Lookup(service, op string) (Tier, bool) { + svc, ok := Services[service] + if !ok { + return "", false + } + tier, ok := svc.Operations[op] + return tier, ok +} + +// Counts returns the number of operations per tier across every service. +func Counts() map[Tier]int { + counts := make(map[Tier]int, 3) + for _, svc := range Services { + for _, tier := range svc.Operations { + counts[tier]++ + } + } + return counts +} From 36a37b870b8a88233b9496e0ff70c37041da7dc7 Mon Sep 17 00:00:00 2001 From: Sung-Kyu Yoo Date: Sun, 9 Aug 2026 13:02:24 +0900 Subject: [PATCH 3/6] fix(fidelity): stop declaring auto-crud on providers that cannot serve it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit crud.Handle refuses any non-JSON protocol, so a CRUD registration for a provider that answers Query is dead: the runtime returns InvalidAction while the manifest advertised auto-crud. cloudwatch hit this for all 20 of its auto-crud operations — its Smithy model declares JSON, but the provider serves Query, and the provider is what the runtime follows. Scan the protocol each provider declares alongside its dispatch literals (ScanHandVerified becomes ScanProviders), and drop non-JSON services before generating the CRUD registry. The manifest consumes the filtered set, so registry and manifest stay consistent by construction. TestAutoCRUDIsReachable now fails the build if a service ever declares auto-crud operations while serving a protocol the engine refuses — it reproduced this bug before the fix. cloudwatch's 20 operations move auto-crud -> unimplemented, which is what the runtime already did. 53 lines of dead registration removed. sqs is also dropped from the registry with no tier change: all of its operations are hand-verified. --- cmd/codegen/main.go | 43 ++++++++--- cmd/devcloud/fidelity_test.go | 28 ++++++++ internal/codegen/scan_handverified.go | 72 +++++++++++++++---- internal/codegen/scan_handverified_test.go | 45 +++++++++--- .../generated/crudregistry/registry_gen.go | 53 -------------- internal/generated/fidelity/manifest_gen.go | 40 +++++------ 6 files changed, 178 insertions(+), 103 deletions(-) diff --git a/cmd/codegen/main.go b/cmd/codegen/main.go index 62c44c6..9312f95 100644 --- a/cmd/codegen/main.go +++ b/cmd/codegen/main.go @@ -97,6 +97,13 @@ func main() { // Write the aggregate CRUD registry only when generating the full fleet // (a filtered run would otherwise clobber it with a partial registry). if len(allowedServices) == 0 { + providers, err := codegen.ScanProviders(*servicesDir, modelOps) + if err != nil { + fmt.Fprintf(os.Stderr, "Error scanning providers: %v\n", err) + os.Exit(1) + } + + crudServices = servableCRUD(crudServices, providers) sort.Slice(crudServices, func(i, j int) bool { return crudServices[i].ServiceID < crudServices[j].ServiceID }) @@ -115,7 +122,7 @@ func main() { os.Exit(1) } - if err := writeFidelityManifest(gen, *outputDir, *servicesDir, modelOps, crudServices); err != nil { + if err := writeFidelityManifest(gen, *outputDir, modelOps, providers, crudServices); err != nil { fmt.Fprintf(os.Stderr, "Error writing fidelity manifest: %v\n", err) os.Exit(1) } @@ -124,18 +131,38 @@ func main() { fmt.Println("Code generation complete.") } -// writeFidelityManifest scans the hand-written providers and emits the -// per-operation fidelity manifest. Like the CRUD registry it is only written on -// a full-fleet run, since a filtered run would produce a partial manifest. +// servableCRUD drops services whose provider serves a non-JSON protocol. The +// CRUD engine bails out on anything else (crud.Handle → JSONProtocol), so +// registering them produces operations the runtime answers with InvalidAction — +// a registration that reads as coverage while serving none. The Smithy model can +// declare JSON while the provider still answers Query (cloudwatch does), so the +// provider is the authority here. +func servableCRUD(services []codegen.CRUDServiceData, providers map[string]codegen.ProviderScan) []codegen.CRUDServiceData { + kept := make([]codegen.CRUDServiceData, 0, len(services)) + for _, svc := range services { + if !codegen.JSONProtocol(providers[svc.ServiceID].Protocol) { + fmt.Printf("Skipping CRUD registration for %s: provider serves %q, not JSON\n", + svc.ServiceID, providers[svc.ServiceID].Protocol) + continue + } + kept = append(kept, svc) + } + return kept +} + +// writeFidelityManifest emits the per-operation fidelity manifest. Like the CRUD +// registry it is only written on a full-fleet run, since a filtered run would +// produce a partial manifest. func writeFidelityManifest( gen *codegen.Generator, - outputDir, servicesDir string, + outputDir string, modelOps map[string][]string, + providers map[string]codegen.ProviderScan, crudServices []codegen.CRUDServiceData, ) error { - handVerified, err := codegen.ScanHandVerified(servicesDir, modelOps) - if err != nil { - return err + handVerified := make(map[string][]string, len(providers)) + for id, scan := range providers { + handVerified[id] = scan.Operations } content, err := gen.GenerateFidelityManifest( diff --git a/cmd/devcloud/fidelity_test.go b/cmd/devcloud/fidelity_test.go index f90c229..791f40d 100644 --- a/cmd/devcloud/fidelity_test.go +++ b/cmd/devcloud/fidelity_test.go @@ -91,6 +91,34 @@ func TestFidelityManifestCoversCRUDRegistry(t *testing.T) { } } +// TestAutoCRUDIsReachable guards against the manifest promising a tier the +// runtime cannot deliver. The CRUD engine refuses any non-JSON protocol +// (crud.Handle → JSONProtocol), so an operation declared auto-crud on a +// Query or REST provider would in fact return InvalidAction. +func TestAutoCRUDIsReachable(t *testing.T) { + for id, svc := range fidelity.Services { + autoCRUD := 0 + for _, tier := range svc.Operations { + if tier == fidelity.TierAutoCRUD { + autoCRUD++ + } + } + if autoCRUD == 0 { + continue + } + + p, ok := plugin.DefaultRegistry.Construct(id) + if !ok { + t.Errorf("%s: declares %d auto-crud operations but is not registered", id, autoCRUD) + continue + } + if !crud.JSONProtocol(string(p.Protocol())) { + t.Errorf("%s: declares %d auto-crud operations but serves %q; the CRUD engine only answers JSON protocols, so those operations really return InvalidAction", + id, autoCRUD, p.Protocol()) + } + } +} + // TestFidelityLookup pins the accessor's contract: an unknown service and an // unknown operation are both misses, not a zero-value tier. func TestFidelityLookup(t *testing.T) { diff --git a/internal/codegen/scan_handverified.go b/internal/codegen/scan_handverified.go index 93d7a8f..af7ed0b 100644 --- a/internal/codegen/scan_handverified.go +++ b/internal/codegen/scan_handverified.go @@ -65,9 +65,20 @@ var pathRoutedOps = map[string][]string{ }, } -// ScanHandVerified returns, per registered service ID, the operation names that -// service's provider handles by hand. The scan collects the string literals of -// every case clause in a service package, then keeps only those that name an +// ProviderScan is what a service's source tells us about how it serves requests. +type ProviderScan struct { + // Operations are the operation names the provider dispatches by hand. + Operations []string + // Protocol is the wire protocol the provider declares at runtime, as the + // suffix of the plugin.ProtocolX constant it returns (e.g. "JSON11", + // "Query"). It can differ from the Smithy model's protocol, and the runtime + // follows the provider — the CRUD engine, for one, refuses anything but JSON. + Protocol string +} + +// ScanProviders returns, per registered service ID, what its provider dispatches +// by hand and which protocol it declares. The scan collects the string literals +// of every case clause in a service package, then keeps only those that name an // operation in modelOps[serviceID]; a service with no model keeps every literal // that looks like an operation name. // @@ -75,29 +86,39 @@ var pathRoutedOps = map[string][]string{ // switches (protocol constants, expression tokens) contribute strings that no // model declares, and a directory registering two services (iam also registers // sts) splits correctly because each model claims only its own operations. -func ScanHandVerified(servicesDir string, modelOps map[string][]string) (map[string][]string, error) { +func ScanProviders(servicesDir string, modelOps map[string][]string) (map[string]ProviderScan, error) { entries, err := os.ReadDir(servicesDir) if err != nil { return nil, fmt.Errorf("read services dir: %w", err) } - result := make(map[string][]string) + result := make(map[string]ProviderScan) for _, entry := range entries { if !entry.IsDir() { continue } dir := filepath.Join(servicesDir, entry.Name()) - ids, literals, err := scanServiceDir(dir) + ids, literals, protocol, err := scanServiceDir(dir) if err != nil { return nil, err } for _, id := range ids { - result[id] = selectOps(id, literals, modelOps[id]) + result[id] = ProviderScan{ + Operations: selectOps(id, literals, modelOps[id]), + Protocol: protocol, + } } } return result, nil } +// JSONProtocol reports whether a scanned provider protocol is one the CRUD +// engine can serve. Mirrors crud.JSONProtocol, but over the constant name the +// provider returns rather than the wire string. +func JSONProtocol(scanned string) bool { + return strings.HasPrefix(scanned, "JSON") +} + // selectOps narrows a package's case literals to the operations of one service. func selectOps(serviceID string, literals map[string]bool, modelOperations []string) []string { if declared, ok := pathRoutedOps[serviceID]; ok { @@ -120,12 +141,13 @@ func selectOps(serviceID string, literals map[string]bool, modelOperations []str return ops } -// scanServiceDir returns the service IDs a package registers and every -// operation-shaped string literal used as a switch case in it. -func scanServiceDir(dir string) (ids []string, literals map[string]bool, err error) { +// scanServiceDir returns the service IDs a package registers, every +// operation-shaped string literal used as a switch case in it, and the +// plugin.ProtocolX constant its provider returns. +func scanServiceDir(dir string) (ids []string, literals map[string]bool, protocol string, err error) { entries, err := os.ReadDir(dir) if err != nil { - return nil, nil, fmt.Errorf("read %s: %w", dir, err) + return nil, nil, "", fmt.Errorf("read %s: %w", dir, err) } fset := token.NewFileSet() @@ -139,7 +161,7 @@ func scanServiceDir(dir string) (ids []string, literals map[string]bool, err err } file, err := parser.ParseFile(fset, filepath.Join(dir, name), nil, 0) if err != nil { - return nil, nil, fmt.Errorf("parse %s: %w", filepath.Join(dir, name), err) + return nil, nil, "", fmt.Errorf("parse %s: %w", filepath.Join(dir, name), err) } ast.Inspect(file, func(n ast.Node) bool { @@ -149,6 +171,10 @@ func scanServiceDir(dir string) (ids []string, literals map[string]bool, err err seenID[id] = true ids = append(ids, id) } + case *ast.FuncDecl: + if p, ok := declaredProtocol(node); ok && protocol == "" { + protocol = p + } case *ast.CaseClause: for _, expr := range node.List { if lit, ok := stringLiteral(expr); ok && opNamePattern.MatchString(lit) { @@ -160,7 +186,27 @@ func scanServiceDir(dir string) (ids []string, literals map[string]bool, err err }) } sort.Strings(ids) - return ids, literals, nil + return ids, literals, protocol, nil +} + +// declaredProtocol extracts "JSON11" from a provider's +// `func (p *Provider) Protocol() plugin.ProtocolType { return plugin.ProtocolJSON11 }`. +func declaredProtocol(fn *ast.FuncDecl) (string, bool) { + if fn.Name.Name != "Protocol" || fn.Recv == nil || fn.Body == nil { + return "", false + } + for _, stmt := range fn.Body.List { + ret, ok := stmt.(*ast.ReturnStmt) + if !ok || len(ret.Results) != 1 { + continue + } + sel, ok := ret.Results[0].(*ast.SelectorExpr) + if !ok || !strings.HasPrefix(sel.Sel.Name, "Protocol") { + continue + } + return strings.TrimPrefix(sel.Sel.Name, "Protocol"), true + } + return "", false } // registeredServiceID extracts "sqs" from plugin.DefaultRegistry.Register("sqs", …). diff --git a/internal/codegen/scan_handverified_test.go b/internal/codegen/scan_handverified_test.go index f168a01..21913d6 100644 --- a/internal/codegen/scan_handverified_test.go +++ b/internal/codegen/scan_handverified_test.go @@ -40,9 +40,13 @@ func modelOperationsForTest(t *testing.T) map[string][]string { return ops } -func TestScanHandVerified(t *testing.T) { - got, err := ScanHandVerified("../services", modelOperationsForTest(t)) +func TestScanProviders(t *testing.T) { + scans, err := ScanProviders("../services", modelOperationsForTest(t)) require.NoError(t, err) + got := make(map[string][]string, len(scans)) + for id, scan := range scans { + got[id] = scan.Operations + } // Every registered service resolves; the count tracks internal/services. assert.GreaterOrEqual(t, len(got), 100, "expected the full service fleet") @@ -68,7 +72,7 @@ func TestScanHandVerified(t *testing.T) { } } -func TestScanHandVerifiedIgnoresNonOperationLiterals(t *testing.T) { +func TestScanProvidersIgnoresNonOperationLiterals(t *testing.T) { dir := t.TempDir() pkg := filepath.Join(dir, "demo") require.NoError(t, os.MkdirAll(pkg, 0o755)) @@ -93,9 +97,9 @@ func (p *Provider) HandleRequest(op string) string { ` require.NoError(t, os.WriteFile(filepath.Join(pkg, "provider.go"), []byte(src), 0o600)) - got, err := ScanHandVerified(dir, map[string][]string{"demo": {"GetWidget", "ListWidgets"}}) + got, err := ScanProviders(dir, map[string][]string{"demo": {"GetWidget", "ListWidgets"}}) require.NoError(t, err) - assert.Equal(t, []string{"GetWidget", "ListWidgets"}, got["demo"], + assert.Equal(t, []string{"GetWidget", "ListWidgets"}, got["demo"].Operations, "literals the model does not declare must be dropped") } @@ -120,15 +124,38 @@ func TestPathRoutedOverridesAreReal(t *testing.T) { } } -// TestScanHandVerifiedIsDeterministic keeps generated output stable across runs. -func TestScanHandVerifiedIsDeterministic(t *testing.T) { +// TestScanProvidersIsDeterministic keeps generated output stable across runs. +func TestScanProvidersIsDeterministic(t *testing.T) { models := modelOperationsForTest(t) - first, err := ScanHandVerified("../services", models) + first, err := ScanProviders("../services", models) require.NoError(t, err) - second, err := ScanHandVerified("../services", models) + second, err := ScanProviders("../services", models) require.NoError(t, err) a, _ := json.Marshal(first) b, _ := json.Marshal(second) assert.JSONEq(t, string(a), string(b)) } + +// TestScanProvidersReadsProtocol pins the other half of the scan: the manifest +// must know the protocol a provider actually serves, which can differ from the +// Smithy model's. cloudwatch is the case that matters — its model declares JSON +// while the provider answers Query, and the CRUD engine serves only JSON. +func TestScanProvidersReadsProtocol(t *testing.T) { + scans, err := ScanProviders("../services", modelOperationsForTest(t)) + require.NoError(t, err) + + assert.Equal(t, "Query", scans["cloudwatch"].Protocol) + assert.Equal(t, "Query", scans["sqs"].Protocol) + assert.Equal(t, "JSON11", scans["kms"].Protocol) + assert.Equal(t, "JSON10", scans["dynamodb"].Protocol) + assert.Equal(t, "RESTXML", scans["s3"].Protocol) + + assert.False(t, JSONProtocol("Query")) + assert.False(t, JSONProtocol("RESTJSON"), "rest-json carries no X-Amz-Target, so the engine cannot serve it") + assert.True(t, JSONProtocol("JSON11")) + + for id, scan := range scans { + assert.NotEmpty(t, scan.Protocol, "%s: provider declares no protocol", id) + } +} diff --git a/internal/generated/crudregistry/registry_gen.go b/internal/generated/crudregistry/registry_gen.go index a1d13e8..b30aeb1 100644 --- a/internal/generated/crudregistry/registry_gen.go +++ b/internal/generated/crudregistry/registry_gen.go @@ -164,45 +164,6 @@ func init() { "UpdateEventDataStore": {Verb: "Update", Resource: "EventDataStore", OutputListKey: "AdvancedEventSelectors", OutputItemKey: ""}, "UpdateTrail": {Verb: "Update", Resource: "Trail", OutputListKey: "", OutputItemKey: ""}, }) - crud.Register("cloudwatch", map[string]crud.OpMeta{ - "DeleteAlarmMuteRule": {Verb: "Delete", Resource: "AlarmMuteRule", OutputListKey: "", OutputItemKey: ""}, - "DeleteAlarms": {Verb: "Delete", Resource: "Alarm", OutputListKey: "", OutputItemKey: ""}, - "DeleteAnomalyDetector": {Verb: "Delete", Resource: "AnomalyDetector", OutputListKey: "", OutputItemKey: ""}, - "DeleteDashboards": {Verb: "Delete", Resource: "Dashboard", OutputListKey: "", OutputItemKey: ""}, - "DeleteInsightRules": {Verb: "Delete", Resource: "InsightRule", OutputListKey: "Failures", OutputItemKey: ""}, - "DeleteMetricStream": {Verb: "Delete", Resource: "MetricStream", OutputListKey: "", OutputItemKey: ""}, - "DescribeAlarmContributors": {Verb: "Get", Resource: "AlarmContributor", OutputListKey: "AlarmContributors", OutputItemKey: ""}, - "DescribeAlarmHistory": {Verb: "Get", Resource: "AlarmHistory", OutputListKey: "AlarmHistoryItems", OutputItemKey: ""}, - "DescribeAlarms": {Verb: "Get", Resource: "Alarm", OutputListKey: "CompositeAlarms", OutputItemKey: ""}, - "DescribeAlarmsForMetric": {Verb: "Get", Resource: "AlarmsForMetric", OutputListKey: "MetricAlarms", OutputItemKey: ""}, - "DescribeAnomalyDetectors": {Verb: "Get", Resource: "AnomalyDetector", OutputListKey: "AnomalyDetectors", OutputItemKey: ""}, - "DescribeInsightRules": {Verb: "Get", Resource: "InsightRule", OutputListKey: "InsightRules", OutputItemKey: ""}, - "GetAlarmMuteRule": {Verb: "Get", Resource: "AlarmMuteRule", OutputListKey: "", OutputItemKey: "MuteTargets"}, - "GetDashboard": {Verb: "Get", Resource: "Dashboard", OutputListKey: "", OutputItemKey: ""}, - "GetInsightRuleReport": {Verb: "Get", Resource: "InsightRuleReport", OutputListKey: "Contributors", OutputItemKey: ""}, - "GetMetricData": {Verb: "Get", Resource: "MetricData", OutputListKey: "Messages", OutputItemKey: ""}, - "GetMetricStatistics": {Verb: "Get", Resource: "MetricStatistic", OutputListKey: "Datapoints", OutputItemKey: ""}, - "GetMetricStream": {Verb: "Get", Resource: "MetricStream", OutputListKey: "ExcludeFilters", OutputItemKey: ""}, - "GetMetricWidgetImage": {Verb: "Get", Resource: "MetricWidgetImage", OutputListKey: "", OutputItemKey: ""}, - "GetOTelEnrichment": {Verb: "Get", Resource: "OTelEnrichment", OutputListKey: "", OutputItemKey: ""}, - "ListAlarmMuteRules": {Verb: "List", Resource: "AlarmMuteRule", OutputListKey: "AlarmMuteRuleSummaries", OutputItemKey: ""}, - "ListDashboards": {Verb: "List", Resource: "Dashboard", OutputListKey: "DashboardEntries", OutputItemKey: ""}, - "ListManagedInsightRules": {Verb: "List", Resource: "ManagedInsightRule", OutputListKey: "ManagedRules", OutputItemKey: ""}, - "ListMetricStreams": {Verb: "List", Resource: "MetricStream", OutputListKey: "Entries", OutputItemKey: ""}, - "ListMetrics": {Verb: "List", Resource: "Metric", OutputListKey: "Metrics", OutputItemKey: ""}, - "ListTagsForResource": {Verb: "List", Resource: "TagsForResource", OutputListKey: "Tags", OutputItemKey: ""}, - "PutAlarmMuteRule": {Verb: "Update", Resource: "AlarmMuteRule", OutputListKey: "", OutputItemKey: ""}, - "PutAnomalyDetector": {Verb: "Update", Resource: "AnomalyDetector", OutputListKey: "", OutputItemKey: ""}, - "PutCompositeAlarm": {Verb: "Update", Resource: "CompositeAlarm", OutputListKey: "", OutputItemKey: ""}, - "PutDashboard": {Verb: "Update", Resource: "Dashboard", OutputListKey: "DashboardValidationMessages", OutputItemKey: ""}, - "PutInsightRule": {Verb: "Update", Resource: "InsightRule", OutputListKey: "", OutputItemKey: ""}, - "PutManagedInsightRules": {Verb: "Update", Resource: "ManagedInsightRule", OutputListKey: "Failures", OutputItemKey: ""}, - "PutMetricAlarm": {Verb: "Update", Resource: "MetricAlarm", OutputListKey: "", OutputItemKey: ""}, - "PutMetricData": {Verb: "Update", Resource: "MetricData", OutputListKey: "", OutputItemKey: ""}, - "PutMetricStream": {Verb: "Update", Resource: "MetricStream", OutputListKey: "", OutputItemKey: ""}, - "TagResource": {Verb: "Tag", Resource: "Resource", OutputListKey: "", OutputItemKey: ""}, - "UntagResource": {Verb: "Untag", Resource: "Resource", OutputListKey: "", OutputItemKey: ""}, - }) crud.Register("cloudwatchlogs", map[string]crud.OpMeta{ "CreateDelivery": {Verb: "Create", Resource: "Delivery", OutputListKey: "", OutputItemKey: "delivery"}, "CreateExportTask": {Verb: "Create", Resource: "ExportTask", OutputListKey: "", OutputItemKey: ""}, @@ -1908,20 +1869,6 @@ func init() { "UpdateProtectionGroup": {Verb: "Update", Resource: "ProtectionGroup", OutputListKey: "", OutputItemKey: ""}, "UpdateSubscription": {Verb: "Update", Resource: "Subscription", OutputListKey: "", OutputItemKey: ""}, }) - crud.Register("sqs", map[string]crud.OpMeta{ - "CreateQueue": {Verb: "Create", Resource: "Queue", OutputListKey: "", OutputItemKey: ""}, - "DeleteMessage": {Verb: "Delete", Resource: "Message", OutputListKey: "", OutputItemKey: ""}, - "DeleteMessageBatch": {Verb: "Delete", Resource: "MessageBatch", OutputListKey: "Failed", OutputItemKey: ""}, - "DeleteQueue": {Verb: "Delete", Resource: "Queue", OutputListKey: "", OutputItemKey: ""}, - "GetQueueAttributes": {Verb: "Get", Resource: "QueueAttribute", OutputListKey: "", OutputItemKey: ""}, - "GetQueueUrl": {Verb: "Get", Resource: "QueueUrl", OutputListKey: "", OutputItemKey: ""}, - "ListDeadLetterSourceQueues": {Verb: "List", Resource: "DeadLetterSourceQueue", OutputListKey: "queueUrls", OutputItemKey: ""}, - "ListMessageMoveTasks": {Verb: "List", Resource: "MessageMoveTask", OutputListKey: "Results", OutputItemKey: ""}, - "ListQueueTags": {Verb: "List", Resource: "QueueTag", OutputListKey: "", OutputItemKey: ""}, - "ListQueues": {Verb: "List", Resource: "Queue", OutputListKey: "QueueUrls", OutputItemKey: ""}, - "TagQueue": {Verb: "Tag", Resource: "Queue", OutputListKey: "", OutputItemKey: ""}, - "UntagQueue": {Verb: "Untag", Resource: "Queue", OutputListKey: "", OutputItemKey: ""}, - }) crud.Register("ssm", map[string]crud.OpMeta{ "CreateActivation": {Verb: "Create", Resource: "Activation", OutputListKey: "", OutputItemKey: ""}, "CreateAssociation": {Verb: "Create", Resource: "Association", OutputListKey: "", OutputItemKey: "AssociationDescription"}, diff --git a/internal/generated/fidelity/manifest_gen.go b/internal/generated/fidelity/manifest_gen.go index 0b8cfc7..b3b44c3 100644 --- a/internal/generated/fidelity/manifest_gen.go +++ b/internal/generated/fidelity/manifest_gen.go @@ -1159,52 +1159,52 @@ var Services = map[string]Service{ "UpdateTrail": TierHandVerified, }}, "cloudwatch": {ModelBacked: true, Operations: map[string]Tier{ - "DeleteAlarmMuteRule": TierAutoCRUD, + "DeleteAlarmMuteRule": TierUnimplemented, "DeleteAlarms": TierHandVerified, "DeleteAnomalyDetector": TierHandVerified, "DeleteDashboards": TierHandVerified, - "DeleteInsightRules": TierAutoCRUD, - "DeleteMetricStream": TierAutoCRUD, - "DescribeAlarmContributors": TierAutoCRUD, + "DeleteInsightRules": TierUnimplemented, + "DeleteMetricStream": TierUnimplemented, + "DescribeAlarmContributors": TierUnimplemented, "DescribeAlarmHistory": TierHandVerified, "DescribeAlarms": TierHandVerified, "DescribeAlarmsForMetric": TierHandVerified, "DescribeAnomalyDetectors": TierHandVerified, - "DescribeInsightRules": TierAutoCRUD, + "DescribeInsightRules": TierUnimplemented, "DisableAlarmActions": TierHandVerified, "DisableInsightRules": TierUnimplemented, "EnableAlarmActions": TierHandVerified, "EnableInsightRules": TierUnimplemented, - "GetAlarmMuteRule": TierAutoCRUD, + "GetAlarmMuteRule": TierUnimplemented, "GetDashboard": TierHandVerified, - "GetInsightRuleReport": TierAutoCRUD, + "GetInsightRuleReport": TierUnimplemented, "GetMetricData": TierHandVerified, "GetMetricStatistics": TierHandVerified, - "GetMetricStream": TierAutoCRUD, - "GetMetricWidgetImage": TierAutoCRUD, - "GetOTelEnrichment": TierAutoCRUD, - "ListAlarmMuteRules": TierAutoCRUD, + "GetMetricStream": TierUnimplemented, + "GetMetricWidgetImage": TierUnimplemented, + "GetOTelEnrichment": TierUnimplemented, + "ListAlarmMuteRules": TierUnimplemented, "ListDashboards": TierHandVerified, - "ListManagedInsightRules": TierAutoCRUD, - "ListMetricStreams": TierAutoCRUD, + "ListManagedInsightRules": TierUnimplemented, + "ListMetricStreams": TierUnimplemented, "ListMetrics": TierHandVerified, - "ListTagsForResource": TierAutoCRUD, - "PutAlarmMuteRule": TierAutoCRUD, + "ListTagsForResource": TierUnimplemented, + "PutAlarmMuteRule": TierUnimplemented, "PutAnomalyDetector": TierHandVerified, "PutCompositeAlarm": TierHandVerified, "PutDashboard": TierHandVerified, - "PutInsightRule": TierAutoCRUD, - "PutManagedInsightRules": TierAutoCRUD, + "PutInsightRule": TierUnimplemented, + "PutManagedInsightRules": TierUnimplemented, "PutMetricAlarm": TierHandVerified, "PutMetricData": TierHandVerified, - "PutMetricStream": TierAutoCRUD, + "PutMetricStream": TierUnimplemented, "SetAlarmState": TierHandVerified, "StartMetricStreams": TierUnimplemented, "StartOTelEnrichment": TierUnimplemented, "StopMetricStreams": TierUnimplemented, "StopOTelEnrichment": TierUnimplemented, - "TagResource": TierAutoCRUD, - "UntagResource": TierAutoCRUD, + "TagResource": TierUnimplemented, + "UntagResource": TierUnimplemented, }}, "cloudwatchlogs": {ModelBacked: true, Operations: map[string]Tier{ "AssociateKmsKey": TierUnimplemented, From b0c6d4af1b5caa576fc3ce91498bccbf79a87293 Mon Sep 17 00:00:00 2001 From: Sung-Kyu Yoo Date: Sun, 9 Aug 2026 13:09:43 +0900 Subject: [PATCH 4/6] feat(tags): persist tags for KMS, CloudWatch and EventBridge MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 64 services already implement TagResource/UntagResource/ListTagsForResource on the shared TagStore. These three were the stragglers: their tag calls fell through to the generic CRUD engine, which echoes input rather than storing it, so tag -> list did not round-trip. CloudWatch was worse still — it serves Query, which the engine refuses outright, so its tag calls returned InvalidAction. Wire all three onto shared.TagStore. KMS keys tags by the resolved key ARN, so tagging by id, ARN or alias and listing by any of them addresses the same resource. CloudWatch parses the Query form encoding and answers in XML through the existing cwResp helper. Each service gains a boto3 round-trip test (tag -> list -> untag -> list) plus a per-resource isolation test; KMS also rejects tagging an unknown key with NotFoundException. 9 operations move to hand-verified. The manifest picks that up on regeneration with no manual bookkeeping. Also documents the promotion policy: operations move up on request with a use case, not by guesswork. The remaining auto-crud surface is overwhelmingly operational (DynamoDB backups and global tables, KMS custom key stores, CloudWatch Insight Rules, ECR pull-through cache), which no local inner loop calls — while S3, SQS, Lambda, IAM and STS already carry zero auto-crud operations. --- changes/unreleased/Added-20260809-140000.yaml | 5 + changes/unreleased/Fixed-20260809-140100.yaml | 5 + docs/fidelity-manifest.md | 35 ++++++- docs/services-matrix.md | 4 +- internal/generated/fidelity/manifest_gen.go | 18 ++-- internal/services/cloudwatch/provider.go | 73 +++++++++++++++ internal/services/cloudwatch/store.go | 7 +- internal/services/eventbridge/provider.go | 75 +++++++++++++++ internal/services/eventbridge/store.go | 7 +- internal/services/kms/provider.go | 92 +++++++++++++++++++ internal/services/kms/store.go | 8 +- tests/compatibility/test_cloudwatch.py | 29 ++++++ tests/compatibility/test_eventbridge.py | 32 +++++++ tests/compatibility/test_kms.py | 49 ++++++++++ 14 files changed, 417 insertions(+), 22 deletions(-) create mode 100644 changes/unreleased/Added-20260809-140000.yaml create mode 100644 changes/unreleased/Fixed-20260809-140100.yaml diff --git a/changes/unreleased/Added-20260809-140000.yaml b/changes/unreleased/Added-20260809-140000.yaml new file mode 100644 index 0000000..50620c6 --- /dev/null +++ b/changes/unreleased/Added-20260809-140000.yaml @@ -0,0 +1,5 @@ +kind: Added +body: Real tag support for KMS, CloudWatch and EventBridge — TagResource, UntagResource and ListTagsForResource/ListResourceTags now persist tags per resource ARN instead of being echoed by the generic CRUD engine +time: 2026-08-09T14:00:00.000000+09:00 +custom: + Issue: "" diff --git a/changes/unreleased/Fixed-20260809-140100.yaml b/changes/unreleased/Fixed-20260809-140100.yaml new file mode 100644 index 0000000..5fe8696 --- /dev/null +++ b/changes/unreleased/Fixed-20260809-140100.yaml @@ -0,0 +1,5 @@ +kind: Fixed +body: The fidelity manifest no longer declares auto-crud on providers the CRUD engine cannot serve; CloudWatch's 20 such operations are reported as unimplemented, which is what the runtime already returned +time: 2026-08-09T14:01:00.000000+09:00 +custom: + Issue: "" diff --git a/docs/fidelity-manifest.md b/docs/fidelity-manifest.md index c5aee7f..7643a4b 100644 --- a/docs/fidelity-manifest.md +++ b/docs/fidelity-manifest.md @@ -23,9 +23,9 @@ dispatch falls through, so a hand-written implementation is never shadowed. | Tier | Operations | |------|-----------:| -| `hand-verified` | 4,261 | -| `auto-crud` | 957 | -| `unimplemented` | 2,031 | +| `hand-verified` | 4,270 | +| `auto-crud` | 931 | +| `unimplemented` | 2,048 | | **Total** | **7,249** across 104 services | Examples: @@ -37,6 +37,7 @@ Examples: | s3 | 37 | 0 | 70 | | lambda | 25 | 0 | 60 | | dynamodb | 20 | 28 | 9 | +| cloudwatch | 23 | 0 | 23 | | bedrock | 18 | 0 | 84 | _Regenerate with `make codegen`; these numbers change with the surface._ @@ -99,7 +100,7 @@ unimplemented operation is served an `InvalidAction` error. | Input | Source | Contributes | |-------|--------|-------------| | Operation universe | `smithy-models/*.json`, parsed including resource-attached operations | every known operation | -| `auto-crud` | the generated [CRUD registry](crud-engine.md) | engine-servable operations | +| `auto-crud` | the generated [CRUD registry](crud-engine.md), restricted to providers that serve a JSON protocol | engine-servable operations | | `hand-verified` | dispatch-case literals scanned from `internal/services/*`, intersected with the model | implemented operations | Three providers (`s3`, `lambda`, `bedrock`) route on HTTP method and path rather @@ -110,6 +111,28 @@ The universe is *model ∪ hand-verified*: a provider may serve an operation the model does not declare — `bedrock` serves `InvokeModel`, which AWS models under bedrock-runtime — and hiding it would understate what DevCloud does. +The CRUD engine answers only JSON protocols, so a service whose **provider** speaks Query or +REST is never counted as `auto-crud` even if its model says JSON. `cloudwatch` is exactly +that case: its model declares JSON, its provider answers Query, and the runtime follows the +provider. + +## Getting an operation promoted + +Promotion from `auto-crud` (or `unimplemented`) to `hand-verified` happens **on request, +with a use case** — [open a feature request](https://github.com/skyoo2003/devcloud/issues/new?template=feature_request.yml) +naming the service, the operation, and what you are trying to run locally. Check the tier +first with the endpoint above so the request is concrete. + +Requests beat guesswork here. Reading what the unpromoted operations *are* shows why: they +are overwhelmingly operational surface — DynamoDB backups, global tables and Contributor +Insights; KMS custom key stores and key rotation; CloudWatch Insight Rules and Metric +Streams; ECR pull-through cache and registry policy. A local inner loop does not call them, +and the operations it does call — S3, SQS, Lambda, IAM and STS in full — are already +`hand-verified` with **zero** `auto-crud` operations between them. + +So v1.0 ships the long tail **declared rather than implemented**, and lets real use decide +what gets promoted in 1.x. + ## Guarantees `TestFidelityManifestCoverage` (`cmd/devcloud/fidelity_test.go`) fails the build @@ -119,4 +142,6 @@ when: - any registered service is missing from the manifest, - any CRUD-registered operation is missing or marked `unimplemented`, - any service resolves zero `hand-verified` operations — the signal that a new - path-routing provider needs a `pathRoutedOps` entry. + path-routing provider needs a `pathRoutedOps` entry, +- any service declares `auto-crud` operations while serving a protocol the engine + refuses (`TestAutoCRUDIsReachable`). diff --git a/docs/services-matrix.md b/docs/services-matrix.md index 45b337a..db89507 100644 --- a/docs/services-matrix.md +++ b/docs/services-matrix.md @@ -83,8 +83,8 @@ limits. Operations that are neither hand-written nor CRUD-classifiable return an honest `InvalidAction` error, never a fabricated success. Every operation's tier is declared in the generated -[fidelity manifest](fidelity-manifest.md) — 4,261 `hand-verified`, 957 -`auto-crud`, 2,031 `unimplemented` across 7,249 operations. Query it per service +[fidelity manifest](fidelity-manifest.md) — 4,270 `hand-verified`, 931 +`auto-crud`, 2,048 `unimplemented` across 7,249 operations. Query it per service (requires `admin.enabled: true`): ```bash diff --git a/internal/generated/fidelity/manifest_gen.go b/internal/generated/fidelity/manifest_gen.go index b3b44c3..d99385d 100644 --- a/internal/generated/fidelity/manifest_gen.go +++ b/internal/generated/fidelity/manifest_gen.go @@ -1188,7 +1188,7 @@ var Services = map[string]Service{ "ListManagedInsightRules": TierUnimplemented, "ListMetricStreams": TierUnimplemented, "ListMetrics": TierHandVerified, - "ListTagsForResource": TierUnimplemented, + "ListTagsForResource": TierHandVerified, "PutAlarmMuteRule": TierUnimplemented, "PutAnomalyDetector": TierHandVerified, "PutCompositeAlarm": TierHandVerified, @@ -1203,8 +1203,8 @@ var Services = map[string]Service{ "StartOTelEnrichment": TierUnimplemented, "StopMetricStreams": TierUnimplemented, "StopOTelEnrichment": TierUnimplemented, - "TagResource": TierUnimplemented, - "UntagResource": TierUnimplemented, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, }}, "cloudwatchlogs": {ModelBacked: true, Operations: map[string]Tier{ "AssociateKmsKey": TierUnimplemented, @@ -3436,7 +3436,7 @@ var Services = map[string]Service{ "ListReplays": TierHandVerified, "ListRuleNamesByTarget": TierAutoCRUD, "ListRules": TierHandVerified, - "ListTagsForResource": TierAutoCRUD, + "ListTagsForResource": TierHandVerified, "ListTargetsByRule": TierHandVerified, "PutEvents": TierHandVerified, "PutPartnerEvents": TierAutoCRUD, @@ -3446,9 +3446,9 @@ var Services = map[string]Service{ "RemovePermission": TierUnimplemented, "RemoveTargets": TierHandVerified, "StartReplay": TierHandVerified, - "TagResource": TierAutoCRUD, + "TagResource": TierHandVerified, "TestEventPattern": TierHandVerified, - "UntagResource": TierAutoCRUD, + "UntagResource": TierHandVerified, "UpdateApiDestination": TierAutoCRUD, "UpdateArchive": TierHandVerified, "UpdateConnection": TierAutoCRUD, @@ -4590,7 +4590,7 @@ var Services = map[string]Service{ "ListKeyPolicies": TierHandVerified, "ListKeyRotations": TierAutoCRUD, "ListKeys": TierHandVerified, - "ListResourceTags": TierAutoCRUD, + "ListResourceTags": TierHandVerified, "ListRetirableGrants": TierHandVerified, "PutKeyPolicy": TierHandVerified, "ReEncrypt": TierHandVerified, @@ -4600,8 +4600,8 @@ var Services = map[string]Service{ "RotateKeyOnDemand": TierUnimplemented, "ScheduleKeyDeletion": TierHandVerified, "Sign": TierHandVerified, - "TagResource": TierAutoCRUD, - "UntagResource": TierAutoCRUD, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, "UpdateAlias": TierAutoCRUD, "UpdateCustomKeyStore": TierAutoCRUD, "UpdateKeyDescription": TierHandVerified, diff --git a/internal/services/cloudwatch/provider.go b/internal/services/cloudwatch/provider.go index 72b65ec..5df2682 100644 --- a/internal/services/cloudwatch/provider.go +++ b/internal/services/cloudwatch/provider.go @@ -13,6 +13,7 @@ import ( "net/http" "net/url" "path/filepath" + "sort" "strconv" "strings" @@ -98,6 +99,12 @@ func (p *Provider) HandleRequest(_ context.Context, op string, req *http.Request return p.putAnomalyDetector(jm, req) case "DeleteAnomalyDetector": return p.deleteAnomalyDetector(jm, req) + case "TagResource": + return p.tagResource(jm, req) + case "UntagResource": + return p.untagResource(jm, req) + case "ListTagsForResource": + return p.listTagsForResource(jm, req) case "DescribeAnomalyDetectors": return p.describeAnomalyDetectors(jm, req) default: @@ -616,6 +623,72 @@ func isJSONMode(req *http.Request) bool { return strings.Contains(ct, "json") } +// --- Tags --- +// +// ponytail: tags are stored against whatever ARN the caller passes; the resource +// is not checked for existence. Validate against the alarm table if a test ever +// depends on ResourceNotFoundException. + +func (p *Provider) tagResource(jm bool, req *http.Request) (*plugin.Response, error) { + arn := req.FormValue("ResourceARN") + if arn == "" { + return cwError(jm, "MissingParameter", "ResourceARN is required", http.StatusBadRequest), nil + } + tags := make(map[string]string) + for i := 1; ; i++ { + prefix := fmt.Sprintf("Tags.member.%d.", i) + key := req.FormValue(prefix + "Key") + if key == "" { + break + } + tags[key] = req.FormValue(prefix + "Value") + } + if err := p.store.tags.AddTags(arn, tags); err != nil { + return nil, err + } + return cwResp(jm, http.StatusOK, "TagResourceResponse", nil) +} + +func (p *Provider) untagResource(jm bool, req *http.Request) (*plugin.Response, error) { + arn := req.FormValue("ResourceARN") + if arn == "" { + return cwError(jm, "MissingParameter", "ResourceARN is required", http.StatusBadRequest), nil + } + var keys []string + for i := 1; ; i++ { + key := req.FormValue(fmt.Sprintf("TagKeys.member.%d", i)) + if key == "" { + break + } + keys = append(keys, key) + } + if err := p.store.tags.RemoveTags(arn, keys); err != nil { + return nil, err + } + return cwResp(jm, http.StatusOK, "UntagResourceResponse", nil) +} + +func (p *Provider) listTagsForResource(jm bool, req *http.Request) (*plugin.Response, error) { + arn := req.FormValue("ResourceARN") + if arn == "" { + return cwError(jm, "MissingParameter", "ResourceARN is required", http.StatusBadRequest), nil + } + tags, err := p.store.tags.ListTags(arn) + if err != nil { + return nil, err + } + names := make([]string, 0, len(tags)) + for name := range tags { + names = append(names, name) + } + sort.Strings(names) + list := make([]map[string]any, 0, len(names)) + for _, name := range names { + list = append(list, map[string]any{"Key": name, "Value": tags[name]}) + } + return cwResp(jm, http.StatusOK, "ListTagsForResourceResponse", map[string]any{"Tags": list}) +} + func cwResp(jsonMode bool, status int, xmlRoot string, data map[string]any) (*plugin.Response, error) { if data == nil { data = map[string]any{} diff --git a/internal/services/cloudwatch/store.go b/internal/services/cloudwatch/store.go index 7eee263..14d6376 100644 --- a/internal/services/cloudwatch/store.go +++ b/internal/services/cloudwatch/store.go @@ -11,6 +11,7 @@ import ( "strings" "time" + "github.com/skyoo2003/devcloud/internal/shared" "github.com/skyoo2003/devcloud/internal/storage/sqlite" ) @@ -140,15 +141,17 @@ type MetricDataPoint struct { type CWStore struct { store *sqlite.Store + tags *shared.TagStore } func NewCWStore(dataDir string) (*CWStore, error) { dbPath := filepath.Join(dataDir, "cloudwatch.db") - s, err := sqlite.Open(dbPath, migrations) + allMigrations := append(migrations, shared.TagMigrations...) + s, err := sqlite.Open(dbPath, allMigrations) if err != nil { return nil, err } - return &CWStore{store: s}, nil + return &CWStore{store: s, tags: shared.NewTagStore(s)}, nil } func (s *CWStore) Close() error { return s.store.Close() } diff --git a/internal/services/eventbridge/provider.go b/internal/services/eventbridge/provider.go index 82a871e..25b6fd5 100644 --- a/internal/services/eventbridge/provider.go +++ b/internal/services/eventbridge/provider.go @@ -11,6 +11,7 @@ import ( "io" "net/http" "path/filepath" + "sort" "strings" "time" @@ -122,6 +123,12 @@ func (p *Provider) HandleRequest(_ context.Context, op string, req *http.Request case "CancelReplay": return p.cancelReplay(params) // Test + case "TagResource": + return p.tagResource(params) + case "UntagResource": + return p.untagResource(params) + case "ListTagsForResource": + return p.listTagsForResource(params) case "TestEventPattern": return p.testEventPattern(params) default: @@ -784,6 +791,74 @@ func matchesPattern(pattern map[string]any, event map[string]any) bool { return true } +// --- Tags --- +// +// ponytail: tags are stored against whatever ARN the caller passes; the resource +// is not checked for existence. Validate against the rule/bus tables if a test +// ever depends on ResourceNotFoundException. + +func (p *Provider) tagResource(params map[string]any) (*plugin.Response, error) { + arn, _ := params["ResourceARN"].(string) + if arn == "" { + return ebError("ValidationException", "ResourceARN is required", http.StatusBadRequest), nil + } + tags := make(map[string]string) + rawTags, _ := params["Tags"].([]any) + for _, t := range rawTags { + m, ok := t.(map[string]any) + if !ok { + continue + } + if k, _ := m["Key"].(string); k != "" { + v, _ := m["Value"].(string) + tags[k] = v + } + } + if err := p.store.tags.AddTags(arn, tags); err != nil { + return nil, err + } + return jsonResp(http.StatusOK, map[string]any{}) +} + +func (p *Provider) untagResource(params map[string]any) (*plugin.Response, error) { + arn, _ := params["ResourceARN"].(string) + if arn == "" { + return ebError("ValidationException", "ResourceARN is required", http.StatusBadRequest), nil + } + rawKeys, _ := params["TagKeys"].([]any) + keys := make([]string, 0, len(rawKeys)) + for _, k := range rawKeys { + if s, ok := k.(string); ok && s != "" { + keys = append(keys, s) + } + } + if err := p.store.tags.RemoveTags(arn, keys); err != nil { + return nil, err + } + return jsonResp(http.StatusOK, map[string]any{}) +} + +func (p *Provider) listTagsForResource(params map[string]any) (*plugin.Response, error) { + arn, _ := params["ResourceARN"].(string) + if arn == "" { + return ebError("ValidationException", "ResourceARN is required", http.StatusBadRequest), nil + } + tags, err := p.store.tags.ListTags(arn) + if err != nil { + return nil, err + } + names := make([]string, 0, len(tags)) + for name := range tags { + names = append(names, name) + } + sort.Strings(names) + list := make([]map[string]any, 0, len(names)) + for _, name := range names { + list = append(list, map[string]any{"Key": name, "Value": tags[name]}) + } + return jsonResp(http.StatusOK, map[string]any{"Tags": list}) +} + func ebError(code, message string, status int) *plugin.Response { body, _ := json.Marshal(map[string]any{"__type": code, "message": message}) return &plugin.Response{StatusCode: status, ContentType: "application/x-amz-json-1.1", Body: body} diff --git a/internal/services/eventbridge/store.go b/internal/services/eventbridge/store.go index feeb953..a3f6b77 100644 --- a/internal/services/eventbridge/store.go +++ b/internal/services/eventbridge/store.go @@ -12,6 +12,7 @@ import ( "path/filepath" "time" + "github.com/skyoo2003/devcloud/internal/shared" "github.com/skyoo2003/devcloud/internal/storage/sqlite" "github.com/skyoo2003/devcloud/internal/plugin" @@ -104,15 +105,17 @@ type Target struct { type EBStore struct { store *sqlite.Store + tags *shared.TagStore } func NewEBStore(dataDir string) (*EBStore, error) { dbPath := filepath.Join(dataDir, "eventbridge.db") - s, err := sqlite.Open(dbPath, migrations) + allMigrations := append(migrations, shared.TagMigrations...) + s, err := sqlite.Open(dbPath, allMigrations) if err != nil { return nil, err } - eb := &EBStore{store: s} + eb := &EBStore{store: s, tags: shared.NewTagStore(s)} // Seed the default event bus. _ = eb.CreateEventBus("default", plugin.DefaultAccountID) return eb, nil diff --git a/internal/services/kms/provider.go b/internal/services/kms/provider.go index ef119b6..35201b4 100644 --- a/internal/services/kms/provider.go +++ b/internal/services/kms/provider.go @@ -11,6 +11,7 @@ import ( "io" "net/http" "path/filepath" + "sort" "strings" "time" @@ -127,6 +128,12 @@ func (p *Provider) HandleRequest(_ context.Context, op string, req *http.Request return p.putKeyPolicy(params) case "ListKeyPolicies": return p.listKeyPolicies(params) + case "TagResource": + return p.tagResource(params) + case "UntagResource": + return p.untagResource(params) + case "ListResourceTags": + return p.listResourceTags(params) default: // Fall back to the generic CRUD engine for unimplemented ops. return nil, plugin.ErrUnhandledOp @@ -811,6 +818,91 @@ func (p *Provider) listKeyPolicies(params map[string]any) (*plugin.Response, err } // resolveKey accepts a key ID, ARN, or alias name. +// --- Tags --- +// +// Tags are keyed by the key's ARN rather than the caller's KeyId, so tagging by +// id, ARN or alias and listing by any of the three round-trips. + +func (p *Provider) tagResource(params map[string]any) (*plugin.Response, error) { + key, resp := p.keyForTagging(params) + if resp != nil { + return resp, nil + } + + tags := make(map[string]string) + rawTags, _ := params["Tags"].([]any) + for _, t := range rawTags { + m, ok := t.(map[string]any) + if !ok { + continue + } + if k, _ := m["TagKey"].(string); k != "" { + v, _ := m["TagValue"].(string) + tags[k] = v + } + } + if err := p.store.tags.AddTags(key.ARN, tags); err != nil { + return nil, err + } + return jsonResp(http.StatusOK, map[string]any{}) +} + +func (p *Provider) untagResource(params map[string]any) (*plugin.Response, error) { + key, resp := p.keyForTagging(params) + if resp != nil { + return resp, nil + } + + rawKeys, _ := params["TagKeys"].([]any) + keys := make([]string, 0, len(rawKeys)) + for _, k := range rawKeys { + if s, ok := k.(string); ok && s != "" { + keys = append(keys, s) + } + } + if err := p.store.tags.RemoveTags(key.ARN, keys); err != nil { + return nil, err + } + return jsonResp(http.StatusOK, map[string]any{}) +} + +func (p *Provider) listResourceTags(params map[string]any) (*plugin.Response, error) { + key, resp := p.keyForTagging(params) + if resp != nil { + return resp, nil + } + + tags, err := p.store.tags.ListTags(key.ARN) + if err != nil { + return nil, err + } + names := make([]string, 0, len(tags)) + for name := range tags { + names = append(names, name) + } + sort.Strings(names) + + list := make([]map[string]any, 0, len(names)) + for _, name := range names { + list = append(list, map[string]any{"TagKey": name, "TagValue": tags[name]}) + } + return jsonResp(http.StatusOK, map[string]any{"Tags": list, "Truncated": false}) +} + +// keyForTagging resolves the KeyId shared by the three tag operations, returning +// a ready error response rather than a key when the request cannot be served. +func (p *Provider) keyForTagging(params map[string]any) (*Key, *plugin.Response) { + keyID, _ := params["KeyId"].(string) + if keyID == "" { + return nil, kmsError("ValidationException", "KeyId is required", http.StatusBadRequest) + } + key, err := p.resolveKey(keyID) + if err != nil { + return nil, kmsError("NotFoundException", "key not found", http.StatusBadRequest) + } + return key, nil +} + func (p *Provider) resolveKey(keyID string) (*Key, error) { if strings.HasPrefix(keyID, "alias/") { return p.store.GetKeyByAlias(keyID) diff --git a/internal/services/kms/store.go b/internal/services/kms/store.go index 855dcca..9db1a7f 100644 --- a/internal/services/kms/store.go +++ b/internal/services/kms/store.go @@ -13,6 +13,8 @@ import ( "errors" "fmt" "io" + + "github.com/skyoo2003/devcloud/internal/shared" "path/filepath" "time" @@ -90,15 +92,17 @@ type Alias struct { type KMSStore struct { store *sqlite.Store + tags *shared.TagStore } func NewKMSStore(dataDir string) (*KMSStore, error) { dbPath := filepath.Join(dataDir, "kms.db") - s, err := sqlite.Open(dbPath, migrations) + allMigrations := append(migrations, shared.TagMigrations...) + s, err := sqlite.Open(dbPath, allMigrations) if err != nil { return nil, err } - return &KMSStore{store: s}, nil + return &KMSStore{store: s, tags: shared.NewTagStore(s)}, nil } func (s *KMSStore) Close() error { return s.store.Close() } diff --git a/tests/compatibility/test_cloudwatch.py b/tests/compatibility/test_cloudwatch.py index e520f49..c98ae73 100644 --- a/tests/compatibility/test_cloudwatch.py +++ b/tests/compatibility/test_cloudwatch.py @@ -191,3 +191,32 @@ def test_anomaly_detector(cloudwatch_client): MetricName="Req", Stat="Average", ) + + +def test_tag_round_trip(cloudwatch_client): + """Tags must persist: the round-trip the generic CRUD engine cannot do.""" + arn = "arn:aws:cloudwatch:us-east-1:000000000000:alarm:compat-tag-alarm" + + cloudwatch_client.tag_resource( + ResourceARN=arn, + Tags=[{"Key": "env", "Value": "dev"}, {"Key": "team", "Value": "platform"}], + ) + tags = { + t["Key"]: t["Value"] + for t in cloudwatch_client.list_tags_for_resource(ResourceARN=arn)["Tags"] + } + assert tags == {"env": "dev", "team": "platform"} + + cloudwatch_client.untag_resource(ResourceARN=arn, TagKeys=["env"]) + tags = { + t["Key"]: t["Value"] + for t in cloudwatch_client.list_tags_for_resource(ResourceARN=arn)["Tags"] + } + assert tags == {"team": "platform"} + + +def test_tags_are_per_resource(cloudwatch_client): + a = "arn:aws:cloudwatch:us-east-1:000000000000:alarm:tag-alarm-a" + b = "arn:aws:cloudwatch:us-east-1:000000000000:alarm:tag-alarm-b" + cloudwatch_client.tag_resource(ResourceARN=a, Tags=[{"Key": "only", "Value": "a"}]) + assert cloudwatch_client.list_tags_for_resource(ResourceARN=b)["Tags"] == [] diff --git a/tests/compatibility/test_eventbridge.py b/tests/compatibility/test_eventbridge.py index 284f27c..30c986d 100644 --- a/tests/compatibility/test_eventbridge.py +++ b/tests/compatibility/test_eventbridge.py @@ -189,3 +189,35 @@ def test_event_pattern(events_client): ), ) assert resp2["Result"] is False + + +def test_tag_round_trip(events_client): + """Tags must persist: the round-trip the generic CRUD engine cannot do.""" + bus = events_client.create_event_bus(Name="tag-bus") + arn = bus["EventBusArn"] + + events_client.tag_resource( + ResourceARN=arn, + Tags=[{"Key": "env", "Value": "dev"}, {"Key": "team", "Value": "platform"}], + ) + tags = { + t["Key"]: t["Value"] + for t in events_client.list_tags_for_resource(ResourceARN=arn)["Tags"] + } + assert tags == {"env": "dev", "team": "platform"} + + events_client.untag_resource(ResourceARN=arn, TagKeys=["env"]) + tags = { + t["Key"]: t["Value"] + for t in events_client.list_tags_for_resource(ResourceARN=arn)["Tags"] + } + assert tags == {"team": "platform"} + + +def test_tags_are_per_resource(events_client): + """Two resources do not share a tag set.""" + a = events_client.create_event_bus(Name="tag-bus-a")["EventBusArn"] + b = events_client.create_event_bus(Name="tag-bus-b")["EventBusArn"] + + events_client.tag_resource(ResourceARN=a, Tags=[{"Key": "only", "Value": "a"}]) + assert events_client.list_tags_for_resource(ResourceARN=b)["Tags"] == [] diff --git a/tests/compatibility/test_kms.py b/tests/compatibility/test_kms.py index 13c1b62..a6b72ca 100644 --- a/tests/compatibility/test_kms.py +++ b/tests/compatibility/test_kms.py @@ -152,3 +152,52 @@ def test_update_key_description(kms_client): kms_client.update_key_description(KeyId=kid, Description="updated") desc = kms_client.describe_key(KeyId=kid) assert desc["KeyMetadata"]["Description"] == "updated" + + +def test_tag_round_trip(kms_client): + """Tags must persist: the round-trip the generic CRUD engine cannot do.""" + key = kms_client.create_key(Description="tag test") + kid = key["KeyMetadata"]["KeyId"] + + kms_client.tag_resource( + KeyId=kid, + Tags=[ + {"TagKey": "env", "TagValue": "dev"}, + {"TagKey": "team", "TagValue": "platform"}, + ], + ) + tags = { + t["TagKey"]: t["TagValue"] + for t in kms_client.list_resource_tags(KeyId=kid)["Tags"] + } + assert tags == {"env": "dev", "team": "platform"} + + kms_client.untag_resource(KeyId=kid, TagKeys=["env"]) + tags = { + t["TagKey"]: t["TagValue"] + for t in kms_client.list_resource_tags(KeyId=kid)["Tags"] + } + assert tags == {"team": "platform"} + + +def test_tags_are_keyed_by_key_arn(kms_client): + """Tagging by id and listing by ARN address the same resource.""" + key = kms_client.create_key(Description="arn tag test") + kid = key["KeyMetadata"]["KeyId"] + arn = key["KeyMetadata"]["Arn"] + + kms_client.tag_resource(KeyId=kid, Tags=[{"TagKey": "by", "TagValue": "id"}]) + tags = { + t["TagKey"]: t["TagValue"] + for t in kms_client.list_resource_tags(KeyId=arn)["Tags"] + } + assert tags == {"by": "id"} + + +def test_tag_unknown_key_is_rejected(kms_client): + with pytest.raises(ClientError) as err: + kms_client.tag_resource( + KeyId="00000000-0000-0000-0000-000000000000", + Tags=[{"TagKey": "env", "TagValue": "dev"}], + ) + assert err.value.response["Error"]["Code"] == "NotFoundException" From 14d7d20ea536a01bf5d1233f89167d1392be6d2f Mon Sep 17 00:00:00 2001 From: Sung-Kyu Yoo Date: Sun, 9 Aug 2026 14:12:30 +0900 Subject: [PATCH 5/6] fix(fidelity): derive the manifest from real dispatch, restore CloudWatch CRUD MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review of #126 found the manifest describing a surface DevCloud does not have, in both directions. The scan intersected each provider's case literals with its Smithy model. That was doing two jobs at once, and got both wrong: it discarded the 226 operations providers serve beyond their model (dynamodbstreams listed 4 of the 22 it dispatches; acm's UpdateCertificate and bedrock's InvokeModelWithResponseStream were absent), while still admitting 5 strings that are not operations at all, because identitystore switches on "DisplayName" to patch an attribute and pipes switches on "POST" to resolve a path. The docs meanwhile promised a model-union universe, which the code did not implement. Scope the scan instead: read only the keyed switches inside each provider's HandleRequest, keyed by the receiver type Register binds to the service ID, following delegation (sqs branches on protocol, kafka wraps, appsync serves 37 operations from a default clause). Non-dispatch switches then never come into view, so no intersection is needed and iam still splits from sts. Drop the model intersection entirely. Restore the CloudWatch CRUD registrations 36a37b8 removed. That commit read the protocol off the provider, but gateway.DetectProtocol reads it off the request — CloudWatch answers Query for boto3 and falls through to the engine for X-Amz-Target callers, so the filter deleted 17 live operations. TestAutoCRUDIsReachable encoded the same wrong premise; replace it with one that asks the engine directly. Correct the unimplemented tier's documented error while here: it claimed InvalidAction for every service, which is false for the three path-routed providers (s3 405 MethodNotAllowed, lambda 404 ResourceNotFoundException, bedrock 400 UnsupportedOperation). Separately, EventBridge kept a bus's or rule's tags after deletion. ARNs are derived from the name, so recreating one inherited the old tags; delete them with the resource and pin it with two boto3 tests. Manifest: 4,496 hand-verified / 948 auto-crud / 2,031 unimplemented. --- changes/unreleased/Fixed-20260809-140100.yaml | 2 +- changes/unreleased/Fixed-20260809-160000.yaml | 5 + changes/unreleased/Fixed-20260809-160100.yaml | 5 + cmd/codegen/main.go | 22 +- cmd/devcloud/fidelity_test.go | 36 +- docs/crud-engine.md | 2 +- docs/fidelity-manifest.md | 47 +- docs/services-matrix.md | 8 +- internal/codegen/scan_handverified.go | 311 ++++++++---- internal/codegen/scan_handverified_test.go | 95 ++-- .../templates/fidelity_manifest.go.tmpl | 12 +- .../generated/crudregistry/registry_gen.go | 53 ++ internal/generated/fidelity/manifest_gen.go | 468 +++++++++++++----- internal/services/eventbridge/provider.go | 8 +- internal/services/eventbridge/store.go | 19 +- tests/compatibility/test_eventbridge.py | 21 + 16 files changed, 781 insertions(+), 333 deletions(-) create mode 100644 changes/unreleased/Fixed-20260809-160000.yaml create mode 100644 changes/unreleased/Fixed-20260809-160100.yaml diff --git a/changes/unreleased/Fixed-20260809-140100.yaml b/changes/unreleased/Fixed-20260809-140100.yaml index 5fe8696..522bcb8 100644 --- a/changes/unreleased/Fixed-20260809-140100.yaml +++ b/changes/unreleased/Fixed-20260809-140100.yaml @@ -1,5 +1,5 @@ kind: Fixed -body: The fidelity manifest no longer declares auto-crud on providers the CRUD engine cannot serve; CloudWatch's 20 such operations are reported as unimplemented, which is what the runtime already returned +body: The fidelity manifest now reads each provider's actual dispatch instead of intersecting with the Smithy model, recovering 226 served operations it had hidden (dynamodbstreams listed 4 of its 22, acm's UpdateCertificate, bedrock's InvokeModelWithResponseStream) and dropping 5 non-operations it had invented (identitystore Description/DisplayName/Emails, pipes DELETE/POST) time: 2026-08-09T14:01:00.000000+09:00 custom: Issue: "" diff --git a/changes/unreleased/Fixed-20260809-160000.yaml b/changes/unreleased/Fixed-20260809-160000.yaml new file mode 100644 index 0000000..ff5a908 --- /dev/null +++ b/changes/unreleased/Fixed-20260809-160000.yaml @@ -0,0 +1,5 @@ +kind: Fixed +body: EventBridge now drops a bus's or rule's tags when it is deleted. ARNs are derived from the name, so recreating a deleted resource reused its ARN and inherited the previous tags +time: 2026-08-09T16:00:00.000000+09:00 +custom: + Issue: "" diff --git a/changes/unreleased/Fixed-20260809-160100.yaml b/changes/unreleased/Fixed-20260809-160100.yaml new file mode 100644 index 0000000..13fd2f2 --- /dev/null +++ b/changes/unreleased/Fixed-20260809-160100.yaml @@ -0,0 +1,5 @@ +kind: Fixed +body: Restored CloudWatch's 17 CRUD-engine operations. The gateway picks the protocol from the request, not from the provider, so CloudWatch reaches the engine whenever a client speaks JSON — filtering the registry by the provider's declared protocol had removed that coverage outright +time: 2026-08-09T16:01:00.000000+09:00 +custom: + Issue: "" diff --git a/cmd/codegen/main.go b/cmd/codegen/main.go index 9312f95..3939b6b 100644 --- a/cmd/codegen/main.go +++ b/cmd/codegen/main.go @@ -97,13 +97,12 @@ func main() { // Write the aggregate CRUD registry only when generating the full fleet // (a filtered run would otherwise clobber it with a partial registry). if len(allowedServices) == 0 { - providers, err := codegen.ScanProviders(*servicesDir, modelOps) + providers, err := codegen.ScanProviders(*servicesDir) if err != nil { fmt.Fprintf(os.Stderr, "Error scanning providers: %v\n", err) os.Exit(1) } - crudServices = servableCRUD(crudServices, providers) sort.Slice(crudServices, func(i, j int) bool { return crudServices[i].ServiceID < crudServices[j].ServiceID }) @@ -131,25 +130,6 @@ func main() { fmt.Println("Code generation complete.") } -// servableCRUD drops services whose provider serves a non-JSON protocol. The -// CRUD engine bails out on anything else (crud.Handle → JSONProtocol), so -// registering them produces operations the runtime answers with InvalidAction — -// a registration that reads as coverage while serving none. The Smithy model can -// declare JSON while the provider still answers Query (cloudwatch does), so the -// provider is the authority here. -func servableCRUD(services []codegen.CRUDServiceData, providers map[string]codegen.ProviderScan) []codegen.CRUDServiceData { - kept := make([]codegen.CRUDServiceData, 0, len(services)) - for _, svc := range services { - if !codegen.JSONProtocol(providers[svc.ServiceID].Protocol) { - fmt.Printf("Skipping CRUD registration for %s: provider serves %q, not JSON\n", - svc.ServiceID, providers[svc.ServiceID].Protocol) - continue - } - kept = append(kept, svc) - } - return kept -} - // writeFidelityManifest emits the per-operation fidelity manifest. Like the CRUD // registry it is only written on a full-fleet run, since a filtered run would // produce a partial manifest. diff --git a/cmd/devcloud/fidelity_test.go b/cmd/devcloud/fidelity_test.go index 791f40d..5c90415 100644 --- a/cmd/devcloud/fidelity_test.go +++ b/cmd/devcloud/fidelity_test.go @@ -91,30 +91,22 @@ func TestFidelityManifestCoversCRUDRegistry(t *testing.T) { } } -// TestAutoCRUDIsReachable guards against the manifest promising a tier the -// runtime cannot deliver. The CRUD engine refuses any non-JSON protocol -// (crud.Handle → JSONProtocol), so an operation declared auto-crud on a -// Query or REST provider would in fact return InvalidAction. -func TestAutoCRUDIsReachable(t *testing.T) { +// TestAutoCRUDIsServedOverJSON pins what makes an auto-crud tier true. The +// gateway derives the protocol from the *request* (gateway.DetectProtocol), not +// from the provider, so a service whose provider declares Query still reaches +// the engine when a client speaks JSON. cloudwatch is the case that matters: its +// provider answers Query for boto3 and falls through to the engine for +// X-Amz-Target callers. Filtering the registry by the provider's declared +// protocol once removed that coverage outright. +func TestAutoCRUDIsServedOverJSON(t *testing.T) { for id, svc := range fidelity.Services { - autoCRUD := 0 - for _, tier := range svc.Operations { - if tier == fidelity.TierAutoCRUD { - autoCRUD++ + for op, tier := range svc.Operations { + if tier != fidelity.TierAutoCRUD { + continue + } + if _, err := crud.Handle(id, op, "json-1.1", []byte("{}")); err != nil { + t.Errorf("%s/%s: declared auto-crud but the engine refused it: %v", id, op, err) } - } - if autoCRUD == 0 { - continue - } - - p, ok := plugin.DefaultRegistry.Construct(id) - if !ok { - t.Errorf("%s: declares %d auto-crud operations but is not registered", id, autoCRUD) - continue - } - if !crud.JSONProtocol(string(p.Protocol())) { - t.Errorf("%s: declares %d auto-crud operations but serves %q; the CRUD engine only answers JSON protocols, so those operations really return InvalidAction", - id, autoCRUD, p.Protocol()) } } } diff --git a/docs/crud-engine.md b/docs/crud-engine.md index d5dd6f0..87f6cd1 100644 --- a/docs/crud-engine.md +++ b/docs/crud-engine.md @@ -32,7 +32,7 @@ operations as scaffolding for local wiring, not as behavioural parity. |------|---------| | **hand-verified** | Implemented by the service's provider (explicit dispatch `case`). Highest fidelity. | | **auto-crud** | Served by the engine with plausible, store-backed responses. Reaches the engine only for engine-wired services (below). | -| **unimplemented** | Not implemented and not CRUD-classifiable — returns an honest `InvalidAction` error. | +| **unimplemented** | Not implemented and not CRUD-classifiable — the call is refused, never faked. JSON and Query services return `InvalidAction`; the path-routed providers (`s3`, `lambda`, `bedrock`) use their own error vocabulary. | Hand-written operations always win: the engine is only reached when a request falls through to the provider's `default:` case, so it never shadows a real diff --git a/docs/fidelity-manifest.md b/docs/fidelity-manifest.md index 7643a4b..1466c86 100644 --- a/docs/fidelity-manifest.md +++ b/docs/fidelity-manifest.md @@ -14,7 +14,7 @@ Smithy models, the CRUD registry, and each provider's dispatch code. |------|---------|--------------| | `hand-verified` | The service's provider implements the operation explicitly. | Behaviour, not just shape. Covered by the boto3 compatibility suite where tests exist. | | `auto-crud` | Served by the [generic CRUD engine](crud-engine.md) with plausible, store-backed responses. No validation, no business logic, no cross-resource integrity. | Wiring your SDK calls and round-tripping create → get → list → delete. Nothing else. | -| `unimplemented` | Returns an honest `InvalidAction` (HTTP 400). | Knowing early that DevCloud will not serve this call. | +| `unimplemented` | Not served — the call fails instead of inventing a success. The error is the provider's own: JSON and Query services return `InvalidAction` (HTTP 400), while the path-routed providers answer in their own vocabulary (`s3` `MethodNotAllowed` 405, `lambda` `ResourceNotFoundException` 404, `bedrock` `UnsupportedOperation` 400). | Knowing early that DevCloud will not serve this call. | `hand-verified` always wins: the CRUD engine is reached only when a provider's dispatch falls through, so a hand-written implementation is never shadowed. @@ -23,22 +23,22 @@ dispatch falls through, so a hand-written implementation is never shadowed. | Tier | Operations | |------|-----------:| -| `hand-verified` | 4,270 | -| `auto-crud` | 931 | -| `unimplemented` | 2,048 | -| **Total** | **7,249** across 104 services | +| `hand-verified` | 4,496 | +| `auto-crud` | 948 | +| `unimplemented` | 2,031 | +| **Total** | **7,475** across 104 services | Examples: | Service | hand-verified | auto-crud | unimplemented | |---------|--------------:|----------:|--------------:| | sqs | 23 | 0 | 0 | -| ecs | 51 | 22 | 3 | +| ecs | 57 | 22 | 3 | | s3 | 37 | 0 | 70 | | lambda | 25 | 0 | 60 | | dynamodb | 20 | 28 | 9 | -| cloudwatch | 23 | 0 | 23 | -| bedrock | 18 | 0 | 84 | +| cloudwatch | 23 | 17 | 6 | +| bedrock | 19 | 0 | 84 | _Regenerate with `make codegen`; these numbers change with the surface._ @@ -79,8 +79,8 @@ tier, ok := fidelity.Lookup("s3", "PutObject") // TierHandVerified, true ``` `ok` is false for a service or operation DevCloud does not know at all, which is -not the same as `unimplemented`: an unknown service is not served, whereas an -unimplemented operation is served an `InvalidAction` error. +not the same as `unimplemented`: an unknown service is not routed at all, +whereas an unimplemented operation reaches its provider and is refused. ## Limits @@ -100,8 +100,8 @@ unimplemented operation is served an `InvalidAction` error. | Input | Source | Contributes | |-------|--------|-------------| | Operation universe | `smithy-models/*.json`, parsed including resource-attached operations | every known operation | -| `auto-crud` | the generated [CRUD registry](crud-engine.md), restricted to providers that serve a JSON protocol | engine-servable operations | -| `hand-verified` | dispatch-case literals scanned from `internal/services/*`, intersected with the model | implemented operations | +| `auto-crud` | the generated [CRUD registry](crud-engine.md) | engine-servable operations | +| `hand-verified` | the case literals of the dispatch switches inside each provider's `HandleRequest` | implemented operations | Three providers (`s3`, `lambda`, `bedrock`) route on HTTP method and path rather than an operation name, so they declare their operations explicitly in @@ -109,12 +109,16 @@ than an operation name, so they declare their operations explicitly in The universe is *model ∪ hand-verified*: a provider may serve an operation the model does not declare — `bedrock` serves `InvokeModel`, which AWS models under -bedrock-runtime — and hiding it would understate what DevCloud does. +bedrock-runtime, and `dynamodbstreams` dispatches 22 operations against a +4-operation model — and hiding them would understate what DevCloud does. So a +`hand-verified` entry is a statement about **DevCloud**, not about AWS: it can +name an operation your SDK has never heard of. -The CRUD engine answers only JSON protocols, so a service whose **provider** speaks Query or -REST is never counted as `auto-crud` even if its model says JSON. `cloudwatch` is exactly -that case: its model declares JSON, its provider answers Query, and the runtime follows the -provider. +The scan is scoped to `HandleRequest` (and whatever it delegates dispatch to) +for a reason. That is the only place an operation name means "operation": +elsewhere in the same package, `identitystore` switches on `"DisplayName"` to +apply an attribute patch and `pipes` switches on `"POST"` to resolve a path. +Reading the whole package would file both as operations. ## Getting an operation promoted @@ -143,5 +147,10 @@ when: - any CRUD-registered operation is missing or marked `unimplemented`, - any service resolves zero `hand-verified` operations — the signal that a new path-routing provider needs a `pathRoutedOps` entry, -- any service declares `auto-crud` operations while serving a protocol the engine - refuses (`TestAutoCRUDIsReachable`). +- any `auto-crud` operation is one the engine will not actually serve + (`TestAutoCRUDIsServedOverJSON`). + +The engine reads the protocol from the **request**, not from the provider, so +`auto-crud` survives a Query-speaking provider: `cloudwatch` answers boto3 over +Query and falls through to the engine for `X-Amz-Target` callers. Filtering the +registry by the provider's declared protocol would delete that coverage. diff --git a/docs/services-matrix.md b/docs/services-matrix.md index db89507..063a7bc 100644 --- a/docs/services-matrix.md +++ b/docs/services-matrix.md @@ -1,6 +1,6 @@ # DevCloud Services Matrix -**Total**: 104 services (run `make stats`). The boto3 compatibility suite — 764 tests in `tests/compatibility/` — passes in CI. +**Total**: 104 services (run `make stats`). The boto3 compatibility suite — 773 tests in `tests/compatibility/` — passes in CI. > To refresh these numbers, run `make stats` (service/handler counts) and `make test-compat` (compatibility suite), then update the line above. Note: `make stats`' "Operations" counts dispatch cases (a service carrying both Query and JSON protocols counts each), not distinct AWS operations. @@ -61,7 +61,7 @@ DevCloud is a Go-based local cloud environment with AWS API compatibility. This ## boto3 compatibility -- Tests: `tests/compatibility/` (764 tests) +- Tests: `tests/compatibility/` (773 tests) - Status: the full suite passes in CI (`.github/workflows/compat.yml`); any failing test fails the build - Run: `make test-compat` @@ -83,8 +83,8 @@ limits. Operations that are neither hand-written nor CRUD-classifiable return an honest `InvalidAction` error, never a fabricated success. Every operation's tier is declared in the generated -[fidelity manifest](fidelity-manifest.md) — 4,270 `hand-verified`, 931 -`auto-crud`, 2,048 `unimplemented` across 7,249 operations. Query it per service +[fidelity manifest](fidelity-manifest.md) — 4,496 `hand-verified`, 948 +`auto-crud`, 2,031 `unimplemented` across 7,475 operations. Query it per service (requires `admin.enabled: true`): ```bash diff --git a/internal/codegen/scan_handverified.go b/internal/codegen/scan_handverified.go index af7ed0b..ab9d70f 100644 --- a/internal/codegen/scan_handverified.go +++ b/internal/codegen/scan_handverified.go @@ -17,16 +17,16 @@ import ( ) // opNamePattern is the shape of an AWS operation name: PascalCase, letters and -// digits only. It is a pre-filter, not the decision — for a service with a -// Smithy model the scan intersects with the model's operations, which discards -// any string that merely looks like an operation name. +// digits only. It rejects the odd non-operation literal that shares a dispatch +// switch with real operations (HTTP verbs, content types, protocol tokens). var opNamePattern = regexp.MustCompile(`^[A-Z][A-Za-z0-9]{3,}$`) // pathRoutedOps lists the operations of providers that route on HTTP method and // path instead of an operation name, so no operation-name literal appears in -// their source for the scan to find. Keep in sync by hand when these providers -// gain operations — the fidelity manifest test fails loudly if a fourth provider -// starts routing this way, since it would resolve to an empty operation set. +// their HandleRequest for the scan to find. Keep in sync by hand when these +// providers gain operations — the fidelity manifest test fails loudly if a +// fourth provider starts routing this way, since it would resolve to an empty +// operation set. // // ponytail: hand-maintained for three services; if the list keeps growing, // derive the mapping from the generated OperationRoutes table instead. @@ -52,16 +52,17 @@ var pathRoutedOps = map[string][]string{ "UpdateAlias", "UpdateEventSourceMapping", "UpdateFunctionCode", "UpdateFunctionConfiguration", }, - // InvokeModel belongs to bedrock-runtime in AWS but is served by this - // provider, so it is hand-verified even though bedrock.json does not declare - // it. The manifest's universe is model ∪ hand-verified for exactly this case. + // InvokeModel and InvokeModelWithResponseStream belong to bedrock-runtime in + // AWS but are served by this provider, so they are hand-verified even though + // bedrock.json does not declare them. The manifest's universe is + // model ∪ hand-verified for exactly this case. "bedrock": { "CreateGuardrail", "CreateModelCustomizationJob", "DeleteCustomModel", "DeleteGuardrail", "GetCustomModel", "GetFoundationModel", "GetGuardrail", - "GetModelCustomizationJob", "InvokeModel", "ListCustomModels", - "ListFoundationModels", "ListGuardrails", "ListModelCustomizationJobs", - "ListTagsForResource", "StopModelCustomizationJob", "TagResource", - "UntagResource", "UpdateGuardrail", + "GetModelCustomizationJob", "InvokeModel", "InvokeModelWithResponseStream", + "ListCustomModels", "ListFoundationModels", "ListGuardrails", + "ListModelCustomizationJobs", "ListTagsForResource", + "StopModelCustomizationJob", "TagResource", "UntagResource", "UpdateGuardrail", }, } @@ -69,24 +70,25 @@ var pathRoutedOps = map[string][]string{ type ProviderScan struct { // Operations are the operation names the provider dispatches by hand. Operations []string - // Protocol is the wire protocol the provider declares at runtime, as the - // suffix of the plugin.ProtocolX constant it returns (e.g. "JSON11", - // "Query"). It can differ from the Smithy model's protocol, and the runtime - // follows the provider — the CRUD engine, for one, refuses anything but JSON. - Protocol string } -// ScanProviders returns, per registered service ID, what its provider dispatches -// by hand and which protocol it declares. The scan collects the string literals -// of every case clause in a service package, then keeps only those that name an -// operation in modelOps[serviceID]; a service with no model keeps every literal -// that looks like an operation name. +// ScanProviders returns, per registered service ID, the operations its provider +// dispatches by hand. // -// Intersecting with the model is what makes a crude literal scan safe: unrelated -// switches (protocol constants, expression tokens) contribute strings that no -// model declares, and a directory registering two services (iam also registers -// sts) splits correctly because each model claims only its own operations. -func ScanProviders(servicesDir string, modelOps map[string][]string) (map[string]ProviderScan, error) { +// The scan is deliberately narrow: it reads only the case literals of the keyed +// switches inside a provider's HandleRequest, keyed by the receiver type that +// Register binds to the service ID. That scoping is what makes a literal scan +// trustworthy — attribute-path switches in helpers (identitystore matches on +// "DisplayName") and HTTP-verb switches in path resolvers (pipes matches on +// "POST") live outside HandleRequest and never contribute, and a package +// registering two services (iam also registers sts) splits by receiver type +// rather than by guesswork. +// +// It deliberately does *not* intersect with the Smithy model: providers serve +// operations no in-tree model declares, and discarding them would understate +// the surface. dynamodbstreams alone dispatches 22 operations against a model +// that declares 4. +func ScanProviders(servicesDir string) (map[string]ProviderScan, error) { entries, err := os.ReadDir(servicesDir) if err != nil { return nil, fmt.Errorf("read services dir: %w", err) @@ -97,125 +99,244 @@ func ScanProviders(servicesDir string, modelOps map[string][]string) (map[string if !entry.IsDir() { continue } - dir := filepath.Join(servicesDir, entry.Name()) - ids, literals, protocol, err := scanServiceDir(dir) + pkg, err := scanServiceDir(filepath.Join(servicesDir, entry.Name())) if err != nil { return nil, err } - for _, id := range ids { - result[id] = ProviderScan{ - Operations: selectOps(id, literals, modelOps[id]), - Protocol: protocol, - } + for id, recvType := range pkg.serviceTypes { + result[id] = ProviderScan{Operations: opsFor(id, pkg.dispatchedOps(recvType))} } } return result, nil } -// JSONProtocol reports whether a scanned provider protocol is one the CRUD -// engine can serve. Mirrors crud.JSONProtocol, but over the constant name the -// provider returns rather than the wire string. -func JSONProtocol(scanned string) bool { - return strings.HasPrefix(scanned, "JSON") -} - -// selectOps narrows a package's case literals to the operations of one service. -func selectOps(serviceID string, literals map[string]bool, modelOperations []string) []string { +// opsFor resolves one service's operations, preferring the hand-maintained list +// for providers whose dispatch carries no operation-name literals. +func opsFor(serviceID string, scanned map[string]bool) []string { if declared, ok := pathRoutedOps[serviceID]; ok { return append([]string(nil), declared...) } - - var ops []string - if len(modelOperations) > 0 { - for _, op := range modelOperations { - if literals[op] { - ops = append(ops, op) - } - } - } else { - for lit := range literals { - ops = append(ops, lit) - } + ops := make([]string, 0, len(scanned)) + for op := range scanned { + ops = append(ops, op) } sort.Strings(ops) return ops } -// scanServiceDir returns the service IDs a package registers, every -// operation-shaped string literal used as a switch case in it, and the -// plugin.ProtocolX constant its provider returns. -func scanServiceDir(dir string) (ids []string, literals map[string]bool, protocol string, err error) { +// packageScan is one service package's providers, keyed by receiver type name. +type packageScan struct { + // serviceTypes maps a registered service ID to the provider type Register + // returns for it. + serviceTypes map[string]string + // methods maps a provider type to its methods by name, so the scan can + // follow HandleRequest into whatever it delegates dispatch to. + methods map[string]map[string]*ast.FuncDecl +} + +func scanServiceDir(dir string) (packageScan, error) { entries, err := os.ReadDir(dir) if err != nil { - return nil, nil, "", fmt.Errorf("read %s: %w", dir, err) + return packageScan{}, fmt.Errorf("read %s: %w", dir, err) } + pkg := packageScan{ + serviceTypes: make(map[string]string), + methods: make(map[string]map[string]*ast.FuncDecl), + } fset := token.NewFileSet() - literals = make(map[string]bool) - seenID := make(map[string]bool) for _, entry := range entries { name := entry.Name() if entry.IsDir() || !strings.HasSuffix(name, ".go") || strings.HasSuffix(name, "_test.go") { continue } - file, err := parser.ParseFile(fset, filepath.Join(dir, name), nil, 0) + path := filepath.Join(dir, name) + file, err := parser.ParseFile(fset, path, nil, 0) if err != nil { - return nil, nil, "", fmt.Errorf("parse %s: %w", filepath.Join(dir, name), err) + return packageScan{}, fmt.Errorf("parse %s: %w", path, err) } ast.Inspect(file, func(n ast.Node) bool { switch node := n.(type) { case *ast.CallExpr: - if id, ok := registeredServiceID(node); ok && !seenID[id] { - seenID[id] = true - ids = append(ids, id) + if id, typeName, ok := registeredService(node); ok { + pkg.serviceTypes[id] = typeName } case *ast.FuncDecl: - if p, ok := declaredProtocol(node); ok && protocol == "" { - protocol = p - } - case *ast.CaseClause: - for _, expr := range node.List { - if lit, ok := stringLiteral(expr); ok && opNamePattern.MatchString(lit) { - literals[lit] = true + if recv, ok := receiverType(node); ok { + if pkg.methods[recv] == nil { + pkg.methods[recv] = make(map[string]*ast.FuncDecl) } + pkg.methods[recv][node.Name.Name] = node } } return true }) } - sort.Strings(ids) - return ids, literals, protocol, nil + return pkg, nil } -// declaredProtocol extracts "JSON11" from a provider's -// `func (p *Provider) Protocol() plugin.ProtocolType { return plugin.ProtocolJSON11 }`. -func declaredProtocol(fn *ast.FuncDecl) (string, bool) { - if fn.Name.Name != "Protocol" || fn.Recv == nil || fn.Body == nil { +// dispatchedOps collects the operations a provider type dispatches, starting at +// its HandleRequest and following the methods it delegates to. Not every +// provider switches in HandleRequest itself: sqs branches on protocol into +// handleQueryRequest/handleJSONRequest, and kafka wraps handleRequest to +// camelCase the response. +func (p packageScan) dispatchedOps(recvType string) map[string]bool { + ops := make(map[string]bool) + visited := make(map[string]bool) + + var walk func(name string) + walk = func(name string) { + fn := p.methods[recvType][name] + if fn == nil || fn.Body == nil || visited[name] { + return + } + visited[name] = true + + collectCaseLiterals(fn.Body, ops) + for _, delegate := range delegateCalls(fn) { + walk(delegate) + } + } + walk("HandleRequest") + return ops +} + +// collectCaseLiterals reads the case literals of every keyed switch in a body. +// Keyed is the point: `switch op { case "GetItem": }` dispatches, whereas a +// tagless `switch { case remaining == 0: }` is control flow whose cases are +// expressions, not operation names. +func collectCaseLiterals(body *ast.BlockStmt, ops map[string]bool) { + ast.Inspect(body, func(n ast.Node) bool { + sw, ok := n.(*ast.SwitchStmt) + if !ok || sw.Tag == nil { + return true + } + for _, stmt := range sw.Body.List { + clause, ok := stmt.(*ast.CaseClause) + if !ok { + continue + } + for _, expr := range clause.List { + if lit, ok := stringLiteral(expr); ok && opNamePattern.MatchString(lit) { + ops[lit] = true + } + } + } + return true + }) +} + +// delegateCalls returns the names of same-receiver methods a function hands +// dispatch off to, so the scan can follow them. +// +// Inside a dispatch switch only the default clause counts. `case "GetApi": +// p.getApi(…)` is a per-operation handler, and following it would drag every +// helper's internal switch into the operation set; `default: p.handleStub(op)` +// is the rest of the dispatch, and appsync serves 37 operations through one. +func delegateCalls(fn *ast.FuncDecl) []string { + recv := receiverName(fn) + if recv == "" { + return nil + } + var names []string + var visit func(n ast.Node) bool + visit = func(n ast.Node) bool { + switch node := n.(type) { + case *ast.SwitchStmt: + for _, stmt := range node.Body.List { + clause, ok := stmt.(*ast.CaseClause) + if !ok || clause.List != nil { + continue + } + for _, s := range clause.Body { + ast.Inspect(s, visit) + } + } + return false + case *ast.TypeSwitchStmt: + return false + case *ast.CallExpr: + if sel, ok := node.Fun.(*ast.SelectorExpr); ok { + if ident, ok := sel.X.(*ast.Ident); ok && ident.Name == recv { + names = append(names, sel.Sel.Name) + } + } + } + return true + } + ast.Inspect(fn.Body, visit) + return names +} + +// receiverName returns "p" from `func (p *SQSProvider) …`. +func receiverName(fn *ast.FuncDecl) string { + if fn.Recv == nil || len(fn.Recv.List) != 1 || len(fn.Recv.List[0].Names) != 1 { + return "" + } + return fn.Recv.List[0].Names[0].Name +} + +// receiverType returns "SQSProvider" from `func (p *SQSProvider) …`. +func receiverType(fn *ast.FuncDecl) (string, bool) { + if fn.Recv == nil || len(fn.Recv.List) != 1 { + return "", false + } + expr := fn.Recv.List[0].Type + if star, ok := expr.(*ast.StarExpr); ok { + expr = star.X + } + ident, ok := expr.(*ast.Ident) + if !ok { return "", false } - for _, stmt := range fn.Body.List { - ret, ok := stmt.(*ast.ReturnStmt) - if !ok || len(ret.Results) != 1 { + return ident.Name, true +} + +// registeredService extracts ("sqs", "SQSProvider") from +// `plugin.DefaultRegistry.Register("sqs", func() plugin.ServicePlugin { return &SQSProvider{} })`. +func registeredService(call *ast.CallExpr) (serviceID, typeName string, ok bool) { + sel, isSel := call.Fun.(*ast.SelectorExpr) + if !isSel || sel.Sel.Name != "Register" || len(call.Args) != 2 { + return "", "", false + } + serviceID, ok = stringLiteral(call.Args[0]) + if !ok { + return "", "", false + } + factory, isFunc := call.Args[1].(*ast.FuncLit) + if !isFunc || factory.Body == nil { + return "", "", false + } + for _, stmt := range factory.Body.List { + ret, isRet := stmt.(*ast.ReturnStmt) + if !isRet || len(ret.Results) != 1 { continue } - sel, ok := ret.Results[0].(*ast.SelectorExpr) - if !ok || !strings.HasPrefix(sel.Sel.Name, "Protocol") { - continue + if name, found := constructedType(ret.Results[0]); found { + return serviceID, name, true } - return strings.TrimPrefix(sel.Sel.Name, "Protocol"), true } - return "", false + return "", "", false } -// registeredServiceID extracts "sqs" from plugin.DefaultRegistry.Register("sqs", …). -func registeredServiceID(call *ast.CallExpr) (string, bool) { - sel, ok := call.Fun.(*ast.SelectorExpr) - if !ok || sel.Sel.Name != "Register" || len(call.Args) == 0 { - return "", false +// constructedType returns "SQSProvider" from `&SQSProvider{…}` or `NewSQSProvider()`. +func constructedType(expr ast.Expr) (string, bool) { + if unary, ok := expr.(*ast.UnaryExpr); ok { + expr = unary.X } - return stringLiteral(call.Args[0]) + switch node := expr.(type) { + case *ast.CompositeLit: + if ident, ok := node.Type.(*ast.Ident); ok { + return ident.Name, true + } + case *ast.CallExpr: + if ident, ok := node.Fun.(*ast.Ident); ok { + return strings.TrimPrefix(ident.Name, "New"), true + } + } + return "", false } func stringLiteral(expr ast.Expr) (string, bool) { diff --git a/internal/codegen/scan_handverified_test.go b/internal/codegen/scan_handverified_test.go index 21913d6..e418c5b 100644 --- a/internal/codegen/scan_handverified_test.go +++ b/internal/codegen/scan_handverified_test.go @@ -13,7 +13,7 @@ import ( "github.com/stretchr/testify/require" ) -// modelOperationsForTest reads the real Smithy models so the scan is exercised +// modelOperationsForTest reads the real Smithy models so the scan is checked // against the same input the generator uses. func modelOperationsForTest(t *testing.T) map[string][]string { t.Helper() @@ -41,7 +41,7 @@ func modelOperationsForTest(t *testing.T) map[string][]string { } func TestScanProviders(t *testing.T) { - scans, err := ScanProviders("../services", modelOperationsForTest(t)) + scans, err := ScanProviders("../services") require.NoError(t, err) got := make(map[string][]string, len(scans)) for id, scan := range scans { @@ -56,7 +56,7 @@ func TestScanProviders(t *testing.T) { assert.Contains(t, got["sqs"], "SendMessage") assert.Contains(t, got["dynamodb"], "PutItem") - // A directory registering two services splits by model: sts lives in + // A package registering two services splits by receiver type: sts lives in // internal/services/iam, and neither service claims the other's operations. assert.Contains(t, got["sts"], "AssumeRole") assert.NotContains(t, got["iam"], "AssumeRole") @@ -72,14 +72,37 @@ func TestScanProviders(t *testing.T) { } } -func TestScanProvidersIgnoresNonOperationLiterals(t *testing.T) { +// TestScanProvidersKeepsOperationsTheModelOmits is the regression that made the +// scan drop real coverage: it used to intersect with the Smithy model, so every +// operation a provider serves beyond its in-tree model vanished from the +// manifest. dynamodbstreams dispatches 22 operations against a 4-operation +// model; acm serves UpdateCertificate, which its model does not declare. +func TestScanProvidersKeepsOperationsTheModelOmits(t *testing.T) { + scans, err := ScanProviders("../services") + require.NoError(t, err) + models := modelOperationsForTest(t) + + assert.Greater(t, len(scans["dynamodbstreams"].Operations), len(models["dynamodbstreams"]), + "the provider serves more than the model declares") + assert.Contains(t, scans["dynamodbstreams"].Operations, "ListStreamArns") + assert.Contains(t, scans["acm"].Operations, "UpdateCertificate") +} + +// TestScanProvidersIgnoresLiteralsOutsideDispatch is the other half of dropping +// the model intersection: without it, the only thing keeping non-operation +// strings out of the manifest is the scan's scope. Attribute-path switches and +// HTTP-verb switches live in helpers, not HandleRequest, and must not leak — +// identitystore matched on "DisplayName", pipes on "POST". +func TestScanProvidersIgnoresLiteralsOutsideDispatch(t *testing.T) { dir := t.TempDir() pkg := filepath.Join(dir, "demo") require.NoError(t, os.MkdirAll(pkg, 0o755)) src := `package demo -func init() { plugin.DefaultRegistry.Register("demo", nil) } +func init() { + plugin.DefaultRegistry.Register("demo", func() plugin.ServicePlugin { return &Provider{} }) +} func (p *Provider) HandleRequest(op string) string { switch op { @@ -87,28 +110,46 @@ func (p *Provider) HandleRequest(op string) string { return "get" case "ListWidgets": return "list" + case "GET", "id": + return "not an operation name" } - switch op { - case "attribute_exists", "GET", "NotAnOperation": - return "noise" + return "" +} + +func applyPatch(path string) string { + switch path { + case "DisplayName", "Description": + return "attribute, not an operation" } return "" } ` require.NoError(t, os.WriteFile(filepath.Join(pkg, "provider.go"), []byte(src), 0o600)) - got, err := ScanProviders(dir, map[string][]string{"demo": {"GetWidget", "ListWidgets"}}) + got, err := ScanProviders(dir) require.NoError(t, err) - assert.Equal(t, []string{"GetWidget", "ListWidgets"}, got["demo"].Operations, - "literals the model does not declare must be dropped") + assert.Equal(t, []string{"GetWidget", "ListWidgets"}, got["demo"].Operations) +} + +func TestScanProvidersRealServicesCarryNoStrays(t *testing.T) { + scans, err := ScanProviders("../services") + require.NoError(t, err) + + for _, stray := range []string{"DisplayName", "Description", "Emails"} { + assert.NotContains(t, scans["identitystore"].Operations, stray) + } + for _, stray := range []string{"POST", "DELETE"} { + assert.NotContains(t, scans["pipes"].Operations, stray) + } } // TestPathRoutedOverridesAreReal guards the hand-maintained override: every // declared operation must exist in the service's model, except the documented -// bedrock-runtime borrow. +// bedrock-runtime borrows. func TestPathRoutedOverridesAreReal(t *testing.T) { models := modelOperationsForTest(t) - known := map[string]bool{"InvokeModel": true} // bedrock-runtime, see pathRoutedOps + // bedrock-runtime operations, served by the bedrock provider. See pathRoutedOps. + known := map[string]bool{"InvokeModel": true, "InvokeModelWithResponseStream": true} for id, declared := range pathRoutedOps { modelSet := make(map[string]bool, len(models[id])) @@ -126,36 +167,12 @@ func TestPathRoutedOverridesAreReal(t *testing.T) { // TestScanProvidersIsDeterministic keeps generated output stable across runs. func TestScanProvidersIsDeterministic(t *testing.T) { - models := modelOperationsForTest(t) - first, err := ScanProviders("../services", models) + first, err := ScanProviders("../services") require.NoError(t, err) - second, err := ScanProviders("../services", models) + second, err := ScanProviders("../services") require.NoError(t, err) a, _ := json.Marshal(first) b, _ := json.Marshal(second) assert.JSONEq(t, string(a), string(b)) } - -// TestScanProvidersReadsProtocol pins the other half of the scan: the manifest -// must know the protocol a provider actually serves, which can differ from the -// Smithy model's. cloudwatch is the case that matters — its model declares JSON -// while the provider answers Query, and the CRUD engine serves only JSON. -func TestScanProvidersReadsProtocol(t *testing.T) { - scans, err := ScanProviders("../services", modelOperationsForTest(t)) - require.NoError(t, err) - - assert.Equal(t, "Query", scans["cloudwatch"].Protocol) - assert.Equal(t, "Query", scans["sqs"].Protocol) - assert.Equal(t, "JSON11", scans["kms"].Protocol) - assert.Equal(t, "JSON10", scans["dynamodb"].Protocol) - assert.Equal(t, "RESTXML", scans["s3"].Protocol) - - assert.False(t, JSONProtocol("Query")) - assert.False(t, JSONProtocol("RESTJSON"), "rest-json carries no X-Amz-Target, so the engine cannot serve it") - assert.True(t, JSONProtocol("JSON11")) - - for id, scan := range scans { - assert.NotEmpty(t, scan.Protocol, "%s: provider declares no protocol", id) - } -} diff --git a/internal/codegen/templates/fidelity_manifest.go.tmpl b/internal/codegen/templates/fidelity_manifest.go.tmpl index 8ca4cbb..237e044 100644 --- a/internal/codegen/templates/fidelity_manifest.go.tmpl +++ b/internal/codegen/templates/fidelity_manifest.go.tmpl @@ -6,8 +6,9 @@ // to "can I trust this call?" — see docs/fidelity-manifest.md. // // The manifest is derived, never hand-written: the operation universe comes from -// the in-tree Smithy models, auto-crud from the generated CRUD registry, and -// hand-verified from the dispatch literals of each provider. +// the in-tree Smithy models unioned with what providers serve, auto-crud from +// the generated CRUD registry, and hand-verified from the dispatch literals of +// each provider's HandleRequest. package fidelity // Tier is how faithfully an operation is served. @@ -19,7 +20,12 @@ const ( // TierAutoCRUD is served by the generic CRUD engine with plausible, // store-backed responses: no validation, no business logic. TierAutoCRUD Tier = "auto-crud" - // TierUnimplemented returns an honest InvalidAction error. + // TierUnimplemented is not served: the call fails with an error rather than + // a made-up success. The error is the provider's own, not one shared code — + // JSON and Query services fall through to InvalidAction (HTTP 400), while + // the path-routed providers answer in their own vocabulary (s3 + // MethodNotAllowed, lambda ResourceNotFoundException, bedrock + // UnsupportedOperation). TierUnimplemented Tier = "unimplemented" ) diff --git a/internal/generated/crudregistry/registry_gen.go b/internal/generated/crudregistry/registry_gen.go index b30aeb1..a1d13e8 100644 --- a/internal/generated/crudregistry/registry_gen.go +++ b/internal/generated/crudregistry/registry_gen.go @@ -164,6 +164,45 @@ func init() { "UpdateEventDataStore": {Verb: "Update", Resource: "EventDataStore", OutputListKey: "AdvancedEventSelectors", OutputItemKey: ""}, "UpdateTrail": {Verb: "Update", Resource: "Trail", OutputListKey: "", OutputItemKey: ""}, }) + crud.Register("cloudwatch", map[string]crud.OpMeta{ + "DeleteAlarmMuteRule": {Verb: "Delete", Resource: "AlarmMuteRule", OutputListKey: "", OutputItemKey: ""}, + "DeleteAlarms": {Verb: "Delete", Resource: "Alarm", OutputListKey: "", OutputItemKey: ""}, + "DeleteAnomalyDetector": {Verb: "Delete", Resource: "AnomalyDetector", OutputListKey: "", OutputItemKey: ""}, + "DeleteDashboards": {Verb: "Delete", Resource: "Dashboard", OutputListKey: "", OutputItemKey: ""}, + "DeleteInsightRules": {Verb: "Delete", Resource: "InsightRule", OutputListKey: "Failures", OutputItemKey: ""}, + "DeleteMetricStream": {Verb: "Delete", Resource: "MetricStream", OutputListKey: "", OutputItemKey: ""}, + "DescribeAlarmContributors": {Verb: "Get", Resource: "AlarmContributor", OutputListKey: "AlarmContributors", OutputItemKey: ""}, + "DescribeAlarmHistory": {Verb: "Get", Resource: "AlarmHistory", OutputListKey: "AlarmHistoryItems", OutputItemKey: ""}, + "DescribeAlarms": {Verb: "Get", Resource: "Alarm", OutputListKey: "CompositeAlarms", OutputItemKey: ""}, + "DescribeAlarmsForMetric": {Verb: "Get", Resource: "AlarmsForMetric", OutputListKey: "MetricAlarms", OutputItemKey: ""}, + "DescribeAnomalyDetectors": {Verb: "Get", Resource: "AnomalyDetector", OutputListKey: "AnomalyDetectors", OutputItemKey: ""}, + "DescribeInsightRules": {Verb: "Get", Resource: "InsightRule", OutputListKey: "InsightRules", OutputItemKey: ""}, + "GetAlarmMuteRule": {Verb: "Get", Resource: "AlarmMuteRule", OutputListKey: "", OutputItemKey: "MuteTargets"}, + "GetDashboard": {Verb: "Get", Resource: "Dashboard", OutputListKey: "", OutputItemKey: ""}, + "GetInsightRuleReport": {Verb: "Get", Resource: "InsightRuleReport", OutputListKey: "Contributors", OutputItemKey: ""}, + "GetMetricData": {Verb: "Get", Resource: "MetricData", OutputListKey: "Messages", OutputItemKey: ""}, + "GetMetricStatistics": {Verb: "Get", Resource: "MetricStatistic", OutputListKey: "Datapoints", OutputItemKey: ""}, + "GetMetricStream": {Verb: "Get", Resource: "MetricStream", OutputListKey: "ExcludeFilters", OutputItemKey: ""}, + "GetMetricWidgetImage": {Verb: "Get", Resource: "MetricWidgetImage", OutputListKey: "", OutputItemKey: ""}, + "GetOTelEnrichment": {Verb: "Get", Resource: "OTelEnrichment", OutputListKey: "", OutputItemKey: ""}, + "ListAlarmMuteRules": {Verb: "List", Resource: "AlarmMuteRule", OutputListKey: "AlarmMuteRuleSummaries", OutputItemKey: ""}, + "ListDashboards": {Verb: "List", Resource: "Dashboard", OutputListKey: "DashboardEntries", OutputItemKey: ""}, + "ListManagedInsightRules": {Verb: "List", Resource: "ManagedInsightRule", OutputListKey: "ManagedRules", OutputItemKey: ""}, + "ListMetricStreams": {Verb: "List", Resource: "MetricStream", OutputListKey: "Entries", OutputItemKey: ""}, + "ListMetrics": {Verb: "List", Resource: "Metric", OutputListKey: "Metrics", OutputItemKey: ""}, + "ListTagsForResource": {Verb: "List", Resource: "TagsForResource", OutputListKey: "Tags", OutputItemKey: ""}, + "PutAlarmMuteRule": {Verb: "Update", Resource: "AlarmMuteRule", OutputListKey: "", OutputItemKey: ""}, + "PutAnomalyDetector": {Verb: "Update", Resource: "AnomalyDetector", OutputListKey: "", OutputItemKey: ""}, + "PutCompositeAlarm": {Verb: "Update", Resource: "CompositeAlarm", OutputListKey: "", OutputItemKey: ""}, + "PutDashboard": {Verb: "Update", Resource: "Dashboard", OutputListKey: "DashboardValidationMessages", OutputItemKey: ""}, + "PutInsightRule": {Verb: "Update", Resource: "InsightRule", OutputListKey: "", OutputItemKey: ""}, + "PutManagedInsightRules": {Verb: "Update", Resource: "ManagedInsightRule", OutputListKey: "Failures", OutputItemKey: ""}, + "PutMetricAlarm": {Verb: "Update", Resource: "MetricAlarm", OutputListKey: "", OutputItemKey: ""}, + "PutMetricData": {Verb: "Update", Resource: "MetricData", OutputListKey: "", OutputItemKey: ""}, + "PutMetricStream": {Verb: "Update", Resource: "MetricStream", OutputListKey: "", OutputItemKey: ""}, + "TagResource": {Verb: "Tag", Resource: "Resource", OutputListKey: "", OutputItemKey: ""}, + "UntagResource": {Verb: "Untag", Resource: "Resource", OutputListKey: "", OutputItemKey: ""}, + }) crud.Register("cloudwatchlogs", map[string]crud.OpMeta{ "CreateDelivery": {Verb: "Create", Resource: "Delivery", OutputListKey: "", OutputItemKey: "delivery"}, "CreateExportTask": {Verb: "Create", Resource: "ExportTask", OutputListKey: "", OutputItemKey: ""}, @@ -1869,6 +1908,20 @@ func init() { "UpdateProtectionGroup": {Verb: "Update", Resource: "ProtectionGroup", OutputListKey: "", OutputItemKey: ""}, "UpdateSubscription": {Verb: "Update", Resource: "Subscription", OutputListKey: "", OutputItemKey: ""}, }) + crud.Register("sqs", map[string]crud.OpMeta{ + "CreateQueue": {Verb: "Create", Resource: "Queue", OutputListKey: "", OutputItemKey: ""}, + "DeleteMessage": {Verb: "Delete", Resource: "Message", OutputListKey: "", OutputItemKey: ""}, + "DeleteMessageBatch": {Verb: "Delete", Resource: "MessageBatch", OutputListKey: "Failed", OutputItemKey: ""}, + "DeleteQueue": {Verb: "Delete", Resource: "Queue", OutputListKey: "", OutputItemKey: ""}, + "GetQueueAttributes": {Verb: "Get", Resource: "QueueAttribute", OutputListKey: "", OutputItemKey: ""}, + "GetQueueUrl": {Verb: "Get", Resource: "QueueUrl", OutputListKey: "", OutputItemKey: ""}, + "ListDeadLetterSourceQueues": {Verb: "List", Resource: "DeadLetterSourceQueue", OutputListKey: "queueUrls", OutputItemKey: ""}, + "ListMessageMoveTasks": {Verb: "List", Resource: "MessageMoveTask", OutputListKey: "Results", OutputItemKey: ""}, + "ListQueueTags": {Verb: "List", Resource: "QueueTag", OutputListKey: "", OutputItemKey: ""}, + "ListQueues": {Verb: "List", Resource: "Queue", OutputListKey: "QueueUrls", OutputItemKey: ""}, + "TagQueue": {Verb: "Tag", Resource: "Queue", OutputListKey: "", OutputItemKey: ""}, + "UntagQueue": {Verb: "Untag", Resource: "Queue", OutputListKey: "", OutputItemKey: ""}, + }) crud.Register("ssm", map[string]crud.OpMeta{ "CreateActivation": {Verb: "Create", Resource: "Activation", OutputListKey: "", OutputItemKey: ""}, "CreateAssociation": {Verb: "Create", Resource: "Association", OutputListKey: "", OutputItemKey: "AssociationDescription"}, diff --git a/internal/generated/fidelity/manifest_gen.go b/internal/generated/fidelity/manifest_gen.go index d99385d..99e93c1 100644 --- a/internal/generated/fidelity/manifest_gen.go +++ b/internal/generated/fidelity/manifest_gen.go @@ -52,23 +52,44 @@ var Services = map[string]Service{ "StartPrimaryEmailUpdate": TierHandVerified, }}, "acm": {ModelBacked: true, Operations: map[string]Tier{ - "AddTagsToCertificate": TierHandVerified, - "DeleteCertificate": TierHandVerified, - "DescribeCertificate": TierHandVerified, - "ExportCertificate": TierHandVerified, - "GetAccountConfiguration": TierHandVerified, - "GetCertificate": TierHandVerified, - "ImportCertificate": TierHandVerified, - "ListCertificates": TierHandVerified, - "ListTagsForCertificate": TierHandVerified, - "PutAccountConfiguration": TierHandVerified, - "RemoveTagsFromCertificate": TierHandVerified, - "RenewCertificate": TierHandVerified, - "RequestCertificate": TierHandVerified, - "ResendValidationEmail": TierHandVerified, - "RevokeCertificate": TierHandVerified, - "SearchCertificates": TierUnimplemented, - "UpdateCertificateOptions": TierHandVerified, + "AddTagsToCertificate": TierHandVerified, + "CancelCertificateIssuance": TierHandVerified, + "CreatePermission": TierHandVerified, + "DeleteCertificate": TierHandVerified, + "DeletePermission": TierHandVerified, + "DescribeCertificate": TierHandVerified, + "DescribeCertificateAuthority": TierHandVerified, + "DescribeCertificateEvents": TierHandVerified, + "DescribeCertificateValidation": TierHandVerified, + "ExportCertificate": TierHandVerified, + "GetAccountConfiguration": TierHandVerified, + "GetCSR": TierHandVerified, + "GetCertificate": TierHandVerified, + "GetCertificateAuthorityCertificate": TierHandVerified, + "GetCertificateAuthorityCsr": TierHandVerified, + "GetCertificateChain": TierHandVerified, + "GetCertificateRenewal": TierHandVerified, + "GetIssuerCertificate": TierHandVerified, + "ImportCertificate": TierHandVerified, + "ListCertificateAuthorities": TierHandVerified, + "ListCertificateTransparency": TierHandVerified, + "ListCertificates": TierHandVerified, + "ListIssuers": TierHandVerified, + "ListPermissions": TierHandVerified, + "ListRenewalEvents": TierHandVerified, + "ListTagsForCertificate": TierHandVerified, + "PutAccountConfiguration": TierHandVerified, + "PutConfigurationRecorder": TierHandVerified, + "RemoveTagsFromCertificate": TierHandVerified, + "RenewCertificate": TierHandVerified, + "RequestCertificate": TierHandVerified, + "ResendValidationEmail": TierHandVerified, + "RevokeCertificate": TierHandVerified, + "SearchCertificates": TierUnimplemented, + "StartCertificateIssuance": TierHandVerified, + "UpdateCertificate": TierHandVerified, + "UpdateCertificateOptions": TierHandVerified, + "WaitForValidation": TierHandVerified, }}, "acmpca": {ModelBacked: true, Operations: map[string]Tier{ "CreateCertificateAuthority": TierHandVerified, @@ -287,20 +308,46 @@ var Services = map[string]Service{ "ValidateConfiguration": TierHandVerified, }}, "applicationautoscaling": {ModelBacked: true, Operations: map[string]Tier{ - "DeleteScalingPolicy": TierHandVerified, - "DeleteScheduledAction": TierHandVerified, - "DeregisterScalableTarget": TierHandVerified, - "DescribeScalableTargets": TierHandVerified, - "DescribeScalingActivities": TierHandVerified, - "DescribeScalingPolicies": TierHandVerified, - "DescribeScheduledActions": TierHandVerified, - "GetPredictiveScalingForecast": TierHandVerified, - "ListTagsForResource": TierHandVerified, - "PutScalingPolicy": TierHandVerified, - "PutScheduledAction": TierHandVerified, - "RegisterScalableTarget": TierHandVerified, - "TagResource": TierHandVerified, - "UntagResource": TierHandVerified, + "BatchDeleteScalingPolicy": TierHandVerified, + "BatchDeleteScheduledAction": TierHandVerified, + "BatchDeregisterScalableTarget": TierHandVerified, + "BatchPutScalingPolicy": TierHandVerified, + "BatchPutScheduledAction": TierHandVerified, + "BatchRegisterScalableTarget": TierHandVerified, + "DeleteCustomizedMetricStatistics": TierHandVerified, + "DeleteScalingPolicy": TierHandVerified, + "DeleteScheduledAction": TierHandVerified, + "DeleteTargetTrackingScalingPolicy": TierHandVerified, + "DeregisterScalableTarget": TierHandVerified, + "DescribeAccountLimits": TierHandVerified, + "DescribeCustomizedMetricStatistics": TierHandVerified, + "DescribePredictiveScalingForecast": TierHandVerified, + "DescribeResourceActions": TierHandVerified, + "DescribeScalableTargets": TierHandVerified, + "DescribeScalingActivities": TierHandVerified, + "DescribeScalingPolicies": TierHandVerified, + "DescribeScheduledActions": TierHandVerified, + "DescribeServiceQuotas": TierHandVerified, + "DescribeStatistics": TierHandVerified, + "GetMetricStatistics": TierHandVerified, + "GetPredictiveScalingForecast": TierHandVerified, + "GetScalingHealth": TierHandVerified, + "GetScalingStatus": TierHandVerified, + "GetTargetTrackingScalingPolicy": TierHandVerified, + "ListScalableTargetsByService": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "PutCustomizedMetricStatistics": TierHandVerified, + "PutPredictiveScalingForecast": TierHandVerified, + "PutScalingPolicy": TierHandVerified, + "PutScheduledAction": TierHandVerified, + "PutTargetTrackingScalingPolicy": TierHandVerified, + "RecordScalingActivity": TierHandVerified, + "RegisterScalableTarget": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateScalableTarget": TierHandVerified, + "UpdateScalingPolicy": TierHandVerified, + "UpdateScheduledAction": TierHandVerified, }}, "appsync": {ModelBacked: true, Operations: map[string]Tier{ "AssociateApi": TierHandVerified, @@ -314,6 +361,7 @@ var Services = map[string]Service{ "CreateDomainName": TierHandVerified, "CreateFunction": TierHandVerified, "CreateGraphqlApi": TierHandVerified, + "CreateMergedApiAssociation": TierHandVerified, "CreateResolver": TierHandVerified, "CreateType": TierHandVerified, "DeleteApi": TierHandVerified, @@ -324,6 +372,7 @@ var Services = map[string]Service{ "DeleteDomainName": TierHandVerified, "DeleteFunction": TierHandVerified, "DeleteGraphqlApi": TierHandVerified, + "DeleteMergedApiAssociation": TierHandVerified, "DeleteResolver": TierHandVerified, "DeleteType": TierHandVerified, "DisassociateApi": TierHandVerified, @@ -345,6 +394,7 @@ var Services = map[string]Service{ "GetIntrospectionSchema": TierHandVerified, "GetResolver": TierHandVerified, "GetSchemaCreationStatus": TierHandVerified, + "GetSchemaError": TierHandVerified, "GetSourceApiAssociation": TierHandVerified, "GetType": TierHandVerified, "ListApiKeys": TierHandVerified, @@ -354,6 +404,7 @@ var Services = map[string]Service{ "ListDomainNames": TierHandVerified, "ListFunctions": TierHandVerified, "ListGraphqlApis": TierHandVerified, + "ListMergedApiAssociations": TierHandVerified, "ListResolvers": TierHandVerified, "ListResolversByFunction": TierHandVerified, "ListSourceApiAssociations": TierHandVerified, @@ -738,6 +789,7 @@ var Services = map[string]Service{ "GetResourcePolicy": TierUnimplemented, "GetUseCaseForModelAccess": TierUnimplemented, "InvokeModel": TierHandVerified, + "InvokeModelWithResponseStream": TierHandVerified, "ListAutomatedReasoningPolicies": TierUnimplemented, "ListAutomatedReasoningPolicyBuildWorkflows": TierUnimplemented, "ListAutomatedReasoningPolicyTestCases": TierUnimplemented, @@ -1159,45 +1211,45 @@ var Services = map[string]Service{ "UpdateTrail": TierHandVerified, }}, "cloudwatch": {ModelBacked: true, Operations: map[string]Tier{ - "DeleteAlarmMuteRule": TierUnimplemented, + "DeleteAlarmMuteRule": TierAutoCRUD, "DeleteAlarms": TierHandVerified, "DeleteAnomalyDetector": TierHandVerified, "DeleteDashboards": TierHandVerified, - "DeleteInsightRules": TierUnimplemented, - "DeleteMetricStream": TierUnimplemented, - "DescribeAlarmContributors": TierUnimplemented, + "DeleteInsightRules": TierAutoCRUD, + "DeleteMetricStream": TierAutoCRUD, + "DescribeAlarmContributors": TierAutoCRUD, "DescribeAlarmHistory": TierHandVerified, "DescribeAlarms": TierHandVerified, "DescribeAlarmsForMetric": TierHandVerified, "DescribeAnomalyDetectors": TierHandVerified, - "DescribeInsightRules": TierUnimplemented, + "DescribeInsightRules": TierAutoCRUD, "DisableAlarmActions": TierHandVerified, "DisableInsightRules": TierUnimplemented, "EnableAlarmActions": TierHandVerified, "EnableInsightRules": TierUnimplemented, - "GetAlarmMuteRule": TierUnimplemented, + "GetAlarmMuteRule": TierAutoCRUD, "GetDashboard": TierHandVerified, - "GetInsightRuleReport": TierUnimplemented, + "GetInsightRuleReport": TierAutoCRUD, "GetMetricData": TierHandVerified, "GetMetricStatistics": TierHandVerified, - "GetMetricStream": TierUnimplemented, - "GetMetricWidgetImage": TierUnimplemented, - "GetOTelEnrichment": TierUnimplemented, - "ListAlarmMuteRules": TierUnimplemented, + "GetMetricStream": TierAutoCRUD, + "GetMetricWidgetImage": TierAutoCRUD, + "GetOTelEnrichment": TierAutoCRUD, + "ListAlarmMuteRules": TierAutoCRUD, "ListDashboards": TierHandVerified, - "ListManagedInsightRules": TierUnimplemented, - "ListMetricStreams": TierUnimplemented, + "ListManagedInsightRules": TierAutoCRUD, + "ListMetricStreams": TierAutoCRUD, "ListMetrics": TierHandVerified, "ListTagsForResource": TierHandVerified, - "PutAlarmMuteRule": TierUnimplemented, + "PutAlarmMuteRule": TierAutoCRUD, "PutAnomalyDetector": TierHandVerified, "PutCompositeAlarm": TierHandVerified, "PutDashboard": TierHandVerified, - "PutInsightRule": TierUnimplemented, - "PutManagedInsightRules": TierUnimplemented, + "PutInsightRule": TierAutoCRUD, + "PutManagedInsightRules": TierAutoCRUD, "PutMetricAlarm": TierHandVerified, "PutMetricData": TierHandVerified, - "PutMetricStream": TierUnimplemented, + "PutMetricStream": TierAutoCRUD, "SetAlarmState": TierHandVerified, "StartMetricStreams": TierUnimplemented, "StartOTelEnrichment": TierUnimplemented, @@ -1415,6 +1467,7 @@ var Services = map[string]Service{ "ListSharedProjects": TierAutoCRUD, "ListSharedReportGroups": TierAutoCRUD, "ListSourceCredentials": TierHandVerified, + "ListTagsForResource": TierHandVerified, "PutResourcePolicy": TierAutoCRUD, "RetryBuild": TierHandVerified, "RetryBuildBatch": TierUnimplemented, @@ -1426,6 +1479,8 @@ var Services = map[string]Service{ "StopBuild": TierHandVerified, "StopBuildBatch": TierUnimplemented, "StopSandbox": TierUnimplemented, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, "UpdateFleet": TierHandVerified, "UpdateProject": TierHandVerified, "UpdateProjectVisibility": TierAutoCRUD, @@ -1610,6 +1665,7 @@ var Services = map[string]Service{ "DeregisterWebhookWithThirdParty": TierHandVerified, "DisableStageTransition": TierHandVerified, "EnableStageTransition": TierHandVerified, + "GetActionExecution": TierHandVerified, "GetActionType": TierHandVerified, "GetJobDetails": TierHandVerified, "GetPipeline": TierHandVerified, @@ -1639,11 +1695,13 @@ var Services = map[string]Service{ "RetryStageExecution": TierHandVerified, "RollbackStage": TierHandVerified, "StartPipelineExecution": TierHandVerified, + "StartPipelineExecutionResumption": TierHandVerified, "StopPipelineExecution": TierHandVerified, "TagResource": TierHandVerified, "UntagResource": TierHandVerified, "UpdateActionType": TierHandVerified, "UpdatePipeline": TierHandVerified, + "UpdatePipelineSettings": TierHandVerified, }}, "cognitoidentity": {ModelBacked: true, Operations: map[string]Tier{ "CreateIdentityPool": TierHandVerified, @@ -2094,18 +2152,42 @@ var Services = map[string]Service{ "UpdateTimeToLive": TierHandVerified, }}, "dynamodbstreams": {ModelBacked: true, Operations: map[string]Tier{ - "DescribeStream": TierHandVerified, - "GetRecords": TierHandVerified, - "GetShardIterator": TierHandVerified, - "ListStreams": TierHandVerified, + "AddTagsToStream": TierHandVerified, + "DescribeContinuousBackups": TierHandVerified, + "DescribeLimits": TierHandVerified, + "DescribeStream": TierHandVerified, + "DescribeStreamSummary": TierHandVerified, + "DisableStream": TierHandVerified, + "EnableStream": TierHandVerified, + "GetRecords": TierHandVerified, + "GetShardIterator": TierHandVerified, + "GetShardIteratorBatch": TierHandVerified, + "GetStreamBillingMode": TierHandVerified, + "ListShards": TierHandVerified, + "ListStreamArns": TierHandVerified, + "ListStreams": TierHandVerified, + "ListTagsOfStream": TierHandVerified, + "MergeShards": TierHandVerified, + "PurgeStream": TierHandVerified, + "PutRecord": TierHandVerified, + "RemoveTagsFromStream": TierHandVerified, + "ResetStreamIterator": TierHandVerified, + "SplitShard": TierHandVerified, + "UpdateStream": TierHandVerified, }}, "ebs": {ModelBacked: true, Operations: map[string]Tier{ - "CompleteSnapshot": TierHandVerified, - "GetSnapshotBlock": TierHandVerified, - "ListChangedBlocks": TierHandVerified, - "ListSnapshotBlocks": TierHandVerified, - "PutSnapshotBlock": TierHandVerified, - "StartSnapshot": TierHandVerified, + "CompleteSnapshot": TierHandVerified, + "CopySnapshot": TierHandVerified, + "DescribeVolumesModifications": TierHandVerified, + "EnableSnapshotTierArchival": TierHandVerified, + "GetSnapshotBlock": TierHandVerified, + "ListChangedBlocks": TierHandVerified, + "ListSnapshotBlocks": TierHandVerified, + "ModifySnapshotAttribute": TierHandVerified, + "ModifyVolume": TierHandVerified, + "PutSnapshotBlock": TierHandVerified, + "RestoreSnapshotTier": TierHandVerified, + "StartSnapshot": TierHandVerified, }}, "ec2": {ModelBacked: true, Operations: map[string]Tier{ "AcceptAddressTransfer": TierUnimplemented, @@ -2939,10 +3021,12 @@ var Services = map[string]Service{ "DeleteDaemon": TierAutoCRUD, "DeleteDaemonTaskDefinition": TierAutoCRUD, "DeleteExpressGatewayService": TierAutoCRUD, + "DeleteScalingPolicy": TierHandVerified, "DeleteService": TierHandVerified, "DeleteTaskDefinitions": TierAutoCRUD, "DeleteTaskSet": TierHandVerified, "DeregisterContainerInstance": TierHandVerified, + "DeregisterScalableTarget": TierHandVerified, "DeregisterTaskDefinition": TierHandVerified, "DescribeCapacityProviders": TierHandVerified, "DescribeClusters": TierHandVerified, @@ -2952,6 +3036,8 @@ var Services = map[string]Service{ "DescribeDaemonRevisions": TierAutoCRUD, "DescribeDaemonTaskDefinition": TierAutoCRUD, "DescribeExpressGatewayService": TierAutoCRUD, + "DescribeScalableTargets": TierHandVerified, + "DescribeScalingPolicies": TierHandVerified, "DescribeServiceDeployments": TierAutoCRUD, "DescribeServiceRevisions": TierAutoCRUD, "DescribeServices": TierHandVerified, @@ -2979,8 +3065,10 @@ var Services = map[string]Service{ "PutAccountSettingDefault": TierHandVerified, "PutAttributes": TierHandVerified, "PutClusterCapacityProviders": TierHandVerified, + "PutScalingPolicy": TierHandVerified, "RegisterContainerInstance": TierHandVerified, "RegisterDaemonTaskDefinition": TierAutoCRUD, + "RegisterScalableTarget": TierHandVerified, "RegisterTaskDefinition": TierHandVerified, "RunTask": TierHandVerified, "StartTask": TierHandVerified, @@ -3456,32 +3544,65 @@ var Services = map[string]Service{ "UpdateEventBus": TierAutoCRUD, }}, "firehose": {ModelBacked: true, Operations: map[string]Tier{ - "CreateDeliveryStream": TierHandVerified, - "DeleteDeliveryStream": TierHandVerified, - "DescribeDeliveryStream": TierHandVerified, - "ListDeliveryStreams": TierHandVerified, - "ListTagsForDeliveryStream": TierHandVerified, - "PutRecord": TierHandVerified, - "PutRecordBatch": TierHandVerified, - "StartDeliveryStreamEncryption": TierHandVerified, - "StopDeliveryStreamEncryption": TierHandVerified, - "TagDeliveryStream": TierHandVerified, - "UntagDeliveryStream": TierHandVerified, - "UpdateDestination": TierHandVerified, + "AddKinesisSource": TierHandVerified, + "CreateDeliveryStream": TierHandVerified, + "DeleteDeliveryStream": TierHandVerified, + "DescribeDeliveryStream": TierHandVerified, + "DescribeDeliveryStreamHealth": TierHandVerified, + "DisableKinesisStreamSource": TierHandVerified, + "DisableLogging": TierHandVerified, + "EnableLogging": TierHandVerified, + "GetDeliveryStreamLogs": TierHandVerified, + "GetDeliveryStreamMetrics": TierHandVerified, + "GetKinesisSources": TierHandVerified, + "GetLoggingConfiguration": TierHandVerified, + "GetRecordStatistics": TierHandVerified, + "GetRedshiftDestination": TierHandVerified, + "ListDeliveryStreams": TierHandVerified, + "ListRecords": TierHandVerified, + "ListTagsForDeliveryStream": TierHandVerified, + "PauseDeliveryStream": TierHandVerified, + "PutElasticsearchDestination": TierHandVerified, + "PutExtendedS3Destination": TierHandVerified, + "PutHttpEndpointDestination": TierHandVerified, + "PutRecord": TierHandVerified, + "PutRecordBatch": TierHandVerified, + "PutRedshiftDestination": TierHandVerified, + "PutS3Destination": TierHandVerified, + "PutSplunkDestination": TierHandVerified, + "ResumeDeliveryStream": TierHandVerified, + "StartDeliveryStream": TierHandVerified, + "StartDeliveryStreamEncryption": TierHandVerified, + "StopDeliveryStream": TierHandVerified, + "StopDeliveryStreamEncryption": TierHandVerified, + "TagDeliveryStream": TierHandVerified, + "UntagDeliveryStream": TierHandVerified, + "UpdateDestination": TierHandVerified, + "UpdateElasticsearchDestination": TierHandVerified, + "UpdateExtendedS3Destination": TierHandVerified, + "UpdateHttpEndpointDestination": TierHandVerified, + "UpdateRedshiftDestination": TierHandVerified, + "UpdateS3Destination": TierHandVerified, + "UpdateSplunkDestination": TierHandVerified, }}, "fis": {ModelBacked: true, Operations: map[string]Tier{ + "CancelExperiment": TierHandVerified, + "CloneExperimentTemplate": TierHandVerified, "CreateExperimentTemplate": TierHandVerified, "CreateTargetAccountConfiguration": TierHandVerified, "DeleteExperimentTemplate": TierHandVerified, "DeleteTargetAccountConfiguration": TierHandVerified, "GetAction": TierHandVerified, "GetExperiment": TierHandVerified, + "GetExperimentHistory": TierHandVerified, "GetExperimentTargetAccountConfiguration": TierHandVerified, "GetExperimentTemplate": TierHandVerified, + "GetExperimentTemplateLogConfiguration": TierHandVerified, "GetSafetyLever": TierHandVerified, "GetTargetAccountConfiguration": TierHandVerified, "GetTargetResourceType": TierHandVerified, "ListActions": TierHandVerified, + "ListExperimentEvents": TierHandVerified, "ListExperimentResolvedTargets": TierHandVerified, "ListExperimentTargetAccountConfigurations": TierHandVerified, "ListExperimentTemplates": TierHandVerified, @@ -3494,8 +3615,10 @@ var Services = map[string]Service{ "TagResource": TierHandVerified, "UntagResource": TierHandVerified, "UpdateExperimentTemplate": TierHandVerified, + "UpdateExperimentTemplateLogConfiguration": TierHandVerified, "UpdateSafetyLeverState": TierHandVerified, "UpdateTargetAccountConfiguration": TierHandVerified, + "ValidateExperimentTemplate": TierHandVerified, }}, "glacier": {ModelBacked: true, Operations: map[string]Tier{ "AbortMultipartUpload": TierHandVerified, @@ -3996,9 +4119,6 @@ var Services = map[string]Service{ "DescribeGroup": TierHandVerified, "DescribeGroupMembership": TierHandVerified, "DescribeUser": TierHandVerified, - "Description": TierHandVerified, - "DisplayName": TierHandVerified, - "Emails": TierHandVerified, "GetGroupId": TierHandVerified, "GetGroupMembershipId": TierHandVerified, "GetUserId": TierHandVerified, @@ -4767,6 +4887,7 @@ var Services = map[string]Service{ "CreateProposal": TierHandVerified, "DeleteAccessor": TierHandVerified, "DeleteMember": TierHandVerified, + "DeleteNetwork": TierHandVerified, "DeleteNode": TierHandVerified, "GetAccessor": TierHandVerified, "GetMember": TierHandVerified, @@ -4899,18 +5020,39 @@ var Services = map[string]Service{ "UpdateUser": TierHandVerified, }}, "mwaa": {ModelBacked: true, Operations: map[string]Tier{ - "CreateCliToken": TierHandVerified, - "CreateEnvironment": TierHandVerified, - "CreateWebLoginToken": TierHandVerified, - "DeleteEnvironment": TierHandVerified, - "GetEnvironment": TierHandVerified, - "InvokeRestApi": TierHandVerified, - "ListEnvironments": TierHandVerified, - "ListTagsForResource": TierHandVerified, - "PublishMetrics": TierHandVerified, - "TagResource": TierHandVerified, - "UntagResource": TierHandVerified, - "UpdateEnvironment": TierHandVerified, + "CreateCliToken": TierHandVerified, + "CreateDag": TierHandVerified, + "CreateDagRun": TierHandVerified, + "CreateEnvironment": TierHandVerified, + "CreateVariables": TierHandVerified, + "CreateWebLoginToken": TierHandVerified, + "DeleteDag": TierHandVerified, + "DeleteDagRun": TierHandVerified, + "DeleteEnvironment": TierHandVerified, + "DeleteVariables": TierHandVerified, + "DescribeClusters": TierHandVerified, + "GetDag": TierHandVerified, + "GetDagRun": TierHandVerified, + "GetEnvironment": TierHandVerified, + "GetEnvironmentConfig": TierHandVerified, + "GetEnvironmentLogs": TierHandVerified, + "GetEnvironmentStatus": TierHandVerified, + "GetVariables": TierHandVerified, + "InvokeRestApi": TierHandVerified, + "ListDagRuns": TierHandVerified, + "ListDags": TierHandVerified, + "ListEnvironments": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ListVariables": TierHandVerified, + "PauseDag": TierHandVerified, + "PublishMetrics": TierHandVerified, + "RestartEnvironment": TierHandVerified, + "StartEnvironment": TierHandVerified, + "StopEnvironment": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateEnvironment": TierHandVerified, + "UpdateVariables": TierHandVerified, }}, "neptune": {ModelBacked: true, Operations: map[string]Tier{ "AddRoleToDBCluster": TierHandVerified, @@ -4938,6 +5080,7 @@ var Services = map[string]Service{ "DeleteDBSubnetGroup": TierHandVerified, "DeleteEventSubscription": TierHandVerified, "DeleteGlobalCluster": TierHandVerified, + "DescribeCertificates": TierHandVerified, "DescribeDBClusterEndpoints": TierHandVerified, "DescribeDBClusterParameterGroups": TierHandVerified, "DescribeDBClusterParameters": TierHandVerified, @@ -5264,7 +5407,6 @@ var Services = map[string]Service{ }}, "pipes": {ModelBacked: false, Operations: map[string]Tier{ "CreatePipe": TierHandVerified, - "DELETE": TierHandVerified, "DeletePipe": TierHandVerified, "DescribePipe": TierHandVerified, "DescribePipeHealth": TierHandVerified, @@ -5279,7 +5421,6 @@ var Services = map[string]Service{ "ListPipeTargets": TierHandVerified, "ListPipes": TierHandVerified, "ListTagsForResource": TierHandVerified, - "POST": TierHandVerified, "PutPipeConfiguration": TierHandVerified, "StartPipe": TierHandVerified, "StopPipe": TierHandVerified, @@ -5660,15 +5801,28 @@ var Services = map[string]Service{ "UpdateGroupQuery": TierHandVerified, }}, "resourcegroupstaggingapi": {ModelBacked: true, Operations: map[string]Tier{ - "DescribeReportCreation": TierHandVerified, - "GetComplianceSummary": TierHandVerified, - "GetResources": TierHandVerified, - "GetTagKeys": TierHandVerified, - "GetTagValues": TierHandVerified, - "ListRequiredTags": TierHandVerified, - "StartReportCreation": TierHandVerified, - "TagResources": TierHandVerified, - "UntagResources": TierHandVerified, + "AssociateTags": TierHandVerified, + "CreateTagOption": TierHandVerified, + "DeleteTagOption": TierHandVerified, + "DescribeReportCreation": TierHandVerified, + "DisassociateTags": TierHandVerified, + "GetComplianceDetails": TierHandVerified, + "GetComplianceSummary": TierHandVerified, + "GetResourceTags": TierHandVerified, + "GetResources": TierHandVerified, + "GetTagKeys": TierHandVerified, + "GetTagOption": TierHandVerified, + "GetTagValues": TierHandVerified, + "ListRequiredTags": TierHandVerified, + "ListResourcesWithTagFilter": TierHandVerified, + "ListTagAssociations": TierHandVerified, + "ListTagOptions": TierHandVerified, + "ListTaggedResourcesByType": TierHandVerified, + "SearchResourcesByTags": TierHandVerified, + "StartReportCreation": TierHandVerified, + "TagResources": TierHandVerified, + "UntagResources": TierHandVerified, + "UpdateTagOption": TierHandVerified, }}, "route53": {ModelBacked: true, Operations: map[string]Tier{ "ActivateKeySigningKey": TierHandVerified, @@ -5725,6 +5879,7 @@ var Services = map[string]Service{ "ListHostedZones": TierHandVerified, "ListHostedZonesByName": TierUnimplemented, "ListHostedZonesByVPC": TierUnimplemented, + "ListKeySigningKeys": TierHandVerified, "ListQueryLoggingConfigs": TierHandVerified, "ListResourceRecordSets": TierHandVerified, "ListReusableDelegationSets": TierHandVerified, @@ -6382,17 +6537,33 @@ var Services = map[string]Service{ "secretsmanager": {ModelBacked: true, Operations: map[string]Tier{ "BatchGetSecretValue": TierHandVerified, "CancelRotateSecret": TierHandVerified, + "ClearSecretValue": TierHandVerified, "CreateSecret": TierHandVerified, "DeleteResourcePolicy": TierHandVerified, "DeleteSecret": TierHandVerified, "DescribeSecret": TierHandVerified, + "DescribeSecretVersion": TierHandVerified, + "DisableSecretRotation": TierHandVerified, + "EnableSecretRotation": TierHandVerified, "GetRandomPassword": TierHandVerified, "GetResourcePolicy": TierHandVerified, + "GetRotationStatus": TierHandVerified, + "GetSecret": TierHandVerified, + "GetSecretCounter": TierHandVerified, + "GetSecretHistory": TierHandVerified, + "GetSecretMetadata": TierHandVerified, "GetSecretValue": TierHandVerified, + "GetSecretVersion": TierHandVerified, + "ListReplicationRegions": TierHandVerified, + "ListRotationLambdas": TierHandVerified, + "ListSecretTags": TierHandVerified, "ListSecretVersionIds": TierHandVerified, "ListSecrets": TierHandVerified, + "ListTagsForResource": TierHandVerified, "PutResourcePolicy": TierHandVerified, + "PutSecretMetadata": TierHandVerified, "PutSecretValue": TierHandVerified, + "PutSecretValueBinary": TierHandVerified, "RemoveRegionsFromReplication": TierHandVerified, "ReplicateSecretToRegions": TierHandVerified, "RestoreSecret": TierHandVerified, @@ -6403,6 +6574,7 @@ var Services = map[string]Service{ "UpdateSecret": TierHandVerified, "UpdateSecretVersionStage": TierHandVerified, "ValidateResourcePolicy": TierHandVerified, + "ValidateSecret": TierHandVerified, }}, "serverlessrepo": {ModelBacked: false, Operations: map[string]Tier{ "AddApplicationDependency": TierHandVerified, @@ -6502,6 +6674,7 @@ var Services = map[string]Service{ "DeleteVerifiedEmailAddress": TierHandVerified, "DescribeActiveReceiptRuleSet": TierHandVerified, "DescribeConfigurationSet": TierHandVerified, + "DescribeConfigurationSetEventDestinations": TierHandVerified, "DescribeReceiptRule": TierHandVerified, "DescribeReceiptRuleSet": TierHandVerified, "GetAccountSendingEnabled": TierHandVerified, @@ -6514,12 +6687,14 @@ var Services = map[string]Service{ "GetSendQuota": TierHandVerified, "GetSendStatistics": TierHandVerified, "GetTemplate": TierHandVerified, + "ListConfigurationSetEventDestinations": TierHandVerified, "ListConfigurationSets": TierHandVerified, "ListCustomVerificationEmailTemplates": TierHandVerified, "ListIdentities": TierHandVerified, "ListIdentityPolicies": TierHandVerified, "ListReceiptFilters": TierHandVerified, "ListReceiptRuleSets": TierHandVerified, + "ListTagsForResource": TierHandVerified, "ListTemplates": TierHandVerified, "ListVerifiedEmailAddresses": TierHandVerified, "PutConfigurationSetDeliveryOptions": TierUnimplemented, @@ -6538,7 +6713,9 @@ var Services = map[string]Service{ "SetIdentityMailFromDomain": TierHandVerified, "SetIdentityNotificationTopic": TierHandVerified, "SetReceiptRulePosition": TierHandVerified, + "TagResource": TierHandVerified, "TestRenderTemplate": TierHandVerified, + "UntagResource": TierHandVerified, "UpdateAccountSendingEnabled": TierHandVerified, "UpdateConfigurationSetEventDestination": TierHandVerified, "UpdateConfigurationSetReputationMetricsEnabled": TierUnimplemented, @@ -7056,19 +7233,46 @@ var Services = map[string]Service{ "AddAttachmentsToSet": TierHandVerified, "AddCommunicationToCase": TierHandVerified, "CreateCase": TierHandVerified, + "CreateSupportPlan": TierHandVerified, + "DeleteAttachmentSet": TierHandVerified, "DescribeAttachment": TierHandVerified, + "DescribeAttachmentSet": TierHandVerified, + "DescribeCaseHistory": TierHandVerified, "DescribeCases": TierHandVerified, + "DescribeCategories": TierHandVerified, "DescribeCommunications": TierHandVerified, "DescribeCreateCaseOptions": TierHandVerified, + "DescribeSecureCaseOperations": TierHandVerified, + "DescribeServiceHealth": TierHandVerified, "DescribeServices": TierHandVerified, "DescribeSeverityLevels": TierHandVerified, + "DescribeSupportLevel": TierHandVerified, + "DescribeSupportPlan": TierHandVerified, "DescribeSupportedLanguages": TierHandVerified, + "DescribeTopicPaths": TierHandVerified, + "DescribeTopics": TierHandVerified, "DescribeTrustedAdvisorCheckRefreshStatuses": TierHandVerified, "DescribeTrustedAdvisorCheckResult": TierHandVerified, "DescribeTrustedAdvisorCheckSummaries": TierHandVerified, "DescribeTrustedAdvisorChecks": TierHandVerified, + "EscalateCase": TierHandVerified, + "GetOnboardingStatus": TierHandVerified, + "ListAttachments": TierHandVerified, + "ListCaseCategories": TierHandVerified, + "ListCases": TierHandVerified, + "ListSupportPlans": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "ModifySecureCaseParameters": TierHandVerified, "RefreshTrustedAdvisorCheck": TierHandVerified, + "ReopenCase": TierHandVerified, "ResolveCase": TierHandVerified, + "SearchCases": TierHandVerified, + "StartOnboarding": TierHandVerified, + "TagResource": TierHandVerified, + "TransferCase": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateCaseAttributes": TierHandVerified, + "UpdateSupportPlan": TierHandVerified, }}, "swf": {ModelBacked: true, Operations: map[string]Tier{ "CountClosedWorkflowExecutions": TierHandVerified, @@ -7112,31 +7316,52 @@ var Services = map[string]Service{ "UntagResource": TierHandVerified, }}, "textract": {ModelBacked: true, Operations: map[string]Tier{ - "AnalyzeDocument": TierHandVerified, - "AnalyzeExpense": TierHandVerified, - "AnalyzeID": TierHandVerified, - "CreateAdapter": TierHandVerified, - "CreateAdapterVersion": TierHandVerified, - "DeleteAdapter": TierHandVerified, - "DeleteAdapterVersion": TierHandVerified, - "DetectDocumentText": TierHandVerified, - "GetAdapter": TierHandVerified, - "GetAdapterVersion": TierHandVerified, - "GetDocumentAnalysis": TierHandVerified, - "GetDocumentTextDetection": TierHandVerified, - "GetExpenseAnalysis": TierHandVerified, - "GetLendingAnalysis": TierHandVerified, - "GetLendingAnalysisSummary": TierHandVerified, - "ListAdapterVersions": TierHandVerified, - "ListAdapters": TierHandVerified, - "ListTagsForResource": TierHandVerified, - "StartDocumentAnalysis": TierHandVerified, - "StartDocumentTextDetection": TierHandVerified, - "StartExpenseAnalysis": TierHandVerified, - "StartLendingAnalysis": TierHandVerified, - "TagResource": TierHandVerified, - "UntagResource": TierHandVerified, - "UpdateAdapter": TierHandVerified, + "AnalyzeDocument": TierHandVerified, + "AnalyzeExpense": TierHandVerified, + "AnalyzeID": TierHandVerified, + "CancelJob": TierHandVerified, + "CreateAdapter": TierHandVerified, + "CreateAdapterVersion": TierHandVerified, + "DeleteAdapter": TierHandVerified, + "DeleteAdapterVersion": TierHandVerified, + "DescribeAdapter": TierHandVerified, + "DescribeAdapterVersion": TierHandVerified, + "DescribeServiceQuotas": TierHandVerified, + "DetectDocumentText": TierHandVerified, + "GetAdapter": TierHandVerified, + "GetAdapterVersion": TierHandVerified, + "GetAnalyzeDocumentJobResults": TierHandVerified, + "GetDetectDominantLanguagesJobResults": TierHandVerified, + "GetDocumentAnalysis": TierHandVerified, + "GetDocumentTextDetection": TierHandVerified, + "GetEntitiesDetectionJobResults": TierHandVerified, + "GetExpenseAnalysis": TierHandVerified, + "GetKeyValuesDetectionJobResults": TierHandVerified, + "GetLabelDetectionJobResults": TierHandVerified, + "GetLendingAnalysis": TierHandVerified, + "GetLendingAnalysisSummary": TierHandVerified, + "GetServiceStatus": TierHandVerified, + "ListAdapterJobs": TierHandVerified, + "ListAdapterVersions": TierHandVerified, + "ListAdapters": TierHandVerified, + "ListFeedback": TierHandVerified, + "ListJobs": TierHandVerified, + "ListTagsForResource": TierHandVerified, + "StartAdapterTraining": TierHandVerified, + "StartDetectDominantLanguages": TierHandVerified, + "StartDocumentAnalysis": TierHandVerified, + "StartDocumentTextDetection": TierHandVerified, + "StartDocumentTextDetectionV2": TierHandVerified, + "StartEntitiesDetection": TierHandVerified, + "StartExpenseAnalysis": TierHandVerified, + "StartKeyValuesDetection": TierHandVerified, + "StartLabelDetection": TierHandVerified, + "StartLendingAnalysis": TierHandVerified, + "StopAdapterTraining": TierHandVerified, + "SubmitFeedback": TierHandVerified, + "TagResource": TierHandVerified, + "UntagResource": TierHandVerified, + "UpdateAdapter": TierHandVerified, }}, "timestreamwrite": {ModelBacked: true, Operations: map[string]Tier{ "CreateBatchLoadTask": TierHandVerified, @@ -7467,6 +7692,7 @@ var Services = map[string]Service{ "GetInsightEvents": TierHandVerified, "GetInsightImpactGraph": TierHandVerified, "GetInsightSummaries": TierHandVerified, + "GetResourcePolicy": TierHandVerified, "GetRetrievedTracesGraph": TierUnimplemented, "GetSamplingRules": TierHandVerified, "GetSamplingStatisticSummaries": TierHandVerified, diff --git a/internal/services/eventbridge/provider.go b/internal/services/eventbridge/provider.go index 25b6fd5..c13a019 100644 --- a/internal/services/eventbridge/provider.go +++ b/internal/services/eventbridge/provider.go @@ -157,7 +157,7 @@ func (p *Provider) createEventBus(params map[string]any) (*plugin.Response, erro if err := p.store.CreateEventBus(name, defaultAccountID); err != nil { return nil, err } - arn := "arn:aws:events:us-east-1:" + defaultAccountID + ":event-bus/" + name + arn := busARN(name, defaultAccountID) return jsonResp(http.StatusOK, map[string]any{"EventBusArn": arn}) } @@ -205,7 +205,7 @@ func (p *Provider) putRule(params map[string]any) (*plugin.Response, error) { if err := p.store.PutRule(name, busName, defaultAccountID, eventPattern, state, scheduleExpression); err != nil { return nil, err } - arn := "arn:aws:events:us-east-1:" + defaultAccountID + ":rule/" + name + arn := ruleARN(name, defaultAccountID) return jsonResp(http.StatusOK, map[string]any{"RuleArn": arn}) } @@ -232,7 +232,7 @@ func (p *Provider) listRules(params map[string]any) (*plugin.Response, error) { } list := make([]map[string]any, 0, len(rules)) for _, r := range rules { - arn := "arn:aws:events:us-east-1:" + defaultAccountID + ":rule/" + r.Name + arn := ruleARN(r.Name, defaultAccountID) list = append(list, map[string]any{ "Name": r.Name, "Arn": arn, @@ -365,7 +365,7 @@ func (p *Provider) describeRule(params map[string]any) (*plugin.Response, error) if err != nil { return ebError("ResourceNotFoundException", "Rule "+name+" does not exist.", http.StatusBadRequest), nil } - arn := "arn:aws:events:us-east-1:" + defaultAccountID + ":rule/" + rule.Name + arn := ruleARN(rule.Name, defaultAccountID) result := map[string]any{ "Name": rule.Name, "Arn": arn, diff --git a/internal/services/eventbridge/store.go b/internal/services/eventbridge/store.go index a3f6b77..ac89fd1 100644 --- a/internal/services/eventbridge/store.go +++ b/internal/services/eventbridge/store.go @@ -123,8 +123,19 @@ func NewEBStore(dataDir string) (*EBStore, error) { func (s *EBStore) Close() error { return s.store.Close() } +// busARN and ruleARN are the single source of the ARNs this service hands out. +// Tags are keyed by ARN, so a delete has to rebuild the same string the create +// did or the tags outlive the resource. +func busARN(name, accountID string) string { + return "arn:aws:events:us-east-1:" + accountID + ":event-bus/" + name +} + +func ruleARN(name, accountID string) string { + return "arn:aws:events:us-east-1:" + accountID + ":rule/" + name +} + func (s *EBStore) CreateEventBus(name, accountID string) error { - arn := "arn:aws:events:us-east-1:" + accountID + ":event-bus/" + name + arn := busARN(name, accountID) _, err := s.store.DB().Exec( `INSERT INTO event_buses (name, arn, account_id) VALUES (?, ?, ?) ON CONFLICT DO NOTHING`, name, arn, accountID, @@ -141,7 +152,9 @@ func (s *EBStore) DeleteEventBus(name, accountID string) error { if n == 0 { return ErrBusNotFound } - return nil + // ARNs are derived from the name, so recreating a deleted bus reuses its ARN + // and would inherit the old tags. + return s.tags.DeleteAllTags(busARN(name, accountID)) } func (s *EBStore) GetEventBus(name, accountID string) (*EventBus, error) { @@ -221,7 +234,7 @@ func (s *EBStore) DeleteRule(name, busName, accountID string) error { if n == 0 { return ErrRuleNotFound } - return nil + return s.tags.DeleteAllTags(ruleARN(name, accountID)) } func (s *EBStore) ListRules(busName, accountID string) ([]Rule, error) { diff --git a/tests/compatibility/test_eventbridge.py b/tests/compatibility/test_eventbridge.py index 30c986d..8095dd6 100644 --- a/tests/compatibility/test_eventbridge.py +++ b/tests/compatibility/test_eventbridge.py @@ -214,6 +214,27 @@ def test_tag_round_trip(events_client): assert tags == {"team": "platform"} +def test_tags_do_not_survive_delete(events_client): + """A recreated bus reuses its ARN, so a delete must drop its tags with it.""" + arn = events_client.create_event_bus(Name="tag-ghost-bus")["EventBusArn"] + events_client.tag_resource(ResourceARN=arn, Tags=[{"Key": "env", "Value": "dev"}]) + events_client.delete_event_bus(Name="tag-ghost-bus") + + recreated = events_client.create_event_bus(Name="tag-ghost-bus")["EventBusArn"] + assert recreated == arn + assert events_client.list_tags_for_resource(ResourceARN=arn)["Tags"] == [] + + +def test_rule_tags_do_not_survive_delete(events_client): + events_client.put_rule(Name="tag-ghost-rule", ScheduleExpression="rate(5 minutes)") + arn = events_client.describe_rule(Name="tag-ghost-rule")["Arn"] + events_client.tag_resource(ResourceARN=arn, Tags=[{"Key": "env", "Value": "dev"}]) + events_client.delete_rule(Name="tag-ghost-rule") + + events_client.put_rule(Name="tag-ghost-rule", ScheduleExpression="rate(5 minutes)") + assert events_client.list_tags_for_resource(ResourceARN=arn)["Tags"] == [] + + def test_tags_are_per_resource(events_client): """Two resources do not share a tag set.""" a = events_client.create_event_bus(Name="tag-bus-a")["EventBusArn"] From 2f00adac82b904f35133df97b43ff82838ea1c8a Mon Sep 17 00:00:00 2001 From: Sung-Kyu Yoo Date: Sun, 9 Aug 2026 14:32:36 +0900 Subject: [PATCH 6/6] fix(tags): key EventBridge rule tags by bus, drop CloudWatch alarm tags on delete MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-up review of #126 found two more places where a name-derived ARN lets tags outlive or cross-wire the resource they describe. A rule name is unique per bus — the rules primary key is (name, bus_name, account_id) — but ruleARN ignored the bus, so two same-named rules on different custom buses resolved to one ARN. Tagging either changed the other's tags, and deleting one wiped the survivor's. Qualify custom-bus rule ARNs with the bus name, which is also the shape AWS uses, and leave the default bus bare. CWStore.DeleteAlarms removed the alarms row and left its resource_tags rows, so an alarm recreated under the same name inherited the deleted one's tags. Delete them with the alarm. DevCloud does not hand out AlarmArn yet, so the helper mirrors the ARN a caller constructs from the name; tags filed under another region or account stay out of reach, and the comment says so. Both are pinned by boto3 tests: same-named rules on two buses keep separate tag sets across a delete, and a recreated alarm starts untagged. --- changes/unreleased/Fixed-20260809-170000.yaml | 5 +++++ changes/unreleased/Fixed-20260809-170100.yaml | 5 +++++ docs/services-matrix.md | 4 ++-- internal/services/cloudwatch/store.go | 12 ++++++++++ internal/services/eventbridge/provider.go | 6 ++--- internal/services/eventbridge/store.go | 13 ++++++++--- tests/compatibility/test_cloudwatch.py | 21 ++++++++++++++++++ tests/compatibility/test_eventbridge.py | 22 +++++++++++++++++++ 8 files changed, 80 insertions(+), 8 deletions(-) create mode 100644 changes/unreleased/Fixed-20260809-170000.yaml create mode 100644 changes/unreleased/Fixed-20260809-170100.yaml diff --git a/changes/unreleased/Fixed-20260809-170000.yaml b/changes/unreleased/Fixed-20260809-170000.yaml new file mode 100644 index 0000000..1eb0996 --- /dev/null +++ b/changes/unreleased/Fixed-20260809-170000.yaml @@ -0,0 +1,5 @@ +kind: Fixed +body: EventBridge rule ARNs now name their event bus, as AWS does. A rule name is unique per bus, so same-named rules on two custom buses previously shared one ARN — and with it, one tag set, where tagging one rule changed the other's and deleting one wiped the survivor's +time: 2026-08-09T17:00:00.000000+09:00 +custom: + Issue: "" diff --git a/changes/unreleased/Fixed-20260809-170100.yaml b/changes/unreleased/Fixed-20260809-170100.yaml new file mode 100644 index 0000000..0b5793d --- /dev/null +++ b/changes/unreleased/Fixed-20260809-170100.yaml @@ -0,0 +1,5 @@ +kind: Fixed +body: CloudWatch now drops an alarm's tags when the alarm is deleted, so recreating an alarm under the same name no longer inherits the old one's tags +time: 2026-08-09T17:01:00.000000+09:00 +custom: + Issue: "" diff --git a/docs/services-matrix.md b/docs/services-matrix.md index 063a7bc..579fec7 100644 --- a/docs/services-matrix.md +++ b/docs/services-matrix.md @@ -1,6 +1,6 @@ # DevCloud Services Matrix -**Total**: 104 services (run `make stats`). The boto3 compatibility suite — 773 tests in `tests/compatibility/` — passes in CI. +**Total**: 104 services (run `make stats`). The boto3 compatibility suite — 775 tests in `tests/compatibility/` — passes in CI. > To refresh these numbers, run `make stats` (service/handler counts) and `make test-compat` (compatibility suite), then update the line above. Note: `make stats`' "Operations" counts dispatch cases (a service carrying both Query and JSON protocols counts each), not distinct AWS operations. @@ -61,7 +61,7 @@ DevCloud is a Go-based local cloud environment with AWS API compatibility. This ## boto3 compatibility -- Tests: `tests/compatibility/` (773 tests) +- Tests: `tests/compatibility/` (775 tests) - Status: the full suite passes in CI (`.github/workflows/compat.yml`); any failing test fails the build - Run: `make test-compat` diff --git a/internal/services/cloudwatch/store.go b/internal/services/cloudwatch/store.go index 14d6376..6b983de 100644 --- a/internal/services/cloudwatch/store.go +++ b/internal/services/cloudwatch/store.go @@ -281,12 +281,24 @@ func (s *CWStore) DescribeAlarms(accountID string, alarmNames []string) ([]Alarm return scanAlarms(rows) } +// alarmARN is the ARN an alarm's tags are filed under. DevCloud does not hand +// out AlarmArn today, so this mirrors what a caller constructs from the name; +// tags applied under a different region or account are not reachable from here. +func alarmARN(name, accountID string) string { + return "arn:aws:cloudwatch:us-east-1:" + accountID + ":alarm:" + name +} + func (s *CWStore) DeleteAlarms(accountID string, alarmNames []string) error { for _, name := range alarmNames { _, err := s.store.DB().Exec(`DELETE FROM alarms WHERE alarm_name = ? AND account_id = ?`, name, accountID) if err != nil { return err } + // The ARN is derived from the name, so recreating the alarm would + // otherwise inherit the deleted one's tags. + if err := s.tags.DeleteAllTags(alarmARN(name, accountID)); err != nil { + return err + } } return nil } diff --git a/internal/services/eventbridge/provider.go b/internal/services/eventbridge/provider.go index c13a019..dd4e2ec 100644 --- a/internal/services/eventbridge/provider.go +++ b/internal/services/eventbridge/provider.go @@ -205,7 +205,7 @@ func (p *Provider) putRule(params map[string]any) (*plugin.Response, error) { if err := p.store.PutRule(name, busName, defaultAccountID, eventPattern, state, scheduleExpression); err != nil { return nil, err } - arn := ruleARN(name, defaultAccountID) + arn := ruleARN(name, busName, defaultAccountID) return jsonResp(http.StatusOK, map[string]any{"RuleArn": arn}) } @@ -232,7 +232,7 @@ func (p *Provider) listRules(params map[string]any) (*plugin.Response, error) { } list := make([]map[string]any, 0, len(rules)) for _, r := range rules { - arn := ruleARN(r.Name, defaultAccountID) + arn := ruleARN(r.Name, busName, defaultAccountID) list = append(list, map[string]any{ "Name": r.Name, "Arn": arn, @@ -365,7 +365,7 @@ func (p *Provider) describeRule(params map[string]any) (*plugin.Response, error) if err != nil { return ebError("ResourceNotFoundException", "Rule "+name+" does not exist.", http.StatusBadRequest), nil } - arn := ruleARN(rule.Name, defaultAccountID) + arn := ruleARN(rule.Name, busName, defaultAccountID) result := map[string]any{ "Name": rule.Name, "Arn": arn, diff --git a/internal/services/eventbridge/store.go b/internal/services/eventbridge/store.go index ac89fd1..586b1f0 100644 --- a/internal/services/eventbridge/store.go +++ b/internal/services/eventbridge/store.go @@ -130,8 +130,15 @@ func busARN(name, accountID string) string { return "arn:aws:events:us-east-1:" + accountID + ":event-bus/" + name } -func ruleARN(name, accountID string) string { - return "arn:aws:events:us-east-1:" + accountID + ":rule/" + name +// A rule name is unique per bus, not per account, so the bus has to be in the +// ARN or two same-named rules on different buses share one — and with it, one +// tag set. AWS qualifies custom-bus rules the same way and leaves the default +// bus bare. +func ruleARN(name, busName, accountID string) string { + if busName == "" || busName == "default" { + return "arn:aws:events:us-east-1:" + accountID + ":rule/" + name + } + return "arn:aws:events:us-east-1:" + accountID + ":rule/" + busName + "/" + name } func (s *EBStore) CreateEventBus(name, accountID string) error { @@ -234,7 +241,7 @@ func (s *EBStore) DeleteRule(name, busName, accountID string) error { if n == 0 { return ErrRuleNotFound } - return s.tags.DeleteAllTags(ruleARN(name, accountID)) + return s.tags.DeleteAllTags(ruleARN(name, busName, accountID)) } func (s *EBStore) ListRules(busName, accountID string) ([]Rule, error) { diff --git a/tests/compatibility/test_cloudwatch.py b/tests/compatibility/test_cloudwatch.py index c98ae73..a9c7520 100644 --- a/tests/compatibility/test_cloudwatch.py +++ b/tests/compatibility/test_cloudwatch.py @@ -215,6 +215,27 @@ def test_tag_round_trip(cloudwatch_client): assert tags == {"team": "platform"} +def test_alarm_tags_do_not_survive_delete(cloudwatch_client): + """An alarm ARN is derived from its name, so a delete must drop its tags.""" + arn = "arn:aws:cloudwatch:us-east-1:000000000000:alarm:tag-ghost-alarm" + cloudwatch_client.put_metric_alarm( + AlarmName="tag-ghost-alarm", + Namespace="MyApp", + MetricName="CPUUtilization", + Statistic="Average", + Period=60, + EvaluationPeriods=1, + Threshold=80.0, + ComparisonOperator="GreaterThanThreshold", + ) + cloudwatch_client.tag_resource( + ResourceARN=arn, Tags=[{"Key": "env", "Value": "dev"}] + ) + cloudwatch_client.delete_alarms(AlarmNames=["tag-ghost-alarm"]) + + assert cloudwatch_client.list_tags_for_resource(ResourceARN=arn)["Tags"] == [] + + def test_tags_are_per_resource(cloudwatch_client): a = "arn:aws:cloudwatch:us-east-1:000000000000:alarm:tag-alarm-a" b = "arn:aws:cloudwatch:us-east-1:000000000000:alarm:tag-alarm-b" diff --git a/tests/compatibility/test_eventbridge.py b/tests/compatibility/test_eventbridge.py index 8095dd6..012f2a3 100644 --- a/tests/compatibility/test_eventbridge.py +++ b/tests/compatibility/test_eventbridge.py @@ -235,6 +235,28 @@ def test_rule_tags_do_not_survive_delete(events_client): assert events_client.list_tags_for_resource(ResourceARN=arn)["Tags"] == [] +def test_same_named_rules_on_different_buses_do_not_share_tags(events_client): + """A rule name is unique per bus, so the bus must be part of the rule ARN.""" + events_client.create_event_bus(Name="bus-a") + events_client.create_event_bus(Name="bus-b") + for bus in ("bus-a", "bus-b"): + events_client.put_rule( + Name="shared-name", EventBusName=bus, ScheduleExpression="rate(5 minutes)" + ) + + arn_a = events_client.describe_rule(Name="shared-name", EventBusName="bus-a")["Arn"] + arn_b = events_client.describe_rule(Name="shared-name", EventBusName="bus-b")["Arn"] + assert arn_a != arn_b + + events_client.tag_resource(ResourceARN=arn_a, Tags=[{"Key": "bus", "Value": "a"}]) + assert events_client.list_tags_for_resource(ResourceARN=arn_b)["Tags"] == [] + + # Deleting one rule must not strip the other's tags. + events_client.delete_rule(Name="shared-name", EventBusName="bus-b") + tags = events_client.list_tags_for_resource(ResourceARN=arn_a)["Tags"] + assert tags == [{"Key": "bus", "Value": "a"}] + + def test_tags_are_per_resource(events_client): """Two resources do not share a tag set.""" a = events_client.create_event_bus(Name="tag-bus-a")["EventBusArn"]