@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,153 @@
|
|
|
1
|
+
import {
|
|
2
|
+
makePgMigrationExecutor,
|
|
3
|
+
runMigrations,
|
|
4
|
+
type NormalizedMigrationsInput,
|
|
5
|
+
type StampedMigrationsState,
|
|
6
|
+
} from "@alchemy.run/sql/Migrations";
|
|
7
|
+
import { importPg } from "@alchemy.run/sql/PostgresDriver";
|
|
8
|
+
import { readSqlFile } from "@alchemy.run/sql/SqlFile";
|
|
9
|
+
import * as Data from "effect/Data";
|
|
10
|
+
import * as Effect from "effect/Effect";
|
|
11
|
+
import * as Redacted from "effect/Redacted";
|
|
12
|
+
import * as Schedule from "effect/Schedule";
|
|
13
|
+
import type { Client } from "pg";
|
|
14
|
+
|
|
15
|
+
export class PostgresMigrationError extends Data.TaggedError("Fly.PostgresMigrationError")<{
|
|
16
|
+
message: string;
|
|
17
|
+
cause?: unknown;
|
|
18
|
+
}> {}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Strip query-string SSL flags so `pg-connection-string` does not treat
|
|
22
|
+
* `sslmode=require` as `verify-full`. TLS and certificate verification
|
|
23
|
+
* are set on the client (`ssl.rejectUnauthorized: true`).
|
|
24
|
+
*/
|
|
25
|
+
export const stripSslQueryParams = (uri: string): string => {
|
|
26
|
+
try {
|
|
27
|
+
const url = new URL(uri);
|
|
28
|
+
url.searchParams.delete("sslmode");
|
|
29
|
+
url.searchParams.delete("channel_binding");
|
|
30
|
+
return url.toString();
|
|
31
|
+
} catch {
|
|
32
|
+
return uri;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const toMigrationError = (cause: unknown) =>
|
|
37
|
+
new PostgresMigrationError({
|
|
38
|
+
message: cause instanceof Error ? cause.message : String(cause),
|
|
39
|
+
cause,
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* A freshly-provisioned Fly Managed Postgres cluster reports `ready` on the
|
|
44
|
+
* API before its hostname is resolvable and its endpoint accepts
|
|
45
|
+
* connections — reconcile's first migration connect can fail with
|
|
46
|
+
* `ENOTFOUND` (DNS still propagating) or a refused/reset socket. These are
|
|
47
|
+
* eventual consistency, not failures: retry the connect on a bounded
|
|
48
|
+
* schedule (~45s) before surfacing the error.
|
|
49
|
+
*/
|
|
50
|
+
const TRANSIENT_CONNECT_CODES = new Set([
|
|
51
|
+
"ENOTFOUND",
|
|
52
|
+
"EAI_AGAIN",
|
|
53
|
+
"ECONNREFUSED",
|
|
54
|
+
"ECONNRESET",
|
|
55
|
+
"ETIMEDOUT",
|
|
56
|
+
]);
|
|
57
|
+
|
|
58
|
+
const isTransientConnectError = (error: PostgresMigrationError): boolean => {
|
|
59
|
+
const code = (error.cause as { code?: unknown } | null | undefined)?.code;
|
|
60
|
+
return typeof code === "string" && TRANSIENT_CONNECT_CODES.has(code);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
/** Open a pg client for the scope of `use`, closing it afterwards. */
|
|
64
|
+
export const withPgClient = <A, E, R>(
|
|
65
|
+
connectionUri: Redacted.Redacted<string>,
|
|
66
|
+
use: (client: Client) => Effect.Effect<A, E, R>,
|
|
67
|
+
): Effect.Effect<A, PostgresMigrationError | E, R> =>
|
|
68
|
+
Effect.acquireUseRelease(
|
|
69
|
+
Effect.tryPromise({
|
|
70
|
+
try: async () => {
|
|
71
|
+
const { Client } = await importPg();
|
|
72
|
+
const client = new Client({
|
|
73
|
+
connectionString: connectionUri.pipe(Redacted.value, stripSslQueryParams),
|
|
74
|
+
ssl: { rejectUnauthorized: true },
|
|
75
|
+
});
|
|
76
|
+
await client.connect();
|
|
77
|
+
return client;
|
|
78
|
+
},
|
|
79
|
+
catch: toMigrationError,
|
|
80
|
+
}).pipe(
|
|
81
|
+
Effect.retry({
|
|
82
|
+
while: isTransientConnectError,
|
|
83
|
+
schedule: Schedule.spaced("3 seconds"),
|
|
84
|
+
times: 15,
|
|
85
|
+
}),
|
|
86
|
+
// Still unreachable after the bounded retry: almost always a missing
|
|
87
|
+
// route rather than propagation — MPG hostnames only exist on the org
|
|
88
|
+
// private network. Say so instead of a bare `getaddrinfo ENOTFOUND`.
|
|
89
|
+
Effect.mapError((error) =>
|
|
90
|
+
isTransientConnectError(error)
|
|
91
|
+
? new PostgresMigrationError({
|
|
92
|
+
message:
|
|
93
|
+
`${error.message} — Fly Managed Postgres is only reachable ` +
|
|
94
|
+
"on the org's private network. Run the deploy behind a " +
|
|
95
|
+
"WireGuard peer or `fly mpg proxy`, or from a machine on " +
|
|
96
|
+
"6PN. See https://fly.io/docs/mpg/create-and-connect/",
|
|
97
|
+
cause: error.cause,
|
|
98
|
+
})
|
|
99
|
+
: error,
|
|
100
|
+
),
|
|
101
|
+
),
|
|
102
|
+
use,
|
|
103
|
+
(client) => Effect.promise(() => client.end().catch(() => {})),
|
|
104
|
+
);
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Fly Managed Postgres's migration adaptation is the shared pipeline
|
|
108
|
+
* with a connection-URI-scoped pg client as its executor. Use the
|
|
109
|
+
* direct (non-PgBouncer) URI so DDL and advisory locks work.
|
|
110
|
+
*/
|
|
111
|
+
export const runPgMigrations = (options: {
|
|
112
|
+
connectionUri: Redacted.Redacted<string>;
|
|
113
|
+
input: NormalizedMigrationsInput;
|
|
114
|
+
stamped: StampedMigrationsState;
|
|
115
|
+
}) =>
|
|
116
|
+
runMigrations({
|
|
117
|
+
...options,
|
|
118
|
+
withExecutor: (apply) =>
|
|
119
|
+
withPgClient(options.connectionUri, (client) => apply(makePgMigrationExecutor(client))),
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
/** Run a single SQL script against the database (used for `importFiles`). */
|
|
123
|
+
export const runSql = (connectionUri: Redacted.Redacted<string>, sql: string) =>
|
|
124
|
+
withPgClient(connectionUri, (client) =>
|
|
125
|
+
Effect.tryPromise({
|
|
126
|
+
try: () => client.query(sql),
|
|
127
|
+
catch: toMigrationError,
|
|
128
|
+
}),
|
|
129
|
+
).pipe(Effect.asVoid);
|
|
130
|
+
|
|
131
|
+
export const runImports = (
|
|
132
|
+
connectionUri: Redacted.Redacted<string>,
|
|
133
|
+
importFiles: ReadonlyArray<string>,
|
|
134
|
+
rootDir: string,
|
|
135
|
+
previous: Record<string, string>,
|
|
136
|
+
) =>
|
|
137
|
+
Effect.gen(function* () {
|
|
138
|
+
const hashes: Record<string, string> = { ...previous };
|
|
139
|
+
for (const filePath of importFiles) {
|
|
140
|
+
const file = yield* readSqlFile(rootDir, filePath);
|
|
141
|
+
if (previous[filePath] === file.hash) {
|
|
142
|
+
hashes[filePath] = file.hash;
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
yield* runSql(connectionUri, file.sql);
|
|
146
|
+
hashes[filePath] = file.hash;
|
|
147
|
+
}
|
|
148
|
+
const tracked = new Set(importFiles);
|
|
149
|
+
for (const key of Object.keys(hashes)) {
|
|
150
|
+
if (!tracked.has(key)) delete hashes[key];
|
|
151
|
+
}
|
|
152
|
+
return hashes;
|
|
153
|
+
});
|
package/src/Providers.ts
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { CredentialsStoreLive } from "alchemy/Auth/Credentials";
|
|
2
|
+
import { ProfileStoreLive } from "alchemy/Auth/Profile";
|
|
3
|
+
import * as Command from "alchemy/Command";
|
|
4
|
+
import * as Provider from "alchemy/Provider";
|
|
5
|
+
import { Random, RandomProvider } from "alchemy/Random";
|
|
6
|
+
import {
|
|
7
|
+
Server as WebsiteServer,
|
|
8
|
+
ServerProvider as WebsiteServerProvider,
|
|
9
|
+
} from "alchemy/Website/Server";
|
|
10
|
+
import * as FetchHttpClient from "effect/http/FetchHttpClient";
|
|
11
|
+
import * as Layer from "effect/Layer";
|
|
12
|
+
import { App, AppProvider } from "./App.ts";
|
|
13
|
+
import { FlyAuth } from "./AuthProvider.ts";
|
|
14
|
+
import { Bucket, BucketProvider } from "./Bucket.ts";
|
|
15
|
+
import { Certificate, CertificateProvider } from "./Certificate.ts";
|
|
16
|
+
import { CheckpointHttp } from "./CheckpointHttp.ts";
|
|
17
|
+
import { ConnectPostgresHttp } from "./ConnectPostgresHttp.ts";
|
|
18
|
+
import * as Credentials from "./Credentials.ts";
|
|
19
|
+
import { DecryptHttp } from "./DecryptHttp.ts";
|
|
20
|
+
import { DeleteObjectHttp } from "./DeleteObjectHttp.ts";
|
|
21
|
+
import { EncryptHttp } from "./EncryptHttp.ts";
|
|
22
|
+
import { fromCredentials } from "./Environment.ts";
|
|
23
|
+
import { ExecHttp } from "./ExecHttp.ts";
|
|
24
|
+
import { GetObjectHttp } from "./GetObjectHttp.ts";
|
|
25
|
+
import { GetSecretHttp } from "./GetSecretHttp.ts";
|
|
26
|
+
import { HeadObjectHttp } from "./HeadObjectHttp.ts";
|
|
27
|
+
import { IpAssignment, IpAssignmentProvider } from "./IpAssignment.ts";
|
|
28
|
+
import { ListObjectsV2Http } from "./ListObjectsV2Http.ts";
|
|
29
|
+
import { ListSecretsHttp } from "./ListSecretsHttp.ts";
|
|
30
|
+
import { Machine, MachineProvider } from "./Machine.ts";
|
|
31
|
+
import { MountVolumeLive } from "./MountVolume.ts";
|
|
32
|
+
import { Postgres, PostgresProvider } from "./Postgres.ts";
|
|
33
|
+
import { PutObjectHttp } from "./PutObjectHttp.ts";
|
|
34
|
+
import { ReadRedisHttp } from "./ReadRedisHttp.ts";
|
|
35
|
+
import { ReadWriteRedisHttp } from "./ReadWriteRedisHttp.ts";
|
|
36
|
+
import { Redis, RedisProvider } from "./Redis.ts";
|
|
37
|
+
import { Secret, SecretProvider } from "./Secret.ts";
|
|
38
|
+
import { SecretKey, SecretKeyProvider } from "./SecretKey.ts";
|
|
39
|
+
import { Service, ServiceProvider } from "./Service.ts";
|
|
40
|
+
import { SignHttp } from "./SignHttp.ts";
|
|
41
|
+
import { Sprite, SpriteProvider } from "./Sprite.ts";
|
|
42
|
+
import { VerifyHttp } from "./VerifyHttp.ts";
|
|
43
|
+
import { VolumeSnapshot, VolumeSnapshotProvider } from "./VolumeSnapshot.ts";
|
|
44
|
+
import { AssetDeployment, AssetDeploymentProvider } from "./Website/AssetDeployment.ts";
|
|
45
|
+
import { WriteCertificatesHttp } from "./WriteCertificatesHttp.ts";
|
|
46
|
+
import { WriteRedisHttp } from "./WriteRedisHttp.ts";
|
|
47
|
+
import { WriteSecretHttp } from "./WriteSecretHttp.ts";
|
|
48
|
+
|
|
49
|
+
export class Providers extends Provider.ProviderCollection<Providers>()("Fly") {}
|
|
50
|
+
|
|
51
|
+
export type ProviderRequirements = Layer.Services<ReturnType<typeof providers>>;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Build a layer that registers Fly resource providers, the Fly
|
|
55
|
+
* `AuthProvider`, the resolved `Credentials`, and an `HttpClient`. Include
|
|
56
|
+
* this from your stack alongside other cloud `providers()` layers.
|
|
57
|
+
*
|
|
58
|
+
* Resource providers are inserted into {@link Provider.collection} as they
|
|
59
|
+
* land. The collection starts empty so App / Machine / Service agents can
|
|
60
|
+
* make a single minimal insertion.
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* import * as Alchemy from "alchemy";
|
|
65
|
+
* import * as Fly from "@alchemy.run/fly";
|
|
66
|
+
* import * as Effect from "effect/Effect";
|
|
67
|
+
*
|
|
68
|
+
* export default Alchemy.Stack(
|
|
69
|
+
* "MyStack",
|
|
70
|
+
* {
|
|
71
|
+
* providers: Fly.providers(),
|
|
72
|
+
* state: Alchemy.localState(),
|
|
73
|
+
* },
|
|
74
|
+
* Effect.gen(function* () {
|
|
75
|
+
* return {};
|
|
76
|
+
* }),
|
|
77
|
+
* );
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export const providers = () =>
|
|
81
|
+
Layer.effect(
|
|
82
|
+
Providers,
|
|
83
|
+
Provider.collection([
|
|
84
|
+
App,
|
|
85
|
+
AssetDeployment,
|
|
86
|
+
Bucket,
|
|
87
|
+
Certificate,
|
|
88
|
+
IpAssignment,
|
|
89
|
+
Machine,
|
|
90
|
+
Postgres,
|
|
91
|
+
Random,
|
|
92
|
+
Redis,
|
|
93
|
+
Secret,
|
|
94
|
+
SecretKey,
|
|
95
|
+
Service,
|
|
96
|
+
Sprite,
|
|
97
|
+
VolumeSnapshot,
|
|
98
|
+
WebsiteServer,
|
|
99
|
+
]),
|
|
100
|
+
).pipe(
|
|
101
|
+
Layer.provide(
|
|
102
|
+
Layer.mergeAll(
|
|
103
|
+
AppProvider(),
|
|
104
|
+
AssetDeploymentProvider(),
|
|
105
|
+
BucketProvider(),
|
|
106
|
+
CertificateProvider(),
|
|
107
|
+
IpAssignmentProvider(),
|
|
108
|
+
MachineProvider(),
|
|
109
|
+
PostgresProvider(),
|
|
110
|
+
RandomProvider(),
|
|
111
|
+
RedisProvider(),
|
|
112
|
+
SecretProvider(),
|
|
113
|
+
SecretKeyProvider(),
|
|
114
|
+
ServiceProvider(),
|
|
115
|
+
SpriteProvider(),
|
|
116
|
+
VolumeSnapshotProvider(),
|
|
117
|
+
WebsiteServerProvider(),
|
|
118
|
+
),
|
|
119
|
+
),
|
|
120
|
+
// The binding layers are mutually independent — they all draw on the
|
|
121
|
+
// Credentials/HttpClient layers below. Merge them into one group so
|
|
122
|
+
// `.pipe` stays under its 20-argument overload ceiling.
|
|
123
|
+
Layer.provideMerge(
|
|
124
|
+
Layer.mergeAll(
|
|
125
|
+
MountVolumeLive,
|
|
126
|
+
ConnectPostgresHttp,
|
|
127
|
+
PutObjectHttp,
|
|
128
|
+
GetObjectHttp,
|
|
129
|
+
DeleteObjectHttp,
|
|
130
|
+
HeadObjectHttp,
|
|
131
|
+
ListObjectsV2Http,
|
|
132
|
+
ReadRedisHttp,
|
|
133
|
+
WriteRedisHttp,
|
|
134
|
+
ReadWriteRedisHttp,
|
|
135
|
+
CheckpointHttp,
|
|
136
|
+
ExecHttp,
|
|
137
|
+
GetSecretHttp,
|
|
138
|
+
ListSecretsHttp,
|
|
139
|
+
WriteSecretHttp,
|
|
140
|
+
WriteCertificatesHttp,
|
|
141
|
+
EncryptHttp,
|
|
142
|
+
DecryptHttp,
|
|
143
|
+
SignHttp,
|
|
144
|
+
VerifyHttp,
|
|
145
|
+
),
|
|
146
|
+
),
|
|
147
|
+
Layer.provideMerge(fromCredentials()),
|
|
148
|
+
Layer.provideMerge(Credentials.fromAuthProvider()),
|
|
149
|
+
Layer.provideMerge(FlyAuth),
|
|
150
|
+
Layer.provideMerge(ProfileStoreLive),
|
|
151
|
+
Layer.provideMerge(CredentialsStoreLive),
|
|
152
|
+
Layer.provideMerge(FetchHttpClient.layer),
|
|
153
|
+
Layer.provideMerge(Command.providers()),
|
|
154
|
+
Layer.orDie,
|
|
155
|
+
);
|
package/src/PutObject.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
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
|
+
|
|
8
|
+
export interface PutObjectRequest extends Omit<S3.PutObjectRequest, "Bucket"> {}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Runtime binding for Tigris `PutObject` over the S3 API.
|
|
12
|
+
*
|
|
13
|
+
* Bind this operation to a {@link Bucket} in Service init. The Tigris
|
|
14
|
+
* bucket name, endpoint, and credentials are injected automatically.
|
|
15
|
+
* Provide {@link PutObjectHttp}.
|
|
16
|
+
*
|
|
17
|
+
*
|
|
18
|
+
* ### Writing Objects
|
|
19
|
+
* **Example:** Put an Object
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const putObject = yield* Fly.PutObject(Data);
|
|
22
|
+
*
|
|
23
|
+
* yield* putObject({
|
|
24
|
+
* Key: "hello.txt",
|
|
25
|
+
* Body: "Hello, world!",
|
|
26
|
+
* ContentType: "text/plain",
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @binding
|
|
31
|
+
* @product Bucket
|
|
32
|
+
*/
|
|
33
|
+
export interface PutObject extends Binding.Service<
|
|
34
|
+
PutObject,
|
|
35
|
+
"Fly.PutObject",
|
|
36
|
+
(
|
|
37
|
+
bucket: Bucket,
|
|
38
|
+
) => Effect.Effect<
|
|
39
|
+
(
|
|
40
|
+
request: PutObjectRequest,
|
|
41
|
+
) => Effect.Effect<
|
|
42
|
+
S3.PutObjectOutput,
|
|
43
|
+
S3.PutObjectError | TigrisCredentialsMissing,
|
|
44
|
+
RuntimeContext
|
|
45
|
+
>
|
|
46
|
+
>
|
|
47
|
+
> {}
|
|
48
|
+
|
|
49
|
+
export const PutObject = Binding.Service<PutObject>("Fly.PutObject");
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as S3 from "@distilled.cloud/aws/s3";
|
|
2
|
+
import * as Layer from "effect/Layer";
|
|
3
|
+
import { makeTigrisS3Binding } from "./BucketBinding.ts";
|
|
4
|
+
import { PutObject } from "./PutObject.ts";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* HTTP implementation of {@link PutObject}. Calls distilled S3
|
|
8
|
+
* `putObject` against the Tigris endpoint with the bucket's credentials.
|
|
9
|
+
*
|
|
10
|
+
* @layer
|
|
11
|
+
* @product Bucket
|
|
12
|
+
* @provides Fly.PutObject
|
|
13
|
+
*/
|
|
14
|
+
export const PutObjectHttp = Layer.effect(
|
|
15
|
+
PutObject,
|
|
16
|
+
makeTigrisS3Binding({
|
|
17
|
+
tag: "Fly.PutObject",
|
|
18
|
+
operation: S3.putObject,
|
|
19
|
+
}),
|
|
20
|
+
);
|
package/src/ReadRedis.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ReadClient } from "@alchemy.run/redis";
|
|
2
|
+
import * as Binding from "alchemy/Binding";
|
|
3
|
+
import type * as Effect from "effect/Effect";
|
|
4
|
+
import type { Redis } from "./Redis.ts";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Bind a {@link Redis} database with read access (`get`, `ping`).
|
|
8
|
+
*
|
|
9
|
+
* `ReadRedis` is the Context tag, the type, and the callable —
|
|
10
|
+
* `yield* Fly.ReadRedis(Cache)`. Provide {@link ReadRedisHttp}.
|
|
11
|
+
*
|
|
12
|
+
*
|
|
13
|
+
* ### Read
|
|
14
|
+
* **Example:** Get a key
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const cache = yield* Fly.ReadRedis(Cache);
|
|
17
|
+
* const value = yield* cache.get("marker");
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @binding
|
|
21
|
+
* @product Redis
|
|
22
|
+
*/
|
|
23
|
+
export interface ReadRedis extends Binding.Service<
|
|
24
|
+
ReadRedis,
|
|
25
|
+
"Fly.ReadRedis",
|
|
26
|
+
(redis: Redis) => Effect.Effect<ReadRedisClient>
|
|
27
|
+
> {}
|
|
28
|
+
|
|
29
|
+
export const ReadRedis = Binding.Service<ReadRedis>("Fly.ReadRedis");
|
|
30
|
+
|
|
31
|
+
export type ReadRedisClient = ReadClient;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import { ReadRedis } from "./ReadRedis.ts";
|
|
3
|
+
import { makeRedisBinding } from "./RedisBinding.ts";
|
|
4
|
+
import { makeReadRedisClient } from "./RedisHttp.ts";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* HTTP implementation of {@link ReadRedis}.
|
|
8
|
+
*
|
|
9
|
+
* @layer
|
|
10
|
+
* @product Redis
|
|
11
|
+
* @provides Fly.ReadRedis
|
|
12
|
+
*/
|
|
13
|
+
export const ReadRedisHttp = Layer.effect(
|
|
14
|
+
ReadRedis,
|
|
15
|
+
makeRedisBinding({
|
|
16
|
+
makeClient: makeReadRedisClient,
|
|
17
|
+
}),
|
|
18
|
+
);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as Binding from "alchemy/Binding";
|
|
2
|
+
import type * as Effect from "effect/Effect";
|
|
3
|
+
import type { ReadRedisClient } from "./ReadRedis.ts";
|
|
4
|
+
import type { Redis } from "./Redis.ts";
|
|
5
|
+
import type { WriteRedisClient } from "./WriteRedis.ts";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Bind a {@link Redis} database with read + write access.
|
|
9
|
+
*
|
|
10
|
+
* `ReadWriteRedis` is the Context tag, the type, and the callable —
|
|
11
|
+
* `yield* Fly.ReadWriteRedis(Cache)`. Provide {@link ReadWriteRedisHttp}.
|
|
12
|
+
*
|
|
13
|
+
*
|
|
14
|
+
* ### Read and write
|
|
15
|
+
* **Example:** Round-trip a key
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const cache = yield* Fly.ReadWriteRedis(Cache);
|
|
18
|
+
* yield* cache.set("marker", "hello");
|
|
19
|
+
* const value = yield* cache.get("marker");
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @binding
|
|
23
|
+
* @product Redis
|
|
24
|
+
*/
|
|
25
|
+
export interface ReadWriteRedis extends Binding.Service<
|
|
26
|
+
ReadWriteRedis,
|
|
27
|
+
"Fly.ReadWriteRedis",
|
|
28
|
+
(redis: Redis) => Effect.Effect<ReadWriteRedisClient>
|
|
29
|
+
> {}
|
|
30
|
+
|
|
31
|
+
export const ReadWriteRedis = Binding.Service<ReadWriteRedis>("Fly.ReadWriteRedis");
|
|
32
|
+
|
|
33
|
+
export interface ReadWriteRedisClient extends ReadRedisClient, WriteRedisClient {}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import { ReadWriteRedis } from "./ReadWriteRedis.ts";
|
|
3
|
+
import { makeRedisBinding } from "./RedisBinding.ts";
|
|
4
|
+
import { makeReadWriteRedisClient } from "./RedisHttp.ts";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* HTTP implementation of {@link ReadWriteRedis}.
|
|
8
|
+
*
|
|
9
|
+
* @layer
|
|
10
|
+
* @product Redis
|
|
11
|
+
* @provides Fly.ReadWriteRedis
|
|
12
|
+
*/
|
|
13
|
+
export const ReadWriteRedisHttp = Layer.effect(
|
|
14
|
+
ReadWriteRedis,
|
|
15
|
+
makeRedisBinding({
|
|
16
|
+
makeClient: makeReadWriteRedisClient,
|
|
17
|
+
}),
|
|
18
|
+
);
|