@alchemy.run/modal 0.0.0-stage → 2.0.0-beta.86

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 +100 -2
  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 +75 -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,27 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Layer from "effect/Layer";
3
+ import { makeModalBinding } from "./BindingHttp.ts";
4
+ import type { Dict } from "./Dict.ts";
5
+ import { DictOps, makeReadDictClient } from "./DictClient.ts";
6
+ import { ReadDict } from "./ReadDict.ts";
7
+
8
+ /**
9
+ * {@link ReadDict} over Modal's API. Grants the host's identity (a scoped
10
+ * `Modal.ServiceUser`) the `viewer` role on the dict's environment.
11
+ *
12
+ * @layer
13
+ * @product Dict
14
+ * @provides Modal.ReadDict
15
+ */
16
+ export const ReadDictHttp = Layer.effect(
17
+ ReadDict,
18
+ makeModalBinding({
19
+ tag: "Modal.ReadDict",
20
+ operations: DictOps,
21
+ role: "viewer",
22
+ make: Effect.fn(function* (dict: Dict, ops) {
23
+ const dictId = yield* dict.dictId;
24
+ return makeReadDictClient(dictId, ops);
25
+ }),
26
+ }),
27
+ );
@@ -0,0 +1,107 @@
1
+ import type * as functions from "@distilled.cloud/modal/functions";
2
+ import * as Binding from "alchemy/Binding";
3
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
4
+ import type * as Effect from "effect/Effect";
5
+ import type { FunctionLookupError } from "./FunctionTarget.ts";
6
+ import type { OpError } from "./internal.ts";
7
+ import type { FunctionTarget } from "./InvokeFunction.ts";
8
+ import type { ReadFunctionOps } from "./ReadFunctionHttp.ts";
9
+ import type { Server } from "./Server.ts";
10
+
11
+ /** A time range: `Date`s, ISO strings, or epoch milliseconds. */
12
+ export interface TimeRange {
13
+ readonly since: Date | string | number;
14
+ readonly until?: Date | string | number;
15
+ }
16
+
17
+ /** Observe a function: load, call counts and metrics. */
18
+ export interface FunctionReader {
19
+ /** Inputs waiting and running, and the containers serving them, right now. */
20
+ stats(): Effect.Effect<
21
+ {
22
+ readonly backlog: number;
23
+ readonly runningInputs: number;
24
+ readonly containers: number;
25
+ readonly inputHeadroom: number;
26
+ },
27
+ FunctionLookupError | OpError<ReadFunctionOps, "currentStats">,
28
+ RuntimeContext
29
+ >;
30
+ /** Input outcomes, latency percentiles and container counts over a time range. */
31
+ timeRangeStats(
32
+ range: TimeRange & { readonly containerId?: string },
33
+ ): Effect.Effect<
34
+ functions.FunctionGetTimeRangeStatsResponse,
35
+ FunctionLookupError | OpError<ReadFunctionOps, "timeRangeStats">,
36
+ RuntimeContext
37
+ >;
38
+ /** Metric series (`containers`, `calls`) over a time range. */
39
+ metrics(
40
+ range: TimeRange & {
41
+ /** Seconds per bucket. @default 3600 */
42
+ readonly bucketSecs?: number;
43
+ readonly groups?: ReadonlyArray<string>;
44
+ },
45
+ ): Effect.Effect<
46
+ functions.FunctionGetMetricsResponse,
47
+ FunctionLookupError | OpError<ReadFunctionOps, "metrics">,
48
+ RuntimeContext
49
+ >;
50
+ /** Calls started per time bucket. */
51
+ callCount(
52
+ range: TimeRange & {
53
+ /** Seconds per bucket. @default 3600 */
54
+ readonly bucketSecs?: number;
55
+ },
56
+ ): Effect.Effect<
57
+ functions.FunctionCallCountResponse,
58
+ FunctionLookupError | OpError<ReadFunctionOps, "callCount">,
59
+ RuntimeContext
60
+ >;
61
+ /** The inputs of one call, by outcome. */
62
+ callInfo(call: {
63
+ readonly functionCallId: string;
64
+ }): Effect.Effect<
65
+ functions.FunctionCallGetInfoResponse,
66
+ FunctionLookupError | OpError<ReadFunctionOps, "callInfo">,
67
+ RuntimeContext
68
+ >;
69
+ /** The autoscaler settings in effect. */
70
+ autoscaler(): Effect.Effect<
71
+ functions.AutoscalerSettings | undefined,
72
+ FunctionLookupError | OpError<ReadFunctionOps, "schedulingParams">,
73
+ RuntimeContext
74
+ >;
75
+ }
76
+
77
+ /**
78
+ * Read a Modal Function's (or Server's) live state from any runtime:
79
+ * backlog and running inputs, call counts, outcome counts, latency
80
+ * percentiles and metric series. Bind a resource of the Stack, or a function
81
+ * deployed with `modal deploy` by name.
82
+ *
83
+ * ### Watch the backlog
84
+ * **Example:** Shed load when the queue is long
85
+ * ```typescript
86
+ * const embed = yield* Modal.ReadFunction(Embed);
87
+ * const { backlog } = yield* embed.stats();
88
+ * if (backlog > 100) return HttpServerResponse.text("busy", { status: 503 });
89
+ * ```
90
+ *
91
+ * ### History
92
+ * **Example:** Failures in the last hour
93
+ * ```typescript
94
+ * const stats = yield* embed.timeRangeStats({ since: new Date(Date.now() - 3_600_000) });
95
+ * yield* Effect.log(`${stats.inputFailureCount} failed of ${stats.inputSuccessCount}`);
96
+ * ```
97
+ *
98
+ * @binding
99
+ * @product Function
100
+ */
101
+ export interface ReadFunction extends Binding.Service<
102
+ ReadFunction,
103
+ "Modal.ReadFunction",
104
+ (target: FunctionTarget | Server) => Effect.Effect<FunctionReader>
105
+ > {}
106
+
107
+ export const ReadFunction = Binding.Service<ReadFunction>("Modal.ReadFunction");
@@ -0,0 +1,91 @@
1
+ import * as functions from "@distilled.cloud/modal/functions";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import { makeFunctionBinding } from "./FunctionTarget.ts";
5
+ import { operations, timestampOf } from "./internal.ts";
6
+ import type { FunctionTarget } from "./InvokeFunction.ts";
7
+ import { ReadFunction, type FunctionReader } from "./ReadFunction.ts";
8
+ import type { Server } from "./Server.ts";
9
+
10
+ /** Bucket width when a query doesn't set one: Modal requires a positive one. */
11
+ const DEFAULT_BUCKET_SECS = 3600;
12
+
13
+ /** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
14
+ const ReadFunctionOps = operations({
15
+ currentStats: functions.functionGetCurrentStats,
16
+ timeRangeStats: functions.functionGetTimeRangeStats,
17
+ metrics: functions.functionGetMetrics,
18
+ callCount: functions.functionCallCount,
19
+ callInfo: functions.functionCallGetInfo,
20
+ schedulingParams: functions.functionGetSchedulingParams,
21
+ });
22
+
23
+ export type ReadFunctionOps = Effect.Success<typeof ReadFunctionOps>;
24
+
25
+ /**
26
+ * {@link ReadFunction} over Modal's API. Grants the host's identity (a scoped
27
+ * `Modal.ServiceUser`) the `viewer` role on the function's environment.
28
+ *
29
+ * @layer
30
+ * @product Function
31
+ * @provides Modal.ReadFunction
32
+ */
33
+ export const ReadFunctionHttp = Layer.effect(
34
+ ReadFunction,
35
+ makeFunctionBinding({
36
+ tag: "Modal.ReadFunction",
37
+ operations: ReadFunctionOps,
38
+ role: "viewer",
39
+ make: ({ functionId }, ops, _target: FunctionTarget | Server) =>
40
+ Effect.succeed({
41
+ stats: () =>
42
+ Effect.flatMap(functionId, (id) => ops.currentStats({ functionId: id })).pipe(
43
+ Effect.map((stats) => ({
44
+ backlog: stats.backlog ?? 0,
45
+ runningInputs: stats.numRunningInputs ?? 0,
46
+ containers: stats.numTotalTasks ?? 0,
47
+ inputHeadroom: stats.inputHeadroom ?? 0,
48
+ })),
49
+ ),
50
+ timeRangeStats: (range) =>
51
+ Effect.flatMap(functionId, (id) =>
52
+ ops.timeRangeStats({
53
+ functionId: id,
54
+ since: timestampOf(range.since),
55
+ until: timestampOf(range.until ?? Date.now()),
56
+ containerId: range.containerId,
57
+ }),
58
+ ),
59
+ metrics: (range) =>
60
+ Effect.flatMap(functionId, (id) =>
61
+ ops.metrics({
62
+ functionId: id,
63
+ since: timestampOf(range.since),
64
+ until: timestampOf(range.until ?? Date.now()),
65
+ bucketSecs: range.bucketSecs ?? DEFAULT_BUCKET_SECS,
66
+ groups: range.groups ? [...range.groups] : undefined,
67
+ }),
68
+ ),
69
+ callCount: (range) =>
70
+ Effect.flatMap(functionId, (id) =>
71
+ ops.callCount({
72
+ functionId: id,
73
+ since: timestampOf(range.since),
74
+ until: timestampOf(range.until ?? Date.now()),
75
+ bucketSecs: range.bucketSecs ?? DEFAULT_BUCKET_SECS,
76
+ }),
77
+ ),
78
+ callInfo: (call) =>
79
+ Effect.flatMap(functionId, (id) =>
80
+ ops.callInfo({
81
+ functionId: id,
82
+ functionCallId: call.functionCallId,
83
+ }),
84
+ ),
85
+ autoscaler: () =>
86
+ Effect.flatMap(functionId, (id) => ops.schedulingParams({ functionId: id })).pipe(
87
+ Effect.map((response) => response.autoscalerConfiguration?.settings),
88
+ ),
89
+ } satisfies FunctionReader),
90
+ }),
91
+ );
@@ -0,0 +1,44 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ import type * as Effect from "effect/Effect";
3
+ import type { Queue } from "./Queue.ts";
4
+ import type { ReadQueueClient } from "./QueueClient.ts";
5
+
6
+ export type { ReadQueueClient } from "./QueueClient.ts";
7
+
8
+ /**
9
+ * Take items from a Modal Queue from any runtime: take (removes), peek and len. Items are JSON.
10
+ *
11
+ * ### Bind a queue
12
+ * **Example:** From a Cloudflare Worker
13
+ * ```typescript
14
+ * import * as Cloudflare from "@alchemy.run/cloudflare";
15
+ * import * as Modal from "@alchemy.run/modal";
16
+ * import * as Effect from "effect/Effect";
17
+ * import * as HttpServerResponse from "effect/http/HttpServerResponse";
18
+ * import { Jobs } from "./Storage.ts";
19
+ *
20
+ * export default class Api extends Cloudflare.Worker<Api>()(
21
+ * "Api",
22
+ * { main: import.meta.url },
23
+ * Effect.gen(function* () {
24
+ * const queue = yield* Modal.ReadQueue(Jobs);
25
+ * return {
26
+ * fetch: Effect.gen(function* () {
27
+ * const [job] = yield* queue.take({ timeout: "5 seconds" });
28
+ * return yield* HttpServerResponse.json(job ?? null);
29
+ * }).pipe(Effect.orDie),
30
+ * };
31
+ * }).pipe(Effect.provide(Modal.ReadQueueHttp)),
32
+ * ) {}
33
+ * ```
34
+ *
35
+ * @binding
36
+ * @product Queue
37
+ */
38
+ export interface ReadQueue extends Binding.Service<
39
+ ReadQueue,
40
+ "Modal.ReadQueue",
41
+ (queue: Queue) => Effect.Effect<ReadQueueClient>
42
+ > {}
43
+
44
+ export const ReadQueue = Binding.Service<ReadQueue>("Modal.ReadQueue");
@@ -0,0 +1,27 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Layer from "effect/Layer";
3
+ import { makeModalBinding } from "./BindingHttp.ts";
4
+ import type { Queue } from "./Queue.ts";
5
+ import { QueueOps, makeReadQueueClient } from "./QueueClient.ts";
6
+ import { ReadQueue } from "./ReadQueue.ts";
7
+
8
+ /**
9
+ * {@link ReadQueue} over Modal's API. Grants the host's identity (a scoped
10
+ * `Modal.ServiceUser`) the `contributor` role on the queue's environment.
11
+ *
12
+ * @layer
13
+ * @product Queue
14
+ * @provides Modal.ReadQueue
15
+ */
16
+ export const ReadQueueHttp = Layer.effect(
17
+ ReadQueue,
18
+ makeModalBinding({
19
+ tag: "Modal.ReadQueue",
20
+ operations: QueueOps,
21
+ role: "contributor",
22
+ make: Effect.fn(function* (queue: Queue, ops) {
23
+ const queueId = yield* queue.queueId;
24
+ return makeReadQueueClient(queueId, ops);
25
+ }),
26
+ }),
27
+ );
@@ -0,0 +1,98 @@
1
+ import type * as server from "@distilled.cloud/modal/server";
2
+ import * as Binding from "alchemy/Binding";
3
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
4
+ import type * as Effect from "effect/Effect";
5
+ import type { FunctionLookupError } from "./FunctionTarget.ts";
6
+ import type { OpError } from "./internal.ts";
7
+ import type { TimeRange } from "./ReadFunction.ts";
8
+ import type { ReadServerOps } from "./ReadServerHttp.ts";
9
+ import type { Server } from "./Server.ts";
10
+
11
+ /** One request a Server handled. */
12
+ export interface ServerRequest {
13
+ readonly route: string | undefined;
14
+ readonly timestamp: string | undefined;
15
+ readonly containerId: string | undefined;
16
+ readonly durationSeconds: number | undefined;
17
+ readonly status: number | undefined;
18
+ }
19
+
20
+ /** A container serving a Server's requests. */
21
+ export interface ServerContainer {
22
+ readonly containerId: string;
23
+ readonly host: string | undefined;
24
+ readonly port: number | undefined;
25
+ }
26
+
27
+ /** Observe a Server: requests, status codes, latency and containers. */
28
+ export interface ServerReader {
29
+ /** Request counts by status code, latency percentiles and inference stats over a time range. */
30
+ stats(
31
+ range: TimeRange & { readonly containerId?: string },
32
+ ): Effect.Effect<
33
+ server.ServerGetTimeRangeStatsResponse,
34
+ FunctionLookupError | OpError<ReadServerOps, "stats">,
35
+ RuntimeContext
36
+ >;
37
+ /**
38
+ * Requests the Server handled: the most recent `limit` (newest first, last
39
+ * seven days), or those in a time range (oldest first).
40
+ */
41
+ requests(
42
+ query: { readonly limit: number } | TimeRange,
43
+ ): Effect.Effect<
44
+ ReadonlyArray<ServerRequest>,
45
+ FunctionLookupError | OpError<ReadServerOps, "requests">,
46
+ RuntimeContext
47
+ >;
48
+ /** Requests per time bucket. */
49
+ requestCount(
50
+ range: TimeRange & { readonly bucketSecs?: number },
51
+ ): Effect.Effect<
52
+ server.ServerCountRequestsResponse,
53
+ FunctionLookupError | OpError<ReadServerOps, "requestCount">,
54
+ RuntimeContext
55
+ >;
56
+ /** Metric series (`containers`, `requests`) over a time range. */
57
+ metrics(
58
+ range: TimeRange & { readonly bucketSecs?: number; readonly groups?: ReadonlyArray<string> },
59
+ ): Effect.Effect<
60
+ server.ServerGetMetricsResponse,
61
+ FunctionLookupError | OpError<ReadServerOps, "metrics">,
62
+ RuntimeContext
63
+ >;
64
+ /** Containers registered to serve requests right now. */
65
+ containers(): Effect.Effect<
66
+ ReadonlyArray<ServerContainer>,
67
+ FunctionLookupError | OpError<ReadServerOps, "containers">,
68
+ RuntimeContext
69
+ >;
70
+ }
71
+
72
+ /**
73
+ * Read a `Modal.Server`'s traffic from any runtime: request log, status
74
+ * codes, latency percentiles, metric series and live containers.
75
+ *
76
+ * ### Error rate
77
+ * **Example:** 5xx responses in the last ten minutes
78
+ * ```typescript
79
+ * const api = yield* Modal.ReadServer(Api);
80
+ * const stats = yield* api.stats({ since: new Date(Date.now() - 600_000) });
81
+ * ```
82
+ *
83
+ * ### Recent requests
84
+ * **Example:** The last 20 requests
85
+ * ```typescript
86
+ * const recent = yield* api.requests({ limit: 20 });
87
+ * ```
88
+ *
89
+ * @binding
90
+ * @product Server
91
+ */
92
+ export interface ReadServer extends Binding.Service<
93
+ ReadServer,
94
+ "Modal.ReadServer",
95
+ (server: Server) => Effect.Effect<ServerReader>
96
+ > {}
97
+
98
+ export const ReadServer = Binding.Service<ReadServer>("Modal.ReadServer");
@@ -0,0 +1,101 @@
1
+ import * as flash from "@distilled.cloud/modal/flash";
2
+ import * as server from "@distilled.cloud/modal/server";
3
+ import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
+ import { makeFunctionBinding } from "./FunctionTarget.ts";
6
+ import { operations, timestampOf } from "./internal.ts";
7
+ import { ReadServer, type ServerReader } from "./ReadServer.ts";
8
+ import type { Server } from "./Server.ts";
9
+
10
+ /** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
11
+ const ReadServerOps = operations({
12
+ stats: server.serverGetTimeRangeStats,
13
+ requests: server.fetchServerRequest,
14
+ requestCount: server.serverCountRequests,
15
+ metrics: server.serverGetMetrics,
16
+ containers: flash.listFlashContainer,
17
+ });
18
+
19
+ export type ReadServerOps = Effect.Success<typeof ReadServerOps>;
20
+
21
+ /**
22
+ * {@link ReadServer} over Modal's API. Grants the host's identity (a scoped
23
+ * `Modal.ServiceUser`) the `viewer` role on the server's environment.
24
+ *
25
+ * @layer
26
+ * @product Server
27
+ * @provides Modal.ReadServer
28
+ */
29
+ export const ReadServerHttp = Layer.effect(
30
+ ReadServer,
31
+ makeFunctionBinding({
32
+ tag: "Modal.ReadServer",
33
+ operations: ReadServerOps,
34
+ role: "viewer",
35
+ make: ({ functionId }, ops, _server: Server) =>
36
+ Effect.succeed({
37
+ stats: (range) =>
38
+ Effect.flatMap(functionId, (id) =>
39
+ ops.stats({
40
+ functionId: id,
41
+ since: timestampOf(range.since),
42
+ until: timestampOf(range.until ?? Date.now()),
43
+ containerId: range.containerId,
44
+ }),
45
+ ),
46
+ requests: (query) =>
47
+ Effect.flatMap(functionId, (id) =>
48
+ ops.requests(
49
+ "limit" in query
50
+ ? { functionId: id, tail: { count: query.limit } }
51
+ : {
52
+ functionId: id,
53
+ range: {
54
+ since: timestampOf(query.since),
55
+ until: timestampOf(query.until ?? Date.now()),
56
+ },
57
+ },
58
+ ),
59
+ ).pipe(
60
+ Effect.map((response) =>
61
+ (response.requests ?? []).map((request) => ({
62
+ route: request.route,
63
+ timestamp: request.timestamp,
64
+ containerId: request.containerId,
65
+ durationSeconds: request.durationSeconds,
66
+ status: request.status,
67
+ })),
68
+ ),
69
+ ),
70
+ requestCount: (range) =>
71
+ Effect.flatMap(functionId, (id) =>
72
+ ops.requestCount({
73
+ functionId: id,
74
+ since: timestampOf(range.since),
75
+ until: timestampOf(range.until ?? Date.now()),
76
+ bucketSecs: range.bucketSecs,
77
+ }),
78
+ ),
79
+ metrics: (range) =>
80
+ Effect.flatMap(functionId, (id) =>
81
+ ops.metrics({
82
+ functionId: id,
83
+ since: timestampOf(range.since),
84
+ until: timestampOf(range.until ?? Date.now()),
85
+ bucketSecs: range.bucketSecs,
86
+ groups: range.groups ? [...range.groups] : undefined,
87
+ }),
88
+ ),
89
+ containers: () =>
90
+ Effect.flatMap(functionId, (id) => ops.containers({ functionId: id })).pipe(
91
+ Effect.map((response) =>
92
+ (response.containers ?? []).map((container) => ({
93
+ containerId: container.taskId ?? "",
94
+ host: container.host,
95
+ port: container.port,
96
+ })),
97
+ ),
98
+ ),
99
+ } satisfies ServerReader),
100
+ }),
101
+ );
@@ -0,0 +1,45 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ import type * as Effect from "effect/Effect";
3
+ import type { Volume } from "./Volume.ts";
4
+ import type { ReadVolumeClient } from "./VolumeClient.ts";
5
+
6
+ export type { ReadVolumeClient } from "./VolumeClient.ts";
7
+
8
+ /**
9
+ * Read a Modal Volume's files from any runtime (a Worker, a Lambda, a Modal sandbox) without mounting it: list directories and read files over Modal's volume API.
10
+ *
11
+ * ### Bind a volume
12
+ * **Example:** Read from a Cloudflare Worker
13
+ * ```typescript
14
+ * import * as Cloudflare from "@alchemy.run/cloudflare";
15
+ * import * as Modal from "@alchemy.run/modal";
16
+ * import * as Effect from "effect/Effect";
17
+ * import * as HttpServerResponse from "effect/http/HttpServerResponse";
18
+ * import { Workspace } from "./Storage.ts";
19
+ *
20
+ * export default class Api extends Cloudflare.Worker<Api>()(
21
+ * "Api",
22
+ * { main: import.meta.url },
23
+ * Effect.gen(function* () {
24
+ * const volume = yield* Modal.ReadVolume(Workspace);
25
+ * return {
26
+ * fetch: Effect.gen(function* () {
27
+ * const files = yield* volume.listFiles("/");
28
+ * const readme = yield* volume.readFileString("/README.md");
29
+ * return yield* HttpServerResponse.json({ files, readme });
30
+ * }).pipe(Effect.orDie),
31
+ * };
32
+ * }).pipe(Effect.provide(Modal.ReadVolumeHttp)),
33
+ * ) {}
34
+ * ```
35
+ *
36
+ * @binding
37
+ * @product Volume
38
+ */
39
+ export interface ReadVolume extends Binding.Service<
40
+ ReadVolume,
41
+ "Modal.ReadVolume",
42
+ (volume: Volume) => Effect.Effect<ReadVolumeClient>
43
+ > {}
44
+
45
+ export const ReadVolume = Binding.Service<ReadVolume>("Modal.ReadVolume");
@@ -0,0 +1,28 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Layer from "effect/Layer";
3
+ import { makeModalBinding } from "./BindingHttp.ts";
4
+ import { ReadVolume } from "./ReadVolume.ts";
5
+ import type { Volume } from "./Volume.ts";
6
+ import { makeReadVolumeClient } from "./VolumeClient.ts";
7
+ import { VolumeFileOps } from "./VolumeFiles.ts";
8
+
9
+ /**
10
+ * {@link ReadVolume} over Modal's volume API. Grants the host's identity (a scoped
11
+ * `Modal.ServiceUser`) the `viewer` role on the volume's environment.
12
+ *
13
+ * @layer
14
+ * @product Volume
15
+ * @provides Modal.ReadVolume
16
+ */
17
+ export const ReadVolumeHttp = Layer.effect(
18
+ ReadVolume,
19
+ makeModalBinding({
20
+ tag: "Modal.ReadVolume",
21
+ operations: VolumeFileOps,
22
+ role: "viewer",
23
+ make: Effect.fn(function* (volume: Volume, ops) {
24
+ const volumeId = yield* volume.volumeId;
25
+ return makeReadVolumeClient(volumeId, ops);
26
+ }),
27
+ }),
28
+ );
@@ -0,0 +1,44 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ import type * as Effect from "effect/Effect";
3
+ import type { Dict } from "./Dict.ts";
4
+ import type { ReadWriteDictClient } from "./DictClient.ts";
5
+
6
+ export type { ReadWriteDictClient } from "./DictClient.ts";
7
+
8
+ /**
9
+ * Read and write a Modal Dict from any runtime. Keys and values are JSON.
10
+ *
11
+ * ### Bind a dict
12
+ * **Example:** From a Cloudflare Worker
13
+ * ```typescript
14
+ * import * as Cloudflare from "@alchemy.run/cloudflare";
15
+ * import * as Modal from "@alchemy.run/modal";
16
+ * import * as Effect from "effect/Effect";
17
+ * import * as HttpServerResponse from "effect/http/HttpServerResponse";
18
+ * import { Results } from "./Storage.ts";
19
+ *
20
+ * export default class Api extends Cloudflare.Worker<Api>()(
21
+ * "Api",
22
+ * { main: import.meta.url },
23
+ * Effect.gen(function* () {
24
+ * const dict = yield* Modal.ReadWriteDict(Results);
25
+ * return {
26
+ * fetch: Effect.gen(function* () {
27
+ * yield* dict.put("hits", ((yield* dict.get<number>("hits")) ?? 0) + 1);
28
+ * return yield* HttpServerResponse.json({ hits: yield* dict.get("hits") });
29
+ * }).pipe(Effect.orDie),
30
+ * };
31
+ * }).pipe(Effect.provide(Modal.ReadWriteDictHttp)),
32
+ * ) {}
33
+ * ```
34
+ *
35
+ * @binding
36
+ * @product Dict
37
+ */
38
+ export interface ReadWriteDict extends Binding.Service<
39
+ ReadWriteDict,
40
+ "Modal.ReadWriteDict",
41
+ (dict: Dict) => Effect.Effect<ReadWriteDictClient>
42
+ > {}
43
+
44
+ export const ReadWriteDict = Binding.Service<ReadWriteDict>("Modal.ReadWriteDict");
@@ -0,0 +1,27 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Layer from "effect/Layer";
3
+ import { makeModalBinding } from "./BindingHttp.ts";
4
+ import type { Dict } from "./Dict.ts";
5
+ import { DictOps, makeReadWriteDictClient } from "./DictClient.ts";
6
+ import { ReadWriteDict } from "./ReadWriteDict.ts";
7
+
8
+ /**
9
+ * {@link ReadWriteDict} over Modal's API. Grants the host's identity (a scoped
10
+ * `Modal.ServiceUser`) the `contributor` role on the dict's environment.
11
+ *
12
+ * @layer
13
+ * @product Dict
14
+ * @provides Modal.ReadWriteDict
15
+ */
16
+ export const ReadWriteDictHttp = Layer.effect(
17
+ ReadWriteDict,
18
+ makeModalBinding({
19
+ tag: "Modal.ReadWriteDict",
20
+ operations: DictOps,
21
+ role: "contributor",
22
+ make: Effect.fn(function* (dict: Dict, ops) {
23
+ const dictId = yield* dict.dictId;
24
+ return makeReadWriteDictClient(dictId, ops);
25
+ }),
26
+ }),
27
+ );