@alchemy.run/fly 0.0.0 → 2.0.0-beta.84

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 +57 -4
  3. package/lib/App.d.ts +230 -0
  4. package/lib/App.d.ts.map +1 -0
  5. package/lib/App.js +340 -0
  6. package/lib/App.js.map +1 -0
  7. package/lib/AuthProvider.d.ts +22 -0
  8. package/lib/AuthProvider.d.ts.map +1 -0
  9. package/lib/AuthProvider.js +48 -0
  10. package/lib/AuthProvider.js.map +1 -0
  11. package/lib/BindService.d.ts +159 -0
  12. package/lib/BindService.d.ts.map +1 -0
  13. package/lib/BindService.js +222 -0
  14. package/lib/BindService.js.map +1 -0
  15. package/lib/Bootstrap.d.ts +8 -0
  16. package/lib/Bootstrap.d.ts.map +1 -0
  17. package/lib/Bootstrap.js +41 -0
  18. package/lib/Bootstrap.js.map +1 -0
  19. package/lib/Bucket.d.ts +278 -0
  20. package/lib/Bucket.d.ts.map +1 -0
  21. package/lib/Bucket.js +658 -0
  22. package/lib/Bucket.js.map +1 -0
  23. package/lib/BucketBinding.d.ts +33 -0
  24. package/lib/BucketBinding.d.ts.map +1 -0
  25. package/lib/BucketBinding.js +70 -0
  26. package/lib/BucketBinding.js.map +1 -0
  27. package/lib/Catalog.d.ts +28 -0
  28. package/lib/Catalog.d.ts.map +1 -0
  29. package/lib/Catalog.js +31 -0
  30. package/lib/Catalog.js.map +1 -0
  31. package/lib/Certificate.d.ts +189 -0
  32. package/lib/Certificate.d.ts.map +1 -0
  33. package/lib/Certificate.js +380 -0
  34. package/lib/Certificate.js.map +1 -0
  35. package/lib/Checkpoint.d.ts +55 -0
  36. package/lib/Checkpoint.d.ts.map +1 -0
  37. package/lib/Checkpoint.js +3 -0
  38. package/lib/Checkpoint.js.map +1 -0
  39. package/lib/CheckpointHttp.d.ts +22 -0
  40. package/lib/CheckpointHttp.d.ts.map +1 -0
  41. package/lib/CheckpointHttp.js +53 -0
  42. package/lib/CheckpointHttp.js.map +1 -0
  43. package/lib/ConnectPostgres.d.ts +58 -0
  44. package/lib/ConnectPostgres.d.ts.map +1 -0
  45. package/lib/ConnectPostgres.js +13 -0
  46. package/lib/ConnectPostgres.js.map +1 -0
  47. package/lib/ConnectPostgresHttp.d.ts +26 -0
  48. package/lib/ConnectPostgresHttp.d.ts.map +1 -0
  49. package/lib/ConnectPostgresHttp.js +57 -0
  50. package/lib/ConnectPostgresHttp.js.map +1 -0
  51. package/lib/Contributions.d.ts +7 -0
  52. package/lib/Contributions.d.ts.map +1 -0
  53. package/lib/Contributions.js +6 -0
  54. package/lib/Contributions.js.map +1 -0
  55. package/lib/Credentials.d.ts +33 -0
  56. package/lib/Credentials.d.ts.map +1 -0
  57. package/lib/Credentials.js +59 -0
  58. package/lib/Credentials.js.map +1 -0
  59. package/lib/Decrypt.d.ts +52 -0
  60. package/lib/Decrypt.d.ts.map +1 -0
  61. package/lib/Decrypt.js +3 -0
  62. package/lib/Decrypt.js.map +1 -0
  63. package/lib/DecryptHttp.d.ts +22 -0
  64. package/lib/DecryptHttp.d.ts.map +1 -0
  65. package/lib/DecryptHttp.js +43 -0
  66. package/lib/DecryptHttp.js.map +1 -0
  67. package/lib/DeleteObject.d.ts +29 -0
  68. package/lib/DeleteObject.d.ts.map +1 -0
  69. package/lib/DeleteObject.js +3 -0
  70. package/lib/DeleteObject.js.map +1 -0
  71. package/lib/DeleteObjectHttp.d.ts +12 -0
  72. package/lib/DeleteObjectHttp.d.ts.map +1 -0
  73. package/lib/DeleteObjectHttp.js +17 -0
  74. package/lib/DeleteObjectHttp.js.map +1 -0
  75. package/lib/Deployment.d.ts +51 -0
  76. package/lib/Deployment.d.ts.map +1 -0
  77. package/lib/Deployment.js +62 -0
  78. package/lib/Deployment.js.map +1 -0
  79. package/lib/DeploymentImages.d.ts +18 -0
  80. package/lib/DeploymentImages.d.ts.map +1 -0
  81. package/lib/DeploymentImages.js +61 -0
  82. package/lib/DeploymentImages.js.map +1 -0
  83. package/lib/DeploymentState.d.ts +17 -0
  84. package/lib/DeploymentState.d.ts.map +1 -0
  85. package/lib/DeploymentState.js +87 -0
  86. package/lib/DeploymentState.js.map +1 -0
  87. package/lib/Encrypt.d.ts +50 -0
  88. package/lib/Encrypt.d.ts.map +1 -0
  89. package/lib/Encrypt.js +3 -0
  90. package/lib/Encrypt.js.map +1 -0
  91. package/lib/EncryptHttp.d.ts +22 -0
  92. package/lib/EncryptHttp.d.ts.map +1 -0
  93. package/lib/EncryptHttp.js +39 -0
  94. package/lib/EncryptHttp.js.map +1 -0
  95. package/lib/Environment.d.ts +45 -0
  96. package/lib/Environment.d.ts.map +1 -0
  97. package/lib/Environment.js +43 -0
  98. package/lib/Environment.js.map +1 -0
  99. package/lib/Errors.d.ts +18 -0
  100. package/lib/Errors.d.ts.map +1 -0
  101. package/lib/Errors.js +13 -0
  102. package/lib/Errors.js.map +1 -0
  103. package/lib/Exec.d.ts +41 -0
  104. package/lib/Exec.d.ts.map +1 -0
  105. package/lib/Exec.js +3 -0
  106. package/lib/Exec.js.map +1 -0
  107. package/lib/ExecHttp.d.ts +22 -0
  108. package/lib/ExecHttp.d.ts.map +1 -0
  109. package/lib/ExecHttp.js +39 -0
  110. package/lib/ExecHttp.js.map +1 -0
  111. package/lib/GetObject.d.ts +34 -0
  112. package/lib/GetObject.d.ts.map +1 -0
  113. package/lib/GetObject.js +3 -0
  114. package/lib/GetObject.js.map +1 -0
  115. package/lib/GetObjectHttp.d.ts +12 -0
  116. package/lib/GetObjectHttp.d.ts.map +1 -0
  117. package/lib/GetObjectHttp.js +17 -0
  118. package/lib/GetObjectHttp.js.map +1 -0
  119. package/lib/GetSecret.d.ts +44 -0
  120. package/lib/GetSecret.d.ts.map +1 -0
  121. package/lib/GetSecret.js +3 -0
  122. package/lib/GetSecret.js.map +1 -0
  123. package/lib/GetSecretHttp.d.ts +22 -0
  124. package/lib/GetSecretHttp.d.ts.map +1 -0
  125. package/lib/GetSecretHttp.js +50 -0
  126. package/lib/GetSecretHttp.js.map +1 -0
  127. package/lib/HeadObject.d.ts +29 -0
  128. package/lib/HeadObject.d.ts.map +1 -0
  129. package/lib/HeadObject.js +3 -0
  130. package/lib/HeadObject.js.map +1 -0
  131. package/lib/HeadObjectHttp.d.ts +12 -0
  132. package/lib/HeadObjectHttp.d.ts.map +1 -0
  133. package/lib/HeadObjectHttp.js +17 -0
  134. package/lib/HeadObjectHttp.js.map +1 -0
  135. package/lib/IpAssignment.d.ts +258 -0
  136. package/lib/IpAssignment.d.ts.map +1 -0
  137. package/lib/IpAssignment.js +376 -0
  138. package/lib/IpAssignment.js.map +1 -0
  139. package/lib/ListObjectsV2.d.ts +29 -0
  140. package/lib/ListObjectsV2.d.ts.map +1 -0
  141. package/lib/ListObjectsV2.js +3 -0
  142. package/lib/ListObjectsV2.js.map +1 -0
  143. package/lib/ListObjectsV2Http.d.ts +12 -0
  144. package/lib/ListObjectsV2Http.d.ts.map +1 -0
  145. package/lib/ListObjectsV2Http.js +17 -0
  146. package/lib/ListObjectsV2Http.js.map +1 -0
  147. package/lib/ListSecrets.d.ts +53 -0
  148. package/lib/ListSecrets.d.ts.map +1 -0
  149. package/lib/ListSecrets.js +3 -0
  150. package/lib/ListSecrets.js.map +1 -0
  151. package/lib/ListSecretsHttp.d.ts +22 -0
  152. package/lib/ListSecretsHttp.d.ts.map +1 -0
  153. package/lib/ListSecretsHttp.js +35 -0
  154. package/lib/ListSecretsHttp.js.map +1 -0
  155. package/lib/Machine.d.ts +802 -0
  156. package/lib/Machine.d.ts.map +1 -0
  157. package/lib/Machine.js +773 -0
  158. package/lib/Machine.js.map +1 -0
  159. package/lib/MachineContainers.d.ts +44 -0
  160. package/lib/MachineContainers.d.ts.map +1 -0
  161. package/lib/MachineContainers.js +115 -0
  162. package/lib/MachineContainers.js.map +1 -0
  163. package/lib/Metadata.d.ts +109 -0
  164. package/lib/Metadata.d.ts.map +1 -0
  165. package/lib/Metadata.js +159 -0
  166. package/lib/Metadata.js.map +1 -0
  167. package/lib/MountVolume.d.ts +295 -0
  168. package/lib/MountVolume.d.ts.map +1 -0
  169. package/lib/MountVolume.js +20 -0
  170. package/lib/MountVolume.js.map +1 -0
  171. package/lib/Postgres.d.ts +298 -0
  172. package/lib/Postgres.d.ts.map +1 -0
  173. package/lib/Postgres.js +508 -0
  174. package/lib/Postgres.js.map +1 -0
  175. package/lib/PostgresMigrations.d.ts +35 -0
  176. package/lib/PostgresMigrations.d.ts.map +1 -0
  177. package/lib/PostgresMigrations.js +110 -0
  178. package/lib/PostgresMigrations.js.map +1 -0
  179. package/lib/Providers.d.ts +38 -0
  180. package/lib/Providers.d.ts.map +1 -0
  181. package/lib/Providers.js +95 -0
  182. package/lib/Providers.js.map +1 -0
  183. package/lib/PutObject.d.ts +35 -0
  184. package/lib/PutObject.d.ts.map +1 -0
  185. package/lib/PutObject.js +3 -0
  186. package/lib/PutObject.js.map +1 -0
  187. package/lib/PutObjectHttp.d.ts +12 -0
  188. package/lib/PutObjectHttp.d.ts.map +1 -0
  189. package/lib/PutObjectHttp.js +17 -0
  190. package/lib/PutObjectHttp.js.map +1 -0
  191. package/lib/ReadRedis.d.ts +26 -0
  192. package/lib/ReadRedis.d.ts.map +1 -0
  193. package/lib/ReadRedis.js +3 -0
  194. package/lib/ReadRedis.js.map +1 -0
  195. package/lib/ReadRedisHttp.d.ts +11 -0
  196. package/lib/ReadRedisHttp.d.ts.map +1 -0
  197. package/lib/ReadRedisHttp.js +15 -0
  198. package/lib/ReadRedisHttp.js.map +1 -0
  199. package/lib/ReadWriteRedis.d.ts +29 -0
  200. package/lib/ReadWriteRedis.d.ts.map +1 -0
  201. package/lib/ReadWriteRedis.js +3 -0
  202. package/lib/ReadWriteRedis.js.map +1 -0
  203. package/lib/ReadWriteRedisHttp.d.ts +11 -0
  204. package/lib/ReadWriteRedisHttp.d.ts.map +1 -0
  205. package/lib/ReadWriteRedisHttp.js +15 -0
  206. package/lib/ReadWriteRedisHttp.js.map +1 -0
  207. package/lib/Redis.d.ts +252 -0
  208. package/lib/Redis.d.ts.map +1 -0
  209. package/lib/Redis.js +608 -0
  210. package/lib/Redis.js.map +1 -0
  211. package/lib/RedisBinding.d.ts +7 -0
  212. package/lib/RedisBinding.d.ts.map +1 -0
  213. package/lib/RedisBinding.js +53 -0
  214. package/lib/RedisBinding.js.map +1 -0
  215. package/lib/RedisHttp.d.ts +8 -0
  216. package/lib/RedisHttp.d.ts.map +1 -0
  217. package/lib/RedisHttp.js +8 -0
  218. package/lib/RedisHttp.js.map +1 -0
  219. package/lib/Region.d.ts +16 -0
  220. package/lib/Region.d.ts.map +1 -0
  221. package/lib/Region.js +13 -0
  222. package/lib/Region.js.map +1 -0
  223. package/lib/Secret.d.ts +190 -0
  224. package/lib/Secret.d.ts.map +1 -0
  225. package/lib/Secret.js +310 -0
  226. package/lib/Secret.js.map +1 -0
  227. package/lib/SecretHttp.d.ts +54 -0
  228. package/lib/SecretHttp.d.ts.map +1 -0
  229. package/lib/SecretHttp.js +66 -0
  230. package/lib/SecretHttp.js.map +1 -0
  231. package/lib/SecretKey.d.ts +164 -0
  232. package/lib/SecretKey.d.ts.map +1 -0
  233. package/lib/SecretKey.js +277 -0
  234. package/lib/SecretKey.js.map +1 -0
  235. package/lib/SecretKeyHttp.d.ts +14 -0
  236. package/lib/SecretKeyHttp.d.ts.map +1 -0
  237. package/lib/SecretKeyHttp.js +5 -0
  238. package/lib/SecretKeyHttp.js.map +1 -0
  239. package/lib/Service.d.ts +1022 -0
  240. package/lib/Service.d.ts.map +1 -0
  241. package/lib/Service.js +1397 -0
  242. package/lib/Service.js.map +1 -0
  243. package/lib/Sign.d.ts +36 -0
  244. package/lib/Sign.d.ts.map +1 -0
  245. package/lib/Sign.js +3 -0
  246. package/lib/Sign.js.map +1 -0
  247. package/lib/SignHttp.d.ts +22 -0
  248. package/lib/SignHttp.d.ts.map +1 -0
  249. package/lib/SignHttp.js +36 -0
  250. package/lib/SignHttp.js.map +1 -0
  251. package/lib/Sprite.d.ts +283 -0
  252. package/lib/Sprite.d.ts.map +1 -0
  253. package/lib/Sprite.js +469 -0
  254. package/lib/Sprite.js.map +1 -0
  255. package/lib/SpriteHttp.d.ts +25 -0
  256. package/lib/SpriteHttp.d.ts.map +1 -0
  257. package/lib/SpriteHttp.js +33 -0
  258. package/lib/SpriteHttp.js.map +1 -0
  259. package/lib/Verify.d.ts +37 -0
  260. package/lib/Verify.d.ts.map +1 -0
  261. package/lib/Verify.js +3 -0
  262. package/lib/Verify.js.map +1 -0
  263. package/lib/VerifyHttp.d.ts +22 -0
  264. package/lib/VerifyHttp.d.ts.map +1 -0
  265. package/lib/VerifyHttp.js +38 -0
  266. package/lib/VerifyHttp.js.map +1 -0
  267. package/lib/Volume.d.ts +53 -0
  268. package/lib/Volume.d.ts.map +1 -0
  269. package/lib/Volume.js +188 -0
  270. package/lib/Volume.js.map +1 -0
  271. package/lib/VolumeSnapshot.d.ts +135 -0
  272. package/lib/VolumeSnapshot.d.ts.map +1 -0
  273. package/lib/VolumeSnapshot.js +213 -0
  274. package/lib/VolumeSnapshot.js.map +1 -0
  275. package/lib/Website/AssetDeployment.d.ts +43 -0
  276. package/lib/Website/AssetDeployment.d.ts.map +1 -0
  277. package/lib/Website/AssetDeployment.js +162 -0
  278. package/lib/Website/AssetDeployment.js.map +1 -0
  279. package/lib/Website/Astro.d.ts +87 -0
  280. package/lib/Website/Astro.d.ts.map +1 -0
  281. package/lib/Website/Astro.js +55 -0
  282. package/lib/Website/Astro.js.map +1 -0
  283. package/lib/Website/Foldkit.d.ts +52 -0
  284. package/lib/Website/Foldkit.d.ts.map +1 -0
  285. package/lib/Website/Foldkit.js +45 -0
  286. package/lib/Website/Foldkit.js.map +1 -0
  287. package/lib/Website/FrameworkSite.d.ts +175 -0
  288. package/lib/Website/FrameworkSite.d.ts.map +1 -0
  289. package/lib/Website/FrameworkSite.js +162 -0
  290. package/lib/Website/FrameworkSite.js.map +1 -0
  291. package/lib/Website/Nextjs.d.ts +54 -0
  292. package/lib/Website/Nextjs.d.ts.map +1 -0
  293. package/lib/Website/Nextjs.js +46 -0
  294. package/lib/Website/Nextjs.js.map +1 -0
  295. package/lib/Website/Nuxt.d.ts +51 -0
  296. package/lib/Website/Nuxt.d.ts.map +1 -0
  297. package/lib/Website/Nuxt.js +36 -0
  298. package/lib/Website/Nuxt.js.map +1 -0
  299. package/lib/Website/Octane.d.ts +49 -0
  300. package/lib/Website/Octane.d.ts.map +1 -0
  301. package/lib/Website/Octane.js +39 -0
  302. package/lib/Website/Octane.js.map +1 -0
  303. package/lib/Website/ReactRouter.d.ts +80 -0
  304. package/lib/Website/ReactRouter.d.ts.map +1 -0
  305. package/lib/Website/ReactRouter.js +70 -0
  306. package/lib/Website/ReactRouter.js.map +1 -0
  307. package/lib/Website/SolidStart.d.ts +93 -0
  308. package/lib/Website/SolidStart.d.ts.map +1 -0
  309. package/lib/Website/SolidStart.js +71 -0
  310. package/lib/Website/SolidStart.js.map +1 -0
  311. package/lib/Website/StaticSite.d.ts +155 -0
  312. package/lib/Website/StaticSite.d.ts.map +1 -0
  313. package/lib/Website/StaticSite.js +168 -0
  314. package/lib/Website/StaticSite.js.map +1 -0
  315. package/lib/Website/SvelteKit.d.ts +52 -0
  316. package/lib/Website/SvelteKit.d.ts.map +1 -0
  317. package/lib/Website/SvelteKit.js +37 -0
  318. package/lib/Website/SvelteKit.js.map +1 -0
  319. package/lib/Website/TanStackStart.d.ts +76 -0
  320. package/lib/Website/TanStackStart.d.ts.map +1 -0
  321. package/lib/Website/TanStackStart.js +66 -0
  322. package/lib/Website/TanStackStart.js.map +1 -0
  323. package/lib/Website/Vinext.d.ts +73 -0
  324. package/lib/Website/Vinext.d.ts.map +1 -0
  325. package/lib/Website/Vinext.js +67 -0
  326. package/lib/Website/Vinext.js.map +1 -0
  327. package/lib/Website/Vite.d.ts +103 -0
  328. package/lib/Website/Vite.d.ts.map +1 -0
  329. package/lib/Website/Vite.js +91 -0
  330. package/lib/Website/Vite.js.map +1 -0
  331. package/lib/Website/Vocs.d.ts +52 -0
  332. package/lib/Website/Vocs.d.ts.map +1 -0
  333. package/lib/Website/Vocs.js +38 -0
  334. package/lib/Website/Vocs.js.map +1 -0
  335. package/lib/Website/Waku.d.ts +64 -0
  336. package/lib/Website/Waku.d.ts.map +1 -0
  337. package/lib/Website/Waku.js +39 -0
  338. package/lib/Website/Waku.js.map +1 -0
  339. package/lib/Website/index.d.ts +17 -0
  340. package/lib/Website/index.d.ts.map +1 -0
  341. package/lib/Website/index.js +17 -0
  342. package/lib/Website/index.js.map +1 -0
  343. package/lib/WriteCertificates.d.ts +63 -0
  344. package/lib/WriteCertificates.d.ts.map +1 -0
  345. package/lib/WriteCertificates.js +3 -0
  346. package/lib/WriteCertificates.js.map +1 -0
  347. package/lib/WriteCertificatesHttp.d.ts +25 -0
  348. package/lib/WriteCertificatesHttp.d.ts.map +1 -0
  349. package/lib/WriteCertificatesHttp.js +67 -0
  350. package/lib/WriteCertificatesHttp.js.map +1 -0
  351. package/lib/WriteRedis.d.ts +26 -0
  352. package/lib/WriteRedis.d.ts.map +1 -0
  353. package/lib/WriteRedis.js +3 -0
  354. package/lib/WriteRedis.js.map +1 -0
  355. package/lib/WriteRedisHttp.d.ts +11 -0
  356. package/lib/WriteRedisHttp.d.ts.map +1 -0
  357. package/lib/WriteRedisHttp.js +15 -0
  358. package/lib/WriteRedisHttp.js.map +1 -0
  359. package/lib/WriteSecret.d.ts +68 -0
  360. package/lib/WriteSecret.d.ts.map +1 -0
  361. package/lib/WriteSecret.js +4 -0
  362. package/lib/WriteSecret.js.map +1 -0
  363. package/lib/WriteSecretHttp.d.ts +26 -0
  364. package/lib/WriteSecretHttp.d.ts.map +1 -0
  365. package/lib/WriteSecretHttp.js +54 -0
  366. package/lib/WriteSecretHttp.js.map +1 -0
  367. package/lib/bluegreen.d.ts +36 -0
  368. package/lib/bluegreen.d.ts.map +1 -0
  369. package/lib/bluegreen.js +458 -0
  370. package/lib/bluegreen.js.map +1 -0
  371. package/lib/hosted.d.ts +172 -0
  372. package/lib/hosted.d.ts.map +1 -0
  373. package/lib/hosted.js +458 -0
  374. package/lib/hosted.js.map +1 -0
  375. package/lib/index.d.ts +65 -0
  376. package/lib/index.d.ts.map +1 -0
  377. package/lib/index.js +63 -0
  378. package/lib/index.js.map +1 -0
  379. package/lib/internal/RemoteBuilder.d.ts +28 -0
  380. package/lib/internal/RemoteBuilder.d.ts.map +1 -0
  381. package/lib/internal/RemoteBuilder.js +145 -0
  382. package/lib/internal/RemoteBuilder.js.map +1 -0
  383. package/lib/leases.d.ts +53 -0
  384. package/lib/leases.d.ts.map +1 -0
  385. package/lib/leases.js +279 -0
  386. package/lib/leases.js.map +1 -0
  387. package/lib/ports.d.ts +51 -0
  388. package/lib/ports.d.ts.map +1 -0
  389. package/lib/ports.js +123 -0
  390. package/lib/ports.js.map +1 -0
  391. package/lib/replicas.d.ts +270 -0
  392. package/lib/replicas.d.ts.map +1 -0
  393. package/lib/replicas.js +969 -0
  394. package/lib/replicas.js.map +1 -0
  395. package/lib/rpc.d.ts +35 -0
  396. package/lib/rpc.d.ts.map +1 -0
  397. package/lib/rpc.js +113 -0
  398. package/lib/rpc.js.map +1 -0
  399. package/package.json +83 -3
  400. package/src/App.ts +516 -0
  401. package/src/AuthProvider.ts +68 -0
  402. package/src/BindService.ts +304 -0
  403. package/src/Bootstrap.ts +66 -0
  404. package/src/Bucket.ts +916 -0
  405. package/src/BucketBinding.ts +128 -0
  406. package/src/Catalog.ts +43 -0
  407. package/src/Certificate.ts +548 -0
  408. package/src/Checkpoint.ts +69 -0
  409. package/src/CheckpointHttp.ts +66 -0
  410. package/src/ConnectPostgres.ts +68 -0
  411. package/src/ConnectPostgresHttp.ts +77 -0
  412. package/src/Contributions.ts +9 -0
  413. package/src/Credentials.ts +102 -0
  414. package/src/Decrypt.ts +62 -0
  415. package/src/DecryptHttp.ts +52 -0
  416. package/src/DeleteObject.ts +43 -0
  417. package/src/DeleteObjectHttp.ts +20 -0
  418. package/src/Deployment.ts +121 -0
  419. package/src/DeploymentImages.ts +84 -0
  420. package/src/DeploymentState.ts +104 -0
  421. package/src/Encrypt.ts +60 -0
  422. package/src/EncryptHttp.ts +48 -0
  423. package/src/Environment.ts +81 -0
  424. package/src/Errors.ts +14 -0
  425. package/src/Exec.ts +50 -0
  426. package/src/ExecHttp.ts +47 -0
  427. package/src/GetObject.ts +48 -0
  428. package/src/GetObjectHttp.ts +20 -0
  429. package/src/GetSecret.ts +48 -0
  430. package/src/GetSecretHttp.ts +60 -0
  431. package/src/HeadObject.ts +43 -0
  432. package/src/HeadObjectHttp.ts +20 -0
  433. package/src/IpAssignment.ts +522 -0
  434. package/src/ListObjectsV2.ts +43 -0
  435. package/src/ListObjectsV2Http.ts +20 -0
  436. package/src/ListSecrets.ts +57 -0
  437. package/src/ListSecretsHttp.ts +43 -0
  438. package/src/Machine.ts +1268 -0
  439. package/src/MachineContainers.ts +152 -0
  440. package/src/Metadata.ts +195 -0
  441. package/src/MountVolume.ts +315 -0
  442. package/src/Postgres.ts +777 -0
  443. package/src/PostgresMigrations.ts +153 -0
  444. package/src/Providers.ts +155 -0
  445. package/src/PutObject.ts +49 -0
  446. package/src/PutObjectHttp.ts +20 -0
  447. package/src/ReadRedis.ts +31 -0
  448. package/src/ReadRedisHttp.ts +18 -0
  449. package/src/ReadWriteRedis.ts +33 -0
  450. package/src/ReadWriteRedisHttp.ts +18 -0
  451. package/src/Redis.ts +820 -0
  452. package/src/RedisBinding.ts +64 -0
  453. package/src/RedisHttp.ts +11 -0
  454. package/src/Region.ts +44 -0
  455. package/src/Secret.ts +405 -0
  456. package/src/SecretHttp.ts +149 -0
  457. package/src/SecretKey.ts +389 -0
  458. package/src/SecretKeyHttp.ts +23 -0
  459. package/src/Service.ts +1934 -0
  460. package/src/Sign.ts +46 -0
  461. package/src/SignHttp.ts +44 -0
  462. package/src/Sprite.ts +671 -0
  463. package/src/SpriteHttp.ts +50 -0
  464. package/src/Verify.ts +47 -0
  465. package/src/VerifyHttp.ts +46 -0
  466. package/src/Volume.ts +264 -0
  467. package/src/VolumeSnapshot.ts +321 -0
  468. package/src/Website/AssetDeployment.ts +294 -0
  469. package/src/Website/Astro.ts +87 -0
  470. package/src/Website/Foldkit.ts +54 -0
  471. package/src/Website/FrameworkSite.ts +363 -0
  472. package/src/Website/Nextjs.ts +50 -0
  473. package/src/Website/Nuxt.ts +48 -0
  474. package/src/Website/Octane.ts +44 -0
  475. package/src/Website/ReactRouter.ts +76 -0
  476. package/src/Website/SolidStart.ts +90 -0
  477. package/src/Website/StaticSite.ts +275 -0
  478. package/src/Website/SvelteKit.ts +49 -0
  479. package/src/Website/TanStackStart.ts +72 -0
  480. package/src/Website/Vinext.ts +79 -0
  481. package/src/Website/Vite.ts +112 -0
  482. package/src/Website/Vocs.ts +50 -0
  483. package/src/Website/Waku.ts +65 -0
  484. package/src/Website/index.ts +16 -0
  485. package/src/WriteCertificates.ts +90 -0
  486. package/src/WriteCertificatesHttp.ts +93 -0
  487. package/src/WriteRedis.ts +31 -0
  488. package/src/WriteRedisHttp.ts +18 -0
  489. package/src/WriteSecret.ts +86 -0
  490. package/src/WriteSecretHttp.ts +71 -0
  491. package/src/bluegreen.ts +708 -0
  492. package/src/globals.d.ts +2 -0
  493. package/src/hosted.ts +668 -0
  494. package/src/index.ts +64 -0
  495. package/src/internal/RemoteBuilder.ts +224 -0
  496. package/src/leases.ts +437 -0
  497. package/src/ports.ts +177 -0
  498. package/src/replicas.ts +1480 -0
  499. package/src/rpc.ts +136 -0
