alchemy 2.0.0-beta.13 → 2.0.0-beta.15

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 (311) hide show
  1. package/bin/alchemy.js +9477 -9290
  2. package/bin/alchemy.js.map +1 -1
  3. package/bin/alchemy.ts +6 -2
  4. package/bin/cli.js +61 -0
  5. package/bin/commands/deploy.ts +6 -4
  6. package/bin/commands/login.ts +1 -1
  7. package/bin/commands/logs.ts +1 -1
  8. package/bin/commands/state.ts +233 -0
  9. package/bin/commands/tail.ts +1 -1
  10. package/lib/AWS/AutoScaling/LaunchTemplate.d.ts +1 -1
  11. package/lib/AWS/EC2/Instance.d.ts +1 -1
  12. package/lib/AWS/EC2/hosted.d.ts +2 -2
  13. package/lib/AWS/ECS/Task.d.ts +4 -4
  14. package/lib/AWS/ECS/Task.d.ts.map +1 -1
  15. package/lib/AWS/ECS/Task.js +2 -2
  16. package/lib/AWS/ECS/Task.js.map +1 -1
  17. package/lib/AWS/Environment.d.ts +2 -2
  18. package/lib/AWS/Lambda/BucketEventSource.d.ts +1 -1
  19. package/lib/AWS/Lambda/BucketEventSource.d.ts.map +1 -1
  20. package/lib/AWS/Lambda/EventBridgeEventSource.d.ts +1 -1
  21. package/lib/AWS/Lambda/EventBridgeEventSource.d.ts.map +1 -1
  22. package/lib/AWS/Lambda/Function.d.ts +2 -2
  23. package/lib/AWS/Lambda/Function.d.ts.map +1 -1
  24. package/lib/AWS/Lambda/Function.js +1 -2
  25. package/lib/AWS/Lambda/Function.js.map +1 -1
  26. package/lib/AWS/Lambda/QueueEventSource.d.ts +1 -1
  27. package/lib/AWS/Lambda/QueueEventSource.d.ts.map +1 -1
  28. package/lib/AWS/Lambda/StreamEventSource.d.ts +1 -1
  29. package/lib/AWS/Lambda/StreamEventSource.d.ts.map +1 -1
  30. package/lib/AWS/Lambda/TableEventSource.d.ts +1 -1
  31. package/lib/AWS/Lambda/TableEventSource.d.ts.map +1 -1
  32. package/lib/AWS/Lambda/TopicEventSource.d.ts +1 -1
  33. package/lib/AWS/Lambda/TopicEventSource.d.ts.map +1 -1
  34. package/lib/AWS/SQS/QueueSink.d.ts.map +1 -1
  35. package/lib/AWS/SQS/QueueSink.js +1 -2
  36. package/lib/AWS/SQS/QueueSink.js.map +1 -1
  37. package/lib/Agent/coding/bash.d.ts +2 -6
  38. package/lib/Agent/coding/bash.d.ts.map +1 -1
  39. package/lib/Agent/coding/bash.js +2 -3
  40. package/lib/Agent/coding/bash.js.map +1 -1
  41. package/lib/Agent/coding/edit.d.ts +1 -1
  42. package/lib/Agent/coding/glob.d.ts +2 -4
  43. package/lib/Agent/coding/glob.d.ts.map +1 -1
  44. package/lib/Agent/coding/glob.js +1 -2
  45. package/lib/Agent/coding/glob.js.map +1 -1
  46. package/lib/Agent/coding/grep.d.ts +2 -4
  47. package/lib/Agent/coding/grep.d.ts.map +1 -1
  48. package/lib/Agent/coding/grep.js +1 -2
  49. package/lib/Agent/coding/grep.js.map +1 -1
  50. package/lib/Agent/coding/read.d.ts +1 -1
  51. package/lib/Agent/coding/write.d.ts +1 -1
  52. package/lib/Agent/lsp/client.d.ts +2 -2
  53. package/lib/Agent/util/ripgrep.d.ts +2 -2
  54. package/lib/AlchemyContext.d.ts +13 -0
  55. package/lib/AlchemyContext.d.ts.map +1 -0
  56. package/lib/AlchemyContext.js +18 -0
  57. package/lib/AlchemyContext.js.map +1 -0
  58. package/lib/Auth/AuthProvider.js +1 -1
  59. package/lib/Auth/AuthProvider.js.map +1 -1
  60. package/lib/Auth/Profile.d.ts +1 -1
  61. package/lib/Auth/index.d.ts +3 -1
  62. package/lib/Auth/index.d.ts.map +1 -1
  63. package/lib/Auth/index.js +3 -0
  64. package/lib/Auth/index.js.map +1 -1
  65. package/lib/Build/Command.d.ts +1 -1
  66. package/lib/Build/Memo.d.ts +1 -1
  67. package/lib/Bundle/Docker.d.ts +3 -3
  68. package/lib/Bundle/TempRoot.d.ts +3 -3
  69. package/lib/Cli/LoggingCli.d.ts +4 -0
  70. package/lib/Cli/LoggingCli.d.ts.map +1 -0
  71. package/lib/{Test/TestCli.js → Cli/LoggingCli.js} +3 -3
  72. package/lib/Cli/LoggingCli.js.map +1 -0
  73. package/lib/Cli/index.d.ts +0 -1
  74. package/lib/Cli/index.d.ts.map +1 -1
  75. package/lib/Cli/index.js +4 -1
  76. package/lib/Cli/index.js.map +1 -1
  77. package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts +58 -0
  78. package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts.map +1 -0
  79. package/lib/Cloudflare/ApiToken/AccountApiToken.js +137 -0
  80. package/lib/Cloudflare/ApiToken/AccountApiToken.js.map +1 -0
  81. package/lib/Cloudflare/ApiToken/Common.d.ts +91 -0
  82. package/lib/Cloudflare/ApiToken/Common.d.ts.map +1 -0
  83. package/lib/Cloudflare/ApiToken/Common.js +61 -0
  84. package/lib/Cloudflare/ApiToken/Common.js.map +1 -0
  85. package/lib/Cloudflare/ApiToken/PermissionGroups.d.ts +1549 -0
  86. package/lib/Cloudflare/ApiToken/PermissionGroups.d.ts.map +1 -0
  87. package/lib/Cloudflare/ApiToken/PermissionGroups.js +1856 -0
  88. package/lib/Cloudflare/ApiToken/PermissionGroups.js.map +1 -0
  89. package/lib/Cloudflare/ApiToken/UserApiToken.d.ts +49 -0
  90. package/lib/Cloudflare/ApiToken/UserApiToken.d.ts.map +1 -0
  91. package/lib/Cloudflare/ApiToken/UserApiToken.js +113 -0
  92. package/lib/Cloudflare/ApiToken/UserApiToken.js.map +1 -0
  93. package/lib/Cloudflare/ApiToken/index.d.ts +5 -0
  94. package/lib/Cloudflare/ApiToken/index.d.ts.map +1 -0
  95. package/lib/Cloudflare/ApiToken/index.js +5 -0
  96. package/lib/Cloudflare/ApiToken/index.js.map +1 -0
  97. package/lib/Cloudflare/Auth/AuthProvider.js +2 -2
  98. package/lib/Cloudflare/Auth/AuthProvider.js.map +1 -1
  99. package/lib/Cloudflare/CloudflareEnvironment.d.ts +1 -1
  100. package/lib/Cloudflare/Container/ContainerApplication.d.ts +2 -2
  101. package/lib/Cloudflare/Container/ContainerApplication.d.ts.map +1 -1
  102. package/lib/Cloudflare/Container/ContainerApplication.js +7 -2
  103. package/lib/Cloudflare/Container/ContainerApplication.js.map +1 -1
  104. package/lib/Cloudflare/EdgeSession.d.ts +53 -0
  105. package/lib/Cloudflare/EdgeSession.d.ts.map +1 -0
  106. package/lib/Cloudflare/EdgeSession.js +78 -0
  107. package/lib/Cloudflare/EdgeSession.js.map +1 -0
  108. package/lib/Cloudflare/Providers.d.ts +1 -1
  109. package/lib/Cloudflare/Providers.d.ts.map +1 -1
  110. package/lib/Cloudflare/Providers.js +4 -1
  111. package/lib/Cloudflare/Providers.js.map +1 -1
  112. package/lib/Cloudflare/StateStore/Api.d.ts +61 -0
  113. package/lib/Cloudflare/StateStore/Api.d.ts.map +1 -0
  114. package/lib/Cloudflare/StateStore/Api.js +103 -0
  115. package/lib/Cloudflare/StateStore/Api.js.map +1 -0
  116. package/lib/Cloudflare/StateStore/State.d.ts +39 -0
  117. package/lib/Cloudflare/StateStore/State.d.ts.map +1 -0
  118. package/lib/Cloudflare/StateStore/State.js +217 -0
  119. package/lib/Cloudflare/StateStore/State.js.map +1 -0
  120. package/lib/Cloudflare/StateStore/Store.d.ts +82 -0
  121. package/lib/Cloudflare/StateStore/Store.d.ts.map +1 -0
  122. package/lib/Cloudflare/StateStore/Store.js +191 -0
  123. package/lib/Cloudflare/StateStore/Store.js.map +1 -0
  124. package/lib/Cloudflare/StateStore/Token.d.ts +43 -0
  125. package/lib/Cloudflare/StateStore/Token.d.ts.map +1 -0
  126. package/lib/Cloudflare/StateStore/Token.js +61 -0
  127. package/lib/Cloudflare/StateStore/Token.js.map +1 -0
  128. package/lib/Cloudflare/StateStore/index.d.ts +2 -0
  129. package/lib/Cloudflare/StateStore/index.d.ts.map +1 -0
  130. package/lib/Cloudflare/StateStore/index.js +2 -0
  131. package/lib/Cloudflare/StateStore/index.js.map +1 -0
  132. package/lib/Cloudflare/Workers/Assets.d.ts +2 -2
  133. package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts +2 -2
  134. package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts.map +1 -1
  135. package/lib/Cloudflare/Workers/DurableObjectNamespace.js +0 -1
  136. package/lib/Cloudflare/Workers/DurableObjectNamespace.js.map +1 -1
  137. package/lib/Cloudflare/Workers/HttpServer.d.ts +1 -1
  138. package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
  139. package/lib/Cloudflare/Workers/HttpServer.js.map +1 -1
  140. package/lib/Cloudflare/Workers/Worker.d.ts +5 -5
  141. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  142. package/lib/Cloudflare/Workers/Worker.js +0 -1
  143. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  144. package/lib/Cloudflare/index.d.ts +4 -1
  145. package/lib/Cloudflare/index.d.ts.map +1 -1
  146. package/lib/Cloudflare/index.js +4 -1
  147. package/lib/Cloudflare/index.js.map +1 -1
  148. package/lib/Deploy.d.ts +10 -0
  149. package/lib/Deploy.d.ts.map +1 -0
  150. package/lib/Deploy.js +12 -0
  151. package/lib/Deploy.js.map +1 -0
  152. package/lib/Destroy.d.ts +8 -3
  153. package/lib/Destroy.d.ts.map +1 -1
  154. package/lib/Destroy.js +8 -8
  155. package/lib/Destroy.js.map +1 -1
  156. package/lib/GitHub/Providers.d.ts +3 -0
  157. package/lib/GitHub/Providers.d.ts.map +1 -0
  158. package/lib/GitHub/Providers.js +5 -0
  159. package/lib/GitHub/Providers.js.map +1 -0
  160. package/lib/GitHub/index.d.ts +1 -0
  161. package/lib/GitHub/index.d.ts.map +1 -1
  162. package/lib/GitHub/index.js +1 -0
  163. package/lib/GitHub/index.js.map +1 -1
  164. package/lib/Http.d.ts +1 -1
  165. package/lib/Http.d.ts.map +1 -1
  166. package/lib/Http.js +7 -3
  167. package/lib/Http.js.map +1 -1
  168. package/lib/Kubernetes/client.d.ts +10 -10
  169. package/lib/Output.d.ts.map +1 -1
  170. package/lib/Output.js +4 -0
  171. package/lib/Output.js.map +1 -1
  172. package/lib/Plan.d.ts.map +1 -1
  173. package/lib/Plan.js +4 -0
  174. package/lib/Plan.js.map +1 -1
  175. package/lib/Platform.d.ts +2 -2
  176. package/lib/Platform.d.ts.map +1 -1
  177. package/lib/Platform.js.map +1 -1
  178. package/lib/Provider.d.ts.map +1 -1
  179. package/lib/Provider.js +0 -1
  180. package/lib/Provider.js.map +1 -1
  181. package/lib/Stack.d.ts +24 -12
  182. package/lib/Stack.d.ts.map +1 -1
  183. package/lib/Stack.js +47 -10
  184. package/lib/Stack.js.map +1 -1
  185. package/lib/State/HttpStateApi.d.ts +96 -0
  186. package/lib/State/HttpStateApi.d.ts.map +1 -0
  187. package/lib/State/HttpStateApi.js +96 -0
  188. package/lib/State/HttpStateApi.js.map +1 -0
  189. package/lib/State/HttpStateStore.d.ts +10 -0
  190. package/lib/State/HttpStateStore.d.ts.map +1 -0
  191. package/lib/State/HttpStateStore.js +102 -0
  192. package/lib/State/HttpStateStore.js.map +1 -0
  193. package/lib/State/InMemoryState.d.ts +2 -30
  194. package/lib/State/InMemoryState.d.ts.map +1 -1
  195. package/lib/State/InMemoryState.js +23 -18
  196. package/lib/State/InMemoryState.js.map +1 -1
  197. package/lib/State/LocalState.d.ts +4 -2
  198. package/lib/State/LocalState.d.ts.map +1 -1
  199. package/lib/State/LocalState.js +9 -41
  200. package/lib/State/LocalState.js.map +1 -1
  201. package/lib/State/State.d.ts +11 -4
  202. package/lib/State/State.d.ts.map +1 -1
  203. package/lib/State/State.js +1 -1
  204. package/lib/State/State.js.map +1 -1
  205. package/lib/State/StateEncoding.d.ts +31 -0
  206. package/lib/State/StateEncoding.d.ts.map +1 -0
  207. package/lib/State/StateEncoding.js +82 -0
  208. package/lib/State/StateEncoding.js.map +1 -0
  209. package/lib/State/Sync.d.ts +23 -0
  210. package/lib/State/Sync.d.ts.map +1 -0
  211. package/lib/State/Sync.js +49 -0
  212. package/lib/State/Sync.js.map +1 -0
  213. package/lib/State/index.d.ts +4 -0
  214. package/lib/State/index.d.ts.map +1 -1
  215. package/lib/State/index.js +4 -0
  216. package/lib/State/index.js.map +1 -1
  217. package/lib/Test/Bun.d.ts +13 -17
  218. package/lib/Test/Bun.d.ts.map +1 -1
  219. package/lib/Test/Bun.js +17 -36
  220. package/lib/Test/Bun.js.map +1 -1
  221. package/lib/Test/TestState.d.ts +1 -2
  222. package/lib/Test/TestState.d.ts.map +1 -1
  223. package/lib/Test/TestState.js +5 -9
  224. package/lib/Test/TestState.js.map +1 -1
  225. package/lib/Test/Vitest.d.ts +3 -2
  226. package/lib/Test/Vitest.d.ts.map +1 -1
  227. package/lib/Test/Vitest.js +20 -11
  228. package/lib/Test/Vitest.js.map +1 -1
  229. package/lib/Test/index.d.ts +0 -1
  230. package/lib/Test/index.d.ts.map +1 -1
  231. package/lib/Test/index.js +0 -1
  232. package/lib/Test/index.js.map +1 -1
  233. package/lib/Util/FileLogger.d.ts +2 -2
  234. package/lib/Util/FileLogger.d.ts.map +1 -1
  235. package/lib/Util/FileLogger.js +2 -2
  236. package/lib/Util/FileLogger.js.map +1 -1
  237. package/lib/cli/index.d.ts +10 -5
  238. package/lib/cli/index.d.ts.map +1 -1
  239. package/lib/cli/index.js +2 -43045
  240. package/lib/cli/index.js.map +1 -1
  241. package/lib/index.d.ts +2 -1
  242. package/lib/index.d.ts.map +1 -1
  243. package/lib/index.js +2 -1
  244. package/lib/index.js.map +1 -1
  245. package/package.json +30 -15
  246. package/src/AWS/ECS/Task.ts +4 -4
  247. package/src/AWS/Lambda/Function.ts +2 -3
  248. package/src/AWS/SQS/QueueSink.ts +1 -2
  249. package/src/Agent/coding/bash.ts +2 -3
  250. package/src/Agent/coding/glob.ts +1 -2
  251. package/src/Agent/coding/grep.ts +1 -2
  252. package/src/AlchemyContext.ts +27 -0
  253. package/src/Auth/AuthProvider.ts +1 -1
  254. package/src/Auth/index.ts +3 -1
  255. package/src/{Test/TestCli.ts → Cli/LoggingCli.ts} +2 -2
  256. package/src/Cli/index.ts +4 -1
  257. package/src/Cloudflare/ApiToken/AccountApiToken.ts +197 -0
  258. package/src/Cloudflare/ApiToken/Common.ts +148 -0
  259. package/src/Cloudflare/ApiToken/PermissionGroups.ts +1910 -0
  260. package/src/Cloudflare/ApiToken/UserApiToken.ts +168 -0
  261. package/src/Cloudflare/ApiToken/index.ts +4 -0
  262. package/src/Cloudflare/Auth/AuthProvider.ts +2 -2
  263. package/src/Cloudflare/Container/ContainerApplication.ts +8 -2
  264. package/src/Cloudflare/EdgeSession.ts +144 -0
  265. package/src/Cloudflare/Providers.ts +5 -0
  266. package/src/Cloudflare/StateStore/Api.ts +159 -0
  267. package/src/Cloudflare/StateStore/State.ts +318 -0
  268. package/src/Cloudflare/StateStore/Store.ts +290 -0
  269. package/src/Cloudflare/StateStore/Token.ts +68 -0
  270. package/src/Cloudflare/StateStore/index.ts +1 -0
  271. package/src/Cloudflare/Workers/DurableObjectNamespace.ts +1 -6
  272. package/src/Cloudflare/Workers/HttpServer.ts +1 -1
  273. package/src/Cloudflare/Workers/Worker.ts +7 -7
  274. package/src/Cloudflare/index.ts +4 -1
  275. package/src/Deploy.ts +25 -0
  276. package/src/Destroy.ts +25 -13
  277. package/src/GitHub/Providers.ts +6 -0
  278. package/src/GitHub/index.ts +1 -0
  279. package/src/Http.ts +31 -16
  280. package/src/Output.ts +3 -2
  281. package/src/Plan.ts +3 -0
  282. package/src/Platform.ts +8 -2
  283. package/src/Provider.ts +0 -2
  284. package/src/Stack.ts +146 -45
  285. package/src/State/HttpStateApi.ts +155 -0
  286. package/src/State/HttpStateStore.ts +156 -0
  287. package/src/State/InMemoryState.ts +15 -17
  288. package/src/State/LocalState.ts +13 -45
  289. package/src/State/State.ts +13 -4
  290. package/src/State/StateEncoding.ts +83 -0
  291. package/src/State/Sync.ts +89 -0
  292. package/src/State/index.ts +4 -0
  293. package/src/Test/Bun.ts +31 -89
  294. package/src/Test/TestState.ts +6 -8
  295. package/src/Test/Vitest.ts +32 -19
  296. package/src/Test/index.ts +0 -1
  297. package/src/Util/FileLogger.ts +2 -2
  298. package/src/index.ts +2 -1
  299. package/lib/Config.d.ts +0 -20
  300. package/lib/Config.d.ts.map +0 -1
  301. package/lib/Config.js +0 -22
  302. package/lib/Config.js.map +0 -1
  303. package/lib/Observability.d.ts +0 -2
  304. package/lib/Observability.d.ts.map +0 -1
  305. package/lib/Observability.js +0 -1
  306. package/lib/Observability.js.map +0 -1
  307. package/lib/Test/TestCli.d.ts +0 -4
  308. package/lib/Test/TestCli.d.ts.map +0 -1
  309. package/lib/Test/TestCli.js.map +0 -1
  310. package/src/Config.ts +0 -31
  311. package/src/Observability.ts +0 -0
