@alchemy.run/modal 0.0.0 → 2.0.0-beta.86
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/LICENSE +201 -0
- package/README.md +96 -4
- package/lib/App.d.ts +143 -0
- package/lib/App.d.ts.map +1 -0
- package/lib/App.js +198 -0
- package/lib/App.js.map +1 -0
- package/lib/AuthProvider.d.ts +53 -0
- package/lib/AuthProvider.d.ts.map +1 -0
- package/lib/AuthProvider.js +209 -0
- package/lib/AuthProvider.js.map +1 -0
- package/lib/BindingHttp.d.ts +56 -0
- package/lib/BindingHttp.d.ts.map +1 -0
- package/lib/BindingHttp.js +50 -0
- package/lib/BindingHttp.js.map +1 -0
- package/lib/Blob.d.ts +34 -0
- package/lib/Blob.d.ts.map +1 -0
- package/lib/Blob.js +59 -0
- package/lib/Blob.js.map +1 -0
- package/lib/Bootstrap.d.ts +8 -0
- package/lib/Bootstrap.d.ts.map +1 -0
- package/lib/Bootstrap.js +26 -0
- package/lib/Bootstrap.js.map +1 -0
- package/lib/Cbor.d.ts +10 -0
- package/lib/Cbor.d.ts.map +1 -0
- package/lib/Cbor.js +177 -0
- package/lib/Cbor.js.map +1 -0
- package/lib/ConnectSandbox.d.ts +64 -0
- package/lib/ConnectSandbox.d.ts.map +1 -0
- package/lib/ConnectSandbox.js +33 -0
- package/lib/ConnectSandbox.js.map +1 -0
- package/lib/Container.d.ts +124 -0
- package/lib/Container.d.ts.map +1 -0
- package/lib/Container.js +1 -0
- package/lib/Container.js.map +1 -0
- package/lib/Contributions.d.ts +7 -0
- package/lib/Contributions.d.ts.map +1 -0
- package/lib/Contributions.js +6 -0
- package/lib/Contributions.js.map +1 -0
- package/lib/CreateDict.d.ts +83 -0
- package/lib/CreateDict.d.ts.map +1 -0
- package/lib/CreateDict.js +3 -0
- package/lib/CreateDict.js.map +1 -0
- package/lib/CreateDictHttp.d.ts +33 -0
- package/lib/CreateDictHttp.d.ts.map +1 -0
- package/lib/CreateDictHttp.js +67 -0
- package/lib/CreateDictHttp.js.map +1 -0
- package/lib/CreateImage.d.ts +98 -0
- package/lib/CreateImage.d.ts.map +1 -0
- package/lib/CreateImage.js +3 -0
- package/lib/CreateImage.js.map +1 -0
- package/lib/CreateImageHttp.d.ts +51 -0
- package/lib/CreateImageHttp.d.ts.map +1 -0
- package/lib/CreateImageHttp.js +87 -0
- package/lib/CreateImageHttp.js.map +1 -0
- package/lib/CreateQueue.d.ts +83 -0
- package/lib/CreateQueue.d.ts.map +1 -0
- package/lib/CreateQueue.js +3 -0
- package/lib/CreateQueue.js.map +1 -0
- package/lib/CreateQueueHttp.d.ts +31 -0
- package/lib/CreateQueueHttp.d.ts.map +1 -0
- package/lib/CreateQueueHttp.js +67 -0
- package/lib/CreateQueueHttp.js.map +1 -0
- package/lib/CreateSandbox.d.ts +186 -0
- package/lib/CreateSandbox.d.ts.map +1 -0
- package/lib/CreateSandbox.js +3 -0
- package/lib/CreateSandbox.js.map +1 -0
- package/lib/CreateSandboxHttp.d.ts +17 -0
- package/lib/CreateSandboxHttp.d.ts.map +1 -0
- package/lib/CreateSandboxHttp.js +117 -0
- package/lib/CreateSandboxHttp.js.map +1 -0
- package/lib/CreateSecret.d.ts +95 -0
- package/lib/CreateSecret.d.ts.map +1 -0
- package/lib/CreateSecret.js +3 -0
- package/lib/CreateSecret.js.map +1 -0
- package/lib/CreateSecretHttp.d.ts +24 -0
- package/lib/CreateSecretHttp.d.ts.map +1 -0
- package/lib/CreateSecretHttp.js +60 -0
- package/lib/CreateSecretHttp.js.map +1 -0
- package/lib/CreateVolume.d.ts +84 -0
- package/lib/CreateVolume.d.ts.map +1 -0
- package/lib/CreateVolume.js +3 -0
- package/lib/CreateVolume.js.map +1 -0
- package/lib/CreateVolumeHttp.d.ts +32 -0
- package/lib/CreateVolumeHttp.d.ts.map +1 -0
- package/lib/CreateVolumeHttp.js +69 -0
- package/lib/CreateVolumeHttp.js.map +1 -0
- package/lib/Credentials.d.ts +32 -0
- package/lib/Credentials.d.ts.map +1 -0
- package/lib/Credentials.js +44 -0
- package/lib/Credentials.js.map +1 -0
- package/lib/Dict.d.ts +147 -0
- package/lib/Dict.d.ts.map +1 -0
- package/lib/Dict.js +175 -0
- package/lib/Dict.js.map +1 -0
- package/lib/DictClient.d.ts +55 -0
- package/lib/DictClient.d.ts.map +1 -0
- package/lib/DictClient.js +89 -0
- package/lib/DictClient.js.map +1 -0
- package/lib/Domain.d.ts +86 -0
- package/lib/Domain.d.ts.map +1 -0
- package/lib/Domain.js +113 -0
- package/lib/Domain.js.map +1 -0
- package/lib/Endpoint.d.ts +181 -0
- package/lib/Endpoint.d.ts.map +1 -0
- package/lib/Endpoint.js +283 -0
- package/lib/Endpoint.js.map +1 -0
- package/lib/Environment.d.ts +174 -0
- package/lib/Environment.d.ts.map +1 -0
- package/lib/Environment.js +244 -0
- package/lib/Environment.js.map +1 -0
- package/lib/FetchServer.d.ts +105 -0
- package/lib/FetchServer.d.ts.map +1 -0
- package/lib/FetchServer.js +3 -0
- package/lib/FetchServer.js.map +1 -0
- package/lib/FetchServerHttp.d.ts +21 -0
- package/lib/FetchServerHttp.d.ts.map +1 -0
- package/lib/FetchServerHttp.js +84 -0
- package/lib/FetchServerHttp.js.map +1 -0
- package/lib/Function.d.ts +236 -0
- package/lib/Function.d.ts.map +1 -0
- package/lib/Function.js +273 -0
- package/lib/Function.js.map +1 -0
- package/lib/FunctionAutoscaler.d.ts +99 -0
- package/lib/FunctionAutoscaler.d.ts.map +1 -0
- package/lib/FunctionAutoscaler.js +136 -0
- package/lib/FunctionAutoscaler.js.map +1 -0
- package/lib/FunctionTarget.d.ts +61 -0
- package/lib/FunctionTarget.d.ts.map +1 -0
- package/lib/FunctionTarget.js +136 -0
- package/lib/FunctionTarget.js.map +1 -0
- package/lib/Image.d.ts +159 -0
- package/lib/Image.d.ts.map +1 -0
- package/lib/Image.js +203 -0
- package/lib/Image.js.map +1 -0
- package/lib/ImageBuild.d.ts +108 -0
- package/lib/ImageBuild.d.ts.map +1 -0
- package/lib/ImageBuild.js +157 -0
- package/lib/ImageBuild.js.map +1 -0
- package/lib/ImagePlan.d.ts +31 -0
- package/lib/ImagePlan.d.ts.map +1 -0
- package/lib/ImagePlan.js +70 -0
- package/lib/ImagePlan.js.map +1 -0
- package/lib/InferEnv.d.ts +26 -0
- package/lib/InferEnv.d.ts.map +1 -0
- package/lib/InferEnv.js +1 -0
- package/lib/InferEnv.js.map +1 -0
- package/lib/InvokeFunction.d.ts +186 -0
- package/lib/InvokeFunction.d.ts.map +1 -0
- package/lib/InvokeFunction.js +10 -0
- package/lib/InvokeFunction.js.map +1 -0
- package/lib/InvokeFunctionHttp.d.ts +39 -0
- package/lib/InvokeFunctionHttp.d.ts.map +1 -0
- package/lib/InvokeFunctionHttp.js +210 -0
- package/lib/InvokeFunctionHttp.js.map +1 -0
- package/lib/ModalBindings.d.ts +138 -0
- package/lib/ModalBindings.d.ts.map +1 -0
- package/lib/ModalBindings.js +223 -0
- package/lib/ModalBindings.js.map +1 -0
- package/lib/MountBucket.d.ts +80 -0
- package/lib/MountBucket.d.ts.map +1 -0
- package/lib/MountBucket.js +44 -0
- package/lib/MountBucket.js.map +1 -0
- package/lib/MountVolume.d.ts +77 -0
- package/lib/MountVolume.d.ts.map +1 -0
- package/lib/MountVolume.js +41 -0
- package/lib/MountVolume.js.map +1 -0
- package/lib/Mounts.d.ts +134 -0
- package/lib/Mounts.d.ts.map +1 -0
- package/lib/Mounts.js +87 -0
- package/lib/Mounts.js.map +1 -0
- package/lib/PersistentSandbox.d.ts +75 -0
- package/lib/PersistentSandbox.d.ts.map +1 -0
- package/lib/PersistentSandbox.js +93 -0
- package/lib/PersistentSandbox.js.map +1 -0
- package/lib/Providers.d.ts +23 -0
- package/lib/Providers.d.ts.map +1 -0
- package/lib/Providers.js +64 -0
- package/lib/Providers.js.map +1 -0
- package/lib/Proxy.d.ts +94 -0
- package/lib/Proxy.d.ts.map +1 -0
- package/lib/Proxy.js +132 -0
- package/lib/Proxy.js.map +1 -0
- package/lib/Queue.d.ts +147 -0
- package/lib/Queue.d.ts.map +1 -0
- package/lib/Queue.js +177 -0
- package/lib/Queue.js.map +1 -0
- package/lib/QueueClient.d.ts +64 -0
- package/lib/QueueClient.d.ts.map +1 -0
- package/lib/QueueClient.js +73 -0
- package/lib/QueueClient.js.map +1 -0
- package/lib/ReadApp.d.ts +85 -0
- package/lib/ReadApp.d.ts.map +1 -0
- package/lib/ReadApp.js +3 -0
- package/lib/ReadApp.js.map +1 -0
- package/lib/ReadAppHttp.d.ts +26 -0
- package/lib/ReadAppHttp.d.ts.map +1 -0
- package/lib/ReadAppHttp.js +106 -0
- package/lib/ReadAppHttp.js.map +1 -0
- package/lib/ReadDict.d.ts +39 -0
- package/lib/ReadDict.d.ts.map +1 -0
- package/lib/ReadDict.js +3 -0
- package/lib/ReadDict.js.map +1 -0
- package/lib/ReadDictHttp.d.ts +12 -0
- package/lib/ReadDictHttp.d.ts.map +1 -0
- package/lib/ReadDictHttp.js +23 -0
- package/lib/ReadDictHttp.js.map +1 -0
- package/lib/ReadFunction.d.ts +73 -0
- package/lib/ReadFunction.d.ts.map +1 -0
- package/lib/ReadFunction.js +3 -0
- package/lib/ReadFunction.js.map +1 -0
- package/lib/ReadFunctionHttp.d.ts +25 -0
- package/lib/ReadFunctionHttp.d.ts.map +1 -0
- package/lib/ReadFunctionHttp.js +63 -0
- package/lib/ReadFunctionHttp.js.map +1 -0
- package/lib/ReadQueue.d.ts +39 -0
- package/lib/ReadQueue.d.ts.map +1 -0
- package/lib/ReadQueue.js +3 -0
- package/lib/ReadQueue.js.map +1 -0
- package/lib/ReadQueueHttp.d.ts +12 -0
- package/lib/ReadQueueHttp.d.ts.map +1 -0
- package/lib/ReadQueueHttp.js +23 -0
- package/lib/ReadQueueHttp.js.map +1 -0
- package/lib/ReadServer.d.ts +72 -0
- package/lib/ReadServer.d.ts.map +1 -0
- package/lib/ReadServer.js +3 -0
- package/lib/ReadServer.js.map +1 -0
- package/lib/ReadServerHttp.d.ts +25 -0
- package/lib/ReadServerHttp.d.ts.map +1 -0
- package/lib/ReadServerHttp.js +70 -0
- package/lib/ReadServerHttp.js.map +1 -0
- package/lib/ReadVolume.d.ts +40 -0
- package/lib/ReadVolume.d.ts.map +1 -0
- package/lib/ReadVolume.js +3 -0
- package/lib/ReadVolume.js.map +1 -0
- package/lib/ReadVolumeHttp.d.ts +12 -0
- package/lib/ReadVolumeHttp.d.ts.map +1 -0
- package/lib/ReadVolumeHttp.js +24 -0
- package/lib/ReadVolumeHttp.js.map +1 -0
- package/lib/ReadWriteDict.d.ts +39 -0
- package/lib/ReadWriteDict.d.ts.map +1 -0
- package/lib/ReadWriteDict.js +3 -0
- package/lib/ReadWriteDict.js.map +1 -0
- package/lib/ReadWriteDictHttp.d.ts +12 -0
- package/lib/ReadWriteDictHttp.d.ts.map +1 -0
- package/lib/ReadWriteDictHttp.js +23 -0
- package/lib/ReadWriteDictHttp.js.map +1 -0
- package/lib/ReadWriteQueue.d.ts +40 -0
- package/lib/ReadWriteQueue.d.ts.map +1 -0
- package/lib/ReadWriteQueue.js +3 -0
- package/lib/ReadWriteQueue.js.map +1 -0
- package/lib/ReadWriteQueueHttp.d.ts +12 -0
- package/lib/ReadWriteQueueHttp.d.ts.map +1 -0
- package/lib/ReadWriteQueueHttp.js +23 -0
- package/lib/ReadWriteQueueHttp.js.map +1 -0
- package/lib/ReadWriteVolume.d.ts +40 -0
- package/lib/ReadWriteVolume.d.ts.map +1 -0
- package/lib/ReadWriteVolume.js +3 -0
- package/lib/ReadWriteVolume.js.map +1 -0
- package/lib/ReadWriteVolumeHttp.d.ts +12 -0
- package/lib/ReadWriteVolumeHttp.d.ts.map +1 -0
- package/lib/ReadWriteVolumeHttp.js +24 -0
- package/lib/ReadWriteVolumeHttp.js.map +1 -0
- package/lib/RuntimeOwner.d.ts +39 -0
- package/lib/RuntimeOwner.d.ts.map +1 -0
- package/lib/RuntimeOwner.js +85 -0
- package/lib/RuntimeOwner.js.map +1 -0
- package/lib/Sandbox.d.ts +215 -0
- package/lib/Sandbox.d.ts.map +1 -0
- package/lib/Sandbox.js +278 -0
- package/lib/Sandbox.js.map +1 -0
- package/lib/SandboxClient.d.ts +748 -0
- package/lib/SandboxClient.d.ts.map +1 -0
- package/lib/SandboxClient.js +710 -0
- package/lib/SandboxClient.js.map +1 -0
- package/lib/ScaleFunction.d.ts +54 -0
- package/lib/ScaleFunction.d.ts.map +1 -0
- package/lib/ScaleFunction.js +3 -0
- package/lib/ScaleFunction.js.map +1 -0
- package/lib/ScaleFunctionHttp.d.ts +21 -0
- package/lib/ScaleFunctionHttp.d.ts.map +1 -0
- package/lib/ScaleFunctionHttp.js +39 -0
- package/lib/ScaleFunctionHttp.js.map +1 -0
- package/lib/Secret.d.ts +170 -0
- package/lib/Secret.d.ts.map +1 -0
- package/lib/Secret.js +196 -0
- package/lib/Secret.js.map +1 -0
- package/lib/Server.d.ts +155 -0
- package/lib/Server.d.ts.map +1 -0
- package/lib/Server.js +184 -0
- package/lib/Server.js.map +1 -0
- package/lib/ServiceUser.d.ts +139 -0
- package/lib/ServiceUser.d.ts.map +1 -0
- package/lib/ServiceUser.js +210 -0
- package/lib/ServiceUser.js.map +1 -0
- package/lib/Volume.d.ts +170 -0
- package/lib/Volume.d.ts.map +1 -0
- package/lib/Volume.js +220 -0
- package/lib/Volume.js.map +1 -0
- package/lib/VolumeClient.d.ts +53 -0
- package/lib/VolumeClient.d.ts.map +1 -0
- package/lib/VolumeClient.js +22 -0
- package/lib/VolumeClient.js.map +1 -0
- package/lib/VolumeFiles.d.ts +94 -0
- package/lib/VolumeFiles.d.ts.map +1 -0
- package/lib/VolumeFiles.js +139 -0
- package/lib/VolumeFiles.js.map +1 -0
- package/lib/WebhookToken.d.ts +102 -0
- package/lib/WebhookToken.d.ts.map +1 -0
- package/lib/WebhookToken.js +176 -0
- package/lib/WebhookToken.js.map +1 -0
- package/lib/WorkspaceSettings.d.ts +70 -0
- package/lib/WorkspaceSettings.d.ts.map +1 -0
- package/lib/WorkspaceSettings.js +105 -0
- package/lib/WorkspaceSettings.js.map +1 -0
- package/lib/WriteApp.d.ts +38 -0
- package/lib/WriteApp.d.ts.map +1 -0
- package/lib/WriteApp.js +3 -0
- package/lib/WriteApp.js.map +1 -0
- package/lib/WriteAppHttp.d.ts +23 -0
- package/lib/WriteAppHttp.d.ts.map +1 -0
- package/lib/WriteAppHttp.js +36 -0
- package/lib/WriteAppHttp.js.map +1 -0
- package/lib/WriteDict.d.ts +39 -0
- package/lib/WriteDict.d.ts.map +1 -0
- package/lib/WriteDict.js +3 -0
- package/lib/WriteDict.js.map +1 -0
- package/lib/WriteDictHttp.d.ts +12 -0
- package/lib/WriteDictHttp.d.ts.map +1 -0
- package/lib/WriteDictHttp.js +23 -0
- package/lib/WriteDictHttp.js.map +1 -0
- package/lib/WriteQueue.d.ts +39 -0
- package/lib/WriteQueue.d.ts.map +1 -0
- package/lib/WriteQueue.js +3 -0
- package/lib/WriteQueue.js.map +1 -0
- package/lib/WriteQueueHttp.d.ts +12 -0
- package/lib/WriteQueueHttp.d.ts.map +1 -0
- package/lib/WriteQueueHttp.js +23 -0
- package/lib/WriteQueueHttp.js.map +1 -0
- package/lib/WriteSecret.d.ts +53 -0
- package/lib/WriteSecret.d.ts.map +1 -0
- package/lib/WriteSecret.js +3 -0
- package/lib/WriteSecret.js.map +1 -0
- package/lib/WriteSecretHttp.d.ts +23 -0
- package/lib/WriteSecretHttp.d.ts.map +1 -0
- package/lib/WriteSecretHttp.js +44 -0
- package/lib/WriteSecretHttp.js.map +1 -0
- package/lib/WriteVolume.d.ts +39 -0
- package/lib/WriteVolume.d.ts.map +1 -0
- package/lib/WriteVolume.js +3 -0
- package/lib/WriteVolume.js.map +1 -0
- package/lib/WriteVolumeHttp.d.ts +12 -0
- package/lib/WriteVolumeHttp.d.ts.map +1 -0
- package/lib/WriteVolumeHttp.js +24 -0
- package/lib/WriteVolumeHttp.js.map +1 -0
- package/lib/index.d.ts +80 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +78 -0
- package/lib/index.js.map +1 -0
- package/lib/internal/Declared.d.ts +29 -0
- package/lib/internal/Declared.d.ts.map +1 -0
- package/lib/internal/Declared.js +31 -0
- package/lib/internal/Declared.js.map +1 -0
- package/lib/internal/Deploy.d.ts +110 -0
- package/lib/internal/Deploy.d.ts.map +1 -0
- package/lib/internal/Deploy.js +230 -0
- package/lib/internal/Deploy.js.map +1 -0
- package/lib/internal/Entrypoint.d.ts +52 -0
- package/lib/internal/Entrypoint.d.ts.map +1 -0
- package/lib/internal/Entrypoint.js +193 -0
- package/lib/internal/Entrypoint.js.map +1 -0
- package/lib/internal/Rpc.d.ts +17 -0
- package/lib/internal/Rpc.d.ts.map +1 -0
- package/lib/internal/Rpc.js +49 -0
- package/lib/internal/Rpc.js.map +1 -0
- package/lib/internal/RpcAuth.d.ts +41 -0
- package/lib/internal/RpcAuth.d.ts.map +1 -0
- package/lib/internal/RpcAuth.js +100 -0
- package/lib/internal/RpcAuth.js.map +1 -0
- package/lib/internal/Runtime.d.ts +127 -0
- package/lib/internal/Runtime.d.ts.map +1 -0
- package/lib/internal/Runtime.js +246 -0
- package/lib/internal/Runtime.js.map +1 -0
- package/lib/internal/Tags.d.ts +19 -0
- package/lib/internal/Tags.d.ts.map +1 -0
- package/lib/internal/Tags.js +33 -0
- package/lib/internal/Tags.js.map +1 -0
- package/lib/internal/TcpConnect.d.ts +12 -0
- package/lib/internal/TcpConnect.d.ts.map +1 -0
- package/lib/internal/TcpConnect.js +46 -0
- package/lib/internal/TcpConnect.js.map +1 -0
- package/lib/internal/Transport.d.ts +13 -0
- package/lib/internal/Transport.d.ts.map +1 -0
- package/lib/internal/Transport.js +16 -0
- package/lib/internal/Transport.js.map +1 -0
- package/lib/internal.d.ts +71 -0
- package/lib/internal.d.ts.map +1 -0
- package/lib/internal.js +102 -0
- package/lib/internal.js.map +1 -0
- package/package.json +59 -3
- package/src/App.ts +262 -0
- package/src/AuthProvider.ts +295 -0
- package/src/BindingHttp.ts +112 -0
- package/src/Blob.ts +71 -0
- package/src/Bootstrap.ts +52 -0
- package/src/Cbor.ts +158 -0
- package/src/ConnectSandbox.ts +99 -0
- package/src/Container.ts +121 -0
- package/src/Contributions.ts +9 -0
- package/src/CreateDict.ts +95 -0
- package/src/CreateDictHttp.ts +91 -0
- package/src/CreateImage.ts +105 -0
- package/src/CreateImageHttp.ts +117 -0
- package/src/CreateQueue.ts +95 -0
- package/src/CreateQueueHttp.ts +91 -0
- package/src/CreateSandbox.ts +228 -0
- package/src/CreateSandboxHttp.ts +160 -0
- package/src/CreateSecret.ts +109 -0
- package/src/CreateSecretHttp.ts +83 -0
- package/src/CreateVolume.ts +96 -0
- package/src/CreateVolumeHttp.ts +93 -0
- package/src/Credentials.ts +74 -0
- package/src/Dict.ts +245 -0
- package/src/DictClient.ts +166 -0
- package/src/Domain.ts +147 -0
- package/src/Endpoint.ts +406 -0
- package/src/Environment.ts +373 -0
- package/src/FetchServer.ts +126 -0
- package/src/FetchServerHttp.ts +110 -0
- package/src/Function.ts +397 -0
- package/src/FunctionAutoscaler.ts +210 -0
- package/src/FunctionTarget.ts +181 -0
- package/src/Image.ts +281 -0
- package/src/ImageBuild.ts +228 -0
- package/src/ImagePlan.ts +78 -0
- package/src/InferEnv.ts +27 -0
- package/src/InvokeFunction.ts +211 -0
- package/src/InvokeFunctionHttp.ts +316 -0
- package/src/ModalBindings.ts +310 -0
- package/src/MountBucket.ts +137 -0
- package/src/MountVolume.ts +113 -0
- package/src/Mounts.ts +230 -0
- package/src/PersistentSandbox.ts +142 -0
- package/src/Providers.ts +100 -0
- package/src/Proxy.ts +191 -0
- package/src/Queue.ts +258 -0
- package/src/QueueClient.ts +149 -0
- package/src/ReadApp.ts +101 -0
- package/src/ReadAppHttp.ts +142 -0
- package/src/ReadDict.ts +44 -0
- package/src/ReadDictHttp.ts +27 -0
- package/src/ReadFunction.ts +107 -0
- package/src/ReadFunctionHttp.ts +91 -0
- package/src/ReadQueue.ts +44 -0
- package/src/ReadQueueHttp.ts +27 -0
- package/src/ReadServer.ts +98 -0
- package/src/ReadServerHttp.ts +101 -0
- package/src/ReadVolume.ts +45 -0
- package/src/ReadVolumeHttp.ts +28 -0
- package/src/ReadWriteDict.ts +44 -0
- package/src/ReadWriteDictHttp.ts +27 -0
- package/src/ReadWriteQueue.ts +45 -0
- package/src/ReadWriteQueueHttp.ts +27 -0
- package/src/ReadWriteVolume.ts +45 -0
- package/src/ReadWriteVolumeHttp.ts +28 -0
- package/src/RuntimeOwner.ts +111 -0
- package/src/Sandbox.ts +402 -0
- package/src/SandboxClient.ts +1404 -0
- package/src/ScaleFunction.ts +70 -0
- package/src/ScaleFunctionHttp.ts +54 -0
- package/src/Secret.ts +296 -0
- package/src/Server.ts +285 -0
- package/src/ServiceUser.ts +295 -0
- package/src/Volume.ts +320 -0
- package/src/VolumeClient.ts +108 -0
- package/src/VolumeFiles.ts +194 -0
- package/src/WebhookToken.ts +230 -0
- package/src/WorkspaceSettings.ts +160 -0
- package/src/WriteApp.ts +43 -0
- package/src/WriteAppHttp.ts +51 -0
- package/src/WriteDict.ts +44 -0
- package/src/WriteDictHttp.ts +27 -0
- package/src/WriteQueue.ts +44 -0
- package/src/WriteQueueHttp.ts +27 -0
- package/src/WriteSecret.ts +60 -0
- package/src/WriteSecretHttp.ts +56 -0
- package/src/WriteVolume.ts +44 -0
- package/src/WriteVolumeHttp.ts +28 -0
- package/src/globals.d.ts +2 -0
- package/src/index.ts +85 -0
- package/src/internal/Declared.ts +80 -0
- package/src/internal/Deploy.ts +309 -0
- package/src/internal/Entrypoint.ts +198 -0
- package/src/internal/Rpc.ts +59 -0
- package/src/internal/RpcAuth.ts +132 -0
- package/src/internal/Runtime.ts +386 -0
- package/src/internal/Tags.ts +44 -0
- package/src/internal/TcpConnect.ts +78 -0
- package/src/internal/Transport.ts +25 -0
- package/src/internal.ts +147 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import * as Binding from "alchemy/Binding";
|
|
2
|
+
import * as Output from "alchemy/Output";
|
|
3
|
+
import { Random } from "alchemy/Random";
|
|
4
|
+
import { rpcMethodOf } from "alchemy/Rpc";
|
|
5
|
+
import { CurrentRuntimeContext, sanitizeKey } from "alchemy/RuntimeContext";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import { HttpServerRequest } from "effect/http/HttpServerRequest";
|
|
8
|
+
import * as HttpServerResponse from "effect/http/HttpServerResponse";
|
|
9
|
+
import * as Redacted from "effect/Redacted";
|
|
10
|
+
/*
|
|
11
|
+
* Who may call a program's RPC methods. Every binding that calls them
|
|
12
|
+
* (`Modal.InvokeFunction`, `Modal.FetchServer`) gets its own random key: the
|
|
13
|
+
* caller keeps the key, the target keeps only its SHA-256, and each RPC call
|
|
14
|
+
* carries the key. A key opens one target for one caller, so a target can't
|
|
15
|
+
* replay what it receives to another target. Modal's own access control
|
|
16
|
+
* (proxy auth, environment roles) still applies underneath.
|
|
17
|
+
*/
|
|
18
|
+
/** Env var on the target: the SHA-256 (hex) of each caller's key, as a JSON array. */
|
|
19
|
+
export const RPC_CALLERS_ENV = "ALCHEMY_MODAL_RPC_CALLERS";
|
|
20
|
+
/** Request header a Server's RPC call carries its key in. */
|
|
21
|
+
export const RPC_KEY_HEADER = "x-alchemy-rpc-key";
|
|
22
|
+
/** Keyword argument a Function's RPC call carries its key in (the entrypoint forwards it as {@link RPC_KEY_HEADER}). */
|
|
23
|
+
export const RPC_KEY_KWARG = "__alchemy_rpc_key__";
|
|
24
|
+
/** Env var on the caller holding its key for the target `targetId`. */
|
|
25
|
+
export const rpcKeyEnv = (targetId) => sanitizeKey(`ALCHEMY_MODAL_RPC_KEY_${targetId}`);
|
|
26
|
+
/** SHA-256 of `text`, as hex. */
|
|
27
|
+
export const sha256Hex = (text) => Effect.promise(() => crypto.subtle.digest("SHA-256", new TextEncoder().encode(text))).pipe(Effect.map((digest) => Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, "0")).join("")));
|
|
28
|
+
/** The caller key hashes a target's bindings recorded, sorted. */
|
|
29
|
+
export const rpcCallersOf = (bindings) => [...new Set(bindings.flatMap((binding) => binding.data.rpcCallers ?? []))].sort();
|
|
30
|
+
/**
|
|
31
|
+
* The caller half of an RPC binding. Yield it while the binding's layer is
|
|
32
|
+
* built; call the result with the target in the binding. At deploy it mints
|
|
33
|
+
* the key for this caller and target (`<host><target>RpcKey`), binds it into
|
|
34
|
+
* the host's env, and records its hash on the target. At run time it reads
|
|
35
|
+
* the key back, or `undefined` when the caller has none (a script).
|
|
36
|
+
*/
|
|
37
|
+
export const RpcCaller = Effect.gen(function* () {
|
|
38
|
+
// Deploy only: a host bundle never creates the key.
|
|
39
|
+
const Key = globalThis.__ALCHEMY_RUNTIME__ ? undefined : yield* Random;
|
|
40
|
+
return Effect.fn(function* (target) {
|
|
41
|
+
// The host binding the target, read per call: one binding layer serves
|
|
42
|
+
// every host in the Stack, so a host captured when the layer was built
|
|
43
|
+
// would be the first one to build it.
|
|
44
|
+
const runtime = yield* CurrentRuntimeContext;
|
|
45
|
+
const env = rpcKeyEnv(target.LogicalId);
|
|
46
|
+
if (!globalThis.__ALCHEMY_RUNTIME__ && Key !== undefined && runtime !== undefined) {
|
|
47
|
+
const host = yield* Binding.Host;
|
|
48
|
+
if (host !== undefined) {
|
|
49
|
+
const key = yield* Key(`${host.LogicalId}${target.LogicalId}RpcKey`, {});
|
|
50
|
+
yield* runtime.set(env, key.text);
|
|
51
|
+
yield* target.bind `Modal.RpcCaller(${host})`({
|
|
52
|
+
rpcCallers: [
|
|
53
|
+
key.text.pipe(Output.mapEffect((text) => text.pipe(Redacted.value, sha256Hex))),
|
|
54
|
+
],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return Effect.gen(function* () {
|
|
59
|
+
if (runtime === undefined)
|
|
60
|
+
return undefined;
|
|
61
|
+
const value = yield* runtime.get(env);
|
|
62
|
+
return value === undefined
|
|
63
|
+
? undefined
|
|
64
|
+
: Redacted.isRedacted(value)
|
|
65
|
+
? Redacted.value(value)
|
|
66
|
+
: value;
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
/**
|
|
71
|
+
* Serve `rpc` only to callers whose key's hash is in {@link RPC_CALLERS_ENV};
|
|
72
|
+
* every other request goes to `fallback`. A call without a key, or with one
|
|
73
|
+
* no binding issued, gets `401`.
|
|
74
|
+
*/
|
|
75
|
+
export const requireRpcCaller = (callers, rpc, fallback) => Effect.gen(function* () {
|
|
76
|
+
const request = yield* HttpServerRequest;
|
|
77
|
+
if (rpcMethodOf(request) === undefined)
|
|
78
|
+
return yield* fallback;
|
|
79
|
+
const key = request.headers[RPC_KEY_HEADER];
|
|
80
|
+
if (typeof key !== "string" || key.length === 0 || !callers.has(yield* sha256Hex(key))) {
|
|
81
|
+
return HttpServerResponse.text("Unauthorized: this caller has no binding to the program", {
|
|
82
|
+
status: 401,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return yield* rpc;
|
|
86
|
+
});
|
|
87
|
+
/** The caller key hashes in a target's env (see {@link RPC_CALLERS_ENV}). */
|
|
88
|
+
export const parseCallers = (value) => {
|
|
89
|
+
const list = typeof value === "string" ? safeParse(value) : value;
|
|
90
|
+
return new Set(Array.isArray(list) ? list.filter((item) => typeof item === "string") : []);
|
|
91
|
+
};
|
|
92
|
+
const safeParse = (text) => {
|
|
93
|
+
try {
|
|
94
|
+
return JSON.parse(text);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=RpcAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RpcAuth.js","sources":["../../src/internal/RpcAuth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import * as classes from "@distilled.cloud/modal/classes";
|
|
2
|
+
import * as functions from "@distilled.cloud/modal/functions";
|
|
3
|
+
import * as secret from "@distilled.cloud/modal/secret";
|
|
4
|
+
import type { Input } from "alchemy/Input";
|
|
5
|
+
import { Stack } from "alchemy/Stack";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import type { ContainerProps } from "../Container.ts";
|
|
8
|
+
import { type MountBindings } from "../Mounts.ts";
|
|
9
|
+
import type { Providers } from "../Providers.ts";
|
|
10
|
+
import { ModalDeployUnexpectedResponse } from "./Deploy.ts";
|
|
11
|
+
import { type RpcCallerBinding } from "./RpcAuth.ts";
|
|
12
|
+
/** What a runtime's bindings attach: mounts, and the keys of RPC callers. */
|
|
13
|
+
type RuntimeBindings = ReadonlyArray<{
|
|
14
|
+
readonly data: {
|
|
15
|
+
readonly mounts?: MountBindings[number]["data"]["mounts"];
|
|
16
|
+
} & RpcCallerBinding;
|
|
17
|
+
}>;
|
|
18
|
+
/** Attributes shared by `Modal.Function` and `Modal.Server`. */
|
|
19
|
+
export interface RuntimeAttributes {
|
|
20
|
+
/** Function ID (`fu-…`). */
|
|
21
|
+
functionId: string;
|
|
22
|
+
/** Name of the function in its App. */
|
|
23
|
+
name: string;
|
|
24
|
+
/** The App the function is deployed in. */
|
|
25
|
+
appId: string;
|
|
26
|
+
/** Name of that App. */
|
|
27
|
+
appName: string | undefined;
|
|
28
|
+
/** Environment of that App. */
|
|
29
|
+
environment: string | undefined;
|
|
30
|
+
/** The image with the bundled program (`im-…`). */
|
|
31
|
+
imageId: string;
|
|
32
|
+
/** The Modal Secret holding the program's env (bindings' credentials included). */
|
|
33
|
+
secretId: string;
|
|
34
|
+
/** Name of that secret. */
|
|
35
|
+
secretName: string;
|
|
36
|
+
/** Port the program listens on. */
|
|
37
|
+
port: number;
|
|
38
|
+
/** The command the entrypoint starts. */
|
|
39
|
+
command: string[];
|
|
40
|
+
/** Content hash of the bundle, image and function definition. */
|
|
41
|
+
hash: string;
|
|
42
|
+
/** The class (`cs-…`) of a function with RPC methods, which Modal runs as a class. */
|
|
43
|
+
classId?: string | undefined;
|
|
44
|
+
}
|
|
45
|
+
/** What differs between a Function and a Server. */
|
|
46
|
+
export interface RuntimeKind<P extends ContainerProps> {
|
|
47
|
+
/** Resource type, e.g. `Modal.Function`. */
|
|
48
|
+
readonly type: string;
|
|
49
|
+
/** The Function fields specific to the kind (webhook, schedule, HTTP config, ...). */
|
|
50
|
+
readonly definition: (props: P, context: {
|
|
51
|
+
readonly port: number;
|
|
52
|
+
readonly startupTimeout: number;
|
|
53
|
+
}) => functions.Function;
|
|
54
|
+
/** The program's bootstrap for an Effect-native `main`. */
|
|
55
|
+
readonly bootstrap: (handler: string) => (importPath: string) => string;
|
|
56
|
+
/** Env the kind adds to the program's (e.g. turning RPC on). */
|
|
57
|
+
readonly env?: (props: P) => Record<string, string>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* `{ app: Coder, mounts: [{ volume: Data, path: "/data" }] }` at module scope
|
|
61
|
+
* holds Effects: yield them so the resources are registered and the props
|
|
62
|
+
* hold their resolved attributes at reconcile.
|
|
63
|
+
*/
|
|
64
|
+
export declare const resolveContainerProps: <P extends ContainerProps>(_id: string, props: P) => Effect.Effect<P, never, Providers>;
|
|
65
|
+
/** The resolved app of the props. */
|
|
66
|
+
export declare const appOf: (value: unknown) => {
|
|
67
|
+
appId: string;
|
|
68
|
+
appName: string | undefined;
|
|
69
|
+
environment: string | undefined;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* The lifecycle shared by every Modal runtime: a function in an App whose
|
|
73
|
+
* container runs the bundled program behind Alchemy's Python entrypoint.
|
|
74
|
+
*
|
|
75
|
+
* 1. the program's env goes into a Modal Secret (values never enter the image);
|
|
76
|
+
* 2. the image is the base plus standalone Python plus the bundle, built by
|
|
77
|
+
* Modal and reused while its inputs don't change;
|
|
78
|
+
* 3. `FunctionCreate` writes the definition (with the entrypoint and client
|
|
79
|
+
* mounts), updating the existing function in place;
|
|
80
|
+
* 4. the App is republished with the function, keeping its other functions.
|
|
81
|
+
*/
|
|
82
|
+
export declare const runtimeLifecycle: <P extends ContainerProps>(kind: RuntimeKind<P>) => Effect.Effect<{
|
|
83
|
+
stables: Array<keyof RuntimeAttributes>;
|
|
84
|
+
diff: (args_0: {
|
|
85
|
+
id: string;
|
|
86
|
+
news: Input<P>;
|
|
87
|
+
output: RuntimeAttributes | undefined;
|
|
88
|
+
newBindings: Input<RuntimeBindings>;
|
|
89
|
+
}) => Effect.Effect<{
|
|
90
|
+
readonly action: "replace";
|
|
91
|
+
} | {
|
|
92
|
+
readonly action: "update";
|
|
93
|
+
} | undefined, import("@alchemy.run/docker/BuildHash").BuildHashInvalidProps | import("@alchemy.run/docker/BuildPlan").BuildPlanError | import("alchemy/Bundle/Bundle").BundleError | import("@alchemy.run/docker/DockerfileParser").DockerfileSyntaxError | import("../Mounts.ts").MountNotBound | import("alchemy/Mount").MountUnsupported | import("effect/PlatformError").PlatformError | import("@alchemy.run/docker/BuildPlan").UnsupportedDockerfile, import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
|
|
94
|
+
read: (args_0: {
|
|
95
|
+
output: RuntimeAttributes | undefined;
|
|
96
|
+
}) => Effect.Effect<RuntimeAttributes | undefined, classes.ModalOpError, classes.ModalOpContext>;
|
|
97
|
+
reconcile: (args_0: {
|
|
98
|
+
id: string;
|
|
99
|
+
news: P;
|
|
100
|
+
output: RuntimeAttributes | undefined;
|
|
101
|
+
session: {
|
|
102
|
+
note: (message: string) => Effect.Effect<void>;
|
|
103
|
+
};
|
|
104
|
+
bindings: RuntimeBindings;
|
|
105
|
+
}) => Effect.Effect<{
|
|
106
|
+
attributes: {
|
|
107
|
+
functionId: string;
|
|
108
|
+
name: string;
|
|
109
|
+
appId: string;
|
|
110
|
+
appName: string | undefined;
|
|
111
|
+
environment: string | undefined;
|
|
112
|
+
imageId: string;
|
|
113
|
+
secretId: string;
|
|
114
|
+
secretName: string;
|
|
115
|
+
port: number;
|
|
116
|
+
command: string[];
|
|
117
|
+
hash: string;
|
|
118
|
+
classId: string | undefined;
|
|
119
|
+
};
|
|
120
|
+
metadata: functions.FunctionHandleMetadata | undefined;
|
|
121
|
+
}, import("@distilled.cloud/modal/app").AppNotFound | import("@distilled.cloud/core/errors").BadGateway | import("../Blob.ts").BlobTransferFailed | import("@alchemy.run/docker/BuildHash").BuildHashInvalidProps | import("@alchemy.run/docker/BuildPlan").BuildPlanError | import("alchemy/Bundle/Bundle").BundleError | import("@distilled.cloud/core/config").ConfigError | import("@alchemy.run/docker/DockerfileParser").DockerfileSyntaxError | secret.EnvironmentNotFound | functions.FunctionNotFound | import("@distilled.cloud/core/errors").GatewayTimeout | import("effect/http/HttpClientError").HttpClientError | import("../ImageBuild.ts").ImageBuildFailed | import("../ImageBuild.ts").ImageBuildTimeout | import("../ImageBuild.ts").ImageBuildUnexpectedResponse | import("@distilled.cloud/modal/image").ImageNotFound | import("@distilled.cloud/core/errors").InternalServerError | import("@distilled.cloud/core/protocol-http").InvalidInput | ModalDeployUnexpectedResponse | import("@distilled.cloud/modal/Errors").ModalParseError | import("../Mounts.ts").MountNotBound | import("@distilled.cloud/modal/mount").MountNotFound | import("alchemy/Mount").MountUnsupported | import("effect/PlatformError").PlatformError | import("@distilled.cloud/core/sdk-error").SdkError | secret.SecretAlreadyExists | secret.SecretNotFound | import("../Secret.ts").SecretUnexpectedResponse | import("@distilled.cloud/core/errors").ServiceUnavailable | import("@distilled.cloud/core/errors").TooManyRequests | import("@distilled.cloud/core/errors").Unauthorized | import("@distilled.cloud/modal/Errors").UnknownModalError | import("@alchemy.run/docker/BuildPlan").UnsupportedDockerfile, import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("alchemy/ResourceContext").ResourceContext | Stack | import("alchemy/Stage").Stage | classes.ModalOpContext>;
|
|
122
|
+
delete: (args_0: {
|
|
123
|
+
output: RuntimeAttributes;
|
|
124
|
+
}) => Effect.Effect<void, classes.ModalOpError, classes.ModalOpContext>;
|
|
125
|
+
}, never, Stack>;
|
|
126
|
+
export {};
|
|
127
|
+
//# sourceMappingURL=Runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Runtime.d.ts","sources":["../../src/internal/Runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import * as classes from "@distilled.cloud/modal/classes";
|
|
2
|
+
import * as functions from "@distilled.cloud/modal/functions";
|
|
3
|
+
import * as secret from "@distilled.cloud/modal/secret";
|
|
4
|
+
import { isResolved } from "alchemy/Diff";
|
|
5
|
+
import { Stack } from "alchemy/Stack";
|
|
6
|
+
import { sha256Object } from "alchemy/Util/sha256";
|
|
7
|
+
import * as Effect from "effect/Effect";
|
|
8
|
+
import * as Redacted from "effect/Redacted";
|
|
9
|
+
import { gpuConfig } from "../ImageBuild.js";
|
|
10
|
+
import { envNameOf, objectName, seconds } from "../internal.js";
|
|
11
|
+
import { boundCapabilities, boundMounts, modalMountsOf, } from "../Mounts.js";
|
|
12
|
+
import { putSecret } from "../Secret.js";
|
|
13
|
+
import { resolveDeclarations } from "./Declared.js";
|
|
14
|
+
import { buildRuntimeImage, classTag, clientMount, DEFAULT_PORT, entrypointMount, ModalDeployUnexpectedResponse, planRuntimeImage, publishFunction, } from "./Deploy.js";
|
|
15
|
+
import { ENTRYPOINT_MODULE } from "./Entrypoint.js";
|
|
16
|
+
import { RPC_CALLERS_ENV, rpcCallersOf } from "./RpcAuth.js";
|
|
17
|
+
const resolveRef = (value) => Effect.isEffect(value) ? value : Effect.succeed(value);
|
|
18
|
+
/**
|
|
19
|
+
* `{ app: Coder, mounts: [{ volume: Data, path: "/data" }] }` at module scope
|
|
20
|
+
* holds Effects: yield them so the resources are registered and the props
|
|
21
|
+
* hold their resolved attributes at reconcile.
|
|
22
|
+
*/
|
|
23
|
+
export const resolveContainerProps = (_id, props) => Effect.gen(function* () {
|
|
24
|
+
if (globalThis.__ALCHEMY_RUNTIME__)
|
|
25
|
+
return props;
|
|
26
|
+
const app = yield* resolveRef(props.app);
|
|
27
|
+
const proxy = props.proxy === undefined ? undefined : yield* resolveRef(props.proxy);
|
|
28
|
+
const secrets = props.secrets === undefined ? undefined : yield* Effect.forEach(props.secrets, resolveRef);
|
|
29
|
+
const mounts = props.mounts === undefined
|
|
30
|
+
? undefined
|
|
31
|
+
: (yield* resolveDeclarations(props.mounts));
|
|
32
|
+
return { ...props, app, proxy, secrets, mounts };
|
|
33
|
+
});
|
|
34
|
+
/** The resolved app of the props. */
|
|
35
|
+
export const appOf = (value) => {
|
|
36
|
+
const rec = (value ?? {});
|
|
37
|
+
return { appId: rec.appId ?? "", appName: rec.name, environment: envNameOf(rec.environment) };
|
|
38
|
+
};
|
|
39
|
+
const idOf = (value, key) => typeof value === "object" && value !== null && key in value
|
|
40
|
+
? value[key]
|
|
41
|
+
: undefined;
|
|
42
|
+
/** An env value as a string, as the program's `process.env` sees it. */
|
|
43
|
+
const envText = (value) => typeof value === "string"
|
|
44
|
+
? value
|
|
45
|
+
: Redacted.isRedacted(value)
|
|
46
|
+
? String(Redacted.value(value))
|
|
47
|
+
: JSON.stringify(value ?? null);
|
|
48
|
+
/** The function definition fields every kind shares. */
|
|
49
|
+
const baseDefinition = (props, context, mounts) => ({
|
|
50
|
+
moduleName: ENTRYPOINT_MODULE,
|
|
51
|
+
functionName: context.tag,
|
|
52
|
+
definitionType: "DEFINITION_TYPE_FILE",
|
|
53
|
+
functionType: "FUNCTION_TYPE_FUNCTION",
|
|
54
|
+
resources: {
|
|
55
|
+
milliCpu: props.cpu !== undefined ? Math.round(props.cpu * 1000) : undefined,
|
|
56
|
+
milliCpuMax: props.cpuLimit !== undefined ? Math.round(props.cpuLimit * 1000) : undefined,
|
|
57
|
+
memoryMb: props.memory,
|
|
58
|
+
memoryMbMax: props.memoryLimit,
|
|
59
|
+
gpuConfig: gpuConfig(props.gpu),
|
|
60
|
+
ephemeralDiskMb: props.ephemeralDisk,
|
|
61
|
+
},
|
|
62
|
+
volumeMounts: mounts.volumeMounts,
|
|
63
|
+
cloudBucketMounts: mounts.cloudBucketMounts,
|
|
64
|
+
proxyId: idOf(props.proxy, "proxyId"),
|
|
65
|
+
timeoutSecs: Math.round(context.timeout),
|
|
66
|
+
startupTimeoutSecs: Math.round(context.startupTimeout),
|
|
67
|
+
cloudProviderStr: props.cloud ?? "",
|
|
68
|
+
appName: context.appName ?? "",
|
|
69
|
+
schedulerPlacement: props.regions !== undefined || props.nonpreemptible
|
|
70
|
+
? { regions: props.regions, nonpreemptible: props.nonpreemptible }
|
|
71
|
+
: undefined,
|
|
72
|
+
autoscalerSettings: {
|
|
73
|
+
minContainers: props.minContainers,
|
|
74
|
+
maxContainers: props.maxContainers,
|
|
75
|
+
bufferContainers: props.bufferContainers,
|
|
76
|
+
scaleupWindow: props.scaleupWindow,
|
|
77
|
+
scaledownWindow: props.scaledownWindow,
|
|
78
|
+
},
|
|
79
|
+
// Older mirrors of `autoscalerSettings` the Python client still sets.
|
|
80
|
+
warmPoolSize: props.minContainers ?? 0,
|
|
81
|
+
concurrencyLimit: props.maxContainers ?? 0,
|
|
82
|
+
ExperimentalBufferContainers: props.bufferContainers ?? 0,
|
|
83
|
+
taskIdleTimeoutSecs: props.scaledownWindow ?? 0,
|
|
84
|
+
checkpointingEnabled: props.enableMemorySnapshot,
|
|
85
|
+
blockNetwork: props.blockNetwork,
|
|
86
|
+
untrusted: props.restrictModalAccess,
|
|
87
|
+
i6pnEnabled: props.i6pn,
|
|
88
|
+
methodDefinitionsSet: true,
|
|
89
|
+
mountClientDependencies: true,
|
|
90
|
+
ExperimentalConcurrentCancellations: true,
|
|
91
|
+
});
|
|
92
|
+
/**
|
|
93
|
+
* The lifecycle shared by every Modal runtime: a function in an App whose
|
|
94
|
+
* container runs the bundled program behind Alchemy's Python entrypoint.
|
|
95
|
+
*
|
|
96
|
+
* 1. the program's env goes into a Modal Secret (values never enter the image);
|
|
97
|
+
* 2. the image is the base plus standalone Python plus the bundle, built by
|
|
98
|
+
* Modal and reused while its inputs don't change;
|
|
99
|
+
* 3. `FunctionCreate` writes the definition (with the entrypoint and client
|
|
100
|
+
* mounts), updating the existing function in place;
|
|
101
|
+
* 4. the App is republished with the function, keeping its other functions.
|
|
102
|
+
*/
|
|
103
|
+
export const runtimeLifecycle = (kind) => Effect.gen(function* () {
|
|
104
|
+
const stack = yield* Stack;
|
|
105
|
+
const prepare = Effect.fn(function* (id, news, bindings) {
|
|
106
|
+
const port = news.port ?? DEFAULT_PORT;
|
|
107
|
+
const tag = news.name ?? id;
|
|
108
|
+
const app = appOf(news.app);
|
|
109
|
+
const timeout = seconds(news.timeout) ?? 300;
|
|
110
|
+
const startupTimeout = seconds(news.startupTimeout) ?? timeout;
|
|
111
|
+
const image = yield* planRuntimeImage(kind.type, news, port, news.isExternal ? undefined : kind.bootstrap(news.handler ?? "default"), boundCapabilities(bindings));
|
|
112
|
+
// The props' mounts, then the ones `Modal.MountVolume` / `MountBucket` bound.
|
|
113
|
+
const mounts = yield* modalMountsOf([...(news.mounts ?? []), ...boundMounts(bindings)]);
|
|
114
|
+
const base = baseDefinition(news, { tag, appName: app.appName, timeout, startupTimeout }, mounts);
|
|
115
|
+
const specific = kind.definition(news, { port, startupTimeout });
|
|
116
|
+
const definition = {
|
|
117
|
+
...base,
|
|
118
|
+
...specific,
|
|
119
|
+
// A class's service function is named `<tag>.*`, as Modal's clients name it.
|
|
120
|
+
functionName: specific.isClass ? classTag(tag) : tag,
|
|
121
|
+
autoscalerSettings: { ...base.autoscalerSettings, ...specific.autoscalerSettings },
|
|
122
|
+
};
|
|
123
|
+
const secretIds = (news.secrets ?? []).flatMap((s) => idOf(s, "secretId") ?? []);
|
|
124
|
+
const env = {
|
|
125
|
+
...Object.fromEntries(Object.entries(news.env ?? {}).map(([key, value]) => [key, envText(value)])),
|
|
126
|
+
...kind.env?.(news),
|
|
127
|
+
// The callers whose keys open the program's RPC methods.
|
|
128
|
+
...(rpcCallersOf(bindings).length > 0
|
|
129
|
+
? { [RPC_CALLERS_ENV]: JSON.stringify(rpcCallersOf(bindings)) }
|
|
130
|
+
: {}),
|
|
131
|
+
};
|
|
132
|
+
const hash = yield* sha256Object({ image: image.hash, definition, secretIds, env });
|
|
133
|
+
return { port, tag, app, image, definition, secretIds, env, hash };
|
|
134
|
+
});
|
|
135
|
+
return {
|
|
136
|
+
stables: ["appId", "name", "secretName"],
|
|
137
|
+
diff: Effect.fn(function* ({ id, news, output, newBindings, }) {
|
|
138
|
+
if (!isResolved(news) || !isResolved(newBindings) || output === undefined) {
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
if (appOf(news.app).appId !== output.appId)
|
|
142
|
+
return { action: "replace" };
|
|
143
|
+
if ((news.name ?? id) !== output.name)
|
|
144
|
+
return { action: "replace" };
|
|
145
|
+
const { hash } = yield* prepare(id, news, newBindings);
|
|
146
|
+
return hash !== output.hash ? { action: "update" } : undefined;
|
|
147
|
+
}),
|
|
148
|
+
read: Effect.fn(function* ({ output }) {
|
|
149
|
+
if (output === undefined)
|
|
150
|
+
return undefined;
|
|
151
|
+
const found = yield* functions
|
|
152
|
+
.functionGetById({ functionId: output.functionId })
|
|
153
|
+
.pipe(Effect.catchTag("FunctionNotFound", () => Effect.undefined));
|
|
154
|
+
return found?.function ? output : undefined;
|
|
155
|
+
}),
|
|
156
|
+
reconcile: Effect.fn(function* ({ id, news, output, session, bindings, }) {
|
|
157
|
+
const { port, tag, app, image, definition, secretIds, env: programEnv, hash, } = yield* prepare(id, news, bindings);
|
|
158
|
+
for (const warning of image.warnings)
|
|
159
|
+
yield* session.note(warning);
|
|
160
|
+
const secretName = output?.secretName ?? `${yield* objectName(id, undefined, 58)}-env`;
|
|
161
|
+
// Sync the program's env (bindings' credentials included) into the
|
|
162
|
+
// secret the function attaches; values never enter the image.
|
|
163
|
+
const env = {
|
|
164
|
+
ALCHEMY_STACK_NAME: stack.name,
|
|
165
|
+
ALCHEMY_STAGE: stack.stage,
|
|
166
|
+
ALCHEMY_PHASE: "runtime",
|
|
167
|
+
ALCHEMY_COMMAND: JSON.stringify(image.command),
|
|
168
|
+
HOST: "0.0.0.0",
|
|
169
|
+
PORT: String(port),
|
|
170
|
+
};
|
|
171
|
+
Object.assign(env, programEnv);
|
|
172
|
+
const stored = yield* putSecret(yield* secret.secretGetOrCreate, secretName, app.environment, env);
|
|
173
|
+
// Ensure the image: Modal reuses a cached build for the same inputs.
|
|
174
|
+
const imageId = output !== undefined && output.hash === hash && output.appId === app.appId
|
|
175
|
+
? output.imageId
|
|
176
|
+
: yield* buildRuntimeImage(app.appId, image, {
|
|
177
|
+
builderVersion: news.builderVersion,
|
|
178
|
+
gpu: news.gpu,
|
|
179
|
+
note: session.note,
|
|
180
|
+
});
|
|
181
|
+
const mountIds = [yield* clientMount, yield* entrypointMount(app.appId)];
|
|
182
|
+
yield* session.note(`Deploying ${kind.type} ${tag}...`);
|
|
183
|
+
const created = yield* functions.createFunction({
|
|
184
|
+
appId: app.appId,
|
|
185
|
+
function: {
|
|
186
|
+
...definition,
|
|
187
|
+
imageId,
|
|
188
|
+
mountIds,
|
|
189
|
+
secretIds: [stored.secretId, ...secretIds],
|
|
190
|
+
},
|
|
191
|
+
existingFunctionId: output?.appId === app.appId ? output.functionId : undefined,
|
|
192
|
+
});
|
|
193
|
+
if (!created.functionId) {
|
|
194
|
+
return yield* new ModalDeployUnexpectedResponse({
|
|
195
|
+
message: `Modal returned no id for function ${tag}`,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
for (const warning of created.serverWarnings ?? []) {
|
|
199
|
+
if (warning.message)
|
|
200
|
+
yield* session.note(warning.message);
|
|
201
|
+
}
|
|
202
|
+
// A class function needs its class: its containers hydrate it from
|
|
203
|
+
// the App layout, under the function's name.
|
|
204
|
+
const classId = definition.isClass
|
|
205
|
+
? (yield* classes.createClass({
|
|
206
|
+
appId: app.appId,
|
|
207
|
+
existingClassId: output?.appId === app.appId ? output.classId : undefined,
|
|
208
|
+
onlyClassFunction: true,
|
|
209
|
+
})).classId
|
|
210
|
+
: undefined;
|
|
211
|
+
yield* publishFunction(app, tag, {
|
|
212
|
+
functionId: created.functionId,
|
|
213
|
+
definitionId: created.handleMetadata?.definitionId,
|
|
214
|
+
classId,
|
|
215
|
+
});
|
|
216
|
+
return {
|
|
217
|
+
attributes: {
|
|
218
|
+
functionId: created.functionId,
|
|
219
|
+
name: tag,
|
|
220
|
+
appId: app.appId,
|
|
221
|
+
appName: app.appName,
|
|
222
|
+
environment: app.environment,
|
|
223
|
+
imageId,
|
|
224
|
+
secretId: stored.secretId,
|
|
225
|
+
secretName,
|
|
226
|
+
port,
|
|
227
|
+
command: image.command,
|
|
228
|
+
hash,
|
|
229
|
+
classId,
|
|
230
|
+
},
|
|
231
|
+
metadata: created.handleMetadata,
|
|
232
|
+
};
|
|
233
|
+
}),
|
|
234
|
+
delete: Effect.fn(function* ({ output }) {
|
|
235
|
+
// Republish the App without the function; stopping the App (its own
|
|
236
|
+
// resource) is what removes everything else.
|
|
237
|
+
yield* publishFunction(output, output.name, undefined).pipe(Effect.catchTag("AppNotFound", () => Effect.void));
|
|
238
|
+
yield* secret
|
|
239
|
+
.deleteSecret({ secretId: output.secretId })
|
|
240
|
+
.pipe(Effect.catchTag("SecretNotFound", () => Effect.void));
|
|
241
|
+
// The image stays: Modal content-addresses builds, so another
|
|
242
|
+
// function or sandbox may boot from the same image id.
|
|
243
|
+
}),
|
|
244
|
+
};
|
|
245
|
+
});
|
|
246
|
+
//# sourceMappingURL=Runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Runtime.js","sources":["../../src/internal/Runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Tags } from "alchemy/Tags";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
/**
|
|
4
|
+
* Modal tag keys and values must match `^[a-zA-Z0-9._-]{1,63}$`, so
|
|
5
|
+
* Alchemy's `alchemy::stack` / `alchemy::stage` / `alchemy::id` ownership
|
|
6
|
+
* tags are stored as `alchemy.stack` / `alchemy.stage` / `alchemy.id`, and
|
|
7
|
+
* their values are rewritten into that character set (`/` in a nested
|
|
8
|
+
* logical ID becomes `__`).
|
|
9
|
+
*/
|
|
10
|
+
export declare const ALCHEMY_TAG_PREFIX = "alchemy.";
|
|
11
|
+
/** Alchemy's ownership tags in Modal's tag format. */
|
|
12
|
+
export declare const createModalInternalTags: (id: string) => Effect.Effect<{
|
|
13
|
+
[k: string]: string;
|
|
14
|
+
}, never, import("alchemy/Stack").Stack | import("alchemy/Stage").Stage>;
|
|
15
|
+
/** Whether observed Modal tags carry this resource's ownership tags. */
|
|
16
|
+
export declare const hasModalAlchemyTags: (id: string, tags: Tags | undefined) => Effect.Effect<boolean, never, import("alchemy/Stack").Stack | import("alchemy/Stage").Stage>;
|
|
17
|
+
/** Whether observed Modal tags carry any Alchemy ownership tag. */
|
|
18
|
+
export declare const isAlchemyTagged: (tags: Readonly<Record<string, string | undefined>> | undefined) => boolean;
|
|
19
|
+
//# sourceMappingURL=Tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tags.d.ts","sources":["../../src/internal/Tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,IAAI,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,aAAa,CAAC;AAiB7C,sDAAsD;AACtD,eAAO,MAAM,uBAAuB;;wEAKlC,CAAC;AAEH,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,sIAE9B,CAAC;AAEH,mEAAmE;AACnE,eAAO,MAAM,eAAe,SACpB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,KAC7D,OAAoF,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { createInternalTags, hasTags } from "alchemy/Tags";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
/**
|
|
4
|
+
* Modal tag keys and values must match `^[a-zA-Z0-9._-]{1,63}$`, so
|
|
5
|
+
* Alchemy's `alchemy::stack` / `alchemy::stage` / `alchemy::id` ownership
|
|
6
|
+
* tags are stored as `alchemy.stack` / `alchemy.stage` / `alchemy.id`, and
|
|
7
|
+
* their values are rewritten into that character set (`/` in a nested
|
|
8
|
+
* logical ID becomes `__`).
|
|
9
|
+
*/
|
|
10
|
+
export const ALCHEMY_TAG_PREFIX = "alchemy.";
|
|
11
|
+
const INTERNAL_PREFIX = "alchemy::";
|
|
12
|
+
const toModalKey = (key) => key.startsWith(INTERNAL_PREFIX)
|
|
13
|
+
? `${ALCHEMY_TAG_PREFIX}${key.slice(INTERNAL_PREFIX.length)}`
|
|
14
|
+
: key;
|
|
15
|
+
const toModalValue = (value) => {
|
|
16
|
+
const cleaned = value
|
|
17
|
+
.replaceAll("/", "__")
|
|
18
|
+
.replace(/[^A-Za-z0-9._-]/g, "-")
|
|
19
|
+
.slice(0, 63);
|
|
20
|
+
return cleaned.length > 0 ? cleaned : "-";
|
|
21
|
+
};
|
|
22
|
+
/** Alchemy's ownership tags in Modal's tag format. */
|
|
23
|
+
export const createModalInternalTags = Effect.fn(function* (id) {
|
|
24
|
+
const tags = yield* createInternalTags(id);
|
|
25
|
+
return Object.fromEntries(Object.entries(tags).map(([key, value]) => [toModalKey(key), toModalValue(value)]));
|
|
26
|
+
});
|
|
27
|
+
/** Whether observed Modal tags carry this resource's ownership tags. */
|
|
28
|
+
export const hasModalAlchemyTags = Effect.fn(function* (id, tags) {
|
|
29
|
+
return hasTags(yield* createModalInternalTags(id), tags);
|
|
30
|
+
});
|
|
31
|
+
/** Whether observed Modal tags carry any Alchemy ownership tag. */
|
|
32
|
+
export const isAlchemyTagged = (tags) => Object.keys(tags ?? {}).some((key) => key.startsWith(ALCHEMY_TAG_PREFIX));
|
|
33
|
+
//# sourceMappingURL=Tags.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tags.js","sources":["../../src/internal/Tags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAa,MAAM,cAAc,CAAC;AACtE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAE7C,MAAM,eAAe,GAAG,WAAW,CAAC;AAEpC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE,CACzC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC;IAC7B,CAAC,CAAC,GAAG,kBAAkB,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;IAC7D,CAAC,CAAC,GAAG,CAAC;AAEV,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE;IAC7C,MAAM,OAAO,GAAG,KAAK;SAClB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;SACrB,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAC5C,CAAC,CAAC;AAEF,sDAAsD;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAU;IACpE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CACnF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,wEAAwE;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAU,EAAE,IAAsB;IACxF,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,uBAAuB,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,mEAAmE;AACnE,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAA8D,EACrD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Socket from "effect/socket/Socket";
|
|
3
|
+
/**
|
|
4
|
+
* A TCP socket to `host:port`, over TLS when `tls` is set: `cloudflare:sockets`
|
|
5
|
+
* on workerd, Node's `net`/`tls` elsewhere. It connects when run.
|
|
6
|
+
*/
|
|
7
|
+
export declare const connectTcp: (options: {
|
|
8
|
+
readonly host: string;
|
|
9
|
+
readonly port: number;
|
|
10
|
+
readonly tls: boolean;
|
|
11
|
+
}) => Effect.Effect<Socket.Socket>;
|
|
12
|
+
//# sourceMappingURL=TcpConnect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TcpConnect.d.ts","sources":["../../src/internal/TcpConnect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,sBAAsB,CAAC;AA6D/C;;;GAGG;AACH,eAAO,MAAM,UAAU,YAAa;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CACvB,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAO5B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx, extraExtensions, ignoreCase) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
if (extraExtensions) {
|
|
4
|
+
for (var extension in extraExtensions) {
|
|
5
|
+
var suffix = path.slice(-extension.length);
|
|
6
|
+
if (suffix === extension || ignoreCase && suffix.toLowerCase() === extension.toLowerCase()) {
|
|
7
|
+
var output = extraExtensions[extension];
|
|
8
|
+
return output === extension ? path : path.slice(0, -extension.length) + output;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
13
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return path;
|
|
17
|
+
};
|
|
18
|
+
import * as Effect from "effect/Effect";
|
|
19
|
+
import * as Socket from "effect/socket/Socket";
|
|
20
|
+
import { isWorkerd } from "./Transport.js";
|
|
21
|
+
// Non-literal specifiers keep a bundler from pulling one runtime's sockets
|
|
22
|
+
// into the other's bundle: workerd resolves `cloudflare:sockets` at runtime,
|
|
23
|
+
// and Node resolves its built-ins.
|
|
24
|
+
const CLOUDFLARE_SOCKETS = "cloudflare:sockets";
|
|
25
|
+
const NODE_NET = "node:net";
|
|
26
|
+
const NODE_TLS = "node:tls";
|
|
27
|
+
const NODE_STREAM = "node:stream";
|
|
28
|
+
const importModule = (specifier) => Effect.tryPromise({
|
|
29
|
+
try: () => import(__rewriteRelativeImportExtension(/* @vite-ignore */ specifier)),
|
|
30
|
+
catch: (cause) => Socket.SocketError.make({ reason: Socket.SocketOpenError.make({ kind: "Unknown", cause }) }),
|
|
31
|
+
});
|
|
32
|
+
const openCloudflare = (host, port, tls) => Effect.acquireRelease(Effect.map(importModule(CLOUDFLARE_SOCKETS), ({ connect }) => connect({ hostname: host, port }, { secureTransport: tls ? "on" : "off", allowHalfOpen: false })), (socket) => Effect.promise(() => socket.close().catch(() => undefined)));
|
|
33
|
+
const openNode = (host, port, tls) => Effect.acquireRelease(Effect.gen(function* () {
|
|
34
|
+
const { Duplex } = yield* importModule(NODE_STREAM);
|
|
35
|
+
const { connect } = yield* importModule(tls ? NODE_TLS : NODE_NET);
|
|
36
|
+
const duplex = connect(tls ? { host, port, servername: host } : { host, port });
|
|
37
|
+
return { duplex, stream: Duplex.toWeb(duplex) };
|
|
38
|
+
}), ({ duplex }) => Effect.sync(() => duplex.destroy())).pipe(Effect.map(({ stream }) => stream));
|
|
39
|
+
/**
|
|
40
|
+
* A TCP socket to `host:port`, over TLS when `tls` is set: `cloudflare:sockets`
|
|
41
|
+
* on workerd, Node's `net`/`tls` elsewhere. It connects when run.
|
|
42
|
+
*/
|
|
43
|
+
export const connectTcp = (options) => Socket.fromTransformStream(Effect.suspend(() => isWorkerd()
|
|
44
|
+
? openCloudflare(options.host, options.port, options.tls)
|
|
45
|
+
: openNode(options.host, options.port, options.tls)));
|
|
46
|
+
//# sourceMappingURL=TcpConnect.js.map
|