@alchemy.run/fly 0.0.0-stage → 2.0.0-beta.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +61 -2
- 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 +97 -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,53 @@
|
|
|
1
|
+
import * as Binding from "alchemy/Binding";
|
|
2
|
+
import * as Config from "effect/Config";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
import * as Redacted from "effect/Redacted";
|
|
5
|
+
import { REDIS_URL_ENV, RedisUrlMissing } from "./Redis.js";
|
|
6
|
+
/**
|
|
7
|
+
* Shared scaffolding for Upstash Redis bindings.
|
|
8
|
+
*
|
|
9
|
+
* Each `{Op}Http.ts` is a thin `Layer.effect` over {@link makeRedisBinding}.
|
|
10
|
+
* Deploy-time registers the Redis add-on on the host so Service reconcile
|
|
11
|
+
* can attach it. The URL travels as `yield* redis.url` (RuntimeContext
|
|
12
|
+
* set/get). `REDIS_URL` written as an App secret is a fallback, not the
|
|
13
|
+
* primary path.
|
|
14
|
+
*
|
|
15
|
+
* The RESP client lives in `@alchemy.run/redis`. This file only wires the
|
|
16
|
+
* Fly host binding.
|
|
17
|
+
*
|
|
18
|
+
* NOT exported from `index.ts`.
|
|
19
|
+
*/
|
|
20
|
+
const isFlyHost = (value) => typeof value === "object" &&
|
|
21
|
+
value !== null &&
|
|
22
|
+
(value.Type === "Fly.Service" ||
|
|
23
|
+
value.Type === "Fly.Machine");
|
|
24
|
+
const asPlain = (value) => {
|
|
25
|
+
if (typeof value === "string" && value.length > 0)
|
|
26
|
+
return value;
|
|
27
|
+
if (Redacted.isRedacted(value))
|
|
28
|
+
return value.pipe(Redacted.value, asPlain);
|
|
29
|
+
return undefined;
|
|
30
|
+
};
|
|
31
|
+
const redisUrlFromEnv = Config.Redacted(REDIS_URL_ENV).pipe(Effect.map((value) => Redacted.value(value)));
|
|
32
|
+
export const makeRedisBinding = (options) => Effect.succeed(Effect.fn(function* (redis) {
|
|
33
|
+
if (!globalThis.__ALCHEMY_RUNTIME__) {
|
|
34
|
+
const host = yield* Binding.Host;
|
|
35
|
+
if (isFlyHost(host)) {
|
|
36
|
+
yield* host.bind `${redis}`({
|
|
37
|
+
redis: { name: redis.name, id: redis.redisId },
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const urlFromResource = yield* redis.url;
|
|
42
|
+
const missing = new RedisUrlMissing({
|
|
43
|
+
name: asPlain(redis.name) ?? redis.LogicalId,
|
|
44
|
+
});
|
|
45
|
+
const url = Effect.gen(function* () {
|
|
46
|
+
const fromOutput = asPlain(yield* urlFromResource);
|
|
47
|
+
if (fromOutput !== undefined)
|
|
48
|
+
return fromOutput;
|
|
49
|
+
return yield* redisUrlFromEnv.pipe(Effect.mapError(() => missing));
|
|
50
|
+
});
|
|
51
|
+
return options.makeClient(url);
|
|
52
|
+
}));
|
|
53
|
+
//# sourceMappingURL=RedisBinding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisBinding.js","sourceRoot":"","sources":["../src/RedisBinding.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAC;AAE3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,eAAe,EAAc,MAAM,YAAY,CAAC;AAExE;;;;;;;;;;;;;GAaG;AAEH,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,OAAO,GAAG,CAAC,KAAc,EAAsB,EAAE;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAChE,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3E,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,IAAI,CACzD,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAC7C,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAS,OAA6C,EAAE,EAAE,CACxF,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAY;IAC/B,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,KAAK,EAAE,CAAC;gBACzB,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE;aAC/C,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;QAClC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS;KAC7C,CAAC,CAAC;IACH,MAAM,GAAG,GAAQ,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnC,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;QACnD,IAAI,UAAU,KAAK,SAAS;YAAE,OAAO,UAAU,CAAC;QAChD,OAAO,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC,CAAC,CACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Redis command-client builders. NOT exported from `index.ts`.
|
|
3
|
+
*
|
|
4
|
+
* The RESP client lives in `@alchemy.run/redis`. These aliases keep the
|
|
5
|
+
* `{Op}Http.ts` layers stable.
|
|
6
|
+
*/
|
|
7
|
+
export { makeRead as makeReadRedisClient, makeReadWrite as makeReadWriteRedisClient, makeWrite as makeWriteRedisClient, } from "@alchemy.run/redis";
|
|
8
|
+
//# sourceMappingURL=RedisHttp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisHttp.d.ts","sourceRoot":"","sources":["../src/RedisHttp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,QAAQ,IAAI,mBAAmB,EAC/B,aAAa,IAAI,wBAAwB,EACzC,SAAS,IAAI,oBAAoB,GAClC,MAAM,oBAAoB,CAAC"}
|
package/lib/RedisHttp.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Redis command-client builders. NOT exported from `index.ts`.
|
|
3
|
+
*
|
|
4
|
+
* The RESP client lives in `@alchemy.run/redis`. These aliases keep the
|
|
5
|
+
* `{Op}Http.ts` layers stable.
|
|
6
|
+
*/
|
|
7
|
+
export { makeRead as makeReadRedisClient, makeReadWrite as makeReadWriteRedisClient, makeWrite as makeWriteRedisClient, } from "@alchemy.run/redis";
|
|
8
|
+
//# sourceMappingURL=RedisHttp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisHttp.js","sourceRoot":"","sources":["../src/RedisHttp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,QAAQ,IAAI,mBAAmB,EAC/B,aAAa,IAAI,wBAAwB,EACzC,SAAS,IAAI,oBAAoB,GAClC,MAAM,oBAAoB,CAAC"}
|
package/lib/Region.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A Fly.io region code. The literal codes are the regions Fly listed in
|
|
3
|
+
* September 2026 and give editor completion; any other string is accepted
|
|
4
|
+
* so new regions work without an Alchemy release. `bom` is deprecated by
|
|
5
|
+
* Fly. See [Regions](/fly/compute/regions).
|
|
6
|
+
*/
|
|
7
|
+
export type Region = "ams" | "arn" | "bom" | "cdg" | "dfw" | "ewr" | "fra" | "gru" | "iad" | "jnb" | "lax" | "lhr" | "nrt" | "ord" | "sin" | "sjc" | "syd" | "yyz" | (string & {});
|
|
8
|
+
/** Normalize a `Region | Region[]` prop into a de-duplicated list. */
|
|
9
|
+
export declare const regionList: (region: Region | readonly Region[] | undefined, fallback: string) => string[];
|
|
10
|
+
/**
|
|
11
|
+
* Region of replica `index` when `count` replicas run in each of
|
|
12
|
+
* `regions`. Replicas are spread round-robin, so growing `count` keeps
|
|
13
|
+
* every existing replica in its region.
|
|
14
|
+
*/
|
|
15
|
+
export declare const regionOfReplica: (regions: readonly string[], index: number) => string;
|
|
16
|
+
//# sourceMappingURL=Region.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Region.d.ts","sourceRoot":"","sources":["../src/Region.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GACd,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,sEAAsE;AACtE,eAAO,MAAM,UAAU,WACb,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,YACpC,MAAM,KACf,MAAM,EAIR,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,YAAa,SAAS,MAAM,EAAE,SAAS,MAAM,WACvC,CAAC"}
|
package/lib/Region.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Normalize a `Region | Region[]` prop into a de-duplicated list. */
|
|
2
|
+
export const regionList = (region, fallback) => {
|
|
3
|
+
const list = region === undefined ? [fallback] : [region].flat();
|
|
4
|
+
const unique = [...new Set(list)];
|
|
5
|
+
return unique.length === 0 ? [fallback] : unique;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Region of replica `index` when `count` replicas run in each of
|
|
9
|
+
* `regions`. Replicas are spread round-robin, so growing `count` keeps
|
|
10
|
+
* every existing replica in its region.
|
|
11
|
+
*/
|
|
12
|
+
export const regionOfReplica = (regions, index) => regions[index % regions.length];
|
|
13
|
+
//# sourceMappingURL=Region.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Region.js","sourceRoot":"","sources":["../src/Region.ts"],"names":[],"mappings":"AA2BA,sEAAsE;AACtE,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,MAA8C,EAC9C,QAAgB,EACN,EAAE;IACZ,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACjE,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAClC,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACnD,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAA0B,EAAE,KAAa,EAAE,EAAE,CAC3E,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAE,CAAC"}
|
package/lib/Secret.d.ts
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import * as machines from "@distilled.cloud/fly-io/machines";
|
|
2
|
+
import * as Provider from "alchemy/Provider";
|
|
3
|
+
import { Resource } from "alchemy/Resource";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Redacted from "effect/Redacted";
|
|
6
|
+
import { App } from "./App.ts";
|
|
7
|
+
import type { Providers } from "./Providers.ts";
|
|
8
|
+
/**
|
|
9
|
+
* A resource-valued prop: the resource itself, or an Effect that produces
|
|
10
|
+
* it (so `yield* App(...)` and `App(...)` both type-check).
|
|
11
|
+
*/
|
|
12
|
+
type Ref<T> = T | Effect.Effect<T, never, Providers>;
|
|
13
|
+
export interface SecretProps {
|
|
14
|
+
/**
|
|
15
|
+
* Parent Fly App. Changing it replaces the secret.
|
|
16
|
+
*/
|
|
17
|
+
app: Ref<App>;
|
|
18
|
+
/**
|
|
19
|
+
* Secret name. Used as the Machine env-var name when set by the user
|
|
20
|
+
* (case-sensitive, stored as-is). If omitted, a unique name is generated
|
|
21
|
+
* from the stack, stage and logical ID (the ownership stamp). Changing
|
|
22
|
+
* it replaces the secret.
|
|
23
|
+
*/
|
|
24
|
+
name?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Secret value. Wrap with `Redacted.make(...)` so it is never logged.
|
|
27
|
+
* Updated in place via `updateSecrets`. Never persisted in attributes.
|
|
28
|
+
*/
|
|
29
|
+
value: Redacted.Redacted<string> | string;
|
|
30
|
+
}
|
|
31
|
+
export type Secret = Resource<"Fly.Secret", SecretProps, {
|
|
32
|
+
/** Parent Fly App name. */
|
|
33
|
+
appName: string;
|
|
34
|
+
/** Secret name (unique per App). */
|
|
35
|
+
name: string;
|
|
36
|
+
/** Fly digest of the current value. Not the plaintext. */
|
|
37
|
+
digest: string | undefined;
|
|
38
|
+
/** RFC3339 creation timestamp. */
|
|
39
|
+
createdAt: string | undefined;
|
|
40
|
+
/** RFC3339 last-update timestamp. */
|
|
41
|
+
updatedAt: string | undefined;
|
|
42
|
+
}, never, Providers>;
|
|
43
|
+
declare const SecretResource: import("alchemy/Resource").ResourceClass<Secret>;
|
|
44
|
+
/**
|
|
45
|
+
* A Fly.Secret is an App vault entry. Fly injects it as an environment
|
|
46
|
+
* variable on every Machine. Use it when the value is shared and
|
|
47
|
+
* managed in one place by Fly.
|
|
48
|
+
*
|
|
49
|
+
* For a secret only this {@link Service} reads from `.env` at deploy
|
|
50
|
+
* time, yield `Config.Redacted` instead. Do not pass `env: { ... }` on
|
|
51
|
+
* a Service.
|
|
52
|
+
*
|
|
53
|
+
* @see https://fly.io/docs/apps/secrets/
|
|
54
|
+
*
|
|
55
|
+
* ### Config.Redacted on a Service
|
|
56
|
+
* Most secrets in a Service come from your `.env`. Yield
|
|
57
|
+
* `Config.Redacted` in init. Alchemy binds the value onto the Machine.
|
|
58
|
+
*
|
|
59
|
+
* **Example:** Bind from .env
|
|
60
|
+
* ```typescript
|
|
61
|
+
* import * as Config from "effect/Config";
|
|
62
|
+
* import * as Redacted from "effect/Redacted";
|
|
63
|
+
*
|
|
64
|
+
* export default class Api extends Fly.Service<Api>()(
|
|
65
|
+
* "Api",
|
|
66
|
+
* { app: Site, main: import.meta.url, port: 3000 },
|
|
67
|
+
* Effect.gen(function* () {
|
|
68
|
+
* const apiKey = yield* Config.Redacted("API_KEY");
|
|
69
|
+
*
|
|
70
|
+
* return {
|
|
71
|
+
* fetch: Effect.gen(function* () {
|
|
72
|
+
* const token = Redacted.value(apiKey);
|
|
73
|
+
* return HttpServerResponse.text("ok");
|
|
74
|
+
* }),
|
|
75
|
+
* };
|
|
76
|
+
* }),
|
|
77
|
+
* ) {}
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* ### Create a Secret
|
|
81
|
+
* Wrap the value with `Redacted.make` so it is never logged. The
|
|
82
|
+
* plaintext is never stored in attributes. Omit `name` and Alchemy
|
|
83
|
+
* generates an ownership-stamped name.
|
|
84
|
+
*
|
|
85
|
+
* **Example:** Generated name
|
|
86
|
+
* ```typescript
|
|
87
|
+
* const dbUrl = yield* Fly.Secret("DatabaseUrl", {
|
|
88
|
+
* app: Site,
|
|
89
|
+
* value: Redacted.make("postgres://…"),
|
|
90
|
+
* });
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* :::caution[Changing `app` replaces the Secret]
|
|
94
|
+
* The value is created on the new App. The old name is deleted.
|
|
95
|
+
* :::
|
|
96
|
+
*
|
|
97
|
+
* ### Env-var name
|
|
98
|
+
* `name` is the env-var Machines see. It is stored as-is
|
|
99
|
+
* (case-sensitive).
|
|
100
|
+
*
|
|
101
|
+
* **Example:** Explicit name
|
|
102
|
+
* ```typescript
|
|
103
|
+
* export const ApiToken = Fly.Secret("ApiToken", {
|
|
104
|
+
* app: Site,
|
|
105
|
+
* name: "API_TOKEN",
|
|
106
|
+
* value: Redacted.make("sk_live_…"),
|
|
107
|
+
* });
|
|
108
|
+
* ```
|
|
109
|
+
*
|
|
110
|
+
* :::caution[Changing `name` replaces the Secret]
|
|
111
|
+
* Fly cannot rename a secret. Alchemy creates the new name, then
|
|
112
|
+
* deletes the old one.
|
|
113
|
+
* :::
|
|
114
|
+
*
|
|
115
|
+
* ### Rotate the value
|
|
116
|
+
* Updating `value` is in place via `updateSecrets`.
|
|
117
|
+
*
|
|
118
|
+
* **Example:** New value
|
|
119
|
+
* ```typescript
|
|
120
|
+
* export const ApiToken = Fly.Secret("ApiToken", {
|
|
121
|
+
* app: Site,
|
|
122
|
+
* name: "API_TOKEN",
|
|
123
|
+
* value: Redacted.make("sk_live_rotated"),
|
|
124
|
+
* });
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* ### Get a secret at runtime
|
|
128
|
+
* {@link GetSecret} is bound to one Secret. Provide
|
|
129
|
+
* {@link GetSecretHttp}. Fly only returns plaintext from a Machine in
|
|
130
|
+
* the same App. From a deploy-time Action you get metadata (name,
|
|
131
|
+
* digest, timestamps).
|
|
132
|
+
*
|
|
133
|
+
* **Example:** GetSecret
|
|
134
|
+
* ```typescript
|
|
135
|
+
* const get = yield* Fly.GetSecret(ApiToken);
|
|
136
|
+
* const got = yield* get();
|
|
137
|
+
* ```
|
|
138
|
+
*
|
|
139
|
+
* ### List secrets
|
|
140
|
+
* {@link ListSecrets} is bound to an {@link App}. From an Action, the
|
|
141
|
+
* org token can list any App in the org. From a Machine, deploy tokens
|
|
142
|
+
* are per-App. Mixing Apps on one Machine shares one `FLY_API_TOKEN`
|
|
143
|
+
* and is not supported.
|
|
144
|
+
*
|
|
145
|
+
* **Example:** ListSecrets
|
|
146
|
+
* ```typescript
|
|
147
|
+
* const list = yield* Fly.ListSecrets(Site);
|
|
148
|
+
* const { secrets } = yield* list();
|
|
149
|
+
* ```
|
|
150
|
+
*
|
|
151
|
+
* ### Write secrets
|
|
152
|
+
* {@link WriteSecret} creates, updates, and deletes by name. Provide
|
|
153
|
+
* {@link WriteSecretHttp} on the Action or Service Effect.
|
|
154
|
+
*
|
|
155
|
+
* **Example:** Rotate from an Action
|
|
156
|
+
* ```typescript
|
|
157
|
+
* const Seed = Alchemy.Action(
|
|
158
|
+
* "Seed",
|
|
159
|
+
* Effect.gen(function* () {
|
|
160
|
+
* const secrets = yield* Fly.WriteSecret(ApiToken);
|
|
161
|
+
*
|
|
162
|
+
* return Effect.fn(function* () {
|
|
163
|
+
* yield* secrets.update("API_TOKEN", Redacted.make("sk_live_rotated"));
|
|
164
|
+
* });
|
|
165
|
+
* }).pipe(Effect.provide(Fly.WriteSecretHttp)),
|
|
166
|
+
* );
|
|
167
|
+
* ```
|
|
168
|
+
*
|
|
169
|
+
* @resource
|
|
170
|
+
* @product Secret
|
|
171
|
+
*/
|
|
172
|
+
export declare const Secret: typeof SecretResource;
|
|
173
|
+
declare const SecretNotCreated_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 & {
|
|
174
|
+
readonly _tag: "Fly.SecretNotCreated";
|
|
175
|
+
} & Readonly<A>;
|
|
176
|
+
export declare class SecretNotCreated extends SecretNotCreated_base<{
|
|
177
|
+
appName: string;
|
|
178
|
+
name: string;
|
|
179
|
+
}> {
|
|
180
|
+
}
|
|
181
|
+
declare const SecretAppRequired_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 & {
|
|
182
|
+
readonly _tag: "Fly.SecretAppRequired";
|
|
183
|
+
} & Readonly<A>;
|
|
184
|
+
export declare class SecretAppRequired extends SecretAppRequired_base<{
|
|
185
|
+
message: string;
|
|
186
|
+
}> {
|
|
187
|
+
}
|
|
188
|
+
export declare const SecretProvider: () => import("effect/Layer").Layer<Provider.Provider<Secret>, never, import("alchemy/Stack").Stack | import("alchemy/Stage").Stage | machines.FlyIoOpContext>;
|
|
189
|
+
export {};
|
|
190
|
+
//# sourceMappingURL=Secret.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secret.d.ts","sourceRoot":"","sources":["../src/Secret.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,QAAQ,MAAM,kCAAkC,CAAC;AAG7D,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,GAAG,EAAiB,MAAM,UAAU,CAAC;AAE9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAErD,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACd;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;CAC3C;AAED,MAAM,MAAM,MAAM,GAAG,QAAQ,CAC3B,YAAY,EACZ,WAAW,EACX;IACE,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,kCAAkC;IAClC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,qCAAqC;IACrC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;CAC/B,EACD,KAAK,EACL,SAAS,CACV,CAAC;AAcF,QAAA,MAAM,cAAc,kDAAiC,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+HG;AACH,eAAO,MAAM,MAAM,EAAE,OAAO,cAI3B,CAAC;;;;AAEF,qBAAa,gBAAiB,SAAQ,sBAAyC;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;CAAG;;;;AAEL,qBAAa,iBAAkB,SAAQ,uBAA0C;IAC/E,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;CAAG;AA6DL,eAAO,MAAM,cAAc,+JAiIvB,CAAC"}
|
package/lib/Secret.js
ADDED
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import * as machines from "@distilled.cloud/fly-io/machines";
|
|
3
|
+
import { Unowned } from "alchemy/AdoptPolicy";
|
|
4
|
+
import { isResolved } from "alchemy/Diff";
|
|
5
|
+
import * as Provider from "alchemy/Provider";
|
|
6
|
+
import { Resource } from "alchemy/Resource";
|
|
7
|
+
import * as Data from "effect/Data";
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import * as Redacted from "effect/Redacted";
|
|
10
|
+
import * as Schedule from "effect/Schedule";
|
|
11
|
+
import { App, listOwnedApps } from "./App.js";
|
|
12
|
+
import { createFlyVolumeName, matchesAlchemyPhysicalName } from "./Metadata.js";
|
|
13
|
+
const resolveSecretProps = (props) => Effect.gen(function* () {
|
|
14
|
+
const resolved = Effect.isEffect(props) ? yield* props : props;
|
|
15
|
+
if (globalThis.__ALCHEMY_RUNTIME__)
|
|
16
|
+
return resolved;
|
|
17
|
+
const app = Effect.isEffect(resolved.app)
|
|
18
|
+
? yield* resolved.app
|
|
19
|
+
: resolved.app;
|
|
20
|
+
return { ...resolved, app };
|
|
21
|
+
});
|
|
22
|
+
const SecretResource = Resource("Fly.Secret");
|
|
23
|
+
/**
|
|
24
|
+
* A Fly.Secret is an App vault entry. Fly injects it as an environment
|
|
25
|
+
* variable on every Machine. Use it when the value is shared and
|
|
26
|
+
* managed in one place by Fly.
|
|
27
|
+
*
|
|
28
|
+
* For a secret only this {@link Service} reads from `.env` at deploy
|
|
29
|
+
* time, yield `Config.Redacted` instead. Do not pass `env: { ... }` on
|
|
30
|
+
* a Service.
|
|
31
|
+
*
|
|
32
|
+
* @see https://fly.io/docs/apps/secrets/
|
|
33
|
+
*
|
|
34
|
+
* ### Config.Redacted on a Service
|
|
35
|
+
* Most secrets in a Service come from your `.env`. Yield
|
|
36
|
+
* `Config.Redacted` in init. Alchemy binds the value onto the Machine.
|
|
37
|
+
*
|
|
38
|
+
* **Example:** Bind from .env
|
|
39
|
+
* ```typescript
|
|
40
|
+
* import * as Config from "effect/Config";
|
|
41
|
+
* import * as Redacted from "effect/Redacted";
|
|
42
|
+
*
|
|
43
|
+
* export default class Api extends Fly.Service<Api>()(
|
|
44
|
+
* "Api",
|
|
45
|
+
* { app: Site, main: import.meta.url, port: 3000 },
|
|
46
|
+
* Effect.gen(function* () {
|
|
47
|
+
* const apiKey = yield* Config.Redacted("API_KEY");
|
|
48
|
+
*
|
|
49
|
+
* return {
|
|
50
|
+
* fetch: Effect.gen(function* () {
|
|
51
|
+
* const token = Redacted.value(apiKey);
|
|
52
|
+
* return HttpServerResponse.text("ok");
|
|
53
|
+
* }),
|
|
54
|
+
* };
|
|
55
|
+
* }),
|
|
56
|
+
* ) {}
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* ### Create a Secret
|
|
60
|
+
* Wrap the value with `Redacted.make` so it is never logged. The
|
|
61
|
+
* plaintext is never stored in attributes. Omit `name` and Alchemy
|
|
62
|
+
* generates an ownership-stamped name.
|
|
63
|
+
*
|
|
64
|
+
* **Example:** Generated name
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const dbUrl = yield* Fly.Secret("DatabaseUrl", {
|
|
67
|
+
* app: Site,
|
|
68
|
+
* value: Redacted.make("postgres://…"),
|
|
69
|
+
* });
|
|
70
|
+
* ```
|
|
71
|
+
*
|
|
72
|
+
* :::caution[Changing `app` replaces the Secret]
|
|
73
|
+
* The value is created on the new App. The old name is deleted.
|
|
74
|
+
* :::
|
|
75
|
+
*
|
|
76
|
+
* ### Env-var name
|
|
77
|
+
* `name` is the env-var Machines see. It is stored as-is
|
|
78
|
+
* (case-sensitive).
|
|
79
|
+
*
|
|
80
|
+
* **Example:** Explicit name
|
|
81
|
+
* ```typescript
|
|
82
|
+
* export const ApiToken = Fly.Secret("ApiToken", {
|
|
83
|
+
* app: Site,
|
|
84
|
+
* name: "API_TOKEN",
|
|
85
|
+
* value: Redacted.make("sk_live_…"),
|
|
86
|
+
* });
|
|
87
|
+
* ```
|
|
88
|
+
*
|
|
89
|
+
* :::caution[Changing `name` replaces the Secret]
|
|
90
|
+
* Fly cannot rename a secret. Alchemy creates the new name, then
|
|
91
|
+
* deletes the old one.
|
|
92
|
+
* :::
|
|
93
|
+
*
|
|
94
|
+
* ### Rotate the value
|
|
95
|
+
* Updating `value` is in place via `updateSecrets`.
|
|
96
|
+
*
|
|
97
|
+
* **Example:** New value
|
|
98
|
+
* ```typescript
|
|
99
|
+
* export const ApiToken = Fly.Secret("ApiToken", {
|
|
100
|
+
* app: Site,
|
|
101
|
+
* name: "API_TOKEN",
|
|
102
|
+
* value: Redacted.make("sk_live_rotated"),
|
|
103
|
+
* });
|
|
104
|
+
* ```
|
|
105
|
+
*
|
|
106
|
+
* ### Get a secret at runtime
|
|
107
|
+
* {@link GetSecret} is bound to one Secret. Provide
|
|
108
|
+
* {@link GetSecretHttp}. Fly only returns plaintext from a Machine in
|
|
109
|
+
* the same App. From a deploy-time Action you get metadata (name,
|
|
110
|
+
* digest, timestamps).
|
|
111
|
+
*
|
|
112
|
+
* **Example:** GetSecret
|
|
113
|
+
* ```typescript
|
|
114
|
+
* const get = yield* Fly.GetSecret(ApiToken);
|
|
115
|
+
* const got = yield* get();
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* ### List secrets
|
|
119
|
+
* {@link ListSecrets} is bound to an {@link App}. From an Action, the
|
|
120
|
+
* org token can list any App in the org. From a Machine, deploy tokens
|
|
121
|
+
* are per-App. Mixing Apps on one Machine shares one `FLY_API_TOKEN`
|
|
122
|
+
* and is not supported.
|
|
123
|
+
*
|
|
124
|
+
* **Example:** ListSecrets
|
|
125
|
+
* ```typescript
|
|
126
|
+
* const list = yield* Fly.ListSecrets(Site);
|
|
127
|
+
* const { secrets } = yield* list();
|
|
128
|
+
* ```
|
|
129
|
+
*
|
|
130
|
+
* ### Write secrets
|
|
131
|
+
* {@link WriteSecret} creates, updates, and deletes by name. Provide
|
|
132
|
+
* {@link WriteSecretHttp} on the Action or Service Effect.
|
|
133
|
+
*
|
|
134
|
+
* **Example:** Rotate from an Action
|
|
135
|
+
* ```typescript
|
|
136
|
+
* const Seed = Alchemy.Action(
|
|
137
|
+
* "Seed",
|
|
138
|
+
* Effect.gen(function* () {
|
|
139
|
+
* const secrets = yield* Fly.WriteSecret(ApiToken);
|
|
140
|
+
*
|
|
141
|
+
* return Effect.fn(function* () {
|
|
142
|
+
* yield* secrets.update("API_TOKEN", Redacted.make("sk_live_rotated"));
|
|
143
|
+
* });
|
|
144
|
+
* }).pipe(Effect.provide(Fly.WriteSecretHttp)),
|
|
145
|
+
* );
|
|
146
|
+
* ```
|
|
147
|
+
*
|
|
148
|
+
* @resource
|
|
149
|
+
* @product Secret
|
|
150
|
+
*/
|
|
151
|
+
export const Secret = Object.assign((id, props) => SecretResource(id, resolveSecretProps(props)), SecretResource);
|
|
152
|
+
export class SecretNotCreated extends Data.TaggedError("Fly.SecretNotCreated") {
|
|
153
|
+
}
|
|
154
|
+
export class SecretAppRequired extends Data.TaggedError("Fly.SecretAppRequired") {
|
|
155
|
+
}
|
|
156
|
+
const appNameOf = (value) => {
|
|
157
|
+
if (value === null || typeof value !== "object")
|
|
158
|
+
return undefined;
|
|
159
|
+
const rec = value;
|
|
160
|
+
return typeof rec.appName === "string" && rec.appName.length > 0 ? rec.appName : undefined;
|
|
161
|
+
};
|
|
162
|
+
const unwrapSecret = (value) => Redacted.isRedacted(value) ? Redacted.value(value) : value;
|
|
163
|
+
const resolveName = (id, name, existing) => Effect.gen(function* () {
|
|
164
|
+
// User env-var names are stored as-is (case-sensitive). Generated
|
|
165
|
+
// names use the Volume underscore shape — Fly rejects hyphens.
|
|
166
|
+
if (name !== undefined)
|
|
167
|
+
return name;
|
|
168
|
+
if (existing !== undefined)
|
|
169
|
+
return existing;
|
|
170
|
+
return yield* createFlyVolumeName(id);
|
|
171
|
+
});
|
|
172
|
+
const toAttrs = (appName, secret, fallbackName) => ({
|
|
173
|
+
appName,
|
|
174
|
+
name: secret.name ?? fallbackName,
|
|
175
|
+
digest: secret.digest,
|
|
176
|
+
createdAt: secret.created_at,
|
|
177
|
+
updatedAt: secret.updated_at,
|
|
178
|
+
});
|
|
179
|
+
const getByName = (appName, secretName) => machines
|
|
180
|
+
.getSecret({
|
|
181
|
+
app_name: appName,
|
|
182
|
+
secret_name: secretName,
|
|
183
|
+
show_secrets: false,
|
|
184
|
+
})
|
|
185
|
+
.pipe(Effect.catchTag("NotFound", () => Effect.succeed(undefined)));
|
|
186
|
+
const listSecrets = (appName) => machines
|
|
187
|
+
.listSecrets({
|
|
188
|
+
app_name: appName,
|
|
189
|
+
show_secrets: false,
|
|
190
|
+
})
|
|
191
|
+
.pipe(Effect.map((res) => res.secrets ?? []), Effect.catchTag(["NotFound", "Forbidden"], () => Effect.succeed([])));
|
|
192
|
+
const flyDigestCandidates = (plain) => Effect.sync(() => {
|
|
193
|
+
const utf8 = Buffer.from(plain, "utf8");
|
|
194
|
+
return [
|
|
195
|
+
createHash("md5").update(utf8).digest("hex"),
|
|
196
|
+
createHash("sha256").update(utf8).digest("hex"),
|
|
197
|
+
];
|
|
198
|
+
});
|
|
199
|
+
export const SecretProvider = () => Provider.succeed(Secret, {
|
|
200
|
+
stables: ["appName", "name", "createdAt"],
|
|
201
|
+
nuke: { dependsOn: ["Fly.App"] },
|
|
202
|
+
diff: Effect.fn(function* ({ news, output }) {
|
|
203
|
+
if (news === undefined || !isResolved(news))
|
|
204
|
+
return undefined;
|
|
205
|
+
if (output === undefined)
|
|
206
|
+
return undefined;
|
|
207
|
+
const desiredName = news.name !== undefined ? news.name : output.name;
|
|
208
|
+
const nameChanged = desiredName !== output.name;
|
|
209
|
+
const nextApp = appNameOf(news.app);
|
|
210
|
+
const appChanged = nextApp !== undefined && nextApp !== output.appName;
|
|
211
|
+
if (nameChanged || appChanged) {
|
|
212
|
+
return {
|
|
213
|
+
action: "replace",
|
|
214
|
+
// Same (app, name) cannot exist twice — delete the old secret first.
|
|
215
|
+
deleteFirst: nameChanged && !appChanged,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return undefined;
|
|
219
|
+
}),
|
|
220
|
+
read: Effect.fn(function* ({ id, olds, output }) {
|
|
221
|
+
const appName = output?.appName ?? (olds !== undefined ? appNameOf(olds.app) : undefined);
|
|
222
|
+
if (appName === undefined)
|
|
223
|
+
return undefined;
|
|
224
|
+
const name = yield* resolveName(id, olds?.name, output?.name);
|
|
225
|
+
const found = yield* getByName(appName, name);
|
|
226
|
+
if (found === undefined)
|
|
227
|
+
return undefined;
|
|
228
|
+
const attrs = toAttrs(appName, found, name);
|
|
229
|
+
if (output !== undefined)
|
|
230
|
+
return attrs;
|
|
231
|
+
return matchesAlchemyPhysicalName(name) ? attrs : Unowned(attrs);
|
|
232
|
+
}),
|
|
233
|
+
list: Effect.fn(function* () {
|
|
234
|
+
const apps = yield* listOwnedApps();
|
|
235
|
+
const rows = yield* Effect.forEach(apps, (app) => listSecrets(app.appName).pipe(Effect.map((secrets) => secrets.flatMap((secret) => {
|
|
236
|
+
const name = secret.name;
|
|
237
|
+
if (!matchesAlchemyPhysicalName(name))
|
|
238
|
+
return [];
|
|
239
|
+
return [toAttrs(app.appName, secret, name ?? "")];
|
|
240
|
+
}))), { concurrency: 8 });
|
|
241
|
+
return rows.flat();
|
|
242
|
+
}),
|
|
243
|
+
reconcile: Effect.fn(function* ({ id, news, olds, output }) {
|
|
244
|
+
const props = news ?? {};
|
|
245
|
+
const appName = appNameOf(props.app) ?? output?.appName;
|
|
246
|
+
if (appName === undefined) {
|
|
247
|
+
return yield* new SecretAppRequired({
|
|
248
|
+
message: "Secret requires a resolved Fly.App",
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
const name = yield* resolveName(id, props.name, output?.name);
|
|
252
|
+
const desiredPlain = unwrapSecret(props.value);
|
|
253
|
+
// Observe by cached identity, then the desired (app, name).
|
|
254
|
+
let current = output !== undefined ? yield* getByName(output.appName, output.name) : undefined;
|
|
255
|
+
if (current === undefined &&
|
|
256
|
+
(output === undefined || output.appName !== appName || output.name !== name)) {
|
|
257
|
+
current = yield* getByName(appName, name);
|
|
258
|
+
}
|
|
259
|
+
let createdThisRun = false;
|
|
260
|
+
if (current === undefined) {
|
|
261
|
+
yield* machines
|
|
262
|
+
.createSecret({
|
|
263
|
+
app_name: appName,
|
|
264
|
+
secret_name: name,
|
|
265
|
+
value: desiredPlain,
|
|
266
|
+
})
|
|
267
|
+
.pipe(Effect.catchTag("Conflict", () => Effect.void));
|
|
268
|
+
current = yield* getByName(appName, name);
|
|
269
|
+
createdThisRun = true;
|
|
270
|
+
}
|
|
271
|
+
if (current === undefined) {
|
|
272
|
+
return yield* new SecretNotCreated({ appName, name });
|
|
273
|
+
}
|
|
274
|
+
// Sync — skip if we just created. Prefer observed digest vs hash of
|
|
275
|
+
// desired; otherwise re-put when olds is absent (adoption) or the
|
|
276
|
+
// previous value differs. Never log the plaintext.
|
|
277
|
+
if (!createdThisRun) {
|
|
278
|
+
const candidates = yield* flyDigestCandidates(desiredPlain);
|
|
279
|
+
const digestMatches = current.digest !== undefined && candidates.includes(current.digest);
|
|
280
|
+
const previousPlain = olds?.value !== undefined ? unwrapSecret(olds.value) : undefined;
|
|
281
|
+
const valueChanged = previousPlain === undefined || previousPlain !== desiredPlain;
|
|
282
|
+
if (!digestMatches && valueChanged) {
|
|
283
|
+
yield* machines
|
|
284
|
+
.updateSecrets({
|
|
285
|
+
app_name: appName,
|
|
286
|
+
values: { [name]: desiredPlain },
|
|
287
|
+
})
|
|
288
|
+
.pipe(Effect.catchTag("Conflict", () => Effect.void));
|
|
289
|
+
current = (yield* getByName(appName, name)) ?? current;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return toAttrs(appName, current, name);
|
|
293
|
+
}),
|
|
294
|
+
delete: Effect.fn(function* ({ output }) {
|
|
295
|
+
if (output.appName.length === 0 || output.name.length === 0)
|
|
296
|
+
return;
|
|
297
|
+
yield* machines
|
|
298
|
+
.deleteSecret({
|
|
299
|
+
app_name: output.appName,
|
|
300
|
+
secret_name: output.name,
|
|
301
|
+
})
|
|
302
|
+
.pipe(Effect.catchTag("NotFound", () => Effect.void));
|
|
303
|
+
yield* getByName(output.appName, output.name).pipe(Effect.map((secret) => secret === undefined), Effect.repeat({
|
|
304
|
+
schedule: Schedule.spaced("1 second"),
|
|
305
|
+
until: (gone) => gone,
|
|
306
|
+
times: 8,
|
|
307
|
+
}));
|
|
308
|
+
}),
|
|
309
|
+
});
|
|
310
|
+
//# sourceMappingURL=Secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Secret.js","sourceRoot":"","sources":["../src/Secret.ts"],"names":[],"mappings":"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"}
|