alchemy 2.0.0-beta.34 → 2.0.0-beta.35

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 (356) hide show
  1. package/bin/cli.js +8 -7
  2. package/bin/exec.js +226 -52
  3. package/bin/exec.js.map +1 -1
  4. package/lib/AWS/AuthProvider.d.ts +7 -6
  5. package/lib/AWS/AuthProvider.d.ts.map +1 -1
  6. package/lib/AWS/AuthProvider.js +143 -134
  7. package/lib/AWS/AuthProvider.js.map +1 -1
  8. package/lib/AWS/Bootstrap.d.ts +2 -2
  9. package/lib/AWS/Bootstrap.d.ts.map +1 -1
  10. package/lib/AWS/EC2/hosted.d.ts +1 -1
  11. package/lib/AWS/Environment.d.ts +25 -3
  12. package/lib/AWS/Environment.d.ts.map +1 -1
  13. package/lib/AWS/Environment.js +47 -3
  14. package/lib/AWS/Environment.js.map +1 -1
  15. package/lib/AWS/IAM/OpenIDConnectProvider.d.ts +14 -6
  16. package/lib/AWS/IAM/OpenIDConnectProvider.d.ts.map +1 -1
  17. package/lib/AWS/IAM/OpenIDConnectProvider.js +6 -3
  18. package/lib/AWS/IAM/OpenIDConnectProvider.js.map +1 -1
  19. package/lib/AWS/IAM/Policy.d.ts +1 -1
  20. package/lib/AWS/IAM/Policy.d.ts.map +1 -1
  21. package/lib/AWS/IAM/Policy.js.map +1 -1
  22. package/lib/AWS/Lambda/BucketEventSource.d.ts +1 -1
  23. package/lib/AWS/Lambda/BucketEventSource.d.ts.map +1 -1
  24. package/lib/AWS/Lambda/EventBridgeEventSource.d.ts +1 -1
  25. package/lib/AWS/Lambda/EventBridgeEventSource.d.ts.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/Providers.d.ts +1 -1
  35. package/lib/AWS/Providers.d.ts.map +1 -1
  36. package/lib/AWS/Providers.js +2 -1
  37. package/lib/AWS/Providers.js.map +1 -1
  38. package/lib/Auth/Credentials.d.ts +21 -6
  39. package/lib/Auth/Credentials.d.ts.map +1 -1
  40. package/lib/Auth/Credentials.js +30 -31
  41. package/lib/Auth/Credentials.js.map +1 -1
  42. package/lib/Auth/Profile.d.ts +31 -34
  43. package/lib/Auth/Profile.d.ts.map +1 -1
  44. package/lib/Auth/Profile.js +46 -31
  45. package/lib/Auth/Profile.js.map +1 -1
  46. package/lib/Axiom/AuthProvider.d.ts +2 -1
  47. package/lib/Axiom/AuthProvider.d.ts.map +1 -1
  48. package/lib/Axiom/AuthProvider.js +149 -143
  49. package/lib/Axiom/AuthProvider.js.map +1 -1
  50. package/lib/Axiom/Credentials.d.ts +2 -1
  51. package/lib/Axiom/Credentials.d.ts.map +1 -1
  52. package/lib/Axiom/Credentials.js +4 -4
  53. package/lib/Axiom/Credentials.js.map +1 -1
  54. package/lib/Axiom/Providers.d.ts +1 -1
  55. package/lib/Axiom/Providers.d.ts.map +1 -1
  56. package/lib/Axiom/Providers.js +3 -1
  57. package/lib/Axiom/Providers.js.map +1 -1
  58. package/lib/Cli/LoggingCli.d.ts.map +1 -1
  59. package/lib/Cli/LoggingCli.js +105 -7
  60. package/lib/Cli/LoggingCli.js.map +1 -1
  61. package/lib/Cli/checkVersion.d.ts +13 -0
  62. package/lib/Cli/checkVersion.d.ts.map +1 -0
  63. package/lib/Cli/checkVersion.js +47 -0
  64. package/lib/Cli/checkVersion.js.map +1 -0
  65. package/lib/Cli/commands/_shared.d.ts +2 -2
  66. package/lib/Cli/commands/_shared.d.ts.map +1 -1
  67. package/lib/Cli/commands/_shared.js +3 -3
  68. package/lib/Cli/commands/_shared.js.map +1 -1
  69. package/lib/Cli/commands/aws.d.ts +6 -0
  70. package/lib/Cli/commands/aws.d.ts.map +1 -0
  71. package/lib/Cli/commands/aws.js +63 -0
  72. package/lib/Cli/commands/aws.js.map +1 -0
  73. package/lib/Cli/commands/cloudflare.d.ts +17 -0
  74. package/lib/Cli/commands/cloudflare.d.ts.map +1 -0
  75. package/lib/Cli/commands/cloudflare.js +111 -0
  76. package/lib/Cli/commands/cloudflare.js.map +1 -0
  77. package/lib/Cli/commands/deploy.d.ts +6 -5
  78. package/lib/Cli/commands/deploy.d.ts.map +1 -1
  79. package/lib/Cli/commands/deploy.js +10 -10
  80. package/lib/Cli/commands/deploy.js.map +1 -1
  81. package/lib/Cli/commands/dev.d.ts.map +1 -1
  82. package/lib/Cli/commands/dev.js +16 -16
  83. package/lib/Cli/commands/dev.js.map +1 -1
  84. package/lib/Cli/commands/login.d.ts +2 -1
  85. package/lib/Cli/commands/login.d.ts.map +1 -1
  86. package/lib/Cli/commands/login.js +9 -8
  87. package/lib/Cli/commands/login.js.map +1 -1
  88. package/lib/Cli/commands/logs.d.ts +1 -1
  89. package/lib/Cli/commands/logs.d.ts.map +1 -1
  90. package/lib/Cli/commands/logs.js +7 -7
  91. package/lib/Cli/commands/logs.js.map +1 -1
  92. package/lib/Cli/commands/profile.d.ts +3 -1
  93. package/lib/Cli/commands/profile.d.ts.map +1 -1
  94. package/lib/Cli/commands/profile.js +14 -11
  95. package/lib/Cli/commands/profile.js.map +1 -1
  96. package/lib/Cli/commands/state.d.ts +1 -1
  97. package/lib/Cli/commands/state.d.ts.map +1 -1
  98. package/lib/Cli/commands/state.js +8 -8
  99. package/lib/Cli/commands/state.js.map +1 -1
  100. package/lib/Cli/commands/tail.d.ts +1 -1
  101. package/lib/Cli/commands/tail.d.ts.map +1 -1
  102. package/lib/Cli/commands/tail.js +7 -7
  103. package/lib/Cli/commands/tail.js.map +1 -1
  104. package/lib/Cli/exec.d.ts.map +1 -1
  105. package/lib/Cli/exec.js +5 -3
  106. package/lib/Cli/exec.js.map +1 -1
  107. package/lib/Cli/main.d.ts.map +1 -1
  108. package/lib/Cli/main.js +17 -5
  109. package/lib/Cli/main.js.map +1 -1
  110. package/lib/Cli/selectCli.d.ts +12 -0
  111. package/lib/Cli/selectCli.d.ts.map +1 -0
  112. package/lib/Cli/selectCli.js +32 -0
  113. package/lib/Cli/selectCli.js.map +1 -0
  114. package/lib/Cloudflare/Auth/AuthProvider.d.ts +2 -1
  115. package/lib/Cloudflare/Auth/AuthProvider.d.ts.map +1 -1
  116. package/lib/Cloudflare/Auth/AuthProvider.js +235 -214
  117. package/lib/Cloudflare/Auth/AuthProvider.js.map +1 -1
  118. package/lib/Cloudflare/CloudflareEnvironment.d.ts +2 -1
  119. package/lib/Cloudflare/CloudflareEnvironment.d.ts.map +1 -1
  120. package/lib/Cloudflare/CloudflareEnvironment.js +3 -2
  121. package/lib/Cloudflare/CloudflareEnvironment.js.map +1 -1
  122. package/lib/Cloudflare/Credentials.d.ts +2 -1
  123. package/lib/Cloudflare/Credentials.d.ts.map +1 -1
  124. package/lib/Cloudflare/Credentials.js +4 -4
  125. package/lib/Cloudflare/Credentials.js.map +1 -1
  126. package/lib/Cloudflare/D1/D1Clone.d.ts +2 -1
  127. package/lib/Cloudflare/D1/D1Clone.d.ts.map +1 -1
  128. package/lib/Cloudflare/D1/D1Database.d.ts +2 -1
  129. package/lib/Cloudflare/D1/D1Database.d.ts.map +1 -1
  130. package/lib/Cloudflare/D1/D1Import.d.ts +3 -1
  131. package/lib/Cloudflare/D1/D1Import.d.ts.map +1 -1
  132. package/lib/Cloudflare/Local/Sidecar.d.ts +11 -4
  133. package/lib/Cloudflare/Local/Sidecar.d.ts.map +1 -1
  134. package/lib/Cloudflare/Local/Sidecar.js +8 -6
  135. package/lib/Cloudflare/Local/Sidecar.js.map +1 -1
  136. package/lib/Cloudflare/Local/SidecarHandlers.d.ts.map +1 -1
  137. package/lib/Cloudflare/Local/SidecarHandlers.js +1 -5
  138. package/lib/Cloudflare/Local/SidecarHandlers.js.map +1 -1
  139. package/lib/Cloudflare/Local/SidecarServer.js +5 -2
  140. package/lib/Cloudflare/Local/SidecarServer.js.map +1 -1
  141. package/lib/Cloudflare/Logs.d.ts +5 -0
  142. package/lib/Cloudflare/Logs.d.ts.map +1 -1
  143. package/lib/Cloudflare/Logs.js +70 -1
  144. package/lib/Cloudflare/Logs.js.map +1 -1
  145. package/lib/Cloudflare/Providers.d.ts +1 -1
  146. package/lib/Cloudflare/Providers.d.ts.map +1 -1
  147. package/lib/Cloudflare/Providers.js +4 -1
  148. package/lib/Cloudflare/Providers.js.map +1 -1
  149. package/lib/Cloudflare/Queue/Queue.d.ts +1 -1
  150. package/lib/Cloudflare/Queue/Queue.js +1 -1
  151. package/lib/Cloudflare/Queue/QueueConsumer.d.ts +6 -2
  152. package/lib/Cloudflare/Queue/QueueConsumer.d.ts.map +1 -1
  153. package/lib/Cloudflare/Queue/QueueConsumer.js +194 -53
  154. package/lib/Cloudflare/Queue/QueueConsumer.js.map +1 -1
  155. package/lib/Cloudflare/Queue/QueueEventSource.d.ts +106 -0
  156. package/lib/Cloudflare/Queue/QueueEventSource.d.ts.map +1 -0
  157. package/lib/Cloudflare/Queue/QueueEventSource.js +145 -0
  158. package/lib/Cloudflare/Queue/QueueEventSource.js.map +1 -0
  159. package/lib/Cloudflare/Queue/index.d.ts +1 -0
  160. package/lib/Cloudflare/Queue/index.d.ts.map +1 -1
  161. package/lib/Cloudflare/Queue/index.js +1 -0
  162. package/lib/Cloudflare/Queue/index.js.map +1 -1
  163. package/lib/Cloudflare/R2/R2Bucket.d.ts +94 -0
  164. package/lib/Cloudflare/R2/R2Bucket.d.ts.map +1 -1
  165. package/lib/Cloudflare/R2/R2Bucket.js +186 -2
  166. package/lib/Cloudflare/R2/R2Bucket.js.map +1 -1
  167. package/lib/Cloudflare/StateStore/State.d.ts +4 -3
  168. package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
  169. package/lib/Cloudflare/StateStore/State.js +16 -8
  170. package/lib/Cloudflare/StateStore/State.js.map +1 -1
  171. package/lib/Cloudflare/VpcService/VpcServiceRef.d.ts +1 -1
  172. package/lib/Cloudflare/VpcService/VpcServiceRef.d.ts.map +1 -1
  173. package/lib/Cloudflare/Website/StaticSite.d.ts.map +1 -1
  174. package/lib/Cloudflare/Website/StaticSite.js +10 -1
  175. package/lib/Cloudflare/Website/StaticSite.js.map +1 -1
  176. package/lib/Cloudflare/Workers/Assets.d.ts +1 -1
  177. package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
  178. package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
  179. package/lib/Cloudflare/Workers/LocalWorkerProvider.js +11 -1
  180. package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
  181. package/lib/Cloudflare/Workers/Worker.d.ts +9 -7
  182. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  183. package/lib/Cloudflare/Workers/Worker.js +62 -142
  184. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  185. package/lib/Cloudflare/Workers/WorkerBundle.d.ts +2 -0
  186. package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
  187. package/lib/Cloudflare/Workers/WorkerBundle.js +21 -7
  188. package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
  189. package/lib/Cloudflare/Zone.d.ts +14 -0
  190. package/lib/Cloudflare/Zone.d.ts.map +1 -0
  191. package/lib/Cloudflare/Zone.js +44 -0
  192. package/lib/Cloudflare/Zone.js.map +1 -0
  193. package/lib/Drizzle/Schema.d.ts.map +1 -1
  194. package/lib/Drizzle/Schema.js +20 -5
  195. package/lib/Drizzle/Schema.js.map +1 -1
  196. package/lib/GitHub/AuthProvider.d.ts +3 -1
  197. package/lib/GitHub/AuthProvider.d.ts.map +1 -1
  198. package/lib/GitHub/AuthProvider.js +114 -108
  199. package/lib/GitHub/AuthProvider.js.map +1 -1
  200. package/lib/GitHub/Credentials.d.ts +2 -1
  201. package/lib/GitHub/Credentials.d.ts.map +1 -1
  202. package/lib/GitHub/Credentials.js +4 -4
  203. package/lib/GitHub/Credentials.js.map +1 -1
  204. package/lib/GitHub/Providers.d.ts +1 -1
  205. package/lib/GitHub/Providers.d.ts.map +1 -1
  206. package/lib/GitHub/Providers.js +3 -1
  207. package/lib/GitHub/Providers.js.map +1 -1
  208. package/lib/GitHub/Secrets.d.ts.map +1 -1
  209. package/lib/GitHub/Secrets.js +14 -1
  210. package/lib/GitHub/Secrets.js.map +1 -1
  211. package/lib/GitHub/Variables.d.ts +40 -0
  212. package/lib/GitHub/Variables.d.ts.map +1 -0
  213. package/lib/GitHub/Variables.js +28 -0
  214. package/lib/GitHub/Variables.js.map +1 -0
  215. package/lib/GitHub/index.d.ts +1 -0
  216. package/lib/GitHub/index.d.ts.map +1 -1
  217. package/lib/GitHub/index.js +1 -0
  218. package/lib/GitHub/index.js.map +1 -1
  219. package/lib/Neon/AuthProvider.d.ts +3 -1
  220. package/lib/Neon/AuthProvider.d.ts.map +1 -1
  221. package/lib/Neon/AuthProvider.js +87 -80
  222. package/lib/Neon/AuthProvider.js.map +1 -1
  223. package/lib/Neon/Credentials.d.ts +2 -1
  224. package/lib/Neon/Credentials.d.ts.map +1 -1
  225. package/lib/Neon/Credentials.js +4 -4
  226. package/lib/Neon/Credentials.js.map +1 -1
  227. package/lib/Neon/NeonEnvironment.d.ts +2 -1
  228. package/lib/Neon/NeonEnvironment.d.ts.map +1 -1
  229. package/lib/Neon/NeonEnvironment.js +3 -2
  230. package/lib/Neon/NeonEnvironment.js.map +1 -1
  231. package/lib/Neon/Project.d.ts +16 -0
  232. package/lib/Neon/Project.d.ts.map +1 -1
  233. package/lib/Neon/Project.js +25 -0
  234. package/lib/Neon/Project.js.map +1 -1
  235. package/lib/Neon/Providers.d.ts +1 -1
  236. package/lib/Neon/Providers.d.ts.map +1 -1
  237. package/lib/Neon/Providers.js +3 -1
  238. package/lib/Neon/Providers.js.map +1 -1
  239. package/lib/Neon/api.d.ts +1 -0
  240. package/lib/Neon/api.d.ts.map +1 -1
  241. package/lib/Neon/api.js +1 -0
  242. package/lib/Neon/api.js.map +1 -1
  243. package/lib/Sidecar/RpcClient.d.ts.map +1 -1
  244. package/lib/Sidecar/RpcClient.js +8 -5
  245. package/lib/Sidecar/RpcClient.js.map +1 -1
  246. package/lib/Sidecar/RpcPaths.d.ts +5 -0
  247. package/lib/Sidecar/RpcPaths.d.ts.map +1 -1
  248. package/lib/Sidecar/RpcPaths.js +10 -1
  249. package/lib/Sidecar/RpcPaths.js.map +1 -1
  250. package/lib/Sidecar/RpcServer.d.ts +24 -4
  251. package/lib/Sidecar/RpcServer.d.ts.map +1 -1
  252. package/lib/Sidecar/RpcServer.js +70 -15
  253. package/lib/Sidecar/RpcServer.js.map +1 -1
  254. package/lib/Sidecar/RpcServerBun.d.ts +4 -0
  255. package/lib/Sidecar/RpcServerBun.d.ts.map +1 -0
  256. package/lib/Sidecar/RpcServerBun.js +28 -0
  257. package/lib/Sidecar/RpcServerBun.js.map +1 -0
  258. package/lib/Sidecar/RpcServerNode.d.ts +4 -0
  259. package/lib/Sidecar/RpcServerNode.d.ts.map +1 -0
  260. package/lib/Sidecar/RpcServerNode.js +39 -0
  261. package/lib/Sidecar/RpcServerNode.js.map +1 -0
  262. package/lib/Sidecar/RpcServices.d.ts +6 -0
  263. package/lib/Sidecar/RpcServices.d.ts.map +1 -0
  264. package/lib/Sidecar/RpcServices.js +29 -0
  265. package/lib/Sidecar/RpcServices.js.map +1 -0
  266. package/lib/Stack.d.ts +5 -3
  267. package/lib/Stack.d.ts.map +1 -1
  268. package/lib/Stack.js +3 -1
  269. package/lib/Stack.js.map +1 -1
  270. package/lib/Test/Core.d.ts.map +1 -1
  271. package/lib/Test/Core.js +5 -4
  272. package/lib/Test/Core.js.map +1 -1
  273. package/lib/Util/PlatformServices.js +1 -1
  274. package/lib/tsconfig.test.tsbuildinfo +1 -1
  275. package/package.json +15 -12
  276. package/src/AWS/AuthProvider.ts +269 -259
  277. package/src/AWS/Environment.ts +57 -3
  278. package/src/AWS/IAM/OpenIDConnectProvider.ts +19 -8
  279. package/src/AWS/IAM/Policy.ts +1 -1
  280. package/src/AWS/Providers.ts +2 -0
  281. package/src/Auth/Credentials.ts +82 -46
  282. package/src/Auth/Profile.ts +123 -69
  283. package/src/Axiom/AuthProvider.ts +263 -255
  284. package/src/Axiom/Credentials.ts +3 -4
  285. package/src/Axiom/Providers.ts +4 -0
  286. package/src/Cli/LoggingCli.ts +127 -11
  287. package/src/Cli/checkVersion.ts +57 -0
  288. package/src/Cli/commands/_shared.ts +4 -4
  289. package/src/Cli/commands/aws.ts +127 -0
  290. package/src/Cli/commands/cloudflare.ts +222 -0
  291. package/src/Cli/commands/deploy.ts +11 -10
  292. package/src/Cli/commands/dev.ts +28 -33
  293. package/src/Cli/commands/login.ts +9 -12
  294. package/src/Cli/commands/logs.ts +8 -8
  295. package/src/Cli/commands/profile.ts +14 -16
  296. package/src/Cli/commands/state.ts +8 -8
  297. package/src/Cli/commands/tail.ts +8 -8
  298. package/src/Cli/exec.ts +7 -3
  299. package/src/Cli/main.ts +20 -5
  300. package/src/Cli/selectCli.ts +33 -0
  301. package/src/Cloudflare/Auth/AuthProvider.ts +445 -430
  302. package/src/Cloudflare/CloudflareEnvironment.ts +3 -2
  303. package/src/Cloudflare/Credentials.ts +3 -4
  304. package/src/Cloudflare/Local/Sidecar.ts +13 -10
  305. package/src/Cloudflare/Local/SidecarHandlers.ts +8 -13
  306. package/src/Cloudflare/Local/SidecarServer.ts +6 -1
  307. package/src/Cloudflare/Logs.ts +115 -1
  308. package/src/Cloudflare/Providers.ts +6 -0
  309. package/src/Cloudflare/Queue/Queue.ts +1 -1
  310. package/src/Cloudflare/Queue/QueueConsumer.ts +262 -60
  311. package/src/Cloudflare/Queue/QueueEventSource.ts +234 -0
  312. package/src/Cloudflare/Queue/index.ts +1 -0
  313. package/src/Cloudflare/R2/R2Bucket.ts +337 -2
  314. package/src/Cloudflare/StateStore/State.ts +25 -16
  315. package/src/Cloudflare/Website/StaticSite.ts +11 -1
  316. package/src/Cloudflare/Workers/LocalWorkerProvider.ts +9 -1
  317. package/src/Cloudflare/Workers/Worker.ts +83 -203
  318. package/src/Cloudflare/Workers/WorkerBundle.ts +38 -12
  319. package/src/Cloudflare/Zone.ts +88 -0
  320. package/src/Drizzle/Schema.ts +21 -5
  321. package/src/GitHub/AuthProvider.ts +221 -217
  322. package/src/GitHub/Credentials.ts +3 -4
  323. package/src/GitHub/Providers.ts +4 -0
  324. package/src/GitHub/Secrets.ts +25 -1
  325. package/src/GitHub/Variables.ts +54 -0
  326. package/src/GitHub/index.ts +1 -0
  327. package/src/Neon/AuthProvider.ts +160 -154
  328. package/src/Neon/Credentials.ts +3 -4
  329. package/src/Neon/NeonEnvironment.ts +3 -2
  330. package/src/Neon/Project.ts +42 -0
  331. package/src/Neon/Providers.ts +4 -0
  332. package/src/Neon/api.ts +2 -0
  333. package/src/Sidecar/RpcClient.ts +8 -7
  334. package/src/Sidecar/RpcPaths.ts +11 -1
  335. package/src/Sidecar/RpcServer.ts +97 -24
  336. package/src/Sidecar/RpcServerBun.ts +41 -0
  337. package/src/Sidecar/RpcServerNode.ts +51 -0
  338. package/src/Sidecar/RpcServices.ts +48 -0
  339. package/src/Stack.ts +8 -0
  340. package/src/Test/Core.ts +10 -4
  341. package/src/Util/PlatformServices.ts +1 -1
  342. package/lib/Cli/commands/bootstrap.d.ts +0 -20
  343. package/lib/Cli/commands/bootstrap.d.ts.map +0 -1
  344. package/lib/Cli/commands/bootstrap.js +0 -107
  345. package/lib/Cli/commands/bootstrap.js.map +0 -1
  346. package/lib/Sidecar/RpcTransport.d.ts +0 -22
  347. package/lib/Sidecar/RpcTransport.d.ts.map +0 -1
  348. package/lib/Sidecar/RpcTransport.js +0 -81
  349. package/lib/Sidecar/RpcTransport.js.map +0 -1
  350. package/lib/Test/TestCli.d.ts +0 -19
  351. package/lib/Test/TestCli.d.ts.map +0 -1
  352. package/lib/Test/TestCli.js +0 -175
  353. package/lib/Test/TestCli.js.map +0 -1
  354. package/src/Cli/commands/bootstrap.ts +0 -216
  355. package/src/Sidecar/RpcTransport.ts +0 -85
  356. package/src/Test/TestCli.ts +0 -221
