| 1 | /** @effect-diagnostics layerMergeAllWithDependencies:off */ |
| 2 | import { |
| 3 | isRetryable, |
| 4 | isThrottlingError, |
| 5 | isTransientError, |
| 6 | } from "@distilled.cloud/aws/Category"; |
| 7 | import { |
| 8 | capped, |
| 9 | jittered, |
| 10 | Retry, |
| 11 | type Factory as RetryFactory, |
| 12 | } from "@distilled.cloud/aws/Retry"; |
| 13 | import * as Duration from "effect/Duration"; |
| 14 | import * as Effect from "effect/Effect"; |
| 15 | import { pipe } from "effect/Function"; |
| 16 | import * as Layer from "effect/Layer"; |
| 17 | import * as Ref from "effect/Ref"; |
| 18 | import * as Schedule from "effect/Schedule"; |
| 19 | import * as HttpClientError from "effect/http/HttpClientError"; |
| 20 | import { CredentialsStoreLive } from "../Auth/Credentials.ts"; |
| 21 | import * as Command from "../Command/index.ts"; |
| 22 | import { DockerLive } from "../Docker/Docker.ts"; |
| 23 | import { KeyPair, KeyPairProvider } from "../KeyPair.ts"; |
| 24 | import * as ProviderLayer from "../Local/ProviderLayer.ts"; |
| 25 | import { defaultProviderMode } from "../ProviderMode.ts"; |
| 26 | import { |
| 27 | captureAwsEnvironment, |
| 28 | pinCollectionEnvironment, |
| 29 | } from "./Local/ProviderContext.ts"; |
| 30 | import { flociDual, flociServices } from "./Local/FlociServices.ts"; |
| 31 | import * as Provider from "../Provider.ts"; |
| 32 | import { Random, RandomProvider } from "../Random.ts"; |
| 33 | import { |
| 34 | Server as WebsiteServer, |
| 35 | ServerProvider as WebsiteServerProvider, |
| 36 | } from "../Website/Server.ts"; |
| 37 | import * as AccessAnalyzer from "./AccessAnalyzer/index.ts"; |
| 38 | import * as Account from "./Account/index.ts"; |
| 39 | import * as ACM from "./ACM/index.ts"; |
| 40 | import * as ACMPCA from "./ACMPCA/index.ts"; |
| 41 | import * as AIOps from "./AIOps/index.ts"; |
| 42 | import * as AMP from "./AMP/index.ts"; |
| 43 | import * as Amplify from "./Amplify/index.ts"; |
| 44 | import * as ApiGateway from "./ApiGateway/index.ts"; |
| 45 | import * as ApiGatewayV2 from "./ApiGatewayV2/index.ts"; |
| 46 | import * as AppConfig from "./AppConfig/index.ts"; |
| 47 | import * as AppFlow from "./AppFlow/index.ts"; |
| 48 | import * as AppIntegrations from "./AppIntegrations/index.ts"; |
| 49 | import * as ApplicationAutoScaling from "./ApplicationAutoScaling/index.ts"; |
| 50 | import * as ApplicationSignals from "./ApplicationSignals/index.ts"; |
| 51 | import * as AppRegistry from "./AppRegistry/index.ts"; |
| 52 | import * as AppRunner from "./AppRunner/index.ts"; |
| 53 | import * as AppSync from "./AppSync/index.ts"; |
| 54 | import * as Assets from "./Assets.ts"; |
| 55 | import * as Athena from "./Athena/index.ts"; |
| 56 | import * as AuditManager from "./AuditManager/index.ts"; |
| 57 | import { AwsAuth } from "./AuthProvider.ts"; |
| 58 | import * as AutoScaling from "./AutoScaling/index.ts"; |
| 59 | import * as B2BI from "./B2BI/index.ts"; |
| 60 | import * as Backup from "./Backup/index.ts"; |
| 61 | import * as BackupSearch from "./BackupSearch/index.ts"; |
| 62 | import * as Batch from "./Batch/index.ts"; |
| 63 | import * as BCMDataExports from "./BCMDataExports/index.ts"; |
| 64 | import * as Bedrock from "./Bedrock/index.ts"; |
| 65 | import * as BedrockAgentCore from "./BedrockAgentCore/index.ts"; |
| 66 | import * as BedrockDataAutomation from "./BedrockDataAutomation/index.ts"; |
| 67 | import * as Budgets from "./Budgets/index.ts"; |
| 68 | import * as Chatbot from "./Chatbot/index.ts"; |
| 69 | import * as CloudControl from "./CloudControl/index.ts"; |
| 70 | import * as CloudFormation from "./CloudFormation/index.ts"; |
| 71 | import * as CloudFront from "./CloudFront/index.ts"; |
| 72 | import * as CloudHSMV2 from "./CloudHSMV2/index.ts"; |
| 73 | import * as CloudMap from "./CloudMap/index.ts"; |
| 74 | import * as CloudTrail from "./CloudTrail/index.ts"; |
| 75 | import * as CloudWatch from "./CloudWatch/index.ts"; |
| 76 | import * as CodeArtifact from "./CodeArtifact/index.ts"; |
| 77 | import * as CodeBuild from "./CodeBuild/index.ts"; |
| 78 | import * as CodeConnections from "./CodeConnections/index.ts"; |
| 79 | import * as CodeDeploy from "./CodeDeploy/index.ts"; |
| 80 | import * as CodePipeline from "./CodePipeline/index.ts"; |
| 81 | import * as Cognito from "./Cognito/index.ts"; |
| 82 | import * as Config from "./Config/index.ts"; |
| 83 | import * as ControlTower from "./ControlTower/index.ts"; |
| 84 | import * as CostAndUsageReport from "./CostAndUsageReport/index.ts"; |
| 85 | import * as CostExplorer from "./CostExplorer/index.ts"; |
| 86 | import * as Credentials from "./Credentials.ts"; |
| 87 | import * as DataBrew from "./DataBrew/index.ts"; |
| 88 | import * as DataExchange from "./DataExchange/index.ts"; |
| 89 | import * as DataSync from "./DataSync/index.ts"; |
| 90 | import * as DataZone from "./DataZone/index.ts"; |
| 91 | import * as DAX from "./DAX/index.ts"; |
| 92 | import * as Deadline from "./Deadline/index.ts"; |
| 93 | import * as DirectoryService from "./DirectoryService/index.ts"; |
| 94 | import * as DLM from "./DLM/index.ts"; |
| 95 | import * as DMS from "./DMS/index.ts"; |
| 96 | import * as Detective from "./Detective/index.ts"; |
| 97 | import * as DevOpsGuru from "./DevOpsGuru/index.ts"; |
| 98 | import * as DocDB from "./DocDB/index.ts"; |
| 99 | import * as DocDBElastic from "./DocDBElastic/index.ts"; |
| 100 | import * as DSQL from "./DSQL/index.ts"; |
| 101 | import * as DynamoDB from "./DynamoDB/index.ts"; |
| 102 | import * as EC2 from "./EC2/index.ts"; |
| 103 | import * as ECR from "./ECR/index.ts"; |
| 104 | import * as ECRPublic from "./ECRPublic/index.ts"; |
| 105 | import * as ECS from "./ECS/index.ts"; |
| 106 | import * as EFS from "./EFS/index.ts"; |
| 107 | import * as EKS from "./EKS/index.ts"; |
| 108 | import * as ElastiCache from "./ElastiCache/index.ts"; |
| 109 | import * as ELBv2 from "./ELBv2/index.ts"; |
| 110 | import * as EMR from "./EMR/index.ts"; |
| 111 | import * as EMRContainers from "./EMRContainers/index.ts"; |
| 112 | import * as EMRServerless from "./EMRServerless/index.ts"; |
| 113 | import * as Endpoint from "./Endpoint.ts"; |
| 114 | import * as EntityResolution from "./EntityResolution/index.ts"; |
| 115 | import { Default as DefaultEnvironment } from "./Environment.ts"; |
| 116 | import * as EventBridge from "./EventBridge/index.ts"; |
| 117 | import * as FIS from "./FIS/index.ts"; |
| 118 | import * as FMS from "./FMS/index.ts"; |
| 119 | import * as FinSpace from "./FinSpace/index.ts"; |
| 120 | import * as Firehose from "./Firehose/index.ts"; |
| 121 | import * as Forecast from "./Forecast/index.ts"; |
| 122 | import * as FraudDetector from "./FraudDetector/index.ts"; |
| 123 | import * as FSx from "./FSx/index.ts"; |
| 124 | import * as Glacier from "./Glacier/index.ts"; |
| 125 | import * as GlobalAccelerator from "./GlobalAccelerator/index.ts"; |
| 126 | import * as Glue from "./Glue/index.ts"; |
| 127 | import * as Grafana from "./Grafana/index.ts"; |
| 128 | import * as GreengrassV2 from "./GreengrassV2/index.ts"; |
| 129 | import * as GuardDuty from "./GuardDuty/index.ts"; |
| 130 | import * as HealthLake from "./HealthLake/index.ts"; |
| 131 | import * as IAM from "./IAM/index.ts"; |
| 132 | import * as IdentityCenter from "./IdentityCenter/index.ts"; |
| 133 | import * as ImageBuilder from "./ImageBuilder/index.ts"; |
| 134 | import * as Inspector2 from "./Inspector2/index.ts"; |
| 135 | import * as InternetMonitor from "./InternetMonitor/index.ts"; |
| 136 | import * as IoT from "./IoT/index.ts"; |
| 137 | import * as IoTFleetWise from "./IoTFleetWise/index.ts"; |
| 138 | import * as IoTManagedIntegrations from "./IoTManagedIntegrations/index.ts"; |
| 139 | import * as IoTSiteWise from "./IoTSiteWise/index.ts"; |
| 140 | import * as IoTWireless from "./IoTWireless/index.ts"; |
| 141 | import * as IVS from "./IVS/index.ts"; |
| 142 | import * as IVSChat from "./IVSChat/index.ts"; |
| 143 | import * as IVSRealtime from "./IVSRealtime/index.ts"; |
| 144 | import * as Kafka from "./Kafka/index.ts"; |
| 145 | import * as Kendra from "./Kendra/index.ts"; |
| 146 | import * as Keyspaces from "./Keyspaces/index.ts"; |
| 147 | import * as Kinesis from "./Kinesis/index.ts"; |
| 148 | import * as KinesisAnalyticsV2 from "./KinesisAnalyticsV2/index.ts"; |
| 149 | import * as KinesisVideo from "./KinesisVideo/index.ts"; |
| 150 | import * as KMS from "./KMS/index.ts"; |
| 151 | import * as LakeFormation from "./LakeFormation/index.ts"; |
| 152 | import * as Lambda from "./Lambda/index.ts"; |
| 153 | import * as LexV2 from "./LexV2/index.ts"; |
| 154 | import * as LicenseManager from "./LicenseManager/index.ts"; |
| 155 | import * as Location from "./Location/index.ts"; |
| 156 | import * as Logs from "./Logs/index.ts"; |
| 157 | import * as MediaConnect from "./MediaConnect/index.ts"; |
| 158 | import * as MediaConvert from "./MediaConvert/index.ts"; |
| 159 | import * as MediaLive from "./MediaLive/index.ts"; |
| 160 | import * as MediaPackageV2 from "./MediaPackageV2/index.ts"; |
| 161 | import * as MediaTailor from "./MediaTailor/index.ts"; |
| 162 | import * as MedicalImaging from "./MedicalImaging/index.ts"; |
| 163 | import * as MQ from "./MQ/index.ts"; |
| 164 | import * as MWAA from "./MWAA/index.ts"; |
| 165 | import * as MWAAServerless from "./MWAAServerless/index.ts"; |
| 166 | import * as Macie2 from "./Macie2/index.ts"; |
| 167 | import * as MailManager from "./MailManager/index.ts"; |
| 168 | import * as MemoryDB from "./MemoryDB/index.ts"; |
| 169 | import * as Neptune from "./Neptune/index.ts"; |
| 170 | import * as NeptuneGraph from "./NeptuneGraph/index.ts"; |
| 171 | import * as NetworkFirewall from "./NetworkFirewall/index.ts"; |
| 172 | import * as Notifications from "./Notifications/index.ts"; |
| 173 | import * as NotificationsContacts from "./NotificationsContacts/index.ts"; |
| 174 | import * as OAM from "./OAM/index.ts"; |
| 175 | import * as ObservabilityAdmin from "./ObservabilityAdmin/index.ts"; |
| 176 | import * as Omics from "./Omics/index.ts"; |
| 177 | import * as OpenSearch from "./OpenSearch/index.ts"; |
| 178 | import * as OpenSearchServerless from "./OpenSearchServerless/index.ts"; |
| 179 | import * as OSIS from "./OSIS/index.ts"; |
| 180 | import * as Organizations from "./Organizations/index.ts"; |
| 181 | import * as PaymentCryptography from "./PaymentCryptography/index.ts"; |
| 182 | import * as Personalize from "./Personalize/index.ts"; |
| 183 | import * as PinpointSMSVoiceV2 from "./PinpointSMSVoiceV2/index.ts"; |
| 184 | import * as Pipes from "./Pipes/index.ts"; |
| 185 | import * as Polly from "./Polly/index.ts"; |
| 186 | import * as QApps from "./QApps/index.ts"; |
| 187 | import * as QBusiness from "./QBusiness/index.ts"; |
| 188 | import * as QuickSight from "./QuickSight/index.ts"; |
| 189 | import * as RAM from "./RAM/index.ts"; |
| 190 | import * as RDS from "./RDS/index.ts"; |
| 191 | import * as Rbin from "./Rbin/index.ts"; |
| 192 | import * as RePostSpace from "./RePostSpace/index.ts"; |
| 193 | import * as Redshift from "./Redshift/index.ts"; |
| 194 | import * as RedshiftServerless from "./RedshiftServerless/index.ts"; |
| 195 | import * as ResourceExplorer from "./ResourceExplorer/index.ts"; |
| 196 | import * as ResourceGroups from "./ResourceGroups/index.ts"; |
| 197 | import * as RolesAnywhere from "./RolesAnywhere/index.ts"; |
| 198 | import * as Region from "./Region.ts"; |
| 199 | import * as Route53 from "./Route53/index.ts"; |
| 200 | import * as Route53Profiles from "./Route53Profiles/index.ts"; |
| 201 | import * as Route53Resolver from "./Route53Resolver/index.ts"; |
| 202 | import * as RUM from "./RUM/index.ts"; |
| 203 | import * as S3 from "./S3/index.ts"; |
| 204 | import * as S3Control from "./S3Control/index.ts"; |
| 205 | import * as S3Files from "./S3Files/index.ts"; |
| 206 | import * as S3Tables from "./S3Tables/index.ts"; |
| 207 | import * as S3Vectors from "./S3Vectors/index.ts"; |
| 208 | import * as SageMaker from "./SageMaker/index.ts"; |
| 209 | import * as Scheduler from "./Scheduler/index.ts"; |
| 210 | import * as Schemas from "./Schemas/index.ts"; |
| 211 | import * as SecretsManager from "./SecretsManager/index.ts"; |
| 212 | import * as SecurityHub from "./SecurityHub/index.ts"; |
| 213 | import * as SecurityLake from "./SecurityLake/index.ts"; |
| 214 | import * as ServiceCatalog from "./ServiceCatalog/index.ts"; |
| 215 | import * as ServiceQuotas from "./ServiceQuotas/index.ts"; |
| 216 | import * as SES from "./SES/index.ts"; |
| 217 | import * as Shield from "./Shield/index.ts"; |
| 218 | import * as Signer from "./Signer/index.ts"; |
| 219 | import * as SimpleDB from "./SimpleDB/index.ts"; |
| 220 | import * as SNS from "./SNS/index.ts"; |
| 221 | import * as SocialMessaging from "./SocialMessaging/index.ts"; |
| 222 | import * as SQS from "./SQS/index.ts"; |
| 223 | import * as SSM from "./SSM/index.ts"; |
| 224 | import * as SSMContacts from "./SSMContacts/index.ts"; |
| 225 | import * as SSMIncidents from "./SSMIncidents/index.ts"; |
| 226 | import * as StepFunctions from "./StepFunctions/index.ts"; |
| 227 | import * as Synthetics from "./Synthetics/index.ts"; |
| 228 | import * as Textract from "./Textract/index.ts"; |
| 229 | import * as Timestream from "./Timestream/index.ts"; |
| 230 | import * as Transfer from "./Transfer/index.ts"; |
| 231 | import * as Translate from "./Translate/index.ts"; |
| 232 | import * as VerifiedPermissions from "./VerifiedPermissions/index.ts"; |
| 233 | import * as VpcLattice from "./VpcLattice/index.ts"; |
| 234 | import * as WAFv2 from "./WAFv2/index.ts"; |
| 235 | import * as Website from "./Website/index.ts"; |
| 236 | import * as XRay from "./XRay/index.ts"; |
| 237 | |
| 238 | export class Providers extends Provider.ProviderCollection<Providers>()( |
| 239 | "AWS", |
| 240 | ) {} |
| 241 | |
| 242 | export const providers = () => |
| 243 | Layer.effect( |
| 244 | Providers, |
| 245 | // Providers are PINNED to the environment they are registered with (the |
| 246 | // live chain provided at the bottom of this pipe) — see |
| 247 | // `pinCollectionEnvironment`. The ambient environment the STACK program |
| 248 | // sees flips to the emulator in a dev run (bottom of this file), and the |
| 249 | // pin is what keeps live-mode and mode-agnostic providers on the real |
| 250 | // cloud regardless. |
| 251 | Effect.flatMap( |
| 252 | Provider.collection([ |
| 253 | KeyPair, |
| 254 | Random, |
| 255 | AccessAnalyzer.Analyzer, |
| 256 | AccessAnalyzer.ArchiveRule, |
| 257 | Account.AccountName, |
| 258 | Account.AlternateContact, |
| 259 | Account.ContactInformation, |
| 260 | Account.Region, |
| 261 | ACM.AccountConfiguration, |
| 262 | ACM.Certificate, |
| 263 | ACMPCA.CertificateAuthority, |
| 264 | ACMPCA.CertificateAuthorityPolicy, |
| 265 | ACMPCA.Permission, |
| 266 | AIOps.InvestigationGroup, |
| 267 | AMP.AlertManagerDefinition, |
| 268 | AMP.AnomalyDetector, |
| 269 | AMP.LoggingConfiguration, |
| 270 | AMP.QueryLoggingConfiguration, |
| 271 | AMP.ResourcePolicy, |
| 272 | AMP.RuleGroupsNamespace, |
| 273 | AMP.Scraper, |
| 274 | AMP.ScraperLoggingConfiguration, |
| 275 | AMP.Workspace, |
| 276 | Amplify.App, |
| 277 | Amplify.Branch, |
| 278 | ApiGateway.Account, |
| 279 | ApiGateway.ApiKey, |
| 280 | ApiGateway.Authorizer, |
| 281 | ApiGateway.BasePathMapping, |
| 282 | ApiGateway.DeploymentResource, |
| 283 | ApiGateway.DomainName, |
| 284 | ApiGateway.GatewayResponse, |
| 285 | ApiGateway.MethodResource, |
| 286 | ApiGateway.GatewayResource, |
| 287 | ApiGateway.RestApi, |
| 288 | ApiGateway.StageResource, |
| 289 | ApiGateway.UsagePlan, |
| 290 | ApiGateway.UsagePlanKey, |
| 291 | ApiGateway.VpcLink, |
| 292 | ApiGatewayV2.Api, |
| 293 | ApiGatewayV2.ApiMappingResource, |
| 294 | ApiGatewayV2.AuthorizerResource, |
| 295 | ApiGatewayV2.DomainName, |
| 296 | ApiGatewayV2.IntegrationResource, |
| 297 | ApiGatewayV2.RouteResource, |
| 298 | ApiGatewayV2.StageResource, |
| 299 | ApiGatewayV2.VpcLink, |
| 300 | AppConfig.Application, |
| 301 | AppConfig.ConfigurationProfile, |
| 302 | AppConfig.Deployment, |
| 303 | AppConfig.DeploymentStrategy, |
| 304 | AppConfig.Environment, |
| 305 | AppConfig.Extension, |
| 306 | AppConfig.ExtensionAssociation, |
| 307 | AppConfig.HostedConfigurationVersion, |
| 308 | AppFlow.ConnectorProfile, |
| 309 | AppFlow.Flow, |
| 310 | AppIntegrations.Application, |
| 311 | AppIntegrations.DataIntegration, |
| 312 | AppIntegrations.EventIntegration, |
| 313 | ApplicationAutoScaling.ScalableTarget, |
| 314 | ApplicationAutoScaling.ScalingPolicy, |
| 315 | ApplicationAutoScaling.ScheduledAction, |
| 316 | ApplicationSignals.Discovery, |
| 317 | ApplicationSignals.GroupingConfiguration, |
| 318 | ApplicationSignals.InstrumentationConfiguration, |
| 319 | ApplicationSignals.ServiceLevelObjective, |
| 320 | AppRegistry.Application, |
| 321 | AppRegistry.AttributeGroup, |
| 322 | AppRegistry.AttributeGroupAssociation, |
| 323 | AppRegistry.ResourceAssociation, |
| 324 | AppRunner.AutoScalingConfiguration, |
| 325 | AppRunner.ObservabilityConfiguration, |
| 326 | AppRunner.Service, |
| 327 | AppRunner.VpcConnector, |
| 328 | AppSync.ApiAssociationResource, |
| 329 | AppSync.ApiKeyResource, |
| 330 | AppSync.DataSourceResource, |
| 331 | AppSync.DomainName, |
| 332 | AppSync.FunctionResource, |
| 333 | AppSync.GraphqlApi, |
| 334 | AppSync.ResolverResource, |
| 335 | Athena.DataCatalog, |
| 336 | Athena.NamedQuery, |
| 337 | Athena.PreparedStatement, |
| 338 | Athena.WorkGroup, |
| 339 | AuditManager.Assessment, |
| 340 | AuditManager.Control, |
| 341 | AuditManager.Framework, |
| 342 | AutoScaling.AutoScalingGroup, |
| 343 | AutoScaling.LaunchTemplate, |
| 344 | AutoScaling.LifecycleHook, |
| 345 | AutoScaling.ScalingPolicy, |
| 346 | AutoScaling.ScheduledAction, |
| 347 | B2BI.Capability, |
| 348 | B2BI.Partnership, |
| 349 | B2BI.Profile, |
| 350 | B2BI.Transformer, |
| 351 | Backup.BackupPlan, |
| 352 | Backup.BackupSelection, |
| 353 | Backup.BackupVault, |
| 354 | BackupSearch.ExportJob, |
| 355 | BackupSearch.SearchJob, |
| 356 | Batch.ComputeEnvironment, |
| 357 | Batch.JobDefinition, |
| 358 | Batch.JobQueue, |
| 359 | BCMDataExports.Export, |
| 360 | Bedrock.Agent, |
| 361 | Bedrock.AgentAlias, |
| 362 | Bedrock.DataSource, |
| 363 | Bedrock.KnowledgeBase, |
| 364 | BedrockAgentCore.BrowserCustom, |
| 365 | BedrockAgentCore.CodeInterpreter, |
| 366 | BedrockAgentCore.Gateway, |
| 367 | BedrockAgentCore.Memory, |
| 368 | BedrockAgentCore.Runtime, |
| 369 | BedrockDataAutomation.Blueprint, |
| 370 | BedrockDataAutomation.DataAutomationLibrary, |
| 371 | BedrockDataAutomation.DataAutomationProject, |
| 372 | Budgets.Budget, |
| 373 | Budgets.BudgetAction, |
| 374 | Chatbot.Association, |
| 375 | Chatbot.CustomAction, |
| 376 | Chatbot.MicrosoftTeamsChannelConfiguration, |
| 377 | Chatbot.SlackChannelConfiguration, |
| 378 | CloudControl.Resource, |
| 379 | CloudFormation.Stack, |
| 380 | CloudFront.CachePolicy, |
| 381 | CloudFront.Distribution, |
| 382 | CloudFront.Function, |
| 383 | CloudFront.Invalidation, |
| 384 | CloudFront.KeyGroup, |
| 385 | CloudFront.KeyValueStore, |
| 386 | CloudFront.KvEntries, |
| 387 | CloudFront.KvRoutesUpdate, |
| 388 | CloudFront.OriginAccessControl, |
| 389 | CloudFront.OriginRequestPolicy, |
| 390 | CloudFront.PublicKey, |
| 391 | CloudFront.RealtimeLogConfig, |
| 392 | CloudFront.ResponseHeadersPolicy, |
| 393 | CloudFront.VpcOrigin, |
| 394 | CloudHSMV2.Cluster, |
| 395 | CloudHSMV2.Hsm, |
| 396 | CloudMap.HttpNamespace, |
| 397 | CloudMap.InstanceRegistration, |
| 398 | CloudMap.PrivateDnsNamespace, |
| 399 | CloudMap.PublicDnsNamespace, |
| 400 | CloudMap.Service, |
| 401 | CloudTrail.EventDataStore, |
| 402 | CloudTrail.Trail, |
| 403 | CloudWatch.Alarm, |
| 404 | CloudWatch.AlarmMuteRule, |
| 405 | CloudWatch.AnomalyDetector, |
| 406 | CloudWatch.CompositeAlarm, |
| 407 | CloudWatch.Dashboard, |
| 408 | CloudWatch.InsightRule, |
| 409 | CloudWatch.MetricStream, |
| 410 | CodeArtifact.Domain, |
| 411 | CodeArtifact.Repository, |
| 412 | CodeBuild.Project, |
| 413 | CodeBuild.ReportGroup, |
| 414 | CodeConnections.Connection, |
| 415 | CodeConnections.Host, |
| 416 | CodeConnections.RepositoryLink, |
| 417 | CodeConnections.SyncConfiguration, |
| 418 | CodeDeploy.Application, |
| 419 | CodeDeploy.DeploymentConfig, |
| 420 | CodeDeploy.DeploymentGroup, |
| 421 | CodePipeline.Pipeline, |
| 422 | Cognito.Group, |
| 423 | Cognito.IdentityPool, |
| 424 | Cognito.IdentityPoolRoleAttachment, |
| 425 | Cognito.IdentityProvider, |
| 426 | Cognito.ManagedLoginBranding, |
| 427 | Cognito.ResourceServer, |
| 428 | Cognito.User, |
| 429 | Cognito.UserPool, |
| 430 | Cognito.UserPoolClient, |
| 431 | Cognito.UserPoolDomain, |
| 432 | Config.AggregationAuthorization, |
| 433 | Config.ConfigRule, |
| 434 | Config.ConfigurationRecorder, |
| 435 | Config.DeliveryChannel, |
| 436 | Config.RetentionConfiguration, |
| 437 | ControlTower.EnabledBaseline, |
| 438 | ControlTower.EnabledControl, |
| 439 | ControlTower.LandingZone, |
| 440 | CostAndUsageReport.ReportDefinition, |
| 441 | CostExplorer.AnomalyMonitor, |
| 442 | CostExplorer.AnomalySubscription, |
| 443 | CostExplorer.CostCategory, |
| 444 | DataBrew.Dataset, |
| 445 | DataBrew.Job, |
| 446 | DataBrew.Project, |
| 447 | DataBrew.Recipe, |
| 448 | DataBrew.Ruleset, |
| 449 | DataBrew.Schedule, |
| 450 | DataExchange.DataSet, |
| 451 | DataExchange.EventAction, |
| 452 | DataExchange.Revision, |
| 453 | DataSync.LocationEfs, |
| 454 | DataSync.LocationS3, |
| 455 | DataSync.Task, |
| 456 | DataZone.Domain, |
| 457 | DataZone.Environment, |
| 458 | DataZone.EnvironmentBlueprintConfiguration, |
| 459 | DataZone.Project, |
| 460 | DAX.Cluster, |
| 461 | DAX.ParameterGroup, |
| 462 | DAX.SubnetGroup, |
| 463 | Deadline.Budget, |
| 464 | Deadline.Farm, |
| 465 | Deadline.Fleet, |
| 466 | Deadline.Monitor, |
| 467 | Deadline.Queue, |
| 468 | Deadline.StorageProfile, |
| 469 | DirectoryService.ConditionalForwarder, |
| 470 | DirectoryService.Directory, |
| 471 | DirectoryService.EventTopic, |
| 472 | DLM.LifecyclePolicy, |
| 473 | DocDB.DBCluster, |
| 474 | DocDB.DBInstance, |
| 475 | DocDB.DBSubnetGroup, |
| 476 | DocDBElastic.Cluster, |
| 477 | DMS.Endpoint, |
| 478 | DMS.ReplicationInstance, |
| 479 | DMS.ReplicationSubnetGroup, |
| 480 | DSQL.Cluster, |
| 481 | DSQL.ClusterPolicy, |
| 482 | DSQL.Stream, |
| 483 | Detective.Graph, |
| 484 | DevOpsGuru.EventSourcesConfig, |
| 485 | DevOpsGuru.NotificationChannel, |
| 486 | DevOpsGuru.ResourceCollection, |
| 487 | DevOpsGuru.ServiceIntegration, |
| 488 | DynamoDB.Table, |
| 489 | EC2.DhcpOptions, |
| 490 | EC2.EgressOnlyInternetGateway, |
| 491 | EC2.EIP, |
| 492 | EC2.FlowLog, |
| 493 | EC2.Instance, |
| 494 | EC2.InternetGateway, |
| 495 | EC2.KeyPair, |
| 496 | EC2.NatGateway, |
| 497 | EC2.NetworkAcl, |
| 498 | EC2.NetworkAclAssociation, |
| 499 | EC2.NetworkAclEntry, |
| 500 | EC2.NetworkInterface, |
| 501 | EC2.NetworkInterfaceAttachment, |
| 502 | EC2.PrefixList, |
| 503 | EC2.Route, |
| 504 | EC2.RouteTable, |
| 505 | EC2.RouteTableAssociation, |
| 506 | EC2.SecurityGroup, |
| 507 | EC2.DefaultSecurityGroup, |
| 508 | EC2.SecurityGroupRule, |
| 509 | EC2.Snapshot, |
| 510 | EC2.Subnet, |
| 511 | EC2.Volume, |
| 512 | EC2.VolumeAttachment, |
| 513 | EC2.ClientVpnEndpoint, |
| 514 | EC2.ClientVpnTargetNetworkAssociation, |
| 515 | EC2.ClientVpnAuthorizationRule, |
| 516 | EC2.ClientVpnRoute, |
| 517 | EC2.Vpc, |
| 518 | EC2.VpcEndpoint, |
| 519 | EC2.VpcPeeringConnection, |
| 520 | ECR.Image, |
| 521 | ECR.RegistryPolicy, |
| 522 | ECR.Repository, |
| 523 | ECRPublic.PublicRepository, |
| 524 | ECS.CapacityProvider, |
| 525 | ECS.Cluster, |
| 526 | ECS.Service, |
| 527 | ECS.Task, |
| 528 | ECS.TaskDefinition, |
| 529 | EFS.AccessPoint, |
| 530 | EFS.FileSystem, |
| 531 | EFS.MountTarget, |
| 532 | EKS.AccessEntry, |
| 533 | EKS.Addon, |
| 534 | EKS.Cluster, |
| 535 | EKS.FargateProfile, |
| 536 | EKS.Nodegroup, |
| 537 | EKS.PodIdentityAssociation, |
| 538 | ElastiCache.CacheCluster, |
| 539 | ElastiCache.ReplicationGroup, |
| 540 | ElastiCache.ServerlessCache, |
| 541 | ElastiCache.SubnetGroup, |
| 542 | ELBv2.Listener, |
| 543 | ELBv2.ListenerCertificate, |
| 544 | ELBv2.ListenerRule, |
| 545 | ELBv2.LoadBalancer, |
| 546 | ELBv2.TargetGroup, |
| 547 | ELBv2.TargetGroupAttachment, |
| 548 | ELBv2.TrustStore, |
| 549 | EMR.Cluster, |
| 550 | EMR.SecurityConfiguration, |
| 551 | EMR.Studio, |
| 552 | EMRContainers.JobTemplate, |
| 553 | EMRContainers.VirtualCluster, |
| 554 | EMRServerless.Application, |
| 555 | EntityResolution.IdMappingWorkflow, |
| 556 | EntityResolution.IdNamespace, |
| 557 | EntityResolution.MatchingWorkflow, |
| 558 | EntityResolution.SchemaMapping, |
| 559 | EventBridge.ApiDestination, |
| 560 | EventBridge.Archive, |
| 561 | EventBridge.Connection, |
| 562 | EventBridge.EventBus, |
| 563 | EventBridge.Permission, |
| 564 | EventBridge.Rule, |
| 565 | FIS.ExperimentTemplate, |
| 566 | FIS.TargetAccountConfiguration, |
| 567 | FMS.AdminAccount, |
| 568 | FinSpace.Environment, |
| 569 | FinSpace.KxCluster, |
| 570 | FinSpace.KxDatabase, |
| 571 | FinSpace.KxEnvironment, |
| 572 | Firehose.DeliveryStream, |
| 573 | FSx.FileSystem, |
| 574 | Forecast.Dataset, |
| 575 | Forecast.DatasetGroup, |
| 576 | FraudDetector.Detector, |
| 577 | FraudDetector.DetectorVersion, |
| 578 | FraudDetector.EntityType, |
| 579 | FraudDetector.EventType, |
| 580 | FraudDetector.Label, |
| 581 | FraudDetector.List, |
| 582 | FraudDetector.Outcome, |
| 583 | FraudDetector.Variable, |
| 584 | Glacier.Vault, |
| 585 | GlobalAccelerator.Accelerator, |
| 586 | GlobalAccelerator.EndpointGroup, |
| 587 | GlobalAccelerator.Listener, |
| 588 | Glue.Connection, |
| 589 | Glue.Crawler, |
| 590 | Glue.Database, |
| 591 | Glue.Job, |
| 592 | Glue.Table, |
| 593 | Grafana.Workspace, |
| 594 | GreengrassV2.ComponentVersion, |
| 595 | GreengrassV2.Deployment, |
| 596 | GuardDuty.Detector, |
| 597 | GuardDuty.Filter, |
| 598 | GuardDuty.IPSet, |
| 599 | GuardDuty.ThreatIntelSet, |
| 600 | HealthLake.FHIRDatastore, |
| 601 | IAM.AccessKey, |
| 602 | IAM.AccountAlias, |
| 603 | IAM.AccountPasswordPolicy, |
| 604 | IAM.Group, |
| 605 | IAM.GroupMembership, |
| 606 | IAM.InstanceProfile, |
| 607 | IAM.LoginProfile, |
| 608 | IAM.OpenIDConnectProvider, |
| 609 | IAM.Policy, |
| 610 | IAM.Role, |
| 611 | IAM.SAMLProvider, |
| 612 | IAM.ServerCertificate, |
| 613 | IAM.ServiceLinkedRole, |
| 614 | IAM.ServiceSpecificCredential, |
| 615 | IAM.SigningCertificate, |
| 616 | IAM.SSHPublicKey, |
| 617 | IAM.User, |
| 618 | IAM.VirtualMFADevice, |
| 619 | IdentityCenter.AccountAssignment, |
| 620 | IdentityCenter.Group, |
| 621 | IdentityCenter.Instance, |
| 622 | ImageBuilder.Component, |
| 623 | ImageBuilder.DistributionConfiguration, |
| 624 | ImageBuilder.ImagePipeline, |
| 625 | ImageBuilder.ImageRecipe, |
| 626 | ImageBuilder.InfrastructureConfiguration, |
| 627 | Inspector2.CisScanConfiguration, |
| 628 | Inspector2.Enabler, |
| 629 | Inspector2.Filter, |
| 630 | InternetMonitor.Monitor, |
| 631 | IdentityCenter.PermissionSet, |
| 632 | IoT.Policy, |
| 633 | IoT.Thing, |
| 634 | IoT.ThingType, |
| 635 | IoT.TopicRule, |
| 636 | IoTFleetWise.Campaign, |
| 637 | IoTFleetWise.DecoderManifest, |
| 638 | IoTFleetWise.Fleet, |
| 639 | IoTFleetWise.ModelManifest, |
| 640 | IoTFleetWise.SignalCatalog, |
| 641 | IoTFleetWise.StateTemplate, |
| 642 | IoTFleetWise.Vehicle, |
| 643 | IoTManagedIntegrations.CredentialLocker, |
| 644 | IoTManagedIntegrations.Destination, |
| 645 | IoTManagedIntegrations.ManagedThing, |
| 646 | IoTManagedIntegrations.NotificationConfiguration, |
| 647 | IoTSiteWise.Asset, |
| 648 | IoTSiteWise.AssetModel, |
| 649 | IoTSiteWise.Gateway, |
| 650 | IoTWireless.Destination, |
| 651 | IoTWireless.DeviceProfile, |
| 652 | IoTWireless.ServiceProfile, |
| 653 | IoTWireless.WirelessDevice, |
| 654 | IoTWireless.WirelessGateway, |
| 655 | IVS.Channel, |
| 656 | IVS.PlaybackKeyPair, |
| 657 | IVS.PlaybackRestrictionPolicy, |
| 658 | IVS.RecordingConfiguration, |
| 659 | IVS.StreamKey, |
| 660 | IVSChat.LoggingConfiguration, |
| 661 | IVSChat.Room, |
| 662 | IVSRealtime.Stage, |
| 663 | Kafka.ServerlessCluster, |
| 664 | Kendra.DataSource, |
| 665 | Kendra.Index, |
| 666 | Keyspaces.Keyspace, |
| 667 | Keyspaces.Table, |
| 668 | Keyspaces.Type, |
| 669 | KMS.Alias, |
| 670 | KMS.Key, |
| 671 | Kinesis.Stream, |
| 672 | Kinesis.StreamConsumer, |
| 673 | KinesisAnalyticsV2.Application, |
| 674 | KinesisAnalyticsV2.ApplicationCloudWatchLoggingOption, |
| 675 | KinesisAnalyticsV2.ApplicationSnapshot, |
| 676 | KinesisVideo.SignalingChannel, |
| 677 | KinesisVideo.Stream, |
| 678 | LakeFormation.DataCellsFilter, |
| 679 | LakeFormation.DataLakeSettings, |
| 680 | LakeFormation.LFTag, |
| 681 | LakeFormation.LFTagAssociation, |
| 682 | LakeFormation.LFTagExpression, |
| 683 | LakeFormation.OptIn, |
| 684 | LakeFormation.Permissions, |
| 685 | LakeFormation.Resource, |
| 686 | Lambda.Alias, |
| 687 | Lambda.EventSourceMapping, |
| 688 | Lambda.Function, |
| 689 | Lambda.LayerVersion, |
| 690 | Lambda.Version, |
| 691 | Lambda.MicrovmImage, |
| 692 | Lambda.NetworkConnector, |
| 693 | Lambda.Permission, |
| 694 | LexV2.Bot, |
| 695 | LexV2.BotAlias, |
| 696 | LexV2.BotLocale, |
| 697 | LexV2.BotVersion, |
| 698 | LexV2.Intent, |
| 699 | LexV2.SlotType, |
| 700 | LicenseManager.LicenseConfiguration, |
| 701 | Location.ApiKey, |
| 702 | Location.GeofenceCollection, |
| 703 | Location.Map, |
| 704 | Location.PlaceIndex, |
| 705 | Location.RouteCalculator, |
| 706 | Location.Tracker, |
| 707 | Location.TrackerConsumer, |
| 708 | Logs.Destination, |
| 709 | Logs.LogGroup, |
| 710 | Logs.LogStream, |
| 711 | Logs.MetricFilter, |
| 712 | Logs.ResourcePolicy, |
| 713 | Logs.SubscriptionFilter, |
| 714 | MediaConnect.Flow, |
| 715 | MediaConvert.Job, |
| 716 | MediaConvert.JobTemplate, |
| 717 | MediaConvert.Preset, |
| 718 | MediaConvert.Queue, |
| 719 | MediaLive.Channel, |
| 720 | MediaLive.Input, |
| 721 | MediaLive.InputSecurityGroup, |
| 722 | MediaPackageV2.Channel, |
| 723 | MediaPackageV2.ChannelGroup, |
| 724 | MediaPackageV2.OriginEndpoint, |
| 725 | MediaTailor.PlaybackConfiguration, |
| 726 | MedicalImaging.Datastore, |
| 727 | MQ.Broker, |
| 728 | MQ.Configuration, |
| 729 | MWAA.Environment, |
| 730 | MWAAServerless.Workflow, |
| 731 | Macie2.Session, |
| 732 | Macie2.ClassificationJob, |
| 733 | Macie2.AllowList, |
| 734 | Macie2.CustomDataIdentifier, |
| 735 | Macie2.FindingsFilter, |
| 736 | MailManager.AddonInstance, |
| 737 | MailManager.AddonSubscription, |
| 738 | MailManager.AddressList, |
| 739 | MailManager.Archive, |
| 740 | MailManager.IngressPoint, |
| 741 | MailManager.Relay, |
| 742 | MailManager.RuleSet, |
| 743 | MailManager.TrafficPolicy, |
| 744 | MemoryDB.ACL, |
| 745 | MemoryDB.Cluster, |
| 746 | MemoryDB.ParameterGroup, |
| 747 | MemoryDB.SubnetGroup, |
| 748 | MemoryDB.User, |
| 749 | Neptune.DBCluster, |
| 750 | Neptune.DBClusterParameterGroup, |
| 751 | Neptune.DBInstance, |
| 752 | Neptune.DBParameterGroup, |
| 753 | Neptune.DBSubnetGroup, |
| 754 | NeptuneGraph.Graph, |
| 755 | NetworkFirewall.Firewall, |
| 756 | NetworkFirewall.FirewallPolicy, |
| 757 | NetworkFirewall.LoggingConfiguration, |
| 758 | NetworkFirewall.RuleGroup, |
| 759 | Notifications.ChannelAssociation, |
| 760 | Notifications.EventRule, |
| 761 | Notifications.NotificationConfiguration, |
| 762 | Notifications.NotificationHub, |
| 763 | NotificationsContacts.EmailContact, |
| 764 | OAM.Link, |
| 765 | OAM.Sink, |
| 766 | ObservabilityAdmin.TelemetryConfig, |
| 767 | ObservabilityAdmin.TelemetryRule, |
| 768 | Omics.AnnotationStore, |
| 769 | Omics.ReferenceStore, |
| 770 | Omics.RunGroup, |
| 771 | Omics.SequenceStore, |
| 772 | Omics.VariantStore, |
| 773 | Omics.Workflow, |
| 774 | OpenSearch.Domain, |
| 775 | OSIS.Pipeline, |
| 776 | OSIS.PipelineEndpoint, |
| 777 | OSIS.ResourcePolicy, |
| 778 | OpenSearchServerless.AccessPolicy, |
| 779 | OpenSearchServerless.Collection, |
| 780 | OpenSearchServerless.CollectionGroup, |
| 781 | OpenSearchServerless.LifecyclePolicy, |
| 782 | OpenSearchServerless.SecurityConfig, |
| 783 | OpenSearchServerless.SecurityPolicy, |
| 784 | OpenSearchServerless.VpcEndpoint, |
| 785 | Organizations.Account, |
| 786 | Organizations.DelegatedAdministrator, |
| 787 | Organizations.Organization, |
| 788 | Organizations.OrganizationalUnit, |
| 789 | Organizations.OrganizationResourcePolicy, |
| 790 | Organizations.Policy, |
| 791 | Organizations.PolicyAttachment, |
| 792 | Organizations.Root, |
| 793 | Organizations.RootPolicyType, |
| 794 | Organizations.TrustedServiceAccess, |
| 795 | PaymentCryptography.Alias, |
| 796 | PaymentCryptography.Key, |
| 797 | Personalize.Dataset, |
| 798 | Personalize.DatasetGroup, |
| 799 | Personalize.EventTracker, |
| 800 | Personalize.Schema, |
| 801 | PinpointSMSVoiceV2.ConfigurationSet, |
| 802 | PinpointSMSVoiceV2.EventDestination, |
| 803 | PinpointSMSVoiceV2.OptOutList, |
| 804 | PinpointSMSVoiceV2.PhoneNumber, |
| 805 | Pipes.Pipe, |
| 806 | Polly.Lexicon, |
| 807 | QApps.QApp, |
| 808 | QBusiness.Application, |
| 809 | QBusiness.DataSource, |
| 810 | QBusiness.Index, |
| 811 | QBusiness.Retriever, |
| 812 | QBusiness.WebExperience, |
| 813 | QuickSight.Analysis, |
| 814 | QuickSight.Dashboard, |
| 815 | QuickSight.DataSet, |
| 816 | QuickSight.DataSource, |
| 817 | RAM.Permission, |
| 818 | RAM.ResourceShare, |
| 819 | RDS.DBCluster, |
| 820 | RDS.DBClusterEndpoint, |
| 821 | RDS.DBClusterParameterGroup, |
| 822 | RDS.DBInstance, |
| 823 | RDS.DBParameterGroup, |
| 824 | RDS.DBProxy, |
| 825 | RDS.DBProxyEndpoint, |
| 826 | RDS.DBProxyTargetGroup, |
| 827 | RDS.DBSubnetGroup, |
| 828 | Rbin.Rule, |
| 829 | RePostSpace.Space, |
| 830 | Redshift.Cluster, |
| 831 | Redshift.ClusterParameterGroup, |
| 832 | Redshift.ClusterSubnetGroup, |
| 833 | Redshift.EventSubscription, |
| 834 | RedshiftServerless.Namespace, |
| 835 | RedshiftServerless.Workgroup, |
| 836 | ResourceExplorer.Index, |
| 837 | ResourceExplorer.View, |
| 838 | ResourceGroups.Group, |
| 839 | RolesAnywhere.Crl, |
| 840 | RolesAnywhere.Profile, |
| 841 | RolesAnywhere.TrustAnchor, |
| 842 | Route53.HealthCheck, |
| 843 | Route53.HostedZone, |
| 844 | Route53.QueryLoggingConfig, |
| 845 | Route53.Record, |
| 846 | Route53.Records, |
| 847 | Route53.VpcAssociationAuthorization, |
| 848 | Route53.ZoneVpcAssociation, |
| 849 | Route53Profiles.Profile, |
| 850 | Route53Profiles.ProfileAssociation, |
| 851 | Route53Profiles.ProfileResourceAssociation, |
| 852 | Route53Resolver.ResolverEndpoint, |
| 853 | Route53Resolver.ResolverRule, |
| 854 | Route53Resolver.ResolverRuleAssociation, |
| 855 | RUM.AppMonitor, |
| 856 | RUM.MetricsDestination, |
| 857 | RUM.ResourcePolicy, |
| 858 | S3.Bucket, |
| 859 | S3Control.AccessPoint, |
| 860 | S3Control.AccessPointPolicy, |
| 861 | S3Control.MultiRegionAccessPoint, |
| 862 | S3Control.ObjectLambdaAccessPoint, |
| 863 | S3Control.StorageLensConfiguration, |
| 864 | S3Files.AccessPoint, |
| 865 | S3Files.FileSystem, |
| 866 | S3Tables.TableBucket, |
| 867 | S3Tables.Namespace, |
| 868 | S3Tables.Table, |
| 869 | S3Vectors.VectorBucket, |
| 870 | S3Vectors.Index, |
| 871 | SageMaker.Model, |
| 872 | SageMaker.EndpointConfig, |
| 873 | SageMaker.Endpoint, |
| 874 | SageMaker.FeatureGroup, |
| 875 | SageMaker.Cluster, |
| 876 | SageMaker.ClusterSchedulerConfig, |
| 877 | SageMaker.ComputeQuota, |
| 878 | Scheduler.Schedule, |
| 879 | Scheduler.ScheduleGroup, |
| 880 | Schemas.Discoverer, |
| 881 | Schemas.Registry, |
| 882 | Schemas.Schema, |
| 883 | SecurityHub.ActionTarget, |
| 884 | SecurityHub.AutomationRule, |
| 885 | SecurityHub.FindingAggregator, |
| 886 | SecurityHub.Hub, |
| 887 | SecurityHub.Insight, |
| 888 | SecurityLake.AwsLogSource, |
| 889 | SecurityLake.CustomLogSource, |
| 890 | SecurityLake.DataLake, |
| 891 | SecurityLake.ExceptionSubscription, |
| 892 | SecurityLake.Subscriber, |
| 893 | SecurityLake.SubscriberNotification, |
| 894 | SecretsManager.RotationSchedule, |
| 895 | SecretsManager.Secret, |
| 896 | ServiceCatalog.Portfolio, |
| 897 | ServiceCatalog.PortfolioProductAssociation, |
| 898 | ServiceCatalog.PrincipalPortfolioAssociation, |
| 899 | ServiceCatalog.Product, |
| 900 | ServiceQuotas.ServiceQuotaIncreaseRequest, |
| 901 | SES.AccountSettings, |
| 902 | SES.ActiveReceiptRuleSet, |
| 903 | SES.ConfigurationSet, |
| 904 | SES.ConfigurationSetEventDestination, |
| 905 | SES.Contact, |
| 906 | SES.ContactList, |
| 907 | SES.CustomVerificationEmailTemplate, |
| 908 | SES.DedicatedIpPool, |
| 909 | SES.EmailIdentity, |
| 910 | SES.EmailIdentityPolicy, |
| 911 | SES.EmailTemplate, |
| 912 | SES.MultiRegionEndpoint, |
| 913 | SES.ReceiptFilter, |
| 914 | SES.ReceiptRule, |
| 915 | SES.ReceiptRuleSet, |
| 916 | SES.Tenant, |
| 917 | SES.TenantResourceAssociation, |
| 918 | Shield.Protection, |
| 919 | Shield.ProtectionGroup, |
| 920 | Shield.Subscription, |
| 921 | Signer.ProfilePermission, |
| 922 | Signer.SigningProfile, |
| 923 | SimpleDB.Domain, |
| 924 | SNS.PlatformApplication, |
| 925 | SNS.Subscription, |
| 926 | SNS.Topic, |
| 927 | SocialMessaging.LinkedWhatsAppBusinessAccount, |
| 928 | SQS.Queue, |
| 929 | SSM.Parameter, |
| 930 | SSMContacts.Contact, |
| 931 | SSMContacts.ContactChannel, |
| 932 | SSMContacts.Plan, |
| 933 | SSMContacts.Rotation, |
| 934 | SSMIncidents.ReplicationSet, |
| 935 | SSMIncidents.ResponsePlan, |
| 936 | StepFunctions.Activity, |
| 937 | StepFunctions.StateMachine, |
| 938 | Synthetics.Canary, |
| 939 | Synthetics.Group, |
| 940 | Textract.Adapter, |
| 941 | Timestream.Database, |
| 942 | Timestream.DbInstance, |
| 943 | Timestream.ScheduledQuery, |
| 944 | Timestream.Table, |
| 945 | Transfer.Server, |
| 946 | Transfer.User, |
| 947 | Translate.ParallelData, |
| 948 | Translate.Terminology, |
| 949 | VerifiedPermissions.IdentitySource, |
| 950 | VerifiedPermissions.Policy, |
| 951 | VerifiedPermissions.PolicyStore, |
| 952 | VerifiedPermissions.PolicyStoreAlias, |
| 953 | VerifiedPermissions.PolicyTemplate, |
| 954 | VerifiedPermissions.Schema, |
| 955 | VpcLattice.AccessLogSubscription, |
| 956 | VpcLattice.AuthPolicy, |
| 957 | VpcLattice.Listener, |
| 958 | VpcLattice.ResourcePolicy, |
| 959 | VpcLattice.Rule, |
| 960 | VpcLattice.ServiceNetworkServiceAssociation, |
| 961 | VpcLattice.TargetGroup, |
| 962 | VpcLattice.Service, |
| 963 | VpcLattice.ServiceNetwork, |
| 964 | VpcLattice.ServiceNetworkVpcAssociation, |
| 965 | WAFv2.IPSet, |
| 966 | WAFv2.LoggingConfiguration, |
| 967 | WAFv2.RegexPatternSet, |
| 968 | WAFv2.RuleGroup, |
| 969 | WAFv2.WebACL, |
| 970 | WAFv2.WebACLAssociation, |
| 971 | Website.AssetDeployment, |
| 972 | WebsiteServer, |
| 973 | XRay.Group, |
| 974 | XRay.ResourcePolicy, |
| 975 | XRay.SamplingRule, |
| 976 | ]), |
| 977 | (collection) => |
| 978 | Effect.map(captureAwsEnvironment, (environment) => |
| 979 | pinCollectionEnvironment(collection, environment), |
| 980 | ), |
| 981 | ), |
| 982 | ).pipe( |
| 983 | Layer.provide( |
| 984 | Layer.mergeAll( |
| 985 | Layer.mergeAll( |
| 986 | ACMPCA.CertificateAuthorityProvider(), |
| 987 | ACMPCA.CertificateAuthorityPolicyProvider(), |
| 988 | ACMPCA.PermissionProvider(), |
| 989 | AppFlow.ConnectorProfileProvider(), |
| 990 | AppFlow.FlowProvider(), |
| 991 | AppIntegrations.ApplicationProvider(), |
| 992 | AppIntegrations.DataIntegrationProvider(), |
| 993 | AppIntegrations.EventIntegrationProvider(), |
| 994 | B2BI.CapabilityProvider(), |
| 995 | B2BI.PartnershipProvider(), |
| 996 | B2BI.ProfileProvider(), |
| 997 | B2BI.TransformerProvider(), |
| 998 | BedrockDataAutomation.BlueprintProvider(), |
| 999 | BedrockDataAutomation.DataAutomationLibraryProvider(), |
| 1000 | BedrockDataAutomation.DataAutomationProjectProvider(), |
| 1001 | Config.AggregationAuthorizationProvider(), |
| 1002 | Config.ConfigRuleProvider(), |
| 1003 | Config.ConfigurationRecorderProvider(), |
| 1004 | Config.DeliveryChannelProvider(), |
| 1005 | Config.RetentionConfigurationProvider(), |
| 1006 | ), |
| 1007 | Layer.mergeAll( |
| 1008 | flociDual(ACM.AccountConfiguration, () => |
| 1009 | ACM.AccountConfigurationProvider(), |
| 1010 | ), |
| 1011 | flociDual(ACM.Certificate, () => ACM.CertificateProvider()), |
| 1012 | AMP.AlertManagerDefinitionProvider(), |
| 1013 | AMP.AnomalyDetectorProvider(), |
| 1014 | AMP.LoggingConfigurationProvider(), |
| 1015 | AMP.QueryLoggingConfigurationProvider(), |
| 1016 | AMP.ResourcePolicyProvider(), |
| 1017 | AMP.RuleGroupsNamespaceProvider(), |
| 1018 | AMP.ScraperProvider(), |
| 1019 | AMP.ScraperLoggingConfigurationProvider(), |
| 1020 | AMP.WorkspaceProvider(), |
| 1021 | flociDual(ApiGateway.Account, () => ApiGateway.AccountProvider()), |
| 1022 | flociDual(ApiGateway.ApiKey, () => ApiGateway.ApiKeyProvider()), |
| 1023 | flociDual(ApiGateway.Authorizer, () => |
| 1024 | ApiGateway.AuthorizerProvider(), |
| 1025 | ), |
| 1026 | flociDual(ApiGateway.BasePathMapping, () => |
| 1027 | ApiGateway.BasePathMappingProvider(), |
| 1028 | ), |
| 1029 | flociDual(ApiGateway.DeploymentResource, () => |
| 1030 | ApiGateway.DeploymentProvider(), |
| 1031 | ), |
| 1032 | flociDual(ApiGateway.DomainName, () => |
| 1033 | ApiGateway.DomainNameProvider(), |
| 1034 | ), |
| 1035 | flociDual(ApiGateway.GatewayResponse, () => |
| 1036 | ApiGateway.GatewayResponseProvider(), |
| 1037 | ), |
| 1038 | flociDual(ApiGateway.MethodResource, () => |
| 1039 | ApiGateway.MethodProvider(), |
| 1040 | ), |
| 1041 | flociDual(ApiGateway.GatewayResource, () => |
| 1042 | ApiGateway.ResourceProvider(), |
| 1043 | ), |
| 1044 | flociDual(ApiGateway.RestApi, () => ApiGateway.RestApiProvider()), |
| 1045 | flociDual(ApiGateway.StageResource, () => ApiGateway.StageProvider()), |
| 1046 | flociDual(ApiGateway.UsagePlan, () => ApiGateway.UsagePlanProvider()), |
| 1047 | flociDual(ApiGateway.UsagePlanKey, () => |
| 1048 | ApiGateway.UsagePlanKeyProvider(), |
| 1049 | ), |
| 1050 | flociDual(ApiGateway.VpcLink, () => ApiGateway.VpcLinkProvider()), |
| 1051 | flociDual(ApiGatewayV2.Api, () => ApiGatewayV2.ApiProvider()), |
| 1052 | ApiGatewayV2.ApiMappingProvider(), |
| 1053 | flociDual(ApiGatewayV2.AuthorizerResource, () => |
| 1054 | ApiGatewayV2.AuthorizerProvider(), |
| 1055 | ), |
| 1056 | flociDual(ApiGatewayV2.DomainName, () => |
| 1057 | ApiGatewayV2.DomainNameProvider(), |
| 1058 | ), |
| 1059 | flociDual(ApiGatewayV2.IntegrationResource, () => |
| 1060 | ApiGatewayV2.IntegrationProvider(), |
| 1061 | ), |
| 1062 | flociDual(ApiGatewayV2.RouteResource, () => |
| 1063 | ApiGatewayV2.RouteProvider(), |
| 1064 | ), |
| 1065 | flociDual(ApiGatewayV2.StageResource, () => |
| 1066 | ApiGatewayV2.StageProvider(), |
| 1067 | ), |
| 1068 | flociDual(ApiGatewayV2.VpcLink, () => ApiGatewayV2.VpcLinkProvider()), |
| 1069 | flociDual(AppConfig.Application, () => |
| 1070 | AppConfig.ApplicationProvider(), |
| 1071 | ), |
| 1072 | flociDual(AppConfig.ConfigurationProfile, () => |
| 1073 | AppConfig.ConfigurationProfileProvider(), |
| 1074 | ), |
| 1075 | flociDual(AppConfig.Deployment, () => AppConfig.DeploymentProvider()), |
| 1076 | flociDual(AppConfig.DeploymentStrategy, () => |
| 1077 | AppConfig.DeploymentStrategyProvider(), |
| 1078 | ), |
| 1079 | flociDual(AppConfig.Environment, () => |
| 1080 | AppConfig.EnvironmentProvider(), |
| 1081 | ), |
| 1082 | flociDual(AppConfig.Extension, () => AppConfig.ExtensionProvider()), |
| 1083 | flociDual(AppConfig.ExtensionAssociation, () => |
| 1084 | AppConfig.ExtensionAssociationProvider(), |
| 1085 | ), |
| 1086 | flociDual(AppConfig.HostedConfigurationVersion, () => |
| 1087 | AppConfig.HostedConfigurationVersionProvider(), |
| 1088 | ), |
| 1089 | flociDual(ApplicationAutoScaling.ScalableTarget, () => |
| 1090 | ApplicationAutoScaling.ScalableTargetProvider(), |
| 1091 | ), |
| 1092 | flociDual(ApplicationAutoScaling.ScalingPolicy, () => |
| 1093 | ApplicationAutoScaling.ScalingPolicyProvider(), |
| 1094 | ), |
| 1095 | flociDual(ApplicationAutoScaling.ScheduledAction, () => |
| 1096 | ApplicationAutoScaling.ScheduledActionProvider(), |
| 1097 | ), |
| 1098 | AppRunner.AutoScalingConfigurationProvider(), |
| 1099 | AppRunner.ObservabilityConfigurationProvider(), |
| 1100 | AppRunner.ServiceProvider(), |
| 1101 | AppRunner.VpcConnectorProvider(), |
| 1102 | flociDual(AppSync.ApiAssociationResource, () => |
| 1103 | AppSync.ApiAssociationProvider(), |
| 1104 | ), |
| 1105 | flociDual(AppSync.ApiKeyResource, () => AppSync.ApiKeyProvider()), |
| 1106 | flociDual(AppSync.DataSourceResource, () => |
| 1107 | AppSync.DataSourceProvider(), |
| 1108 | ), |
| 1109 | flociDual(AppSync.DomainName, () => AppSync.DomainNameProvider()), |
| 1110 | flociDual(AppSync.FunctionResource, () => AppSync.FunctionProvider()), |
| 1111 | flociDual(AppSync.GraphqlApi, () => AppSync.GraphqlApiProvider()), |
| 1112 | flociDual(AppSync.ResolverResource, () => AppSync.ResolverProvider()), |
| 1113 | flociDual(Athena.DataCatalog, () => Athena.DataCatalogProvider()), |
| 1114 | flociDual(Athena.NamedQuery, () => Athena.NamedQueryProvider()), |
| 1115 | flociDual(Athena.PreparedStatement, () => |
| 1116 | Athena.PreparedStatementProvider(), |
| 1117 | ), |
| 1118 | flociDual(Athena.WorkGroup, () => Athena.WorkGroupProvider()), |
| 1119 | flociDual(AutoScaling.AutoScalingGroup, () => |
| 1120 | AutoScaling.AutoScalingGroupProvider(), |
| 1121 | ), |
| 1122 | flociDual(AutoScaling.LaunchTemplate, () => |
| 1123 | AutoScaling.LaunchTemplateProvider(), |
| 1124 | ), |
| 1125 | flociDual(AutoScaling.LifecycleHook, () => |
| 1126 | AutoScaling.LifecycleHookProvider(), |
| 1127 | ), |
| 1128 | flociDual(AutoScaling.ScalingPolicy, () => |
| 1129 | AutoScaling.ScalingPolicyProvider(), |
| 1130 | ), |
| 1131 | flociDual(AutoScaling.ScheduledAction, () => |
| 1132 | AutoScaling.ScheduledActionProvider(), |
| 1133 | ), |
| 1134 | flociDual(Batch.ComputeEnvironment, () => |
| 1135 | Batch.ComputeEnvironmentProvider(), |
| 1136 | ), |
| 1137 | flociDual(Batch.JobDefinition, () => Batch.JobDefinitionProvider()), |
| 1138 | flociDual(Batch.JobQueue, () => Batch.JobQueueProvider()), |
| 1139 | CloudControl.CloudControlResourceProvider(), |
| 1140 | CloudFormation.StackProvider(), |
| 1141 | flociDual(CloudFront.CachePolicy, () => |
| 1142 | CloudFront.CachePolicyProvider(), |
| 1143 | ), |
| 1144 | flociDual(CloudFront.Distribution, () => |
| 1145 | CloudFront.DistributionProvider(), |
| 1146 | ), |
| 1147 | flociDual(CloudFront.Function, () => CloudFront.FunctionProvider()), |
| 1148 | flociDual(CloudFront.Invalidation, () => |
| 1149 | CloudFront.InvalidationProvider(), |
| 1150 | ), |
| 1151 | flociDual(CloudFront.KeyGroup, () => CloudFront.KeyGroupProvider()), |
| 1152 | flociDual(CloudFront.KeyValueStore, () => |
| 1153 | CloudFront.KeyValueStoreProvider(), |
| 1154 | ), |
| 1155 | flociDual(CloudFront.KvEntries, () => CloudFront.KvEntriesProvider()), |
| 1156 | flociDual(CloudFront.KvRoutesUpdate, () => |
| 1157 | CloudFront.KvRoutesUpdateProvider(), |
| 1158 | ), |
| 1159 | flociDual(CloudFront.OriginAccessControl, () => |
| 1160 | CloudFront.OriginAccessControlProvider(), |
| 1161 | ), |
| 1162 | flociDual(CloudFront.OriginRequestPolicy, () => |
| 1163 | CloudFront.OriginRequestPolicyProvider(), |
| 1164 | ), |
| 1165 | flociDual(CloudFront.PublicKey, () => CloudFront.PublicKeyProvider()), |
| 1166 | flociDual(CloudFront.RealtimeLogConfig, () => |
| 1167 | CloudFront.RealtimeLogConfigProvider(), |
| 1168 | ), |
| 1169 | flociDual(CloudFront.ResponseHeadersPolicy, () => |
| 1170 | CloudFront.ResponseHeadersPolicyProvider(), |
| 1171 | ), |
| 1172 | flociDual(CloudFront.VpcOrigin, () => CloudFront.VpcOriginProvider()), |
| 1173 | CloudHSMV2.ClusterProvider(), |
| 1174 | CloudHSMV2.HsmProvider(), |
| 1175 | flociDual(CloudMap.HttpNamespace, () => |
| 1176 | CloudMap.HttpNamespaceProvider(), |
| 1177 | ), |
| 1178 | flociDual(CloudMap.InstanceRegistration, () => |
| 1179 | CloudMap.InstanceRegistrationProvider(), |
| 1180 | ), |
| 1181 | flociDual(CloudMap.PrivateDnsNamespace, () => |
| 1182 | CloudMap.PrivateDnsNamespaceProvider(), |
| 1183 | ), |
| 1184 | flociDual(CloudMap.PublicDnsNamespace, () => |
| 1185 | CloudMap.PublicDnsNamespaceProvider(), |
| 1186 | ), |
| 1187 | flociDual(CloudMap.Service, () => CloudMap.ServiceProvider()), |
| 1188 | CloudWatch.AlarmMuteRuleProvider(), |
| 1189 | CloudWatch.AlarmProvider(), |
| 1190 | CloudWatch.AnomalyDetectorProvider(), |
| 1191 | CloudWatch.CompositeAlarmProvider(), |
| 1192 | CloudWatch.DashboardProvider(), |
| 1193 | CloudWatch.InsightRuleProvider(), |
| 1194 | CloudWatch.MetricStreamProvider(), |
| 1195 | CodeArtifact.DomainProvider(), |
| 1196 | CodeArtifact.RepositoryProvider(), |
| 1197 | CodeBuild.ProjectProvider(), |
| 1198 | CodeBuild.ReportGroupProvider(), |
| 1199 | CodeConnections.ConnectionProvider(), |
| 1200 | CodeConnections.HostProvider(), |
| 1201 | CodeConnections.RepositoryLinkProvider(), |
| 1202 | CodeConnections.SyncConfigurationProvider(), |
| 1203 | CodeDeploy.ApplicationProvider(), |
| 1204 | CodeDeploy.DeploymentConfigProvider(), |
| 1205 | CodeDeploy.DeploymentGroupProvider(), |
| 1206 | CodePipeline.PipelineProvider(), |
| 1207 | flociDual(Cognito.Group, () => Cognito.GroupProvider()), |
| 1208 | flociDual(Cognito.IdentityPool, () => Cognito.IdentityPoolProvider()), |
| 1209 | flociDual(Cognito.IdentityPoolRoleAttachment, () => |
| 1210 | Cognito.IdentityPoolRoleAttachmentProvider(), |
| 1211 | ), |
| 1212 | flociDual(Cognito.IdentityProvider, () => |
| 1213 | Cognito.IdentityProviderProvider(), |
| 1214 | ), |
| 1215 | flociDual(Cognito.ManagedLoginBranding, () => |
| 1216 | Cognito.ManagedLoginBrandingProvider(), |
| 1217 | ), |
| 1218 | flociDual(Cognito.ResourceServer, () => |
| 1219 | Cognito.ResourceServerProvider(), |
| 1220 | ), |
| 1221 | flociDual(Cognito.UserPoolClient, () => |
| 1222 | Cognito.UserPoolClientProvider(), |
| 1223 | ), |
| 1224 | flociDual(Cognito.User, () => Cognito.UserProvider()), |
| 1225 | flociDual(Cognito.UserPoolDomain, () => |
| 1226 | Cognito.UserPoolDomainProvider(), |
| 1227 | ), |
| 1228 | flociDual(Cognito.UserPool, () => Cognito.UserPoolProvider()), |
| 1229 | ), |
| 1230 | Layer.mergeAll( |
| 1231 | DataBrew.DatasetProvider(), |
| 1232 | DataBrew.JobProvider(), |
| 1233 | DataBrew.ProjectProvider(), |
| 1234 | DataBrew.RecipeProvider(), |
| 1235 | DataBrew.RulesetProvider(), |
| 1236 | DataBrew.ScheduleProvider(), |
| 1237 | DataExchange.DataSetProvider(), |
| 1238 | DataExchange.EventActionProvider(), |
| 1239 | DataExchange.RevisionProvider(), |
| 1240 | DataSync.LocationEfsProvider(), |
| 1241 | DataSync.LocationS3Provider(), |
| 1242 | DataSync.TaskProvider(), |
| 1243 | DataZone.DomainProvider(), |
| 1244 | DataZone.EnvironmentProvider(), |
| 1245 | DataZone.EnvironmentBlueprintConfigurationProvider(), |
| 1246 | DataZone.ProjectProvider(), |
| 1247 | DAX.ClusterProvider(), |
| 1248 | DAX.ParameterGroupProvider(), |
| 1249 | DAX.SubnetGroupProvider(), |
| 1250 | Deadline.BudgetProvider(), |
| 1251 | Deadline.FarmProvider(), |
| 1252 | Deadline.FleetProvider(), |
| 1253 | Deadline.MonitorProvider(), |
| 1254 | Deadline.QueueProvider(), |
| 1255 | Deadline.StorageProfileProvider(), |
| 1256 | DirectoryService.ConditionalForwarderProvider(), |
| 1257 | DirectoryService.DirectoryProvider(), |
| 1258 | DirectoryService.EventTopicProvider(), |
| 1259 | DLM.LifecyclePolicyProvider(), |
| 1260 | DocDB.DBClusterProvider(), |
| 1261 | DocDB.DBInstanceProvider(), |
| 1262 | DocDB.DBSubnetGroupProvider(), |
| 1263 | DocDBElastic.ClusterProvider(), |
| 1264 | DMS.EndpointProvider(), |
| 1265 | DMS.ReplicationInstanceProvider(), |
| 1266 | DMS.ReplicationSubnetGroupProvider(), |
| 1267 | DSQL.ClusterProvider(), |
| 1268 | DSQL.ClusterPolicyProvider(), |
| 1269 | DSQL.StreamProvider(), |
| 1270 | DevOpsGuru.EventSourcesConfigProvider(), |
| 1271 | DevOpsGuru.NotificationChannelProvider(), |
| 1272 | DevOpsGuru.ResourceCollectionProvider(), |
| 1273 | DevOpsGuru.ServiceIntegrationProvider(), |
| 1274 | flociDual(DynamoDB.Table, () => DynamoDB.TableProvider()), |
| 1275 | // Keep this service-sized group nested: a flat mergeAll here exceeds |
| 1276 | // Effect's variadic inference limit and silently drops tail layers. |
| 1277 | Layer.mergeAll( |
| 1278 | EC2.ClientVpnEndpointProvider(), |
| 1279 | EC2.ClientVpnTargetNetworkAssociationProvider(), |
| 1280 | EC2.ClientVpnAuthorizationRuleProvider(), |
| 1281 | EC2.ClientVpnRouteProvider(), |
| 1282 | EC2.DefaultSecurityGroupProvider(), |
| 1283 | flociDual(EC2.DhcpOptions, () => EC2.DhcpOptionsProvider()), |
| 1284 | flociDual(EC2.EgressOnlyInternetGateway, () => |
| 1285 | EC2.EgressOnlyInternetGatewayProvider(), |
| 1286 | ), |
| 1287 | flociDual(EC2.EIP, () => EC2.EIPProvider()), |
| 1288 | flociDual(EC2.FlowLog, () => EC2.FlowLogProvider()), |
| 1289 | flociDual(EC2.Instance, () => EC2.InstanceProvider()), |
| 1290 | // Dual EC2 networking glue: local (floci) ECS services/tasks run |
| 1291 | // inside an emulated VPC — a live VPC can't host local containers |
| 1292 | // and local target groups can't reference a live vpcId. |
| 1293 | flociDual(EC2.InternetGateway, () => EC2.InternetGatewayProvider()), |
| 1294 | flociDual(EC2.KeyPair, () => EC2.KeyPairProvider()), |
| 1295 | flociDual(EC2.NatGateway, () => EC2.NatGatewayProvider()), |
| 1296 | flociDual(EC2.NetworkAclAssociation, () => |
| 1297 | EC2.NetworkAclAssociationProvider(), |
| 1298 | ), |
| 1299 | flociDual(EC2.NetworkAclEntry, () => EC2.NetworkAclEntryProvider()), |
| 1300 | flociDual(EC2.NetworkAcl, () => EC2.NetworkAclProvider()), |
| 1301 | flociDual(EC2.NetworkInterface, () => |
| 1302 | EC2.NetworkInterfaceProvider(), |
| 1303 | ), |
| 1304 | flociDual(EC2.NetworkInterfaceAttachment, () => |
| 1305 | EC2.NetworkInterfaceAttachmentProvider(), |
| 1306 | ), |
| 1307 | flociDual(EC2.PrefixList, () => EC2.PrefixListProvider()), |
| 1308 | flociDual(EC2.Route, () => EC2.RouteProvider()), |
| 1309 | flociDual(EC2.RouteTableAssociation, () => |
| 1310 | EC2.RouteTableAssociationProvider(), |
| 1311 | ), |
| 1312 | flociDual(EC2.RouteTable, () => EC2.RouteTableProvider()), |
| 1313 | flociDual(EC2.SecurityGroup, () => EC2.SecurityGroupProvider()), |
| 1314 | flociDual(EC2.SecurityGroupRule, () => |
| 1315 | EC2.SecurityGroupRuleProvider(), |
| 1316 | ), |
| 1317 | flociDual(EC2.Snapshot, () => EC2.SnapshotProvider()), |
| 1318 | flociDual(EC2.Subnet, () => EC2.SubnetProvider()), |
| 1319 | flociDual(EC2.Volume, () => EC2.VolumeProvider()), |
| 1320 | flociDual(EC2.VolumeAttachment, () => |
| 1321 | EC2.VolumeAttachmentProvider(), |
| 1322 | ), |
| 1323 | flociDual(EC2.VpcEndpoint, () => EC2.VpcEndpointProvider()), |
| 1324 | flociDual(EC2.VpcPeeringConnection, () => |
| 1325 | EC2.VpcPeeringConnectionProvider(), |
| 1326 | ), |
| 1327 | flociDual(EC2.Vpc, () => EC2.VpcProvider()), |
| 1328 | ), |
| 1329 | flociDual(ECR.Image, () => ECR.ImageProvider()), |
| 1330 | flociDual(ECR.RegistryPolicy, () => ECR.RegistryPolicyProvider()), |
| 1331 | flociDual(ECR.Repository, () => ECR.RepositoryProvider()), |
| 1332 | flociDual(ECS.CapacityProvider, () => ECS.CapacityProviderProvider()), |
| 1333 | flociDual(ECS.Cluster, () => ECS.ClusterProvider()), |
| 1334 | // Dual: live ECS in deploy, floci-emulated (RPC-sidecar-hosted, |
| 1335 | // hot-reloading real containers) in dev — see FlociServiceProvider |
| 1336 | // / FlociTaskProvider. |
| 1337 | // Hand-written floci local providers still live on the floci data |
| 1338 | // plane: declare it so deploy-time binding clients (Action bodies, |
| 1339 | // plan-time `execute`) route to the emulator — and so a binding |
| 1340 | // spanning a `flociDual` sibling (RunTask(cluster, task)) does not |
| 1341 | // see "mixed data planes". Pinned by test/AWS/LocalDataPlane.test.ts. |
| 1342 | ProviderLayer.dual(ECS.Service, { |
| 1343 | live: () => ECS.ServiceProvider(), |
| 1344 | local: () => ECS.FlociServiceProvider(), |
| 1345 | dataPlane: flociServices, |
| 1346 | }), |
| 1347 | flociDual(ECS.TaskDefinition, () => ECS.TaskDefinitionProvider()), |
| 1348 | ProviderLayer.dual(ECS.Task, { |
| 1349 | live: () => ECS.TaskProvider(), |
| 1350 | local: () => ECS.FlociTaskProvider(), |
| 1351 | dataPlane: flociServices, |
| 1352 | }), |
| 1353 | EFS.AccessPointProvider(), |
| 1354 | EFS.FileSystemProvider(), |
| 1355 | EFS.MountTargetProvider(), |
| 1356 | EKS.AccessEntryProvider(), |
| 1357 | EKS.AddonProvider(), |
| 1358 | EKS.ClusterProvider(), |
| 1359 | EKS.FargateProfileProvider(), |
| 1360 | EKS.NodegroupProvider(), |
| 1361 | EKS.PodIdentityAssociationProvider(), |
| 1362 | flociDual(ElastiCache.CacheCluster, () => |
| 1363 | ElastiCache.CacheClusterProvider(), |
| 1364 | ), |
| 1365 | flociDual(ElastiCache.ReplicationGroup, () => |
| 1366 | ElastiCache.ReplicationGroupProvider(), |
| 1367 | ), |
| 1368 | ElastiCache.ServerlessCacheProvider(), |
| 1369 | flociDual(ElastiCache.SubnetGroup, () => |
| 1370 | ElastiCache.SubnetGroupProvider(), |
| 1371 | ), |
| 1372 | // Dual ELBv2: floci emulates ALBs with locally-resolvable DNS |
| 1373 | // (`*.elb.localhost.floci.io` → 127.0.0.1, host-routed on the |
| 1374 | // gateway port) so local ECS services are reachable behind a |
| 1375 | // local load balancer in dev. |
| 1376 | flociDual(ELBv2.Listener, () => ELBv2.ListenerProvider()), |
| 1377 | flociDual(ELBv2.ListenerCertificate, () => |
| 1378 | ELBv2.ListenerCertificateProvider(), |
| 1379 | ), |
| 1380 | flociDual(ELBv2.ListenerRule, () => ELBv2.ListenerRuleProvider()), |
| 1381 | flociDual(ELBv2.LoadBalancer, () => ELBv2.LoadBalancerProvider()), |
| 1382 | flociDual(ELBv2.TargetGroup, () => ELBv2.TargetGroupProvider()), |
| 1383 | flociDual(ELBv2.TargetGroupAttachment, () => |
| 1384 | ELBv2.TargetGroupAttachmentProvider(), |
| 1385 | ), |
| 1386 | flociDual(ELBv2.TrustStore, () => ELBv2.TrustStoreProvider()), |
| 1387 | flociDual(EventBridge.ApiDestination, () => |
| 1388 | EventBridge.ApiDestinationProvider(), |
| 1389 | ), |
| 1390 | flociDual(EventBridge.Archive, () => EventBridge.ArchiveProvider()), |
| 1391 | flociDual(EventBridge.Connection, () => |
| 1392 | EventBridge.ConnectionProvider(), |
| 1393 | ), |
| 1394 | flociDual(EventBridge.EventBus, () => EventBridge.EventBusProvider()), |
| 1395 | // Dual like EventBus/Rule: a live PutPermission against a |
| 1396 | // floci-emulated bus would fail with ResourceNotFoundException. |
| 1397 | flociDual(EventBridge.Permission, () => |
| 1398 | EventBridge.PermissionProvider(), |
| 1399 | ), |
| 1400 | flociDual(EventBridge.Rule, () => EventBridge.RuleProvider()), |
| 1401 | FIS.ExperimentTemplateProvider(), |
| 1402 | FIS.TargetAccountConfigurationProvider(), |
| 1403 | flociDual(Firehose.DeliveryStream, () => |
| 1404 | Firehose.DeliveryStreamProvider(), |
| 1405 | ), |
| 1406 | FSx.FileSystemProvider(), |
| 1407 | Glacier.VaultProvider(), |
| 1408 | flociDual(Glue.Connection, () => Glue.ConnectionProvider()), |
| 1409 | flociDual(Glue.Crawler, () => Glue.CrawlerProvider()), |
| 1410 | flociDual(Glue.Database, () => Glue.DatabaseProvider()), |
| 1411 | flociDual(Glue.Job, () => Glue.JobProvider()), |
| 1412 | flociDual(Glue.Table, () => Glue.TableProvider()), |
| 1413 | Grafana.WorkspaceProvider(), |
| 1414 | GreengrassV2.ComponentVersionProvider(), |
| 1415 | GreengrassV2.DeploymentProvider(), |
| 1416 | HealthLake.FHIRDatastoreProvider(), |
| 1417 | flociDual(IAM.AccessKey, () => IAM.AccessKeyProvider()), |
| 1418 | flociDual(IAM.AccountAlias, () => IAM.AccountAliasProvider()), |
| 1419 | flociDual(IAM.AccountPasswordPolicy, () => |
| 1420 | IAM.AccountPasswordPolicyProvider(), |
| 1421 | ), |
| 1422 | flociDual(IAM.GroupMembership, () => IAM.GroupMembershipProvider()), |
| 1423 | flociDual(IAM.Group, () => IAM.GroupProvider()), |
| 1424 | flociDual(IAM.InstanceProfile, () => IAM.InstanceProfileProvider()), |
| 1425 | flociDual(IAM.LoginProfile, () => IAM.LoginProfileProvider()), |
| 1426 | flociDual(IAM.OpenIDConnectProvider, () => |
| 1427 | IAM.OpenIDConnectProviderProvider(), |
| 1428 | ), |
| 1429 | flociDual(IAM.Policy, () => IAM.PolicyProvider()), |
| 1430 | flociDual(IAM.Role, () => IAM.RoleProvider()), |
| 1431 | flociDual(IAM.SAMLProvider, () => IAM.SAMLProviderProvider()), |
| 1432 | flociDual(IAM.ServerCertificate, () => |
| 1433 | IAM.ServerCertificateProvider(), |
| 1434 | ), |
| 1435 | flociDual(IAM.ServiceLinkedRole, () => |
| 1436 | IAM.ServiceLinkedRoleProvider(), |
| 1437 | ), |
| 1438 | flociDual(IAM.ServiceSpecificCredential, () => |
| 1439 | IAM.ServiceSpecificCredentialProvider(), |
| 1440 | ), |
| 1441 | flociDual(IAM.SigningCertificate, () => |
| 1442 | IAM.SigningCertificateProvider(), |
| 1443 | ), |
| 1444 | flociDual(IAM.SSHPublicKey, () => IAM.SSHPublicKeyProvider()), |
| 1445 | flociDual(IAM.User, () => IAM.UserProvider()), |
| 1446 | flociDual(IAM.VirtualMFADevice, () => IAM.VirtualMFADeviceProvider()), |
| 1447 | ), |
| 1448 | Layer.mergeAll( |
| 1449 | IdentityCenter.AccountAssignmentProvider(), |
| 1450 | IdentityCenter.GroupProvider(), |
| 1451 | IdentityCenter.InstanceProvider(), |
| 1452 | IdentityCenter.PermissionSetProvider(), |
| 1453 | Kafka.ServerlessClusterProvider(), |
| 1454 | Kendra.DataSourceProvider(), |
| 1455 | Kendra.IndexProvider(), |
| 1456 | Keyspaces.KeyspaceProvider(), |
| 1457 | Keyspaces.TableProvider(), |
| 1458 | Keyspaces.TypeProvider(), |
| 1459 | flociDual(KMS.Alias, () => KMS.AliasProvider()), |
| 1460 | flociDual(KMS.Key, () => KMS.KeyProvider()), |
| 1461 | flociDual(Kinesis.StreamConsumer, () => |
| 1462 | Kinesis.StreamConsumerProvider(), |
| 1463 | ), |
| 1464 | flociDual(Kinesis.Stream, () => Kinesis.StreamProvider()), |
| 1465 | KinesisAnalyticsV2.ApplicationProvider(), |
| 1466 | KinesisAnalyticsV2.ApplicationCloudWatchLoggingOptionProvider(), |
| 1467 | KinesisAnalyticsV2.ApplicationSnapshotProvider(), |
| 1468 | KinesisVideo.SignalingChannelProvider(), |
| 1469 | KinesisVideo.StreamProvider(), |
| 1470 | LakeFormation.DataCellsFilterProvider(), |
| 1471 | LakeFormation.DataLakeSettingsProvider(), |
| 1472 | LakeFormation.LFTagProvider(), |
| 1473 | LakeFormation.LFTagAssociationProvider(), |
| 1474 | LakeFormation.LFTagExpressionProvider(), |
| 1475 | LakeFormation.OptInProvider(), |
| 1476 | LakeFormation.PermissionsProvider(), |
| 1477 | LakeFormation.ResourceProvider(), |
| 1478 | flociDual(Lambda.Alias, () => Lambda.AliasProvider()), |
| 1479 | // Requires the alchemy floci fork ≥ 1.6.0-alchemy.2: the |
| 1480 | // reconciler's ownership scan calls lambda ListTags on |
| 1481 | // `event-source-mapping:` ARNs, which stock floci 1.6.0 rejects. |
| 1482 | flociDual(Lambda.EventSourceMapping, () => |
| 1483 | Lambda.EventSourceMappingProvider(), |
| 1484 | ), |
| 1485 | // Dual: live Lambda in deploy, floci-emulated (RPC-sidecar-hosted, |
| 1486 | // hot-reloading) Lambda in dev — see FlociFunctionProvider. |
| 1487 | ProviderLayer.dual(Lambda.Function, { |
| 1488 | live: () => Lambda.FunctionProvider(), |
| 1489 | local: () => Lambda.FlociFunctionProvider(), |
| 1490 | dataPlane: flociServices, |
| 1491 | }), |
| 1492 | flociDual(Lambda.LayerVersion, () => Lambda.LayerVersionProvider()), |
| 1493 | flociDual(Lambda.Version, () => Lambda.VersionProvider()), |
| 1494 | // Dual: dev builds the MicroVM image with a plain host-side |
| 1495 | // `docker build` (BuildKit layer cache against the user's real |
| 1496 | // sources) and hands floci a pre-built `docker://` reference — |
| 1497 | // see FlociMicrovmImageProvider. |
| 1498 | ProviderLayer.dual(Lambda.MicrovmImage, { |
| 1499 | live: () => Lambda.MicrovmImageProvider(), |
| 1500 | local: () => Lambda.FlociMicrovmImageProvider(), |
| 1501 | dataPlane: flociServices, |
| 1502 | }), |
| 1503 | flociDual(Lambda.NetworkConnector, () => |
| 1504 | Lambda.NetworkConnectorProvider(), |
| 1505 | ), |
| 1506 | // Dual: glue onto the (dual) Lambda Function — a live addPermission |
| 1507 | // against a floci function ARN fails with ResourceNotFoundException. |
| 1508 | flociDual(Lambda.Permission, () => Lambda.PermissionProvider()), |
| 1509 | flociDual(Logs.Destination, () => Logs.DestinationProvider()), |
| 1510 | flociDual(Logs.LogGroup, () => Logs.LogGroupProvider()), |
| 1511 | flociDual(Logs.LogStream, () => Logs.LogStreamProvider()), |
| 1512 | flociDual(Logs.MetricFilter, () => Logs.MetricFilterProvider()), |
| 1513 | flociDual(Logs.ResourcePolicy, () => Logs.ResourcePolicyProvider()), |
| 1514 | flociDual(Logs.SubscriptionFilter, () => |
| 1515 | Logs.SubscriptionFilterProvider(), |
| 1516 | ), |
| 1517 | MediaConnect.FlowProvider(), |
| 1518 | MediaConvert.JobProvider(), |
| 1519 | MediaConvert.JobTemplateProvider(), |
| 1520 | MediaConvert.PresetProvider(), |
| 1521 | MediaConvert.QueueProvider(), |
| 1522 | MediaLive.ChannelProvider(), |
| 1523 | MediaLive.InputProvider(), |
| 1524 | MediaLive.InputSecurityGroupProvider(), |
| 1525 | MediaPackageV2.ChannelProvider(), |
| 1526 | MediaPackageV2.ChannelGroupProvider(), |
| 1527 | MediaPackageV2.OriginEndpointProvider(), |
| 1528 | MediaTailor.PlaybackConfigurationProvider(), |
| 1529 | MedicalImaging.DatastoreProvider(), |
| 1530 | MQ.BrokerProvider(), |
| 1531 | MQ.ConfigurationProvider(), |
| 1532 | MailManager.AddonInstanceProvider(), |
| 1533 | MailManager.AddonSubscriptionProvider(), |
| 1534 | MailManager.AddressListProvider(), |
| 1535 | MailManager.ArchiveProvider(), |
| 1536 | MailManager.IngressPointProvider(), |
| 1537 | MailManager.RelayProvider(), |
| 1538 | MailManager.RuleSetProvider(), |
| 1539 | MailManager.TrafficPolicyProvider(), |
| 1540 | MemoryDB.ACLProvider(), |
| 1541 | MemoryDB.ClusterProvider(), |
| 1542 | MemoryDB.ParameterGroupProvider(), |
| 1543 | MemoryDB.SubnetGroupProvider(), |
| 1544 | MemoryDB.UserProvider(), |
| 1545 | Neptune.DBClusterProvider(), |
| 1546 | Neptune.DBClusterParameterGroupProvider(), |
| 1547 | Neptune.DBInstanceProvider(), |
| 1548 | Neptune.DBParameterGroupProvider(), |
| 1549 | Neptune.DBSubnetGroupProvider(), |
| 1550 | NeptuneGraph.GraphProvider(), |
| 1551 | OpenSearch.DomainProvider(), |
| 1552 | OpenSearchServerless.AccessPolicyProvider(), |
| 1553 | OSIS.PipelineEndpointProvider(), |
| 1554 | OSIS.PipelineProvider(), |
| 1555 | OSIS.ResourcePolicyProvider(), |
| 1556 | OpenSearchServerless.CollectionProvider(), |
| 1557 | OpenSearchServerless.CollectionGroupProvider(), |
| 1558 | OpenSearchServerless.LifecyclePolicyProvider(), |
| 1559 | OpenSearchServerless.SecurityConfigProvider(), |
| 1560 | OpenSearchServerless.SecurityPolicyProvider(), |
| 1561 | OpenSearchServerless.VpcEndpointProvider(), |
| 1562 | Organizations.AccountProvider(), |
| 1563 | Organizations.DelegatedAdministratorProvider(), |
| 1564 | Organizations.OrganizationalUnitProvider(), |
| 1565 | Organizations.OrganizationProvider(), |
| 1566 | Organizations.OrganizationResourcePolicyProvider(), |
| 1567 | Organizations.PolicyAttachmentProvider(), |
| 1568 | Organizations.PolicyProvider(), |
| 1569 | Organizations.RootPolicyTypeProvider(), |
| 1570 | Organizations.RootProvider(), |
| 1571 | Organizations.TrustedServiceAccessProvider(), |
| 1572 | PaymentCryptography.AliasProvider(), |
| 1573 | PaymentCryptography.KeyProvider(), |
| 1574 | flociDual(Pipes.Pipe, () => Pipes.PipeProvider()), |
| 1575 | Polly.LexiconProvider(), |
| 1576 | QApps.QAppProvider(), |
| 1577 | QBusiness.ApplicationProvider(), |
| 1578 | QBusiness.DataSourceProvider(), |
| 1579 | QBusiness.IndexProvider(), |
| 1580 | QBusiness.RetrieverProvider(), |
| 1581 | QBusiness.WebExperienceProvider(), |
| 1582 | QuickSight.AnalysisProvider(), |
| 1583 | QuickSight.DashboardProvider(), |
| 1584 | QuickSight.DataSetProvider(), |
| 1585 | QuickSight.DataSourceProvider(), |
| 1586 | flociDual(RDS.DBClusterEndpoint, () => |
| 1587 | RDS.DBClusterEndpointProvider(), |
| 1588 | ), |
| 1589 | flociDual(RDS.DBClusterParameterGroup, () => |
| 1590 | RDS.DBClusterParameterGroupProvider(), |
| 1591 | ), |
| 1592 | flociDual(RDS.DBCluster, () => RDS.DBClusterProvider()), |
| 1593 | flociDual(RDS.DBInstance, () => RDS.DBInstanceProvider()), |
| 1594 | flociDual(RDS.DBParameterGroup, () => RDS.DBParameterGroupProvider()), |
| 1595 | RDS.DBProxyEndpointProvider(), |
| 1596 | RDS.DBProxyProvider(), |
| 1597 | RDS.DBProxyTargetGroupProvider(), |
| 1598 | flociDual(RDS.DBSubnetGroup, () => RDS.DBSubnetGroupProvider()), |
| 1599 | RePostSpace.SpaceProvider(), |
| 1600 | Redshift.ClusterParameterGroupProvider(), |
| 1601 | Redshift.ClusterProvider(), |
| 1602 | Redshift.ClusterSubnetGroupProvider(), |
| 1603 | Redshift.EventSubscriptionProvider(), |
| 1604 | RedshiftServerless.NamespaceProvider(), |
| 1605 | RedshiftServerless.WorkgroupProvider(), |
| 1606 | flociDual(Route53.HealthCheck, () => Route53.HealthCheckProvider()), |
| 1607 | flociDual(Route53.HostedZone, () => Route53.HostedZoneProvider()), |
| 1608 | flociDual(Route53.QueryLoggingConfig, () => |
| 1609 | Route53.QueryLoggingConfigProvider(), |
| 1610 | ), |
| 1611 | flociDual(Route53.Record, () => Route53.RecordProvider()), |
| 1612 | flociDual(Route53.Records, () => Route53.RecordsProvider()), |
| 1613 | flociDual(Route53.VpcAssociationAuthorization, () => |
| 1614 | Route53.VpcAssociationAuthorizationProvider(), |
| 1615 | ), |
| 1616 | flociDual(Route53.ZoneVpcAssociation, () => |
| 1617 | Route53.ZoneVpcAssociationProvider(), |
| 1618 | ), |
| 1619 | flociDual(S3.Bucket, () => S3.BucketProvider()), |
| 1620 | // Dual: schedules created by e.g. `AWS.ECS.every` reference local |
| 1621 | // cluster/task/role ARNs in dev — a live PutSchedule with a floci |
| 1622 | // role ARN fails validation. |
| 1623 | flociDual(Scheduler.ScheduleGroup, () => |
| 1624 | Scheduler.ScheduleGroupProvider(), |
| 1625 | ), |
| 1626 | flociDual(Scheduler.Schedule, () => Scheduler.ScheduleProvider()), |
| 1627 | flociDual(SecretsManager.RotationSchedule, () => |
| 1628 | SecretsManager.RotationScheduleProvider(), |
| 1629 | ), |
| 1630 | flociDual(SecretsManager.Secret, () => |
| 1631 | SecretsManager.SecretProvider(), |
| 1632 | ), |
| 1633 | flociDual(SES.AccountSettings, () => SES.AccountSettingsProvider()), |
| 1634 | flociDual(SES.ActiveReceiptRuleSet, () => |
| 1635 | SES.ActiveReceiptRuleSetProvider(), |
| 1636 | ), |
| 1637 | flociDual(SES.ConfigurationSetEventDestination, () => |
| 1638 | SES.ConfigurationSetEventDestinationProvider(), |
| 1639 | ), |
| 1640 | flociDual(SES.ConfigurationSet, () => SES.ConfigurationSetProvider()), |
| 1641 | flociDual(SES.ContactList, () => SES.ContactListProvider()), |
| 1642 | flociDual(SES.Contact, () => SES.ContactProvider()), |
| 1643 | flociDual(SES.CustomVerificationEmailTemplate, () => |
| 1644 | SES.CustomVerificationEmailTemplateProvider(), |
| 1645 | ), |
| 1646 | flociDual(SES.DedicatedIpPool, () => SES.DedicatedIpPoolProvider()), |
| 1647 | flociDual(SES.EmailIdentity, () => SES.EmailIdentityProvider()), |
| 1648 | flociDual(SES.EmailIdentityPolicy, () => |
| 1649 | SES.EmailIdentityPolicyProvider(), |
| 1650 | ), |
| 1651 | flociDual(SES.EmailTemplate, () => SES.EmailTemplateProvider()), |
| 1652 | flociDual(SES.MultiRegionEndpoint, () => |
| 1653 | SES.MultiRegionEndpointProvider(), |
| 1654 | ), |
| 1655 | flociDual(SES.ReceiptFilter, () => SES.ReceiptFilterProvider()), |
| 1656 | flociDual(SES.ReceiptRule, () => SES.ReceiptRuleProvider()), |
| 1657 | flociDual(SES.ReceiptRuleSet, () => SES.ReceiptRuleSetProvider()), |
| 1658 | flociDual(SES.Tenant, () => SES.TenantProvider()), |
| 1659 | flociDual(SES.TenantResourceAssociation, () => |
| 1660 | SES.TenantResourceAssociationProvider(), |
| 1661 | ), |
| 1662 | SNS.PlatformApplicationProvider(), |
| 1663 | // Dual: glue onto the (dual) SNS Topic — a live subscribe with a |
| 1664 | // floci topic ARN fails with InvalidParameterException: TopicArn. |
| 1665 | flociDual(SNS.Subscription, () => SNS.SubscriptionProvider()), |
| 1666 | flociDual(SNS.Topic, () => SNS.TopicProvider()), |
| 1667 | SocialMessaging.LinkedWhatsAppBusinessAccountProvider(), |
| 1668 | flociDual(SQS.Queue, () => SQS.QueueProvider()), |
| 1669 | flociDual(SSM.Parameter, () => SSM.ParameterProvider()), |
| 1670 | flociDual(StepFunctions.Activity, () => |
| 1671 | StepFunctions.ActivityProvider(), |
| 1672 | ), |
| 1673 | flociDual(StepFunctions.StateMachine, () => |
| 1674 | StepFunctions.StateMachineProvider(), |
| 1675 | ), |
| 1676 | flociDual(WAFv2.IPSet, () => WAFv2.IPSetProvider()), |
| 1677 | flociDual(WAFv2.LoggingConfiguration, () => |
| 1678 | WAFv2.LoggingConfigurationProvider(), |
| 1679 | ), |
| 1680 | flociDual(WAFv2.RegexPatternSet, () => |
| 1681 | WAFv2.RegexPatternSetProvider(), |
| 1682 | ), |
| 1683 | flociDual(WAFv2.RuleGroup, () => WAFv2.RuleGroupProvider()), |
| 1684 | flociDual(WAFv2.WebACLAssociation, () => |
| 1685 | WAFv2.WebACLAssociationProvider(), |
| 1686 | ), |
| 1687 | flociDual(WAFv2.WebACL, () => WAFv2.WebACLProvider()), |
| 1688 | flociDual(Website.AssetDeployment, () => |
| 1689 | Website.AssetDeploymentProvider(), |
| 1690 | ), |
| 1691 | // ServerProvider is internally dual (LocalProvider.make → ServerLocal). |
| 1692 | WebsiteServerProvider(), |
| 1693 | XRay.GroupProvider(), |
| 1694 | XRay.ResourcePolicyProvider(), |
| 1695 | XRay.SamplingRuleProvider(), |
| 1696 | Bedrock.AgentProvider(), |
| 1697 | Bedrock.AgentAliasProvider(), |
| 1698 | Bedrock.DataSourceProvider(), |
| 1699 | Bedrock.KnowledgeBaseProvider(), |
| 1700 | BedrockAgentCore.BrowserCustomProvider(), |
| 1701 | BedrockAgentCore.CodeInterpreterProvider(), |
| 1702 | BedrockAgentCore.GatewayProvider(), |
| 1703 | BedrockAgentCore.MemoryProvider(), |
| 1704 | BedrockAgentCore.RuntimeProvider(), |
| 1705 | AccessAnalyzer.AnalyzerProvider(), |
| 1706 | AccessAnalyzer.ArchiveRuleProvider(), |
| 1707 | Textract.AdapterProvider(), |
| 1708 | Transfer.ServerProvider(), |
| 1709 | Transfer.UserProvider(), |
| 1710 | Translate.ParallelDataProvider(), |
| 1711 | Translate.TerminologyProvider(), |
| 1712 | VerifiedPermissions.IdentitySourceProvider(), |
| 1713 | VerifiedPermissions.PolicyProvider(), |
| 1714 | VerifiedPermissions.PolicyStoreProvider(), |
| 1715 | VerifiedPermissions.PolicyStoreAliasProvider(), |
| 1716 | VerifiedPermissions.PolicyTemplateProvider(), |
| 1717 | VerifiedPermissions.SchemaProvider(), |
| 1718 | Backup.BackupVaultProvider(), |
| 1719 | Backup.BackupPlanProvider(), |
| 1720 | Backup.BackupSelectionProvider(), |
| 1721 | BackupSearch.SearchJobProvider(), |
| 1722 | BackupSearch.ExportJobProvider(), |
| 1723 | BCMDataExports.ExportProvider(), |
| 1724 | Budgets.BudgetProvider(), |
| 1725 | Budgets.BudgetActionProvider(), |
| 1726 | Chatbot.AssociationProvider(), |
| 1727 | Chatbot.CustomActionProvider(), |
| 1728 | Chatbot.MicrosoftTeamsChannelConfigurationProvider(), |
| 1729 | Chatbot.SlackChannelConfigurationProvider(), |
| 1730 | GuardDuty.DetectorProvider(), |
| 1731 | GuardDuty.FilterProvider(), |
| 1732 | GuardDuty.IPSetProvider(), |
| 1733 | GuardDuty.ThreatIntelSetProvider(), |
| 1734 | ImageBuilder.ComponentProvider(), |
| 1735 | ImageBuilder.DistributionConfigurationProvider(), |
| 1736 | ImageBuilder.ImagePipelineProvider(), |
| 1737 | ImageBuilder.ImageRecipeProvider(), |
| 1738 | ImageBuilder.InfrastructureConfigurationProvider(), |
| 1739 | Inspector2.CisScanConfigurationProvider(), |
| 1740 | Inspector2.EnablerProvider(), |
| 1741 | Inspector2.FilterProvider(), |
| 1742 | InternetMonitor.MonitorProvider(), |
| 1743 | SecurityHub.ActionTargetProvider(), |
| 1744 | SecurityHub.AutomationRuleProvider(), |
| 1745 | SecurityHub.FindingAggregatorProvider(), |
| 1746 | SecurityHub.HubProvider(), |
| 1747 | SecurityHub.InsightProvider(), |
| 1748 | SecurityLake.DataLakeProvider(), |
| 1749 | SecurityLake.AwsLogSourceProvider(), |
| 1750 | SecurityLake.CustomLogSourceProvider(), |
| 1751 | SecurityLake.ExceptionSubscriptionProvider(), |
| 1752 | SecurityLake.SubscriberProvider(), |
| 1753 | SecurityLake.SubscriberNotificationProvider(), |
| 1754 | Detective.GraphProvider(), |
| 1755 | FMS.AdminAccountProvider(), |
| 1756 | Macie2.SessionProvider(), |
| 1757 | Macie2.ClassificationJobProvider(), |
| 1758 | Macie2.AllowListProvider(), |
| 1759 | Macie2.CustomDataIdentifierProvider(), |
| 1760 | Macie2.FindingsFilterProvider(), |
| 1761 | RAM.PermissionProvider(), |
| 1762 | RAM.ResourceShareProvider(), |
| 1763 | ), |
| 1764 | Layer.mergeAll( |
| 1765 | AIOps.InvestigationGroupProvider(), |
| 1766 | AuditManager.AssessmentProvider(), |
| 1767 | AuditManager.ControlProvider(), |
| 1768 | AuditManager.FrameworkProvider(), |
| 1769 | ApplicationSignals.DiscoveryProvider(), |
| 1770 | ApplicationSignals.GroupingConfigurationProvider(), |
| 1771 | ApplicationSignals.InstrumentationConfigurationProvider(), |
| 1772 | ApplicationSignals.ServiceLevelObjectiveProvider(), |
| 1773 | LicenseManager.LicenseConfigurationProvider(), |
| 1774 | LexV2.BotProvider(), |
| 1775 | LexV2.BotAliasProvider(), |
| 1776 | LexV2.BotLocaleProvider(), |
| 1777 | LexV2.BotVersionProvider(), |
| 1778 | LexV2.IntentProvider(), |
| 1779 | LexV2.SlotTypeProvider(), |
| 1780 | S3Files.FileSystemProvider(), |
| 1781 | S3Files.AccessPointProvider(), |
| 1782 | S3Tables.TableBucketProvider(), |
| 1783 | S3Tables.NamespaceProvider(), |
| 1784 | S3Tables.TableProvider(), |
| 1785 | flociDual(S3Vectors.VectorBucket, () => |
| 1786 | S3Vectors.VectorBucketProvider(), |
| 1787 | ), |
| 1788 | flociDual(S3Vectors.Index, () => S3Vectors.IndexProvider()), |
| 1789 | SageMaker.ModelProvider(), |
| 1790 | SageMaker.EndpointConfigProvider(), |
| 1791 | SageMaker.EndpointProvider(), |
| 1792 | SageMaker.FeatureGroupProvider(), |
| 1793 | SageMaker.ClusterProvider(), |
| 1794 | SageMaker.ClusterSchedulerConfigProvider(), |
| 1795 | SageMaker.ComputeQuotaProvider(), |
| 1796 | Account.AccountNameProvider(), |
| 1797 | Account.AlternateContactProvider(), |
| 1798 | Account.ContactInformationProvider(), |
| 1799 | Account.RegionProvider(), |
| 1800 | Amplify.AppProvider(), |
| 1801 | Amplify.BranchProvider(), |
| 1802 | ECRPublic.PublicRepositoryProvider(), |
| 1803 | VpcLattice.ServiceNetworkProvider(), |
| 1804 | VpcLattice.ServiceProvider(), |
| 1805 | VpcLattice.ServiceNetworkVpcAssociationProvider(), |
| 1806 | VpcLattice.AuthPolicyProvider(), |
| 1807 | VpcLattice.ResourcePolicyProvider(), |
| 1808 | VpcLattice.ServiceNetworkServiceAssociationProvider(), |
| 1809 | VpcLattice.TargetGroupProvider(), |
| 1810 | VpcLattice.ListenerProvider(), |
| 1811 | VpcLattice.RuleProvider(), |
| 1812 | VpcLattice.AccessLogSubscriptionProvider(), |
| 1813 | MWAA.EnvironmentProvider(), |
| 1814 | MWAAServerless.WorkflowProvider(), |
| 1815 | Location.ApiKeyProvider(), |
| 1816 | Location.MapProvider(), |
| 1817 | Location.PlaceIndexProvider(), |
| 1818 | Location.RouteCalculatorProvider(), |
| 1819 | Location.GeofenceCollectionProvider(), |
| 1820 | Location.TrackerProvider(), |
| 1821 | Location.TrackerConsumerProvider(), |
| 1822 | Forecast.DatasetGroupProvider(), |
| 1823 | Forecast.DatasetProvider(), |
| 1824 | FraudDetector.DetectorProvider(), |
| 1825 | FraudDetector.DetectorVersionProvider(), |
| 1826 | FraudDetector.EntityTypeProvider(), |
| 1827 | FraudDetector.EventTypeProvider(), |
| 1828 | FraudDetector.LabelProvider(), |
| 1829 | FraudDetector.ListProvider(), |
| 1830 | FraudDetector.OutcomeProvider(), |
| 1831 | FraudDetector.VariableProvider(), |
| 1832 | Personalize.SchemaProvider(), |
| 1833 | Personalize.DatasetGroupProvider(), |
| 1834 | Personalize.DatasetProvider(), |
| 1835 | Personalize.EventTrackerProvider(), |
| 1836 | PinpointSMSVoiceV2.ConfigurationSetProvider(), |
| 1837 | PinpointSMSVoiceV2.EventDestinationProvider(), |
| 1838 | PinpointSMSVoiceV2.OptOutListProvider(), |
| 1839 | PinpointSMSVoiceV2.PhoneNumberProvider(), |
| 1840 | IoT.ThingProvider(), |
| 1841 | IoT.ThingTypeProvider(), |
| 1842 | IoT.PolicyProvider(), |
| 1843 | IoT.TopicRuleProvider(), |
| 1844 | IoTFleetWise.CampaignProvider(), |
| 1845 | IoTFleetWise.DecoderManifestProvider(), |
| 1846 | IoTFleetWise.FleetProvider(), |
| 1847 | IoTFleetWise.ModelManifestProvider(), |
| 1848 | IoTFleetWise.SignalCatalogProvider(), |
| 1849 | IoTFleetWise.StateTemplateProvider(), |
| 1850 | IoTFleetWise.VehicleProvider(), |
| 1851 | IoTManagedIntegrations.CredentialLockerProvider(), |
| 1852 | IoTManagedIntegrations.DestinationProvider(), |
| 1853 | IoTManagedIntegrations.ManagedThingProvider(), |
| 1854 | IoTManagedIntegrations.NotificationConfigurationProvider(), |
| 1855 | IoTSiteWise.AssetModelProvider(), |
| 1856 | IoTSiteWise.AssetProvider(), |
| 1857 | IoTSiteWise.GatewayProvider(), |
| 1858 | IoTWireless.DestinationProvider(), |
| 1859 | IoTWireless.DeviceProfileProvider(), |
| 1860 | IoTWireless.ServiceProfileProvider(), |
| 1861 | IoTWireless.WirelessDeviceProvider(), |
| 1862 | IoTWireless.WirelessGatewayProvider(), |
| 1863 | ResourceGroups.GroupProvider(), |
| 1864 | RolesAnywhere.CrlProvider(), |
| 1865 | RolesAnywhere.ProfileProvider(), |
| 1866 | RolesAnywhere.TrustAnchorProvider(), |
| 1867 | Synthetics.CanaryProvider(), |
| 1868 | Synthetics.GroupProvider(), |
| 1869 | SSMContacts.ContactProvider(), |
| 1870 | SSMContacts.ContactChannelProvider(), |
| 1871 | SSMContacts.PlanProvider(), |
| 1872 | SSMContacts.RotationProvider(), |
| 1873 | SSMIncidents.ReplicationSetProvider(), |
| 1874 | SSMIncidents.ResponsePlanProvider(), |
| 1875 | ), |
| 1876 | Layer.mergeAll( |
| 1877 | FinSpace.EnvironmentProvider(), |
| 1878 | FinSpace.KxClusterProvider(), |
| 1879 | FinSpace.KxDatabaseProvider(), |
| 1880 | FinSpace.KxEnvironmentProvider(), |
| 1881 | ControlTower.EnabledBaselineProvider(), |
| 1882 | ControlTower.EnabledControlProvider(), |
| 1883 | ControlTower.LandingZoneProvider(), |
| 1884 | CostAndUsageReport.ReportDefinitionProvider(), |
| 1885 | CostExplorer.AnomalyMonitorProvider(), |
| 1886 | CostExplorer.AnomalySubscriptionProvider(), |
| 1887 | CostExplorer.CostCategoryProvider(), |
| 1888 | Rbin.RuleProvider(), |
| 1889 | RUM.AppMonitorProvider(), |
| 1890 | RUM.MetricsDestinationProvider(), |
| 1891 | RUM.ResourcePolicyProvider(), |
| 1892 | EMR.ClusterProvider(), |
| 1893 | EMR.SecurityConfigurationProvider(), |
| 1894 | EMR.StudioProvider(), |
| 1895 | EMRContainers.JobTemplateProvider(), |
| 1896 | EMRContainers.VirtualClusterProvider(), |
| 1897 | EMRServerless.ApplicationProvider(), |
| 1898 | EntityResolution.SchemaMappingProvider(), |
| 1899 | EntityResolution.MatchingWorkflowProvider(), |
| 1900 | EntityResolution.IdNamespaceProvider(), |
| 1901 | EntityResolution.IdMappingWorkflowProvider(), |
| 1902 | Schemas.DiscovererProvider(), |
| 1903 | Schemas.RegistryProvider(), |
| 1904 | Schemas.SchemaProvider(), |
| 1905 | Route53Profiles.ProfileProvider(), |
| 1906 | Route53Profiles.ProfileAssociationProvider(), |
| 1907 | Route53Profiles.ProfileResourceAssociationProvider(), |
| 1908 | Route53Resolver.ResolverEndpointProvider(), |
| 1909 | Route53Resolver.ResolverRuleProvider(), |
| 1910 | Route53Resolver.ResolverRuleAssociationProvider(), |
| 1911 | Shield.ProtectionProvider(), |
| 1912 | Shield.ProtectionGroupProvider(), |
| 1913 | Shield.SubscriptionProvider(), |
| 1914 | Signer.ProfilePermissionProvider(), |
| 1915 | Signer.SigningProfileProvider(), |
| 1916 | SimpleDB.DomainProvider(), |
| 1917 | Timestream.DatabaseProvider(), |
| 1918 | Timestream.DbInstanceProvider(), |
| 1919 | Timestream.ScheduledQueryProvider(), |
| 1920 | Timestream.TableProvider(), |
| 1921 | ResourceExplorer.IndexProvider(), |
| 1922 | ResourceExplorer.ViewProvider(), |
| 1923 | Notifications.ChannelAssociationProvider(), |
| 1924 | Notifications.EventRuleProvider(), |
| 1925 | Notifications.NotificationConfigurationProvider(), |
| 1926 | Notifications.NotificationHubProvider(), |
| 1927 | NotificationsContacts.EmailContactProvider(), |
| 1928 | OAM.LinkProvider(), |
| 1929 | OAM.SinkProvider(), |
| 1930 | ObservabilityAdmin.TelemetryConfigProvider(), |
| 1931 | ObservabilityAdmin.TelemetryRuleProvider(), |
| 1932 | Omics.AnnotationStoreProvider(), |
| 1933 | Omics.ReferenceStoreProvider(), |
| 1934 | Omics.RunGroupProvider(), |
| 1935 | Omics.SequenceStoreProvider(), |
| 1936 | Omics.VariantStoreProvider(), |
| 1937 | Omics.WorkflowProvider(), |
| 1938 | GlobalAccelerator.AcceleratorProvider(), |
| 1939 | GlobalAccelerator.ListenerProvider(), |
| 1940 | GlobalAccelerator.EndpointGroupProvider(), |
| 1941 | AppRegistry.ApplicationProvider(), |
| 1942 | AppRegistry.AttributeGroupProvider(), |
| 1943 | AppRegistry.AttributeGroupAssociationProvider(), |
| 1944 | AppRegistry.ResourceAssociationProvider(), |
| 1945 | ServiceCatalog.PortfolioProvider(), |
| 1946 | ServiceCatalog.PortfolioProductAssociationProvider(), |
| 1947 | ServiceCatalog.PrincipalPortfolioAssociationProvider(), |
| 1948 | ServiceCatalog.ProductProvider(), |
| 1949 | ServiceQuotas.ServiceQuotaIncreaseRequestProvider(), |
| 1950 | S3Control.AccessPointProvider(), |
| 1951 | S3Control.AccessPointPolicyProvider(), |
| 1952 | S3Control.MultiRegionAccessPointProvider(), |
| 1953 | S3Control.ObjectLambdaAccessPointProvider(), |
| 1954 | S3Control.StorageLensConfigurationProvider(), |
| 1955 | NetworkFirewall.RuleGroupProvider(), |
| 1956 | NetworkFirewall.FirewallPolicyProvider(), |
| 1957 | NetworkFirewall.FirewallProvider(), |
| 1958 | NetworkFirewall.LoggingConfigurationProvider(), |
| 1959 | CloudTrail.EventDataStoreProvider(), |
| 1960 | CloudTrail.TrailProvider(), |
| 1961 | IVS.ChannelProvider(), |
| 1962 | IVS.PlaybackKeyPairProvider(), |
| 1963 | IVS.PlaybackRestrictionPolicyProvider(), |
| 1964 | IVS.RecordingConfigurationProvider(), |
| 1965 | IVS.StreamKeyProvider(), |
| 1966 | IVSChat.LoggingConfigurationProvider(), |
| 1967 | IVSChat.RoomProvider(), |
| 1968 | IVSRealtime.StageProvider(), |
| 1969 | ), |
| 1970 | ), |
| 1971 | ), |
| 1972 | // The `aws-eks` Kubernetes cluster adapter is provideMerged (not just |
| 1973 | // provided) so the cluster-agnostic `Kubernetes.*` workload providers |
| 1974 | // can resolve it dynamically from the ambient stack context. |
| 1975 | Layer.provideMerge(EKS.EksKubernetesAdapter()), |
| 1976 | Layer.provideMerge( |
| 1977 | Layer.mergeAll( |
| 1978 | Command.providers(), |
| 1979 | KeyPairProvider(), |
| 1980 | RandomProvider(), |
| 1981 | Assets.AssetsLive, |
| 1982 | DockerLive, |
| 1983 | ), |
| 1984 | ), |
| 1985 | // Plan-executable data-source capabilities: registering the impl layers |
| 1986 | // at the stack level lets `Capability.execute(...)` Outputs (e.g. |
| 1987 | // `AWS.EC2.getAmi`) resolve during plan. |
| 1988 | Layer.provideMerge(EC2.GetAmiHttp), |
| 1989 | Layer.provideMerge(Region.fromEnvironment), |
| 1990 | Layer.provideMerge(Credentials.fromEnvironment), |
| 1991 | Layer.provideMerge(Endpoint.fromEnvironment), |
| 1992 | Layer.provideMerge(DefaultEnvironment), |
| 1993 | Layer.provideMerge(AwsAuth), |
| 1994 | Layer.provideMerge(CredentialsStoreLive), |
| 1995 | // Apply a blanket retry policy to every AWS SDK call. Like distilled's |
| 1996 | // `makeDefault` it retries throttling, 5xx, and Smithy `@retryable` |
| 1997 | // errors with exponential backoff + jitter + `RetryAfter` header |
| 1998 | // awareness, but with a higher attempt cap (10 vs 5) so heavy |
| 1999 | // parallel deploys ride out S3 `SlowDown` bursts that span more than |
| 2000 | // a few seconds. Bounded so real rate-limit pressure still surfaces |
| 2001 | // instead of masking as an indefinite hang. |
| 2002 | Layer.provideMerge(Layer.succeed(Retry, awsRetryFactory)), |
| 2003 | // In an `alchemy dev` run the AMBIENT environment — what stack |
| 2004 | // composition code, plan-time data sources (`AWS.EC2.getAmi`), and any |
| 2005 | // raw distilled call see — is the EMULATOR, so dev needs no real |
| 2006 | // credentials and no call-site routing. The providers above were built |
| 2007 | // beneath the live chain and keep it (their lifecycle ops close over |
| 2008 | // their build context): live-mode and mode-agnostic resources still hit |
| 2009 | // the real cloud, and local variants override per-resource via their |
| 2010 | // registered data plane. `Layer.merge`'s second layer wins duplicate |
| 2011 | // tags, which is exactly the shadowing we want; `Alchemy.remote()` |
| 2012 | // resources stay live through the per-resource binding routing. |
| 2013 | (base) => |
| 2014 | Layer.unwrap( |
| 2015 | Effect.gen(function* () { |
| 2016 | const mode = yield* defaultProviderMode; |
| 2017 | return mode === "local" ? Layer.merge(base, flociServices()) : base; |
| 2018 | }), |
| 2019 | ), |
| 2020 | Layer.orDie, |
| 2021 | ); |
| 2022 | |
| 2023 | // Node socket-level error codes that indicate a transient network failure. |
| 2024 | const TRANSIENT_NETWORK_CODES = new Set([ |
| 2025 | "ETIMEDOUT", |
| 2026 | "ECONNRESET", |
| 2027 | "ECONNREFUSED", |
| 2028 | "EPIPE", |
| 2029 | "ENETUNREACH", |
| 2030 | "ENETDOWN", |
| 2031 | "EHOSTUNREACH", |
| 2032 | "EAI_AGAIN", |
| 2033 | ]); |
| 2034 | // Transport-termination signatures that undici/node surface as plain messages |
| 2035 | // (e.g. a `fetch` whose socket dies mid-body throws `TypeError: terminated`). |
| 2036 | const TRANSIENT_NETWORK_PATTERN = |
| 2037 | /terminated|socket hang up|other side closed|fetch failed|read ETIMEDOUT|ECONNRESET|ETIMEDOUT/i; |
| 2038 | |
| 2039 | // Walk an error's cause chain looking for a transient transport failure. Used |
| 2040 | // to tell a Decode/EmptyBody error caused by a dropped connection (retryable) |
| 2041 | // apart from one caused by a genuinely malformed body (permanent). |
| 2042 | const hasTransientNetworkCause = (cause: unknown, depth = 0): boolean => { |
| 2043 | if (cause == null || depth > 8) return false; |
| 2044 | if (typeof cause === "string") return TRANSIENT_NETWORK_PATTERN.test(cause); |
| 2045 | if (typeof cause !== "object") return false; |
| 2046 | const code = (cause as { code?: unknown }).code; |
| 2047 | if (typeof code === "string" && TRANSIENT_NETWORK_CODES.has(code)) { |
| 2048 | return true; |
| 2049 | } |
| 2050 | const message = (cause as { message?: unknown }).message; |
| 2051 | if (typeof message === "string" && TRANSIENT_NETWORK_PATTERN.test(message)) { |
| 2052 | return true; |
| 2053 | } |
| 2054 | const nested = (cause as { cause?: unknown }).cause; |
| 2055 | return nested !== undefined && nested !== cause |
| 2056 | ? hasTransientNetworkCause(nested, depth + 1) |
| 2057 | : false; |
| 2058 | }; |
| 2059 | |
| 2060 | // Error codes raised while failing to even open a connection. bun's fetch |
| 2061 | // reports an unresolvable hostname (NXDOMAIN — e.g. an AWS service with no |
| 2062 | // endpoint in the ambient region, like IoT Managed Integrations outside its |
| 2063 | // launch regions) as `ConnectionRefused`/`FailedToOpenSocket`, which is |
| 2064 | // indistinguishable from a live-but-refusing host. These failures are almost |
| 2065 | // always permanent (wrong region, wrong endpoint), so they get a small retry |
| 2066 | // budget instead of the full 16-attempt transport budget — enough to ride out |
| 2067 | // a momentary blip, but a nonexistent endpoint fails in ~1.5s, not ~60s. |
| 2068 | const CONNECT_FAILURE_CODES = new Set([ |
| 2069 | "ConnectionRefused", // bun: connect failed (includes NXDOMAIN) |
| 2070 | "FailedToOpenSocket", // bun: socket open failed (includes NXDOMAIN) |
| 2071 | "ENOTFOUND", // node: DNS name not found |
| 2072 | "EAI_NONAME", // node: DNS name not found |
| 2073 | "ECONNREFUSED", // node: TCP connect refused |
| 2074 | ]); |
| 2075 | |
| 2076 | const hasConnectFailureCause = (cause: unknown, depth = 0): boolean => { |
| 2077 | if (cause == null || typeof cause !== "object" || depth > 8) return false; |
| 2078 | const code = (cause as { code?: unknown }).code; |
| 2079 | if (typeof code === "string" && CONNECT_FAILURE_CODES.has(code)) return true; |
| 2080 | const nested = (cause as { cause?: unknown }).cause; |
| 2081 | return nested !== undefined && nested !== cause |
| 2082 | ? hasConnectFailureCause(nested, depth + 1) |
| 2083 | : false; |
| 2084 | }; |
| 2085 | |
| 2086 | const isConnectFailure = (error: unknown): boolean => |
| 2087 | HttpClientError.isHttpClientError(error) && |
| 2088 | error.reason._tag === "TransportError" && |
| 2089 | hasConnectFailureCause(error.reason); |
| 2090 | |
| 2091 | // TODO(sam): remove this once it's upstreamed to distilled |
| 2092 | const isHttpTransportError = (error: unknown): boolean => { |
| 2093 | if (!HttpClientError.isHttpClientError(error)) return false; |
| 2094 | const reason = error.reason; |
| 2095 | const tag = reason._tag; |
| 2096 | if (tag === "TransportError") return true; |
| 2097 | // A Decode/EmptyBody error is only transient when its underlying cause is a |
| 2098 | // terminated/reset connection (e.g. a `read ETIMEDOUT` while streaming the |
| 2099 | // body surfaces as a `DecodeError`). A genuine malformed-body decode is |
| 2100 | // permanent — retrying it would only waste the budget and mask the bug — so |
| 2101 | // gate on the cause chain rather than the tag. |
| 2102 | if (tag === "DecodeError" || tag === "EmptyBodyError") { |
| 2103 | return hasTransientNetworkCause(reason); |
| 2104 | } |
| 2105 | if ( |
| 2106 | tag === "StatusCodeError" && |
| 2107 | "response" in error.reason && |
| 2108 | error.reason.response.status >= 500 |
| 2109 | ) { |
| 2110 | return true; |
| 2111 | } |
| 2112 | return false; |
| 2113 | }; |
| 2114 | |
| 2115 | const awsRetryFactory: RetryFactory = (lastError) => { |
| 2116 | // The factory runs once per API call, so this counter is call-scoped. It |
| 2117 | // caps connect-phase failures (see CONNECT_FAILURE_CODES) at 3 retries |
| 2118 | // within the overall schedule below. |
| 2119 | let connectFailures = 0; |
| 2120 | return { |
| 2121 | while: (error) => { |
| 2122 | if (isConnectFailure(error)) return ++connectFailures <= 3; |
| 2123 | return ( |
| 2124 | isTransientError(error) || |
| 2125 | isThrottlingError(error) || |
| 2126 | isRetryable(error) || |
| 2127 | isHttpTransportError(error) |
| 2128 | ); |
| 2129 | }, |
| 2130 | // Transient transport failures (e.g. a sustained `read ETIMEDOUT` blip |
| 2131 | // against a control-plane endpoint) can outlast a 10-attempt budget. With |
| 2132 | // the 5s cap below, the extra attempts add bounded backoff while making |
| 2133 | // the network-flake recovery materially more robust. |
| 2134 | schedule: Schedule.max([ |
| 2135 | pipe( |
| 2136 | Schedule.exponential(Duration.millis(200), 2), |
| 2137 | Schedule.modifyDelay( |
| 2138 | Effect.fn(function* ({ duration }) { |
| 2139 | const error = yield* Ref.get(lastError); |
| 2140 | if (isThrottlingError(error)) { |
| 2141 | // Throttling: floor at 500ms (matches distilled default). |
| 2142 | if (Duration.toMillis(duration) < 500) { |
| 2143 | return Duration.toMillis(Duration.millis(500)); |
| 2144 | } |
| 2145 | } |
| 2146 | return Duration.toMillis(duration); |
| 2147 | }), |
| 2148 | ), |
| 2149 | capped(Duration.seconds(5)), |
| 2150 | jittered, |
| 2151 | ), |
| 2152 | Schedule.recurs(15), |
| 2153 | ]), |
| 2154 | }; |
| 2155 | }; |