alchemy 2.0.0-beta.59 → 2.0.0-beta.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/exec.js +684 -758
- package/bin/exec.js.map +1 -1
- package/lib/AWS/AuthProvider.d.ts.map +1 -1
- package/lib/AWS/AuthProvider.js +22 -9
- package/lib/AWS/AuthProvider.js.map +1 -1
- package/lib/AWS/AutoScaling/LaunchTemplate.d.ts +1 -1
- package/lib/AWS/AutoScaling/LaunchTemplate.js +1 -1
- package/lib/AWS/CloudWatch/Dashboard.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/Dashboard.js +4 -1
- package/lib/AWS/CloudWatch/Dashboard.js.map +1 -1
- package/lib/AWS/Credentials.d.ts +58 -2
- package/lib/AWS/Credentials.d.ts.map +1 -1
- package/lib/AWS/Credentials.js +124 -2
- package/lib/AWS/Credentials.js.map +1 -1
- package/lib/AWS/EC2/Image.d.ts.map +1 -1
- package/lib/AWS/EC2/Image.js +4 -1
- package/lib/AWS/EC2/Image.js.map +1 -1
- package/lib/AWS/EC2/Instance.d.ts +4 -3
- package/lib/AWS/EC2/Instance.d.ts.map +1 -1
- package/lib/AWS/EC2/Instance.js +4 -2
- package/lib/AWS/EC2/Instance.js.map +1 -1
- package/lib/AWS/EC2/KeyPair.d.ts +87 -0
- package/lib/AWS/EC2/KeyPair.d.ts.map +1 -0
- package/lib/AWS/EC2/KeyPair.js +198 -0
- package/lib/AWS/EC2/KeyPair.js.map +1 -0
- package/lib/AWS/EC2/NetworkAcl.d.ts.map +1 -1
- package/lib/AWS/EC2/NetworkAcl.js +4 -1
- package/lib/AWS/EC2/NetworkAcl.js.map +1 -1
- package/lib/AWS/EC2/SecurityGroup.d.ts.map +1 -1
- package/lib/AWS/EC2/SecurityGroup.js +4 -1
- package/lib/AWS/EC2/SecurityGroup.js.map +1 -1
- package/lib/AWS/EC2/SecurityGroupRule.d.ts.map +1 -1
- package/lib/AWS/EC2/SecurityGroupRule.js +14 -7
- package/lib/AWS/EC2/SecurityGroupRule.js.map +1 -1
- package/lib/AWS/EC2/Subnet.d.ts.map +1 -1
- package/lib/AWS/EC2/Subnet.js +29 -5
- package/lib/AWS/EC2/Subnet.js.map +1 -1
- package/lib/AWS/EC2/hosted.d.ts +8 -10
- package/lib/AWS/EC2/hosted.d.ts.map +1 -1
- package/lib/AWS/EC2/hosted.js +81 -67
- package/lib/AWS/EC2/hosted.js.map +1 -1
- package/lib/AWS/EC2/index.d.ts +1 -0
- package/lib/AWS/EC2/index.d.ts.map +1 -1
- package/lib/AWS/EC2/index.js +1 -0
- package/lib/AWS/EC2/index.js.map +1 -1
- package/lib/AWS/ECS/Task.d.ts +8 -8
- package/lib/AWS/ECS/Task.d.ts.map +1 -1
- package/lib/AWS/ECS/Task.js +82 -56
- package/lib/AWS/ECS/Task.js.map +1 -1
- package/lib/AWS/IAM/Role.d.ts +19 -4
- package/lib/AWS/IAM/Role.d.ts.map +1 -1
- package/lib/AWS/IAM/Role.js +81 -16
- package/lib/AWS/IAM/Role.js.map +1 -1
- package/lib/AWS/Lambda/CreateAuthToken.d.ts +28 -0
- package/lib/AWS/Lambda/CreateAuthToken.d.ts.map +1 -0
- package/lib/AWS/Lambda/CreateAuthToken.js +3 -0
- package/lib/AWS/Lambda/CreateAuthToken.js.map +1 -0
- package/lib/AWS/Lambda/CreateAuthTokenHttp.d.ts +3 -0
- package/lib/AWS/Lambda/CreateAuthTokenHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/CreateAuthTokenHttp.js +11 -0
- package/lib/AWS/Lambda/CreateAuthTokenHttp.js.map +1 -0
- package/lib/AWS/Lambda/CreateShellAuthToken.d.ts +27 -0
- package/lib/AWS/Lambda/CreateShellAuthToken.d.ts.map +1 -0
- package/lib/AWS/Lambda/CreateShellAuthToken.js +3 -0
- package/lib/AWS/Lambda/CreateShellAuthToken.js.map +1 -0
- package/lib/AWS/Lambda/CreateShellAuthTokenHttp.d.ts +3 -0
- package/lib/AWS/Lambda/CreateShellAuthTokenHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/CreateShellAuthTokenHttp.js +11 -0
- package/lib/AWS/Lambda/CreateShellAuthTokenHttp.js.map +1 -0
- package/lib/AWS/Lambda/DeleteMicrovmImageVersion.d.ts +18 -0
- package/lib/AWS/Lambda/DeleteMicrovmImageVersion.d.ts.map +1 -0
- package/lib/AWS/Lambda/DeleteMicrovmImageVersion.js +3 -0
- package/lib/AWS/Lambda/DeleteMicrovmImageVersion.js.map +1 -0
- package/lib/AWS/Lambda/DeleteMicrovmImageVersionHttp.d.ts +3 -0
- package/lib/AWS/Lambda/DeleteMicrovmImageVersionHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/DeleteMicrovmImageVersionHttp.js +12 -0
- package/lib/AWS/Lambda/DeleteMicrovmImageVersionHttp.js.map +1 -0
- package/lib/AWS/Lambda/Function.d.ts +4 -2
- package/lib/AWS/Lambda/Function.d.ts.map +1 -1
- package/lib/AWS/Lambda/Function.js +10 -5
- package/lib/AWS/Lambda/Function.js.map +1 -1
- package/lib/AWS/Lambda/GetMicrovm.d.ts +23 -0
- package/lib/AWS/Lambda/GetMicrovm.d.ts.map +1 -0
- package/lib/AWS/Lambda/GetMicrovm.js +3 -0
- package/lib/AWS/Lambda/GetMicrovm.js.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmHttp.d.ts +3 -0
- package/lib/AWS/Lambda/GetMicrovmHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmHttp.js +13 -0
- package/lib/AWS/Lambda/GetMicrovmHttp.js.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmImage.d.ts +23 -0
- package/lib/AWS/Lambda/GetMicrovmImage.d.ts.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmImage.js +3 -0
- package/lib/AWS/Lambda/GetMicrovmImage.js.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmImageBuild.d.ts +18 -0
- package/lib/AWS/Lambda/GetMicrovmImageBuild.d.ts.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmImageBuild.js +3 -0
- package/lib/AWS/Lambda/GetMicrovmImageBuild.js.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmImageBuildHttp.d.ts +3 -0
- package/lib/AWS/Lambda/GetMicrovmImageBuildHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmImageBuildHttp.js +12 -0
- package/lib/AWS/Lambda/GetMicrovmImageBuildHttp.js.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmImageHttp.d.ts +3 -0
- package/lib/AWS/Lambda/GetMicrovmImageHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmImageHttp.js +12 -0
- package/lib/AWS/Lambda/GetMicrovmImageHttp.js.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmImageVersion.d.ts +18 -0
- package/lib/AWS/Lambda/GetMicrovmImageVersion.d.ts.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmImageVersion.js +3 -0
- package/lib/AWS/Lambda/GetMicrovmImageVersion.js.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmImageVersionHttp.d.ts +3 -0
- package/lib/AWS/Lambda/GetMicrovmImageVersionHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/GetMicrovmImageVersionHttp.js +12 -0
- package/lib/AWS/Lambda/GetMicrovmImageVersionHttp.js.map +1 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImageVersions.d.ts +17 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImageVersions.d.ts.map +1 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImageVersions.js +3 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImageVersions.js.map +1 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.d.ts +3 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.js +10 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.js.map +1 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImages.d.ts +17 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImages.d.ts.map +1 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImages.js +3 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImages.js.map +1 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImagesHttp.d.ts +3 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImagesHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImagesHttp.js +10 -0
- package/lib/AWS/Lambda/ListManagedMicrovmImagesHttp.js.map +1 -0
- package/lib/AWS/Lambda/ListMicrovmImageBuilds.d.ts +19 -0
- package/lib/AWS/Lambda/ListMicrovmImageBuilds.d.ts.map +1 -0
- package/lib/AWS/Lambda/ListMicrovmImageBuilds.js +3 -0
- package/lib/AWS/Lambda/ListMicrovmImageBuilds.js.map +1 -0
- package/lib/AWS/Lambda/ListMicrovmImageBuildsHttp.d.ts +3 -0
- package/lib/AWS/Lambda/ListMicrovmImageBuildsHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/ListMicrovmImageBuildsHttp.js +12 -0
- package/lib/AWS/Lambda/ListMicrovmImageBuildsHttp.js.map +1 -0
- package/lib/AWS/Lambda/ListMicrovmImageVersions.d.ts +18 -0
- package/lib/AWS/Lambda/ListMicrovmImageVersions.d.ts.map +1 -0
- package/lib/AWS/Lambda/ListMicrovmImageVersions.js +3 -0
- package/lib/AWS/Lambda/ListMicrovmImageVersions.js.map +1 -0
- package/lib/AWS/Lambda/ListMicrovmImageVersionsHttp.d.ts +3 -0
- package/lib/AWS/Lambda/ListMicrovmImageVersionsHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/ListMicrovmImageVersionsHttp.js +12 -0
- package/lib/AWS/Lambda/ListMicrovmImageVersionsHttp.js.map +1 -0
- package/lib/AWS/Lambda/ListMicrovms.d.ts +23 -0
- package/lib/AWS/Lambda/ListMicrovms.d.ts.map +1 -0
- package/lib/AWS/Lambda/ListMicrovms.js +3 -0
- package/lib/AWS/Lambda/ListMicrovms.js.map +1 -0
- package/lib/AWS/Lambda/ListMicrovmsHttp.d.ts +3 -0
- package/lib/AWS/Lambda/ListMicrovmsHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/ListMicrovmsHttp.js +12 -0
- package/lib/AWS/Lambda/ListMicrovmsHttp.js.map +1 -0
- package/lib/AWS/Lambda/MicrovmBinding.d.ts +61 -0
- package/lib/AWS/Lambda/MicrovmBinding.d.ts.map +1 -0
- package/lib/AWS/Lambda/MicrovmBinding.js +279 -0
- package/lib/AWS/Lambda/MicrovmBinding.js.map +1 -0
- package/lib/AWS/Lambda/MicrovmBundle.d.ts +62 -0
- package/lib/AWS/Lambda/MicrovmBundle.d.ts.map +1 -0
- package/lib/AWS/Lambda/MicrovmBundle.js +197 -0
- package/lib/AWS/Lambda/MicrovmBundle.js.map +1 -0
- package/lib/AWS/Lambda/MicrovmImage.d.ts +488 -0
- package/lib/AWS/Lambda/MicrovmImage.d.ts.map +1 -0
- package/lib/AWS/Lambda/MicrovmImage.js +381 -0
- package/lib/AWS/Lambda/MicrovmImage.js.map +1 -0
- package/lib/AWS/Lambda/MicrovmProvider.d.ts +7 -0
- package/lib/AWS/Lambda/MicrovmProvider.d.ts.map +1 -0
- package/lib/AWS/Lambda/MicrovmProvider.js +384 -0
- package/lib/AWS/Lambda/MicrovmProvider.js.map +1 -0
- package/lib/AWS/Lambda/MicrovmRpc.d.ts +50 -0
- package/lib/AWS/Lambda/MicrovmRpc.d.ts.map +1 -0
- package/lib/AWS/Lambda/MicrovmRpc.js +50 -0
- package/lib/AWS/Lambda/MicrovmRpc.js.map +1 -0
- package/lib/AWS/Lambda/MicrovmRuntimeContext.d.ts +9 -0
- package/lib/AWS/Lambda/MicrovmRuntimeContext.d.ts.map +1 -0
- package/lib/AWS/Lambda/MicrovmRuntimeContext.js +67 -0
- package/lib/AWS/Lambda/MicrovmRuntimeContext.js.map +1 -0
- package/lib/AWS/Lambda/NetworkConnector.d.ts +142 -0
- package/lib/AWS/Lambda/NetworkConnector.d.ts.map +1 -0
- package/lib/AWS/Lambda/NetworkConnector.js +283 -0
- package/lib/AWS/Lambda/NetworkConnector.js.map +1 -0
- package/lib/AWS/Lambda/QueueEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/QueueEventSource.js +1 -0
- package/lib/AWS/Lambda/QueueEventSource.js.map +1 -1
- package/lib/AWS/Lambda/ResumeMicrovm.d.ts +23 -0
- package/lib/AWS/Lambda/ResumeMicrovm.d.ts.map +1 -0
- package/lib/AWS/Lambda/ResumeMicrovm.js +3 -0
- package/lib/AWS/Lambda/ResumeMicrovm.js.map +1 -0
- package/lib/AWS/Lambda/ResumeMicrovmHttp.d.ts +3 -0
- package/lib/AWS/Lambda/ResumeMicrovmHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/ResumeMicrovmHttp.js +11 -0
- package/lib/AWS/Lambda/ResumeMicrovmHttp.js.map +1 -0
- package/lib/AWS/Lambda/RunMicrovm.d.ts +33 -0
- package/lib/AWS/Lambda/RunMicrovm.d.ts.map +1 -0
- package/lib/AWS/Lambda/RunMicrovm.js +3 -0
- package/lib/AWS/Lambda/RunMicrovm.js.map +1 -0
- package/lib/AWS/Lambda/RunMicrovmHttp.d.ts +3 -0
- package/lib/AWS/Lambda/RunMicrovmHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/RunMicrovmHttp.js +13 -0
- package/lib/AWS/Lambda/RunMicrovmHttp.js.map +1 -0
- package/lib/AWS/Lambda/SuspendMicrovm.d.ts +23 -0
- package/lib/AWS/Lambda/SuspendMicrovm.d.ts.map +1 -0
- package/lib/AWS/Lambda/SuspendMicrovm.js +3 -0
- package/lib/AWS/Lambda/SuspendMicrovm.js.map +1 -0
- package/lib/AWS/Lambda/SuspendMicrovmHttp.d.ts +3 -0
- package/lib/AWS/Lambda/SuspendMicrovmHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/SuspendMicrovmHttp.js +11 -0
- package/lib/AWS/Lambda/SuspendMicrovmHttp.js.map +1 -0
- package/lib/AWS/Lambda/TerminateMicrovm.d.ts +23 -0
- package/lib/AWS/Lambda/TerminateMicrovm.d.ts.map +1 -0
- package/lib/AWS/Lambda/TerminateMicrovm.js +3 -0
- package/lib/AWS/Lambda/TerminateMicrovm.js.map +1 -0
- package/lib/AWS/Lambda/TerminateMicrovmHttp.d.ts +3 -0
- package/lib/AWS/Lambda/TerminateMicrovmHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/TerminateMicrovmHttp.js +11 -0
- package/lib/AWS/Lambda/TerminateMicrovmHttp.js.map +1 -0
- package/lib/AWS/Lambda/UpdateMicrovmImageVersion.d.ts +18 -0
- package/lib/AWS/Lambda/UpdateMicrovmImageVersion.d.ts.map +1 -0
- package/lib/AWS/Lambda/UpdateMicrovmImageVersion.js +3 -0
- package/lib/AWS/Lambda/UpdateMicrovmImageVersion.js.map +1 -0
- package/lib/AWS/Lambda/UpdateMicrovmImageVersionHttp.d.ts +3 -0
- package/lib/AWS/Lambda/UpdateMicrovmImageVersionHttp.d.ts.map +1 -0
- package/lib/AWS/Lambda/UpdateMicrovmImageVersionHttp.js +12 -0
- package/lib/AWS/Lambda/UpdateMicrovmImageVersionHttp.js.map +1 -0
- package/lib/AWS/Lambda/index.d.ts +38 -0
- package/lib/AWS/Lambda/index.d.ts.map +1 -1
- package/lib/AWS/Lambda/index.js +38 -0
- package/lib/AWS/Lambda/index.js.map +1 -1
- package/lib/AWS/Providers.d.ts +1 -1
- package/lib/AWS/Providers.d.ts.map +1 -1
- package/lib/AWS/Providers.js +6 -2
- package/lib/AWS/Providers.js.map +1 -1
- package/lib/AWS/RDS/DBClusterParameterGroup.d.ts.map +1 -1
- package/lib/AWS/RDS/DBClusterParameterGroup.js +4 -1
- package/lib/AWS/RDS/DBClusterParameterGroup.js.map +1 -1
- package/lib/AWS/RDS/DBParameterGroup.d.ts.map +1 -1
- package/lib/AWS/RDS/DBParameterGroup.js +4 -1
- package/lib/AWS/RDS/DBParameterGroup.js.map +1 -1
- package/lib/AWS/Region.d.ts.map +1 -1
- package/lib/AWS/Region.js +6 -1
- package/lib/AWS/Region.js.map +1 -1
- package/lib/AWS/S3/Bucket.d.ts.map +1 -1
- package/lib/AWS/S3/Bucket.js +46 -26
- package/lib/AWS/S3/Bucket.js.map +1 -1
- package/lib/AlchemyContext.d.ts +7 -0
- package/lib/AlchemyContext.d.ts.map +1 -1
- package/lib/AlchemyContext.js.map +1 -1
- package/lib/Apply.js +2 -2
- package/lib/Apply.js.map +1 -1
- package/lib/Axiom/Chart.d.ts +9 -1
- package/lib/Axiom/Chart.d.ts.map +1 -1
- package/lib/Bundle/Bundle.d.ts +1 -0
- package/lib/Bundle/Bundle.d.ts.map +1 -1
- package/lib/Bundle/Bundle.js +1 -1
- package/lib/Bundle/Bundle.js.map +1 -1
- package/lib/Bundle/TempRoot.d.ts +9 -0
- package/lib/Bundle/TempRoot.d.ts.map +1 -1
- package/lib/Bundle/TempRoot.js +22 -0
- package/lib/Bundle/TempRoot.js.map +1 -1
- package/lib/Bundle/Vite.d.ts +20 -0
- package/lib/Bundle/Vite.d.ts.map +1 -0
- package/lib/Bundle/Vite.js +130 -0
- package/lib/Bundle/Vite.js.map +1 -0
- package/lib/Bundle/index.d.ts +0 -1
- package/lib/Bundle/index.d.ts.map +1 -1
- package/lib/Bundle/index.js +0 -1
- package/lib/Bundle/index.js.map +1 -1
- package/lib/Cli/Event.d.ts +1 -1
- package/lib/Cli/Event.d.ts.map +1 -1
- package/lib/Cli/LoggingCli.d.ts.map +1 -1
- package/lib/Cli/LoggingCli.js +3 -0
- package/lib/Cli/LoggingCli.js.map +1 -1
- package/lib/Cli/commands/_shared.d.ts.map +1 -1
- package/lib/Cli/commands/_shared.js +7 -1
- package/lib/Cli/commands/_shared.js.map +1 -1
- package/lib/Cli/commands/cloudflare.d.ts +2 -2
- package/lib/Cli/commands/cloudflare.d.ts.map +1 -1
- package/lib/Cli/commands/cloudflare.js +21 -2
- package/lib/Cli/commands/cloudflare.js.map +1 -1
- package/lib/Cli/commands/deploy.d.ts.map +1 -1
- package/lib/Cli/commands/deploy.js +4 -1
- package/lib/Cli/commands/deploy.js.map +1 -1
- package/lib/Cli/tui/components/PlanProgress.js +5 -3
- package/lib/Cli/tui/components/PlanProgress.js.map +1 -1
- package/lib/Cloudflare/AI/Gateway.d.ts +1 -1
- package/lib/Cloudflare/AI/Gateway.js +1 -1
- package/lib/Cloudflare/AI/Search.d.ts +1 -1
- package/lib/Cloudflare/AI/Search.js +1 -1
- package/lib/Cloudflare/AI/SearchInstance.d.ts +1 -1
- package/lib/Cloudflare/AI/SearchInstance.js +1 -1
- package/lib/Cloudflare/AI/SearchNamespace.d.ts +1 -1
- package/lib/Cloudflare/AI/SearchNamespace.js +1 -1
- package/lib/Cloudflare/AI/SearchToken.d.ts.map +1 -1
- package/lib/Cloudflare/AI/SearchToken.js +6 -1
- package/lib/Cloudflare/AI/SearchToken.js.map +1 -1
- package/lib/Cloudflare/Access/Application.d.ts.map +1 -1
- package/lib/Cloudflare/Access/Application.js +51 -11
- package/lib/Cloudflare/Access/Application.js.map +1 -1
- package/lib/Cloudflare/Alerting/Webhook.d.ts.map +1 -1
- package/lib/Cloudflare/Alerting/Webhook.js +9 -2
- package/lib/Cloudflare/Alerting/Webhook.js.map +1 -1
- package/lib/Cloudflare/AnalyticsEngine/WriteDataset.d.ts +2 -2
- package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts.map +1 -1
- package/lib/Cloudflare/ApiToken/AccountApiToken.js +5 -1
- package/lib/Cloudflare/ApiToken/AccountApiToken.js.map +1 -1
- package/lib/Cloudflare/Auth/AuthProvider.js +1 -1
- package/lib/Cloudflare/Auth/AuthProvider.js.map +1 -1
- package/lib/Cloudflare/Containers/Container.d.ts +46 -4
- package/lib/Cloudflare/Containers/Container.d.ts.map +1 -1
- package/lib/Cloudflare/Containers/Container.js +27 -3
- package/lib/Cloudflare/Containers/Container.js.map +1 -1
- package/lib/Cloudflare/Containers/ContainerApplication.d.ts +25 -19
- package/lib/Cloudflare/Containers/ContainerApplication.d.ts.map +1 -1
- package/lib/Cloudflare/Containers/ContainerApplication.js.map +1 -1
- package/lib/Cloudflare/Containers/ContainerBundle.d.ts +1 -2
- package/lib/Cloudflare/Containers/ContainerBundle.d.ts.map +1 -1
- package/lib/Cloudflare/Containers/ContainerBundle.js +2 -4
- package/lib/Cloudflare/Containers/ContainerBundle.js.map +1 -1
- package/lib/Cloudflare/Containers/ContainerPlatform.js +2 -2
- package/lib/Cloudflare/Containers/ContainerPlatform.js.map +1 -1
- package/lib/Cloudflare/Containers/ContainerProvider.d.ts +2 -1
- package/lib/Cloudflare/Containers/ContainerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Containers/ContainerProvider.js +51 -35
- package/lib/Cloudflare/Containers/ContainerProvider.js.map +1 -1
- package/lib/Cloudflare/Containers/LocalContainerProvider.d.ts +3 -1
- package/lib/Cloudflare/Containers/LocalContainerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Containers/LocalContainerProvider.js +11 -4
- package/lib/Cloudflare/Containers/LocalContainerProvider.js.map +1 -1
- package/lib/Cloudflare/Containers/StartContainer.d.ts.map +1 -1
- package/lib/Cloudflare/Containers/StartContainer.js +222 -15
- package/lib/Cloudflare/Containers/StartContainer.js.map +1 -1
- package/lib/Cloudflare/DNS/ReadDns.d.ts +1 -1
- package/lib/Cloudflare/DNS/ReadWriteDns.d.ts +1 -1
- package/lib/Cloudflare/DNS/WriteDns.d.ts +1 -1
- package/lib/Cloudflare/Flagship/App.d.ts +1 -1
- package/lib/Cloudflare/Flagship/App.js +1 -1
- package/lib/Cloudflare/Images/Images.d.ts +1 -1
- package/lib/Cloudflare/Local.js +2 -1
- package/lib/Cloudflare/Local.js.map +1 -1
- package/lib/Cloudflare/Providers.d.ts.map +1 -1
- package/lib/Cloudflare/Providers.js +2 -1
- package/lib/Cloudflare/Providers.js.map +1 -1
- package/lib/Cloudflare/Queues/Consumer.d.ts +2 -2
- package/lib/Cloudflare/Queues/Consumer.d.ts.map +1 -1
- package/lib/Cloudflare/Queues/Consumer.js +21 -13
- package/lib/Cloudflare/Queues/Consumer.js.map +1 -1
- package/lib/Cloudflare/Queues/Queue.d.ts +1 -1
- package/lib/Cloudflare/Queues/Queue.js +1 -1
- package/lib/Cloudflare/R2/Bucket.d.ts +2 -2
- package/lib/Cloudflare/R2/Bucket.js +2 -2
- package/lib/Cloudflare/StateStore/Api.d.ts +4 -1
- package/lib/Cloudflare/StateStore/Api.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/Api.js +6 -4
- package/lib/Cloudflare/StateStore/Api.js.map +1 -1
- package/lib/Cloudflare/StateStore/State.d.ts +28 -2
- package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/State.js +122 -19
- package/lib/Cloudflare/StateStore/State.js.map +1 -1
- package/lib/Cloudflare/Website/Vite.d.ts +26 -23
- package/lib/Cloudflare/Website/Vite.d.ts.map +1 -1
- package/lib/Cloudflare/Website/Vite.js +25 -7
- package/lib/Cloudflare/Website/Vite.js.map +1 -1
- package/lib/Cloudflare/Workers/Binding.d.ts +1 -1
- package/lib/Cloudflare/Workers/Browser.d.ts +1 -1
- package/lib/Cloudflare/Workers/DurableObject.d.ts +54 -3
- package/lib/Cloudflare/Workers/DurableObject.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObject.js +54 -3
- package/lib/Cloudflare/Workers/DurableObject.js.map +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts +4 -2
- package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js +55 -6
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
- package/lib/Cloudflare/Workers/RpcDurableObject.d.ts +3 -3
- package/lib/Cloudflare/Workers/RpcDurableObject.js +3 -3
- package/lib/Cloudflare/Workers/RpcWorker.d.ts +4 -4
- package/lib/Cloudflare/Workers/RpcWorker.js +4 -4
- package/lib/Cloudflare/Workers/ScheduledEvents.js +1 -1
- package/lib/Cloudflare/Workers/ScheduledEvents.js.map +1 -1
- package/lib/Cloudflare/Workers/VersionMetadata.d.ts +1 -1
- package/lib/Cloudflare/Workers/Vite.d.ts +1 -4
- package/lib/Cloudflare/Workers/Vite.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Vite.js +19 -38
- package/lib/Cloudflare/Workers/Vite.js.map +1 -1
- package/lib/Cloudflare/Workers/Worker.d.ts +73 -13
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +9 -9
- package/lib/Cloudflare/Workers/Worker.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts +2 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +31 -0
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts +7 -1
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerLoader.d.ts +1 -1
- package/lib/Cloudflare/Workers/WorkerLoader.js +1 -1
- package/lib/Cloudflare/Workers/WorkerProvider.d.ts +10 -0
- package/lib/Cloudflare/Workers/WorkerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerProvider.js +240 -60
- package/lib/Cloudflare/Workers/WorkerProvider.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +1 -1
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
- package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.d.ts +44 -2
- package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.js +44 -2
- package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.js.map +1 -1
- package/lib/Cloudflare/WorkersForPlatforms/Get.d.ts +77 -0
- package/lib/Cloudflare/WorkersForPlatforms/Get.d.ts.map +1 -0
- package/lib/Cloudflare/WorkersForPlatforms/Get.js +9 -0
- package/lib/Cloudflare/WorkersForPlatforms/Get.js.map +1 -0
- package/lib/Cloudflare/WorkersForPlatforms/GetBinding.d.ts +9 -0
- package/lib/Cloudflare/WorkersForPlatforms/GetBinding.d.ts.map +1 -0
- package/lib/Cloudflare/WorkersForPlatforms/GetBinding.js +43 -0
- package/lib/Cloudflare/WorkersForPlatforms/GetBinding.js.map +1 -0
- package/lib/Cloudflare/WorkersForPlatforms/index.d.ts +2 -0
- package/lib/Cloudflare/WorkersForPlatforms/index.d.ts.map +1 -1
- package/lib/Cloudflare/WorkersForPlatforms/index.js +2 -0
- package/lib/Cloudflare/WorkersForPlatforms/index.js.map +1 -1
- package/lib/Cloudflare/Workflows/Workflow.d.ts +107 -1
- package/lib/Cloudflare/Workflows/Workflow.d.ts.map +1 -1
- package/lib/Cloudflare/Workflows/Workflow.js +93 -6
- package/lib/Cloudflare/Workflows/Workflow.js.map +1 -1
- package/lib/Command/Build.d.ts.map +1 -1
- package/lib/Command/Build.js +24 -1
- package/lib/Command/Build.js.map +1 -1
- package/lib/Docker/Container.d.ts +156 -0
- package/lib/Docker/Container.d.ts.map +1 -0
- package/lib/Docker/Container.js +221 -0
- package/lib/Docker/Container.js.map +1 -0
- package/lib/Docker/Docker.d.ts +199 -0
- package/lib/Docker/Docker.d.ts.map +1 -0
- package/lib/Docker/Docker.js +224 -0
- package/lib/Docker/Docker.js.map +1 -0
- package/lib/Docker/Image.d.ts +109 -0
- package/lib/Docker/Image.d.ts.map +1 -0
- package/lib/Docker/Image.js +150 -0
- package/lib/Docker/Image.js.map +1 -0
- package/lib/Docker/Network.d.ts +61 -0
- package/lib/Docker/Network.d.ts.map +1 -0
- package/lib/Docker/Network.js +99 -0
- package/lib/Docker/Network.js.map +1 -0
- package/lib/Docker/Providers.d.ts +15 -0
- package/lib/Docker/Providers.d.ts.map +1 -0
- package/lib/Docker/Providers.js +18 -0
- package/lib/Docker/Providers.js.map +1 -0
- package/lib/Docker/Registry.d.ts +30 -0
- package/lib/Docker/Registry.d.ts.map +1 -0
- package/lib/Docker/Registry.js +44 -0
- package/lib/Docker/Registry.js.map +1 -0
- package/lib/Docker/RemoteImage.d.ts +102 -0
- package/lib/Docker/RemoteImage.d.ts.map +1 -0
- package/lib/Docker/RemoteImage.js +123 -0
- package/lib/Docker/RemoteImage.js.map +1 -0
- package/lib/Docker/Volume.d.ts +81 -0
- package/lib/Docker/Volume.d.ts.map +1 -0
- package/lib/Docker/Volume.js +107 -0
- package/lib/Docker/Volume.js.map +1 -0
- package/lib/Docker/index.d.ts +9 -0
- package/lib/Docker/index.d.ts.map +1 -0
- package/lib/Docker/index.js +8 -0
- package/lib/Docker/index.js.map +1 -0
- package/lib/Local/ProviderLayer.d.ts +1 -0
- package/lib/Local/ProviderLayer.d.ts.map +1 -1
- package/lib/Local/ProviderLayer.js +1 -0
- package/lib/Local/ProviderLayer.js.map +1 -1
- package/lib/Neon/Branch.d.ts +5 -0
- package/lib/Neon/Branch.d.ts.map +1 -1
- package/lib/Neon/Branch.js +8 -1
- package/lib/Neon/Branch.js.map +1 -1
- package/lib/Neon/Project.d.ts +5 -0
- package/lib/Neon/Project.d.ts.map +1 -1
- package/lib/Neon/Project.js +6 -0
- package/lib/Neon/Project.js.map +1 -1
- package/lib/Plan.d.ts.map +1 -1
- package/lib/Plan.js +3 -1
- package/lib/Plan.js.map +1 -1
- package/lib/Planetscale/Branch.d.ts +10 -0
- package/lib/Planetscale/Branch.d.ts.map +1 -1
- package/lib/Planetscale/Branch.js +43 -1
- package/lib/Planetscale/Branch.js.map +1 -1
- package/lib/Planetscale/Postgres/PostgresBranch.d.ts +5 -0
- package/lib/Planetscale/Postgres/PostgresBranch.d.ts.map +1 -1
- package/lib/Planetscale/Postgres/PostgresBranch.js.map +1 -1
- package/lib/Planetscale/Postgres/PostgresRole.d.ts +3 -1
- package/lib/Planetscale/Postgres/PostgresRole.d.ts.map +1 -1
- package/lib/Planetscale/Postgres/PostgresRole.js +8 -0
- package/lib/Planetscale/Postgres/PostgresRole.js.map +1 -1
- package/lib/Planetscale/Util.d.ts +3 -124
- package/lib/Planetscale/Util.d.ts.map +1 -1
- package/lib/Platform.d.ts +2 -1
- package/lib/Platform.d.ts.map +1 -1
- package/lib/Platform.js +37 -10
- package/lib/Platform.js.map +1 -1
- package/lib/Provider.d.ts.map +1 -1
- package/lib/Provider.js.map +1 -1
- package/lib/Resource.d.ts.map +1 -1
- package/lib/Resource.js +3 -1
- package/lib/Resource.js.map +1 -1
- package/lib/Rpc.d.ts +1 -1
- package/lib/Server/Process.d.ts +29 -1
- package/lib/Server/Process.d.ts.map +1 -1
- package/lib/Server/Process.js +48 -1
- package/lib/Server/Process.js.map +1 -1
- package/lib/Stack.d.ts +4 -1
- package/lib/Stack.d.ts.map +1 -1
- package/lib/Stack.js +1 -1
- package/lib/Stack.js.map +1 -1
- package/lib/State/HttpStateApi.d.ts +10 -10
- package/lib/Tags.d.ts +6 -0
- package/lib/Tags.d.ts.map +1 -1
- package/lib/Tags.js +6 -0
- package/lib/Tags.js.map +1 -1
- package/lib/Telemetry/Attributes.d.ts.map +1 -1
- package/lib/Telemetry/Attributes.js +6 -15
- package/lib/Telemetry/Attributes.js.map +1 -1
- package/lib/Test/Bun.d.ts +1 -0
- package/lib/Test/Bun.d.ts.map +1 -1
- package/lib/Test/Bun.js +1 -0
- package/lib/Test/Bun.js.map +1 -1
- package/lib/Test/Core.d.ts +1 -0
- package/lib/Test/Core.d.ts.map +1 -1
- package/lib/Test/Core.js +3 -2
- package/lib/Test/Core.js.map +1 -1
- package/lib/Test/Vitest.d.ts.map +1 -1
- package/lib/Test/Vitest.js +1 -0
- package/lib/Test/Vitest.js.map +1 -1
- package/lib/Util/effect.js.map +1 -1
- package/lib/Util/proxy-chain.d.ts +1 -0
- package/lib/Util/proxy-chain.d.ts.map +1 -1
- package/lib/Util/proxy-chain.js +1 -0
- package/lib/Util/proxy-chain.js.map +1 -1
- package/package.json +26 -10
- package/src/AWS/AuthProvider.ts +32 -17
- package/src/AWS/AutoScaling/LaunchTemplate.ts +1 -1
- package/src/AWS/CloudWatch/Dashboard.ts +4 -1
- package/src/AWS/Credentials.ts +178 -2
- package/src/AWS/EC2/Image.ts +4 -1
- package/src/AWS/EC2/Instance.ts +9 -6
- package/src/AWS/EC2/KeyPair.ts +319 -0
- package/src/AWS/EC2/NetworkAcl.ts +4 -1
- package/src/AWS/EC2/SecurityGroup.ts +4 -1
- package/src/AWS/EC2/SecurityGroupRule.ts +14 -5
- package/src/AWS/EC2/Subnet.ts +49 -4
- package/src/AWS/EC2/hosted.ts +93 -93
- package/src/AWS/EC2/index.ts +1 -0
- package/src/AWS/ECS/Task.ts +96 -78
- package/src/AWS/IAM/Role.ts +132 -22
- package/src/AWS/Lambda/CreateAuthToken.ts +43 -0
- package/src/AWS/Lambda/CreateAuthTokenHttp.ts +11 -0
- package/src/AWS/Lambda/CreateShellAuthToken.ts +42 -0
- package/src/AWS/Lambda/CreateShellAuthTokenHttp.ts +11 -0
- package/src/AWS/Lambda/DeleteMicrovmImageVersion.ts +36 -0
- package/src/AWS/Lambda/DeleteMicrovmImageVersionHttp.ts +12 -0
- package/src/AWS/Lambda/Function.ts +36 -9
- package/src/AWS/Lambda/GetMicrovm.ts +32 -0
- package/src/AWS/Lambda/GetMicrovmHttp.ts +13 -0
- package/src/AWS/Lambda/GetMicrovmImage.ts +40 -0
- package/src/AWS/Lambda/GetMicrovmImageBuild.ts +35 -0
- package/src/AWS/Lambda/GetMicrovmImageBuildHttp.ts +12 -0
- package/src/AWS/Lambda/GetMicrovmImageHttp.ts +12 -0
- package/src/AWS/Lambda/GetMicrovmImageVersion.ts +35 -0
- package/src/AWS/Lambda/GetMicrovmImageVersionHttp.ts +12 -0
- package/src/AWS/Lambda/ListManagedMicrovmImageVersions.ts +31 -0
- package/src/AWS/Lambda/ListManagedMicrovmImageVersionsHttp.ts +10 -0
- package/src/AWS/Lambda/ListManagedMicrovmImages.ts +31 -0
- package/src/AWS/Lambda/ListManagedMicrovmImagesHttp.ts +10 -0
- package/src/AWS/Lambda/ListMicrovmImageBuilds.ts +36 -0
- package/src/AWS/Lambda/ListMicrovmImageBuildsHttp.ts +12 -0
- package/src/AWS/Lambda/ListMicrovmImageVersions.ts +36 -0
- package/src/AWS/Lambda/ListMicrovmImageVersionsHttp.ts +12 -0
- package/src/AWS/Lambda/ListMicrovms.ts +40 -0
- package/src/AWS/Lambda/ListMicrovmsHttp.ts +12 -0
- package/src/AWS/Lambda/MicrovmBinding.ts +442 -0
- package/src/AWS/Lambda/MicrovmBundle.ts +256 -0
- package/src/AWS/Lambda/MicrovmImage.ts +569 -0
- package/src/AWS/Lambda/MicrovmProvider.ts +597 -0
- package/src/AWS/Lambda/MicrovmRpc.ts +75 -0
- package/src/AWS/Lambda/MicrovmRuntimeContext.ts +110 -0
- package/src/AWS/Lambda/NetworkConnector.ts +529 -0
- package/src/AWS/Lambda/QueueEventSource.ts +1 -0
- package/src/AWS/Lambda/ResumeMicrovm.ts +37 -0
- package/src/AWS/Lambda/ResumeMicrovmHttp.ts +11 -0
- package/src/AWS/Lambda/RunMicrovm.ts +45 -0
- package/src/AWS/Lambda/RunMicrovmHttp.ts +13 -0
- package/src/AWS/Lambda/SuspendMicrovm.ts +37 -0
- package/src/AWS/Lambda/SuspendMicrovmHttp.ts +11 -0
- package/src/AWS/Lambda/TerminateMicrovm.ts +38 -0
- package/src/AWS/Lambda/TerminateMicrovmHttp.ts +11 -0
- package/src/AWS/Lambda/UpdateMicrovmImageVersion.ts +36 -0
- package/src/AWS/Lambda/UpdateMicrovmImageVersionHttp.ts +12 -0
- package/src/AWS/Lambda/index.ts +38 -0
- package/src/AWS/Providers.ts +147 -133
- package/src/AWS/RDS/DBClusterParameterGroup.ts +5 -1
- package/src/AWS/RDS/DBParameterGroup.ts +5 -1
- package/src/AWS/Region.ts +9 -2
- package/src/AWS/S3/Bucket.ts +71 -36
- package/src/AlchemyContext.ts +7 -0
- package/src/Apply.ts +4 -2
- package/src/Axiom/Chart.ts +9 -1
- package/src/Bundle/Bundle.ts +1 -1
- package/src/Bundle/TempRoot.ts +22 -0
- package/src/Bundle/Vite.ts +204 -0
- package/src/Bundle/index.ts +0 -1
- package/src/Cli/Event.ts +1 -0
- package/src/Cli/LoggingCli.ts +3 -0
- package/src/Cli/commands/_shared.ts +7 -1
- package/src/Cli/commands/cloudflare.ts +37 -2
- package/src/Cli/commands/deploy.ts +4 -1
- package/src/Cli/tui/components/PlanProgress.tsx +5 -3
- package/src/Cloudflare/AI/Gateway.ts +1 -1
- package/src/Cloudflare/AI/Search.ts +1 -1
- package/src/Cloudflare/AI/SearchInstance.ts +1 -1
- package/src/Cloudflare/AI/SearchNamespace.ts +1 -1
- package/src/Cloudflare/AI/SearchToken.ts +6 -1
- package/src/Cloudflare/Access/Application.ts +61 -10
- package/src/Cloudflare/Alerting/Webhook.ts +18 -7
- package/src/Cloudflare/AnalyticsEngine/WriteDataset.ts +2 -2
- package/src/Cloudflare/ApiToken/AccountApiToken.ts +4 -0
- package/src/Cloudflare/Auth/AuthProvider.ts +1 -1
- package/src/Cloudflare/Containers/Container.ts +43 -4
- package/src/Cloudflare/Containers/ContainerApplication.ts +24 -18
- package/src/Cloudflare/Containers/ContainerBundle.ts +2 -4
- package/src/Cloudflare/Containers/ContainerPlatform.ts +3 -3
- package/src/Cloudflare/Containers/ContainerProvider.ts +50 -42
- package/src/Cloudflare/Containers/LocalContainerProvider.ts +11 -4
- package/src/Cloudflare/Containers/StartContainer.ts +316 -32
- package/src/Cloudflare/DNS/ReadDns.ts +1 -1
- package/src/Cloudflare/DNS/ReadWriteDns.ts +1 -1
- package/src/Cloudflare/DNS/WriteDns.ts +1 -1
- package/src/Cloudflare/Flagship/App.ts +1 -1
- package/src/Cloudflare/Images/Images.ts +1 -1
- package/src/Cloudflare/Local.ts +2 -0
- package/src/Cloudflare/Providers.ts +2 -0
- package/src/Cloudflare/Queues/Consumer.ts +21 -12
- package/src/Cloudflare/Queues/Queue.ts +1 -1
- package/src/Cloudflare/R2/Bucket.ts +2 -2
- package/src/Cloudflare/StateStore/Api.ts +6 -4
- package/src/Cloudflare/StateStore/State.ts +192 -20
- package/src/Cloudflare/Website/Vite.ts +29 -24
- package/src/Cloudflare/Workers/Binding.ts +1 -1
- package/src/Cloudflare/Workers/Browser.ts +1 -1
- package/src/Cloudflare/Workers/DurableObject.ts +54 -3
- package/src/Cloudflare/Workers/InferEnv.ts +47 -36
- package/src/Cloudflare/Workers/LocalWorkerProvider.ts +54 -7
- package/src/Cloudflare/Workers/RpcDurableObject.ts +3 -3
- package/src/Cloudflare/Workers/RpcWorker.ts +4 -4
- package/src/Cloudflare/Workers/ScheduledEvents.ts +1 -1
- package/src/Cloudflare/Workers/VersionMetadata.ts +1 -1
- package/src/Cloudflare/Workers/Vite.ts +21 -40
- package/src/Cloudflare/Workers/Worker.ts +74 -13
- package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +30 -0
- package/src/Cloudflare/Workers/WorkerBinding.ts +5 -1
- package/src/Cloudflare/Workers/WorkerLoader.ts +1 -1
- package/src/Cloudflare/Workers/WorkerProvider.ts +470 -200
- package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +1 -1
- package/src/Cloudflare/WorkersForPlatforms/DispatchNamespace.ts +44 -2
- package/src/Cloudflare/WorkersForPlatforms/Get.ts +87 -0
- package/src/Cloudflare/WorkersForPlatforms/GetBinding.ts +63 -0
- package/src/Cloudflare/WorkersForPlatforms/index.ts +2 -0
- package/src/Cloudflare/Workflows/Workflow.ts +207 -78
- package/src/Command/Build.ts +32 -1
- package/src/Docker/Container.ts +413 -0
- package/src/Docker/Docker.ts +564 -0
- package/src/Docker/Image.ts +265 -0
- package/src/Docker/Network.ts +178 -0
- package/src/Docker/Providers.ts +37 -0
- package/src/Docker/Registry.ts +63 -0
- package/src/Docker/RemoteImage.ts +215 -0
- package/src/Docker/Volume.ts +187 -0
- package/src/Docker/index.ts +8 -0
- package/src/Local/ProviderLayer.ts +2 -0
- package/src/Neon/Branch.ts +15 -1
- package/src/Neon/Project.ts +13 -0
- package/src/Plan.ts +3 -1
- package/src/Planetscale/Branch.ts +70 -0
- package/src/Planetscale/Postgres/PostgresBranch.ts +6 -0
- package/src/Planetscale/Postgres/PostgresRole.ts +11 -1
- package/src/Platform.ts +50 -12
- package/src/Provider.ts +1 -1
- package/src/Resource.ts +9 -3
- package/src/Rpc.ts +1 -1
- package/src/Server/Process.ts +82 -1
- package/src/Stack.ts +11 -3
- package/src/Tags.ts +12 -0
- package/src/Telemetry/Attributes.ts +9 -12
- package/src/Test/Bun.ts +2 -0
- package/src/Test/Core.ts +13 -8
- package/src/Test/Vitest.ts +1 -0
- package/src/Util/effect.ts +1 -1
- package/src/Util/proxy-chain.ts +1 -0
- package/lib/Bundle/Docker.d.ts +0 -75
- package/lib/Bundle/Docker.d.ts.map +0 -1
- package/lib/Bundle/Docker.js +0 -148
- package/lib/Bundle/Docker.js.map +0 -1
- package/src/Bundle/Docker.ts +0 -229
package/src/AWS/Credentials.ts
CHANGED
|
@@ -1,9 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
AwsCredentialProviderError,
|
|
3
|
+
Credentials,
|
|
4
|
+
type ResolvedCredentials,
|
|
5
|
+
} from "@distilled.cloud/aws/Credentials";
|
|
6
|
+
import { Region } from "@distilled.cloud/aws/Region";
|
|
7
|
+
import * as sts from "@distilled.cloud/aws/sts";
|
|
2
8
|
import * as Effect from "effect/Effect";
|
|
3
9
|
import * as Layer from "effect/Layer";
|
|
10
|
+
import * as Redacted from "effect/Redacted";
|
|
11
|
+
import * as Ref from "effect/Ref";
|
|
12
|
+
import * as Schedule from "effect/Schedule";
|
|
13
|
+
import * as Semaphore from "effect/Semaphore";
|
|
14
|
+
import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
|
|
4
15
|
import { AWSEnvironment } from "./Environment.ts";
|
|
5
16
|
|
|
6
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Refresh assumed-role credentials this long before they actually expire, so a
|
|
19
|
+
* request never signs with credentials on the verge of expiring.
|
|
20
|
+
*/
|
|
21
|
+
const CREDENTIAL_REFRESH_WINDOW_MS = 5 * 60 * 1000;
|
|
22
|
+
|
|
23
|
+
// NB: do not re-export `fromEnv` here — it is unavailable under the
|
|
24
|
+
// browser/workerd bundle condition (`credentials.browser`), which would break
|
|
25
|
+
// any Cloudflare Worker that transitively imports this module.
|
|
26
|
+
export { Credentials, fromCredentials } from "@distilled.cloud/aws/Credentials";
|
|
7
27
|
|
|
8
28
|
declare module "@distilled.cloud/aws/Credentials" {
|
|
9
29
|
interface Credentials {
|
|
@@ -22,3 +42,159 @@ export const fromEnvironment = Layer.effect(
|
|
|
22
42
|
return Effect.flatMap(yield* AWSEnvironment, (env) => env.credentials);
|
|
23
43
|
}),
|
|
24
44
|
);
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Build a single-flight, expiry-aware assumed-role credentials **resolver**,
|
|
48
|
+
* constructing the cache (a `Ref` + a 1-permit refresh semaphore) exactly once.
|
|
49
|
+
*
|
|
50
|
+
* The OUTER effect builds the cache and returns the INNER resolver; run the
|
|
51
|
+
* outer ONCE (e.g. when a binding initializes) and reuse the returned resolver
|
|
52
|
+
* for every request. That is what makes the cache actually cache: each request
|
|
53
|
+
* runs the shared resolver, which only calls `AssumeRole` when the cached
|
|
54
|
+
* credentials are missing or within the refresh window — never per request.
|
|
55
|
+
*
|
|
56
|
+
* `roleArn` and `base` are accepted as effects/layers so the long-lived signing
|
|
57
|
+
* credentials and role ARN can be read lazily at refresh time (e.g. from a
|
|
58
|
+
* deployed Worker's environment), rather than captured eagerly.
|
|
59
|
+
*/
|
|
60
|
+
export const makeAssumeRoleResolver = (options: {
|
|
61
|
+
/** ARN of the IAM Role to assume (resolved lazily on each refresh). */
|
|
62
|
+
readonly roleArn: Effect.Effect<string>;
|
|
63
|
+
/** Layer supplying the long-lived credentials used to sign `AssumeRole`. */
|
|
64
|
+
readonly base: Layer.Layer<Credentials>;
|
|
65
|
+
/** STS role session name. @default "alchemy-microvm" */
|
|
66
|
+
readonly roleSessionName?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Region for the STS endpoint. STS `AssumeRole` is global, so this only
|
|
69
|
+
* selects the regional STS endpoint. @default "us-east-1"
|
|
70
|
+
*/
|
|
71
|
+
readonly region?: string;
|
|
72
|
+
}): Effect.Effect<
|
|
73
|
+
Effect.Effect<ResolvedCredentials, AwsCredentialProviderError>
|
|
74
|
+
> =>
|
|
75
|
+
Effect.gen(function* () {
|
|
76
|
+
const resolve = Effect.gen(function* () {
|
|
77
|
+
const roleArn = yield* options.roleArn;
|
|
78
|
+
const response = yield* sts
|
|
79
|
+
.assumeRole({
|
|
80
|
+
RoleArn: roleArn,
|
|
81
|
+
RoleSessionName: options.roleSessionName ?? "alchemy-microvm",
|
|
82
|
+
})
|
|
83
|
+
.pipe(
|
|
84
|
+
// A freshly-created IAM user/role/access-key is eventually
|
|
85
|
+
// consistent: the first `AssumeRole` calls can fail with
|
|
86
|
+
// `AccessDenied` until the trust policy + permissions propagate.
|
|
87
|
+
// Retry those for up to ~30s.
|
|
88
|
+
Effect.retry({
|
|
89
|
+
while: (error) =>
|
|
90
|
+
(error as { name?: string }).name === "AccessDeniedException" ||
|
|
91
|
+
(error as { _tag?: string })._tag === "AccessDeniedException",
|
|
92
|
+
schedule: Schedule.exponential("1 second"),
|
|
93
|
+
times: 8,
|
|
94
|
+
}),
|
|
95
|
+
);
|
|
96
|
+
const creds = response.Credentials;
|
|
97
|
+
if (!creds) {
|
|
98
|
+
return yield* new AwsCredentialProviderError({
|
|
99
|
+
message: "STS AssumeRole returned no credentials",
|
|
100
|
+
provider: "assume-role",
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
accessKeyId: Redacted.make(creds.AccessKeyId),
|
|
105
|
+
secretAccessKey: Redacted.isRedacted(creds.SecretAccessKey)
|
|
106
|
+
? creds.SecretAccessKey
|
|
107
|
+
: Redacted.make(creds.SecretAccessKey),
|
|
108
|
+
sessionToken: Redacted.make(creds.SessionToken),
|
|
109
|
+
expiration: creds.Expiration?.getTime(),
|
|
110
|
+
} satisfies ResolvedCredentials;
|
|
111
|
+
}).pipe(
|
|
112
|
+
// Sign AssumeRole with the static base credentials, and provide a
|
|
113
|
+
// (regional) STS endpoint + HttpClient so the resolve effect is
|
|
114
|
+
// self-contained (`R = never`).
|
|
115
|
+
Effect.provide(options.base),
|
|
116
|
+
Effect.provide(
|
|
117
|
+
Layer.succeed(Region, Effect.succeed(options.region ?? "us-east-1")),
|
|
118
|
+
),
|
|
119
|
+
Effect.provide(FetchHttpClient.layer),
|
|
120
|
+
Effect.mapError((cause) =>
|
|
121
|
+
cause instanceof AwsCredentialProviderError
|
|
122
|
+
? cause
|
|
123
|
+
: new AwsCredentialProviderError({
|
|
124
|
+
message: "STS AssumeRole failed",
|
|
125
|
+
provider: "assume-role",
|
|
126
|
+
cause,
|
|
127
|
+
}),
|
|
128
|
+
),
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
// Single-flight, expiry-aware cache. A `Ref` holds the last-resolved
|
|
132
|
+
// credentials; a 1-permit semaphore serializes refreshes so that N
|
|
133
|
+
// concurrent callers observing stale/expiring credentials trigger
|
|
134
|
+
// exactly ONE `AssumeRole` call (the rest await the permit and then see
|
|
135
|
+
// the freshly-cached value via the re-check inside the critical section).
|
|
136
|
+
const cache = yield* Ref.make<ResolvedCredentials | undefined>(undefined);
|
|
137
|
+
const refreshLock = yield* Semaphore.make(1);
|
|
138
|
+
|
|
139
|
+
const isFresh = (
|
|
140
|
+
creds: ResolvedCredentials | undefined,
|
|
141
|
+
): creds is ResolvedCredentials =>
|
|
142
|
+
creds !== undefined &&
|
|
143
|
+
(creds.expiration === undefined ||
|
|
144
|
+
creds.expiration - CREDENTIAL_REFRESH_WINDOW_MS > Date.now());
|
|
145
|
+
|
|
146
|
+
return Effect.gen(function* () {
|
|
147
|
+
const current = yield* Ref.get(cache);
|
|
148
|
+
// Fast path: cached and not within the refresh window.
|
|
149
|
+
if (isFresh(current)) return current;
|
|
150
|
+
// Slow path: acquire the refresh permit, re-check (another fiber may
|
|
151
|
+
// have refreshed while we waited), then resolve once and cache.
|
|
152
|
+
return yield* refreshLock.withPermits(1)(
|
|
153
|
+
Effect.gen(function* () {
|
|
154
|
+
const latest = yield* Ref.get(cache);
|
|
155
|
+
if (isFresh(latest)) return latest;
|
|
156
|
+
const resolved = yield* resolve;
|
|
157
|
+
yield* Ref.set(cache, resolved);
|
|
158
|
+
return resolved;
|
|
159
|
+
}),
|
|
160
|
+
);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* A `Credentials` layer that assumes an IAM Role via STS and serves the
|
|
166
|
+
* returned temporary credentials (cached until shortly before expiry).
|
|
167
|
+
*
|
|
168
|
+
* `base` supplies the long-lived credentials used to *sign* the `AssumeRole`
|
|
169
|
+
* call — typically static IAM-user access keys (see
|
|
170
|
+
* {@link fromCredentials}). The `AssumeRole` request itself is signed against
|
|
171
|
+
* `base`, while the temporary credentials it returns become the resolved
|
|
172
|
+
* `Credentials` for every downstream AWS call.
|
|
173
|
+
*
|
|
174
|
+
* The cache is built once when the layer is constructed; build/provide this
|
|
175
|
+
* layer ONCE and reuse it. To share the same cache across many `Effect.provide`
|
|
176
|
+
* sites without re-providing the layer, build {@link makeAssumeRoleResolver}
|
|
177
|
+
* directly and supply the resolver via `Layer.succeed(Credentials, resolver)`.
|
|
178
|
+
*/
|
|
179
|
+
export const fromAssumeRole = (options: {
|
|
180
|
+
/** ARN of the IAM Role to assume. */
|
|
181
|
+
readonly roleArn: string;
|
|
182
|
+
/** Static credentials used to sign the `AssumeRole` call. */
|
|
183
|
+
readonly base: Layer.Layer<Credentials>;
|
|
184
|
+
/** STS role session name. @default "alchemy-microvm" */
|
|
185
|
+
readonly roleSessionName?: string;
|
|
186
|
+
/**
|
|
187
|
+
* Region for the STS endpoint. STS `AssumeRole` is global, so this only
|
|
188
|
+
* selects the regional STS endpoint. @default "us-east-1"
|
|
189
|
+
*/
|
|
190
|
+
readonly region?: string;
|
|
191
|
+
}): Layer.Layer<Credentials> =>
|
|
192
|
+
Layer.effect(
|
|
193
|
+
Credentials,
|
|
194
|
+
makeAssumeRoleResolver({
|
|
195
|
+
roleArn: Effect.succeed(options.roleArn),
|
|
196
|
+
base: options.base,
|
|
197
|
+
roleSessionName: options.roleSessionName,
|
|
198
|
+
region: options.region,
|
|
199
|
+
}),
|
|
200
|
+
);
|
package/src/AWS/EC2/Image.ts
CHANGED
|
@@ -66,7 +66,10 @@ export const amazonLinux2023 = (options?: {
|
|
|
66
66
|
}) =>
|
|
67
67
|
findLatestImage({
|
|
68
68
|
owners: ["amazon"],
|
|
69
|
-
|
|
69
|
+
// `al2023-ami-2023.*` selects the standard image. The broader
|
|
70
|
+
// `al2023-ami-*` also matches `al2023-ami-minimal-*`, which ships without
|
|
71
|
+
// the SSM agent and a stripped toolset and frequently sorts newest.
|
|
72
|
+
name: ["al2023-ami-2023.*"],
|
|
70
73
|
architecture: options?.architecture,
|
|
71
74
|
description: "Amazon Linux 2023",
|
|
72
75
|
});
|
package/src/AWS/EC2/Instance.ts
CHANGED
|
@@ -70,9 +70,10 @@ export interface InstanceProps extends PlatformProps {
|
|
|
70
70
|
*/
|
|
71
71
|
securityGroupIds?: Input<SecurityGroupId>[];
|
|
72
72
|
/**
|
|
73
|
-
* Optional EC2 key pair name for SSH access.
|
|
73
|
+
* Optional EC2 key pair name for SSH access. Accepts a reference such as
|
|
74
|
+
* `AWS.EC2.KeyPair(...).keyName`.
|
|
74
75
|
*/
|
|
75
|
-
keyName?: string
|
|
76
|
+
keyName?: Input<string>;
|
|
76
77
|
/**
|
|
77
78
|
* Optional IAM instance profile name to attach at launch.
|
|
78
79
|
*/
|
|
@@ -290,7 +291,7 @@ export type InstanceRuntimeContext = Ec2HostRuntimeContext;
|
|
|
290
291
|
* );
|
|
291
292
|
*
|
|
292
293
|
* return {
|
|
293
|
-
* main: import.meta.
|
|
294
|
+
* main: import.meta.url,
|
|
294
295
|
* imageId,
|
|
295
296
|
* instanceType: "t3.small",
|
|
296
297
|
* subnetId: subnet.subnetId,
|
|
@@ -527,8 +528,10 @@ export const InstanceProvider = () =>
|
|
|
527
528
|
),
|
|
528
529
|
Effect.retry({
|
|
529
530
|
while: (error) => error instanceof InstanceStillExists,
|
|
530
|
-
|
|
531
|
-
|
|
531
|
+
// Termination (shutting-down -> terminated) can take a couple of
|
|
532
|
+
// minutes; the prior ~64s budget timed out intermittently.
|
|
533
|
+
schedule: Schedule.spaced("5 seconds").pipe(
|
|
534
|
+
Schedule.both(Schedule.recurs(48)),
|
|
532
535
|
),
|
|
533
536
|
}),
|
|
534
537
|
Effect.catchTag("InvalidInstanceID.NotFound", () => Effect.void),
|
|
@@ -553,7 +556,7 @@ export const InstanceProvider = () =>
|
|
|
553
556
|
{
|
|
554
557
|
imageId: news.imageId,
|
|
555
558
|
instanceType: news.instanceType,
|
|
556
|
-
keyName: news.keyName,
|
|
559
|
+
keyName: news.keyName as string | undefined,
|
|
557
560
|
subnetId: news.subnetId as string | undefined,
|
|
558
561
|
securityGroupIds: news.securityGroupIds as string[] | undefined,
|
|
559
562
|
associatePublicIpAddress: news.associatePublicIpAddress,
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import * as ec2 from "@distilled.cloud/aws/ec2";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Redacted from "effect/Redacted";
|
|
4
|
+
import { Unowned } from "../../AdoptPolicy.ts";
|
|
5
|
+
import { isResolved } from "../../Diff.ts";
|
|
6
|
+
import { createPhysicalName } from "../../PhysicalName.ts";
|
|
7
|
+
import * as Provider from "../../Provider.ts";
|
|
8
|
+
import { Resource } from "../../Resource.ts";
|
|
9
|
+
import {
|
|
10
|
+
createInternalTags,
|
|
11
|
+
createTagsList,
|
|
12
|
+
diffTags,
|
|
13
|
+
hasTags,
|
|
14
|
+
} from "../../Tags.ts";
|
|
15
|
+
import type { Providers } from "../Providers.ts";
|
|
16
|
+
|
|
17
|
+
export type KeyPairId<ID extends string = string> = `key-${ID}`;
|
|
18
|
+
|
|
19
|
+
/** Key algorithm for a generated EC2 key pair. */
|
|
20
|
+
export type KeyPairType = "rsa" | "ed25519";
|
|
21
|
+
|
|
22
|
+
/** Private-key file format for a generated EC2 key pair. */
|
|
23
|
+
export type KeyPairFormat = "pem" | "ppk";
|
|
24
|
+
|
|
25
|
+
export interface KeyPairProps {
|
|
26
|
+
/**
|
|
27
|
+
* Name of the key pair. If omitted, a unique name is generated from the
|
|
28
|
+
* stack, stage, and logical id. Changing it replaces the key pair.
|
|
29
|
+
*/
|
|
30
|
+
keyName?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Algorithm used when Alchemy generates the key pair. Ignored when
|
|
33
|
+
* {@link publicKeyMaterial} is supplied (an imported key keeps its own type).
|
|
34
|
+
* Changing it replaces the key pair.
|
|
35
|
+
* @default "rsa"
|
|
36
|
+
*/
|
|
37
|
+
keyType?: KeyPairType;
|
|
38
|
+
/**
|
|
39
|
+
* Format of the returned private key material. Only meaningful when Alchemy
|
|
40
|
+
* generates the key pair. Changing it replaces the key pair.
|
|
41
|
+
* @default "pem"
|
|
42
|
+
*/
|
|
43
|
+
keyFormat?: KeyPairFormat;
|
|
44
|
+
/**
|
|
45
|
+
* Public key material (PEM or OpenSSH) to import instead of generating a new
|
|
46
|
+
* key pair. When set, AWS stores only the public key — no `privateKey` is
|
|
47
|
+
* returned. Changing it replaces the key pair.
|
|
48
|
+
*/
|
|
49
|
+
publicKeyMaterial?: string;
|
|
50
|
+
/**
|
|
51
|
+
* Tags to assign to the key pair. Merged with the alchemy auto-tags.
|
|
52
|
+
*/
|
|
53
|
+
tags?: Record<string, string>;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export interface KeyPair extends Resource<
|
|
57
|
+
"AWS.EC2.KeyPair",
|
|
58
|
+
KeyPairProps,
|
|
59
|
+
{
|
|
60
|
+
/** The ID of the key pair (e.g. `key-0123456789abcdef0`). */
|
|
61
|
+
keyPairId: KeyPairId;
|
|
62
|
+
/** The name of the key pair. */
|
|
63
|
+
keyName: string;
|
|
64
|
+
/** SHA-1/MD5 fingerprint of the key pair. */
|
|
65
|
+
keyFingerprint: string;
|
|
66
|
+
/** The algorithm of the key pair. */
|
|
67
|
+
keyType: KeyPairType;
|
|
68
|
+
/**
|
|
69
|
+
* The unencrypted PEM/PPK private key material. Only present when Alchemy
|
|
70
|
+
* generated the key pair (not when {@link KeyPairProps.publicKeyMaterial}
|
|
71
|
+
* was imported). AWS returns this exactly once, at create time; it is then
|
|
72
|
+
* persisted as a secret in alchemy state.
|
|
73
|
+
*/
|
|
74
|
+
privateKey?: Redacted.Redacted<string>;
|
|
75
|
+
},
|
|
76
|
+
never,
|
|
77
|
+
Providers
|
|
78
|
+
> {}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* An EC2 key pair used to grant SSH access to instances launched with its
|
|
82
|
+
* `keyName`.
|
|
83
|
+
*
|
|
84
|
+
* By default Alchemy asks EC2 to generate the key pair and captures the
|
|
85
|
+
* private key (returned only once, at create time) as a secret in state. Pass
|
|
86
|
+
* {@link KeyPairProps.publicKeyMaterial} to import your own public key instead,
|
|
87
|
+
* in which case no private key is stored.
|
|
88
|
+
*
|
|
89
|
+
* @resource
|
|
90
|
+
* @section Creating a Key Pair
|
|
91
|
+
* @example Generated key pair
|
|
92
|
+
* ```typescript
|
|
93
|
+
* const keyPair = yield* AWS.EC2.KeyPair("DeployKey", {
|
|
94
|
+
* keyType: "ed25519",
|
|
95
|
+
* });
|
|
96
|
+
* // keyPair.keyName -> pass to AWS.EC2.Instance({ keyName })
|
|
97
|
+
* // keyPair.privateKey -> Redacted<string> (the PEM private key)
|
|
98
|
+
* ```
|
|
99
|
+
*
|
|
100
|
+
* @example Imported public key
|
|
101
|
+
* ```typescript
|
|
102
|
+
* const keyPair = yield* AWS.EC2.KeyPair("ImportedKey", {
|
|
103
|
+
* publicKeyMaterial: "ssh-ed25519 AAAAC3Nz... user@host",
|
|
104
|
+
* });
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
export const KeyPair = Resource<KeyPair>("AWS.EC2.KeyPair");
|
|
108
|
+
|
|
109
|
+
const toKeyName = (id: string, props: { keyName?: string } = {}) =>
|
|
110
|
+
props.keyName
|
|
111
|
+
? Effect.succeed(props.keyName)
|
|
112
|
+
: createPhysicalName({ id, maxLength: 255 });
|
|
113
|
+
|
|
114
|
+
const asRedacted = (
|
|
115
|
+
material: string | Redacted.Redacted<string> | undefined,
|
|
116
|
+
): Redacted.Redacted<string> | undefined =>
|
|
117
|
+
material === undefined
|
|
118
|
+
? undefined
|
|
119
|
+
: Redacted.isRedacted(material)
|
|
120
|
+
? material
|
|
121
|
+
: Redacted.make(material);
|
|
122
|
+
|
|
123
|
+
export const KeyPairProvider = () =>
|
|
124
|
+
Provider.effect(
|
|
125
|
+
KeyPair,
|
|
126
|
+
Effect.gen(function* () {
|
|
127
|
+
const describeByName = (keyName: string) =>
|
|
128
|
+
ec2.describeKeyPairs({ KeyNames: [keyName] }).pipe(
|
|
129
|
+
Effect.catchTag("InvalidKeyPair.NotFound", () =>
|
|
130
|
+
Effect.succeed({ KeyPairs: [] }),
|
|
131
|
+
),
|
|
132
|
+
Effect.map((r) => r.KeyPairs?.[0]),
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
return {
|
|
136
|
+
stables: ["keyPairId", "keyName", "keyType"],
|
|
137
|
+
|
|
138
|
+
// Generated key pairs are immutable except for tags. A changed name /
|
|
139
|
+
// type / format / imported material means a different key pair.
|
|
140
|
+
diff: Effect.fn(function* ({ id, olds, news }) {
|
|
141
|
+
if (!isResolved(news)) return;
|
|
142
|
+
const oldName = yield* toKeyName(id, olds ?? {});
|
|
143
|
+
const newName = yield* toKeyName(id, news);
|
|
144
|
+
if (
|
|
145
|
+
oldName !== newName ||
|
|
146
|
+
(olds?.keyType ?? "rsa") !== (news.keyType ?? "rsa") ||
|
|
147
|
+
(olds?.keyFormat ?? "pem") !== (news.keyFormat ?? "pem") ||
|
|
148
|
+
olds?.publicKeyMaterial !== news.publicKeyMaterial
|
|
149
|
+
) {
|
|
150
|
+
return { action: "replace" } as const;
|
|
151
|
+
}
|
|
152
|
+
}),
|
|
153
|
+
|
|
154
|
+
read: Effect.fn(function* ({ id, olds, output }) {
|
|
155
|
+
const keyName = output?.keyName ?? (yield* toKeyName(id, olds ?? {}));
|
|
156
|
+
const info = yield* describeByName(keyName);
|
|
157
|
+
if (!info?.KeyPairId) return undefined;
|
|
158
|
+
const tags = yield* createInternalTags(id);
|
|
159
|
+
const observedTags: Record<string, string | undefined> =
|
|
160
|
+
Object.fromEntries(
|
|
161
|
+
(info.Tags ?? []).map((t) => [t.Key ?? "", t.Value]),
|
|
162
|
+
);
|
|
163
|
+
if (!hasTags(tags, observedTags)) {
|
|
164
|
+
// Exists but unbranded — let the engine gate adoption behind --adopt.
|
|
165
|
+
return Unowned({
|
|
166
|
+
keyPairId: info.KeyPairId as KeyPairId,
|
|
167
|
+
keyName: info.KeyName ?? keyName,
|
|
168
|
+
keyFingerprint: info.KeyFingerprint ?? "",
|
|
169
|
+
keyType: (info.KeyType ?? "rsa") as KeyPairType,
|
|
170
|
+
// Private key is only available at create time; keep any cached
|
|
171
|
+
// copy from prior state.
|
|
172
|
+
privateKey: output?.privateKey,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
keyPairId: info.KeyPairId as KeyPairId,
|
|
177
|
+
keyName: info.KeyName ?? keyName,
|
|
178
|
+
keyFingerprint: info.KeyFingerprint ?? output?.keyFingerprint ?? "",
|
|
179
|
+
keyType: (info.KeyType ?? output?.keyType ?? "rsa") as KeyPairType,
|
|
180
|
+
privateKey: output?.privateKey,
|
|
181
|
+
};
|
|
182
|
+
}),
|
|
183
|
+
|
|
184
|
+
list: () =>
|
|
185
|
+
Effect.gen(function* () {
|
|
186
|
+
const result = yield* ec2.describeKeyPairs({});
|
|
187
|
+
return (result.KeyPairs ?? [])
|
|
188
|
+
.filter(
|
|
189
|
+
(
|
|
190
|
+
kp,
|
|
191
|
+
): kp is ec2.KeyPairInfo & {
|
|
192
|
+
KeyPairId: string;
|
|
193
|
+
KeyName: string;
|
|
194
|
+
} => kp.KeyPairId != null && kp.KeyName != null,
|
|
195
|
+
)
|
|
196
|
+
.filter((kp) =>
|
|
197
|
+
(kp.Tags ?? []).some((t) => t.Key === "alchemy::stack"),
|
|
198
|
+
)
|
|
199
|
+
.map((kp) => ({
|
|
200
|
+
keyPairId: kp.KeyPairId as KeyPairId,
|
|
201
|
+
keyName: kp.KeyName,
|
|
202
|
+
keyFingerprint: kp.KeyFingerprint ?? "",
|
|
203
|
+
keyType: (kp.KeyType ?? "rsa") as KeyPairType,
|
|
204
|
+
privateKey: undefined,
|
|
205
|
+
}));
|
|
206
|
+
}),
|
|
207
|
+
|
|
208
|
+
reconcile: Effect.fn(function* ({ id, news = {}, output, session }) {
|
|
209
|
+
const keyName = output?.keyName ?? (yield* toKeyName(id, news));
|
|
210
|
+
const internalTags = yield* createInternalTags(id);
|
|
211
|
+
const desiredTags = { ...internalTags, ...news.tags };
|
|
212
|
+
|
|
213
|
+
// Observe — is the key pair already present?
|
|
214
|
+
let info = yield* describeByName(keyName);
|
|
215
|
+
let privateKey = output?.privateKey;
|
|
216
|
+
|
|
217
|
+
// Ensure — import or generate when missing.
|
|
218
|
+
if (!info?.KeyPairId) {
|
|
219
|
+
if (news.publicKeyMaterial !== undefined) {
|
|
220
|
+
const imported = yield* ec2
|
|
221
|
+
.importKeyPair({
|
|
222
|
+
KeyName: keyName,
|
|
223
|
+
PublicKeyMaterial: new TextEncoder().encode(
|
|
224
|
+
news.publicKeyMaterial,
|
|
225
|
+
),
|
|
226
|
+
TagSpecifications: [
|
|
227
|
+
{
|
|
228
|
+
ResourceType: "key-pair",
|
|
229
|
+
Tags: createTagsList(desiredTags),
|
|
230
|
+
},
|
|
231
|
+
],
|
|
232
|
+
})
|
|
233
|
+
.pipe(
|
|
234
|
+
Effect.catchTag("InvalidKeyPair.Duplicate", () =>
|
|
235
|
+
Effect.succeed(undefined),
|
|
236
|
+
),
|
|
237
|
+
);
|
|
238
|
+
if (imported?.KeyPairId) {
|
|
239
|
+
info = {
|
|
240
|
+
KeyPairId: imported.KeyPairId,
|
|
241
|
+
KeyName: imported.KeyName,
|
|
242
|
+
KeyFingerprint: imported.KeyFingerprint,
|
|
243
|
+
KeyType: "rsa",
|
|
244
|
+
};
|
|
245
|
+
} else {
|
|
246
|
+
info = yield* describeByName(keyName);
|
|
247
|
+
}
|
|
248
|
+
} else {
|
|
249
|
+
const created = yield* ec2
|
|
250
|
+
.createKeyPair({
|
|
251
|
+
KeyName: keyName,
|
|
252
|
+
KeyType: news.keyType ?? "rsa",
|
|
253
|
+
KeyFormat: news.keyFormat ?? "pem",
|
|
254
|
+
TagSpecifications: [
|
|
255
|
+
{
|
|
256
|
+
ResourceType: "key-pair",
|
|
257
|
+
Tags: createTagsList(desiredTags),
|
|
258
|
+
},
|
|
259
|
+
],
|
|
260
|
+
})
|
|
261
|
+
.pipe(
|
|
262
|
+
Effect.catchTag("InvalidKeyPair.Duplicate", () =>
|
|
263
|
+
Effect.succeed(undefined),
|
|
264
|
+
),
|
|
265
|
+
);
|
|
266
|
+
if (created?.KeyPairId) {
|
|
267
|
+
privateKey = asRedacted(created.KeyMaterial) ?? privateKey;
|
|
268
|
+
info = {
|
|
269
|
+
KeyPairId: created.KeyPairId,
|
|
270
|
+
KeyName: created.KeyName,
|
|
271
|
+
KeyFingerprint: created.KeyFingerprint,
|
|
272
|
+
KeyType: (news.keyType ?? "rsa") as KeyPairType,
|
|
273
|
+
};
|
|
274
|
+
} else {
|
|
275
|
+
info = yield* describeByName(keyName);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (!info?.KeyPairId) {
|
|
281
|
+
return yield* Effect.die(
|
|
282
|
+
new Error(`Failed to resolve EC2 key pair '${keyName}'`),
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
const keyPairId = info.KeyPairId as KeyPairId;
|
|
286
|
+
|
|
287
|
+
// Sync tags — observed cloud tags vs desired.
|
|
288
|
+
const observedTags = Object.fromEntries(
|
|
289
|
+
(info.Tags ?? []).map((t) => [t.Key!, t.Value!]),
|
|
290
|
+
) as Record<string, string>;
|
|
291
|
+
const { removed, upsert } = diffTags(observedTags, desiredTags);
|
|
292
|
+
if (removed.length > 0) {
|
|
293
|
+
yield* ec2.deleteTags({
|
|
294
|
+
Resources: [keyPairId],
|
|
295
|
+
Tags: removed.map((key) => ({ Key: key })),
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
if (upsert.length > 0) {
|
|
299
|
+
yield* ec2.createTags({ Resources: [keyPairId], Tags: upsert });
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
yield* session.note(`Key pair ${keyName} (${keyPairId})`);
|
|
303
|
+
return {
|
|
304
|
+
keyPairId,
|
|
305
|
+
keyName: info.KeyName ?? keyName,
|
|
306
|
+
keyFingerprint: info.KeyFingerprint ?? "",
|
|
307
|
+
keyType: (info.KeyType ?? news.keyType ?? "rsa") as KeyPairType,
|
|
308
|
+
privateKey,
|
|
309
|
+
};
|
|
310
|
+
}),
|
|
311
|
+
|
|
312
|
+
delete: Effect.fn(function* ({ output }) {
|
|
313
|
+
// `deleteKeyPair` is idempotent — deleting a missing key pair
|
|
314
|
+
// succeeds, so there is no NotFound error to catch.
|
|
315
|
+
yield* ec2.deleteKeyPair({ KeyPairId: output.keyPairId });
|
|
316
|
+
}),
|
|
317
|
+
};
|
|
318
|
+
}),
|
|
319
|
+
);
|
|
@@ -234,7 +234,10 @@ export const NetworkAclProvider = () =>
|
|
|
234
234
|
Array.from(chunk).flatMap((page) =>
|
|
235
235
|
(page.NetworkAcls ?? []).filter(
|
|
236
236
|
(acl): acl is ec2.NetworkAcl & { NetworkAclId: string } =>
|
|
237
|
-
acl.NetworkAclId != null
|
|
237
|
+
acl.NetworkAclId != null &&
|
|
238
|
+
// Each VPC's default NACL is AWS-managed and cannot be
|
|
239
|
+
// deleted (InvalidParameterValue) — don't enumerate it.
|
|
240
|
+
acl.IsDefault !== true,
|
|
238
241
|
),
|
|
239
242
|
),
|
|
240
243
|
),
|
|
@@ -476,7 +476,10 @@ export const SecurityGroupProvider = () =>
|
|
|
476
476
|
Array.from(chunk).flatMap((page) =>
|
|
477
477
|
(page.SecurityGroups ?? []).filter(
|
|
478
478
|
(sg): sg is ec2.SecurityGroup & { GroupId: string } =>
|
|
479
|
-
sg.GroupId != null
|
|
479
|
+
sg.GroupId != null &&
|
|
480
|
+
// Every VPC's `default` group is AWS-managed and can
|
|
481
|
+
// never be deleted (CannotDelete) — don't enumerate it.
|
|
482
|
+
sg.GroupName !== "default",
|
|
480
483
|
),
|
|
481
484
|
),
|
|
482
485
|
),
|
|
@@ -515,13 +515,20 @@ export const SecurityGroupRuleProvider = () =>
|
|
|
515
515
|
|
|
516
516
|
delete: Effect.fn(function* ({ olds, output, session }) {
|
|
517
517
|
const ruleId = output.securityGroupRuleId;
|
|
518
|
+
const groupId = (output.groupId ?? olds?.groupId) as string;
|
|
519
|
+
// Prefer the observed attribute (`isEgress`) — `olds` may be the
|
|
520
|
+
// listed Attributes (e.g. during nuke) rather than the Props shape,
|
|
521
|
+
// in which case `olds.type` is undefined.
|
|
522
|
+
const isEgress = output.isEgress ?? olds?.type !== "ingress";
|
|
518
523
|
|
|
519
524
|
yield* session.note(`Deleting Security Group Rule: ${ruleId}`);
|
|
520
525
|
|
|
521
|
-
|
|
526
|
+
// The whole security group may already be gone, taking its rules
|
|
527
|
+
// with it (InvalidGroup.NotFound) — the rule is deleted either way.
|
|
528
|
+
if (isEgress) {
|
|
522
529
|
yield* ec2
|
|
523
|
-
.
|
|
524
|
-
GroupId:
|
|
530
|
+
.revokeSecurityGroupEgress({
|
|
531
|
+
GroupId: groupId,
|
|
525
532
|
SecurityGroupRuleIds: [ruleId],
|
|
526
533
|
DryRun: false,
|
|
527
534
|
})
|
|
@@ -530,11 +537,12 @@ export const SecurityGroupRuleProvider = () =>
|
|
|
530
537
|
"InvalidPermission.NotFound",
|
|
531
538
|
() => Effect.void,
|
|
532
539
|
),
|
|
540
|
+
Effect.catchTag("InvalidGroup.NotFound", () => Effect.void),
|
|
533
541
|
);
|
|
534
542
|
} else {
|
|
535
543
|
yield* ec2
|
|
536
|
-
.
|
|
537
|
-
GroupId:
|
|
544
|
+
.revokeSecurityGroupIngress({
|
|
545
|
+
GroupId: groupId,
|
|
538
546
|
SecurityGroupRuleIds: [ruleId],
|
|
539
547
|
DryRun: false,
|
|
540
548
|
})
|
|
@@ -543,6 +551,7 @@ export const SecurityGroupRuleProvider = () =>
|
|
|
543
551
|
"InvalidPermission.NotFound",
|
|
544
552
|
() => Effect.void,
|
|
545
553
|
),
|
|
554
|
+
Effect.catchTag("InvalidGroup.NotFound", () => Effect.void),
|
|
546
555
|
);
|
|
547
556
|
}
|
|
548
557
|
|