alchemy 2.0.0-beta.44 → 2.0.0-beta.45
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/bin/exec.js +67 -8
- package/bin/exec.js.map +1 -1
- package/lib/AWS/Lambda/Function.d.ts +17 -0
- package/lib/AWS/Lambda/Function.d.ts.map +1 -1
- package/lib/AWS/Lambda/Function.js +61 -16
- package/lib/AWS/Lambda/Function.js.map +1 -1
- package/lib/AWS/Providers.d.ts +2 -1
- package/lib/AWS/Providers.d.ts.map +1 -1
- package/lib/AWS/Providers.js +3 -1
- package/lib/AWS/Providers.js.map +1 -1
- package/lib/Apply.js +17 -1
- package/lib/Apply.js.map +1 -1
- package/lib/Auth/AuthProvider.d.ts.map +1 -1
- package/lib/Auth/AuthProvider.js +24 -6
- package/lib/Auth/AuthProvider.js.map +1 -1
- package/lib/Auth/Credentials.d.ts.map +1 -1
- package/lib/Auth/Credentials.js +3 -3
- package/lib/Auth/Credentials.js.map +1 -1
- package/lib/Cli/commands/_shared.d.ts +13 -1
- package/lib/Cli/commands/_shared.d.ts.map +1 -1
- package/lib/Cli/commands/_shared.js +33 -2
- package/lib/Cli/commands/_shared.js.map +1 -1
- package/lib/Cli/commands/dev.d.ts.map +1 -1
- package/lib/Cli/commands/dev.js +10 -1
- package/lib/Cli/commands/dev.js.map +1 -1
- package/lib/Cli/commands/login.d.ts.map +1 -1
- package/lib/Cli/commands/login.js +19 -5
- package/lib/Cli/commands/login.js.map +1 -1
- package/lib/Cli/commands/profile.d.ts.map +1 -1
- package/lib/Cli/commands/profile.js +7 -27
- package/lib/Cli/commands/profile.js.map +1 -1
- package/lib/Cli/main.d.ts.map +1 -1
- package/lib/Cli/main.js +0 -2
- package/lib/Cli/main.js.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGateway.d.ts +0 -2
- package/lib/Cloudflare/AiGateway/AiGateway.d.ts.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGateway.js +2 -4
- package/lib/Cloudflare/AiGateway/AiGateway.js.map +1 -1
- package/lib/Cloudflare/BrowserRendering/BrowserRendering.d.ts +116 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRendering.d.ts.map +1 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRendering.js +92 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRendering.js.map +1 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.d.ts +55 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.d.ts.map +1 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.js +55 -0
- package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.js.map +1 -0
- package/lib/Cloudflare/BrowserRendering/index.d.ts +3 -0
- package/lib/Cloudflare/BrowserRendering/index.d.ts.map +1 -0
- package/lib/Cloudflare/BrowserRendering/index.js +3 -0
- package/lib/Cloudflare/BrowserRendering/index.js.map +1 -0
- package/lib/Cloudflare/Container/Container.d.ts +3 -3
- package/lib/Cloudflare/Container/Container.js +3 -3
- package/lib/Cloudflare/Container/StartContainer.d.ts.map +1 -1
- package/lib/Cloudflare/Container/StartContainer.js.map +1 -1
- package/lib/Cloudflare/D1/D1Database.d.ts +1 -0
- package/lib/Cloudflare/D1/D1Database.d.ts.map +1 -1
- package/lib/Cloudflare/D1/D1Database.js +2 -1
- package/lib/Cloudflare/D1/D1Database.js.map +1 -1
- package/lib/Cloudflare/D1/D1DatabaseBinding.js +1 -1
- package/lib/Cloudflare/D1/D1DatabaseBinding.js.map +1 -1
- package/lib/Cloudflare/Fetcher.d.ts.map +1 -1
- package/lib/Cloudflare/Fetcher.js +0 -2
- package/lib/Cloudflare/Fetcher.js.map +1 -1
- package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts +1 -0
- package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts.map +1 -1
- package/lib/Cloudflare/Hyperdrive/Hyperdrive.js +3 -0
- package/lib/Cloudflare/Hyperdrive/Hyperdrive.js.map +1 -1
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts +3 -2
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js +32 -33
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js.map +1 -1
- package/lib/Cloudflare/KV/KVNamespace.d.ts +1 -0
- package/lib/Cloudflare/KV/KVNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/KV/KVNamespace.js +2 -0
- package/lib/Cloudflare/KV/KVNamespace.js.map +1 -1
- package/lib/Cloudflare/Local.js +1 -1
- package/lib/Cloudflare/Local.js.map +1 -1
- package/lib/Cloudflare/Providers.d.ts +2 -1
- package/lib/Cloudflare/Providers.d.ts.map +1 -1
- package/lib/Cloudflare/Providers.js +21 -17
- package/lib/Cloudflare/Providers.js.map +1 -1
- package/lib/Cloudflare/Queue/Queue.d.ts +1 -0
- package/lib/Cloudflare/Queue/Queue.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/Queue.js +1 -0
- package/lib/Cloudflare/Queue/Queue.js.map +1 -1
- package/lib/Cloudflare/Queue/QueueConsumer.d.ts +2 -1
- package/lib/Cloudflare/Queue/QueueConsumer.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/QueueConsumer.js +11 -3
- package/lib/Cloudflare/Queue/QueueConsumer.js.map +1 -1
- package/lib/Cloudflare/Queue/QueueEventSource.d.ts +30 -4
- package/lib/Cloudflare/Queue/QueueEventSource.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/QueueEventSource.js +22 -1
- package/lib/Cloudflare/Queue/QueueEventSource.js.map +1 -1
- package/lib/Cloudflare/R2/R2Bucket.d.ts +1 -0
- package/lib/Cloudflare/R2/R2Bucket.d.ts.map +1 -1
- package/lib/Cloudflare/R2/R2Bucket.js +18 -0
- package/lib/Cloudflare/R2/R2Bucket.js.map +1 -1
- package/lib/Cloudflare/SecretsStore/Secret.d.ts.map +1 -1
- package/lib/Cloudflare/SecretsStore/Secret.js +13 -34
- package/lib/Cloudflare/SecretsStore/Secret.js.map +1 -1
- package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts +3 -2
- package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts.map +1 -1
- package/lib/Cloudflare/SecretsStore/SecretBinding.js +3 -2
- package/lib/Cloudflare/SecretsStore/SecretBinding.js.map +1 -1
- package/lib/Cloudflare/StateStore/Api.d.ts +5 -13
- package/lib/Cloudflare/StateStore/Api.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/Api.js +14 -8
- package/lib/Cloudflare/StateStore/Api.js.map +1 -1
- package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/State.js +45 -9
- package/lib/Cloudflare/StateStore/State.js.map +1 -1
- package/lib/Cloudflare/StateStore/Store.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/Store.js +5 -2
- package/lib/Cloudflare/StateStore/Store.js.map +1 -1
- package/lib/Cloudflare/VpcService/VpcService.d.ts +2 -2
- package/lib/Cloudflare/VpcService/VpcService.d.ts.map +1 -1
- package/lib/Cloudflare/Website/StaticSite.d.ts +5 -5
- package/lib/Cloudflare/Website/StaticSite.d.ts.map +1 -1
- package/lib/Cloudflare/Website/StaticSite.js +3 -0
- package/lib/Cloudflare/Website/StaticSite.js.map +1 -1
- package/lib/Cloudflare/Website/Vite.d.ts +5 -5
- package/lib/Cloudflare/Website/Vite.d.ts.map +1 -1
- package/lib/Cloudflare/Website/Vite.js.map +1 -1
- package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Assets.js +1 -1
- package/lib/Cloudflare/Workers/Assets.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectBridge.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectBridge.js +4 -2
- package/lib/Cloudflare/Workers/DurableObjectBridge.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts +183 -6
- package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectNamespace.js +279 -76
- package/lib/Cloudflare/Workers/DurableObjectNamespace.js.map +1 -1
- package/lib/Cloudflare/Workers/HttpServer.d.ts +6 -4
- package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/HttpServer.js +20 -15
- package/lib/Cloudflare/Workers/HttpServer.js.map +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts +3 -2
- package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts +4 -7
- package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js +111 -66
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
- package/lib/Cloudflare/Workers/Rpc.d.ts +16 -0
- package/lib/Cloudflare/Workers/Rpc.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Rpc.js +22 -0
- package/lib/Cloudflare/Workers/Rpc.js.map +1 -1
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.d.ts +285 -0
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.js +288 -0
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.js.map +1 -0
- package/lib/Cloudflare/Workers/RpcWorker.d.ts +305 -0
- package/lib/Cloudflare/Workers/RpcWorker.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/RpcWorker.js +350 -0
- package/lib/Cloudflare/Workers/RpcWorker.js.map +1 -0
- package/lib/Cloudflare/Workers/Vite.d.ts +1 -1
- package/lib/Cloudflare/Workers/Vite.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Vite.js +2 -1
- package/lib/Cloudflare/Workers/Vite.js.map +1 -1
- package/lib/Cloudflare/Workers/Worker.d.ts +69 -24
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +168 -47
- package/lib/Cloudflare/Workers/Worker.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +158 -97
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts +11 -23
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.js +3 -0
- package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBridge.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBridge.js +5 -2
- package/lib/Cloudflare/Workers/WorkerBridge.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.js +4 -1
- package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +9 -10
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
- package/lib/Cloudflare/Workers/Workflow.d.ts +5 -3
- package/lib/Cloudflare/Workers/Workflow.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Workflow.js +19 -1
- package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
- package/lib/Cloudflare/Workers/index.d.ts +2 -0
- package/lib/Cloudflare/Workers/index.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/index.js +2 -0
- package/lib/Cloudflare/Workers/index.js.map +1 -1
- package/lib/Cloudflare/index.d.ts +1 -0
- package/lib/Cloudflare/index.d.ts.map +1 -1
- package/lib/Cloudflare/index.js +1 -0
- package/lib/Cloudflare/index.js.map +1 -1
- package/lib/Dependencies.d.ts +10 -0
- package/lib/Dependencies.d.ts.map +1 -0
- package/lib/Dependencies.js +1 -0
- package/lib/Dependencies.js.map +1 -0
- package/lib/Deploy.d.ts +2 -1
- package/lib/Deploy.d.ts.map +1 -1
- package/lib/Deploy.js +2 -2
- package/lib/Deploy.js.map +1 -1
- package/lib/Diff.d.ts +11 -0
- package/lib/Diff.d.ts.map +1 -1
- package/lib/Diff.js +11 -0
- package/lib/Diff.js.map +1 -1
- package/lib/Input.d.ts +2 -1
- package/lib/Input.d.ts.map +1 -1
- package/lib/KeyPair.d.ts +77 -0
- package/lib/KeyPair.d.ts.map +1 -0
- package/lib/KeyPair.js +102 -0
- package/lib/KeyPair.js.map +1 -0
- package/lib/Local/RpcProvider.d.ts +3 -1
- package/lib/Local/RpcProvider.d.ts.map +1 -1
- package/lib/Local/RpcProvider.js +28 -2
- package/lib/Local/RpcProvider.js.map +1 -1
- package/lib/Local/RpcServerEnvironment.js +1 -1
- package/lib/Local/RpcServerEnvironment.js.map +1 -1
- package/lib/Neon/Project.d.ts.map +1 -1
- package/lib/Neon/Project.js +14 -3
- package/lib/Neon/Project.js.map +1 -1
- package/lib/Output.d.ts.map +1 -1
- package/lib/Output.js +9 -2
- package/lib/Output.js.map +1 -1
- package/lib/Phase.d.ts +2 -1
- package/lib/Phase.d.ts.map +1 -1
- package/lib/Phase.js +6 -1
- package/lib/Phase.js.map +1 -1
- package/lib/Plan.d.ts.map +1 -1
- package/lib/Plan.js +14 -3
- package/lib/Plan.js.map +1 -1
- package/lib/Platform.d.ts +8 -6
- package/lib/Platform.d.ts.map +1 -1
- package/lib/Platform.js +33 -3
- package/lib/Platform.js.map +1 -1
- package/lib/Random.d.ts.map +1 -1
- package/lib/Random.js +9 -14
- package/lib/Random.js.map +1 -1
- package/lib/RuntimeContext.d.ts +21 -1
- package/lib/RuntimeContext.d.ts.map +1 -1
- package/lib/RuntimeContext.js +12 -0
- package/lib/RuntimeContext.js.map +1 -1
- package/lib/Stack.d.ts +3 -3
- package/lib/Stack.d.ts.map +1 -1
- package/lib/Stack.js.map +1 -1
- package/lib/State/HttpStateApi.d.ts +2 -2
- package/lib/State/StateEncoding.d.ts +8 -0
- package/lib/State/StateEncoding.d.ts.map +1 -1
- package/lib/State/StateEncoding.js +55 -5
- package/lib/State/StateEncoding.js.map +1 -1
- package/lib/Test/Bun.d.ts.map +1 -1
- package/lib/Test/Bun.js +0 -2
- package/lib/Test/Bun.js.map +1 -1
- package/lib/Test/Vitest.d.ts.map +1 -1
- package/lib/Test/Vitest.js +0 -2
- package/lib/Test/Vitest.js.map +1 -1
- package/lib/Util/Duration.d.ts +14 -0
- package/lib/Util/Duration.d.ts.map +1 -0
- package/lib/Util/Duration.js +18 -0
- package/lib/Util/Duration.js.map +1 -0
- package/lib/Util/index.d.ts +0 -6
- package/lib/Util/index.d.ts.map +1 -1
- package/lib/Util/index.js +0 -6
- package/lib/Util/index.js.map +1 -1
- package/lib/Util/types.d.ts +3 -1
- package/lib/Util/types.d.ts.map +1 -1
- package/lib/Util/types.js +5 -1
- package/lib/Util/types.js.map +1 -1
- package/lib/index.d.ts +2 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -3
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.test.tsbuildinfo +1 -1
- package/package.json +20 -19
- package/src/AWS/Lambda/Function.ts +87 -34
- package/src/AWS/Providers.ts +3 -0
- package/src/Apply.ts +18 -1
- package/src/Auth/AuthProvider.ts +25 -5
- package/src/Auth/Credentials.ts +8 -7
- package/src/Cli/commands/_shared.ts +47 -4
- package/src/Cli/commands/dev.ts +13 -1
- package/src/Cli/commands/login.ts +20 -4
- package/src/Cli/commands/profile.ts +24 -34
- package/src/Cli/main.ts +0 -3
- package/src/Cloudflare/AiGateway/AiGateway.ts +2 -6
- package/src/Cloudflare/BrowserRendering/BrowserRendering.ts +132 -0
- package/src/Cloudflare/BrowserRendering/BrowserRenderingBinding.ts +137 -0
- package/src/Cloudflare/BrowserRendering/index.ts +11 -0
- package/src/Cloudflare/Container/Container.ts +3 -3
- package/src/Cloudflare/Container/StartContainer.ts +1 -2
- package/src/Cloudflare/D1/D1Database.ts +4 -1
- package/src/Cloudflare/D1/D1DatabaseBinding.ts +1 -1
- package/src/Cloudflare/Fetcher.ts +0 -2
- package/src/Cloudflare/Hyperdrive/Hyperdrive.ts +5 -0
- package/src/Cloudflare/Hyperdrive/HyperdriveBinding.ts +41 -43
- package/src/Cloudflare/KV/KVNamespace.ts +4 -0
- package/src/Cloudflare/Local.ts +1 -1
- package/src/Cloudflare/Providers.ts +25 -16
- package/src/Cloudflare/Queue/Queue.ts +3 -0
- package/src/Cloudflare/Queue/QueueConsumer.ts +23 -8
- package/src/Cloudflare/Queue/QueueEventSource.ts +33 -5
- package/src/Cloudflare/R2/R2Bucket.ts +26 -0
- package/src/Cloudflare/SecretsStore/Secret.ts +14 -41
- package/src/Cloudflare/SecretsStore/SecretBinding.ts +11 -11
- package/src/Cloudflare/StateStore/Api.ts +15 -15
- package/src/Cloudflare/StateStore/State.ts +68 -6
- package/src/Cloudflare/StateStore/Store.ts +5 -2
- package/src/Cloudflare/VpcService/VpcService.ts +2 -2
- package/src/Cloudflare/Website/StaticSite.ts +8 -10
- package/src/Cloudflare/Website/Vite.ts +4 -7
- package/src/Cloudflare/Workers/Assets.ts +1 -1
- package/src/Cloudflare/Workers/DurableObjectBridge.ts +7 -4
- package/src/Cloudflare/Workers/DurableObjectNamespace.ts +380 -121
- package/src/Cloudflare/Workers/HttpServer.ts +31 -25
- package/src/Cloudflare/Workers/InferEnv.ts +15 -8
- package/src/Cloudflare/Workers/LocalWorkerProvider.ts +139 -78
- package/src/Cloudflare/Workers/Rpc.ts +50 -0
- package/src/Cloudflare/Workers/RpcDurableObjectNamespace.ts +502 -0
- package/src/Cloudflare/Workers/RpcWorker.ts +562 -0
- package/src/Cloudflare/Workers/Vite.ts +2 -0
- package/src/Cloudflare/Workers/Worker.ts +274 -93
- package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +158 -103
- package/src/Cloudflare/Workers/WorkerBinding.ts +10 -0
- package/src/Cloudflare/Workers/WorkerBridge.ts +7 -4
- package/src/Cloudflare/Workers/WorkerBundle.ts +4 -1
- package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +8 -15
- package/src/Cloudflare/Workers/Workflow.ts +22 -3
- package/src/Cloudflare/Workers/index.ts +2 -0
- package/src/Cloudflare/index.ts +1 -0
- package/src/Dependencies.ts +10 -0
- package/src/Deploy.ts +3 -1
- package/src/Diff.ts +13 -0
- package/src/Input.ts +2 -0
- package/src/KeyPair.ts +146 -0
- package/src/Local/RpcProvider.ts +45 -1
- package/src/Local/RpcServerEnvironment.ts +1 -1
- package/src/Neon/Project.ts +16 -3
- package/src/Output.ts +8 -2
- package/src/Phase.ts +8 -0
- package/src/Plan.ts +16 -3
- package/src/Platform.ts +74 -27
- package/src/Random.ts +22 -27
- package/src/RuntimeContext.ts +23 -1
- package/src/Stack.ts +3 -3
- package/src/State/StateEncoding.ts +58 -7
- package/src/Test/Bun.ts +0 -3
- package/src/Test/Vitest.ts +0 -3
- package/src/Util/Duration.ts +21 -0
- package/src/Util/index.ts +0 -6
- package/src/Util/types.ts +9 -2
- package/src/index.ts +2 -3
- package/lib/Secret.d.ts +0 -50
- package/lib/Secret.d.ts.map +0 -1
- package/lib/Secret.js +0 -23
- package/lib/Secret.js.map +0 -1
- package/lib/Trait.d.ts +0 -43
- package/lib/Trait.d.ts.map +0 -1
- package/lib/Trait.js +0 -17
- package/lib/Trait.js.map +0 -1
- package/lib/Util/LocalhostDns.d.ts +0 -23
- package/lib/Util/LocalhostDns.d.ts.map +0 -1
- package/lib/Util/LocalhostDns.js +0 -46
- package/lib/Util/LocalhostDns.js.map +0 -1
- package/lib/Util/assert-never.d.ts +0 -12
- package/lib/Util/assert-never.d.ts.map +0 -1
- package/lib/Util/assert-never.js +0 -11
- package/lib/Util/assert-never.js.map +0 -1
- package/lib/Util/class.d.ts +0 -3
- package/lib/Util/class.d.ts.map +0 -1
- package/lib/Util/class.js +0 -1
- package/lib/Util/class.js.map +0 -1
- package/lib/Util/ignore.d.ts +0 -40
- package/lib/Util/ignore.d.ts.map +0 -1
- package/lib/Util/ignore.js +0 -591
- package/lib/Util/ignore.js.map +0 -1
- package/lib/Util/instance.d.ts +0 -4
- package/lib/Util/instance.d.ts.map +0 -1
- package/lib/Util/instance.js +0 -1
- package/lib/Util/instance.js.map +0 -1
- package/lib/Util/pointer.d.ts +0 -5
- package/lib/Util/pointer.d.ts.map +0 -1
- package/lib/Util/pointer.js +0 -1
- package/lib/Util/pointer.js.map +0 -1
- package/lib/Util/schema-to-type.d.ts +0 -42
- package/lib/Util/schema-to-type.d.ts.map +0 -1
- package/lib/Util/schema-to-type.js +0 -364
- package/lib/Util/schema-to-type.js.map +0 -1
- package/lib/Util/todo.d.ts +0 -3
- package/lib/Util/todo.d.ts.map +0 -1
- package/lib/Util/todo.js +0 -3
- package/lib/Util/todo.js.map +0 -1
- package/lib/Variable.d.ts +0 -29
- package/lib/Variable.d.ts.map +0 -1
- package/lib/Variable.js +0 -9
- package/lib/Variable.js.map +0 -1
- package/src/Secret.ts +0 -87
- package/src/Trait.ts +0 -105
- package/src/Util/LocalhostDns.ts +0 -52
- package/src/Util/assert-never.ts +0 -18
- package/src/Util/class.ts +0 -7
- package/src/Util/ignore.ts +0 -815
- package/src/Util/instance.ts +0 -9
- package/src/Util/pointer.ts +0 -5
- package/src/Util/schema-to-type.ts +0 -456
- package/src/Util/todo.ts +0 -4
- package/src/Variable.ts +0 -44
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { BrowserRenderingBinding } from "./BrowserRenderingBinding.ts";
|
|
3
|
+
|
|
4
|
+
type BrowserRenderingTypeId = typeof BrowserRenderingTypeId;
|
|
5
|
+
const BrowserRenderingTypeId = "Cloudflare.BrowserRendering" as const;
|
|
6
|
+
|
|
7
|
+
export type BrowserRenderingProps = {
|
|
8
|
+
/**
|
|
9
|
+
* Binding name used when `Cloudflare.BrowserRendering.bind(browser)` attaches
|
|
10
|
+
* Browser Rendering from inside a Worker init phase. When Browser Rendering
|
|
11
|
+
* is passed through `Worker({ bindings: { ... } })`, the object key remains
|
|
12
|
+
* the binding name.
|
|
13
|
+
*
|
|
14
|
+
* @default "BROWSER"
|
|
15
|
+
*/
|
|
16
|
+
name?: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Marker for a Cloudflare Browser Rendering binding.
|
|
21
|
+
*
|
|
22
|
+
* Browser Rendering bindings are configured directly on Workers and do not
|
|
23
|
+
* have a standalone provisioning API. The Worker provider sees this object in
|
|
24
|
+
* `bindings: { ... }` and emits the corresponding `{ type: "browser" }`
|
|
25
|
+
* metadata binding to the script.
|
|
26
|
+
*/
|
|
27
|
+
export type BrowserRendering = {
|
|
28
|
+
kind: BrowserRenderingTypeId;
|
|
29
|
+
name: string;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const isBrowserRendering = (value: unknown): value is BrowserRendering =>
|
|
33
|
+
typeof value === "object" &&
|
|
34
|
+
(value as BrowserRendering)?.kind === BrowserRenderingTypeId;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* A Cloudflare Browser Rendering binding for launching headless browser
|
|
38
|
+
* sessions from Workers via `@cloudflare/puppeteer`.
|
|
39
|
+
*
|
|
40
|
+
* @binding
|
|
41
|
+
*
|
|
42
|
+
* @section Effect-style Worker (recommended)
|
|
43
|
+
* @example Render a page title with managed browser cleanup
|
|
44
|
+
* ```typescript
|
|
45
|
+
* import puppeteer from "@cloudflare/puppeteer";
|
|
46
|
+
* import * as Effect from "effect/Effect";
|
|
47
|
+
*
|
|
48
|
+
* const Browser = Cloudflare.BrowserRendering({ name: "BROWSER" });
|
|
49
|
+
*
|
|
50
|
+
* Cloudflare.Worker(
|
|
51
|
+
* "BrowserWorker",
|
|
52
|
+
* { main: import.meta.filename },
|
|
53
|
+
* Effect.gen(function* () {
|
|
54
|
+
* const browserRendering = yield* Cloudflare.BrowserRendering.bind(
|
|
55
|
+
* yield* Browser,
|
|
56
|
+
* );
|
|
57
|
+
*
|
|
58
|
+
* return {
|
|
59
|
+
* fetch: browserRendering.withBrowser(puppeteer, (browser) =>
|
|
60
|
+
* Effect.gen(function* () {
|
|
61
|
+
* const page = yield* Effect.tryPromise(() => browser.newPage());
|
|
62
|
+
* yield* Effect.tryPromise(() => page.goto("https://example.com"));
|
|
63
|
+
* const title = yield* Effect.tryPromise(() => page.title());
|
|
64
|
+
* return Response.json({ title });
|
|
65
|
+
* }),
|
|
66
|
+
* ),
|
|
67
|
+
* };
|
|
68
|
+
* }).pipe(Effect.provide(Cloudflare.BrowserRenderingBindingLive)),
|
|
69
|
+
* );
|
|
70
|
+
* ```
|
|
71
|
+
*
|
|
72
|
+
* @section Declaring Browser Rendering
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const Browser = yield* Cloudflare.BrowserRendering({ name: "BROWSER" });
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* @section Worker binding metadata
|
|
79
|
+
* @example
|
|
80
|
+
* ```typescript
|
|
81
|
+
* export const Worker = Cloudflare.Worker("Worker", {
|
|
82
|
+
* main: "./src/worker.ts",
|
|
83
|
+
* bindings: {
|
|
84
|
+
* BROWSER: Cloudflare.BrowserRendering(),
|
|
85
|
+
* },
|
|
86
|
+
* });
|
|
87
|
+
*
|
|
88
|
+
* export type WorkerEnv = Cloudflare.InferEnv<typeof Worker>;
|
|
89
|
+
* // { BROWSER: Fetcher }
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* @example Async-style worker with the raw runtime binding
|
|
93
|
+
* ```typescript
|
|
94
|
+
* import puppeteer from "@cloudflare/puppeteer";
|
|
95
|
+
* import type { WorkerEnv } from "../alchemy.run.ts";
|
|
96
|
+
*
|
|
97
|
+
* export default {
|
|
98
|
+
* async fetch(request: Request, env: WorkerEnv) {
|
|
99
|
+
* const browser = await puppeteer.launch(env.BROWSER);
|
|
100
|
+
* const page = await browser.newPage();
|
|
101
|
+
* await page.goto("https://example.com");
|
|
102
|
+
* const screenshot = await page.screenshot();
|
|
103
|
+
* await browser.close();
|
|
104
|
+
*
|
|
105
|
+
* return new Response(screenshot, {
|
|
106
|
+
* headers: { "content-type": "image/png" },
|
|
107
|
+
* });
|
|
108
|
+
* },
|
|
109
|
+
* };
|
|
110
|
+
* ```
|
|
111
|
+
*
|
|
112
|
+
* @see https://developers.cloudflare.com/browser-rendering/workers-binding-api/
|
|
113
|
+
*/
|
|
114
|
+
export const BrowserRendering: {
|
|
115
|
+
(props?: BrowserRenderingProps): Effect.Effect<BrowserRendering>;
|
|
116
|
+
/**
|
|
117
|
+
* Bind Browser Rendering to the surrounding Worker, returning a small client
|
|
118
|
+
* with access to the native Workers runtime binding.
|
|
119
|
+
*/
|
|
120
|
+
bind: typeof BrowserRenderingBinding.bind;
|
|
121
|
+
} = Object.assign(
|
|
122
|
+
Effect.fn(function* (props?: BrowserRenderingProps) {
|
|
123
|
+
return {
|
|
124
|
+
kind: BrowserRenderingTypeId,
|
|
125
|
+
name: props?.name ?? "BROWSER",
|
|
126
|
+
} satisfies BrowserRendering;
|
|
127
|
+
}),
|
|
128
|
+
{
|
|
129
|
+
bind: (...args: Parameters<typeof BrowserRenderingBinding.bind>) =>
|
|
130
|
+
BrowserRenderingBinding.bind(...args),
|
|
131
|
+
},
|
|
132
|
+
);
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import type * as cf from "@cloudflare/workers-types";
|
|
2
|
+
import * as Data from "effect/Data";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
|
+
import * as Binding from "../../Binding.ts";
|
|
6
|
+
import type { ResourceLike } from "../../Resource.ts";
|
|
7
|
+
import { isWorker, WorkerEnvironment } from "../Workers/Worker.ts";
|
|
8
|
+
import type { BrowserRendering as BrowserRenderingLike } from "./BrowserRendering.ts";
|
|
9
|
+
|
|
10
|
+
export class BrowserRenderingError extends Data.TaggedError(
|
|
11
|
+
"BrowserRenderingError",
|
|
12
|
+
)<{
|
|
13
|
+
message: string;
|
|
14
|
+
cause: unknown;
|
|
15
|
+
}> {}
|
|
16
|
+
|
|
17
|
+
export interface BrowserRenderingBrowser {
|
|
18
|
+
close(): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface BrowserRenderingPuppeteer<
|
|
22
|
+
Browser extends BrowserRenderingBrowser,
|
|
23
|
+
> {
|
|
24
|
+
launch(binding: cf.Fetcher): Promise<Browser>;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Effect-native client for a Cloudflare Browser Rendering binding.
|
|
29
|
+
*
|
|
30
|
+
* Browser Rendering's Workers binding is consumed by `@cloudflare/puppeteer`.
|
|
31
|
+
* Alchemy keeps Puppeteer as a caller-provided dependency while wrapping
|
|
32
|
+
* launch and cleanup in Effects.
|
|
33
|
+
*/
|
|
34
|
+
export interface BrowserRenderingClient {
|
|
35
|
+
/**
|
|
36
|
+
* Effect resolving to the raw Cloudflare Browser Rendering runtime binding.
|
|
37
|
+
*/
|
|
38
|
+
raw: Effect.Effect<cf.Fetcher, never, WorkerEnvironment>;
|
|
39
|
+
/**
|
|
40
|
+
* Launch a Browser Rendering session through `@cloudflare/puppeteer`.
|
|
41
|
+
*/
|
|
42
|
+
launch<Browser extends BrowserRenderingBrowser>(
|
|
43
|
+
puppeteer: BrowserRenderingPuppeteer<Browser>,
|
|
44
|
+
): Effect.Effect<Browser, BrowserRenderingError, WorkerEnvironment>;
|
|
45
|
+
/**
|
|
46
|
+
* Launch a browser, run an Effect with it, and close it afterward.
|
|
47
|
+
*/
|
|
48
|
+
withBrowser<Browser extends BrowserRenderingBrowser, A, E, R>(
|
|
49
|
+
puppeteer: BrowserRenderingPuppeteer<Browser>,
|
|
50
|
+
use: (browser: Browser) => Effect.Effect<A, E, R>,
|
|
51
|
+
): Effect.Effect<A, BrowserRenderingError | E, WorkerEnvironment | R>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export class BrowserRenderingBinding extends Binding.Service<
|
|
55
|
+
BrowserRenderingBinding,
|
|
56
|
+
(browser: BrowserRenderingLike) => Effect.Effect<BrowserRenderingClient>
|
|
57
|
+
>()("Cloudflare.BrowserRendering.Binding") {}
|
|
58
|
+
|
|
59
|
+
export const BrowserRenderingBindingLive = Layer.effect(
|
|
60
|
+
BrowserRenderingBinding,
|
|
61
|
+
Effect.gen(function* () {
|
|
62
|
+
const Policy = yield* BrowserRenderingBindingPolicy;
|
|
63
|
+
|
|
64
|
+
return Effect.fn(function* (browser: BrowserRenderingLike) {
|
|
65
|
+
yield* Policy(browser);
|
|
66
|
+
// Cloudflare exposes Browser Rendering as a service-style binding for
|
|
67
|
+
// @cloudflare/puppeteer; workers-types has no narrower interface.
|
|
68
|
+
const raw = WorkerEnvironment.useSync(
|
|
69
|
+
(env) => (env as Record<string, cf.Fetcher>)[browser.name]!,
|
|
70
|
+
);
|
|
71
|
+
return makeBrowserRenderingClient(raw);
|
|
72
|
+
});
|
|
73
|
+
}),
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
export class BrowserRenderingBindingPolicy extends Binding.Policy<
|
|
77
|
+
BrowserRenderingBindingPolicy,
|
|
78
|
+
(browser: BrowserRenderingLike) => Effect.Effect<void>
|
|
79
|
+
>()("Cloudflare.BrowserRendering.Binding") {}
|
|
80
|
+
|
|
81
|
+
export const BrowserRenderingBindingPolicyLive =
|
|
82
|
+
BrowserRenderingBindingPolicy.layer.succeed(
|
|
83
|
+
Effect.fn(function* (host: ResourceLike, browser: BrowserRenderingLike) {
|
|
84
|
+
if (isWorker(host)) {
|
|
85
|
+
yield* host.bind(browser.name, {
|
|
86
|
+
bindings: [
|
|
87
|
+
{
|
|
88
|
+
type: "browser",
|
|
89
|
+
name: browser.name,
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
});
|
|
93
|
+
} else {
|
|
94
|
+
return yield* Effect.die(
|
|
95
|
+
new Error(
|
|
96
|
+
`BrowserRenderingBinding does not support runtime '${host.Type}'`,
|
|
97
|
+
),
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
}),
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
const tryPromise = <T>(
|
|
104
|
+
fn: () => Promise<T>,
|
|
105
|
+
): Effect.Effect<T, BrowserRenderingError> =>
|
|
106
|
+
Effect.tryPromise({
|
|
107
|
+
try: fn,
|
|
108
|
+
catch: (error) =>
|
|
109
|
+
new BrowserRenderingError({
|
|
110
|
+
message:
|
|
111
|
+
error instanceof Error
|
|
112
|
+
? error.message
|
|
113
|
+
: "Unknown Browser Rendering error",
|
|
114
|
+
cause: error,
|
|
115
|
+
}),
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
/** @internal */
|
|
119
|
+
export const makeBrowserRenderingClient = (
|
|
120
|
+
raw: Effect.Effect<cf.Fetcher, never, WorkerEnvironment>,
|
|
121
|
+
): BrowserRenderingClient => {
|
|
122
|
+
const launch = <Browser extends BrowserRenderingBrowser>(
|
|
123
|
+
puppeteer: BrowserRenderingPuppeteer<Browser>,
|
|
124
|
+
) =>
|
|
125
|
+
raw.pipe(
|
|
126
|
+
Effect.flatMap((binding) => tryPromise(() => puppeteer.launch(binding))),
|
|
127
|
+
);
|
|
128
|
+
|
|
129
|
+
return {
|
|
130
|
+
raw,
|
|
131
|
+
launch,
|
|
132
|
+
withBrowser: (puppeteer, use) =>
|
|
133
|
+
Effect.acquireUseRelease(launch(puppeteer), use, (browser) =>
|
|
134
|
+
tryPromise(() => browser.close()),
|
|
135
|
+
),
|
|
136
|
+
} satisfies BrowserRenderingClient;
|
|
137
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * from "./BrowserRendering.ts";
|
|
2
|
+
export {
|
|
3
|
+
BrowserRenderingBinding,
|
|
4
|
+
BrowserRenderingBindingLive,
|
|
5
|
+
BrowserRenderingBindingPolicy,
|
|
6
|
+
BrowserRenderingBindingPolicyLive,
|
|
7
|
+
BrowserRenderingError,
|
|
8
|
+
type BrowserRenderingBrowser,
|
|
9
|
+
type BrowserRenderingClient,
|
|
10
|
+
type BrowserRenderingPuppeteer,
|
|
11
|
+
} from "./BrowserRenderingBinding.ts";
|
|
@@ -176,7 +176,7 @@ export type Container = {
|
|
|
176
176
|
*
|
|
177
177
|
* return Effect.gen(function* () {
|
|
178
178
|
* // INNER (per-instance): start the container and expose RPC.
|
|
179
|
-
* const container = yield* Cloudflare.start(sandbox);
|
|
179
|
+
* const container = yield* Cloudflare.start(sandbox, { enableInternet: true });
|
|
180
180
|
*
|
|
181
181
|
* return {
|
|
182
182
|
* exec: (cmd: string) => container.exec(cmd),
|
|
@@ -200,7 +200,7 @@ export type Container = {
|
|
|
200
200
|
*
|
|
201
201
|
* // per-instance (inner Effect)
|
|
202
202
|
* return Effect.gen(function* () {
|
|
203
|
-
* const container = yield* Cloudflare.start(sandbox);
|
|
203
|
+
* const container = yield* Cloudflare.start(sandbox, { enableInternet: true });
|
|
204
204
|
*
|
|
205
205
|
* return {
|
|
206
206
|
* exec: (cmd: string) => container.exec(cmd),
|
|
@@ -215,7 +215,7 @@ export type Container = {
|
|
|
215
215
|
*
|
|
216
216
|
* @example Fetching from a container port
|
|
217
217
|
* ```typescript
|
|
218
|
-
* const container = yield* Cloudflare.start(sandbox);
|
|
218
|
+
* const container = yield* Cloudflare.start(sandbox, { enableInternet: true });
|
|
219
219
|
* const { fetch } = yield* container.getTcpPort(3000);
|
|
220
220
|
*
|
|
221
221
|
* const response = yield* fetch(
|
|
@@ -9,10 +9,9 @@ import { type Fetcher } from "../Fetcher.ts";
|
|
|
9
9
|
import { DurableObjectState } from "../Workers/DurableObjectState.ts";
|
|
10
10
|
import {
|
|
11
11
|
type Container,
|
|
12
|
-
type ContainerStartupOptions,
|
|
13
12
|
ContainerError,
|
|
13
|
+
type ContainerStartupOptions,
|
|
14
14
|
} from "./Container.ts";
|
|
15
|
-
|
|
16
15
|
/**
|
|
17
16
|
* Runs the Container in a Durable Object and monitors it, providing a durable fetch and RPC interface to it.
|
|
18
17
|
*/
|
|
@@ -5,12 +5,15 @@ import { isResolved } from "../../Diff.ts";
|
|
|
5
5
|
import { createPhysicalName } from "../../PhysicalName.ts";
|
|
6
6
|
import * as Provider from "../../Provider.ts";
|
|
7
7
|
import { Resource } from "../../Resource.ts";
|
|
8
|
+
import { listSqlFiles, readSqlFile } from "../../Sql/SqlFile.ts";
|
|
8
9
|
import { CloudflareEnvironment } from "../CloudflareEnvironment.ts";
|
|
9
10
|
import type { Providers } from "../Providers.ts";
|
|
10
11
|
import { cloneD1Database } from "./D1Clone.ts";
|
|
11
12
|
import { importD1Database } from "./D1Import.ts";
|
|
12
13
|
import { applyMigrations } from "./D1Migrations.ts";
|
|
13
|
-
|
|
14
|
+
|
|
15
|
+
export const isD1Database = (value: unknown): value is D1Database =>
|
|
16
|
+
typeof value === "object" && (value as any)?.Type === "Cloudflare.D1Database";
|
|
14
17
|
|
|
15
18
|
export type Jurisdiction = "default" | "eu" | "fedramp";
|
|
16
19
|
export type PrimaryLocationHint =
|
|
@@ -133,10 +133,8 @@ export const toHttpClient = (fetcher: {
|
|
|
133
133
|
) => Effect.Effect<HttpServerResponse.HttpServerResponse, HttpServerError>;
|
|
134
134
|
}) =>
|
|
135
135
|
HttpClient.make((request) => {
|
|
136
|
-
console.log("toHttpClient: request", request.url);
|
|
137
136
|
return fetcher.fetch(HttpServerRequest.fromClientRequest(request)).pipe(
|
|
138
137
|
Effect.map((response) => {
|
|
139
|
-
console.log("toHttpClient: response", response);
|
|
140
138
|
return HttpClientResponse.fromWeb(
|
|
141
139
|
request,
|
|
142
140
|
HttpServerResponse.toWeb(response),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as hyperdrive from "@distilled.cloud/cloudflare/hyperdrive";
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Predicate from "effect/Predicate";
|
|
3
4
|
import * as Redacted from "effect/Redacted";
|
|
4
5
|
|
|
5
6
|
import { AlchemyContext } from "../../AlchemyContext.ts";
|
|
@@ -157,6 +158,10 @@ export const Hyperdrive = Resource<Hyperdrive>("Cloudflare.Hyperdrive")({
|
|
|
157
158
|
bind: HyperdriveBinding.bind,
|
|
158
159
|
});
|
|
159
160
|
|
|
161
|
+
export const isHyperdrive = (value: unknown): value is Hyperdrive =>
|
|
162
|
+
Predicate.hasProperty(value, "Type") &&
|
|
163
|
+
value.Type === "Cloudflare.Hyperdrive";
|
|
164
|
+
|
|
160
165
|
export const HyperdriveProvider = () =>
|
|
161
166
|
Provider.effect(
|
|
162
167
|
Hyperdrive,
|
|
@@ -2,7 +2,6 @@ import type * as runtime from "@cloudflare/workers-types";
|
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
3
|
import * as Layer from "effect/Layer";
|
|
4
4
|
import * as Redacted from "effect/Redacted";
|
|
5
|
-
import { AlchemyContext } from "../../AlchemyContext.ts";
|
|
6
5
|
import * as Binding from "../../Binding.ts";
|
|
7
6
|
import * as Output from "../../Output.ts";
|
|
8
7
|
import type { ResourceLike } from "../../Resource.ts";
|
|
@@ -102,8 +101,6 @@ export class HyperdriveBindingPolicy extends Binding.Policy<
|
|
|
102
101
|
|
|
103
102
|
export const HyperdriveBindingPolicyLive = HyperdriveBindingPolicy.layer.effect(
|
|
104
103
|
Effect.gen(function* () {
|
|
105
|
-
const ctx = yield* AlchemyContext;
|
|
106
|
-
|
|
107
104
|
return Effect.fn(function* (host: ResourceLike, hyperdrive: Hyperdrive) {
|
|
108
105
|
if (!isWorker(host)) {
|
|
109
106
|
return yield* Effect.die(
|
|
@@ -113,38 +110,6 @@ export const HyperdriveBindingPolicyLive = HyperdriveBindingPolicy.layer.effect(
|
|
|
113
110
|
);
|
|
114
111
|
}
|
|
115
112
|
|
|
116
|
-
const origin = Output.map(
|
|
117
|
-
Output.all(hyperdrive.dev, hyperdrive.origin, hyperdrive.mtls),
|
|
118
|
-
([dev, origin, mtls]): Required<HyperdriveDevOrigin> => {
|
|
119
|
-
if (dev) {
|
|
120
|
-
return {
|
|
121
|
-
scheme: dev.scheme,
|
|
122
|
-
host: dev.host,
|
|
123
|
-
port: dev.port ?? defaultPort(dev.scheme),
|
|
124
|
-
user: dev.user,
|
|
125
|
-
database: dev.database,
|
|
126
|
-
password: dev.password,
|
|
127
|
-
sslmode: dev.sslmode ?? "prefer",
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
if ("accessClientId" in origin) {
|
|
131
|
-
throw new Error(
|
|
132
|
-
`Hyperdrive instance ${hyperdrive.LogicalId} has an origin that requires Cloudflare Access. This is not supported in development mode. ` +
|
|
133
|
-
"Select a different origin or set the `dev` property to an origin that does not require Cloudflare Access.",
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
return {
|
|
137
|
-
scheme: origin.scheme,
|
|
138
|
-
host: origin.host,
|
|
139
|
-
port: origin.port ?? defaultPort(origin.scheme),
|
|
140
|
-
user: origin.user,
|
|
141
|
-
database: origin.database,
|
|
142
|
-
password: origin.password,
|
|
143
|
-
sslmode: mtls?.sslmode ?? "require",
|
|
144
|
-
};
|
|
145
|
-
},
|
|
146
|
-
);
|
|
147
|
-
|
|
148
113
|
yield* host.bind`${hyperdrive}`({
|
|
149
114
|
bindings: [
|
|
150
115
|
{
|
|
@@ -153,15 +118,48 @@ export const HyperdriveBindingPolicyLive = HyperdriveBindingPolicy.layer.effect(
|
|
|
153
118
|
id: hyperdrive.hyperdriveId as unknown as string,
|
|
154
119
|
},
|
|
155
120
|
],
|
|
156
|
-
hyperdrives:
|
|
157
|
-
? (Output.map(
|
|
158
|
-
Output.all(hyperdrive.hyperdriveId, Output.asOutput(origin)),
|
|
159
|
-
([id, origin]) => ({
|
|
160
|
-
[id]: origin,
|
|
161
|
-
}),
|
|
162
|
-
) as unknown as Record<string, Required<HyperdriveDevOrigin>>)
|
|
163
|
-
: undefined,
|
|
121
|
+
hyperdrives: getHyperdriveDevOrigin(hyperdrive),
|
|
164
122
|
});
|
|
165
123
|
});
|
|
166
124
|
}),
|
|
167
125
|
);
|
|
126
|
+
|
|
127
|
+
export const getHyperdriveDevOrigin = (hyperdrive: Hyperdrive) => {
|
|
128
|
+
const origin = Output.map(
|
|
129
|
+
Output.all(hyperdrive.dev, hyperdrive.origin, hyperdrive.mtls),
|
|
130
|
+
([dev, origin, mtls]): Required<HyperdriveDevOrigin> => {
|
|
131
|
+
if (dev) {
|
|
132
|
+
return {
|
|
133
|
+
scheme: dev.scheme,
|
|
134
|
+
host: dev.host,
|
|
135
|
+
port: dev.port ?? defaultPort(dev.scheme),
|
|
136
|
+
user: dev.user,
|
|
137
|
+
database: dev.database,
|
|
138
|
+
password: dev.password,
|
|
139
|
+
sslmode: dev.sslmode ?? "prefer",
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
if ("accessClientId" in origin) {
|
|
143
|
+
throw new Error(
|
|
144
|
+
`Hyperdrive instance ${hyperdrive.LogicalId} has an origin that requires Cloudflare Access. This is not supported in development mode. ` +
|
|
145
|
+
"Select a different origin or set the `dev` property to an origin that does not require Cloudflare Access.",
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
scheme: origin.scheme,
|
|
150
|
+
host: origin.host,
|
|
151
|
+
port: origin.port ?? defaultPort(origin.scheme),
|
|
152
|
+
user: origin.user,
|
|
153
|
+
database: origin.database,
|
|
154
|
+
password: origin.password,
|
|
155
|
+
sslmode: mtls?.sslmode ?? "require",
|
|
156
|
+
};
|
|
157
|
+
},
|
|
158
|
+
);
|
|
159
|
+
return Output.map(
|
|
160
|
+
Output.all(hyperdrive.hyperdriveId, Output.asOutput(origin)),
|
|
161
|
+
([id, origin]) => ({
|
|
162
|
+
[id]: origin,
|
|
163
|
+
}),
|
|
164
|
+
) as unknown as Record<string, Required<HyperdriveDevOrigin>>;
|
|
165
|
+
};
|
|
@@ -10,6 +10,10 @@ import { CloudflareEnvironment } from "../CloudflareEnvironment.ts";
|
|
|
10
10
|
import type { Providers } from "../Providers.ts";
|
|
11
11
|
import { KVNamespaceBinding } from "./KVNamespaceBinding.ts";
|
|
12
12
|
|
|
13
|
+
export const isKVNamespace = (value: unknown): value is KVNamespace =>
|
|
14
|
+
typeof value === "object" &&
|
|
15
|
+
(value as any)?.Type === "Cloudflare.KVNamespace";
|
|
16
|
+
|
|
13
17
|
export type KVNamespaceProps = {
|
|
14
18
|
/**
|
|
15
19
|
* A human-readable string name for the namespace.
|
package/src/Cloudflare/Local.ts
CHANGED
|
@@ -5,11 +5,12 @@ import { pipe } from "effect/Function";
|
|
|
5
5
|
import * as Layer from "effect/Layer";
|
|
6
6
|
import * as Ref from "effect/Ref";
|
|
7
7
|
import * as Schedule from "effect/Schedule";
|
|
8
|
+
import { CredentialsStoreLive } from "../Auth/Credentials.ts";
|
|
9
|
+
import { ProfileLive } from "../Auth/Profile.ts";
|
|
8
10
|
import { Command } from "../Build/Command.ts";
|
|
9
11
|
import * as Build from "../Build/index.ts";
|
|
12
|
+
import { KeyPair, KeyPairProvider } from "../KeyPair.ts";
|
|
10
13
|
import * as Provider from "../Provider.ts";
|
|
11
|
-
import { CredentialsStoreLive } from "../Auth/Credentials.ts";
|
|
12
|
-
import { ProfileLive } from "../Auth/Profile.ts";
|
|
13
14
|
import { Random, RandomProvider } from "../Random.ts";
|
|
14
15
|
import * as Access from "./Access.ts";
|
|
15
16
|
import * as AiGateway from "./AiGateway/index.ts";
|
|
@@ -17,6 +18,7 @@ import * as AnalyticsEngine from "./AnalyticsEngine/index.ts";
|
|
|
17
18
|
import * as ApiToken from "./ApiToken/index.ts";
|
|
18
19
|
import * as Artifacts from "./Artifacts/index.ts";
|
|
19
20
|
import { CloudflareAuth } from "./Auth/AuthProvider.ts";
|
|
21
|
+
import * as BrowserRendering from "./BrowserRendering/index.ts";
|
|
20
22
|
import * as CloudflareEnvironment from "./CloudflareEnvironment.ts";
|
|
21
23
|
import * as Containers from "./Container/index.ts";
|
|
22
24
|
import * as Credentials from "./Credentials.ts";
|
|
@@ -55,6 +57,7 @@ export const providers = () =>
|
|
|
55
57
|
AiGateway.AiGatewayBindingPolicy,
|
|
56
58
|
AnalyticsEngine.AnalyticsEngineDatasetBindingPolicy,
|
|
57
59
|
Artifacts.ArtifactsBindingPolicy,
|
|
60
|
+
BrowserRendering.BrowserRenderingBindingPolicy,
|
|
58
61
|
Command,
|
|
59
62
|
Containers.Container,
|
|
60
63
|
D1.D1ConnectionPolicy,
|
|
@@ -79,6 +82,7 @@ export const providers = () =>
|
|
|
79
82
|
SecretsStore.Secret,
|
|
80
83
|
Tunnel.Tunnel,
|
|
81
84
|
VpcService.VpcService,
|
|
85
|
+
KeyPair,
|
|
82
86
|
Random,
|
|
83
87
|
Workers.BindWorkerPolicy,
|
|
84
88
|
Workers.CronEventSourcePolicy,
|
|
@@ -96,6 +100,7 @@ export const providers = () =>
|
|
|
96
100
|
AiGateway.AiGatewayBindingPolicyLive,
|
|
97
101
|
AnalyticsEngine.AnalyticsEngineDatasetBindingPolicyLive,
|
|
98
102
|
Artifacts.ArtifactsBindingPolicyLive,
|
|
103
|
+
BrowserRendering.BrowserRenderingBindingPolicyLive,
|
|
99
104
|
Containers.ContainerProvider(),
|
|
100
105
|
D1.D1ConnectionPolicyLive,
|
|
101
106
|
D1.DatabaseProvider(),
|
|
@@ -128,7 +133,11 @@ export const providers = () =>
|
|
|
128
133
|
),
|
|
129
134
|
),
|
|
130
135
|
Layer.provideMerge(
|
|
131
|
-
Layer.mergeAll(
|
|
136
|
+
Layer.mergeAll(
|
|
137
|
+
Build.CommandProvider(),
|
|
138
|
+
KeyPairProvider(),
|
|
139
|
+
RandomProvider(),
|
|
140
|
+
),
|
|
132
141
|
),
|
|
133
142
|
Layer.provideMerge(Credentials.fromAuthProvider()),
|
|
134
143
|
Layer.provideMerge(CloudflareEnvironment.fromProfile()),
|
|
@@ -157,19 +166,6 @@ export const providers = () =>
|
|
|
157
166
|
Layer.orDie,
|
|
158
167
|
);
|
|
159
168
|
|
|
160
|
-
const isMisleadinglyTaggedTransient = (error: unknown): boolean => {
|
|
161
|
-
if (!error || typeof error !== "object") return false;
|
|
162
|
-
const tag = (error as { _tag?: unknown })._tag;
|
|
163
|
-
const message = ((error as { message?: unknown }).message ?? "") as string;
|
|
164
|
-
// CF code 10001: "Method not allowed for token" is a real permission
|
|
165
|
-
// failure (NOT retryable), but the same code is also returned with
|
|
166
|
-
// message "internal error" during Cloudflare-side hiccups. The two
|
|
167
|
-
// messages are unambiguously distinct, so we can safely retry only
|
|
168
|
-
// the internal-error variant.
|
|
169
|
-
if (tag === "Forbidden" && /internal error/i.test(message)) return true;
|
|
170
|
-
return false;
|
|
171
|
-
};
|
|
172
|
-
|
|
173
169
|
const cloudflareRetryFactory: Retry.Factory = (lastError) => {
|
|
174
170
|
const defaults = Retry.makeDefault(lastError);
|
|
175
171
|
return {
|
|
@@ -196,3 +192,16 @@ const cloudflareRetryFactory: Retry.Factory = (lastError) => {
|
|
|
196
192
|
),
|
|
197
193
|
};
|
|
198
194
|
};
|
|
195
|
+
|
|
196
|
+
const isMisleadinglyTaggedTransient = (error: unknown): boolean => {
|
|
197
|
+
if (!error || typeof error !== "object") return false;
|
|
198
|
+
const tag = (error as { _tag?: unknown })._tag;
|
|
199
|
+
const message = ((error as { message?: unknown }).message ?? "") as string;
|
|
200
|
+
// CF code 10001: "Method not allowed for token" is a real permission
|
|
201
|
+
// failure (NOT retryable), but the same code is also returned with
|
|
202
|
+
// message "internal error" during Cloudflare-side hiccups. The two
|
|
203
|
+
// messages are unambiguously distinct, so we can safely retry only
|
|
204
|
+
// the internal-error variant.
|
|
205
|
+
if (tag === "Forbidden" && /internal error/i.test(message)) return true;
|
|
206
|
+
return false;
|
|
207
|
+
};
|
|
@@ -10,6 +10,9 @@ import { CloudflareEnvironment } from "../CloudflareEnvironment.ts";
|
|
|
10
10
|
import type { Providers } from "../Providers.ts";
|
|
11
11
|
import { QueueBinding } from "./QueueBinding.ts";
|
|
12
12
|
|
|
13
|
+
export const isQueue = (value: unknown): value is Queue =>
|
|
14
|
+
typeof value === "object" && (value as any)?.Type === "Cloudflare.Queue";
|
|
15
|
+
|
|
13
16
|
export type QueueProps = {
|
|
14
17
|
/**
|
|
15
18
|
* Name of the queue. If omitted, a unique name will be generated.
|