@@ -1,6 +1,6 @@
1
+ import { DEFAULT_API_BASE_URL } from "@distilled.cloud/axiom/Credentials";
1
2
  import * as Console from "effect/Console";
2
3
  import * as Effect from "effect/Effect";
3
- import * as FileSystem from "effect/FileSystem";
4
4
  import * as Match from "effect/Match";
5
5
  import * as Redacted from "effect/Redacted";
6
6
  import {
@@ -8,15 +8,9 @@ import {
8
8
  AuthProviderLayer,
9
9
  type ConfigureContext,
10
10
  } from "../Auth/AuthProvider.ts";
11
- import {
12
- deleteCredentials,
13
- displayRedacted,
14
- readCredentials,
15
- writeCredentials,
16
- } from "../Auth/Credentials.ts";
11
+ import { CredentialsStore, displayRedacted } from "../Auth/Credentials.ts";
17
12
  import { getEnv, getEnvRedacted, retryOnce } from "../Auth/Env.ts";
18
13
  import * as Clank from "../Util/Clank.ts";
19
- import { DEFAULT_API_BASE_URL } from "@distilled.cloud/axiom/Credentials";
20
14
 
21
15
  const STORAGE_KEY = "axiom-stored";
22
16
 
@@ -64,6 +58,22 @@ export type AxiomResolvedCredentials =
64
58
 
65
59
  export const AXIOM_AUTH_PROVIDER_NAME = "Axiom";
66
60
 
61
+ const promptOrgId = (required: boolean) =>
62
+ getEnv("AXIOM_ORG_ID").pipe(
63
+ Effect.flatMap((envOrgId) =>
64
+ Clank.text({
65
+ message: required
66
+ ? "Axiom Org ID (required for PAT)"
67
+ : "Axiom Org ID (Enter to skip)",
68
+ placeholder: envOrgId ?? "",
69
+ defaultValue: envOrgId ?? "",
70
+ validate: required
71
+ ? (v) => (v.length === 0 ? "Required" : undefined)
72
+ : undefined,
73
+ }).pipe(retryOnce),
74
+ ),
75
+ );
76
+
67
77
  /**
68
78
  * Layer that registers the Axiom {@link AuthProvider} into the
69
79
  * {@link AuthProviders} registry when built. Include this in the Axiom
@@ -72,265 +82,263 @@ export const AXIOM_AUTH_PROVIDER_NAME = "Axiom";
72
82
  export const AxiomAuth = AuthProviderLayer<
73
83
  AxiomAuthConfig,
74
84
  AxiomResolvedCredentials
75
- >()(AXIOM_AUTH_PROVIDER_NAME, {
76
- configure: (profileName, ctx) => configureCredentials(profileName, ctx),
77
- logout: (profileName, config) => logout(profileName, config),
78
- login: (profileName, config) => login(profileName, config),
79
- prettyPrint: (profileName, config) => prettyPrint(profileName, config),
80
- read: (profileName, config) => resolveCredentials(profileName, config),
81
- });
85
+ >()(
86
+ AXIOM_AUTH_PROVIDER_NAME,
87
+ Effect.gen(function* () {
88
+ const store = yield* CredentialsStore;
82
89
 
83
- const resolveCredentials = (
84
- profileName: string,
85
- config: AxiomAuthConfig,
86
- ): Effect.Effect<AxiomResolvedCredentials, AuthError, FileSystem.FileSystem> =>
87
- Match.value(config).pipe(
88
- Match.when(
89
- { method: "env" },
90
- Effect.fnUntraced(function* () {
91
- const apiToken =
92
- (yield* getEnvRedacted("AXIOM_TOKEN")) ??
93
- (yield* getEnvRedacted("AXIOM_API_KEY"));
94
- if (!apiToken) {
95
- return yield* new AuthError({
96
- message:
97
- "Axiom env credentials not found. Set AXIOM_TOKEN (or AXIOM_API_KEY).",
98
- });
99
- }
100
- const apiBaseUrl = (yield* getEnv("AXIOM_URL")) ?? DEFAULT_API_BASE_URL;
101
- const orgId = yield* getEnv("AXIOM_ORG_ID");
102
- if (orgId) {
103
- return {
104
- type: "pat" as const,
105
- apiToken,
106
- apiBaseUrl,
107
- orgId,
108
- source: { type: "env" as const },
109
- };
110
- }
111
- return {
112
- type: "apiToken" as const,
113
- apiToken,
114
- apiBaseUrl,
115
- source: { type: "env" as const },
116
- };
117
- }),
118
- ),
119
- Match.when({ method: "stored" }, () =>
120
- readCredentials<AxiomStoredCredentials>(profileName, STORAGE_KEY).pipe(
121
- Effect.flatMap((creds) =>
122
- creds == null
123
- ? Effect.fail(
124
- new AuthError({
125
- message:
126
- "Axiom stored credentials not found. Run: alchemy login --configure",
127
- }),
128
- )
129
- : Effect.succeed(
130
- Match.value(creds).pipe(
131
- Match.when({ type: "apiToken" }, (c) => ({
132
- type: "apiToken" as const,
133
- apiToken: Redacted.make(c.apiToken),
134
- apiBaseUrl: c.apiBaseUrl ?? DEFAULT_API_BASE_URL,
135
- orgId: c.orgId,
136
- source: { type: "stored" as const },
137
- })),
138
- Match.when({ type: "pat" }, (c) => ({
139
- type: "pat" as const,
140
- apiToken: Redacted.make(c.apiToken),
141
- apiBaseUrl: c.apiBaseUrl ?? DEFAULT_API_BASE_URL,
142
- orgId: c.orgId,
143
- source: { type: "stored" as const },
144
- })),
145
- Match.exhaustive,
146
- ),
147
- ),
148
- ),
149
- ),
150
- ),
151
- Match.exhaustive,
152
- );
90
+ const loginStored = Effect.fnUntraced(function* (profileName: string) {
91
+ const credentialType = yield* Clank.select({
92
+ message: "Axiom credential type",
93
+ options: [
94
+ {
95
+ value: "apiToken" as const,
96
+ label: "API Token",
97
+ hint: "recommended — scoped to specific datasets/actions",
98
+ },
99
+ {
100
+ value: "pat" as const,
101
+ label: "Personal Access Token",
102
+ hint: "full account control, requires Org ID",
103
+ },
104
+ ],
105
+ }).pipe(retryOnce);
153
106
 
154
- const logout = (profileName: string, config: AxiomAuthConfig) =>
155
- Match.value(config).pipe(
156
- Match.when({ method: "env" }, () => Effect.void),
157
- Match.when({ method: "stored" }, () =>
158
- deleteCredentials(profileName, STORAGE_KEY).pipe(
159
- Effect.andThen(Clank.success("Axiom: stored credentials removed")),
160
- ),
161
- ),
162
- Match.exhaustive,
163
- );
107
+ const apiBaseUrlPrompt = yield* Clank.text({
108
+ message: "Axiom API Base URL (Enter for default)",
109
+ placeholder: DEFAULT_API_BASE_URL,
110
+ defaultValue: DEFAULT_API_BASE_URL,
111
+ }).pipe(retryOnce);
112
+ const apiBaseUrl =
113
+ apiBaseUrlPrompt && apiBaseUrlPrompt.length > 0
114
+ ? apiBaseUrlPrompt
115
+ : undefined;
164
116
 
165
- const login = (profileName: string, config: AxiomAuthConfig) =>
166
- Match.value(config)
167
- .pipe(
168
- Match.when({ method: "env" }, () => Effect.void),
169
- Match.when({ method: "stored" }, () =>
170
- readCredentials<AxiomStoredCredentials>(profileName, STORAGE_KEY).pipe(
171
- Effect.flatMap((creds) =>
172
- creds == null ? loginStored(profileName) : Effect.void,
173
- ),
174
- ),
175
- ),
176
- Match.exhaustive,
177
- )
178
- .pipe(
179
- Effect.mapError(
180
- (e) => new AuthError({ message: "login failed", cause: e }),
181
- ),
182
- );
117
+ return yield* Match.value(credentialType).pipe(
118
+ Match.when("apiToken", () =>
119
+ Effect.gen(function* () {
120
+ const apiToken = yield* Clank.password({
121
+ message: "Axiom API Token",
122
+ validate: (v) => (v.length === 0 ? "Required" : undefined),
123
+ }).pipe(retryOnce);
124
+ const orgId = yield* promptOrgId(false);
183
125
 
184
- const configureCredentials = (profileName: string, ctx: ConfigureContext) =>
185
- Effect.gen(function* () {
186
- if (ctx.ci) {
187
- return { method: "env" as const };
188
- }
189
- return yield* configureInteractive(profileName);
190
- }).pipe(
191
- Effect.mapError(
192
- (e) =>
193
- new AuthError({
194
- message: "failed to configure credentials",
195
- cause: e,
196
- }),
197
- ),
198
- );
126
+ yield* store.write<AxiomStoredCredentials>(
127
+ profileName,
128
+ STORAGE_KEY,
129
+ {
130
+ type: "apiToken",
131
+ apiToken,
132
+ apiBaseUrl,
133
+ orgId: orgId && orgId.length > 0 ? orgId : undefined,
134
+ },
135
+ );
136
+ yield* Clank.success("Axiom: credentials saved.");
137
+ return {
138
+ method: "stored" as const,
139
+ credentialType: "apiToken" as const,
140
+ };
141
+ }),
142
+ ),
143
+ Match.when("pat", () =>
144
+ Effect.gen(function* () {
145
+ const apiToken = yield* Clank.password({
146
+ message: "Axiom Personal Access Token",
147
+ validate: (v) => (v.length === 0 ? "Required" : undefined),
148
+ }).pipe(retryOnce);
149
+ const orgId = yield* promptOrgId(true);
199
150
 
200
- const configureInteractive = (profileName: string) =>
201
- Clank.select({
202
- message: "Axiom authentication method",
203
- options,
204
- }).pipe(
205
- Effect.flatMap((method) =>
206
- Match.value(method).pipe(
207
- Match.when("env", () => Effect.succeed({ method: "env" as const })),
208
- Match.when("stored", () => loginStored(profileName)),
151
+ yield* store.write<AxiomStoredCredentials>(
152
+ profileName,
153
+ STORAGE_KEY,
154
+ { type: "pat", apiToken, apiBaseUrl, orgId },
155
+ );
156
+ yield* Clank.success("Axiom: credentials saved.");
157
+ return {
158
+ method: "stored" as const,
159
+ credentialType: "pat" as const,
160
+ };
161
+ }),
162
+ ),
209
163
  Match.exhaustive,
210
- ),
211
- ),
212
- );
213
-
214
- const loginStored = Effect.fnUntraced(function* (profileName: string) {
215
- const credentialType = yield* Clank.select({
216
- message: "Axiom credential type",
217
- options: [
218
- {
219
- value: "apiToken" as const,
220
- label: "API Token",
221
- hint: "recommended — scoped to specific datasets/actions",
222
- },
223
- {
224
- value: "pat" as const,
225
- label: "Personal Access Token",
226
- hint: "full account control, requires Org ID",
227
- },
228
- ],
229
- }).pipe(retryOnce);
164
+ );
165
+ });
230
166
 
231
- const apiBaseUrlPrompt = yield* Clank.text({
232
- message: "Axiom API Base URL (Enter for default)",
233
- placeholder: DEFAULT_API_BASE_URL,
234
- defaultValue: DEFAULT_API_BASE_URL,
235
- }).pipe(retryOnce);
236
- const apiBaseUrl =
237
- apiBaseUrlPrompt && apiBaseUrlPrompt.length > 0
238
- ? apiBaseUrlPrompt
239
- : undefined;
167
+ const configureInteractive = (profileName: string) =>
168
+ Clank.select({
169
+ message: "Axiom authentication method",
170
+ options,
171
+ }).pipe(
172
+ Effect.flatMap((method) =>
173
+ Match.value(method).pipe(
174
+ Match.when("env", () => Effect.succeed({ method: "env" as const })),
175
+ Match.when("stored", () => loginStored(profileName)),
176
+ Match.exhaustive,
177
+ ),
178
+ ),
179
+ );
240
180
 
241
- return yield* Match.value(credentialType).pipe(
242
- Match.when("apiToken", () =>
181
+ const configureCredentials = (profileName: string, ctx: ConfigureContext) =>
243
182
  Effect.gen(function* () {
244
- const apiToken = yield* Clank.password({
245
- message: "Axiom API Token",
246
- validate: (v) => (v.length === 0 ? "Required" : undefined),
247
- }).pipe(retryOnce);
248
- const orgId = yield* promptOrgId(false);
183
+ if (ctx.ci) {
184
+ return { method: "env" as const };
185
+ }
186
+ return yield* configureInteractive(profileName);
187
+ }).pipe(
188
+ Effect.mapError(
189
+ (e) =>
190
+ new AuthError({
191
+ message: "failed to configure credentials",
192
+ cause: e,
193
+ }),
194
+ ),
195
+ );
249
196
 
250
- yield* writeCredentials<AxiomStoredCredentials>(
251
- profileName,
252
- STORAGE_KEY,
253
- {
254
- type: "apiToken",
255
- apiToken,
256
- apiBaseUrl,
257
- orgId: orgId && orgId.length > 0 ? orgId : undefined,
258
- },
259
- );
260
- yield* Clank.success("Axiom: credentials saved.");
261
- return {
262
- method: "stored" as const,
263
- credentialType: "apiToken" as const,
264
- };
265
- }),
266
- ),
267
- Match.when("pat", () =>
268
- Effect.gen(function* () {
269
- const apiToken = yield* Clank.password({
270
- message: "Axiom Personal Access Token",
271
- validate: (v) => (v.length === 0 ? "Required" : undefined),
272
- }).pipe(retryOnce);
273
- const orgId = yield* promptOrgId(true);
197
+ const resolveCredentials = (
198
+ profileName: string,
199
+ config: AxiomAuthConfig,
200
+ ): Effect.Effect<AxiomResolvedCredentials, AuthError> =>
201
+ Match.value(config).pipe(
202
+ Match.when(
203
+ { method: "env" },
204
+ Effect.fnUntraced(function* () {
205
+ const apiToken =
206
+ (yield* getEnvRedacted("AXIOM_TOKEN")) ??
207
+ (yield* getEnvRedacted("AXIOM_API_KEY"));
208
+ if (!apiToken) {
209
+ return yield* new AuthError({
210
+ message:
211
+ "Axiom env credentials not found. Set AXIOM_TOKEN (or AXIOM_API_KEY).",
212
+ });
213
+ }
214
+ const apiBaseUrl =
215
+ (yield* getEnv("AXIOM_URL")) ?? DEFAULT_API_BASE_URL;
216
+ const orgId = yield* getEnv("AXIOM_ORG_ID");
217
+ if (orgId) {
218
+ return {
219
+ type: "pat" as const,
220
+ apiToken,
221
+ apiBaseUrl,
222
+ orgId,
223
+ source: { type: "env" as const },
224
+ };
225
+ }
226
+ return {
227
+ type: "apiToken" as const,
228
+ apiToken,
229
+ apiBaseUrl,
230
+ source: { type: "env" as const },
231
+ };
232
+ }),
233
+ ),
234
+ Match.when({ method: "stored" }, () =>
235
+ store.read<AxiomStoredCredentials>(profileName, STORAGE_KEY).pipe(
236
+ Effect.flatMap((creds) =>
237
+ creds == null
238
+ ? Effect.fail(
239
+ new AuthError({
240
+ message:
241
+ "Axiom stored credentials not found. Run: alchemy login --configure",
242
+ }),
243
+ )
244
+ : Effect.succeed(
245
+ Match.value(creds).pipe(
246
+ Match.when({ type: "apiToken" }, (c) => ({
247
+ type: "apiToken" as const,
248
+ apiToken: Redacted.make(c.apiToken),
249
+ apiBaseUrl: c.apiBaseUrl ?? DEFAULT_API_BASE_URL,
250
+ orgId: c.orgId,
251
+ source: { type: "stored" as const },
252
+ })),
253
+ Match.when({ type: "pat" }, (c) => ({
254
+ type: "pat" as const,
255
+ apiToken: Redacted.make(c.apiToken),
256
+ apiBaseUrl: c.apiBaseUrl ?? DEFAULT_API_BASE_URL,
257
+ orgId: c.orgId,
258
+ source: { type: "stored" as const },
259
+ })),
260
+ Match.exhaustive,
261
+ ),
262
+ ),
263
+ ),
264
+ ),
265
+ ),
266
+ Match.exhaustive,
267
+ );
274
268
 
275
- yield* writeCredentials<AxiomStoredCredentials>(
276
- profileName,
277
- STORAGE_KEY,
278
- { type: "pat", apiToken, apiBaseUrl, orgId },
279
- );
280
- yield* Clank.success("Axiom: credentials saved.");
281
- return {
282
- method: "stored" as const,
283
- credentialType: "pat" as const,
284
- };
285
- }),
286
- ),
287
- Match.exhaustive,
288
- );
289
- });
269
+ const logout = (profileName: string, config: AxiomAuthConfig) =>
270
+ Match.value(config).pipe(
271
+ Match.when({ method: "env" }, () => Effect.void),
272
+ Match.when({ method: "stored" }, () =>
273
+ store
274
+ .delete(profileName, STORAGE_KEY)
275
+ .pipe(
276
+ Effect.andThen(
277
+ Clank.success("Axiom: stored credentials removed"),
278
+ ),
279
+ ),
280
+ ),
281
+ Match.exhaustive,
282
+ );
290
283
 
291
- const promptOrgId = (required: boolean) =>
292
- getEnv("AXIOM_ORG_ID").pipe(
293
- Effect.flatMap((envOrgId) =>
294
- Clank.text({
295
- message: required
296
- ? "Axiom Org ID (required for PAT)"
297
- : "Axiom Org ID (Enter to skip)",
298
- placeholder: envOrgId ?? "",
299
- defaultValue: envOrgId ?? "",
300
- validate: required
301
- ? (v) => (v.length === 0 ? "Required" : undefined)
302
- : undefined,
303
- }).pipe(retryOnce),
304
- ),
305
- );
284
+ const login = (profileName: string, config: AxiomAuthConfig) =>
285
+ Match.value(config)
286
+ .pipe(
287
+ Match.when({ method: "env" }, () => Effect.void),
288
+ Match.when({ method: "stored" }, () =>
289
+ store
290
+ .read<AxiomStoredCredentials>(profileName, STORAGE_KEY)
291
+ .pipe(
292
+ Effect.flatMap((creds) =>
293
+ creds == null ? loginStored(profileName) : Effect.void,
294
+ ),
295
+ ),
296
+ ),
297
+ Match.exhaustive,
298
+ )
299
+ .pipe(
300
+ Effect.mapError(
301
+ (e) => new AuthError({ message: "login failed", cause: e }),
302
+ ),
303
+ );
306
304
 
307
- const prettyPrint = (profileName: string, config: AxiomAuthConfig) =>
308
- resolveCredentials(profileName, config).pipe(
309
- Effect.tap((creds) => {
310
- const sourceStr = creds.source.details
311
- ? `${creds.source.type} - ${creds.source.details}`
312
- : creds.source.type;
313
- return Match.value(creds).pipe(
314
- Match.when({ type: "apiToken" }, (c) =>
315
- Effect.all([
316
- Console.log(` apiToken: ${displayRedacted(c.apiToken, 9)}`),
317
- Console.log(` apiBaseUrl: ${c.apiBaseUrl}`),
318
- Console.log(` orgId: ${c.orgId ?? "(none)"}`),
319
- Console.log(` source: ${sourceStr}`),
320
- ]),
321
- ),
322
- Match.when({ type: "pat" }, (c) =>
323
- Effect.all([
324
- Console.log(` apiToken: ${displayRedacted(c.apiToken, 9)}`),
325
- Console.log(` apiBaseUrl: ${c.apiBaseUrl}`),
326
- Console.log(` orgId: ${c.orgId}`),
327
- Console.log(` source: ${sourceStr}`),
328
- ]),
305
+ const prettyPrint = (profileName: string, config: AxiomAuthConfig) =>
306
+ resolveCredentials(profileName, config).pipe(
307
+ Effect.tap((creds) => {
308
+ const sourceStr = creds.source.details
309
+ ? `${creds.source.type} - ${creds.source.details}`
310
+ : creds.source.type;
311
+ return Match.value(creds).pipe(
312
+ Match.when({ type: "apiToken" }, (c) =>
313
+ Effect.all([
314
+ Console.log(` apiToken: ${displayRedacted(c.apiToken, 9)}`),
315
+ Console.log(` apiBaseUrl: ${c.apiBaseUrl}`),
316
+ Console.log(` orgId: ${c.orgId ?? "(none)"}`),
317
+ Console.log(` source: ${sourceStr}`),
318
+ ]),
319
+ ),
320
+ Match.when({ type: "pat" }, (c) =>
321
+ Effect.all([
322
+ Console.log(` apiToken: ${displayRedacted(c.apiToken, 9)}`),
323
+ Console.log(` apiBaseUrl: ${c.apiBaseUrl}`),
324
+ Console.log(` orgId: ${c.orgId}`),
325
+ Console.log(` source: ${sourceStr}`),
326
+ ]),
327
+ ),
328
+ Match.exhaustive,
329
+ );
330
+ }),
331
+ Effect.catch((e) =>
332
+ Console.error(` Failed to retrieve credentials: ${e}`),
329
333
  ),
330
- Match.exhaustive,
331
334
  );
332
- }),
333
- Effect.catch((e) =>
334
- Console.error(` Failed to retrieve credentials: ${e}`),
335
- ),
336
- );
335
+
336
+ return {
337
+ configure: configureCredentials,
338
+ logout,
339
+ login,
340
+ prettyPrint,
341
+ read: resolveCredentials,
342
+ };
343
+ }),
344
+ );
@@ -5,7 +5,7 @@ import * as Effect from "effect/Effect";
5
5
  import * as Layer from "effect/Layer";
6
6
  import * as Match from "effect/Match";
7
7
  import { getAuthProvider } from "../Auth/AuthProvider.ts";
8
- import { ALCHEMY_PROFILE, loadOrConfigure } from "../Auth/Profile.ts";
8
+ import { ALCHEMY_PROFILE, Profile } from "../Auth/Profile.ts";
9
9
  import {
10
10
  AXIOM_AUTH_PROVIDER_NAME,
11
11
  type AxiomAuthConfig,
@@ -27,15 +27,15 @@ export const fromAuthProvider = () =>
27
27
  Layer.effect(
28
28
  Credentials,
29
29
  Effect.gen(function* () {
30
+ const profile = yield* Profile;
30
31
  const auth = yield* getAuthProvider<
31
32
  AxiomAuthConfig,
32
33
  AxiomResolvedCredentials
33
34
  >(AXIOM_AUTH_PROVIDER_NAME);
34
35
  const profileName = yield* ALCHEMY_PROFILE;
35
36
  const ci = yield* Config.boolean("CI").pipe(Config.withDefault(false));
36
- const ctx = yield* Effect.context<never>();
37
37
 
38
- return yield* loadOrConfigure(auth, profileName, { ci }).pipe(
38
+ return yield* profile.loadOrConfigure(auth, profileName, { ci }).pipe(
39
39
  Effect.flatMap((config) =>
40
40
  auth.read(profileName, config as AxiomAuthConfig),
41
41
  ),
@@ -60,7 +60,6 @@ export const fromAuthProvider = () =>
60
60
  message: `Failed to resolve Axiom credentials for profile '${profileName}': ${(e as { message?: string }).message ?? String(e)}`,
61
61
  }),
62
62
  ),
63
- Effect.provide(ctx),
64
63
  );
65
64
  }),
66
65
  );
@@ -1,5 +1,7 @@
1
1
  import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
2
2
  import * as Layer from "effect/Layer";
3
+ import { CredentialsStoreLive } from "../Auth/Credentials.ts";
4
+ import { ProfileLive } from "../Auth/Profile.ts";
3
5
  import * as Provider from "../Provider.ts";
4
6
  import { Annotation, AnnotationProvider } from "./Annotation.ts";
5
7
  import { ApiToken, ApiTokenProvider } from "./ApiToken.ts";
@@ -54,5 +56,7 @@ export const providers = () =>
54
56
  Layer.provideMerge(Credentials.fromAuthProvider()),
55
57
  Layer.provideMerge(FetchHttpClient.layer),
56
58
  Layer.provideMerge(AxiomAuth),
59
+ Layer.provideMerge(ProfileLive),
60
+ Layer.provideMerge(CredentialsStoreLive),
57
61
  Layer.orDie,
58
62
  );