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
|
@@ -11,7 +11,9 @@ import { makeRequestHandler } from "./HttpServer.ts";
|
|
|
11
11
|
import {
|
|
12
12
|
ExportedHandlerMethods,
|
|
13
13
|
WorkerEnvironment,
|
|
14
|
+
WorkerExecutionContext,
|
|
14
15
|
WorkerTypeId,
|
|
16
|
+
deferredExecutionContext,
|
|
15
17
|
type WorkerEvent,
|
|
16
18
|
} from "./Worker.ts";
|
|
17
19
|
import type { WorkflowExport } from "../Workflows/Workflow.ts";
|
|
@@ -108,7 +110,13 @@ export const makeWorkerRuntimeContext = (id: string): WorkerRuntimeContext => {
|
|
|
108
110
|
Effect.sync(() => {
|
|
109
111
|
exports[name] = value;
|
|
110
112
|
}),
|
|
111
|
-
planServices: Layer.
|
|
113
|
+
planServices: Layer.mergeAll(
|
|
114
|
+
Layer.succeed(WorkerEnvironment, {}),
|
|
115
|
+
// Lets the init closure `yield*` WorkerExecutionContext during plan;
|
|
116
|
+
// its RuntimeContext-colored methods can't run until a real handler
|
|
117
|
+
// provides the live per-event context.
|
|
118
|
+
Layer.succeed(WorkerExecutionContext, deferredExecutionContext),
|
|
119
|
+
),
|
|
112
120
|
exports: Effect.gen(function* () {
|
|
113
121
|
const handlers = yield* Effect.all(listeners, {
|
|
114
122
|
concurrency: "unbounded",
|
|
@@ -125,12 +133,25 @@ export const makeWorkerRuntimeContext = (id: string): WorkerRuntimeContext => {
|
|
|
125
133
|
env,
|
|
126
134
|
context,
|
|
127
135
|
};
|
|
136
|
+
const effects: Effect.Effect<unknown>[] = [];
|
|
128
137
|
for (const handler of handlers) {
|
|
129
138
|
const eff = handler(event);
|
|
130
139
|
if (Effect.isEffect(eff)) {
|
|
131
|
-
|
|
140
|
+
effects.push(eff);
|
|
132
141
|
}
|
|
133
142
|
}
|
|
143
|
+
if (effects.length === 1) {
|
|
144
|
+
return [effects[0], services];
|
|
145
|
+
}
|
|
146
|
+
if (effects.length > 1) {
|
|
147
|
+
return [
|
|
148
|
+
Effect.all(effects, {
|
|
149
|
+
concurrency: "unbounded",
|
|
150
|
+
discard: true,
|
|
151
|
+
}),
|
|
152
|
+
services,
|
|
153
|
+
];
|
|
154
|
+
}
|
|
134
155
|
return [
|
|
135
156
|
Effect.die(
|
|
136
157
|
new Error(`No event handler found for event type '${type}'`),
|
|
@@ -2,6 +2,7 @@ export * from "./AccountSetting.ts";
|
|
|
2
2
|
export * from "./Assets.ts";
|
|
3
3
|
export * from "./Browser.ts";
|
|
4
4
|
export * from "./BrowserBinding.ts";
|
|
5
|
+
export * from "./Cache.ts";
|
|
5
6
|
export * from "./ConfigProvider.ts";
|
|
6
7
|
export * from "./CronEventSource.ts";
|
|
7
8
|
export * from "./DurableObject.ts";
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import * as wfp from "@distilled.cloud/cloudflare/workers-for-platforms";
|
|
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
|
|
|
@@ -152,8 +151,7 @@ export const DispatchNamespace = Resource<DispatchNamespace>(TypeId);
|
|
|
152
151
|
*/
|
|
153
152
|
export const isDispatchNamespace = (
|
|
154
153
|
value: unknown,
|
|
155
|
-
): value is DispatchNamespace =>
|
|
156
|
-
Predicate.hasProperty(value, "Type") && value.Type === TypeId;
|
|
154
|
+
): value is DispatchNamespace => isResourceOfType(value, TypeId);
|
|
157
155
|
|
|
158
156
|
export const DispatchNamespaceProvider = () =>
|
|
159
157
|
Provider.succeed(DispatchNamespace, {
|
|
@@ -36,19 +36,119 @@ export class WorkflowEvent extends Context.Service<
|
|
|
36
36
|
payload: unknown;
|
|
37
37
|
timestamp: Date;
|
|
38
38
|
instanceId: string;
|
|
39
|
+
workflowName: string;
|
|
40
|
+
schedule?: WorkflowCronSchedule;
|
|
39
41
|
}
|
|
40
42
|
>()("Cloudflare.Workflows.WorkflowEvent") {}
|
|
41
43
|
|
|
44
|
+
export interface WorkflowCronSchedule {
|
|
45
|
+
cron: string;
|
|
46
|
+
scheduledTime: number;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export type WorkflowBackoff = "constant" | "linear" | "exponential";
|
|
50
|
+
|
|
51
|
+
export interface WorkflowStepConfig {
|
|
52
|
+
retries?: {
|
|
53
|
+
limit: number;
|
|
54
|
+
delay: string | number;
|
|
55
|
+
backoff?: WorkflowBackoff;
|
|
56
|
+
};
|
|
57
|
+
timeout?: string | number;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface WorkflowStepContextData {
|
|
61
|
+
step: {
|
|
62
|
+
name: string;
|
|
63
|
+
count: number;
|
|
64
|
+
};
|
|
65
|
+
attempt: number;
|
|
66
|
+
config: WorkflowStepConfig;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Runtime information for the current `task` attempt.
|
|
71
|
+
*/
|
|
72
|
+
export class WorkflowStepContext extends Context.Service<
|
|
73
|
+
WorkflowStepContext,
|
|
74
|
+
WorkflowStepContextData
|
|
75
|
+
>()("Cloudflare.WorkflowStepContext") {}
|
|
76
|
+
|
|
77
|
+
export interface WorkflowRollbackContext<Output = unknown> {
|
|
78
|
+
error: Error;
|
|
79
|
+
output: Output | undefined;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface WorkflowRollbackOptions<Output = unknown, R = never> {
|
|
83
|
+
rollback: (
|
|
84
|
+
context: WorkflowRollbackContext<Output>,
|
|
85
|
+
) => Effect.Effect<void, never, R>;
|
|
86
|
+
rollbackConfig?: WorkflowStepConfig;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Optional configuration for a `task` step: retry policy, timeout, and a
|
|
91
|
+
* rollback handler with its own retry config.
|
|
92
|
+
*/
|
|
93
|
+
export interface WorkflowTaskConfig<
|
|
94
|
+
Output = unknown,
|
|
95
|
+
RollbackReq = never,
|
|
96
|
+
> extends WorkflowStepConfig {
|
|
97
|
+
rollback?: (
|
|
98
|
+
context: WorkflowRollbackContext<Output>,
|
|
99
|
+
) => Effect.Effect<void, never, RollbackReq>;
|
|
100
|
+
rollbackConfig?: WorkflowStepConfig;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Internal step descriptor passed from `task` to the bridge. Bundles the step
|
|
105
|
+
* name and Effect together with the `WorkflowTaskConfig` fields.
|
|
106
|
+
*/
|
|
107
|
+
export interface WorkflowTaskOptions<
|
|
108
|
+
Output = unknown,
|
|
109
|
+
R = never,
|
|
110
|
+
RollbackReq = never,
|
|
111
|
+
> extends WorkflowTaskConfig<Output, RollbackReq> {
|
|
112
|
+
name: string;
|
|
113
|
+
effect: Effect.Effect<Output, never, R>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export interface WorkflowWaitForEventOptions {
|
|
117
|
+
type: string;
|
|
118
|
+
timeout?: string | number;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* The event delivered to a `waitForEvent` step. Mirrors the native
|
|
123
|
+
* `WorkflowStepEvent` shape from `cloudflare:workers` 1:1.
|
|
124
|
+
*/
|
|
125
|
+
export interface WorkflowStepEvent<Payload = unknown> {
|
|
126
|
+
payload: Payload;
|
|
127
|
+
timestamp: Date;
|
|
128
|
+
type: string;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
type ExcludeWorkflowStepContext<R> = R extends {
|
|
132
|
+
readonly key: "Cloudflare.WorkflowStepContext";
|
|
133
|
+
}
|
|
134
|
+
? never
|
|
135
|
+
: R;
|
|
136
|
+
|
|
42
137
|
/**
|
|
43
138
|
* Internal service that wraps the Cloudflare `WorkflowStep` object.
|
|
44
|
-
* Not accessed directly by users -- use `task`, `sleep`, `sleepUntil
|
|
139
|
+
* Not accessed directly by users -- use `task`, `sleep`, `sleepUntil`, and
|
|
140
|
+
* `waitForEvent` instead.
|
|
45
141
|
*/
|
|
46
142
|
export class WorkflowStep extends Context.Service<
|
|
47
143
|
WorkflowStep,
|
|
48
144
|
{
|
|
49
|
-
do<T>(
|
|
145
|
+
do<T>(options: WorkflowTaskOptions<T, any, any>): Effect.Effect<T>;
|
|
50
146
|
sleep(name: string, duration: string | number): Effect.Effect<void>;
|
|
51
147
|
sleepUntil(name: string, timestamp: Date | number): Effect.Effect<void>;
|
|
148
|
+
waitForEvent<T>(
|
|
149
|
+
name: string,
|
|
150
|
+
options: WorkflowWaitForEventOptions,
|
|
151
|
+
): Effect.Effect<WorkflowStepEvent<T>>;
|
|
52
152
|
}
|
|
53
153
|
>()("Cloudflare.Workflows.WorkflowStep") {}
|
|
54
154
|
|
|
@@ -65,16 +165,35 @@ export class WorkflowStep extends Context.Service<
|
|
|
65
165
|
* binding like `kv.put` / `kv.get`) are threaded through automatically by
|
|
66
166
|
* capturing the surrounding workflow body's context and providing it to
|
|
67
167
|
* the inner effect before it runs inside `step.do`.
|
|
168
|
+
*
|
|
169
|
+
* The step name comes first, followed by the Effect. Retry config, timeout,
|
|
170
|
+
* and a rollback handler can be passed in the optional third `options` arg.
|
|
68
171
|
*/
|
|
69
|
-
export
|
|
172
|
+
export function task<T, R = never, RollbackReq = never>(
|
|
70
173
|
name: string,
|
|
71
174
|
effect: Effect.Effect<T, never, R>,
|
|
72
|
-
|
|
73
|
-
|
|
175
|
+
options?: WorkflowTaskConfig<T, RollbackReq>,
|
|
176
|
+
): Effect.Effect<
|
|
177
|
+
T,
|
|
178
|
+
never,
|
|
179
|
+
WorkflowStep | ExcludeWorkflowStepContext<R | RollbackReq>
|
|
180
|
+
> {
|
|
181
|
+
return Effect.gen(function* () {
|
|
74
182
|
const step = yield* WorkflowStep;
|
|
75
|
-
const context =
|
|
76
|
-
|
|
183
|
+
const context =
|
|
184
|
+
yield* Effect.context<ExcludeWorkflowStepContext<R | RollbackReq>>();
|
|
185
|
+
const rollbackEffect = options?.rollback;
|
|
186
|
+
return yield* step.do({
|
|
187
|
+
...options,
|
|
188
|
+
name,
|
|
189
|
+
effect: effect.pipe(Effect.provide(context)),
|
|
190
|
+
rollback: rollbackEffect
|
|
191
|
+
? (rollbackContext: WorkflowRollbackContext<T>) =>
|
|
192
|
+
rollbackEffect(rollbackContext).pipe(Effect.provide(context))
|
|
193
|
+
: undefined,
|
|
194
|
+
} as WorkflowTaskOptions<T, any, any>);
|
|
77
195
|
});
|
|
196
|
+
}
|
|
78
197
|
|
|
79
198
|
/**
|
|
80
199
|
* Pause the workflow for the given duration.
|
|
@@ -83,10 +202,10 @@ export const sleep = (
|
|
|
83
202
|
name: string,
|
|
84
203
|
duration: string | number,
|
|
85
204
|
): Effect.Effect<void, never, WorkflowStep> =>
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
);
|
|
205
|
+
Effect.gen(function* () {
|
|
206
|
+
const step = yield* WorkflowStep;
|
|
207
|
+
yield* step.sleep(name, duration);
|
|
208
|
+
}).pipe(Effect.orDie);
|
|
90
209
|
|
|
91
210
|
/**
|
|
92
211
|
* Pause the workflow until the given timestamp.
|
|
@@ -95,10 +214,25 @@ export const sleepUntil = (
|
|
|
95
214
|
name: string,
|
|
96
215
|
timestamp: Date | number,
|
|
97
216
|
): Effect.Effect<void, never, WorkflowStep> =>
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
);
|
|
217
|
+
Effect.gen(function* () {
|
|
218
|
+
const step = yield* WorkflowStep;
|
|
219
|
+
yield* step.sleepUntil(name, timestamp);
|
|
220
|
+
}).pipe(Effect.orDie);
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Pause the workflow until an external event is delivered with
|
|
224
|
+
* `WorkflowInstance.sendEvent`. Resolves with the full
|
|
225
|
+
* {@link WorkflowStepEvent} (`{ payload, timestamp, type }`), exactly like
|
|
226
|
+
* the native `step.waitForEvent`.
|
|
227
|
+
*/
|
|
228
|
+
export const waitForEvent = <T = unknown>(
|
|
229
|
+
name: string,
|
|
230
|
+
options: WorkflowWaitForEventOptions,
|
|
231
|
+
): Effect.Effect<WorkflowStepEvent<T>, never, WorkflowStep> =>
|
|
232
|
+
Effect.gen(function* () {
|
|
233
|
+
const step = yield* WorkflowStep;
|
|
234
|
+
return yield* step.waitForEvent<T>(name, options);
|
|
235
|
+
}).pipe(Effect.orDie);
|
|
102
236
|
|
|
103
237
|
/**
|
|
104
238
|
* The services available inside a workflow run body.
|
|
@@ -216,22 +350,75 @@ export const isWorkflowBinding = (binding: {
|
|
|
216
350
|
export interface WorkflowHandle<Input = unknown, Result = unknown> {
|
|
217
351
|
Type: TypeId;
|
|
218
352
|
name: string;
|
|
219
|
-
|
|
353
|
+
/**
|
|
354
|
+
* Start a workflow instance. Pass payload through `params`; omit `id` to let
|
|
355
|
+
* Cloudflare generate an instance ID.
|
|
356
|
+
*/
|
|
357
|
+
create(
|
|
358
|
+
options?: WorkflowInstanceCreateOptions<Input>,
|
|
359
|
+
): Effect.Effect<WorkflowInstance<Result>>;
|
|
360
|
+
createBatch(
|
|
361
|
+
batch: WorkflowInstanceCreateOptions<Input>[],
|
|
362
|
+
): Effect.Effect<WorkflowInstance<Result>[]>;
|
|
220
363
|
get(instanceId: string): Effect.Effect<WorkflowInstance<Result>>;
|
|
221
364
|
}
|
|
222
365
|
|
|
366
|
+
/** Options for starting a workflow instance. */
|
|
367
|
+
export interface WorkflowInstanceCreateOptions<Input = unknown> {
|
|
368
|
+
id?: string;
|
|
369
|
+
params?: Input;
|
|
370
|
+
retention?: WorkflowInstanceRetention;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
export interface WorkflowInstanceRetention {
|
|
374
|
+
successRetention?: string | number;
|
|
375
|
+
errorRetention?: string | number;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/** Handle for a single Cloudflare workflow instance. */
|
|
223
379
|
export interface WorkflowInstance<Result = unknown> {
|
|
224
380
|
id: string;
|
|
225
381
|
status(): Effect.Effect<WorkflowInstanceStatus<Result>>;
|
|
226
382
|
pause(): Effect.Effect<void>;
|
|
227
383
|
resume(): Effect.Effect<void>;
|
|
384
|
+
restart(options?: WorkflowInstanceRestartOptions): Effect.Effect<void>;
|
|
228
385
|
terminate(): Effect.Effect<void>;
|
|
386
|
+
sendEvent<Event = unknown>(
|
|
387
|
+
event: WorkflowInstanceEvent<Event>,
|
|
388
|
+
): Effect.Effect<void>;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
export interface WorkflowInstanceRestartOptions {
|
|
392
|
+
from?: {
|
|
393
|
+
name: string;
|
|
394
|
+
count?: number;
|
|
395
|
+
type?: "do" | "sleep" | "waitForEvent";
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
export interface WorkflowInstanceEvent<Payload = unknown> {
|
|
400
|
+
type: string;
|
|
401
|
+
payload?: Payload;
|
|
229
402
|
}
|
|
230
403
|
|
|
231
404
|
export interface WorkflowInstanceStatus<Result = unknown> {
|
|
232
|
-
status:
|
|
405
|
+
status:
|
|
406
|
+
| "queued"
|
|
407
|
+
| "running"
|
|
408
|
+
| "paused"
|
|
409
|
+
| "errored"
|
|
410
|
+
| "terminated"
|
|
411
|
+
| "complete"
|
|
412
|
+
| "waiting"
|
|
413
|
+
| "waitingForPause"
|
|
414
|
+
| "unknown"
|
|
415
|
+
| (string & {});
|
|
233
416
|
output?: Result;
|
|
234
417
|
error?: { name: string; message: string } | null;
|
|
418
|
+
rollback?: {
|
|
419
|
+
outcome: "complete" | "failed";
|
|
420
|
+
error: { name: string; message: string } | null;
|
|
421
|
+
} | null;
|
|
235
422
|
}
|
|
236
423
|
|
|
237
424
|
export interface WorkflowClass extends Effect.Effect<
|
|
@@ -278,7 +465,8 @@ export class WorkflowScope extends Context.Service<
|
|
|
278
465
|
* Objects. The outer `Effect.gen` resolves shared dependencies. The inner
|
|
279
466
|
* `Effect.fn` is the workflow body — a function from a typed `input`
|
|
280
467
|
* payload to an Effect that runs steps using `task`, `sleep`, and
|
|
281
|
-
* `sleepUntil`.
|
|
468
|
+
* `sleepUntil`. `task` takes the step name and Effect, plus an optional
|
|
469
|
+
* config object for retries, timeout, and a rollback handler.
|
|
282
470
|
*
|
|
283
471
|
* ```typescript
|
|
284
472
|
* Effect.gen(function* () {
|
|
@@ -320,11 +508,42 @@ export class WorkflowScope extends Context.Service<
|
|
|
320
508
|
* );
|
|
321
509
|
* ```
|
|
322
510
|
*
|
|
511
|
+
* @example Configuring retries and reading step context
|
|
512
|
+
* ```typescript
|
|
513
|
+
* const result = yield* Cloudflare.Workflows.task(
|
|
514
|
+
* "call-api",
|
|
515
|
+
* Effect.gen(function* () {
|
|
516
|
+
* const context = yield* Cloudflare.Workflows.WorkflowStepContext;
|
|
517
|
+
* return { attempt: context.attempt };
|
|
518
|
+
* }),
|
|
519
|
+
* { retries: { limit: 3, delay: "5 seconds", backoff: "linear" } },
|
|
520
|
+
* );
|
|
521
|
+
* ```
|
|
522
|
+
*
|
|
523
|
+
* @example Registering rollback
|
|
524
|
+
* ```typescript
|
|
525
|
+
* yield* Cloudflare.Workflows.task("reserve-inventory", reserveInventory, {
|
|
526
|
+
* rollback: ({ output }) =>
|
|
527
|
+
* output ? releaseInventory(output.reservationId) : Effect.void,
|
|
528
|
+
* rollbackConfig: { retries: { limit: 3, delay: "10 seconds" } },
|
|
529
|
+
* });
|
|
530
|
+
* ```
|
|
531
|
+
*
|
|
323
532
|
* @example Sleeping between steps
|
|
324
533
|
* ```typescript
|
|
325
534
|
* yield* Cloudflare.Workflows.sleep("cooldown", "30 seconds");
|
|
326
535
|
* ```
|
|
327
536
|
*
|
|
537
|
+
* @example Waiting for an external event
|
|
538
|
+
* ```typescript
|
|
539
|
+
* const event = yield* Cloudflare.Workflows.waitForEvent<{ approved: boolean }>(
|
|
540
|
+
* "approval",
|
|
541
|
+
* { type: "approval", timeout: "1 day" },
|
|
542
|
+
* );
|
|
543
|
+
* // Same shape as the native step.waitForEvent result:
|
|
544
|
+
* event.payload.approved;
|
|
545
|
+
* ```
|
|
546
|
+
*
|
|
328
547
|
* @example Accessing env bindings inside a task
|
|
329
548
|
* Bind a resource (e.g. `Namespace`, `Bucket`) in the workflow's
|
|
330
549
|
* outer init phase to get a typed Effect-native client, then use it
|
|
@@ -354,10 +573,31 @@ export class WorkflowScope extends Context.Service<
|
|
|
354
573
|
* ```
|
|
355
574
|
*
|
|
356
575
|
* @section Starting and Monitoring Instances
|
|
576
|
+
* `create` mirrors Cloudflare's native Workflow API: pass workflow input in
|
|
577
|
+
* `params`, pass `id` only when you need a deterministic instance ID, and omit
|
|
578
|
+
* `id` to let Cloudflare generate one.
|
|
579
|
+
*
|
|
357
580
|
* @example Creating an instance from a Worker
|
|
358
581
|
* ```typescript
|
|
359
582
|
* const workflow = yield* MyWorkflow;
|
|
360
|
-
* const instance = yield* workflow.create({ orderId: "abc" });
|
|
583
|
+
* const instance = yield* workflow.create({ params: { orderId: "abc" } });
|
|
584
|
+
* ```
|
|
585
|
+
*
|
|
586
|
+
* @example Creating an instance with id and retention
|
|
587
|
+
* ```typescript
|
|
588
|
+
* const instance = yield* workflow.create({
|
|
589
|
+
* id: "order-abc",
|
|
590
|
+
* params: { orderId: "abc" },
|
|
591
|
+
* retention: { successRetention: "1 day", errorRetention: "7 days" },
|
|
592
|
+
* });
|
|
593
|
+
* ```
|
|
594
|
+
*
|
|
595
|
+
* @example Creating a batch
|
|
596
|
+
* ```typescript
|
|
597
|
+
* const instances = yield* workflow.createBatch([
|
|
598
|
+
* { id: "order-a", params: { orderId: "a" } },
|
|
599
|
+
* { id: "order-b", params: { orderId: "b" } },
|
|
600
|
+
* ]);
|
|
361
601
|
* ```
|
|
362
602
|
*
|
|
363
603
|
* @example Checking instance status
|
|
@@ -367,6 +607,13 @@ export class WorkflowScope extends Context.Service<
|
|
|
367
607
|
* const status = yield* handle.status();
|
|
368
608
|
* ```
|
|
369
609
|
*
|
|
610
|
+
* @example Sending events and restarting instances
|
|
611
|
+
* ```typescript
|
|
612
|
+
* const instance = yield* workflow.get(instanceId);
|
|
613
|
+
* yield* instance.sendEvent({ type: "approval", payload: { approved: true } });
|
|
614
|
+
* yield* instance.restart({ from: { name: "approval", type: "waitForEvent" } });
|
|
615
|
+
* ```
|
|
616
|
+
*
|
|
370
617
|
* @section Triggering from a Worker
|
|
371
618
|
* Wire the workflow into HTTP routes so callers can fire instances
|
|
372
619
|
* and poll for completion.
|
|
@@ -382,7 +629,7 @@ export class WorkflowScope extends Context.Service<
|
|
|
382
629
|
*
|
|
383
630
|
* if (request.url.startsWith("/workflow/start/")) {
|
|
384
631
|
* const id = request.url.split("/").pop()!;
|
|
385
|
-
* const instance = yield* notifier.create({ id });
|
|
632
|
+
* const instance = yield* notifier.create({ params: { orderId: id } });
|
|
386
633
|
* return HttpServerResponse.json({ instanceId: instance.id });
|
|
387
634
|
* }
|
|
388
635
|
*
|
|
@@ -462,9 +709,8 @@ export class WorkflowScope extends Context.Service<
|
|
|
462
709
|
* ```
|
|
463
710
|
*
|
|
464
711
|
* @section Testing Workflows
|
|
465
|
-
* Workflows run asynchronously, so tests start an instance and
|
|
466
|
-
*
|
|
467
|
-
* `alchemy/Test/Bun`:
|
|
712
|
+
* Workflows run asynchronously, so tests start an instance and poll until it
|
|
713
|
+
* reaches a terminal status. Keep polling bounded with `Effect.repeat`.
|
|
468
714
|
*
|
|
469
715
|
* @example Polling for workflow completion
|
|
470
716
|
* ```typescript
|
|
@@ -476,20 +722,20 @@ export class WorkflowScope extends Context.Service<
|
|
|
476
722
|
* const start = yield* HttpClient.post(`${url}/workflow/start/x`);
|
|
477
723
|
* const { instanceId } = (yield* start.json) as { instanceId: string };
|
|
478
724
|
*
|
|
479
|
-
*
|
|
480
|
-
*
|
|
481
|
-
*
|
|
482
|
-
*
|
|
483
|
-
*
|
|
484
|
-
*
|
|
485
|
-
*
|
|
486
|
-
*
|
|
487
|
-
*
|
|
488
|
-
*
|
|
489
|
-
*
|
|
490
|
-
*
|
|
725
|
+
* const status = yield* HttpClient.get(
|
|
726
|
+
* `${url}/workflow/status/${instanceId}`,
|
|
727
|
+
* ).pipe(
|
|
728
|
+
* Effect.flatMap((res) => res.json),
|
|
729
|
+
* Effect.map((json) => json as { status: string }),
|
|
730
|
+
* Effect.repeat({
|
|
731
|
+
* schedule: Schedule.spaced("2 seconds"),
|
|
732
|
+
* until: (status) =>
|
|
733
|
+
* status.status === "complete" || status.status === "errored",
|
|
734
|
+
* times: 30,
|
|
735
|
+
* }),
|
|
736
|
+
* );
|
|
491
737
|
*
|
|
492
|
-
* expect(status
|
|
738
|
+
* expect(status.status).toBe("complete");
|
|
493
739
|
* }),
|
|
494
740
|
* { timeout: 120_000 },
|
|
495
741
|
* );
|
|
@@ -563,11 +809,18 @@ export const Workflow: WorkflowClass = taggedFunction(WorkflowScope, ((
|
|
|
563
809
|
const self: WorkflowHandle<any, any> = {
|
|
564
810
|
Type: TypeId,
|
|
565
811
|
name,
|
|
566
|
-
create: (
|
|
567
|
-
Effect.tryPromise(() => binding.create(
|
|
812
|
+
create: (options?: WorkflowInstanceCreateOptions<any>) =>
|
|
813
|
+
Effect.tryPromise(() => binding.create(options)).pipe(
|
|
568
814
|
Effect.map(wrapInstance),
|
|
569
815
|
Effect.orDie,
|
|
570
816
|
),
|
|
817
|
+
createBatch: (batch: WorkflowInstanceCreateOptions<any>[]) =>
|
|
818
|
+
Effect.tryPromise(
|
|
819
|
+
() => binding.createBatch(batch) as Promise<any[]>,
|
|
820
|
+
).pipe(
|
|
821
|
+
Effect.map((instances: any[]) => instances.map(wrapInstance)),
|
|
822
|
+
Effect.orDie,
|
|
823
|
+
),
|
|
571
824
|
get: (instanceId: string) =>
|
|
572
825
|
Effect.tryPromise(() => binding.get(instanceId)).pipe(
|
|
573
826
|
Effect.map(wrapInstance),
|
|
@@ -725,10 +978,15 @@ const wrapInstance = <Result>(raw: any): WorkflowInstance<Result> => ({
|
|
|
725
978
|
status: s.status as string,
|
|
726
979
|
output: s.output as Result,
|
|
727
980
|
error: s.error,
|
|
981
|
+
rollback: s.rollback,
|
|
728
982
|
})),
|
|
729
983
|
Effect.orDie,
|
|
730
984
|
),
|
|
731
985
|
pause: () => Effect.tryPromise(() => raw.pause()).pipe(Effect.orDie),
|
|
732
986
|
resume: () => Effect.tryPromise(() => raw.resume()).pipe(Effect.orDie),
|
|
987
|
+
restart: (options?: WorkflowInstanceRestartOptions) =>
|
|
988
|
+
Effect.tryPromise(() => raw.restart(options)).pipe(Effect.orDie),
|
|
733
989
|
terminate: () => Effect.tryPromise(() => raw.terminate()).pipe(Effect.orDie),
|
|
990
|
+
sendEvent: <Event = unknown>(event: WorkflowInstanceEvent<Event>) =>
|
|
991
|
+
Effect.tryPromise(() => raw.sendEvent(event)).pipe(Effect.orDie),
|
|
734
992
|
});
|
|
@@ -11,6 +11,10 @@ import {
|
|
|
11
11
|
type WorkflowExport,
|
|
12
12
|
type WorkflowImpl,
|
|
13
13
|
WorkflowStep,
|
|
14
|
+
WorkflowStepContext,
|
|
15
|
+
type WorkflowStepConfig,
|
|
16
|
+
type WorkflowStepEvent,
|
|
17
|
+
type WorkflowTaskOptions,
|
|
14
18
|
} from "./Workflow.ts";
|
|
15
19
|
|
|
16
20
|
/**
|
|
@@ -105,29 +109,75 @@ export const makeWorkflowBridge =
|
|
|
105
109
|
}
|
|
106
110
|
};
|
|
107
111
|
|
|
108
|
-
const wrapWorkflowEvent = (
|
|
109
|
-
event: any,
|
|
110
|
-
): { payload: unknown; timestamp: Date; instanceId: string } => ({
|
|
112
|
+
const wrapWorkflowEvent = (event: any): WorkflowEventService["Service"] => ({
|
|
111
113
|
payload: event.payload,
|
|
112
114
|
timestamp:
|
|
113
115
|
event.timestamp instanceof Date
|
|
114
116
|
? event.timestamp
|
|
115
117
|
: new Date(event.timestamp),
|
|
116
118
|
instanceId: event.instanceId ?? "",
|
|
119
|
+
workflowName: event.workflowName ?? "",
|
|
120
|
+
schedule: event.schedule,
|
|
117
121
|
});
|
|
118
122
|
|
|
119
123
|
const wrapWorkflowStep = (step: any): WorkflowStep["Service"] => ({
|
|
120
|
-
do: <T>(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
+
do: <T>(options: WorkflowTaskOptions<T, any, any>): Effect.Effect<T> => {
|
|
125
|
+
const { name } = options;
|
|
126
|
+
// The surrounding body context is already provided in `task`; the bridge
|
|
127
|
+
// supplies `WorkflowStepContext` and runs the step to completion, so the
|
|
128
|
+
// effect is fully satisfied (R = never) at this boundary.
|
|
129
|
+
const effect = options.effect as Effect.Effect<
|
|
130
|
+
T,
|
|
131
|
+
never,
|
|
132
|
+
WorkflowStepContext
|
|
133
|
+
>;
|
|
134
|
+
const config = toWorkflowStepConfig(options);
|
|
135
|
+
const rollbackEffect = options.rollback;
|
|
136
|
+
const callback = (context: any) =>
|
|
137
|
+
Effect.runPromise(
|
|
138
|
+
effect.pipe(
|
|
139
|
+
Effect.provideService(WorkflowStepContext, {
|
|
140
|
+
step: context.step,
|
|
141
|
+
attempt: context.attempt,
|
|
142
|
+
config: context.config,
|
|
143
|
+
}),
|
|
144
|
+
),
|
|
145
|
+
);
|
|
146
|
+
const rollback = rollbackEffect
|
|
147
|
+
? {
|
|
148
|
+
rollback: (context: any) =>
|
|
149
|
+
Effect.runPromise(
|
|
150
|
+
rollbackEffect({
|
|
151
|
+
error: context.error,
|
|
152
|
+
output: context.output,
|
|
153
|
+
}) as Effect.Effect<void>,
|
|
154
|
+
),
|
|
155
|
+
rollbackConfig: options.rollbackConfig,
|
|
156
|
+
}
|
|
157
|
+
: undefined;
|
|
158
|
+
return Effect.tryPromise(() => {
|
|
159
|
+
if (config && rollback) return step.do(name, config, callback, rollback);
|
|
160
|
+
if (config) return step.do(name, config, callback);
|
|
161
|
+
if (rollback) return step.do(name, callback, rollback);
|
|
162
|
+
return step.do(name, callback);
|
|
163
|
+
});
|
|
164
|
+
},
|
|
124
165
|
sleep: (name: string, duration: string | number): Effect.Effect<void> =>
|
|
125
166
|
Effect.tryPromise(() => step.sleep(name, duration)),
|
|
126
167
|
sleepUntil: (name: string, timestamp: Date | number): Effect.Effect<void> =>
|
|
127
|
-
Effect.tryPromise(() =>
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
168
|
+
Effect.tryPromise(() => step.sleepUntil(name, timestamp)),
|
|
169
|
+
waitForEvent: <T>(
|
|
170
|
+
name: string,
|
|
171
|
+
options: any,
|
|
172
|
+
): Effect.Effect<WorkflowStepEvent<T>> =>
|
|
173
|
+
Effect.tryPromise(
|
|
174
|
+
() => step.waitForEvent(name, options) as Promise<WorkflowStepEvent<T>>,
|
|
132
175
|
),
|
|
133
176
|
});
|
|
177
|
+
|
|
178
|
+
const toWorkflowStepConfig = (
|
|
179
|
+
options: WorkflowTaskOptions<any, any, any>,
|
|
180
|
+
): WorkflowStepConfig | undefined => {
|
|
181
|
+
if (!options.retries && !options.timeout) return undefined;
|
|
182
|
+
return { retries: options.retries, timeout: options.timeout };
|
|
183
|
+
};
|
|
@@ -185,7 +185,9 @@ export type ConfigAttributes = {
|
|
|
185
185
|
* ```
|
|
186
186
|
*/
|
|
187
187
|
export const Config = Object.assign(
|
|
188
|
-
Resource<Config>("Cloudflare.Zaraz.Config"
|
|
188
|
+
Resource<Config>("Cloudflare.Zaraz.Config", {
|
|
189
|
+
aliases: ["Cloudflare.ZarazConfig"],
|
|
190
|
+
}),
|
|
189
191
|
{
|
|
190
192
|
/**
|
|
191
193
|
* Define a type-only contract for the events sent through this Zaraz config.
|
|
@@ -251,7 +253,10 @@ export const ConfigProvider = () =>
|
|
|
251
253
|
}),
|
|
252
254
|
read: Effect.fn(function* ({ olds, output }) {
|
|
253
255
|
const zoneId =
|
|
254
|
-
|
|
256
|
+
// `olds.zone` may be `undefined` when a `creating` row was persisted
|
|
257
|
+
// before upstream Outputs resolved — report "not found" then.
|
|
258
|
+
output?.zoneId ??
|
|
259
|
+
(olds?.zone !== undefined ? yield* resolve(olds.zone) : undefined);
|
|
255
260
|
if (!zoneId) return undefined;
|
|
256
261
|
return yield* observe(zoneId);
|
|
257
262
|
}),
|