alchemy 2.0.0-beta.47 → 2.0.0-beta.49

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.
Files changed (263) hide show
  1. package/bin/exec.js +28 -5
  2. package/bin/exec.js.map +1 -1
  3. package/lib/AWS/Lambda/BucketEventSource.d.ts +1 -1
  4. package/lib/AWS/Lambda/BucketEventSource.d.ts.map +1 -1
  5. package/lib/AWS/Lambda/EventBridgeEventSource.d.ts +1 -1
  6. package/lib/AWS/Lambda/EventBridgeEventSource.d.ts.map +1 -1
  7. package/lib/AWS/Lambda/QueueEventSource.d.ts +1 -1
  8. package/lib/AWS/Lambda/QueueEventSource.d.ts.map +1 -1
  9. package/lib/AWS/Lambda/StreamEventSource.d.ts +1 -1
  10. package/lib/AWS/Lambda/StreamEventSource.d.ts.map +1 -1
  11. package/lib/AWS/Lambda/TableEventSource.d.ts +1 -1
  12. package/lib/AWS/Lambda/TableEventSource.d.ts.map +1 -1
  13. package/lib/AWS/Lambda/TopicEventSource.d.ts +1 -1
  14. package/lib/AWS/Lambda/TopicEventSource.d.ts.map +1 -1
  15. package/lib/AdoptPolicy.js +1 -1
  16. package/lib/AdoptPolicy.js.map +1 -1
  17. package/lib/Binding.d.ts +5 -1
  18. package/lib/Binding.d.ts.map +1 -1
  19. package/lib/Binding.js.map +1 -1
  20. package/lib/Cli/commands/cloudflare.d.ts +4 -1
  21. package/lib/Cli/commands/cloudflare.d.ts.map +1 -1
  22. package/lib/Cli/commands/cloudflare.js +274 -1
  23. package/lib/Cli/commands/cloudflare.js.map +1 -1
  24. package/lib/Cloudflare/AiGateway/AiGateway.d.ts +1 -1
  25. package/lib/Cloudflare/AiGateway/AiGateway.d.ts.map +1 -1
  26. package/lib/Cloudflare/AiGateway/AiGateway.js +2 -1
  27. package/lib/Cloudflare/AiGateway/AiGateway.js.map +1 -1
  28. package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts +40 -2
  29. package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts.map +1 -1
  30. package/lib/Cloudflare/ApiToken/AccountApiToken.js +49 -6
  31. package/lib/Cloudflare/ApiToken/AccountApiToken.js.map +1 -1
  32. package/lib/Cloudflare/ApiToken/Common.d.ts +36 -4
  33. package/lib/Cloudflare/ApiToken/Common.d.ts.map +1 -1
  34. package/lib/Cloudflare/ApiToken/Common.js +8 -0
  35. package/lib/Cloudflare/ApiToken/Common.js.map +1 -1
  36. package/lib/Cloudflare/ApiToken/UserApiToken.d.ts +38 -2
  37. package/lib/Cloudflare/ApiToken/UserApiToken.d.ts.map +1 -1
  38. package/lib/Cloudflare/ApiToken/UserApiToken.js +47 -6
  39. package/lib/Cloudflare/ApiToken/UserApiToken.js.map +1 -1
  40. package/lib/Cloudflare/Browser/Browser.d.ts +121 -0
  41. package/lib/Cloudflare/Browser/Browser.d.ts.map +1 -0
  42. package/lib/Cloudflare/{BrowserRendering/BrowserRendering.js → Browser/Browser.js} +19 -26
  43. package/lib/Cloudflare/Browser/Browser.js.map +1 -0
  44. package/lib/Cloudflare/Browser/BrowserBinding.d.ts +55 -0
  45. package/lib/Cloudflare/Browser/BrowserBinding.d.ts.map +1 -0
  46. package/lib/Cloudflare/{BrowserRendering/BrowserRenderingBinding.js → Browser/BrowserBinding.js} +11 -11
  47. package/lib/Cloudflare/Browser/BrowserBinding.js.map +1 -0
  48. package/lib/Cloudflare/Browser/index.d.ts +3 -0
  49. package/lib/Cloudflare/Browser/index.d.ts.map +1 -0
  50. package/lib/Cloudflare/Browser/index.js +3 -0
  51. package/lib/Cloudflare/Browser/index.js.map +1 -0
  52. package/lib/Cloudflare/Container/ContainerBinding.d.ts +2 -1
  53. package/lib/Cloudflare/Container/ContainerBinding.d.ts.map +1 -1
  54. package/lib/Cloudflare/D1/D1Database.d.ts.map +1 -1
  55. package/lib/Cloudflare/D1/D1Database.js +2 -1
  56. package/lib/Cloudflare/D1/D1Database.js.map +1 -1
  57. package/lib/Cloudflare/Dns/DnsBinding.d.ts +52 -0
  58. package/lib/Cloudflare/Dns/DnsBinding.d.ts.map +1 -0
  59. package/lib/Cloudflare/Dns/DnsBinding.js +59 -0
  60. package/lib/Cloudflare/Dns/DnsBinding.js.map +1 -0
  61. package/lib/Cloudflare/Dns/DnsRead.d.ts +80 -0
  62. package/lib/Cloudflare/Dns/DnsRead.d.ts.map +1 -0
  63. package/lib/Cloudflare/Dns/DnsRead.js +70 -0
  64. package/lib/Cloudflare/Dns/DnsRead.js.map +1 -0
  65. package/lib/Cloudflare/Dns/DnsReadWrite.d.ts +79 -0
  66. package/lib/Cloudflare/Dns/DnsReadWrite.d.ts.map +1 -0
  67. package/lib/Cloudflare/Dns/DnsReadWrite.js +72 -0
  68. package/lib/Cloudflare/Dns/DnsReadWrite.js.map +1 -0
  69. package/lib/Cloudflare/Dns/DnsWrite.d.ts +113 -0
  70. package/lib/Cloudflare/Dns/DnsWrite.d.ts.map +1 -0
  71. package/lib/Cloudflare/Dns/DnsWrite.js +100 -0
  72. package/lib/Cloudflare/Dns/DnsWrite.js.map +1 -0
  73. package/lib/Cloudflare/Dns/index.d.ts +5 -0
  74. package/lib/Cloudflare/Dns/index.d.ts.map +1 -0
  75. package/lib/Cloudflare/Dns/index.js +5 -0
  76. package/lib/Cloudflare/Dns/index.js.map +1 -0
  77. package/lib/Cloudflare/Email/EmailRouting.d.ts +1 -1
  78. package/lib/Cloudflare/Email/EmailRouting.d.ts.map +1 -1
  79. package/lib/Cloudflare/Email/EmailRouting.js +1 -1
  80. package/lib/Cloudflare/Email/EmailRouting.js.map +1 -1
  81. package/lib/Cloudflare/Email/EmailRule.d.ts +1 -1
  82. package/lib/Cloudflare/Email/EmailRule.d.ts.map +1 -1
  83. package/lib/Cloudflare/Email/EmailRule.js +1 -1
  84. package/lib/Cloudflare/Email/EmailRule.js.map +1 -1
  85. package/lib/Cloudflare/Hyperdrive/Hyperdrive.d.ts +1 -1
  86. package/lib/Cloudflare/Images/Images.d.ts +32 -23
  87. package/lib/Cloudflare/Images/Images.d.ts.map +1 -1
  88. package/lib/Cloudflare/Images/Images.js +10 -13
  89. package/lib/Cloudflare/Images/Images.js.map +1 -1
  90. package/lib/Cloudflare/KV/KVNamespace.d.ts +1 -1
  91. package/lib/Cloudflare/Providers.d.ts.map +1 -1
  92. package/lib/Cloudflare/Providers.js +14 -3
  93. package/lib/Cloudflare/Providers.js.map +1 -1
  94. package/lib/Cloudflare/Queue/Queue.d.ts +1 -1
  95. package/lib/Cloudflare/R2/R2Bucket.d.ts +2 -2
  96. package/lib/Cloudflare/R2/R2Bucket.d.ts.map +1 -1
  97. package/lib/Cloudflare/R2/R2Bucket.js +13 -7
  98. package/lib/Cloudflare/R2/R2Bucket.js.map +1 -1
  99. package/lib/Cloudflare/RateLimit/RateLimit.d.ts +132 -0
  100. package/lib/Cloudflare/RateLimit/RateLimit.d.ts.map +1 -0
  101. package/lib/Cloudflare/RateLimit/RateLimit.js +80 -0
  102. package/lib/Cloudflare/RateLimit/RateLimit.js.map +1 -0
  103. package/lib/Cloudflare/RateLimit/RateLimitBinding.d.ts +30 -0
  104. package/lib/Cloudflare/RateLimit/RateLimitBinding.d.ts.map +1 -0
  105. package/lib/Cloudflare/RateLimit/RateLimitBinding.js +50 -0
  106. package/lib/Cloudflare/RateLimit/RateLimitBinding.js.map +1 -0
  107. package/lib/Cloudflare/RateLimit/index.d.ts +3 -0
  108. package/lib/Cloudflare/RateLimit/index.d.ts.map +1 -0
  109. package/lib/Cloudflare/RateLimit/index.js +3 -0
  110. package/lib/Cloudflare/RateLimit/index.js.map +1 -0
  111. package/lib/Cloudflare/SecretsStore/Secret.d.ts +3 -2
  112. package/lib/Cloudflare/SecretsStore/Secret.d.ts.map +1 -1
  113. package/lib/Cloudflare/SecretsStore/Secret.js +7 -4
  114. package/lib/Cloudflare/SecretsStore/Secret.js.map +1 -1
  115. package/lib/Cloudflare/StateStore/Api.d.ts +1 -1
  116. package/lib/Cloudflare/Tunnel/Tunnel.d.ts +27 -0
  117. package/lib/Cloudflare/Tunnel/Tunnel.d.ts.map +1 -1
  118. package/lib/Cloudflare/Tunnel/Tunnel.js +27 -0
  119. package/lib/Cloudflare/Tunnel/Tunnel.js.map +1 -1
  120. package/lib/Cloudflare/Tunnel/TunnelBinding.d.ts +48 -0
  121. package/lib/Cloudflare/Tunnel/TunnelBinding.d.ts.map +1 -0
  122. package/lib/Cloudflare/Tunnel/TunnelBinding.js +56 -0
  123. package/lib/Cloudflare/Tunnel/TunnelBinding.js.map +1 -0
  124. package/lib/Cloudflare/Tunnel/TunnelRead.d.ts +83 -0
  125. package/lib/Cloudflare/Tunnel/TunnelRead.d.ts.map +1 -0
  126. package/lib/Cloudflare/Tunnel/TunnelRead.js +79 -0
  127. package/lib/Cloudflare/Tunnel/TunnelRead.js.map +1 -0
  128. package/lib/Cloudflare/Tunnel/TunnelReadWrite.d.ts +70 -0
  129. package/lib/Cloudflare/Tunnel/TunnelReadWrite.d.ts.map +1 -0
  130. package/lib/Cloudflare/Tunnel/TunnelReadWrite.js +63 -0
  131. package/lib/Cloudflare/Tunnel/TunnelReadWrite.js.map +1 -0
  132. package/lib/Cloudflare/Tunnel/TunnelWrite.d.ts +92 -0
  133. package/lib/Cloudflare/Tunnel/TunnelWrite.d.ts.map +1 -0
  134. package/lib/Cloudflare/Tunnel/TunnelWrite.js +88 -0
  135. package/lib/Cloudflare/Tunnel/TunnelWrite.js.map +1 -0
  136. package/lib/Cloudflare/Tunnel/index.d.ts +4 -0
  137. package/lib/Cloudflare/Tunnel/index.d.ts.map +1 -1
  138. package/lib/Cloudflare/Tunnel/index.js +4 -0
  139. package/lib/Cloudflare/Tunnel/index.js.map +1 -1
  140. package/lib/Cloudflare/Vectorize/VectorizeIndex.d.ts +1 -1
  141. package/lib/Cloudflare/Vectorize/VectorizeIndex.js +1 -0
  142. package/lib/Cloudflare/Vectorize/VectorizeIndex.js.map +1 -1
  143. package/lib/Cloudflare/VpcService/VpcService.d.ts +1 -1
  144. package/lib/Cloudflare/VpcService/VpcService.d.ts.map +1 -1
  145. package/lib/Cloudflare/VpcService/VpcService.js.map +1 -1
  146. package/lib/Cloudflare/Workers/DynamicWorkerLoader.d.ts +119 -11
  147. package/lib/Cloudflare/Workers/DynamicWorkerLoader.d.ts.map +1 -1
  148. package/lib/Cloudflare/Workers/DynamicWorkerLoader.js +88 -9
  149. package/lib/Cloudflare/Workers/DynamicWorkerLoader.js.map +1 -1
  150. package/lib/Cloudflare/Workers/InferEnv.d.ts +1 -1
  151. package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
  152. package/lib/Cloudflare/Workers/LocalWorkerProvider.js +2 -0
  153. package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
  154. package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
  155. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +18 -2
  156. package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
  157. package/lib/Cloudflare/Workers/WorkerBinding.d.ts +7 -5
  158. package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
  159. package/lib/Cloudflare/Workers/WorkerBinding.js +1 -1
  160. package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
  161. package/lib/Cloudflare/Zaraz/ZarazConfig.d.ts +1 -1
  162. package/lib/Cloudflare/Zaraz/ZarazConfig.d.ts.map +1 -1
  163. package/lib/Cloudflare/Zaraz/ZarazConfig.js +1 -1
  164. package/lib/Cloudflare/Zaraz/ZarazConfig.js.map +1 -1
  165. package/lib/Cloudflare/Zone/Zone.d.ts +170 -0
  166. package/lib/Cloudflare/Zone/Zone.d.ts.map +1 -0
  167. package/lib/Cloudflare/Zone/Zone.js +180 -0
  168. package/lib/Cloudflare/Zone/Zone.js.map +1 -0
  169. package/lib/Cloudflare/Zone/index.d.ts +3 -0
  170. package/lib/Cloudflare/Zone/index.d.ts.map +1 -0
  171. package/lib/Cloudflare/Zone/index.js +3 -0
  172. package/lib/Cloudflare/Zone/index.js.map +1 -0
  173. package/lib/Cloudflare/Zone/lookup.d.ts +33 -0
  174. package/lib/Cloudflare/Zone/lookup.d.ts.map +1 -0
  175. package/lib/Cloudflare/{Zone.js → Zone/lookup.js} +2 -2
  176. package/lib/Cloudflare/Zone/lookup.js.map +1 -0
  177. package/lib/Cloudflare/index.d.ts +4 -1
  178. package/lib/Cloudflare/index.d.ts.map +1 -1
  179. package/lib/Cloudflare/index.js +4 -1
  180. package/lib/Cloudflare/index.js.map +1 -1
  181. package/lib/Output.d.ts +13 -1
  182. package/lib/Output.d.ts.map +1 -1
  183. package/lib/Output.js +43 -11
  184. package/lib/Output.js.map +1 -1
  185. package/lib/Plan.d.ts.map +1 -1
  186. package/lib/Plan.js +8 -0
  187. package/lib/Plan.js.map +1 -1
  188. package/lib/Platform.d.ts +5 -5
  189. package/lib/Platform.d.ts.map +1 -1
  190. package/lib/Platform.js +5 -2
  191. package/lib/Platform.js.map +1 -1
  192. package/lib/RemovalPolicy.js +2 -2
  193. package/lib/RemovalPolicy.js.map +1 -1
  194. package/lib/Resource.d.ts +15 -2
  195. package/lib/Resource.d.ts.map +1 -1
  196. package/lib/Resource.js +3 -2
  197. package/lib/Resource.js.map +1 -1
  198. package/lib/tsconfig.test.tsbuildinfo +1 -1
  199. package/package.json +7 -7
  200. package/src/AdoptPolicy.ts +1 -1
  201. package/src/Binding.ts +5 -1
  202. package/src/Cli/commands/cloudflare.ts +394 -1
  203. package/src/Cloudflare/AiGateway/AiGateway.ts +2 -1
  204. package/src/Cloudflare/ApiToken/AccountApiToken.ts +60 -7
  205. package/src/Cloudflare/ApiToken/Common.ts +45 -6
  206. package/src/Cloudflare/ApiToken/UserApiToken.ts +58 -7
  207. package/src/Cloudflare/Browser/Browser.ts +140 -0
  208. package/src/Cloudflare/Browser/BrowserBinding.ts +128 -0
  209. package/src/Cloudflare/Browser/index.ts +11 -0
  210. package/src/Cloudflare/D1/D1Database.ts +6 -2
  211. package/src/Cloudflare/Dns/DnsBinding.ts +123 -0
  212. package/src/Cloudflare/Dns/DnsRead.ts +129 -0
  213. package/src/Cloudflare/Dns/DnsReadWrite.ts +99 -0
  214. package/src/Cloudflare/Dns/DnsWrite.ts +209 -0
  215. package/src/Cloudflare/Dns/index.ts +4 -0
  216. package/src/Cloudflare/Email/EmailRouting.ts +1 -1
  217. package/src/Cloudflare/Email/EmailRule.ts +6 -6
  218. package/src/Cloudflare/Images/Images.ts +40 -27
  219. package/src/Cloudflare/Providers.ts +22 -3
  220. package/src/Cloudflare/R2/R2Bucket.ts +17 -9
  221. package/src/Cloudflare/RateLimit/RateLimit.ts +160 -0
  222. package/src/Cloudflare/RateLimit/RateLimitBinding.ts +90 -0
  223. package/src/Cloudflare/RateLimit/index.ts +2 -0
  224. package/src/Cloudflare/SecretsStore/Secret.ts +12 -6
  225. package/src/Cloudflare/Tunnel/Tunnel.ts +27 -0
  226. package/src/Cloudflare/Tunnel/TunnelBinding.ts +114 -0
  227. package/src/Cloudflare/Tunnel/TunnelRead.ts +168 -0
  228. package/src/Cloudflare/Tunnel/TunnelReadWrite.ts +88 -0
  229. package/src/Cloudflare/Tunnel/TunnelWrite.ts +194 -0
  230. package/src/Cloudflare/Tunnel/index.ts +4 -0
  231. package/src/Cloudflare/Vectorize/VectorizeIndex.ts +2 -1
  232. package/src/Cloudflare/VpcService/VpcService.ts +4 -2
  233. package/src/Cloudflare/Workers/DynamicWorkerLoader.ts +139 -13
  234. package/src/Cloudflare/Workers/InferEnv.ts +19 -15
  235. package/src/Cloudflare/Workers/LocalWorkerProvider.ts +13 -2
  236. package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +16 -2
  237. package/src/Cloudflare/Workers/WorkerBinding.ts +6 -2
  238. package/src/Cloudflare/Zaraz/ZarazConfig.ts +1 -1
  239. package/src/Cloudflare/Zone/Zone.ts +349 -0
  240. package/src/Cloudflare/Zone/index.ts +2 -0
  241. package/src/Cloudflare/{Zone.ts → Zone/lookup.ts} +16 -3
  242. package/src/Cloudflare/index.ts +4 -1
  243. package/src/Output.ts +67 -11
  244. package/src/Plan.ts +9 -0
  245. package/src/Platform.ts +19 -15
  246. package/src/RemovalPolicy.ts +2 -2
  247. package/src/Resource.ts +19 -2
  248. package/lib/Cloudflare/BrowserRendering/BrowserRendering.d.ts +0 -116
  249. package/lib/Cloudflare/BrowserRendering/BrowserRendering.d.ts.map +0 -1
  250. package/lib/Cloudflare/BrowserRendering/BrowserRendering.js.map +0 -1
  251. package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.d.ts +0 -55
  252. package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.d.ts.map +0 -1
  253. package/lib/Cloudflare/BrowserRendering/BrowserRenderingBinding.js.map +0 -1
  254. package/lib/Cloudflare/BrowserRendering/index.d.ts +0 -3
  255. package/lib/Cloudflare/BrowserRendering/index.d.ts.map +0 -1
  256. package/lib/Cloudflare/BrowserRendering/index.js +0 -3
  257. package/lib/Cloudflare/BrowserRendering/index.js.map +0 -1
  258. package/lib/Cloudflare/Zone.d.ts +0 -14
  259. package/lib/Cloudflare/Zone.d.ts.map +0 -1
  260. package/lib/Cloudflare/Zone.js.map +0 -1
  261. package/src/Cloudflare/BrowserRendering/BrowserRendering.ts +0 -132
  262. package/src/Cloudflare/BrowserRendering/BrowserRenderingBinding.ts +0 -137
  263. package/src/Cloudflare/BrowserRendering/index.ts +0 -11