@@ -0,0 +1,380 @@
1
+ import * as machines from "@distilled.cloud/fly-io/machines";
2
+ import { isResolved } from "alchemy/Diff";
3
+ import * as Provider from "alchemy/Provider";
4
+ import { Resource } from "alchemy/Resource";
5
+ import * as Data from "effect/Data";
6
+ import * as Effect from "effect/Effect";
7
+ import * as Redacted from "effect/Redacted";
8
+ import * as Schedule from "effect/Schedule";
9
+ import { listOwnedApps } from "./App.js";
10
+ /**
11
+ * A Fly.Certificate covers a hostname on an {@link App}. Default
12
+ * `kind` is `"acme"` (Let's Encrypt). `"custom"` uploads a PEM.
13
+ *
14
+ * IPs and certificates attach to the App. A {@link Service} publishes
15
+ * ports. Fly's proxy terminates TLS on 443 once the certificate is
16
+ * `configured`.
17
+ *
18
+ * @see https://fly.io/docs/machines/api/certificates-resource/
19
+ *
20
+ * ### ACME certificates
21
+ * Request Let's Encrypt for a hostname. The Service does not change.
22
+ * Yield the certificate in the Stack. Point DNS at the App.
23
+ *
24
+ * **Example:** Let's Encrypt
25
+ * ```typescript
26
+ * export const Www = Fly.Certificate("Www", {
27
+ * app: Site,
28
+ * hostname: "www.example.com",
29
+ * });
30
+ * ```
31
+ *
32
+ * :::caution[Changing `hostname` replaces the Certificate]
33
+ * Hostname is the identity. The old hostname is deleted, then the new
34
+ * one is created.
35
+ * :::
36
+ *
37
+ * :::caution[Changing `app` or `kind` replaces the Certificate]
38
+ * The certificate is created on the new App or with the new issuer.
39
+ * :::
40
+ *
41
+ * ### DNS
42
+ * Point an A record at a `shared_v4` {@link IpAssignment} and an AAAA
43
+ * at `v6`. Plus whatever `dnsRequirements` lists for the ACME
44
+ * challenge. Alchemy re-checks via `checkAppCertificate` while
45
+ * `configured` is false.
46
+ *
47
+ * Observed attrs include `status`, `configured`, `acmeRequested`,
48
+ * `dnsRequirements`, and `validation`.
49
+ *
50
+ * **Example:** Yield next to a Service
51
+ * ```typescript
52
+ * export default Alchemy.Stack(
53
+ * "MyApp",
54
+ * { providers: Fly.providers(), state: Alchemy.localState() },
55
+ * Effect.gen(function* () {
56
+ * const api = yield* Api;
57
+ * const ip = yield* PublicIp;
58
+ * const v6 = yield* V6;
59
+ * const www = yield* Www;
60
+ * return {
61
+ * url: api.url,
62
+ * ip: ip.ip,
63
+ * v6: v6.ip,
64
+ * dns: www.dnsRequirements,
65
+ * };
66
+ * }),
67
+ * );
68
+ * ```
69
+ *
70
+ * ### Custom certificates
71
+ * `"custom"` uploads `fullchain` and `privateKey`. Wrap the key with
72
+ * `Redacted.make` so it never logs. Never stored in attributes.
73
+ * Updating the PEM re-uploads in place.
74
+ *
75
+ * **Example:** Upload a PEM
76
+ * ```typescript
77
+ * export const Www = Fly.Certificate("Www", {
78
+ * app: Site,
79
+ * hostname: "www.example.com",
80
+ * kind: "custom",
81
+ * fullchain: pem,
82
+ * privateKey: Redacted.make(key),
83
+ * });
84
+ * ```
85
+ *
86
+ * @resource
87
+ * @product Certificate
88
+ */
89
+ export const Certificate = Resource("Fly.Certificate");
90
+ export class CertificateNotCreated extends Data.TaggedError("Fly.CertificateNotCreated") {
91
+ }
92
+ export class CertificateAppMissing extends Data.TaggedError("Fly.CertificateAppMissing") {
93
+ }
94
+ export class CertificateMaterialRequired extends Data.TaggedError("Fly.CertificateMaterialRequired") {
95
+ }
96
+ const appNameOf = (value) => {
97
+ if (value === null || typeof value !== "object")
98
+ return undefined;
99
+ const rec = value;
100
+ if (typeof rec.appName === "string" && rec.appName.length > 0) {
101
+ return rec.appName;
102
+ }
103
+ if (typeof rec.name === "string" && rec.name.length > 0) {
104
+ return rec.name;
105
+ }
106
+ return undefined;
107
+ };
108
+ const unwrapSecret = (value) => {
109
+ if (value === undefined)
110
+ return undefined;
111
+ return Redacted.isRedacted(value) ? Redacted.value(value) : value;
112
+ };
113
+ const normalizePem = (pem) => (pem ?? "").replace(/\r\n/g, "\n").trim();
114
+ const desiredKind = (props) => props.kind ?? "acme";
115
+ const kindOf = (source) => source === "custom" ? "custom" : "acme";
116
+ const sourceOf = (detail) => {
117
+ const entries = detail.certificates ?? [];
118
+ if (entries.some((entry) => entry.source === "custom"))
119
+ return "custom";
120
+ if (entries.some((entry) => entry.source === "fly"))
121
+ return "fly";
122
+ return detail.acme_requested === true ? "fly" : "custom";
123
+ };
124
+ const sourceFromSummary = (summary) => summary.has_custom_certificate === true ? "custom" : "fly";
125
+ const toDnsRequirements = (req) => {
126
+ if (req === undefined)
127
+ return undefined;
128
+ return {
129
+ a: req.a,
130
+ aaaa: req.aaaa,
131
+ acmeChallenge: req.acme_challenge === undefined
132
+ ? undefined
133
+ : {
134
+ name: req.acme_challenge.name,
135
+ target: req.acme_challenge.target,
136
+ },
137
+ cname: req.cname,
138
+ ownership: req.ownership === undefined
139
+ ? undefined
140
+ : {
141
+ appValue: req.ownership.app_value,
142
+ name: req.ownership.name,
143
+ orgValue: req.ownership.org_value,
144
+ },
145
+ };
146
+ };
147
+ const toValidation = (validation) => {
148
+ if (validation === undefined)
149
+ return undefined;
150
+ return {
151
+ alpnConfigured: validation.alpn_configured,
152
+ dnsConfigured: validation.dns_configured,
153
+ httpConfigured: validation.http_configured,
154
+ ownershipTxtConfigured: validation.ownership_txt_configured,
155
+ };
156
+ };
157
+ const toAttrs = (appName, detail, fallbackHostname) => ({
158
+ appName,
159
+ hostname: detail.hostname ?? fallbackHostname ?? "",
160
+ status: detail.status,
161
+ configured: detail.configured,
162
+ acmeRequested: detail.acme_requested,
163
+ dnsRequirements: toDnsRequirements(detail.dns_requirements),
164
+ validation: toValidation(detail.validation),
165
+ source: sourceOf(detail),
166
+ });
167
+ const toAttrsFromSummary = (appName, summary) => {
168
+ const hostname = summary.hostname;
169
+ if (hostname === undefined || hostname.length === 0)
170
+ return undefined;
171
+ return {
172
+ appName,
173
+ hostname,
174
+ status: summary.status,
175
+ configured: summary.configured,
176
+ acmeRequested: summary.acme_requested,
177
+ dnsRequirements: undefined,
178
+ validation: {
179
+ alpnConfigured: summary.acme_alpn_configured,
180
+ dnsConfigured: summary.acme_dns_configured,
181
+ httpConfigured: summary.acme_http_configured,
182
+ ownershipTxtConfigured: summary.ownership_txt_configured,
183
+ },
184
+ source: sourceFromSummary(summary),
185
+ };
186
+ };
187
+ const getByHostname = (appName, hostname) => machines
188
+ .getAppCertificate({ app_name: appName, hostname })
189
+ .pipe(Effect.catchTag("NotFound", () => Effect.succeed(undefined)));
190
+ const listAppCertificates = (appName) => Effect.gen(function* () {
191
+ const all = [];
192
+ let cursor;
193
+ for (let i = 0; i < 8; i++) {
194
+ const page = yield* machines
195
+ .listAppCertificates({
196
+ app_name: appName,
197
+ cursor,
198
+ limit: 100,
199
+ })
200
+ .pipe(Effect.catchTag(["NotFound", "Forbidden"], () => Effect.succeed({
201
+ certificates: [],
202
+ next_cursor: undefined,
203
+ })));
204
+ all.push(...(page.certificates ?? []));
205
+ if (page.next_cursor === undefined || page.next_cursor.length === 0) {
206
+ break;
207
+ }
208
+ cursor = page.next_cursor;
209
+ }
210
+ return all;
211
+ });
212
+ const waitUntilGone = (appName, hostname) => getByHostname(appName, hostname).pipe(Effect.map((found) => found === undefined), Effect.repeat({
213
+ schedule: Schedule.spaced("1 second"),
214
+ until: (gone) => gone,
215
+ times: 8,
216
+ }));
217
+ const requireCustomMaterial = (hostname, fullchain, privateKey) => fullchain === undefined ||
218
+ fullchain.length === 0 ||
219
+ privateKey === undefined ||
220
+ privateKey.length === 0
221
+ ? new CertificateMaterialRequired({ hostname })
222
+ : undefined;
223
+ const createAcme = (appName, hostname) => machines
224
+ .createAppAcmeCertificate({
225
+ app_name: appName,
226
+ hostname,
227
+ })
228
+ .pipe(Effect.catchTag("Conflict", () => Effect.succeed(undefined)));
229
+ const createCustom = (appName, hostname, fullchain, privateKey) => machines
230
+ .createAppCustomCertificate({
231
+ app_name: appName,
232
+ hostname,
233
+ fullchain,
234
+ private_key: privateKey,
235
+ })
236
+ .pipe(Effect.catchTag("Conflict", () => Effect.succeed(undefined)));
237
+ const replaceCustom = (appName, hostname, fullchain, privateKey) => Effect.gen(function* () {
238
+ yield* machines
239
+ .deleteAppCustomCertificate({
240
+ app_name: appName,
241
+ hostname,
242
+ })
243
+ .pipe(Effect.catchTag("NotFound", () => Effect.void));
244
+ yield* machines.createAppCustomCertificate({
245
+ app_name: appName,
246
+ hostname,
247
+ fullchain,
248
+ private_key: privateKey,
249
+ });
250
+ });
251
+ export const CertificateProvider = () => Provider.succeed(Certificate, {
252
+ stables: ["appName", "hostname", "source"],
253
+ nuke: { dependsOn: ["Fly.App"] },
254
+ diff: Effect.fn(function* ({ news, output }) {
255
+ if (news === undefined || !isResolved(news))
256
+ return undefined;
257
+ if (output === undefined)
258
+ return undefined;
259
+ const appName = appNameOf(news.app);
260
+ const appChanged = appName !== undefined && appName !== output.appName;
261
+ const hostnameChanged = news.hostname !== output.hostname;
262
+ const nextKind = desiredKind(news);
263
+ const kindChanged = nextKind !== kindOf(output.source);
264
+ if (appChanged || hostnameChanged || kindChanged) {
265
+ return {
266
+ action: "replace",
267
+ // Same hostname cannot exist twice — delete the old kind first.
268
+ deleteFirst: !hostnameChanged && !appChanged,
269
+ };
270
+ }
271
+ return undefined;
272
+ }),
273
+ read: Effect.fn(function* ({ olds, output }) {
274
+ const appName = output?.appName ?? appNameOf(olds?.app);
275
+ const hostname = output?.hostname ?? olds?.hostname;
276
+ if (appName === undefined || hostname === undefined)
277
+ return undefined;
278
+ const found = yield* getByHostname(appName, hostname);
279
+ if (found === undefined)
280
+ return undefined;
281
+ return toAttrs(appName, found, hostname);
282
+ }),
283
+ list: Effect.fn(function* () {
284
+ const apps = yield* listOwnedApps();
285
+ const rows = yield* Effect.forEach(apps, (app) => listAppCertificates(app.appName).pipe(Effect.map((certs) => certs.flatMap((item) => {
286
+ const attrs = toAttrsFromSummary(app.appName, item);
287
+ return attrs === undefined ? [] : [attrs];
288
+ }))), { concurrency: 8 });
289
+ return rows.flat();
290
+ }),
291
+ reconcile: Effect.fn(function* ({ news, olds, output }) {
292
+ const props = news ?? {};
293
+ const appName = appNameOf(props.app) ?? output?.appName;
294
+ const hostname = props.hostname ?? output?.hostname;
295
+ if (appName === undefined) {
296
+ return yield* new CertificateAppMissing({
297
+ hostname: hostname ?? "",
298
+ });
299
+ }
300
+ if (hostname === undefined || hostname.length === 0) {
301
+ return yield* new CertificateNotCreated({
302
+ appName,
303
+ hostname: "",
304
+ });
305
+ }
306
+ const kind = desiredKind(props);
307
+ // Observe by cached identity, then by desired hostname.
308
+ let current = output?.hostname !== undefined
309
+ ? yield* getByHostname(output.appName.length > 0 ? output.appName : appName, output.hostname)
310
+ : undefined;
311
+ if (current === undefined && (output?.hostname !== hostname || output?.appName !== appName)) {
312
+ current = yield* getByHostname(appName, hostname);
313
+ }
314
+ let createdThisPass = false;
315
+ if (current === undefined) {
316
+ if (kind === "custom") {
317
+ const fullchain = props.fullchain;
318
+ const privateKey = unwrapSecret(props.privateKey);
319
+ const missing = requireCustomMaterial(hostname, fullchain, privateKey);
320
+ if (missing !== undefined)
321
+ return yield* missing;
322
+ const created = yield* createCustom(appName, hostname, fullchain, privateKey);
323
+ current = created ?? (yield* getByHostname(appName, hostname));
324
+ }
325
+ else {
326
+ const created = yield* createAcme(appName, hostname);
327
+ current = created ?? (yield* getByHostname(appName, hostname));
328
+ }
329
+ createdThisPass = true;
330
+ }
331
+ if (current === undefined) {
332
+ return yield* new CertificateNotCreated({ appName, hostname });
333
+ }
334
+ if (kind === "custom") {
335
+ const fullchain = props.fullchain;
336
+ const privateKey = unwrapSecret(props.privateKey);
337
+ const missing = requireCustomMaterial(hostname, fullchain, privateKey);
338
+ if (missing !== undefined)
339
+ return yield* missing;
340
+ const previousChain = olds?.fullchain;
341
+ const previousKey = unwrapSecret(olds?.privateKey);
342
+ const materialChanged = olds === undefined ||
343
+ normalizePem(fullchain) !== normalizePem(previousChain) ||
344
+ normalizePem(privateKey) !== normalizePem(previousKey);
345
+ if (!createdThisPass && materialChanged) {
346
+ const upserted = yield* createCustom(appName, hostname, fullchain, privateKey);
347
+ if (upserted === undefined) {
348
+ yield* replaceCustom(appName, hostname, fullchain, privateKey);
349
+ }
350
+ current = upserted ?? (yield* getByHostname(appName, hostname)) ?? current;
351
+ }
352
+ }
353
+ else if (current.configured !== true) {
354
+ const checked = yield* machines
355
+ .checkAppCertificate({
356
+ app_name: appName,
357
+ hostname,
358
+ })
359
+ .pipe(Effect.catchTag(["NotFound", "BadRequest"], () => Effect.succeed(undefined)));
360
+ if (checked !== undefined) {
361
+ current = checked;
362
+ }
363
+ }
364
+ return toAttrs(appName, current, hostname);
365
+ }),
366
+ delete: Effect.fn(function* ({ output }) {
367
+ const appName = output.appName;
368
+ const hostname = output.hostname;
369
+ if (appName.length === 0 || hostname.length === 0)
370
+ return;
371
+ yield* machines
372
+ .deleteAppCertificate({
373
+ app_name: appName,
374
+ hostname,
375
+ })
376
+ .pipe(Effect.catchTag("NotFound", () => Effect.void));
377
+ yield* waitUntilGone(appName, hostname);
378
+ }),
379
+ });
380
+ //# sourceMappingURL=Certificate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Certificate.js","sourceRoot":"","sources":["../src/Certificate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { CheckpointInfo as FlyCheckpoint, CreateCheckpointError, GetCheckpointError, ListCheckpointsError, RestoreCheckpointError, StreamEvent } from "@distilled.cloud/fly-io/sprites";
2
+ import * as Binding from "alchemy/Binding";
3
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
4
+ import type * as Effect from "effect/Effect";
5
+ import type { Sprite } from "./Sprite.ts";
6
+ export interface CheckpointClient {
7
+ /**
8
+ * Create a checkpoint of the Sprite filesystem. Returns NDJSON
9
+ * progress events. The checkpoint id is in a `complete` event.
10
+ */
11
+ create: (options?: {
12
+ comment?: string;
13
+ }) => Effect.Effect<ReadonlyArray<StreamEvent>, CreateCheckpointError, RuntimeContext>;
14
+ /** List checkpoints on the Sprite. */
15
+ list: () => Effect.Effect<ReadonlyArray<FlyCheckpoint>, ListCheckpointsError, RuntimeContext>;
16
+ /** Get one checkpoint by id (`v1`, `v2`, …). */
17
+ get: (checkpointId: string) => Effect.Effect<FlyCheckpoint, GetCheckpointError, RuntimeContext>;
18
+ /**
19
+ * Restore the Sprite filesystem to a checkpoint. Destructive.
20
+ * Returns NDJSON progress events.
21
+ */
22
+ restore: (checkpointId: string) => Effect.Effect<ReadonlyArray<StreamEvent>, RestoreCheckpointError, RuntimeContext>;
23
+ }
24
+ /**
25
+ * Checkpoint and restore a {@link Sprite} filesystem.
26
+ *
27
+ *
28
+ * ### Create a checkpoint
29
+ * Bind the client in init. Provide {@link CheckpointHttp}.
30
+ *
31
+ * **Example:** Create
32
+ * ```typescript
33
+ * const checkpoint = yield* Fly.Checkpoint(Box);
34
+ * yield* checkpoint.create({ comment: "before deploy" });
35
+ * ```
36
+ *
37
+ * ### Restore
38
+ * Restore rewinds the filesystem. Running processes stop.
39
+ *
40
+ * **Example:** Restore v1
41
+ * ```typescript
42
+ * yield* checkpoint.restore("v1");
43
+ * ```
44
+ *
45
+ * :::caution[Restore is destructive]
46
+ * The Sprite disk goes back to that checkpoint. Later writes are gone.
47
+ * :::
48
+ *
49
+ * @binding
50
+ * @product Sprite
51
+ */
52
+ export interface Checkpoint extends Binding.Service<Checkpoint, "Fly.Checkpoint", (sprite: Sprite) => Effect.Effect<CheckpointClient>> {
53
+ }
54
+ export declare const Checkpoint: Checkpoint;
55
+ //# sourceMappingURL=Checkpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkpoint.d.ts","sourceRoot":"","sources":["../src/Checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,IAAI,aAAa,EAC/B,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,EACZ,MAAM,iCAAiC,CAAC;AACzC,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,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,qBAAqB,EAAE,cAAc,CAAC,CAAC;IACvF,sCAAsC;IACtC,IAAI,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE,oBAAoB,EAAE,cAAc,CAAC,CAAC;IAC9F,gDAAgD;IAChD,GAAG,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAChG;;;OAGG;IACH,OAAO,EAAE,CACP,YAAY,EAAE,MAAM,KACjB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,sBAAsB,EAAE,cAAc,CAAC,CAAC;CACxF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,WAAW,UAAW,SAAQ,OAAO,CAAC,OAAO,CACjD,UAAU,EACV,gBAAgB,EAChB,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CACpD;CAAG;AAEJ,eAAO,MAAM,UAAU,YAAgD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ export const Checkpoint = Binding.Service("Fly.Checkpoint");
3
+ //# sourceMappingURL=Checkpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkpoint.js","sourceRoot":"","sources":["../src/Checkpoint.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AA4D3C,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAa,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ import * as Layer from "effect/Layer";
2
+ import { Checkpoint } from "./Checkpoint.ts";
3
+ /**
4
+ * HTTP implementation of {@link Checkpoint}. Provide it on the
5
+ * {@link Sprite}, {@link Service}, or Action Effect.
6
+ *
7
+ *
8
+ * ### Provide the layer
9
+ * **Example:** On a Sprite
10
+ * ```typescript
11
+ * Effect.gen(function* () {
12
+ * const checkpoint = yield* Fly.Checkpoint(Box);
13
+ * // ...
14
+ * }).pipe(Effect.provide(Fly.CheckpointHttp))
15
+ * ```
16
+ *
17
+ * @layer
18
+ * @product Sprite
19
+ * @provides Fly.Checkpoint
20
+ */
21
+ export declare const CheckpointHttp: Layer.Layer<Checkpoint, never, never>;
22
+ //# sourceMappingURL=CheckpointHttp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckpointHttp.d.ts","sourceRoot":"","sources":["../src/CheckpointHttp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAyB,MAAM,iBAAiB,CAAC;AAIpE;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,cAAc,uCAuC6D,CAAC"}
@@ -0,0 +1,53 @@
1
+ import * as sprites from "@distilled.cloud/fly-io/sprites";
2
+ import * as Effect from "effect/Effect";
3
+ import * as FetchHttpClient from "effect/http/FetchHttpClient";
4
+ import * as Layer from "effect/Layer";
5
+ import { Checkpoint } from "./Checkpoint.js";
6
+ import { CredentialsFromAmbientOrEnv } from "./Credentials.js";
7
+ import { makeHttpSpriteBinding } from "./SpriteHttp.js";
8
+ /**
9
+ * HTTP implementation of {@link Checkpoint}. Provide it on the
10
+ * {@link Sprite}, {@link Service}, or Action Effect.
11
+ *
12
+ *
13
+ * ### Provide the layer
14
+ * **Example:** On a Sprite
15
+ * ```typescript
16
+ * Effect.gen(function* () {
17
+ * const checkpoint = yield* Fly.Checkpoint(Box);
18
+ * // ...
19
+ * }).pipe(Effect.provide(Fly.CheckpointHttp))
20
+ * ```
21
+ *
22
+ * @layer
23
+ * @product Sprite
24
+ * @provides Fly.Checkpoint
25
+ */
26
+ export const CheckpointHttp = Layer.effect(Checkpoint, Effect.suspend(() => makeHttpSpriteBinding({
27
+ makeClient: (auth, spriteName) => ({
28
+ create: Effect.fn("Fly.Checkpoint.create")(function* (options) {
29
+ return yield* auth.authorize(sprites.createCheckpoint({
30
+ name: yield* spriteName,
31
+ comment: options?.comment,
32
+ }));
33
+ }),
34
+ list: Effect.fn("Fly.Checkpoint.list")(function* () {
35
+ return yield* auth.authorize(sprites.listCheckpoints({
36
+ name: yield* spriteName,
37
+ }));
38
+ }),
39
+ get: Effect.fn("Fly.Checkpoint.get")(function* (checkpointId) {
40
+ return yield* auth.authorize(sprites.getCheckpoint({
41
+ name: yield* spriteName,
42
+ checkpoint_id: checkpointId,
43
+ }));
44
+ }),
45
+ restore: Effect.fn("Fly.Checkpoint.restore")(function* (checkpointId) {
46
+ return yield* auth.authorize(sprites.restoreCheckpoint({
47
+ name: yield* spriteName,
48
+ checkpoint_id: checkpointId,
49
+ }));
50
+ }),
51
+ }),
52
+ }))).pipe(Layer.provide(FetchHttpClient.layer), Layer.provide(CredentialsFromAmbientOrEnv));
53
+ //# sourceMappingURL=CheckpointHttp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckpointHttp.js","sourceRoot":"","sources":["../src/CheckpointHttp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iCAAiC,CAAC;AAC3D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,UAAU,EAAyB,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CACxC,UAAU,EACV,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAClB,qBAAqB,CAAC;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE,UAAU,EAAoB,EAAE,CAAC,CAAC;QACnD,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAO;YAC3D,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAC1B,OAAO,CAAC,gBAAgB,CAAC;gBACvB,IAAI,EAAE,KAAK,CAAC,CAAC,UAAU;gBACvB,OAAO,EAAE,OAAO,EAAE,OAAO;aAC1B,CAAC,CACH,CAAC;QACJ,CAAC,CAAC;QACF,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC;YAC9C,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAC1B,OAAO,CAAC,eAAe,CAAC;gBACtB,IAAI,EAAE,KAAK,CAAC,CAAC,UAAU;aACxB,CAAC,CACH,CAAC;QACJ,CAAC,CAAC;QACF,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,EAAE,YAAY;YAC1D,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAC1B,OAAO,CAAC,aAAa,CAAC;gBACpB,IAAI,EAAE,KAAK,CAAC,CAAC,UAAU;gBACvB,aAAa,EAAE,YAAY;aAC5B,CAAC,CACH,CAAC;QACJ,CAAC,CAAC;QACF,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,EAAE,YAAY;YAClE,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAC1B,OAAO,CAAC,iBAAiB,CAAC;gBACxB,IAAI,EAAE,KAAK,CAAC,CAAC,UAAU;gBACvB,aAAa,EAAE,YAAY;aAC5B,CAAC,CACH,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;CACH,CAAC,CACH,CACF,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC"}
@@ -0,0 +1,58 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ import type { RuntimeContext } from "alchemy/RuntimeContext";
3
+ import type * as Effect from "effect/Effect";
4
+ import type * as Redacted from "effect/Redacted";
5
+ import type { Postgres } from "./Postgres.ts";
6
+ /**
7
+ * Bind a {@link Postgres} cluster to a Fly {@link Service} and obtain
8
+ * the Effect-native connection strings for `Drizzle.Postgres` /
9
+ * `SQL.Postgres`. Alchemy transports the cluster's connection URIs
10
+ * automatically; callers do not configure connection-string env vars.
11
+ *
12
+ * `ConnectPostgres` is the Context tag, the type, and the callable —
13
+ * `yield* Fly.ConnectPostgres(Db)`. Provide {@link ConnectPostgresHttp}.
14
+ *
15
+ * **Example:** Bind Postgres in a Service
16
+ * ```typescript
17
+ * import * as Drizzle from "@alchemy.run/drizzle/Postgres";
18
+ *
19
+ * const conn = yield* Fly.ConnectPostgres(Db);
20
+ * const db = yield* Drizzle.Postgres(conn.connectionString);
21
+ *
22
+ * fetch: Effect.gen(function* () {
23
+ * const rows = yield* db.select().from(users);
24
+ * });
25
+ * ```
26
+ *
27
+ * @binding
28
+ * @product Postgres
29
+ */
30
+ export interface ConnectPostgres extends Binding.Service<ConnectPostgres, "Fly.ConnectPostgres", (postgres: Postgres) => Effect.Effect<ConnectPostgresClient>> {
31
+ }
32
+ export declare const ConnectPostgres: ConnectPostgres;
33
+ export declare const connectEnvKeys: (postgres: Pick<Postgres, "LogicalId">) => {
34
+ pooled: string;
35
+ direct: string;
36
+ };
37
+ declare const PostgresUrlMissing_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 & {
38
+ readonly _tag: "Fly.PostgresUrlMissing";
39
+ } & Readonly<A>;
40
+ export declare class PostgresUrlMissing extends PostgresUrlMissing_base<{
41
+ name: string;
42
+ }> {
43
+ }
44
+ export interface ConnectPostgresClient {
45
+ /**
46
+ * Pooled PgBouncer connection string. Pass this to
47
+ * {@link Drizzle.Postgres} or `SQL.Postgres`.
48
+ */
49
+ connectionString: Effect.Effect<Redacted.Redacted<string>, PostgresUrlMissing, RuntimeContext>;
50
+ /**
51
+ * Direct (non-PgBouncer) connection string. Use this for session-scoped
52
+ * features (advisory locks, `LISTEN/NOTIFY`) when you are not going
53
+ * through the pooled URL.
54
+ */
55
+ directConnectionString: Effect.Effect<Redacted.Redacted<string>, PostgresUrlMissing, RuntimeContext>;
56
+ }
57
+ export {};
58
+ //# sourceMappingURL=ConnectPostgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectPostgres.d.ts","sourceRoot":"","sources":["../src/ConnectPostgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,WAAW,eAAgB,SAAQ,OAAO,CAAC,OAAO,CACtD,eAAe,EACf,qBAAqB,EACrB,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAC7D;CAAG;AAEJ,eAAO,MAAM,eAAe,iBAA0D,CAAC;AAEvF,eAAO,MAAM,cAAc,aAAc,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;IAGhE,MAAM;IACN,MAAM;CAET,CAAC;;;;AAEF,qBAAa,kBAAmB,SAAQ,wBAA2C;IACjF,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;CAAG;AAEL,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAC/F;;;;OAIG;IACH,sBAAsB,EAAE,MAAM,CAAC,MAAM,CACnC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EACzB,kBAAkB,EAClB,cAAc,CACf,CAAC;CACH"}
@@ -0,0 +1,13 @@
1
+ import * as Binding from "alchemy/Binding";
2
+ import * as Data from "effect/Data";
3
+ export const ConnectPostgres = Binding.Service("Fly.ConnectPostgres");
4
+ export const connectEnvKeys = (postgres) => {
5
+ const id = postgres.LogicalId.replaceAll(/[^a-zA-Z0-9]/g, "_").toUpperCase();
6
+ return {
7
+ pooled: `FLY_POSTGRES_${id}_POOLED`,
8
+ direct: `FLY_POSTGRES_${id}_DIRECT`,
9
+ };
10
+ };
11
+ export class PostgresUrlMissing extends Data.TaggedError("Fly.PostgresUrlMissing") {
12
+ }
13
+ //# sourceMappingURL=ConnectPostgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectPostgres.js","sourceRoot":"","sources":["../src/ConnectPostgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAmCpC,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAkB,qBAAqB,CAAC,CAAC;AAEvF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAqC,EAAE,EAAE;IACtE,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7E,OAAO;QACL,MAAM,EAAE,gBAAgB,EAAE,SAAS;QACnC,MAAM,EAAE,gBAAgB,EAAE,SAAS;KACpC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,OAAO,kBAAmB,SAAQ,IAAI,CAAC,WAAW,CAAC,wBAAwB,CAE/E;CAAG"}
@@ -0,0 +1,26 @@
1
+ import * as Layer from "effect/Layer";
2
+ import { ConnectPostgres } from "./ConnectPostgres.ts";
3
+ /**
4
+ * Implementation of {@link ConnectPostgres}. Provide it on the
5
+ * {@link Service} Effect.
6
+ *
7
+ * Registers the cluster attachment for Fly's private network. Alchemy
8
+ * transports each cluster's connection URIs through resource Outputs,
9
+ * so callers do not configure connection-string environment variables.
10
+ *
11
+ *
12
+ * ### Provide the layer
13
+ * **Example:** On a Service
14
+ * ```typescript
15
+ * Effect.gen(function* () {
16
+ * const conn = yield* Fly.ConnectPostgres(Db);
17
+ * const db = yield* Drizzle.Postgres(conn.connectionString);
18
+ * }).pipe(Effect.provide(Fly.ConnectPostgresHttp))
19
+ * ```
20
+ *
21
+ * @layer
22
+ * @product Postgres
23
+ * @provides Fly.ConnectPostgres
24
+ */
25
+ export declare const ConnectPostgresHttp: Layer.Layer<ConnectPostgres, never, never>;
26
+ //# sourceMappingURL=ConnectPostgresHttp.d.ts.map