@@ -0,0 +1,13 @@
1
+ import * as EffectContext from "effect/Context";
2
+ import * as FileSystem from "effect/FileSystem";
3
+ import * as Layer from "effect/Layer";
4
+ import * as Path from "effect/Path";
5
+ declare const AlchemyContext_base: EffectContext.ServiceClass<AlchemyContext, "alchemy/Context", {
6
+ dotAlchemy: string;
7
+ updateStateStore: boolean;
8
+ }>;
9
+ export declare class AlchemyContext extends AlchemyContext_base {
10
+ }
11
+ export declare const AlchemyContextLive: Layer.Layer<AlchemyContext, import("effect/PlatformError").PlatformError, Path.Path | FileSystem.FileSystem>;
12
+ export {};
13
+ //# sourceMappingURL=AlchemyContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlchemyContext.d.ts","sourceRoot":"","sources":["../src/AlchemyContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;;gBAKpB,MAAM;sBACA,OAAO;;AAJ7B,qBAAa,cAAe,SAAQ,mBAMd;CAAG;AAEzB,eAAO,MAAM,kBAAkB,8GAY9B,CAAC"}
@@ -0,0 +1,18 @@
1
+ import * as EffectContext from "effect/Context";
2
+ import * as Effect from "effect/Effect";
3
+ import * as FileSystem from "effect/FileSystem";
4
+ import * as Layer from "effect/Layer";
5
+ import * as Path from "effect/Path";
6
+ export class AlchemyContext extends EffectContext.Service()("alchemy/Context") {
7
+ }
8
+ export const AlchemyContextLive = Layer.effect(AlchemyContext, Effect.gen(function* () {
9
+ const fs = yield* FileSystem.FileSystem;
10
+ const path = yield* Path.Path;
11
+ const dir = path.join(process.cwd(), ".alchemy");
12
+ yield* fs.makeDirectory(dir, { recursive: true });
13
+ return {
14
+ dotAlchemy: dir,
15
+ updateStateStore: false,
16
+ };
17
+ }));
18
+ //# sourceMappingURL=AlchemyContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AlchemyContext.js","sourceRoot":"","sources":["../src/AlchemyContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAEpC,MAAM,OAAO,cAAe,SAAQ,aAAa,CAAC,OAAO,EAMtD,CAAC,iBAAiB,CAAC;CAAG;AAEzB,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAC5C,cAAc,EACd,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;IACjD,KAAK,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,OAAO;QACL,UAAU,EAAE,GAAG;QACf,gBAAgB,EAAE,KAAK;KACxB,CAAC;AACJ,CAAC,CAAC,CACH,CAAC"}
@@ -38,7 +38,7 @@ export const AuthProviderLayer = () => (name, impl) => Layer.effectDiscard(AuthP
38
38
  */
39
39
  export const getAuthProvider = (name) => Effect.flatMap(AuthProviders.asEffect(), (registry) => registry[name] == null
40
40
  ? Effect.fail(new AuthError({
41
- message: `AuthProvider '${name}' is not registered. Make sure its layer has been built.`,
41
+ message: `AuthProvider '${name}' is not registered. Make sure its layer has been provided.`,
42
42
  }))
43
43
  : Effect.succeed(registry[name]));
44
44
  //# sourceMappingURL=AuthProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthProvider.js","sourceRoot":"","sources":["../../src/Auth/AuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,gBAAgB,EAAa,CACjE,WAAW,EACX;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;CACtC,CACF;CAAG;AAEJ,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,OAAO,EAK/C,CAAC,eAAe,CAAC;CAAG;AAkEvB,MAAM,CAAC,MAAM,YAAY,GACvB,GAAmD,EAAE,CACrD,CAQE,IAAY,EACZ,IAsBK,EACL,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1C,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,GAAG,EAAE,CACH,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;QACjB,IAAI,EAAE,cAAc;QACpB,IAAI;QACJ,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI;YACJ,CAAC,GAAG,IAA2B,EAAE,EAAE,CACjC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAC/C,CAAC,CACH;KACmC,CAAC,CAC1C,CAAC;AACJ,CAAC,CAAC,CAAC;AAEP;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAC5B,GAAmD,EAAE,CACrD,CAQE,IAAY,EACZ,IAsBK,EACL,EAAE,CACF,KAAK,CAAC,aAAa,CACjB,YAAY,EAAuB,CAOjC,IAAI,EAAE,IAAI,CAAC,CACd,CAAC;AAEN;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAI7B,IAAY,EACgE,EAAE,CAC9E,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CACpD,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI;IACpB,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,CAAC;QACZ,OAAO,EAAE,iBAAiB,IAAI,0DAA0D;KACzF,CAAC,CACH;IACH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC,CAAC,CACxE,CAAC"}
1
+ {"version":3,"file":"AuthProvider.js","sourceRoot":"","sources":["../../src/Auth/AuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,MAAM,OAAO,SAAU,SAAQ,MAAM,CAAC,gBAAgB,EAAa,CACjE,WAAW,EACX;IACE,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;CACtC,CACF;CAAG;AAEJ,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,OAAO,EAK/C,CAAC,eAAe,CAAC;CAAG;AAkEvB,MAAM,CAAC,MAAM,YAAY,GACvB,GAAmD,EAAE,CACrD,CAQE,IAAY,EACZ,IAsBK,EACL,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1C,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,GAAG,EAAE,CACH,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;QACjB,IAAI,EAAE,cAAc;QACpB,IAAI;QACJ,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,IAAI;YACJ,CAAC,GAAG,IAA2B,EAAE,EAAE,CACjC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;SAC/C,CAAC,CACH;KACmC,CAAC,CAC1C,CAAC;AACJ,CAAC,CAAC,CAAC;AAEP;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAC5B,GAAmD,EAAE,CACrD,CAQE,IAAY,EACZ,IAsBK,EACL,EAAE,CACF,KAAK,CAAC,aAAa,CACjB,YAAY,EAAuB,CAOjC,IAAI,EAAE,IAAI,CAAC,CACd,CAAC;AAEN;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAI7B,IAAY,EACgE,EAAE,CAC9E,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CACpD,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI;IACpB,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,IAAI,SAAS,CAAC;QACZ,OAAO,EAAE,iBAAiB,IAAI,6DAA6D;KAC5F,CAAC,CACH;IACH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsC,CAAC,CACxE,CAAC"}
@@ -74,6 +74,6 @@ export declare const loadOrConfigure: <Config extends {
74
74
  * - other: Other authentication methods
75
75
  */
76
76
  method: string;
77
- }, import("./AuthProvider.ts").AuthError | import("effect/PlatformError").PlatformError, FileSystem.FileSystem>;
77
+ }, import("effect/PlatformError").PlatformError | import("./AuthProvider.ts").AuthError, FileSystem.FileSystem>;
78
78
  export {};
79
79
  //# sourceMappingURL=Profile.d.ts.map
@@ -1,3 +1,5 @@
1
1
  export * from "./AuthProvider.ts";
2
- export type * from "./Profile.ts";
2
+ export * from "./Credentials.ts";
3
+ export * from "./Env.ts";
4
+ export * from "./Profile.ts";
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,mBAAmB,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}
package/lib/Auth/index.js CHANGED
@@ -1,2 +1,5 @@
1
1
  export * from "./AuthProvider.js";
