1/** @effect-diagnostics layerMergeAllWithDependencies:off */
2import {
3 isRetryable,
4 isThrottlingError,
5 isTransientError,
6} from "@distilled.cloud/aws/Category";
7import {
8 capped,
9 jittered,
10 Retry,
11 type Factory as RetryFactory,
12} from "@distilled.cloud/aws/Retry";
13import * as Duration from "effect/Duration";
14import * as Effect from "effect/Effect";
15import { pipe } from "effect/Function";
16import * as Layer from "effect/Layer";
17import * as Ref from "effect/Ref";
18import * as Schedule from "effect/Schedule";
19import * as HttpClientError from "effect/http/HttpClientError";
20import { CredentialsStoreLive } from "../Auth/Credentials.ts";
21import * as Command from "../Command/index.ts";
22import { DockerLive } from "../Docker/Docker.ts";
23import { KeyPair, KeyPairProvider } from "../KeyPair.ts";
24import * as ProviderLayer from "../Local/ProviderLayer.ts";
25import { defaultProviderMode } from "../ProviderMode.ts";
26import {
27 captureAwsEnvironment,
28 pinCollectionEnvironment,
29} from "./Local/ProviderContext.ts";
30import { flociDual, flociServices } from "./Local/FlociServices.ts";
31import * as Provider from "../Provider.ts";
32import { Random, RandomProvider } from "../Random.ts";
33import {
34 Server as WebsiteServer,
35 ServerProvider as WebsiteServerProvider,
36} from "../Website/Server.ts";
37import * as AccessAnalyzer from "./AccessAnalyzer/index.ts";
38import * as Account from "./Account/index.ts";
39import * as ACM from "./ACM/index.ts";
40import * as ACMPCA from "./ACMPCA/index.ts";
41import * as AIOps from "./AIOps/index.ts";
42import * as AMP from "./AMP/index.ts";
43import * as Amplify from "./Amplify/index.ts";
44import * as ApiGateway from "./ApiGateway/index.ts";
45import * as ApiGatewayV2 from "./ApiGatewayV2/index.ts";
46import * as AppConfig from "./AppConfig/index.ts";
47import * as AppFlow from "./AppFlow/index.ts";
48import * as AppIntegrations from "./AppIntegrations/index.ts";
49import * as ApplicationAutoScaling from "./ApplicationAutoScaling/index.ts";
50import * as ApplicationSignals from "./ApplicationSignals/index.ts";
51import * as AppRegistry from "./AppRegistry/index.ts";
52import * as AppRunner from "./AppRunner/index.ts";
53import * as AppSync from "./AppSync/index.ts";
54import * as Assets from "./Assets.ts";
55import * as Athena from "./Athena/index.ts";
56import * as AuditManager from "./AuditManager/index.ts";
57import { AwsAuth } from "./AuthProvider.ts";
58import * as AutoScaling from "./AutoScaling/index.ts";
59import * as B2BI from "./B2BI/index.ts";
60import * as Backup from "./Backup/index.ts";
61import * as BackupSearch from "./BackupSearch/index.ts";
62import * as Batch from "./Batch/index.ts";
63import * as BCMDataExports from "./BCMDataExports/index.ts";
64import * as Bedrock from "./Bedrock/index.ts";
65import * as BedrockAgentCore from "./BedrockAgentCore/index.ts";
66import * as BedrockDataAutomation from "./BedrockDataAutomation/index.ts";
67import * as Budgets from "./Budgets/index.ts";
68import * as Chatbot from "./Chatbot/index.ts";
69import * as CloudControl from "./CloudControl/index.ts";
70import * as CloudFormation from "./CloudFormation/index.ts";
71import * as CloudFront from "./CloudFront/index.ts";
72import * as CloudHSMV2 from "./CloudHSMV2/index.ts";
73import * as CloudMap from "./CloudMap/index.ts";
74import * as CloudTrail from "./CloudTrail/index.ts";
75import * as CloudWatch from "./CloudWatch/index.ts";
76import * as CodeArtifact from "./CodeArtifact/index.ts";
77import * as CodeBuild from "./CodeBuild/index.ts";
78import * as CodeConnections from "./CodeConnections/index.ts";
79import * as CodeDeploy from "./CodeDeploy/index.ts";
80import * as CodePipeline from "./CodePipeline/index.ts";
81import * as Cognito from "./Cognito/index.ts";
82import * as Config from "./Config/index.ts";
83import * as ControlTower from "./ControlTower/index.ts";
84import * as CostAndUsageReport from "./CostAndUsageReport/index.ts";
85import * as CostExplorer from "./CostExplorer/index.ts";
86import * as Credentials from "./Credentials.ts";
87import * as DataBrew from "./DataBrew/index.ts";
88import * as DataExchange from "./DataExchange/index.ts";
89import * as DataSync from "./DataSync/index.ts";
90import * as DataZone from "./DataZone/index.ts";
91import * as DAX from "./DAX/index.ts";
92import * as Deadline from "./Deadline/index.ts";
93import * as DirectoryService from "./DirectoryService/index.ts";
94import * as DLM from "./DLM/index.ts";
95import * as DMS from "./DMS/index.ts";
96import * as Detective from "./Detective/index.ts";
97import * as DevOpsGuru from "./DevOpsGuru/index.ts";
98import * as DocDB from "./DocDB/index.ts";
99import * as DocDBElastic from "./DocDBElastic/index.ts";
100import * as DSQL from "./DSQL/index.ts";
101import * as DynamoDB from "./DynamoDB/index.ts";
102import * as EC2 from "./EC2/index.ts";
103import * as ECR from "./ECR/index.ts";
104import * as ECRPublic from "./ECRPublic/index.ts";
105import * as ECS from "./ECS/index.ts";
106import * as EFS from "./EFS/index.ts";
107import * as EKS from "./EKS/index.ts";
108import * as ElastiCache from "./ElastiCache/index.ts";
109import * as ELBv2 from "./ELBv2/index.ts";
110import * as EMR from "./EMR/index.ts";
111import * as EMRContainers from "./EMRContainers/index.ts";
112import * as EMRServerless from "./EMRServerless/index.ts";
113import * as Endpoint from "./Endpoint.ts";
114import * as EntityResolution from "./EntityResolution/index.ts";
115import { Default as DefaultEnvironment } from "./Environment.ts";
116import * as EventBridge from "./EventBridge/index.ts";
117import * as FIS from "./FIS/index.ts";
118import * as FMS from "./FMS/index.ts";
119import * as FinSpace from "./FinSpace/index.ts";
120import * as Firehose from "./Firehose/index.ts";
121import * as Forecast from "./Forecast/index.ts";
122import * as FraudDetector from "./FraudDetector/index.ts";
123import * as FSx from "./FSx/index.ts";
124import * as Glacier from "./Glacier/index.ts";
125import * as GlobalAccelerator from "./GlobalAccelerator/index.ts";
126import * as Glue from "./Glue/index.ts";
127import * as Grafana from "./Grafana/index.ts";
128import * as GreengrassV2 from "./GreengrassV2/index.ts";
129import * as GuardDuty from "./GuardDuty/index.ts";
130import * as HealthLake from "./HealthLake/index.ts";
131import * as IAM from "./IAM/index.ts";
132import * as IdentityCenter from "./IdentityCenter/index.ts";
133import * as ImageBuilder from "./ImageBuilder/index.ts";
134import * as Inspector2 from "./Inspector2/index.ts";
135import * as InternetMonitor from "./InternetMonitor/index.ts";
136import * as IoT from "./IoT/index.ts";
137import * as IoTFleetWise from "./IoTFleetWise/index.ts";
138import * as IoTManagedIntegrations from "./IoTManagedIntegrations/index.ts";
139import * as IoTSiteWise from "./IoTSiteWise/index.ts";
140import * as IoTWireless from "./IoTWireless/index.ts";
141import * as IVS from "./IVS/index.ts";
142import * as IVSChat from "./IVSChat/index.ts";
143import * as IVSRealtime from "./IVSRealtime/index.ts";
144import * as Kafka from "./Kafka/index.ts";
145import * as Kendra from "./Kendra/index.ts";
146import * as Keyspaces from "./Keyspaces/index.ts";
147import * as Kinesis from "./Kinesis/index.ts";
148import * as KinesisAnalyticsV2 from "./KinesisAnalyticsV2/index.ts";
149import * as KinesisVideo from "./KinesisVideo/index.ts";
150import * as KMS from "./KMS/index.ts";
151import * as LakeFormation from "./LakeFormation/index.ts";
152import * as Lambda from "./Lambda/index.ts";
153import * as LexV2 from "./LexV2/index.ts";
154import * as LicenseManager from "./LicenseManager/index.ts";
155import * as Location from "./Location/index.ts";
156import * as Logs from "./Logs/index.ts";
157import * as MediaConnect from "./MediaConnect/index.ts";
158import * as MediaConvert from "./MediaConvert/index.ts";
159import * as MediaLive from "./MediaLive/index.ts";
160import * as MediaPackageV2 from "./MediaPackageV2/index.ts";
161import * as MediaTailor from "./MediaTailor/index.ts";
162import * as MedicalImaging from "./MedicalImaging/index.ts";
163import * as MQ from "./MQ/index.ts";
164import * as MWAA from "./MWAA/index.ts";
165import * as MWAAServerless from "./MWAAServerless/index.ts";
166import * as Macie2 from "./Macie2/index.ts";
167import * as MailManager from "./MailManager/index.ts";
168import * as MemoryDB from "./MemoryDB/index.ts";
169import * as Neptune from "./Neptune/index.ts";
170import * as NeptuneGraph from "./NeptuneGraph/index.ts";
171import * as NetworkFirewall from "./NetworkFirewall/index.ts";
172import * as Notifications from "./Notifications/index.ts";
173import * as NotificationsContacts from "./NotificationsContacts/index.ts";
174import * as OAM from "./OAM/index.ts";
175import * as ObservabilityAdmin from "./ObservabilityAdmin/index.ts";
176import * as Omics from "./Omics/index.ts";
177import * as OpenSearch from "./OpenSearch/index.ts";
178import * as OpenSearchServerless from "./OpenSearchServerless/index.ts";
179import * as OSIS from "./OSIS/index.ts";
180import * as Organizations from "./Organizations/index.ts";
181import * as PaymentCryptography from "./PaymentCryptography/index.ts";
182import * as Personalize from "./Personalize/index.ts";
183import * as PinpointSMSVoiceV2 from "./PinpointSMSVoiceV2/index.ts";
184import * as Pipes from "./Pipes/index.ts";
185import * as Polly from "./Polly/index.ts";
186import * as QApps from "./QApps/index.ts";
187import * as QBusiness from "./QBusiness/index.ts";
188import * as QuickSight from "./QuickSight/index.ts";
189import * as RAM from "./RAM/index.ts";
190import * as RDS from "./RDS/index.ts";
191import * as Rbin from "./Rbin/index.ts";
192import * as RePostSpace from "./RePostSpace/index.ts";
193import * as Redshift from "./Redshift/index.ts";
194import * as RedshiftServerless from "./RedshiftServerless/index.ts";
195import * as ResourceExplorer from "./ResourceExplorer/index.ts";
196import * as ResourceGroups from "./ResourceGroups/index.ts";
197import * as RolesAnywhere from "./RolesAnywhere/index.ts";
198import * as Region from "./Region.ts";
199import * as Route53 from "./Route53/index.ts";
200import * as Route53Profiles from "./Route53Profiles/index.ts";
201import * as Route53Resolver from "./Route53Resolver/index.ts";
202import * as RUM from "./RUM/index.ts";
203import * as S3 from "./S3/index.ts";
204import * as S3Control from "./S3Control/index.ts";
205import * as S3Files from "./S3Files/index.ts";
206import * as S3Tables from "./S3Tables/index.ts";
207import * as S3Vectors from "./S3Vectors/index.ts";
208import * as SageMaker from "./SageMaker/index.ts";
209import * as Scheduler from "./Scheduler/index.ts";
210import * as Schemas from "./Schemas/index.ts";
211import * as SecretsManager from "./SecretsManager/index.ts";
212import * as SecurityHub from "./SecurityHub/index.ts";
213import * as SecurityLake from "./SecurityLake/index.ts";
214import * as ServiceCatalog from "./ServiceCatalog/index.ts";
215import * as ServiceQuotas from "./ServiceQuotas/index.ts";
216import * as SES from "./SES/index.ts";
217import * as Shield from "./Shield/index.ts";
218import * as Signer from "./Signer/index.ts";
219import * as SimpleDB from "./SimpleDB/index.ts";
220import * as SNS from "./SNS/index.ts";
221import * as SocialMessaging from "./SocialMessaging/index.ts";
222import * as SQS from "./SQS/index.ts";
223import * as SSM from "./SSM/index.ts";
224import * as SSMContacts from "./SSMContacts/index.ts";
225import * as SSMIncidents from "./SSMIncidents/index.ts";
226import * as StepFunctions from "./StepFunctions/index.ts";
227import * as Synthetics from "./Synthetics/index.ts";
228import * as Textract from "./Textract/index.ts";
229import * as Timestream from "./Timestream/index.ts";
230import * as Transfer from "./Transfer/index.ts";
231import * as Translate from "./Translate/index.ts";
232import * as VerifiedPermissions from "./VerifiedPermissions/index.ts";
233import * as VpcLattice from "./VpcLattice/index.ts";
234import * as WAFv2 from "./WAFv2/index.ts";
235import * as Website from "./Website/index.ts";
236import * as XRay from "./XRay/index.ts";
237
238export class Providers extends Provider.ProviderCollection<Providers>()(
239 "AWS",
240) {}
241
242export 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.
2024const 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`).
2036const 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).
2042const 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.
2068const 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
2076const 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
2086const 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
2092const 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
2115const 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};