@alchemy.run/modal 0.0.0 → 2.0.0-beta.87

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 (499) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +96 -4
  3. package/lib/App.d.ts +143 -0
  4. package/lib/App.d.ts.map +1 -0
  5. package/lib/App.js +198 -0
  6. package/lib/App.js.map +1 -0
  7. package/lib/AuthProvider.d.ts +53 -0
  8. package/lib/AuthProvider.d.ts.map +1 -0
  9. package/lib/AuthProvider.js +209 -0
  10. package/lib/AuthProvider.js.map +1 -0
  11. package/lib/BindingHttp.d.ts +56 -0
  12. package/lib/BindingHttp.d.ts.map +1 -0
  13. package/lib/BindingHttp.js +50 -0
  14. package/lib/BindingHttp.js.map +1 -0
  15. package/lib/Blob.d.ts +34 -0
  16. package/lib/Blob.d.ts.map +1 -0
  17. package/lib/Blob.js +59 -0
  18. package/lib/Blob.js.map +1 -0
  19. package/lib/Bootstrap.d.ts +8 -0
  20. package/lib/Bootstrap.d.ts.map +1 -0
  21. package/lib/Bootstrap.js +26 -0
  22. package/lib/Bootstrap.js.map +1 -0
  23. package/lib/Cbor.d.ts +10 -0
  24. package/lib/Cbor.d.ts.map +1 -0
  25. package/lib/Cbor.js +177 -0
  26. package/lib/Cbor.js.map +1 -0
  27. package/lib/ConnectSandbox.d.ts +64 -0
  28. package/lib/ConnectSandbox.d.ts.map +1 -0
  29. package/lib/ConnectSandbox.js +33 -0
  30. package/lib/ConnectSandbox.js.map +1 -0
  31. package/lib/Container.d.ts +124 -0
  32. package/lib/Container.d.ts.map +1 -0
  33. package/lib/Container.js +1 -0
  34. package/lib/Container.js.map +1 -0
  35. package/lib/Contributions.d.ts +7 -0
  36. package/lib/Contributions.d.ts.map +1 -0
  37. package/lib/Contributions.js +6 -0
  38. package/lib/Contributions.js.map +1 -0
  39. package/lib/CreateDict.d.ts +83 -0
  40. package/lib/CreateDict.d.ts.map +1 -0
  41. package/lib/CreateDict.js +3 -0
  42. package/lib/CreateDict.js.map +1 -0
  43. package/lib/CreateDictHttp.d.ts +33 -0
  44. package/lib/CreateDictHttp.d.ts.map +1 -0
  45. package/lib/CreateDictHttp.js +67 -0
  46. package/lib/CreateDictHttp.js.map +1 -0
  47. package/lib/CreateImage.d.ts +98 -0
  48. package/lib/CreateImage.d.ts.map +1 -0
  49. package/lib/CreateImage.js +3 -0
  50. package/lib/CreateImage.js.map +1 -0
  51. package/lib/CreateImageHttp.d.ts +51 -0
  52. package/lib/CreateImageHttp.d.ts.map +1 -0
  53. package/lib/CreateImageHttp.js +87 -0
  54. package/lib/CreateImageHttp.js.map +1 -0
  55. package/lib/CreateQueue.d.ts +83 -0
  56. package/lib/CreateQueue.d.ts.map +1 -0
  57. package/lib/CreateQueue.js +3 -0
  58. package/lib/CreateQueue.js.map +1 -0
  59. package/lib/CreateQueueHttp.d.ts +31 -0
  60. package/lib/CreateQueueHttp.d.ts.map +1 -0
  61. package/lib/CreateQueueHttp.js +67 -0
  62. package/lib/CreateQueueHttp.js.map +1 -0
  63. package/lib/CreateSandbox.d.ts +186 -0
  64. package/lib/CreateSandbox.d.ts.map +1 -0
  65. package/lib/CreateSandbox.js +3 -0
  66. package/lib/CreateSandbox.js.map +1 -0
  67. package/lib/CreateSandboxHttp.d.ts +17 -0
  68. package/lib/CreateSandboxHttp.d.ts.map +1 -0
  69. package/lib/CreateSandboxHttp.js +117 -0
  70. package/lib/CreateSandboxHttp.js.map +1 -0
  71. package/lib/CreateSecret.d.ts +95 -0
  72. package/lib/CreateSecret.d.ts.map +1 -0
  73. package/lib/CreateSecret.js +3 -0
  74. package/lib/CreateSecret.js.map +1 -0
  75. package/lib/CreateSecretHttp.d.ts +24 -0
  76. package/lib/CreateSecretHttp.d.ts.map +1 -0
  77. package/lib/CreateSecretHttp.js +60 -0
  78. package/lib/CreateSecretHttp.js.map +1 -0
  79. package/lib/CreateVolume.d.ts +84 -0
  80. package/lib/CreateVolume.d.ts.map +1 -0
  81. package/lib/CreateVolume.js +3 -0
  82. package/lib/CreateVolume.js.map +1 -0
  83. package/lib/CreateVolumeHttp.d.ts +32 -0
  84. package/lib/CreateVolumeHttp.d.ts.map +1 -0
  85. package/lib/CreateVolumeHttp.js +69 -0
  86. package/lib/CreateVolumeHttp.js.map +1 -0
  87. package/lib/Credentials.d.ts +32 -0
  88. package/lib/Credentials.d.ts.map +1 -0
  89. package/lib/Credentials.js +44 -0
  90. package/lib/Credentials.js.map +1 -0
  91. package/lib/Dict.d.ts +147 -0
  92. package/lib/Dict.d.ts.map +1 -0
  93. package/lib/Dict.js +175 -0
  94. package/lib/Dict.js.map +1 -0
  95. package/lib/DictClient.d.ts +55 -0
  96. package/lib/DictClient.d.ts.map +1 -0
  97. package/lib/DictClient.js +89 -0
  98. package/lib/DictClient.js.map +1 -0
  99. package/lib/Domain.d.ts +86 -0
  100. package/lib/Domain.d.ts.map +1 -0
  101. package/lib/Domain.js +113 -0
  102. package/lib/Domain.js.map +1 -0
  103. package/lib/Endpoint.d.ts +181 -0
  104. package/lib/Endpoint.d.ts.map +1 -0
  105. package/lib/Endpoint.js +283 -0
  106. package/lib/Endpoint.js.map +1 -0
  107. package/lib/Environment.d.ts +174 -0
  108. package/lib/Environment.d.ts.map +1 -0
  109. package/lib/Environment.js +244 -0
  110. package/lib/Environment.js.map +1 -0
  111. package/lib/FetchServer.d.ts +105 -0
  112. package/lib/FetchServer.d.ts.map +1 -0
  113. package/lib/FetchServer.js +3 -0
  114. package/lib/FetchServer.js.map +1 -0
  115. package/lib/FetchServerHttp.d.ts +21 -0
  116. package/lib/FetchServerHttp.d.ts.map +1 -0
  117. package/lib/FetchServerHttp.js +84 -0
  118. package/lib/FetchServerHttp.js.map +1 -0
  119. package/lib/Function.d.ts +236 -0
  120. package/lib/Function.d.ts.map +1 -0
  121. package/lib/Function.js +273 -0
  122. package/lib/Function.js.map +1 -0
  123. package/lib/FunctionAutoscaler.d.ts +99 -0
  124. package/lib/FunctionAutoscaler.d.ts.map +1 -0
  125. package/lib/FunctionAutoscaler.js +136 -0
  126. package/lib/FunctionAutoscaler.js.map +1 -0
  127. package/lib/FunctionTarget.d.ts +61 -0
  128. package/lib/FunctionTarget.d.ts.map +1 -0
  129. package/lib/FunctionTarget.js +136 -0
  130. package/lib/FunctionTarget.js.map +1 -0
  131. package/lib/Image.d.ts +159 -0
  132. package/lib/Image.d.ts.map +1 -0
  133. package/lib/Image.js +203 -0
  134. package/lib/Image.js.map +1 -0
  135. package/lib/ImageBuild.d.ts +108 -0
  136. package/lib/ImageBuild.d.ts.map +1 -0
  137. package/lib/ImageBuild.js +157 -0
  138. package/lib/ImageBuild.js.map +1 -0
  139. package/lib/ImagePlan.d.ts +31 -0
  140. package/lib/ImagePlan.d.ts.map +1 -0
  141. package/lib/ImagePlan.js +70 -0
  142. package/lib/ImagePlan.js.map +1 -0
  143. package/lib/InferEnv.d.ts +26 -0
  144. package/lib/InferEnv.d.ts.map +1 -0
  145. package/lib/InferEnv.js +1 -0
  146. package/lib/InferEnv.js.map +1 -0
  147. package/lib/InvokeFunction.d.ts +186 -0
  148. package/lib/InvokeFunction.d.ts.map +1 -0
  149. package/lib/InvokeFunction.js +10 -0
  150. package/lib/InvokeFunction.js.map +1 -0
  151. package/lib/InvokeFunctionHttp.d.ts +39 -0
  152. package/lib/InvokeFunctionHttp.d.ts.map +1 -0
  153. package/lib/InvokeFunctionHttp.js +210 -0
  154. package/lib/InvokeFunctionHttp.js.map +1 -0
  155. package/lib/ModalBindings.d.ts +138 -0
  156. package/lib/ModalBindings.d.ts.map +1 -0
  157. package/lib/ModalBindings.js +223 -0
  158. package/lib/ModalBindings.js.map +1 -0
  159. package/lib/MountBucket.d.ts +80 -0
  160. package/lib/MountBucket.d.ts.map +1 -0
  161. package/lib/MountBucket.js +44 -0
  162. package/lib/MountBucket.js.map +1 -0
  163. package/lib/MountVolume.d.ts +77 -0
  164. package/lib/MountVolume.d.ts.map +1 -0
  165. package/lib/MountVolume.js +41 -0
  166. package/lib/MountVolume.js.map +1 -0
  167. package/lib/Mounts.d.ts +134 -0
  168. package/lib/Mounts.d.ts.map +1 -0
  169. package/lib/Mounts.js +87 -0
  170. package/lib/Mounts.js.map +1 -0
  171. package/lib/PersistentSandbox.d.ts +75 -0
  172. package/lib/PersistentSandbox.d.ts.map +1 -0
  173. package/lib/PersistentSandbox.js +93 -0
  174. package/lib/PersistentSandbox.js.map +1 -0
  175. package/lib/Providers.d.ts +23 -0
  176. package/lib/Providers.d.ts.map +1 -0
  177. package/lib/Providers.js +64 -0
  178. package/lib/Providers.js.map +1 -0
  179. package/lib/Proxy.d.ts +94 -0
  180. package/lib/Proxy.d.ts.map +1 -0
  181. package/lib/Proxy.js +132 -0
  182. package/lib/Proxy.js.map +1 -0
  183. package/lib/Queue.d.ts +147 -0
  184. package/lib/Queue.d.ts.map +1 -0
  185. package/lib/Queue.js +177 -0
  186. package/lib/Queue.js.map +1 -0
  187. package/lib/QueueClient.d.ts +64 -0
  188. package/lib/QueueClient.d.ts.map +1 -0
  189. package/lib/QueueClient.js +73 -0
  190. package/lib/QueueClient.js.map +1 -0
  191. package/lib/ReadApp.d.ts +85 -0
  192. package/lib/ReadApp.d.ts.map +1 -0
  193. package/lib/ReadApp.js +3 -0
  194. package/lib/ReadApp.js.map +1 -0
  195. package/lib/ReadAppHttp.d.ts +26 -0
  196. package/lib/ReadAppHttp.d.ts.map +1 -0
  197. package/lib/ReadAppHttp.js +106 -0
  198. package/lib/ReadAppHttp.js.map +1 -0
  199. package/lib/ReadDict.d.ts +39 -0
  200. package/lib/ReadDict.d.ts.map +1 -0
  201. package/lib/ReadDict.js +3 -0
  202. package/lib/ReadDict.js.map +1 -0
  203. package/lib/ReadDictHttp.d.ts +12 -0
  204. package/lib/ReadDictHttp.d.ts.map +1 -0
  205. package/lib/ReadDictHttp.js +23 -0
  206. package/lib/ReadDictHttp.js.map +1 -0
  207. package/lib/ReadFunction.d.ts +73 -0
  208. package/lib/ReadFunction.d.ts.map +1 -0
  209. package/lib/ReadFunction.js +3 -0
  210. package/lib/ReadFunction.js.map +1 -0
  211. package/lib/ReadFunctionHttp.d.ts +25 -0
  212. package/lib/ReadFunctionHttp.d.ts.map +1 -0
  213. package/lib/ReadFunctionHttp.js +63 -0
  214. package/lib/ReadFunctionHttp.js.map +1 -0
  215. package/lib/ReadQueue.d.ts +39 -0
  216. package/lib/ReadQueue.d.ts.map +1 -0
  217. package/lib/ReadQueue.js +3 -0
  218. package/lib/ReadQueue.js.map +1 -0
  219. package/lib/ReadQueueHttp.d.ts +12 -0
  220. package/lib/ReadQueueHttp.d.ts.map +1 -0
  221. package/lib/ReadQueueHttp.js +23 -0
  222. package/lib/ReadQueueHttp.js.map +1 -0
  223. package/lib/ReadServer.d.ts +72 -0
  224. package/lib/ReadServer.d.ts.map +1 -0
  225. package/lib/ReadServer.js +3 -0
  226. package/lib/ReadServer.js.map +1 -0
  227. package/lib/ReadServerHttp.d.ts +25 -0
  228. package/lib/ReadServerHttp.d.ts.map +1 -0
  229. package/lib/ReadServerHttp.js +70 -0
  230. package/lib/ReadServerHttp.js.map +1 -0
  231. package/lib/ReadVolume.d.ts +40 -0
  232. package/lib/ReadVolume.d.ts.map +1 -0
  233. package/lib/ReadVolume.js +3 -0
  234. package/lib/ReadVolume.js.map +1 -0
  235. package/lib/ReadVolumeHttp.d.ts +12 -0
  236. package/lib/ReadVolumeHttp.d.ts.map +1 -0
  237. package/lib/ReadVolumeHttp.js +24 -0
  238. package/lib/ReadVolumeHttp.js.map +1 -0
  239. package/lib/ReadWriteDict.d.ts +39 -0
  240. package/lib/ReadWriteDict.d.ts.map +1 -0
  241. package/lib/ReadWriteDict.js +3 -0
  242. package/lib/ReadWriteDict.js.map +1 -0
  243. package/lib/ReadWriteDictHttp.d.ts +12 -0
  244. package/lib/ReadWriteDictHttp.d.ts.map +1 -0
  245. package/lib/ReadWriteDictHttp.js +23 -0
  246. package/lib/ReadWriteDictHttp.js.map +1 -0
  247. package/lib/ReadWriteQueue.d.ts +40 -0
  248. package/lib/ReadWriteQueue.d.ts.map +1 -0
  249. package/lib/ReadWriteQueue.js +3 -0
  250. package/lib/ReadWriteQueue.js.map +1 -0
  251. package/lib/ReadWriteQueueHttp.d.ts +12 -0
  252. package/lib/ReadWriteQueueHttp.d.ts.map +1 -0
  253. package/lib/ReadWriteQueueHttp.js +23 -0
  254. package/lib/ReadWriteQueueHttp.js.map +1 -0
  255. package/lib/ReadWriteVolume.d.ts +40 -0
  256. package/lib/ReadWriteVolume.d.ts.map +1 -0
  257. package/lib/ReadWriteVolume.js +3 -0
  258. package/lib/ReadWriteVolume.js.map +1 -0
  259. package/lib/ReadWriteVolumeHttp.d.ts +12 -0
  260. package/lib/ReadWriteVolumeHttp.d.ts.map +1 -0
  261. package/lib/ReadWriteVolumeHttp.js +24 -0
  262. package/lib/ReadWriteVolumeHttp.js.map +1 -0
  263. package/lib/RuntimeOwner.d.ts +39 -0
  264. package/lib/RuntimeOwner.d.ts.map +1 -0
  265. package/lib/RuntimeOwner.js +85 -0
  266. package/lib/RuntimeOwner.js.map +1 -0
  267. package/lib/Sandbox.d.ts +215 -0
  268. package/lib/Sandbox.d.ts.map +1 -0
  269. package/lib/Sandbox.js +278 -0
  270. package/lib/Sandbox.js.map +1 -0
  271. package/lib/SandboxClient.d.ts +748 -0
  272. package/lib/SandboxClient.d.ts.map +1 -0
  273. package/lib/SandboxClient.js +710 -0
  274. package/lib/SandboxClient.js.map +1 -0
  275. package/lib/ScaleFunction.d.ts +54 -0
  276. package/lib/ScaleFunction.d.ts.map +1 -0
  277. package/lib/ScaleFunction.js +3 -0
  278. package/lib/ScaleFunction.js.map +1 -0
  279. package/lib/ScaleFunctionHttp.d.ts +21 -0
  280. package/lib/ScaleFunctionHttp.d.ts.map +1 -0
  281. package/lib/ScaleFunctionHttp.js +39 -0
  282. package/lib/ScaleFunctionHttp.js.map +1 -0
  283. package/lib/Secret.d.ts +170 -0
  284. package/lib/Secret.d.ts.map +1 -0
  285. package/lib/Secret.js +196 -0
  286. package/lib/Secret.js.map +1 -0
  287. package/lib/Server.d.ts +155 -0
  288. package/lib/Server.d.ts.map +1 -0
  289. package/lib/Server.js +184 -0
  290. package/lib/Server.js.map +1 -0
  291. package/lib/ServiceUser.d.ts +139 -0
  292. package/lib/ServiceUser.d.ts.map +1 -0
  293. package/lib/ServiceUser.js +210 -0
  294. package/lib/ServiceUser.js.map +1 -0
  295. package/lib/Volume.d.ts +170 -0
  296. package/lib/Volume.d.ts.map +1 -0
  297. package/lib/Volume.js +220 -0
  298. package/lib/Volume.js.map +1 -0
  299. package/lib/VolumeClient.d.ts +53 -0
  300. package/lib/VolumeClient.d.ts.map +1 -0
  301. package/lib/VolumeClient.js +22 -0
  302. package/lib/VolumeClient.js.map +1 -0
  303. package/lib/VolumeFiles.d.ts +94 -0
  304. package/lib/VolumeFiles.d.ts.map +1 -0
  305. package/lib/VolumeFiles.js +139 -0
  306. package/lib/VolumeFiles.js.map +1 -0
  307. package/lib/WebhookToken.d.ts +102 -0
  308. package/lib/WebhookToken.d.ts.map +1 -0
  309. package/lib/WebhookToken.js +176 -0
  310. package/lib/WebhookToken.js.map +1 -0
  311. package/lib/WorkspaceSettings.d.ts +70 -0
  312. package/lib/WorkspaceSettings.d.ts.map +1 -0
  313. package/lib/WorkspaceSettings.js +105 -0
  314. package/lib/WorkspaceSettings.js.map +1 -0
  315. package/lib/WriteApp.d.ts +38 -0
  316. package/lib/WriteApp.d.ts.map +1 -0
  317. package/lib/WriteApp.js +3 -0
  318. package/lib/WriteApp.js.map +1 -0
  319. package/lib/WriteAppHttp.d.ts +23 -0
  320. package/lib/WriteAppHttp.d.ts.map +1 -0
  321. package/lib/WriteAppHttp.js +36 -0
  322. package/lib/WriteAppHttp.js.map +1 -0
  323. package/lib/WriteDict.d.ts +39 -0
  324. package/lib/WriteDict.d.ts.map +1 -0
  325. package/lib/WriteDict.js +3 -0
  326. package/lib/WriteDict.js.map +1 -0
  327. package/lib/WriteDictHttp.d.ts +12 -0
  328. package/lib/WriteDictHttp.d.ts.map +1 -0
  329. package/lib/WriteDictHttp.js +23 -0
  330. package/lib/WriteDictHttp.js.map +1 -0
  331. package/lib/WriteQueue.d.ts +39 -0
  332. package/lib/WriteQueue.d.ts.map +1 -0
  333. package/lib/WriteQueue.js +3 -0
  334. package/lib/WriteQueue.js.map +1 -0
  335. package/lib/WriteQueueHttp.d.ts +12 -0
  336. package/lib/WriteQueueHttp.d.ts.map +1 -0
  337. package/lib/WriteQueueHttp.js +23 -0
  338. package/lib/WriteQueueHttp.js.map +1 -0
  339. package/lib/WriteSecret.d.ts +53 -0
  340. package/lib/WriteSecret.d.ts.map +1 -0
  341. package/lib/WriteSecret.js +3 -0
  342. package/lib/WriteSecret.js.map +1 -0
  343. package/lib/WriteSecretHttp.d.ts +23 -0
  344. package/lib/WriteSecretHttp.d.ts.map +1 -0
  345. package/lib/WriteSecretHttp.js +44 -0
  346. package/lib/WriteSecretHttp.js.map +1 -0
  347. package/lib/WriteVolume.d.ts +39 -0
  348. package/lib/WriteVolume.d.ts.map +1 -0
  349. package/lib/WriteVolume.js +3 -0
  350. package/lib/WriteVolume.js.map +1 -0
  351. package/lib/WriteVolumeHttp.d.ts +12 -0
  352. package/lib/WriteVolumeHttp.d.ts.map +1 -0
  353. package/lib/WriteVolumeHttp.js +24 -0
  354. package/lib/WriteVolumeHttp.js.map +1 -0
  355. package/lib/index.d.ts +80 -0
  356. package/lib/index.d.ts.map +1 -0
  357. package/lib/index.js +78 -0
  358. package/lib/index.js.map +1 -0
  359. package/lib/internal/Declared.d.ts +29 -0
  360. package/lib/internal/Declared.d.ts.map +1 -0
  361. package/lib/internal/Declared.js +31 -0
  362. package/lib/internal/Declared.js.map +1 -0
  363. package/lib/internal/Deploy.d.ts +110 -0
  364. package/lib/internal/Deploy.d.ts.map +1 -0
  365. package/lib/internal/Deploy.js +230 -0
  366. package/lib/internal/Deploy.js.map +1 -0
  367. package/lib/internal/Entrypoint.d.ts +52 -0
  368. package/lib/internal/Entrypoint.d.ts.map +1 -0
  369. package/lib/internal/Entrypoint.js +193 -0
  370. package/lib/internal/Entrypoint.js.map +1 -0
  371. package/lib/internal/Rpc.d.ts +17 -0
  372. package/lib/internal/Rpc.d.ts.map +1 -0
  373. package/lib/internal/Rpc.js +49 -0
  374. package/lib/internal/Rpc.js.map +1 -0
  375. package/lib/internal/RpcAuth.d.ts +41 -0
  376. package/lib/internal/RpcAuth.d.ts.map +1 -0
  377. package/lib/internal/RpcAuth.js +100 -0
  378. package/lib/internal/RpcAuth.js.map +1 -0
  379. package/lib/internal/Runtime.d.ts +127 -0
  380. package/lib/internal/Runtime.d.ts.map +1 -0
  381. package/lib/internal/Runtime.js +246 -0
  382. package/lib/internal/Runtime.js.map +1 -0
  383. package/lib/internal/Tags.d.ts +19 -0
  384. package/lib/internal/Tags.d.ts.map +1 -0
  385. package/lib/internal/Tags.js +33 -0
  386. package/lib/internal/Tags.js.map +1 -0
  387. package/lib/internal/TcpConnect.d.ts +12 -0
  388. package/lib/internal/TcpConnect.d.ts.map +1 -0
  389. package/lib/internal/TcpConnect.js +46 -0
  390. package/lib/internal/TcpConnect.js.map +1 -0
  391. package/lib/internal/Transport.d.ts +13 -0
  392. package/lib/internal/Transport.d.ts.map +1 -0
  393. package/lib/internal/Transport.js +16 -0
  394. package/lib/internal/Transport.js.map +1 -0
  395. package/lib/internal.d.ts +71 -0
  396. package/lib/internal.d.ts.map +1 -0
  397. package/lib/internal.js +102 -0
  398. package/lib/internal.js.map +1 -0
  399. package/package.json +59 -3
  400. package/src/App.ts +262 -0
  401. package/src/AuthProvider.ts +295 -0
  402. package/src/BindingHttp.ts +112 -0
  403. package/src/Blob.ts +71 -0
  404. package/src/Bootstrap.ts +52 -0
  405. package/src/Cbor.ts +158 -0
  406. package/src/ConnectSandbox.ts +99 -0
  407. package/src/Container.ts +121 -0
  408. package/src/Contributions.ts +9 -0
  409. package/src/CreateDict.ts +95 -0
  410. package/src/CreateDictHttp.ts +91 -0
  411. package/src/CreateImage.ts +105 -0
  412. package/src/CreateImageHttp.ts +117 -0
  413. package/src/CreateQueue.ts +95 -0
  414. package/src/CreateQueueHttp.ts +91 -0
  415. package/src/CreateSandbox.ts +228 -0
  416. package/src/CreateSandboxHttp.ts +160 -0
  417. package/src/CreateSecret.ts +109 -0
  418. package/src/CreateSecretHttp.ts +83 -0
  419. package/src/CreateVolume.ts +96 -0
  420. package/src/CreateVolumeHttp.ts +93 -0
  421. package/src/Credentials.ts +74 -0
  422. package/src/Dict.ts +245 -0
  423. package/src/DictClient.ts +166 -0
  424. package/src/Domain.ts +147 -0
  425. package/src/Endpoint.ts +406 -0
  426. package/src/Environment.ts +373 -0
  427. package/src/FetchServer.ts +126 -0
  428. package/src/FetchServerHttp.ts +110 -0
  429. package/src/Function.ts +397 -0
  430. package/src/FunctionAutoscaler.ts +210 -0
  431. package/src/FunctionTarget.ts +181 -0
  432. package/src/Image.ts +281 -0
  433. package/src/ImageBuild.ts +228 -0
  434. package/src/ImagePlan.ts +78 -0
  435. package/src/InferEnv.ts +27 -0
  436. package/src/InvokeFunction.ts +211 -0
  437. package/src/InvokeFunctionHttp.ts +316 -0
  438. package/src/ModalBindings.ts +310 -0
  439. package/src/MountBucket.ts +137 -0
  440. package/src/MountVolume.ts +113 -0
  441. package/src/Mounts.ts +230 -0
  442. package/src/PersistentSandbox.ts +142 -0
  443. package/src/Providers.ts +100 -0
  444. package/src/Proxy.ts +191 -0
  445. package/src/Queue.ts +258 -0
  446. package/src/QueueClient.ts +149 -0
  447. package/src/ReadApp.ts +101 -0
  448. package/src/ReadAppHttp.ts +142 -0
  449. package/src/ReadDict.ts +44 -0
  450. package/src/ReadDictHttp.ts +27 -0
  451. package/src/ReadFunction.ts +107 -0
  452. package/src/ReadFunctionHttp.ts +91 -0
  453. package/src/ReadQueue.ts +44 -0
  454. package/src/ReadQueueHttp.ts +27 -0
  455. package/src/ReadServer.ts +98 -0
  456. package/src/ReadServerHttp.ts +101 -0
  457. package/src/ReadVolume.ts +45 -0
  458. package/src/ReadVolumeHttp.ts +28 -0
  459. package/src/ReadWriteDict.ts +44 -0
  460. package/src/ReadWriteDictHttp.ts +27 -0
  461. package/src/ReadWriteQueue.ts +45 -0
  462. package/src/ReadWriteQueueHttp.ts +27 -0
  463. package/src/ReadWriteVolume.ts +45 -0
  464. package/src/ReadWriteVolumeHttp.ts +28 -0
  465. package/src/RuntimeOwner.ts +111 -0
  466. package/src/Sandbox.ts +402 -0
  467. package/src/SandboxClient.ts +1404 -0
  468. package/src/ScaleFunction.ts +70 -0
  469. package/src/ScaleFunctionHttp.ts +54 -0
  470. package/src/Secret.ts +296 -0
  471. package/src/Server.ts +285 -0
  472. package/src/ServiceUser.ts +295 -0
  473. package/src/Volume.ts +320 -0
  474. package/src/VolumeClient.ts +108 -0
  475. package/src/VolumeFiles.ts +194 -0
  476. package/src/WebhookToken.ts +230 -0
  477. package/src/WorkspaceSettings.ts +160 -0
  478. package/src/WriteApp.ts +43 -0
  479. package/src/WriteAppHttp.ts +51 -0
  480. package/src/WriteDict.ts +44 -0
  481. package/src/WriteDictHttp.ts +27 -0
  482. package/src/WriteQueue.ts +44 -0
  483. package/src/WriteQueueHttp.ts +27 -0
  484. package/src/WriteSecret.ts +60 -0
  485. package/src/WriteSecretHttp.ts +56 -0
  486. package/src/WriteVolume.ts +44 -0
  487. package/src/WriteVolumeHttp.ts +28 -0
  488. package/src/globals.d.ts +2 -0
  489. package/src/index.ts +85 -0
  490. package/src/internal/Declared.ts +80 -0
  491. package/src/internal/Deploy.ts +309 -0
  492. package/src/internal/Entrypoint.ts +198 -0
  493. package/src/internal/Rpc.ts +59 -0
  494. package/src/internal/RpcAuth.ts +132 -0
  495. package/src/internal/Runtime.ts +386 -0
  496. package/src/internal/Tags.ts +44 -0
  497. package/src/internal/TcpConnect.ts +78 -0
  498. package/src/internal/Transport.ts +25 -0
  499. package/src/internal.ts +147 -0