@@ -0,0 +1,56 @@
1
+ import { Credentials, fromApiToken, } from "@distilled.cloud/cloudflare/Credentials";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import * as Redacted from "effect/Redacted";
5
+ import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
6
+ import { RuntimeContext } from "../../RuntimeContext.js";
7
+ import { AccountApiToken } from "../ApiToken/AccountApiToken.js";
8
+ import { CloudflareEnvironment } from "../CloudflareEnvironment.js";
9
+ import { Worker } from "../Workers/Worker.js";
10
+ /**
11
+ * Bind an {@link AccountApiToken}'s outputs into the Worker so they can be read
12
+ * at runtime: `token.value` is injected as a `secret_text` binding and
13
+ * `token.accountId` as `plain_text`. Returns the {@link TunnelToken} accessors.
14
+ */
15
+ export const bindTunnelToken = (token) => Effect.gen(function* () {
16
+ const value = yield* token.value;
17
+ const accountId = yield* token.accountId;
18
+ return { value, accountId };
19
+ });
20
+ /**
21
+ * Resolve credentials from a bound token and provide them (plus the
22
+ * fetch-based HTTP client) to a raw SDK operation.
23
+ */
24
+ export const authorizeWith = (token) => (eff) => token.value.pipe(Effect.flatMap((value) => eff.pipe(Effect.provide(fromApiToken({ apiToken: Redacted.value(value) }).pipe(Layer.provideMerge(FetchHttpClient.layer))))));
25
+ /**
26
+ * Shared runtime body for a tunnel binding: create a scoped token, attach the
27
+ * (narrow) policy, bind the token's outputs into the Worker, then build the
28
+ * client. Pass the result to `Layer.effect(<Binding>, ...)`.
29
+ */
30
+ export const makeTunnelClient = (Policy, makeClient) => Effect.gen(function* () {
31
+ const Token = yield* AccountApiToken;
32
+ const attach = yield* Policy;
33
+ return Effect.fn(function* () {
34
+ const ctx = yield* Worker;
35
+ const token = yield* Token(`${ctx.LogicalId}Token`);
36
+ yield* attach(token);
37
+ return makeClient(yield* bindTunnelToken(token));
38
+ });
39
+ });
40
+ /**
41
+ * Build the deploy-time policy layer for a tunnel binding: attach an allow
42
+ * policy with the given permission groups to the binding's token.
43
+ */
44
+ export const makeTunnelPolicyLive = (Policy, sid, permissionGroups) => Policy.layer.effect(Effect.gen(function* () {
45
+ const { accountId } = yield* CloudflareEnvironment;
46
+ return (_host, token) => token.bind(sid, {
47
+ policies: [
48
+ {
49
+ effect: "allow",
50
+ permissionGroups,
51
+ resources: { [`com.cloudflare.api.account.${accountId}`]: "*" },
52
+ },
53
+ ],
54
+ });
55
+ }));
56
+ //# sourceMappingURL=TunnelBinding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelBinding.js","sourceRoot":"","sources":["../../../src/Cloudflare/Tunnel/TunnelBinding.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,YAAY,GACb,MAAM,yCAAyC,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,eAAe,MAAM,sCAAsC,CAAC;AAGxE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAc9C;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAsB,EAAE,EAAE,CACxD,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACjC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;IACzC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAwB,CAAC;AACpD,CAAC,CAAC,CAAC;AAEL;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GACxB,CAAC,KAAkB,EAAE,EAAE,CACvB,CACE,GAAkD,EACb,EAAE,CACvC,KAAK,CAAC,KAAK,CAAC,IAAI,CACd,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACvB,GAAG,CAAC,IAAI,CACN,MAAM,CAAC,OAAO,CACZ,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CACpD,KAAK,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,CAC1C,CACF,CACF,CACF,CACF,CAAC;AAEN;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,MAIC,EACD,UAAqC,EACrC,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC;IACrC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC;IAE7B,OAAO,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC;QAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,SAAS,OAAO,CAAC,CAAC;QACpD,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAIC,EACD,GAAW,EACX,gBAA8C,EAC9C,EAAE,CACF,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC,qBAAqB,CAAC;IACnD,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACtB,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;QACd,QAAQ,EAAE;YACR;gBACE,MAAM,EAAE,OAAO;gBACf,gBAAgB;gBAChB,SAAS,EAAE,EAAE,CAAC,8BAA8B,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE;aAChE;SACF;KACF,CAAC,CAAC;AACP,CAAC,CAAC,CACH,CAAC"}
@@ -0,0 +1,83 @@
1
+ import type { GetTunnelCloudflaredConfigurationError, GetTunnelCloudflaredConfigurationResponse, GetTunnelCloudflaredError, GetTunnelCloudflaredResponse, GetTunnelCloudflaredTokenError, GetTunnelCloudflaredTokenResponse, ListTunnelCloudflaredsError, ListTunnelCloudflaredsRequest, ListTunnelCloudflaredsResponse } from "@distilled.cloud/cloudflare/zero-trust";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import * as Binding from "../../Binding.ts";
5
+ import type { RuntimeContext } from "../../RuntimeContext.ts";
6
+ import type { AccountApiToken } from "../ApiToken/AccountApiToken.ts";
7
+ import type { Worker } from "../Workers/Worker.ts";
8
+ import { type TunnelToken } from "./TunnelBinding.ts";
9
+ /** List-tunnels request, minus the account id (supplied by the binding). */
10
+ export type ListTunnelsRequest = Omit<ListTunnelCloudflaredsRequest, "accountId">;
11
+ /**
12
+ * Read-only tunnel operations. Backed by the `Cloudflare Tunnel Read`
13
+ * permission group.
14
+ */
15
+ export interface TunnelReadClient {
16
+ /** Fetch a single tunnel by id. */
17
+ get(tunnelId: string): Effect.Effect<GetTunnelCloudflaredResponse, GetTunnelCloudflaredError, RuntimeContext>;
18
+ /** List tunnels in the account. */
19
+ list(request?: ListTunnelsRequest): Effect.Effect<ListTunnelCloudflaredsResponse, ListTunnelCloudflaredsError, RuntimeContext>;
20
+ /** Fetch the connector token used to run the tunnel. */
21
+ getToken(tunnelId: string): Effect.Effect<GetTunnelCloudflaredTokenResponse, GetTunnelCloudflaredTokenError, RuntimeContext>;
22
+ /** Read the remotely-managed configuration (ingress rules) for a tunnel. */
23
+ getConfiguration(tunnelId: string): Effect.Effect<GetTunnelCloudflaredConfigurationResponse, GetTunnelCloudflaredConfigurationError, RuntimeContext>;
24
+ }
25
+ /** Build the read-only client over a bound token. */
26
+ export declare const readClient: (token: TunnelToken) => TunnelReadClient;
27
+ declare const TunnelRead_base: Binding.Service<TunnelRead, "Cloudflare.TunnelRead", () => Effect.Effect<TunnelReadClient, never, Worker>> & {
28
+ bind: () => Effect.Effect<any, any, any>;
29
+ };
30
+ /**
31
+ * Binding that lets a Worker read Cloudflare Tunnels at runtime.
32
+ *
33
+ * Creates a scoped {@link AccountApiToken} with only the `Cloudflare Tunnel
34
+ * Read` permission and binds its outputs into the Worker (the token value as a
35
+ * `secret_text` binding) so runtime code can authenticate.
36
+ *
37
+ * @binding
38
+ *
39
+ * @section Reading tunnels at runtime
40
+ * @example Bind the read client
41
+ * Bind once in the Init phase; every method is available on the returned client.
42
+ * ```typescript
43
+ * const tunnels = yield* Cloudflare.TunnelRead.bind();
44
+ * ```
45
+ *
46
+ * @example List tunnels
47
+ * ```typescript
48
+ * const { result } = yield* tunnels.list({ isDeleted: false });
49
+ * ```
50
+ *
51
+ * @example Fetch a tunnel and its connector token
52
+ * `getToken` returns the plaintext token used to run `cloudflared`.
53
+ * ```typescript
54
+ * const tunnel = yield* tunnels.get(tunnelId);
55
+ * const token = yield* tunnels.getToken(tunnelId);
56
+ * ```
57
+ *
58
+ * @example Read the ingress configuration
59
+ * ```typescript
60
+ * const { config } = yield* tunnels.getConfiguration(tunnelId);
61
+ * ```
62
+ *
63
+ * @section Runtime Layer
64
+ * Provide {@link TunnelReadLive} in the Worker's runtime layer.
65
+ * ```typescript
66
+ * Effect.provide(Cloudflare.TunnelReadLive)
67
+ * ```
68
+ */
69
+ export declare class TunnelRead extends TunnelRead_base {
70
+ }
71
+ declare const TunnelReadPolicy_base: Binding.Policy<TunnelReadPolicy, "Policy<Cloudflare.TunnelRead>", (token: AccountApiToken) => Effect.Effect<void>>;
72
+ /**
73
+ * Deploy-time policy for {@link TunnelRead}. Attaches the `Cloudflare Tunnel
74
+ * Read` permission to the token via its binding contract.
75
+ */
76
+ export declare class TunnelReadPolicy extends TunnelReadPolicy_base {
77
+ }
78
+ /** Runtime layer for {@link TunnelRead}. */
79
+ export declare const TunnelReadLive: Layer.Layer<TunnelRead, never, any>;
80
+ /** Live deploy-time policy layer for {@link TunnelReadPolicy}. */
81
+ export declare const TunnelReadPolicyLive: Layer.Layer<TunnelReadPolicy, never, import("../CloudflareEnvironment.ts").CloudflareEnvironment>;
82
+ export {};
83
+ //# sourceMappingURL=TunnelRead.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelRead.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Tunnel/TunnelRead.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sCAAsC,EACtC,yCAAyC,EACzC,yBAAyB,EACzB,4BAA4B,EAC5B,8BAA8B,EAC9B,iCAAiC,EACjC,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,EAC/B,MAAM,wCAAwC,CAAC;AAEhD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAE5B,4EAA4E;AAC5E,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,6BAA6B,EAC7B,WAAW,CACZ,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,GAAG,CACD,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,CACd,4BAA4B,EAC5B,yBAAyB,EACzB,cAAc,CACf,CAAC;IACF,mCAAmC;IACnC,IAAI,CACF,OAAO,CAAC,EAAE,kBAAkB,GAC3B,MAAM,CAAC,MAAM,CACd,8BAA8B,EAC9B,2BAA2B,EAC3B,cAAc,CACf,CAAC;IACF,wDAAwD;IACxD,QAAQ,CACN,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,CACd,iCAAiC,EACjC,8BAA8B,EAC9B,cAAc,CACf,CAAC;IACF,4EAA4E;IAC5E,gBAAgB,CACd,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,CACd,yCAAyC,EACzC,sCAAsC,EACtC,cAAc,CACf,CAAC;CACH;AAED,qDAAqD;AACrD,eAAO,MAAM,UAAU,GAAI,OAAO,WAAW,KAAG,gBA8B/C,CAAC;0FA2CM,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,KAAK,EAAE,MAAM,CAAC;;;AAzCtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBAAa,UAAW,SAAQ,eAGJ;CAAG;+GAQrB,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AANjD;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,qBAGV;CAAG;AAE/B,4CAA4C;AAC5C,eAAO,MAAM,cAAc,qCAG1B,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,oBAAoB,mGAIhC,CAAC"}
@@ -0,0 +1,79 @@
1
+ import * as zeroTrust from "@distilled.cloud/cloudflare/zero-trust";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import * as Binding from "../../Binding.js";
5
+ import { authorizeWith, makeTunnelClient, makeTunnelPolicyLive, } from "./TunnelBinding.js";
6
+ /** Build the read-only client over a bound token. */
7
+ export const readClient = (token) => {
8
+ const authorize = authorizeWith(token);
9
+ return {
10
+ get: Effect.fn("Cloudflare.Tunnel.get")(function* (tunnelId) {
11
+ const accountId = yield* token.accountId;
12
+ return yield* authorize(zeroTrust.getTunnelCloudflared({ accountId, tunnelId }));
13
+ }),
14
+ list: Effect.fn("Cloudflare.Tunnel.list")(function* (request) {
15
+ const accountId = yield* token.accountId;
16
+ return yield* authorize(zeroTrust.listTunnelCloudflareds({ accountId, ...request }));
17
+ }),
18
+ getToken: Effect.fn("Cloudflare.Tunnel.getToken")(function* (tunnelId) {
19
+ const accountId = yield* token.accountId;
20
+ return yield* authorize(zeroTrust.getTunnelCloudflaredToken({ accountId, tunnelId }));
21
+ }),
22
+ getConfiguration: Effect.fn("Cloudflare.Tunnel.getConfiguration")(function* (tunnelId) {
23
+ const accountId = yield* token.accountId;
24
+ return yield* authorize(zeroTrust.getTunnelCloudflaredConfiguration({ accountId, tunnelId }));
25
+ }),
26
+ };
27
+ };
28
+ /**
29
+ * Binding that lets a Worker read Cloudflare Tunnels at runtime.
30
+ *
31
+ * Creates a scoped {@link AccountApiToken} with only the `Cloudflare Tunnel
32
+ * Read` permission and binds its outputs into the Worker (the token value as a
33
+ * `secret_text` binding) so runtime code can authenticate.
34
+ *
35
+ * @binding
36
+ *
37
+ * @section Reading tunnels at runtime
38
+ * @example Bind the read client
39
+ * Bind once in the Init phase; every method is available on the returned client.
40
+ * ```typescript
41
+ * const tunnels = yield* Cloudflare.TunnelRead.bind();
42
+ * ```
43
+ *
44
+ * @example List tunnels
45
+ * ```typescript
46
+ * const { result } = yield* tunnels.list({ isDeleted: false });
47
+ * ```
48
+ *
49
+ * @example Fetch a tunnel and its connector token
50
+ * `getToken` returns the plaintext token used to run `cloudflared`.
51
+ * ```typescript
52
+ * const tunnel = yield* tunnels.get(tunnelId);
53
+ * const token = yield* tunnels.getToken(tunnelId);
54
+ * ```
55
+ *
56
+ * @example Read the ingress configuration
57
+ * ```typescript
58
+ * const { config } = yield* tunnels.getConfiguration(tunnelId);
59
+ * ```
60
+ *
61
+ * @section Runtime Layer
62
+ * Provide {@link TunnelReadLive} in the Worker's runtime layer.
63
+ * ```typescript
64
+ * Effect.provide(Cloudflare.TunnelReadLive)
65
+ * ```
66
+ */
67
+ export class TunnelRead extends Binding.Service()("Cloudflare.TunnelRead") {
68
+ }
69
+ /**
70
+ * Deploy-time policy for {@link TunnelRead}. Attaches the `Cloudflare Tunnel
71
+ * Read` permission to the token via its binding contract.
72
+ */
73
+ export class TunnelReadPolicy extends Binding.Policy()("Cloudflare.TunnelRead") {
74
+ }
75
+ /** Runtime layer for {@link TunnelRead}. */
76
+ export const TunnelReadLive = Layer.effect(TunnelRead, makeTunnelClient(TunnelReadPolicy, readClient));
77
+ /** Live deploy-time policy layer for {@link TunnelReadPolicy}. */
78
+ export const TunnelReadPolicyLive = makeTunnelPolicyLive(TunnelReadPolicy, "Cloudflare.TunnelRead", ["Cloudflare Tunnel Read"]);
79
+ //# sourceMappingURL=TunnelRead.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelRead.js","sourceRoot":"","sources":["../../../src/Cloudflare/Tunnel/TunnelRead.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,SAAS,MAAM,wCAAwC,CAAC;AACpE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAI5C,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,oBAAoB,CAAC;AA+C5B,qDAAqD;AACrD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAkB,EAAoB,EAAE;IACjE,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ;YACzD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YACzC,OAAO,KAAK,CAAC,CAAC,SAAS,CACrB,SAAS,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CACxD,CAAC;QACJ,CAAC,CAAC;QACF,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO;YAC1D,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YACzC,OAAO,KAAK,CAAC,CAAC,SAAS,CACrB,SAAS,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC,CAC5D,CAAC;QACJ,CAAC,CAAC;QACF,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,4BAA4B,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ;YACnE,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YACzC,OAAO,KAAK,CAAC,CAAC,SAAS,CACrB,SAAS,CAAC,yBAAyB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAC7D,CAAC;QACJ,CAAC,CAAC;QACF,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC,oCAAoC,CAAC,CAC/D,QAAQ,CAAC,EAAE,QAAQ;YACjB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YACzC,OAAO,KAAK,CAAC,CAAC,SAAS,CACrB,SAAS,CAAC,iCAAiC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CACrE,CAAC;QACJ,CAAC,CACF;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,OAAO,UAAW,SAAQ,OAAO,CAAC,OAAO,EAG5C,CAAC,uBAAuB,CAAC;CAAG;AAE/B;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,OAAO,CAAC,MAAM,EAGjD,CAAC,uBAAuB,CAAC;CAAG;AAE/B,4CAA4C;AAC5C,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CACxC,UAAU,EACV,gBAAgB,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAC/C,CAAC;AAEF,kEAAkE;AAClE,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CACtD,gBAAgB,EAChB,uBAAuB,EACvB,CAAC,wBAAwB,CAAC,CAC3B,CAAC"}
@@ -0,0 +1,70 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Layer from "effect/Layer";
3
+ import * as Binding from "../../Binding.ts";
4
+ import type { AccountApiToken } from "../ApiToken/AccountApiToken.ts";
5
+ import type { Worker } from "../Workers/Worker.ts";
6
+ import { type TunnelToken } from "./TunnelBinding.ts";
7
+ import { type TunnelReadClient } from "./TunnelRead.ts";
8
+ import { type TunnelWriteClient } from "./TunnelWrite.ts";
9
+ /** Combined read + write tunnel operations. */
10
+ export interface TunnelReadWriteClient extends TunnelReadClient, TunnelWriteClient {
11
+ }
12
+ /** Build the combined read + write client over a bound token. */
13
+ export declare const readWriteClient: (token: TunnelToken) => TunnelReadWriteClient;
14
+ declare const TunnelReadWrite_base: Binding.Service<TunnelReadWrite, "Cloudflare.TunnelReadWrite", () => Effect.Effect<TunnelReadWriteClient, never, Worker>> & {
15
+ bind: () => Effect.Effect<any, any, any>;
16
+ };
17
+ /**
18
+ * Binding that lets a Worker perform the full Cloudflare Tunnel CRUD surface at
19
+ * runtime.
20
+ *
21
+ * Creates a scoped {@link AccountApiToken} with both the `Cloudflare Tunnel
22
+ * Read` and `Cloudflare Tunnel Write` permissions and binds its outputs into
23
+ * the Worker (the token value as a `secret_text` binding) so runtime code can
24
+ * authenticate.
25
+ *
26
+ * @binding
27
+ *
28
+ * @section Managing tunnels at runtime
29
+ * @example Create, configure, and delete a tunnel from a request handler
30
+ * ```typescript
31
+ * // init
32
+ * const tunnels = yield* Cloudflare.TunnelReadWrite.bind();
33
+ *
34
+ * return {
35
+ * fetch: Effect.gen(function* () {
36
+ * const tunnel = yield* tunnels.create({ name: "on-demand-tunnel" });
37
+ * yield* tunnels.putConfiguration(tunnel.id!, {
38
+ * ingress: [
39
+ * { hostname: "app.example.com", service: "http://localhost:3000" },
40
+ * { service: "http_status:404" },
41
+ * ],
42
+ * });
43
+ * const token = yield* tunnels.getToken(tunnel.id!);
44
+ * return HttpServerResponse.json({ id: tunnel.id, token });
45
+ * }),
46
+ * };
47
+ * ```
48
+ *
49
+ * @section Runtime Layer
50
+ * Provide {@link TunnelReadWriteLive} in the Worker's runtime layer.
51
+ * ```typescript
52
+ * Effect.provide(Cloudflare.TunnelReadWriteLive)
53
+ * ```
54
+ */
55
+ export declare class TunnelReadWrite extends TunnelReadWrite_base {
56
+ }
57
+ declare const TunnelReadWritePolicy_base: Binding.Policy<TunnelReadWritePolicy, "Policy<Cloudflare.TunnelReadWrite>", (token: AccountApiToken) => Effect.Effect<void>>;
58
+ /**
59
+ * Deploy-time policy for {@link TunnelReadWrite}. Attaches both the `Cloudflare
60
+ * Tunnel Read` and `Cloudflare Tunnel Write` permissions to the token via its
61
+ * binding contract.
62
+ */
63
+ export declare class TunnelReadWritePolicy extends TunnelReadWritePolicy_base {
64
+ }
65
+ /** Runtime layer for {@link TunnelReadWrite}. */
66
+ export declare const TunnelReadWriteLive: Layer.Layer<TunnelReadWrite, never, any>;
67
+ /** Live deploy-time policy layer for {@link TunnelReadWritePolicy}. */
68
+ export declare const TunnelReadWritePolicyLive: Layer.Layer<TunnelReadWritePolicy, never, import("../CloudflareEnvironment.ts").CloudflareEnvironment>;
69
+ export {};
70
+ //# sourceMappingURL=TunnelReadWrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelReadWrite.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Tunnel/TunnelReadWrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAGL,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEvE,+CAA+C;AAC/C,MAAM,WAAW,qBACf,SAAQ,gBAAgB,EAAE,iBAAiB;CAAG;AAEhD,iEAAiE;AACjE,eAAO,MAAM,eAAe,GAAI,OAAO,WAAW,KAAG,qBAGnD,CAAC;yGA0CK,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,KAAK,EAAE,MAAM,CAAC;;;AAxC3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,qBAAa,eAAgB,SAAQ,oBAGJ;CAAG;8HAS1B,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AAPjD;;;;GAIG;AACH,qBAAa,qBAAsB,SAAQ,0BAGV;CAAG;AAEpC,iDAAiD;AACjD,eAAO,MAAM,mBAAmB,0CAG/B,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,yBAAyB,wGAIrC,CAAC"}
@@ -0,0 +1,63 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Layer from "effect/Layer";
3
+ import * as Binding from "../../Binding.js";
4
+ import { makeTunnelClient, makeTunnelPolicyLive, } from "./TunnelBinding.js";
5
+ import { readClient } from "./TunnelRead.js";
6
+ import { writeClient } from "./TunnelWrite.js";
7
+ /** Build the combined read + write client over a bound token. */
8
+ export const readWriteClient = (token) => ({
9
+ ...readClient(token),
10
+ ...writeClient(token),
11
+ });
12
+ /**
13
+ * Binding that lets a Worker perform the full Cloudflare Tunnel CRUD surface at
14
+ * runtime.
15
+ *
16
+ * Creates a scoped {@link AccountApiToken} with both the `Cloudflare Tunnel
17
+ * Read` and `Cloudflare Tunnel Write` permissions and binds its outputs into
18
+ * the Worker (the token value as a `secret_text` binding) so runtime code can
19
+ * authenticate.
20
+ *
21
+ * @binding
22
+ *
23
+ * @section Managing tunnels at runtime
24
+ * @example Create, configure, and delete a tunnel from a request handler
25
+ * ```typescript
26
+ * // init
27
+ * const tunnels = yield* Cloudflare.TunnelReadWrite.bind();
28
+ *
29
+ * return {
30
+ * fetch: Effect.gen(function* () {
31
+ * const tunnel = yield* tunnels.create({ name: "on-demand-tunnel" });
32
+ * yield* tunnels.putConfiguration(tunnel.id!, {
33
+ * ingress: [
34
+ * { hostname: "app.example.com", service: "http://localhost:3000" },
35
+ * { service: "http_status:404" },
36
+ * ],
37
+ * });
38
+ * const token = yield* tunnels.getToken(tunnel.id!);
39
+ * return HttpServerResponse.json({ id: tunnel.id, token });
40
+ * }),
41
+ * };
42
+ * ```
43
+ *
44
+ * @section Runtime Layer
45
+ * Provide {@link TunnelReadWriteLive} in the Worker's runtime layer.
46
+ * ```typescript
47
+ * Effect.provide(Cloudflare.TunnelReadWriteLive)
48
+ * ```
49
+ */
50
+ export class TunnelReadWrite extends Binding.Service()("Cloudflare.TunnelReadWrite") {
51
+ }
52
+ /**
53
+ * Deploy-time policy for {@link TunnelReadWrite}. Attaches both the `Cloudflare
54
+ * Tunnel Read` and `Cloudflare Tunnel Write` permissions to the token via its
55
+ * binding contract.
56
+ */
57
+ export class TunnelReadWritePolicy extends Binding.Policy()("Cloudflare.TunnelReadWrite") {
58
+ }
59
+ /** Runtime layer for {@link TunnelReadWrite}. */
60
+ export const TunnelReadWriteLive = Layer.effect(TunnelReadWrite, makeTunnelClient(TunnelReadWritePolicy, readWriteClient));
61
+ /** Live deploy-time policy layer for {@link TunnelReadWritePolicy}. */
62
+ export const TunnelReadWritePolicyLive = makeTunnelPolicyLive(TunnelReadWritePolicy, "Cloudflare.TunnelReadWrite", ["Cloudflare Tunnel Read", "Cloudflare Tunnel Write"]);
63
+ //# sourceMappingURL=TunnelReadWrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelReadWrite.js","sourceRoot":"","sources":["../../../src/Cloudflare/Tunnel/TunnelReadWrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAyB,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,WAAW,EAA0B,MAAM,kBAAkB,CAAC;AAMvE,iEAAiE;AACjE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAkB,EAAyB,EAAE,CAAC,CAAC;IAC7E,GAAG,UAAU,CAAC,KAAK,CAAC;IACpB,GAAG,WAAW,CAAC,KAAK,CAAC;CACtB,CAAC,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,OAAO,eAAgB,SAAQ,OAAO,CAAC,OAAO,EAGjD,CAAC,4BAA4B,CAAC;CAAG;AAEpC;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,OAAO,CAAC,MAAM,EAGtD,CAAC,4BAA4B,CAAC;CAAG;AAEpC,iDAAiD;AACjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAC7C,eAAe,EACf,gBAAgB,CAAC,qBAAqB,EAAE,eAAe,CAAC,CACzD,CAAC;AAEF,uEAAuE;AACvE,MAAM,CAAC,MAAM,yBAAyB,GAAG,oBAAoB,CAC3D,qBAAqB,EACrB,4BAA4B,EAC5B,CAAC,wBAAwB,EAAE,yBAAyB,CAAC,CACtD,CAAC"}
@@ -0,0 +1,92 @@
1
+ import type { CreateTunnelCloudflaredError, CreateTunnelCloudflaredRequest, CreateTunnelCloudflaredResponse, DeleteTunnelCloudflaredError, DeleteTunnelCloudflaredResponse, PatchTunnelCloudflaredError, PatchTunnelCloudflaredRequest, PatchTunnelCloudflaredResponse, PutTunnelCloudflaredConfigurationError, PutTunnelCloudflaredConfigurationRequest, PutTunnelCloudflaredConfigurationResponse } from "@distilled.cloud/cloudflare/zero-trust";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import * as Binding from "../../Binding.ts";
5
+ import type { RuntimeContext } from "../../RuntimeContext.ts";
6
+ import type { AccountApiToken } from "../ApiToken/AccountApiToken.ts";
7
+ import type { Worker } from "../Workers/Worker.ts";
8
+ import { type TunnelToken } from "./TunnelBinding.ts";
9
+ /** Create-tunnel request, minus the account id (supplied by the binding). */
10
+ export type CreateTunnelRequest = Omit<CreateTunnelCloudflaredRequest, "accountId">;
11
+ /** Update-tunnel request, minus the account id and tunnel id (positional). */
12
+ export type UpdateTunnelRequest = Omit<PatchTunnelCloudflaredRequest, "accountId" | "tunnelId">;
13
+ /** Tunnel configuration body, minus the account id and tunnel id (positional). */
14
+ export type TunnelConfiguration = NonNullable<PutTunnelCloudflaredConfigurationRequest["config"]>;
15
+ /**
16
+ * Mutating tunnel operations. Backed by the `Cloudflare Tunnel Write`
17
+ * permission group.
18
+ */
19
+ export interface TunnelWriteClient {
20
+ /** Create a new tunnel. */
21
+ create(request: CreateTunnelRequest): Effect.Effect<CreateTunnelCloudflaredResponse, CreateTunnelCloudflaredError, RuntimeContext>;
22
+ /** Update a tunnel's mutable fields (name, secret). */
23
+ update(tunnelId: string, request: UpdateTunnelRequest): Effect.Effect<PatchTunnelCloudflaredResponse, PatchTunnelCloudflaredError, RuntimeContext>;
24
+ /** Delete a tunnel by id. */
25
+ delete(tunnelId: string): Effect.Effect<DeleteTunnelCloudflaredResponse, DeleteTunnelCloudflaredError, RuntimeContext>;
26
+ /** Replace the remotely-managed configuration (ingress rules) for a tunnel. */
27
+ putConfiguration(tunnelId: string, config: TunnelConfiguration): Effect.Effect<PutTunnelCloudflaredConfigurationResponse, PutTunnelCloudflaredConfigurationError, RuntimeContext>;
28
+ }
29
+ /** Build the write client over a bound token. */
30
+ export declare const writeClient: (token: TunnelToken) => TunnelWriteClient;
31
+ declare const TunnelWrite_base: Binding.Service<TunnelWrite, "Cloudflare.TunnelWrite", () => Effect.Effect<TunnelWriteClient, never, Worker>> & {
32
+ bind: () => Effect.Effect<any, any, any>;
33
+ };
34
+ /**
35
+ * Binding that lets a Worker create, update, and delete Cloudflare Tunnels at
36
+ * runtime.
37
+ *
38
+ * Creates a scoped {@link AccountApiToken} with only the `Cloudflare Tunnel
39
+ * Write` permission and binds its outputs into the Worker (the token value as a
40
+ * `secret_text` binding) so runtime code can authenticate.
41
+ *
42
+ * @binding
43
+ *
44
+ * @section Mutating tunnels at runtime
45
+ * @example Bind the write client
46
+ * Bind once in the Init phase; every method is available on the returned client.
47
+ * ```typescript
48
+ * const tunnels = yield* Cloudflare.TunnelWrite.bind();
49
+ * ```
50
+ *
51
+ * @example Create a tunnel
52
+ * ```typescript
53
+ * const tunnel = yield* tunnels.create({ name: "on-demand-tunnel" });
54
+ * ```
55
+ *
56
+ * @example Push ingress configuration
57
+ * ```typescript
58
+ * yield* tunnels.putConfiguration(tunnel.id!, {
59
+ * ingress: [
60
+ * { hostname: "app.example.com", service: "http://localhost:3000" },
61
+ * { service: "http_status:404" },
62
+ * ],
63
+ * });
64
+ * ```
65
+ *
66
+ * @example Rename and delete a tunnel
67
+ * ```typescript
68
+ * yield* tunnels.update(tunnel.id!, { name: "renamed-tunnel" });
69
+ * yield* tunnels.delete(tunnel.id!);
70
+ * ```
71
+ *
72
+ * @section Runtime Layer
73
+ * Provide {@link TunnelWriteLive} in the Worker's runtime layer.
74
+ * ```typescript
75
+ * Effect.provide(Cloudflare.TunnelWriteLive)
76
+ * ```
77
+ */
78
+ export declare class TunnelWrite extends TunnelWrite_base {
79
+ }
80
+ declare const TunnelWritePolicy_base: Binding.Policy<TunnelWritePolicy, "Policy<Cloudflare.TunnelWrite>", (token: AccountApiToken) => Effect.Effect<void>>;
81
+ /**
82
+ * Deploy-time policy for {@link TunnelWrite}. Attaches the `Cloudflare Tunnel
83
+ * Write` permission to the token via its binding contract.
84
+ */
85
+ export declare class TunnelWritePolicy extends TunnelWritePolicy_base {
86
+ }
87
+ /** Runtime layer for {@link TunnelWrite}. */
88
+ export declare const TunnelWriteLive: Layer.Layer<TunnelWrite, never, any>;
89
+ /** Live deploy-time policy layer for {@link TunnelWritePolicy}. */
90
+ export declare const TunnelWritePolicyLive: Layer.Layer<TunnelWritePolicy, never, import("../CloudflareEnvironment.ts").CloudflareEnvironment>;
91
+ export {};
92
+ //# sourceMappingURL=TunnelWrite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelWrite.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Tunnel/TunnelWrite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,8BAA8B,EAC9B,+BAA+B,EAC/B,4BAA4B,EAC5B,+BAA+B,EAC/B,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,EAC9B,sCAAsC,EACtC,wCAAwC,EACxC,yCAAyC,EAC1C,MAAM,wCAAwC,CAAC;AAEhD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAE5B,6EAA6E;AAC7E,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,8BAA8B,EAC9B,WAAW,CACZ,CAAC;AAEF,8EAA8E;AAC9E,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,6BAA6B,EAC7B,WAAW,GAAG,UAAU,CACzB,CAAC;AAEF,kFAAkF;AAClF,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAC3C,wCAAwC,CAAC,QAAQ,CAAC,CACnD,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,MAAM,CACJ,OAAO,EAAE,mBAAmB,GAC3B,MAAM,CAAC,MAAM,CACd,+BAA+B,EAC/B,4BAA4B,EAC5B,cAAc,CACf,CAAC;IACF,uDAAuD;IACvD,MAAM,CACJ,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB,GAC3B,MAAM,CAAC,MAAM,CACd,8BAA8B,EAC9B,2BAA2B,EAC3B,cAAc,CACf,CAAC;IACF,6BAA6B;IAC7B,MAAM,CACJ,QAAQ,EAAE,MAAM,GACf,MAAM,CAAC,MAAM,CACd,+BAA+B,EAC/B,4BAA4B,EAC5B,cAAc,CACf,CAAC;IACF,+EAA+E;IAC/E,gBAAgB,CACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,mBAAmB,GAC1B,MAAM,CAAC,MAAM,CACd,yCAAyC,EACzC,sCAAsC,EACtC,cAAc,CACf,CAAC;CACH;AAED,iDAAiD;AACjD,eAAO,MAAM,WAAW,GAAI,OAAO,WAAW,KAAG,iBAoChD,CAAC;6FAgDM,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,EAAE,MAAM,CAAC;;;AA9CvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,qBAAa,WAAY,SAAQ,gBAGJ;CAAG;kHAQtB,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AANjD;;;GAGG;AACH,qBAAa,iBAAkB,SAAQ,sBAGV;CAAG;AAEhC,6CAA6C;AAC7C,eAAO,MAAM,eAAe,sCAG3B,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,qBAAqB,oGAIjC,CAAC"}
@@ -0,0 +1,88 @@
1
+ import * as zeroTrust from "@distilled.cloud/cloudflare/zero-trust";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import * as Binding from "../../Binding.js";
5
+ import { authorizeWith, makeTunnelClient, makeTunnelPolicyLive, } from "./TunnelBinding.js";
6
+ /** Build the write client over a bound token. */
7
+ export const writeClient = (token) => {
8
+ const authorize = authorizeWith(token);
9
+ return {
10
+ create: Effect.fn("Cloudflare.Tunnel.create")(function* (request) {
11
+ const accountId = yield* token.accountId;
12
+ return yield* authorize(zeroTrust.createTunnelCloudflared({ accountId, ...request }));
13
+ }),
14
+ update: Effect.fn("Cloudflare.Tunnel.update")(function* (tunnelId, request) {
15
+ const accountId = yield* token.accountId;
16
+ return yield* authorize(zeroTrust.patchTunnelCloudflared({ accountId, tunnelId, ...request }));
17
+ }),
18
+ delete: Effect.fn("Cloudflare.Tunnel.delete")(function* (tunnelId) {
19
+ const accountId = yield* token.accountId;
20
+ return yield* authorize(zeroTrust.deleteTunnelCloudflared({ accountId, tunnelId }));
21
+ }),
22
+ putConfiguration: Effect.fn("Cloudflare.Tunnel.putConfiguration")(function* (tunnelId, config) {
23
+ const accountId = yield* token.accountId;
24
+ return yield* authorize(zeroTrust.putTunnelCloudflaredConfiguration({
25
+ accountId,
26
+ tunnelId,
27
+ config,
28
+ }));
29
+ }),
30
+ };
31
+ };
32
+ /**
33
+ * Binding that lets a Worker create, update, and delete Cloudflare Tunnels at
34
+ * runtime.
35
+ *
36
+ * Creates a scoped {@link AccountApiToken} with only the `Cloudflare Tunnel
37
+ * Write` permission and binds its outputs into the Worker (the token value as a
38
+ * `secret_text` binding) so runtime code can authenticate.
39
+ *
40
+ * @binding
41
+ *
42
+ * @section Mutating tunnels at runtime
43
+ * @example Bind the write client
44
+ * Bind once in the Init phase; every method is available on the returned client.
45
+ * ```typescript
46
+ * const tunnels = yield* Cloudflare.TunnelWrite.bind();
47
+ * ```
48
+ *
49
+ * @example Create a tunnel
50
+ * ```typescript
51
+ * const tunnel = yield* tunnels.create({ name: "on-demand-tunnel" });
52
+ * ```
53
+ *
54
+ * @example Push ingress configuration
55
+ * ```typescript
56
+ * yield* tunnels.putConfiguration(tunnel.id!, {
57
+ * ingress: [
58
+ * { hostname: "app.example.com", service: "http://localhost:3000" },
59
+ * { service: "http_status:404" },
60
+ * ],
61
+ * });
62
+ * ```
63
+ *
64
+ * @example Rename and delete a tunnel
65
+ * ```typescript
66
+ * yield* tunnels.update(tunnel.id!, { name: "renamed-tunnel" });
67
+ * yield* tunnels.delete(tunnel.id!);
68
+ * ```
69
+ *
70
+ * @section Runtime Layer
71
+ * Provide {@link TunnelWriteLive} in the Worker's runtime layer.
72
+ * ```typescript
73
+ * Effect.provide(Cloudflare.TunnelWriteLive)
74
+ * ```
75
+ */
76
+ export class TunnelWrite extends Binding.Service()("Cloudflare.TunnelWrite") {
77
+ }
78
+ /**
79
+ * Deploy-time policy for {@link TunnelWrite}. Attaches the `Cloudflare Tunnel
80
+ * Write` permission to the token via its binding contract.
81
+ */
82
+ export class TunnelWritePolicy extends Binding.Policy()("Cloudflare.TunnelWrite") {
83
+ }
84
+ /** Runtime layer for {@link TunnelWrite}. */
85
+ export const TunnelWriteLive = Layer.effect(TunnelWrite, makeTunnelClient(TunnelWritePolicy, writeClient));
86
+ /** Live deploy-time policy layer for {@link TunnelWritePolicy}. */
87
+ export const TunnelWritePolicyLive = makeTunnelPolicyLive(TunnelWritePolicy, "Cloudflare.TunnelWrite", ["Cloudflare Tunnel Write"]);
88
+ //# sourceMappingURL=TunnelWrite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TunnelWrite.js","sourceRoot":"","sources":["../../../src/Cloudflare/Tunnel/TunnelWrite.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,SAAS,MAAM,wCAAwC,CAAC;AACpE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,kBAAkB,CAAC;AAI5C,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,oBAAoB,GAErB,MAAM,oBAAoB,CAAC;AA4D5B,iDAAiD;AACjD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAkB,EAAqB,EAAE;IACnE,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO;YAC9D,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YACzC,OAAO,KAAK,CAAC,CAAC,SAAS,CACrB,SAAS,CAAC,uBAAuB,CAAC,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,CAAC,CAC7D,CAAC;QACJ,CAAC,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAC3C,QAAQ,CAAC,EAAE,QAAQ,EAAE,OAAO;YAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YACzC,OAAO,KAAK,CAAC,CAAC,SAAS,CACrB,SAAS,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,CACtE,CAAC;QACJ,CAAC,CACF;QACD,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,EAAE,QAAQ;YAC/D,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YACzC,OAAO,KAAK,CAAC,CAAC,SAAS,CACrB,SAAS,CAAC,uBAAuB,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAC3D,CAAC;QACJ,CAAC,CAAC;QACF,gBAAgB,EAAE,MAAM,CAAC,EAAE,CAAC,oCAAoC,CAAC,CAC/D,QAAQ,CAAC,EAAE,QAAQ,EAAE,MAAM;YACzB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;YACzC,OAAO,KAAK,CAAC,CAAC,SAAS,CACrB,SAAS,CAAC,iCAAiC,CAAC;gBAC1C,SAAS;gBACT,QAAQ;gBACR,MAAM;aACP,CAAC,CACH,CAAC;QACJ,CAAC,CACF;KACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,OAAO,WAAY,SAAQ,OAAO,CAAC,OAAO,EAG7C,CAAC,wBAAwB,CAAC;CAAG;AAEhC;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,OAAO,CAAC,MAAM,EAGlD,CAAC,wBAAwB,CAAC;CAAG;AAEhC,6CAA6C;AAC7C,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CACzC,WAAW,EACX,gBAAgB,CAAC,iBAAiB,EAAE,WAAW,CAAC,CACjD,CAAC;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,qBAAqB,GAAG,oBAAoB,CACvD,iBAAiB,EACjB,wBAAwB,EACxB,CAAC,yBAAyB,CAAC,CAC5B,CAAC"}
@@ -1,2 +1,6 @@
1
1
  export * from "./Tunnel.ts";
