@alchemy.run/modal 0.0.0 → 2.0.0-beta.87
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,136 @@
|
|
|
1
|
+
import * as functions from "@distilled.cloud/modal/functions";
|
|
2
|
+
import { isResolved } from "alchemy/Diff";
|
|
3
|
+
import * as Provider from "alchemy/Provider";
|
|
4
|
+
import { Resource } from "alchemy/Resource";
|
|
5
|
+
import * as Data from "effect/Data";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import { envNameOf, environmentOf, seconds } from "./internal.js";
|
|
8
|
+
import { declarable } from "./internal/Declared.js";
|
|
9
|
+
export class FunctionAutoscalerUnexpectedResponse extends Data.TaggedError("Modal.FunctionAutoscalerUnexpectedResponse") {
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Autoscaling settings for a Modal Function deployed with Modal's Python
|
|
13
|
+
* client (`modal deploy`): warm containers, a container cap, buffer
|
|
14
|
+
* containers and scale-down timing, changed without redeploying the app.
|
|
15
|
+
*
|
|
16
|
+
* For a `Modal.Function` or `Modal.Server` of the Stack, set these on the
|
|
17
|
+
* resource itself. This resource adjusts a function deployed outside the
|
|
18
|
+
* Stack, and restores
|
|
19
|
+
* the settings it found when destroyed. Modal resets overrides like these
|
|
20
|
+
* when the app is redeployed, so redeploying the app and then this stack
|
|
21
|
+
* applies them again.
|
|
22
|
+
*
|
|
23
|
+
* ### Keeping containers warm
|
|
24
|
+
* **Example:** Two warm containers during business hours
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import * as Modal from "@alchemy.run/modal";
|
|
27
|
+
*
|
|
28
|
+
* export const Warm = Modal.FunctionAutoscaler("Warm", {
|
|
29
|
+
* app: "inference",
|
|
30
|
+
* function: "Model.*",
|
|
31
|
+
* minContainers: 2,
|
|
32
|
+
* bufferContainers: 1,
|
|
33
|
+
* scaledownWindow: "5 minutes",
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*
|
|
37
|
+
* @resource
|
|
38
|
+
* @product Function
|
|
39
|
+
*/
|
|
40
|
+
export const FunctionAutoscaler = declarable()(Resource("Modal.FunctionAutoscaler"));
|
|
41
|
+
const fromWire = (s) => ({
|
|
42
|
+
minContainers: s?.minContainers,
|
|
43
|
+
maxContainers: s?.maxContainers,
|
|
44
|
+
bufferContainers: s?.bufferContainers,
|
|
45
|
+
scaledownWindow: s?.scaledownWindow,
|
|
46
|
+
scaleupWindow: s?.scaleupWindow,
|
|
47
|
+
targetConcurrency: s?.targetConcurrency,
|
|
48
|
+
});
|
|
49
|
+
const toWire = (s) => ({
|
|
50
|
+
minContainers: s.minContainers,
|
|
51
|
+
maxContainers: s.maxContainers,
|
|
52
|
+
bufferContainers: s.bufferContainers,
|
|
53
|
+
scaledownWindow: s.scaledownWindow,
|
|
54
|
+
scaleupWindow: s.scaleupWindow,
|
|
55
|
+
targetConcurrency: s.targetConcurrency,
|
|
56
|
+
});
|
|
57
|
+
const desiredOf = (news) => ({
|
|
58
|
+
minContainers: news.minContainers,
|
|
59
|
+
maxContainers: news.maxContainers,
|
|
60
|
+
bufferContainers: news.bufferContainers,
|
|
61
|
+
scaledownWindow: seconds(news.scaledownWindow),
|
|
62
|
+
scaleupWindow: seconds(news.scaleupWindow),
|
|
63
|
+
targetConcurrency: news.targetConcurrency,
|
|
64
|
+
});
|
|
65
|
+
export const FunctionAutoscalerProvider = () => Provider.effect(FunctionAutoscaler, Effect.gen(function* () {
|
|
66
|
+
const lookup = Effect.fn(function* (news) {
|
|
67
|
+
const found = yield* functions
|
|
68
|
+
.getFunction({
|
|
69
|
+
appName: news.app,
|
|
70
|
+
objectTag: news.function,
|
|
71
|
+
environmentName: environmentOf(envNameOf(news.environment)),
|
|
72
|
+
})
|
|
73
|
+
.pipe(Effect.catchTag("FunctionNotFound", () => Effect.undefined));
|
|
74
|
+
return found?.functionId;
|
|
75
|
+
});
|
|
76
|
+
const current = Effect.fn(function* (functionId) {
|
|
77
|
+
const { autoscalerConfiguration } = yield* functions.functionGetSchedulingParams({
|
|
78
|
+
functionId,
|
|
79
|
+
});
|
|
80
|
+
return autoscalerConfiguration;
|
|
81
|
+
});
|
|
82
|
+
return {
|
|
83
|
+
stables: ["functionId", "original"],
|
|
84
|
+
diff: Effect.fn(function* ({ news, olds }) {
|
|
85
|
+
if (!isResolved(news))
|
|
86
|
+
return undefined;
|
|
87
|
+
if (news.app !== olds?.app ||
|
|
88
|
+
news.function !== olds?.function ||
|
|
89
|
+
envNameOf(news.environment) !== envNameOf(olds?.environment)) {
|
|
90
|
+
return { action: "replace" };
|
|
91
|
+
}
|
|
92
|
+
return undefined;
|
|
93
|
+
}),
|
|
94
|
+
read: Effect.fn(function* ({ olds, output }) {
|
|
95
|
+
if (output === undefined || olds === undefined)
|
|
96
|
+
return undefined;
|
|
97
|
+
const config = yield* current(output.functionId).pipe(Effect.catchTag("FunctionNotFound", () => Effect.undefined));
|
|
98
|
+
if (!config)
|
|
99
|
+
return undefined;
|
|
100
|
+
return { ...output, settings: fromWire(config.settings) };
|
|
101
|
+
}),
|
|
102
|
+
reconcile: Effect.fn(function* ({ news, output, session }) {
|
|
103
|
+
// Observe: the function (by name; its id changes on redeploy) and
|
|
104
|
+
// the settings in effect.
|
|
105
|
+
const functionId = yield* lookup(news);
|
|
106
|
+
if (!functionId) {
|
|
107
|
+
return yield* new FunctionAutoscalerUnexpectedResponse({
|
|
108
|
+
message: `Modal function ${news.app}.${news.function} isn't deployed${envNameOf(news.environment) ? ` in ${envNameOf(news.environment)}` : ""}`,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
const config = yield* current(functionId);
|
|
112
|
+
const observed = fromWire(config?.settings);
|
|
113
|
+
const original = output?.original ?? fromWire(config?.staticSettings ?? config?.settings);
|
|
114
|
+
// Sync only the settings that differ.
|
|
115
|
+
const desired = desiredOf(news);
|
|
116
|
+
const changed = Object.keys(desired).some((key) => desired[key] !== undefined && desired[key] !== observed[key]);
|
|
117
|
+
if (!changed)
|
|
118
|
+
return { functionId, settings: observed, original };
|
|
119
|
+
yield* session.note(`Updating autoscaler of ${news.app}.${news.function}...`);
|
|
120
|
+
const { currentSettings } = yield* functions.functionUpdateSchedulingParams({
|
|
121
|
+
functionId,
|
|
122
|
+
settings: toWire(desired),
|
|
123
|
+
});
|
|
124
|
+
return { functionId, settings: fromWire(currentSettings), original };
|
|
125
|
+
}),
|
|
126
|
+
delete: Effect.fn(function* ({ output }) {
|
|
127
|
+
yield* functions
|
|
128
|
+
.functionUpdateSchedulingParams({
|
|
129
|
+
functionId: output.functionId,
|
|
130
|
+
settings: toWire(output.original),
|
|
131
|
+
})
|
|
132
|
+
.pipe(Effect.catchTag("FunctionNotFound", () => Effect.void));
|
|
133
|
+
}),
|
|
134
|
+
};
|
|
135
|
+
}));
|
|
136
|
+
//# sourceMappingURL=FunctionAutoscaler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FunctionAutoscaler.js","sources":["../src/FunctionAutoscaler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as functions from "@distilled.cloud/modal/functions";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import { type ErrorOf, type OpError } from "./internal.ts";
|
|
4
|
+
import type { OperationServices } from "./internal.ts";
|
|
5
|
+
import type { FunctionRef, FunctionTarget } from "./InvokeFunction.ts";
|
|
6
|
+
import * as ModalBindings from "./ModalBindings.ts";
|
|
7
|
+
export declare const isFunctionRef: (target: unknown) => target is FunctionRef;
|
|
8
|
+
/** A resolved target: its function id (looked up once) and the class method, if any. */
|
|
9
|
+
export interface ResolvedFunction {
|
|
10
|
+
readonly functionId: Effect.Effect<string, FunctionLookupError>;
|
|
11
|
+
readonly method: string | undefined;
|
|
12
|
+
}
|
|
13
|
+
declare const FunctionParameterMissing_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
14
|
+
readonly _tag: "Modal.FunctionParameterMissing";
|
|
15
|
+
} & Readonly<A>;
|
|
16
|
+
/** A parameter value missing from a parameterized class call. */
|
|
17
|
+
export declare class FunctionParameterMissing extends FunctionParameterMissing_base<{
|
|
18
|
+
readonly message: string;
|
|
19
|
+
}> {
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Serialize class parameters as Modal's `ClassParameterSet`, in the class's
|
|
23
|
+
* schema order with its defaults applied, as Modal's clients do: the bytes
|
|
24
|
+
* identify the bound function.
|
|
25
|
+
*/
|
|
26
|
+
declare const serializeParameters: (schema: readonly functions.ClassParameterSpec[], values: Record<string, string | number | boolean | Uint8Array<ArrayBufferLike>>) => Effect.Effect<string, FunctionParameterMissing, never>;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve a target in the construction phase. A resource of the Stack
|
|
29
|
+
* carries its id; a name is looked up on first use and cached (the id only
|
|
30
|
+
* changes when the App is redeployed).
|
|
31
|
+
*/
|
|
32
|
+
/** The operations that look a function up by name, resolved by `ModalBindings.withCredentials`. */
|
|
33
|
+
export declare const FunctionLookupOps: Effect.Effect<{
|
|
34
|
+
readonly get: (input: functions.GetFunctionRequest) => Effect.Effect<functions.GetFunctionResponse, functions.GetFunctionError, never>;
|
|
35
|
+
readonly bindParams: (input: functions.FunctionBindParamsRequest) => Effect.Effect<functions.FunctionBindParamsResponse, functions.FunctionBindParamsError, never>;
|
|
36
|
+
}, never, OperationServices>;
|
|
37
|
+
export type FunctionLookupOps = Effect.Success<typeof FunctionLookupOps>;
|
|
38
|
+
/** Looking a function up by name (and binding a class's parameters). */
|
|
39
|
+
export type FunctionLookupError = OpError<FunctionLookupOps, "get" | "bindParams"> | ErrorOf<typeof serializeParameters>;
|
|
40
|
+
export declare const resolveFunction: (lookup: {
|
|
41
|
+
readonly get: (input: functions.GetFunctionRequest) => Effect.Effect<functions.GetFunctionResponse, functions.GetFunctionError, never>;
|
|
42
|
+
readonly bindParams: (input: functions.FunctionBindParamsRequest) => Effect.Effect<functions.FunctionBindParamsResponse, functions.FunctionBindParamsError, never>;
|
|
43
|
+
}, target: {
|
|
44
|
+
readonly functionId: unknown;
|
|
45
|
+
} | FunctionTarget) => Effect.Effect<{
|
|
46
|
+
functionId: Effect.Effect<string, import("@distilled.cloud/core/errors").BadGateway | import("@distilled.cloud/core/config").ConfigError | functions.FunctionNotFound | FunctionParameterMissing | import("@distilled.cloud/core/errors").GatewayTimeout | import("effect/http/HttpClientError").HttpClientError | import("@distilled.cloud/core/errors").InternalServerError | import("@distilled.cloud/core/protocol-http").InvalidInput | import("@distilled.cloud/modal/Errors").ModalParseError | import("@distilled.cloud/core/sdk-error").SdkError | import("@distilled.cloud/core/errors").ServiceUnavailable | import("@distilled.cloud/core/errors").TooManyRequests | import("@distilled.cloud/core/errors").Unauthorized | import("@distilled.cloud/modal/Errors").UnknownModalError, never>;
|
|
47
|
+
method: string | undefined;
|
|
48
|
+
}, never, never>;
|
|
49
|
+
/**
|
|
50
|
+
* A binding layer over a function target: grants the host's identity `role`
|
|
51
|
+
* on the function's environment (deploy only), resolves the target, and
|
|
52
|
+
* builds the client over `operations`.
|
|
53
|
+
*/
|
|
54
|
+
export declare const makeFunctionBinding: <Target, Ops, Client>(options: {
|
|
55
|
+
readonly tag: string;
|
|
56
|
+
readonly operations: Effect.Effect<Ops, never, OperationServices>;
|
|
57
|
+
readonly role: ModalBindings.EnvironmentGrant["role"];
|
|
58
|
+
readonly make: (resolved: ResolvedFunction, ops: Ops, target: Target) => Effect.Effect<Client>;
|
|
59
|
+
}) => Effect.Effect<(target: Target) => Effect.Effect<Client, never, never>, never, never>;
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=FunctionTarget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FunctionTarget.d.ts","sources":["../src/FunctionTarget.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,SAAS,MAAM,kCAAkC,CAAC;AAG9D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAiB,KAAK,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,eAAe,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AAQpD,eAAO,MAAM,aAAa,WAAY,OAAO,KAAG,MAAM,IAAI,WAIJ,CAAC;AAEvD,wFAAwF;AACxF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAChE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;;;;AAED,iEAAiE;AACjE,qBAAa,wBAAyB,SAAQ,8BAAmD;IAC/F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG;AASL;;;;GAIG;AACH,QAAA,MAAM,mBAAmB,8LAqCvB,CAAC;AAEH;;;;GAIG;AACH,mGAAmG;AACnG,eAAO,MAAM,iBAAiB;;;4BAG5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEzE,wEAAwE;AACxE,MAAM,MAAM,mBAAmB,GAC3B,OAAO,CAAC,iBAAiB,EAAE,KAAK,GAAG,YAAY,CAAC,GAChD,OAAO,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAExC,eAAO,MAAM,eAAe;;;;yBAEsB,OAAO;;;;gBAuCvD,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,EAAE,GAAG,EAAE,MAAM,WAAW;IAChE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAClE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CAChG,yFAsBG,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { serializeClassParameters, } from "@distilled.cloud/modal/ClassParameters";
|
|
2
|
+
import * as functions from "@distilled.cloud/modal/functions";
|
|
3
|
+
import * as Data from "effect/Data";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import { environmentOf, operations } from "./internal.js";
|
|
6
|
+
import * as ModalBindings from "./ModalBindings.js";
|
|
7
|
+
/*
|
|
8
|
+
* Shared scaffolding for bindings on a function (a `Modal.Function` or
|
|
9
|
+
* `Modal.Server` of the Stack, or a deployed function by name). NOT exported
|
|
10
|
+
* from `index.ts`.
|
|
11
|
+
*/
|
|
12
|
+
export const isFunctionRef = (target) => typeof target === "object" &&
|
|
13
|
+
target !== null &&
|
|
14
|
+
typeof target.app === "string" &&
|
|
15
|
+
typeof target.function === "string";
|
|
16
|
+
/** A parameter value missing from a parameterized class call. */
|
|
17
|
+
export class FunctionParameterMissing extends Data.TaggedError("Modal.FunctionParameterMissing") {
|
|
18
|
+
}
|
|
19
|
+
const PARAM_TYPE = {
|
|
20
|
+
string: "PARAM_TYPE_STRING",
|
|
21
|
+
number: "PARAM_TYPE_INT",
|
|
22
|
+
boolean: "PARAM_TYPE_BOOL",
|
|
23
|
+
bytes: "PARAM_TYPE_BYTES",
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Serialize class parameters as Modal's `ClassParameterSet`, in the class's
|
|
27
|
+
* schema order with its defaults applied, as Modal's clients do: the bytes
|
|
28
|
+
* identify the bound function.
|
|
29
|
+
*/
|
|
30
|
+
const serializeParameters = Effect.fn(function* (schema, values) {
|
|
31
|
+
const parameters = [];
|
|
32
|
+
for (const spec of schema) {
|
|
33
|
+
const name = spec.name ?? "";
|
|
34
|
+
const value = values[name];
|
|
35
|
+
if (value === undefined) {
|
|
36
|
+
if (!spec.hasDefault) {
|
|
37
|
+
return yield* new FunctionParameterMissing({ message: `Missing class parameter ${name}` });
|
|
38
|
+
}
|
|
39
|
+
parameters.push({
|
|
40
|
+
name,
|
|
41
|
+
type: spec.type ?? "PARAM_TYPE_UNSPECIFIED",
|
|
42
|
+
stringValue: spec.stringDefault,
|
|
43
|
+
intValue: spec.intDefault,
|
|
44
|
+
bytesValue: spec.bytesDefault,
|
|
45
|
+
boolValue: spec.boolDefault,
|
|
46
|
+
});
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
parameters.push(typeof value === "string"
|
|
50
|
+
? { name, type: PARAM_TYPE.string, stringValue: value }
|
|
51
|
+
: typeof value === "number"
|
|
52
|
+
? { name, type: PARAM_TYPE.number, intValue: String(Math.trunc(value)) }
|
|
53
|
+
: typeof value === "boolean"
|
|
54
|
+
? { name, type: PARAM_TYPE.boolean, boolValue: value }
|
|
55
|
+
: {
|
|
56
|
+
name,
|
|
57
|
+
type: PARAM_TYPE.bytes,
|
|
58
|
+
bytesValue: Buffer.from(value).toString("base64"),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return yield* Effect.sync(() => serializeClassParameters(parameters));
|
|
62
|
+
});
|
|
63
|
+
/**
|
|
64
|
+
* Resolve a target in the construction phase. A resource of the Stack
|
|
65
|
+
* carries its id; a name is looked up on first use and cached (the id only
|
|
66
|
+
* changes when the App is redeployed).
|
|
67
|
+
*/
|
|
68
|
+
/** The operations that look a function up by name, resolved by `ModalBindings.withCredentials`. */
|
|
69
|
+
export const FunctionLookupOps = operations({
|
|
70
|
+
get: functions.getFunction,
|
|
71
|
+
bindParams: functions.functionBindParams,
|
|
72
|
+
});
|
|
73
|
+
export const resolveFunction = Effect.fn(function* (lookup, target) {
|
|
74
|
+
if (!isFunctionRef(target)) {
|
|
75
|
+
const functionId = yield* target.functionId;
|
|
76
|
+
return { functionId, method: undefined };
|
|
77
|
+
}
|
|
78
|
+
const [tag, method] = target.function.includes(".")
|
|
79
|
+
? [`${target.function.split(".")[0]}.*`, target.function.split(".").slice(1).join(".")]
|
|
80
|
+
: [target.function, undefined];
|
|
81
|
+
let cached;
|
|
82
|
+
const functionId = Effect.suspend(() => cached !== undefined
|
|
83
|
+
? Effect.succeed(cached)
|
|
84
|
+
: Effect.gen(function* () {
|
|
85
|
+
const environmentName = environmentOf(target.environment);
|
|
86
|
+
const found = yield* lookup.get({
|
|
87
|
+
appName: target.app,
|
|
88
|
+
objectTag: tag,
|
|
89
|
+
environmentName,
|
|
90
|
+
});
|
|
91
|
+
let id = found.functionId ?? "";
|
|
92
|
+
// A parameterized class runs a bound function per parameter set.
|
|
93
|
+
if (target.parameters !== undefined) {
|
|
94
|
+
const schema = found.handleMetadata?.classParameterInfo?.schema ?? [];
|
|
95
|
+
const serializedParams = yield* serializeParameters(schema, target.parameters);
|
|
96
|
+
const bound = yield* lookup.bindParams({
|
|
97
|
+
functionId: id,
|
|
98
|
+
serializedParams,
|
|
99
|
+
environmentName,
|
|
100
|
+
});
|
|
101
|
+
id = bound.boundFunctionId ?? id;
|
|
102
|
+
}
|
|
103
|
+
cached = id;
|
|
104
|
+
return id;
|
|
105
|
+
}));
|
|
106
|
+
return { functionId, method };
|
|
107
|
+
});
|
|
108
|
+
/**
|
|
109
|
+
* A binding layer over a function target: grants the host's identity `role`
|
|
110
|
+
* on the function's environment (deploy only), resolves the target, and
|
|
111
|
+
* builds the client over `operations`.
|
|
112
|
+
*/
|
|
113
|
+
export const makeFunctionBinding = (options) => Effect.gen(function* () {
|
|
114
|
+
const lookup = yield* ModalBindings.withCredentials(FunctionLookupOps);
|
|
115
|
+
const ops = yield* ModalBindings.withCredentials(options.operations);
|
|
116
|
+
const bind = yield* ModalBindings.Bind;
|
|
117
|
+
return Effect.fn(options.tag)(function* (target) {
|
|
118
|
+
if (!globalThis.__ALCHEMY_RUNTIME__) {
|
|
119
|
+
if (isFunctionRef(target)) {
|
|
120
|
+
yield* bind `${options.tag}`({
|
|
121
|
+
roles: [{ environment: target.environment, role: options.role }],
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
const environment = target
|
|
126
|
+
.environment;
|
|
127
|
+
yield* bind `${options.tag}(${target})`({
|
|
128
|
+
roles: [{ environment, role: options.role }],
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const resolved = yield* resolveFunction(lookup, target);
|
|
133
|
+
return yield* options.make(resolved, ops, target);
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=FunctionTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FunctionTarget.js","sources":["../src/FunctionTarget.ts"],"names":[],"mappings":"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"}
|
package/lib/Image.d.ts
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import type { InlineDockerfile } from "@alchemy.run/docker/Dockerfile";
|
|
2
|
+
import * as image from "@distilled.cloud/modal/image";
|
|
3
|
+
import * as Provider from "alchemy/Provider";
|
|
4
|
+
import { Resource } from "alchemy/Resource";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import type { Providers } from "./Providers.ts";
|
|
7
|
+
declare const ImageSetupFailed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
8
|
+
readonly _tag: "Modal.ImageSetupFailed";
|
|
9
|
+
} & Readonly<A>;
|
|
10
|
+
/** A `run` command of a warm-base image exited non-zero. */
|
|
11
|
+
export declare class ImageSetupFailed extends ImageSetupFailed_base<{
|
|
12
|
+
readonly command: string;
|
|
13
|
+
readonly exitCode: number;
|
|
14
|
+
readonly message: string;
|
|
15
|
+
}> {
|
|
16
|
+
}
|
|
17
|
+
export interface ImageProps {
|
|
18
|
+
/** The App the image is built in (`Modal.App`). Images are cached per workspace. */
|
|
19
|
+
app: {
|
|
20
|
+
readonly appId: string;
|
|
21
|
+
readonly name?: string;
|
|
22
|
+
readonly environment?: string;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Start from a registry image (`node:22-slim`, `ghcr.io/org/base:1`).
|
|
26
|
+
* Exclusive with {@link dockerfile} and {@link from}.
|
|
27
|
+
*/
|
|
28
|
+
image?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Build from a Dockerfile: a path, or inline content
|
|
31
|
+
* (`Dockerfile.inline\`…\``). Modal's builder runs it, not Docker: a
|
|
32
|
+
* multi-stage build, BuildKit mounts, heredocs, `EXPOSE`, `HEALTHCHECK`,
|
|
33
|
+
* `LABEL`, `ONBUILD`, `STOPSIGNAL` and `VOLUME` fail at plan; `USER` is
|
|
34
|
+
* ignored (containers run as root) with a warning.
|
|
35
|
+
*/
|
|
36
|
+
dockerfile?: string | InlineDockerfile;
|
|
37
|
+
/** Build context for the Dockerfile's COPY/ADD sources. */
|
|
38
|
+
context?: string;
|
|
39
|
+
/** Start from another `Modal.Image` (a warm base built on a base). */
|
|
40
|
+
from?: {
|
|
41
|
+
readonly imageId: string;
|
|
42
|
+
};
|
|
43
|
+
/** Dockerfile lines appended to the build (`"RUN pip install pandas"`). */
|
|
44
|
+
commands?: string[];
|
|
45
|
+
/**
|
|
46
|
+
* Shell commands run in a sandbox booted from the built image; its
|
|
47
|
+
* filesystem is then snapshotted into this image. Use it for setup that
|
|
48
|
+
* needs network or secrets at runtime (cloning a repo, installing
|
|
49
|
+
* dependencies), the deploy-time warm base sandboxes fork from.
|
|
50
|
+
*/
|
|
51
|
+
run?: string[];
|
|
52
|
+
/** Secrets the build (and `run`) sees as environment variables. */
|
|
53
|
+
secrets?: Array<{
|
|
54
|
+
readonly secretId: string;
|
|
55
|
+
}>;
|
|
56
|
+
/** Pull a private base image with credentials stored in a `Modal.Secret`. */
|
|
57
|
+
registry?: {
|
|
58
|
+
readonly type: "aws" | "gcp" | "static";
|
|
59
|
+
readonly secret: {
|
|
60
|
+
readonly secretId: string;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
/** Run build steps on a GPU (`"A10G"`, `"H100"`). */
|
|
64
|
+
gpu?: string;
|
|
65
|
+
/** Pin Modal's image builder version (`"2025.06"`). */
|
|
66
|
+
builderVersion?: string;
|
|
67
|
+
/**
|
|
68
|
+
* Publish the image under this tag in its app's environment, so code
|
|
69
|
+
* outside the Stack finds it with `images.fromTag(tag)` or
|
|
70
|
+
* `modal.Image.from_tag`.
|
|
71
|
+
*/
|
|
72
|
+
tag?: string;
|
|
73
|
+
}
|
|
74
|
+
export interface ImageAttributes {
|
|
75
|
+
/** Image ID (`im-…`): pass it as `image` when creating sandboxes. */
|
|
76
|
+
imageId: string;
|
|
77
|
+
/** The App the image was built in; `CreateSandbox(image)` creates sandboxes there. */
|
|
78
|
+
appId: string;
|
|
79
|
+
/** Name of that App (for finding its sandboxes by name). */
|
|
80
|
+
appName: string | undefined;
|
|
81
|
+
/** Environment of that App. */
|
|
82
|
+
environment: string | undefined;
|
|
83
|
+
/** Content hash of the build inputs; a change rebuilds. */
|
|
84
|
+
hash: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* A Modal Image: a container image built by Modal's own builder (not
|
|
88
|
+
* Docker), from a registry image, a Dockerfile, or another Modal Image plus
|
|
89
|
+
* commands. Sandboxes boot from it.
|
|
90
|
+
*
|
|
91
|
+
* With `run`, the image becomes a warm base: Alchemy boots a sandbox from the
|
|
92
|
+
* built image, runs the commands, snapshots its filesystem, and terminates
|
|
93
|
+
* it. Sandboxes created from the result start with the repo cloned and
|
|
94
|
+
* dependencies installed. Runtime snapshots (`sandbox.snapshotFilesystem()`)
|
|
95
|
+
* are images too and work anywhere an image does.
|
|
96
|
+
*
|
|
97
|
+
* Modal builds remotely: deploying needs no local Docker.
|
|
98
|
+
*
|
|
99
|
+
* ### Building an Image
|
|
100
|
+
* **Example:** From a registry image with extra packages
|
|
101
|
+
* ```typescript
|
|
102
|
+
* import * as Modal from "@alchemy.run/modal";
|
|
103
|
+
*
|
|
104
|
+
* export const Coder = Modal.App("Coder", {});
|
|
105
|
+
* export const Node = Modal.Image("Node", {
|
|
106
|
+
* app: Coder,
|
|
107
|
+
* image: "node:22-bookworm",
|
|
108
|
+
* commands: ["RUN apt-get update && apt-get install -y git ripgrep"],
|
|
109
|
+
* });
|
|
110
|
+
* ```
|
|
111
|
+
*
|
|
112
|
+
* **Example:** From an inline Dockerfile
|
|
113
|
+
* ```typescript
|
|
114
|
+
* import * as Dockerfile from "@alchemy.run/docker/Dockerfile";
|
|
115
|
+
* import * as Modal from "@alchemy.run/modal";
|
|
116
|
+
*
|
|
117
|
+
* export const Coder = Modal.App("Coder", {});
|
|
118
|
+
* export const Python = Modal.Image("Python", {
|
|
119
|
+
* app: Coder,
|
|
120
|
+
* dockerfile: Dockerfile.inline`
|
|
121
|
+
* FROM python:3.12-slim
|
|
122
|
+
* RUN pip install pandas
|
|
123
|
+
* `,
|
|
124
|
+
* });
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* ### A warm base to fork from
|
|
128
|
+
* **Example:** Clone and install once, start every sandbox from it
|
|
129
|
+
* ```typescript
|
|
130
|
+
* import * as Modal from "@alchemy.run/modal";
|
|
131
|
+
*
|
|
132
|
+
* export const Coder = Modal.App("Coder", {});
|
|
133
|
+
* export const Node = Modal.Image("Node", { app: Coder, image: "node:22-bookworm" });
|
|
134
|
+
* export const Warm = Modal.Image("Warm", {
|
|
135
|
+
* app: Coder,
|
|
136
|
+
* from: Node,
|
|
137
|
+
* run: [
|
|
138
|
+
* "git clone https://github.com/alchemy-run/alchemy /work",
|
|
139
|
+
* "cd /work && corepack enable && pnpm install",
|
|
140
|
+
* ],
|
|
141
|
+
* });
|
|
142
|
+
* ```
|
|
143
|
+
*
|
|
144
|
+
* @resource
|
|
145
|
+
* @product Image
|
|
146
|
+
*/
|
|
147
|
+
export declare const Image: import("alchemy/Resource").ResourceConstructor<Image, Providers> & Effect.Effect<import("alchemy/Resource").ResourceConstructor<Image, never>, never, never> & {
|
|
148
|
+
Self: import("alchemy/Self").Self<Image>;
|
|
149
|
+
Provider: Provider.Provider<Image>;
|
|
150
|
+
Aliases: readonly string[] | undefined;
|
|
151
|
+
ref(id: string, options?: {
|
|
152
|
+
stage?: string;
|
|
153
|
+
stack?: string;
|
|
154
|
+
}): Effect.Effect<Image, never, never>;
|
|
155
|
+
} & ((id: string, props: import("./internal/Declared.ts").DeclaredProps<ImageProps>) => Effect.Effect<Image, never, Providers>);
|
|
156
|
+
export type Image = Resource<"Modal.Image", ImageProps, ImageAttributes, never, Providers>;
|
|
157
|
+
export declare const ImageProvider: () => import("effect/Layer").Layer<Provider.Provider<Image>, never, import("effect/FileSystem").FileSystem | import("effect/Path").Path | image.ModalOpContext>;
|
|
158
|
+
export {};
|
|
159
|
+
//# sourceMappingURL=Image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Image.d.ts","sources":["../src/Image.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AAEtD,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAIxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;;;;AAGhD,4DAA4D;AAC5D,qBAAa,gBAAiB,SAAQ,sBAA2C;IAC/E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG;AAEL,MAAM,WAAW,UAAU;IACzB,oFAAoF;IACpF,GAAG,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvF;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACvC,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACpC,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,mEAAmE;IACnE,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,6EAA6E;IAC7E,QAAQ,CAAC,EAAE;QACT,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAC;QACxC,QAAQ,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC;KAChD,CAAC;IACF,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,+BAA+B;IAC/B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,eAAO,MAAM,KAAK;;;;;;;;+HAAsD,CAAC;AAEzE,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAkD3F,eAAO,MAAM,aAAa,iKAoFvB,CAAC"}
|