@@ -0,0 +1,67 @@
1
+ import * as dict from "@distilled.cloud/modal/dict";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import { makeOpenModalBinding } from "./BindingHttp.js";
5
+ import { CreateDict } from "./CreateDict.js";
6
+ import { ensureDict, lookupDict } from "./Dict.js";
7
+ import { DictOps, makeReadWriteDictClient } from "./DictClient.js";
8
+ import { environmentOf, listAll, operations } from "./internal.js";
9
+ import { ownedName, RuntimeOwnerOf, unownedName } from "./RuntimeOwner.js";
10
+ /** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
11
+ export const DictsOps = operations({
12
+ getOrCreate: dict.dictGetOrCreate,
13
+ delete: dict.deleteDict,
14
+ list: dict.listDict,
15
+ client: DictOps,
16
+ });
17
+ const handleOf = (attributes, ops, name) => ({
18
+ ...makeReadWriteDictClient(Effect.succeed(attributes.dictId), ops.client),
19
+ dictId: Effect.succeed(attributes.dictId),
20
+ name,
21
+ attributes,
22
+ });
23
+ /** A dicts client over an environment name resolved per call. */
24
+ export const makeDictsClient = (environment, ops, owner = Effect.undefined) => ({
25
+ getOrCreate: (name) => Effect.flatMap(Effect.all([environment, owner]), ([env, stamp]) => ensureDict(ops.getOrCreate, ownedName(stamp, name), env)).pipe(Effect.map((attributes) => handleOf(attributes, ops, name))),
26
+ get: (name) => Effect.flatMap(Effect.all([environment, owner]), ([env, stamp]) => lookupDict(ops.getOrCreate, ownedName(stamp, name), env)).pipe(Effect.map((attributes) => (attributes ? handleOf(attributes, ops, name) : undefined))),
27
+ delete: (name) => Effect.gen(function* () {
28
+ const env = yield* environment;
29
+ const found = yield* lookupDict(ops.getOrCreate, ownedName(yield* owner, name), env);
30
+ if (!found)
31
+ return;
32
+ yield* ops
33
+ .delete({ dictId: found.dictId })
34
+ .pipe(Effect.catchTag("DictNotFound", () => Effect.void));
35
+ }),
36
+ list: () => Effect.gen(function* () {
37
+ const env = yield* environment;
38
+ const stamp = yield* owner;
39
+ const items = yield* listAll((pagination) => ops
40
+ .list({ environmentName: environmentOf(env), pagination })
41
+ .pipe(Effect.map((response) => response.dicts ?? [])), (item) => item.createdAt);
42
+ return items.flatMap((item) => {
43
+ const own = item.name ? unownedName(stamp, item.name) : undefined;
44
+ return own ? [own] : [];
45
+ });
46
+ }),
47
+ });
48
+ /**
49
+ * {@link CreateDict} over Modal's API. Grants the host's identity (a scoped
50
+ * `Modal.ServiceUser`) the `contributor` role on the environment.
51
+ *
52
+ * @layer
53
+ * @product Dict
54
+ * @provides Modal.CreateDict
55
+ */
56
+ export const CreateDictHttp = Layer.effect(CreateDict, makeOpenModalBinding({
57
+ tag: "Modal.CreateDict",
58
+ operations: DictsOps,
59
+ role: "contributor",
60
+ environmentOf: (environment) => environment?.name,
61
+ make: Effect.fn(function* (ops, environment) {
62
+ const name = environment ? yield* environment.name : Effect.undefined;
63
+ const owner = yield* RuntimeOwnerOf();
64
+ return makeDictsClient(name, ops, owner);
65
+ }),
66
+ }));
67
+ //# sourceMappingURL=CreateDictHttp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateDictHttp.js","sources":["../src/CreateDictHttp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
3
+ import type * as Effect from "effect/Effect";
4
+ import type { App } from "./App.ts";
5
+ import type { buildFromOptions, ImagesOps } from "./CreateImageHttp.ts";
6
+ import type { ErrorOf, OpError } from "./internal.ts";
7
+ /** What to build: Modal's image inputs, in memory (no build context directory). */
8
+ export interface ImageBuildOptions {
9
+ /** Start from a registry image. */
10
+ readonly image?: string;
11
+ /** Start from a Modal image (a deploy-time `Modal.Image`, or a snapshot). */
12
+ readonly from?: {
13
+ readonly imageId: string;
14
+ };
15
+ /** A whole Dockerfile as text (`FROM` included). Exclusive with `image`/`from`. */
16
+ readonly dockerfile?: string;
17
+ /** Dockerfile lines appended to the build. */
18
+ readonly commands?: ReadonlyArray<string>;
19
+ /** Files the commands `COPY`, by path relative to the build context. */
20
+ readonly files?: Record<string, string | Uint8Array>;
21
+ /** Secrets the build steps see as environment variables. */
22
+ readonly secrets?: ReadonlyArray<{
23
+ readonly secretId: string;
24
+ }>;
25
+ /** Run the build on a GPU. */
26
+ readonly gpu?: string;
27
+ /** Rebuild even when Modal has the same image cached. */
28
+ readonly force?: boolean;
29
+ }
30
+ /** Build images in one App at runtime. */
31
+ export interface ImagesClient {
32
+ /**
33
+ * Build an image (or return the cached one: Modal content-addresses
34
+ * builds) and wait until it's ready. Fails with `Modal.ImageBuildFailed`.
35
+ */
36
+ build(options: ImageBuildOptions): Effect.Effect<{
37
+ readonly imageId: string;
38
+ }, ErrorOf<typeof buildFromOptions>, RuntimeContext>;
39
+ /** The image published under `tag`, or `undefined`. */
40
+ fromTag(tag: string): Effect.Effect<{
41
+ readonly imageId: string;
42
+ } | undefined, OpError<ImagesOps, "getByTag">, RuntimeContext>;
43
+ /** Publish an image under `tag` (moving the tag if it points elsewhere). */
44
+ publish(image: {
45
+ readonly imageId: string;
46
+ }, tag: string): Effect.Effect<void, OpError<ImagesOps, "publish">, RuntimeContext>;
47
+ /** Remove a published tag (`name` or `name:tag`); the image itself stays. */
48
+ unpublish(tag: string): Effect.Effect<void, OpError<ImagesOps, "deleteName">, RuntimeContext>;
49
+ /** Delete an image. */
50
+ delete(image: {
51
+ readonly imageId: string;
52
+ }): Effect.Effect<void, OpError<ImagesOps, "delete">, RuntimeContext>;
53
+ }
54
+ /**
55
+ * Build Modal Images at runtime, e.g. one per repository a user connects,
56
+ * from the same inputs a `Modal.Image` takes. Modal builds remotely; the
57
+ * runtime needs no Docker.
58
+ *
59
+ * ### An image per repository
60
+ * **Example:** From a Cloudflare Worker
61
+ * ```typescript
62
+ * import * as Cloudflare from "@alchemy.run/cloudflare";
63
+ * import * as Modal from "@alchemy.run/modal";
64
+ * import * as Effect from "effect/Effect";
65
+ * import * as Layer from "effect/Layer";
66
+ * import { HttpServerRequest } from "effect/http/HttpServerRequest";
67
+ * import * as HttpServerResponse from "effect/http/HttpServerResponse";
68
+ * import { Coder } from "./Coder.ts";
69
+ *
70
+ * export default class Api extends Cloudflare.Worker<Api>()(
71
+ * "Api",
72
+ * { main: import.meta.url },
73
+ * Effect.gen(function* () {
74
+ * const images = yield* Modal.CreateImage(Coder);
75
+ * const sandboxes = yield* Modal.CreateSandbox(Coder);
76
+ * return {
77
+ * fetch: Effect.gen(function* () {
78
+ * const request = yield* HttpServerRequest;
79
+ * const repo = request.headers["x-repo"] ?? "alchemy-run/alchemy";
80
+ * const image = yield* images.build({
81
+ * image: "node:22-bookworm",
82
+ * commands: [`RUN git clone https://github.com/${repo} /work`],
83
+ * });
84
+ * const sandbox = yield* sandboxes.create({ image });
85
+ * return HttpServerResponse.text(sandbox.sandboxId);
86
+ * }).pipe(Effect.orDie),
87
+ * };
88
+ * }).pipe(Effect.provide(Layer.mergeAll(Modal.CreateImageHttp, Modal.CreateSandboxHttp))),
89
+ * ) {}
90
+ * ```
91
+ *
92
+ * @binding
93
+ * @product Image
94
+ */
95
+ export interface CreateImage extends Binding.Service<CreateImage, "Modal.CreateImage", (app: App) => Effect.Effect<ImagesClient>> {
96
+ }
97
+ export declare const CreateImage: CreateImage;
98
+ //# sourceMappingURL=CreateImage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateImage.d.ts","sources":["../src/CreateImage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAEtD,mFAAmF;AACnF,MAAM,WAAW,iBAAiB;IAChC,mCAAmC;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,mFAAmF;IACnF,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,wEAAwE;IACxE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;IACrD,4DAA4D;IAC5D,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChE,8BAA8B;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,KAAK,CACH,OAAO,EAAE,iBAAiB,GACzB,MAAM,CAAC,MAAM,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,OAAO,CAAC,OAAO,gBAAgB,CAAC,EAAE,cAAc,CAAC,CAAC;IACjG,uDAAuD;IACvD,OAAO,CACL,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,MAAM,CACd;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,EACxC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,EAC9B,cAAc,CACf,CAAC;IACF,4EAA4E;IAC5E,OAAO,CACL,KAAK,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EACnC,GAAG,EAAE,MAAM,GACV,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,cAAc,CAAC,CAAC;IACtE,6EAA6E;IAC7E,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,cAAc,CAAC,CAAC;IAC9F,uBAAuB;IACvB,MAAM,CAAC,KAAK,EAAE;QACZ,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1B,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,cAAc,CAAC,CAAC;CACvE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO,CAAC,OAAO,CAClD,WAAW,EACX,mBAAmB,EACnB,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAC1C;CAAG;AAEJ,eAAO,MAAM,WAAW,aAAoD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ export const CreateImage = Binding.Service("Modal.CreateImage");
3
+ //# sourceMappingURL=CreateImage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateImage.js","sources":["../src/CreateImage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAwG3C,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAc,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,51 @@
1
+ import * as DockerfileParser from "@alchemy.run/docker/DockerfileParser";
2
+ import * as image from "@distilled.cloud/modal/image";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ import { CreateImage, type ImageBuildOptions, type ImagesClient } from "./CreateImage.ts";
6
+ /** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
7
+ declare const ImagesOps: Effect.Effect<{
8
+ readonly build: {
9
+ readonly getOrCreate: (input: image.ImageGetOrCreateRequest) => Effect.Effect<image.ImageGetOrCreateResponse, image.ModalOpError, never>;
10
+ readonly joinStreaming: import("@distilled.cloud/core/api").StreamingCall<image.ImageJoinStreamingRequest, image.ImageJoinStreamingStream, image.ImageJoinStreamingError, never, image.ImageJoinStreamingResponse>;
11
+ readonly putFile: (input: import("@distilled.cloud/modal/mount").MountPutFileRequest) => Effect.Effect<import("@distilled.cloud/modal/mount").MountPutFileResponse, image.ModalOpError, never>;
12
+ readonly getOrCreateMount: (input: import("@distilled.cloud/modal/mount").MountGetOrCreateRequest) => Effect.Effect<import("@distilled.cloud/modal/mount").MountGetOrCreateResponse, import("@distilled.cloud/modal/mount").MountGetOrCreateError, never>;
13
+ readonly blobs: {
14
+ readonly create: (input: import("@distilled.cloud/modal/blob").CreateBlobRequest) => Effect.Effect<import("@distilled.cloud/modal/blob").CreateBlobResponse, image.ModalOpError, never>;
15
+ readonly get: (input: import("@distilled.cloud/modal/blob").GetBlobRequest) => Effect.Effect<import("@distilled.cloud/modal/blob").GetBlobResponse, image.ModalOpError, never>;
16
+ readonly http: import("effect/http/HttpClient").HttpClient;
17
+ };
18
+ };
19
+ readonly getByTag: (input: image.ImageGetByTagRequest) => Effect.Effect<image.ImageGetByTagResponse, image.ImageGetByTagError, never>;
20
+ readonly publish: (input: image.PublishImageRequest) => Effect.Effect<image.PublishImageResponse, image.PublishImageError, never>;
21
+ readonly deleteName: (input: image.DeleteImageNameRequest) => Effect.Effect<image.DeleteImageNameResponse, image.DeleteImageNameError, never>;
22
+ readonly delete: (input: image.DeleteImageRequest) => Effect.Effect<image.DeleteImageResponse, image.DeleteImageError, never>;
23
+ }, never, import("./internal.ts").OperationServices>;
24
+ export type ImagesOps = Effect.Success<typeof ImagesOps>;
25
+ /** Build one image from runtime options in `appId`. */
26
+ export declare const buildFromOptions: (ops: {
27
+ readonly getOrCreate: (input: image.ImageGetOrCreateRequest) => Effect.Effect<image.ImageGetOrCreateResponse, image.ModalOpError, never>;
28
+ readonly joinStreaming: import("@distilled.cloud/core/api").StreamingCall<image.ImageJoinStreamingRequest, image.ImageJoinStreamingStream, image.ImageJoinStreamingError, never, image.ImageJoinStreamingResponse>;
29
+ readonly putFile: (input: import("@distilled.cloud/modal/mount").MountPutFileRequest) => Effect.Effect<import("@distilled.cloud/modal/mount").MountPutFileResponse, image.ModalOpError, never>;
30
+ readonly getOrCreateMount: (input: import("@distilled.cloud/modal/mount").MountGetOrCreateRequest) => Effect.Effect<import("@distilled.cloud/modal/mount").MountGetOrCreateResponse, import("@distilled.cloud/modal/mount").MountGetOrCreateError, never>;
31
+ readonly blobs: {
32
+ readonly create: (input: import("@distilled.cloud/modal/blob").CreateBlobRequest) => Effect.Effect<import("@distilled.cloud/modal/blob").CreateBlobResponse, image.ModalOpError, never>;
33
+ readonly get: (input: import("@distilled.cloud/modal/blob").GetBlobRequest) => Effect.Effect<import("@distilled.cloud/modal/blob").GetBlobResponse, image.ModalOpError, never>;
34
+ readonly http: import("effect/http/HttpClient").HttpClient;
35
+ };
36
+ }, appId: string, options: ImageBuildOptions) => Effect.Effect<{
37
+ imageId: string;
38
+ }, import("@distilled.cloud/core/errors").BadGateway | import("./Blob.ts").BlobTransferFailed | import("@distilled.cloud/core/config").ConfigError | DockerfileParser.DockerfileSyntaxError | import("@distilled.cloud/core/errors").GatewayTimeout | import("effect/http/HttpClientError").HttpClientError | import("./ImageBuild.ts").ImageBuildFailed | import("./ImageBuild.ts").ImageBuildTimeout | import("./ImageBuild.ts").ImageBuildUnexpectedResponse | image.ImageNotFound | import("@distilled.cloud/core/errors").InternalServerError | import("@distilled.cloud/core/protocol-http").InvalidInput | import("@distilled.cloud/modal/Errors").ModalParseError | import("@distilled.cloud/modal/mount").MountNotFound | import("@distilled.cloud/core/sdk-error").SdkError | import("@distilled.cloud/core/errors").ServiceUnavailable | import("@distilled.cloud/core/errors").TooManyRequests | import("@distilled.cloud/core/errors").Unauthorized | import("@distilled.cloud/modal/Errors").UnknownModalError, never>;
39
+ /** An images client over an app id resolved per call. */
40
+ export declare const makeImagesClient: (appId: Effect.Effect<string>, ops: ImagesOps, environment?: Effect.Effect<string | undefined>) => ImagesClient;
41
+ /**
42
+ * {@link CreateImage} over Modal's API. Grants the host's identity (a scoped
43
+ * `Modal.ServiceUser`) the `contributor` role on the App's environment.
44
+ *
45
+ * @layer
46
+ * @product Image
47
+ * @provides Modal.CreateImage
48
+ */
49
+ export declare const CreateImageHttp: Layer.Layer<CreateImage, never, never>;
50
+ export {};
51
+ //# sourceMappingURL=CreateImageHttp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateImageHttp.d.ts","sources":["../src/CreateImageHttp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,gBAAgB,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAI1F,oFAAoF;AACpF,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;oDAMb,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,SAAS,CAAC,CAAC;AAKzD,uDAAuD;AACvD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;o+BAiC3B,CAAC;AAEH,yDAAyD;AACzD,eAAO,MAAM,gBAAgB,UACpB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OACvB,SAAS,gBACD,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,KAC7C,YA6BD,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,wCAY3B,CAAC"}
@@ -0,0 +1,87 @@
1
+ import * as DockerfileParser from "@alchemy.run/docker/DockerfileParser";
2
+ import * as image from "@distilled.cloud/modal/image";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ import { makeModalBinding } from "./BindingHttp.js";
6
+ import { CreateImage } from "./CreateImage.js";
7
+ import { buildImage, ImageBuildOps } from "./ImageBuild.js";
8
+ import { operations } from "./internal.js";
9
+ /** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
10
+ const ImagesOps = operations({
11
+ build: ImageBuildOps,
12
+ getByTag: image.imageGetByTag,
13
+ publish: image.publishImage,
14
+ deleteName: image.deleteImageName,
15
+ delete: image.deleteImage,
16
+ });
17
+ const toBytes = (data) => Effect.sync(() => (typeof data === "string" ? new TextEncoder().encode(data) : data));
18
+ /** Build one image from runtime options in `appId`. */
19
+ export const buildFromOptions = Effect.fn(function* (ops, appId, options) {
20
+ // Parsed to normalize it; Modal's builder rejects what it can't run.
21
+ // (The plan-time capability check lives with BuildPlan, which imports the
22
+ // bundler and so stays out of runtime bundles.)
23
+ const parsed = options.dockerfile !== undefined
24
+ ? yield* DockerfileParser.parse(options.dockerfile)
25
+ : undefined;
26
+ const dockerfile = parsed ? DockerfileParser.renderLines(parsed) : [];
27
+ const extra = options.commands ?? [];
28
+ const commands = [...dockerfile, ...extra];
29
+ const contextFiles = yield* Effect.forEach(Object.entries(options.files ?? {}), ([filename, data]) => Effect.map(toBytes(data), (bytes) => ({ filename, data: bytes })));
30
+ const imageId = yield* buildImage(ops, appId, {
31
+ dockerTag: options.dockerfile
32
+ ? undefined
33
+ : options.from
34
+ ? undefined
35
+ : (options.image ?? "debian:bookworm-slim"),
36
+ baseImageId: options.dockerfile ? undefined : options.from?.imageId,
37
+ commands,
38
+ contextFiles,
39
+ secretIds: options.secrets?.map((s) => s.secretId),
40
+ gpu: options.gpu,
41
+ forceBuild: options.force,
42
+ });
43
+ return { imageId };
44
+ });
45
+ /** An images client over an app id resolved per call. */
46
+ export const makeImagesClient = (appId, ops, environment = Effect.undefined) => ({
47
+ fromTag: (tag) => Effect.gen(function* () {
48
+ const env = yield* environment;
49
+ const found = yield* ops
50
+ .getByTag({ tag, environmentName: env ?? "" })
51
+ .pipe(Effect.catchTag("ImageNotFound", () => Effect.undefined));
52
+ return found?.imageId ? { imageId: found.imageId } : undefined;
53
+ }),
54
+ publish: (target, tag) => Effect.gen(function* () {
55
+ const env = yield* environment;
56
+ yield* ops.publish({ imageId: target.imageId, tag, environmentName: env ?? "" });
57
+ }),
58
+ unpublish: (tag) => Effect.gen(function* () {
59
+ const env = yield* environment;
60
+ // Modal deletes only an explicit `name:tag`; a bare name is `name:latest`.
61
+ const named = /:[^/]*$/.test(tag) ? tag : `${tag}:latest`;
62
+ yield* ops
63
+ .deleteName({ tag: env ? `${env}/${named}` : named })
64
+ .pipe(Effect.catchTag("ImageNotFound", () => Effect.void));
65
+ }),
66
+ build: (options) => Effect.flatMap(appId, (id) => buildFromOptions(ops.build, id, options)),
67
+ delete: (target) => ops.delete({ imageId: target.imageId }).pipe(Effect.catchTag("ImageNotFound", () => Effect.void), Effect.asVoid),
68
+ });
69
+ /**
70
+ * {@link CreateImage} over Modal's API. Grants the host's identity (a scoped
71
+ * `Modal.ServiceUser`) the `contributor` role on the App's environment.
72
+ *
73
+ * @layer
74
+ * @product Image
75
+ * @provides Modal.CreateImage
76
+ */
77
+ export const CreateImageHttp = Layer.effect(CreateImage, makeModalBinding({
78
+ tag: "Modal.CreateImage",
79
+ operations: ImagesOps,
80
+ role: "contributor",
81
+ make: Effect.fn(function* (app, ops) {
82
+ const appId = yield* app.appId;
83
+ const environment = yield* app.environment;
84
+ return makeImagesClient(appId, ops, environment);
85
+ }),
86
+ }));
87
+ //# sourceMappingURL=CreateImageHttp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateImageHttp.js","sources":["../src/CreateImageHttp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
3
+ import type * as Effect from "effect/Effect";
4
+ import type { QueuesOps } from "./CreateQueueHttp.ts";
5
+ import type { Environment } from "./Environment.ts";
6
+ import type { ErrorOf, OpError } from "./internal.ts";
7
+ import type { ensureQueue, lookupQueue } from "./Queue.ts";
8
+ import type { QueueAttributes } from "./Queue.ts";
9
+ import type { ReadWriteQueueClient } from "./QueueClient.ts";
10
+ /** A queue created or found at runtime: its attributes plus a read-write client. */
11
+ export interface QueueHandle extends ReadWriteQueueClient {
12
+ readonly queueId: Effect.Effect<string>;
13
+ readonly name: string;
14
+ /** The attributes, to pass where a `Modal.Queue` is accepted (e.g. sandbox mounts). */
15
+ readonly attributes: QueueAttributes;
16
+ }
17
+ /** Get, create, list and delete queues by name in one environment. */
18
+ export interface QueuesClientOf<R> {
19
+ /** The queue named `name`, created when missing (Modal's own get-or-create). */
20
+ getOrCreate(name: string): Effect.Effect<QueueHandle, ErrorOf<typeof ensureQueue>, R>;
21
+ /** The queue named `name`, or `undefined`. */
22
+ get(name: string): Effect.Effect<QueueHandle | undefined, ErrorOf<typeof lookupQueue>, R>;
23
+ /** Delete the queue named `name` (no-op when missing). */
24
+ delete(name: string): Effect.Effect<void, ErrorOf<typeof lookupQueue> | Exclude<OpError<QueuesOps, "delete">, {
25
+ readonly _tag: "QueueNotFound";
26
+ }>, R>;
27
+ /** Names of every queue in the environment. */
28
+ list(): Effect.Effect<ReadonlyArray<string>, OpError<QueuesOps, "list">, R>;
29
+ }
30
+ /** A QueuesClient whose calls run inside a deployed runtime. */
31
+ export type QueuesClient = QueuesClientOf<RuntimeContext>;
32
+ /**
33
+ * Create queues by name at runtime: one per user, session or task.
34
+ * Modal's native shape is get-or-create by name, so `getOrCreate` is
35
+ * idempotent and safe to call on every request.
36
+ *
37
+ * Bind it to a `Modal.Environment` to keep these runtime objects in their
38
+ * own namespace (or to nothing, for the workspace's default environment).
39
+ * They aren't in Alchemy state: deleting the environment removes them.
40
+ *
41
+ * Objects created at run time are tagged with the stack, stage and binding
42
+ * (`alchemy::stack`, `alchemy::stage`, `alchemy::id`) and are not deleted when
43
+ * the stack is destroyed. A Modal queue has only a name, so the tags become
44
+ * its name prefix, `Modal.runtimePrefix({ stack, stage, id })`: list them
45
+ * with `modal queue list` and delete the ones whose name starts with it.
46
+ *
47
+ * ### One queue per user
48
+ * **Example:** From a Cloudflare Worker
49
+ * ```typescript
50
+ * import * as Cloudflare from "@alchemy.run/cloudflare";
51
+ * import * as Modal from "@alchemy.run/modal";
52
+ * import * as Effect from "effect/Effect";
53
+ * import * as Layer from "effect/Layer";
54
+ * import { HttpServerRequest } from "effect/http/HttpServerRequest";
55
+ * import * as HttpServerResponse from "effect/http/HttpServerResponse";
56
+ * import { Agents, Coder } from "./Coder.ts";
57
+ *
58
+ * export default class Api extends Cloudflare.Worker<Api>()(
59
+ * "Api",
60
+ * { main: import.meta.url },
61
+ * Effect.gen(function* () {
62
+ * const queues = yield* Modal.CreateQueue(Agents);
63
+ * const sandboxes = yield* Modal.CreateSandbox(Coder);
64
+ * return {
65
+ * fetch: Effect.gen(function* () {
66
+ * const request = yield* HttpServerRequest;
67
+ * const user = request.headers["x-user"] ?? "anonymous";
68
+ * const inbox = yield* queues.getOrCreate(`inbox-${user}`);
69
+ * yield* inbox.put({ task: "review" });
70
+ * return HttpServerResponse.text("ok");
71
+ * }).pipe(Effect.orDie),
72
+ * };
73
+ * }).pipe(Effect.provide(Layer.mergeAll(Modal.CreateQueueHttp, Modal.CreateSandboxHttp))),
74
+ * ) {}
75
+ * ```
76
+ *
77
+ * @binding
78
+ * @product Queue
79
+ */
80
+ export interface CreateQueue extends Binding.Service<CreateQueue, "Modal.CreateQueue", (environment?: Environment) => Effect.Effect<QueuesClient>> {
81
+ }
82
+ export declare const CreateQueue: CreateQueue;
83
+ //# sourceMappingURL=CreateQueue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateQueue.d.ts","sources":["../src/CreateQueue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,oFAAoF;AACpF,MAAM,WAAW,WAAY,SAAQ,oBAAoB;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uFAAuF;IACvF,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC;AAED,sEAAsE;AACtE,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,gFAAgF;IAChF,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,8CAA8C;IAC9C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,SAAS,EAAE,OAAO,CAAC,OAAO,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1F,0DAA0D;IAC1D,MAAM,CACJ,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,CACd,IAAI,EACF,OAAO,CAAC,OAAO,WAAW,CAAC,GAC3B,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;KAAE,CAAC,EAC3E,CAAC,CACF,CAAC;IACF,+CAA+C;IAC/C,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;CAC7E;AAED,gEAAgE;AAChE,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,WAAW,WAAY,SAAQ,OAAO,CAAC,OAAO,CAClD,WAAW,EACX,mBAAmB,EACnB,CAAC,WAAW,CAAC,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAC3D;CAAG;AAEJ,eAAO,MAAM,WAAW,aAAoD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ export const CreateQueue = Binding.Service("Modal.CreateQueue");
3
+ //# sourceMappingURL=CreateQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateQueue.js","sources":["../src/CreateQueue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AA8F3C,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAc,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,31 @@
1
+ import * as queue from "@distilled.cloud/modal/queue";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import { CreateQueue, type QueuesClientOf } from "./CreateQueue.ts";
5
+ import { type RuntimeOwner } from "./RuntimeOwner.ts";
6
+ /** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
7
+ export declare const QueuesOps: Effect.Effect<{
8
+ readonly getOrCreate: (input: queue.QueueGetOrCreateRequest) => Effect.Effect<queue.QueueGetOrCreateResponse, queue.QueueGetOrCreateError, never>;
9
+ readonly delete: (input: queue.DeleteQueueRequest) => Effect.Effect<queue.DeleteQueueResponse, queue.DeleteQueueError, never>;
10
+ readonly list: import("@distilled.cloud/core/api").PaginatedCall<queue.ListQueueRequest, queue.ListQueueResponse, queue.ListQueueError, never, queue.ListQueueResponseQueueInfo>;
11
+ readonly client: {
12
+ readonly clearQueue: (input: queue.ClearQueueRequest) => Effect.Effect<queue.ClearQueueResponse, queue.ClearQueueError, never>;
13
+ readonly getQueue: (input: queue.GetQueueRequest) => Effect.Effect<queue.GetQueueResponse, queue.ModalOpError, never>;
14
+ readonly putQueue: (input: queue.PutQueueRequest) => Effect.Effect<queue.PutQueueResponse, queue.PutQueueError, never>;
15
+ readonly queueLen: (input: queue.QueueLenRequest) => Effect.Effect<queue.QueueLenResponse, queue.QueueLenError, never>;
16
+ readonly queueNextItems: (input: queue.QueueNextItemsRequest) => Effect.Effect<queue.QueueNextItemsResponse, queue.QueueNextItemsError, never>;
17
+ };
18
+ }, never, import("./internal.ts").OperationServices>;
19
+ export type QueuesOps = Effect.Success<typeof QueuesOps>;
20
+ /** A queues client over an environment name resolved per call. */
21
+ export declare const makeQueuesClient: (environment: Effect.Effect<string | undefined>, ops: QueuesOps, owner?: Effect.Effect<RuntimeOwner | undefined>) => QueuesClientOf<never>;
22
+ /**
23
+ * {@link CreateQueue} over Modal's API. Grants the host's identity (a scoped
24
+ * `Modal.ServiceUser`) the `contributor` role on the environment.
25
+ *
26
+ * @layer
27
+ * @product Queue
28
+ * @provides Modal.CreateQueue
29
+ */
30
+ export declare const CreateQueueHttp: Layer.Layer<CreateQueue, never, never>;
31
+ //# sourceMappingURL=CreateQueueHttp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateQueueHttp.d.ts","sources":["../src/CreateQueueHttp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAoB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAKtF,OAAO,EAAa,KAAK,YAAY,EAA+B,MAAM,mBAAmB,CAAC;AAE9F,oFAAoF;AACpF,eAAO,MAAM,SAAS;;;;;;;;;;;oDAKpB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,SAAS,CAAC,CAAC;AASzD,kEAAkE;AAClE,eAAO,MAAM,gBAAgB,gBACd,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,OACzC,SAAS,UACP,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,KAC7C,cAAc,CAAC,KAAK,CAkCrB,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,wCAa3B,CAAC"}
@@ -0,0 +1,67 @@
1
+ import * as queue from "@distilled.cloud/modal/queue";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import { makeOpenModalBinding } from "./BindingHttp.js";
5
+ import { CreateQueue } from "./CreateQueue.js";
6
+ import { environmentOf, listAll, operations } from "./internal.js";
7
+ import { ensureQueue, lookupQueue } from "./Queue.js";
8
+ import { QueueOps, makeReadWriteQueueClient } from "./QueueClient.js";
9
+ import { ownedName, RuntimeOwnerOf, unownedName } from "./RuntimeOwner.js";
10
+ /** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
11
+ export const QueuesOps = operations({
12
+ getOrCreate: queue.queueGetOrCreate,
13
+ delete: queue.deleteQueue,
14
+ list: queue.listQueue,
15
+ client: QueueOps,
16
+ });
17
+ const handleOf = (attributes, ops, name) => ({
18
+ ...makeReadWriteQueueClient(Effect.succeed(attributes.queueId), ops.client),
19
+ queueId: Effect.succeed(attributes.queueId),
20
+ name,
21
+ attributes,
22
+ });
23
+ /** A queues client over an environment name resolved per call. */
24
+ export const makeQueuesClient = (environment, ops, owner = Effect.undefined) => ({
25
+ getOrCreate: (name) => Effect.flatMap(Effect.all([environment, owner]), ([env, stamp]) => ensureQueue(ops.getOrCreate, ownedName(stamp, name), env)).pipe(Effect.map((attributes) => handleOf(attributes, ops, name))),
26
+ get: (name) => Effect.flatMap(Effect.all([environment, owner]), ([env, stamp]) => lookupQueue(ops.getOrCreate, ownedName(stamp, name), env)).pipe(Effect.map((attributes) => (attributes ? handleOf(attributes, ops, name) : undefined))),
27
+ delete: (name) => Effect.gen(function* () {
28
+ const env = yield* environment;
29
+ const found = yield* lookupQueue(ops.getOrCreate, ownedName(yield* owner, name), env);
30
+ if (!found)
31
+ return;
32
+ yield* ops
33
+ .delete({ queueId: found.queueId })
34
+ .pipe(Effect.catchTag("QueueNotFound", () => Effect.void));
35
+ }),
36
+ list: () => Effect.gen(function* () {
37
+ const env = yield* environment;
38
+ const stamp = yield* owner;
39
+ const items = yield* listAll((pagination) => ops
40
+ .list({ environmentName: environmentOf(env), pagination })
41
+ .pipe(Effect.map((response) => response.queues ?? [])), (item) => item.createdAt);
42
+ return items.flatMap((item) => {
43
+ const own = item.name ? unownedName(stamp, item.name) : undefined;
44
+ return own ? [own] : [];
45
+ });
46
+ }),
47
+ });
48
+ /**
49
+ * {@link CreateQueue} over Modal's API. Grants the host's identity (a scoped
50
+ * `Modal.ServiceUser`) the `contributor` role on the environment.
51
+ *
52
+ * @layer
53
+ * @product Queue
54
+ * @provides Modal.CreateQueue
55
+ */
56
+ export const CreateQueueHttp = Layer.effect(CreateQueue, makeOpenModalBinding({
57
+ tag: "Modal.CreateQueue",
58
+ operations: QueuesOps,
59
+ role: "contributor",
60
+ environmentOf: (environment) => environment?.name,
61
+ make: Effect.fn(function* (ops, environment) {
62
+ const name = environment ? yield* environment.name : Effect.undefined;
63
+ const owner = yield* RuntimeOwnerOf();
64
+ return makeQueuesClient(name, ops, owner);
65
+ }),
66
+ }));
67
+ //# sourceMappingURL=CreateQueueHttp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateQueueHttp.js","sources":["../src/CreateQueueHttp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,8BAA8B,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAyC,MAAM,kBAAkB,CAAC;AAEtF,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAwB,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAqB,cAAc,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9F,oFAAoF;AACpF,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;IAClC,WAAW,EAAE,KAAK,CAAC,gBAAgB;IACnC,MAAM,EAAE,KAAK,CAAC,WAAW;IACzB,IAAI,EAAE,KAAK,CAAC,SAAS;IACrB,MAAM,EAAE,QAAQ;CACjB,CAAC,CAAC;AAIH,MAAM,QAAQ,GAAG,CAAC,UAA2B,EAAE,GAAc,EAAE,IAAY,EAAe,EAAE,CAAC,CAAC;IAC5F,GAAG,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC;IAC3E,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;IAC3C,IAAI;IACJ,UAAU;CACX,CAAC,CAAC;AAEH,kEAAkE;AAClE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,WAA8C,EAC9C,GAAc,EACd,KAAK,GAA4C,MAAM,CAAC,SAAS,EAC1C,EAAE,CAAC,CAAC;IAC3B,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAChE,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAC1D,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACrE,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CACZ,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAChE,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAC1D,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAChG,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CACf,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACtF,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,KAAK,CAAC,CAAC,GAAG;aACP,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;aAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC;IACJ,IAAI,EAAE,GAAG,EAAE,CACT,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAC1B,CAAC,UAAU,EAAE,EAAE,CACb,GAAG;aACA,IAAI,CAAC,EAAE,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC;aACzD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,EAC1D,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CACzB,CAAC;QACF,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAClE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;CACL,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CACzC,WAAW,EACX,oBAAoB,CAAC;IACnB,GAAG,EAAE,mBAAmB;IACxB,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE,aAAa;IACnB,aAAa,EAAE,CAAC,WAAyB,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI;IAC/D,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,WAAyB;QACvD,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;QACtE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,cAAc,EAAE,CAAC;QACtC,OAAO,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC;CACH,CAAC,CACH,CAAC"}