2
+ export * from "./TunnelBinding.ts";
3
+ export * from "./TunnelRead.ts";
4
+ export * from "./TunnelReadWrite.ts";
5
+ export * from "./TunnelWrite.ts";
2
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Tunnel/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/Tunnel/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
@@ -1,2 +1,6 @@
1
1
  export * from "./Tunnel.js";
2
+ export * from "./TunnelBinding.js";
3
+ export * from "./TunnelRead.js";
4
+ export * from "./TunnelReadWrite.js";
5
+ export * from "./TunnelWrite.js";
2
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Cloudflare/Tunnel/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Cloudflare/Tunnel/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
@@ -103,7 +103,7 @@ export type VectorizeIndex = Resource<VectorizeIndexTypeId, VectorizeIndexProps,
103
103
  * @see https://developers.cloudflare.com/vectorize/
104
104
  */
105
105
  export declare const VectorizeIndex: import("../../Resource.ts").ResourceClassWithMethods<VectorizeIndex, {
106
- readonly bind: (<Req = never>(args_0: VectorizeIndex | Effect.Effect<VectorizeIndex, never, Req>) => Effect.Effect<import("./VectorizeIndexBinding.ts").VectorizeIndexClient, never, VectorizeIndexBinding | Req>) & ((index: VectorizeIndex) => Effect.Effect<any, any, any>);
106
+ readonly bind: (<Req = never>(args_0: import("../../Input.ts").Input<VectorizeIndex> | Effect.Effect<VectorizeIndex, never, Req>) => Effect.Effect<import("./VectorizeIndexBinding.ts").VectorizeIndexClient, never, VectorizeIndexBinding | Req>) & ((index: VectorizeIndex) => Effect.Effect<any, any, any>);
107
107
  }>;
108
108
  /**
109
109
  * Returns true if the given value is a VectorizeIndex resource.
@@ -148,6 +148,7 @@ export const VectorizeIndexProvider = () => Provider.effect(VectorizeIndex, Effe
148
148
  const toAttributes = (index, name, accountId) => ({
149
149
  indexName: index.name ?? name,
150
150
  dimensions: index.config?.dimensions,
151
+ // Distilled widened generated string enums to open unions (`string & {}`).
151
152
  metric: index.config?.metric,
152
153
  description: index.description ?? undefined,
153
154
  accountId,