alchemy 2.0.0-beta.60 → 2.0.0-beta.61
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/bin/cli.js +9 -1
- package/bin/exec.js +15 -5
- package/bin/exec.js.map +1 -1
- package/lib/AWS/ACM/Certificate.d.ts.map +1 -1
- package/lib/AWS/ACM/Certificate.js +9 -2
- package/lib/AWS/ACM/Certificate.js.map +1 -1
- package/lib/AWS/AutoScaling/AutoScalingGroup.d.ts.map +1 -1
- package/lib/AWS/AutoScaling/AutoScalingGroup.js +18 -11
- package/lib/AWS/AutoScaling/AutoScalingGroup.js.map +1 -1
- package/lib/AWS/AutoScaling/LaunchTemplate.js +6 -1
- package/lib/AWS/AutoScaling/LaunchTemplate.js.map +1 -1
- package/lib/AWS/AutoScaling/ScalingPolicy.d.ts.map +1 -1
- package/lib/AWS/AutoScaling/ScalingPolicy.js +28 -10
- package/lib/AWS/AutoScaling/ScalingPolicy.js.map +1 -1
- package/lib/AWS/CloudFront/PublicKey.d.ts.map +1 -1
- package/lib/AWS/CloudFront/PublicKey.js +5 -1
- package/lib/AWS/CloudFront/PublicKey.js.map +1 -1
- package/lib/AWS/DynamoDB/Table.js +1 -1
- package/lib/AWS/DynamoDB/Table.js.map +1 -1
- package/lib/AWS/ECS/Service.d.ts.map +1 -1
- package/lib/AWS/ECS/Service.js +29 -4
- package/lib/AWS/ECS/Service.js.map +1 -1
- package/lib/AWS/IAM/OpenIDConnectProvider.d.ts.map +1 -1
- package/lib/AWS/IAM/OpenIDConnectProvider.js +9 -1
- package/lib/AWS/IAM/OpenIDConnectProvider.js.map +1 -1
- package/lib/AWS/Lambda/Alias.d.ts +26 -0
- package/lib/AWS/Lambda/Alias.d.ts.map +1 -1
- package/lib/AWS/Lambda/Alias.js +31 -0
- package/lib/AWS/Lambda/Alias.js.map +1 -1
- package/lib/AWS/Lambda/EventInvokeConfig.d.ts +36 -0
- package/lib/AWS/Lambda/EventInvokeConfig.d.ts.map +1 -0
- package/lib/AWS/Lambda/EventInvokeConfig.js +76 -0
- package/lib/AWS/Lambda/EventInvokeConfig.js.map +1 -0
- package/lib/AWS/Lambda/Function.d.ts +27 -2
- package/lib/AWS/Lambda/Function.d.ts.map +1 -1
- package/lib/AWS/Lambda/Function.js +23 -2
- package/lib/AWS/Lambda/Function.js.map +1 -1
- package/lib/AWS/Lambda/index.d.ts +1 -0
- package/lib/AWS/Lambda/index.d.ts.map +1 -1
- package/lib/AWS/Lambda/index.js +1 -0
- package/lib/AWS/Lambda/index.js.map +1 -1
- package/lib/AWS/Organizations/DelegatedAdministrator.d.ts.map +1 -1
- package/lib/AWS/Organizations/DelegatedAdministrator.js +10 -2
- package/lib/AWS/Organizations/DelegatedAdministrator.js.map +1 -1
- package/lib/AWS/Organizations/PolicyAttachment.d.ts.map +1 -1
- package/lib/AWS/Organizations/PolicyAttachment.js +10 -4
- package/lib/AWS/Organizations/PolicyAttachment.js.map +1 -1
- package/lib/AWS/Organizations/RootPolicyType.d.ts.map +1 -1
- package/lib/AWS/Organizations/RootPolicyType.js +9 -4
- package/lib/AWS/Organizations/RootPolicyType.js.map +1 -1
- package/lib/AWS/Organizations/TrustedServiceAccess.d.ts.map +1 -1
- package/lib/AWS/Organizations/TrustedServiceAccess.js +8 -1
- package/lib/AWS/Organizations/TrustedServiceAccess.js.map +1 -1
- package/lib/AWS/Route53/HostedZone.d.ts.map +1 -1
- package/lib/AWS/Route53/HostedZone.js +20 -4
- package/lib/AWS/Route53/HostedZone.js.map +1 -1
- package/lib/AWS/Route53/Record.d.ts.map +1 -1
- package/lib/AWS/Route53/Record.js +32 -9
- package/lib/AWS/Route53/Record.js.map +1 -1
- package/lib/Apply.js +7 -1
- package/lib/Apply.js.map +1 -1
- package/lib/Auth/Lock.d.ts +17 -0
- package/lib/Auth/Lock.d.ts.map +1 -1
- package/lib/Auth/Lock.js +53 -18
- package/lib/Auth/Lock.js.map +1 -1
- package/lib/Bundle/PurePlugin.d.ts.map +1 -1
- package/lib/Bundle/PurePlugin.js +15 -2
- package/lib/Bundle/PurePlugin.js.map +1 -1
- package/lib/Cli/commands/sync.d.ts +22 -0
- package/lib/Cli/commands/sync.d.ts.map +1 -0
- package/lib/Cli/commands/sync.js +64 -0
- package/lib/Cli/commands/sync.js.map +1 -0
- package/lib/Cli/main.d.ts.map +1 -1
- package/lib/Cli/main.js +2 -0
- package/lib/Cli/main.js.map +1 -1
- package/lib/Cloudflare/AI/CustomTopics.d.ts.map +1 -1
- package/lib/Cloudflare/AI/CustomTopics.js +3 -1
- package/lib/Cloudflare/AI/CustomTopics.js.map +1 -1
- package/lib/Cloudflare/AI/Dataset.d.ts.map +1 -1
- package/lib/Cloudflare/AI/Dataset.js +3 -1
- package/lib/Cloudflare/AI/Dataset.js.map +1 -1
- package/lib/Cloudflare/AI/Evaluation.d.ts.map +1 -1
- package/lib/Cloudflare/AI/Evaluation.js +3 -1
- package/lib/Cloudflare/AI/Evaluation.js.map +1 -1
- package/lib/Cloudflare/AI/Gateway.d.ts.map +1 -1
- package/lib/Cloudflare/AI/Gateway.js +5 -6
- package/lib/Cloudflare/AI/Gateway.js.map +1 -1
- package/lib/Cloudflare/AI/GatewayDynamicRouting.d.ts.map +1 -1
- package/lib/Cloudflare/AI/GatewayDynamicRouting.js +3 -1
- package/lib/Cloudflare/AI/GatewayDynamicRouting.js.map +1 -1
- package/lib/Cloudflare/AI/GatewayProvider.d.ts +2 -1
- package/lib/Cloudflare/AI/GatewayProvider.d.ts.map +1 -1
- package/lib/Cloudflare/AI/GatewayProvider.js +5 -2
- package/lib/Cloudflare/AI/GatewayProvider.js.map +1 -1
- package/lib/Cloudflare/AI/ProviderKey.d.ts +135 -0
- package/lib/Cloudflare/AI/ProviderKey.d.ts.map +1 -0
- package/lib/Cloudflare/AI/ProviderKey.js +90 -0
- package/lib/Cloudflare/AI/ProviderKey.js.map +1 -0
- package/lib/Cloudflare/AI/SearchInstance.d.ts.map +1 -1
- package/lib/Cloudflare/AI/SearchInstance.js +5 -4
- package/lib/Cloudflare/AI/SearchInstance.js.map +1 -1
- package/lib/Cloudflare/AI/SearchNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/AI/SearchNamespace.js +5 -4
- package/lib/Cloudflare/AI/SearchNamespace.js.map +1 -1
- package/lib/Cloudflare/AI/SearchToken.d.ts.map +1 -1
- package/lib/Cloudflare/AI/SearchToken.js +3 -1
- package/lib/Cloudflare/AI/SearchToken.js.map +1 -1
- package/lib/Cloudflare/AI/SecuritySettings.d.ts.map +1 -1
- package/lib/Cloudflare/AI/SecuritySettings.js +3 -1
- package/lib/Cloudflare/AI/SecuritySettings.js.map +1 -1
- package/lib/Cloudflare/AI/index.d.ts +1 -0
- package/lib/Cloudflare/AI/index.d.ts.map +1 -1
- package/lib/Cloudflare/AI/index.js +1 -0
- package/lib/Cloudflare/AI/index.js.map +1 -1
- package/lib/Cloudflare/Access/InfrastructureTarget.d.ts.map +1 -1
- package/lib/Cloudflare/Access/InfrastructureTarget.js +3 -1
- package/lib/Cloudflare/Access/InfrastructureTarget.js.map +1 -1
- package/lib/Cloudflare/Access/Organization.d.ts.map +1 -1
- package/lib/Cloudflare/Access/Organization.js +1 -1
- package/lib/Cloudflare/Access/Organization.js.map +1 -1
- package/lib/Cloudflare/Access/Policy.d.ts.map +1 -1
- package/lib/Cloudflare/Access/Policy.js +3 -1
- package/lib/Cloudflare/Access/Policy.js.map +1 -1
- package/lib/Cloudflare/Account/Account.d.ts.map +1 -1
- package/lib/Cloudflare/Account/Account.js +3 -1
- package/lib/Cloudflare/Account/Account.js.map +1 -1
- package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts.map +1 -1
- package/lib/Cloudflare/ApiToken/AccountApiToken.js +1 -1
- package/lib/Cloudflare/ApiToken/AccountApiToken.js.map +1 -1
- package/lib/Cloudflare/ApiToken/UserApiToken.d.ts.map +1 -1
- package/lib/Cloudflare/ApiToken/UserApiToken.js +1 -1
- package/lib/Cloudflare/ApiToken/UserApiToken.js.map +1 -1
- package/lib/Cloudflare/Auth/AuthProvider.d.ts +3 -0
- package/lib/Cloudflare/Auth/AuthProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Auth/AuthProvider.js +51 -14
- package/lib/Cloudflare/Auth/AuthProvider.js.map +1 -1
- package/lib/Cloudflare/BotManagement/BotManagement.d.ts.map +1 -1
- package/lib/Cloudflare/BotManagement/BotManagement.js +3 -1
- package/lib/Cloudflare/BotManagement/BotManagement.js.map +1 -1
- package/lib/Cloudflare/Cache/Reserve.d.ts.map +1 -1
- package/lib/Cloudflare/Cache/Reserve.js +3 -1
- package/lib/Cloudflare/Cache/Reserve.js.map +1 -1
- package/lib/Cloudflare/ClientCertificate/ClientCertificate.d.ts.map +1 -1
- package/lib/Cloudflare/ClientCertificate/ClientCertificate.js +3 -1
- package/lib/Cloudflare/ClientCertificate/ClientCertificate.js.map +1 -1
- package/lib/Cloudflare/Containers/Container.d.ts +2 -2
- package/lib/Cloudflare/Containers/Container.js +2 -2
- package/lib/Cloudflare/ContentScanning/ContentScanning.d.ts.map +1 -1
- package/lib/Cloudflare/ContentScanning/ContentScanning.js +3 -1
- package/lib/Cloudflare/ContentScanning/ContentScanning.js.map +1 -1
- package/lib/Cloudflare/CustomCertificate/CustomCertificate.d.ts.map +1 -1
- package/lib/Cloudflare/CustomCertificate/CustomCertificate.js +3 -1
- package/lib/Cloudflare/CustomCertificate/CustomCertificate.js.map +1 -1
- package/lib/Cloudflare/CustomHostname/CustomHostname.d.ts.map +1 -1
- package/lib/Cloudflare/CustomHostname/CustomHostname.js +1 -1
- package/lib/Cloudflare/CustomHostname/CustomHostname.js.map +1 -1
- package/lib/Cloudflare/CustomHostname/FallbackOrigin.d.ts.map +1 -1
- package/lib/Cloudflare/CustomHostname/FallbackOrigin.js +1 -1
- package/lib/Cloudflare/CustomHostname/FallbackOrigin.js.map +1 -1
- package/lib/Cloudflare/CustomNameserver/CustomNameserver.d.ts.map +1 -1
- package/lib/Cloudflare/CustomNameserver/CustomNameserver.js +3 -1
- package/lib/Cloudflare/CustomNameserver/CustomNameserver.js.map +1 -1
- package/lib/Cloudflare/D1/Database.d.ts.map +1 -1
- package/lib/Cloudflare/D1/Database.js +2 -2
- package/lib/Cloudflare/D1/Database.js.map +1 -1
- package/lib/Cloudflare/DNS/AccountSettings.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/AccountSettings.js +3 -1
- package/lib/Cloudflare/DNS/AccountSettings.js.map +1 -1
- package/lib/Cloudflare/DNS/Dnssec.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/Dnssec.js +3 -1
- package/lib/Cloudflare/DNS/Dnssec.js.map +1 -1
- package/lib/Cloudflare/DNS/Firewall.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/Firewall.js +3 -1
- package/lib/Cloudflare/DNS/Firewall.js.map +1 -1
- package/lib/Cloudflare/DNS/Record.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/Record.js +3 -1
- package/lib/Cloudflare/DNS/Record.js.map +1 -1
- package/lib/Cloudflare/DNS/View.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/View.js +3 -1
- package/lib/Cloudflare/DNS/View.js.map +1 -1
- package/lib/Cloudflare/DNS/ZoneSettings.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/ZoneSettings.js +3 -1
- package/lib/Cloudflare/DNS/ZoneSettings.js.map +1 -1
- package/lib/Cloudflare/DNS/ZoneTransferAcl.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/ZoneTransferAcl.js +3 -1
- package/lib/Cloudflare/DNS/ZoneTransferAcl.js.map +1 -1
- package/lib/Cloudflare/DNS/ZoneTransferIncoming.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/ZoneTransferIncoming.js +3 -1
- package/lib/Cloudflare/DNS/ZoneTransferIncoming.js.map +1 -1
- package/lib/Cloudflare/DNS/ZoneTransferOutgoing.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/ZoneTransferOutgoing.js +3 -1
- package/lib/Cloudflare/DNS/ZoneTransferOutgoing.js.map +1 -1
- package/lib/Cloudflare/DNS/ZoneTransferPeer.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/ZoneTransferPeer.js +3 -1
- package/lib/Cloudflare/DNS/ZoneTransferPeer.js.map +1 -1
- package/lib/Cloudflare/DNS/ZoneTransferTsig.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/ZoneTransferTsig.js +3 -1
- package/lib/Cloudflare/DNS/ZoneTransferTsig.js.map +1 -1
- package/lib/Cloudflare/Email/Address.d.ts.map +1 -1
- package/lib/Cloudflare/Email/Address.js +3 -1
- package/lib/Cloudflare/Email/Address.js.map +1 -1
- package/lib/Cloudflare/Email/AllowPolicy.d.ts.map +1 -1
- package/lib/Cloudflare/Email/AllowPolicy.js +1 -1
- package/lib/Cloudflare/Email/AllowPolicy.js.map +1 -1
- package/lib/Cloudflare/Email/BlockSender.d.ts.map +1 -1
- package/lib/Cloudflare/Email/BlockSender.js +1 -1
- package/lib/Cloudflare/Email/BlockSender.js.map +1 -1
- package/lib/Cloudflare/Email/CatchAll.d.ts.map +1 -1
- package/lib/Cloudflare/Email/CatchAll.js +8 -2
- package/lib/Cloudflare/Email/CatchAll.js.map +1 -1
- package/lib/Cloudflare/Email/Domain.d.ts.map +1 -1
- package/lib/Cloudflare/Email/Domain.js +3 -1
- package/lib/Cloudflare/Email/Domain.js.map +1 -1
- package/lib/Cloudflare/Email/ImpersonationRegistryEntry.d.ts.map +1 -1
- package/lib/Cloudflare/Email/ImpersonationRegistryEntry.js +1 -1
- package/lib/Cloudflare/Email/ImpersonationRegistryEntry.js.map +1 -1
- package/lib/Cloudflare/Email/Routing.d.ts.map +1 -1
- package/lib/Cloudflare/Email/Routing.js +3 -1
- package/lib/Cloudflare/Email/Routing.js.map +1 -1
- package/lib/Cloudflare/Email/Rule.d.ts.map +1 -1
- package/lib/Cloudflare/Email/Rule.js +3 -1
- package/lib/Cloudflare/Email/Rule.js.map +1 -1
- package/lib/Cloudflare/Email/SendingSubdomain.d.ts.map +1 -1
- package/lib/Cloudflare/Email/SendingSubdomain.js +1 -1
- package/lib/Cloudflare/Email/SendingSubdomain.js.map +1 -1
- package/lib/Cloudflare/Email/TrustedDomain.d.ts.map +1 -1
- package/lib/Cloudflare/Email/TrustedDomain.js +1 -1
- package/lib/Cloudflare/Email/TrustedDomain.js.map +1 -1
- package/lib/Cloudflare/Fetcher.d.ts.map +1 -1
- package/lib/Cloudflare/Fetcher.js +10 -3
- package/lib/Cloudflare/Fetcher.js.map +1 -1
- package/lib/Cloudflare/Flagship/App.d.ts.map +1 -1
- package/lib/Cloudflare/Flagship/App.js +2 -3
- package/lib/Cloudflare/Flagship/App.js.map +1 -1
- package/lib/Cloudflare/Fraud/DetectionSettings.d.ts.map +1 -1
- package/lib/Cloudflare/Fraud/DetectionSettings.js +3 -1
- package/lib/Cloudflare/Fraud/DetectionSettings.js.map +1 -1
- package/lib/Cloudflare/GoogleTagGateway/GoogleTagGateway.d.ts.map +1 -1
- package/lib/Cloudflare/GoogleTagGateway/GoogleTagGateway.js +8 -2
- package/lib/Cloudflare/GoogleTagGateway/GoogleTagGateway.js.map +1 -1
- package/lib/Cloudflare/Healthcheck/Healthcheck.d.ts.map +1 -1
- package/lib/Cloudflare/Healthcheck/Healthcheck.js +3 -1
- package/lib/Cloudflare/Healthcheck/Healthcheck.js.map +1 -1
- package/lib/Cloudflare/HostnameTlsSetting/HostnameTlsSetting.d.ts.map +1 -1
- package/lib/Cloudflare/HostnameTlsSetting/HostnameTlsSetting.js +3 -1
- package/lib/Cloudflare/HostnameTlsSetting/HostnameTlsSetting.js.map +1 -1
- package/lib/Cloudflare/Hyperdrive/Connection.d.ts.map +1 -1
- package/lib/Cloudflare/Hyperdrive/Connection.js +2 -4
- package/lib/Cloudflare/Hyperdrive/Connection.js.map +1 -1
- package/lib/Cloudflare/KV/Namespace.d.ts.map +1 -1
- package/lib/Cloudflare/KV/Namespace.js +5 -4
- package/lib/Cloudflare/KV/Namespace.js.map +1 -1
- package/lib/Cloudflare/KeylessCertificate/KeylessCertificate.d.ts.map +1 -1
- package/lib/Cloudflare/KeylessCertificate/KeylessCertificate.js +3 -1
- package/lib/Cloudflare/KeylessCertificate/KeylessCertificate.js.map +1 -1
- package/lib/Cloudflare/LeakedCredentialCheck/LeakedCredentialCheck.d.ts.map +1 -1
- package/lib/Cloudflare/LeakedCredentialCheck/LeakedCredentialCheck.js +3 -1
- package/lib/Cloudflare/LeakedCredentialCheck/LeakedCredentialCheck.js.map +1 -1
- package/lib/Cloudflare/LoadBalancer/LoadBalancer.d.ts.map +1 -1
- package/lib/Cloudflare/LoadBalancer/LoadBalancer.js +3 -1
- package/lib/Cloudflare/LoadBalancer/LoadBalancer.js.map +1 -1
- package/lib/Cloudflare/ManagedTransforms/ManagedTransforms.d.ts.map +1 -1
- package/lib/Cloudflare/ManagedTransforms/ManagedTransforms.js +3 -1
- package/lib/Cloudflare/ManagedTransforms/ManagedTransforms.js.map +1 -1
- package/lib/Cloudflare/MtlsCertificate/MtlsCertificate.d.ts.map +1 -1
- package/lib/Cloudflare/MtlsCertificate/MtlsCertificate.js +3 -1
- package/lib/Cloudflare/MtlsCertificate/MtlsCertificate.js.map +1 -1
- package/lib/Cloudflare/Organization/Organization.d.ts.map +1 -1
- package/lib/Cloudflare/Organization/Organization.js +3 -1
- package/lib/Cloudflare/Organization/Organization.js.map +1 -1
- package/lib/Cloudflare/OriginCaCertificate/OriginCaCertificate.d.ts.map +1 -1
- package/lib/Cloudflare/OriginCaCertificate/OriginCaCertificate.js +7 -2
- package/lib/Cloudflare/OriginCaCertificate/OriginCaCertificate.js.map +1 -1
- package/lib/Cloudflare/OriginPostQuantumEncryption/OriginPostQuantumEncryption.d.ts.map +1 -1
- package/lib/Cloudflare/OriginPostQuantumEncryption/OriginPostQuantumEncryption.js +3 -1
- package/lib/Cloudflare/OriginPostQuantumEncryption/OriginPostQuantumEncryption.js.map +1 -1
- package/lib/Cloudflare/OriginTlsClientAuth/HostnameCertificate.d.ts.map +1 -1
- package/lib/Cloudflare/OriginTlsClientAuth/HostnameCertificate.js +5 -1
- package/lib/Cloudflare/OriginTlsClientAuth/HostnameCertificate.js.map +1 -1
- package/lib/Cloudflare/PageRule/PageRule.d.ts.map +1 -1
- package/lib/Cloudflare/PageRule/PageRule.js +3 -1
- package/lib/Cloudflare/PageRule/PageRule.js.map +1 -1
- package/lib/Cloudflare/Providers.d.ts +29 -0
- package/lib/Cloudflare/Providers.d.ts.map +1 -1
- package/lib/Cloudflare/Providers.js +30 -19
- package/lib/Cloudflare/Providers.js.map +1 -1
- package/lib/Cloudflare/Queues/Consumer.d.ts.map +1 -1
- package/lib/Cloudflare/Queues/Consumer.js +3 -1
- package/lib/Cloudflare/Queues/Consumer.js.map +1 -1
- package/lib/Cloudflare/Queues/Queue.d.ts.map +1 -1
- package/lib/Cloudflare/Queues/Queue.js +5 -4
- package/lib/Cloudflare/Queues/Queue.js.map +1 -1
- package/lib/Cloudflare/Queues/Subscription.d.ts.map +1 -1
- package/lib/Cloudflare/Queues/Subscription.js +3 -1
- package/lib/Cloudflare/Queues/Subscription.js.map +1 -1
- package/lib/Cloudflare/R2/Bucket.d.ts +98 -0
- package/lib/Cloudflare/R2/Bucket.d.ts.map +1 -1
- package/lib/Cloudflare/R2/Bucket.js +141 -3
- package/lib/Cloudflare/R2/Bucket.js.map +1 -1
- package/lib/Cloudflare/RegionalHostname/RegionalHostname.d.ts.map +1 -1
- package/lib/Cloudflare/RegionalHostname/RegionalHostname.js +3 -1
- package/lib/Cloudflare/RegionalHostname/RegionalHostname.js.map +1 -1
- package/lib/Cloudflare/Ruleset/Ruleset.d.ts.map +1 -1
- package/lib/Cloudflare/Ruleset/Ruleset.js +8 -3
- package/lib/Cloudflare/Ruleset/Ruleset.js.map +1 -1
- package/lib/Cloudflare/SecretsStore/Secret.d.ts.map +1 -1
- package/lib/Cloudflare/SecretsStore/Secret.js +31 -5
- package/lib/Cloudflare/SecretsStore/Secret.js.map +1 -1
- package/lib/Cloudflare/SecurityTxt/SecurityTxt.d.ts.map +1 -1
- package/lib/Cloudflare/SecurityTxt/SecurityTxt.js +3 -1
- package/lib/Cloudflare/SecurityTxt/SecurityTxt.js.map +1 -1
- package/lib/Cloudflare/StateStore/Api.d.ts +15 -0
- package/lib/Cloudflare/StateStore/State.d.ts +30 -1
- package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/State.js +85 -16
- package/lib/Cloudflare/StateStore/State.js.map +1 -1
- package/lib/Cloudflare/Tags/AccountResourceTags.d.ts.map +1 -1
- package/lib/Cloudflare/Tags/AccountResourceTags.js +8 -3
- package/lib/Cloudflare/Tags/AccountResourceTags.js.map +1 -1
- package/lib/Cloudflare/Tunnel/Route.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/Route.js +3 -1
- package/lib/Cloudflare/Tunnel/Route.js.map +1 -1
- package/lib/Cloudflare/Tunnel/Tunnel.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/Tunnel.js +3 -1
- package/lib/Cloudflare/Tunnel/Tunnel.js.map +1 -1
- package/lib/Cloudflare/UrlNormalization/UrlNormalization.d.ts.map +1 -1
- package/lib/Cloudflare/UrlNormalization/UrlNormalization.js +3 -1
- package/lib/Cloudflare/UrlNormalization/UrlNormalization.js.map +1 -1
- package/lib/Cloudflare/Vectorize/VectorizeIndex.d.ts.map +1 -1
- package/lib/Cloudflare/Vectorize/VectorizeIndex.js +2 -3
- package/lib/Cloudflare/Vectorize/VectorizeIndex.js.map +1 -1
- package/lib/Cloudflare/VpcService/VpcService.d.ts.map +1 -1
- package/lib/Cloudflare/VpcService/VpcService.js +1 -1
- package/lib/Cloudflare/VpcService/VpcService.js.map +1 -1
- package/lib/Cloudflare/WaitingRoom/WaitingRoom.d.ts.map +1 -1
- package/lib/Cloudflare/WaitingRoom/WaitingRoom.js +3 -1
- package/lib/Cloudflare/WaitingRoom/WaitingRoom.js.map +1 -1
- package/lib/Cloudflare/Web3/ContentList.d.ts.map +1 -1
- package/lib/Cloudflare/Web3/ContentList.js +3 -1
- package/lib/Cloudflare/Web3/ContentList.js.map +1 -1
- package/lib/Cloudflare/Web3/Hostname.d.ts.map +1 -1
- package/lib/Cloudflare/Web3/Hostname.js +3 -1
- package/lib/Cloudflare/Web3/Hostname.js.map +1 -1
- package/lib/Cloudflare/Workers/Cache.d.ts +71 -0
- package/lib/Cloudflare/Workers/Cache.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/Cache.js +64 -0
- package/lib/Cloudflare/Workers/Cache.js.map +1 -0
- package/lib/Cloudflare/Workers/CronEventSource.d.ts +180 -6
- package/lib/Cloudflare/Workers/CronEventSource.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/CronEventSource.js +180 -6
- package/lib/Cloudflare/Workers/CronEventSource.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObject.d.ts +36 -1
- package/lib/Cloudflare/Workers/DurableObject.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObject.js +36 -1
- package/lib/Cloudflare/Workers/DurableObject.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectState.d.ts +11 -0
- package/lib/Cloudflare/Workers/DurableObjectState.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectState.js +7 -0
- package/lib/Cloudflare/Workers/DurableObjectState.js.map +1 -1
- package/lib/Cloudflare/Workers/Fetch.js +2 -2
- package/lib/Cloudflare/Workers/Fetch.js.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js +3 -0
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
- package/lib/Cloudflare/Workers/Worker.d.ts +230 -4
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +161 -7
- package/lib/Cloudflare/Workers/Worker.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts +9 -0
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +15 -0
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts +30 -0
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBridge.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBridge.js +27 -5
- package/lib/Cloudflare/Workers/WorkerBridge.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerLoader.js +9 -1
- package/lib/Cloudflare/Workers/WorkerLoader.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerProvider.js +365 -18
- package/lib/Cloudflare/Workers/WorkerProvider.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +20 -3
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
- package/lib/Cloudflare/Workers/index.d.ts +1 -0
- package/lib/Cloudflare/Workers/index.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/index.js +1 -0
- package/lib/Cloudflare/Workers/index.js.map +1 -1
- package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.js +2 -3
- package/lib/Cloudflare/WorkersForPlatforms/DispatchNamespace.js.map +1 -1
- package/lib/Cloudflare/Workflows/Workflow.d.ts +200 -24
- package/lib/Cloudflare/Workflows/Workflow.d.ts.map +1 -1
- package/lib/Cloudflare/Workflows/Workflow.js +126 -28
- package/lib/Cloudflare/Workflows/Workflow.js.map +1 -1
- package/lib/Cloudflare/Workflows/WorkflowBridge.d.ts.map +1 -1
- package/lib/Cloudflare/Workflows/WorkflowBridge.js +42 -3
- package/lib/Cloudflare/Workflows/WorkflowBridge.js.map +1 -1
- package/lib/Cloudflare/Zaraz/Config.d.ts +1 -0
- package/lib/Cloudflare/Zaraz/Config.d.ts.map +1 -1
- package/lib/Cloudflare/Zaraz/Config.js +8 -2
- package/lib/Cloudflare/Zaraz/Config.js.map +1 -1
- package/lib/Cloudflare/Zone/Zone.d.ts.map +1 -1
- package/lib/Cloudflare/Zone/Zone.js +1 -0
- package/lib/Cloudflare/Zone/Zone.js.map +1 -1
- package/lib/Docker/Container.d.ts.map +1 -1
- package/lib/Docker/Container.js +11 -1
- package/lib/Docker/Container.js.map +1 -1
- package/lib/Drizzle/Schema.d.ts.map +1 -1
- package/lib/Drizzle/Schema.js +12 -5
- package/lib/Drizzle/Schema.js.map +1 -1
- package/lib/Neon/Branch.d.ts.map +1 -1
- package/lib/Neon/Branch.js +15 -3
- package/lib/Neon/Branch.js.map +1 -1
- package/lib/Output.d.ts +13 -1
- package/lib/Output.d.ts.map +1 -1
- package/lib/Output.js +17 -3
- package/lib/Output.js.map +1 -1
- package/lib/Planetscale/Postgres/PostgresRole.js +2 -2
- package/lib/Planetscale/Postgres/PostgresRole.js.map +1 -1
- package/lib/Provider.d.ts +8 -0
- package/lib/Provider.d.ts.map +1 -1
- package/lib/Provider.js +38 -3
- package/lib/Provider.js.map +1 -1
- package/lib/Ref.d.ts +9 -1
- package/lib/Ref.d.ts.map +1 -1
- package/lib/Ref.js +2 -1
- package/lib/Ref.js.map +1 -1
- package/lib/Resource.d.ts +44 -0
- package/lib/Resource.d.ts.map +1 -1
- package/lib/Resource.js +22 -1
- package/lib/Resource.js.map +1 -1
- package/lib/Stack.js +1 -1
- package/lib/Stack.js.map +1 -1
- package/lib/State/HttpStateApi.d.ts +4 -4
- package/lib/State/HttpStateStore.d.ts +12 -0
- package/lib/State/HttpStateStore.d.ts.map +1 -1
- package/lib/State/HttpStateStore.js +46 -5
- package/lib/State/HttpStateStore.js.map +1 -1
- package/lib/Sync.d.ts +109 -0
- package/lib/Sync.d.ts.map +1 -0
- package/lib/Sync.js +312 -0
- package/lib/Sync.js.map +1 -0
- package/lib/Test/Bun.d.ts +1 -1
- package/lib/Test/Bun.d.ts.map +1 -1
- package/lib/Test/Bun.js +1 -1
- package/lib/Test/Bun.js.map +1 -1
- package/lib/Test/Http.d.ts +67 -0
- package/lib/Test/Http.d.ts.map +1 -1
- package/lib/Test/Http.js +69 -0
- package/lib/Test/Http.js.map +1 -1
- package/lib/Test/Vitest.d.ts +1 -1
- package/lib/Test/Vitest.d.ts.map +1 -1
- package/lib/Test/Vitest.js +1 -0
- package/lib/Test/Vitest.js.map +1 -1
- package/lib/Util/proxy-chain.js +14 -15
- package/lib/Util/proxy-chain.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/package.json +19 -19
- package/src/AWS/ACM/Certificate.ts +13 -2
- package/src/AWS/AutoScaling/AutoScalingGroup.ts +21 -15
- package/src/AWS/AutoScaling/LaunchTemplate.ts +6 -1
- package/src/AWS/AutoScaling/ScalingPolicy.ts +31 -17
- package/src/AWS/CloudFront/PublicKey.ts +4 -0
- package/src/AWS/DynamoDB/Table.ts +1 -1
- package/src/AWS/ECS/Service.ts +35 -6
- package/src/AWS/IAM/OpenIDConnectProvider.ts +9 -1
- package/src/AWS/Lambda/Alias.ts +42 -0
- package/src/AWS/Lambda/EventInvokeConfig.ts +150 -0
- package/src/AWS/Lambda/Function.ts +35 -2
- package/src/AWS/Lambda/index.ts +1 -0
- package/src/AWS/Organizations/DelegatedAdministrator.ts +11 -3
- package/src/AWS/Organizations/PolicyAttachment.ts +10 -4
- package/src/AWS/Organizations/RootPolicyType.ts +9 -4
- package/src/AWS/Organizations/TrustedServiceAccess.ts +9 -3
- package/src/AWS/Route53/HostedZone.ts +30 -13
- package/src/AWS/Route53/Record.ts +44 -22
- package/src/Apply.ts +7 -1
- package/src/Auth/Lock.ts +62 -18
- package/src/Bundle/PurePlugin.ts +15 -2
- package/src/Cli/commands/sync.ts +123 -0
- package/src/Cli/main.ts +2 -0
- package/src/Cloudflare/AI/CustomTopics.ts +3 -1
- package/src/Cloudflare/AI/Dataset.ts +3 -1
- package/src/Cloudflare/AI/Evaluation.ts +3 -1
- package/src/Cloudflare/AI/Gateway.ts +5 -6
- package/src/Cloudflare/AI/GatewayDynamicRouting.ts +3 -1
- package/src/Cloudflare/AI/GatewayProvider.ts +5 -2
- package/src/Cloudflare/AI/ProviderKey.ts +161 -0
- package/src/Cloudflare/AI/SearchInstance.ts +5 -4
- package/src/Cloudflare/AI/SearchNamespace.ts +5 -4
- package/src/Cloudflare/AI/SearchToken.ts +3 -1
- package/src/Cloudflare/AI/SecuritySettings.ts +3 -0
- package/src/Cloudflare/AI/index.ts +1 -0
- package/src/Cloudflare/Access/InfrastructureTarget.ts +4 -1
- package/src/Cloudflare/Access/Organization.ts +1 -0
- package/src/Cloudflare/Access/Policy.ts +3 -1
- package/src/Cloudflare/Account/Account.ts +3 -1
- package/src/Cloudflare/ApiToken/AccountApiToken.ts +1 -0
- package/src/Cloudflare/ApiToken/UserApiToken.ts +1 -0
- package/src/Cloudflare/Auth/AuthProvider.ts +69 -8
- package/src/Cloudflare/BotManagement/BotManagement.ts +3 -1
- package/src/Cloudflare/Cache/Reserve.ts +3 -1
- package/src/Cloudflare/ClientCertificate/ClientCertificate.ts +3 -1
- package/src/Cloudflare/Containers/Container.ts +2 -2
- package/src/Cloudflare/ContentScanning/ContentScanning.ts +3 -1
- package/src/Cloudflare/CustomCertificate/CustomCertificate.ts +3 -1
- package/src/Cloudflare/CustomHostname/CustomHostname.ts +1 -0
- package/src/Cloudflare/CustomHostname/FallbackOrigin.ts +1 -0
- package/src/Cloudflare/CustomNameserver/CustomNameserver.ts +3 -1
- package/src/Cloudflare/D1/Database.ts +2 -2
- package/src/Cloudflare/DNS/AccountSettings.ts +3 -1
- package/src/Cloudflare/DNS/Dnssec.ts +3 -1
- package/src/Cloudflare/DNS/Firewall.ts +3 -1
- package/src/Cloudflare/DNS/Record.ts +3 -1
- package/src/Cloudflare/DNS/View.ts +3 -1
- package/src/Cloudflare/DNS/ZoneSettings.ts +3 -1
- package/src/Cloudflare/DNS/ZoneTransferAcl.ts +3 -1
- package/src/Cloudflare/DNS/ZoneTransferIncoming.ts +3 -1
- package/src/Cloudflare/DNS/ZoneTransferOutgoing.ts +3 -1
- package/src/Cloudflare/DNS/ZoneTransferPeer.ts +3 -1
- package/src/Cloudflare/DNS/ZoneTransferTsig.ts +3 -1
- package/src/Cloudflare/Email/Address.ts +3 -1
- package/src/Cloudflare/Email/AllowPolicy.ts +1 -0
- package/src/Cloudflare/Email/BlockSender.ts +1 -0
- package/src/Cloudflare/Email/CatchAll.ts +7 -2
- package/src/Cloudflare/Email/Domain.ts +3 -1
- package/src/Cloudflare/Email/ImpersonationRegistryEntry.ts +1 -0
- package/src/Cloudflare/Email/Routing.ts +3 -1
- package/src/Cloudflare/Email/Rule.ts +3 -1
- package/src/Cloudflare/Email/SendingSubdomain.ts +1 -0
- package/src/Cloudflare/Email/TrustedDomain.ts +1 -0
- package/src/Cloudflare/Fetcher.ts +12 -5
- package/src/Cloudflare/Flagship/App.ts +2 -3
- package/src/Cloudflare/Fraud/DetectionSettings.ts +3 -1
- package/src/Cloudflare/GoogleTagGateway/GoogleTagGateway.ts +7 -2
- package/src/Cloudflare/Healthcheck/Healthcheck.ts +3 -1
- package/src/Cloudflare/HostnameTlsSetting/HostnameTlsSetting.ts +3 -1
- package/src/Cloudflare/Hyperdrive/Connection.ts +2 -4
- package/src/Cloudflare/KV/Namespace.ts +5 -4
- package/src/Cloudflare/KeylessCertificate/KeylessCertificate.ts +3 -1
- package/src/Cloudflare/LeakedCredentialCheck/LeakedCredentialCheck.ts +3 -1
- package/src/Cloudflare/LoadBalancer/LoadBalancer.ts +3 -1
- package/src/Cloudflare/ManagedTransforms/ManagedTransforms.ts +3 -1
- package/src/Cloudflare/MtlsCertificate/MtlsCertificate.ts +3 -1
- package/src/Cloudflare/Organization/Organization.ts +3 -1
- package/src/Cloudflare/OriginCaCertificate/OriginCaCertificate.ts +7 -2
- package/src/Cloudflare/OriginPostQuantumEncryption/OriginPostQuantumEncryption.ts +3 -1
- package/src/Cloudflare/OriginTlsClientAuth/HostnameCertificate.ts +5 -1
- package/src/Cloudflare/PageRule/PageRule.ts +3 -1
- package/src/Cloudflare/Providers.ts +34 -19
- package/src/Cloudflare/Queues/Consumer.ts +3 -1
- package/src/Cloudflare/Queues/Queue.ts +5 -4
- package/src/Cloudflare/Queues/Subscription.ts +3 -1
- package/src/Cloudflare/R2/Bucket.ts +230 -3
- package/src/Cloudflare/RegionalHostname/RegionalHostname.ts +3 -1
- package/src/Cloudflare/Ruleset/Ruleset.ts +9 -4
- package/src/Cloudflare/SecretsStore/Secret.ts +46 -5
- package/src/Cloudflare/SecurityTxt/SecurityTxt.ts +3 -1
- package/src/Cloudflare/StateStore/State.ts +89 -24
- package/src/Cloudflare/Tags/AccountResourceTags.ts +9 -5
- package/src/Cloudflare/Tunnel/Route.ts +3 -1
- package/src/Cloudflare/Tunnel/Tunnel.ts +3 -1
- package/src/Cloudflare/UrlNormalization/UrlNormalization.ts +3 -1
- package/src/Cloudflare/Vectorize/VectorizeIndex.ts +2 -3
- package/src/Cloudflare/VpcService/VpcService.ts +1 -0
- package/src/Cloudflare/WaitingRoom/WaitingRoom.ts +3 -1
- package/src/Cloudflare/Web3/ContentList.ts +3 -1
- package/src/Cloudflare/Web3/Hostname.ts +3 -1
- package/src/Cloudflare/Workers/Cache.ts +102 -0
- package/src/Cloudflare/Workers/CronEventSource.ts +180 -6
- package/src/Cloudflare/Workers/DurableObject.ts +36 -1
- package/src/Cloudflare/Workers/DurableObjectState.ts +25 -0
- package/src/Cloudflare/Workers/Fetch.ts +2 -2
- package/src/Cloudflare/Workers/LocalWorkerProvider.ts +3 -0
- package/src/Cloudflare/Workers/Worker.ts +315 -9
- package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +18 -0
- package/src/Cloudflare/Workers/WorkerBridge.ts +37 -10
- package/src/Cloudflare/Workers/WorkerLoader.ts +10 -1
- package/src/Cloudflare/Workers/WorkerProvider.ts +576 -40
- package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +23 -2
- package/src/Cloudflare/Workers/index.ts +1 -0
- package/src/Cloudflare/WorkersForPlatforms/DispatchNamespace.ts +2 -4
- package/src/Cloudflare/Workflows/Workflow.ts +296 -38
- package/src/Cloudflare/Workflows/WorkflowBridge.ts +62 -12
- package/src/Cloudflare/Zaraz/Config.ts +7 -2
- package/src/Cloudflare/Zone/Zone.ts +1 -0
- package/src/Docker/Container.ts +10 -1
- package/src/Drizzle/Schema.ts +12 -5
- package/src/Neon/Branch.ts +15 -3
- package/src/Output.ts +18 -2
- package/src/Planetscale/Postgres/PostgresRole.ts +2 -2
- package/src/Provider.ts +53 -3
- package/src/Ref.ts +10 -0
- package/src/Resource.ts +50 -1
- package/src/Stack.ts +1 -1
- package/src/State/HttpStateStore.ts +47 -5
- package/src/Sync.ts +494 -0
- package/src/Test/Bun.ts +4 -0
- package/src/Test/Http.ts +133 -0
- package/src/Test/Vitest.ts +11 -0
- package/src/Util/proxy-chain.ts +9 -12
- package/src/index.ts +1 -0
|
@@ -3,11 +3,12 @@ import * as Console from "effect/Console";
|
|
|
3
3
|
import * as Effect from "effect/Effect";
|
|
4
4
|
import * as Option from "effect/Option";
|
|
5
5
|
import * as Redacted from "effect/Redacted";
|
|
6
|
+
import * as Schedule from "effect/Schedule";
|
|
6
7
|
import * as Stream from "effect/Stream";
|
|
7
8
|
import { Unowned } from "../../AdoptPolicy.ts";
|
|
8
9
|
import { isResolved } from "../../Diff.ts";
|
|
9
10
|
import * as Provider from "../../Provider.ts";
|
|
10
|
-
import { Resource } from "../../Resource.ts";
|
|
11
|
+
import { isResourceOfType, Resource } from "../../Resource.ts";
|
|
11
12
|
import { CloudflareEnvironment } from "../CloudflareEnvironment.ts";
|
|
12
13
|
import type { Providers } from "../Providers.ts";
|
|
13
14
|
|
|
@@ -56,8 +57,7 @@ export type Secret = Resource<
|
|
|
56
57
|
>;
|
|
57
58
|
|
|
58
59
|
export const isSecret = (value: unknown): value is Secret =>
|
|
59
|
-
|
|
60
|
-
(value as any)?.Type === "Cloudflare.SecretsStore.Secret";
|
|
60
|
+
isResourceOfType(value, "Cloudflare.SecretsStore.Secret");
|
|
61
61
|
|
|
62
62
|
export type SecretStatus = "pending" | "active" | "deleted";
|
|
63
63
|
|
|
@@ -181,12 +181,21 @@ export const StoreSecretProvider = () =>
|
|
|
181
181
|
);
|
|
182
182
|
if (created) {
|
|
183
183
|
const secret = created.result[0]!;
|
|
184
|
+
// Freshly created secrets report "pending" until Cloudflare
|
|
185
|
+
// activates them; a worker deploy that references a pending
|
|
186
|
+
// secret is rejected with "Secrets Store binding ... which
|
|
187
|
+
// were not found". Wait (bounded) for activation so
|
|
188
|
+
// downstream deploys in the same run see an active secret.
|
|
189
|
+
const status = yield* waitForSecretActive(
|
|
190
|
+
{ accountId, storeId, secretId: secret.id },
|
|
191
|
+
asSecretStatus(secret.status),
|
|
192
|
+
);
|
|
184
193
|
return {
|
|
185
194
|
secretId: secret.id,
|
|
186
195
|
secretName: secret.name,
|
|
187
196
|
storeId: secret.storeId,
|
|
188
197
|
accountId,
|
|
189
|
-
status
|
|
198
|
+
status,
|
|
190
199
|
scopes,
|
|
191
200
|
comment: secret.comment ?? undefined,
|
|
192
201
|
};
|
|
@@ -216,12 +225,16 @@ export const StoreSecretProvider = () =>
|
|
|
216
225
|
comment: news.comment,
|
|
217
226
|
value: Redacted.value(news.value),
|
|
218
227
|
});
|
|
228
|
+
const status = yield* waitForSecretActive(
|
|
229
|
+
{ accountId, storeId, secretId: observed.id },
|
|
230
|
+
asSecretStatus(patched.status),
|
|
231
|
+
);
|
|
219
232
|
return {
|
|
220
233
|
secretId: observed.id,
|
|
221
234
|
secretName: observed.name,
|
|
222
235
|
storeId: observed.storeId,
|
|
223
236
|
accountId,
|
|
224
|
-
status
|
|
237
|
+
status,
|
|
225
238
|
scopes,
|
|
226
239
|
comment: patched.comment ?? undefined,
|
|
227
240
|
};
|
|
@@ -337,6 +350,34 @@ export const StoreSecretProvider = () =>
|
|
|
337
350
|
}),
|
|
338
351
|
});
|
|
339
352
|
|
|
353
|
+
/**
|
|
354
|
+
* Poll a secret until Cloudflare reports it "active" (bounded at
|
|
355
|
+
* ~10s). Returns the last observed status rather than failing on
|
|
356
|
+
* timeout — consumers that bind the secret retry the
|
|
357
|
+
* `SecretsStoreBindingNotFound` deploy rejection themselves, so a
|
|
358
|
+
* slow activation degrades to a retried deploy instead of a hard
|
|
359
|
+
* error here.
|
|
360
|
+
*/
|
|
361
|
+
const waitForSecretActive = (
|
|
362
|
+
key: { accountId: string; storeId: string; secretId: string },
|
|
363
|
+
initialStatus: SecretStatus,
|
|
364
|
+
) =>
|
|
365
|
+
initialStatus === "active"
|
|
366
|
+
? Effect.succeed<SecretStatus>("active")
|
|
367
|
+
: secretsStore.getStoreSecret(key).pipe(
|
|
368
|
+
Effect.map((s) => asSecretStatus(s.status)),
|
|
369
|
+
Effect.repeat({
|
|
370
|
+
schedule: Schedule.spaced("500 millis"),
|
|
371
|
+
until: (status) => status === "active",
|
|
372
|
+
times: 20,
|
|
373
|
+
}),
|
|
374
|
+
// The secret was observed moments ago; a NotFound here is a
|
|
375
|
+
// read-replica lag blip, not a deletion. Report the last known
|
|
376
|
+
// status and let the deploy-side retry take over.
|
|
377
|
+
Effect.catchTag("SecretNotFound", () => Effect.succeed(initialStatus)),
|
|
378
|
+
Effect.catchTag("StoreNotFound", () => Effect.succeed(initialStatus)),
|
|
379
|
+
);
|
|
380
|
+
|
|
340
381
|
const resolveScopes = (scopes: string[] | undefined): string[] =>
|
|
341
382
|
scopes && scopes.length > 0 ? scopes : ["workers"];
|
|
342
383
|
|
|
@@ -150,7 +150,9 @@ export type SecurityTxt = Resource<TypeId, Props, Attributes, never, Providers>;
|
|
|
150
150
|
*
|
|
151
151
|
* @see https://developers.cloudflare.com/security-center/infrastructure/security-file/
|
|
152
152
|
*/
|
|
153
|
-
export const SecurityTxt = Resource<SecurityTxt>(TypeId
|
|
153
|
+
export const SecurityTxt = Resource<SecurityTxt>(TypeId, {
|
|
154
|
+
aliases: ["Cloudflare.SecurityTxt"],
|
|
155
|
+
});
|
|
154
156
|
|
|
155
157
|
/**
|
|
156
158
|
* Returns true if the given value is a SecurityTxt resource.
|
|
@@ -15,11 +15,8 @@ import { isHttpClientError } from "effect/unstable/http/HttpClientError";
|
|
|
15
15
|
import { adopt } from "../../AdoptPolicy.ts";
|
|
16
16
|
import { AlchemyContext } from "../../AlchemyContext.ts";
|
|
17
17
|
import { AuthError } from "../../Auth/AuthProvider.ts";
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
CredentialsStoreLive,
|
|
21
|
-
} from "../../Auth/Credentials.ts";
|
|
22
|
-
import { ALCHEMY_PROFILE, ProfileLive } from "../../Auth/Profile.ts";
|
|
18
|
+
import { CredentialsStore } from "../../Auth/Credentials.ts";
|
|
19
|
+
import { ALCHEMY_PROFILE } from "../../Auth/Profile.ts";
|
|
23
20
|
import * as Cloudflare from "../../Cloudflare/Providers.ts";
|
|
24
21
|
import { deploy } from "../../Deploy.ts";
|
|
25
22
|
import * as Output from "../../Output.ts";
|
|
@@ -39,9 +36,7 @@ import {
|
|
|
39
36
|
} from "../../Telemetry/Metrics.ts";
|
|
40
37
|
import * as Clank from "../../Util/Clank.ts";
|
|
41
38
|
import * as Access from "../Access.ts";
|
|
42
|
-
import { CloudflareAuth } from "../Auth/AuthProvider.ts";
|
|
43
39
|
import * as CloudflareEnvironment from "../CloudflareEnvironment.ts";
|
|
44
|
-
import * as Credentials from "../Credentials.ts";
|
|
45
40
|
import { EdgeSessionError, createEdgeSession } from "../EdgeSession.ts";
|
|
46
41
|
import Api, { STATE_STORE_SCRIPT_NAME, STATE_STORE_VERSION } from "./Api.ts";
|
|
47
42
|
import {
|
|
@@ -217,12 +212,14 @@ export const state = () =>
|
|
|
217
212
|
return yield* Effect.cached(init.pipe(Effect.provideContext(context)));
|
|
218
213
|
}),
|
|
219
214
|
).pipe(
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
215
|
+
// The Cloudflare API foundation shared with `providers()` —
|
|
216
|
+
// credentials, environment, auth/access, profile + credential
|
|
217
|
+
// store, and the same blanket retry policy. Without the retry
|
|
218
|
+
// policy the init-time subdomain/script/secrets probes run on the
|
|
219
|
+
// SDK default and give up early under Cloudflare rate limiting.
|
|
220
|
+
// `provide` (not `provideMerge`) so the distilled Retry tag stays
|
|
221
|
+
// out of this layer's public type.
|
|
222
|
+
Layer.provide(Cloudflare.CloudflareApiLive()),
|
|
226
223
|
Layer.orDie,
|
|
227
224
|
);
|
|
228
225
|
|
|
@@ -578,6 +575,34 @@ const deployWithLocalState = ({
|
|
|
578
575
|
}),
|
|
579
576
|
);
|
|
580
577
|
|
|
578
|
+
/**
|
|
579
|
+
* Writes against a *just-deployed* state-store worker can fail
|
|
580
|
+
* transiently while Cloudflare propagates the script, its route, and
|
|
581
|
+
* its Secrets Store bindings to the edge:
|
|
582
|
+
*
|
|
583
|
+
* - 404 — the workers.dev route isn't serving the new script yet
|
|
584
|
+
* - 401 — the worker is up but its auth-token secret binding hasn't
|
|
585
|
+
* propagated, so token validation reads a stale/absent value
|
|
586
|
+
* - 5xx — the Store DO dies while its encryption-key secret binding
|
|
587
|
+
* is still propagating
|
|
588
|
+
* - transport errors (no response) — cold workers.dev host blips
|
|
589
|
+
*
|
|
590
|
+
* @internal exported for unit testing.
|
|
591
|
+
*/
|
|
592
|
+
export const isTransientBootstrapWriteError = (error: {
|
|
593
|
+
cause?: unknown;
|
|
594
|
+
}): boolean => {
|
|
595
|
+
const cause = error.cause;
|
|
596
|
+
if (cause == null) return false;
|
|
597
|
+
const tag = (cause as { _tag?: unknown })._tag;
|
|
598
|
+
if (typeof tag === "string" && tag.startsWith("Unauthorized")) return true;
|
|
599
|
+
if (isHttpClientError(cause)) {
|
|
600
|
+
const status = cause.response?.status;
|
|
601
|
+
return status === undefined || status === 404 || status >= 500;
|
|
602
|
+
}
|
|
603
|
+
return false;
|
|
604
|
+
};
|
|
605
|
+
|
|
581
606
|
// check if there's a local stack that wasn't properly hoisted
|
|
582
607
|
const hasLocalStack = (stage: string) =>
|
|
583
608
|
Effect.gen(function* () {
|
|
@@ -637,11 +662,14 @@ const hoistBootstrapStack = Effect.fn(function* ({
|
|
|
637
662
|
})
|
|
638
663
|
.pipe(
|
|
639
664
|
Effect.retry({
|
|
640
|
-
while:
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
665
|
+
while: isTransientBootstrapWriteError,
|
|
666
|
+
// Bounded at ~30s: the freshly deployed worker (and its
|
|
667
|
+
// Secrets Store bindings) can take a while to serve
|
|
668
|
+
// consistently; anything persisting past that is a real
|
|
669
|
+
// failure to surface, not to spin on.
|
|
670
|
+
schedule: Schedule.fixed(500).pipe(
|
|
671
|
+
Schedule.both(Schedule.recurs(60)),
|
|
672
|
+
),
|
|
645
673
|
}),
|
|
646
674
|
);
|
|
647
675
|
}
|
|
@@ -703,8 +731,13 @@ export const loginWithCloudflare = (profileName: string, force: boolean) =>
|
|
|
703
731
|
AuthTokenSecretName,
|
|
704
732
|
).pipe(
|
|
705
733
|
Effect.retry({
|
|
706
|
-
while:
|
|
734
|
+
while: (error) =>
|
|
735
|
+
isWorkersPreviewConfigurationError(error) ||
|
|
736
|
+
isTransientEdgeSessionError(error),
|
|
737
|
+
// Cap the exponential delay at 2s so 15 retries stay within
|
|
738
|
+
// ~30s instead of doubling unboundedly.
|
|
707
739
|
schedule: Schedule.exponential(200).pipe(
|
|
740
|
+
Schedule.either(Schedule.spaced("2 seconds")),
|
|
708
741
|
Schedule.both(Schedule.recurs(15)),
|
|
709
742
|
),
|
|
710
743
|
}),
|
|
@@ -768,6 +801,10 @@ const isStateStoreAvailable = (scriptName: string = "alchemy-state-store") =>
|
|
|
768
801
|
Effect.map((setting) => setting !== undefined),
|
|
769
802
|
Effect.catchTag("WorkerNotFound", () => Effect.succeed(false)),
|
|
770
803
|
Effect.catchTag("InvalidRoute", () => Effect.succeed(false)),
|
|
804
|
+
// A worker that exists but has no versions (a previous deploy was
|
|
805
|
+
// interrupted before any content upload) can't serve — treat it
|
|
806
|
+
// as absent so bootstrap redeploys it.
|
|
807
|
+
Effect.catchTag("WorkerHasNoVersions", () => Effect.succeed(false)),
|
|
771
808
|
);
|
|
772
809
|
});
|
|
773
810
|
|
|
@@ -831,11 +868,11 @@ const waitForStateStoreVersion = (url: string) =>
|
|
|
831
868
|
}).pipe(
|
|
832
869
|
Effect.retry({
|
|
833
870
|
while: (error) => error instanceof StateStoreVersionNotReady,
|
|
834
|
-
// Edge propagation is usually sub-second
|
|
835
|
-
//
|
|
836
|
-
//
|
|
837
|
-
schedule: Schedule.spaced("
|
|
838
|
-
Schedule.both(Schedule.recurs(
|
|
871
|
+
// Edge propagation is usually sub-second but production traces
|
|
872
|
+
// show redeploys occasionally serving the old version for well
|
|
873
|
+
// over 10s. Poll for ~30s before failing loudly.
|
|
874
|
+
schedule: Schedule.spaced("500 millis").pipe(
|
|
875
|
+
Schedule.both(Schedule.recurs(60)),
|
|
839
876
|
),
|
|
840
877
|
}),
|
|
841
878
|
Effect.withSpan("state_store.wait_for_version", {
|
|
@@ -1000,6 +1037,34 @@ const isWorkersPreviewConfigurationError = (error: unknown) =>
|
|
|
1000
1037
|
(error.message.includes("Invalid Workers Preview configuration") ||
|
|
1001
1038
|
error.message.includes("Error 1031"));
|
|
1002
1039
|
|
|
1040
|
+
/**
|
|
1041
|
+
* Edge-preview reads are flaky in ways that clear up on their own:
|
|
1042
|
+
* the workers.dev edge can serve a generic Cloudflare 400/502 HTML
|
|
1043
|
+
* page while preview routing propagates ("Secret probe returned
|
|
1044
|
+
* ..."), the session-create call can hit transient API blips, and the
|
|
1045
|
+
* probe fetch can fail at the transport level ("fetch failed").
|
|
1046
|
+
* Retry everything except causes that are clearly permanent
|
|
1047
|
+
* (bad credentials, invalid routes).
|
|
1048
|
+
*
|
|
1049
|
+
* @internal exported for unit testing.
|
|
1050
|
+
*/
|
|
1051
|
+
export const isTransientEdgeSessionError = (error: unknown): boolean => {
|
|
1052
|
+
if (!(error instanceof EdgeSessionError)) return false;
|
|
1053
|
+
// Non-200 probe responses are edge-propagation flakes, not client bugs.
|
|
1054
|
+
if (error.message.startsWith("Secret probe returned")) return true;
|
|
1055
|
+
const tag = (error.cause as { _tag?: unknown } | undefined)?._tag;
|
|
1056
|
+
if (
|
|
1057
|
+
typeof tag === "string" &&
|
|
1058
|
+
(tag.startsWith("Unauthorized") ||
|
|
1059
|
+
tag === "Forbidden" ||
|
|
1060
|
+
tag === "InvalidRoute" ||
|
|
1061
|
+
tag === "AuthError")
|
|
1062
|
+
) {
|
|
1063
|
+
return false;
|
|
1064
|
+
}
|
|
1065
|
+
return true;
|
|
1066
|
+
};
|
|
1067
|
+
|
|
1003
1068
|
/**
|
|
1004
1069
|
* SHA-256 hex digest of the Cloudflare account ID. Used as a stable
|
|
1005
1070
|
* pseudonymous identifier on telemetry spans so the dashboard can
|
|
@@ -4,6 +4,7 @@ import * as Predicate from "effect/Predicate";
|
|
|
4
4
|
import * as Stream from "effect/Stream";
|
|
5
5
|
|
|
6
6
|
import { Unowned } from "../../AdoptPolicy.ts";
|
|
7
|
+
import { isResolved } from "../../Diff.ts";
|
|
7
8
|
import type { Input } from "../../Input.ts";
|
|
8
9
|
import * as Provider from "../../Provider.ts";
|
|
9
10
|
import { Resource } from "../../Resource.ts";
|
|
@@ -208,11 +209,14 @@ export const AccountResourceTagsProvider = () =>
|
|
|
208
209
|
read: Effect.fn(function* ({ output, olds }) {
|
|
209
210
|
const { accountId } = yield* yield* CloudflareEnvironment;
|
|
210
211
|
const acct = output?.accountId ?? accountId;
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
const
|
|
215
|
-
|
|
212
|
+
// At plan time `olds` may still hold unresolved Output proxies (e.g.
|
|
213
|
+
// an adoption pre-check before the referenced resource deploys) —
|
|
214
|
+
// only fall back to them once resolved.
|
|
215
|
+
const resolvedOlds =
|
|
216
|
+
olds !== undefined && isResolved(olds) ? olds : undefined;
|
|
217
|
+
const resourceId = output?.resourceId ?? resolvedOlds?.resourceId;
|
|
218
|
+
const resourceType = output?.resourceType ?? resolvedOlds?.resourceType;
|
|
219
|
+
const workerId = output?.workerId ?? resolvedOlds?.workerId;
|
|
216
220
|
if (!resourceId || !resourceType) return undefined;
|
|
217
221
|
|
|
218
222
|
const observed = yield* resourceTagging.getAccountTag({
|
|
@@ -114,7 +114,9 @@ export type Route = Resource<
|
|
|
114
114
|
* });
|
|
115
115
|
* ```
|
|
116
116
|
*/
|
|
117
|
-
export const Route = Resource<Route>("Cloudflare.Tunnel.Route"
|
|
117
|
+
export const Route = Resource<Route>("Cloudflare.Tunnel.Route", {
|
|
118
|
+
aliases: ["Cloudflare.TunnelRoute"],
|
|
119
|
+
});
|
|
118
120
|
|
|
119
121
|
export const RouteProvider = () =>
|
|
120
122
|
Provider.succeed(Route, {
|
|
@@ -150,7 +150,9 @@ export type Tunnel = Resource<
|
|
|
150
150
|
* };
|
|
151
151
|
* ```
|
|
152
152
|
*/
|
|
153
|
-
export const Tunnel = Resource<Tunnel>("Cloudflare.Tunnel.Tunnel"
|
|
153
|
+
export const Tunnel = Resource<Tunnel>("Cloudflare.Tunnel.Tunnel", {
|
|
154
|
+
aliases: ["Cloudflare.Tunnel"],
|
|
155
|
+
});
|
|
154
156
|
|
|
155
157
|
export const TunnelProvider = () =>
|
|
156
158
|
Provider.succeed(Tunnel, {
|
|
@@ -119,7 +119,9 @@ export type UrlNormalization = Resource<
|
|
|
119
119
|
*
|
|
120
120
|
* @see https://developers.cloudflare.com/rules/normalization/
|
|
121
121
|
*/
|
|
122
|
-
export const UrlNormalization = Resource<UrlNormalization>(TypeId
|
|
122
|
+
export const UrlNormalization = Resource<UrlNormalization>(TypeId, {
|
|
123
|
+
aliases: ["Cloudflare.UrlNormalization"],
|
|
124
|
+
});
|
|
123
125
|
|
|
124
126
|
/**
|
|
125
127
|
* Returns true if the given value is a UrlNormalization resource.
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import * as vectorize from "@distilled.cloud/cloudflare/vectorize";
|
|
2
2
|
import * as Effect from "effect/Effect";
|
|
3
|
-
import * as Predicate from "effect/Predicate";
|
|
4
3
|
import * as Stream from "effect/Stream";
|
|
5
4
|
|
|
6
5
|
import { isResolved } from "../../Diff.ts";
|
|
7
6
|
import { createPhysicalName } from "../../PhysicalName.ts";
|
|
8
7
|
import * as Provider from "../../Provider.ts";
|
|
9
|
-
import { Resource } from "../../Resource.ts";
|
|
8
|
+
import { isResourceOfType, Resource } from "../../Resource.ts";
|
|
10
9
|
import { CloudflareEnvironment } from "../CloudflareEnvironment.ts";
|
|
11
10
|
import type { Providers } from "../Providers.ts";
|
|
12
11
|
|
|
@@ -137,7 +136,7 @@ export const Index = Resource<Index>(TypeId);
|
|
|
137
136
|
* Returns true if the given value is a Vectorize Index resource.
|
|
138
137
|
*/
|
|
139
138
|
export const isIndex = (value: unknown): value is Index =>
|
|
140
|
-
|
|
139
|
+
isResourceOfType(value, TypeId);
|
|
141
140
|
|
|
142
141
|
export const IndexProvider = () =>
|
|
143
142
|
Provider.succeed(Index, {
|
|
@@ -122,6 +122,7 @@ export type VpcService = Resource<
|
|
|
122
122
|
*/
|
|
123
123
|
export const VpcService = Resource<VpcService>(
|
|
124
124
|
"Cloudflare.VpcService.VpcService",
|
|
125
|
+
{ aliases: ["Cloudflare.VpcService"] },
|
|
125
126
|
);
|
|
126
127
|
|
|
127
128
|
const createServiceName = (id: string, name: string | undefined) =>
|
|
@@ -290,7 +290,9 @@ export type WaitingRoom = Resource<TypeId, Props, Attributes, never, Providers>;
|
|
|
290
290
|
*
|
|
291
291
|
* @see https://developers.cloudflare.com/waiting-room/
|
|
292
292
|
*/
|
|
293
|
-
export const WaitingRoom = Resource<WaitingRoom>(TypeId
|
|
293
|
+
export const WaitingRoom = Resource<WaitingRoom>(TypeId, {
|
|
294
|
+
aliases: ["Cloudflare.WaitingRoom"],
|
|
295
|
+
});
|
|
294
296
|
|
|
295
297
|
/**
|
|
296
298
|
* Returns true if the given value is a WaitingRoom resource.
|
|
@@ -136,7 +136,9 @@ export type HostnameContentList = Resource<
|
|
|
136
136
|
*
|
|
137
137
|
* @see https://developers.cloudflare.com/web3/
|
|
138
138
|
*/
|
|
139
|
-
export const HostnameContentList = Resource<HostnameContentList>(TypeId
|
|
139
|
+
export const HostnameContentList = Resource<HostnameContentList>(TypeId, {
|
|
140
|
+
aliases: ["Cloudflare.Web3HostnameContentList"],
|
|
141
|
+
});
|
|
140
142
|
|
|
141
143
|
/**
|
|
142
144
|
* Returns true if the given value is a HostnameContentList resource.
|
|
@@ -143,7 +143,9 @@ export type Hostname = Resource<
|
|
|
143
143
|
*
|
|
144
144
|
* @see https://developers.cloudflare.com/web3/
|
|
145
145
|
*/
|
|
146
|
-
export const Hostname = Resource<Hostname>(TypeId
|
|
146
|
+
export const Hostname = Resource<Hostname>(TypeId, {
|
|
147
|
+
aliases: ["Cloudflare.Web3Hostname"],
|
|
148
|
+
});
|
|
147
149
|
|
|
148
150
|
/**
|
|
149
151
|
* Returns true if the given value is a Hostname resource.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type * as cf from "@cloudflare/workers-types";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as Namespace from "../../Namespace.ts";
|
|
4
|
+
import type { RuntimeContext } from "../../RuntimeContext.ts";
|
|
5
|
+
import {
|
|
6
|
+
Worker,
|
|
7
|
+
WorkerExecutionContext,
|
|
8
|
+
type CachePurgeError,
|
|
9
|
+
} from "./Worker.ts";
|
|
10
|
+
|
|
11
|
+
export interface CacheOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Whether Workers Cache checks the cache before invoking the Worker.
|
|
14
|
+
* @default true
|
|
15
|
+
*/
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Share cached responses across Worker versions. By default the cache is
|
|
19
|
+
* scoped to a single version, so every deploy starts cold.
|
|
20
|
+
* @default false
|
|
21
|
+
*/
|
|
22
|
+
crossVersionCache?: boolean;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Runtime client for Workers Cache, returned by `yield* Cloudflare.cache()`.
|
|
27
|
+
*/
|
|
28
|
+
export interface CacheClient {
|
|
29
|
+
/**
|
|
30
|
+
* Purge cached responses by `Cache-Tag`, path prefix, or everything.
|
|
31
|
+
*/
|
|
32
|
+
purge(
|
|
33
|
+
options: cf.CachePurgeOptions,
|
|
34
|
+
): Effect.Effect<cf.CachePurgeResult, CachePurgeError, RuntimeContext>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Enable [Workers Cache](https://blog.cloudflare.com/workers-cache/) on the
|
|
39
|
+
* surrounding Worker and get the runtime cache client.
|
|
40
|
+
*
|
|
41
|
+
* Yielding `cache()` in an Effect-native Worker's init phase turns the cache
|
|
42
|
+
* on at deploy time (the equivalent of setting `cache: { enabled: true }` on
|
|
43
|
+
* the Worker's props) and returns a client whose `purge` drives the runtime
|
|
44
|
+
* `ctx.cache` API from your handlers.
|
|
45
|
+
*
|
|
46
|
+
* What gets cached is controlled by standard response headers —
|
|
47
|
+
* `Cache-Control` (including `stale-while-revalidate`), `Cache-Tag` for
|
|
48
|
+
* tag-based purging, and `Vary` for content negotiation.
|
|
49
|
+
*
|
|
50
|
+
* For async (non-Effect) Workers, set the `cache` prop on the Worker
|
|
51
|
+
* instead.
|
|
52
|
+
*
|
|
53
|
+
* @binding
|
|
54
|
+
* @product Workers
|
|
55
|
+
* @category Workers & Compute
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* Effect.gen(function* () {
|
|
59
|
+
* // init: enable Workers Cache on this Worker
|
|
60
|
+
* const { purge } = yield* Cloudflare.cache();
|
|
61
|
+
*
|
|
62
|
+
* return {
|
|
63
|
+
* fetch: Effect.gen(function* () {
|
|
64
|
+
* const request = yield* HttpServerRequest;
|
|
65
|
+
* if (request.url.startsWith("/invalidate")) {
|
|
66
|
+
* yield* purge({ tags: ["products"] });
|
|
67
|
+
* return HttpServerResponse.text("purged");
|
|
68
|
+
* }
|
|
69
|
+
* return HttpServerResponse.text("hello", {
|
|
70
|
+
* headers: {
|
|
71
|
+
* "Cache-Control": "public, max-age=300",
|
|
72
|
+
* "Cache-Tag": "products",
|
|
73
|
+
* },
|
|
74
|
+
* });
|
|
75
|
+
* }),
|
|
76
|
+
* };
|
|
77
|
+
* })
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export const cache = (
|
|
81
|
+
options?: CacheOptions,
|
|
82
|
+
): Effect.Effect<CacheClient, never, Worker | WorkerExecutionContext> =>
|
|
83
|
+
Effect.gen(function* () {
|
|
84
|
+
const host = yield* Worker;
|
|
85
|
+
const exec = yield* WorkerExecutionContext;
|
|
86
|
+
if (!globalThis.__ALCHEMY_RUNTIME__) {
|
|
87
|
+
yield* Namespace.push(
|
|
88
|
+
host.LogicalId,
|
|
89
|
+
host.bind("Cache", {
|
|
90
|
+
cache: {
|
|
91
|
+
enabled: options?.enabled ?? true,
|
|
92
|
+
crossVersionCache: options?.crossVersionCache,
|
|
93
|
+
},
|
|
94
|
+
}),
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
// `exec` is the init-phase deferred context; purge resolves the live
|
|
99
|
+
// per-event context from the calling handler's fiber.
|
|
100
|
+
purge: (purgeOptions) => exec.cache.purge(purgeOptions),
|
|
101
|
+
};
|
|
102
|
+
});
|