@alchemy.run/modal 0.0.0 → 2.0.0-beta.86
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +96 -4
- package/lib/App.d.ts +143 -0
- package/lib/App.d.ts.map +1 -0
- package/lib/App.js +198 -0
- package/lib/App.js.map +1 -0
- package/lib/AuthProvider.d.ts +53 -0
- package/lib/AuthProvider.d.ts.map +1 -0
- package/lib/AuthProvider.js +209 -0
- package/lib/AuthProvider.js.map +1 -0
- package/lib/BindingHttp.d.ts +56 -0
- package/lib/BindingHttp.d.ts.map +1 -0
- package/lib/BindingHttp.js +50 -0
- package/lib/BindingHttp.js.map +1 -0
- package/lib/Blob.d.ts +34 -0
- package/lib/Blob.d.ts.map +1 -0
- package/lib/Blob.js +59 -0
- package/lib/Blob.js.map +1 -0
- package/lib/Bootstrap.d.ts +8 -0
- package/lib/Bootstrap.d.ts.map +1 -0
- package/lib/Bootstrap.js +26 -0
- package/lib/Bootstrap.js.map +1 -0
- package/lib/Cbor.d.ts +10 -0
- package/lib/Cbor.d.ts.map +1 -0
- package/lib/Cbor.js +177 -0
- package/lib/Cbor.js.map +1 -0
- package/lib/ConnectSandbox.d.ts +64 -0
- package/lib/ConnectSandbox.d.ts.map +1 -0
- package/lib/ConnectSandbox.js +33 -0
- package/lib/ConnectSandbox.js.map +1 -0
- package/lib/Container.d.ts +124 -0
- package/lib/Container.d.ts.map +1 -0
- package/lib/Container.js +1 -0
- package/lib/Container.js.map +1 -0
- package/lib/Contributions.d.ts +7 -0
- package/lib/Contributions.d.ts.map +1 -0
- package/lib/Contributions.js +6 -0
- package/lib/Contributions.js.map +1 -0
- package/lib/CreateDict.d.ts +83 -0
- package/lib/CreateDict.d.ts.map +1 -0
- package/lib/CreateDict.js +3 -0
- package/lib/CreateDict.js.map +1 -0
- package/lib/CreateDictHttp.d.ts +33 -0
- package/lib/CreateDictHttp.d.ts.map +1 -0
- package/lib/CreateDictHttp.js +67 -0
- package/lib/CreateDictHttp.js.map +1 -0
- package/lib/CreateImage.d.ts +98 -0
- package/lib/CreateImage.d.ts.map +1 -0
- package/lib/CreateImage.js +3 -0
- package/lib/CreateImage.js.map +1 -0
- package/lib/CreateImageHttp.d.ts +51 -0
- package/lib/CreateImageHttp.d.ts.map +1 -0
- package/lib/CreateImageHttp.js +87 -0
- package/lib/CreateImageHttp.js.map +1 -0
- package/lib/CreateQueue.d.ts +83 -0
- package/lib/CreateQueue.d.ts.map +1 -0
- package/lib/CreateQueue.js +3 -0
- package/lib/CreateQueue.js.map +1 -0
- package/lib/CreateQueueHttp.d.ts +31 -0
- package/lib/CreateQueueHttp.d.ts.map +1 -0
- package/lib/CreateQueueHttp.js +67 -0
- package/lib/CreateQueueHttp.js.map +1 -0
- package/lib/CreateSandbox.d.ts +186 -0
- package/lib/CreateSandbox.d.ts.map +1 -0
- package/lib/CreateSandbox.js +3 -0
- package/lib/CreateSandbox.js.map +1 -0
- package/lib/CreateSandboxHttp.d.ts +17 -0
- package/lib/CreateSandboxHttp.d.ts.map +1 -0
- package/lib/CreateSandboxHttp.js +117 -0
- package/lib/CreateSandboxHttp.js.map +1 -0
- package/lib/CreateSecret.d.ts +95 -0
- package/lib/CreateSecret.d.ts.map +1 -0
- package/lib/CreateSecret.js +3 -0
- package/lib/CreateSecret.js.map +1 -0
- package/lib/CreateSecretHttp.d.ts +24 -0
- package/lib/CreateSecretHttp.d.ts.map +1 -0
- package/lib/CreateSecretHttp.js +60 -0
- package/lib/CreateSecretHttp.js.map +1 -0
- package/lib/CreateVolume.d.ts +84 -0
- package/lib/CreateVolume.d.ts.map +1 -0
- package/lib/CreateVolume.js +3 -0
- package/lib/CreateVolume.js.map +1 -0
- package/lib/CreateVolumeHttp.d.ts +32 -0
- package/lib/CreateVolumeHttp.d.ts.map +1 -0
- package/lib/CreateVolumeHttp.js +69 -0
- package/lib/CreateVolumeHttp.js.map +1 -0
- package/lib/Credentials.d.ts +32 -0
- package/lib/Credentials.d.ts.map +1 -0
- package/lib/Credentials.js +44 -0
- package/lib/Credentials.js.map +1 -0
- package/lib/Dict.d.ts +147 -0
- package/lib/Dict.d.ts.map +1 -0
- package/lib/Dict.js +175 -0
- package/lib/Dict.js.map +1 -0
- package/lib/DictClient.d.ts +55 -0
- package/lib/DictClient.d.ts.map +1 -0
- package/lib/DictClient.js +89 -0
- package/lib/DictClient.js.map +1 -0
- package/lib/Domain.d.ts +86 -0
- package/lib/Domain.d.ts.map +1 -0
- package/lib/Domain.js +113 -0
- package/lib/Domain.js.map +1 -0
- package/lib/Endpoint.d.ts +181 -0
- package/lib/Endpoint.d.ts.map +1 -0
- package/lib/Endpoint.js +283 -0
- package/lib/Endpoint.js.map +1 -0
- package/lib/Environment.d.ts +174 -0
- package/lib/Environment.d.ts.map +1 -0
- package/lib/Environment.js +244 -0
- package/lib/Environment.js.map +1 -0
- package/lib/FetchServer.d.ts +105 -0
- package/lib/FetchServer.d.ts.map +1 -0
- package/lib/FetchServer.js +3 -0
- package/lib/FetchServer.js.map +1 -0
- package/lib/FetchServerHttp.d.ts +21 -0
- package/lib/FetchServerHttp.d.ts.map +1 -0
- package/lib/FetchServerHttp.js +84 -0
- package/lib/FetchServerHttp.js.map +1 -0
- package/lib/Function.d.ts +236 -0
- package/lib/Function.d.ts.map +1 -0
- package/lib/Function.js +273 -0
- package/lib/Function.js.map +1 -0
- package/lib/FunctionAutoscaler.d.ts +99 -0
- package/lib/FunctionAutoscaler.d.ts.map +1 -0
- package/lib/FunctionAutoscaler.js +136 -0
- package/lib/FunctionAutoscaler.js.map +1 -0
- package/lib/FunctionTarget.d.ts +61 -0
- package/lib/FunctionTarget.d.ts.map +1 -0
- package/lib/FunctionTarget.js +136 -0
- package/lib/FunctionTarget.js.map +1 -0
- package/lib/Image.d.ts +159 -0
- package/lib/Image.d.ts.map +1 -0
- package/lib/Image.js +203 -0
- package/lib/Image.js.map +1 -0
- package/lib/ImageBuild.d.ts +108 -0
- package/lib/ImageBuild.d.ts.map +1 -0
- package/lib/ImageBuild.js +157 -0
- package/lib/ImageBuild.js.map +1 -0
- package/lib/ImagePlan.d.ts +31 -0
- package/lib/ImagePlan.d.ts.map +1 -0
- package/lib/ImagePlan.js +70 -0
- package/lib/ImagePlan.js.map +1 -0
- package/lib/InferEnv.d.ts +26 -0
- package/lib/InferEnv.d.ts.map +1 -0
- package/lib/InferEnv.js +1 -0
- package/lib/InferEnv.js.map +1 -0
- package/lib/InvokeFunction.d.ts +186 -0
- package/lib/InvokeFunction.d.ts.map +1 -0
- package/lib/InvokeFunction.js +10 -0
- package/lib/InvokeFunction.js.map +1 -0
- package/lib/InvokeFunctionHttp.d.ts +39 -0
- package/lib/InvokeFunctionHttp.d.ts.map +1 -0
- package/lib/InvokeFunctionHttp.js +210 -0
- package/lib/InvokeFunctionHttp.js.map +1 -0
- package/lib/ModalBindings.d.ts +138 -0
- package/lib/ModalBindings.d.ts.map +1 -0
- package/lib/ModalBindings.js +223 -0
- package/lib/ModalBindings.js.map +1 -0
- package/lib/MountBucket.d.ts +80 -0
- package/lib/MountBucket.d.ts.map +1 -0
- package/lib/MountBucket.js +44 -0
- package/lib/MountBucket.js.map +1 -0
- package/lib/MountVolume.d.ts +77 -0
- package/lib/MountVolume.d.ts.map +1 -0
- package/lib/MountVolume.js +41 -0
- package/lib/MountVolume.js.map +1 -0
- package/lib/Mounts.d.ts +134 -0
- package/lib/Mounts.d.ts.map +1 -0
- package/lib/Mounts.js +87 -0
- package/lib/Mounts.js.map +1 -0
- package/lib/PersistentSandbox.d.ts +75 -0
- package/lib/PersistentSandbox.d.ts.map +1 -0
- package/lib/PersistentSandbox.js +93 -0
- package/lib/PersistentSandbox.js.map +1 -0
- package/lib/Providers.d.ts +23 -0
- package/lib/Providers.d.ts.map +1 -0
- package/lib/Providers.js +64 -0
- package/lib/Providers.js.map +1 -0
- package/lib/Proxy.d.ts +94 -0
- package/lib/Proxy.d.ts.map +1 -0
- package/lib/Proxy.js +132 -0
- package/lib/Proxy.js.map +1 -0
- package/lib/Queue.d.ts +147 -0
- package/lib/Queue.d.ts.map +1 -0
- package/lib/Queue.js +177 -0
- package/lib/Queue.js.map +1 -0
- package/lib/QueueClient.d.ts +64 -0
- package/lib/QueueClient.d.ts.map +1 -0
- package/lib/QueueClient.js +73 -0
- package/lib/QueueClient.js.map +1 -0
- package/lib/ReadApp.d.ts +85 -0
- package/lib/ReadApp.d.ts.map +1 -0
- package/lib/ReadApp.js +3 -0
- package/lib/ReadApp.js.map +1 -0
- package/lib/ReadAppHttp.d.ts +26 -0
- package/lib/ReadAppHttp.d.ts.map +1 -0
- package/lib/ReadAppHttp.js +106 -0
- package/lib/ReadAppHttp.js.map +1 -0
- package/lib/ReadDict.d.ts +39 -0
- package/lib/ReadDict.d.ts.map +1 -0
- package/lib/ReadDict.js +3 -0
- package/lib/ReadDict.js.map +1 -0
- package/lib/ReadDictHttp.d.ts +12 -0
- package/lib/ReadDictHttp.d.ts.map +1 -0
- package/lib/ReadDictHttp.js +23 -0
- package/lib/ReadDictHttp.js.map +1 -0
- package/lib/ReadFunction.d.ts +73 -0
- package/lib/ReadFunction.d.ts.map +1 -0
- package/lib/ReadFunction.js +3 -0
- package/lib/ReadFunction.js.map +1 -0
- package/lib/ReadFunctionHttp.d.ts +25 -0
- package/lib/ReadFunctionHttp.d.ts.map +1 -0
- package/lib/ReadFunctionHttp.js +63 -0
- package/lib/ReadFunctionHttp.js.map +1 -0
- package/lib/ReadQueue.d.ts +39 -0
- package/lib/ReadQueue.d.ts.map +1 -0
- package/lib/ReadQueue.js +3 -0
- package/lib/ReadQueue.js.map +1 -0
- package/lib/ReadQueueHttp.d.ts +12 -0
- package/lib/ReadQueueHttp.d.ts.map +1 -0
- package/lib/ReadQueueHttp.js +23 -0
- package/lib/ReadQueueHttp.js.map +1 -0
- package/lib/ReadServer.d.ts +72 -0
- package/lib/ReadServer.d.ts.map +1 -0
- package/lib/ReadServer.js +3 -0
- package/lib/ReadServer.js.map +1 -0
- package/lib/ReadServerHttp.d.ts +25 -0
- package/lib/ReadServerHttp.d.ts.map +1 -0
- package/lib/ReadServerHttp.js +70 -0
- package/lib/ReadServerHttp.js.map +1 -0
- package/lib/ReadVolume.d.ts +40 -0
- package/lib/ReadVolume.d.ts.map +1 -0
- package/lib/ReadVolume.js +3 -0
- package/lib/ReadVolume.js.map +1 -0
- package/lib/ReadVolumeHttp.d.ts +12 -0
- package/lib/ReadVolumeHttp.d.ts.map +1 -0
- package/lib/ReadVolumeHttp.js +24 -0
- package/lib/ReadVolumeHttp.js.map +1 -0
- package/lib/ReadWriteDict.d.ts +39 -0
- package/lib/ReadWriteDict.d.ts.map +1 -0
- package/lib/ReadWriteDict.js +3 -0
- package/lib/ReadWriteDict.js.map +1 -0
- package/lib/ReadWriteDictHttp.d.ts +12 -0
- package/lib/ReadWriteDictHttp.d.ts.map +1 -0
- package/lib/ReadWriteDictHttp.js +23 -0
- package/lib/ReadWriteDictHttp.js.map +1 -0
- package/lib/ReadWriteQueue.d.ts +40 -0
- package/lib/ReadWriteQueue.d.ts.map +1 -0
- package/lib/ReadWriteQueue.js +3 -0
- package/lib/ReadWriteQueue.js.map +1 -0
- package/lib/ReadWriteQueueHttp.d.ts +12 -0
- package/lib/ReadWriteQueueHttp.d.ts.map +1 -0
- package/lib/ReadWriteQueueHttp.js +23 -0
- package/lib/ReadWriteQueueHttp.js.map +1 -0
- package/lib/ReadWriteVolume.d.ts +40 -0
- package/lib/ReadWriteVolume.d.ts.map +1 -0
- package/lib/ReadWriteVolume.js +3 -0
- package/lib/ReadWriteVolume.js.map +1 -0
- package/lib/ReadWriteVolumeHttp.d.ts +12 -0
- package/lib/ReadWriteVolumeHttp.d.ts.map +1 -0
- package/lib/ReadWriteVolumeHttp.js +24 -0
- package/lib/ReadWriteVolumeHttp.js.map +1 -0
- package/lib/RuntimeOwner.d.ts +39 -0
- package/lib/RuntimeOwner.d.ts.map +1 -0
- package/lib/RuntimeOwner.js +85 -0
- package/lib/RuntimeOwner.js.map +1 -0
- package/lib/Sandbox.d.ts +215 -0
- package/lib/Sandbox.d.ts.map +1 -0
- package/lib/Sandbox.js +278 -0
- package/lib/Sandbox.js.map +1 -0
- package/lib/SandboxClient.d.ts +748 -0
- package/lib/SandboxClient.d.ts.map +1 -0
- package/lib/SandboxClient.js +710 -0
- package/lib/SandboxClient.js.map +1 -0
- package/lib/ScaleFunction.d.ts +54 -0
- package/lib/ScaleFunction.d.ts.map +1 -0
- package/lib/ScaleFunction.js +3 -0
- package/lib/ScaleFunction.js.map +1 -0
- package/lib/ScaleFunctionHttp.d.ts +21 -0
- package/lib/ScaleFunctionHttp.d.ts.map +1 -0
- package/lib/ScaleFunctionHttp.js +39 -0
- package/lib/ScaleFunctionHttp.js.map +1 -0
- package/lib/Secret.d.ts +170 -0
- package/lib/Secret.d.ts.map +1 -0
- package/lib/Secret.js +196 -0
- package/lib/Secret.js.map +1 -0
- package/lib/Server.d.ts +155 -0
- package/lib/Server.d.ts.map +1 -0
- package/lib/Server.js +184 -0
- package/lib/Server.js.map +1 -0
- package/lib/ServiceUser.d.ts +139 -0
- package/lib/ServiceUser.d.ts.map +1 -0
- package/lib/ServiceUser.js +210 -0
- package/lib/ServiceUser.js.map +1 -0
- package/lib/Volume.d.ts +170 -0
- package/lib/Volume.d.ts.map +1 -0
- package/lib/Volume.js +220 -0
- package/lib/Volume.js.map +1 -0
- package/lib/VolumeClient.d.ts +53 -0
- package/lib/VolumeClient.d.ts.map +1 -0
- package/lib/VolumeClient.js +22 -0
- package/lib/VolumeClient.js.map +1 -0
- package/lib/VolumeFiles.d.ts +94 -0
- package/lib/VolumeFiles.d.ts.map +1 -0
- package/lib/VolumeFiles.js +139 -0
- package/lib/VolumeFiles.js.map +1 -0
- package/lib/WebhookToken.d.ts +102 -0
- package/lib/WebhookToken.d.ts.map +1 -0
- package/lib/WebhookToken.js +176 -0
- package/lib/WebhookToken.js.map +1 -0
- package/lib/WorkspaceSettings.d.ts +70 -0
- package/lib/WorkspaceSettings.d.ts.map +1 -0
- package/lib/WorkspaceSettings.js +105 -0
- package/lib/WorkspaceSettings.js.map +1 -0
- package/lib/WriteApp.d.ts +38 -0
- package/lib/WriteApp.d.ts.map +1 -0
- package/lib/WriteApp.js +3 -0
- package/lib/WriteApp.js.map +1 -0
- package/lib/WriteAppHttp.d.ts +23 -0
- package/lib/WriteAppHttp.d.ts.map +1 -0
- package/lib/WriteAppHttp.js +36 -0
- package/lib/WriteAppHttp.js.map +1 -0
- package/lib/WriteDict.d.ts +39 -0
- package/lib/WriteDict.d.ts.map +1 -0
- package/lib/WriteDict.js +3 -0
- package/lib/WriteDict.js.map +1 -0
- package/lib/WriteDictHttp.d.ts +12 -0
- package/lib/WriteDictHttp.d.ts.map +1 -0
- package/lib/WriteDictHttp.js +23 -0
- package/lib/WriteDictHttp.js.map +1 -0
- package/lib/WriteQueue.d.ts +39 -0
- package/lib/WriteQueue.d.ts.map +1 -0
- package/lib/WriteQueue.js +3 -0
- package/lib/WriteQueue.js.map +1 -0
- package/lib/WriteQueueHttp.d.ts +12 -0
- package/lib/WriteQueueHttp.d.ts.map +1 -0
- package/lib/WriteQueueHttp.js +23 -0
- package/lib/WriteQueueHttp.js.map +1 -0
- package/lib/WriteSecret.d.ts +53 -0
- package/lib/WriteSecret.d.ts.map +1 -0
- package/lib/WriteSecret.js +3 -0
- package/lib/WriteSecret.js.map +1 -0
- package/lib/WriteSecretHttp.d.ts +23 -0
- package/lib/WriteSecretHttp.d.ts.map +1 -0
- package/lib/WriteSecretHttp.js +44 -0
- package/lib/WriteSecretHttp.js.map +1 -0
- package/lib/WriteVolume.d.ts +39 -0
- package/lib/WriteVolume.d.ts.map +1 -0
- package/lib/WriteVolume.js +3 -0
- package/lib/WriteVolume.js.map +1 -0
- package/lib/WriteVolumeHttp.d.ts +12 -0
- package/lib/WriteVolumeHttp.d.ts.map +1 -0
- package/lib/WriteVolumeHttp.js +24 -0
- package/lib/WriteVolumeHttp.js.map +1 -0
- package/lib/index.d.ts +80 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +78 -0
- package/lib/index.js.map +1 -0
- package/lib/internal/Declared.d.ts +29 -0
- package/lib/internal/Declared.d.ts.map +1 -0
- package/lib/internal/Declared.js +31 -0
- package/lib/internal/Declared.js.map +1 -0
- package/lib/internal/Deploy.d.ts +110 -0
- package/lib/internal/Deploy.d.ts.map +1 -0
- package/lib/internal/Deploy.js +230 -0
- package/lib/internal/Deploy.js.map +1 -0
- package/lib/internal/Entrypoint.d.ts +52 -0
- package/lib/internal/Entrypoint.d.ts.map +1 -0
- package/lib/internal/Entrypoint.js +193 -0
- package/lib/internal/Entrypoint.js.map +1 -0
- package/lib/internal/Rpc.d.ts +17 -0
- package/lib/internal/Rpc.d.ts.map +1 -0
- package/lib/internal/Rpc.js +49 -0
- package/lib/internal/Rpc.js.map +1 -0
- package/lib/internal/RpcAuth.d.ts +41 -0
- package/lib/internal/RpcAuth.d.ts.map +1 -0
- package/lib/internal/RpcAuth.js +100 -0
- package/lib/internal/RpcAuth.js.map +1 -0
- package/lib/internal/Runtime.d.ts +127 -0
- package/lib/internal/Runtime.d.ts.map +1 -0
- package/lib/internal/Runtime.js +246 -0
- package/lib/internal/Runtime.js.map +1 -0
- package/lib/internal/Tags.d.ts +19 -0
- package/lib/internal/Tags.d.ts.map +1 -0
- package/lib/internal/Tags.js +33 -0
- package/lib/internal/Tags.js.map +1 -0
- package/lib/internal/TcpConnect.d.ts +12 -0
- package/lib/internal/TcpConnect.d.ts.map +1 -0
- package/lib/internal/TcpConnect.js +46 -0
- package/lib/internal/TcpConnect.js.map +1 -0
- package/lib/internal/Transport.d.ts +13 -0
- package/lib/internal/Transport.d.ts.map +1 -0
- package/lib/internal/Transport.js +16 -0
- package/lib/internal/Transport.js.map +1 -0
- package/lib/internal.d.ts +71 -0
- package/lib/internal.d.ts.map +1 -0
- package/lib/internal.js +102 -0
- package/lib/internal.js.map +1 -0
- package/package.json +59 -3
- package/src/App.ts +262 -0
- package/src/AuthProvider.ts +295 -0
- package/src/BindingHttp.ts +112 -0
- package/src/Blob.ts +71 -0
- package/src/Bootstrap.ts +52 -0
- package/src/Cbor.ts +158 -0
- package/src/ConnectSandbox.ts +99 -0
- package/src/Container.ts +121 -0
- package/src/Contributions.ts +9 -0
- package/src/CreateDict.ts +95 -0
- package/src/CreateDictHttp.ts +91 -0
- package/src/CreateImage.ts +105 -0
- package/src/CreateImageHttp.ts +117 -0
- package/src/CreateQueue.ts +95 -0
- package/src/CreateQueueHttp.ts +91 -0
- package/src/CreateSandbox.ts +228 -0
- package/src/CreateSandboxHttp.ts +160 -0
- package/src/CreateSecret.ts +109 -0
- package/src/CreateSecretHttp.ts +83 -0
- package/src/CreateVolume.ts +96 -0
- package/src/CreateVolumeHttp.ts +93 -0
- package/src/Credentials.ts +74 -0
- package/src/Dict.ts +245 -0
- package/src/DictClient.ts +166 -0
- package/src/Domain.ts +147 -0
- package/src/Endpoint.ts +406 -0
- package/src/Environment.ts +373 -0
- package/src/FetchServer.ts +126 -0
- package/src/FetchServerHttp.ts +110 -0
- package/src/Function.ts +397 -0
- package/src/FunctionAutoscaler.ts +210 -0
- package/src/FunctionTarget.ts +181 -0
- package/src/Image.ts +281 -0
- package/src/ImageBuild.ts +228 -0
- package/src/ImagePlan.ts +78 -0
- package/src/InferEnv.ts +27 -0
- package/src/InvokeFunction.ts +211 -0
- package/src/InvokeFunctionHttp.ts +316 -0
- package/src/ModalBindings.ts +310 -0
- package/src/MountBucket.ts +137 -0
- package/src/MountVolume.ts +113 -0
- package/src/Mounts.ts +230 -0
- package/src/PersistentSandbox.ts +142 -0
- package/src/Providers.ts +100 -0
- package/src/Proxy.ts +191 -0
- package/src/Queue.ts +258 -0
- package/src/QueueClient.ts +149 -0
- package/src/ReadApp.ts +101 -0
- package/src/ReadAppHttp.ts +142 -0
- package/src/ReadDict.ts +44 -0
- package/src/ReadDictHttp.ts +27 -0
- package/src/ReadFunction.ts +107 -0
- package/src/ReadFunctionHttp.ts +91 -0
- package/src/ReadQueue.ts +44 -0
- package/src/ReadQueueHttp.ts +27 -0
- package/src/ReadServer.ts +98 -0
- package/src/ReadServerHttp.ts +101 -0
- package/src/ReadVolume.ts +45 -0
- package/src/ReadVolumeHttp.ts +28 -0
- package/src/ReadWriteDict.ts +44 -0
- package/src/ReadWriteDictHttp.ts +27 -0
- package/src/ReadWriteQueue.ts +45 -0
- package/src/ReadWriteQueueHttp.ts +27 -0
- package/src/ReadWriteVolume.ts +45 -0
- package/src/ReadWriteVolumeHttp.ts +28 -0
- package/src/RuntimeOwner.ts +111 -0
- package/src/Sandbox.ts +402 -0
- package/src/SandboxClient.ts +1404 -0
- package/src/ScaleFunction.ts +70 -0
- package/src/ScaleFunctionHttp.ts +54 -0
- package/src/Secret.ts +296 -0
- package/src/Server.ts +285 -0
- package/src/ServiceUser.ts +295 -0
- package/src/Volume.ts +320 -0
- package/src/VolumeClient.ts +108 -0
- package/src/VolumeFiles.ts +194 -0
- package/src/WebhookToken.ts +230 -0
- package/src/WorkspaceSettings.ts +160 -0
- package/src/WriteApp.ts +43 -0
- package/src/WriteAppHttp.ts +51 -0
- package/src/WriteDict.ts +44 -0
- package/src/WriteDictHttp.ts +27 -0
- package/src/WriteQueue.ts +44 -0
- package/src/WriteQueueHttp.ts +27 -0
- package/src/WriteSecret.ts +60 -0
- package/src/WriteSecretHttp.ts +56 -0
- package/src/WriteVolume.ts +44 -0
- package/src/WriteVolumeHttp.ts +28 -0
- package/src/globals.d.ts +2 -0
- package/src/index.ts +85 -0
- package/src/internal/Declared.ts +80 -0
- package/src/internal/Deploy.ts +309 -0
- package/src/internal/Entrypoint.ts +198 -0
- package/src/internal/Rpc.ts +59 -0
- package/src/internal/RpcAuth.ts +132 -0
- package/src/internal/Runtime.ts +386 -0
- package/src/internal/Tags.ts +44 -0
- package/src/internal/TcpConnect.ts +78 -0
- package/src/internal/Transport.ts +25 -0
- package/src/internal.ts +147 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import * as environment from "@distilled.cloud/modal/environment";
|
|
2
|
+
import { Unowned } from "alchemy/AdoptPolicy";
|
|
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 { isGeneratedName, objectName } from "./internal.js";
|
|
8
|
+
import { declarable } from "./internal/Declared.js";
|
|
9
|
+
export class EnvironmentUnexpectedResponse extends Data.TaggedError("Modal.EnvironmentUnexpectedResponse") {
|
|
10
|
+
}
|
|
11
|
+
const ROLE_TO_WIRE = {
|
|
12
|
+
viewer: "ENVIRONMENT_ROLE_VIEWER",
|
|
13
|
+
contributor: "ENVIRONMENT_ROLE_CONTRIBUTOR",
|
|
14
|
+
"no-access": "ENVIRONMENT_ROLE_NO_ACCESS",
|
|
15
|
+
};
|
|
16
|
+
const roleFromWire = (role) => Object.keys(ROLE_TO_WIRE).find((key) => ROLE_TO_WIRE[key] === role);
|
|
17
|
+
/**
|
|
18
|
+
* A Modal Environment: an isolated namespace inside a workspace for Apps,
|
|
19
|
+
* Volumes, Dicts, Queues, Secrets and Sandboxes, with its own concurrency
|
|
20
|
+
* limits, spend budget and member roles. Objects with the same name in two
|
|
21
|
+
* environments are different objects, so one environment per stage keeps
|
|
22
|
+
* stages apart.
|
|
23
|
+
*
|
|
24
|
+
* Modal environments have no tags. Ownership is inferred from Alchemy
|
|
25
|
+
* state: an environment found under an explicit `name` without prior state
|
|
26
|
+
* is reported as unowned.
|
|
27
|
+
*
|
|
28
|
+
* ### Creating an Environment
|
|
29
|
+
* **Example:** One environment per stage
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import * as Modal from "@alchemy.run/modal";
|
|
32
|
+
*
|
|
33
|
+
* export const Agents = Modal.Environment("Agents", {});
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* **Example:** Limits and a monthly budget
|
|
37
|
+
* ```typescript
|
|
38
|
+
* import * as Modal from "@alchemy.run/modal";
|
|
39
|
+
*
|
|
40
|
+
* export const Agents = Modal.Environment("Agents", {
|
|
41
|
+
* maxConcurrentTasks: 50,
|
|
42
|
+
* maxConcurrentGpus: 4,
|
|
43
|
+
* budget: 200,
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* ### Access control
|
|
48
|
+
* **Example:** A managed environment with explicit roles
|
|
49
|
+
* ```typescript
|
|
50
|
+
* import * as Modal from "@alchemy.run/modal";
|
|
51
|
+
*
|
|
52
|
+
* export const Production = Modal.Environment("Production", {
|
|
53
|
+
* name: "production",
|
|
54
|
+
* managed: true,
|
|
55
|
+
* defaultMemberRole: "viewer",
|
|
56
|
+
* roles: [{ userId: "us-1234", role: "contributor" }],
|
|
57
|
+
* blockUnauthenticatedResources: true,
|
|
58
|
+
* });
|
|
59
|
+
* ```
|
|
60
|
+
*
|
|
61
|
+
* ### Using the environment
|
|
62
|
+
* **Example:** Put objects in it
|
|
63
|
+
* ```typescript
|
|
64
|
+
* import * as Modal from "@alchemy.run/modal";
|
|
65
|
+
*
|
|
66
|
+
* export const Agents = Modal.Environment("Agents", {});
|
|
67
|
+
* export const Coder = Modal.App("Coder", { environment: Agents });
|
|
68
|
+
* export const Workspace = Modal.Volume("Workspace", { environment: Agents });
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* ### Looking up an existing environment
|
|
72
|
+
* `Environment.lookup` references an environment Alchemy doesn't manage (created with
|
|
73
|
+
* the Modal CLI or by another stack). It is read during plan/deploy, never
|
|
74
|
+
* created, updated or deleted.
|
|
75
|
+
*
|
|
76
|
+
* **Example:** Reference an existing environment
|
|
77
|
+
* ```typescript
|
|
78
|
+
* const staging = Modal.Environment.lookup({ name: "staging" });
|
|
79
|
+
* ```
|
|
80
|
+
*
|
|
81
|
+
* @resource
|
|
82
|
+
* @product Environment
|
|
83
|
+
*/
|
|
84
|
+
export const Environment = declarable()(Resource("Modal.Environment"));
|
|
85
|
+
const blockToWire = (value) => value === undefined
|
|
86
|
+
? "ENVIRONMENT_BLOCK_UNAUTHENTICATED_RESOURCES_INHERIT"
|
|
87
|
+
: value
|
|
88
|
+
? "ENVIRONMENT_BLOCK_UNAUTHENTICATED_RESOURCES_BLOCK"
|
|
89
|
+
: "ENVIRONMENT_BLOCK_UNAUTHENTICATED_RESOURCES_ALLOW";
|
|
90
|
+
const principalKey = (p) => p.userId ? `user:${p.userId}` : `service:${p.serviceUserId ?? ""}`;
|
|
91
|
+
export const EnvironmentProvider = () => Provider.effect(Environment, Effect.gen(function* () {
|
|
92
|
+
const observe = Effect.fn(function* (name) {
|
|
93
|
+
const { items } = yield* environment.listEnvironment({});
|
|
94
|
+
return (items ?? []).find((item) => item.name === name);
|
|
95
|
+
});
|
|
96
|
+
const toAttrs = (item) => ({
|
|
97
|
+
environmentId: item.environmentId ?? "",
|
|
98
|
+
name: item.name ?? "",
|
|
99
|
+
webhookSuffix: item.webhookSuffix || undefined,
|
|
100
|
+
isDefault: item.default ?? false,
|
|
101
|
+
managed: item.isManaged ?? false,
|
|
102
|
+
});
|
|
103
|
+
return {
|
|
104
|
+
stables: ["environmentId"],
|
|
105
|
+
lookup: Effect.fn(function* ({ name }) {
|
|
106
|
+
const item = yield* observe(name);
|
|
107
|
+
return item ? toAttrs(item) : undefined;
|
|
108
|
+
}),
|
|
109
|
+
read: Effect.fn(function* ({ id, olds, output }) {
|
|
110
|
+
const name = output?.name ?? (yield* objectName(id, olds?.name));
|
|
111
|
+
const item = yield* observe(name);
|
|
112
|
+
if (!item)
|
|
113
|
+
return undefined;
|
|
114
|
+
const attrs = toAttrs(item);
|
|
115
|
+
return output !== undefined || olds?.name === undefined ? attrs : Unowned(attrs);
|
|
116
|
+
}),
|
|
117
|
+
reconcile: Effect.fn(function* ({ id, news, output, session }) {
|
|
118
|
+
const desiredName = yield* objectName(id, news.name);
|
|
119
|
+
// Observe: by the previous name (a rename) and the desired name.
|
|
120
|
+
let current = (output !== undefined && output.name !== desiredName
|
|
121
|
+
? yield* observe(output.name)
|
|
122
|
+
: undefined) ?? (yield* observe(desiredName));
|
|
123
|
+
// Ensure
|
|
124
|
+
if (!current) {
|
|
125
|
+
yield* session.note(`Creating environment ${desiredName}...`);
|
|
126
|
+
yield* environment
|
|
127
|
+
.createEnvironment({
|
|
128
|
+
name: desiredName,
|
|
129
|
+
isManaged: news.managed,
|
|
130
|
+
defaultMemberRole: news.defaultMemberRole
|
|
131
|
+
? ROLE_TO_WIRE[news.defaultMemberRole]
|
|
132
|
+
: undefined,
|
|
133
|
+
})
|
|
134
|
+
.pipe(Effect.catchTag("EnvironmentAlreadyExists", () => Effect.void));
|
|
135
|
+
current = yield* observe(desiredName);
|
|
136
|
+
if (!current) {
|
|
137
|
+
return yield* new EnvironmentUnexpectedResponse({
|
|
138
|
+
message: `Modal environment ${desiredName} was not listed after create`,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Sync name, suffix, limits and the unauthenticated-resources policy.
|
|
143
|
+
const desiredBlock = blockToWire(news.blockUnauthenticatedResources);
|
|
144
|
+
const observedBlock = blockToWire(current.blockUnauthenticatedResources);
|
|
145
|
+
if (current.name !== desiredName ||
|
|
146
|
+
(news.webhookSuffix !== undefined && current.webhookSuffix !== news.webhookSuffix) ||
|
|
147
|
+
(news.maxConcurrentTasks !== undefined &&
|
|
148
|
+
current.maxConcurrentTasks !== news.maxConcurrentTasks) ||
|
|
149
|
+
(news.maxConcurrentGpus !== undefined &&
|
|
150
|
+
current.maxConcurrentGpus !== news.maxConcurrentGpus) ||
|
|
151
|
+
(news.blockUnauthenticatedResources !== undefined && desiredBlock !== observedBlock)) {
|
|
152
|
+
yield* environment.updateEnvironment({
|
|
153
|
+
currentName: current.name,
|
|
154
|
+
name: desiredName,
|
|
155
|
+
webSuffix: news.webhookSuffix,
|
|
156
|
+
maxConcurrentTasks: news.maxConcurrentTasks,
|
|
157
|
+
maxConcurrentGpus: news.maxConcurrentGpus,
|
|
158
|
+
blockUnauthenticatedResources: news.blockUnauthenticatedResources === undefined ? undefined : desiredBlock,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
const environmentId = current.environmentId ?? "";
|
|
162
|
+
// Sync budget against the observed limit. A workspace without
|
|
163
|
+
// budgets has none to clear; asking for one there fails with
|
|
164
|
+
// `EnvironmentBudgetsNotEnabled`.
|
|
165
|
+
const budget = yield* environment
|
|
166
|
+
.environmentGetBudget({ environmentId })
|
|
167
|
+
.pipe(Effect.catchTag("EnvironmentBudgetsNotEnabled", () => Effect.succeed({})));
|
|
168
|
+
if (news.budget !== undefined && budget.cycleBudgetDollars !== news.budget) {
|
|
169
|
+
yield* environment.environmentSetBudget({
|
|
170
|
+
environmentId,
|
|
171
|
+
cycleBudgetDollars: news.budget,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
else if (news.budget === undefined && budget.cycleBudgetDollars !== undefined) {
|
|
175
|
+
yield* environment.environmentSetBudget({ environmentId, clearBudget: true });
|
|
176
|
+
}
|
|
177
|
+
// Sync managed mode and the default member role.
|
|
178
|
+
const managed = news.managed ?? false;
|
|
179
|
+
if ((current.isManaged ?? false) !== managed) {
|
|
180
|
+
yield* environment.environmentSetManaged({
|
|
181
|
+
environmentId,
|
|
182
|
+
managed,
|
|
183
|
+
defaultMemberRole: news.defaultMemberRole
|
|
184
|
+
? ROLE_TO_WIRE[news.defaultMemberRole]
|
|
185
|
+
: undefined,
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
if (news.defaultMemberRole !== undefined &&
|
|
189
|
+
roleFromWire(current.defaultMemberRole) !== news.defaultMemberRole) {
|
|
190
|
+
yield* environment.environmentSetDefaultMemberRole({
|
|
191
|
+
environmentId,
|
|
192
|
+
defaultMemberRole: ROLE_TO_WIRE[news.defaultMemberRole],
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
// Sync explicit role assignments against the observed principals:
|
|
196
|
+
// listed principals get their role, and any other principal with
|
|
197
|
+
// an explicit assignment falls back to the default member role.
|
|
198
|
+
if (news.roles !== undefined) {
|
|
199
|
+
const observed = yield* environment.environmentGetRoles({ environmentId });
|
|
200
|
+
const principals = observed.principalRoles ?? [];
|
|
201
|
+
const desired = new Map(news.roles.map((assignment) => [principalKey(assignment), assignment]));
|
|
202
|
+
for (const assignment of desired.values()) {
|
|
203
|
+
const match = principals.find((p) => principalKey(p) === principalKey(assignment));
|
|
204
|
+
if (match === undefined ||
|
|
205
|
+
match.hasRoleAssignment !== true ||
|
|
206
|
+
roleFromWire(match.role) !== assignment.role) {
|
|
207
|
+
yield* environment.setEnvironmentRole({
|
|
208
|
+
environmentId,
|
|
209
|
+
...("userId" in assignment
|
|
210
|
+
? { userId: assignment.userId }
|
|
211
|
+
: { serviceUserId: assignment.serviceUserId }),
|
|
212
|
+
role: ROLE_TO_WIRE[assignment.role],
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
for (const principal of principals) {
|
|
217
|
+
if (principal.hasRoleAssignment !== true || desired.has(principalKey(principal))) {
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
yield* environment.setEnvironmentRole({
|
|
221
|
+
environmentId,
|
|
222
|
+
userId: principal.userId || undefined,
|
|
223
|
+
serviceUserId: principal.serviceUserId || undefined,
|
|
224
|
+
role: "ENVIRONMENT_ROLE_UNSPECIFIED",
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
const final = yield* observe(desiredName);
|
|
229
|
+
return toAttrs(final ?? current);
|
|
230
|
+
}),
|
|
231
|
+
delete: Effect.fn(function* ({ output }) {
|
|
232
|
+
yield* environment
|
|
233
|
+
.deleteEnvironment({ name: output.name })
|
|
234
|
+
.pipe(Effect.catchTag("EnvironmentNotFound", () => Effect.void));
|
|
235
|
+
}),
|
|
236
|
+
list: Effect.fn(function* () {
|
|
237
|
+
const { items } = yield* environment.listEnvironment({});
|
|
238
|
+
return (items ?? [])
|
|
239
|
+
.filter((item) => !item.default && isGeneratedName(item.name))
|
|
240
|
+
.map(toAttrs);
|
|
241
|
+
}),
|
|
242
|
+
};
|
|
243
|
+
}));
|
|
244
|
+
//# sourceMappingURL=Environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Environment.js","sources":["../src/Environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import * as Binding from "alchemy/Binding";
|
|
2
|
+
import type { Input } from "alchemy/Input";
|
|
3
|
+
import type { Rpc } from "alchemy/Rpc";
|
|
4
|
+
import type { RuntimeContext } from "alchemy/RuntimeContext";
|
|
5
|
+
import type * as Effect from "effect/Effect";
|
|
6
|
+
import type * as HttpClientError from "effect/http/HttpClientError";
|
|
7
|
+
import type * as HttpClientRequest from "effect/http/HttpClientRequest";
|
|
8
|
+
import type * as HttpClientResponse from "effect/http/HttpClientResponse";
|
|
9
|
+
import type { Endpoint } from "./Endpoint.ts";
|
|
10
|
+
import type { ServerUrlMissing } from "./FetchServerHttp.ts";
|
|
11
|
+
import type { Function } from "./Function.ts";
|
|
12
|
+
import type { Server } from "./Server.ts";
|
|
13
|
+
/** Send requests to a deployed Modal Server, web Function or model Endpoint. */
|
|
14
|
+
export interface ServerClient {
|
|
15
|
+
/** The server's URL. */
|
|
16
|
+
readonly url: Effect.Effect<string, ServerUrlMissing, RuntimeContext>;
|
|
17
|
+
/**
|
|
18
|
+
* Send a request: its path and query are kept, the host is the server's,
|
|
19
|
+
* and Modal's proxy auth headers are added.
|
|
20
|
+
*/
|
|
21
|
+
fetch(request: HttpClientRequest.HttpClientRequest): Effect.Effect<HttpClientResponse.HttpClientResponse, ServerUrlMissing | HttpClientError.HttpClientError, RuntimeContext>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The client {@link FetchServer} returns: `url` and `fetch`, plus the RPC
|
|
25
|
+
* methods of a `Modal.Server` program (everything it returns besides
|
|
26
|
+
* `fetch` and `run`).
|
|
27
|
+
*/
|
|
28
|
+
export type FetchClient<Shape> = ServerClient & Omit<Shape, "fetch" | "run" | "url">;
|
|
29
|
+
/**
|
|
30
|
+
* Call a `Modal.Server`, a `Modal.Function` with `web`, or a model
|
|
31
|
+
* `Modal.Endpoint` from any runtime. Servers and endpoints require Modal's
|
|
32
|
+
* proxy auth by default: the binding creates a `Modal.WebhookToken` for the
|
|
33
|
+
* host and sends its `Modal-Key` / `Modal-Secret` headers with every request.
|
|
34
|
+
*
|
|
35
|
+
* A `Modal.Server` program's RPC methods come back on the client too. Each
|
|
36
|
+
* call is a `POST /__rpc__/<method>` to the Server through Modal's proxy,
|
|
37
|
+
* with the arguments and result as JSON; a method that returns a `Stream`
|
|
38
|
+
* streams. The binding gives the host its own key for the Server, which
|
|
39
|
+
* every method call carries: the Server answers methods only for callers
|
|
40
|
+
* bound to it. It serves them only behind proxy auth, so an
|
|
41
|
+
* `unauthenticated` Server answers them with `404`.
|
|
42
|
+
*
|
|
43
|
+
* ### Call a Server
|
|
44
|
+
* **Example:** From a Cloudflare Worker
|
|
45
|
+
* ```typescript
|
|
46
|
+
* import * as Cloudflare from "@alchemy.run/cloudflare";
|
|
47
|
+
* import * as Modal from "@alchemy.run/modal";
|
|
48
|
+
* import * as Effect from "effect/Effect";
|
|
49
|
+
* import * as HttpClientRequest from "effect/http/HttpClientRequest";
|
|
50
|
+
* import * as HttpServerResponse from "effect/http/HttpServerResponse";
|
|
51
|
+
* import Api from "./Api.ts";
|
|
52
|
+
*
|
|
53
|
+
* export default class Gateway extends Cloudflare.Worker<Gateway>()(
|
|
54
|
+
* "Gateway",
|
|
55
|
+
* { main: import.meta.url },
|
|
56
|
+
* Effect.gen(function* () {
|
|
57
|
+
* const api = yield* Modal.FetchServer(Api);
|
|
58
|
+
* return {
|
|
59
|
+
* fetch: Effect.gen(function* () {
|
|
60
|
+
* const response = yield* api.fetch(HttpClientRequest.get("/health"));
|
|
61
|
+
* return HttpServerResponse.text(yield* response.text, { status: response.status });
|
|
62
|
+
* }).pipe(Effect.orDie),
|
|
63
|
+
* };
|
|
64
|
+
* }).pipe(Effect.provide(Modal.FetchServerHttp)),
|
|
65
|
+
* ) {}
|
|
66
|
+
* ```
|
|
67
|
+
*
|
|
68
|
+
* ### Call a Server's methods
|
|
69
|
+
* **Example:** RPC methods next to `fetch`
|
|
70
|
+
* ```typescript
|
|
71
|
+
* // src/Api.ts
|
|
72
|
+
* export default class Api extends Modal.Server<Api>()(
|
|
73
|
+
* "Api",
|
|
74
|
+
* { main: import.meta.url, app: Backend },
|
|
75
|
+
* Effect.gen(function* () {
|
|
76
|
+
* return {
|
|
77
|
+
* greet: Effect.fn(function* (name: string) {
|
|
78
|
+
* return `hello ${name}`;
|
|
79
|
+
* }),
|
|
80
|
+
* fetch: Effect.succeed(HttpServerResponse.text("ok")),
|
|
81
|
+
* };
|
|
82
|
+
* }),
|
|
83
|
+
* ) {}
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* **Example:** Call them from a Cloudflare Worker
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const api = yield* Modal.FetchServer(Api);
|
|
89
|
+
* const greeting = yield* api.greet("modal");
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* @binding
|
|
93
|
+
* @product Server
|
|
94
|
+
*/
|
|
95
|
+
export interface FetchServer extends Binding.Service<FetchServer, "Modal.FetchServer", (server: Server | Function | Endpoint) => Effect.Effect<ServerClient>> {
|
|
96
|
+
}
|
|
97
|
+
/** FetchServer's call signatures, typed from the target's program. */
|
|
98
|
+
export interface FetchServerCall {
|
|
99
|
+
/** A `Modal.Server` of the Stack: `url`, `fetch` and its program's RPC methods. */
|
|
100
|
+
<Shape, Req = never>(server: (Server & Rpc<Shape>) | Effect.Effect<Server & Rpc<Shape>, never, Req>): Effect.Effect<FetchClient<Shape>, never, FetchServer | Req>;
|
|
101
|
+
/** A web Function, a model Endpoint, or an async Server: `url` and `fetch`. */
|
|
102
|
+
<Req = never>(server: Input<Server | Function | Endpoint> | Effect.Effect<Server | Function | Endpoint, never, Req>): Effect.Effect<ServerClient, never, FetchServer | Req>;
|
|
103
|
+
}
|
|
104
|
+
export declare const FetchServer: FetchServerCall & FetchServer;
|
|
105
|
+
//# sourceMappingURL=FetchServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FetchServer.d.ts","sources":["../src/FetchServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,KAAK,eAAe,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,KAAK,iBAAiB,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,KAAK,kBAAkB,MAAM,gCAAgC,CAAC;AAC1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,gFAAgF;AAChF,MAAM,WAAW,YAAY;IAC3B,wBAAwB;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACtE;;;OAGG;IACH,KAAK,CACH,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,GAC3C,MAAM,CAAC,MAAM,CACd,kBAAkB,CAAC,kBAAkB,EACrC,gBAAgB,GAAG,eAAe,CAAC,eAAe,EAClD,cAAc,CACf,CAAC;CACH;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,KAAK,IAAI,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;AAErF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO,CAAC,OAAO,CAClD,WAAW,EACX,mBAAmB,EACnB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CACtE;CAAG;AAEJ,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,mFAAmF;IACnF,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,EACjB,MAAM,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,GAC7E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,CAAC;IAC/D,+EAA+E;IAC/E,CAAC,GAAG,GAAG,KAAK,EACV,MAAM,EACF,KAAK,CAAC,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC,GACnC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,GAC1D,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,CAAC;CAC1D;AAED,eAAO,MAAM,WAAW,EAER,eAAe,GAAG,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FetchServer.js","sources":["../src/FetchServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AA2H3C,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CACxC,mBAAmB,CACwB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import { FetchServer } from "./FetchServer.ts";
|
|
3
|
+
declare const ServerUrlMissing_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 & {
|
|
4
|
+
readonly _tag: "Modal.ServerUrlMissing";
|
|
5
|
+
} & Readonly<A>;
|
|
6
|
+
/** The server has no URL (a Function without `web`, or a deploy still in progress). */
|
|
7
|
+
export declare class ServerUrlMissing extends ServerUrlMissing_base<{
|
|
8
|
+
readonly message: string;
|
|
9
|
+
}> {
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* {@link FetchServer} over HTTP. Creates one `Modal.WebhookToken` per host
|
|
13
|
+
* (`<host>ProxyAuth`) and binds its header pair into the host's env.
|
|
14
|
+
*
|
|
15
|
+
* @layer
|
|
16
|
+
* @product Server
|
|
17
|
+
* @provides Modal.FetchServer
|
|
18
|
+
*/
|
|
19
|
+
export declare const FetchServerHttp: Layer.Layer<FetchServer, never, never>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=FetchServerHttp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FetchServerHttp.d.ts","sources":["../src/FetchServerHttp.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,WAAW,EAAqB,MAAM,kBAAkB,CAAC;;;;AAOlE,uFAAuF;AACvF,qBAAa,gBAAiB,SAAQ,sBAA2C;IAC/E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG;AAKL;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,wCA4E3B,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import * as Binding from "alchemy/Binding";
|
|
2
|
+
import { makeFetchRpcStub } from "alchemy/Rpc";
|
|
3
|
+
import { CurrentRuntimeContext } from "alchemy/RuntimeContext";
|
|
4
|
+
import * as Data from "effect/Data";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as HttpClient from "effect/http/HttpClient";
|
|
7
|
+
import * as HttpClientRequest from "effect/http/HttpClientRequest";
|
|
8
|
+
import * as Layer from "effect/Layer";
|
|
9
|
+
import * as Redacted from "effect/Redacted";
|
|
10
|
+
import { FetchServer } from "./FetchServer.js";
|
|
11
|
+
import { RPC_KEY_HEADER, RpcCaller } from "./internal/RpcAuth.js";
|
|
12
|
+
import * as ModalBindings from "./ModalBindings.js";
|
|
13
|
+
import { WebhookToken } from "./WebhookToken.js";
|
|
14
|
+
/** The server has no URL (a Function without `web`, or a deploy still in progress). */
|
|
15
|
+
export class ServerUrlMissing extends Data.TaggedError("Modal.ServerUrlMissing") {
|
|
16
|
+
}
|
|
17
|
+
/** Env the host's proxy auth token is bound under. */
|
|
18
|
+
const PROXY_ENV = { key: "MODAL_PROXY_KEY", secret: "MODAL_PROXY_SECRET" };
|
|
19
|
+
/**
|
|
20
|
+
* {@link FetchServer} over HTTP. Creates one `Modal.WebhookToken` per host
|
|
21
|
+
* (`<host>ProxyAuth`) and binds its header pair into the host's env.
|
|
22
|
+
*
|
|
23
|
+
* @layer
|
|
24
|
+
* @product Server
|
|
25
|
+
* @provides Modal.FetchServer
|
|
26
|
+
*/
|
|
27
|
+
export const FetchServerHttp = Layer.effect(FetchServer, Effect.gen(function* () {
|
|
28
|
+
// No Modal API calls: the client only needs the host's HTTP client.
|
|
29
|
+
const http = yield* ModalBindings.withCredentials(HttpClient.HttpClient);
|
|
30
|
+
const bind = yield* ModalBindings.Bind;
|
|
31
|
+
const runtime = yield* CurrentRuntimeContext;
|
|
32
|
+
// Deploy only: a host bundle never creates the token.
|
|
33
|
+
const Token = globalThis.__ALCHEMY_RUNTIME__ ? undefined : yield* WebhookToken;
|
|
34
|
+
const caller = yield* RpcCaller;
|
|
35
|
+
return Effect.fn("Modal.FetchServer")(function* (server) {
|
|
36
|
+
if (!globalThis.__ALCHEMY_RUNTIME__) {
|
|
37
|
+
const host = yield* Binding.Host;
|
|
38
|
+
if (host !== undefined && Token !== undefined) {
|
|
39
|
+
const token = yield* Token(`${host.LogicalId}ProxyAuth`, {});
|
|
40
|
+
yield* bind `Modal.FetchServer(${server})`({
|
|
41
|
+
env: { [PROXY_ENV.key]: token.tokenId, [PROXY_ENV.secret]: token.tokenSecret },
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// This host's key for the Server's RPC methods (minted at deploy).
|
|
46
|
+
const key = yield* caller(server);
|
|
47
|
+
const url = yield* server.url;
|
|
48
|
+
const resolvedUrl = Effect.flatMap(url, (value) => value
|
|
49
|
+
? Effect.succeed(value)
|
|
50
|
+
: Effect.fail(new ServerUrlMissing({
|
|
51
|
+
message: "The server has no URL: deploy it as a Modal.Server, a Modal.Function with web, or a Modal.Endpoint",
|
|
52
|
+
})));
|
|
53
|
+
const headers = Effect.gen(function* () {
|
|
54
|
+
if (runtime === undefined)
|
|
55
|
+
return {};
|
|
56
|
+
const key = yield* runtime.get(PROXY_ENV.key);
|
|
57
|
+
const secret = yield* runtime.get(PROXY_ENV.secret);
|
|
58
|
+
if (key === undefined || secret === undefined)
|
|
59
|
+
return {};
|
|
60
|
+
return {
|
|
61
|
+
"Modal-Key": key,
|
|
62
|
+
"Modal-Secret": Redacted.isRedacted(secret) ? Redacted.value(secret) : secret,
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
const client = {
|
|
66
|
+
url: resolvedUrl,
|
|
67
|
+
fetch: (request) => Effect.gen(function* () {
|
|
68
|
+
const base = yield* resolvedUrl;
|
|
69
|
+
const target = new URL(request.url, "http://server");
|
|
70
|
+
// The Stack's own deployed server (allowed raw HTTP).
|
|
71
|
+
return yield* http.execute(request.pipe(HttpClientRequest.setUrl(`${base.replace(/\/$/, "")}${target.pathname}${target.search}`), HttpClientRequest.setHeaders(yield* headers)));
|
|
72
|
+
}),
|
|
73
|
+
};
|
|
74
|
+
// Every other member is an RPC method of the Server's program.
|
|
75
|
+
return makeFetchRpcStub({
|
|
76
|
+
// RPC calls carry the key; the Server serves only callers it issued keys to.
|
|
77
|
+
fetch: (request) => Effect.flatMap(key, (value) => client.fetch(value === undefined
|
|
78
|
+
? request
|
|
79
|
+
: request.pipe(HttpClientRequest.setHeader(RPC_KEY_HEADER, value)))),
|
|
80
|
+
base: client,
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}));
|
|
84
|
+
//# sourceMappingURL=FetchServerHttp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FetchServerHttp.js","sources":["../src/FetchServerHttp.ts"],"names":[],"mappings":"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"}
|