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
|
@@ -0,0 +1,442 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as HashMap from "effect/HashMap";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
import * as Option from "effect/Option";
|
|
5
|
+
import * as Redacted from "effect/Redacted";
|
|
6
|
+
import * as Ref from "effect/Ref";
|
|
7
|
+
import * as Scope from "effect/Scope";
|
|
8
|
+
import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
|
|
9
|
+
import { Region } from "@distilled.cloud/aws/Region";
|
|
10
|
+
import * as Binding from "../../Binding.ts";
|
|
11
|
+
import type { Input } from "../../Input.ts";
|
|
12
|
+
import * as Output from "../../Output.ts";
|
|
13
|
+
import type { ResourceLike } from "../../Resource.ts";
|
|
14
|
+
import type {
|
|
15
|
+
AwsCredentialProviderError,
|
|
16
|
+
ResolvedCredentials,
|
|
17
|
+
} from "@distilled.cloud/aws/Credentials";
|
|
18
|
+
import { Credentials, makeAssumeRoleResolver } from "../Credentials.ts";
|
|
19
|
+
import { AccessKey } from "../IAM/AccessKey.ts";
|
|
20
|
+
import type { PolicyStatement } from "../IAM/Policy.ts";
|
|
21
|
+
import { Role } from "../IAM/Role.ts";
|
|
22
|
+
import { User } from "../IAM/User.ts";
|
|
23
|
+
import { isFunction } from "./Function.ts";
|
|
24
|
+
import type { MicrovmImage } from "./MicrovmImage.ts";
|
|
25
|
+
|
|
26
|
+
// Shared scaffolding for the MicroVM runtime bindings. Every `*Http` impl is
|
|
27
|
+
// identical except for the distilled operation, the IAM action(s), the policy
|
|
28
|
+
// scope, and whether the bound image's identifier is injected into the request.
|
|
29
|
+
// NOT exported from `index.ts` — it only backs the per-operation `*Http` files.
|
|
30
|
+
|
|
31
|
+
/** The distilled operation method, yielded to its request callable. */
|
|
32
|
+
type Operation<Res, Err> = Effect.Effect<
|
|
33
|
+
(req: any) => Effect.Effect<Res, Err, any>,
|
|
34
|
+
any,
|
|
35
|
+
any
|
|
36
|
+
>;
|
|
37
|
+
|
|
38
|
+
// We resolve the host (Worker vs Lambda) at both deploy AND runtime to decide
|
|
39
|
+
// how credentials are supplied. A Cloudflare Worker is structurally tagged with
|
|
40
|
+
// this Type id; a hard import of the Cloudflare module graph is avoided.
|
|
41
|
+
const WORKER_TYPE_ID = "Cloudflare.Worker";
|
|
42
|
+
type WorkerHost = ResourceLike & {
|
|
43
|
+
bind: (
|
|
44
|
+
sid: string,
|
|
45
|
+
) => (binding: Input<{ bindings?: unknown[] }>) => Effect.Effect<void>;
|
|
46
|
+
};
|
|
47
|
+
const isWorkerHost = (host: ResourceLike): host is WorkerHost =>
|
|
48
|
+
(host as { Type?: string }).Type === WORKER_TYPE_ID;
|
|
49
|
+
|
|
50
|
+
/** Region segment of an AWS ARN (`arn:partition:service:<region>:...`). */
|
|
51
|
+
const regionFromArn = (arn: string): string => arn.split(":")[3] ?? "us-east-1";
|
|
52
|
+
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Per-scope singleton store. A Worker reaching AWS must create exactly ONE IAM
|
|
55
|
+
// User + AccessKey + Role (and one assumed-role credential cache) regardless of
|
|
56
|
+
// how many of the ~16 MicroVM `*Http` bindings it uses. A
|
|
57
|
+
// `WeakMap<Scope, Ref<HashMap>>` memoizes any keyed effect for the lifetime of
|
|
58
|
+
// the surrounding scope (the deploy plan, or the worker's runtime init scope),
|
|
59
|
+
// so every binding shares the same resources and the same credentials.
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
|
|
62
|
+
const perScope = new WeakMap<
|
|
63
|
+
Scope.Scope,
|
|
64
|
+
Ref.Ref<HashMap.HashMap<string, unknown>>
|
|
65
|
+
>();
|
|
66
|
+
// Fallback when no `Scope` is in context — notably a deployed Worker's init
|
|
67
|
+
// phase, which runs outside any scope. Process-wide is an acceptable singleton
|
|
68
|
+
// granularity there (one isolate == one logical host).
|
|
69
|
+
const globalStore = new Map<string, unknown>();
|
|
70
|
+
|
|
71
|
+
const storeRef = Effect.gen(function* () {
|
|
72
|
+
const scope = yield* Effect.serviceOption(Scope.Scope);
|
|
73
|
+
if (Option.isNone(scope)) return undefined;
|
|
74
|
+
let ref = perScope.get(scope.value);
|
|
75
|
+
if (!ref) {
|
|
76
|
+
ref = yield* Ref.make(HashMap.empty<string, unknown>());
|
|
77
|
+
perScope.set(scope.value, ref);
|
|
78
|
+
}
|
|
79
|
+
return ref;
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const memoize = <A, E, R>(key: string, build: Effect.Effect<A, E, R>) =>
|
|
83
|
+
Effect.gen(function* () {
|
|
84
|
+
const ref = yield* storeRef;
|
|
85
|
+
if (ref) {
|
|
86
|
+
const existing = HashMap.get(yield* Ref.get(ref), key);
|
|
87
|
+
if (Option.isSome(existing)) return existing.value as A;
|
|
88
|
+
const value = yield* build;
|
|
89
|
+
yield* Ref.update(ref, HashMap.set(key, value as unknown));
|
|
90
|
+
return value;
|
|
91
|
+
}
|
|
92
|
+
if (globalStore.has(key)) return globalStore.get(key) as A;
|
|
93
|
+
const value = yield* build;
|
|
94
|
+
globalStore.set(key, value);
|
|
95
|
+
return value;
|
|
96
|
+
}) as Effect.Effect<A, E, R>;
|
|
97
|
+
|
|
98
|
+
export interface ImageBindingOptions<Req, Res, Err, Self> {
|
|
99
|
+
/** The `Binding.Service` contract this layer implements. */
|
|
100
|
+
binding: Binding.Service<
|
|
101
|
+
Self,
|
|
102
|
+
string,
|
|
103
|
+
(
|
|
104
|
+
image: MicrovmImage,
|
|
105
|
+
) => Effect.Effect<(req: Req) => Effect.Effect<Res, Err>>
|
|
106
|
+
>;
|
|
107
|
+
/** Operation name, used for the SID label and tracing, e.g. `"RunMicrovm"`. */
|
|
108
|
+
name: string;
|
|
109
|
+
/** IAM action(s) the host Function needs, e.g. `["lambda:RunMicrovm"]`. */
|
|
110
|
+
actions: string[];
|
|
111
|
+
/** The distilled operation, e.g. `microvms.runMicrovm`. */
|
|
112
|
+
operation: Operation<Res, Err>;
|
|
113
|
+
/**
|
|
114
|
+
* Policy scope (always limited to the bound image's identity — never `["*"]`):
|
|
115
|
+
* - `"image"` (default) scopes to the exact image ARN (e.g. `RunMicrovm`,
|
|
116
|
+
* image-read ops).
|
|
117
|
+
* - `"microvm"` scopes to the MicroVM instances launched from this image via
|
|
118
|
+
* a `microvm:*` glob derived from the image ARN (same partition, region,
|
|
119
|
+
* and account). MicroVM instance ARNs are minted at runtime, so an exact
|
|
120
|
+
* ARN can't be known at deploy time, but the action stays bounded to this
|
|
121
|
+
* account/region's MicroVMs rather than `["*"]`.
|
|
122
|
+
* - `"account"` uses `["*"]`. Reserved for collection-level list actions
|
|
123
|
+
* (e.g. `ListMicrovms`) that AWS only authorizes against `*` and cannot be
|
|
124
|
+
* resource-scoped, analogous to `ec2:DescribeInstances`.
|
|
125
|
+
*/
|
|
126
|
+
scope?: "image" | "microvm" | "account";
|
|
127
|
+
/** Inject `imageIdentifier: <imageArn>` into each request. */
|
|
128
|
+
injectImageIdentifier?: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* Also grant `lambda:PassNetworkConnector` on network connectors in the
|
|
131
|
+
* image's region — both the account's own connectors and the AWS-managed
|
|
132
|
+
* ones (e.g. `INTERNET_EGRESS`). Required by `RunMicrovm`, which passes a
|
|
133
|
+
* network connector (defaulting to the managed `INTERNET_EGRESS`) to the
|
|
134
|
+
* launched MicroVM.
|
|
135
|
+
*/
|
|
136
|
+
passNetworkConnector?: boolean;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Derive the `microvm:*` instance-ARN glob from an image ARN by swapping the
|
|
141
|
+
* `microvm-image:<name>` resource segment for `microvm:*`, keeping the same
|
|
142
|
+
* `arn:<partition>:lambda:<region>:<account>:` prefix.
|
|
143
|
+
*/
|
|
144
|
+
const microvmGlob = (imageArn: string): string =>
|
|
145
|
+
`${imageArn.replace(/:microvm-image[:/].*$/, "")}:microvm:*`;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Derive the network-connector ARN globs from an image ARN: the account's own
|
|
149
|
+
* connectors (`arn:<partition>:lambda:<region>:<account>:network-connector:*`)
|
|
150
|
+
* and the AWS-managed connectors (same prefix but account `aws`).
|
|
151
|
+
*/
|
|
152
|
+
const networkConnectorGlobs = (imageArn: string): string[] => {
|
|
153
|
+
// arn:<partition>:lambda:<region>:<account>
|
|
154
|
+
const prefix = imageArn.replace(/:microvm-image[:/].*$/, "");
|
|
155
|
+
// arn:<partition>:lambda:<region>
|
|
156
|
+
const regionPrefix = prefix.replace(/:[^:]*$/, "");
|
|
157
|
+
return [
|
|
158
|
+
`${prefix}:network-connector:*`,
|
|
159
|
+
`${regionPrefix}:aws:network-connector:*`,
|
|
160
|
+
];
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
/** The IAM policy statements an image-scoped MicroVM operation requires. */
|
|
164
|
+
const imagePolicyStatements = <Req, Res, Err, Self>(
|
|
165
|
+
image: MicrovmImage,
|
|
166
|
+
options: ImageBindingOptions<Req, Res, Err, Self>,
|
|
167
|
+
): Input<PolicyStatement>[] => [
|
|
168
|
+
{
|
|
169
|
+
Effect: "Allow",
|
|
170
|
+
Action: options.actions,
|
|
171
|
+
Resource:
|
|
172
|
+
options.scope === "account"
|
|
173
|
+
? // Collection-level list actions only authorize on `*`.
|
|
174
|
+
["*"]
|
|
175
|
+
: options.scope === "microvm"
|
|
176
|
+
? [
|
|
177
|
+
// Instance ops (GetMicrovm, TerminateMicrovm, CreateAuthToken,
|
|
178
|
+
// …) are authorized by AWS against the image ARN as well as the
|
|
179
|
+
// instance ARN, so grant both: the exact image and the
|
|
180
|
+
// `microvm:*` instance glob derived from it.
|
|
181
|
+
Output.interpolate`${image.imageArn}`,
|
|
182
|
+
image.imageArn.pipe(Output.map(microvmGlob)),
|
|
183
|
+
]
|
|
184
|
+
: [Output.interpolate`${image.imageArn}`],
|
|
185
|
+
},
|
|
186
|
+
...(options.passNetworkConnector
|
|
187
|
+
? [
|
|
188
|
+
{
|
|
189
|
+
Effect: "Allow" as const,
|
|
190
|
+
Action: ["lambda:PassNetworkConnector"],
|
|
191
|
+
Resource: [
|
|
192
|
+
image.imageArn.pipe(
|
|
193
|
+
Output.map((a) => networkConnectorGlobs(a)[0]!),
|
|
194
|
+
),
|
|
195
|
+
image.imageArn.pipe(
|
|
196
|
+
Output.map((a) => networkConnectorGlobs(a)[1]!),
|
|
197
|
+
),
|
|
198
|
+
],
|
|
199
|
+
},
|
|
200
|
+
]
|
|
201
|
+
: []),
|
|
202
|
+
];
|
|
203
|
+
|
|
204
|
+
interface WorkerAwsAccess {
|
|
205
|
+
/** The shared least-privilege Role each binding contributes statements to. */
|
|
206
|
+
readonly role: Role;
|
|
207
|
+
/**
|
|
208
|
+
* Shared assumed-role credentials resolver, single-flight + expiry-aware,
|
|
209
|
+
* built ONCE per host (see {@link ensureWorkerAwsAccess}). Every binding and
|
|
210
|
+
* every request reuses this exact resolver, so `AssumeRole` runs once and is
|
|
211
|
+
* re-run only when the cached credentials approach expiry — never per request.
|
|
212
|
+
*/
|
|
213
|
+
readonly credentials: Effect.Effect<
|
|
214
|
+
ResolvedCredentials,
|
|
215
|
+
AwsCredentialProviderError
|
|
216
|
+
>;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Create — once per scope, per host worker — the IAM identity a Cloudflare
|
|
221
|
+
* Worker uses to reach AWS:
|
|
222
|
+
* - an IAM **User** allowed to assume any role that trusts it,
|
|
223
|
+
* - a long-lived **AccessKey** for that user,
|
|
224
|
+
* - a least-privilege **Role** the user assumes (trusts only this user;
|
|
225
|
+
* MicroVM permissions accumulate on it via `role.bind`).
|
|
226
|
+
*
|
|
227
|
+
* The user's access key + the role ARN are read as {@link Output} *accessors*
|
|
228
|
+
* (`yield* accessKey.accessKeyId`, …) — yielding an attribute both registers
|
|
229
|
+
* the binding on the worker (deploy) and returns an `Effect` that reads it at
|
|
230
|
+
* runtime. At runtime those accessors feed an assume-role credentials layer
|
|
231
|
+
* (single-flight, expiry-aware) built once and shared across all bindings.
|
|
232
|
+
*/
|
|
233
|
+
const ensureWorkerAwsAccess = (host: WorkerHost) =>
|
|
234
|
+
memoize(
|
|
235
|
+
`microvm-aws:${(host as ResourceLike).LogicalId}`,
|
|
236
|
+
Effect.gen(function* (): Generator<any, WorkerAwsAccess, any> {
|
|
237
|
+
const id = (host as ResourceLike).LogicalId;
|
|
238
|
+
|
|
239
|
+
// The user may assume any role that trusts it (Resource `*`); the role's
|
|
240
|
+
// trust policy is what actually restricts assumption to this user, which
|
|
241
|
+
// avoids a User↔Role ARN dependency cycle while staying safe.
|
|
242
|
+
const user = yield* User(`${id}-microvm-user`, {
|
|
243
|
+
inlinePolicies: {
|
|
244
|
+
"assume-microvm-role": {
|
|
245
|
+
Version: "2012-10-17",
|
|
246
|
+
Statement: [
|
|
247
|
+
{ Effect: "Allow", Action: ["sts:AssumeRole"], Resource: ["*"] },
|
|
248
|
+
],
|
|
249
|
+
},
|
|
250
|
+
},
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
const accessKey = yield* AccessKey(`${id}-microvm-key`, {
|
|
254
|
+
userName: user.userName,
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
const role = yield* Role(`${id}-microvm-role`, {
|
|
258
|
+
assumeRolePolicyDocument: {
|
|
259
|
+
Version: "2012-10-17",
|
|
260
|
+
Statement: [
|
|
261
|
+
{
|
|
262
|
+
Effect: "Allow",
|
|
263
|
+
Principal: { AWS: user.userArn },
|
|
264
|
+
Action: ["sts:AssumeRole"],
|
|
265
|
+
},
|
|
266
|
+
],
|
|
267
|
+
},
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
// Bind the user's credentials + role ARN onto the worker via accessors:
|
|
271
|
+
// at deploy this registers the env (the secret as `secret_text`); at
|
|
272
|
+
// runtime these resolve to the deployed values.
|
|
273
|
+
const accessKeyId = yield* accessKey.accessKeyId;
|
|
274
|
+
const secretAccessKey = yield* accessKey.secretAccessKey;
|
|
275
|
+
const roleArn = yield* role.roleArn;
|
|
276
|
+
|
|
277
|
+
// The long-lived IAM-user credentials that sign `AssumeRole`. Read lazily
|
|
278
|
+
// from the worker environment on each refresh (NOT captured eagerly, so
|
|
279
|
+
// this is valid at deploy time where the env isn't populated yet).
|
|
280
|
+
const base = Layer.succeed(
|
|
281
|
+
Credentials,
|
|
282
|
+
Effect.gen(function* () {
|
|
283
|
+
const id = yield* accessKeyId;
|
|
284
|
+
const secret = yield* secretAccessKey;
|
|
285
|
+
return {
|
|
286
|
+
accessKeyId: Redacted.make(id),
|
|
287
|
+
secretAccessKey: secret
|
|
288
|
+
? Redacted.isRedacted(secret)
|
|
289
|
+
? secret
|
|
290
|
+
: Redacted.make(secret)
|
|
291
|
+
: Redacted.make(""),
|
|
292
|
+
sessionToken: undefined,
|
|
293
|
+
} satisfies ResolvedCredentials;
|
|
294
|
+
}),
|
|
295
|
+
);
|
|
296
|
+
|
|
297
|
+
// Build the single-flight, expiry-aware assume-role cache ONCE. STS is
|
|
298
|
+
// global, so the endpoint region is a fixed default; the per-request
|
|
299
|
+
// operation provides its own image-derived `Region` separately.
|
|
300
|
+
const credentials = yield* makeAssumeRoleResolver({
|
|
301
|
+
roleArn,
|
|
302
|
+
base,
|
|
303
|
+
region: "us-east-1",
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
return { role, credentials };
|
|
307
|
+
}),
|
|
308
|
+
);
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Run a MicroVM operation with host-appropriate AWS credentials:
|
|
312
|
+
* - Lambda Function host → the execution-role credentials already in the
|
|
313
|
+
* ambient environment (nothing to provide).
|
|
314
|
+
* - Cloudflare Worker host → the assumed-role credentials, plus a `Region`
|
|
315
|
+
* derived from the image ARN and an `HttpClient`.
|
|
316
|
+
*/
|
|
317
|
+
const withRuntimeCredentials = <A, E>(
|
|
318
|
+
access: WorkerAwsAccess | undefined,
|
|
319
|
+
region: Effect.Effect<string>,
|
|
320
|
+
eff: Effect.Effect<A, E, any>,
|
|
321
|
+
): Effect.Effect<A, E, any> =>
|
|
322
|
+
access
|
|
323
|
+
? Effect.gen(function* () {
|
|
324
|
+
const reg = yield* region;
|
|
325
|
+
// Provide the SHARED cached resolver built once in
|
|
326
|
+
// `ensureWorkerAwsAccess` — NOT a fresh assume-role layer per request —
|
|
327
|
+
// so the assumed-role credentials are reused (and only refreshed near
|
|
328
|
+
// expiry) instead of re-assuming the role on every call.
|
|
329
|
+
return yield* eff.pipe(
|
|
330
|
+
Effect.provide(Layer.succeed(Credentials, access.credentials)),
|
|
331
|
+
Effect.provide(Layer.succeed(Region, Effect.succeed(reg))),
|
|
332
|
+
Effect.provide(FetchHttpClient.layer),
|
|
333
|
+
);
|
|
334
|
+
})
|
|
335
|
+
: eff;
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Build a MicroVM runtime binding bound to a {@link MicrovmImage}. At deploy it
|
|
339
|
+
* registers the IAM grant on the host — the Lambda execution role directly, or
|
|
340
|
+
* (for a Cloudflare Worker) a dedicated assume-role Role whose credentials are
|
|
341
|
+
* bound onto the worker. At runtime it calls the distilled operation with the
|
|
342
|
+
* host-appropriate credentials.
|
|
343
|
+
*/
|
|
344
|
+
export const makeImageBinding = <Req, Res, Err, Self>(
|
|
345
|
+
options: ImageBindingOptions<Req, Res, Err, Self>,
|
|
346
|
+
): Layer.Layer<Self> =>
|
|
347
|
+
Layer.effect(
|
|
348
|
+
options.binding as any,
|
|
349
|
+
Effect.gen(function* () {
|
|
350
|
+
const run = yield* options.operation;
|
|
351
|
+
return Effect.fn(function* (image: MicrovmImage) {
|
|
352
|
+
const host = yield* Binding.Host;
|
|
353
|
+
const statements = imagePolicyStatements(image, options);
|
|
354
|
+
const label = `Allow(${host.LogicalId}, AWS.Lambda.${options.name}(${image.LogicalId}))`;
|
|
355
|
+
|
|
356
|
+
// Accessors (registered on the host at deploy, resolved at runtime).
|
|
357
|
+
const imageArn = yield* image.imageArn;
|
|
358
|
+
// Region is derived from the resolved image ARN — via `Effect.map` of
|
|
359
|
+
// the accessor, NOT a second Output binding (whose env key would embed
|
|
360
|
+
// the mapper's source text and is brittle).
|
|
361
|
+
const region = Effect.map(imageArn, regionFromArn);
|
|
362
|
+
|
|
363
|
+
let access: WorkerAwsAccess | undefined;
|
|
364
|
+
if (isFunction(host)) {
|
|
365
|
+
if (!globalThis.__ALCHEMY_RUNTIME__) {
|
|
366
|
+
yield* host.bind`${label}`({ policyStatements: statements });
|
|
367
|
+
}
|
|
368
|
+
} else if (isWorkerHost(host)) {
|
|
369
|
+
access = yield* ensureWorkerAwsAccess(host);
|
|
370
|
+
if (!globalThis.__ALCHEMY_RUNTIME__) {
|
|
371
|
+
yield* access.role.bind`${label}`({ policyStatements: statements });
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
return Effect.fn(`AWS.Lambda.${options.name}(${image.LogicalId})`)(
|
|
376
|
+
function* (request: Req) {
|
|
377
|
+
return yield* withRuntimeCredentials(
|
|
378
|
+
access,
|
|
379
|
+
region,
|
|
380
|
+
run(
|
|
381
|
+
options.injectImageIdentifier
|
|
382
|
+
? { ...(request as object), imageIdentifier: yield* imageArn }
|
|
383
|
+
: request,
|
|
384
|
+
),
|
|
385
|
+
);
|
|
386
|
+
},
|
|
387
|
+
);
|
|
388
|
+
});
|
|
389
|
+
}),
|
|
390
|
+
) as unknown as Layer.Layer<Self>;
|
|
391
|
+
|
|
392
|
+
export interface AccountBindingOptions<Req, Res, Err, Self> {
|
|
393
|
+
binding: Binding.Service<
|
|
394
|
+
Self,
|
|
395
|
+
string,
|
|
396
|
+
() => Effect.Effect<(req: Req) => Effect.Effect<Res, Err>>
|
|
397
|
+
>;
|
|
398
|
+
name: string;
|
|
399
|
+
actions: string[];
|
|
400
|
+
operation: Operation<Res, Err>;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Build an account-scoped MicroVM binding (no resource argument), e.g. for
|
|
405
|
+
* listing AWS-managed base images. IAM `Resource` is `["*"]`.
|
|
406
|
+
*/
|
|
407
|
+
export const makeAccountBinding = <Req, Res, Err, Self>(
|
|
408
|
+
options: AccountBindingOptions<Req, Res, Err, Self>,
|
|
409
|
+
): Layer.Layer<Self> =>
|
|
410
|
+
Layer.effect(
|
|
411
|
+
options.binding as any,
|
|
412
|
+
Effect.gen(function* () {
|
|
413
|
+
const run = yield* options.operation;
|
|
414
|
+
return Effect.fn(function* () {
|
|
415
|
+
const host = yield* Binding.Host;
|
|
416
|
+
const label = `Allow(${host.LogicalId}, AWS.Lambda.${options.name}())`;
|
|
417
|
+
const statements: Input<PolicyStatement>[] = [
|
|
418
|
+
{ Effect: "Allow", Action: options.actions, Resource: ["*"] },
|
|
419
|
+
];
|
|
420
|
+
|
|
421
|
+
let access: WorkerAwsAccess | undefined;
|
|
422
|
+
if (isFunction(host)) {
|
|
423
|
+
if (!globalThis.__ALCHEMY_RUNTIME__) {
|
|
424
|
+
yield* host.bind`${label}`({ policyStatements: statements });
|
|
425
|
+
}
|
|
426
|
+
} else if (isWorkerHost(host)) {
|
|
427
|
+
access = yield* ensureWorkerAwsAccess(host);
|
|
428
|
+
if (!globalThis.__ALCHEMY_RUNTIME__) {
|
|
429
|
+
yield* access.role.bind`${label}`({ policyStatements: statements });
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
return Effect.fn(`AWS.Lambda.${options.name}()`)(function* (
|
|
434
|
+
request: Req,
|
|
435
|
+
) {
|
|
436
|
+
// Account-level operations are global; default the STS/endpoint region.
|
|
437
|
+
const region = Effect.succeed("us-east-1");
|
|
438
|
+
return yield* withRuntimeCredentials(access, region, run(request));
|
|
439
|
+
});
|
|
440
|
+
});
|
|
441
|
+
}),
|
|
442
|
+
) as unknown as Layer.Layer<Self>;
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as FileSystem from "effect/FileSystem";
|
|
3
|
+
import * as Path from "effect/Path";
|
|
4
|
+
import type * as rolldown from "rolldown";
|
|
5
|
+
import * as Bundle from "../../Bundle/Bundle.ts";
|
|
6
|
+
import { findCwdForBundle } from "../../Bundle/TempRoot.ts";
|
|
7
|
+
import { Self } from "../../Self.ts";
|
|
8
|
+
import { Stack } from "../../Stack.ts";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The AWS-managed base image MicroVM Dockerfiles build on. The MicroVM build
|
|
12
|
+
* runs the Dockerfile server-side and snapshots the result with Firecracker.
|
|
13
|
+
*/
|
|
14
|
+
export const MICROVM_BASE_DOCKER_IMAGE =
|
|
15
|
+
"public.ecr.aws/lambda/microvms:al2023-minimal";
|
|
16
|
+
|
|
17
|
+
/** The default port the in-VM HTTP server listens on. */
|
|
18
|
+
export const DEFAULT_MICROVM_PORT = 8080;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Build the final Dockerfile for an effectful MicroVM image. Starts from the
|
|
22
|
+
* user-provided base (or the managed MicroVM base), installs the JS runtime,
|
|
23
|
+
* copies the bundled program, and runs it as the entrypoint. Mirrors the
|
|
24
|
+
* Cloudflare Container `buildFinalDockerfile`, but targets the MicroVM base.
|
|
25
|
+
*/
|
|
26
|
+
export const buildMicrovmDockerfile = (
|
|
27
|
+
userDockerfile: string | undefined,
|
|
28
|
+
runtime: "bun" | "node",
|
|
29
|
+
port: number,
|
|
30
|
+
): string => {
|
|
31
|
+
const base = userDockerfile?.trim() ?? `FROM ${MICROVM_BASE_DOCKER_IMAGE}`;
|
|
32
|
+
const installRuntime =
|
|
33
|
+
runtime === "bun"
|
|
34
|
+
? // `bun.sh/install` unpacks a zip, so the minimal MicroVM base needs
|
|
35
|
+
// `unzip` (and `tar`) present before the installer runs.
|
|
36
|
+
"RUN dnf install -y unzip tar && curl -fsSL https://bun.sh/install | bash && ln -s /root/.bun/bin/bun /usr/local/bin/bun && dnf clean all"
|
|
37
|
+
: "RUN dnf install -y nodejs && dnf clean all";
|
|
38
|
+
const runtimeBin = runtime === "bun" ? "bun" : "node";
|
|
39
|
+
return [
|
|
40
|
+
base,
|
|
41
|
+
"",
|
|
42
|
+
installRuntime,
|
|
43
|
+
"WORKDIR /app",
|
|
44
|
+
// The entry (`index.mjs`) and every rolldown chunk are emitted with a
|
|
45
|
+
// `.mjs` extension, which Node always treats as ESM — so the entry's named
|
|
46
|
+
// imports of a chunk resolve without needing a `package.json` `"type"`
|
|
47
|
+
// marker (which would risk clobbering a user-provided base image's file).
|
|
48
|
+
"COPY *.mjs /app/",
|
|
49
|
+
`EXPOSE ${port}`,
|
|
50
|
+
`ENV PORT=${port}`,
|
|
51
|
+
`ENTRYPOINT ["${runtimeBin}", "/app/index.mjs"]`,
|
|
52
|
+
"",
|
|
53
|
+
].join("\n");
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Bundle an Effect-native MicroVM program with Rolldown and wrap it in a
|
|
58
|
+
* generated bootstrap that boots an HTTP server (the MicroVM endpoint). Returns
|
|
59
|
+
* every emitted file so the full set can be zipped into the code artifact.
|
|
60
|
+
*
|
|
61
|
+
* Mirrors `bundleContainerProgram`; the bootstrap provides AWS runtime services
|
|
62
|
+
* (FetchHttpClient + region from env) so in-VM HTTP capability bindings
|
|
63
|
+
* (e.g. S3 `*Http`) resolve against the MicroVM's execution role.
|
|
64
|
+
*/
|
|
65
|
+
export const bundleMicrovmProgram = Effect.fn(function* ({
|
|
66
|
+
main,
|
|
67
|
+
runtime,
|
|
68
|
+
handler = "default",
|
|
69
|
+
isExternal = false,
|
|
70
|
+
external = [],
|
|
71
|
+
port,
|
|
72
|
+
}: {
|
|
73
|
+
main: string;
|
|
74
|
+
runtime: "bun" | "node";
|
|
75
|
+
handler?: string | undefined;
|
|
76
|
+
isExternal?: boolean;
|
|
77
|
+
external?: string[];
|
|
78
|
+
port: number;
|
|
79
|
+
}) {
|
|
80
|
+
const fs = yield* FileSystem.FileSystem;
|
|
81
|
+
const stack = yield* Stack;
|
|
82
|
+
const virtualEntryPlugin = yield* Bundle.virtualEntryPlugin;
|
|
83
|
+
|
|
84
|
+
const realMain = yield* fs.realPath(main);
|
|
85
|
+
const cwd = yield* findCwdForBundle(realMain);
|
|
86
|
+
|
|
87
|
+
const buildBundle = Effect.fn(function* (
|
|
88
|
+
entry: string,
|
|
89
|
+
plugins?: rolldown.RolldownPluginOption,
|
|
90
|
+
) {
|
|
91
|
+
return yield* Bundle.build(
|
|
92
|
+
{
|
|
93
|
+
input: entry,
|
|
94
|
+
cwd,
|
|
95
|
+
external: [
|
|
96
|
+
"@aws-sdk/*",
|
|
97
|
+
...(runtime === "bun" ? ["bun", "bun:*"] : []),
|
|
98
|
+
...external,
|
|
99
|
+
],
|
|
100
|
+
platform: "node",
|
|
101
|
+
resolve: {
|
|
102
|
+
conditionNames:
|
|
103
|
+
runtime === "bun"
|
|
104
|
+
? ["bun", "import", "module", "default"]
|
|
105
|
+
: ["node", "import", "module", "default"],
|
|
106
|
+
},
|
|
107
|
+
plugins,
|
|
108
|
+
treeshake: true,
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
format: "esm",
|
|
112
|
+
sourcemap: false,
|
|
113
|
+
minify: false,
|
|
114
|
+
entryFileNames: "index.mjs",
|
|
115
|
+
// Emit chunks as `.mjs` too so Node treats them as ESM unconditionally
|
|
116
|
+
// (no `package.json` `"type":"module"` needed in the image).
|
|
117
|
+
chunkFileNames: "[name]-[hash].mjs",
|
|
118
|
+
},
|
|
119
|
+
);
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
const bundleOutput = isExternal
|
|
123
|
+
? yield* buildBundle(realMain)
|
|
124
|
+
: yield* buildBundle(
|
|
125
|
+
realMain,
|
|
126
|
+
virtualEntryPlugin(
|
|
127
|
+
(importPath) => `
|
|
128
|
+
${
|
|
129
|
+
runtime === "bun"
|
|
130
|
+
? `import { BunServices } from "@effect/platform-bun";
|
|
131
|
+
import { BunHttpServer } from "alchemy/Http";
|
|
132
|
+
const HttpServer = BunHttpServer;`
|
|
133
|
+
: `import { NodeServices } from "@effect/platform-node";
|
|
134
|
+
import { NodeHttpServer } from "alchemy/Http";
|
|
135
|
+
const HttpServer = NodeHttpServer;`
|
|
136
|
+
}
|
|
137
|
+
import { Stack } from "alchemy/Stack";
|
|
138
|
+
import { makeEntrypointLayer } from "alchemy/Runtime";
|
|
139
|
+
import * as Effect from "effect/Effect";
|
|
140
|
+
import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
|
|
141
|
+
import * as Layer from "effect/Layer";
|
|
142
|
+
import * as Logger from "effect/Logger";
|
|
143
|
+
import * as Context from "effect/Context";
|
|
144
|
+
import { MinimumLogLevel } from "effect/References";
|
|
145
|
+
|
|
146
|
+
import ${handler === "default" ? "entrypoint" : `{ ${handler} as entrypoint }`} from ${JSON.stringify(importPath)};
|
|
147
|
+
|
|
148
|
+
const tag = Context.Service("${Self.key}")
|
|
149
|
+
const layer = makeEntrypointLayer(tag, entrypoint);
|
|
150
|
+
|
|
151
|
+
const platform = Layer.mergeAll(
|
|
152
|
+
${runtime === "bun" ? "BunServices.layer" : "NodeServices.layer"},
|
|
153
|
+
FetchHttpClient.layer,
|
|
154
|
+
Logger.layer([Logger.consolePretty()]),
|
|
155
|
+
);
|
|
156
|
+
|
|
157
|
+
const stack = Layer.succeed(Stack, {
|
|
158
|
+
name: ${JSON.stringify(stack.name)},
|
|
159
|
+
stage: ${JSON.stringify(stack.stage)},
|
|
160
|
+
bindings: {},
|
|
161
|
+
resources: {}
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
const serverEffect = tag.pipe(
|
|
165
|
+
Effect.flatMap(func => func.RuntimeContext.exports),
|
|
166
|
+
Effect.flatMap(exports => exports.default),
|
|
167
|
+
Effect.provide(
|
|
168
|
+
layer.pipe(
|
|
169
|
+
Layer.provideMerge(stack),
|
|
170
|
+
Layer.provideMerge(HttpServer({ port: Number(process.env.PORT ?? ${port}) })),
|
|
171
|
+
Layer.provideMerge(platform),
|
|
172
|
+
Layer.provideMerge(
|
|
173
|
+
Layer.succeed(MinimumLogLevel, process.env.DEBUG ? "Debug" : "Info")
|
|
174
|
+
),
|
|
175
|
+
)
|
|
176
|
+
),
|
|
177
|
+
Effect.scoped
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
console.log("MicroVM bootstrap starting on port ${port}...");
|
|
181
|
+
await Effect.runPromise(serverEffect).catch((err) => {
|
|
182
|
+
console.error("MicroVM bootstrap failed:", err);
|
|
183
|
+
process.exit(1);
|
|
184
|
+
})`,
|
|
185
|
+
),
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
const files = bundleOutput.files.map((f) => ({
|
|
189
|
+
path: f.path,
|
|
190
|
+
content:
|
|
191
|
+
typeof f.content === "string"
|
|
192
|
+
? new TextEncoder().encode(f.content)
|
|
193
|
+
: f.content,
|
|
194
|
+
}));
|
|
195
|
+
|
|
196
|
+
return { files, hash: bundleOutput.hash };
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
export interface ArtifactFile {
|
|
200
|
+
path: string;
|
|
201
|
+
content: string | Uint8Array;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Zip a flat list of files into a deterministic (fixed mtime) archive. Used to
|
|
206
|
+
* package the MicroVM code artifact (Dockerfile + bundled program, or a build
|
|
207
|
+
* context) before uploading it to S3.
|
|
208
|
+
*/
|
|
209
|
+
export const zipFiles = Effect.fn(function* (
|
|
210
|
+
files: ReadonlyArray<ArtifactFile>,
|
|
211
|
+
) {
|
|
212
|
+
const zip = new (yield* Effect.promise(() => import("jszip"))).default();
|
|
213
|
+
const date = new Date("1980-01-01T00:00:00.000Z");
|
|
214
|
+
for (const file of files) {
|
|
215
|
+
zip.file(file.path, file.content, { date });
|
|
216
|
+
}
|
|
217
|
+
return yield* Effect.promise(() =>
|
|
218
|
+
zip.generateAsync({
|
|
219
|
+
type: "nodebuffer",
|
|
220
|
+
compression: "DEFLATE",
|
|
221
|
+
platform: "UNIX",
|
|
222
|
+
}),
|
|
223
|
+
);
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Recursively read a build-context directory into a flat list of files
|
|
228
|
+
* (relative paths + bytes) for zipping into the code artifact. Used by the
|
|
229
|
+
* external (bring-your-own-Dockerfile) MicroVM mode.
|
|
230
|
+
*/
|
|
231
|
+
export const readContextDirectory = Effect.fn(function* (dir: string) {
|
|
232
|
+
const fs = yield* FileSystem.FileSystem;
|
|
233
|
+
const path = yield* Path.Path;
|
|
234
|
+
const root = yield* fs.realPath(dir);
|
|
235
|
+
|
|
236
|
+
const walk = (
|
|
237
|
+
current: string,
|
|
238
|
+
): Effect.Effect<{ path: string; content: Uint8Array }[], any, never> =>
|
|
239
|
+
Effect.gen(function* () {
|
|
240
|
+
const entries = yield* fs.readDirectory(current);
|
|
241
|
+
const out: { path: string; content: Uint8Array }[] = [];
|
|
242
|
+
for (const entry of entries) {
|
|
243
|
+
const abs = path.join(current, entry);
|
|
244
|
+
const info = yield* fs.stat(abs);
|
|
245
|
+
if (info.type === "Directory") {
|
|
246
|
+
out.push(...(yield* walk(abs)));
|
|
247
|
+
} else {
|
|
248
|
+
const content = yield* fs.readFile(abs);
|
|
249
|
+
out.push({ path: path.relative(root, abs), content });
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return out;
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
return yield* walk(root);
|
|
256
|
+
});
|