@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,222 @@
|
|
|
1
|
+
import * as Binding from "alchemy/Binding";
|
|
2
|
+
import { makeFetchRpcStub, RPC_PATH_PREFIX } from "alchemy/Rpc";
|
|
3
|
+
import { CurrentRuntimeContext, sanitizeKey } from "alchemy/RuntimeContext";
|
|
4
|
+
import { isYieldableEffectLike } from "alchemy/Util/effect";
|
|
5
|
+
import * as Data from "effect/Data";
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as HttpClient from "effect/http/HttpClient";
|
|
8
|
+
import * as HttpClientRequest from "effect/http/HttpClientRequest";
|
|
9
|
+
import * as Redacted from "effect/Redacted";
|
|
10
|
+
import { RPC_TOKEN_HEADER } from "./rpc.js";
|
|
11
|
+
/** The deployed caller has no address for the bound Service. */
|
|
12
|
+
export class BoundServiceUnavailable extends Data.TaggedError("Fly.BoundServiceUnavailable") {
|
|
13
|
+
get message() {
|
|
14
|
+
return `No private address for Fly Service ${this.service}. It publishes no ports, or the caller was deployed before the binding existed.`;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const isFlyHost = (value) => typeof value === "object" &&
|
|
18
|
+
value !== null &&
|
|
19
|
+
(value.Type === "Fly.Service" ||
|
|
20
|
+
value.Type === "Fly.Machine");
|
|
21
|
+
/** Logical id without yielding the Service (the runtime has no engine). */
|
|
22
|
+
const logicalIdOf = (target) => {
|
|
23
|
+
const id = target !== null && (typeof target === "object" || typeof target === "function")
|
|
24
|
+
? target.LogicalId
|
|
25
|
+
: undefined;
|
|
26
|
+
return typeof id === "string" ? id : "";
|
|
27
|
+
};
|
|
28
|
+
/** Machine env vars the caller's reconcile writes for a bound Service. */
|
|
29
|
+
export const boundTargetEnvKeys = (id) => ({
|
|
30
|
+
appName: sanitizeKey(`FLY_BIND_${id}_APP`),
|
|
31
|
+
url: sanitizeKey(`FLY_BIND_${id}_URL`),
|
|
32
|
+
token: sanitizeKey(`FLY_BIND_${id}_TOKEN`),
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* Record the binding on the caller and transport the target's private
|
|
36
|
+
* address and caller token as Outputs. Returns runtime accessors for them.
|
|
37
|
+
*/
|
|
38
|
+
const bindTarget = Effect.fn(function* (target, port) {
|
|
39
|
+
const id = logicalIdOf(target);
|
|
40
|
+
const keys = boundTargetEnvKeys(id);
|
|
41
|
+
const ctx = yield* CurrentRuntimeContext;
|
|
42
|
+
if (!globalThis.__ALCHEMY_RUNTIME__) {
|
|
43
|
+
// Yielding registers the target and makes the caller depend on it.
|
|
44
|
+
const service = isYieldableEffectLike(target)
|
|
45
|
+
? yield* target
|
|
46
|
+
: target;
|
|
47
|
+
// The binding carries the target's Outputs. Unlike props, binding
|
|
48
|
+
// data may stay unresolved between cycle peers, so two Services can
|
|
49
|
+
// bind each other; the caller's reconcile writes them onto its Machines.
|
|
50
|
+
const host = yield* Binding.Host;
|
|
51
|
+
if (isFlyHost(host)) {
|
|
52
|
+
yield* host.bind `${service}`({
|
|
53
|
+
target: {
|
|
54
|
+
service: id,
|
|
55
|
+
appName: service.appName,
|
|
56
|
+
network: service.network,
|
|
57
|
+
privateUrl: service.privateUrl,
|
|
58
|
+
rpcToken: service.rpcToken,
|
|
59
|
+
port,
|
|
60
|
+
endpoints: service.endpoints,
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Captured at bind time: the host's runtime context reads the values
|
|
66
|
+
// transported onto the Machine.
|
|
67
|
+
const read = (key) => ctx === undefined ? Effect.succeed(undefined) : ctx.get(key);
|
|
68
|
+
const required = (key) => read(key).pipe(Effect.flatMap((value) => typeof value === "string" && value.length > 0
|
|
69
|
+
? Effect.succeed(value)
|
|
70
|
+
: Effect.fail(new BoundServiceUnavailable({ service: id }))));
|
|
71
|
+
return {
|
|
72
|
+
appName: required(keys.appName),
|
|
73
|
+
url: required(keys.url),
|
|
74
|
+
token: read(keys.token).pipe(Effect.map((value) => Redacted.isRedacted(value)
|
|
75
|
+
? String(Redacted.value(value))
|
|
76
|
+
: typeof value === "string"
|
|
77
|
+
? value
|
|
78
|
+
: "")),
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
/** Resolve `path` (relative or placeholder-based) against `base`. */
|
|
82
|
+
const withBase = (base, url) => {
|
|
83
|
+
const path = url.replace(/^https?:\/\/[^/]+/, "");
|
|
84
|
+
return `${base.replace(/\/$/, "")}${path.startsWith("/") ? path : `/${path}`}`;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Bind another {@link Service} and get a typed client for it. The client
|
|
88
|
+
* calls the Service's methods (everything its program returns besides
|
|
89
|
+
* `fetch` and `run`) and forwards `fetch` requests, over Fly's private
|
|
90
|
+
* network.
|
|
91
|
+
*
|
|
92
|
+
* Binding makes the caller deploy after the Service and hands it the
|
|
93
|
+
* Service's private address and caller token. Only callers that bind a
|
|
94
|
+
* Service receive its token, so other Services on the same network cannot
|
|
95
|
+
* call its methods. Every call must also carry Fly's signed `Fly-Src`
|
|
96
|
+
* header from the same organization, so the public internet cannot call
|
|
97
|
+
* them. Calls are plain HTTP inside Fly's WireGuard-encrypted network.
|
|
98
|
+
*
|
|
99
|
+
* ### Call a private Service
|
|
100
|
+
* **Example:** Methods on the target
|
|
101
|
+
* ```typescript
|
|
102
|
+
* export default class Users extends Fly.Service<Users>()(
|
|
103
|
+
* "Users",
|
|
104
|
+
* { main: import.meta.url, public: false },
|
|
105
|
+
* Effect.gen(function* () {
|
|
106
|
+
* return {
|
|
107
|
+
* list: () => Effect.succeed(USERS),
|
|
108
|
+
* get: (id: string) =>
|
|
109
|
+
* Effect.succeed(USERS.find((user) => user.id === id)),
|
|
110
|
+
* };
|
|
111
|
+
* }),
|
|
112
|
+
* ) {}
|
|
113
|
+
* ```
|
|
114
|
+
*
|
|
115
|
+
* **Example:** Bind it and call a method
|
|
116
|
+
* ```typescript
|
|
117
|
+
* export default class Orders extends Fly.Service<Orders>()(
|
|
118
|
+
* "Orders",
|
|
119
|
+
* { main: import.meta.url, public: false },
|
|
120
|
+
* Effect.gen(function* () {
|
|
121
|
+
* const users = yield* Fly.bindService(Users);
|
|
122
|
+
* return {
|
|
123
|
+
* list: () =>
|
|
124
|
+
* Effect.forEach(ORDERS, (order) =>
|
|
125
|
+
* users
|
|
126
|
+
* .get(order.userId)
|
|
127
|
+
* .pipe(Effect.map((user) => ({ ...order, user }))),
|
|
128
|
+
* ),
|
|
129
|
+
* };
|
|
130
|
+
* }),
|
|
131
|
+
* ) {}
|
|
132
|
+
* ```
|
|
133
|
+
*
|
|
134
|
+
* ### Stream and forward HTTP
|
|
135
|
+
* **Example:** A method that returns a Stream
|
|
136
|
+
* ```typescript
|
|
137
|
+
* const all = yield* users.streamAll().pipe(Stream.runCollect);
|
|
138
|
+
* ```
|
|
139
|
+
*
|
|
140
|
+
* **Example:** Send a request to the Service's `fetch`
|
|
141
|
+
* ```typescript
|
|
142
|
+
* const response = yield* users.fetch(HttpClientRequest.get("/users/u1"));
|
|
143
|
+
* ```
|
|
144
|
+
*
|
|
145
|
+
* ### Bind one port
|
|
146
|
+
* {@link bindEndpoint} targets one published port, such as an admin API
|
|
147
|
+
* or a raw TCP protocol. Deploy fails with `Fly.EndpointNotPublished`
|
|
148
|
+
* when the Service does not publish it.
|
|
149
|
+
*
|
|
150
|
+
* **Example:** An admin API on port 9000
|
|
151
|
+
* ```typescript
|
|
152
|
+
* const admin = yield* Fly.bindEndpoint(Users, { port: 9000 });
|
|
153
|
+
* const stats = yield* admin.client.get("/stats");
|
|
154
|
+
* const host = yield* admin.host; // "{appName}.flycast"
|
|
155
|
+
* ```
|
|
156
|
+
*
|
|
157
|
+
* ### Two Services that bind each other
|
|
158
|
+
* Declare each as a tag class with its method shape, and implement each
|
|
159
|
+
* in its own file as the default export of `.make`.
|
|
160
|
+
*
|
|
161
|
+
* **Example:** Ping and Pong
|
|
162
|
+
* ```typescript
|
|
163
|
+
* // src/services.ts
|
|
164
|
+
* export class Ping extends Fly.Service<Ping, Named>()("Ping") {}
|
|
165
|
+
* export class Pong extends Fly.Service<Pong, Named>()("Pong") {}
|
|
166
|
+
*
|
|
167
|
+
* // src/ping.ts
|
|
168
|
+
* export default Ping.make(
|
|
169
|
+
* { main: import.meta.url },
|
|
170
|
+
* Effect.gen(function* () {
|
|
171
|
+
* const pong = yield* Fly.bindService(Pong);
|
|
172
|
+
* return { name: () => Effect.succeed("ping") };
|
|
173
|
+
* }),
|
|
174
|
+
* );
|
|
175
|
+
* ```
|
|
176
|
+
*
|
|
177
|
+
* ### Errors
|
|
178
|
+
* Each fails the caller's deploy before the caller is created:
|
|
179
|
+
* `Fly.ServiceUnreachable` when the caller and the Service are on
|
|
180
|
+
* different networks, `Fly.ServiceNotBindable` when the Service publishes
|
|
181
|
+
* no ports, and `Fly.EndpointNotPublished` for a port it does not publish.
|
|
182
|
+
*
|
|
183
|
+
* @binding
|
|
184
|
+
* @product Service
|
|
185
|
+
*/
|
|
186
|
+
export const bindService = (target) => Effect.gen(function* () {
|
|
187
|
+
const http = yield* HttpClient.HttpClient;
|
|
188
|
+
const bound = yield* bindTarget(target, undefined);
|
|
189
|
+
const send = (request, isRpc) => Effect.gen(function* () {
|
|
190
|
+
const base = yield* bound.url;
|
|
191
|
+
let next = HttpClientRequest.setUrl(request, withBase(base, request.url));
|
|
192
|
+
if (isRpc) {
|
|
193
|
+
next = HttpClientRequest.setHeader(next, RPC_TOKEN_HEADER, yield* bound.token);
|
|
194
|
+
}
|
|
195
|
+
return yield* http.execute(next);
|
|
196
|
+
});
|
|
197
|
+
return makeFetchRpcStub({
|
|
198
|
+
fetch: (request) => send(request, request.url.includes(RPC_PATH_PREFIX)),
|
|
199
|
+
base: {
|
|
200
|
+
fetch: (request) => send(request, false),
|
|
201
|
+
},
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
/**
|
|
205
|
+
* Bind one published port of another {@link Service}: an admin API on
|
|
206
|
+
* its own port, or a raw TCP protocol. Returns the port's private host,
|
|
207
|
+
* its URL when it serves plain HTTP, and an `HttpClient` whose relative
|
|
208
|
+
* requests go there. See {@link bindService}.
|
|
209
|
+
*/
|
|
210
|
+
export const bindEndpoint = (target, options) => Effect.gen(function* () {
|
|
211
|
+
const http = yield* HttpClient.HttpClient;
|
|
212
|
+
const bound = yield* bindTarget(target, options.port);
|
|
213
|
+
const host = bound.appName.pipe(Effect.map((app) => `${app}.flycast`));
|
|
214
|
+
const url = host.pipe(Effect.map((name) => options.port === 80 ? `http://${name}` : `http://${name}:${options.port}`));
|
|
215
|
+
return {
|
|
216
|
+
host,
|
|
217
|
+
port: options.port,
|
|
218
|
+
url,
|
|
219
|
+
client: HttpClient.mapRequestEffect(http, (request) => url.pipe(Effect.map((base) => HttpClientRequest.setUrl(request, withBase(base, request.url))))),
|
|
220
|
+
};
|
|
221
|
+
});
|
|
222
|
+
//# sourceMappingURL=BindService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BindService.js","sourceRoot":"","sources":["../src/BindService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the bundled program (the runners registered via `host.run` /
|
|
3
|
+
* serve) and run it with a Node HTTP server bound to `PORT`, so the
|
|
4
|
+
* returned `{ fetch }` handler is actually served and `host.run` loops
|
|
5
|
+
* stay alive.
|
|
6
|
+
*/
|
|
7
|
+
export declare const bootstrap: (entrypoint: unknown) => Promise<void>;
|
|
8
|
+
//# sourceMappingURL=Bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bootstrap.d.ts","sourceRoot":"","sources":["../src/Bootstrap.ts"],"names":[],"mappings":"AAuBA;;;;;GAKG;AACH,eAAO,MAAM,SAAS,eAAgB,OAAO,KAAG,OAAO,CAAC,IAAI,CAoC3D,CAAC"}
|
package/lib/Bootstrap.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process bootstrap for `Fly.Service` and `Fly.Sprite` (a Node process
|
|
3
|
+
* serving the bundled program). The generated entry imports this module
|
|
4
|
+
* and the user's `main`, nothing else — see `alchemy/Runtime/Bootstrap` for why.
|
|
5
|
+
*/
|
|
6
|
+
import { NodeServices } from "@effect/platform-node";
|
|
7
|
+
import { NodeHttpServer } from "alchemy/Http";
|
|
8
|
+
import { reifyBoundConfigProvider } from "alchemy/Runtime";
|
|
9
|
+
import { entrypointLayer, resolveProgram, runProcess, stackFromEnv, } from "alchemy/Runtime/Bootstrap";
|
|
10
|
+
import { ManagedHttpShutdown } from "alchemy/Runtime/ManagedHttpShutdown";
|
|
11
|
+
import * as ConfigProvider from "effect/ConfigProvider";
|
|
12
|
+
import * as Effect from "effect/Effect";
|
|
13
|
+
import * as FetchHttpClient from "effect/http/FetchHttpClient";
|
|
14
|
+
import * as Layer from "effect/Layer";
|
|
15
|
+
import * as Logger from "effect/Logger";
|
|
16
|
+
import * as Option from "effect/Option";
|
|
17
|
+
import * as Scope from "effect/Scope";
|
|
18
|
+
/**
|
|
19
|
+
* Resolve the bundled program (the runners registered via `host.run` /
|
|
20
|
+
* serve) and run it with a Node HTTP server bound to `PORT`, so the
|
|
21
|
+
* returned `{ fetch }` handler is actually served and `host.run` loops
|
|
22
|
+
* stay alive.
|
|
23
|
+
*/
|
|
24
|
+
export const bootstrap = (entrypoint) => {
|
|
25
|
+
const platform = Layer.mergeAll(NodeServices.layer, FetchHttpClient.layer, Logger.layer([Logger.consolePretty()]));
|
|
26
|
+
const services = entrypointLayer(entrypoint).pipe(Layer.provideMerge(stackFromEnv), Layer.provideMerge(NodeHttpServer({ hostname: "0.0.0.0" })), Layer.provideMerge(platform), Layer.provideMerge(Layer.succeed(ConfigProvider.ConfigProvider, reifyBoundConfigProvider(ConfigProvider.fromEnv(), process.env))));
|
|
27
|
+
const program = Effect.gen(function* () {
|
|
28
|
+
const managed = yield* Effect.serviceOption(ManagedHttpShutdown);
|
|
29
|
+
if (Option.isNone(managed)) {
|
|
30
|
+
return yield* resolveProgram("program").pipe(Effect.provide(services), Effect.scoped);
|
|
31
|
+
}
|
|
32
|
+
// Initializer dependencies outlive both run finalizers and HTTP responses.
|
|
33
|
+
const context = yield* Layer.buildWithScope(services, managed.value.dependencies);
|
|
34
|
+
return yield* resolveProgram("program").pipe(Effect.provideContext(context), Scope.provide(managed.value.dependencies));
|
|
35
|
+
});
|
|
36
|
+
const timeout = process.env.ALCHEMY_FLY_SHUTDOWN_TIMEOUT_MS;
|
|
37
|
+
return runProcess("Fly service", program, {
|
|
38
|
+
managedHttpShutdownTimeoutMs: timeout === undefined ? undefined : /^\d+$/.test(timeout) ? Number(timeout) : NaN,
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=Bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bootstrap.js","sourceRoot":"","sources":["../src/Bootstrap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,YAAY,GACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,UAAmB,EAAiB,EAAE;IAC9D,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAC7B,YAAY,CAAC,KAAK,EAClB,eAAe,CAAC,KAAK,EACrB,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CACvC,CAAC;IAEF,MAAM,QAAQ,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC,IAAI,CAC/C,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,EAChC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,EAC3D,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC5B,KAAK,CAAC,YAAY,CAChB,KAAK,CAAC,OAAO,CACX,cAAc,CAAC,cAAc,EAC7B,wBAAwB,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAChE,CACF,CACF,CAAC;IACF,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;QACjE,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACxF,CAAC;QACD,2EAA2E;QAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAClF,OAAO,KAAK,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,IAAI,CAC1C,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAC9B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAC1C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;IAC5D,OAAO,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE;QACxC,4BAA4B,EAC1B,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG;KACpF,CAAC,CAAC;AACL,CAAC,CAAC"}
|
package/lib/Bucket.d.ts
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
import type { AddOnsResponseEdgesItemNode } from "@distilled.cloud/fly-io/addons";
|
|
2
|
+
import * as addons from "@distilled.cloud/fly-io/addons";
|
|
3
|
+
import * as Provider from "alchemy/Provider";
|
|
4
|
+
import { Resource } from "alchemy/Resource";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as Redacted from "effect/Redacted";
|
|
7
|
+
import { TigrisCredentialsMissing } from "./Errors.ts";
|
|
8
|
+
import type { Providers } from "./Providers.ts";
|
|
9
|
+
/** Env-var names Tigris HTTP bindings write onto an App (same as `fly storage create`). */
|
|
10
|
+
export declare const BUCKET_SECRET_NAMES: readonly ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_ENDPOINT_URL_S3", "AWS_REGION", "BUCKET_NAME"];
|
|
11
|
+
export type BucketSecretName = (typeof BUCKET_SECRET_NAMES)[number];
|
|
12
|
+
/**
|
|
13
|
+
* Shadow bucket used to migrate from another S3-compatible store.
|
|
14
|
+
* Every field is required when set.
|
|
15
|
+
*/
|
|
16
|
+
export interface BucketShadow {
|
|
17
|
+
/** Shadow-bucket access key id. */
|
|
18
|
+
accessKey: string;
|
|
19
|
+
/** Shadow-bucket secret. Wrap with `Redacted.make`. */
|
|
20
|
+
secretKey: Redacted.Redacted<string> | string;
|
|
21
|
+
/** Shadow-bucket region. */
|
|
22
|
+
region: string;
|
|
23
|
+
/** Shadow-bucket name. */
|
|
24
|
+
name: string;
|
|
25
|
+
/** Shadow-bucket S3 endpoint URL. */
|
|
26
|
+
endpoint: string;
|
|
27
|
+
/**
|
|
28
|
+
* Dual-write new objects back to the shadow bucket.
|
|
29
|
+
*
|
|
30
|
+
* @default false
|
|
31
|
+
*/
|
|
32
|
+
writeThrough?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface BucketProps {
|
|
35
|
+
/**
|
|
36
|
+
* Tigris bucket / add-on name. Globally unique, DNS-compatible
|
|
37
|
+
* (lowercase letters, digits, hyphens), must start with a letter,
|
|
38
|
+
* max 63 characters. If omitted, a unique name is generated from
|
|
39
|
+
* the stack, stage and logical ID. Changing it replaces the Bucket.
|
|
40
|
+
*/
|
|
41
|
+
name?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Organization slug. Defaults to the current token's org
|
|
44
|
+
* (`getCurrentToken`). Changing it replaces the Bucket.
|
|
45
|
+
*/
|
|
46
|
+
orgSlug?: string;
|
|
47
|
+
/**
|
|
48
|
+
* Serve objects without credentials. Default is private.
|
|
49
|
+
*
|
|
50
|
+
* @default false
|
|
51
|
+
*/
|
|
52
|
+
public?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Custom domain for public website hosting. Maps to Tigris
|
|
55
|
+
* `options.website.domain_name`. Empty string when omitted
|
|
56
|
+
* (the Tigris API requires the field).
|
|
57
|
+
*/
|
|
58
|
+
domainName?: string;
|
|
59
|
+
/**
|
|
60
|
+
* Tigris accelerate. Default is off.
|
|
61
|
+
*
|
|
62
|
+
* @default false
|
|
63
|
+
*/
|
|
64
|
+
accelerate?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Shadow bucket for zero-downtime migration from another
|
|
67
|
+
* S3-compatible store. Every nested field is required when set.
|
|
68
|
+
*/
|
|
69
|
+
shadowBucket?: BucketShadow;
|
|
70
|
+
}
|
|
71
|
+
export type Bucket = Resource<"Fly.Bucket", BucketProps, {
|
|
72
|
+
/** Fly GraphQL add-on id. Identity of the Bucket. */
|
|
73
|
+
addOnId: string;
|
|
74
|
+
/** Physical Tigris add-on / bucket name. */
|
|
75
|
+
name: string;
|
|
76
|
+
/** Observed provisioning status (`ready`, …). */
|
|
77
|
+
status: string | undefined;
|
|
78
|
+
/** Organization slug. */
|
|
79
|
+
orgSlug: string | undefined;
|
|
80
|
+
/** Whether the bucket is public. */
|
|
81
|
+
public: boolean;
|
|
82
|
+
/** Custom website domain, if set. */
|
|
83
|
+
domainName: string | undefined;
|
|
84
|
+
/** Tigris accelerate. */
|
|
85
|
+
accelerate: boolean;
|
|
86
|
+
/** Tigris SSO dashboard URL, if the API returned one. */
|
|
87
|
+
ssoLink: string | undefined;
|
|
88
|
+
/** RFC3339 creation timestamp. */
|
|
89
|
+
createdAt: string | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* `AWS_ACCESS_KEY_ID` from `createAddOn.environment`. Never logged.
|
|
92
|
+
*/
|
|
93
|
+
accessKeyId: Redacted.Redacted<string> | undefined;
|
|
94
|
+
/**
|
|
95
|
+
* `AWS_SECRET_ACCESS_KEY` from `createAddOn.environment`. Never logged.
|
|
96
|
+
*/
|
|
97
|
+
secretAccessKey: Redacted.Redacted<string> | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* `AWS_ENDPOINT_URL_S3` from `createAddOn.environment`. Never logged.
|
|
100
|
+
*/
|
|
101
|
+
endpoint: Redacted.Redacted<string> | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* `AWS_REGION` from `createAddOn.environment`. Never logged.
|
|
104
|
+
*/
|
|
105
|
+
region: Redacted.Redacted<string> | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* `BUCKET_NAME` from `createAddOn.environment`. Never logged.
|
|
108
|
+
*/
|
|
109
|
+
bucketName: Redacted.Redacted<string> | undefined;
|
|
110
|
+
}, never, Providers>;
|
|
111
|
+
/**
|
|
112
|
+
* A Fly.Bucket is Tigris S3-compatible object storage, billed through
|
|
113
|
+
* Fly. It is an org-scoped GraphQL add-on (`AddOnType` `tigris`).
|
|
114
|
+
*
|
|
115
|
+
* @see https://fly.io/docs/tigris/
|
|
116
|
+
*
|
|
117
|
+
* ### Create a Bucket
|
|
118
|
+
* Alchemy generates a unique name unless you pass one.
|
|
119
|
+
*
|
|
120
|
+
* **Example:** Generated name
|
|
121
|
+
* ```typescript
|
|
122
|
+
* const data = yield* Fly.Bucket("Data");
|
|
123
|
+
* ```
|
|
124
|
+
*
|
|
125
|
+
* ### A stable name
|
|
126
|
+
* Pass `name` when you need a stable Tigris bucket name.
|
|
127
|
+
*
|
|
128
|
+
* **Example:** Explicit name
|
|
129
|
+
* ```typescript
|
|
130
|
+
* const data = yield* Fly.Bucket("Data", {
|
|
131
|
+
* name: "my-bucket",
|
|
132
|
+
* });
|
|
133
|
+
* ```
|
|
134
|
+
*
|
|
135
|
+
* :::caution[Changing `name` replaces the Bucket]
|
|
136
|
+
* Tigris cannot rename a bucket. Alchemy creates the new name, then
|
|
137
|
+
* deletes the old one.
|
|
138
|
+
* :::
|
|
139
|
+
*
|
|
140
|
+
* ### Organization
|
|
141
|
+
* Org defaults to the current token. Pass `orgSlug` to pin it.
|
|
142
|
+
*
|
|
143
|
+
* **Example:** Pin an org
|
|
144
|
+
* ```typescript
|
|
145
|
+
* const data = yield* Fly.Bucket("Data", {
|
|
146
|
+
* orgSlug: "my-org",
|
|
147
|
+
* });
|
|
148
|
+
* ```
|
|
149
|
+
*
|
|
150
|
+
* :::caution[Changing `orgSlug` replaces the Bucket]
|
|
151
|
+
* The bucket is created in the new org. The old bucket is deleted.
|
|
152
|
+
* :::
|
|
153
|
+
*
|
|
154
|
+
* ### Public access
|
|
155
|
+
* Buckets are private by default. `public: true` serves objects
|
|
156
|
+
* without credentials.
|
|
157
|
+
*
|
|
158
|
+
* **Example:** Public bucket
|
|
159
|
+
* ```typescript
|
|
160
|
+
* const assets = yield* Fly.Bucket("Assets", {
|
|
161
|
+
* public: true,
|
|
162
|
+
* });
|
|
163
|
+
* ```
|
|
164
|
+
*
|
|
165
|
+
* ### Custom domain
|
|
166
|
+
* `domainName` sets `website.domain_name` on the add-on. Point a
|
|
167
|
+
* CNAME at `{name}.t3.tigrisbucket.io`.
|
|
168
|
+
*
|
|
169
|
+
* **Example:** Custom domain
|
|
170
|
+
* ```typescript
|
|
171
|
+
* const assets = yield* Fly.Bucket("Assets", {
|
|
172
|
+
* public: true,
|
|
173
|
+
* domainName: "assets.example.com",
|
|
174
|
+
* });
|
|
175
|
+
* ```
|
|
176
|
+
*
|
|
177
|
+
* ### Put and get objects
|
|
178
|
+
* Tigris speaks the S3 API. Bind {@link PutObject} / {@link GetObject}
|
|
179
|
+
* (and the other S3 object ops) in Service init. Alchemy injects the
|
|
180
|
+
* Tigris endpoint and credentials; you never read `AWS_*` yourself.
|
|
181
|
+
*
|
|
182
|
+
* **Example:** Put an object from a Service
|
|
183
|
+
* ```typescript
|
|
184
|
+
* import * as HttpServerResponse from "effect/http/HttpServerResponse";
|
|
185
|
+
*
|
|
186
|
+
* export default class Api extends Fly.Service<Api>()(
|
|
187
|
+
* "Api",
|
|
188
|
+
* { app: Site, main: import.meta.url, port: 3000 },
|
|
189
|
+
* Effect.gen(function* () {
|
|
190
|
+
* const putObject = yield* Fly.PutObject(Data);
|
|
191
|
+
* const getObject = yield* Fly.GetObject(Data);
|
|
192
|
+
*
|
|
193
|
+
* return {
|
|
194
|
+
* fetch: Effect.gen(function* () {
|
|
195
|
+
* yield* putObject({
|
|
196
|
+
* Key: "hello.txt",
|
|
197
|
+
* Body: "hello",
|
|
198
|
+
* ContentType: "text/plain",
|
|
199
|
+
* });
|
|
200
|
+
* const obj = yield* getObject({ Key: "hello.txt" });
|
|
201
|
+
* return HttpServerResponse.json({ ok: obj.ETag !== undefined });
|
|
202
|
+
* }),
|
|
203
|
+
* };
|
|
204
|
+
* }).pipe(Effect.provide([Fly.PutObjectHttp, Fly.GetObjectHttp])),
|
|
205
|
+
* ) {}
|
|
206
|
+
* ```
|
|
207
|
+
*
|
|
208
|
+
* ### Fly.Secret
|
|
209
|
+
* You can also set each key yourself with {@link Secret}.
|
|
210
|
+
*
|
|
211
|
+
* **Example:** Manual secrets
|
|
212
|
+
* ```typescript
|
|
213
|
+
* yield* Fly.Secret("BucketName", {
|
|
214
|
+
* app: Site,
|
|
215
|
+
* name: "BUCKET_NAME",
|
|
216
|
+
* value: Data.bucketName,
|
|
217
|
+
* });
|
|
218
|
+
* ```
|
|
219
|
+
*
|
|
220
|
+
* @resource
|
|
221
|
+
* @product Bucket
|
|
222
|
+
*/
|
|
223
|
+
export declare const Bucket: import("alchemy/Resource").ResourceClass<Bucket>;
|
|
224
|
+
declare const BucketNotCreated_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 & {
|
|
225
|
+
readonly _tag: "Fly.BucketNotCreated";
|
|
226
|
+
} & Readonly<A>;
|
|
227
|
+
export declare class BucketNotCreated extends BucketNotCreated_base<{
|
|
228
|
+
name: string;
|
|
229
|
+
}> {
|
|
230
|
+
}
|
|
231
|
+
declare const BucketOrgMissing_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 & {
|
|
232
|
+
readonly _tag: "Fly.BucketOrgMissing";
|
|
233
|
+
} & Readonly<A>;
|
|
234
|
+
export declare class BucketOrgMissing extends BucketOrgMissing_base<{
|
|
235
|
+
orgSlug: string;
|
|
236
|
+
}> {
|
|
237
|
+
}
|
|
238
|
+
declare const BucketProvisionFailed_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 & {
|
|
239
|
+
readonly _tag: "Fly.BucketProvisionFailed";
|
|
240
|
+
} & Readonly<A>;
|
|
241
|
+
export declare class BucketProvisionFailed extends BucketProvisionFailed_base<{
|
|
242
|
+
name: string;
|
|
243
|
+
status: string | undefined;
|
|
244
|
+
errorMessage: string | undefined;
|
|
245
|
+
}> {
|
|
246
|
+
}
|
|
247
|
+
export declare const listTigrisAddOns: () => Effect.Effect<AddOnsResponseEdgesItemNode[], addons.FlyIoOpError, addons.FlyIoOpContext>;
|
|
248
|
+
export declare const BucketProvider: () => import("effect/Layer").Layer<Provider.Provider<Bucket>, never, import("alchemy/Stack").Stack | import("alchemy/Stage").Stage | addons.FlyIoOpContext>;
|
|
249
|
+
declare const BucketSecretVersionMissing_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 & {
|
|
250
|
+
readonly _tag: "Fly.BucketSecretVersionMissing";
|
|
251
|
+
} & Readonly<A>;
|
|
252
|
+
declare class BucketSecretVersionMissing extends BucketSecretVersionMissing_base<{
|
|
253
|
+
appName: string;
|
|
254
|
+
}> {
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Write Tigris `AWS_*` / `BUCKET_NAME` secrets onto an App. Called from
|
|
258
|
+
* {@link Service} reconcile so the secrets exist before Machines boot.
|
|
259
|
+
*
|
|
260
|
+
* Looks up the add-on by id/name (retrying while Tigris is still
|
|
261
|
+
* provisioning) and also copies any already-evaluated `AWS_*` /
|
|
262
|
+
* `BUCKET_NAME` values from binding env — GraphQL `environment` is often
|
|
263
|
+
* empty after create. A missing add-on may use bound values only when the
|
|
264
|
+
* bucket name, credential pair, and S3 endpoint are complete. Partial values
|
|
265
|
+
* are never written. Region is optional, as in the Tigris bindings.
|
|
266
|
+
* Without an attachment, only an explicit `BUCKET_NAME` requests this mode;
|
|
267
|
+
* ordinary AWS region or credential settings do not imply a Bucket.
|
|
268
|
+
* Returns the highest accepted secret-version floor, or `undefined` when
|
|
269
|
+
* no Bucket was requested; this is not a vault snapshot.
|
|
270
|
+
*/
|
|
271
|
+
export declare const attachBucketSecrets: (appName: string, attached: readonly {
|
|
272
|
+
name: string;
|
|
273
|
+
id?: string;
|
|
274
|
+
/** Credentials from the bound Bucket's attributes. */
|
|
275
|
+
values?: Record<string, string>;
|
|
276
|
+
}[], boundEnv?: Record<string, string> | undefined) => Effect.Effect<number | undefined, import("@distilled.cloud/fly-io").BadRequest | BucketSecretVersionMissing | import("@distilled.cloud/fly-io").Conflict | import("@distilled.cloud/fly-io").Forbidden | import("@distilled.cloud/fly-io").NotFound | TigrisCredentialsMissing | addons.FlyIoOpError, addons.FlyIoOpContext>;
|
|
277
|
+
export {};
|
|
278
|
+
//# sourceMappingURL=Bucket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Bucket.d.ts","sourceRoot":"","sources":["../src/Bucket.ts"],"names":[],"mappings":"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"}
|