@alchemy.run/modal 0.0.0 → 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 +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,236 @@
1
+ import type * as functions from "@distilled.cloud/modal/functions";
2
+ import { Platform, type Main, type MainRpc } from "alchemy/Platform";
3
+ import * as Provider from "alchemy/Provider";
4
+ import type { Resource } from "alchemy/Resource";
5
+ import type { HostRuntimeContext, ServerHost } from "alchemy/Runtime/Process";
6
+ import type { ContainerProps } from "./Container.ts";
7
+ import { type RuntimeAttributes } from "./internal/Runtime.ts";
8
+ import type { MountContract } from "./Mounts.ts";
9
+ import type { Providers } from "./Providers.ts";
10
+ import type { DurationInput } from "./SandboxClient.ts";
11
+ /** Serve the function on the web at a `*.modal.run` URL. */
12
+ export interface WebEndpointOptions {
13
+ /**
14
+ * Label in the URL (`https://<workspace>--<label>.modal.run`).
15
+ * @default "<app>-<function>"
16
+ */
17
+ label?: string;
18
+ /**
19
+ * Require Modal's proxy auth headers (`Modal-Key` / `Modal-Secret`, from a
20
+ * `Modal.WebhookToken`) on every request.
21
+ * @default false
22
+ */
23
+ requiresProxyAuth?: boolean;
24
+ /** Custom domains (verified `Modal.Domain`s) that also serve the endpoint. */
25
+ customDomains?: string[];
26
+ }
27
+ /** Run the function on a schedule: a cron expression, or a fixed period. */
28
+ export type FunctionSchedule = {
29
+ /** Cron expression (`"0 9 * * 1-5"`). */
30
+ readonly cron: string;
31
+ /** IANA time zone the expression is read in. @default "UTC" */
32
+ readonly timezone?: string;
33
+ } | {
34
+ /** Time between runs (`"1 hour"`, or seconds). */
35
+ readonly period: DurationInput;
36
+ };
37
+ /** Retry failed calls. */
38
+ export interface FunctionRetries {
39
+ /** Retries after the first failure. */
40
+ readonly maxRetries: number;
41
+ /** Delay multiplier per retry; `1` is a fixed delay. @default 2 */
42
+ readonly backoffCoefficient?: number;
43
+ /** Delay before the first retry. @default 1 second */
44
+ readonly initialDelay?: DurationInput;
45
+ /** Longest delay between retries, at most 60 seconds. @default 60 seconds */
46
+ readonly maxDelay?: DurationInput;
47
+ }
48
+ export interface FunctionProps extends ContainerProps {
49
+ /**
50
+ * Serve the program's `fetch` handler on the web instead of taking calls.
51
+ * The URL is the `url` attribute.
52
+ */
53
+ web?: boolean | WebEndpointOptions;
54
+ /**
55
+ * Run on a schedule. Each tick arrives at the program's `fetch` handler
56
+ * as `POST /__modal/schedule`.
57
+ */
58
+ schedule?: FunctionSchedule;
59
+ /** Retry failed calls: a count, or a backoff policy. Not for web functions. */
60
+ retries?: number | FunctionRetries;
61
+ /** Most inputs one container handles at once. @default 1 */
62
+ maxConcurrentInputs?: number;
63
+ /** Inputs per container the autoscaler aims for (at most `maxConcurrentInputs`). */
64
+ targetConcurrentInputs?: number;
65
+ /** Shut each container down after it handles one input. */
66
+ singleUseContainers?: boolean;
67
+ }
68
+ export interface FunctionAttributes extends RuntimeAttributes {
69
+ /** The web endpoint's URL, for a function with `web`. */
70
+ url: string | undefined;
71
+ /** The program's RPC methods, which `Modal.InvokeFunction` calls. */
72
+ methods: string[];
73
+ }
74
+ declare const FunctionRpcConflict_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 & {
75
+ readonly _tag: "Modal.FunctionRpcConflict";
76
+ } & Readonly<A>;
77
+ /** A Function's program returns RPC methods and also asks for `web` or a `schedule`. */
78
+ export declare class FunctionRpcConflict extends FunctionRpcConflict_base<{
79
+ readonly message: string;
80
+ }> {
81
+ }
82
+ export type Function = Resource<"Modal.Function", FunctionProps, FunctionAttributes, {
83
+ env?: Record<string, any>;
84
+ mounts?: MountContract;
85
+ rpcCallers?: string[];
86
+ }, Providers>;
87
+ export type FunctionServices = ServerHost;
88
+ /**
89
+ * What the program returns: `fetch` for HTTP, and any other functions,
90
+ * its RPC methods.
91
+ */
92
+ export type FunctionShape = Main<FunctionServices> | (Exclude<Main<FunctionServices>, void> & MainRpc<FunctionServices>);
93
+ export type FunctionRuntimeContext = HostRuntimeContext;
94
+ /**
95
+ * A Modal Function running your program: Modal scales its containers with
96
+ * demand (to zero when idle), and the function takes calls, runs on a
97
+ * schedule, or serves the web.
98
+ *
99
+ * Alchemy bundles `main`, builds it into an image on Modal's builder (no
100
+ * Docker), and deploys the function into its `Modal.App`. Modal starts each
101
+ * container with its Python entrypoint; Alchemy's entrypoint starts your
102
+ * program and hands it work:
103
+ *
104
+ * - the program's RPC methods (every function it returns besides `fetch`)
105
+ * become the function's methods: `Modal.InvokeFunction` calls them with
106
+ * typed arguments and results, and Modal queues, retries and autoscales
107
+ * the calls;
108
+ * - with `web`, Modal routes the function's `*.modal.run` URL to the
109
+ * program's `fetch` handler;
110
+ * - a `schedule` tick arrives at `fetch` as `POST /__modal/schedule`.
111
+ *
112
+ * A function serves one of these. To serve methods next to `fetch`, use a
113
+ * `Modal.Server`. The program's env, including the credentials its
114
+ * bindings need, goes into a Modal Secret, never into the image.
115
+ *
116
+ * ### Effect program
117
+ * **Example:** A function other runtimes call
118
+ * ```typescript
119
+ * // src/Embed.ts
120
+ * import * as Modal from "@alchemy.run/modal";
121
+ * import * as Effect from "effect/Effect";
122
+ * import { Inference } from "./Inference.ts";
123
+ *
124
+ * export default class Embed extends Modal.Function<Embed>()(
125
+ * "Embed",
126
+ * { main: import.meta.url, app: Inference },
127
+ * Effect.gen(function* () {
128
+ * return {
129
+ * embed: Effect.fn(function* (text: string) {
130
+ * return { tokens: text.split(/\s+/).length };
131
+ * }),
132
+ * };
133
+ * }),
134
+ * ) {}
135
+ * ```
136
+ *
137
+ * **Example:** Call it from a Cloudflare Worker
138
+ * ```typescript
139
+ * const embed = yield* Modal.InvokeFunction(Embed);
140
+ * const { tokens } = yield* embed.embed("hello modal");
141
+ * ```
142
+ *
143
+ * ### Async program
144
+ * **Example:** A plain HTTP server, no Effect (it runs on Bun)
145
+ * ```typescript
146
+ * // src/Embed.ts
147
+ * import * as Modal from "@alchemy.run/modal";
148
+ * import { Inference } from "./Inference.ts";
149
+ *
150
+ * export const Embed = Modal.Function("Embed", {
151
+ * main: "./src/embed-server.ts",
152
+ * app: Inference,
153
+ * env: { MODEL: "small" },
154
+ * });
155
+ * export type EmbedEnv = Modal.InferEnv<typeof Embed>;
156
+ * ```
157
+ *
158
+ * ```typescript
159
+ * // src/embed-server.ts
160
+ * import type { EmbedEnv } from "./Embed.ts";
161
+ *
162
+ * const env = process.env as unknown as EmbedEnv;
163
+ *
164
+ * Bun.serve({
165
+ * port: Number(process.env.PORT),
166
+ * async fetch(request) {
167
+ * const { args } = (await request.json()) as { args: [string] };
168
+ * return Response.json({ model: env.MODEL, tokens: args[0].split(/\s+/).length });
169
+ * },
170
+ * });
171
+ * ```
172
+ *
173
+ * ### Web endpoints
174
+ * **Example:** Serve `fetch` at a `*.modal.run` URL
175
+ * ```typescript
176
+ * export default class Api extends Modal.Function<Api>()(
177
+ * "Api",
178
+ * { main: import.meta.url, app: Inference, web: true },
179
+ * Effect.gen(function* () {
180
+ * return { fetch: Effect.succeed(HttpServerResponse.text("hello from Modal")) };
181
+ * }),
182
+ * ) {}
183
+ * ```
184
+ *
185
+ * **Example:** Behind Modal's proxy auth
186
+ * ```typescript
187
+ * export default class Admin extends Modal.Function<Admin>()(
188
+ * "Admin",
189
+ * { main: import.meta.url, app: Inference, web: { requiresProxyAuth: true, label: "admin" } },
190
+ * program,
191
+ * ) {}
192
+ * ```
193
+ *
194
+ * ### Schedules
195
+ * **Example:** Run every morning
196
+ * ```typescript
197
+ * export default class Digest extends Modal.Function<Digest>()(
198
+ * "Digest",
199
+ * { main: import.meta.url, app: Inference, schedule: { cron: "0 9 * * *", timezone: "Europe/London" } },
200
+ * Effect.gen(function* () {
201
+ * return {
202
+ * fetch: Effect.gen(function* () {
203
+ * yield* Effect.log("sending the digest");
204
+ * return yield* HttpServerResponse.json(null);
205
+ * }),
206
+ * };
207
+ * }),
208
+ * ) {}
209
+ * ```
210
+ *
211
+ * ### GPUs, volumes and scaling
212
+ * **Example:** A warm GPU function reading weights from a volume
213
+ * ```typescript
214
+ * export default class Generate extends Modal.Function<Generate>()(
215
+ * "Generate",
216
+ * {
217
+ * main: import.meta.url,
218
+ * app: Inference,
219
+ * gpu: "L4",
220
+ * mounts: [{ volume: Weights, path: "/models" }],
221
+ * minContainers: 1,
222
+ * scaledownWindow: 300,
223
+ * maxConcurrentInputs: 8,
224
+ * timeout: "10 minutes",
225
+ * },
226
+ * program,
227
+ * ) {}
228
+ * ```
229
+ *
230
+ * @resource
231
+ * @product Function
232
+ */
233
+ export declare const Function: Platform<Function, FunctionServices, FunctionShape, FunctionRuntimeContext>;
234
+ export declare const FunctionProvider: () => import("effect/Layer").Layer<Provider.Provider<Function>, never, import("effect/FileSystem").FileSystem | import("effect/Path").Path | import("alchemy/Stack").Stack | import("alchemy/Stage").Stage | functions.ModalOpContext>;
235
+ export {};
236
+ //# sourceMappingURL=Function.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Function.d.ts","sources":["../src/Function.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ import { Platform } from "alchemy/Platform";
2
+ import * as Provider from "alchemy/Provider";
3
+ import * as Data from "effect/Data";
4
+ import * as Effect from "effect/Effect";
5
+ import { seconds } from "./internal.js";
6
+ import { ENTRYPOINT, RPC_SERVE_ENV } from "./internal/Entrypoint.js";
7
+ import { createModalRuntimeContext, rpcMethodNamesOf } from "./internal/Rpc.js";
8
+ import { resolveContainerProps, runtimeLifecycle, } from "./internal/Runtime.js";
9
+ /** A Function's program returns RPC methods and also asks for `web` or a `schedule`. */
10
+ export class FunctionRpcConflict extends Data.TaggedError("Modal.FunctionRpcConflict") {
11
+ }
12
+ /**
13
+ * A Modal Function running your program: Modal scales its containers with
14
+ * demand (to zero when idle), and the function takes calls, runs on a
15
+ * schedule, or serves the web.
16
+ *
17
+ * Alchemy bundles `main`, builds it into an image on Modal's builder (no
18
+ * Docker), and deploys the function into its `Modal.App`. Modal starts each
19
+ * container with its Python entrypoint; Alchemy's entrypoint starts your
20
+ * program and hands it work:
21
+ *
22
+ * - the program's RPC methods (every function it returns besides `fetch`)
23
+ * become the function's methods: `Modal.InvokeFunction` calls them with
24
+ * typed arguments and results, and Modal queues, retries and autoscales
25
+ * the calls;
26
+ * - with `web`, Modal routes the function's `*.modal.run` URL to the
27
+ * program's `fetch` handler;
28
+ * - a `schedule` tick arrives at `fetch` as `POST /__modal/schedule`.
29
+ *
30
+ * A function serves one of these. To serve methods next to `fetch`, use a
31
+ * `Modal.Server`. The program's env, including the credentials its
32
+ * bindings need, goes into a Modal Secret, never into the image.
33
+ *
34
+ * ### Effect program
35
+ * **Example:** A function other runtimes call
36
+ * ```typescript
37
+ * // src/Embed.ts
38
+ * import * as Modal from "@alchemy.run/modal";
39
+ * import * as Effect from "effect/Effect";
40
+ * import { Inference } from "./Inference.ts";
41
+ *
42
+ * export default class Embed extends Modal.Function<Embed>()(
43
+ * "Embed",
44
+ * { main: import.meta.url, app: Inference },
45
+ * Effect.gen(function* () {
46
+ * return {
47
+ * embed: Effect.fn(function* (text: string) {
48
+ * return { tokens: text.split(/\s+/).length };
49
+ * }),
50
+ * };
51
+ * }),
52
+ * ) {}
53
+ * ```
54
+ *
55
+ * **Example:** Call it from a Cloudflare Worker
56
+ * ```typescript
57
+ * const embed = yield* Modal.InvokeFunction(Embed);
58
+ * const { tokens } = yield* embed.embed("hello modal");
59
+ * ```
60
+ *
61
+ * ### Async program
62
+ * **Example:** A plain HTTP server, no Effect (it runs on Bun)
63
+ * ```typescript
64
+ * // src/Embed.ts
65
+ * import * as Modal from "@alchemy.run/modal";
66
+ * import { Inference } from "./Inference.ts";
67
+ *
68
+ * export const Embed = Modal.Function("Embed", {
69
+ * main: "./src/embed-server.ts",
70
+ * app: Inference,
71
+ * env: { MODEL: "small" },
72
+ * });
73
+ * export type EmbedEnv = Modal.InferEnv<typeof Embed>;
74
+ * ```
75
+ *
76
+ * ```typescript
77
+ * // src/embed-server.ts
78
+ * import type { EmbedEnv } from "./Embed.ts";
79
+ *
80
+ * const env = process.env as unknown as EmbedEnv;
81
+ *
82
+ * Bun.serve({
83
+ * port: Number(process.env.PORT),
84
+ * async fetch(request) {
85
+ * const { args } = (await request.json()) as { args: [string] };
86
+ * return Response.json({ model: env.MODEL, tokens: args[0].split(/\s+/).length });
87
+ * },
88
+ * });
89
+ * ```
90
+ *
91
+ * ### Web endpoints
92
+ * **Example:** Serve `fetch` at a `*.modal.run` URL
93
+ * ```typescript
94
+ * export default class Api extends Modal.Function<Api>()(
95
+ * "Api",
96
+ * { main: import.meta.url, app: Inference, web: true },
97
+ * Effect.gen(function* () {
98
+ * return { fetch: Effect.succeed(HttpServerResponse.text("hello from Modal")) };
99
+ * }),
100
+ * ) {}
101
+ * ```
102
+ *
103
+ * **Example:** Behind Modal's proxy auth
104
+ * ```typescript
105
+ * export default class Admin extends Modal.Function<Admin>()(
106
+ * "Admin",
107
+ * { main: import.meta.url, app: Inference, web: { requiresProxyAuth: true, label: "admin" } },
108
+ * program,
109
+ * ) {}
110
+ * ```
111
+ *
112
+ * ### Schedules
113
+ * **Example:** Run every morning
114
+ * ```typescript
115
+ * export default class Digest extends Modal.Function<Digest>()(
116
+ * "Digest",
117
+ * { main: import.meta.url, app: Inference, schedule: { cron: "0 9 * * *", timezone: "Europe/London" } },
118
+ * Effect.gen(function* () {
119
+ * return {
120
+ * fetch: Effect.gen(function* () {
121
+ * yield* Effect.log("sending the digest");
122
+ * return yield* HttpServerResponse.json(null);
123
+ * }),
124
+ * };
125
+ * }),
126
+ * ) {}
127
+ * ```
128
+ *
129
+ * ### GPUs, volumes and scaling
130
+ * **Example:** A warm GPU function reading weights from a volume
131
+ * ```typescript
132
+ * export default class Generate extends Modal.Function<Generate>()(
133
+ * "Generate",
134
+ * {
135
+ * main: import.meta.url,
136
+ * app: Inference,
137
+ * gpu: "L4",
138
+ * mounts: [{ volume: Weights, path: "/models" }],
139
+ * minContainers: 1,
140
+ * scaledownWindow: 300,
141
+ * maxConcurrentInputs: 8,
142
+ * timeout: "10 minutes",
143
+ * },
144
+ * program,
145
+ * ) {}
146
+ * ```
147
+ *
148
+ * @resource
149
+ * @product Function
150
+ */
151
+ export const Function = Platform("Modal.Function", {
152
+ createRuntimeContext: createModalRuntimeContext("Modal.Function"),
153
+ transformProps: resolveContainerProps,
154
+ });
155
+ const bootstrapEntry = (handler) => (importPath) => `
156
+ import { bootstrap } from "@alchemy.run/modal/Bootstrap";
157
+ import { ${handler} as entrypoint } from ${JSON.stringify(importPath)};
158
+
159
+ await bootstrap(entrypoint);
160
+ `;
161
+ const scheduleOf = (schedule) => schedule === undefined
162
+ ? undefined
163
+ : "cron" in schedule
164
+ ? { cron: { cronString: schedule.cron, timezone: schedule.timezone ?? "UTC" } }
165
+ : { period: { seconds: seconds(schedule.period) } };
166
+ const retriesOf = (retries) => retries === undefined
167
+ ? undefined
168
+ : typeof retries === "number"
169
+ ? { retries, backoffCoefficient: 1, initialDelayMs: 1000, maxDelayMs: 60_000 }
170
+ : {
171
+ retries: retries.maxRetries,
172
+ backoffCoefficient: retries.backoffCoefficient ?? 2,
173
+ initialDelayMs: Math.round((seconds(retries.initialDelay) ?? 1) * 1000),
174
+ maxDelayMs: Math.round((seconds(retries.maxDelay) ?? 60) * 1000),
175
+ };
176
+ /** How a Function differs from the other runtimes: a call, schedule or web function. */
177
+ const definitionOf = (props, context) => {
178
+ const methods = rpcMethodNamesOf(props.env);
179
+ if (methods.length > 0) {
180
+ // One method per RPC method: callers send its name as the input's
181
+ // `method_name`, and the entrypoint's `Rpc` class forwards it to the
182
+ // program's `/__rpc__/<method>`.
183
+ const formats = ["DATA_FORMAT_PICKLE", "DATA_FORMAT_CBOR"];
184
+ return {
185
+ implementationName: ENTRYPOINT.rpc,
186
+ isClass: true,
187
+ methodDefinitions: Object.fromEntries(methods.map((name) => [
188
+ name,
189
+ {
190
+ functionName: name,
191
+ functionType: "FUNCTION_TYPE_FUNCTION",
192
+ supportedInputFormats: formats,
193
+ supportedOutputFormats: formats,
194
+ },
195
+ ])),
196
+ supportedInputFormats: formats,
197
+ supportedOutputFormats: formats,
198
+ retryPolicy: retriesOf(props.retries),
199
+ maxConcurrentInputs: props.maxConcurrentInputs ?? 0,
200
+ targetConcurrentInputs: props.targetConcurrentInputs ?? 0,
201
+ singleUseContainers: props.singleUseContainers,
202
+ maxInputs: props.singleUseContainers ? 1 : 0,
203
+ };
204
+ }
205
+ if (props.web) {
206
+ const web = props.web === true ? {} : props.web;
207
+ return {
208
+ implementationName: ENTRYPOINT.web,
209
+ webhookConfig: {
210
+ type: "WEBHOOK_TYPE_WEB_SERVER",
211
+ webServerPort: context.port,
212
+ webServerStartupTimeout: context.startupTimeout,
213
+ requestedSuffix: web.label,
214
+ requiresProxyAuth: web.requiresProxyAuth,
215
+ customDomains: web.customDomains?.map((name) => ({ name })),
216
+ },
217
+ supportedInputFormats: ["DATA_FORMAT_ASGI"],
218
+ supportedOutputFormats: ["DATA_FORMAT_ASGI", "DATA_FORMAT_GENERATOR_DONE"],
219
+ schedule: scheduleOf(props.schedule),
220
+ maxConcurrentInputs: props.maxConcurrentInputs ?? 0,
221
+ targetConcurrentInputs: props.targetConcurrentInputs ?? 0,
222
+ singleUseContainers: props.singleUseContainers,
223
+ maxInputs: props.singleUseContainers ? 1 : 0,
224
+ };
225
+ }
226
+ return {
227
+ implementationName: props.schedule ? ENTRYPOINT.schedule : ENTRYPOINT.call,
228
+ supportedInputFormats: ["DATA_FORMAT_PICKLE", "DATA_FORMAT_CBOR"],
229
+ supportedOutputFormats: ["DATA_FORMAT_PICKLE", "DATA_FORMAT_CBOR"],
230
+ schedule: scheduleOf(props.schedule),
231
+ retryPolicy: retriesOf(props.retries),
232
+ maxConcurrentInputs: props.maxConcurrentInputs ?? 0,
233
+ targetConcurrentInputs: props.targetConcurrentInputs ?? 0,
234
+ singleUseContainers: props.singleUseContainers,
235
+ maxInputs: props.singleUseContainers ? 1 : 0,
236
+ };
237
+ };
238
+ export const FunctionProvider = () => Provider.effect(Function, Effect.gen(function* () {
239
+ const lifecycle = yield* runtimeLifecycle({
240
+ type: "Modal.Function",
241
+ definition: definitionOf,
242
+ bootstrap: bootstrapEntry,
243
+ // Modal authenticates every call of a class function, so its
244
+ // program serves RPC (see `createModalRuntimeContext`).
245
+ env: (props) => rpcMethodNamesOf(props.env).length > 0 ? { [RPC_SERVE_ENV]: "1" } : {},
246
+ });
247
+ return {
248
+ stables: lifecycle.stables,
249
+ diff: lifecycle.diff,
250
+ read: Effect.fn(function* ({ output }) {
251
+ const found = yield* lifecycle.read({ output });
252
+ return found === undefined ? undefined : output;
253
+ }),
254
+ reconcile: Effect.fn(function* ({ id, news, output, session, bindings }) {
255
+ const methods = rpcMethodNamesOf(news.env);
256
+ if (methods.length > 0 && (news.web || news.schedule)) {
257
+ return yield* new FunctionRpcConflict({
258
+ message: `${id} returns RPC methods (${methods.join(", ")}) and sets ${news.web ? "web" : "schedule"}: a Modal.Function serves calls to its methods, a web endpoint or a schedule. Serve methods next to fetch with a Modal.Server.`,
259
+ });
260
+ }
261
+ const { attributes, metadata } = yield* lifecycle.reconcile({
262
+ id,
263
+ news,
264
+ output,
265
+ session,
266
+ bindings,
267
+ });
268
+ return { ...attributes, url: news.web ? metadata?.webUrl : undefined, methods };
269
+ }),
270
+ delete: lifecycle.delete,
271
+ };
272
+ }));
273
+ //# sourceMappingURL=Function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Function.js","sources":["../src/Function.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ import * as functions from "@distilled.cloud/modal/functions";
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 FunctionAutoscalerUnexpectedResponse_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.FunctionAutoscalerUnexpectedResponse";
9
+ } & Readonly<A>;
10
+ export declare class FunctionAutoscalerUnexpectedResponse extends FunctionAutoscalerUnexpectedResponse_base<{
11
+ readonly message: string;
12
+ }> {
13
+ }
14
+ export interface FunctionAutoscalerProps {
15
+ /** Name of the deployed App that defines the function. */
16
+ app: string;
17
+ /**
18
+ * The function's name in the App (`"f"` for `@app.function() def f`, or
19
+ * `"Model.*"` for a class). Changing it, the app or the environment
20
+ * replaces this resource.
21
+ */
22
+ function: string;
23
+ /**
24
+ * Environment the App is deployed in.
25
+ * @default the workspace's default environment
26
+ */
27
+ environment?: EnvironmentInput;
28
+ /** Containers kept running even with no inputs (`min_containers`). */
29
+ minContainers?: number;
30
+ /** Most containers the function runs at once (`max_containers`). */
31
+ maxContainers?: number;
32
+ /** Extra idle containers kept ready while the function is busy (`buffer_containers`). */
33
+ bufferContainers?: number;
34
+ /** How long an idle container stays up before scaling down (`scaledown_window`). */
35
+ scaledownWindow?: number | string;
36
+ /** Sustained demand needed before scaling up (`scaleup_window`). */
37
+ scaleupWindow?: number | string;
38
+ /** Inputs each container handles at once before more are added. */
39
+ targetConcurrency?: number;
40
+ }
41
+ /** The autoscaler settings Modal stores for a function. */
42
+ export interface AutoscalerSettingsState {
43
+ minContainers?: number;
44
+ maxContainers?: number;
45
+ bufferContainers?: number;
46
+ scaledownWindow?: number;
47
+ scaleupWindow?: number;
48
+ targetConcurrency?: number;
49
+ }
50
+ export interface FunctionAutoscalerAttributes {
51
+ /** Function ID (`fu-…`). */
52
+ functionId: string;
53
+ /** The settings in effect after the last deploy. */
54
+ settings: AutoscalerSettingsState;
55
+ /** The settings found before the first deploy, restored on destroy. */
56
+ original: AutoscalerSettingsState;
57
+ }
58
+ /**
59
+ * Autoscaling settings for a Modal Function deployed with Modal's Python
60
+ * client (`modal deploy`): warm containers, a container cap, buffer
61
+ * containers and scale-down timing, changed without redeploying the app.
62
+ *
63
+ * For a `Modal.Function` or `Modal.Server` of the Stack, set these on the
64
+ * resource itself. This resource adjusts a function deployed outside the
65
+ * Stack, and restores
66
+ * the settings it found when destroyed. Modal resets overrides like these
67
+ * when the app is redeployed, so redeploying the app and then this stack
68
+ * applies them again.
69
+ *
70
+ * ### Keeping containers warm
71
+ * **Example:** Two warm containers during business hours
72
+ * ```typescript
73
+ * import * as Modal from "@alchemy.run/modal";
74
+ *
75
+ * export const Warm = Modal.FunctionAutoscaler("Warm", {
76
+ * app: "inference",
77
+ * function: "Model.*",
78
+ * minContainers: 2,
79
+ * bufferContainers: 1,
80
+ * scaledownWindow: "5 minutes",
81
+ * });
82
+ * ```
83
+ *
84
+ * @resource
85
+ * @product Function
86
+ */
87
+ export declare const FunctionAutoscaler: import("alchemy/Resource").ResourceConstructor<FunctionAutoscaler, Providers> & Effect.Effect<import("alchemy/Resource").ResourceConstructor<FunctionAutoscaler, never>, never, never> & {
88
+ Self: import("alchemy/Self").Self<FunctionAutoscaler>;
89
+ Provider: Provider.Provider<FunctionAutoscaler>;
90
+ Aliases: readonly string[] | undefined;
91
+ ref(id: string, options?: {
92
+ stage?: string;
93
+ stack?: string;
94
+ }): Effect.Effect<FunctionAutoscaler, never, never>;
95
+ } & ((id: string, props: import("./internal/Declared.ts").DeclaredProps<FunctionAutoscalerProps>) => Effect.Effect<FunctionAutoscaler, never, Providers>);
96
+ export type FunctionAutoscaler = Resource<"Modal.FunctionAutoscaler", FunctionAutoscalerProps, FunctionAutoscalerAttributes, never, Providers>;
97
+ export declare const FunctionAutoscalerProvider: () => import("effect/Layer").Layer<Provider.Provider<FunctionAutoscaler>, never, functions.ModalOpContext>;
98
+ export {};
99
+ //# sourceMappingURL=FunctionAutoscaler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FunctionAutoscaler.d.ts","sources":["../src/FunctionAutoscaler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,kCAAkC,CAAC;AAE9D,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAAqC,MAAM,eAAe,CAAC;AAEzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;;;;AAEhD,qBAAa,oCAAqC,SAAQ,0CAExD;IACA,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG;AAEL,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,GAAG,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,sEAAsE;IACtE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oFAAoF;IACpF,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,2DAA2D;AAC3D,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,4BAA4B;IAC3C,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,QAAQ,EAAE,uBAAuB,CAAC;IAClC,uEAAuE;IACvE,QAAQ,EAAE,uBAAuB,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;yJAE9B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CACvC,0BAA0B,EAC1B,uBAAuB,EACvB,4BAA4B,EAC5B,KAAK,EACL,SAAS,CACV,CAAC;AA6BF,eAAO,MAAM,0BAA0B,4GA8EpC,CAAC"}