2
+ export * from "./Credentials.js";
3
+ export * from "./Env.js";
4
+ export * from "./Profile.js";
2
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}
@@ -89,7 +89,7 @@ export interface Command extends Resource<"Build.Command", CommandProps, {
89
89
  * });
90
90
  */
91
91
  export declare const Command: import("../Resource.ts").ResourceClass<Command>;
92
- export declare const CommandProvider: () => import("effect/Layer").Layer<Provider.Provider<Command>, never, import("effect/Scope").Scope | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner | FileSystem.FileSystem | Path.Path>;
92
+ export declare const CommandProvider: () => import("effect/Layer").Layer<Provider.Provider<Command>, never, Path.Path | FileSystem.FileSystem | import("effect/Scope").Scope | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner>;
93
93
  export interface RunBuildCommandOptions {
94
94
  command: string;
95
95
  cwd?: string;
@@ -41,5 +41,5 @@ export interface MemoOptions {
41
41
  export declare const hashDirectory: (props: {
42
42
  cwd?: string;
43
43
  memo?: MemoOptions;
44
- }) => Effect.Effect<string, PlatformError, FileSystem.FileSystem | Path.Path>;
44
+ }) => Effect.Effect<string, PlatformError, Path.Path | FileSystem.FileSystem>;
45
45
  //# sourceMappingURL=Memo.d.ts.map
