@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,53 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import * as Redacted from "effect/Redacted";
|
|
3
|
+
import * as Schema from "effect/Schema";
|
|
4
|
+
/**
|
|
5
|
+
* Canonical name registered in the AuthProviders registry. Use this key to
|
|
6
|
+
* look up the Modal AuthProvider from inside provider Layers.
|
|
7
|
+
*/
|
|
8
|
+
export declare const MODAL_AUTH_PROVIDER_NAME = "Modal";
|
|
9
|
+
/**
|
|
10
|
+
* A Modal profile entry. Both methods store a workspace token pair, the
|
|
11
|
+
* same kind `modal token new` writes to `~/.modal.toml`:
|
|
12
|
+
*
|
|
13
|
+
* - `browser`: Alchemy runs Modal's browser token flow, you approve it on
|
|
14
|
+
* modal.com, and Modal mints the pair.
|
|
15
|
+
* - `stored`: you paste a pair created at https://modal.com/settings/tokens.
|
|
16
|
+
*
|
|
17
|
+
* Modal tokens don't expire unless created with an expiry, so there is
|
|
18
|
+
* nothing to refresh. A revoked token fails with Modal's auth error; run
|
|
19
|
+
* `alchemy profile edit --reconfigure Modal` to get a new one.
|
|
20
|
+
*/
|
|
21
|
+
export declare const ModalAuthConfigSchema: Schema.Union<readonly [Schema.Struct<{
|
|
22
|
+
readonly method: Schema.Literal<"browser">;
|
|
23
|
+
readonly tokenId: Schema.String;
|
|
24
|
+
readonly tokenSecret: Schema.String;
|
|
25
|
+
readonly workspace: Schema.optional<Schema.String>;
|
|
26
|
+
}>, Schema.Struct<{
|
|
27
|
+
readonly method: Schema.Literal<"stored">;
|
|
28
|
+
readonly tokenId: Schema.String;
|
|
29
|
+
readonly tokenSecret: Schema.String;
|
|
30
|
+
}>]>;
|
|
31
|
+
export type ModalAuthConfig = typeof ModalAuthConfigSchema.Type;
|
|
32
|
+
/** Resolved Modal credentials: a workspace token pair. */
|
|
33
|
+
export interface ModalResolvedCredentials {
|
|
34
|
+
type: "token";
|
|
35
|
+
tokenId: Redacted.Redacted<string>;
|
|
36
|
+
tokenSecret: Redacted.Redacted<string>;
|
|
37
|
+
apiBaseUrl: string;
|
|
38
|
+
source: {
|
|
39
|
+
type: ModalAuthConfig["method"] | "env";
|
|
40
|
+
details?: string;
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Layer that registers the Modal {@link AuthProvider} into the
|
|
45
|
+
* `AuthProviders` registry when built. Included in `Modal.providers()` so
|
|
46
|
+
* `alchemy profile edit` can configure it.
|
|
47
|
+
*
|
|
48
|
+
* Supported methods:
|
|
49
|
+
* - `browser`: Modal's browser token flow (interactive only).
|
|
50
|
+
* - `stored`: a pasted token pair (`--method stored --set tokenId=… --set tokenSecret=…`).
|
|
51
|
+
*/
|
|
52
|
+
export declare const ModalAuth: Layer.Layer<never, never, import("alchemy/Auth/Registry").AuthProviders | import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("effect/crypto/SecureRandom").SecureRandom>;
|
|
53
|
+
//# sourceMappingURL=AuthProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthProvider.d.ts","sources":["../src/AuthProvider.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC;;;GAGG;AACH,eAAO,MAAM,wBAAwB,UAAU,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;IAYhC,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,OAAO,qBAAqB,CAAC,IAAI,CAAC;AAEhE,0DAA0D;AAC1D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE;QAAE,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAuID;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,uQAoFrB,CAAC"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { anonymous, DEFAULT_API_BASE_URL } from "@distilled.cloud/modal/Credentials";
|
|
2
|
+
import * as token from "@distilled.cloud/modal/token";
|
|
3
|
+
import { AuthError, AuthProviderLayer, } from "alchemy/Auth/AuthProvider";
|
|
4
|
+
import { displayRedacted } from "alchemy/Auth/Credentials";
|
|
5
|
+
import { getEnv, getEnvRedacted, mapPromptCancellation } from "alchemy/Auth/Env";
|
|
6
|
+
import { collectFieldValues, storedSecret, storedValueText, validateFieldValues, } from "alchemy/Auth/StoredAuthProvider";
|
|
7
|
+
import * as Interaction from "alchemy/Interaction";
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import * as FetchHttpClient from "effect/http/FetchHttpClient";
|
|
10
|
+
import * as Layer from "effect/Layer";
|
|
11
|
+
import * as Match from "effect/Match";
|
|
12
|
+
import * as Redacted from "effect/Redacted";
|
|
13
|
+
import * as Schema from "effect/Schema";
|
|
14
|
+
/**
|
|
15
|
+
* Canonical name registered in the AuthProviders registry. Use this key to
|
|
16
|
+
* look up the Modal AuthProvider from inside provider Layers.
|
|
17
|
+
*/
|
|
18
|
+
export const MODAL_AUTH_PROVIDER_NAME = "Modal";
|
|
19
|
+
/**
|
|
20
|
+
* A Modal profile entry. Both methods store a workspace token pair, the
|
|
21
|
+
* same kind `modal token new` writes to `~/.modal.toml`:
|
|
22
|
+
*
|
|
23
|
+
* - `browser`: Alchemy runs Modal's browser token flow, you approve it on
|
|
24
|
+
* modal.com, and Modal mints the pair.
|
|
25
|
+
* - `stored`: you paste a pair created at https://modal.com/settings/tokens.
|
|
26
|
+
*
|
|
27
|
+
* Modal tokens don't expire unless created with an expiry, so there is
|
|
28
|
+
* nothing to refresh. A revoked token fails with Modal's auth error; run
|
|
29
|
+
* `alchemy profile edit --reconfigure Modal` to get a new one.
|
|
30
|
+
*/
|
|
31
|
+
export const ModalAuthConfigSchema = Schema.Union([
|
|
32
|
+
Schema.Struct({
|
|
33
|
+
method: Schema.Literal("browser"),
|
|
34
|
+
tokenId: Schema.String,
|
|
35
|
+
tokenSecret: Schema.String,
|
|
36
|
+
workspace: Schema.optional(Schema.String),
|
|
37
|
+
}),
|
|
38
|
+
Schema.Struct({
|
|
39
|
+
method: Schema.Literal("stored"),
|
|
40
|
+
tokenId: Schema.String,
|
|
41
|
+
tokenSecret: Schema.String,
|
|
42
|
+
}),
|
|
43
|
+
]);
|
|
44
|
+
const trimmed = (value) => value === undefined || Redacted.value(value).trim().length === 0
|
|
45
|
+
? undefined
|
|
46
|
+
: Redacted.make(Redacted.value(value).trim());
|
|
47
|
+
const tokenFields = [
|
|
48
|
+
{
|
|
49
|
+
name: "tokenId",
|
|
50
|
+
label: "Modal Token ID",
|
|
51
|
+
description: "Create one at https://modal.com/settings/tokens, or run `modal token new` and copy token_id from ~/.modal.toml.",
|
|
52
|
+
validate: (value) => (value.trim().startsWith("ak-") ? undefined : "Expected an ak-… id"),
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
name: "tokenSecret",
|
|
56
|
+
label: "Modal Token Secret",
|
|
57
|
+
secret: true,
|
|
58
|
+
validate: (value) => (value.trim().startsWith("as-") ? undefined : "Expected an as-… secret"),
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
const storedConfig = (values) => ({
|
|
62
|
+
method: "stored",
|
|
63
|
+
tokenId: (storedValueText(values.tokenId) ?? "").trim(),
|
|
64
|
+
tokenSecret: Redacted.value(storedSecret(values.tokenSecret) ?? Redacted.make("")).trim(),
|
|
65
|
+
});
|
|
66
|
+
const methods = [
|
|
67
|
+
{
|
|
68
|
+
value: "browser",
|
|
69
|
+
label: "Browser login",
|
|
70
|
+
description: "recommended — approve on modal.com and Modal mints a token",
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
value: "stored",
|
|
74
|
+
label: "Token",
|
|
75
|
+
description: "paste a token pair from modal.com/settings/tokens",
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
/** How long one `waitTokenFlow` call long-polls, as `modal token new` does. */
|
|
79
|
+
const WAIT_SECONDS = 40;
|
|
80
|
+
/** Long-polls before the login gives up: 8 × 40s, about five minutes. */
|
|
81
|
+
const WAIT_ATTEMPTS = 8;
|
|
82
|
+
const loginFailed = (cause) => AuthError.make({ message: "Modal: browser login failed.", cause });
|
|
83
|
+
/**
|
|
84
|
+
* Modal's browser token flow, the one `modal token new` runs: create a flow,
|
|
85
|
+
* open its page for the user to approve, then long-poll until Modal hands
|
|
86
|
+
* back the new token pair. Both calls run without a token.
|
|
87
|
+
*/
|
|
88
|
+
const browserLogin = Effect.gen(function* () {
|
|
89
|
+
const anonymousApi = Layer.mergeAll(anonymous(), FetchHttpClient.layer);
|
|
90
|
+
const flow = yield* token
|
|
91
|
+
.createTokenFlow({ utmSource: "alchemy" })
|
|
92
|
+
.pipe(Effect.provide(anonymousApi), Effect.mapError(loginFailed));
|
|
93
|
+
if (!flow.tokenFlowId || !flow.webUrl) {
|
|
94
|
+
return yield* AuthError.make({ message: "Modal: the token flow returned no login page." });
|
|
95
|
+
}
|
|
96
|
+
const waitOnce = token
|
|
97
|
+
.waitTokenFlow({
|
|
98
|
+
tokenFlowId: flow.tokenFlowId,
|
|
99
|
+
waitSecret: flow.waitSecret,
|
|
100
|
+
timeout: WAIT_SECONDS,
|
|
101
|
+
})
|
|
102
|
+
.pipe(Effect.provide(anonymousApi), Effect.mapError(loginFailed));
|
|
103
|
+
const approved = waitOnce.pipe(Effect.repeat({ until: (result) => result.timeout !== true, times: WAIT_ATTEMPTS - 1 }), Effect.flatMap((result) => result.timeout === true || !result.tokenId || !result.tokenSecret
|
|
104
|
+
? Effect.fail(AuthError.make({
|
|
105
|
+
message: "Modal: the browser login wasn't approved within five minutes.",
|
|
106
|
+
}))
|
|
107
|
+
: Effect.succeed({
|
|
108
|
+
tokenId: result.tokenId,
|
|
109
|
+
tokenSecret: Redacted.isRedacted(result.tokenSecret)
|
|
110
|
+
? Redacted.value(result.tokenSecret)
|
|
111
|
+
: result.tokenSecret,
|
|
112
|
+
workspace: result.workspaceUsername || undefined,
|
|
113
|
+
})));
|
|
114
|
+
const minted = yield* Interaction.browserLogin({
|
|
115
|
+
provider: "Modal",
|
|
116
|
+
url: flow.webUrl,
|
|
117
|
+
code: flow.code || undefined,
|
|
118
|
+
waitFor: approved,
|
|
119
|
+
}).pipe(Effect.mapError((e) => (e._tag === "AuthError" ? e : loginFailed(e))));
|
|
120
|
+
yield* Interaction.success(minted.workspace
|
|
121
|
+
? `Modal: logged in to the ${minted.workspace} workspace.`
|
|
122
|
+
: "Modal: logged in.");
|
|
123
|
+
return { method: "browser", ...minted };
|
|
124
|
+
});
|
|
125
|
+
const readEnvironment = Effect.gen(function* () {
|
|
126
|
+
const tokenId = trimmed(yield* getEnvRedacted("MODAL_TOKEN_ID"));
|
|
127
|
+
const tokenSecret = trimmed(yield* getEnvRedacted("MODAL_TOKEN_SECRET"));
|
|
128
|
+
if (tokenId === undefined || tokenSecret === undefined) {
|
|
129
|
+
return yield* AuthError.make({
|
|
130
|
+
message: "Modal CI credentials not found. Set MODAL_TOKEN_ID and MODAL_TOKEN_SECRET.",
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
type: "token",
|
|
135
|
+
tokenId,
|
|
136
|
+
tokenSecret,
|
|
137
|
+
apiBaseUrl: (yield* getEnv("MODAL_SERVER_URL")) ?? DEFAULT_API_BASE_URL,
|
|
138
|
+
source: { type: "env", details: "MODAL_TOKEN_ID" },
|
|
139
|
+
};
|
|
140
|
+
});
|
|
141
|
+
const resolve = (config) => ({
|
|
142
|
+
type: "token",
|
|
143
|
+
tokenId: Redacted.make(config.tokenId),
|
|
144
|
+
tokenSecret: Redacted.make(config.tokenSecret),
|
|
145
|
+
apiBaseUrl: DEFAULT_API_BASE_URL,
|
|
146
|
+
source: {
|
|
147
|
+
type: config.method,
|
|
148
|
+
details: config.method === "browser" ? config.workspace : undefined,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
/**
|
|
152
|
+
* Layer that registers the Modal {@link AuthProvider} into the
|
|
153
|
+
* `AuthProviders` registry when built. Included in `Modal.providers()` so
|
|
154
|
+
* `alchemy profile edit` can configure it.
|
|
155
|
+
*
|
|
156
|
+
* Supported methods:
|
|
157
|
+
* - `browser`: Modal's browser token flow (interactive only).
|
|
158
|
+
* - `stored`: a pasted token pair (`--method stored --set tokenId=… --set tokenSecret=…`).
|
|
159
|
+
*/
|
|
160
|
+
export const ModalAuth = AuthProviderLayer()(MODAL_AUTH_PROVIDER_NAME, Effect.gen(function* () {
|
|
161
|
+
const pasteToken = collectFieldValues(tokenFields).pipe(Effect.map(storedConfig), Effect.tap(() => Interaction.success("Modal: credentials saved.")));
|
|
162
|
+
const configure = (_profileName) => Interaction.select({ message: "Modal authentication method", options: methods }).pipe(mapPromptCancellation, Effect.flatMap((method) => Match.value(method).pipe(Match.when("browser", () => browserLogin), Match.when("stored", () => pasteToken), Match.exhaustive)), Effect.mapError((e) => e._tag === "AuthError"
|
|
163
|
+
? e
|
|
164
|
+
: AuthError.make({ message: "failed to configure credentials", cause: e })));
|
|
165
|
+
/** The browser flow needs a person, so only `stored` takes flags. */
|
|
166
|
+
const configureMethods = [
|
|
167
|
+
{ method: "stored", fields: tokenFields },
|
|
168
|
+
];
|
|
169
|
+
const configureWith = (_profileName, input) => input.method === "stored"
|
|
170
|
+
? validateFieldValues(MODAL_AUTH_PROVIDER_NAME, tokenFields, input.values).pipe(Effect.map(storedConfig), Effect.tap(() => Interaction.success("Modal: credentials saved.")))
|
|
171
|
+
: Effect.fail(AuthError.make({
|
|
172
|
+
message: `Modal: unknown method '${input.method}'. Valid methods: stored. (Browser login is interactive-only.)`,
|
|
173
|
+
}));
|
|
174
|
+
// A token pair doesn't expire on its own, so logging in again only
|
|
175
|
+
// repeats the browser flow; a pasted token stays as it is.
|
|
176
|
+
const login = (_profileName, config) => config.method === "browser" ? browserLogin : Effect.succeed(config);
|
|
177
|
+
const details = (_profileName, config) => Effect.succeed({
|
|
178
|
+
lines: [
|
|
179
|
+
{ key: "tokenId", value: config.tokenId },
|
|
180
|
+
{ key: "tokenSecret", value: displayRedacted(Redacted.make(config.tokenSecret)) },
|
|
181
|
+
...(config.method === "browser" && config.workspace
|
|
182
|
+
? [{ key: "workspace", value: config.workspace }]
|
|
183
|
+
: []),
|
|
184
|
+
{ key: "source", value: config.method },
|
|
185
|
+
],
|
|
186
|
+
});
|
|
187
|
+
return {
|
|
188
|
+
configSchema: ModalAuthConfigSchema,
|
|
189
|
+
configure,
|
|
190
|
+
configureWith,
|
|
191
|
+
configureMethods,
|
|
192
|
+
login,
|
|
193
|
+
logout: () => Effect.void,
|
|
194
|
+
details,
|
|
195
|
+
read: (_profileName, config) => Effect.succeed(resolve(config)),
|
|
196
|
+
readEnvironment,
|
|
197
|
+
environment: [
|
|
198
|
+
{ name: "MODAL_TOKEN_ID", required: true, description: "Modal token id (`ak-…`)." },
|
|
199
|
+
{
|
|
200
|
+
name: "MODAL_TOKEN_SECRET",
|
|
201
|
+
required: true,
|
|
202
|
+
secret: true,
|
|
203
|
+
description: "Modal token secret (`as-…`).",
|
|
204
|
+
},
|
|
205
|
+
{ name: "MODAL_SERVER_URL", required: false, description: "Modal API URL override." },
|
|
206
|
+
],
|
|
207
|
+
};
|
|
208
|
+
}));
|
|
209
|
+
//# sourceMappingURL=AuthProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthProvider.js","sources":["../src/AuthProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Input } from "alchemy/Input";
|
|
2
|
+
import type { ResourceLike } from "alchemy/Resource";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import type { OperationServices } from "./internal.ts";
|
|
5
|
+
import * as ModalBindings from "./ModalBindings.ts";
|
|
6
|
+
/**
|
|
7
|
+
* Shared scaffolding for Modal's HTTP bindings. NOT exported from `index.ts`.
|
|
8
|
+
*
|
|
9
|
+
* Every `{Cap}Http.ts` is a thin `Layer.effect(Cap, makeModalBinding({ … }))`:
|
|
10
|
+
* the operations it calls (resolved once with the host's credentials by
|
|
11
|
+
* {@link ModalBindings.withCredentials}), the environment role it grants the
|
|
12
|
+
* host's identity on the bound resource's environment, and the client it
|
|
13
|
+
* builds. `make` runs in the construction phase, so it reads the resource's
|
|
14
|
+
* attribute accessors there (`yield* volume.volumeId`) and yields them per call.
|
|
15
|
+
*/
|
|
16
|
+
/** A role on an environment, granted to the host's identity. */
|
|
17
|
+
export type Role = ModalBindings.EnvironmentGrant["role"];
|
|
18
|
+
/** A binding over one resource that lives in an environment. */
|
|
19
|
+
export declare const makeModalBinding: <Res extends ResourceLike & {
|
|
20
|
+
readonly environment: unknown;
|
|
21
|
+
}, Ops, Client>(options: {
|
|
22
|
+
/** Fully qualified binding tag, e.g. `Modal.WriteQueue`. */
|
|
23
|
+
readonly tag: string;
|
|
24
|
+
/** The distilled operations the client calls, e.g. `operations({ put: queue.putQueue })`. */
|
|
25
|
+
readonly operations: Effect.Effect<Ops, never, OperationServices>;
|
|
26
|
+
/** The role the host needs on the resource's environment. */
|
|
27
|
+
readonly role: Role;
|
|
28
|
+
readonly make: (resource: Res, ops: Ops) => Effect.Effect<Client>;
|
|
29
|
+
}) => Effect.Effect<(resource: Res) => Effect.Effect<Client, never, never>, never, never>;
|
|
30
|
+
/**
|
|
31
|
+
* A binding with no bound resource (get-or-create by name at runtime): the
|
|
32
|
+
* role is granted on the environment `environmentOf(args)` names, the
|
|
33
|
+
* workspace default when `undefined`.
|
|
34
|
+
*/
|
|
35
|
+
export declare const makeOpenModalBinding: <Args extends ReadonlyArray<unknown>, Ops, Client>(options: {
|
|
36
|
+
readonly tag: string;
|
|
37
|
+
readonly operations: Effect.Effect<Ops, never, OperationServices>;
|
|
38
|
+
readonly role: Role;
|
|
39
|
+
/** The environment the client acts in (an `Input`, read at deploy). */
|
|
40
|
+
readonly environmentOf: (...args: Args) => Input<string | undefined>;
|
|
41
|
+
readonly make: (ops: Ops, ...args: Args) => Effect.Effect<Client>;
|
|
42
|
+
}) => Effect.Effect<(...args: any[]) => Effect.Effect<Client, never, never>, never, never>;
|
|
43
|
+
declare const ModalValueNotJson_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 & {
|
|
44
|
+
readonly _tag: "Modal.ValueNotJson";
|
|
45
|
+
} & Readonly<A>;
|
|
46
|
+
/** A stored value isn't JSON (e.g. a pickled value written by Modal's Python client). */
|
|
47
|
+
export declare class ModalValueNotJson extends ModalValueNotJson_base<{
|
|
48
|
+
readonly message: string;
|
|
49
|
+
}> {
|
|
50
|
+
}
|
|
51
|
+
/** JSON-encode a value as base64 bytes, Modal's `bytes` wire form. */
|
|
52
|
+
export declare const encodeJson: (value: unknown) => Effect.Effect<string, never, never>;
|
|
53
|
+
/** Decode base64 JSON bytes written by {@link encodeJson} or any JSON writer. */
|
|
54
|
+
export declare const decodeJson: <A = unknown>(data: string) => Effect.Effect<A, ModalValueNotJson, never>;
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=BindingHttp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BindingHttp.d.ts","sources":["../src/BindingHttp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;GASG;AAEH,gEAAgE;AAChE,MAAM,MAAM,IAAI,GAAG,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AAgB1D,gEAAgE;AAChE,eAAO,MAAM,gBAAgB,GAC3B,GAAG,SAAS,YAAY,GAAG;IAAE,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;CAAE,EAC5D,GAAG,EACH,MAAM,WACG;IACT,4DAA4D;IAC5D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,6FAA6F;IAC7F,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAClE,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CACnE,wFAaG,CAAC;AAEL;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,IAAI,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,WAAW;IAC9F,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAClE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,uEAAuE;IACvE,QAAQ,CAAC,aAAa,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACrE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;CACnE,yFAQG,CAAC;;;;AAUL,yFAAyF;AACzF,qBAAa,iBAAkB,SAAQ,uBAAuC;IAC5E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG;AAEL,sEAAsE;AACtE,eAAO,MAAM,UAAU,UAAW,OAAO,wCACyC,CAAC;AAEnF,iFAAiF;AACjF,eAAO,MAAM,UAAU,GAAI,CAAC,GAAG,OAAO,QAAQ,MAAM,+CAQhD,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as Data from "effect/Data";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as ModalBindings from "./ModalBindings.js";
|
|
4
|
+
const GrantRole = Effect.gen(function* () {
|
|
5
|
+
const bind = yield* ModalBindings.Bind;
|
|
6
|
+
return Effect.fn(function* (label, args, environment, role) {
|
|
7
|
+
if (!globalThis.__ALCHEMY_RUNTIME__) {
|
|
8
|
+
yield* bind(label, ...args)({ roles: [{ environment, role }] });
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
/** A binding over one resource that lives in an environment. */
|
|
13
|
+
export const makeModalBinding = (options) => Effect.gen(function* () {
|
|
14
|
+
const ops = yield* ModalBindings.withCredentials(options.operations);
|
|
15
|
+
const grant = yield* GrantRole;
|
|
16
|
+
return Effect.fn(options.tag)(function* (resource) {
|
|
17
|
+
yield* grant(labelOf(options.tag), [resource], resource.environment, options.role);
|
|
18
|
+
return yield* options.make(resource, ops);
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* A binding with no bound resource (get-or-create by name at runtime): the
|
|
23
|
+
* role is granted on the environment `environmentOf(args)` names, the
|
|
24
|
+
* workspace default when `undefined`.
|
|
25
|
+
*/
|
|
26
|
+
export const makeOpenModalBinding = (options) => Effect.gen(function* () {
|
|
27
|
+
const ops = yield* ModalBindings.withCredentials(options.operations);
|
|
28
|
+
const grant = yield* GrantRole;
|
|
29
|
+
return Effect.fn(options.tag)(function* (...args) {
|
|
30
|
+
yield* grant(openLabelOf(options.tag), [], options.environmentOf(...args), options.role);
|
|
31
|
+
return yield* options.make(ops, ...args);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
/** `<tag>(<resource>)` as a template label. */
|
|
35
|
+
const labelOf = (tag) => Object.assign([`${tag}(`, ")"], { raw: [`${tag}(`, ")"] });
|
|
36
|
+
/** `<tag>` as a template label. */
|
|
37
|
+
const openLabelOf = (tag) => Object.assign([tag], { raw: [tag] });
|
|
38
|
+
/** A stored value isn't JSON (e.g. a pickled value written by Modal's Python client). */
|
|
39
|
+
export class ModalValueNotJson extends Data.TaggedError("Modal.ValueNotJson") {
|
|
40
|
+
}
|
|
41
|
+
/** JSON-encode a value as base64 bytes, Modal's `bytes` wire form. */
|
|
42
|
+
export const encodeJson = (value) => Effect.sync(() => Buffer.from(JSON.stringify(value), "utf8").toString("base64"));
|
|
43
|
+
/** Decode base64 JSON bytes written by {@link encodeJson} or any JSON writer. */
|
|
44
|
+
export const decodeJson = (data) => Effect.try({
|
|
45
|
+
try: () => JSON.parse(Buffer.from(data, "base64").toString("utf8")),
|
|
46
|
+
catch: () => new ModalValueNotJson({
|
|
47
|
+
message: "The stored value isn't JSON. Values written by Modal's Python client are pickled; write them as JSON (bytes of json.dumps) to share them.",
|
|
48
|
+
}),
|
|
49
|
+
});
|
|
50
|
+
//# sourceMappingURL=BindingHttp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BindingHttp.js","sources":["../src/BindingHttp.ts"],"names":[],"mappings":"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"}
|
package/lib/Blob.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as blob from "@distilled.cloud/modal/blob";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as HttpClient from "effect/http/HttpClient";
|
|
4
|
+
/** Inputs and results above this size travel through Modal's blob store. */
|
|
5
|
+
export declare const MAX_INLINE_BYTES: number;
|
|
6
|
+
declare const BlobTransferFailed_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 & {
|
|
7
|
+
readonly _tag: "Modal.BlobTransferFailed";
|
|
8
|
+
} & Readonly<A>;
|
|
9
|
+
/** A payload Modal's blob store couldn't take or give back. */
|
|
10
|
+
export declare class BlobTransferFailed extends BlobTransferFailed_base<{
|
|
11
|
+
readonly message: string;
|
|
12
|
+
}> {
|
|
13
|
+
}
|
|
14
|
+
/** The blob operations, resolved by `ModalBindings.withCredentials`. */
|
|
15
|
+
export declare const BlobOps: Effect.Effect<{
|
|
16
|
+
readonly create: (input: blob.CreateBlobRequest) => Effect.Effect<blob.CreateBlobResponse, blob.ModalOpError, never>;
|
|
17
|
+
readonly get: (input: blob.GetBlobRequest) => Effect.Effect<blob.GetBlobResponse, blob.ModalOpError, never>;
|
|
18
|
+
readonly http: HttpClient.HttpClient;
|
|
19
|
+
}, never, import("./internal.ts").OperationServices>;
|
|
20
|
+
export type BlobOps = Effect.Success<typeof BlobOps>;
|
|
21
|
+
/** Upload bytes to Modal's blob store and return the blob id. */
|
|
22
|
+
export declare const uploadBlob: (ops: {
|
|
23
|
+
readonly create: (input: blob.CreateBlobRequest) => Effect.Effect<blob.CreateBlobResponse, blob.ModalOpError, never>;
|
|
24
|
+
readonly get: (input: blob.GetBlobRequest) => Effect.Effect<blob.GetBlobResponse, blob.ModalOpError, never>;
|
|
25
|
+
readonly http: HttpClient.HttpClient;
|
|
26
|
+
}, bytes: Uint8Array<ArrayBufferLike>) => Effect.Effect<string, BlobTransferFailed | blob.ModalOpError, never>;
|
|
27
|
+
/** Download a blob's bytes. */
|
|
28
|
+
export declare const downloadBlob: (ops: {
|
|
29
|
+
readonly create: (input: blob.CreateBlobRequest) => Effect.Effect<blob.CreateBlobResponse, blob.ModalOpError, never>;
|
|
30
|
+
readonly get: (input: blob.GetBlobRequest) => Effect.Effect<blob.GetBlobResponse, blob.ModalOpError, never>;
|
|
31
|
+
readonly http: HttpClient.HttpClient;
|
|
32
|
+
}, blobId: string) => Effect.Effect<Uint8Array<ArrayBuffer>, BlobTransferFailed | blob.ModalOpError, never>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=Blob.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Blob.d.ts","sources":["../src/Blob.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,6BAA6B,CAAC;AAEpD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAIrD,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,QAAkB,CAAC;;;;AAEhD,+DAA+D;AAC/D,qBAAa,kBAAmB,SAAQ,wBAA6C;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG;AAEL,wEAAwE;AACxE,eAAO,MAAM,OAAO;;;;oDAIlB,CAAC;AAEH,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,OAAO,CAAC,CAAC;AAErD,iEAAiE;AACjE,eAAO,MAAM,UAAU;;;;8GA4BrB,CAAC;AAEH,+BAA+B;AAC/B,eAAO,MAAM,YAAY;;;;2GAavB,CAAC"}
|
package/lib/Blob.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import * as blob from "@distilled.cloud/modal/blob";
|
|
3
|
+
import * as Data from "effect/Data";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as HttpClient from "effect/http/HttpClient";
|
|
6
|
+
import * as HttpClientRequest from "effect/http/HttpClientRequest";
|
|
7
|
+
import { operations } from "./internal.js";
|
|
8
|
+
/** Inputs and results above this size travel through Modal's blob store. */
|
|
9
|
+
export const MAX_INLINE_BYTES = 2 * 1024 * 1024;
|
|
10
|
+
/** A payload Modal's blob store couldn't take or give back. */
|
|
11
|
+
export class BlobTransferFailed extends Data.TaggedError("Modal.BlobTransferFailed") {
|
|
12
|
+
}
|
|
13
|
+
/** The blob operations, resolved by `ModalBindings.withCredentials`. */
|
|
14
|
+
export const BlobOps = operations({
|
|
15
|
+
create: blob.createBlob,
|
|
16
|
+
get: blob.getBlob,
|
|
17
|
+
http: HttpClient.HttpClient,
|
|
18
|
+
});
|
|
19
|
+
/** Upload bytes to Modal's blob store and return the blob id. */
|
|
20
|
+
export const uploadBlob = Effect.fn(function* (ops, bytes) {
|
|
21
|
+
const digests = yield* Effect.sync(() => ({
|
|
22
|
+
md5: createHash("md5").update(bytes).digest("base64"),
|
|
23
|
+
sha256: createHash("sha256").update(bytes).digest("base64"),
|
|
24
|
+
}));
|
|
25
|
+
const created = yield* ops.create({
|
|
26
|
+
contentMd5: digests.md5,
|
|
27
|
+
contentSha256Base64: digests.sha256,
|
|
28
|
+
contentLength: String(bytes.length),
|
|
29
|
+
});
|
|
30
|
+
if (!created.blobId || !created.uploadUrl) {
|
|
31
|
+
return yield* new BlobTransferFailed({
|
|
32
|
+
message: `Modal asked for a multipart upload of ${bytes.length} bytes, which this client doesn't send`,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
// A presigned upload URL Modal handed back: used as-is.
|
|
36
|
+
const response = yield* ops.http.execute(HttpClientRequest.put(created.uploadUrl).pipe(HttpClientRequest.bodyUint8Array(bytes, "application/octet-stream"), HttpClientRequest.setHeader("content-md5", digests.md5)));
|
|
37
|
+
if (response.status >= 300) {
|
|
38
|
+
return yield* new BlobTransferFailed({
|
|
39
|
+
message: `Uploading a blob failed with HTTP ${response.status}`,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return created.blobId;
|
|
43
|
+
});
|
|
44
|
+
/** Download a blob's bytes. */
|
|
45
|
+
export const downloadBlob = Effect.fn(function* (ops, blobId) {
|
|
46
|
+
const { downloadUrl } = yield* ops.get({ blobId });
|
|
47
|
+
if (!downloadUrl) {
|
|
48
|
+
return yield* new BlobTransferFailed({ message: `Modal returned no URL for blob ${blobId}` });
|
|
49
|
+
}
|
|
50
|
+
// A presigned download URL Modal handed back: used as-is.
|
|
51
|
+
const response = yield* ops.http.get(downloadUrl);
|
|
52
|
+
if (response.status >= 300) {
|
|
53
|
+
return yield* new BlobTransferFailed({
|
|
54
|
+
message: `Downloading blob ${blobId} failed with HTTP ${response.status}`,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return new Uint8Array(yield* response.arrayBuffer);
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=Blob.js.map
|
package/lib/Blob.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Blob.js","sources":["../src/Blob.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the bundled program (the runners registered via `host.run` /
|
|
3
|
+
* serve) and run it with a Node HTTP server bound to `PORT`, so the
|
|
4
|
+
* returned `{ fetch }` handler is actually served and `host.run` loops
|
|
5
|
+
* stay alive.
|
|
6
|
+
*/
|
|
7
|
+
export declare const bootstrap: (entrypoint: unknown) => Promise<void>;
|
|
8
|
+
//# sourceMappingURL=Bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bootstrap.d.ts","sources":["../src/Bootstrap.ts"],"names":[],"mappings":"AAoBA;;;;;GAKG;AACH,eAAO,MAAM,SAAS,eAAgB,OAAO,KAAG,OAAO,CAAC,IAAI,CAyB3D,CAAC"}
|
package/lib/Bootstrap.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process bootstrap for `Modal.Sandbox` (a Node process in a Modal sandbox serving the
|
|
3
|
+
* bundled program). The generated entry imports this module and the user's
|
|
4
|
+
* `main`, nothing else — see `alchemy/Runtime/Bootstrap` for why.
|
|
5
|
+
*/
|
|
6
|
+
import { NodeServices } from "@effect/platform-node";
|
|
7
|
+
import { NodeHttpServer } from "alchemy/Http";
|
|
8
|
+
import { reifyBoundConfigProvider } from "alchemy/Runtime";
|
|
9
|
+
import { entrypointLayer, resolveProgram, runProcess, stackFromEnv, } from "alchemy/Runtime/Bootstrap";
|
|
10
|
+
import * as ConfigProvider from "effect/ConfigProvider";
|
|
11
|
+
import * as Effect from "effect/Effect";
|
|
12
|
+
import * as FetchHttpClient from "effect/http/FetchHttpClient";
|
|
13
|
+
import * as Layer from "effect/Layer";
|
|
14
|
+
import * as Logger from "effect/Logger";
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the bundled program (the runners registered via `host.run` /
|
|
17
|
+
* serve) and run it with a Node HTTP server bound to `PORT`, so the
|
|
18
|
+
* returned `{ fetch }` handler is actually served and `host.run` loops
|
|
19
|
+
* stay alive.
|
|
20
|
+
*/
|
|
21
|
+
export const bootstrap = (entrypoint) => {
|
|
22
|
+
const platform = Layer.mergeAll(NodeServices.layer, FetchHttpClient.layer, Logger.layer([Logger.consolePretty()]));
|
|
23
|
+
const program = resolveProgram("program").pipe(Effect.provide(entrypointLayer(entrypoint).pipe(Layer.provideMerge(stackFromEnv), Layer.provideMerge(NodeHttpServer({ hostname: "0.0.0.0" })), Layer.provideMerge(platform), Layer.provideMerge(Layer.succeed(ConfigProvider.ConfigProvider, reifyBoundConfigProvider(ConfigProvider.fromEnv(), process.env))))), Effect.scoped);
|
|
24
|
+
return runProcess("Modal sandbox", program);
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=Bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bootstrap.js","sources":["../src/Bootstrap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,YAAY,GACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,UAAmB,EAAiB,EAAE;IAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAC7B,YAAY,CAAC,KAAK,EAClB,eAAe,CAAC,KAAK,EACrB,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CACvC,CAAC;IAEF,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAC5C,MAAM,CAAC,OAAO,CACZ,eAAe,CAAC,UAAU,CAAC,CAAC,IAAI,CAC9B,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,EAChC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,EAC3D,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC5B,KAAK,CAAC,YAAY,CAChB,KAAK,CAAC,OAAO,CACX,cAAc,CAAC,cAAc,EAC7B,wBAAwB,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAChE,CACF,CACF,CACF,EACD,MAAM,CAAC,MAAM,CACd,CAAC;IAEF,OAAO,UAAU,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC,CAAC"}
|
package/lib/Cbor.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal CBOR (RFC 8949) codec for Modal function arguments and results
|
|
3
|
+
* (`DATA_FORMAT_CBOR`): null, booleans, numbers, strings, byte strings,
|
|
4
|
+
* arrays and string-keyed maps. NOT exported from `index.ts`.
|
|
5
|
+
*/
|
|
6
|
+
/** Encode a value as CBOR. Throws a `TypeError` for functions and symbols. */
|
|
7
|
+
export declare const encodeCbor: (value: unknown) => Uint8Array;
|
|
8
|
+
/** Decode CBOR. Throws a `RangeError` on malformed input. */
|
|
9
|
+
export declare const decodeCbor: (bytes: Uint8Array) => unknown;
|
|
10
|
+
//# sourceMappingURL=Cbor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cbor.d.ts","sources":["../src/Cbor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAmEH,8EAA8E;AAC9E,eAAO,MAAM,UAAU,UAAW,OAAO,KAAG,UAI3C,CAAC;AAEF,6DAA6D;AAC7D,eAAO,MAAM,UAAU,UAAW,UAAU,KAAG,OAqE9C,CAAC"}
|