@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.
- package/LICENSE +201 -0
- package/README.md +57 -4
- package/lib/App.d.ts +230 -0
- package/lib/App.d.ts.map +1 -0
- package/lib/App.js +340 -0
- package/lib/App.js.map +1 -0
- package/lib/AuthProvider.d.ts +22 -0
- package/lib/AuthProvider.d.ts.map +1 -0
- package/lib/AuthProvider.js +48 -0
- package/lib/AuthProvider.js.map +1 -0
- package/lib/BindService.d.ts +159 -0
- package/lib/BindService.d.ts.map +1 -0
- package/lib/BindService.js +222 -0
- package/lib/BindService.js.map +1 -0
- package/lib/Bootstrap.d.ts +8 -0
- package/lib/Bootstrap.d.ts.map +1 -0
- package/lib/Bootstrap.js +41 -0
- package/lib/Bootstrap.js.map +1 -0
- package/lib/Bucket.d.ts +278 -0
- package/lib/Bucket.d.ts.map +1 -0
- package/lib/Bucket.js +658 -0
- package/lib/Bucket.js.map +1 -0
- package/lib/BucketBinding.d.ts +33 -0
- package/lib/BucketBinding.d.ts.map +1 -0
- package/lib/BucketBinding.js +70 -0
- package/lib/BucketBinding.js.map +1 -0
- package/lib/Catalog.d.ts +28 -0
- package/lib/Catalog.d.ts.map +1 -0
- package/lib/Catalog.js +31 -0
- package/lib/Catalog.js.map +1 -0
- package/lib/Certificate.d.ts +189 -0
- package/lib/Certificate.d.ts.map +1 -0
- package/lib/Certificate.js +380 -0
- package/lib/Certificate.js.map +1 -0
- package/lib/Checkpoint.d.ts +55 -0
- package/lib/Checkpoint.d.ts.map +1 -0
- package/lib/Checkpoint.js +3 -0
- package/lib/Checkpoint.js.map +1 -0
- package/lib/CheckpointHttp.d.ts +22 -0
- package/lib/CheckpointHttp.d.ts.map +1 -0
- package/lib/CheckpointHttp.js +53 -0
- package/lib/CheckpointHttp.js.map +1 -0
- package/lib/ConnectPostgres.d.ts +58 -0
- package/lib/ConnectPostgres.d.ts.map +1 -0
- package/lib/ConnectPostgres.js +13 -0
- package/lib/ConnectPostgres.js.map +1 -0
- package/lib/ConnectPostgresHttp.d.ts +26 -0
- package/lib/ConnectPostgresHttp.d.ts.map +1 -0
- package/lib/ConnectPostgresHttp.js +57 -0
- package/lib/ConnectPostgresHttp.js.map +1 -0
- package/lib/Contributions.d.ts +7 -0
- package/lib/Contributions.d.ts.map +1 -0
- package/lib/Contributions.js +6 -0
- package/lib/Contributions.js.map +1 -0
- package/lib/Credentials.d.ts +33 -0
- package/lib/Credentials.d.ts.map +1 -0
- package/lib/Credentials.js +59 -0
- package/lib/Credentials.js.map +1 -0
- package/lib/Decrypt.d.ts +52 -0
- package/lib/Decrypt.d.ts.map +1 -0
- package/lib/Decrypt.js +3 -0
- package/lib/Decrypt.js.map +1 -0
- package/lib/DecryptHttp.d.ts +22 -0
- package/lib/DecryptHttp.d.ts.map +1 -0
- package/lib/DecryptHttp.js +43 -0
- package/lib/DecryptHttp.js.map +1 -0
- package/lib/DeleteObject.d.ts +29 -0
- package/lib/DeleteObject.d.ts.map +1 -0
- package/lib/DeleteObject.js +3 -0
- package/lib/DeleteObject.js.map +1 -0
- package/lib/DeleteObjectHttp.d.ts +12 -0
- package/lib/DeleteObjectHttp.d.ts.map +1 -0
- package/lib/DeleteObjectHttp.js +17 -0
- package/lib/DeleteObjectHttp.js.map +1 -0
- package/lib/Deployment.d.ts +51 -0
- package/lib/Deployment.d.ts.map +1 -0
- package/lib/Deployment.js +62 -0
- package/lib/Deployment.js.map +1 -0
- package/lib/DeploymentImages.d.ts +18 -0
- package/lib/DeploymentImages.d.ts.map +1 -0
- package/lib/DeploymentImages.js +61 -0
- package/lib/DeploymentImages.js.map +1 -0
- package/lib/DeploymentState.d.ts +17 -0
- package/lib/DeploymentState.d.ts.map +1 -0
- package/lib/DeploymentState.js +87 -0
- package/lib/DeploymentState.js.map +1 -0
- package/lib/Encrypt.d.ts +50 -0
- package/lib/Encrypt.d.ts.map +1 -0
- package/lib/Encrypt.js +3 -0
- package/lib/Encrypt.js.map +1 -0
- package/lib/EncryptHttp.d.ts +22 -0
- package/lib/EncryptHttp.d.ts.map +1 -0
- package/lib/EncryptHttp.js +39 -0
- package/lib/EncryptHttp.js.map +1 -0
- package/lib/Environment.d.ts +45 -0
- package/lib/Environment.d.ts.map +1 -0
- package/lib/Environment.js +43 -0
- package/lib/Environment.js.map +1 -0
- package/lib/Errors.d.ts +18 -0
- package/lib/Errors.d.ts.map +1 -0
- package/lib/Errors.js +13 -0
- package/lib/Errors.js.map +1 -0
- package/lib/Exec.d.ts +41 -0
- package/lib/Exec.d.ts.map +1 -0
- package/lib/Exec.js +3 -0
- package/lib/Exec.js.map +1 -0
- package/lib/ExecHttp.d.ts +22 -0
- package/lib/ExecHttp.d.ts.map +1 -0
- package/lib/ExecHttp.js +39 -0
- package/lib/ExecHttp.js.map +1 -0
- package/lib/GetObject.d.ts +34 -0
- package/lib/GetObject.d.ts.map +1 -0
- package/lib/GetObject.js +3 -0
- package/lib/GetObject.js.map +1 -0
- package/lib/GetObjectHttp.d.ts +12 -0
- package/lib/GetObjectHttp.d.ts.map +1 -0
- package/lib/GetObjectHttp.js +17 -0
- package/lib/GetObjectHttp.js.map +1 -0
- package/lib/GetSecret.d.ts +44 -0
- package/lib/GetSecret.d.ts.map +1 -0
- package/lib/GetSecret.js +3 -0
- package/lib/GetSecret.js.map +1 -0
- package/lib/GetSecretHttp.d.ts +22 -0
- package/lib/GetSecretHttp.d.ts.map +1 -0
- package/lib/GetSecretHttp.js +50 -0
- package/lib/GetSecretHttp.js.map +1 -0
- package/lib/HeadObject.d.ts +29 -0
- package/lib/HeadObject.d.ts.map +1 -0
- package/lib/HeadObject.js +3 -0
- package/lib/HeadObject.js.map +1 -0
- package/lib/HeadObjectHttp.d.ts +12 -0
- package/lib/HeadObjectHttp.d.ts.map +1 -0
- package/lib/HeadObjectHttp.js +17 -0
- package/lib/HeadObjectHttp.js.map +1 -0
- package/lib/IpAssignment.d.ts +258 -0
- package/lib/IpAssignment.d.ts.map +1 -0
- package/lib/IpAssignment.js +376 -0
- package/lib/IpAssignment.js.map +1 -0
- package/lib/ListObjectsV2.d.ts +29 -0
- package/lib/ListObjectsV2.d.ts.map +1 -0
- package/lib/ListObjectsV2.js +3 -0
- package/lib/ListObjectsV2.js.map +1 -0
- package/lib/ListObjectsV2Http.d.ts +12 -0
- package/lib/ListObjectsV2Http.d.ts.map +1 -0
- package/lib/ListObjectsV2Http.js +17 -0
- package/lib/ListObjectsV2Http.js.map +1 -0
- package/lib/ListSecrets.d.ts +53 -0
- package/lib/ListSecrets.d.ts.map +1 -0
- package/lib/ListSecrets.js +3 -0
- package/lib/ListSecrets.js.map +1 -0
- package/lib/ListSecretsHttp.d.ts +22 -0
- package/lib/ListSecretsHttp.d.ts.map +1 -0
- package/lib/ListSecretsHttp.js +35 -0
- package/lib/ListSecretsHttp.js.map +1 -0
- package/lib/Machine.d.ts +802 -0
- package/lib/Machine.d.ts.map +1 -0
- package/lib/Machine.js +773 -0
- package/lib/Machine.js.map +1 -0
- package/lib/MachineContainers.d.ts +44 -0
- package/lib/MachineContainers.d.ts.map +1 -0
- package/lib/MachineContainers.js +115 -0
- package/lib/MachineContainers.js.map +1 -0
- package/lib/Metadata.d.ts +109 -0
- package/lib/Metadata.d.ts.map +1 -0
- package/lib/Metadata.js +159 -0
- package/lib/Metadata.js.map +1 -0
- package/lib/MountVolume.d.ts +295 -0
- package/lib/MountVolume.d.ts.map +1 -0
- package/lib/MountVolume.js +20 -0
- package/lib/MountVolume.js.map +1 -0
- package/lib/Postgres.d.ts +298 -0
- package/lib/Postgres.d.ts.map +1 -0
- package/lib/Postgres.js +508 -0
- package/lib/Postgres.js.map +1 -0
- package/lib/PostgresMigrations.d.ts +35 -0
- package/lib/PostgresMigrations.d.ts.map +1 -0
- package/lib/PostgresMigrations.js +110 -0
- package/lib/PostgresMigrations.js.map +1 -0
- package/lib/Providers.d.ts +38 -0
- package/lib/Providers.d.ts.map +1 -0
- package/lib/Providers.js +95 -0
- package/lib/Providers.js.map +1 -0
- package/lib/PutObject.d.ts +35 -0
- package/lib/PutObject.d.ts.map +1 -0
- package/lib/PutObject.js +3 -0
- package/lib/PutObject.js.map +1 -0
- package/lib/PutObjectHttp.d.ts +12 -0
- package/lib/PutObjectHttp.d.ts.map +1 -0
- package/lib/PutObjectHttp.js +17 -0
- package/lib/PutObjectHttp.js.map +1 -0
- package/lib/ReadRedis.d.ts +26 -0
- package/lib/ReadRedis.d.ts.map +1 -0
- package/lib/ReadRedis.js +3 -0
- package/lib/ReadRedis.js.map +1 -0
- package/lib/ReadRedisHttp.d.ts +11 -0
- package/lib/ReadRedisHttp.d.ts.map +1 -0
- package/lib/ReadRedisHttp.js +15 -0
- package/lib/ReadRedisHttp.js.map +1 -0
- package/lib/ReadWriteRedis.d.ts +29 -0
- package/lib/ReadWriteRedis.d.ts.map +1 -0
- package/lib/ReadWriteRedis.js +3 -0
- package/lib/ReadWriteRedis.js.map +1 -0
- package/lib/ReadWriteRedisHttp.d.ts +11 -0
- package/lib/ReadWriteRedisHttp.d.ts.map +1 -0
- package/lib/ReadWriteRedisHttp.js +15 -0
- package/lib/ReadWriteRedisHttp.js.map +1 -0
- package/lib/Redis.d.ts +252 -0
- package/lib/Redis.d.ts.map +1 -0
- package/lib/Redis.js +608 -0
- package/lib/Redis.js.map +1 -0
- package/lib/RedisBinding.d.ts +7 -0
- package/lib/RedisBinding.d.ts.map +1 -0
- package/lib/RedisBinding.js +53 -0
- package/lib/RedisBinding.js.map +1 -0
- package/lib/RedisHttp.d.ts +8 -0
- package/lib/RedisHttp.d.ts.map +1 -0
- package/lib/RedisHttp.js +8 -0
- package/lib/RedisHttp.js.map +1 -0
- package/lib/Region.d.ts +16 -0
- package/lib/Region.d.ts.map +1 -0
- package/lib/Region.js +13 -0
- package/lib/Region.js.map +1 -0
- package/lib/Secret.d.ts +190 -0
- package/lib/Secret.d.ts.map +1 -0
- package/lib/Secret.js +310 -0
- package/lib/Secret.js.map +1 -0
- package/lib/SecretHttp.d.ts +54 -0
- package/lib/SecretHttp.d.ts.map +1 -0
- package/lib/SecretHttp.js +66 -0
- package/lib/SecretHttp.js.map +1 -0
- package/lib/SecretKey.d.ts +164 -0
- package/lib/SecretKey.d.ts.map +1 -0
- package/lib/SecretKey.js +277 -0
- package/lib/SecretKey.js.map +1 -0
- package/lib/SecretKeyHttp.d.ts +14 -0
- package/lib/SecretKeyHttp.d.ts.map +1 -0
- package/lib/SecretKeyHttp.js +5 -0
- package/lib/SecretKeyHttp.js.map +1 -0
- package/lib/Service.d.ts +1022 -0
- package/lib/Service.d.ts.map +1 -0
- package/lib/Service.js +1397 -0
- package/lib/Service.js.map +1 -0
- package/lib/Sign.d.ts +36 -0
- package/lib/Sign.d.ts.map +1 -0
- package/lib/Sign.js +3 -0
- package/lib/Sign.js.map +1 -0
- package/lib/SignHttp.d.ts +22 -0
- package/lib/SignHttp.d.ts.map +1 -0
- package/lib/SignHttp.js +36 -0
- package/lib/SignHttp.js.map +1 -0
- package/lib/Sprite.d.ts +283 -0
- package/lib/Sprite.d.ts.map +1 -0
- package/lib/Sprite.js +469 -0
- package/lib/Sprite.js.map +1 -0
- package/lib/SpriteHttp.d.ts +25 -0
- package/lib/SpriteHttp.d.ts.map +1 -0
- package/lib/SpriteHttp.js +33 -0
- package/lib/SpriteHttp.js.map +1 -0
- package/lib/Verify.d.ts +37 -0
- package/lib/Verify.d.ts.map +1 -0
- package/lib/Verify.js +3 -0
- package/lib/Verify.js.map +1 -0
- package/lib/VerifyHttp.d.ts +22 -0
- package/lib/VerifyHttp.d.ts.map +1 -0
- package/lib/VerifyHttp.js +38 -0
- package/lib/VerifyHttp.js.map +1 -0
- package/lib/Volume.d.ts +53 -0
- package/lib/Volume.d.ts.map +1 -0
- package/lib/Volume.js +188 -0
- package/lib/Volume.js.map +1 -0
- package/lib/VolumeSnapshot.d.ts +135 -0
- package/lib/VolumeSnapshot.d.ts.map +1 -0
- package/lib/VolumeSnapshot.js +213 -0
- package/lib/VolumeSnapshot.js.map +1 -0
- package/lib/Website/AssetDeployment.d.ts +43 -0
- package/lib/Website/AssetDeployment.d.ts.map +1 -0
- package/lib/Website/AssetDeployment.js +162 -0
- package/lib/Website/AssetDeployment.js.map +1 -0
- package/lib/Website/Astro.d.ts +87 -0
- package/lib/Website/Astro.d.ts.map +1 -0
- package/lib/Website/Astro.js +55 -0
- package/lib/Website/Astro.js.map +1 -0
- package/lib/Website/Foldkit.d.ts +52 -0
- package/lib/Website/Foldkit.d.ts.map +1 -0
- package/lib/Website/Foldkit.js +45 -0
- package/lib/Website/Foldkit.js.map +1 -0
- package/lib/Website/FrameworkSite.d.ts +175 -0
- package/lib/Website/FrameworkSite.d.ts.map +1 -0
- package/lib/Website/FrameworkSite.js +162 -0
- package/lib/Website/FrameworkSite.js.map +1 -0
- package/lib/Website/Nextjs.d.ts +54 -0
- package/lib/Website/Nextjs.d.ts.map +1 -0
- package/lib/Website/Nextjs.js +46 -0
- package/lib/Website/Nextjs.js.map +1 -0
- package/lib/Website/Nuxt.d.ts +51 -0
- package/lib/Website/Nuxt.d.ts.map +1 -0
- package/lib/Website/Nuxt.js +36 -0
- package/lib/Website/Nuxt.js.map +1 -0
- package/lib/Website/Octane.d.ts +49 -0
- package/lib/Website/Octane.d.ts.map +1 -0
- package/lib/Website/Octane.js +39 -0
- package/lib/Website/Octane.js.map +1 -0
- package/lib/Website/ReactRouter.d.ts +80 -0
- package/lib/Website/ReactRouter.d.ts.map +1 -0
- package/lib/Website/ReactRouter.js +70 -0
- package/lib/Website/ReactRouter.js.map +1 -0
- package/lib/Website/SolidStart.d.ts +93 -0
- package/lib/Website/SolidStart.d.ts.map +1 -0
- package/lib/Website/SolidStart.js +71 -0
- package/lib/Website/SolidStart.js.map +1 -0
- package/lib/Website/StaticSite.d.ts +155 -0
- package/lib/Website/StaticSite.d.ts.map +1 -0
- package/lib/Website/StaticSite.js +168 -0
- package/lib/Website/StaticSite.js.map +1 -0
- package/lib/Website/SvelteKit.d.ts +52 -0
- package/lib/Website/SvelteKit.d.ts.map +1 -0
- package/lib/Website/SvelteKit.js +37 -0
- package/lib/Website/SvelteKit.js.map +1 -0
- package/lib/Website/TanStackStart.d.ts +76 -0
- package/lib/Website/TanStackStart.d.ts.map +1 -0
- package/lib/Website/TanStackStart.js +66 -0
- package/lib/Website/TanStackStart.js.map +1 -0
- package/lib/Website/Vinext.d.ts +73 -0
- package/lib/Website/Vinext.d.ts.map +1 -0
- package/lib/Website/Vinext.js +67 -0
- package/lib/Website/Vinext.js.map +1 -0
- package/lib/Website/Vite.d.ts +103 -0
- package/lib/Website/Vite.d.ts.map +1 -0
- package/lib/Website/Vite.js +91 -0
- package/lib/Website/Vite.js.map +1 -0
- package/lib/Website/Vocs.d.ts +52 -0
- package/lib/Website/Vocs.d.ts.map +1 -0
- package/lib/Website/Vocs.js +38 -0
- package/lib/Website/Vocs.js.map +1 -0
- package/lib/Website/Waku.d.ts +64 -0
- package/lib/Website/Waku.d.ts.map +1 -0
- package/lib/Website/Waku.js +39 -0
- package/lib/Website/Waku.js.map +1 -0
- package/lib/Website/index.d.ts +17 -0
- package/lib/Website/index.d.ts.map +1 -0
- package/lib/Website/index.js +17 -0
- package/lib/Website/index.js.map +1 -0
- package/lib/WriteCertificates.d.ts +63 -0
- package/lib/WriteCertificates.d.ts.map +1 -0
- package/lib/WriteCertificates.js +3 -0
- package/lib/WriteCertificates.js.map +1 -0
- package/lib/WriteCertificatesHttp.d.ts +25 -0
- package/lib/WriteCertificatesHttp.d.ts.map +1 -0
- package/lib/WriteCertificatesHttp.js +67 -0
- package/lib/WriteCertificatesHttp.js.map +1 -0
- package/lib/WriteRedis.d.ts +26 -0
- package/lib/WriteRedis.d.ts.map +1 -0
- package/lib/WriteRedis.js +3 -0
- package/lib/WriteRedis.js.map +1 -0
- package/lib/WriteRedisHttp.d.ts +11 -0
- package/lib/WriteRedisHttp.d.ts.map +1 -0
- package/lib/WriteRedisHttp.js +15 -0
- package/lib/WriteRedisHttp.js.map +1 -0
- package/lib/WriteSecret.d.ts +68 -0
- package/lib/WriteSecret.d.ts.map +1 -0
- package/lib/WriteSecret.js +4 -0
- package/lib/WriteSecret.js.map +1 -0
- package/lib/WriteSecretHttp.d.ts +26 -0
- package/lib/WriteSecretHttp.d.ts.map +1 -0
- package/lib/WriteSecretHttp.js +54 -0
- package/lib/WriteSecretHttp.js.map +1 -0
- package/lib/bluegreen.d.ts +36 -0
- package/lib/bluegreen.d.ts.map +1 -0
- package/lib/bluegreen.js +458 -0
- package/lib/bluegreen.js.map +1 -0
- package/lib/hosted.d.ts +172 -0
- package/lib/hosted.d.ts.map +1 -0
- package/lib/hosted.js +458 -0
- package/lib/hosted.js.map +1 -0
- package/lib/index.d.ts +65 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +63 -0
- package/lib/index.js.map +1 -0
- package/lib/internal/RemoteBuilder.d.ts +28 -0
- package/lib/internal/RemoteBuilder.d.ts.map +1 -0
- package/lib/internal/RemoteBuilder.js +145 -0
- package/lib/internal/RemoteBuilder.js.map +1 -0
- package/lib/leases.d.ts +53 -0
- package/lib/leases.d.ts.map +1 -0
- package/lib/leases.js +279 -0
- package/lib/leases.js.map +1 -0
- package/lib/ports.d.ts +51 -0
- package/lib/ports.d.ts.map +1 -0
- package/lib/ports.js +123 -0
- package/lib/ports.js.map +1 -0
- package/lib/replicas.d.ts +270 -0
- package/lib/replicas.d.ts.map +1 -0
- package/lib/replicas.js +969 -0
- package/lib/replicas.js.map +1 -0
- package/lib/rpc.d.ts +35 -0
- package/lib/rpc.d.ts.map +1 -0
- package/lib/rpc.js +113 -0
- package/lib/rpc.js.map +1 -0
- package/package.json +83 -3
- package/src/App.ts +516 -0
- package/src/AuthProvider.ts +68 -0
- package/src/BindService.ts +304 -0
- package/src/Bootstrap.ts +66 -0
- package/src/Bucket.ts +916 -0
- package/src/BucketBinding.ts +128 -0
- package/src/Catalog.ts +43 -0
- package/src/Certificate.ts +548 -0
- package/src/Checkpoint.ts +69 -0
- package/src/CheckpointHttp.ts +66 -0
- package/src/ConnectPostgres.ts +68 -0
- package/src/ConnectPostgresHttp.ts +77 -0
- package/src/Contributions.ts +9 -0
- package/src/Credentials.ts +102 -0
- package/src/Decrypt.ts +62 -0
- package/src/DecryptHttp.ts +52 -0
- package/src/DeleteObject.ts +43 -0
- package/src/DeleteObjectHttp.ts +20 -0
- package/src/Deployment.ts +121 -0
- package/src/DeploymentImages.ts +84 -0
- package/src/DeploymentState.ts +104 -0
- package/src/Encrypt.ts +60 -0
- package/src/EncryptHttp.ts +48 -0
- package/src/Environment.ts +81 -0
- package/src/Errors.ts +14 -0
- package/src/Exec.ts +50 -0
- package/src/ExecHttp.ts +47 -0
- package/src/GetObject.ts +48 -0
- package/src/GetObjectHttp.ts +20 -0
- package/src/GetSecret.ts +48 -0
- package/src/GetSecretHttp.ts +60 -0
- package/src/HeadObject.ts +43 -0
- package/src/HeadObjectHttp.ts +20 -0
- package/src/IpAssignment.ts +522 -0
- package/src/ListObjectsV2.ts +43 -0
- package/src/ListObjectsV2Http.ts +20 -0
- package/src/ListSecrets.ts +57 -0
- package/src/ListSecretsHttp.ts +43 -0
- package/src/Machine.ts +1268 -0
- package/src/MachineContainers.ts +152 -0
- package/src/Metadata.ts +195 -0
- package/src/MountVolume.ts +315 -0
- package/src/Postgres.ts +777 -0
- package/src/PostgresMigrations.ts +153 -0
- package/src/Providers.ts +155 -0
- package/src/PutObject.ts +49 -0
- package/src/PutObjectHttp.ts +20 -0
- package/src/ReadRedis.ts +31 -0
- package/src/ReadRedisHttp.ts +18 -0
- package/src/ReadWriteRedis.ts +33 -0
- package/src/ReadWriteRedisHttp.ts +18 -0
- package/src/Redis.ts +820 -0
- package/src/RedisBinding.ts +64 -0
- package/src/RedisHttp.ts +11 -0
- package/src/Region.ts +44 -0
- package/src/Secret.ts +405 -0
- package/src/SecretHttp.ts +149 -0
- package/src/SecretKey.ts +389 -0
- package/src/SecretKeyHttp.ts +23 -0
- package/src/Service.ts +1934 -0
- package/src/Sign.ts +46 -0
- package/src/SignHttp.ts +44 -0
- package/src/Sprite.ts +671 -0
- package/src/SpriteHttp.ts +50 -0
- package/src/Verify.ts +47 -0
- package/src/VerifyHttp.ts +46 -0
- package/src/Volume.ts +264 -0
- package/src/VolumeSnapshot.ts +321 -0
- package/src/Website/AssetDeployment.ts +294 -0
- package/src/Website/Astro.ts +87 -0
- package/src/Website/Foldkit.ts +54 -0
- package/src/Website/FrameworkSite.ts +363 -0
- package/src/Website/Nextjs.ts +50 -0
- package/src/Website/Nuxt.ts +48 -0
- package/src/Website/Octane.ts +44 -0
- package/src/Website/ReactRouter.ts +76 -0
- package/src/Website/SolidStart.ts +90 -0
- package/src/Website/StaticSite.ts +275 -0
- package/src/Website/SvelteKit.ts +49 -0
- package/src/Website/TanStackStart.ts +72 -0
- package/src/Website/Vinext.ts +79 -0
- package/src/Website/Vite.ts +112 -0
- package/src/Website/Vocs.ts +50 -0
- package/src/Website/Waku.ts +65 -0
- package/src/Website/index.ts +16 -0
- package/src/WriteCertificates.ts +90 -0
- package/src/WriteCertificatesHttp.ts +93 -0
- package/src/WriteRedis.ts +31 -0
- package/src/WriteRedisHttp.ts +18 -0
- package/src/WriteSecret.ts +86 -0
- package/src/WriteSecretHttp.ts +71 -0
- package/src/bluegreen.ts +708 -0
- package/src/globals.d.ts +2 -0
- package/src/hosted.ts +668 -0
- package/src/index.ts +64 -0
- package/src/internal/RemoteBuilder.ts +224 -0
- package/src/leases.ts +437 -0
- package/src/ports.ts +177 -0
- package/src/replicas.ts +1480 -0
- package/src/rpc.ts +136 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectPostgresHttp.d.ts","sourceRoot":"","sources":["../src/ConnectPostgresHttp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EACL,eAAe,EAGhB,MAAM,sBAAsB,CAAC;AAsB9B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,mBAAmB,4CAuB/B,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as Binding from "alchemy/Binding";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
import * as Redacted from "effect/Redacted";
|
|
5
|
+
import { ConnectPostgres, PostgresUrlMissing, } from "./ConnectPostgres.js";
|
|
6
|
+
import {} from "./Postgres.js";
|
|
7
|
+
const isFlyHost = (value) => typeof value === "object" &&
|
|
8
|
+
value !== null &&
|
|
9
|
+
(value.Type === "Fly.Service" ||
|
|
10
|
+
value.Type === "Fly.Machine");
|
|
11
|
+
const asRedactedUrl = (value, name) => {
|
|
12
|
+
const plain = typeof value === "string" ? value : Redacted.isRedacted(value) ? Redacted.value(value) : "";
|
|
13
|
+
const url = typeof plain === "string" ? plain : "";
|
|
14
|
+
return url.length > 0
|
|
15
|
+
? Effect.succeed(Redacted.make(url))
|
|
16
|
+
: Effect.fail(new PostgresUrlMissing({ name }));
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Implementation of {@link ConnectPostgres}. Provide it on the
|
|
20
|
+
* {@link Service} Effect.
|
|
21
|
+
*
|
|
22
|
+
* Registers the cluster attachment for Fly's private network. Alchemy
|
|
23
|
+
* transports each cluster's connection URIs through resource Outputs,
|
|
24
|
+
* so callers do not configure connection-string environment variables.
|
|
25
|
+
*
|
|
26
|
+
*
|
|
27
|
+
* ### Provide the layer
|
|
28
|
+
* **Example:** On a Service
|
|
29
|
+
* ```typescript
|
|
30
|
+
* Effect.gen(function* () {
|
|
31
|
+
* const conn = yield* Fly.ConnectPostgres(Db);
|
|
32
|
+
* const db = yield* Drizzle.Postgres(conn.connectionString);
|
|
33
|
+
* }).pipe(Effect.provide(Fly.ConnectPostgresHttp))
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @layer
|
|
37
|
+
* @product Postgres
|
|
38
|
+
* @provides Fly.ConnectPostgres
|
|
39
|
+
*/
|
|
40
|
+
export const ConnectPostgresHttp = Layer.effect(ConnectPostgres, Effect.succeed(Effect.fn(function* (postgres) {
|
|
41
|
+
const name = postgres.LogicalId;
|
|
42
|
+
if (!globalThis.__ALCHEMY_RUNTIME__) {
|
|
43
|
+
const host = yield* Binding.Host;
|
|
44
|
+
if (isFlyHost(host)) {
|
|
45
|
+
yield* host.bind `${postgres}`({
|
|
46
|
+
postgres: { clusterId: postgres.clusterId },
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const pooled = yield* postgres.pooledConnectionUri;
|
|
51
|
+
const direct = yield* postgres.connectionUri;
|
|
52
|
+
return {
|
|
53
|
+
connectionString: pooled.pipe(Effect.flatMap((value) => asRedactedUrl(value, name))),
|
|
54
|
+
directConnectionString: direct.pipe(Effect.flatMap((value) => asRedactedUrl(value, name))),
|
|
55
|
+
};
|
|
56
|
+
})));
|
|
57
|
+
//# sourceMappingURL=ConnectPostgresHttp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConnectPostgresHttp.js","sourceRoot":"","sources":["../src/ConnectPostgresHttp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,kBAAkB,GAEnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAiB,MAAM,eAAe,CAAC;AAE9C,MAAM,SAAS,GAAG,CAAC,KAAc,EAAuD,EAAE,CACxF,OAAO,KAAK,KAAK,QAAQ;IACzB,KAAK,KAAK,IAAI;IACd,CAAE,KAA2B,CAAC,IAAI,KAAK,aAAa;QACjD,KAA2B,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;AAEzD,MAAM,aAAa,GAAG,CACpB,KAAc,EACd,IAAY,EACkD,EAAE;IAChE,MAAM,KAAK,GACT,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC;QACnB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAC7C,eAAe,EACf,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,QAAkB;IACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACjC,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA,GAAG,QAAQ,EAAE,CAAC;gBAC5B,QAAQ,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE;aAC5C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACnD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;IAE7C,OAAO;QACL,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QACpF,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;KAC3D,CAAC;AACpC,CAAC,CAAC,CACH,CACF,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as Contributions from "alchemy/Contributions";
|
|
2
|
+
declare const _default: {
|
|
3
|
+
readonly name: "fly";
|
|
4
|
+
readonly auth: Contributions.Lazy<import("effect/Layer").Layer<never, never, import("alchemy/Auth/AuthProvider").AuthProviders | import("effect/FileSystem").FileSystem | import("effect/Path").Path>>;
|
|
5
|
+
};
|
|
6
|
+
export default _default;
|
|
7
|
+
//# sourceMappingURL=Contributions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Contributions.d.ts","sourceRoot":"","sources":["../src/Contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,uBAAuB,CAAC;;;;;AAEvD,wBAMG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Contributions.js","sourceRoot":"","sources":["../src/Contributions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,uBAAuB,CAAC;AAEvD,eAAe,aAAa,CAAC,IAAI,CAAC;IAChC,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,aAAa,CAAC,IAAI,CACtB,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,EACjC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAC3B;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Credentials } from "@distilled.cloud/fly-io";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Layer from "effect/Layer";
|
|
4
|
+
export { Credentials, CredentialsFromEnv, credentials, DEFAULT_API_BASE_URL, normalizeApiBaseUrl, type Config as CredentialsConfig, } from "@distilled.cloud/fly-io";
|
|
5
|
+
/**
|
|
6
|
+
* Capture the deployment's org token as a named runtime Output.
|
|
7
|
+
* Resolve it during binding initialization so plan/diff retains
|
|
8
|
+
* profile-backed credentials rather than falling back to process env.
|
|
9
|
+
*/
|
|
10
|
+
export declare const bindFlyApiToken: () => Effect.Effect<void, never, Credentials>;
|
|
11
|
+
/**
|
|
12
|
+
* `Credentials` for the HTTP binding layers (`GetSecretHttp`, `ExecHttp`, …).
|
|
13
|
+
*
|
|
14
|
+
* Those layers are built in two places. Inside a stack (plan/deploy, or an
|
|
15
|
+
* Action) `providers()` has already resolved the profile-backed
|
|
16
|
+
* `Credentials`, and the binding must use them — a laptop deploy has no
|
|
17
|
+
* `FLY_API_TOKEN` in its env once the token lives in the Alchemy profile.
|
|
18
|
+
* Inside a deployed Machine there is no profile; `bindFlyApiToken`
|
|
19
|
+
* has already `RuntimeContext.set` the org token, which Platform copies
|
|
20
|
+
* into Machine env as `FLY_API_TOKEN`. So: reuse the ambient
|
|
21
|
+
* `Credentials` when present, otherwise read the env.
|
|
22
|
+
*/
|
|
23
|
+
export declare const CredentialsFromAmbientOrEnv: Layer.Layer<Credentials>;
|
|
24
|
+
/**
|
|
25
|
+
* Build a `Credentials` layer that resolves Fly credentials via the current
|
|
26
|
+
* Alchemy profile, or directly from environment variables in CI.
|
|
27
|
+
*
|
|
28
|
+
* Maps onto `@distilled.cloud/fly-io`'s `{ apiKey, apiBaseUrl }` shape.
|
|
29
|
+
* Distilled's own `CredentialsFromEnv` also accepts `FLY_IO_API_KEY` as a
|
|
30
|
+
* fallback — Alchemy itself only reads `FLY_API_TOKEN`.
|
|
31
|
+
*/
|
|
32
|
+
export declare const fromAuthProvider: () => Layer.Layer<Credentials, never, import("alchemy/Auth/AuthProvider").AuthProviders | import("alchemy/Auth/Profile").ProfileStore>;
|
|
33
|
+
//# sourceMappingURL=Credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Credentials.d.ts","sourceRoot":"","sources":["../src/Credentials.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAsB,MAAM,yBAAyB,CAAC;AAO1E,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAStC,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,MAAM,IAAI,iBAAiB,GACjC,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,eAAO,MAAM,eAAe,QAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CASrE,CAAC;AAEL;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,KAAK,CAAC,WAAW,CAOhE,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,wIA6B1B,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { ConfigError } from "@distilled.cloud/core/errors";
|
|
2
|
+
import { Credentials, CredentialsFromEnv } from "@distilled.cloud/fly-io";
|
|
3
|
+
import { deferUntilFirstUse, orDieCredentialsUnavailable, resolveProviderConfig, } from "alchemy/Auth/Resolve";
|
|
4
|
+
import * as Output from "alchemy/Output";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as Layer from "effect/Layer";
|
|
7
|
+
import * as Option from "effect/Option";
|
|
8
|
+
import * as Redacted from "effect/Redacted";
|
|
9
|
+
import { FLY_AUTH_PROVIDER_NAME, } from "./AuthProvider.js";
|
|
10
|
+
export { Credentials, CredentialsFromEnv, credentials, DEFAULT_API_BASE_URL, normalizeApiBaseUrl, } from "@distilled.cloud/fly-io";
|
|
11
|
+
/**
|
|
12
|
+
* Capture the deployment's org token as a named runtime Output.
|
|
13
|
+
* Resolve it during binding initialization so plan/diff retains
|
|
14
|
+
* profile-backed credentials rather than falling back to process env.
|
|
15
|
+
*/
|
|
16
|
+
export const bindFlyApiToken = () => Effect.gen(function* () {
|
|
17
|
+
const token = globalThis.__ALCHEMY_RUNTIME__
|
|
18
|
+
? ""
|
|
19
|
+
: yield* Credentials.pipe(Effect.flatMap((resolve) => resolve), Effect.map((cfg) => Redacted.value(cfg.apiKey)));
|
|
20
|
+
yield* Output.named(Output.asOutput(token), "FLY_API_TOKEN").asEffect().pipe(Effect.asVoid);
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* `Credentials` for the HTTP binding layers (`GetSecretHttp`, `ExecHttp`, …).
|
|
24
|
+
*
|
|
25
|
+
* Those layers are built in two places. Inside a stack (plan/deploy, or an
|
|
26
|
+
* Action) `providers()` has already resolved the profile-backed
|
|
27
|
+
* `Credentials`, and the binding must use them — a laptop deploy has no
|
|
28
|
+
* `FLY_API_TOKEN` in its env once the token lives in the Alchemy profile.
|
|
29
|
+
* Inside a deployed Machine there is no profile; `bindFlyApiToken`
|
|
30
|
+
* has already `RuntimeContext.set` the org token, which Platform copies
|
|
31
|
+
* into Machine env as `FLY_API_TOKEN`. So: reuse the ambient
|
|
32
|
+
* `Credentials` when present, otherwise read the env.
|
|
33
|
+
*/
|
|
34
|
+
export const CredentialsFromAmbientOrEnv = Layer.effect(Credentials, Effect.gen(function* () {
|
|
35
|
+
const ambient = yield* Effect.serviceOption(Credentials);
|
|
36
|
+
if (Option.isSome(ambient))
|
|
37
|
+
return ambient.value;
|
|
38
|
+
return yield* Credentials.pipe(Effect.provide(CredentialsFromEnv));
|
|
39
|
+
}));
|
|
40
|
+
/**
|
|
41
|
+
* Build a `Credentials` layer that resolves Fly credentials via the current
|
|
42
|
+
* Alchemy profile, or directly from environment variables in CI.
|
|
43
|
+
*
|
|
44
|
+
* Maps onto `@distilled.cloud/fly-io`'s `{ apiKey, apiBaseUrl }` shape.
|
|
45
|
+
* Distilled's own `CredentialsFromEnv` also accepts `FLY_IO_API_KEY` as a
|
|
46
|
+
* fallback — Alchemy itself only reads `FLY_API_TOKEN`.
|
|
47
|
+
*/
|
|
48
|
+
export const fromAuthProvider = () => Layer.effect(Credentials, Effect.gen(function* () {
|
|
49
|
+
// Defer profile lookup and credential resolution until first use, so
|
|
50
|
+
// building the provider layers never requires a configured profile.
|
|
51
|
+
const resolve = yield* resolveProviderConfig(FLY_AUTH_PROVIDER_NAME).pipe(Effect.flatMap(({ profileName, resolve }) => resolve.pipe(Effect.map((creds) => ({
|
|
52
|
+
apiKey: creds.apiKey,
|
|
53
|
+
apiBaseUrl: creds.apiBaseUrl,
|
|
54
|
+
})), Effect.mapError((e) => ConfigError.make({
|
|
55
|
+
message: `Failed to resolve Fly credentials from ${profileName === undefined ? "the CI environment" : `profile '${profileName}'`}: ${e.message ?? String(e)}`,
|
|
56
|
+
})))), deferUntilFirstUse);
|
|
57
|
+
return yield* resolve.pipe(orDieCredentialsUnavailable(FLY_AUTH_PROVIDER_NAME), Effect.cached);
|
|
58
|
+
}));
|
|
59
|
+
//# sourceMappingURL=Credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Credentials.js","sourceRoot":"","sources":["../src/Credentials.ts"],"names":[],"mappings":"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"}
|
package/lib/Decrypt.d.ts
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { DecryptSecretKeyError } from "@distilled.cloud/fly-io/machines";
|
|
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 * as Redacted from "effect/Redacted";
|
|
6
|
+
import type { SecretKey } from "./SecretKey.ts";
|
|
7
|
+
export interface DecryptRequest {
|
|
8
|
+
/** Ciphertext produced by {@link Encrypt}. */
|
|
9
|
+
ciphertext: Uint8Array | ArrayLike<number>;
|
|
10
|
+
/** Optional AEAD associated data. Must match encryption. */
|
|
11
|
+
associatedData?: Uint8Array | ArrayLike<number>;
|
|
12
|
+
}
|
|
13
|
+
export interface DecryptResult {
|
|
14
|
+
/** Plaintext, wrapped so it never logs. Unwrap with `Redacted.value`. */
|
|
15
|
+
plaintext: Redacted.Redacted<Uint8Array>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Decrypt with a Fly {@link SecretKey}. The App and key name are fixed
|
|
19
|
+
* by `Decrypt(key)`.
|
|
20
|
+
*
|
|
21
|
+
*
|
|
22
|
+
* ### Decrypt a payload
|
|
23
|
+
* Provide {@link DecryptHttp}. Plaintext comes back `Redacted`. Unwrap
|
|
24
|
+
* with `Redacted.value` only where you need the raw bytes.
|
|
25
|
+
*
|
|
26
|
+
* **Example:** Decrypt
|
|
27
|
+
* ```typescript
|
|
28
|
+
* import * as Redacted from "effect/Redacted";
|
|
29
|
+
*
|
|
30
|
+
* const decrypt = yield* Fly.Decrypt(Box);
|
|
31
|
+
* const { plaintext } = yield* decrypt({ ciphertext });
|
|
32
|
+
* const bytes = Redacted.value(plaintext);
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* ### Associated data
|
|
36
|
+
* `associatedData` must match the bytes passed to {@link Encrypt}.
|
|
37
|
+
*
|
|
38
|
+
* **Example:** AEAD
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const { plaintext } = yield* decrypt({
|
|
41
|
+
* ciphertext,
|
|
42
|
+
* associatedData: nonce,
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @binding
|
|
47
|
+
* @product Secret Key
|
|
48
|
+
*/
|
|
49
|
+
export interface Decrypt extends Binding.Service<Decrypt, "Fly.Decrypt", (key: SecretKey) => Effect.Effect<(request: DecryptRequest) => Effect.Effect<DecryptResult, DecryptSecretKeyError, RuntimeContext>>> {
|
|
50
|
+
}
|
|
51
|
+
export declare const Decrypt: Decrypt;
|
|
52
|
+
//# sourceMappingURL=Decrypt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Decrypt.d.ts","sourceRoot":"","sources":["../src/Decrypt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,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,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC3C,4DAA4D;IAC5D,cAAc,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;CAC1C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,WAAW,OAAQ,SAAQ,OAAO,CAAC,OAAO,CAC9C,OAAO,EACP,aAAa,EACb,CACE,GAAG,EAAE,SAAS,KACX,MAAM,CAAC,MAAM,CAChB,CAAC,OAAO,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,qBAAqB,EAAE,cAAc,CAAC,CACjG,CACF;CAAG;AAEJ,eAAO,MAAM,OAAO,SAA0C,CAAC"}
|
package/lib/Decrypt.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Decrypt.js","sourceRoot":"","sources":["../src/Decrypt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AA4D3C,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAU,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import { Decrypt } from "./Decrypt.ts";
|
|
3
|
+
/**
|
|
4
|
+
* HTTP implementation of {@link Decrypt}. Provide it on the
|
|
5
|
+
* {@link Service} or Action Effect.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* ### Provide the layer
|
|
9
|
+
* **Example:** On a Service
|
|
10
|
+
* ```typescript
|
|
11
|
+
* Effect.gen(function* () {
|
|
12
|
+
* const decrypt = yield* Fly.Decrypt(Box);
|
|
13
|
+
* // ...
|
|
14
|
+
* }).pipe(Effect.provide(Fly.DecryptHttp))
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @layer
|
|
18
|
+
* @product Secret Key
|
|
19
|
+
* @provides Fly.Decrypt
|
|
20
|
+
*/
|
|
21
|
+
export declare const DecryptHttp: Layer.Layer<Decrypt, never, never>;
|
|
22
|
+
//# sourceMappingURL=DecryptHttp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DecryptHttp.d.ts","sourceRoot":"","sources":["../src/DecryptHttp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,OAAO,EAAuB,MAAM,cAAc,CAAC;AAI5D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,WAAW,oCAuBgE,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as machines from "@distilled.cloud/fly-io/machines";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as FetchHttpClient from "effect/http/FetchHttpClient";
|
|
4
|
+
import * as Layer from "effect/Layer";
|
|
5
|
+
import * as Redacted from "effect/Redacted";
|
|
6
|
+
import { CredentialsFromAmbientOrEnv } from "./Credentials.js";
|
|
7
|
+
import { Decrypt } from "./Decrypt.js";
|
|
8
|
+
import { unwrapSecretValue } from "./SecretHttp.js";
|
|
9
|
+
import { base64ToBytes, bytesToBase64, makeHttpSecretKeyBinding } from "./SecretKeyHttp.js";
|
|
10
|
+
/**
|
|
11
|
+
* HTTP implementation of {@link Decrypt}. Provide it on the
|
|
12
|
+
* {@link Service} or Action Effect.
|
|
13
|
+
*
|
|
14
|
+
*
|
|
15
|
+
* ### Provide the layer
|
|
16
|
+
* **Example:** On a Service
|
|
17
|
+
* ```typescript
|
|
18
|
+
* Effect.gen(function* () {
|
|
19
|
+
* const decrypt = yield* Fly.Decrypt(Box);
|
|
20
|
+
* // ...
|
|
21
|
+
* }).pipe(Effect.provide(Fly.DecryptHttp))
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @layer
|
|
25
|
+
* @product Secret Key
|
|
26
|
+
* @provides Fly.Decrypt
|
|
27
|
+
*/
|
|
28
|
+
export const DecryptHttp = Layer.effect(Decrypt, Effect.suspend(() => makeHttpSecretKeyBinding({
|
|
29
|
+
makeClient: (auth, appName, secretName) => Effect.fn("Fly.Decrypt")(function* (request) {
|
|
30
|
+
const res = yield* auth.authorize(machines.decryptSecretKey({
|
|
31
|
+
app_name: yield* appName,
|
|
32
|
+
secret_name: yield* secretName,
|
|
33
|
+
ciphertext: bytesToBase64(request.ciphertext),
|
|
34
|
+
associated_data: request.associatedData === undefined
|
|
35
|
+
? undefined
|
|
36
|
+
: bytesToBase64(request.associatedData),
|
|
37
|
+
}));
|
|
38
|
+
return {
|
|
39
|
+
plaintext: Redacted.make(base64ToBytes(unwrapSecretValue(res.plaintext ?? ""))),
|
|
40
|
+
};
|
|
41
|
+
}),
|
|
42
|
+
}))).pipe(Layer.provide(FetchHttpClient.layer), Layer.provide(CredentialsFromAmbientOrEnv));
|
|
43
|
+
//# sourceMappingURL=DecryptHttp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DecryptHttp.js","sourceRoot":"","sources":["../src/DecryptHttp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,kCAAkC,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAuB,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE5F;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CACrC,OAAO,EACP,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAClB,wBAAwB,CAAC;IACvB,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CACxC,MAAM,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,EAAE,OAAuB;QACzD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAC/B,QAAQ,CAAC,gBAAgB,CAAC;YACxB,QAAQ,EAAE,KAAK,CAAC,CAAC,OAAO;YACxB,WAAW,EAAE,KAAK,CAAC,CAAC,UAAU;YAC9B,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC;YAC7C,eAAe,EACb,OAAO,CAAC,cAAc,KAAK,SAAS;gBAClC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,cAAc,CAAC;SAC5C,CAAC,CACH,CAAC;QACF,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;SAChF,CAAC;IACJ,CAAC,CAAC;CACL,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,29 @@
|
|
|
1
|
+
import type * as S3 from "@distilled.cloud/aws/s3";
|
|
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 { Bucket } from "./Bucket.ts";
|
|
6
|
+
import type { TigrisCredentialsMissing } from "./Errors.ts";
|
|
7
|
+
export interface DeleteObjectRequest extends Omit<S3.DeleteObjectRequest, "Bucket"> {
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Runtime binding for Tigris `DeleteObject` over the S3 API.
|
|
11
|
+
*
|
|
12
|
+
* Bind this operation to a {@link Bucket} in Service init. Provide
|
|
13
|
+
* {@link DeleteObjectHttp}.
|
|
14
|
+
*
|
|
15
|
+
*
|
|
16
|
+
* ### Deleting Objects
|
|
17
|
+
* **Example:** Delete an Object
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const deleteObject = yield* Fly.DeleteObject(Data);
|
|
20
|
+
* yield* deleteObject({ Key: "hello.txt" });
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @binding
|
|
24
|
+
* @product Bucket
|
|
25
|
+
*/
|
|
26
|
+
export interface DeleteObject extends Binding.Service<DeleteObject, "Fly.DeleteObject", (bucket: Bucket) => Effect.Effect<(request: DeleteObjectRequest) => Effect.Effect<S3.DeleteObjectOutput, S3.DeleteObjectError | TigrisCredentialsMissing, RuntimeContext>>> {
|
|
27
|
+
}
|
|
28
|
+
export declare const DeleteObject: DeleteObject;
|
|
29
|
+
//# sourceMappingURL=DeleteObject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteObject.d.ts","sourceRoot":"","sources":["../src/DeleteObject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACnD,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;AAC1C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE,QAAQ,CAAC;CAAG;AAEtF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,YAAa,SAAQ,OAAO,CAAC,OAAO,CACnD,YAAY,EACZ,kBAAkB,EAClB,CACE,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAChB,CACE,OAAO,EAAE,mBAAmB,KACzB,MAAM,CAAC,MAAM,CAChB,EAAE,CAAC,kBAAkB,EACrB,EAAE,CAAC,iBAAiB,GAAG,wBAAwB,EAC/C,cAAc,CACf,CACF,CACF;CAAG;AAEJ,eAAO,MAAM,YAAY,cAAoD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteObject.js","sourceRoot":"","sources":["../src/DeleteObject.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAyC3C,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAe,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import { DeleteObject } from "./DeleteObject.ts";
|
|
3
|
+
/**
|
|
4
|
+
* HTTP implementation of {@link DeleteObject}. Calls distilled S3
|
|
5
|
+
* `deleteObject` against the Tigris endpoint with the bucket's credentials.
|
|
6
|
+
*
|
|
7
|
+
* @layer
|
|
8
|
+
* @product Bucket
|
|
9
|
+
* @provides Fly.DeleteObject
|
|
10
|
+
*/
|
|
11
|
+
export declare const DeleteObjectHttp: Layer.Layer<DeleteObject, never, never>;
|
|
12
|
+
//# sourceMappingURL=DeleteObjectHttp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteObjectHttp.d.ts","sourceRoot":"","sources":["../src/DeleteObjectHttp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,yCAM5B,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as S3 from "@distilled.cloud/aws/s3";
|
|
2
|
+
import * as Layer from "effect/Layer";
|
|
3
|
+
import { makeTigrisS3Binding } from "./BucketBinding.js";
|
|
4
|
+
import { DeleteObject } from "./DeleteObject.js";
|
|
5
|
+
/**
|
|
6
|
+
* HTTP implementation of {@link DeleteObject}. Calls distilled S3
|
|
7
|
+
* `deleteObject` against the Tigris endpoint with the bucket's credentials.
|
|
8
|
+
*
|
|
9
|
+
* @layer
|
|
10
|
+
* @product Bucket
|
|
11
|
+
* @provides Fly.DeleteObject
|
|
12
|
+
*/
|
|
13
|
+
export const DeleteObjectHttp = Layer.effect(DeleteObject, makeTigrisS3Binding({
|
|
14
|
+
tag: "Fly.DeleteObject",
|
|
15
|
+
operation: S3.deleteObject,
|
|
16
|
+
}));
|
|
17
|
+
//# sourceMappingURL=DeleteObjectHttp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeleteObjectHttp.js","sourceRoot":"","sources":["../src/DeleteObjectHttp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAC1C,YAAY,EACZ,mBAAmB,CAAC;IAClB,GAAG,EAAE,kBAAkB;IACvB,SAAS,EAAE,EAAE,CAAC,YAAY;CAC3B,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { FlyMachineConfig, FlyStopConfigSignal } from "@distilled.cloud/fly-io/machines";
|
|
2
|
+
import * as Duration from "effect/Duration";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import type { MachineServiceCheck } from "./Machine.ts";
|
|
5
|
+
/** Replacement/readiness policy shared by Machines, Services, and websites; not an App-wide deployment lock. */
|
|
6
|
+
export interface MachineDeploy {
|
|
7
|
+
/** Sequential in-place updates, or a checked replacement set. @default "rolling" */
|
|
8
|
+
strategy: "rolling" | "bluegreen";
|
|
9
|
+
/** Readiness deadline after startup, positive and at most 300 seconds. A deadline-only change does not replace Machines. @default "60 seconds" */
|
|
10
|
+
healthTimeout?: Duration.Input;
|
|
11
|
+
}
|
|
12
|
+
/** Process shutdown policy. Retirement uses the predecessor's own policy; raw images and external website servers own signal handling and drain. */
|
|
13
|
+
export interface MachineShutdown {
|
|
14
|
+
/** Signal sent before termination. Managed Services support SIGTERM and SIGINT. @default "SIGTERM" */
|
|
15
|
+
signal?: Exclude<FlyStopConfigSignal, "SIGKILL">;
|
|
16
|
+
/** Grace period, greater than zero and at most 300 seconds. @default "30 seconds" */
|
|
17
|
+
timeout?: Duration.Input;
|
|
18
|
+
}
|
|
19
|
+
/** Named readiness check for a worker without public proxy ports. */
|
|
20
|
+
export interface MachineCheck extends MachineServiceCheck {
|
|
21
|
+
/** Port inside the Machine to check. */
|
|
22
|
+
port: number;
|
|
23
|
+
}
|
|
24
|
+
declare const InvalidDeployment_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 & {
|
|
25
|
+
readonly _tag: "Fly.InvalidDeployment";
|
|
26
|
+
} & Readonly<A>;
|
|
27
|
+
export declare class InvalidDeployment extends InvalidDeployment_base<{
|
|
28
|
+
message: string;
|
|
29
|
+
}> {
|
|
30
|
+
}
|
|
31
|
+
export interface DeploymentPolicy {
|
|
32
|
+
bluegreen: boolean;
|
|
33
|
+
healthTimeoutMs: number;
|
|
34
|
+
shutdown: {
|
|
35
|
+
signal: Exclude<FlyStopConfigSignal, "SIGKILL">;
|
|
36
|
+
timeout: string;
|
|
37
|
+
timeoutMs: number;
|
|
38
|
+
} | undefined;
|
|
39
|
+
}
|
|
40
|
+
export declare const deploymentPolicy: (deploy: MachineDeploy | undefined, shutdown: MachineShutdown | undefined, managed?: any) => Effect.Effect<{
|
|
41
|
+
bluegreen: boolean;
|
|
42
|
+
healthTimeoutMs: number;
|
|
43
|
+
shutdown: {
|
|
44
|
+
signal: "SIGHUP" | "SIGINT" | "SIGQUIT" | "SIGTERM" | "SIGUSR1" | "SIGUSR2";
|
|
45
|
+
timeout: string;
|
|
46
|
+
timeoutMs: number;
|
|
47
|
+
} | undefined;
|
|
48
|
+
}, InvalidDeployment, never>;
|
|
49
|
+
export declare const validateDeployment: (policy: DeploymentPolicy, config: FlyMachineConfig, mounted: boolean, skipLaunch?: boolean) => Effect.Effect<void, never, never> | Effect.Effect<never, InvalidDeployment, never>;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=Deployment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Deployment.d.ts","sourceRoot":"","sources":["../src/Deployment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAE9F,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD,gHAAgH;AAChH,MAAM,WAAW,aAAa;IAC5B,oFAAoF;IACpF,QAAQ,EAAE,SAAS,GAAG,WAAW,CAAC;IAClC,kJAAkJ;IAClJ,aAAa,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;CAChC;AAED,oJAAoJ;AACpJ,MAAM,WAAW,eAAe;IAC9B,sGAAsG;IACtG,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;IACjD,qFAAqF;IACrF,OAAO,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC;CAC1B;AAED,qEAAqE;AACrE,MAAM,WAAW,YAAa,SAAQ,mBAAmB;IACvD,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;CACd;;;;AAED,qBAAa,iBAAkB,SAAQ,uBAA0C;IAC/E,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;CAAG;AAEL,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EACJ;QAAE,MAAM,EAAE,OAAO,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GACvF,SAAS,CAAC;CACf;AAiBD,eAAO,MAAM,gBAAgB;;;;;;;;4BAmC3B,CAAC;AAEH,eAAO,MAAM,kBAAkB,WACrB,gBAAgB,UAChB,gBAAgB,WACf,OAAO,6GAwBjB,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as Data from "effect/Data";
|
|
2
|
+
import * as Duration from "effect/Duration";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import { pinsFromConfig } from "./DeploymentImages.js";
|
|
5
|
+
export class InvalidDeployment extends Data.TaggedError("Fly.InvalidDeployment") {
|
|
6
|
+
}
|
|
7
|
+
const duration = (value, name, maximum) => Effect.try({
|
|
8
|
+
try: () => {
|
|
9
|
+
const milliseconds = Duration.toMillis(value);
|
|
10
|
+
if (!Number.isSafeInteger(milliseconds) || milliseconds <= 0 || milliseconds > maximum) {
|
|
11
|
+
throw new Error("invalid duration");
|
|
12
|
+
}
|
|
13
|
+
return milliseconds;
|
|
14
|
+
},
|
|
15
|
+
catch: () => new InvalidDeployment({
|
|
16
|
+
message: `${name} must be a finite positive duration no greater than ${maximum / 1000} seconds.`,
|
|
17
|
+
}),
|
|
18
|
+
});
|
|
19
|
+
export const deploymentPolicy = Effect.fn(function* (deploy, shutdown, managed = false) {
|
|
20
|
+
const bluegreen = deploy?.strategy === "bluegreen";
|
|
21
|
+
const healthTimeoutMs = yield* duration(deploy?.healthTimeout ?? "60 seconds", "deploy.healthTimeout", 300_000);
|
|
22
|
+
const enabled = bluegreen || shutdown !== undefined;
|
|
23
|
+
const signal = shutdown?.signal ?? "SIGTERM";
|
|
24
|
+
if (enabled &&
|
|
25
|
+
!["SIGHUP", "SIGINT", "SIGQUIT", "SIGUSR1", "SIGUSR2", "SIGTERM"].includes(signal)) {
|
|
26
|
+
return yield* new InvalidDeployment({
|
|
27
|
+
message: "shutdown.signal must be a supported graceful Fly signal, not SIGKILL.",
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (managed && enabled && signal !== "SIGTERM" && signal !== "SIGINT") {
|
|
31
|
+
return yield* new InvalidDeployment({
|
|
32
|
+
message: "Managed Fly Services support SIGTERM and SIGINT shutdown signals.",
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
const timeoutMs = enabled
|
|
36
|
+
? yield* duration(shutdown?.timeout ?? "30 seconds", "shutdown.timeout", 300_000)
|
|
37
|
+
: undefined;
|
|
38
|
+
return {
|
|
39
|
+
bluegreen,
|
|
40
|
+
healthTimeoutMs,
|
|
41
|
+
shutdown: timeoutMs === undefined ? undefined : { signal, timeout: `${timeoutMs}ms`, timeoutMs },
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
export const validateDeployment = (policy, config, mounted, skipLaunch = false) => {
|
|
45
|
+
if (!policy.bluegreen)
|
|
46
|
+
return Effect.void;
|
|
47
|
+
let message;
|
|
48
|
+
if (mounted)
|
|
49
|
+
message = "Blue/green deployments cannot attach volumes, including MountVolume bindings.";
|
|
50
|
+
else if (config.containers !== undefined && pinsFromConfig(config) === undefined)
|
|
51
|
+
message =
|
|
52
|
+
"Blue/green multi-container Machines require unique names and immutable repository@sha256 image references for every container.";
|
|
53
|
+
else if (skipLaunch || config.auto_destroy || config.restart?.policy === "no")
|
|
54
|
+
message = "Blue/green deployments require a persistent, launched Machine.";
|
|
55
|
+
else if ((config.services ?? []).some((service) => (service.ports?.length ?? 0) > 0 && !service.checks?.length))
|
|
56
|
+
message = "Every published service needs a service health check for blue/green deployment.";
|
|
57
|
+
else if (!(config.services ?? []).some((service) => service.checks?.length) &&
|
|
58
|
+
!Object.keys(config.checks ?? {}).length)
|
|
59
|
+
message = "Blue/green deployments require readiness checks.";
|
|
60
|
+
return message ? Effect.fail(new InvalidDeployment({ message })) : Effect.void;
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=Deployment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Deployment.js","sourceRoot":"","sources":["../src/Deployment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { FlyMachineConfig } from "@distilled.cloud/fly-io/machines";
|
|
2
|
+
export type ContainerImagePin = {
|
|
3
|
+
name: string;
|
|
4
|
+
image: string;
|
|
5
|
+
};
|
|
6
|
+
/** Blue/green needs immutable image references that survive a crash. */
|
|
7
|
+
export declare const isImmutableImage: (image: string) => boolean;
|
|
8
|
+
export declare const pinsFromConfig: (config: FlyMachineConfig | undefined) => ContainerImagePin[] | undefined;
|
|
9
|
+
export declare const encodeImageSet: (pins: readonly ContainerImagePin[]) => string | undefined;
|
|
10
|
+
export declare const decodeImageSet: (raw: string | undefined) => ContainerImagePin[] | undefined;
|
|
11
|
+
export declare const sameImageSet: (left: readonly ContainerImagePin[] | undefined, right: readonly ContainerImagePin[] | undefined) => boolean;
|
|
12
|
+
/** Protocol-2 metadata and the authoritative readback config must describe exactly the same set. */
|
|
13
|
+
export declare const validObservedImageSet: (machine: {
|
|
14
|
+
config?: FlyMachineConfig;
|
|
15
|
+
}) => boolean;
|
|
16
|
+
/** Keep all named pins when changing service or idle policy on a candidate. */
|
|
17
|
+
export declare const applyImageSet: (config: FlyMachineConfig, pins: readonly ContainerImagePin[]) => FlyMachineConfig | undefined;
|
|
18
|
+
//# sourceMappingURL=DeploymentImages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DeploymentImages.d.ts","sourceRoot":"","sources":["../src/DeploymentImages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAMzE,MAAM,MAAM,iBAAiB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,wEAAwE;AACxE,eAAO,MAAM,gBAAgB,UAAW,MAAM,KAAG,OACoB,CAAC;AAUtE,eAAO,MAAM,cAAc,WACjB,gBAAgB,GAAG,SAAS,KACnC,iBAAiB,EAAE,GAAG,SAQxB,CAAC;AAEF,eAAO,MAAM,cAAc,SAAU,SAAS,iBAAiB,EAAE,KAAG,MAAM,GAAG,SAClB,CAAC;AAE5D,eAAO,MAAM,cAAc,QAAS,MAAM,GAAG,SAAS,KAAG,iBAAiB,EAAE,GAAG,SAM9E,CAAC;AAEF,eAAO,MAAM,YAAY,SACjB,SAAS,iBAAiB,EAAE,GAAG,SAAS,SACvC,SAAS,iBAAiB,EAAE,GAAG,SAAS,KAC9C,OAIF,CAAC;AAEF,oGAAoG;AACpG,eAAO,MAAM,qBAAqB,YAAa;IAAE,MAAM,CAAC,EAAE,gBAAgB,CAAA;CAAE,KAAG,OAO9E,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,aAAa,WAChB,gBAAgB,QAClB,SAAS,iBAAiB,EAAE,KACjC,gBAAgB,GAAG,SAiBrB,CAAC"}
|