@alchemy.run/fly 0.0.0-stage → 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 +61 -2
  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 +97 -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
package/lib/App.js ADDED
@@ -0,0 +1,340 @@
1
+ import * as machines from "@distilled.cloud/fly-io/machines";
2
+ import * as Retry from "@distilled.cloud/fly-io/Retry";
3
+ import { Unowned } from "alchemy/AdoptPolicy";
4
+ import { isResolved } from "alchemy/Diff";
5
+ import * as Provider from "alchemy/Provider";
6
+ import { Resource } from "alchemy/Resource";
7
+ import * as Data from "effect/Data";
8
+ import * as Effect from "effect/Effect";
9
+ import * as FetchHttpClient from "effect/http/FetchHttpClient";
10
+ import * as HttpClient from "effect/http/HttpClient";
11
+ import * as HttpClientRequest from "effect/http/HttpClientRequest";
12
+ import * as Option from "effect/Option";
13
+ import * as Schedule from "effect/Schedule";
14
+ import { resolveOrgSlug } from "./Environment.js";
15
+ import { createFlyAppName, isAlchemyOwnedMetadata, matchesAlchemyPhysicalName, sanitizeFlyAppName, } from "./Metadata.js";
16
+ import { findPortConflict, portsOfProps, withBindingPort } from "./ports.js";
17
+ import { DEFAULT_BINDING_PORT } from "./rpc.js";
18
+ export class AppDeletionAmbiguous extends Data.TaggedError("Fly.AppDeletionAmbiguous") {
19
+ get message() {
20
+ return `Deletion of ${this.appName} is uncertain (${this.evidence}); reconcile the App before retrying or recreating its name. Machine leases cannot fence App deletion.`;
21
+ }
22
+ }
23
+ /**
24
+ * A Fly.App is a global namespace in your account. It contains Machines,
25
+ * Secrets, IPs, and certificates. A {@link Service} creates its own App,
26
+ * so declare an App yourself for {@link Machine}s, or to group Services
27
+ * that share Secrets or a custom domain (the Service `app` prop).
28
+ *
29
+ * @see https://fly.io/docs/machines/api/apps-resource/
30
+ *
31
+ * ### Create an App
32
+ * Alchemy generates a unique name unless you pass one. `url` is
33
+ * `https://{appName}.fly.dev`. Nothing answers there until a
34
+ * {@link Machine} (or a Service with `app`) publishes a proxy service and
35
+ * the App has an {@link IpAssignment}.
36
+ *
37
+ * **Example:** Generated name
38
+ * ```typescript
39
+ * const site = yield* Fly.App("Site");
40
+ * ```
41
+ *
42
+ * :::note
43
+ * Prefer omitting `name` in tests and CI so names stay unique and
44
+ * reclaimable.
45
+ * :::
46
+ *
47
+ * ### A stable hostname
48
+ * Pass `name` when you need a stable `fly.dev` hostname.
49
+ *
50
+ * **Example:** Explicit name
51
+ * ```typescript
52
+ * const site = yield* Fly.App("Site", {
53
+ * name: "my-site",
54
+ * });
55
+ * ```
56
+ *
57
+ * :::caution[Changing `name` replaces the App]
58
+ * Fly cannot have two Apps with the same name. Alchemy deletes the
59
+ * old App first, then creates the new one.
60
+ * :::
61
+ *
62
+ * ### Organization
63
+ * Org defaults to the current token. Pass `orgSlug` to pin it.
64
+ *
65
+ * **Example:** Pin an org
66
+ * ```typescript
67
+ * const site = yield* Fly.App("Site", {
68
+ * name: "my-site",
69
+ * orgSlug: "my-org",
70
+ * });
71
+ * ```
72
+ *
73
+ * :::caution[Changing `orgSlug` replaces the App]
74
+ * The App is created in the new org. The old App is deleted.
75
+ * :::
76
+ *
77
+ * ### Subdomains
78
+ * `enableSubdomains: true` turns on `*.{appName}.fly.dev`.
79
+ *
80
+ * **Example:** Enable subdomains
81
+ * ```typescript
82
+ * const site = yield* Fly.App("Site", {
83
+ * name: "my-site",
84
+ * enableSubdomains: true,
85
+ * });
86
+ * ```
87
+ *
88
+ * :::note[Create-only]
89
+ * Flipping `enableSubdomains` later is ignored.
90
+ * :::
91
+ *
92
+ * ### Isolated network
93
+ * `network` is an optional 6PN name.
94
+ *
95
+ * **Example:** Custom network
96
+ * ```typescript
97
+ * const site = yield* Fly.App("Site", {
98
+ * name: "my-site",
99
+ * network: "private",
100
+ * });
101
+ * ```
102
+ *
103
+ * :::caution[Changing `network` replaces the App]
104
+ * The App is recreated on the new network.
105
+ * :::
106
+ *
107
+ * ### Module-scope declarations
108
+ * Declare the App once. Pass it into every child. Resource-valued props
109
+ * accept the resource or an Effect producing it. Do not unwrap it just
110
+ * to pass it along.
111
+ *
112
+ * **Example:** Module-scope App
113
+ * ```typescript
114
+ * // src/app.ts
115
+ * import * as Fly from "@alchemy.run/fly";
116
+ *
117
+ * export const Site = Fly.App("Site");
118
+ * ```
119
+ *
120
+ * @resource
121
+ * @product App
122
+ */
123
+ export const App = Resource("Fly.App");
124
+ export class AppNotCreated extends Data.TaggedError("Fly.AppNotCreated") {
125
+ get message() {
126
+ return `Fly App ${this.name} was not created${this.reason ? `: ${this.reason}` : ""}`;
127
+ }
128
+ }
129
+ const toAttrs = (app, fallbackName) => {
130
+ const appName = app.name ?? fallbackName ?? "";
131
+ return {
132
+ appId: app.id ?? appName,
133
+ appName,
134
+ internalNumericId: app.internal_numeric_id,
135
+ network: app.network,
136
+ status: app.status,
137
+ orgSlug: app.organization?.slug,
138
+ machineCount: app.machine_count,
139
+ volumeCount: app.volume_count,
140
+ url: `https://${appName}.fly.dev`,
141
+ };
142
+ };
143
+ const resolveAppName = (id, name, existing) => Effect.gen(function* () {
144
+ if (name !== undefined)
145
+ return sanitizeFlyAppName(name);
146
+ if (existing !== undefined)
147
+ return existing;
148
+ return yield* createFlyAppName(id);
149
+ });
150
+ const getByName = (appName) => machines
151
+ .getApp({ app_name: appName })
152
+ .pipe(Effect.catchTag("NotFound", () => Effect.succeed(undefined)));
153
+ const hasAlchemyMachines = (appName) => machines.listMachines({ app_name: appName }).pipe(Effect.map((machines) => machines.some((machine) => isAlchemyOwnedMetadata(machine.config?.metadata))), Effect.catchTag(["NotFound", "Forbidden"], () => Effect.succeed(false)));
154
+ const hasAlchemyNamed = (names) => names.some((name) => matchesAlchemyPhysicalName(name));
155
+ const hasAlchemyVolumes = (appName) => machines.listVolumes({ app_name: appName }).pipe(Effect.map((volumes) => hasAlchemyNamed(volumes.map((volume) => volume.name))), Effect.catchTag(["NotFound", "Forbidden"], () => Effect.succeed(false)));
156
+ const hasAlchemySecrets = (appName) => machines.listSecrets({ app_name: appName }).pipe(Effect.map((res) => hasAlchemyNamed((res.secrets ?? []).map((secret) => secret.name))), Effect.catchTag(["NotFound", "Forbidden"], () => Effect.succeed(false)));
157
+ const hasAlchemySecretKeys = (appName) => machines.listSecretKeys({ app_name: appName }).pipe(Effect.map((res) => hasAlchemyNamed((res.secret_keys ?? []).map((key) => key.name))), Effect.catchTag(["NotFound", "Forbidden"], () => Effect.succeed(false)));
158
+ const isOwnedApp = (app) => Effect.gen(function* () {
159
+ if (matchesAlchemyPhysicalName(app.name))
160
+ return true;
161
+ const appName = app.name;
162
+ if (appName === undefined || appName.length === 0)
163
+ return false;
164
+ const flags = yield* Effect.all([
165
+ hasAlchemyMachines(appName),
166
+ hasAlchemyVolumes(appName),
167
+ hasAlchemySecrets(appName),
168
+ hasAlchemySecretKeys(appName),
169
+ ], { concurrency: 4 });
170
+ return flags.some(Boolean);
171
+ });
172
+ /**
173
+ * Apps in the current token's org that Alchemy owns. Used by {@link App}
174
+ * `list()` and by child resources (Machine / Volume / Secret) so nuke
175
+ * never enumerates the whole org unfiltered.
176
+ */
177
+ export const listOwnedApps = Effect.fn(function* () {
178
+ const orgSlug = yield* resolveOrgSlug();
179
+ const { apps } = yield* machines.listApps({ org_slug: orgSlug });
180
+ const flagged = yield* Effect.forEach(apps ?? [], (app) => isOwnedApp(app).pipe(Effect.map((owned) => (owned ? toAttrs(app) : undefined))), { concurrency: 8 });
181
+ return flagged.filter((attrs) => attrs !== undefined);
182
+ });
183
+ /**
184
+ * Observe an App by name and create it when missing. Shared by
185
+ * {@link App} and by Services that own their App.
186
+ */
187
+ export const ensureApp = Effect.fn(function* (input) {
188
+ let current = input.previousName !== undefined ? yield* getByName(input.previousName) : undefined;
189
+ if (current === undefined && input.previousName !== input.name) {
190
+ current = yield* getByName(input.name);
191
+ }
192
+ if (current === undefined) {
193
+ const orgSlug = input.orgSlug ?? (yield* resolveOrgSlug());
194
+ // A name race surfaces as Conflict or UnprocessableEntity; the lookup
195
+ // decides whether the App now exists. Apps created at the same time on
196
+ // a network that does not exist yet race to create it, and the losers
197
+ // are rejected with "uniqueness constraint violated", so retry them.
198
+ const create = machines
199
+ .createApp({
200
+ name: input.name,
201
+ org_slug: orgSlug,
202
+ network: input.network,
203
+ enable_subdomains: input.enableSubdomains,
204
+ })
205
+ .pipe(Effect.as(undefined), Effect.catchTag(["Conflict", "UnprocessableEntity"], (error) => Effect.succeed(error)));
206
+ // A new App can take a moment to become readable.
207
+ const observe = getByName(input.name).pipe(Effect.repeat({
208
+ schedule: Schedule.spaced("1 second"),
209
+ until: (app) => app !== undefined,
210
+ times: 5,
211
+ }));
212
+ let rejection;
213
+ for (let attempt = 0; attempt < 5 && current === undefined; attempt++) {
214
+ if (attempt > 0)
215
+ yield* Effect.sleep(`${attempt * 2} seconds`);
216
+ rejection = (yield* create)?.message;
217
+ current = yield* observe;
218
+ }
219
+ if (current === undefined) {
220
+ return yield* new AppNotCreated({ name: input.name, reason: rejection });
221
+ }
222
+ }
223
+ if (current === undefined) {
224
+ return yield* new AppNotCreated({ name: input.name });
225
+ }
226
+ return current;
227
+ });
228
+ /**
229
+ * Delete an App and the Alchemy-owned Volumes in it. Idempotent: a missing
230
+ * App is not an error. Fly deletes the App's Machines, addresses, secrets,
231
+ * and certificates with it.
232
+ */
233
+ export const deleteApp = Effect.fn(function* (appName) {
234
+ if (appName.length === 0)
235
+ return;
236
+ const volumes = yield* machines
237
+ .listVolumes({ app_name: appName })
238
+ .pipe(Effect.catchTag(["NotFound", "Forbidden"], () => Effect.succeed([])));
239
+ yield* Effect.forEach(volumes, (volume) => {
240
+ const volumeId = volume.id;
241
+ if (volumeId === undefined ||
242
+ volumeId.length === 0 ||
243
+ !matchesAlchemyPhysicalName(volume.name)) {
244
+ return Effect.void;
245
+ }
246
+ return machines.deleteVolume({ app_name: appName, volume_id: volumeId }).pipe(Effect.asVoid, Effect.catchTag(["NotFound", "Conflict"], () => Effect.void));
247
+ }, { concurrency: 4 });
248
+ const http = yield* HttpClient.HttpClient;
249
+ const fetchOptions = yield* Effect.serviceOption(FetchHttpClient.RequestInit);
250
+ yield* machines.deleteApp({ app_name: appName }).pipe(Retry.none,
251
+ // Bun can replay DELETE on a reused socket below the SDK retry policy.
252
+ Effect.provideService(HttpClient.HttpClient, HttpClient.mapRequest(http, HttpClientRequest.setHeader("connection", "close"))), Effect.provideService(FetchHttpClient.RequestInit, {
253
+ ...Option.getOrUndefined(fetchOptions),
254
+ keepalive: false,
255
+ redirect: "error",
256
+ }), Effect.timeout("30 seconds"), Effect.catchTag("NotFound", () => Effect.void), Effect.catchTag([
257
+ "HttpClientError",
258
+ "TimeoutError",
259
+ "InternalServerError",
260
+ "BadGateway",
261
+ "ServiceUnavailable",
262
+ "GatewayTimeout",
263
+ ], (error) => Effect.fail(new AppDeletionAmbiguous({ appName, evidence: error._tag }))));
264
+ const gone = yield* getByName(appName).pipe(Effect.map((app) => app === undefined), Effect.repeat({ schedule: Schedule.spaced("1 second"), until: (gone) => gone, times: 8 }), Effect.timeout("30 seconds"), Effect.mapError((error) => new AppDeletionAmbiguous({
265
+ appName,
266
+ evidence: `delete accepted but absence verification failed: ${error._tag}`,
267
+ })));
268
+ if (!gone)
269
+ return yield* new AppDeletionAmbiguous({
270
+ appName,
271
+ evidence: "delete accepted but absence not observed",
272
+ });
273
+ });
274
+ /** Fail when two Services placed in the App publish the same port. */
275
+ const validateServicePorts = (appName, bindings) => {
276
+ const conflict = findPortConflict(appName, bindings
277
+ .filter((binding) => binding.action !== "delete")
278
+ .map((binding) => ({
279
+ id: binding.data.service,
280
+ // A Service in a shared App is public: default ports are 80 and 443.
281
+ ports: withBindingPort(portsOfProps(binding.data.services, true), binding.data.bindingPort ?? DEFAULT_BINDING_PORT),
282
+ })));
283
+ return conflict === undefined ? Effect.void : Effect.fail(conflict);
284
+ };
285
+ export const AppProvider = () => Provider.succeed(App, {
286
+ stables: ["appId", "appName", "orgSlug", "network", "internalNumericId"],
287
+ diff: Effect.fn(function* ({ id, news, output, newBindings }) {
288
+ // At plan time, including for an App created in the same deploy.
289
+ if (isResolved(newBindings)) {
290
+ yield* validateServicePorts(output?.appName ?? (isResolved(news) ? news?.name : undefined) ?? id, newBindings);
291
+ }
292
+ if (news === undefined || !isResolved(news))
293
+ return undefined;
294
+ if (output === undefined)
295
+ return undefined;
296
+ const desiredName = news.name !== undefined ? sanitizeFlyAppName(news.name) : output.appName;
297
+ const nameChanged = desiredName !== output.appName;
298
+ const orgChanged = news.orgSlug !== undefined && news.orgSlug !== output.orgSlug;
299
+ const networkChanged = news.network !== undefined && news.network !== output.network;
300
+ if (nameChanged || orgChanged || networkChanged) {
301
+ return {
302
+ action: "replace",
303
+ // Same physical name cannot exist twice — delete the old App first.
304
+ deleteFirst: !nameChanged,
305
+ };
306
+ }
307
+ return undefined;
308
+ }),
309
+ read: Effect.fn(function* ({ id, olds, output }) {
310
+ const name = yield* resolveAppName(id, olds?.name, output?.appName);
311
+ const found = (output?.appName !== undefined ? yield* getByName(output.appName) : undefined) ??
312
+ (yield* getByName(name));
313
+ if (found === undefined)
314
+ return undefined;
315
+ const attrs = toAttrs(found, name);
316
+ if (output !== undefined)
317
+ return attrs;
318
+ return (yield* isOwnedApp(found)) ? attrs : Unowned(attrs);
319
+ }),
320
+ list: listOwnedApps,
321
+ reconcile: Effect.fn(function* ({ id, news, output, bindings }) {
322
+ const props = news ?? {};
323
+ const name = yield* resolveAppName(id, props.name, output?.appName);
324
+ // Before creating anything, so a conflict leaves the App untouched.
325
+ yield* validateServicePorts(name, bindings);
326
+ const current = yield* ensureApp({
327
+ name,
328
+ orgSlug: props.orgSlug,
329
+ network: props.network,
330
+ enableSubdomains: props.enableSubdomains,
331
+ previousName: output?.appName,
332
+ });
333
+ // No update API. enableSubdomains is create-only.
334
+ return toAttrs(current, name);
335
+ }),
336
+ delete: Effect.fn(function* ({ output }) {
337
+ yield* deleteApp(output.appName);
338
+ }),
339
+ });
340
+ //# sourceMappingURL=App.js.map
package/lib/App.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"App.js","sourceRoot":"","sources":["../src/App.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { type StoredAuthConfig } from "alchemy/Auth/StoredAuthProvider";
2
+ import * as Redacted from "effect/Redacted";
3
+ export declare const FLY_AUTH_PROVIDER_NAME = "Fly";
4
+ export declare const FLY_API_TOKEN_ENV = "FLY_API_TOKEN";
5
+ export declare const FLY_API_HOSTNAME_ENV = "FLY_API_HOSTNAME";
6
+ export type FlyAuthConfig = StoredAuthConfig;
7
+ export type FlyResolvedCredentials = {
8
+ type: "token";
9
+ apiKey: Redacted.Redacted<string>;
10
+ apiBaseUrl: string;
11
+ source: {
12
+ type: FlyAuthConfig["method"] | "env";
13
+ details?: string;
14
+ };
15
+ };
16
+ /**
17
+ * Layer that registers the Fly {@link AuthProvider} into the
18
+ * {@link AuthProviders} registry. Fly uses a stored API token locally and
19
+ * `FLY_API_TOKEN` in CI; `FLY_API_HOSTNAME` optionally overrides the API root.
20
+ */
21
+ export declare const FlyAuth: import("effect/Layer").Layer<never, never, import("alchemy/Auth/AuthProvider").AuthProviders | import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
22
+ //# sourceMappingURL=AuthProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../src/AuthProvider.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAE5C,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAC5C,eAAO,MAAM,iBAAiB,kBAAkB,CAAC;AACjD,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAEvD,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAE7C,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE;QAAE,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE,CAAC;AAwCF;;;;GAIG;AACH,eAAO,MAAM,OAAO,qKAAgB,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { DEFAULT_API_BASE_URL, normalizeApiBaseUrl } from "@distilled.cloud/fly-io";
2
+ import { getEnv, getEnvRedactedRequired } from "alchemy/Auth/Env";
3
+ import { makeStoredAuthProvider, storedSecret, storedValueText, } from "alchemy/Auth/StoredAuthProvider";
4
+ import * as Effect from "effect/Effect";
5
+ import * as Redacted from "effect/Redacted";
6
+ export const FLY_AUTH_PROVIDER_NAME = "Fly";
7
+ export const FLY_API_TOKEN_ENV = "FLY_API_TOKEN";
8
+ export const FLY_API_HOSTNAME_ENV = "FLY_API_HOSTNAME";
9
+ const resolveApiBaseUrl = (explicit) => getEnv(FLY_API_HOSTNAME_ENV).pipe(Effect.map((fromEnv) => normalizeApiBaseUrl(explicit ?? fromEnv)));
10
+ const flyAuth = makeStoredAuthProvider({
11
+ provider: FLY_AUTH_PROVIDER_NAME,
12
+ fields: [
13
+ { name: "apiKey", label: "Fly.io API Token", secret: true },
14
+ {
15
+ name: "apiBaseUrl",
16
+ label: "Fly API hostname",
17
+ placeholder: DEFAULT_API_BASE_URL,
18
+ optional: true,
19
+ },
20
+ ],
21
+ toResolved: (values) => ({
22
+ type: "token",
23
+ apiKey: storedSecret(values.apiKey) ?? Redacted.make(""),
24
+ apiBaseUrl: normalizeApiBaseUrl(storedValueText(values.apiBaseUrl)),
25
+ source: { type: "stored" },
26
+ }),
27
+ readEnvironment: Effect.gen(function* () {
28
+ const apiKey = yield* getEnvRedactedRequired(FLY_API_TOKEN_ENV);
29
+ const apiBaseUrl = yield* resolveApiBaseUrl();
30
+ return {
31
+ type: "token",
32
+ apiKey,
33
+ apiBaseUrl,
34
+ source: { type: "env", details: FLY_API_TOKEN_ENV },
35
+ };
36
+ }),
37
+ environment: [
38
+ { name: FLY_API_TOKEN_ENV, required: true, secret: true },
39
+ { name: FLY_API_HOSTNAME_ENV, required: false },
40
+ ],
41
+ });
42
+ /**
43
+ * Layer that registers the Fly {@link AuthProvider} into the
44
+ * {@link AuthProviders} registry. Fly uses a stored API token locally and
45
+ * `FLY_API_TOKEN` in CI; `FLY_API_HOSTNAME` optionally overrides the API root.
46
+ */
47
+ export const FlyAuth = flyAuth.layer;
48
+ //# sourceMappingURL=AuthProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AuthProvider.js","sourceRoot":"","sources":["../src/AuthProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,eAAe,GAEhB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC;AAC5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,eAAe,CAAC;AACjD,MAAM,CAAC,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAWvD,MAAM,iBAAiB,GAAG,CAAC,QAAiB,EAAE,EAAE,CAC9C,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAC/B,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,CAClE,CAAC;AAEJ,MAAM,OAAO,GAAG,sBAAsB,CAAyB;IAC7D,QAAQ,EAAE,sBAAsB;IAChC,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,EAAE;QAC3D;YACE,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,oBAAoB;YACjC,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,UAAU,EAAE,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACnE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC3B,CAAC;IACF,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAC;QAC9C,OAAO;YACL,IAAI,EAAE,OAAgB;YACtB,MAAM;YACN,UAAU;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,KAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE;SAC7D,CAAC;IACJ,CAAC,CAAC;IACF,WAAW,EAAE;QACX,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;QACzD,EAAE,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE;KAChD;CACF,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC"}
@@ -0,0 +1,159 @@
1
+ import { type Rpc } from "alchemy/Rpc";
2
+ import { type RuntimeContext } from "alchemy/RuntimeContext";
3
+ import * as Effect from "effect/Effect";
4
+ import * as HttpClient from "effect/http/HttpClient";
5
+ import type * as HttpClientError from "effect/http/HttpClientError";
6
+ import * as HttpClientRequest from "effect/http/HttpClientRequest";
7
+ import type * as HttpClientResponse from "effect/http/HttpClientResponse";
8
+ import type { Service } from "./Service.ts";
9
+ declare const BoundServiceUnavailable_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 & {
10
+ readonly _tag: "Fly.BoundServiceUnavailable";
11
+ } & Readonly<A>;
12
+ /** The deployed caller has no address for the bound Service. */
13
+ export declare class BoundServiceUnavailable extends BoundServiceUnavailable_base<{
14
+ service: string;
15
+ }> {
16
+ get message(): string;
17
+ }
18
+ /**
19
+ * Client for a Service bound with {@link bindService}: its RPC methods,
20
+ * plus `fetch` for its HTTP routes.
21
+ */
22
+ export type ServiceClient<Shape> = Omit<Shape, "fetch" | "run"> & {
23
+ /**
24
+ * Send a request to the Service's `fetch` handler over Fly's private
25
+ * network. A relative URL such as `/users/u1` resolves against the
26
+ * Service's private address.
27
+ */
28
+ fetch(request: HttpClientRequest.HttpClientRequest): Effect.Effect<HttpClientResponse.HttpClientResponse, HttpClientError.HttpClientError | BoundServiceUnavailable, RuntimeContext>;
29
+ };
30
+ /** A published port of a Service bound with {@link bindEndpoint}. */
31
+ export interface EndpointClient {
32
+ /** `{appName}.flycast`, the bound Service's private hostname. */
33
+ host: Effect.Effect<string, BoundServiceUnavailable, RuntimeContext>;
34
+ /** The published port. */
35
+ port: number;
36
+ /** `http://{appName}.flycast:{port}`, for a port that serves plain HTTP. */
37
+ url: Effect.Effect<string, BoundServiceUnavailable, RuntimeContext>;
38
+ /** An `HttpClient` whose relative requests go to {@link url}. */
39
+ client: HttpClient.HttpClient.With<HttpClientError.HttpClientError | BoundServiceUnavailable>;
40
+ }
41
+ type Target<Shape> = Service & Rpc<Shape>;
42
+ /** Machine env vars the caller's reconcile writes for a bound Service. */
43
+ export declare const boundTargetEnvKeys: (id: string) => {
44
+ appName: string;
45
+ url: string;
46
+ token: string;
47
+ };
48
+ /**
49
+ * Bind another {@link Service} and get a typed client for it. The client
50
+ * calls the Service's methods (everything its program returns besides
51
+ * `fetch` and `run`) and forwards `fetch` requests, over Fly's private
52
+ * network.
53
+ *
54
+ * Binding makes the caller deploy after the Service and hands it the
55
+ * Service's private address and caller token. Only callers that bind a
56
+ * Service receive its token, so other Services on the same network cannot
57
+ * call its methods. Every call must also carry Fly's signed `Fly-Src`
58
+ * header from the same organization, so the public internet cannot call
59
+ * them. Calls are plain HTTP inside Fly's WireGuard-encrypted network.
60
+ *
61
+ * ### Call a private Service
62
+ * **Example:** Methods on the target
63
+ * ```typescript
64
+ * export default class Users extends Fly.Service<Users>()(
65
+ * "Users",
66
+ * { main: import.meta.url, public: false },
67
+ * Effect.gen(function* () {
68
+ * return {
69
+ * list: () => Effect.succeed(USERS),
70
+ * get: (id: string) =>
71
+ * Effect.succeed(USERS.find((user) => user.id === id)),
72
+ * };
73
+ * }),
74
+ * ) {}
75
+ * ```
76
+ *
77
+ * **Example:** Bind it and call a method
78
+ * ```typescript
79
+ * export default class Orders extends Fly.Service<Orders>()(
80
+ * "Orders",
81
+ * { main: import.meta.url, public: false },
82
+ * Effect.gen(function* () {
83
+ * const users = yield* Fly.bindService(Users);
84
+ * return {
85
+ * list: () =>
86
+ * Effect.forEach(ORDERS, (order) =>
87
+ * users
88
+ * .get(order.userId)
89
+ * .pipe(Effect.map((user) => ({ ...order, user }))),
90
+ * ),
91
+ * };
92
+ * }),
93
+ * ) {}
94
+ * ```
95
+ *
96
+ * ### Stream and forward HTTP
97
+ * **Example:** A method that returns a Stream
98
+ * ```typescript
99
+ * const all = yield* users.streamAll().pipe(Stream.runCollect);
100
+ * ```
101
+ *
102
+ * **Example:** Send a request to the Service's `fetch`
103
+ * ```typescript
104
+ * const response = yield* users.fetch(HttpClientRequest.get("/users/u1"));
105
+ * ```
106
+ *
107
+ * ### Bind one port
108
+ * {@link bindEndpoint} targets one published port, such as an admin API
109
+ * or a raw TCP protocol. Deploy fails with `Fly.EndpointNotPublished`
110
+ * when the Service does not publish it.
111
+ *
112
+ * **Example:** An admin API on port 9000
113
+ * ```typescript
114
+ * const admin = yield* Fly.bindEndpoint(Users, { port: 9000 });
115
+ * const stats = yield* admin.client.get("/stats");
116
+ * const host = yield* admin.host; // "{appName}.flycast"
117
+ * ```
118
+ *
119
+ * ### Two Services that bind each other
120
+ * Declare each as a tag class with its method shape, and implement each
121
+ * in its own file as the default export of `.make`.
122
+ *
123
+ * **Example:** Ping and Pong
124
+ * ```typescript
125
+ * // src/services.ts
126
+ * export class Ping extends Fly.Service<Ping, Named>()("Ping") {}
127
+ * export class Pong extends Fly.Service<Pong, Named>()("Pong") {}
128
+ *
129
+ * // src/ping.ts
130
+ * export default Ping.make(
131
+ * { main: import.meta.url },
132
+ * Effect.gen(function* () {
133
+ * const pong = yield* Fly.bindService(Pong);
134
+ * return { name: () => Effect.succeed("ping") };
135
+ * }),
136
+ * );
137
+ * ```
138
+ *
139
+ * ### Errors
140
+ * Each fails the caller's deploy before the caller is created:
141
+ * `Fly.ServiceUnreachable` when the caller and the Service are on
142
+ * different networks, `Fly.ServiceNotBindable` when the Service publishes
143
+ * no ports, and `Fly.EndpointNotPublished` for a port it does not publish.
144
+ *
145
+ * @binding
146
+ * @product Service
147
+ */
148
+ export declare const bindService: <Shape, Req = never>(target: Target<Shape> | Effect.Effect<Target<Shape>, never, Req>) => Effect.Effect<ServiceClient<Shape>, never, Req | HttpClient.HttpClient>;
149
+ /**
150
+ * Bind one published port of another {@link Service}: an admin API on
151
+ * its own port, or a raw TCP protocol. Returns the port's private host,
152
+ * its URL when it serves plain HTTP, and an `HttpClient` whose relative
153
+ * requests go there. See {@link bindService}.
154
+ */
155
+ export declare const bindEndpoint: <Shape, Req = never>(target: Target<Shape> | Effect.Effect<Target<Shape>, never, Req>, options: {
156
+ port: number;
157
+ }) => Effect.Effect<EndpointClient, never, Req | HttpClient.HttpClient>;
158
+ export {};
159
+ //# sourceMappingURL=BindService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BindService.d.ts","sourceRoot":"","sources":["../src/BindService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAqC,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAyB,KAAK,cAAc,EAAe,MAAM,wBAAwB,CAAC;AAGjG,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,KAAK,eAAe,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,iBAAiB,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,KAAK,kBAAkB,MAAM,gCAAgC,CAAC;AAI1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;;;;AAE5C,gEAAgE;AAChE,qBAAa,uBAAwB,SAAQ,6BAAgD;IAC3F,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;IACA,IAAI,OAAO,WAEV;CACF;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,GAAG;IAChE;;;;OAIG;IACH,KAAK,CACH,OAAO,EAAE,iBAAiB,CAAC,iBAAiB,GAC3C,MAAM,CAAC,MAAM,CACd,kBAAkB,CAAC,kBAAkB,EACrC,eAAe,CAAC,eAAe,GAAG,uBAAuB,EACzD,cAAc,CACf,CAAC;CACH,CAAC;AAEF,qEAAqE;AACrE,MAAM,WAAW,cAAc;IAC7B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,cAAc,CAAC,CAAC;IACrE,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,4EAA4E;IAC5E,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,cAAc,CAAC,CAAC;IACpE,iEAAiE;IACjE,MAAM,EAAE,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,uBAAuB,CAAC,CAAC;CAC/F;AAED,KAAK,MAAM,CAAC,KAAK,IAAI,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAiB1C,0EAA0E;AAC1E,eAAO,MAAM,kBAAkB,OAAQ,MAAM;IAC3C,OAAO;IACP,GAAG;IACH,KAAK;CACL,CAAC;AAqEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmGG;AACH,eAAO,MAAM,WAAW,GAAI,KAAK,EAAE,GAAG,GAAG,KAAK,UACpC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAC/D,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,GAAG,UAAU,CAAC,UAAU,CAuBrE,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,EAAE,GAAG,GAAG,KAAK,UACrC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,WACvD;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,KACxB,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,GAAG,UAAU,CAAC,UAAU,CAoB/D,CAAC"}