@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 @@
1
+ {"version":3,"file":"CreateVolume.d.ts","sources":["../src/CreateVolume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,qFAAqF;AACrF,MAAM,WAAW,YAAa,SAAQ,qBAAqB;IACzD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wFAAwF;IACxF,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;CACvC;AAED,uEAAuE;AACvE,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,iFAAiF;IACjF,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IACxF,+CAA+C;IAC/C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,EAAE,OAAO,CAAC,OAAO,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5F,2DAA2D;IAC3D,MAAM,CACJ,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,MAAM,CACd,IAAI,EACF,OAAO,CAAC,OAAO,YAAY,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;KAAE,CAAC,EAC7E,CAAC,CACF,CAAC;IACF,gDAAgD;IAChD,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;CAC9E;AAED,iEAAiE;AACjE,MAAM,MAAM,aAAa,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,MAAM,WAAW,YAAa,SAAQ,OAAO,CAAC,OAAO,CACnD,YAAY,EACZ,oBAAoB,EACpB,CAAC,WAAW,CAAC,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAC5D;CAAG;AAEJ,eAAO,MAAM,YAAY,cAAsD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ export const CreateVolume = Binding.Service("Modal.CreateVolume");
3
+ //# sourceMappingURL=CreateVolume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateVolume.js","sources":["../src/CreateVolume.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AA+F3C,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAe,oBAAoB,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ import * as volume from "@distilled.cloud/modal/volume";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import { CreateVolume, type VolumesClientOf } from "./CreateVolume.ts";
5
+ import { type RuntimeOwner } from "./RuntimeOwner.ts";
6
+ /** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
7
+ export declare const VolumesOps: Effect.Effect<{
8
+ readonly getOrCreate: (input: volume.VolumeGetOrCreateRequest) => Effect.Effect<volume.VolumeGetOrCreateResponse, volume.VolumeGetOrCreateError, never>;
9
+ readonly delete: (input: volume.DeleteVolumeRequest) => Effect.Effect<volume.DeleteVolumeResponse, volume.DeleteVolumeError, never>;
10
+ readonly list: import("@distilled.cloud/core/api").PaginatedCall<volume.ListVolumeRequest, volume.ListVolumeResponse, volume.ListVolumeError, never, volume.VolumeListItem>;
11
+ readonly client: {
12
+ readonly getFile: (input: volume.VolumeGetFile2Request) => Effect.Effect<volume.VolumeGetFile2Response, volume.VolumeGetFile2Error, never>;
13
+ readonly listFiles: import("@distilled.cloud/core/api").StreamingCall<volume.VolumeListFiles2Request, volume.VolumeListFiles2Stream, volume.VolumeListFiles2Error, never, volume.VolumeListFilesResponse>;
14
+ readonly putFiles: (input: volume.VolumePutFiles2Request) => Effect.Effect<volume.VolumePutFiles2Response, volume.VolumePutFiles2Error, never>;
15
+ readonly removeFile: (input: volume.VolumeRemoveFile2Request) => Effect.Effect<volume.VolumeRemoveFile2Response, volume.VolumeRemoveFile2Error, never>;
16
+ readonly copyFiles: (input: volume.VolumeCopyFiles2Request) => Effect.Effect<volume.VolumeCopyFiles2Response, volume.VolumeCopyFiles2Error, never>;
17
+ readonly http: import("effect/http/HttpClient").HttpClient;
18
+ };
19
+ }, never, import("./internal.ts").OperationServices>;
20
+ export type VolumesOps = Effect.Success<typeof VolumesOps>;
21
+ /** A volumes client over an environment name resolved per call. */
22
+ export declare const makeVolumesClient: (environment: Effect.Effect<string | undefined>, ops: VolumesOps, owner?: Effect.Effect<RuntimeOwner | undefined>) => VolumesClientOf<never>;
23
+ /**
24
+ * {@link CreateVolume} over Modal's API. Grants the host's identity (a scoped
25
+ * `Modal.ServiceUser`) the `contributor` role on the environment.
26
+ *
27
+ * @layer
28
+ * @product Volume
29
+ * @provides Modal.CreateVolume
30
+ */
31
+ export declare const CreateVolumeHttp: Layer.Layer<CreateVolume, never, never>;
32
+ //# sourceMappingURL=CreateVolumeHttp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateVolumeHttp.d.ts","sources":["../src/CreateVolumeHttp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAqB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG1F,OAAO,EAAa,KAAK,YAAY,EAA+B,MAAM,mBAAmB,CAAC;AAK9F,oFAAoF;AACpF,eAAO,MAAM,UAAU;;;;;;;;;;;;oDAKrB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,UAAU,CAAC,CAAC;AAS3D,mEAAmE;AACnE,eAAO,MAAM,iBAAiB,gBACf,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,OACzC,UAAU,UACR,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,KAC7C,eAAe,CAAC,KAAK,CAmCtB,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,yCAa5B,CAAC"}
@@ -0,0 +1,69 @@
1
+ import * as volume from "@distilled.cloud/modal/volume";
2
+ import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
+ import { makeOpenModalBinding } from "./BindingHttp.js";
5
+ import { CreateVolume } from "./CreateVolume.js";
6
+ import { environmentOf, listAll, operations } from "./internal.js";
7
+ import { ownedName, RuntimeOwnerOf, unownedName } from "./RuntimeOwner.js";
8
+ import { ensureVolume, lookupVolume } from "./Volume.js";
9
+ import { makeReadWriteVolumeClient } from "./VolumeClient.js";
10
+ import { VolumeFileOps } from "./VolumeFiles.js";
11
+ /** The operations the client calls, resolved by `ModalBindings.withCredentials`. */
12
+ export const VolumesOps = operations({
13
+ getOrCreate: volume.volumeGetOrCreate,
14
+ delete: volume.deleteVolume,
15
+ list: volume.listVolume,
16
+ client: VolumeFileOps,
17
+ });
18
+ const handleOf = (attributes, ops, name) => ({
19
+ ...makeReadWriteVolumeClient(Effect.succeed(attributes.volumeId), ops.client),
20
+ volumeId: Effect.succeed(attributes.volumeId),
21
+ name,
22
+ attributes,
23
+ });
24
+ /** A volumes client over an environment name resolved per call. */
25
+ export const makeVolumesClient = (environment, ops, owner = Effect.undefined) => ({
26
+ getOrCreate: (name) => Effect.flatMap(Effect.all([environment, owner]), ([env, stamp]) => ensureVolume(ops.getOrCreate, ownedName(stamp, name), env)).pipe(Effect.map((attributes) => handleOf(attributes, ops, name))),
27
+ get: (name) => Effect.flatMap(Effect.all([environment, owner]), ([env, stamp]) => lookupVolume(ops.getOrCreate, ownedName(stamp, name), env)).pipe(Effect.map((attributes) => (attributes ? handleOf(attributes, ops, name) : undefined))),
28
+ delete: (name) => Effect.gen(function* () {
29
+ const env = yield* environment;
30
+ const found = yield* lookupVolume(ops.getOrCreate, ownedName(yield* owner, name), env);
31
+ if (!found)
32
+ return;
33
+ yield* ops
34
+ .delete({ volumeId: found.volumeId, environmentName: environmentOf(env) })
35
+ .pipe(Effect.catchTag("VolumeNotFound", () => Effect.void));
36
+ }),
37
+ list: () => Effect.gen(function* () {
38
+ const env = yield* environment;
39
+ const stamp = yield* owner;
40
+ const items = yield* listAll((pagination) => ops
41
+ .list({ environmentName: environmentOf(env), pagination })
42
+ .pipe(Effect.map((response) => response.items ?? [])), (item) => item.createdAt);
43
+ return items.flatMap((item) => {
44
+ const name = item.label ?? item.metadata?.name;
45
+ const own = name ? unownedName(stamp, name) : undefined;
46
+ return own ? [own] : [];
47
+ });
48
+ }),
49
+ });
50
+ /**
51
+ * {@link CreateVolume} over Modal's API. Grants the host's identity (a scoped
52
+ * `Modal.ServiceUser`) the `contributor` role on the environment.
53
+ *
54
+ * @layer
55
+ * @product Volume
56
+ * @provides Modal.CreateVolume
57
+ */
58
+ export const CreateVolumeHttp = Layer.effect(CreateVolume, makeOpenModalBinding({
59
+ tag: "Modal.CreateVolume",
60
+ operations: VolumesOps,
61
+ role: "contributor",
62
+ environmentOf: (environment) => environment?.name,
63
+ make: Effect.fn(function* (ops, environment) {
64
+ const name = environment ? yield* environment.name : Effect.undefined;
65
+ const owner = yield* RuntimeOwnerOf();
66
+ return makeVolumesClient(name, ops, owner);
67
+ }),
68
+ }));
69
+ //# sourceMappingURL=CreateVolumeHttp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreateVolumeHttp.js","sources":["../src/CreateVolumeHttp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { Credentials } from "@distilled.cloud/modal/Credentials";
2
+ import * as Layer from "effect/Layer";
3
+ import * as Redacted from "effect/Redacted";
4
+ export { withAuthToken } from "@distilled.cloud/modal/AuthToken";
5
+ export { Credentials, CredentialsFromEnv, DEFAULT_API_BASE_URL, } from "@distilled.cloud/modal/Credentials";
6
+ /**
7
+ * Build Modal `Credentials` that resolve through the Alchemy AuthProvider:
8
+ * `MODAL_TOKEN_ID` / `MODAL_TOKEN_SECRET` when set, otherwise the selected
9
+ * profile. Resolution is deferred until the first API call, so building the
10
+ * provider layers never needs a profile.
11
+ */
12
+ export declare const fromAuthProvider: () => Layer.Layer<Credentials, never, import("alchemy/Auth/Registry").AuthProviders | import("alchemy/Auth/Profile").ProfileStore>;
13
+ /**
14
+ * Add Modal's short-lived auth token (the `x-modal-auth-token` JWT its V2
15
+ * sandbox RPCs and input plane need) to a token pair's `Credentials`.
16
+ */
17
+ export declare const withAuthTokens: <E, R>(credentials: Layer.Layer<Credentials, E, R>) => Layer.Layer<Credentials, E, R>;
18
+ /**
19
+ * Build Modal `Credentials` from an explicit token pair, e.g. in a test or a
20
+ * script that already holds one.
21
+ *
22
+ * @example
23
+ * ```ts
24
+ * Effect.provide(Modal.fromToken({ tokenId: "ak-…", tokenSecret: "as-…" }))
25
+ * ```
26
+ */
27
+ export declare const fromToken: (input: {
28
+ tokenId: string | Redacted.Redacted<string>;
29
+ tokenSecret: string | Redacted.Redacted<string>;
30
+ apiBaseUrl?: string;
31
+ }) => Layer.Layer<Credentials>;
32
+ //# sourceMappingURL=Credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Credentials.d.ts","sources":["../src/Credentials.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAwB,MAAM,oCAAoC,CAAC;AAGvF,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAI5C,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,oCAAoC,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,oIAa1B,CAAC;AAEJ;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,CAAC,eACpB,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,KAC1C,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CACgD,CAAC;AAEjF;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,UAAW;IAC/B,OAAO,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,KAAG,KAAK,CAAC,KAAK,CAAC,WAAW,CAaxB,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { ConfigError } from "@distilled.cloud/core/errors";
2
+ import { withAuthToken } from "@distilled.cloud/modal/AuthToken";
3
+ import { Credentials, DEFAULT_API_BASE_URL } from "@distilled.cloud/modal/Credentials";
4
+ import { lazyCredentials } from "alchemy/Auth/Resolve";
5
+ import * as Effect from "effect/Effect";
6
+ import * as Layer from "effect/Layer";
7
+ import * as Redacted from "effect/Redacted";
8
+ import { MODAL_AUTH_PROVIDER_NAME } from "./AuthProvider.js";
9
+ import { ModalTransport } from "./internal/Transport.js";
10
+ export { withAuthToken } from "@distilled.cloud/modal/AuthToken";
11
+ export { Credentials, CredentialsFromEnv, DEFAULT_API_BASE_URL, } from "@distilled.cloud/modal/Credentials";
12
+ /**
13
+ * Build Modal `Credentials` that resolve through the Alchemy AuthProvider:
14
+ * `MODAL_TOKEN_ID` / `MODAL_TOKEN_SECRET` when set, otherwise the selected
15
+ * profile. Resolution is deferred until the first API call, so building the
16
+ * provider layers never needs a profile.
17
+ */
18
+ export const fromAuthProvider = () => withAuthTokens(Layer.effect(Credentials, lazyCredentials()(MODAL_AUTH_PROVIDER_NAME, (creds) => ({
19
+ tokenId: creds.tokenId,
20
+ tokenSecret: creds.tokenSecret,
21
+ apiBaseUrl: creds.apiBaseUrl,
22
+ }))));
23
+ /**
24
+ * Add Modal's short-lived auth token (the `x-modal-auth-token` JWT its V2
25
+ * sandbox RPCs and input plane need) to a token pair's `Credentials`.
26
+ */
27
+ export const withAuthTokens = (credentials) => withAuthToken.pipe(Layer.provide(Layer.mergeAll(credentials, ModalTransport)));
28
+ /**
29
+ * Build Modal `Credentials` from an explicit token pair, e.g. in a test or a
30
+ * script that already holds one.
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * Effect.provide(Modal.fromToken({ tokenId: "ak-…", tokenSecret: "as-…" }))
35
+ * ```
36
+ */
37
+ export const fromToken = (input) => withAuthTokens(Layer.succeed(Credentials, Effect.succeed({
38
+ tokenId: typeof input.tokenId === "string" ? Redacted.make(input.tokenId) : input.tokenId,
39
+ tokenSecret: typeof input.tokenSecret === "string"
40
+ ? Redacted.make(input.tokenSecret)
41
+ : input.tokenSecret,
42
+ apiBaseUrl: input.apiBaseUrl ?? DEFAULT_API_BASE_URL,
43
+ })));
44
+ //# sourceMappingURL=Credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Credentials.js","sources":["../src/Credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAiC,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,oCAAoC,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE,CACnC,cAAc,CACZ,KAAK,CAAC,MAAM,CACV,WAAW,EACX,eAAe,EAAyC,CACtD,wBAAwB,EACxB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACV,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,WAAW,EAAE,KAAK,CAAC,WAAW;IAC9B,UAAU,EAAE,KAAK,CAAC,UAAU;CAC7B,CAAC,CACH,CACF,CACF,CAAC;AAEJ;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,WAA2C,EACX,EAAE,CAClC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;AAEjF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAIzB,EAA4B,EAAE,CAC7B,cAAc,CACZ,KAAK,CAAC,OAAO,CACX,WAAW,EACX,MAAM,CAAC,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO;IACzF,WAAW,EACT,OAAO,KAAK,CAAC,WAAW,KAAK,QAAQ;QACnC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;QAClC,CAAC,CAAC,KAAK,CAAC,WAAW;IACvB,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,oBAAoB;CACrD,CAAC,CACH,CACF,CAAC"}
package/lib/Dict.d.ts ADDED
@@ -0,0 +1,147 @@
1
+ import * as dict from "@distilled.cloud/modal/dict";
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 DictUnexpectedResponse_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.DictUnexpectedResponse";
9
+ } & Readonly<A>;
10
+ export declare class DictUnexpectedResponse extends DictUnexpectedResponse_base<{
11
+ readonly message: string;
12
+ }> {
13
+ }
14
+ export interface DictProps {
15
+ /**
16
+ * Dict name, unique per environment. If omitted, a unique name is
17
+ * generated from the stack, stage and logical ID. Changing it replaces the
18
+ * dict (Modal can't rename dicts).
19
+ */
20
+ name?: string;
21
+ /**
22
+ * Environment the dict lives in. Changing it replaces the dict.
23
+ * @default the workspace's default environment
24
+ */
25
+ environment?: EnvironmentInput;
26
+ }
27
+ export interface DictAttributes {
28
+ /** Dict ID (`di-…`). */
29
+ dictId: string;
30
+ /** Dict name. */
31
+ name: string;
32
+ /** Environment name, or `undefined` for the workspace default. */
33
+ environment: string | undefined;
34
+ }
35
+ /**
36
+ * A Modal Dict: a distributed key-value store shared by every container,
37
+ * Sandbox and client in the workspace. Entries expire 7 days after their
38
+ * last write.
39
+ *
40
+ * Bind it with {@link ReadDict}, {@link WriteDict} or {@link ReadWriteDict}
41
+ * to use it from a Worker, Lambda or any other runtime. Values travel as
42
+ * bytes: the bindings encode them as JSON by default.
43
+ *
44
+ * Modal dicts have no tags. Ownership is inferred from Alchemy state: a
45
+ * dict found under an explicit `name` without prior state is reported as
46
+ * unowned.
47
+ *
48
+ * ### Creating a Dict
49
+ * **Example:** A dict with a generated name
50
+ * ```typescript
51
+ * import * as Modal from "@alchemy.run/modal";
52
+ *
53
+ * export const Results = Modal.Dict("Results", {});
54
+ * ```
55
+ *
56
+ * **Example:** A named dict in an environment
57
+ * ```typescript
58
+ * import * as Modal from "@alchemy.run/modal";
59
+ *
60
+ * export const Agents = Modal.Environment("Agents", {});
61
+ * export const Sessions = Modal.Dict("Sessions", { name: "sessions", environment: Agents });
62
+ * ```
63
+ *
64
+ * ### Reading and writing from a Worker
65
+ * **Example:** Bind read and write access
66
+ * ```typescript
67
+ * import * as Cloudflare from "@alchemy.run/cloudflare";
68
+ * import * as Modal from "@alchemy.run/modal";
69
+ * import * as Effect from "effect/Effect";
70
+ * import * as HttpServerResponse from "effect/http/HttpServerResponse";
71
+ * import { Results } from "./Storage.ts";
72
+ *
73
+ * export default class Api extends Cloudflare.Worker<Api>()(
74
+ * "Api",
75
+ * { main: import.meta.url },
76
+ * Effect.gen(function* () {
77
+ * const results = yield* Modal.ReadWriteDict(Results);
78
+ * return {
79
+ * fetch: Effect.gen(function* () {
80
+ * yield* results.put("last-run", { ok: true });
81
+ * const last = yield* results.get("last-run");
82
+ * return yield* HttpServerResponse.json(last ?? null);
83
+ * }).pipe(Effect.orDie),
84
+ * };
85
+ * }).pipe(Effect.provide(Modal.ReadWriteDictHttp)),
86
+ * ) {}
87
+ * ```
88
+ *
89
+ * ### Looking up an existing dict
90
+ * `Dict.lookup` references a dict Alchemy doesn't manage (created with
91
+ * the Modal CLI or by another stack). It is read during plan/deploy, never
92
+ * created, updated or deleted.
93
+ *
94
+ * **Example:** Reference an existing dict
95
+ * ```typescript
96
+ * const cache = Modal.Dict.lookup({ name: "cache" });
97
+ * ```
98
+ *
99
+ * @resource
100
+ * @product Dict
101
+ */
102
+ export declare const Dict: import("alchemy/Resource").ResourceConstructor<Dict, Providers> & Effect.Effect<import("alchemy/Resource").ResourceConstructor<Dict, never>, never, never> & {
103
+ Self: import("alchemy/Self").Self<Dict>;
104
+ Provider: Provider.Provider<Dict>;
105
+ Aliases: readonly string[] | undefined;
106
+ ref(id: string, options?: {
107
+ stage?: string;
108
+ stack?: string;
109
+ }): Effect.Effect<Dict, never, never>;
110
+ } & {
111
+ lookup(props: {
112
+ name: import("alchemy/Input").Input<string>;
113
+ environment?: import("alchemy/Input").Input<string | undefined>;
114
+ }): Dict;
115
+ } & ((id: string, props: import("./internal/Declared.ts").DeclaredProps<DictProps>) => Effect.Effect<Dict, never, Providers>);
116
+ export type Dict = Resource<"Modal.Dict", DictProps, DictAttributes, never, Providers, DictLookup>;
117
+ /**
118
+ * Props for {@link Dict.lookup}: find a dict this stack
119
+ * doesn't manage by its name.
120
+ */
121
+ export interface DictLookup {
122
+ /** Dict name. */
123
+ name: string;
124
+ /**
125
+ * Modal environment the object lives in.
126
+ * @default the workspace's default environment
127
+ */
128
+ environment?: string;
129
+ }
130
+ /** A dict by name, or `undefined` when missing. */
131
+ export declare const lookupDict: (getOrCreate: (input: dict.DictGetOrCreateRequest) => Effect.Effect<dict.DictGetOrCreateResponse, dict.DictGetOrCreateError, never>, name: string, env: string | undefined) => Effect.Effect<{
132
+ dictId: string;
133
+ name: string;
134
+ environment: string | undefined;
135
+ } | undefined, dict.DictAlreadyExists | dict.EnvironmentNotFound | dict.ModalOpError, never>;
136
+ /**
137
+ * Get a dict by name, creating it when missing: the one implementation behind
138
+ * {@link Dict}'s reconcile and the runtime {@link CreateDict} client.
139
+ */
140
+ export declare const ensureDict: (getOrCreate: (input: dict.DictGetOrCreateRequest) => Effect.Effect<dict.DictGetOrCreateResponse, dict.DictGetOrCreateError, never>, name: string, env: string | undefined) => Effect.Effect<{
141
+ dictId: string;
142
+ name: string;
143
+ environment: string | undefined;
144
+ }, DictUnexpectedResponse | dict.DictGetOrCreateError, never>;
145
+ export declare const DictProvider: () => import("effect/Layer").Layer<Provider.Provider<Dict>, never, import("alchemy/Stack").Stack | import("alchemy/Stage").Stage | dict.ModalOpContext>;
146
+ export {};
147
+ //# sourceMappingURL=Dict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dict.d.ts","sources":["../src/Dict.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,6BAA6B,CAAC;AAGpD,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,sBAAuB,SAAQ,4BAAiD;IAC3F,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;CAAG;AAEL,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;6HAAmD,CAAC;AAErE,MAAM,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAEnG;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,mDAAmD;AACnD,eAAO,MAAM,UAAU;;;;4FAYrB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;6DAcrB,CAAC;AAEH,eAAO,MAAM,YAAY,yJA6EtB,CAAC"}
package/lib/Dict.js ADDED
@@ -0,0 +1,175 @@
1
+ import * as dict from "@distilled.cloud/modal/dict";
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 DictUnexpectedResponse extends Data.TaggedError("Modal.DictUnexpectedResponse") {
12
+ }
13
+ /**
14
+ * A Modal Dict: a distributed key-value store shared by every container,
15
+ * Sandbox and client in the workspace. Entries expire 7 days after their
16
+ * last write.
17
+ *
18
+ * Bind it with {@link ReadDict}, {@link WriteDict} or {@link ReadWriteDict}
19
+ * to use it from a Worker, Lambda or any other runtime. Values travel as
20
+ * bytes: the bindings encode them as JSON by default.
21
+ *
22
+ * Modal dicts have no tags. Ownership is inferred from Alchemy state: a
23
+ * dict found under an explicit `name` without prior state is reported as
24
+ * unowned.
25
+ *
26
+ * ### Creating a Dict
27
+ * **Example:** A dict with a generated name
28
+ * ```typescript
29
+ * import * as Modal from "@alchemy.run/modal";
30
+ *
31
+ * export const Results = Modal.Dict("Results", {});
32
+ * ```
33
+ *
34
+ * **Example:** A named dict in an environment
35
+ * ```typescript
36
+ * import * as Modal from "@alchemy.run/modal";
37
+ *
38
+ * export const Agents = Modal.Environment("Agents", {});
39
+ * export const Sessions = Modal.Dict("Sessions", { name: "sessions", environment: Agents });
40
+ * ```
41
+ *
42
+ * ### Reading and writing from a Worker
43
+ * **Example:** Bind read and write access
44
+ * ```typescript
45
+ * import * as Cloudflare from "@alchemy.run/cloudflare";
46
+ * import * as Modal from "@alchemy.run/modal";
47
+ * import * as Effect from "effect/Effect";
48
+ * import * as HttpServerResponse from "effect/http/HttpServerResponse";
49
+ * import { Results } from "./Storage.ts";
50
+ *
51
+ * export default class Api extends Cloudflare.Worker<Api>()(
52
+ * "Api",
53
+ * { main: import.meta.url },
54
+ * Effect.gen(function* () {
55
+ * const results = yield* Modal.ReadWriteDict(Results);
56
+ * return {
57
+ * fetch: Effect.gen(function* () {
58
+ * yield* results.put("last-run", { ok: true });
59
+ * const last = yield* results.get("last-run");
60
+ * return yield* HttpServerResponse.json(last ?? null);
61
+ * }).pipe(Effect.orDie),
62
+ * };
63
+ * }).pipe(Effect.provide(Modal.ReadWriteDictHttp)),
64
+ * ) {}
65
+ * ```
66
+ *
67
+ * ### Looking up an existing dict
68
+ * `Dict.lookup` references a dict Alchemy doesn't manage (created with
69
+ * the Modal CLI or by another stack). It is read during plan/deploy, never
70
+ * created, updated or deleted.
71
+ *
72
+ * **Example:** Reference an existing dict
73
+ * ```typescript
74
+ * const cache = Modal.Dict.lookup({ name: "cache" });
75
+ * ```
76
+ *
77
+ * @resource
78
+ * @product Dict
79
+ */
80
+ export const Dict = declarable()(Resource("Modal.Dict"));
81
+ /** A dict by name, or `undefined` when missing. */
82
+ export const lookupDict = Effect.fn(function* (getOrCreate, name, env) {
83
+ const found = yield* getOrCreate({
84
+ deploymentName: name,
85
+ environmentName: environmentOf(env),
86
+ objectCreationType: "OBJECT_CREATION_TYPE_UNSPECIFIED",
87
+ }).pipe(Effect.catchTag("DictNotFound", () => Effect.undefined));
88
+ if (!found?.dictId)
89
+ return undefined;
90
+ return { dictId: found.dictId, name, environment: env };
91
+ });
92
+ /**
93
+ * Get a dict by name, creating it when missing: the one implementation behind
94
+ * {@link Dict}'s reconcile and the runtime {@link CreateDict} client.
95
+ */
96
+ export const ensureDict = Effect.fn(function* (getOrCreate, name, env) {
97
+ const created = yield* getOrCreate({
98
+ deploymentName: name,
99
+ environmentName: environmentOf(env),
100
+ objectCreationType: "OBJECT_CREATION_TYPE_CREATE_IF_MISSING",
101
+ });
102
+ if (!created.dictId) {
103
+ return yield* new DictUnexpectedResponse({ message: `Modal returned no id for dict ${name}` });
104
+ }
105
+ return { dictId: created.dictId, name, environment: env };
106
+ });
107
+ export const DictProvider = () => Provider.effect(Dict, Effect.gen(function* () {
108
+ const observe = Effect.fn(function* (dictId, name, env) {
109
+ if (dictId !== undefined) {
110
+ const byId = yield* dict
111
+ .dictGetById({ dictId })
112
+ .pipe(Effect.catchTag("DictNotFound", () => Effect.undefined));
113
+ if (byId?.dictId) {
114
+ return {
115
+ dictId: byId.dictId,
116
+ name: byId.metadata?.name ?? name,
117
+ environment: env,
118
+ };
119
+ }
120
+ }
121
+ return yield* lookupDict(yield* dict.dictGetOrCreate, name, env);
122
+ });
123
+ return {
124
+ stables: ["dictId", "name", "environment"],
125
+ diff: Effect.fn(function* ({ id, news, olds, output }) {
126
+ if (!isResolved(news))
127
+ return undefined;
128
+ if (envNameOf(news.environment) !== envNameOf(olds?.environment))
129
+ return { action: "replace" };
130
+ const name = yield* objectName(id, news.name);
131
+ if (output !== undefined && name !== output.name)
132
+ return { action: "replace" };
133
+ return undefined;
134
+ }),
135
+ lookup: Effect.fn(function* ({ name, environment }) {
136
+ return yield* observe(undefined, name, environment);
137
+ }),
138
+ read: Effect.fn(function* ({ id, olds, output }) {
139
+ const name = output?.name ?? (yield* objectName(id, olds?.name));
140
+ const observed = yield* observe(output?.dictId, name, envNameOf(olds?.environment));
141
+ if (!observed)
142
+ return undefined;
143
+ return output !== undefined || olds?.name === undefined ? observed : Unowned(observed);
144
+ }),
145
+ reconcile: Effect.fn(function* ({ id, news, output, session }) {
146
+ const name = output?.name ?? (yield* objectName(id, news.name));
147
+ const current = yield* observe(output?.dictId, name, envNameOf(news.environment));
148
+ if (current)
149
+ return current;
150
+ yield* session.note(`Creating dict ${name}...`);
151
+ return yield* ensureDict(yield* dict.dictGetOrCreate, name, envNameOf(news.environment));
152
+ }),
153
+ delete: Effect.fn(function* ({ output }) {
154
+ yield* dict
155
+ .deleteDict({ dictId: output.dictId })
156
+ .pipe(Effect.catchTag("DictNotFound", () => Effect.void));
157
+ }),
158
+ list: Effect.fn(function* () {
159
+ const envs = yield* environmentNames;
160
+ const all = [];
161
+ for (const env of envs) {
162
+ const items = yield* listAll((pagination) => dict
163
+ .listDict({ environmentName: env, pagination })
164
+ .pipe(Effect.map((response) => response.dicts ?? [])), (item) => item.createdAt);
165
+ for (const item of items) {
166
+ if (!item.dictId || !(isGeneratedName(item.name) || isRuntimeName(item.name)))
167
+ continue;
168
+ all.push({ dictId: item.dictId, name: item.name ?? "", environment: env });
169
+ }
170
+ }
171
+ return all;
172
+ }),
173
+ };
174
+ }));
175
+ //# sourceMappingURL=Dict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dict.js","sources":["../src/Dict.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import * as dict from "@distilled.cloud/modal/dict";
2
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
3
+ import * as Effect from "effect/Effect";
4
+ import { type ModalValueNotJson } from "./BindingHttp.ts";
5
+ import { type OpError } from "./internal.ts";
6
+ /** The dict operations the clients call, resolved by `ModalBindings.withCredentials`. */
7
+ export declare const DictOps: Effect.Effect<{
8
+ readonly clearDict: (input: dict.ClearDictRequest) => Effect.Effect<dict.ClearDictResponse, dict.ClearDictError, never>;
9
+ readonly dictContains: (input: dict.DictContainsRequest) => Effect.Effect<dict.DictContainsResponse, dict.DictContainsError, never>;
10
+ readonly dictContents: import("@distilled.cloud/core/api").StreamingCall<dict.DictContentsRequest, dict.DictContentsStream, dict.DictContentsError, never, dict.DictEntry>;
11
+ readonly dictLen: (input: dict.DictLenRequest) => Effect.Effect<dict.DictLenResponse, dict.DictLenError, never>;
12
+ readonly dictPop: (input: dict.DictPopRequest) => Effect.Effect<dict.DictPopResponse, dict.DictPopError, never>;
13
+ readonly getDict: (input: dict.GetDictRequest) => Effect.Effect<dict.GetDictResponse, dict.GetDictError, never>;
14
+ readonly updateDict: (input: dict.UpdateDictRequest) => Effect.Effect<dict.UpdateDictResponse, dict.UpdateDictError, never>;
15
+ }, never, import("./internal.ts").OperationServices>;
16
+ export type DictOps = Effect.Success<typeof DictOps>;
17
+ /** A dict call's error: the operation's typed errors, and values that aren't JSON. */
18
+ export type DictError<K extends keyof DictOps> = OpError<DictOps, K> | ModalValueNotJson;
19
+ /**
20
+ * Read access to one dict. Keys and values are JSON: `put("a", { n: 1 })`
21
+ * stores the bytes of `JSON.stringify`, so Python code reads them with
22
+ * `json.loads` (Modal's Python client pickles by default).
23
+ */
24
+ export interface ReadDictClient {
25
+ readonly dictId: Effect.Effect<string>;
26
+ /** The value under `key`, or `undefined`. */
27
+ get<A = unknown>(key: unknown): Effect.Effect<A | undefined, DictError<"getDict">, RuntimeContext>;
28
+ /** Whether `key` is present. */
29
+ contains(key: unknown): Effect.Effect<boolean, OpError<DictOps, "dictContains">, RuntimeContext>;
30
+ /** Number of entries. */
31
+ len(): Effect.Effect<number, OpError<DictOps, "dictLen">, RuntimeContext>;
32
+ /** Every entry. */
33
+ entries<A = unknown>(): Effect.Effect<ReadonlyArray<readonly [unknown, A]>, DictError<"dictContents">, RuntimeContext>;
34
+ }
35
+ /** Write access to one dict. */
36
+ export interface WriteDictClient {
37
+ readonly dictId: Effect.Effect<string>;
38
+ /** Set `key` to `value`; with `ifNotExists`, only when absent (returns whether it wrote). */
39
+ put(key: unknown, value: unknown, options?: {
40
+ readonly ifNotExists?: boolean;
41
+ }): Effect.Effect<boolean, OpError<DictOps, "updateDict">, RuntimeContext>;
42
+ /** Set many entries at once. */
43
+ update(entries: Iterable<readonly [unknown, unknown]>): Effect.Effect<void, OpError<DictOps, "updateDict">, RuntimeContext>;
44
+ /** Remove `key` and return its value, or `undefined`. */
45
+ pop<A = unknown>(key: unknown): Effect.Effect<A | undefined, DictError<"dictPop">, RuntimeContext>;
46
+ /** Remove every entry. */
47
+ clear(): Effect.Effect<void, OpError<DictOps, "clearDict">, RuntimeContext>;
48
+ }
49
+ /** Read and write access to one dict. */
50
+ export interface ReadWriteDictClient extends ReadDictClient, WriteDictClient {
51
+ }
52
+ export declare const makeReadDictClient: (dictId: Effect.Effect<string>, ops: DictOps) => ReadDictClient;
53
+ export declare const makeWriteDictClient: (dictId: Effect.Effect<string>, ops: DictOps) => WriteDictClient;
54
+ export declare const makeReadWriteDictClient: (dictId: Effect.Effect<string>, ops: DictOps) => ReadWriteDictClient;
55
+ //# sourceMappingURL=DictClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DictClient.d.ts","sources":["../src/DictClient.ts"],"names":[],"mappings":"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"}