@@ -31,11 +31,11 @@ export interface DockerBuildOptions {
31
31
  readonly extraArgs?: ReadonlyArray<string>;
32
32
  readonly env?: Record<string, string | undefined>;
33
33
  }
34
- export declare const materializeDockerfile: (dockerfile: string, dir: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError, FileSystem.FileSystem | Path.Path>;
34
+ export declare const materializeDockerfile: (dockerfile: string, dir: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError, Path.Path | FileSystem.FileSystem>;
35
35
  export declare const writeContextFiles: (dir: string, files: readonly {
36
36
  readonly path: string;
37
37
  readonly content: string | Uint8Array;
38
- }[]) => Effect.Effect<void, import("effect/PlatformError").PlatformError, FileSystem.FileSystem | Path.Path>;
38
+ }[]) => Effect.Effect<void, import("effect/PlatformError").PlatformError, Path.Path | FileSystem.FileSystem>;
39
39
  export declare const runDockerCommand: (args: readonly string[], options?: {
40
40
  cwd?: string;
41
41
  env?: Record<string, string | undefined>;
@@ -67,6 +67,6 @@ export declare const dockerLogin: (auth: RegistryAuth, options?: {
67
67
  * Push an image ref. When `auth` is set, uses an isolated `DOCKER_CONFIG`
68
68
  * directory so concurrent deploys do not race on global docker credentials.
69
69
  */
70
- export declare const pushImage: (imageRef: string, auth?: RegistryAuth | undefined) => Effect.Effect<void, import("effect/PlatformError").PlatformError | DockerCommandError, import("effect/Scope").Scope | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner | FileSystem.FileSystem>;
70
+ export declare const pushImage: (imageRef: string, auth?: RegistryAuth | undefined) => Effect.Effect<void, import("effect/PlatformError").PlatformError | DockerCommandError, FileSystem.FileSystem | import("effect/Scope").Scope | import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner>;
71
71
  export {};
72
72
  //# sourceMappingURL=Docker.d.ts.map
@@ -9,16 +9,16 @@ import { Stage } from "../Stage.ts";
9
9
  * nonce) so concurrent bundle operations for the same resource never collide.
10
10
  * Stale directories from previous crashed runs are cleaned up best-effort.
11
11
  */
12
- export declare const createTempBundleDir: (entry: string, dotAlchemy: string, id: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError, FileSystem.FileSystem | Path.Path | Stage | Stack>;
12
+ export declare const createTempBundleDir: (entry: string, dotAlchemy: string, id: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError, Path.Path | FileSystem.FileSystem | Stage | Stack>;
13
13
  /**
14
14
  * Returns a deterministic bundle staging directory without clearing it first.
15
15
  * Useful for Docker build contexts where keeping the directory stable avoids
16
16
  * unnecessary file churn between builds.
17
17
  */
18
- export declare const getStableContextDir: (entry: string, dotAlchemy: string, id: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError, FileSystem.FileSystem | Path.Path | Stage | Stack>;
18
+ export declare const getStableContextDir: (entry: string, dotAlchemy: string, id: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError, Path.Path | FileSystem.FileSystem | Stage | Stack>;
19
19
  /**
20
20
  * Cleans up a bundle's private temp directory.
21
21
  */
22
22
  export declare const cleanupBundleTempDir: (tempDir: string) => Effect.Effect<void, never, FileSystem.FileSystem>;
23
- export declare const findCwdForBundle: (entry: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError, FileSystem.FileSystem | Path.Path>;
23
+ export declare const findCwdForBundle: (entry: string) => Effect.Effect<string, import("effect/PlatformError").PlatformError, Path.Path | FileSystem.FileSystem>;
24
24
  //# sourceMappingURL=TempRoot.d.ts.map
@@ -0,0 +1,4 @@
1
+ import * as Layer from "effect/Layer";
2
+ import { Cli } from "./Cli.ts";
3
+ export declare const LoggingCli: Layer.Layer<Cli, never, never>;
4
+ //# sourceMappingURL=LoggingCli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoggingCli.d.ts","sourceRoot":"","sources":["../../src/Cli/LoggingCli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,eAAO,MAAM,UAAU,gCAgBtB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import * as Effect from "effect/Effect";
2
2
  import * as Layer from "effect/Layer";
3
- import { Cli } from "../Cli/Cli.js";
4
- export const TestCli = Layer.succeed(Cli, Cli.of({
3
+ import { Cli } from "./Cli.js";
4
+ export const LoggingCli = Layer.succeed(Cli, Cli.of({
5
5
  approvePlan: () => Effect.succeed(true),
6
6
  displayPlan: () => Effect.void,
7
7
  startApplySession: () => Effect.succeed({
@@ -11,4 +11,4 @@ export const TestCli = Layer.succeed(Cli, Cli.of({
11
11
  : `${event.id}: ${event.message}`),
12
12
  }),
13
13
  }));
14
- //# sourceMappingURL=TestCli.js.map
14
+ //# sourceMappingURL=LoggingCli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LoggingCli.js","sourceRoot":"","sources":["../../src/Cli/LoggingCli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CACrC,GAAG,EACH,GAAG,CAAC,EAAE,CAAC;IACL,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IACvC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;IAC9B,iBAAiB,EAAE,GAAG,EAAE,CACtB,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI;QACvB,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CACd,MAAM,CAAC,GAAG,CACR,KAAK,CAAC,IAAI,KAAK,eAAe;YAC5B,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,GAAG;YAC9C,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE,CACpC;KACJ,CAAC;CACL,CAAC,CACH,CAAC"}
@@ -1,3 +1,2 @@
1
1
  export * from "./Cli.ts";
2
- export * from "./InkCLI.tsx";
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Cli/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Cli/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
package/lib/Cli/index.js CHANGED
@@ -1,3 +1,6 @@
1
1
  export * from "./Cli.js";
2
- export * from "./InkCLI.js";
2
+ // Note: do NOT re-export InkCLI here. The Ink-based renderer pulls in
3
+ // `react`/`ink`, which we do not want consumers of `alchemy/Cli` to
4
+ // transitively depend on. Import `alchemy/Cli/InkCLI` directly when needed
5
+ // (currently only from `bin/alchemy.ts`, which is bundled).
3
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Cli/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Cli/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,4DAA4D"}
@@ -0,0 +1,58 @@
1
+ import * as Redacted from "effect/Redacted";
2
+ import * as Provider from "../../Provider.ts";
3
+ import { Resource } from "../../Resource.ts";
4
+ import { CloudflareEnvironment } from "../CloudflareEnvironment.ts";
5
+ import type { Providers } from "../Providers.ts";
6
+ import { type BaseApiTokenProps } from "./Common.ts";
7
+ export type AccountApiTokenProps = BaseApiTokenProps;
8
+ export type AccountApiToken = Resource<"Cloudflare.AccountApiToken", AccountApiTokenProps, {
9
+ tokenId: string;
10
+ name: string;
11
+ status: "active" | "disabled" | "expired";
12
+ /**
13
+ * The plaintext token value. Cloudflare returns this only once, on
14
+ * creation, so we persist it here for downstream consumers (e.g. a
15
+ * GitHub Actions secret).
16
+ */
17
+ value: Redacted.Redacted<string>;
18
+ accountId: string;
19
+ }, never, Providers>;
20
+ /**
21
+ * A Cloudflare account-owned API token (`POST /accounts/{account_id}/tokens`).
22
+ *
23
+ * Account-owned tokens are managed at the account level and persist
24
+ * independently of any single user. Use these for CI tokens, third-party
25
+ * integrations, or anywhere the token should outlive an individual user's
26
+ * session.
27
+ *
28
+ * Creating account-owned tokens requires the caller to have the
29
+ * `API Tokens > Write` account permission.
30
+ *
31
+ * @section Creating a Token
32
+ * @example A token for managing Workers and KV from CI
33
+ * ```typescript
34
+ * const token = yield* Cloudflare.AccountApiToken("ci-token", {
35
+ * name: "my-ci-token",
36
+ * policies: [
37
+ * {
38
+ * effect: "allow",
39
+ * permissionGroups: [
40
+ * "Workers Scripts Write",
41
+ * "Workers KV Storage Write",
42
+ * ],
43
+ * resources: { "com.cloudflare.api.account": "*" },
44
+ * },
45
+ * ],
46
+ * });
47
+ *
48
+ * yield* GitHub.Secret("cf-api-token", {
49
+ * owner: "me",
50
+ * repository: "my-repo",
51
+ * name: "CLOUDFLARE_API_TOKEN",
52
+ * value: token.value,
53
+ * });
54
+ * ```
55
+ */
56
+ export declare const AccountApiToken: import("../../Resource.ts").ResourceClass<AccountApiToken>;
57
+ export declare const AccountApiTokenProvider: () => import("effect/Layer").Layer<Provider.Provider<AccountApiToken>, never, import("effect/unstable/http/HttpClient").HttpClient | import("../../Stage.ts").Stage | import("../../Stack.ts").Stack | import("@distilled.cloud/cloudflare").Credentials | CloudflareEnvironment>;
58
+ //# sourceMappingURL=AccountApiToken.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountApiToken.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/AccountApiToken.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAG5C,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAErD,MAAM,MAAM,eAAe,GAAG,QAAQ,CACpC,4BAA4B,EAC5B,oBAAoB,EACpB;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C;;;;OAIG;IACH,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB,EACD,KAAK,EACL,SAAS,CACV,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,eAAe,4DAE3B,CAAC;AASF,eAAO,MAAM,uBAAuB,mRA+GjC,CAAC"}
@@ -0,0 +1,137 @@
1
+ import * as accounts from "@distilled.cloud/cloudflare/accounts";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Redacted from "effect/Redacted";
4
+ import { isResolved } from "../../Diff.js";
5
+ import { createPhysicalName } from "../../PhysicalName.js";
6
+ import * as Provider from "../../Provider.js";
7
+ import { Resource } from "../../Resource.js";
8
+ import { CloudflareEnvironment } from "../CloudflareEnvironment.js";
9
+ import { buildConditionPayload, conditionFingerprint, policyFingerprint, resolvePolicies, } from "./Common.js";
10
+ /**
11
+ * A Cloudflare account-owned API token (`POST /accounts/{account_id}/tokens`).
12
+ *
13
+ * Account-owned tokens are managed at the account level and persist
14
+ * independently of any single user. Use these for CI tokens, third-party
15
+ * integrations, or anywhere the token should outlive an individual user's
16
+ * session.
17
+ *
18
+ * Creating account-owned tokens requires the caller to have the
19
+ * `API Tokens > Write` account permission.
20
+ *
21
+ * @section Creating a Token
22
+ * @example A token for managing Workers and KV from CI
23
+ * ```typescript
24
+ * const token = yield* Cloudflare.AccountApiToken("ci-token", {
25
+ * name: "my-ci-token",
26
+ * policies: [
27
+ * {
28
+ * effect: "allow",
29
+ * permissionGroups: [
30
+ * "Workers Scripts Write",
31
+ * "Workers KV Storage Write",
32
+ * ],
33
+ * resources: { "com.cloudflare.api.account": "*" },
34
+ * },
35
+ * ],
36
+ * });
37
+ *
38
+ * yield* GitHub.Secret("cf-api-token", {
39
+ * owner: "me",
40
+ * repository: "my-repo",
41
+ * name: "CLOUDFLARE_API_TOKEN",
42
+ * value: token.value,
43
+ * });
44
+ * ```
45
+ */
46
+ export const AccountApiToken = Resource("Cloudflare.AccountApiToken");
47
+ const resolveName = (id, name) => Effect.gen(function* () {
48
+ return name ?? (yield* createPhysicalName({ id }));
49
+ });
50
+ export const AccountApiTokenProvider = () => Provider.effect(AccountApiToken, Effect.gen(function* () {
51
+ const { accountId } = yield* CloudflareEnvironment;
52
+ const createToken = yield* accounts.createToken;
53
+ const updateToken = yield* accounts.updateToken;
54
+ const deleteToken = yield* accounts.deleteToken;
55
+ const getToken = yield* accounts.getToken;
56
+ const buildAttributes = (tokenData, value) => ({
57
+ tokenId: tokenData.id ?? "",
58
+ name: tokenData.name ?? "",
59
+ status: tokenData.status ?? "active",
60
+ value,
61
+ accountId,
62
+ });
63
+ return {
64
+ stables: ["tokenId", "accountId"],
65
+ diff: Effect.fn(function* ({ id, olds, news, output }) {
66
+ if (!isResolved(news))
67
+ return undefined;
68
+ if ((output?.accountId ?? accountId) !== accountId) {
69
+ return { action: "replace" };
70
+ }
71
+ const oldName = output?.name ?? (yield* resolveName(id, olds?.name));
72
+ const newName = yield* resolveName(id, news.name);
73
+ const oldPolicyFp = policyFingerprint(resolvePolicies(olds?.policies ?? [], accountId));
74
+ const newPolicyFp = policyFingerprint(resolvePolicies(news.policies, accountId));
75
+ const oldCondFp = conditionFingerprint(olds?.condition);
76
+ const newCondFp = conditionFingerprint(news.condition);
77
+ if (oldName !== newName ||
78
+ oldPolicyFp !== newPolicyFp ||
79
+ oldCondFp !== newCondFp ||
80
+ (olds?.expiresOn ?? undefined) !== (news.expiresOn ?? undefined) ||
81
+ (olds?.notBefore ?? undefined) !== (news.notBefore ?? undefined)) {
82
+ return { action: "update" };
83
+ }
84
+ }),
85
+ create: Effect.fn(function* ({ id, news }) {
86
+ const name = yield* resolveName(id, news.name);
87
+ const policies = resolvePolicies(news.policies, accountId);
88
+ const result = yield* createToken({
89
+ accountId,
90
+ name,
91
+ policies,
92
+ condition: buildConditionPayload(news.condition),
93
+ expiresOn: news.expiresOn,
94
+ notBefore: news.notBefore,
95
+ });
96
+ if (!result.value) {
97
+ return yield* Effect.die(`Cloudflare did not return a value for token "${name}".`);
98
+ }
99
+ return buildAttributes(result, Redacted.make(result.value));
100
+ }),
101
+ update: Effect.fn(function* ({ id, news, output }) {
102
+ const name = yield* resolveName(id, news.name);
103
+ const policies = resolvePolicies(news.policies, accountId);
104
+ const result = yield* updateToken({
105
+ accountId,
106
+ tokenId: output.tokenId,
107
+ name,
108
+ policies,
109
+ condition: buildConditionPayload(news.condition),
110
+ expiresOn: news.expiresOn,
111
+ notBefore: news.notBefore,
112
+ });
113
+ // Cloudflare doesn't return the value on update; preserve the
114
+ // value captured at creation.
115
+ return buildAttributes(result, output.value);
116
+ }),
117
+ delete: Effect.fn(function* ({ output }) {
118
+ yield* deleteToken({
119
+ accountId: output.accountId,
120
+ tokenId: output.tokenId,
121
+ }).pipe(
122
+ // Already gone — Cloudflare may report this as either an
123
+ // `InvalidRoute` (token-id no longer routable) or a generic
124
+ // `TokenNotFound`. Either is fine; we just want the resource gone.
125
+ Effect.catchTag("InvalidRoute", () => Effect.void), Effect.catchTag("TokenNotFound", () => Effect.void));
126
+ }),
127
+ read: Effect.fn(function* ({ output }) {
128
+ if (!output?.tokenId)
129
+ return undefined;
130
+ return yield* getToken({
131
+ accountId: output.accountId,
132
+ tokenId: output.tokenId,
133
+ }).pipe(Effect.map((token) => buildAttributes(token, output.value)), Effect.catchTag("InvalidRoute", () => Effect.succeed(undefined)), Effect.catchTag("TokenNotFound", () => Effect.succeed(undefined)));
134
+ }),
135
+ };
136
+ }));
137
+ //# sourceMappingURL=AccountApiToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccountApiToken.js","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/AccountApiToken.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import { type PermissionGroupName } from "./PermissionGroups.ts";
2
+ /**
3
+ * Resource keys recognized by Cloudflare API token policies.
4
+ *
5
+ * The literal `"com.cloudflare.api.account"` is rewritten by the account-scoped
6
+ * provider to `"com.cloudflare.api.account.${accountId}"` so callers don't have
7
+ * to splice the account ID themselves.
8
+ *
9
+ * @see https://developers.cloudflare.com/fundamentals/api/reference/permissions/
10
+ */
11
+ export type ApiTokenResourceKey = "com.cloudflare.api.account" | `com.cloudflare.api.account.${string}` | `com.cloudflare.api.account.zone.${string}` | `com.cloudflare.edge.r2.bucket.${string}` | (string & {});
12
+ /**
13
+ * A permission group reference: either a typed Cloudflare permission-group
14
+ * name (resolved against the static catalog) or an explicit `{ id }` for
15
+ * names that aren't in the catalog or have multiple scopes.
16
+ */
17
+ export type ApiTokenPermissionGroupRef = PermissionGroupName | {
18
+ id: string;
19
+ meta?: {
20
+ key?: string;
21
+ value?: string;
22
+ };
23
+ };
24
+ export interface ApiTokenPolicy {
25
+ effect: "allow" | "deny";
26
+ permissionGroups: ApiTokenPermissionGroupRef[];
27
+ resources: {
28
+ [K in ApiTokenResourceKey]?: string;
29
+ };
30
+ }
31
+ export interface ApiTokenCondition {
32
+ requestIp?: {
33
+ in?: string[];
34
+ notIn?: string[];
35
+ };
36
+ }
37
+ export type BaseApiTokenProps = {
38
+ /**
39
+ * Token name. Defaults to a generated physical name based on the
40
+ * resource's logical id, app name, and stage.
41
+ */
42
+ name?: string;
43
+ /**
44
+ * Access policies attached to the token. At least one policy is required
45
+ * by Cloudflare.
46
+ */
47
+ policies: ApiTokenPolicy[];
48
+ /** ISO 8601 expiration timestamp. */
49
+ expiresOn?: string;
50
+ /** ISO 8601 "not before" timestamp. */
51
+ notBefore?: string;
52
+ /** Optional usage conditions (e.g. IP allowlist). */
53
+ condition?: ApiTokenCondition;
54
+ };
55
+ export type ResolvedPolicy = {
56
+ effect: "allow" | "deny";
57
+ permissionGroups: {
58
+ id: string;
59
+ meta?: {
60
+ key?: string;
61
+ value?: string;
62
+ };
63
+ }[];
64
+ resources: Record<string, unknown>;
65
+ };
66
+ export declare const resolvePermissionGroup: (ref: ApiTokenPermissionGroupRef) => {
67
+ id: string;
68
+ meta?: undefined;
69
+ } | {
70
+ id: string;
71
+ meta: {
72
+ key?: string;
73
+ value?: string;
74
+ };
75
+ };
76
+ /**
77
+ * Rewrite the bare `"com.cloudflare.api.account"` key to the
78
+ * account-scoped form. Pass `accountId: undefined` to leave keys unchanged
79
+ * (e.g. for user-owned tokens whose policies don't carry an account scope).
80
+ */
81
+ export declare const resolveResources: (resources: ApiTokenPolicy["resources"], accountId: string | undefined) => Record<string, string>;
82
+ export declare const resolvePolicies: (policies: ApiTokenPolicy[], accountId: string | undefined) => ResolvedPolicy[];
83
+ export declare const policyFingerprint: (policies: ResolvedPolicy[]) => string;
84
+ export declare const conditionFingerprint: (condition: ApiTokenCondition | undefined) => string;
85
+ export declare const buildConditionPayload: (condition: ApiTokenCondition | undefined) => {
86
+ requestIp: {
87
+ in: string[] | undefined;
88
+ notIn: string[] | undefined;
89
+ } | undefined;
90
+ } | undefined;
91
+ //# sourceMappingURL=Common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Common.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/Common.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAE/B;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAC3B,4BAA4B,GAC5B,8BAA8B,MAAM,EAAE,GACtC,mCAAmC,MAAM,EAAE,GAC3C,iCAAiC,MAAM,EAAE,GACzC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB;;;;GAIG;AACH,MAAM,MAAM,0BAA0B,GAClC,mBAAmB,GACnB;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,gBAAgB,EAAE,0BAA0B,EAAE,CAAC;IAC/C,SAAS,EAAE;SAAG,CAAC,IAAI,mBAAmB,CAAC,CAAC,EAAE,MAAM;KAAE,CAAC;CACpD;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE;QACV,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;CACH;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,gBAAgB,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE;YAAE,GAAG,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE,CAAC;IAC5E,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,KAAK,0BAA0B;;;;;;cAxCrC,MAAM;gBAAU,MAAM;;CAqDtD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,WAAW,cAAc,CAAC,WAAW,CAAC,EACtC,WAAW,MAAM,GAAG,SAAS,KAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,CAWvB,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAU,cAAc,EAAE,EAC1B,WAAW,MAAM,GAAG,SAAS,KAC5B,cAAc,EAKZ,CAAC;AAEN,eAAO,MAAM,iBAAiB,GAAI,UAAU,cAAc,EAAE,KAAG,MAW5D,CAAC;AAEJ,eAAO,MAAM,oBAAoB,GAC/B,WAAW,iBAAiB,GAAG,SAAS,KACvC,MAIC,CAAC;AAEL,eAAO,MAAM,qBAAqB,GAChC,WAAW,iBAAiB,GAAG,SAAS;;;;;aAW3B,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { PERMISSION_GROUPS_BY_NAME, } from "./PermissionGroups.js";
2
+ export const resolvePermissionGroup = (ref) => {
3
+ if (typeof ref === "string") {
4
+ const group = PERMISSION_GROUPS_BY_NAME[ref];
5
+ if (!group) {
6
+ // Should be unreachable due to the typed union, but guard anyway in
7
+ // case Cloudflare retires a name we still have in the catalog.
8
+ throw new Error(`Unknown Cloudflare permission group: "${ref}". Pass an explicit { id } instead.`);
9
+ }
10
+ return { id: group.id };
11
+ }
12
+ return ref.meta ? { id: ref.id, meta: ref.meta } : { id: ref.id };
13
+ };
14
+ /**
15
+ * Rewrite the bare `"com.cloudflare.api.account"` key to the
16
+ * account-scoped form. Pass `accountId: undefined` to leave keys unchanged
17
+ * (e.g. for user-owned tokens whose policies don't carry an account scope).
18
+ */
19
+ export const resolveResources = (resources, accountId) => {
20
+ const out = {};
21
+ for (const [key, value] of Object.entries(resources)) {
22
+ if (value === undefined)
23
+ continue;
24
+ if (key === "com.cloudflare.api.account" && accountId) {
25
+ out[`com.cloudflare.api.account.${accountId}`] = value;
26
+ }
27
+ else {
28
+ out[key] = value;
29
+ }
30
+ }
31
+ return out;
32
+ };
33
+ export const resolvePolicies = (policies, accountId) => policies.map((policy) => ({
34
+ effect: policy.effect,
35
+ permissionGroups: policy.permissionGroups.map(resolvePermissionGroup),
36
+ resources: resolveResources(policy.resources, accountId),
37
+ }));
38
+ export const policyFingerprint = (policies) => JSON.stringify(policies.map((p) => ({
39
+ effect: p.effect,
40
+ permissionGroups: [...p.permissionGroups]
41
+ .map((g) => ({ id: g.id, meta: g.meta ?? null }))
42
+ .sort((a, b) => a.id.localeCompare(b.id)),
43
+ resources: Object.keys(p.resources)
44
+ .sort()
45
+ .map((k) => [k, p.resources[k]]),
46
+ })));
47
+ export const conditionFingerprint = (condition) => JSON.stringify({
48
+ in: [...(condition?.requestIp?.in ?? [])].sort(),
49
+ notIn: [...(condition?.requestIp?.notIn ?? [])].sort(),
50
+ });
51
+ export const buildConditionPayload = (condition) => condition
52
+ ? {
53
+ requestIp: condition.requestIp
54
+ ? {
55
+ in: condition.requestIp.in,
56
+ notIn: condition.requestIp.notIn,
57
+ }
58
+ : undefined,
59
+ }
60
+ : undefined;
61
+ //# sourceMappingURL=Common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Common.js","sourceRoot":"","sources":["../../../src/Cloudflare/ApiToken/Common.ts"],"names":[],"mappings":"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"}