@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,210 @@
1
+ import * as environment from "@distilled.cloud/modal/environment";
2
+ import * as service from "@distilled.cloud/modal/service";
3
+ import * as workspace from "@distilled.cloud/modal/workspace";
4
+ import { isResolved } from "alchemy/Diff";
5
+ import * as Provider from "alchemy/Provider";
6
+ import { Resource } from "alchemy/Resource";
7
+ import * as Data from "effect/Data";
8
+ import * as Effect from "effect/Effect";
9
+ import * as Redacted from "effect/Redacted";
10
+ import { envNameOf, objectName, seconds } from "./internal.js";
11
+ import { declarable } from "./internal/Declared.js";
12
+ export class ServiceUserUnexpectedResponse extends Data.TaggedError("Modal.ServiceUserUnexpectedResponse") {
13
+ }
14
+ /**
15
+ * The workspace's plan has no service users (Modal's Starter plan). Bindings
16
+ * create one per host; `Modal.DeployerHostIdentity` binds the deployer's token
17
+ * instead.
18
+ */
19
+ export class ServiceUsersNotAvailable extends Data.TaggedError("Modal.ServiceUsersNotAvailable") {
20
+ }
21
+ /**
22
+ * A Modal service user: a workspace identity with its own token pair, for
23
+ * CI or another system. A scoped user acts only in the environments you
24
+ * grant it, as a `viewer` or a `contributor`.
25
+ *
26
+ * Modal shows a service user's token secret once, at creation, so a user
27
+ * deleted outside Alchemy is recreated with a new token on the next deploy,
28
+ * and an existing user can't be adopted.
29
+ *
30
+ * ### Creating a service user
31
+ * **Example:** CI that deploys to one environment
32
+ * ```typescript
33
+ * import * as Modal from "@alchemy.run/modal";
34
+ *
35
+ * export const Staging = Modal.Environment("Staging", {});
36
+ * export const Deployer = Modal.ServiceUser("Deployer", {
37
+ * environments: [{ environment: Staging, role: "contributor" }],
38
+ * });
39
+ * ```
40
+ *
41
+ * **Example:** A short-lived, read-only token
42
+ * ```typescript
43
+ * export const Auditor = Modal.ServiceUser("Auditor", {
44
+ * environments: [{ environment: "main", role: "viewer" }],
45
+ * expiresIn: "7 days",
46
+ * });
47
+ * ```
48
+ *
49
+ * ### Using its token
50
+ * **Example:** Hand the pair to a Worker that calls Modal as the user
51
+ * ```typescript
52
+ * import * as Cloudflare from "@alchemy.run/cloudflare";
53
+ * import * as Effect from "effect/Effect";
54
+ *
55
+ * export const Ci = Effect.gen(function* () {
56
+ * const deployer = yield* Deployer;
57
+ * return yield* Cloudflare.Worker("Ci", {
58
+ * main: "./src/ci.ts",
59
+ * env: { MODAL_TOKEN_ID: deployer.tokenId, MODAL_TOKEN_SECRET: deployer.tokenSecret },
60
+ * });
61
+ * });
62
+ * ```
63
+ *
64
+ * @resource
65
+ * @product Workspace
66
+ */
67
+ export const ServiceUser = declarable()(Resource("Modal.ServiceUser"));
68
+ const ROLE = {
69
+ viewer: "ENVIRONMENT_ROLE_VIEWER",
70
+ contributor: "ENVIRONMENT_ROLE_CONTRIBUTOR",
71
+ };
72
+ const roleOf = (role) => role === ROLE.viewer ? "viewer" : role === ROLE.contributor ? "contributor" : undefined;
73
+ /**
74
+ * The roles the props and the bindings ask for, by environment name; the
75
+ * workspace default environment resolves to its name. A `contributor` grant
76
+ * beats a `viewer` grant for the same environment.
77
+ */
78
+ const desiredRoles = Effect.fn(function* (props, bindings) {
79
+ const entries = [
80
+ ...(props.environments ?? []).map((entry) => ({
81
+ environment: envNameOf(entry.environment),
82
+ role: entry.role,
83
+ })),
84
+ ...bindings
85
+ .filter((binding) => binding.action !== "delete")
86
+ .flatMap((binding) => binding.data?.environments ?? []),
87
+ ];
88
+ let defaultName;
89
+ const roles = {};
90
+ for (const entry of entries) {
91
+ let name = entry.environment;
92
+ if (!name) {
93
+ defaultName ??= (yield* workspace.workspaceSettings({})).defaultEnvironmentName ?? "main";
94
+ name = defaultName;
95
+ }
96
+ if (roles[name] !== "contributor")
97
+ roles[name] = entry.role;
98
+ }
99
+ return roles;
100
+ });
101
+ export const ServiceUserProvider = () => Provider.effect(ServiceUser, Effect.gen(function* () {
102
+ const observe = Effect.fn(function* (name) {
103
+ const found = yield* service
104
+ .serviceUserInfo({ serviceUserName: name })
105
+ .pipe(Effect.catchTag("ServiceUserNotFound", () => Effect.undefined));
106
+ return found?.serviceUser?.serviceUserId ? found.serviceUser : undefined;
107
+ });
108
+ return {
109
+ stables: ["serviceUserId", "name", "tokenId", "tokenSecret"],
110
+ diff: Effect.fn(function* ({ id, news, olds, output }) {
111
+ if (!isResolved(news) || output === undefined)
112
+ return undefined;
113
+ if ((yield* objectName(id, news.name)) !== output.name)
114
+ return { action: "replace" };
115
+ if ((news.scoped ?? true) !== output.scoped)
116
+ return { action: "replace" };
117
+ if (seconds(news.expiresIn) !== seconds(olds?.expiresIn))
118
+ return { action: "replace" };
119
+ return undefined;
120
+ }),
121
+ read: Effect.fn(function* ({ output }) {
122
+ if (output === undefined)
123
+ return undefined;
124
+ const found = yield* observe(output.name);
125
+ return found?.serviceUserId === output.serviceUserId ? output : undefined;
126
+ }),
127
+ reconcile: Effect.fn(function* ({ id, news, output, session, bindings }) {
128
+ const name = output?.name ?? (yield* objectName(id, news.name));
129
+ const scoped = news.scoped ?? true;
130
+ // Observe: the user we created still exists (its secret lives only in state).
131
+ let current = yield* observe(name);
132
+ let token = current !== undefined &&
133
+ output !== undefined &&
134
+ current.serviceUserId === output.serviceUserId
135
+ ? { tokenId: output.tokenId, tokenSecret: output.tokenSecret }
136
+ : undefined;
137
+ // Ensure: a user we can't read the secret of is replaced by a fresh one.
138
+ if (token === undefined) {
139
+ if (current?.serviceUserId) {
140
+ yield* service
141
+ .deleteServiceUser({ serviceUserId: current.serviceUserId })
142
+ .pipe(Effect.catchTag("ServiceUserNotFound", () => Effect.void));
143
+ }
144
+ yield* session.note(`Creating service user ${name}...`);
145
+ const created = yield* service
146
+ .createServiceUser({
147
+ name,
148
+ scoped,
149
+ expiresInSeconds: seconds(news.expiresIn),
150
+ })
151
+ .pipe(Effect.catchTag("ServiceUsersNotAvailable", (e) => Effect.fail(new ServiceUsersNotAvailable({
152
+ message: `${e.message ?? "Service users are not available on this plan."} Modal bindings give each host its own service user; on this plan, add Modal.DeployerHostIdentity to the Stack's providers to bind your own token into hosts instead.`,
153
+ }))));
154
+ if (!created.serviceUserId || !created.tokenId || !created.tokenSecret) {
155
+ return yield* new ServiceUserUnexpectedResponse({
156
+ message: `Modal returned no token for service user ${name}`,
157
+ });
158
+ }
159
+ token = {
160
+ tokenId: created.tokenId,
161
+ tokenSecret: Redacted.isRedacted(created.tokenSecret)
162
+ ? created.tokenSecret
163
+ : Redacted.make(created.tokenSecret),
164
+ };
165
+ current = (yield* observe(name)) ?? { serviceUserId: created.serviceUserId, name };
166
+ }
167
+ const user = current ?? {};
168
+ const serviceUserId = user.serviceUserId ?? "";
169
+ // Sync roles against the observed ones; a dropped environment loses access.
170
+ const observed = {};
171
+ for (const entry of user.environmentRoles ?? []) {
172
+ if (entry.environmentName)
173
+ observed[entry.environmentName] = roleOf(entry.role);
174
+ }
175
+ const desired = scoped ? yield* desiredRoles(news, bindings) : {};
176
+ for (const [env, role] of Object.entries(desired)) {
177
+ if (observed[env] === role)
178
+ continue;
179
+ yield* environment.setEnvironmentRole({
180
+ environmentName: env,
181
+ serviceUserId,
182
+ role: ROLE[role],
183
+ });
184
+ }
185
+ for (const env of Object.keys(observed)) {
186
+ if (env in desired || observed[env] === undefined)
187
+ continue;
188
+ yield* environment.setEnvironmentRole({
189
+ environmentName: env,
190
+ serviceUserId,
191
+ role: "ENVIRONMENT_ROLE_NO_ACCESS",
192
+ });
193
+ }
194
+ return {
195
+ serviceUserId,
196
+ name,
197
+ tokenId: token.tokenId,
198
+ tokenSecret: token.tokenSecret,
199
+ scoped,
200
+ environments: desired,
201
+ };
202
+ }),
203
+ delete: Effect.fn(function* ({ output }) {
204
+ yield* service
205
+ .deleteServiceUser({ serviceUserId: output.serviceUserId })
206
+ .pipe(Effect.catchTag("ServiceUserNotFound", () => Effect.void));
207
+ }),
208
+ };
209
+ }));
210
+ //# sourceMappingURL=ServiceUser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceUser.js","sources":["../src/ServiceUser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ import * as volume from "@distilled.cloud/modal/volume";
2
+ import * as Provider from "alchemy/Provider";
3
+ import { Resource } from "alchemy/Resource";
4
+ import * as Effect from "effect/Effect";
5
+ import { type EnvironmentInput } from "./internal.ts";
6
+ import type { Providers } from "./Providers.ts";
7
+ declare const VolumeUnexpectedResponse_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
8
+ readonly _tag: "Modal.VolumeUnexpectedResponse";
9
+ } & Readonly<A>;
10
+ export declare class VolumeUnexpectedResponse extends VolumeUnexpectedResponse_base<{
11
+ readonly message: string;
12
+ }> {
13
+ }
14
+ export interface VolumeProps {
15
+ /**
16
+ * Volume name, unique per environment. If omitted, a unique name is
17
+ * generated from the stack, stage and logical ID. Changing it renames the
18
+ * volume in place.
19
+ */
20
+ name?: string;
21
+ /**
22
+ * Environment the volume lives in. Changing it replaces the volume.
23
+ * @default the workspace's default environment
24
+ */
25
+ environment?: EnvironmentInput;
26
+ /**
27
+ * Volume filesystem version. `2` supports many concurrent writers and
28
+ * files of any count; `1` is Modal's original format. Changing it
29
+ * replaces the volume.
30
+ * @default 2
31
+ */
32
+ version?: 1 | 2;
33
+ }
34
+ export interface VolumeAttributes {
35
+ /** Volume ID (`vo-…`). */
36
+ volumeId: string;
37
+ /** Volume name. */
38
+ name: string;
39
+ /** Environment name, or `undefined` for the workspace default. */
40
+ environment: string | undefined;
41
+ /** Volume filesystem version. */
42
+ version: 1 | 2;
43
+ }
44
+ /**
45
+ * A Modal Volume: a persistent, shared filesystem that Sandboxes and
46
+ * Functions mount at a path. Writes from one container become visible to
47
+ * others after a commit (Sandboxes commit when they exit).
48
+ *
49
+ * Declare a Volume here for data every deployment shares, such as a model
50
+ * cache or a dataset. For one volume per user or session, create them at
51
+ * runtime with {@link CreateVolume}; to read and write files from a Worker or
52
+ * Lambda without a sandbox, bind {@link ReadWriteVolume}.
53
+ *
54
+ * Modal volumes have no tags. Ownership is inferred from Alchemy state: a
55
+ * volume found under an explicit `name` without prior state is reported as
56
+ * unowned.
57
+ *
58
+ * ### Creating a Volume
59
+ * **Example:** A volume with a generated name
60
+ * ```typescript
61
+ * import * as Modal from "@alchemy.run/modal";
62
+ *
63
+ * export const Cache = Modal.Volume("Cache", {});
64
+ * ```
65
+ *
66
+ * **Example:** A named volume in an environment
67
+ * ```typescript
68
+ * import * as Modal from "@alchemy.run/modal";
69
+ *
70
+ * export const Agents = Modal.Environment("Agents", {});
71
+ * export const Models = Modal.Volume("Models", { name: "model-weights", environment: Agents });
72
+ * ```
73
+ *
74
+ * ### Mounting in a Sandbox
75
+ * **Example:** Mount at `/cache`
76
+ * ```typescript
77
+ * // construction phase
78
+ * const cache = yield* Modal.MountVolume(Cache, { path: "/cache" });
79
+ * const sandboxes = yield* Modal.CreateSandbox(Coder);
80
+ * // per request
81
+ * const sandbox = yield* sandboxes.create({ mounts: [cache] });
82
+ * ```
83
+ *
84
+ * ### Reading files from a Worker
85
+ * **Example:** Bind file access
86
+ * ```typescript
87
+ * import * as Cloudflare from "@alchemy.run/cloudflare";
88
+ * import * as Modal from "@alchemy.run/modal";
89
+ * import * as Effect from "effect/Effect";
90
+ * import * as HttpServerResponse from "effect/http/HttpServerResponse";
91
+ * import { Cache } from "./Storage.ts";
92
+ *
93
+ * export default class Api extends Cloudflare.Worker<Api>()(
94
+ * "Api",
95
+ * { main: import.meta.url },
96
+ * Effect.gen(function* () {
97
+ * const cache = yield* Modal.ReadWriteVolume(Cache);
98
+ * return {
99
+ * fetch: Effect.gen(function* () {
100
+ * yield* cache.writeFile("/hello.txt", "hello");
101
+ * const text = yield* cache.readFileString("/hello.txt");
102
+ * return HttpServerResponse.text(text);
103
+ * }).pipe(Effect.orDie),
104
+ * };
105
+ * }).pipe(Effect.provide(Modal.ReadWriteVolumeHttp)),
106
+ * ) {}
107
+ * ```
108
+ *
109
+ * ### Looking up an existing volume
110
+ * `Volume.lookup` references a volume Alchemy doesn't manage (created with
111
+ * the Modal CLI or by another stack). It is read during plan/deploy, never
112
+ * created, updated or deleted.
113
+ *
114
+ * **Example:** Reference an existing volume
115
+ * ```typescript
116
+ * const weights = Modal.Volume.lookup({ name: "model-weights" });
117
+ * ```
118
+ *
119
+ * @resource
120
+ * @product Volume
121
+ */
122
+ export declare const Volume: import("alchemy/Resource").ResourceConstructor<Volume, Providers> & Effect.Effect<import("alchemy/Resource").ResourceConstructor<Volume, never>, never, never> & {
123
+ Self: import("alchemy/Self").Self<Volume>;
124
+ Provider: Provider.Provider<Volume>;
125
+ Aliases: readonly string[] | undefined;
126
+ ref(id: string, options?: {
127
+ stage?: string;
128
+ stack?: string;
129
+ }): Effect.Effect<Volume, never, never>;
130
+ } & {
131
+ lookup(props: {
132
+ name: import("alchemy/Input").Input<string>;
133
+ environment?: import("alchemy/Input").Input<string | undefined>;
134
+ }): Volume;
135
+ } & ((id: string, props: import("./internal/Declared.ts").DeclaredProps<VolumeProps>) => Effect.Effect<Volume, never, Providers>);
136
+ export type Volume = Resource<"Modal.Volume", VolumeProps, VolumeAttributes, never, Providers, VolumeLookup>;
137
+ /**
138
+ * Props for {@link Volume.lookup}: find a volume this stack
139
+ * doesn't manage by its name.
140
+ */
141
+ export interface VolumeLookup {
142
+ /** Volume name. */
143
+ name: string;
144
+ /**
145
+ * Modal environment the object lives in.
146
+ * @default the workspace's default environment
147
+ */
148
+ environment?: string;
149
+ }
150
+ /** A volume by name, or `undefined` when missing. */
151
+ export declare const lookupVolume: (getOrCreate: (input: volume.VolumeGetOrCreateRequest) => Effect.Effect<volume.VolumeGetOrCreateResponse, volume.VolumeGetOrCreateError, never>, name: string, env: string | undefined) => Effect.Effect<{
152
+ volumeId: string;
153
+ name: string;
154
+ environment: string | undefined;
155
+ version: 1 | 2;
156
+ } | undefined, volume.EnvironmentNotFound | volume.VolumeAlreadyExists | volume.ModalOpError, never>;
157
+ /**
158
+ * Get a volume by name, creating it when missing: the one implementation
159
+ * behind {@link Volume}'s reconcile and the runtime {@link CreateVolume}
160
+ * client.
161
+ */
162
+ export declare const ensureVolume: (getOrCreate: (input: volume.VolumeGetOrCreateRequest) => Effect.Effect<volume.VolumeGetOrCreateResponse, volume.VolumeGetOrCreateError, never>, name: string, env: string | undefined, version?: 1 | 2 | undefined) => Effect.Effect<{
163
+ volumeId: string;
164
+ name: string;
165
+ environment: string | undefined;
166
+ version: 1 | 2;
167
+ }, VolumeUnexpectedResponse | volume.VolumeGetOrCreateError, never>;
168
+ export declare const VolumeProvider: () => import("effect/Layer").Layer<Provider.Provider<Volume>, never, import("alchemy/Stack").Stack | import("alchemy/Stage").Stage | volume.ModalOpContext>;
169
+ export {};
170
+ //# sourceMappingURL=Volume.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Volume.d.ts","sources":["../src/Volume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAC;AAGxD,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EACL,KAAK,gBAAgB,EAOtB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;;;;AAGhD,qBAAa,wBAAyB,SAAQ,8BAAmD;IAC/F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG;AAEL,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,iCAAiC;IACjC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;iIAAyD,CAAC;AAE7E,MAAM,MAAM,MAAM,GAAG,QAAQ,CAC3B,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,KAAK,EACL,SAAS,EACT,YAAY,CACb,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAQD,qDAAqD;AACrD,eAAO,MAAM,YAAY;;;;;oGAiBvB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;;mEAuBvB,CAAC;AAEH,eAAO,MAAM,cAAc,6JAwGxB,CAAC"}
package/lib/Volume.js ADDED
@@ -0,0 +1,220 @@
1
+ import * as volume from "@distilled.cloud/modal/volume";
2
+ import { Unowned } from "alchemy/AdoptPolicy";
3
+ import { isResolved } from "alchemy/Diff";
4
+ import * as Provider from "alchemy/Provider";
5
+ import { Resource } from "alchemy/Resource";
6
+ import * as Data from "effect/Data";
7
+ import * as Effect from "effect/Effect";
8
+ import { envNameOf, environmentNames, environmentOf, isGeneratedName, listAll, objectName, } from "./internal.js";
9
+ import { declarable } from "./internal/Declared.js";
10
+ import { isRuntimeName } from "./RuntimeOwner.js";
11
+ export class VolumeUnexpectedResponse extends Data.TaggedError("Modal.VolumeUnexpectedResponse") {
12
+ }
13
+ /**
14
+ * A Modal Volume: a persistent, shared filesystem that Sandboxes and
15
+ * Functions mount at a path. Writes from one container become visible to
16
+ * others after a commit (Sandboxes commit when they exit).
17
+ *
18
+ * Declare a Volume here for data every deployment shares, such as a model
19
+ * cache or a dataset. For one volume per user or session, create them at
20
+ * runtime with {@link CreateVolume}; to read and write files from a Worker or
21
+ * Lambda without a sandbox, bind {@link ReadWriteVolume}.
22
+ *
23
+ * Modal volumes have no tags. Ownership is inferred from Alchemy state: a
24
+ * volume found under an explicit `name` without prior state is reported as
25
+ * unowned.
26
+ *
27
+ * ### Creating a Volume
28
+ * **Example:** A volume with a generated name
29
+ * ```typescript
30
+ * import * as Modal from "@alchemy.run/modal";
31
+ *
32
+ * export const Cache = Modal.Volume("Cache", {});
33
+ * ```
34
+ *
35
+ * **Example:** A named volume in an environment
36
+ * ```typescript
37
+ * import * as Modal from "@alchemy.run/modal";
38
+ *
39
+ * export const Agents = Modal.Environment("Agents", {});
40
+ * export const Models = Modal.Volume("Models", { name: "model-weights", environment: Agents });
41
+ * ```
42
+ *
43
+ * ### Mounting in a Sandbox
44
+ * **Example:** Mount at `/cache`
45
+ * ```typescript
46
+ * // construction phase
47
+ * const cache = yield* Modal.MountVolume(Cache, { path: "/cache" });
48
+ * const sandboxes = yield* Modal.CreateSandbox(Coder);
49
+ * // per request
50
+ * const sandbox = yield* sandboxes.create({ mounts: [cache] });
51
+ * ```
52
+ *
53
+ * ### Reading files from a Worker
54
+ * **Example:** Bind file access
55
+ * ```typescript
56
+ * import * as Cloudflare from "@alchemy.run/cloudflare";
57
+ * import * as Modal from "@alchemy.run/modal";
58
+ * import * as Effect from "effect/Effect";
59
+ * import * as HttpServerResponse from "effect/http/HttpServerResponse";
60
+ * import { Cache } from "./Storage.ts";
61
+ *
62
+ * export default class Api extends Cloudflare.Worker<Api>()(
63
+ * "Api",
64
+ * { main: import.meta.url },
65
+ * Effect.gen(function* () {
66
+ * const cache = yield* Modal.ReadWriteVolume(Cache);
67
+ * return {
68
+ * fetch: Effect.gen(function* () {
69
+ * yield* cache.writeFile("/hello.txt", "hello");
70
+ * const text = yield* cache.readFileString("/hello.txt");
71
+ * return HttpServerResponse.text(text);
72
+ * }).pipe(Effect.orDie),
73
+ * };
74
+ * }).pipe(Effect.provide(Modal.ReadWriteVolumeHttp)),
75
+ * ) {}
76
+ * ```
77
+ *
78
+ * ### Looking up an existing volume
79
+ * `Volume.lookup` references a volume Alchemy doesn't manage (created with
80
+ * the Modal CLI or by another stack). It is read during plan/deploy, never
81
+ * created, updated or deleted.
82
+ *
83
+ * **Example:** Reference an existing volume
84
+ * ```typescript
85
+ * const weights = Modal.Volume.lookup({ name: "model-weights" });
86
+ * ```
87
+ *
88
+ * @resource
89
+ * @product Volume
90
+ */
91
+ export const Volume = declarable()(Resource("Modal.Volume"));
92
+ const versionToWire = (version) => version === 1 ? "VOLUME_FS_VERSION_V1" : "VOLUME_FS_VERSION_V2";
93
+ const versionFromWire = (version) => version === "VOLUME_FS_VERSION_V1" ? 1 : 2;
94
+ /** A volume by name, or `undefined` when missing. */
95
+ export const lookupVolume = Effect.fn(function* (getOrCreate, name, env) {
96
+ const found = yield* getOrCreate({
97
+ deploymentName: name,
98
+ environmentName: environmentOf(env),
99
+ objectCreationType: "OBJECT_CREATION_TYPE_UNSPECIFIED",
100
+ }).pipe(Effect.catchTag("VolumeNotFound", () => Effect.undefined));
101
+ if (!found?.volumeId)
102
+ return undefined;
103
+ return {
104
+ volumeId: found.volumeId,
105
+ name,
106
+ environment: env,
107
+ version: versionFromWire(found.version ?? found.metadata?.version),
108
+ };
109
+ });
110
+ /**
111
+ * Get a volume by name, creating it when missing: the one implementation
112
+ * behind {@link Volume}'s reconcile and the runtime {@link CreateVolume}
113
+ * client.
114
+ */
115
+ export const ensureVolume = Effect.fn(function* (getOrCreate, name, env, version) {
116
+ const created = yield* getOrCreate({
117
+ deploymentName: name,
118
+ environmentName: environmentOf(env),
119
+ objectCreationType: "OBJECT_CREATION_TYPE_CREATE_IF_MISSING",
120
+ version: versionToWire(version),
121
+ });
122
+ if (!created.volumeId) {
123
+ return yield* new VolumeUnexpectedResponse({
124
+ message: `Modal returned no id for volume ${name}`,
125
+ });
126
+ }
127
+ return {
128
+ volumeId: created.volumeId,
129
+ name: created.metadata?.name ?? name,
130
+ environment: env,
131
+ version: versionFromWire(created.version ?? created.metadata?.version),
132
+ };
133
+ });
134
+ export const VolumeProvider = () => Provider.effect(Volume, Effect.gen(function* () {
135
+ const observe = Effect.fn(function* (volumeId, name, env) {
136
+ if (volumeId !== undefined) {
137
+ const byId = yield* volume
138
+ .volumeGetById({ volumeId })
139
+ .pipe(Effect.catchTag("VolumeNotFound", () => Effect.undefined));
140
+ if (byId?.volumeId) {
141
+ return {
142
+ volumeId: byId.volumeId,
143
+ name: byId.metadata?.name ?? name,
144
+ environment: env,
145
+ version: versionFromWire(byId.metadata?.version),
146
+ };
147
+ }
148
+ }
149
+ return yield* lookupVolume(yield* volume.volumeGetOrCreate, name, env);
150
+ });
151
+ return {
152
+ stables: ["volumeId", "environment", "version"],
153
+ diff: Effect.fn(function* ({ news, olds }) {
154
+ if (!isResolved(news))
155
+ return undefined;
156
+ if (envNameOf(news.environment) !== envNameOf(olds?.environment))
157
+ return { action: "replace" };
158
+ if ((news.version ?? 2) !== (olds?.version ?? 2))
159
+ return { action: "replace" };
160
+ return undefined;
161
+ }),
162
+ lookup: Effect.fn(function* ({ name, environment }) {
163
+ return yield* observe(undefined, name, environment);
164
+ }),
165
+ read: Effect.fn(function* ({ id, olds, output }) {
166
+ const name = output?.name ?? (yield* objectName(id, olds?.name));
167
+ const observed = yield* observe(output?.volumeId, name, envNameOf(olds?.environment));
168
+ if (!observed)
169
+ return undefined;
170
+ return output !== undefined || olds?.name === undefined ? observed : Unowned(observed);
171
+ }),
172
+ reconcile: Effect.fn(function* ({ id, news, output, session }) {
173
+ const name = yield* objectName(id, news.name);
174
+ // Observe: the volume we created (by id) or one with the name.
175
+ let current = yield* observe(output?.volumeId, output?.name ?? name, envNameOf(news.environment));
176
+ // Ensure
177
+ if (!current) {
178
+ yield* session.note(`Creating volume ${name}...`);
179
+ current = yield* ensureVolume(yield* volume.volumeGetOrCreate, name, envNameOf(news.environment), news.version);
180
+ }
181
+ // Sync the name: a renamed volume keeps its id and files.
182
+ if (current.name !== name) {
183
+ yield* session.note(`Renaming volume ${current.name} to ${name}...`);
184
+ yield* volume.renameVolume({ volumeId: current.volumeId, name });
185
+ current = { ...current, name };
186
+ }
187
+ return current;
188
+ }),
189
+ delete: Effect.fn(function* ({ output }) {
190
+ yield* volume
191
+ .deleteVolume({
192
+ volumeId: output.volumeId,
193
+ environmentName: environmentOf(output.environment),
194
+ })
195
+ .pipe(Effect.catchTag("VolumeNotFound", () => Effect.void));
196
+ }),
197
+ list: Effect.fn(function* () {
198
+ const envs = yield* environmentNames;
199
+ const all = [];
200
+ for (const env of envs) {
201
+ const items = yield* listAll((pagination) => volume
202
+ .listVolume({ environmentName: env, pagination })
203
+ .pipe(Effect.map((response) => response.items ?? [])), (item) => item.createdAt);
204
+ for (const item of items) {
205
+ const name = item.label ?? item.metadata?.name;
206
+ if (!item.volumeId || !(isGeneratedName(name) || isRuntimeName(name)))
207
+ continue;
208
+ all.push({
209
+ volumeId: item.volumeId,
210
+ name: name ?? "",
211
+ environment: env,
212
+ version: versionFromWire(item.metadata?.version),
213
+ });
214
+ }
215
+ }
216
+ return all;
217
+ }),
218
+ };
219
+ }));
220
+ //# sourceMappingURL=Volume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Volume.js","sources":["../src/Volume.ts"],"names":[],"mappings":"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"}