@alchemy.run/modal 0.0.0-stage → 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 +100 -2
- 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 +75 -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,67 @@
|
|
|
1
|
+
import * as dict from "@distilled.cloud/modal/dict";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
import { makeOpenModalBinding } from "./BindingHttp.js";
|
|
5
|
+
import { CreateDict } from "./CreateDict.js";
|
|
6
|
+
import { ensureDict, lookupDict } from "./Dict.js";
|
|
7
|
+
import { DictOps, makeReadWriteDictClient } from "./DictClient.js";
|
|
8
|
+
import { environmentOf, listAll, operations } from "./internal.js";
|
|
9
|
+
import { ownedName, RuntimeOwnerOf, unownedName } from "./RuntimeOwner.js";
|
|
10
|
+
/** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
|
|
11
|
+
export const DictsOps = operations({
|
|
12
|
+
getOrCreate: dict.dictGetOrCreate,
|
|
13
|
+
delete: dict.deleteDict,
|
|
14
|
+
list: dict.listDict,
|
|
15
|
+
client: DictOps,
|
|
16
|
+
});
|
|
17
|
+
const handleOf = (attributes, ops, name) => ({
|
|
18
|
+
...makeReadWriteDictClient(Effect.succeed(attributes.dictId), ops.client),
|
|
19
|
+
dictId: Effect.succeed(attributes.dictId),
|
|
20
|
+
name,
|
|
21
|
+
attributes,
|
|
22
|
+
});
|
|
23
|
+
/** A dicts client over an environment name resolved per call. */
|
|
24
|
+
export const makeDictsClient = (environment, ops, owner = Effect.undefined) => ({
|
|
25
|
+
getOrCreate: (name) => Effect.flatMap(Effect.all([environment, owner]), ([env, stamp]) => ensureDict(ops.getOrCreate, ownedName(stamp, name), env)).pipe(Effect.map((attributes) => handleOf(attributes, ops, name))),
|
|
26
|
+
get: (name) => Effect.flatMap(Effect.all([environment, owner]), ([env, stamp]) => lookupDict(ops.getOrCreate, ownedName(stamp, name), env)).pipe(Effect.map((attributes) => (attributes ? handleOf(attributes, ops, name) : undefined))),
|
|
27
|
+
delete: (name) => Effect.gen(function* () {
|
|
28
|
+
const env = yield* environment;
|
|
29
|
+
const found = yield* lookupDict(ops.getOrCreate, ownedName(yield* owner, name), env);
|
|
30
|
+
if (!found)
|
|
31
|
+
return;
|
|
32
|
+
yield* ops
|
|
33
|
+
.delete({ dictId: found.dictId })
|
|
34
|
+
.pipe(Effect.catchTag("DictNotFound", () => Effect.void));
|
|
35
|
+
}),
|
|
36
|
+
list: () => Effect.gen(function* () {
|
|
37
|
+
const env = yield* environment;
|
|
38
|
+
const stamp = yield* owner;
|
|
39
|
+
const items = yield* listAll((pagination) => ops
|
|
40
|
+
.list({ environmentName: environmentOf(env), pagination })
|
|
41
|
+
.pipe(Effect.map((response) => response.dicts ?? [])), (item) => item.createdAt);
|
|
42
|
+
return items.flatMap((item) => {
|
|
43
|
+
const own = item.name ? unownedName(stamp, item.name) : undefined;
|
|
44
|
+
return own ? [own] : [];
|
|
45
|
+
});
|
|
46
|
+
}),
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* {@link CreateDict} over Modal's API. Grants the host's identity (a scoped
|
|
50
|
+
* `Modal.ServiceUser`) the `contributor` role on the environment.
|
|
51
|
+
*
|
|
52
|
+
* @layer
|
|
53
|
+
* @product Dict
|
|
54
|
+
* @provides Modal.CreateDict
|
|
55
|
+
*/
|
|
56
|
+
export const CreateDictHttp = Layer.effect(CreateDict, makeOpenModalBinding({
|
|
57
|
+
tag: "Modal.CreateDict",
|
|
58
|
+
operations: DictsOps,
|
|
59
|
+
role: "contributor",
|
|
60
|
+
environmentOf: (environment) => environment?.name,
|
|
61
|
+
make: Effect.fn(function* (ops, environment) {
|
|
62
|
+
const name = environment ? yield* environment.name : Effect.undefined;
|
|
63
|
+
const owner = yield* RuntimeOwnerOf();
|
|
64
|
+
return makeDictsClient(name, ops, owner);
|
|
65
|
+
}),
|
|
66
|
+
}));
|
|
67
|
+
//# sourceMappingURL=CreateDictHttp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateDictHttp.js","sources":["../src/CreateDictHttp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import * as Binding from "alchemy/Binding";
|
|
2
|
+
import type { RuntimeContext } from "alchemy/RuntimeContext";
|
|
3
|
+
import type * as Effect from "effect/Effect";
|
|
4
|
+
import type { App } from "./App.ts";
|
|
5
|
+
import type { buildFromOptions, ImagesOps } from "./CreateImageHttp.ts";
|
|
6
|
+
import type { ErrorOf, OpError } from "./internal.ts";
|
|
7
|
+
/** What to build: Modal's image inputs, in memory (no build context directory). */
|
|
8
|
+
export interface ImageBuildOptions {
|
|
9
|
+
/** Start from a registry image. */
|
|
10
|
+
readonly image?: string;
|
|
11
|
+
/** Start from a Modal image (a deploy-time `Modal.Image`, or a snapshot). */
|
|
12
|
+
readonly from?: {
|
|
13
|
+
readonly imageId: string;
|
|
14
|
+
};
|
|
15
|
+
/** A whole Dockerfile as text (`FROM` included). Exclusive with `image`/`from`. */
|
|
16
|
+
readonly dockerfile?: string;
|
|
17
|
+
/** Dockerfile lines appended to the build. */
|
|
18
|
+
readonly commands?: ReadonlyArray<string>;
|
|
19
|
+
/** Files the commands `COPY`, by path relative to the build context. */
|
|
20
|
+
readonly files?: Record<string, string | Uint8Array>;
|
|
21
|
+
/** Secrets the build steps see as environment variables. */
|
|
22
|
+
readonly secrets?: ReadonlyArray<{
|
|
23
|
+
readonly secretId: string;
|
|
24
|
+
}>;
|
|
25
|
+
/** Run the build on a GPU. */
|
|
26
|
+
readonly gpu?: string;
|
|
27
|
+
/** Rebuild even when Modal has the same image cached. */
|
|
28
|
+
readonly force?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/** Build images in one App at runtime. */
|
|
31
|
+
export interface ImagesClient {
|
|
32
|
+
/**
|
|
33
|
+
* Build an image (or return the cached one: Modal content-addresses
|
|
34
|
+
* builds) and wait until it's ready. Fails with `Modal.ImageBuildFailed`.
|
|
35
|
+
*/
|
|
36
|
+
build(options: ImageBuildOptions): Effect.Effect<{
|
|
37
|
+
readonly imageId: string;
|
|
38
|
+
}, ErrorOf<typeof buildFromOptions>, RuntimeContext>;
|
|
39
|
+
/** The image published under `tag`, or `undefined`. */
|
|
40
|
+
fromTag(tag: string): Effect.Effect<{
|
|
41
|
+
readonly imageId: string;
|
|
42
|
+
} | undefined, OpError<ImagesOps, "getByTag">, RuntimeContext>;
|
|
43
|
+
/** Publish an image under `tag` (moving the tag if it points elsewhere). */
|
|
44
|
+
publish(image: {
|
|
45
|
+
readonly imageId: string;
|
|
46
|
+
}, tag: string): Effect.Effect<void, OpError<ImagesOps, "publish">, RuntimeContext>;
|
|
47
|
+
/** Remove a published tag (`name` or `name:tag`); the image itself stays. */
|
|
48
|
+
unpublish(tag: string): Effect.Effect<void, OpError<ImagesOps, "deleteName">, RuntimeContext>;
|
|
49
|
+
/** Delete an image. */
|
|
50
|
+
delete(image: {
|
|
51
|
+
readonly imageId: string;
|
|
52
|
+
}): Effect.Effect<void, OpError<ImagesOps, "delete">, RuntimeContext>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Build Modal Images at runtime, e.g. one per repository a user connects,
|
|
56
|
+
* from the same inputs a `Modal.Image` takes. Modal builds remotely; the
|
|
57
|
+
* runtime needs no Docker.
|
|
58
|
+
*
|
|
59
|
+
* ### An image per repository
|
|
60
|
+
* **Example:** From a Cloudflare Worker
|
|
61
|
+
* ```typescript
|
|
62
|
+
* import * as Cloudflare from "@alchemy.run/cloudflare";
|
|
63
|
+
* import * as Modal from "@alchemy.run/modal";
|
|
64
|
+
* import * as Effect from "effect/Effect";
|
|
65
|
+
* import * as Layer from "effect/Layer";
|
|
66
|
+
* import { HttpServerRequest } from "effect/http/HttpServerRequest";
|
|
67
|
+
* import * as HttpServerResponse from "effect/http/HttpServerResponse";
|
|
68
|
+
* import { Coder } from "./Coder.ts";
|
|
69
|
+
*
|
|
70
|
+
* export default class Api extends Cloudflare.Worker<Api>()(
|
|
71
|
+
* "Api",
|
|
72
|
+
* { main: import.meta.url },
|
|
73
|
+
* Effect.gen(function* () {
|
|
74
|
+
* const images = yield* Modal.CreateImage(Coder);
|
|
75
|
+
* const sandboxes = yield* Modal.CreateSandbox(Coder);
|
|
76
|
+
* return {
|
|
77
|
+
* fetch: Effect.gen(function* () {
|
|
78
|
+
* const request = yield* HttpServerRequest;
|
|
79
|
+
* const repo = request.headers["x-repo"] ?? "alchemy-run/alchemy";
|
|
80
|
+
* const image = yield* images.build({
|
|
81
|
+
* image: "node:22-bookworm",
|
|
82
|
+
* commands: [`RUN git clone https://github.com/${repo} /work`],
|
|
83
|
+
* });
|
|
84
|
+
* const sandbox = yield* sandboxes.create({ image });
|
|
85
|
+
* return HttpServerResponse.text(sandbox.sandboxId);
|
|
86
|
+
* }).pipe(Effect.orDie),
|
|
87
|
+
* };
|
|
88
|
+
* }).pipe(Effect.provide(Layer.mergeAll(Modal.CreateImageHttp, Modal.CreateSandboxHttp))),
|
|
89
|
+
* ) {}
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* @binding
|
|
93
|
+
* @product Image
|
|
94
|
+
*/
|
|
95
|
+
export interface CreateImage extends Binding.Service<CreateImage, "Modal.CreateImage", (app: App) => Effect.Effect<ImagesClient>> {
|
|
96
|
+
}
|
|
97
|
+
export declare const CreateImage: CreateImage;
|
|
98
|
+
//# sourceMappingURL=CreateImage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateImage.d.ts","sources":["../src/CreateImage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEtD,mFAAmF;AACnF,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,mFAAmF;IACnF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,wEAAwE;IACxE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;IACrD,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,8BAA8B;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,KAAK,CACH,OAAO,EAAE,iBAAiB,GACzB,MAAM,CAAC,MAAM,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,OAAO,CAAC,OAAO,gBAAgB,CAAC,EAAE,cAAc,CAAC,CAAC;IACjG,uDAAuD;IACvD,OAAO,CACL,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,MAAM,CACd;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,EACxC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,EAC9B,cAAc,CACf,CAAC;IACF,4EAA4E;IAC5E,OAAO,CACL,KAAK,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EACnC,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;IACtE,6EAA6E;IAC7E,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9F,uBAAuB;IACvB,MAAM,CAAC,KAAK,EAAE;QACZ,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;CACvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO,CAAC,OAAO,CAClD,WAAW,EACX,mBAAmB,EACnB,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAC1C;CAAG;AAEJ,eAAO,MAAM,WAAW,aAAoD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateImage.js","sources":["../src/CreateImage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAwG3C,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAc,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as DockerfileParser from "@alchemy.run/docker/DockerfileParser";
|
|
2
|
+
import * as image from "@distilled.cloud/modal/image";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
|
+
import { CreateImage, type ImageBuildOptions, type ImagesClient } from "./CreateImage.ts";
|
|
6
|
+
/** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
|
|
7
|
+
declare const ImagesOps: Effect.Effect<{
|
|
8
|
+
readonly build: {
|
|
9
|
+
readonly getOrCreate: (input: image.ImageGetOrCreateRequest) => Effect.Effect<image.ImageGetOrCreateResponse, image.ModalOpError, never>;
|
|
10
|
+
readonly joinStreaming: import("@distilled.cloud/core/api").StreamingCall<image.ImageJoinStreamingRequest, image.ImageJoinStreamingStream, image.ImageJoinStreamingError, never, image.ImageJoinStreamingResponse>;
|
|
11
|
+
readonly putFile: (input: import("@distilled.cloud/modal/mount").MountPutFileRequest) => Effect.Effect<import("@distilled.cloud/modal/mount").MountPutFileResponse, image.ModalOpError, never>;
|
|
12
|
+
readonly getOrCreateMount: (input: import("@distilled.cloud/modal/mount").MountGetOrCreateRequest) => Effect.Effect<import("@distilled.cloud/modal/mount").MountGetOrCreateResponse, import("@distilled.cloud/modal/mount").MountGetOrCreateError, never>;
|
|
13
|
+
readonly blobs: {
|
|
14
|
+
readonly create: (input: import("@distilled.cloud/modal/blob").CreateBlobRequest) => Effect.Effect<import("@distilled.cloud/modal/blob").CreateBlobResponse, image.ModalOpError, never>;
|
|
15
|
+
readonly get: (input: import("@distilled.cloud/modal/blob").GetBlobRequest) => Effect.Effect<import("@distilled.cloud/modal/blob").GetBlobResponse, image.ModalOpError, never>;
|
|
16
|
+
readonly http: import("effect/http/HttpClient").HttpClient;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
readonly getByTag: (input: image.ImageGetByTagRequest) => Effect.Effect<image.ImageGetByTagResponse, image.ImageGetByTagError, never>;
|
|
20
|
+
readonly publish: (input: image.PublishImageRequest) => Effect.Effect<image.PublishImageResponse, image.PublishImageError, never>;
|
|
21
|
+
readonly deleteName: (input: image.DeleteImageNameRequest) => Effect.Effect<image.DeleteImageNameResponse, image.DeleteImageNameError, never>;
|
|
22
|
+
readonly delete: (input: image.DeleteImageRequest) => Effect.Effect<image.DeleteImageResponse, image.DeleteImageError, never>;
|
|
23
|
+
}, never, import("./internal.ts").OperationServices>;
|
|
24
|
+
export type ImagesOps = Effect.Success<typeof ImagesOps>;
|
|
25
|
+
/** Build one image from runtime options in `appId`. */
|
|
26
|
+
export declare const buildFromOptions: (ops: {
|
|
27
|
+
readonly getOrCreate: (input: image.ImageGetOrCreateRequest) => Effect.Effect<image.ImageGetOrCreateResponse, image.ModalOpError, never>;
|
|
28
|
+
readonly joinStreaming: import("@distilled.cloud/core/api").StreamingCall<image.ImageJoinStreamingRequest, image.ImageJoinStreamingStream, image.ImageJoinStreamingError, never, image.ImageJoinStreamingResponse>;
|
|
29
|
+
readonly putFile: (input: import("@distilled.cloud/modal/mount").MountPutFileRequest) => Effect.Effect<import("@distilled.cloud/modal/mount").MountPutFileResponse, image.ModalOpError, never>;
|
|
30
|
+
readonly getOrCreateMount: (input: import("@distilled.cloud/modal/mount").MountGetOrCreateRequest) => Effect.Effect<import("@distilled.cloud/modal/mount").MountGetOrCreateResponse, import("@distilled.cloud/modal/mount").MountGetOrCreateError, never>;
|
|
31
|
+
readonly blobs: {
|
|
32
|
+
readonly create: (input: import("@distilled.cloud/modal/blob").CreateBlobRequest) => Effect.Effect<import("@distilled.cloud/modal/blob").CreateBlobResponse, image.ModalOpError, never>;
|
|
33
|
+
readonly get: (input: import("@distilled.cloud/modal/blob").GetBlobRequest) => Effect.Effect<import("@distilled.cloud/modal/blob").GetBlobResponse, image.ModalOpError, never>;
|
|
34
|
+
readonly http: import("effect/http/HttpClient").HttpClient;
|
|
35
|
+
};
|
|
36
|
+
}, appId: string, options: ImageBuildOptions) => Effect.Effect<{
|
|
37
|
+
imageId: string;
|
|
38
|
+
}, import("@distilled.cloud/core/errors").BadGateway | import("./Blob.ts").BlobTransferFailed | import("@distilled.cloud/core/config").ConfigError | DockerfileParser.DockerfileSyntaxError | import("@distilled.cloud/core/errors").GatewayTimeout | import("effect/http/HttpClientError").HttpClientError | import("./ImageBuild.ts").ImageBuildFailed | import("./ImageBuild.ts").ImageBuildTimeout | import("./ImageBuild.ts").ImageBuildUnexpectedResponse | image.ImageNotFound | import("@distilled.cloud/core/errors").InternalServerError | import("@distilled.cloud/core/protocol-http").InvalidInput | import("@distilled.cloud/modal/Errors").ModalParseError | import("@distilled.cloud/modal/mount").MountNotFound | 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>;
|
|
39
|
+
/** An images client over an app id resolved per call. */
|
|
40
|
+
export declare const makeImagesClient: (appId: Effect.Effect<string>, ops: ImagesOps, environment?: Effect.Effect<string | undefined>) => ImagesClient;
|
|
41
|
+
/**
|
|
42
|
+
* {@link CreateImage} over Modal's API. Grants the host's identity (a scoped
|
|
43
|
+
* `Modal.ServiceUser`) the `contributor` role on the App's environment.
|
|
44
|
+
*
|
|
45
|
+
* @layer
|
|
46
|
+
* @product Image
|
|
47
|
+
* @provides Modal.CreateImage
|
|
48
|
+
*/
|
|
49
|
+
export declare const CreateImageHttp: Layer.Layer<CreateImage, never, never>;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=CreateImageHttp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateImageHttp.d.ts","sources":["../src/CreateImageHttp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,gBAAgB,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAI1F,oFAAoF;AACpF,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;oDAMb,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,SAAS,CAAC,CAAC;AAKzD,uDAAuD;AACvD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;o+BAiC3B,CAAC;AAEH,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,UACpB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OACvB,SAAS,gBACD,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,KAC7C,YA6BD,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,wCAY3B,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as DockerfileParser from "@alchemy.run/docker/DockerfileParser";
|
|
2
|
+
import * as image from "@distilled.cloud/modal/image";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
|
+
import { makeModalBinding } from "./BindingHttp.js";
|
|
6
|
+
import { CreateImage } from "./CreateImage.js";
|
|
7
|
+
import { buildImage, ImageBuildOps } from "./ImageBuild.js";
|
|
8
|
+
import { operations } from "./internal.js";
|
|
9
|
+
/** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
|
|
10
|
+
const ImagesOps = operations({
|
|
11
|
+
build: ImageBuildOps,
|
|
12
|
+
getByTag: image.imageGetByTag,
|
|
13
|
+
publish: image.publishImage,
|
|
14
|
+
deleteName: image.deleteImageName,
|
|
15
|
+
delete: image.deleteImage,
|
|
16
|
+
});
|
|
17
|
+
const toBytes = (data) => Effect.sync(() => (typeof data === "string" ? new TextEncoder().encode(data) : data));
|
|
18
|
+
/** Build one image from runtime options in `appId`. */
|
|
19
|
+
export const buildFromOptions = Effect.fn(function* (ops, appId, options) {
|
|
20
|
+
// Parsed to normalize it; Modal's builder rejects what it can't run.
|
|
21
|
+
// (The plan-time capability check lives with BuildPlan, which imports the
|
|
22
|
+
// bundler and so stays out of runtime bundles.)
|
|
23
|
+
const parsed = options.dockerfile !== undefined
|
|
24
|
+
? yield* DockerfileParser.parse(options.dockerfile)
|
|
25
|
+
: undefined;
|
|
26
|
+
const dockerfile = parsed ? DockerfileParser.renderLines(parsed) : [];
|
|
27
|
+
const extra = options.commands ?? [];
|
|
28
|
+
const commands = [...dockerfile, ...extra];
|
|
29
|
+
const contextFiles = yield* Effect.forEach(Object.entries(options.files ?? {}), ([filename, data]) => Effect.map(toBytes(data), (bytes) => ({ filename, data: bytes })));
|
|
30
|
+
const imageId = yield* buildImage(ops, appId, {
|
|
31
|
+
dockerTag: options.dockerfile
|
|
32
|
+
? undefined
|
|
33
|
+
: options.from
|
|
34
|
+
? undefined
|
|
35
|
+
: (options.image ?? "debian:bookworm-slim"),
|
|
36
|
+
baseImageId: options.dockerfile ? undefined : options.from?.imageId,
|
|
37
|
+
commands,
|
|
38
|
+
contextFiles,
|
|
39
|
+
secretIds: options.secrets?.map((s) => s.secretId),
|
|
40
|
+
gpu: options.gpu,
|
|
41
|
+
forceBuild: options.force,
|
|
42
|
+
});
|
|
43
|
+
return { imageId };
|
|
44
|
+
});
|
|
45
|
+
/** An images client over an app id resolved per call. */
|
|
46
|
+
export const makeImagesClient = (appId, ops, environment = Effect.undefined) => ({
|
|
47
|
+
fromTag: (tag) => Effect.gen(function* () {
|
|
48
|
+
const env = yield* environment;
|
|
49
|
+
const found = yield* ops
|
|
50
|
+
.getByTag({ tag, environmentName: env ?? "" })
|
|
51
|
+
.pipe(Effect.catchTag("ImageNotFound", () => Effect.undefined));
|
|
52
|
+
return found?.imageId ? { imageId: found.imageId } : undefined;
|
|
53
|
+
}),
|
|
54
|
+
publish: (target, tag) => Effect.gen(function* () {
|
|
55
|
+
const env = yield* environment;
|
|
56
|
+
yield* ops.publish({ imageId: target.imageId, tag, environmentName: env ?? "" });
|
|
57
|
+
}),
|
|
58
|
+
unpublish: (tag) => Effect.gen(function* () {
|
|
59
|
+
const env = yield* environment;
|
|
60
|
+
// Modal deletes only an explicit `name:tag`; a bare name is `name:latest`.
|
|
61
|
+
const named = /:[^/]*$/.test(tag) ? tag : `${tag}:latest`;
|
|
62
|
+
yield* ops
|
|
63
|
+
.deleteName({ tag: env ? `${env}/${named}` : named })
|
|
64
|
+
.pipe(Effect.catchTag("ImageNotFound", () => Effect.void));
|
|
65
|
+
}),
|
|
66
|
+
build: (options) => Effect.flatMap(appId, (id) => buildFromOptions(ops.build, id, options)),
|
|
67
|
+
delete: (target) => ops.delete({ imageId: target.imageId }).pipe(Effect.catchTag("ImageNotFound", () => Effect.void), Effect.asVoid),
|
|
68
|
+
});
|
|
69
|
+
/**
|
|
70
|
+
* {@link CreateImage} over Modal's API. Grants the host's identity (a scoped
|
|
71
|
+
* `Modal.ServiceUser`) the `contributor` role on the App's environment.
|
|
72
|
+
*
|
|
73
|
+
* @layer
|
|
74
|
+
* @product Image
|
|
75
|
+
* @provides Modal.CreateImage
|
|
76
|
+
*/
|
|
77
|
+
export const CreateImageHttp = Layer.effect(CreateImage, makeModalBinding({
|
|
78
|
+
tag: "Modal.CreateImage",
|
|
79
|
+
operations: ImagesOps,
|
|
80
|
+
role: "contributor",
|
|
81
|
+
make: Effect.fn(function* (app, ops) {
|
|
82
|
+
const appId = yield* app.appId;
|
|
83
|
+
const environment = yield* app.environment;
|
|
84
|
+
return makeImagesClient(appId, ops, environment);
|
|
85
|
+
}),
|
|
86
|
+
}));
|
|
87
|
+
//# sourceMappingURL=CreateImageHttp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateImageHttp.js","sources":["../src/CreateImageHttp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import * as Binding from "alchemy/Binding";
|
|
2
|
+
import type { RuntimeContext } from "alchemy/RuntimeContext";
|
|
3
|
+
import type * as Effect from "effect/Effect";
|
|
4
|
+
import type { QueuesOps } from "./CreateQueueHttp.ts";
|
|
5
|
+
import type { Environment } from "./Environment.ts";
|
|
6
|
+
import type { ErrorOf, OpError } from "./internal.ts";
|
|
7
|
+
import type { ensureQueue, lookupQueue } from "./Queue.ts";
|
|
8
|
+
import type { QueueAttributes } from "./Queue.ts";
|
|
9
|
+
import type { ReadWriteQueueClient } from "./QueueClient.ts";
|
|
10
|
+
/** A queue created or found at runtime: its attributes plus a read-write client. */
|
|
11
|
+
export interface QueueHandle extends ReadWriteQueueClient {
|
|
12
|
+
readonly queueId: Effect.Effect<string>;
|
|
13
|
+
readonly name: string;
|
|
14
|
+
/** The attributes, to pass where a `Modal.Queue` is accepted (e.g. sandbox mounts). */
|
|
15
|
+
readonly attributes: QueueAttributes;
|
|
16
|
+
}
|
|
17
|
+
/** Get, create, list and delete queues by name in one environment. */
|
|
18
|
+
export interface QueuesClientOf<R> {
|
|
19
|
+
/** The queue named `name`, created when missing (Modal's own get-or-create). */
|
|
20
|
+
getOrCreate(name: string): Effect.Effect<QueueHandle, ErrorOf<typeof ensureQueue>, R>;
|
|
21
|
+
/** The queue named `name`, or `undefined`. */
|
|
22
|
+
get(name: string): Effect.Effect<QueueHandle | undefined, ErrorOf<typeof lookupQueue>, R>;
|
|
23
|
+
/** Delete the queue named `name` (no-op when missing). */
|
|
24
|
+
delete(name: string): Effect.Effect<void, ErrorOf<typeof lookupQueue> | Exclude<OpError<QueuesOps, "delete">, {
|
|
25
|
+
readonly _tag: "QueueNotFound";
|
|
26
|
+
}>, R>;
|
|
27
|
+
/** Names of every queue in the environment. */
|
|
28
|
+
list(): Effect.Effect<ReadonlyArray<string>, OpError<QueuesOps, "list">, R>;
|
|
29
|
+
}
|
|
30
|
+
/** A QueuesClient whose calls run inside a deployed runtime. */
|
|
31
|
+
export type QueuesClient = QueuesClientOf<RuntimeContext>;
|
|
32
|
+
/**
|
|
33
|
+
* Create queues by name at runtime: one per user, session or task.
|
|
34
|
+
* Modal's native shape is get-or-create by name, so `getOrCreate` is
|
|
35
|
+
* idempotent and safe to call on every request.
|
|
36
|
+
*
|
|
37
|
+
* Bind it to a `Modal.Environment` to keep these runtime objects in their
|
|
38
|
+
* own namespace (or to nothing, for the workspace's default environment).
|
|
39
|
+
* They aren't in Alchemy state: deleting the environment removes them.
|
|
40
|
+
*
|
|
41
|
+
* Objects created at run time are tagged with the stack, stage and binding
|
|
42
|
+
* (`alchemy::stack`, `alchemy::stage`, `alchemy::id`) and are not deleted when
|
|
43
|
+
* the stack is destroyed. A Modal queue has only a name, so the tags become
|
|
44
|
+
* its name prefix, `Modal.runtimePrefix({ stack, stage, id })`: list them
|
|
45
|
+
* with `modal queue list` and delete the ones whose name starts with it.
|
|
46
|
+
*
|
|
47
|
+
* ### One queue per user
|
|
48
|
+
* **Example:** From a Cloudflare Worker
|
|
49
|
+
* ```typescript
|
|
50
|
+
* import * as Cloudflare from "@alchemy.run/cloudflare";
|
|
51
|
+
* import * as Modal from "@alchemy.run/modal";
|
|
52
|
+
* import * as Effect from "effect/Effect";
|
|
53
|
+
* import * as Layer from "effect/Layer";
|
|
54
|
+
* import { HttpServerRequest } from "effect/http/HttpServerRequest";
|
|
55
|
+
* import * as HttpServerResponse from "effect/http/HttpServerResponse";
|
|
56
|
+
* import { Agents, Coder } from "./Coder.ts";
|
|
57
|
+
*
|
|
58
|
+
* export default class Api extends Cloudflare.Worker<Api>()(
|
|
59
|
+
* "Api",
|
|
60
|
+
* { main: import.meta.url },
|
|
61
|
+
* Effect.gen(function* () {
|
|
62
|
+
* const queues = yield* Modal.CreateQueue(Agents);
|
|
63
|
+
* const sandboxes = yield* Modal.CreateSandbox(Coder);
|
|
64
|
+
* return {
|
|
65
|
+
* fetch: Effect.gen(function* () {
|
|
66
|
+
* const request = yield* HttpServerRequest;
|
|
67
|
+
* const user = request.headers["x-user"] ?? "anonymous";
|
|
68
|
+
* const inbox = yield* queues.getOrCreate(`inbox-${user}`);
|
|
69
|
+
* yield* inbox.put({ task: "review" });
|
|
70
|
+
* return HttpServerResponse.text("ok");
|
|
71
|
+
* }).pipe(Effect.orDie),
|
|
72
|
+
* };
|
|
73
|
+
* }).pipe(Effect.provide(Layer.mergeAll(Modal.CreateQueueHttp, Modal.CreateSandboxHttp))),
|
|
74
|
+
* ) {}
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* @binding
|
|
78
|
+
* @product Queue
|
|
79
|
+
*/
|
|
80
|
+
export interface CreateQueue extends Binding.Service<CreateQueue, "Modal.CreateQueue", (environment?: Environment) => Effect.Effect<QueuesClient>> {
|
|
81
|
+
}
|
|
82
|
+
export declare const CreateQueue: CreateQueue;
|
|
83
|
+
//# sourceMappingURL=CreateQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateQueue.d.ts","sources":["../src/CreateQueue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,oFAAoF;AACpF,MAAM,WAAW,WAAY,SAAQ,oBAAoB;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED,sEAAsE;AACtE,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,gFAAgF;IAChF,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,8CAA8C;IAC9C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,SAAS,EAAE,OAAO,CAAC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1F,0DAA0D;IAC1D,MAAM,CACJ,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,CACd,IAAI,EACF,OAAO,CAAC,OAAO,WAAW,CAAC,GAC3B,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;KAAE,CAAC,EAC3E,CAAC,CACF,CAAC;IACF,+CAA+C;IAC/C,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;CAC7E;AAED,gEAAgE;AAChE,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO,CAAC,OAAO,CAClD,WAAW,EACX,mBAAmB,EACnB,CAAC,WAAW,CAAC,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAC3D;CAAG;AAEJ,eAAO,MAAM,WAAW,aAAoD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateQueue.js","sources":["../src/CreateQueue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AA8F3C,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAc,mBAAmB,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as queue from "@distilled.cloud/modal/queue";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
import { CreateQueue, type QueuesClientOf } from "./CreateQueue.ts";
|
|
5
|
+
import { type RuntimeOwner } from "./RuntimeOwner.ts";
|
|
6
|
+
/** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
|
|
7
|
+
export declare const QueuesOps: Effect.Effect<{
|
|
8
|
+
readonly getOrCreate: (input: queue.QueueGetOrCreateRequest) => Effect.Effect<queue.QueueGetOrCreateResponse, queue.QueueGetOrCreateError, never>;
|
|
9
|
+
readonly delete: (input: queue.DeleteQueueRequest) => Effect.Effect<queue.DeleteQueueResponse, queue.DeleteQueueError, never>;
|
|
10
|
+
readonly list: import("@distilled.cloud/core/api").PaginatedCall<queue.ListQueueRequest, queue.ListQueueResponse, queue.ListQueueError, never, queue.ListQueueResponseQueueInfo>;
|
|
11
|
+
readonly client: {
|
|
12
|
+
readonly clearQueue: (input: queue.ClearQueueRequest) => Effect.Effect<queue.ClearQueueResponse, queue.ClearQueueError, never>;
|
|
13
|
+
readonly getQueue: (input: queue.GetQueueRequest) => Effect.Effect<queue.GetQueueResponse, queue.ModalOpError, never>;
|
|
14
|
+
readonly putQueue: (input: queue.PutQueueRequest) => Effect.Effect<queue.PutQueueResponse, queue.PutQueueError, never>;
|
|
15
|
+
readonly queueLen: (input: queue.QueueLenRequest) => Effect.Effect<queue.QueueLenResponse, queue.QueueLenError, never>;
|
|
16
|
+
readonly queueNextItems: (input: queue.QueueNextItemsRequest) => Effect.Effect<queue.QueueNextItemsResponse, queue.QueueNextItemsError, never>;
|
|
17
|
+
};
|
|
18
|
+
}, never, import("./internal.ts").OperationServices>;
|
|
19
|
+
export type QueuesOps = Effect.Success<typeof QueuesOps>;
|
|
20
|
+
/** A queues client over an environment name resolved per call. */
|
|
21
|
+
export declare const makeQueuesClient: (environment: Effect.Effect<string | undefined>, ops: QueuesOps, owner?: Effect.Effect<RuntimeOwner | undefined>) => QueuesClientOf<never>;
|
|
22
|
+
/**
|
|
23
|
+
* {@link CreateQueue} over Modal's API. Grants the host's identity (a scoped
|
|
24
|
+
* `Modal.ServiceUser`) the `contributor` role on the environment.
|
|
25
|
+
*
|
|
26
|
+
* @layer
|
|
27
|
+
* @product Queue
|
|
28
|
+
* @provides Modal.CreateQueue
|
|
29
|
+
*/
|
|
30
|
+
export declare const CreateQueueHttp: Layer.Layer<CreateQueue, never, never>;
|
|
31
|
+
//# sourceMappingURL=CreateQueueHttp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateQueueHttp.d.ts","sources":["../src/CreateQueueHttp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAoB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKtF,OAAO,EAAa,KAAK,YAAY,EAA+B,MAAM,mBAAmB,CAAC;AAE9F,oFAAoF;AACpF,eAAO,MAAM,SAAS;;;;;;;;;;;oDAKpB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,SAAS,CAAC,CAAC;AASzD,kEAAkE;AAClE,eAAO,MAAM,gBAAgB,gBACd,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,OACzC,SAAS,UACP,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,KAC7C,cAAc,CAAC,KAAK,CAkCrB,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,wCAa3B,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import * as queue from "@distilled.cloud/modal/queue";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
import { makeOpenModalBinding } from "./BindingHttp.js";
|
|
5
|
+
import { CreateQueue } from "./CreateQueue.js";
|
|
6
|
+
import { environmentOf, listAll, operations } from "./internal.js";
|
|
7
|
+
import { ensureQueue, lookupQueue } from "./Queue.js";
|
|
8
|
+
import { QueueOps, makeReadWriteQueueClient } from "./QueueClient.js";
|
|
9
|
+
import { ownedName, RuntimeOwnerOf, unownedName } from "./RuntimeOwner.js";
|
|
10
|
+
/** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
|
|
11
|
+
export const QueuesOps = operations({
|
|
12
|
+
getOrCreate: queue.queueGetOrCreate,
|
|
13
|
+
delete: queue.deleteQueue,
|
|
14
|
+
list: queue.listQueue,
|
|
15
|
+
client: QueueOps,
|
|
16
|
+
});
|
|
17
|
+
const handleOf = (attributes, ops, name) => ({
|
|
18
|
+
...makeReadWriteQueueClient(Effect.succeed(attributes.queueId), ops.client),
|
|
19
|
+
queueId: Effect.succeed(attributes.queueId),
|
|
20
|
+
name,
|
|
21
|
+
attributes,
|
|
22
|
+
});
|
|
23
|
+
/** A queues client over an environment name resolved per call. */
|
|
24
|
+
export const makeQueuesClient = (environment, ops, owner = Effect.undefined) => ({
|
|
25
|
+
getOrCreate: (name) => Effect.flatMap(Effect.all([environment, owner]), ([env, stamp]) => ensureQueue(ops.getOrCreate, ownedName(stamp, name), env)).pipe(Effect.map((attributes) => handleOf(attributes, ops, name))),
|
|
26
|
+
get: (name) => Effect.flatMap(Effect.all([environment, owner]), ([env, stamp]) => lookupQueue(ops.getOrCreate, ownedName(stamp, name), env)).pipe(Effect.map((attributes) => (attributes ? handleOf(attributes, ops, name) : undefined))),
|
|
27
|
+
delete: (name) => Effect.gen(function* () {
|
|
28
|
+
const env = yield* environment;
|
|
29
|
+
const found = yield* lookupQueue(ops.getOrCreate, ownedName(yield* owner, name), env);
|
|
30
|
+
if (!found)
|
|
31
|
+
return;
|
|
32
|
+
yield* ops
|
|
33
|
+
.delete({ queueId: found.queueId })
|
|
34
|
+
.pipe(Effect.catchTag("QueueNotFound", () => Effect.void));
|
|
35
|
+
}),
|
|
36
|
+
list: () => Effect.gen(function* () {
|
|
37
|
+
const env = yield* environment;
|
|
38
|
+
const stamp = yield* owner;
|
|
39
|
+
const items = yield* listAll((pagination) => ops
|
|
40
|
+
.list({ environmentName: environmentOf(env), pagination })
|
|
41
|
+
.pipe(Effect.map((response) => response.queues ?? [])), (item) => item.createdAt);
|
|
42
|
+
return items.flatMap((item) => {
|
|
43
|
+
const own = item.name ? unownedName(stamp, item.name) : undefined;
|
|
44
|
+
return own ? [own] : [];
|
|
45
|
+
});
|
|
46
|
+
}),
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* {@link CreateQueue} over Modal's API. Grants the host's identity (a scoped
|
|
50
|
+
* `Modal.ServiceUser`) the `contributor` role on the environment.
|
|
51
|
+
*
|
|
52
|
+
* @layer
|
|
53
|
+
* @product Queue
|
|
54
|
+
* @provides Modal.CreateQueue
|
|
55
|
+
*/
|
|
56
|
+
export const CreateQueueHttp = Layer.effect(CreateQueue, makeOpenModalBinding({
|
|
57
|
+
tag: "Modal.CreateQueue",
|
|
58
|
+
operations: QueuesOps,
|
|
59
|
+
role: "contributor",
|
|
60
|
+
environmentOf: (environment) => environment?.name,
|
|
61
|
+
make: Effect.fn(function* (ops, environment) {
|
|
62
|
+
const name = environment ? yield* environment.name : Effect.undefined;
|
|
63
|
+
const owner = yield* RuntimeOwnerOf();
|
|
64
|
+
return makeQueuesClient(name, ops, owner);
|
|
65
|
+
}),
|
|
66
|
+
}));
|
|
67
|
+
//# sourceMappingURL=CreateQueueHttp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CreateQueueHttp.js","sources":["../src/CreateQueueHttp.ts"],"names":[],"mappings":"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"}
|