alchemy 2.0.0-beta.57 → 2.0.0-beta.58
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/README.md +1 -1
- package/bin/exec.js +68 -49
- package/bin/exec.js.map +1 -1
- package/lib/AI/Agent.d.ts +30 -0
- package/lib/AI/Agent.d.ts.map +1 -0
- package/lib/AI/Agent.js +14 -0
- package/lib/AI/Agent.js.map +1 -0
- package/lib/AI/Parameter.d.ts +19 -0
- package/lib/AI/Parameter.d.ts.map +1 -0
- package/lib/AI/Parameter.js +12 -0
- package/lib/AI/Parameter.js.map +1 -0
- package/lib/AI/Tool.d.ts +37 -0
- package/lib/AI/Tool.d.ts.map +1 -0
- package/lib/AI/Tool.js +11 -0
- package/lib/AI/Tool.js.map +1 -0
- package/lib/AI/index.d.ts +4 -0
- package/lib/AI/index.d.ts.map +1 -0
- package/lib/AI/index.js +4 -0
- package/lib/AI/index.js.map +1 -0
- package/lib/AWS/ACM/Certificate.d.ts +4 -0
- package/lib/AWS/ACM/Certificate.d.ts.map +1 -1
- package/lib/AWS/ACM/Certificate.js +18 -11
- package/lib/AWS/ACM/Certificate.js.map +1 -1
- package/lib/AWS/Assets.js +1 -1
- package/lib/AWS/Assets.js.map +1 -1
- package/lib/AWS/AuthProvider.js +3 -3
- package/lib/AWS/AuthProvider.js.map +1 -1
- package/lib/AWS/AutoScaling/LaunchTemplate.js +1 -1
- package/lib/AWS/AutoScaling/LaunchTemplate.js.map +1 -1
- package/lib/AWS/CloudFront/Distribution.js +1 -1
- package/lib/AWS/CloudFront/Distribution.js.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarmContributors.d.ts +4 -3
- package/lib/AWS/CloudWatch/DescribeAlarmContributors.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarmContributors.js.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarmHistory.d.ts +4 -3
- package/lib/AWS/CloudWatch/DescribeAlarmHistory.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarmHistory.js.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarms.d.ts +4 -3
- package/lib/AWS/CloudWatch/DescribeAlarms.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarms.js.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarmsForMetric.d.ts +4 -3
- package/lib/AWS/CloudWatch/DescribeAlarmsForMetric.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAlarmsForMetric.js.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAnomalyDetectors.d.ts +4 -3
- package/lib/AWS/CloudWatch/DescribeAnomalyDetectors.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DescribeAnomalyDetectors.js.map +1 -1
- package/lib/AWS/CloudWatch/DescribeInsightRules.d.ts +4 -3
- package/lib/AWS/CloudWatch/DescribeInsightRules.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DescribeInsightRules.js.map +1 -1
- package/lib/AWS/CloudWatch/DisableAlarmActions.d.ts +4 -3
- package/lib/AWS/CloudWatch/DisableAlarmActions.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DisableAlarmActions.js.map +1 -1
- package/lib/AWS/CloudWatch/DisableInsightRules.d.ts +4 -3
- package/lib/AWS/CloudWatch/DisableInsightRules.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/DisableInsightRules.js.map +1 -1
- package/lib/AWS/CloudWatch/EnableAlarmActions.d.ts +4 -3
- package/lib/AWS/CloudWatch/EnableAlarmActions.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/EnableAlarmActions.js.map +1 -1
- package/lib/AWS/CloudWatch/GetAlarmMuteRule.d.ts +4 -3
- package/lib/AWS/CloudWatch/GetAlarmMuteRule.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetAlarmMuteRule.js.map +1 -1
- package/lib/AWS/CloudWatch/GetDashboard.d.ts +4 -3
- package/lib/AWS/CloudWatch/GetDashboard.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetDashboard.js.map +1 -1
- package/lib/AWS/CloudWatch/GetInsightRuleReport.d.ts +4 -3
- package/lib/AWS/CloudWatch/GetInsightRuleReport.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetInsightRuleReport.js.map +1 -1
- package/lib/AWS/CloudWatch/GetMetricData.d.ts +4 -3
- package/lib/AWS/CloudWatch/GetMetricData.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetMetricData.js.map +1 -1
- package/lib/AWS/CloudWatch/GetMetricStatistics.d.ts +4 -3
- package/lib/AWS/CloudWatch/GetMetricStatistics.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetMetricStatistics.js.map +1 -1
- package/lib/AWS/CloudWatch/GetMetricStream.d.ts +4 -3
- package/lib/AWS/CloudWatch/GetMetricStream.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetMetricStream.js.map +1 -1
- package/lib/AWS/CloudWatch/GetMetricWidgetImage.d.ts +4 -3
- package/lib/AWS/CloudWatch/GetMetricWidgetImage.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/GetMetricWidgetImage.js.map +1 -1
- package/lib/AWS/CloudWatch/ListAlarmMuteRules.d.ts +4 -3
- package/lib/AWS/CloudWatch/ListAlarmMuteRules.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/ListAlarmMuteRules.js.map +1 -1
- package/lib/AWS/CloudWatch/ListDashboards.d.ts +4 -3
- package/lib/AWS/CloudWatch/ListDashboards.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/ListDashboards.js.map +1 -1
- package/lib/AWS/CloudWatch/ListManagedInsightRules.d.ts +4 -3
- package/lib/AWS/CloudWatch/ListManagedInsightRules.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/ListManagedInsightRules.js.map +1 -1
- package/lib/AWS/CloudWatch/ListMetricStreams.d.ts +4 -3
- package/lib/AWS/CloudWatch/ListMetricStreams.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/ListMetricStreams.js.map +1 -1
- package/lib/AWS/CloudWatch/ListMetrics.d.ts +4 -3
- package/lib/AWS/CloudWatch/ListMetrics.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/ListMetrics.js.map +1 -1
- package/lib/AWS/CloudWatch/ListTagsForResource.d.ts +4 -3
- package/lib/AWS/CloudWatch/ListTagsForResource.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/ListTagsForResource.js.map +1 -1
- package/lib/AWS/CloudWatch/PutMetricData.d.ts +4 -3
- package/lib/AWS/CloudWatch/PutMetricData.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/PutMetricData.js.map +1 -1
- package/lib/AWS/CloudWatch/SetAlarmState.d.ts +4 -3
- package/lib/AWS/CloudWatch/SetAlarmState.d.ts.map +1 -1
- package/lib/AWS/CloudWatch/SetAlarmState.js.map +1 -1
- package/lib/AWS/Credentials.d.ts +5 -0
- package/lib/AWS/Credentials.d.ts.map +1 -1
- package/lib/AWS/Credentials.js.map +1 -1
- package/lib/AWS/DynamoDB/BatchExecuteStatement.d.ts +4 -3
- package/lib/AWS/DynamoDB/BatchExecuteStatement.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/BatchExecuteStatement.js.map +1 -1
- package/lib/AWS/DynamoDB/BatchGetItem.d.ts +4 -3
- package/lib/AWS/DynamoDB/BatchGetItem.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/BatchGetItem.js +4 -4
- package/lib/AWS/DynamoDB/BatchGetItem.js.map +1 -1
- package/lib/AWS/DynamoDB/BatchWriteItem.d.ts +4 -3
- package/lib/AWS/DynamoDB/BatchWriteItem.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/BatchWriteItem.js +4 -4
- package/lib/AWS/DynamoDB/BatchWriteItem.js.map +1 -1
- package/lib/AWS/DynamoDB/DeleteItem.d.ts +4 -3
- package/lib/AWS/DynamoDB/DeleteItem.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/DeleteItem.js.map +1 -1
- package/lib/AWS/DynamoDB/DescribeTable.d.ts +4 -3
- package/lib/AWS/DynamoDB/DescribeTable.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/DescribeTable.js.map +1 -1
- package/lib/AWS/DynamoDB/DescribeTimeToLive.d.ts +4 -3
- package/lib/AWS/DynamoDB/DescribeTimeToLive.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/DescribeTimeToLive.js.map +1 -1
- package/lib/AWS/DynamoDB/ExecuteStatement.d.ts +4 -3
- package/lib/AWS/DynamoDB/ExecuteStatement.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/ExecuteStatement.js.map +1 -1
- package/lib/AWS/DynamoDB/ExecuteTransaction.d.ts +4 -3
- package/lib/AWS/DynamoDB/ExecuteTransaction.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/ExecuteTransaction.js.map +1 -1
- package/lib/AWS/DynamoDB/GetItem.d.ts +4 -3
- package/lib/AWS/DynamoDB/GetItem.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/GetItem.js.map +1 -1
- package/lib/AWS/DynamoDB/ListTables.d.ts +4 -3
- package/lib/AWS/DynamoDB/ListTables.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/ListTables.js.map +1 -1
- package/lib/AWS/DynamoDB/ListTagsOfResource.d.ts +4 -3
- package/lib/AWS/DynamoDB/ListTagsOfResource.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/ListTagsOfResource.js.map +1 -1
- package/lib/AWS/DynamoDB/PutItem.d.ts +4 -3
- package/lib/AWS/DynamoDB/PutItem.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/PutItem.js.map +1 -1
- package/lib/AWS/DynamoDB/Query.d.ts +4 -3
- package/lib/AWS/DynamoDB/Query.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/Query.js.map +1 -1
- package/lib/AWS/DynamoDB/RestoreTableToPointInTime.d.ts +4 -3
- package/lib/AWS/DynamoDB/RestoreTableToPointInTime.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/RestoreTableToPointInTime.js.map +1 -1
- package/lib/AWS/DynamoDB/Scan.d.ts +4 -3
- package/lib/AWS/DynamoDB/Scan.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/Scan.js.map +1 -1
- package/lib/AWS/DynamoDB/TransactGetItems.d.ts +4 -3
- package/lib/AWS/DynamoDB/TransactGetItems.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/TransactGetItems.js +4 -4
- package/lib/AWS/DynamoDB/TransactGetItems.js.map +1 -1
- package/lib/AWS/DynamoDB/TransactWriteItems.d.ts +4 -3
- package/lib/AWS/DynamoDB/TransactWriteItems.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/TransactWriteItems.js +5 -5
- package/lib/AWS/DynamoDB/TransactWriteItems.js.map +1 -1
- package/lib/AWS/DynamoDB/UpdateItem.d.ts +4 -3
- package/lib/AWS/DynamoDB/UpdateItem.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/UpdateItem.js.map +1 -1
- package/lib/AWS/DynamoDB/UpdateTimeToLive.d.ts +4 -3
- package/lib/AWS/DynamoDB/UpdateTimeToLive.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/UpdateTimeToLive.js.map +1 -1
- package/lib/AWS/EC2/Image.js +2 -2
- package/lib/AWS/EC2/Image.js.map +1 -1
- package/lib/AWS/EC2/Instance.d.ts.map +1 -1
- package/lib/AWS/EC2/Instance.js +1 -1
- package/lib/AWS/EC2/Instance.js.map +1 -1
- package/lib/AWS/EC2/NatGateway.js +1 -1
- package/lib/AWS/EC2/NatGateway.js.map +1 -1
- package/lib/AWS/EC2/NetworkAcl.js +1 -1
- package/lib/AWS/EC2/NetworkAcl.js.map +1 -1
- package/lib/AWS/EC2/SecurityGroup.js +1 -1
- package/lib/AWS/EC2/SecurityGroup.js.map +1 -1
- package/lib/AWS/EC2/VpcEndpoint.js +1 -1
- package/lib/AWS/EC2/VpcEndpoint.js.map +1 -1
- package/lib/AWS/EC2/hosted.js +2 -2
- package/lib/AWS/EC2/hosted.js.map +1 -1
- package/lib/AWS/ECS/DescribeTasks.d.ts +4 -3
- package/lib/AWS/ECS/DescribeTasks.d.ts.map +1 -1
- package/lib/AWS/ECS/DescribeTasks.js.map +1 -1
- package/lib/AWS/ECS/ListTasks.d.ts +4 -3
- package/lib/AWS/ECS/ListTasks.d.ts.map +1 -1
- package/lib/AWS/ECS/ListTasks.js.map +1 -1
- package/lib/AWS/ECS/RunTask.d.ts +4 -3
- package/lib/AWS/ECS/RunTask.d.ts.map +1 -1
- package/lib/AWS/ECS/RunTask.js.map +1 -1
- package/lib/AWS/ECS/StopTask.d.ts +4 -3
- package/lib/AWS/ECS/StopTask.d.ts.map +1 -1
- package/lib/AWS/ECS/StopTask.js.map +1 -1
- package/lib/AWS/ECS/Task.js +1 -1
- package/lib/AWS/ECS/Task.js.map +1 -1
- package/lib/AWS/Environment.d.ts +2 -1
- package/lib/AWS/Environment.d.ts.map +1 -1
- package/lib/AWS/Environment.js +1 -1
- package/lib/AWS/Environment.js.map +1 -1
- package/lib/AWS/EventBridge/DescribeEventBus.d.ts +4 -3
- package/lib/AWS/EventBridge/DescribeEventBus.d.ts.map +1 -1
- package/lib/AWS/EventBridge/DescribeEventBus.js.map +1 -1
- package/lib/AWS/EventBridge/DescribeRule.d.ts +4 -3
- package/lib/AWS/EventBridge/DescribeRule.d.ts.map +1 -1
- package/lib/AWS/EventBridge/DescribeRule.js.map +1 -1
- package/lib/AWS/EventBridge/EventSource.d.ts +2 -2
- package/lib/AWS/EventBridge/ListEventBuses.d.ts +4 -3
- package/lib/AWS/EventBridge/ListEventBuses.d.ts.map +1 -1
- package/lib/AWS/EventBridge/ListEventBuses.js.map +1 -1
- package/lib/AWS/EventBridge/ListRules.d.ts +4 -3
- package/lib/AWS/EventBridge/ListRules.d.ts.map +1 -1
- package/lib/AWS/EventBridge/ListRules.js.map +1 -1
- package/lib/AWS/EventBridge/ListTargetsByRule.d.ts +4 -3
- package/lib/AWS/EventBridge/ListTargetsByRule.d.ts.map +1 -1
- package/lib/AWS/EventBridge/ListTargetsByRule.js.map +1 -1
- package/lib/AWS/EventBridge/PutEvents.d.ts +4 -3
- package/lib/AWS/EventBridge/PutEvents.d.ts.map +1 -1
- package/lib/AWS/EventBridge/PutEvents.js.map +1 -1
- package/lib/AWS/EventBridge/TestEventPattern.d.ts +4 -3
- package/lib/AWS/EventBridge/TestEventPattern.d.ts.map +1 -1
- package/lib/AWS/EventBridge/TestEventPattern.js.map +1 -1
- package/lib/AWS/EventBridge/ToLambda.d.ts +4 -3
- package/lib/AWS/EventBridge/ToLambda.d.ts.map +1 -1
- package/lib/AWS/EventBridge/ToLambda.js.map +1 -1
- package/lib/AWS/EventBridge/ToQueue.d.ts +4 -3
- package/lib/AWS/EventBridge/ToQueue.d.ts.map +1 -1
- package/lib/AWS/EventBridge/ToQueue.js.map +1 -1
- package/lib/AWS/Kinesis/DescribeAccountSettings.d.ts +4 -3
- package/lib/AWS/Kinesis/DescribeAccountSettings.d.ts.map +1 -1
- package/lib/AWS/Kinesis/DescribeAccountSettings.js.map +1 -1
- package/lib/AWS/Kinesis/DescribeLimits.d.ts +4 -3
- package/lib/AWS/Kinesis/DescribeLimits.d.ts.map +1 -1
- package/lib/AWS/Kinesis/DescribeLimits.js.map +1 -1
- package/lib/AWS/Kinesis/DescribeStream.d.ts +4 -3
- package/lib/AWS/Kinesis/DescribeStream.d.ts.map +1 -1
- package/lib/AWS/Kinesis/DescribeStream.js.map +1 -1
- package/lib/AWS/Kinesis/DescribeStreamConsumer.d.ts +4 -3
- package/lib/AWS/Kinesis/DescribeStreamConsumer.d.ts.map +1 -1
- package/lib/AWS/Kinesis/DescribeStreamConsumer.js.map +1 -1
- package/lib/AWS/Kinesis/DescribeStreamSummary.d.ts +4 -3
- package/lib/AWS/Kinesis/DescribeStreamSummary.d.ts.map +1 -1
- package/lib/AWS/Kinesis/DescribeStreamSummary.js.map +1 -1
- package/lib/AWS/Kinesis/GetRecords.d.ts +4 -3
- package/lib/AWS/Kinesis/GetRecords.d.ts.map +1 -1
- package/lib/AWS/Kinesis/GetRecords.js.map +1 -1
- package/lib/AWS/Kinesis/GetResourcePolicy.d.ts +4 -3
- package/lib/AWS/Kinesis/GetResourcePolicy.d.ts.map +1 -1
- package/lib/AWS/Kinesis/GetResourcePolicy.js.map +1 -1
- package/lib/AWS/Kinesis/GetShardIterator.d.ts +4 -3
- package/lib/AWS/Kinesis/GetShardIterator.d.ts.map +1 -1
- package/lib/AWS/Kinesis/GetShardIterator.js.map +1 -1
- package/lib/AWS/Kinesis/ListShards.d.ts +4 -3
- package/lib/AWS/Kinesis/ListShards.d.ts.map +1 -1
- package/lib/AWS/Kinesis/ListShards.js.map +1 -1
- package/lib/AWS/Kinesis/ListStreamConsumers.d.ts +4 -3
- package/lib/AWS/Kinesis/ListStreamConsumers.d.ts.map +1 -1
- package/lib/AWS/Kinesis/ListStreamConsumers.js.map +1 -1
- package/lib/AWS/Kinesis/ListStreams.d.ts +4 -3
- package/lib/AWS/Kinesis/ListStreams.d.ts.map +1 -1
- package/lib/AWS/Kinesis/ListStreams.js.map +1 -1
- package/lib/AWS/Kinesis/ListTagsForResource.d.ts +4 -3
- package/lib/AWS/Kinesis/ListTagsForResource.d.ts.map +1 -1
- package/lib/AWS/Kinesis/ListTagsForResource.js.map +1 -1
- package/lib/AWS/Kinesis/PutRecord.d.ts +4 -3
- package/lib/AWS/Kinesis/PutRecord.d.ts.map +1 -1
- package/lib/AWS/Kinesis/PutRecord.js.map +1 -1
- package/lib/AWS/Kinesis/PutRecords.d.ts +4 -3
- package/lib/AWS/Kinesis/PutRecords.d.ts.map +1 -1
- package/lib/AWS/Kinesis/PutRecords.js.map +1 -1
- package/lib/AWS/Kinesis/StreamSink.d.ts +4 -3
- package/lib/AWS/Kinesis/StreamSink.d.ts.map +1 -1
- package/lib/AWS/Kinesis/StreamSink.js.map +1 -1
- package/lib/AWS/Kinesis/SubscribeToShard.d.ts +4 -3
- package/lib/AWS/Kinesis/SubscribeToShard.d.ts.map +1 -1
- package/lib/AWS/Kinesis/SubscribeToShard.js.map +1 -1
- package/lib/AWS/Lambda/BucketEventSource.d.ts +4 -3
- package/lib/AWS/Lambda/BucketEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/BucketEventSource.js.map +1 -1
- package/lib/AWS/Lambda/EventBridgeEventSource.d.ts +4 -3
- package/lib/AWS/Lambda/EventBridgeEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/EventBridgeEventSource.js.map +1 -1
- package/lib/AWS/Lambda/Function.d.ts +45 -3
- package/lib/AWS/Lambda/Function.d.ts.map +1 -1
- package/lib/AWS/Lambda/Function.js +121 -47
- package/lib/AWS/Lambda/Function.js.map +1 -1
- package/lib/AWS/Lambda/InvokeFunction.d.ts +4 -3
- package/lib/AWS/Lambda/InvokeFunction.d.ts.map +1 -1
- package/lib/AWS/Lambda/InvokeFunction.js.map +1 -1
- package/lib/AWS/Lambda/QueueEventSource.d.ts +4 -3
- package/lib/AWS/Lambda/QueueEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/QueueEventSource.js.map +1 -1
- package/lib/AWS/Lambda/StreamEventSource.d.ts +4 -3
- package/lib/AWS/Lambda/StreamEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/StreamEventSource.js.map +1 -1
- package/lib/AWS/Lambda/TableEventSource.d.ts +4 -3
- package/lib/AWS/Lambda/TableEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/TableEventSource.js.map +1 -1
- package/lib/AWS/Lambda/TopicEventSource.d.ts +4 -3
- package/lib/AWS/Lambda/TopicEventSource.d.ts.map +1 -1
- package/lib/AWS/Lambda/TopicEventSource.js.map +1 -1
- package/lib/AWS/Organizations/Root.js +1 -1
- package/lib/AWS/Organizations/Root.js.map +1 -1
- package/lib/AWS/Providers.d.ts +2 -2
- package/lib/AWS/Providers.d.ts.map +1 -1
- package/lib/AWS/Providers.js +4 -5
- package/lib/AWS/Providers.js.map +1 -1
- package/lib/AWS/RDS/Connect.d.ts +4 -3
- package/lib/AWS/RDS/Connect.d.ts.map +1 -1
- package/lib/AWS/RDS/Connect.js.map +1 -1
- package/lib/AWS/RDSData/BatchExecuteStatement.d.ts +4 -3
- package/lib/AWS/RDSData/BatchExecuteStatement.d.ts.map +1 -1
- package/lib/AWS/RDSData/BatchExecuteStatement.js.map +1 -1
- package/lib/AWS/RDSData/BeginTransaction.d.ts +4 -3
- package/lib/AWS/RDSData/BeginTransaction.d.ts.map +1 -1
- package/lib/AWS/RDSData/BeginTransaction.js.map +1 -1
- package/lib/AWS/RDSData/CommitTransaction.d.ts +4 -3
- package/lib/AWS/RDSData/CommitTransaction.d.ts.map +1 -1
- package/lib/AWS/RDSData/CommitTransaction.js.map +1 -1
- package/lib/AWS/RDSData/ExecuteSql.d.ts +4 -3
- package/lib/AWS/RDSData/ExecuteSql.d.ts.map +1 -1
- package/lib/AWS/RDSData/ExecuteSql.js.map +1 -1
- package/lib/AWS/RDSData/ExecuteStatement.d.ts +4 -3
- package/lib/AWS/RDSData/ExecuteStatement.d.ts.map +1 -1
- package/lib/AWS/RDSData/ExecuteStatement.js.map +1 -1
- package/lib/AWS/RDSData/RollbackTransaction.d.ts +4 -3
- package/lib/AWS/RDSData/RollbackTransaction.d.ts.map +1 -1
- package/lib/AWS/RDSData/RollbackTransaction.js.map +1 -1
- package/lib/AWS/Region.d.ts +5 -0
- package/lib/AWS/Region.d.ts.map +1 -1
- package/lib/AWS/Region.js.map +1 -1
- package/lib/AWS/S3/AbortMultipartUpload.d.ts +4 -3
- package/lib/AWS/S3/AbortMultipartUpload.d.ts.map +1 -1
- package/lib/AWS/S3/AbortMultipartUpload.js.map +1 -1
- package/lib/AWS/S3/Bucket.js +18 -18
- package/lib/AWS/S3/Bucket.js.map +1 -1
- package/lib/AWS/S3/CompleteMultipartUpload.d.ts +4 -3
- package/lib/AWS/S3/CompleteMultipartUpload.d.ts.map +1 -1
- package/lib/AWS/S3/CompleteMultipartUpload.js.map +1 -1
- package/lib/AWS/S3/CopyObject.d.ts +4 -3
- package/lib/AWS/S3/CopyObject.d.ts.map +1 -1
- package/lib/AWS/S3/CopyObject.js.map +1 -1
- package/lib/AWS/S3/CreateMultipartUpload.d.ts +4 -3
- package/lib/AWS/S3/CreateMultipartUpload.d.ts.map +1 -1
- package/lib/AWS/S3/CreateMultipartUpload.js.map +1 -1
- package/lib/AWS/S3/DeleteObject.d.ts +4 -3
- package/lib/AWS/S3/DeleteObject.d.ts.map +1 -1
- package/lib/AWS/S3/DeleteObject.js.map +1 -1
- package/lib/AWS/S3/GetObject.d.ts +4 -3
- package/lib/AWS/S3/GetObject.d.ts.map +1 -1
- package/lib/AWS/S3/GetObject.js.map +1 -1
- package/lib/AWS/S3/HeadObject.d.ts +4 -3
- package/lib/AWS/S3/HeadObject.d.ts.map +1 -1
- package/lib/AWS/S3/HeadObject.js.map +1 -1
- package/lib/AWS/S3/ListObjectsV2.d.ts +4 -3
- package/lib/AWS/S3/ListObjectsV2.d.ts.map +1 -1
- package/lib/AWS/S3/ListObjectsV2.js.map +1 -1
- package/lib/AWS/S3/PutObject.d.ts +4 -3
- package/lib/AWS/S3/PutObject.d.ts.map +1 -1
- package/lib/AWS/S3/PutObject.js.map +1 -1
- package/lib/AWS/S3/UploadPart.d.ts +4 -3
- package/lib/AWS/S3/UploadPart.d.ts.map +1 -1
- package/lib/AWS/S3/UploadPart.js.map +1 -1
- package/lib/AWS/SNS/AddPermission.d.ts +4 -3
- package/lib/AWS/SNS/AddPermission.d.ts.map +1 -1
- package/lib/AWS/SNS/AddPermission.js.map +1 -1
- package/lib/AWS/SNS/ConfirmSubscription.d.ts +4 -3
- package/lib/AWS/SNS/ConfirmSubscription.d.ts.map +1 -1
- package/lib/AWS/SNS/ConfirmSubscription.js.map +1 -1
- package/lib/AWS/SNS/GetDataProtectionPolicy.d.ts +4 -3
- package/lib/AWS/SNS/GetDataProtectionPolicy.d.ts.map +1 -1
- package/lib/AWS/SNS/GetDataProtectionPolicy.js.map +1 -1
- package/lib/AWS/SNS/GetSubscriptionAttributes.d.ts +4 -3
- package/lib/AWS/SNS/GetSubscriptionAttributes.d.ts.map +1 -1
- package/lib/AWS/SNS/GetSubscriptionAttributes.js.map +1 -1
- package/lib/AWS/SNS/GetTopicAttributes.d.ts +4 -3
- package/lib/AWS/SNS/GetTopicAttributes.d.ts.map +1 -1
- package/lib/AWS/SNS/GetTopicAttributes.js.map +1 -1
- package/lib/AWS/SNS/ListSubscriptions.d.ts +4 -3
- package/lib/AWS/SNS/ListSubscriptions.d.ts.map +1 -1
- package/lib/AWS/SNS/ListSubscriptions.js.map +1 -1
- package/lib/AWS/SNS/ListSubscriptionsByTopic.d.ts +4 -3
- package/lib/AWS/SNS/ListSubscriptionsByTopic.d.ts.map +1 -1
- package/lib/AWS/SNS/ListSubscriptionsByTopic.js.map +1 -1
- package/lib/AWS/SNS/ListTagsForResource.d.ts +4 -3
- package/lib/AWS/SNS/ListTagsForResource.d.ts.map +1 -1
- package/lib/AWS/SNS/ListTagsForResource.js.map +1 -1
- package/lib/AWS/SNS/ListTopics.d.ts +4 -3
- package/lib/AWS/SNS/ListTopics.d.ts.map +1 -1
- package/lib/AWS/SNS/ListTopics.js.map +1 -1
- package/lib/AWS/SNS/Publish.d.ts +4 -3
- package/lib/AWS/SNS/Publish.d.ts.map +1 -1
- package/lib/AWS/SNS/Publish.js.map +1 -1
- package/lib/AWS/SNS/PublishBatch.d.ts +4 -3
- package/lib/AWS/SNS/PublishBatch.d.ts.map +1 -1
- package/lib/AWS/SNS/PublishBatch.js.map +1 -1
- package/lib/AWS/SNS/PutDataProtectionPolicy.d.ts +4 -3
- package/lib/AWS/SNS/PutDataProtectionPolicy.d.ts.map +1 -1
- package/lib/AWS/SNS/PutDataProtectionPolicy.js.map +1 -1
- package/lib/AWS/SNS/RemovePermission.d.ts +4 -3
- package/lib/AWS/SNS/RemovePermission.d.ts.map +1 -1
- package/lib/AWS/SNS/RemovePermission.js.map +1 -1
- package/lib/AWS/SNS/SetSubscriptionAttributes.d.ts +4 -3
- package/lib/AWS/SNS/SetSubscriptionAttributes.d.ts.map +1 -1
- package/lib/AWS/SNS/SetSubscriptionAttributes.js.map +1 -1
- package/lib/AWS/SNS/SetTopicAttributes.d.ts +4 -3
- package/lib/AWS/SNS/SetTopicAttributes.d.ts.map +1 -1
- package/lib/AWS/SNS/SetTopicAttributes.js.map +1 -1
- package/lib/AWS/SNS/TagResource.d.ts +4 -3
- package/lib/AWS/SNS/TagResource.d.ts.map +1 -1
- package/lib/AWS/SNS/TagResource.js.map +1 -1
- package/lib/AWS/SNS/TopicSink.d.ts +4 -3
- package/lib/AWS/SNS/TopicSink.d.ts.map +1 -1
- package/lib/AWS/SNS/TopicSink.js.map +1 -1
- package/lib/AWS/SNS/UntagResource.d.ts +4 -3
- package/lib/AWS/SNS/UntagResource.d.ts.map +1 -1
- package/lib/AWS/SNS/UntagResource.js.map +1 -1
- package/lib/AWS/SQS/DeleteMessage.d.ts +4 -3
- package/lib/AWS/SQS/DeleteMessage.d.ts.map +1 -1
- package/lib/AWS/SQS/DeleteMessage.js.map +1 -1
- package/lib/AWS/SQS/DeleteMessageBatch.d.ts +4 -3
- package/lib/AWS/SQS/DeleteMessageBatch.d.ts.map +1 -1
- package/lib/AWS/SQS/DeleteMessageBatch.js.map +1 -1
- package/lib/AWS/SQS/Queue.js +1 -1
- package/lib/AWS/SQS/Queue.js.map +1 -1
- package/lib/AWS/SQS/QueueSink.d.ts +4 -3
- package/lib/AWS/SQS/QueueSink.d.ts.map +1 -1
- package/lib/AWS/SQS/QueueSink.js.map +1 -1
- package/lib/AWS/SQS/ReceiveMessage.d.ts +4 -3
- package/lib/AWS/SQS/ReceiveMessage.d.ts.map +1 -1
- package/lib/AWS/SQS/ReceiveMessage.js.map +1 -1
- package/lib/AWS/SQS/SendMessage.d.ts +4 -3
- package/lib/AWS/SQS/SendMessage.d.ts.map +1 -1
- package/lib/AWS/SQS/SendMessage.js.map +1 -1
- package/lib/AWS/SQS/SendMessageBatch.d.ts +4 -3
- package/lib/AWS/SQS/SendMessageBatch.d.ts.map +1 -1
- package/lib/AWS/SQS/SendMessageBatch.js.map +1 -1
- package/lib/AWS/SecretsManager/DescribeSecret.d.ts +4 -3
- package/lib/AWS/SecretsManager/DescribeSecret.d.ts.map +1 -1
- package/lib/AWS/SecretsManager/DescribeSecret.js.map +1 -1
- package/lib/AWS/SecretsManager/GetRandomPassword.d.ts +4 -3
- package/lib/AWS/SecretsManager/GetRandomPassword.d.ts.map +1 -1
- package/lib/AWS/SecretsManager/GetRandomPassword.js.map +1 -1
- package/lib/AWS/SecretsManager/GetSecretValue.d.ts +4 -3
- package/lib/AWS/SecretsManager/GetSecretValue.d.ts.map +1 -1
- package/lib/AWS/SecretsManager/GetSecretValue.js.map +1 -1
- package/lib/AWS/SecretsManager/ListSecrets.d.ts +4 -3
- package/lib/AWS/SecretsManager/ListSecrets.d.ts.map +1 -1
- package/lib/AWS/SecretsManager/ListSecrets.js.map +1 -1
- package/lib/AWS/SecretsManager/PutSecretValue.d.ts +4 -3
- package/lib/AWS/SecretsManager/PutSecretValue.d.ts.map +1 -1
- package/lib/AWS/SecretsManager/PutSecretValue.js.map +1 -1
- package/lib/AWS/StateStore/State.js +30 -6
- package/lib/AWS/StateStore/State.js.map +1 -1
- package/lib/AWS/Website/Router.d.ts.map +1 -1
- package/lib/AWS/Website/Router.js +7 -4
- package/lib/AWS/Website/Router.js.map +1 -1
- package/lib/AWS/Website/SsrSite.d.ts.map +1 -1
- package/lib/AWS/Website/SsrSite.js +3 -3
- package/lib/AWS/Website/SsrSite.js.map +1 -1
- package/lib/AWS/Website/StaticSite.d.ts +3 -3
- package/lib/AWS/Website/StaticSite.d.ts.map +1 -1
- package/lib/AWS/Website/StaticSite.js +9 -6
- package/lib/AWS/Website/StaticSite.js.map +1 -1
- package/lib/AdoptPolicy.d.ts +1 -1
- package/lib/AdoptPolicy.js +1 -1
- package/lib/Apply.d.ts.map +1 -1
- package/lib/Apply.js +16 -8
- package/lib/Apply.js.map +1 -1
- package/lib/Auth/Lock.d.ts.map +1 -1
- package/lib/Auth/Lock.js +4 -1
- package/lib/Auth/Lock.js.map +1 -1
- package/lib/Auth/Profile.d.ts +2 -1
- package/lib/Auth/Profile.d.ts.map +1 -1
- package/lib/Auth/Profile.js +28 -3
- package/lib/Auth/Profile.js.map +1 -1
- package/lib/Axiom/AuthProvider.js +2 -2
- package/lib/Axiom/AuthProvider.js.map +1 -1
- package/lib/Binding.d.ts +1 -1
- package/lib/Binding.d.ts.map +1 -1
- package/lib/Binding.js.map +1 -1
- package/lib/Bundle/Bundle.d.ts.map +1 -1
- package/lib/Bundle/Bundle.js +46 -4
- package/lib/Bundle/Bundle.js.map +1 -1
- package/lib/Bundle/Docker.d.ts +4 -1
- package/lib/Bundle/Docker.d.ts.map +1 -1
- package/lib/Bundle/Docker.js +21 -4
- package/lib/Bundle/Docker.js.map +1 -1
- package/lib/Bundle/InstalledPackages.d.ts +79 -0
- package/lib/Bundle/InstalledPackages.d.ts.map +1 -0
- package/lib/Bundle/InstalledPackages.js +364 -0
- package/lib/Bundle/InstalledPackages.js.map +1 -0
- package/lib/Bundle/TempRoot.js +1 -1
- package/lib/Bundle/TempRoot.js.map +1 -1
- package/lib/Bundle/index.d.ts +1 -0
- package/lib/Bundle/index.d.ts.map +1 -1
- package/lib/Bundle/index.js +1 -0
- package/lib/Bundle/index.js.map +1 -1
- package/lib/Cli/commands/aws.js +1 -1
- package/lib/Cli/commands/aws.js.map +1 -1
- package/lib/Cli/commands/cloudflare.d.ts.map +1 -1
- package/lib/Cli/commands/cloudflare.js +3 -3
- package/lib/Cli/commands/cloudflare.js.map +1 -1
- package/lib/Cli/commands/login.js +1 -1
- package/lib/Cli/commands/login.js.map +1 -1
- package/lib/Cli/commands/logs.js +1 -1
- package/lib/Cli/commands/logs.js.map +1 -1
- package/lib/Cli/commands/nuke.js +1 -1
- package/lib/Cli/commands/nuke.js.map +1 -1
- package/lib/Cli/commands/profile.js +2 -2
- package/lib/Cli/commands/profile.js.map +1 -1
- package/lib/Cli/commands/state.d.ts.map +1 -1
- package/lib/Cli/commands/state.js +6 -6
- package/lib/Cli/commands/state.js.map +1 -1
- package/lib/Cli/commands/tail.js +1 -1
- package/lib/Cli/commands/tail.js.map +1 -1
- package/lib/Cli/selectCli.d.ts +1 -8
- package/lib/Cli/selectCli.d.ts.map +1 -1
- package/lib/Cli/selectCli.js +2 -27
- package/lib/Cli/selectCli.js.map +1 -1
- package/lib/Cloudflare/Access/Application.d.ts.map +1 -1
- package/lib/Cloudflare/Access/Application.js +36 -3
- package/lib/Cloudflare/Access/Application.js.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGateway.d.ts +96 -0
- package/lib/Cloudflare/AiGateway/AiGateway.d.ts.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGateway.js +87 -0
- package/lib/Cloudflare/AiGateway/AiGateway.js.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGatewayBinding.d.ts +4 -3
- package/lib/Cloudflare/AiGateway/AiGatewayBinding.d.ts.map +1 -1
- package/lib/Cloudflare/AiGateway/AiGatewayBinding.js.map +1 -1
- package/lib/Cloudflare/AiGateway/DurableObjectChatPersistence.d.ts +7 -0
- package/lib/Cloudflare/AiGateway/DurableObjectChatPersistence.d.ts.map +1 -0
- package/lib/Cloudflare/AiGateway/DurableObjectChatPersistence.js +45 -0
- package/lib/Cloudflare/AiGateway/DurableObjectChatPersistence.js.map +1 -0
- package/lib/Cloudflare/AiGateway/LanguageModel.js +1 -1
- package/lib/Cloudflare/AiGateway/LanguageModel.js.map +1 -1
- package/lib/Cloudflare/AiGateway/index.d.ts +1 -1
- package/lib/Cloudflare/AiGateway/index.d.ts.map +1 -1
- package/lib/Cloudflare/AiGateway/index.js +1 -1
- package/lib/Cloudflare/AiGateway/index.js.map +1 -1
- package/lib/Cloudflare/AiSearch/AiSearch.d.ts +3 -2
- package/lib/Cloudflare/AiSearch/AiSearch.d.ts.map +1 -1
- package/lib/Cloudflare/AiSearch/AiSearch.js +4 -3
- package/lib/Cloudflare/AiSearch/AiSearch.js.map +1 -1
- package/lib/Cloudflare/AiSearch/AiSearchBinding.d.ts +7 -6
- package/lib/Cloudflare/AiSearch/AiSearchBinding.d.ts.map +1 -1
- package/lib/Cloudflare/AiSearch/AiSearchBinding.js.map +1 -1
- package/lib/Cloudflare/AiSearch/AiSearchInstance.js +28 -14
- package/lib/Cloudflare/AiSearch/AiSearchInstance.js.map +1 -1
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDataset.d.ts.map +1 -1
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDataset.js +1 -1
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDataset.js.map +1 -1
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.d.ts +4 -3
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.d.ts.map +1 -1
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js +2 -2
- package/lib/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.js.map +1 -1
- package/lib/Cloudflare/ApiShield/UserSchema.d.ts.map +1 -1
- package/lib/Cloudflare/ApiShield/UserSchema.js +4 -1
- package/lib/Cloudflare/ApiShield/UserSchema.js.map +1 -1
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.d.ts +4 -3
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Artifacts/ArtifactsBinding.js.map +1 -1
- package/lib/Cloudflare/Auth/AuthProvider.d.ts +1 -0
- package/lib/Cloudflare/Auth/AuthProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Auth/AuthProvider.js +5 -3
- package/lib/Cloudflare/Auth/AuthProvider.js.map +1 -1
- package/lib/Cloudflare/Browser/BrowserBinding.d.ts +4 -3
- package/lib/Cloudflare/Browser/BrowserBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Browser/BrowserBinding.js.map +1 -1
- package/lib/Cloudflare/Cache/RegionalTieredCache.d.ts.map +1 -1
- package/lib/Cloudflare/Cache/RegionalTieredCache.js +15 -1
- package/lib/Cloudflare/Cache/RegionalTieredCache.js.map +1 -1
- package/lib/Cloudflare/ClientCertificate/ClientCertificate.d.ts.map +1 -1
- package/lib/Cloudflare/ClientCertificate/ClientCertificate.js +17 -10
- package/lib/Cloudflare/ClientCertificate/ClientCertificate.js.map +1 -1
- package/lib/Cloudflare/CloudflareEnvironment.d.ts +1 -0
- package/lib/Cloudflare/CloudflareEnvironment.d.ts.map +1 -1
- package/lib/Cloudflare/CloudflareEnvironment.js +1 -0
- package/lib/Cloudflare/CloudflareEnvironment.js.map +1 -1
- package/lib/Cloudflare/Container/Container.d.ts +233 -81
- package/lib/Cloudflare/Container/Container.d.ts.map +1 -1
- package/lib/Cloudflare/Container/Container.js +181 -116
- package/lib/Cloudflare/Container/Container.js.map +1 -1
- package/lib/Cloudflare/Container/ContainerApplication.d.ts +67 -13
- package/lib/Cloudflare/Container/ContainerApplication.d.ts.map +1 -1
- package/lib/Cloudflare/Container/ContainerApplication.js +2 -557
- package/lib/Cloudflare/Container/ContainerApplication.js.map +1 -1
- package/lib/Cloudflare/Container/ContainerBundle.d.ts +26 -0
- package/lib/Cloudflare/Container/ContainerBundle.d.ts.map +1 -1
- package/lib/Cloudflare/Container/ContainerBundle.js +65 -2
- package/lib/Cloudflare/Container/ContainerBundle.js.map +1 -1
- package/lib/Cloudflare/Container/ContainerPlatform.d.ts +5 -0
- package/lib/Cloudflare/Container/ContainerPlatform.d.ts.map +1 -0
- package/lib/Cloudflare/Container/ContainerPlatform.js +129 -0
- package/lib/Cloudflare/Container/ContainerPlatform.js.map +1 -0
- package/lib/Cloudflare/Container/ContainerProvider.d.ts +10 -0
- package/lib/Cloudflare/Container/ContainerProvider.d.ts.map +1 -0
- package/lib/Cloudflare/Container/ContainerProvider.js +684 -0
- package/lib/Cloudflare/Container/ContainerProvider.js.map +1 -0
- package/lib/Cloudflare/Container/LocalContainerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Container/LocalContainerProvider.js +8 -8
- package/lib/Cloudflare/Container/LocalContainerProvider.js.map +1 -1
- package/lib/Cloudflare/Container/StartContainer.d.ts +3 -19
- package/lib/Cloudflare/Container/StartContainer.d.ts.map +1 -1
- package/lib/Cloudflare/Container/StartContainer.js +41 -7
- package/lib/Cloudflare/Container/StartContainer.js.map +1 -1
- package/lib/Cloudflare/Container/index.d.ts +2 -1
- package/lib/Cloudflare/Container/index.d.ts.map +1 -1
- package/lib/Cloudflare/Container/index.js +2 -1
- package/lib/Cloudflare/Container/index.js.map +1 -1
- package/lib/Cloudflare/Credentials.d.ts +5 -0
- package/lib/Cloudflare/Credentials.d.ts.map +1 -1
- package/lib/Cloudflare/Credentials.js.map +1 -1
- package/lib/Cloudflare/D1/D1Connection.d.ts +4 -3
- package/lib/Cloudflare/D1/D1Connection.d.ts.map +1 -1
- package/lib/Cloudflare/D1/D1Connection.js.map +1 -1
- package/lib/Cloudflare/Dns/DnsBinding.d.ts +2 -11
- package/lib/Cloudflare/Dns/DnsBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Dns/DnsBinding.js +0 -11
- package/lib/Cloudflare/Dns/DnsBinding.js.map +1 -1
- package/lib/Cloudflare/Dns/DnsRead.d.ts +3 -2
- package/lib/Cloudflare/Dns/DnsRead.d.ts.map +1 -1
- package/lib/Cloudflare/Dns/DnsRead.js +3 -2
- package/lib/Cloudflare/Dns/DnsRead.js.map +1 -1
- package/lib/Cloudflare/Dns/DnsReadWrite.d.ts +3 -2
- package/lib/Cloudflare/Dns/DnsReadWrite.d.ts.map +1 -1
- package/lib/Cloudflare/Dns/DnsReadWrite.js.map +1 -1
- package/lib/Cloudflare/Dns/DnsWrite.d.ts +3 -2
- package/lib/Cloudflare/Dns/DnsWrite.d.ts.map +1 -1
- package/lib/Cloudflare/Dns/DnsWrite.js +3 -2
- package/lib/Cloudflare/Dns/DnsWrite.js.map +1 -1
- package/lib/Cloudflare/Email/EmailCatchAll.js +1 -1
- package/lib/Cloudflare/Email/EmailCatchAll.js.map +1 -1
- package/lib/Cloudflare/Email/EmailRouting.js +1 -1
- package/lib/Cloudflare/Email/EmailRouting.js.map +1 -1
- package/lib/Cloudflare/Email/EmailRule.js +1 -1
- package/lib/Cloudflare/Email/EmailRule.js.map +1 -1
- package/lib/Cloudflare/Email/SendEmail.js +1 -1
- package/lib/Cloudflare/Email/SendEmail.js.map +1 -1
- package/lib/Cloudflare/Email/SendEmailBinding.d.ts +4 -3
- package/lib/Cloudflare/Email/SendEmailBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Email/SendEmailBinding.js +2 -2
- package/lib/Cloudflare/Email/SendEmailBinding.js.map +1 -1
- package/lib/Cloudflare/Fetcher.d.ts +1 -5
- package/lib/Cloudflare/Fetcher.d.ts.map +1 -1
- package/lib/Cloudflare/Fetcher.js +77 -12
- package/lib/Cloudflare/Fetcher.js.map +1 -1
- package/lib/Cloudflare/Flagship/FlagshipBinding.d.ts +4 -3
- package/lib/Cloudflare/Flagship/FlagshipBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Flagship/FlagshipBinding.js.map +1 -1
- package/lib/Cloudflare/GoogleTagGateway/GoogleTagGateway.js +1 -1
- package/lib/Cloudflare/GoogleTagGateway/GoogleTagGateway.js.map +1 -1
- package/lib/Cloudflare/HttpClientUtils.d.ts +13 -0
- package/lib/Cloudflare/HttpClientUtils.d.ts.map +1 -0
- package/lib/Cloudflare/HttpClientUtils.js +11 -0
- package/lib/Cloudflare/HttpClientUtils.js.map +1 -0
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts +4 -3
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Hyperdrive/HyperdriveBinding.js.map +1 -1
- package/lib/Cloudflare/Iam/UserGroupMembership.d.ts.map +1 -1
- package/lib/Cloudflare/Iam/UserGroupMembership.js +6 -1
- package/lib/Cloudflare/Iam/UserGroupMembership.js.map +1 -1
- package/lib/Cloudflare/Images/ImagesBinding.d.ts +4 -3
- package/lib/Cloudflare/Images/ImagesBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Images/ImagesBinding.js.map +1 -1
- package/lib/Cloudflare/Images/Variant.d.ts.map +1 -1
- package/lib/Cloudflare/Images/Variant.js +15 -3
- package/lib/Cloudflare/Images/Variant.js.map +1 -1
- package/lib/Cloudflare/KV/{KVNamespace.d.ts → Namespace.d.ts} +9 -7
- package/lib/Cloudflare/KV/Namespace.d.ts.map +1 -0
- package/lib/Cloudflare/KV/{KVNamespace.js → Namespace.js} +10 -7
- package/lib/Cloudflare/KV/Namespace.js.map +1 -0
- package/lib/Cloudflare/KV/NamespaceBinding.d.ts +24 -0
- package/lib/Cloudflare/KV/NamespaceBinding.d.ts.map +1 -0
- package/lib/Cloudflare/KV/NamespaceBinding.js +46 -0
- package/lib/Cloudflare/KV/NamespaceBinding.js.map +1 -0
- package/lib/Cloudflare/KV/NamespaceHttp.d.ts +36 -0
- package/lib/Cloudflare/KV/NamespaceHttp.d.ts.map +1 -0
- package/lib/Cloudflare/KV/NamespaceHttp.js +57 -0
- package/lib/Cloudflare/KV/NamespaceHttp.js.map +1 -0
- package/lib/Cloudflare/KV/{KVNamespaceBinding.d.ts → NamespaceRead.d.ts} +15 -30
- package/lib/Cloudflare/KV/NamespaceRead.d.ts.map +1 -0
- package/lib/Cloudflare/KV/NamespaceRead.js +11 -0
- package/lib/Cloudflare/KV/NamespaceRead.js.map +1 -0
- package/lib/Cloudflare/KV/NamespaceReadBinding.d.ts +11 -0
- package/lib/Cloudflare/KV/NamespaceReadBinding.d.ts.map +1 -0
- package/lib/Cloudflare/KV/NamespaceReadBinding.js +19 -0
- package/lib/Cloudflare/KV/NamespaceReadBinding.js.map +1 -0
- package/lib/Cloudflare/KV/NamespaceReadHttp.d.ts +16 -0
- package/lib/Cloudflare/KV/NamespaceReadHttp.d.ts.map +1 -0
- package/lib/Cloudflare/KV/NamespaceReadHttp.js +93 -0
- package/lib/Cloudflare/KV/NamespaceReadHttp.js.map +1 -0
- package/lib/Cloudflare/KV/NamespaceReadWrite.d.ts +20 -0
- package/lib/Cloudflare/KV/NamespaceReadWrite.d.ts.map +1 -0
- package/lib/Cloudflare/KV/NamespaceReadWrite.js +11 -0
- package/lib/Cloudflare/KV/NamespaceReadWrite.js.map +1 -0
- package/lib/Cloudflare/KV/NamespaceReadWriteBinding.d.ts +11 -0
- package/lib/Cloudflare/KV/NamespaceReadWriteBinding.d.ts.map +1 -0
- package/lib/Cloudflare/KV/NamespaceReadWriteBinding.js +17 -0
- package/lib/Cloudflare/KV/NamespaceReadWriteBinding.js.map +1 -0
- package/lib/Cloudflare/KV/NamespaceReadWriteHttp.d.ts +17 -0
- package/lib/Cloudflare/KV/NamespaceReadWriteHttp.d.ts.map +1 -0
- package/lib/Cloudflare/KV/NamespaceReadWriteHttp.js +22 -0
- package/lib/Cloudflare/KV/NamespaceReadWriteHttp.js.map +1 -0
- package/lib/Cloudflare/KV/NamespaceTypes.d.ts +10 -0
- package/lib/Cloudflare/KV/NamespaceTypes.d.ts.map +1 -0
- package/lib/Cloudflare/KV/NamespaceTypes.js +4 -0
- package/lib/Cloudflare/KV/NamespaceTypes.js.map +1 -0
- package/lib/Cloudflare/KV/NamespaceWrite.d.ts +22 -0
- package/lib/Cloudflare/KV/NamespaceWrite.d.ts.map +1 -0
- package/lib/Cloudflare/KV/NamespaceWrite.js +11 -0
- package/lib/Cloudflare/KV/NamespaceWrite.js.map +1 -0
- package/lib/Cloudflare/KV/NamespaceWriteBinding.d.ts +11 -0
- package/lib/Cloudflare/KV/NamespaceWriteBinding.d.ts.map +1 -0
- package/lib/Cloudflare/KV/NamespaceWriteBinding.js +17 -0
- package/lib/Cloudflare/KV/NamespaceWriteBinding.js.map +1 -0
- package/lib/Cloudflare/KV/NamespaceWriteHttp.d.ts +16 -0
- package/lib/Cloudflare/KV/NamespaceWriteHttp.d.ts.map +1 -0
- package/lib/Cloudflare/KV/NamespaceWriteHttp.js +54 -0
- package/lib/Cloudflare/KV/NamespaceWriteHttp.js.map +1 -0
- package/lib/Cloudflare/KV/index.d.ts +11 -2
- package/lib/Cloudflare/KV/index.d.ts.map +1 -1
- package/lib/Cloudflare/KV/index.js +11 -2
- package/lib/Cloudflare/KV/index.js.map +1 -1
- package/lib/Cloudflare/Providers.d.ts +2 -2
- package/lib/Cloudflare/Providers.d.ts.map +1 -1
- package/lib/Cloudflare/Providers.js +5 -13
- package/lib/Cloudflare/Providers.js.map +1 -1
- package/lib/Cloudflare/Queue/Queue.d.ts +8 -8
- package/lib/Cloudflare/Queue/Queue.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/Queue.js +9 -9
- package/lib/Cloudflare/Queue/Queue.js.map +1 -1
- package/lib/Cloudflare/Queue/QueueBinding.d.ts +17 -65
- package/lib/Cloudflare/Queue/QueueBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/QueueBinding.js +35 -78
- package/lib/Cloudflare/Queue/QueueBinding.js.map +1 -1
- package/lib/Cloudflare/Queue/QueueEventSource.d.ts +5 -4
- package/lib/Cloudflare/Queue/QueueEventSource.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/QueueEventSource.js +1 -1
- package/lib/Cloudflare/Queue/QueueEventSource.js.map +1 -1
- package/lib/Cloudflare/Queue/QueueHttp.d.ts +36 -0
- package/lib/Cloudflare/Queue/QueueHttp.d.ts.map +1 -0
- package/lib/Cloudflare/Queue/QueueHttp.js +57 -0
- package/lib/Cloudflare/Queue/QueueHttp.js.map +1 -0
- package/lib/Cloudflare/Queue/QueueTypes.d.ts +19 -0
- package/lib/Cloudflare/Queue/QueueTypes.d.ts.map +1 -0
- package/lib/Cloudflare/Queue/QueueTypes.js +4 -0
- package/lib/Cloudflare/Queue/QueueTypes.js.map +1 -0
- package/lib/Cloudflare/Queue/QueueWrite.d.ts +55 -0
- package/lib/Cloudflare/Queue/QueueWrite.d.ts.map +1 -0
- package/lib/Cloudflare/Queue/QueueWrite.js +42 -0
- package/lib/Cloudflare/Queue/QueueWrite.js.map +1 -0
- package/lib/Cloudflare/Queue/QueueWriteBinding.d.ts +11 -0
- package/lib/Cloudflare/Queue/QueueWriteBinding.d.ts.map +1 -0
- package/lib/Cloudflare/Queue/QueueWriteBinding.js +19 -0
- package/lib/Cloudflare/Queue/QueueWriteBinding.js.map +1 -0
- package/lib/Cloudflare/Queue/QueueWriteHttp.d.ts +22 -0
- package/lib/Cloudflare/Queue/QueueWriteHttp.d.ts.map +1 -0
- package/lib/Cloudflare/Queue/QueueWriteHttp.js +50 -0
- package/lib/Cloudflare/Queue/QueueWriteHttp.js.map +1 -0
- package/lib/Cloudflare/Queue/index.d.ts +4 -1
- package/lib/Cloudflare/Queue/index.d.ts.map +1 -1
- package/lib/Cloudflare/Queue/index.js +4 -1
- package/lib/Cloudflare/Queue/index.js.map +1 -1
- package/lib/Cloudflare/R2/{R2Bucket.d.ts → Bucket.d.ts} +5 -9
- package/lib/Cloudflare/R2/Bucket.d.ts.map +1 -0
- package/lib/Cloudflare/R2/{R2Bucket.js → Bucket.js} +6 -9
- package/lib/Cloudflare/R2/Bucket.js.map +1 -0
- package/lib/Cloudflare/R2/BucketBinding.d.ts +31 -0
- package/lib/Cloudflare/R2/BucketBinding.d.ts.map +1 -0
- package/lib/Cloudflare/R2/BucketBinding.js +83 -0
- package/lib/Cloudflare/R2/BucketBinding.js.map +1 -0
- package/lib/Cloudflare/R2/BucketEventNotification.d.ts +1 -1
- package/lib/Cloudflare/R2/BucketEventNotification.d.ts.map +1 -1
- package/lib/Cloudflare/R2/BucketHttp.d.ts +59 -0
- package/lib/Cloudflare/R2/BucketHttp.d.ts.map +1 -0
- package/lib/Cloudflare/R2/BucketHttp.js +129 -0
- package/lib/Cloudflare/R2/BucketHttp.js.map +1 -0
- package/lib/Cloudflare/R2/BucketRead.d.ts +28 -0
- package/lib/Cloudflare/R2/BucketRead.d.ts.map +1 -0
- package/lib/Cloudflare/R2/BucketRead.js +11 -0
- package/lib/Cloudflare/R2/BucketRead.js.map +1 -0
- package/lib/Cloudflare/R2/BucketReadBinding.d.ts +10 -0
- package/lib/Cloudflare/R2/BucketReadBinding.d.ts.map +1 -0
- package/lib/Cloudflare/R2/BucketReadBinding.js +24 -0
- package/lib/Cloudflare/R2/BucketReadBinding.js.map +1 -0
- package/lib/Cloudflare/R2/BucketReadHttp.d.ts +15 -0
- package/lib/Cloudflare/R2/BucketReadHttp.d.ts.map +1 -0
- package/lib/Cloudflare/R2/BucketReadHttp.js +109 -0
- package/lib/Cloudflare/R2/BucketReadHttp.js.map +1 -0
- package/lib/Cloudflare/R2/BucketReadWrite.d.ts +20 -0
- package/lib/Cloudflare/R2/BucketReadWrite.d.ts.map +1 -0
- package/lib/Cloudflare/R2/BucketReadWrite.js +11 -0
- package/lib/Cloudflare/R2/BucketReadWrite.js.map +1 -0
- package/lib/Cloudflare/R2/BucketReadWriteBinding.d.ts +10 -0
- package/lib/Cloudflare/R2/BucketReadWriteBinding.d.ts.map +1 -0
- package/lib/Cloudflare/R2/BucketReadWriteBinding.js +16 -0
- package/lib/Cloudflare/R2/BucketReadWriteBinding.js.map +1 -0
- package/lib/Cloudflare/R2/BucketReadWriteHttp.d.ts +16 -0
- package/lib/Cloudflare/R2/BucketReadWriteHttp.d.ts.map +1 -0
- package/lib/Cloudflare/R2/BucketReadWriteHttp.js +21 -0
- package/lib/Cloudflare/R2/BucketReadWriteHttp.js.map +1 -0
- package/lib/Cloudflare/R2/BucketSippy.d.ts +1 -1
- package/lib/Cloudflare/R2/BucketSippy.d.ts.map +1 -1
- package/lib/Cloudflare/R2/BucketTypes.d.ts +52 -0
- package/lib/Cloudflare/R2/BucketTypes.d.ts.map +1 -0
- package/lib/Cloudflare/R2/BucketTypes.js +6 -0
- package/lib/Cloudflare/R2/BucketTypes.js.map +1 -0
- package/lib/Cloudflare/R2/BucketWrite.d.ts +32 -0
- package/lib/Cloudflare/R2/BucketWrite.d.ts.map +1 -0
- package/lib/Cloudflare/R2/BucketWrite.js +12 -0
- package/lib/Cloudflare/R2/BucketWrite.js.map +1 -0
- package/lib/Cloudflare/R2/BucketWriteBinding.d.ts +10 -0
- package/lib/Cloudflare/R2/BucketWriteBinding.d.ts.map +1 -0
- package/lib/Cloudflare/R2/BucketWriteBinding.js +46 -0
- package/lib/Cloudflare/R2/BucketWriteBinding.js.map +1 -0
- package/lib/Cloudflare/R2/BucketWriteHttp.d.ts +16 -0
- package/lib/Cloudflare/R2/BucketWriteHttp.d.ts.map +1 -0
- package/lib/Cloudflare/R2/BucketWriteHttp.js +72 -0
- package/lib/Cloudflare/R2/BucketWriteHttp.js.map +1 -0
- package/lib/Cloudflare/R2/index.d.ts +10 -2
- package/lib/Cloudflare/R2/index.d.ts.map +1 -1
- package/lib/Cloudflare/R2/index.js +10 -2
- package/lib/Cloudflare/R2/index.js.map +1 -1
- package/lib/Cloudflare/RateLimit/RateLimitBinding.d.ts +4 -3
- package/lib/Cloudflare/RateLimit/RateLimitBinding.d.ts.map +1 -1
- package/lib/Cloudflare/RateLimit/RateLimitBinding.js.map +1 -1
- package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts +4 -3
- package/lib/Cloudflare/SecretsStore/SecretBinding.d.ts.map +1 -1
- package/lib/Cloudflare/SecretsStore/SecretBinding.js.map +1 -1
- package/lib/Cloudflare/StateStore/Api.d.ts +6 -6
- package/lib/Cloudflare/StateStore/Api.js +1 -1
- package/lib/Cloudflare/StateStore/Api.js.map +1 -1
- package/lib/Cloudflare/StateStore/State.d.ts +1 -1
- package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/State.js +6 -5
- package/lib/Cloudflare/StateStore/State.js.map +1 -1
- package/lib/Cloudflare/StateStore/Store.d.ts +13 -13
- package/lib/Cloudflare/StateStore/Store.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/Store.js +5 -7
- package/lib/Cloudflare/StateStore/Store.js.map +1 -1
- package/lib/Cloudflare/Tunnel/Tunnel.js +1 -1
- package/lib/Cloudflare/Tunnel/Tunnel.js.map +1 -1
- package/lib/Cloudflare/Tunnel/TunnelBinding.d.ts +2 -11
- package/lib/Cloudflare/Tunnel/TunnelBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/TunnelBinding.js +0 -10
- package/lib/Cloudflare/Tunnel/TunnelBinding.js.map +1 -1
- package/lib/Cloudflare/Tunnel/TunnelRead.d.ts +3 -2
- package/lib/Cloudflare/Tunnel/TunnelRead.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/TunnelRead.js +2 -1
- package/lib/Cloudflare/Tunnel/TunnelRead.js.map +1 -1
- package/lib/Cloudflare/Tunnel/TunnelReadWrite.d.ts +3 -2
- package/lib/Cloudflare/Tunnel/TunnelReadWrite.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/TunnelReadWrite.js.map +1 -1
- package/lib/Cloudflare/Tunnel/TunnelWrite.d.ts +3 -2
- package/lib/Cloudflare/Tunnel/TunnelWrite.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/TunnelWrite.js +2 -1
- package/lib/Cloudflare/Tunnel/TunnelWrite.js.map +1 -1
- package/lib/Cloudflare/Tunnel/WarpConnector.js +1 -1
- package/lib/Cloudflare/Tunnel/WarpConnector.js.map +1 -1
- package/lib/Cloudflare/UrlNormalization/UrlNormalization.d.ts.map +1 -1
- package/lib/Cloudflare/UrlNormalization/UrlNormalization.js +10 -1
- package/lib/Cloudflare/UrlNormalization/UrlNormalization.js.map +1 -1
- package/lib/Cloudflare/Vectorize/VectorizeIndexBinding.d.ts +4 -3
- package/lib/Cloudflare/Vectorize/VectorizeIndexBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Vectorize/VectorizeIndexBinding.js.map +1 -1
- package/lib/Cloudflare/VpcService/VpcService.js +1 -1
- package/lib/Cloudflare/VpcService/VpcService.js.map +1 -1
- package/lib/Cloudflare/WaitingRoom/Settings.d.ts.map +1 -1
- package/lib/Cloudflare/WaitingRoom/Settings.js +17 -3
- package/lib/Cloudflare/WaitingRoom/Settings.js.map +1 -1
- package/lib/Cloudflare/Website/StaticSite.d.ts +5 -4
- package/lib/Cloudflare/Website/StaticSite.d.ts.map +1 -1
- package/lib/Cloudflare/Website/StaticSite.js +8 -8
- package/lib/Cloudflare/Website/StaticSite.js.map +1 -1
- package/lib/Cloudflare/Website/Vite.d.ts +1 -1
- package/lib/Cloudflare/Website/Vite.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/AccountSetting.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/AccountSetting.js +12 -4
- package/lib/Cloudflare/Workers/AccountSetting.js.map +1 -1
- package/lib/Cloudflare/Workers/Assets.js +6 -6
- package/lib/Cloudflare/Workers/Assets.js.map +1 -1
- package/lib/Cloudflare/Workers/CronEventSource.d.ts +4 -3
- package/lib/Cloudflare/Workers/CronEventSource.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/CronEventSource.js +1 -1
- package/lib/Cloudflare/Workers/CronEventSource.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectBridge.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectBridge.js +15 -9
- package/lib/Cloudflare/Workers/DurableObjectBridge.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectChatPersistence.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectChatPersistence.js +7 -6
- package/lib/Cloudflare/Workers/DurableObjectChatPersistence.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts +67 -52
- package/lib/Cloudflare/Workers/DurableObjectNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectNamespace.js +75 -50
- package/lib/Cloudflare/Workers/DurableObjectNamespace.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectState.d.ts +11 -10
- package/lib/Cloudflare/Workers/DurableObjectState.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectState.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectStorage.d.ts +35 -35
- package/lib/Cloudflare/Workers/DurableObjectStorage.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectStorage.js +0 -1
- package/lib/Cloudflare/Workers/DurableObjectStorage.js.map +1 -1
- package/lib/Cloudflare/Workers/Fetch.d.ts +4 -3
- package/lib/Cloudflare/Workers/Fetch.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Fetch.js.map +1 -1
- package/lib/Cloudflare/Workers/GitHubRepositoryEventSource.d.ts +4 -3
- package/lib/Cloudflare/Workers/GitHubRepositoryEventSource.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/GitHubRepositoryEventSource.js.map +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts +1 -1
- package/lib/Cloudflare/Workers/InferEnv.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js +14 -15
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
- package/lib/Cloudflare/Workers/Rpc.d.ts +1 -75
- package/lib/Cloudflare/Workers/Rpc.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Rpc.js +7 -162
- package/lib/Cloudflare/Workers/Rpc.js.map +1 -1
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.d.ts +8 -6
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.js +5 -4
- package/lib/Cloudflare/Workers/RpcDurableObjectNamespace.js.map +1 -1
- package/lib/Cloudflare/Workers/RpcWorker.d.ts +4 -3
- package/lib/Cloudflare/Workers/RpcWorker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/RpcWorker.js +3 -3
- package/lib/Cloudflare/Workers/RpcWorker.js.map +1 -1
- package/lib/Cloudflare/Workers/ScheduledEvents.d.ts +5 -4
- package/lib/Cloudflare/Workers/ScheduledEvents.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/ScheduledEvents.js +2 -2
- package/lib/Cloudflare/Workers/ScheduledEvents.js.map +1 -1
- package/lib/Cloudflare/Workers/VersionMetadataBinding.d.ts +4 -3
- package/lib/Cloudflare/Workers/VersionMetadataBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/VersionMetadataBinding.js.map +1 -1
- package/lib/Cloudflare/Workers/WebSocket.d.ts +1 -1
- package/lib/Cloudflare/Workers/WebSocket.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WebSocket.js +1 -1
- package/lib/Cloudflare/Workers/WebSocket.js.map +1 -1
- package/lib/Cloudflare/Workers/Worker.d.ts +64 -33
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +22 -1297
- package/lib/Cloudflare/Workers/Worker.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +5 -5
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts +15 -14
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.js +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBridge.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBridge.js +22 -18
- package/lib/Cloudflare/Workers/WorkerBridge.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBundle.js +3 -3
- package/lib/Cloudflare/Workers/WorkerBundle.js.map +1 -1
- package/lib/Cloudflare/Workers/{DynamicWorkerLoader.d.ts → WorkerLoader.d.ts} +47 -98
- package/lib/Cloudflare/Workers/WorkerLoader.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/{DynamicWorkerLoader.js → WorkerLoader.js} +40 -32
- package/lib/Cloudflare/Workers/WorkerLoader.js.map +1 -0
- package/lib/Cloudflare/Workers/WorkerProvider.d.ts +9 -0
- package/lib/Cloudflare/Workers/WorkerProvider.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/WorkerProvider.js +1318 -0
- package/lib/Cloudflare/Workers/WorkerProvider.js.map +1 -0
- package/lib/Cloudflare/Workers/Workflow.d.ts +3 -2
- package/lib/Cloudflare/Workers/Workflow.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Workflow.js +4 -4
- package/lib/Cloudflare/Workers/Workflow.js.map +1 -1
- package/lib/Cloudflare/Workers/index.d.ts +2 -2
- package/lib/Cloudflare/Workers/index.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/index.js +2 -2
- package/lib/Cloudflare/Workers/index.js.map +1 -1
- package/lib/Cloudflare/Zaraz/ZarazConfig.js +1 -1
- package/lib/Cloudflare/Zaraz/ZarazConfig.js.map +1 -1
- package/lib/Cloudflare/Zone/Hold.d.ts.map +1 -1
- package/lib/Cloudflare/Zone/Hold.js +15 -1
- package/lib/Cloudflare/Zone/Hold.js.map +1 -1
- package/lib/Cloudflare/index.d.ts +3 -0
- package/lib/Cloudflare/index.d.ts.map +1 -1
- package/lib/Cloudflare/index.js +3 -0
- package/lib/Cloudflare/index.js.map +1 -1
- package/lib/Command/Build.d.ts +98 -0
- package/lib/Command/Build.d.ts.map +1 -0
- package/lib/Command/Build.js +118 -0
- package/lib/Command/Build.js.map +1 -0
- package/lib/Command/Command.d.ts +99 -0
- package/lib/Command/Command.d.ts.map +1 -0
- package/lib/Command/Command.js +118 -0
- package/lib/Command/Command.js.map +1 -0
- package/lib/Command/Dev.d.ts +73 -0
- package/lib/Command/Dev.d.ts.map +1 -0
- package/lib/Command/Dev.js +145 -0
- package/lib/Command/Dev.js.map +1 -0
- package/lib/Command/Exec.d.ts +70 -0
- package/lib/Command/Exec.d.ts.map +1 -0
- package/lib/Command/Exec.js +87 -0
- package/lib/Command/Exec.js.map +1 -0
- package/lib/{Build → Command}/Local.d.ts.map +1 -1
- package/lib/Command/Local.js +6 -0
- package/lib/Command/Local.js.map +1 -0
- package/lib/Command/Memo.d.ts.map +1 -0
- package/lib/{Build → Command}/Memo.js +5 -5
- package/lib/Command/Memo.js.map +1 -0
- package/lib/Command/Providers.d.ts +4 -0
- package/lib/Command/Providers.d.ts.map +1 -0
- package/lib/Command/Providers.js +31 -0
- package/lib/Command/Providers.js.map +1 -0
- package/lib/Command/index.d.ts +6 -0
- package/lib/Command/index.d.ts.map +1 -0
- package/lib/Command/index.js +6 -0
- package/lib/Command/index.js.map +1 -0
- package/lib/Drizzle/Providers.d.ts +1 -1
- package/lib/Drizzle/Providers.d.ts.map +1 -1
- package/lib/Drizzle/Schema.d.ts +1 -1
- package/lib/Drizzle/Schema.d.ts.map +1 -1
- package/lib/Drizzle/Schema.js +147 -12
- package/lib/Drizzle/Schema.js.map +1 -1
- package/lib/GitHub/AuthProvider.js +2 -2
- package/lib/GitHub/AuthProvider.js.map +1 -1
- package/lib/GitHub/Secrets.d.ts.map +1 -1
- package/lib/GitHub/Secrets.js +12 -9
- package/lib/GitHub/Secrets.js.map +1 -1
- package/lib/Local/RpcProvider.d.ts +2 -2
- package/lib/Local/RpcProvider.d.ts.map +1 -1
- package/lib/Local/RpcProvider.js.map +1 -1
- package/lib/Local/RpcProviderProxy.js +3 -3
- package/lib/Local/RpcProviderProxy.js.map +1 -1
- package/lib/Local/RpcServerBun.js +1 -1
- package/lib/Local/RpcServerBun.js.map +1 -1
- package/lib/Local/RpcServerNode.js +1 -1
- package/lib/Local/RpcServerNode.js.map +1 -1
- package/lib/Local/RpcSpawner.js +3 -3
- package/lib/Local/RpcSpawner.js.map +1 -1
- package/lib/Named.d.ts +7 -0
- package/lib/Named.d.ts.map +1 -0
- package/lib/Named.js +1 -0
- package/lib/Named.js.map +1 -0
- package/lib/Neon/AuthProvider.js +2 -2
- package/lib/Neon/AuthProvider.js.map +1 -1
- package/lib/Neon/Branch.d.ts +0 -2
- package/lib/Neon/Branch.d.ts.map +1 -1
- package/lib/Neon/Branch.js +22 -8
- package/lib/Neon/Branch.js.map +1 -1
- package/lib/Neon/Project.js +2 -2
- package/lib/Neon/Project.js.map +1 -1
- package/lib/Phase.d.ts +15 -0
- package/lib/Phase.d.ts.map +1 -1
- package/lib/Phase.js.map +1 -1
- package/lib/Plan.d.ts.map +1 -1
- package/lib/Plan.js +12 -0
- package/lib/Plan.js.map +1 -1
- package/lib/Planetscale/AuthProvider.js +2 -2
- package/lib/Planetscale/AuthProvider.js.map +1 -1
- package/lib/Platform.d.ts +23 -14
- package/lib/Platform.d.ts.map +1 -1
- package/lib/Platform.js +9 -9
- package/lib/Platform.js.map +1 -1
- package/lib/Provider.d.ts +4 -4
- package/lib/Provider.d.ts.map +1 -1
- package/lib/Provider.js +1 -1
- package/lib/Provider.js.map +1 -1
- package/lib/Resource.d.ts +12 -6
- package/lib/Resource.d.ts.map +1 -1
- package/lib/Resource.js.map +1 -1
- package/lib/Rpc.d.ts +124 -1
- package/lib/Rpc.d.ts.map +1 -1
- package/lib/Rpc.js +342 -0
- package/lib/Rpc.js.map +1 -1
- package/lib/RuntimeContext.d.ts +1 -0
- package/lib/RuntimeContext.d.ts.map +1 -1
- package/lib/RuntimeContext.js +1 -0
- package/lib/RuntimeContext.js.map +1 -1
- package/lib/Self.d.ts +4 -0
- package/lib/Self.d.ts.map +1 -1
- package/lib/Self.js.map +1 -1
- package/lib/Server/S3BucketEventSource.d.ts +4 -3
- package/lib/Server/S3BucketEventSource.d.ts.map +1 -1
- package/lib/Server/S3BucketEventSource.js.map +1 -1
- package/lib/Stack.d.ts +11 -3
- package/lib/Stack.d.ts.map +1 -1
- package/lib/Stack.js +6 -2
- package/lib/Stack.js.map +1 -1
- package/lib/State/HttpStateApi.d.ts +15 -15
- package/lib/State/LocalState.js +1 -1
- package/lib/State/LocalState.js.map +1 -1
- package/lib/State/Sync.js +4 -4
- package/lib/State/Sync.js.map +1 -1
- package/lib/Tags.d.ts.map +1 -1
- package/lib/Tags.js +3 -3
- package/lib/Tags.js.map +1 -1
- package/lib/Test/Bun.d.ts +1 -1
- package/lib/Test/Bun.d.ts.map +1 -1
- package/lib/Test/Bun.js +1 -0
- package/lib/Test/Bun.js.map +1 -1
- package/lib/Test/Http.d.ts +42 -0
- package/lib/Test/Http.d.ts.map +1 -0
- package/lib/Test/Http.js +48 -0
- package/lib/Test/Http.js.map +1 -0
- package/lib/Util/FileLogger.js +1 -1
- package/lib/Util/FileLogger.js.map +1 -1
- package/lib/Util/effect.d.ts.map +1 -1
- package/lib/Util/effect.js +2 -1
- package/lib/Util/effect.js.map +1 -1
- package/lib/Util/interactive.d.ts +16 -0
- package/lib/Util/interactive.d.ts.map +1 -0
- package/lib/Util/interactive.js +35 -0
- package/lib/Util/interactive.js.map +1 -0
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +23 -10
- package/src/AI/Agent.ts +78 -0
- package/src/AI/Parameter.ts +57 -0
- package/src/AI/Tool.ts +98 -0
- package/src/AI/index.ts +3 -0
- package/src/AWS/ACM/Certificate.ts +30 -20
- package/src/AWS/Assets.ts +1 -1
- package/src/AWS/AuthProvider.ts +3 -3
- package/src/AWS/AutoScaling/LaunchTemplate.ts +1 -1
- package/src/AWS/CloudFront/Distribution.ts +1 -1
- package/src/AWS/CloudWatch/DescribeAlarmContributors.ts +3 -1
- package/src/AWS/CloudWatch/DescribeAlarmHistory.ts +3 -1
- package/src/AWS/CloudWatch/DescribeAlarms.ts +3 -1
- package/src/AWS/CloudWatch/DescribeAlarmsForMetric.ts +3 -1
- package/src/AWS/CloudWatch/DescribeAnomalyDetectors.ts +3 -1
- package/src/AWS/CloudWatch/DescribeInsightRules.ts +3 -1
- package/src/AWS/CloudWatch/DisableAlarmActions.ts +3 -1
- package/src/AWS/CloudWatch/DisableInsightRules.ts +3 -1
- package/src/AWS/CloudWatch/EnableAlarmActions.ts +3 -1
- package/src/AWS/CloudWatch/GetAlarmMuteRule.ts +3 -1
- package/src/AWS/CloudWatch/GetDashboard.ts +3 -1
- package/src/AWS/CloudWatch/GetInsightRuleReport.ts +3 -1
- package/src/AWS/CloudWatch/GetMetricData.ts +3 -1
- package/src/AWS/CloudWatch/GetMetricStatistics.ts +3 -1
- package/src/AWS/CloudWatch/GetMetricStream.ts +3 -1
- package/src/AWS/CloudWatch/GetMetricWidgetImage.ts +3 -1
- package/src/AWS/CloudWatch/ListAlarmMuteRules.ts +3 -1
- package/src/AWS/CloudWatch/ListDashboards.ts +3 -1
- package/src/AWS/CloudWatch/ListManagedInsightRules.ts +3 -1
- package/src/AWS/CloudWatch/ListMetricStreams.ts +3 -1
- package/src/AWS/CloudWatch/ListMetrics.ts +3 -1
- package/src/AWS/CloudWatch/ListTagsForResource.ts +3 -1
- package/src/AWS/CloudWatch/PutMetricData.ts +3 -1
- package/src/AWS/CloudWatch/SetAlarmState.ts +3 -1
- package/src/AWS/Credentials.ts +6 -0
- package/src/AWS/DynamoDB/BatchExecuteStatement.ts +3 -1
- package/src/AWS/DynamoDB/BatchGetItem.ts +10 -6
- package/src/AWS/DynamoDB/BatchWriteItem.ts +10 -6
- package/src/AWS/DynamoDB/DeleteItem.ts +3 -1
- package/src/AWS/DynamoDB/DescribeTable.ts +3 -1
- package/src/AWS/DynamoDB/DescribeTimeToLive.ts +3 -1
- package/src/AWS/DynamoDB/ExecuteStatement.ts +3 -1
- package/src/AWS/DynamoDB/ExecuteTransaction.ts +3 -1
- package/src/AWS/DynamoDB/GetItem.ts +3 -1
- package/src/AWS/DynamoDB/ListTables.ts +3 -1
- package/src/AWS/DynamoDB/ListTagsOfResource.ts +3 -1
- package/src/AWS/DynamoDB/PutItem.ts +3 -1
- package/src/AWS/DynamoDB/Query.ts +3 -1
- package/src/AWS/DynamoDB/RestoreTableToPointInTime.ts +3 -1
- package/src/AWS/DynamoDB/Scan.ts +3 -1
- package/src/AWS/DynamoDB/TransactGetItems.ts +10 -6
- package/src/AWS/DynamoDB/TransactWriteItems.ts +14 -8
- package/src/AWS/DynamoDB/UpdateItem.ts +3 -1
- package/src/AWS/DynamoDB/UpdateTimeToLive.ts +3 -1
- package/src/AWS/EC2/Image.ts +2 -2
- package/src/AWS/EC2/Instance.ts +1 -3
- package/src/AWS/EC2/NatGateway.ts +1 -1
- package/src/AWS/EC2/NetworkAcl.ts +1 -1
- package/src/AWS/EC2/SecurityGroup.ts +1 -1
- package/src/AWS/EC2/VpcEndpoint.ts +1 -1
- package/src/AWS/EC2/hosted.ts +2 -2
- package/src/AWS/ECS/DescribeTasks.ts +3 -1
- package/src/AWS/ECS/ListTasks.ts +3 -1
- package/src/AWS/ECS/RunTask.ts +3 -1
- package/src/AWS/ECS/StopTask.ts +3 -1
- package/src/AWS/ECS/Task.ts +1 -1
- package/src/AWS/Environment.ts +4 -3
- package/src/AWS/EventBridge/DescribeEventBus.ts +3 -1
- package/src/AWS/EventBridge/DescribeRule.ts +3 -1
- package/src/AWS/EventBridge/ListEventBuses.ts +3 -1
- package/src/AWS/EventBridge/ListRules.ts +3 -1
- package/src/AWS/EventBridge/ListTargetsByRule.ts +3 -1
- package/src/AWS/EventBridge/PutEvents.ts +3 -1
- package/src/AWS/EventBridge/TestEventPattern.ts +3 -1
- package/src/AWS/EventBridge/ToLambda.ts +3 -1
- package/src/AWS/EventBridge/ToQueue.ts +3 -1
- package/src/AWS/Kinesis/DescribeAccountSettings.ts +3 -1
- package/src/AWS/Kinesis/DescribeLimits.ts +3 -1
- package/src/AWS/Kinesis/DescribeStream.ts +3 -1
- package/src/AWS/Kinesis/DescribeStreamConsumer.ts +3 -1
- package/src/AWS/Kinesis/DescribeStreamSummary.ts +3 -1
- package/src/AWS/Kinesis/GetRecords.ts +3 -1
- package/src/AWS/Kinesis/GetResourcePolicy.ts +3 -1
- package/src/AWS/Kinesis/GetShardIterator.ts +3 -1
- package/src/AWS/Kinesis/ListShards.ts +3 -1
- package/src/AWS/Kinesis/ListStreamConsumers.ts +3 -1
- package/src/AWS/Kinesis/ListStreams.ts +3 -1
- package/src/AWS/Kinesis/ListTagsForResource.ts +3 -1
- package/src/AWS/Kinesis/PutRecord.ts +3 -1
- package/src/AWS/Kinesis/PutRecords.ts +3 -1
- package/src/AWS/Kinesis/StreamSink.ts +3 -1
- package/src/AWS/Kinesis/SubscribeToShard.ts +3 -1
- package/src/AWS/Lambda/BucketEventSource.ts +3 -1
- package/src/AWS/Lambda/EventBridgeEventSource.ts +3 -1
- package/src/AWS/Lambda/Function.ts +182 -55
- package/src/AWS/Lambda/InvokeFunction.ts +3 -1
- package/src/AWS/Lambda/QueueEventSource.ts +3 -1
- package/src/AWS/Lambda/StreamEventSource.ts +3 -1
- package/src/AWS/Lambda/TableEventSource.ts +3 -1
- package/src/AWS/Lambda/TopicEventSource.ts +3 -1
- package/src/AWS/Organizations/Root.ts +1 -1
- package/src/AWS/Providers.ts +4 -5
- package/src/AWS/RDS/Connect.ts +3 -1
- package/src/AWS/RDSData/BatchExecuteStatement.ts +3 -1
- package/src/AWS/RDSData/BeginTransaction.ts +3 -1
- package/src/AWS/RDSData/CommitTransaction.ts +6 -1
- package/src/AWS/RDSData/ExecuteSql.ts +3 -1
- package/src/AWS/RDSData/ExecuteStatement.ts +3 -1
- package/src/AWS/RDSData/RollbackTransaction.ts +3 -1
- package/src/AWS/Region.ts +6 -0
- package/src/AWS/S3/AbortMultipartUpload.ts +3 -1
- package/src/AWS/S3/Bucket.ts +18 -18
- package/src/AWS/S3/CompleteMultipartUpload.ts +3 -1
- package/src/AWS/S3/CopyObject.ts +3 -1
- package/src/AWS/S3/CreateMultipartUpload.ts +3 -1
- package/src/AWS/S3/DeleteObject.ts +3 -1
- package/src/AWS/S3/GetObject.ts +3 -1
- package/src/AWS/S3/HeadObject.ts +3 -1
- package/src/AWS/S3/ListObjectsV2.ts +3 -1
- package/src/AWS/S3/PutObject.ts +3 -1
- package/src/AWS/S3/UploadPart.ts +3 -1
- package/src/AWS/SNS/AddPermission.ts +3 -1
- package/src/AWS/SNS/ConfirmSubscription.ts +3 -1
- package/src/AWS/SNS/GetDataProtectionPolicy.ts +3 -1
- package/src/AWS/SNS/GetSubscriptionAttributes.ts +3 -1
- package/src/AWS/SNS/GetTopicAttributes.ts +3 -1
- package/src/AWS/SNS/ListSubscriptions.ts +3 -1
- package/src/AWS/SNS/ListSubscriptionsByTopic.ts +3 -1
- package/src/AWS/SNS/ListTagsForResource.ts +3 -1
- package/src/AWS/SNS/ListTopics.ts +3 -1
- package/src/AWS/SNS/Publish.ts +3 -1
- package/src/AWS/SNS/PublishBatch.ts +3 -1
- package/src/AWS/SNS/PutDataProtectionPolicy.ts +3 -1
- package/src/AWS/SNS/RemovePermission.ts +3 -1
- package/src/AWS/SNS/SetSubscriptionAttributes.ts +3 -1
- package/src/AWS/SNS/SetTopicAttributes.ts +3 -1
- package/src/AWS/SNS/TagResource.ts +3 -1
- package/src/AWS/SNS/TopicSink.ts +3 -1
- package/src/AWS/SNS/UntagResource.ts +3 -1
- package/src/AWS/SQS/DeleteMessage.ts +3 -1
- package/src/AWS/SQS/DeleteMessageBatch.ts +3 -1
- package/src/AWS/SQS/Queue.ts +1 -1
- package/src/AWS/SQS/QueueSink.ts +3 -1
- package/src/AWS/SQS/ReceiveMessage.ts +3 -1
- package/src/AWS/SQS/SendMessage.ts +3 -1
- package/src/AWS/SQS/SendMessageBatch.ts +3 -1
- package/src/AWS/SecretsManager/DescribeSecret.ts +3 -1
- package/src/AWS/SecretsManager/GetRandomPassword.ts +3 -1
- package/src/AWS/SecretsManager/GetSecretValue.ts +3 -1
- package/src/AWS/SecretsManager/ListSecrets.ts +3 -1
- package/src/AWS/SecretsManager/PutSecretValue.ts +3 -1
- package/src/AWS/StateStore/State.ts +41 -9
- package/src/AWS/Website/Router.ts +212 -208
- package/src/AWS/Website/SsrSite.ts +208 -209
- package/src/AWS/Website/StaticSite.ts +284 -281
- package/src/AdoptPolicy.ts +1 -1
- package/src/Apply.ts +16 -7
- package/src/Auth/Lock.ts +4 -2
- package/src/Auth/Profile.ts +34 -12
- package/src/Axiom/AuthProvider.ts +2 -2
- package/src/Binding.ts +6 -2
- package/src/Bundle/Bundle.ts +53 -4
- package/src/Bundle/Docker.ts +23 -4
- package/src/Bundle/InstalledPackages.ts +615 -0
- package/src/Bundle/TempRoot.ts +1 -1
- package/src/Bundle/index.ts +1 -0
- package/src/Cli/commands/aws.ts +1 -1
- package/src/Cli/commands/cloudflare.ts +3 -10
- package/src/Cli/commands/login.ts +1 -1
- package/src/Cli/commands/logs.ts +1 -1
- package/src/Cli/commands/nuke.ts +1 -1
- package/src/Cli/commands/profile.ts +2 -2
- package/src/Cli/commands/state.ts +6 -11
- package/src/Cli/commands/tail.ts +1 -1
- package/src/Cli/selectCli.ts +2 -25
- package/src/Cloudflare/Access/Application.ts +63 -20
- package/src/Cloudflare/AiGateway/AiGateway.ts +186 -0
- package/src/Cloudflare/AiGateway/AiGatewayBinding.ts +3 -1
- package/src/Cloudflare/AiGateway/DurableObjectChatPersistence.ts +88 -0
- package/src/Cloudflare/AiGateway/LanguageModel.ts +1 -3
- package/src/Cloudflare/AiGateway/index.ts +1 -1
- package/src/Cloudflare/AiSearch/AiSearch.ts +89 -90
- package/src/Cloudflare/AiSearch/AiSearchBinding.ts +5 -2
- package/src/Cloudflare/AiSearch/AiSearchInstance.ts +31 -14
- package/src/Cloudflare/AnalyticsEngine/AnalyticsEngineDataset.ts +1 -4
- package/src/Cloudflare/AnalyticsEngine/AnalyticsEngineDatasetBinding.ts +5 -3
- package/src/Cloudflare/ApiShield/UserSchema.ts +5 -0
- package/src/Cloudflare/Artifacts/ArtifactsBinding.ts +3 -1
- package/src/Cloudflare/Auth/AuthProvider.ts +6 -3
- package/src/Cloudflare/Browser/BrowserBinding.ts +3 -1
- package/src/Cloudflare/Cache/RegionalTieredCache.ts +18 -0
- package/src/Cloudflare/ClientCertificate/ClientCertificate.ts +19 -12
- package/src/Cloudflare/CloudflareEnvironment.ts +3 -1
- package/src/Cloudflare/Container/Container.ts +313 -171
- package/src/Cloudflare/Container/ContainerApplication.ts +73 -893
- package/src/Cloudflare/Container/ContainerBundle.ts +78 -2
- package/src/Cloudflare/Container/ContainerPlatform.ts +220 -0
- package/src/Cloudflare/Container/ContainerProvider.ts +1052 -0
- package/src/Cloudflare/Container/LocalContainerProvider.ts +14 -7
- package/src/Cloudflare/Container/StartContainer.ts +65 -14
- package/src/Cloudflare/Container/index.ts +2 -1
- package/src/Cloudflare/Credentials.ts +6 -0
- package/src/Cloudflare/D1/D1Connection.ts +3 -1
- package/src/Cloudflare/Dns/DnsBinding.ts +1 -30
- package/src/Cloudflare/Dns/DnsRead.ts +5 -3
- package/src/Cloudflare/Dns/DnsReadWrite.ts +3 -1
- package/src/Cloudflare/Dns/DnsWrite.ts +5 -3
- package/src/Cloudflare/Email/EmailCatchAll.ts +1 -1
- package/src/Cloudflare/Email/EmailRouting.ts +1 -1
- package/src/Cloudflare/Email/EmailRule.ts +1 -1
- package/src/Cloudflare/Email/SendEmail.ts +1 -1
- package/src/Cloudflare/Email/SendEmailBinding.ts +5 -3
- package/src/Cloudflare/Fetcher.ts +86 -15
- package/src/Cloudflare/Flagship/FlagshipBinding.ts +3 -1
- package/src/Cloudflare/GoogleTagGateway/GoogleTagGateway.ts +1 -1
- package/src/Cloudflare/HttpClientUtils.ts +31 -0
- package/src/Cloudflare/Hyperdrive/HyperdriveBinding.ts +3 -1
- package/src/Cloudflare/Iam/UserGroupMembership.ts +7 -0
- package/src/Cloudflare/Images/ImagesBinding.ts +3 -1
- package/src/Cloudflare/Images/Variant.ts +20 -3
- package/src/Cloudflare/KV/{KVNamespace.ts → Namespace.ts} +9 -6
- package/src/Cloudflare/KV/NamespaceBinding.ts +68 -0
- package/src/Cloudflare/KV/NamespaceHttp.ts +89 -0
- package/src/Cloudflare/KV/{KVNamespaceBinding.ts → NamespaceRead.ts} +15 -104
- package/src/Cloudflare/KV/NamespaceReadBinding.ts +39 -0
- package/src/Cloudflare/KV/NamespaceReadHttp.ts +171 -0
- package/src/Cloudflare/KV/NamespaceReadWrite.ts +20 -0
- package/src/Cloudflare/KV/NamespaceReadWriteBinding.ts +32 -0
- package/src/Cloudflare/KV/NamespaceReadWriteHttp.ts +38 -0
- package/src/Cloudflare/KV/NamespaceTypes.ts +6 -0
- package/src/Cloudflare/KV/NamespaceWrite.ts +26 -0
- package/src/Cloudflare/KV/NamespaceWriteBinding.ts +34 -0
- package/src/Cloudflare/KV/NamespaceWriteHttp.ts +105 -0
- package/src/Cloudflare/KV/index.ts +11 -2
- package/src/Cloudflare/Providers.ts +4 -22
- package/src/Cloudflare/Queue/Queue.ts +9 -9
- package/src/Cloudflare/Queue/QueueBinding.ts +48 -131
- package/src/Cloudflare/Queue/QueueEventSource.ts +4 -2
- package/src/Cloudflare/Queue/QueueHttp.ts +86 -0
- package/src/Cloudflare/Queue/QueueTypes.ts +17 -0
- package/src/Cloudflare/Queue/QueueWrite.ts +64 -0
- package/src/Cloudflare/Queue/QueueWriteBinding.ts +33 -0
- package/src/Cloudflare/Queue/QueueWriteHttp.ts +82 -0
- package/src/Cloudflare/Queue/index.ts +4 -1
- package/src/Cloudflare/R2/{R2Bucket.ts → Bucket.ts} +6 -9
- package/src/Cloudflare/R2/BucketBinding.ts +115 -0
- package/src/Cloudflare/R2/BucketEventNotification.ts +1 -1
- package/src/Cloudflare/R2/BucketHttp.ts +201 -0
- package/src/Cloudflare/R2/BucketRead.ts +43 -0
- package/src/Cloudflare/R2/BucketReadBinding.ts +44 -0
- package/src/Cloudflare/R2/BucketReadHttp.ts +181 -0
- package/src/Cloudflare/R2/BucketReadWrite.ts +20 -0
- package/src/Cloudflare/R2/BucketReadWriteBinding.ts +26 -0
- package/src/Cloudflare/R2/BucketReadWriteHttp.ts +35 -0
- package/src/Cloudflare/R2/BucketSippy.ts +1 -1
- package/src/Cloudflare/R2/BucketTypes.ts +59 -0
- package/src/Cloudflare/R2/BucketWrite.ts +77 -0
- package/src/Cloudflare/R2/BucketWriteBinding.ts +111 -0
- package/src/Cloudflare/R2/BucketWriteHttp.ts +144 -0
- package/src/Cloudflare/R2/index.ts +10 -2
- package/src/Cloudflare/RateLimit/RateLimitBinding.ts +3 -1
- package/src/Cloudflare/SecretsStore/SecretBinding.ts +3 -1
- package/src/Cloudflare/StateStore/Api.ts +1 -1
- package/src/Cloudflare/StateStore/State.ts +6 -4
- package/src/Cloudflare/StateStore/Store.ts +5 -8
- package/src/Cloudflare/Tunnel/Tunnel.ts +1 -1
- package/src/Cloudflare/Tunnel/TunnelBinding.ts +1 -30
- package/src/Cloudflare/Tunnel/TunnelRead.ts +4 -2
- package/src/Cloudflare/Tunnel/TunnelReadWrite.ts +3 -1
- package/src/Cloudflare/Tunnel/TunnelWrite.ts +4 -2
- package/src/Cloudflare/Tunnel/WarpConnector.ts +1 -1
- package/src/Cloudflare/UrlNormalization/UrlNormalization.ts +12 -0
- package/src/Cloudflare/Vectorize/VectorizeIndexBinding.ts +3 -1
- package/src/Cloudflare/VpcService/VpcService.ts +1 -1
- package/src/Cloudflare/WaitingRoom/Settings.ts +19 -1
- package/src/Cloudflare/Website/StaticSite.ts +12 -11
- package/src/Cloudflare/Website/Vite.ts +1 -1
- package/src/Cloudflare/Workers/AccountSetting.ts +9 -6
- package/src/Cloudflare/Workers/Assets.ts +6 -6
- package/src/Cloudflare/Workers/CronEventSource.ts +4 -2
- package/src/Cloudflare/Workers/DurableObjectBridge.ts +22 -17
- package/src/Cloudflare/Workers/DurableObjectChatPersistence.ts +20 -4
- package/src/Cloudflare/Workers/DurableObjectNamespace.ts +125 -73
- package/src/Cloudflare/Workers/DurableObjectState.ts +25 -11
- package/src/Cloudflare/Workers/DurableObjectStorage.ts +50 -37
- package/src/Cloudflare/Workers/Fetch.ts +3 -1
- package/src/Cloudflare/Workers/GitHubRepositoryEventSource.ts +3 -1
- package/src/Cloudflare/Workers/InferEnv.ts +2 -2
- package/src/Cloudflare/Workers/LocalWorkerProvider.ts +15 -18
- package/src/Cloudflare/Workers/Rpc.ts +7 -273
- package/src/Cloudflare/Workers/RpcDurableObjectNamespace.ts +10 -8
- package/src/Cloudflare/Workers/RpcWorker.ts +8 -8
- package/src/Cloudflare/Workers/ScheduledEvents.ts +24 -20
- package/src/Cloudflare/Workers/VersionMetadataBinding.ts +3 -1
- package/src/Cloudflare/Workers/WebSocket.ts +1 -1
- package/src/Cloudflare/Workers/Worker.ts +157 -1799
- package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +5 -5
- package/src/Cloudflare/Workers/WorkerBinding.ts +8 -6
- package/src/Cloudflare/Workers/WorkerBridge.ts +22 -18
- package/src/Cloudflare/Workers/WorkerBundle.ts +3 -5
- package/src/Cloudflare/Workers/{DynamicWorkerLoader.ts → WorkerLoader.ts} +137 -140
- package/src/Cloudflare/Workers/WorkerProvider.ts +1771 -0
- package/src/Cloudflare/Workers/Workflow.ts +9 -5
- package/src/Cloudflare/Workers/index.ts +2 -2
- package/src/Cloudflare/Zaraz/ZarazConfig.ts +1 -1
- package/src/Cloudflare/Zone/Hold.ts +18 -0
- package/src/Cloudflare/index.ts +3 -0
- package/src/Command/Build.ts +187 -0
- package/src/Command/Command.ts +244 -0
- package/src/Command/Dev.ts +219 -0
- package/src/Command/Exec.ts +121 -0
- package/src/Command/Local.ts +6 -0
- package/src/{Build → Command}/Memo.ts +5 -5
- package/src/Command/Providers.ts +41 -0
- package/src/Command/index.ts +5 -0
- package/src/Drizzle/Schema.ts +213 -26
- package/src/GitHub/AuthProvider.ts +2 -2
- package/src/GitHub/Secrets.ts +15 -12
- package/src/Local/RpcProvider.ts +2 -2
- package/src/Local/RpcProviderProxy.ts +3 -3
- package/src/Local/RpcServerBun.ts +1 -1
- package/src/Local/RpcServerNode.ts +1 -1
- package/src/Local/RpcSpawner.ts +3 -3
- package/src/Named.ts +6 -0
- package/src/Neon/AuthProvider.ts +2 -2
- package/src/Neon/Branch.ts +25 -12
- package/src/Neon/Project.ts +2 -2
- package/src/Phase.ts +16 -0
- package/src/Plan.ts +12 -0
- package/src/Planetscale/AuthProvider.ts +2 -2
- package/src/Platform.ts +137 -96
- package/src/Provider.ts +5 -6
- package/src/Resource.ts +14 -7
- package/src/Rpc.ts +552 -1
- package/src/RuntimeContext.ts +3 -1
- package/src/Self.ts +5 -2
- package/src/Server/S3BucketEventSource.ts +3 -1
- package/src/Stack.ts +26 -5
- package/src/State/LocalState.ts +1 -1
- package/src/State/Sync.ts +4 -4
- package/src/Tags.ts +3 -5
- package/src/Test/Bun.ts +7 -0
- package/src/Test/Http.ts +74 -0
- package/src/Util/FileLogger.ts +1 -1
- package/src/Util/effect.ts +2 -1
- package/src/Util/interactive.ts +32 -0
- package/src/index.ts +2 -2
- package/lib/Build/Command.d.ts +0 -114
- package/lib/Build/Command.d.ts.map +0 -1
- package/lib/Build/Command.js +0 -191
- package/lib/Build/Command.js.map +0 -1
- package/lib/Build/DevServer.d.ts +0 -113
- package/lib/Build/DevServer.d.ts.map +0 -1
- package/lib/Build/DevServer.js +0 -220
- package/lib/Build/DevServer.js.map +0 -1
- package/lib/Build/Local.js +0 -4
- package/lib/Build/Local.js.map +0 -1
- package/lib/Build/Memo.d.ts.map +0 -1
- package/lib/Build/Memo.js.map +0 -1
- package/lib/Build/index.d.ts +0 -2
- package/lib/Build/index.d.ts.map +0 -1
- package/lib/Build/index.js +0 -2
- package/lib/Build/index.js.map +0 -1
- package/lib/Cloudflare/AiGateway/AiGatewaySpendingLimit.d.ts +0 -167
- package/lib/Cloudflare/AiGateway/AiGatewaySpendingLimit.d.ts.map +0 -1
- package/lib/Cloudflare/AiGateway/AiGatewaySpendingLimit.js +0 -263
- package/lib/Cloudflare/AiGateway/AiGatewaySpendingLimit.js.map +0 -1
- package/lib/Cloudflare/Container/ContainerBinding.d.ts +0 -8
- package/lib/Cloudflare/Container/ContainerBinding.d.ts.map +0 -1
- package/lib/Cloudflare/Container/ContainerBinding.js +0 -39
- package/lib/Cloudflare/Container/ContainerBinding.js.map +0 -1
- package/lib/Cloudflare/KV/KVNamespace.d.ts.map +0 -1
- package/lib/Cloudflare/KV/KVNamespace.js.map +0 -1
- package/lib/Cloudflare/KV/KVNamespaceBinding.d.ts.map +0 -1
- package/lib/Cloudflare/KV/KVNamespaceBinding.js +0 -63
- package/lib/Cloudflare/KV/KVNamespaceBinding.js.map +0 -1
- package/lib/Cloudflare/R2/R2Bucket.d.ts.map +0 -1
- package/lib/Cloudflare/R2/R2Bucket.js.map +0 -1
- package/lib/Cloudflare/R2/R2BucketBinding.d.ts +0 -92
- package/lib/Cloudflare/R2/R2BucketBinding.d.ts.map +0 -1
- package/lib/Cloudflare/R2/R2BucketBinding.js +0 -121
- package/lib/Cloudflare/R2/R2BucketBinding.js.map +0 -1
- package/lib/Cloudflare/Workers/DynamicWorkerLoader.d.ts.map +0 -1
- package/lib/Cloudflare/Workers/DynamicWorkerLoader.js.map +0 -1
- package/lib/Construct.d.ts +0 -56
- package/lib/Construct.d.ts.map +0 -1
- package/lib/Construct.js +0 -51
- package/lib/Construct.js.map +0 -1
- package/src/Build/Command.ts +0 -293
- package/src/Build/DevServer.ts +0 -338
- package/src/Build/Local.ts +0 -4
- package/src/Build/index.ts +0 -1
- package/src/Cloudflare/AiGateway/AiGatewaySpendingLimit.ts +0 -398
- package/src/Cloudflare/Container/ContainerBinding.ts +0 -74
- package/src/Cloudflare/R2/R2BucketBinding.ts +0 -339
- package/src/Construct.ts +0 -71
- /package/lib/{Build → Command}/Local.d.ts +0 -0
- /package/lib/{Build → Command}/Memo.d.ts +0 -0
|
@@ -0,0 +1,1771 @@
|
|
|
1
|
+
import * as workers from "@distilled.cloud/cloudflare/workers";
|
|
2
|
+
import * as zones from "@distilled.cloud/cloudflare/zones";
|
|
3
|
+
import * as Data from "effect/Data";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
import * as Path from "effect/Path";
|
|
6
|
+
import * as Predicate from "effect/Predicate";
|
|
7
|
+
import * as Redacted from "effect/Redacted";
|
|
8
|
+
import * as Schedule from "effect/Schedule";
|
|
9
|
+
import * as Stream from "effect/Stream";
|
|
10
|
+
import * as crypto from "node:crypto";
|
|
11
|
+
import { Unowned } from "../../AdoptPolicy.ts";
|
|
12
|
+
import * as Artifacts from "../../Artifacts.ts";
|
|
13
|
+
import { hashDirectory } from "../../Command/Memo.ts";
|
|
14
|
+
import * as Bundle from "../../Bundle/Bundle.ts";
|
|
15
|
+
import type { ScopedPlanStatusSession } from "../../Cli/Cli.ts";
|
|
16
|
+
import { isResolved } from "../../Diff.ts";
|
|
17
|
+
import * as ProviderLayer from "../../Local/ProviderLayer.ts";
|
|
18
|
+
import * as Provider from "../../Provider.ts";
|
|
19
|
+
import { type ResourceBinding } from "../../Resource.ts";
|
|
20
|
+
import { Stack } from "../../Stack.ts";
|
|
21
|
+
import { CloudflareEnvironment } from "../CloudflareEnvironment.ts";
|
|
22
|
+
import { CloudflareLogs } from "../Logs.ts";
|
|
23
|
+
import { readAssets, uploadAssets } from "./Assets.ts";
|
|
24
|
+
import { getCompatibility } from "./Compatibility.ts";
|
|
25
|
+
import { isDurableObjectExport } from "./DurableObjectNamespace.ts";
|
|
26
|
+
import { LocalWorkerProvider } from "./LocalWorkerProvider.ts";
|
|
27
|
+
import { Worker, type WorkerProps } from "./Worker.ts";
|
|
28
|
+
import { getCronBindings } from "./WorkerAsyncBindings.ts";
|
|
29
|
+
import type { WorkerBinding, WorkerSettingsBinding } from "./WorkerBinding.ts";
|
|
30
|
+
import { readPrebuiltWorkerBundle, WorkerBundle } from "./WorkerBundle.ts";
|
|
31
|
+
import { isWorkerLoader } from "./WorkerLoader.ts";
|
|
32
|
+
import { createWorkerName } from "./WorkerName.ts";
|
|
33
|
+
class MissingDurableObjectNamespaces extends Data.TaggedError(
|
|
34
|
+
"MissingDurableObjectNamespaces",
|
|
35
|
+
)<{
|
|
36
|
+
scriptName: string;
|
|
37
|
+
expected: string[];
|
|
38
|
+
}> {}
|
|
39
|
+
|
|
40
|
+
export const WorkerProvider = () =>
|
|
41
|
+
ProviderLayer.select({
|
|
42
|
+
live: () => LiveWorkerProvider(),
|
|
43
|
+
local: () => LocalWorkerProvider(),
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
export const LiveWorkerProvider = () =>
|
|
47
|
+
Provider.effect(
|
|
48
|
+
Worker,
|
|
49
|
+
Effect.gen(function* () {
|
|
50
|
+
const path = yield* Path.Path;
|
|
51
|
+
|
|
52
|
+
const bundler = yield* WorkerBundle;
|
|
53
|
+
const stack = yield* Stack;
|
|
54
|
+
|
|
55
|
+
// const createScriptSubdomain = yield* workers.createScriptSubdomain;
|
|
56
|
+
// const deleteScript = yield* workers.deleteScript;
|
|
57
|
+
// const getScriptSubdomain = yield* workers.getScriptSubdomain;
|
|
58
|
+
// const getScriptSchedule = yield* workers.getScriptSchedule;
|
|
59
|
+
// const getScriptSettings = yield* workers.getScriptScriptAndVersionSetting;
|
|
60
|
+
// const getSubdomain = yield* workers.getSubdomain;
|
|
61
|
+
// const putScript = yield* workers.putScript;
|
|
62
|
+
// const putScriptSchedule = yield* workers.putScriptSchedule;
|
|
63
|
+
// const putDomain = yield* workers.putDomain;
|
|
64
|
+
// const listDomains = yield* workers.listDomains;
|
|
65
|
+
// const deleteDomain = yield* workers.deleteDomain;
|
|
66
|
+
// const listZones = yield* zones.listZones;
|
|
67
|
+
const telemetry = yield* CloudflareLogs;
|
|
68
|
+
|
|
69
|
+
const getAccountSubdomain = (accountId: string) =>
|
|
70
|
+
workers
|
|
71
|
+
.getSubdomain({
|
|
72
|
+
accountId,
|
|
73
|
+
})
|
|
74
|
+
.pipe(Effect.map((result) => result.subdomain));
|
|
75
|
+
|
|
76
|
+
// Toggle the workers.dev subdomain via `POST /subdomain` with
|
|
77
|
+
// `enabled: true | false`. Mirrors the upstream Alchemy
|
|
78
|
+
// implementation in `.vendor/alchemy/.../worker-subdomain.ts`.
|
|
79
|
+
// When enabling we also set `previewsEnabled: true` so the
|
|
80
|
+
// script is reachable both at its stable workers.dev URL and at
|
|
81
|
+
// version-preview URLs; on disable we send just `enabled: false`.
|
|
82
|
+
const setWorkerSubdomain = Effect.fn(function* (
|
|
83
|
+
name: string,
|
|
84
|
+
enabled: boolean,
|
|
85
|
+
) {
|
|
86
|
+
const { accountId } = yield* yield* CloudflareEnvironment;
|
|
87
|
+
return yield* workers.createScriptSubdomain({
|
|
88
|
+
accountId,
|
|
89
|
+
scriptName: name,
|
|
90
|
+
enabled,
|
|
91
|
+
previewsEnabled: enabled ? true : undefined,
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
// Convert non-ASCII hostnames (emoji, IDN, etc.) to punycode so the
|
|
96
|
+
// Cloudflare API receives the form it stores domains in. `new URL(...)`
|
|
97
|
+
// does IDNA via WHATWG URL parsing — `📦.alchemy.run` → `xn--5z8h.alchemy.run`.
|
|
98
|
+
const toPunycode = (hostname: string): string => {
|
|
99
|
+
try {
|
|
100
|
+
return new URL(`https://${hostname}`).hostname;
|
|
101
|
+
} catch {
|
|
102
|
+
return hostname;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const normalizeDomains = (
|
|
107
|
+
domain: string | string[] | undefined,
|
|
108
|
+
): string[] =>
|
|
109
|
+
domain === undefined
|
|
110
|
+
? []
|
|
111
|
+
: Array.from(
|
|
112
|
+
new Set(
|
|
113
|
+
(Array.isArray(domain) ? domain : [domain]).map(toPunycode),
|
|
114
|
+
),
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
const normalizeCrons = (crons: string[] | undefined): string[] =>
|
|
118
|
+
Array.from(new Set(crons ?? []));
|
|
119
|
+
|
|
120
|
+
const getWorkerCrons = Effect.fn(function* (scriptName: string) {
|
|
121
|
+
const { accountId } = yield* yield* CloudflareEnvironment;
|
|
122
|
+
return yield* workers
|
|
123
|
+
.getScriptSchedule({
|
|
124
|
+
accountId,
|
|
125
|
+
scriptName,
|
|
126
|
+
})
|
|
127
|
+
.pipe(
|
|
128
|
+
Effect.map((response) =>
|
|
129
|
+
normalizeCrons(
|
|
130
|
+
response.schedules.map((schedule) => schedule.cron),
|
|
131
|
+
),
|
|
132
|
+
),
|
|
133
|
+
Effect.catchTag("WorkerNotFound", () => Effect.succeed([])),
|
|
134
|
+
);
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
const reconcileCrons = (
|
|
138
|
+
scriptName: string,
|
|
139
|
+
desired: string[],
|
|
140
|
+
previous: string[],
|
|
141
|
+
session: ScopedPlanStatusSession,
|
|
142
|
+
) =>
|
|
143
|
+
Effect.gen(function* () {
|
|
144
|
+
const { accountId } = yield* yield* CloudflareEnvironment;
|
|
145
|
+
const live = yield* getWorkerCrons(scriptName);
|
|
146
|
+
const desiredSorted = [...desired].sort();
|
|
147
|
+
const liveSorted = [...live].sort();
|
|
148
|
+
const changed =
|
|
149
|
+
desiredSorted.length !== liveSorted.length ||
|
|
150
|
+
desiredSorted.some((cron, index) => cron !== liveSorted[index]);
|
|
151
|
+
|
|
152
|
+
if (!changed) return live;
|
|
153
|
+
|
|
154
|
+
if (desired.length > 0 || previous.length > 0 || live.length > 0) {
|
|
155
|
+
yield* session.note(
|
|
156
|
+
`Reconciling Cron Triggers (${desired.length}) ...`,
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const result = yield* workers
|
|
161
|
+
.putScriptSchedule({
|
|
162
|
+
accountId,
|
|
163
|
+
scriptName,
|
|
164
|
+
body: desired.map((cron) => ({ cron })),
|
|
165
|
+
})
|
|
166
|
+
.pipe(
|
|
167
|
+
Effect.retry({
|
|
168
|
+
while: (error) => error._tag === "WorkerNotFound",
|
|
169
|
+
schedule: Schedule.exponential(200).pipe(
|
|
170
|
+
Schedule.both(Schedule.recurs(15)),
|
|
171
|
+
),
|
|
172
|
+
}),
|
|
173
|
+
);
|
|
174
|
+
return normalizeCrons(
|
|
175
|
+
result.schedules.map((schedule) => schedule.cron),
|
|
176
|
+
);
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Infer the Cloudflare Zone ID for a given hostname by listing the
|
|
181
|
+
* account's zones and matching the hostname against each zone's name —
|
|
182
|
+
* walking up the DNS label hierarchy until a match is found.
|
|
183
|
+
*/
|
|
184
|
+
const inferZoneIdForHostname = (
|
|
185
|
+
hostname: string,
|
|
186
|
+
zoneCache: Map<string, string>,
|
|
187
|
+
) =>
|
|
188
|
+
Effect.gen(function* () {
|
|
189
|
+
const cached = zoneCache.get(hostname);
|
|
190
|
+
if (cached) return cached;
|
|
191
|
+
|
|
192
|
+
const zoneList = yield* zones
|
|
193
|
+
.listZones({})
|
|
194
|
+
.pipe(Effect.map((response) => response.result ?? []));
|
|
195
|
+
for (const zone of zoneList) {
|
|
196
|
+
zoneCache.set(zone.name, zone.id);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const parts = hostname.split(".");
|
|
200
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
201
|
+
const candidate = parts.slice(i).join(".");
|
|
202
|
+
const match = zoneList.find((z) => z.name === candidate);
|
|
203
|
+
if (match) {
|
|
204
|
+
zoneCache.set(hostname, match.id);
|
|
205
|
+
return match.id;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return yield* Effect.die(
|
|
209
|
+
`Could not infer Cloudflare Zone for hostname "${hostname}". ` +
|
|
210
|
+
"Ensure the parent zone exists in this account.",
|
|
211
|
+
);
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
const reconcileDomains = (scriptName: string, desired: string[]) =>
|
|
215
|
+
Effect.gen(function* () {
|
|
216
|
+
const { accountId } = yield* yield* CloudflareEnvironment;
|
|
217
|
+
// Always query the live state of domains attached to *this*
|
|
218
|
+
// Worker rather than trusting `_previous` from local state.
|
|
219
|
+
// State may have been wiped, populated by another machine, or
|
|
220
|
+
// simply be out of date. Without this we PUT domains that are
|
|
221
|
+
// already registered to this same Worker and Cloudflare
|
|
222
|
+
// returns a confusing "hostname already in use" error.
|
|
223
|
+
const liveAll = yield* workers
|
|
224
|
+
.listDomains({
|
|
225
|
+
accountId,
|
|
226
|
+
service: scriptName,
|
|
227
|
+
})
|
|
228
|
+
.pipe(
|
|
229
|
+
Effect.map((r) =>
|
|
230
|
+
(r.result ?? []).flatMap((d) =>
|
|
231
|
+
d.id && d.hostname && d.zoneId
|
|
232
|
+
? [
|
|
233
|
+
{
|
|
234
|
+
id: d.id,
|
|
235
|
+
hostname: d.hostname,
|
|
236
|
+
zoneId: d.zoneId,
|
|
237
|
+
service: d.service ?? undefined,
|
|
238
|
+
},
|
|
239
|
+
]
|
|
240
|
+
: [],
|
|
241
|
+
),
|
|
242
|
+
),
|
|
243
|
+
Effect.catch(() => Effect.succeed([])),
|
|
244
|
+
);
|
|
245
|
+
|
|
246
|
+
const desiredSet = new Set(desired);
|
|
247
|
+
const liveByHostname = new Map(liveAll.map((d) => [d.hostname, d]));
|
|
248
|
+
|
|
249
|
+
// Detach what's no longer wanted. Use the live list so we
|
|
250
|
+
// don't try to delete domains we no longer track.
|
|
251
|
+
const toRemove = liveAll.filter((d) => !desiredSet.has(d.hostname));
|
|
252
|
+
yield* Effect.all(
|
|
253
|
+
toRemove.map((d) =>
|
|
254
|
+
workers
|
|
255
|
+
.deleteDomain({ accountId, domainId: d.id })
|
|
256
|
+
.pipe(Effect.catchTag("DomainNotFound", () => Effect.void)),
|
|
257
|
+
),
|
|
258
|
+
{ concurrency: "unbounded" },
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
if (desired.length === 0) return [];
|
|
262
|
+
|
|
263
|
+
const zoneCache = new Map<string, string>();
|
|
264
|
+
|
|
265
|
+
// Attach `hostname` to this Worker. Skip the PUT entirely if
|
|
266
|
+
// the hostname is already attached to *this* Worker — that's a
|
|
267
|
+
// no-op for Cloudflare and avoids the "already in use" 409.
|
|
268
|
+
// If it's attached to a *different* Worker, refuse with a
|
|
269
|
+
// clear message rather than silently re-routing traffic.
|
|
270
|
+
const attachDomain = Effect.fn(function* (hostname: string) {
|
|
271
|
+
const live = liveByHostname.get(hostname);
|
|
272
|
+
if (live) {
|
|
273
|
+
return {
|
|
274
|
+
hostname: live.hostname,
|
|
275
|
+
id: live.id,
|
|
276
|
+
zoneId: live.zoneId,
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// Not attached to this Worker — but it could still belong
|
|
281
|
+
// to another Worker. Check before we try to PUT so we can
|
|
282
|
+
// emit a helpful error instead of the raw 409.
|
|
283
|
+
const otherOwner = yield* workers
|
|
284
|
+
.listDomains({
|
|
285
|
+
accountId,
|
|
286
|
+
hostname,
|
|
287
|
+
})
|
|
288
|
+
.pipe(
|
|
289
|
+
Effect.map((r) =>
|
|
290
|
+
(r.result ?? []).find(
|
|
291
|
+
(d) => d.hostname === hostname && d.service !== scriptName,
|
|
292
|
+
),
|
|
293
|
+
),
|
|
294
|
+
Effect.catch(() => Effect.succeed(undefined)),
|
|
295
|
+
);
|
|
296
|
+
if (otherOwner?.id) {
|
|
297
|
+
return yield* Effect.die(
|
|
298
|
+
new Error(
|
|
299
|
+
`Cannot attach hostname '${hostname}' to Worker '${scriptName}': ` +
|
|
300
|
+
`it is already attached to Worker '${otherOwner.service ?? "<unknown>"}'. ` +
|
|
301
|
+
`Detach it from that Worker first, or pick a different hostname.`,
|
|
302
|
+
),
|
|
303
|
+
);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
const zoneId = yield* inferZoneIdForHostname(hostname, zoneCache);
|
|
307
|
+
// Same eventual-consistency window as `setWorkerSubdomain`:
|
|
308
|
+
// PUT /accounts/.../workers/domains right after `putScript`
|
|
309
|
+
// can return `WorkerNotFound` until Cloudflare's script
|
|
310
|
+
// registry has propagated. Retry on that specific tag.
|
|
311
|
+
const res = yield* workers
|
|
312
|
+
.putDomain({
|
|
313
|
+
accountId,
|
|
314
|
+
hostname,
|
|
315
|
+
service: scriptName,
|
|
316
|
+
zoneId,
|
|
317
|
+
})
|
|
318
|
+
.pipe(
|
|
319
|
+
Effect.retry({
|
|
320
|
+
while: (error) => error._tag === "WorkerNotFound",
|
|
321
|
+
schedule: Schedule.exponential(200).pipe(
|
|
322
|
+
Schedule.both(Schedule.recurs(15)),
|
|
323
|
+
),
|
|
324
|
+
}),
|
|
325
|
+
);
|
|
326
|
+
return {
|
|
327
|
+
hostname,
|
|
328
|
+
id: res.id ?? "",
|
|
329
|
+
zoneId: res.zoneId ?? zoneId,
|
|
330
|
+
};
|
|
331
|
+
});
|
|
332
|
+
|
|
333
|
+
const applied = yield* Effect.all(desired.map(attachDomain), {
|
|
334
|
+
concurrency: "unbounded",
|
|
335
|
+
});
|
|
336
|
+
return applied;
|
|
337
|
+
});
|
|
338
|
+
|
|
339
|
+
const createAlchemyWorkerTags = (id: string) => [
|
|
340
|
+
`alchemy:stack:${stack.name}`,
|
|
341
|
+
`alchemy:stage:${stack.stage}`,
|
|
342
|
+
`alchemy:id:${id}`,
|
|
343
|
+
];
|
|
344
|
+
|
|
345
|
+
const hasAlchemyWorkerTags = (
|
|
346
|
+
id: string,
|
|
347
|
+
tags: readonly string[] | undefined,
|
|
348
|
+
) => {
|
|
349
|
+
const actualTags = new Set(tags ?? []);
|
|
350
|
+
return createAlchemyWorkerTags(id).every((tag) => actualTags.has(tag));
|
|
351
|
+
};
|
|
352
|
+
|
|
353
|
+
const getDurableObjectNamespaces = (
|
|
354
|
+
bindings: readonly WorkerSettingsBinding[] | null | undefined,
|
|
355
|
+
) => {
|
|
356
|
+
const namespaces = Object.fromEntries(
|
|
357
|
+
(bindings ?? []).flatMap((binding) =>
|
|
358
|
+
binding.type === "durable_object_namespace" &&
|
|
359
|
+
binding.className &&
|
|
360
|
+
binding.namespaceId
|
|
361
|
+
? [[binding.className, binding.namespaceId]]
|
|
362
|
+
: [],
|
|
363
|
+
),
|
|
364
|
+
);
|
|
365
|
+
return namespaces;
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
const getExpectedDurableObjectClassNames = (
|
|
369
|
+
bindings: readonly WorkerBinding[] | undefined,
|
|
370
|
+
workerName: string,
|
|
371
|
+
) =>
|
|
372
|
+
Array.from(
|
|
373
|
+
new Set(
|
|
374
|
+
bindings?.flatMap((binding) =>
|
|
375
|
+
binding.type === "durable_object_namespace" &&
|
|
376
|
+
binding.className &&
|
|
377
|
+
(binding.scriptName === undefined ||
|
|
378
|
+
binding.scriptName === workerName)
|
|
379
|
+
? [binding.className]
|
|
380
|
+
: [],
|
|
381
|
+
) ?? [],
|
|
382
|
+
),
|
|
383
|
+
);
|
|
384
|
+
|
|
385
|
+
const getWorkerSettingsWithDurableObjects = Effect.fn(function* (
|
|
386
|
+
scriptName: string,
|
|
387
|
+
expectedClassNames: readonly string[],
|
|
388
|
+
) {
|
|
389
|
+
const { accountId } = yield* yield* CloudflareEnvironment;
|
|
390
|
+
return yield* workers
|
|
391
|
+
.getScriptScriptAndVersionSetting({
|
|
392
|
+
accountId,
|
|
393
|
+
scriptName,
|
|
394
|
+
})
|
|
395
|
+
.pipe(
|
|
396
|
+
Effect.map((settings) => {
|
|
397
|
+
const namespaces = getDurableObjectNamespaces(settings.bindings);
|
|
398
|
+
const missing = expectedClassNames.filter(
|
|
399
|
+
(className) => !namespaces[className],
|
|
400
|
+
);
|
|
401
|
+
if (missing.length > 0) {
|
|
402
|
+
return Effect.fail(
|
|
403
|
+
new MissingDurableObjectNamespaces({
|
|
404
|
+
scriptName,
|
|
405
|
+
expected: missing,
|
|
406
|
+
}),
|
|
407
|
+
);
|
|
408
|
+
}
|
|
409
|
+
return Effect.succeed({
|
|
410
|
+
settings,
|
|
411
|
+
durableObjectNamespaces: namespaces,
|
|
412
|
+
});
|
|
413
|
+
}),
|
|
414
|
+
Effect.flatten,
|
|
415
|
+
Effect.retry({
|
|
416
|
+
// `MissingDurableObjectNamespaces`: the DO bindings haven't
|
|
417
|
+
// surfaced in the version settings yet. `WorkerHasNoVersions` /
|
|
418
|
+
// `WorkerNotFound`: right after the first `putScript`, the
|
|
419
|
+
// version-settings read can race the script registry — under a
|
|
420
|
+
// busy account this read can briefly 404 with "has no versions"
|
|
421
|
+
// (or the worker itself as not-yet-found) before the upload
|
|
422
|
+
// propagates. All three are eventual-consistency blips.
|
|
423
|
+
while: (error) =>
|
|
424
|
+
error._tag === "MissingDurableObjectNamespaces" ||
|
|
425
|
+
error._tag === "WorkerHasNoVersions" ||
|
|
426
|
+
error._tag === "WorkerNotFound",
|
|
427
|
+
schedule: Schedule.exponential(100).pipe(
|
|
428
|
+
Schedule.both(Schedule.recurs(20)),
|
|
429
|
+
),
|
|
430
|
+
}),
|
|
431
|
+
);
|
|
432
|
+
});
|
|
433
|
+
|
|
434
|
+
const prepareAssets = Effect.fn(function* (
|
|
435
|
+
assets: WorkerProps["assets"],
|
|
436
|
+
) {
|
|
437
|
+
if (!assets) {
|
|
438
|
+
return undefined;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
if (typeof assets === "object" && "hash" in assets) {
|
|
442
|
+
const { hash: _, ...config } = assets;
|
|
443
|
+
return yield* readAssets(config);
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
// Handle string path or AssetsProps
|
|
447
|
+
return yield* readAssets(
|
|
448
|
+
typeof assets === "string" ? { directory: assets } : assets,
|
|
449
|
+
);
|
|
450
|
+
});
|
|
451
|
+
|
|
452
|
+
const prepareBundle = (id: string, props: WorkerProps) =>
|
|
453
|
+
(props.bundle === false
|
|
454
|
+
? readPrebuiltWorkerBundle({
|
|
455
|
+
main: props.main!,
|
|
456
|
+
rules: props.rules,
|
|
457
|
+
})
|
|
458
|
+
: bundler.build({
|
|
459
|
+
id,
|
|
460
|
+
main: props.main!,
|
|
461
|
+
compatibility: getCompatibility(props),
|
|
462
|
+
entry: props.isExternal
|
|
463
|
+
? {
|
|
464
|
+
kind: "external",
|
|
465
|
+
}
|
|
466
|
+
: {
|
|
467
|
+
kind: "effect",
|
|
468
|
+
exports: props.exports ?? {},
|
|
469
|
+
},
|
|
470
|
+
stack: { name: stack.name, stage: stack.stage },
|
|
471
|
+
extraOptions: props.build,
|
|
472
|
+
})
|
|
473
|
+
).pipe(Artifacts.cached("build"));
|
|
474
|
+
|
|
475
|
+
const hashScript = (script: string) =>
|
|
476
|
+
Effect.sync(() =>
|
|
477
|
+
crypto.createHash("sha256").update(script).digest("hex"),
|
|
478
|
+
);
|
|
479
|
+
|
|
480
|
+
const viteBuild = Effect.fn(function* (props: WorkerProps) {
|
|
481
|
+
const compatibility = getCompatibility(props);
|
|
482
|
+
// Loaded lazily: `./Vite.ts` pulls in `@distilled.cloud/cloudflare-vite-plugin`
|
|
483
|
+
// (~0.5s), which is only needed for vite-based workers at build time —
|
|
484
|
+
// not for every Worker definition at module-load time.
|
|
485
|
+
const Vite = yield* Effect.promise(() => import("./Vite.ts"));
|
|
486
|
+
const { assetsDirectory, serverBundle } = yield* Vite.viteBuild(
|
|
487
|
+
props.vite?.rootDir,
|
|
488
|
+
Object.fromEntries(
|
|
489
|
+
(yield* Effect.all(
|
|
490
|
+
Object.entries(props.env ?? {}).map(
|
|
491
|
+
Effect.fn(function* ([key, value]) {
|
|
492
|
+
return [
|
|
493
|
+
key,
|
|
494
|
+
typeof value === "string"
|
|
495
|
+
? value
|
|
496
|
+
: Redacted.isRedacted(value) &&
|
|
497
|
+
typeof Redacted.value(value) === "string"
|
|
498
|
+
? Redacted.value(value)
|
|
499
|
+
: // A `WorkerLoader` is a real Effect that also carries
|
|
500
|
+
// the `~alchemy/Kind` marker — it is a binding, not a
|
|
501
|
+
// runnable env value. Check it before `Effect.isEffect`
|
|
502
|
+
// so we don't execute it as an inlined env entry.
|
|
503
|
+
isWorkerLoader(value)
|
|
504
|
+
? undefined
|
|
505
|
+
: Effect.isEffect(value)
|
|
506
|
+
? yield* value as Effect.Effect<any>
|
|
507
|
+
: undefined,
|
|
508
|
+
];
|
|
509
|
+
}),
|
|
510
|
+
),
|
|
511
|
+
)).filter(([_, value]) => value !== undefined),
|
|
512
|
+
),
|
|
513
|
+
{
|
|
514
|
+
compatibilityDate: compatibility.date,
|
|
515
|
+
compatibilityFlags: compatibility.flags,
|
|
516
|
+
},
|
|
517
|
+
);
|
|
518
|
+
|
|
519
|
+
if (!assetsDirectory && !serverBundle) {
|
|
520
|
+
return yield* Effect.die(
|
|
521
|
+
new Error("Vite build produced neither server nor client output"),
|
|
522
|
+
);
|
|
523
|
+
}
|
|
524
|
+
const [assets, bundle] = yield* Effect.all(
|
|
525
|
+
[
|
|
526
|
+
assetsDirectory
|
|
527
|
+
? readAssets({
|
|
528
|
+
...(props.assets && typeof props.assets !== "string"
|
|
529
|
+
? props.assets
|
|
530
|
+
: undefined),
|
|
531
|
+
directory: assetsDirectory,
|
|
532
|
+
})
|
|
533
|
+
: Effect.succeed(undefined),
|
|
534
|
+
serverBundle
|
|
535
|
+
? Bundle.bundleOutputFromRolldownOutputBundle(serverBundle)
|
|
536
|
+
: Effect.succeed(undefined),
|
|
537
|
+
],
|
|
538
|
+
{ concurrency: "unbounded" },
|
|
539
|
+
);
|
|
540
|
+
return { assets, bundle };
|
|
541
|
+
});
|
|
542
|
+
|
|
543
|
+
const prepareAssetsAndBundle = (
|
|
544
|
+
id: string,
|
|
545
|
+
props: WorkerProps,
|
|
546
|
+
opts: { skipAssetsRead?: boolean } = {},
|
|
547
|
+
) =>
|
|
548
|
+
Effect.gen(function* () {
|
|
549
|
+
if (props.script !== undefined) {
|
|
550
|
+
const [assets, bundleHash] = yield* Effect.all(
|
|
551
|
+
[
|
|
552
|
+
opts.skipAssetsRead
|
|
553
|
+
? Effect.succeed(undefined)
|
|
554
|
+
: prepareAssets(props.assets),
|
|
555
|
+
hashScript(props.script),
|
|
556
|
+
],
|
|
557
|
+
{ concurrency: "unbounded" },
|
|
558
|
+
);
|
|
559
|
+
return {
|
|
560
|
+
assets,
|
|
561
|
+
bundle: {
|
|
562
|
+
files: [{ path: "main.js", content: props.script }],
|
|
563
|
+
hash: bundleHash,
|
|
564
|
+
},
|
|
565
|
+
};
|
|
566
|
+
}
|
|
567
|
+
if (props.vite) {
|
|
568
|
+
const [{ assets, bundle }, input] = yield* Effect.all(
|
|
569
|
+
[
|
|
570
|
+
viteBuild(props),
|
|
571
|
+
// hashDirectory expects `{ cwd, memo }`. The vite props
|
|
572
|
+
// store the project root under `rootDir`, so map it
|
|
573
|
+
// here. Without this, `cwd` falls back to
|
|
574
|
+
// `process.cwd()` and the input hash is computed over
|
|
575
|
+
// the wrong directory tree (often the entire monorepo
|
|
576
|
+
// root), making it both slow and unable to detect
|
|
577
|
+
// changes scoped to the actual Vite project.
|
|
578
|
+
hashDirectory({
|
|
579
|
+
cwd: props.vite.rootDir,
|
|
580
|
+
memo: props.vite.memo,
|
|
581
|
+
}),
|
|
582
|
+
],
|
|
583
|
+
{ concurrency: "unbounded" },
|
|
584
|
+
);
|
|
585
|
+
return { assets, bundle, input };
|
|
586
|
+
}
|
|
587
|
+
const [assets, bundle] = yield* Effect.all(
|
|
588
|
+
[
|
|
589
|
+
opts.skipAssetsRead
|
|
590
|
+
? Effect.succeed(undefined)
|
|
591
|
+
: prepareAssets(props.assets),
|
|
592
|
+
prepareBundle(id, props),
|
|
593
|
+
],
|
|
594
|
+
{ concurrency: "unbounded" },
|
|
595
|
+
);
|
|
596
|
+
return { assets, bundle };
|
|
597
|
+
}).pipe(
|
|
598
|
+
Effect.map(({ assets, bundle, input }) => ({
|
|
599
|
+
assets,
|
|
600
|
+
bundle: {
|
|
601
|
+
main: bundle?.files[0].path,
|
|
602
|
+
files: bundle?.files.map(
|
|
603
|
+
(file) =>
|
|
604
|
+
new File([file.content as BlobPart], file.path, {
|
|
605
|
+
type: contentTypeFromExtension(path.extname(file.path)),
|
|
606
|
+
}),
|
|
607
|
+
),
|
|
608
|
+
},
|
|
609
|
+
hash: {
|
|
610
|
+
assets: assets?.hash,
|
|
611
|
+
bundle: bundle?.hash,
|
|
612
|
+
input,
|
|
613
|
+
} satisfies Worker["Attributes"]["hash"],
|
|
614
|
+
})),
|
|
615
|
+
);
|
|
616
|
+
|
|
617
|
+
const normalizePrebuiltAssets = (
|
|
618
|
+
assets: WorkerProps["assets"],
|
|
619
|
+
output: Worker["Attributes"] | undefined,
|
|
620
|
+
) => {
|
|
621
|
+
if (!Predicate.hasProperty(assets, "hash")) return undefined;
|
|
622
|
+
const { directory: _, hash, ...config } = assets;
|
|
623
|
+
return { config, hash, skip: hash === output?.hash?.assets };
|
|
624
|
+
};
|
|
625
|
+
|
|
626
|
+
const putWorker = Effect.fn(function* (
|
|
627
|
+
id: string,
|
|
628
|
+
news: WorkerProps,
|
|
629
|
+
bindings: ResourceBinding<Worker["Binding"]>[],
|
|
630
|
+
olds: WorkerProps | undefined,
|
|
631
|
+
output: Worker["Attributes"] | undefined,
|
|
632
|
+
session: ScopedPlanStatusSession,
|
|
633
|
+
existingSettings?: workers.GetScriptScriptAndVersionSettingResponse,
|
|
634
|
+
) {
|
|
635
|
+
const { accountId } = yield* yield* CloudflareEnvironment;
|
|
636
|
+
const name = yield* createWorkerName(id, news.name);
|
|
637
|
+
yield* Effect.logInfo(
|
|
638
|
+
`Cloudflare Worker ${olds ? "update" : "create"}: preparing bundle for ${name}`,
|
|
639
|
+
);
|
|
640
|
+
// If the caller handed us a precomputed asset hash that matches
|
|
641
|
+
// what we previously stored, we can skip walking the directory
|
|
642
|
+
// entirely and tell Cloudflare to keep the assets it already
|
|
643
|
+
// has bound to this script. The disk read is the expensive
|
|
644
|
+
// part; the script PUT happens either way.
|
|
645
|
+
const prebuiltAssets = normalizePrebuiltAssets(news.assets, output);
|
|
646
|
+
const {
|
|
647
|
+
assets,
|
|
648
|
+
bundle,
|
|
649
|
+
hash: preparedHash,
|
|
650
|
+
} = yield* prepareAssetsAndBundle(id, news, {
|
|
651
|
+
skipAssetsRead: prebuiltAssets?.skip,
|
|
652
|
+
});
|
|
653
|
+
// When the caller supplied a precomputed hash (e.g. via
|
|
654
|
+
// `Command.Build`), store *that* hash in output state so the
|
|
655
|
+
// next diff can short-circuit by comparing it directly. The
|
|
656
|
+
// hash that `readAssets` produces is the manifest-derived
|
|
657
|
+
// hash, which is shaped differently from any upstream
|
|
658
|
+
// build-input hash and will never match it on the next pass.
|
|
659
|
+
const hash = {
|
|
660
|
+
...preparedHash,
|
|
661
|
+
assets: prebuiltAssets?.hash ?? preparedHash.assets,
|
|
662
|
+
} satisfies Worker["Attributes"]["hash"];
|
|
663
|
+
const metadataBindings = bindings.flatMap((b) => b.data.bindings ?? []);
|
|
664
|
+
const expectedDurableObjectClassNames =
|
|
665
|
+
getExpectedDurableObjectClassNames(metadataBindings, name);
|
|
666
|
+
let metadataAssets:
|
|
667
|
+
| workers.PutScriptRequest["metadata"]["assets"]
|
|
668
|
+
| undefined;
|
|
669
|
+
let keepAssets = false;
|
|
670
|
+
if (prebuiltAssets?.skip) {
|
|
671
|
+
// Hash matched what's already on Cloudflare: keep the
|
|
672
|
+
// existing asset manifest and skip the upload session.
|
|
673
|
+
yield* Effect.logInfo(
|
|
674
|
+
`Cloudflare Worker update: assets unchanged for ${name}, keeping existing`,
|
|
675
|
+
);
|
|
676
|
+
keepAssets = true;
|
|
677
|
+
metadataAssets = { config: prebuiltAssets.config };
|
|
678
|
+
metadataBindings.push({
|
|
679
|
+
type: "assets",
|
|
680
|
+
name: "ASSETS",
|
|
681
|
+
});
|
|
682
|
+
} else if (assets) {
|
|
683
|
+
// We had to read the directory. Even after the read, the
|
|
684
|
+
// computed hash may match what's already deployed (e.g.
|
|
685
|
+
// legacy `string` / `AssetsProps` shapes that don't carry a
|
|
686
|
+
// precomputed hash, or a precomputed hash that disagreed with
|
|
687
|
+
// disk). In that case still keep the existing manifest and
|
|
688
|
+
// skip the upload session — Cloudflare's content-addressed
|
|
689
|
+
// session would no-op on every byte anyway.
|
|
690
|
+
if (assets.hash === prebuiltAssets?.hash) {
|
|
691
|
+
yield* Effect.logInfo(
|
|
692
|
+
`Cloudflare Worker update: assets unchanged for ${name}, keeping existing`,
|
|
693
|
+
);
|
|
694
|
+
keepAssets = true;
|
|
695
|
+
metadataAssets = { config: assets.config };
|
|
696
|
+
} else {
|
|
697
|
+
yield* Effect.logInfo(
|
|
698
|
+
`Cloudflare Worker ${olds ? "update" : "create"}: uploading assets for ${name}`,
|
|
699
|
+
);
|
|
700
|
+
const { jwt } = yield* uploadAssets(
|
|
701
|
+
accountId,
|
|
702
|
+
name,
|
|
703
|
+
assets,
|
|
704
|
+
session,
|
|
705
|
+
);
|
|
706
|
+
metadataAssets = {
|
|
707
|
+
jwt,
|
|
708
|
+
config: assets.config,
|
|
709
|
+
};
|
|
710
|
+
}
|
|
711
|
+
metadataBindings.push({
|
|
712
|
+
type: "assets",
|
|
713
|
+
name: "ASSETS",
|
|
714
|
+
});
|
|
715
|
+
}
|
|
716
|
+
metadataBindings.push(
|
|
717
|
+
{
|
|
718
|
+
type: "plain_text",
|
|
719
|
+
name: "ALCHEMY_PHASE",
|
|
720
|
+
text: "runtime",
|
|
721
|
+
},
|
|
722
|
+
{
|
|
723
|
+
type: "plain_text",
|
|
724
|
+
name: "ALCHEMY_STACK_NAME",
|
|
725
|
+
text: stack.name,
|
|
726
|
+
},
|
|
727
|
+
{
|
|
728
|
+
type: "plain_text",
|
|
729
|
+
name: "ALCHEMY_STAGE",
|
|
730
|
+
text: stack.stage,
|
|
731
|
+
},
|
|
732
|
+
{
|
|
733
|
+
type: "plain_text",
|
|
734
|
+
name: "ALCHEMY_CLOUDFLARE_ACCOUNT_ID",
|
|
735
|
+
text: accountId,
|
|
736
|
+
},
|
|
737
|
+
);
|
|
738
|
+
// Add environment variables as metadata bindings
|
|
739
|
+
if (news.env) {
|
|
740
|
+
for (const [key, value] of Object.entries(news.env)) {
|
|
741
|
+
if (value === undefined) continue;
|
|
742
|
+
if (metadataBindings.some((b) => b.name === key)) continue;
|
|
743
|
+
if (Redacted.isRedacted(value)) {
|
|
744
|
+
const unredacted = Redacted.value(value);
|
|
745
|
+
metadataBindings.push({
|
|
746
|
+
type: "secret_text",
|
|
747
|
+
name: key,
|
|
748
|
+
text:
|
|
749
|
+
typeof unredacted === "string"
|
|
750
|
+
? unredacted
|
|
751
|
+
: JSON.stringify(unredacted),
|
|
752
|
+
});
|
|
753
|
+
} else if (typeof value === "string") {
|
|
754
|
+
metadataBindings.push({
|
|
755
|
+
type: "plain_text",
|
|
756
|
+
name: key,
|
|
757
|
+
text: value,
|
|
758
|
+
});
|
|
759
|
+
} else {
|
|
760
|
+
metadataBindings.push({
|
|
761
|
+
type: "json",
|
|
762
|
+
name: key,
|
|
763
|
+
json: value,
|
|
764
|
+
});
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
yield* Effect.logInfo(
|
|
769
|
+
`Cloudflare Worker ${olds ? "update" : "create"}: uploading script for ${name}`,
|
|
770
|
+
);
|
|
771
|
+
const size =
|
|
772
|
+
bundle.files
|
|
773
|
+
?.filter((file) => !file.name.endsWith(".map"))
|
|
774
|
+
.reduce((acc, file) => acc + file.size, 0) ?? 0;
|
|
775
|
+
const sizeKB = size / 1024;
|
|
776
|
+
const sizeMB = sizeKB / 1024;
|
|
777
|
+
const bundleSize = `${sizeKB > 1024 ? `${sizeMB.toFixed(2)} MB` : `${sizeKB.toFixed(2)} KB`}`;
|
|
778
|
+
yield* session.note(`Uploading worker (${bundleSize}) ...`);
|
|
779
|
+
|
|
780
|
+
// Read existing worker settings for migration tracking
|
|
781
|
+
const oldSettings =
|
|
782
|
+
existingSettings ??
|
|
783
|
+
(yield* workers
|
|
784
|
+
.getScriptScriptAndVersionSetting({
|
|
785
|
+
accountId,
|
|
786
|
+
scriptName: name,
|
|
787
|
+
})
|
|
788
|
+
.pipe(
|
|
789
|
+
Effect.map((s) => s as typeof s | undefined),
|
|
790
|
+
Effect.catch(() => Effect.succeed(undefined)),
|
|
791
|
+
));
|
|
792
|
+
|
|
793
|
+
const oldTags = Array.from(new Set(oldSettings?.tags ?? []));
|
|
794
|
+
const oldBindings = oldSettings?.bindings ?? [];
|
|
795
|
+
|
|
796
|
+
// Parse alchemy:do:{logicalId}:{className} tags
|
|
797
|
+
const oldDoClassNameByLogicalId = getDurableObjectTagMap(oldTags);
|
|
798
|
+
const currentDoBindings = getDurableObjectBindings(bindings, name);
|
|
799
|
+
const currentDoClassNameByLogicalId = Object.fromEntries(
|
|
800
|
+
currentDoBindings.map((binding) => [
|
|
801
|
+
binding.logicalId,
|
|
802
|
+
binding.className,
|
|
803
|
+
]),
|
|
804
|
+
);
|
|
805
|
+
|
|
806
|
+
// Parse alchemy:migration-tag:{version}
|
|
807
|
+
const oldMigrationTag = oldTags.flatMap((tag) =>
|
|
808
|
+
tag.startsWith("alchemy:migration-tag:")
|
|
809
|
+
? [tag.slice("alchemy:migration-tag:".length)]
|
|
810
|
+
: [],
|
|
811
|
+
)[0];
|
|
812
|
+
const newMigrationTag = bumpMigrationTagVersion(oldMigrationTag);
|
|
813
|
+
|
|
814
|
+
// Compute deleted classes
|
|
815
|
+
const deletedClasses: string[] = [];
|
|
816
|
+
for (const [logicalId, className] of Object.entries(
|
|
817
|
+
oldDoClassNameByLogicalId,
|
|
818
|
+
)) {
|
|
819
|
+
if (!currentDoClassNameByLogicalId[logicalId]) {
|
|
820
|
+
deletedClasses.push(className);
|
|
821
|
+
}
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
// Backward compatibility for old workers that have DO bindings but no
|
|
825
|
+
// alchemy:do tags yet. Cross-script bindings (`scriptName` set to
|
|
826
|
+
// anything other than this worker) are NEVER candidates for
|
|
827
|
+
// delete-class migrations — the class lives on the foreign script
|
|
828
|
+
// and we don't own its lifecycle.
|
|
829
|
+
if (Object.keys(oldDoClassNameByLogicalId).length === 0) {
|
|
830
|
+
for (const oldBinding of oldBindings) {
|
|
831
|
+
const ownedLocally =
|
|
832
|
+
!("scriptName" in oldBinding) || oldBinding.scriptName === name;
|
|
833
|
+
if (
|
|
834
|
+
oldBinding.type === "durable_object_namespace" &&
|
|
835
|
+
"className" in oldBinding &&
|
|
836
|
+
oldBinding.className &&
|
|
837
|
+
ownedLocally &&
|
|
838
|
+
!currentDoBindings.some(
|
|
839
|
+
(binding) => binding.bindingName === oldBinding.name,
|
|
840
|
+
)
|
|
841
|
+
) {
|
|
842
|
+
deletedClasses.push(oldBinding.className);
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
// Collect container-backed class names so we can send container metadata
|
|
848
|
+
const containerClassNames = new Set(
|
|
849
|
+
bindings.flatMap((b) =>
|
|
850
|
+
(b.data.containers ?? []).map((c) => c.className),
|
|
851
|
+
),
|
|
852
|
+
);
|
|
853
|
+
|
|
854
|
+
// Compute new and renamed classes
|
|
855
|
+
const newClasses: string[] = [];
|
|
856
|
+
const newSqliteClasses: string[] = [];
|
|
857
|
+
const renamedClasses: { from: string; to: string }[] = [];
|
|
858
|
+
for (const binding of currentDoBindings) {
|
|
859
|
+
const previousClassName =
|
|
860
|
+
oldDoClassNameByLogicalId[binding.logicalId];
|
|
861
|
+
if (!previousClassName) {
|
|
862
|
+
// Default all new Durable Object classes to SQLite. Cloudflare
|
|
863
|
+
// recommends SQLite for new namespaces, and container-backed
|
|
864
|
+
// Durable Objects require it.
|
|
865
|
+
newSqliteClasses.push(binding.className);
|
|
866
|
+
} else if (previousClassName !== binding.className) {
|
|
867
|
+
renamedClasses.push({
|
|
868
|
+
from: previousClassName,
|
|
869
|
+
to: binding.className,
|
|
870
|
+
});
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
yield* Effect.logInfo(
|
|
875
|
+
`Cloudflare Worker put: durable object reconciliation ${JSON.stringify(
|
|
876
|
+
{
|
|
877
|
+
oldDoClassNameByLogicalId,
|
|
878
|
+
currentDoClassNameByLogicalId,
|
|
879
|
+
deletedClasses,
|
|
880
|
+
renamedClasses,
|
|
881
|
+
newSqliteClasses,
|
|
882
|
+
},
|
|
883
|
+
)}`,
|
|
884
|
+
);
|
|
885
|
+
|
|
886
|
+
// Build alchemy:do:{logicalId}:{className} tags for each DO binding
|
|
887
|
+
const alchemyDoTags: string[] = [];
|
|
888
|
+
for (const binding of currentDoBindings) {
|
|
889
|
+
alchemyDoTags.push(
|
|
890
|
+
`alchemy:do:${binding.logicalId}:${binding.className}`,
|
|
891
|
+
);
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
const metadataTags = Array.from(
|
|
895
|
+
new Set([
|
|
896
|
+
...createAlchemyWorkerTags(id),
|
|
897
|
+
...alchemyDoTags,
|
|
898
|
+
...(newMigrationTag
|
|
899
|
+
? [`alchemy:migration-tag:${newMigrationTag}`]
|
|
900
|
+
: []),
|
|
901
|
+
...(news.tags ?? []),
|
|
902
|
+
]),
|
|
903
|
+
);
|
|
904
|
+
|
|
905
|
+
const migrations = {
|
|
906
|
+
oldTag: oldMigrationTag,
|
|
907
|
+
newTag: newMigrationTag,
|
|
908
|
+
newClasses,
|
|
909
|
+
deletedClasses,
|
|
910
|
+
renamedClasses,
|
|
911
|
+
transferredClasses: [] as { from: string; to: string }[],
|
|
912
|
+
newSqliteClasses,
|
|
913
|
+
};
|
|
914
|
+
|
|
915
|
+
const metadataContainers = [...containerClassNames].map(
|
|
916
|
+
(className) => ({
|
|
917
|
+
className,
|
|
918
|
+
}),
|
|
919
|
+
);
|
|
920
|
+
|
|
921
|
+
const compatibility = getCompatibility(news);
|
|
922
|
+
const metadata: workers.PutScriptRequest["metadata"] = {
|
|
923
|
+
assets: metadataAssets,
|
|
924
|
+
bindings: metadataBindings,
|
|
925
|
+
bodyPart: undefined,
|
|
926
|
+
compatibilityDate: compatibility.date,
|
|
927
|
+
compatibilityFlags: compatibility.flags,
|
|
928
|
+
containers:
|
|
929
|
+
metadataContainers.length > 0 ? metadataContainers : undefined,
|
|
930
|
+
keepAssets,
|
|
931
|
+
keepBindings: undefined,
|
|
932
|
+
limits: news.limits,
|
|
933
|
+
logpush: news.logpush,
|
|
934
|
+
mainModule: bundle.main,
|
|
935
|
+
migrations,
|
|
936
|
+
observability: news.observability ?? {
|
|
937
|
+
enabled: true,
|
|
938
|
+
logs: {
|
|
939
|
+
enabled: true,
|
|
940
|
+
invocationLogs: true,
|
|
941
|
+
},
|
|
942
|
+
},
|
|
943
|
+
placement: news.placement,
|
|
944
|
+
tags: metadataTags,
|
|
945
|
+
tailConsumers: undefined,
|
|
946
|
+
usageModel: undefined,
|
|
947
|
+
};
|
|
948
|
+
const worker = yield* workers
|
|
949
|
+
.putScript({
|
|
950
|
+
accountId,
|
|
951
|
+
scriptName: name,
|
|
952
|
+
metadata,
|
|
953
|
+
files: bundle.files,
|
|
954
|
+
})
|
|
955
|
+
.pipe(
|
|
956
|
+
Effect.catch((err) => {
|
|
957
|
+
// When adopting a Worker managed by Wrangler (or after a previous
|
|
958
|
+
// deploy with mismatched migrations), the old_tag precondition
|
|
959
|
+
// fails. The only way to discover the actual tag is through the
|
|
960
|
+
// error message — getScriptSettings is meant to return it but
|
|
961
|
+
// doesn't at runtime.
|
|
962
|
+
const msg = String(
|
|
963
|
+
typeof err === "object" && err !== null && "message" in err
|
|
964
|
+
? err.message
|
|
965
|
+
: err,
|
|
966
|
+
);
|
|
967
|
+
const expectedTag = msg.match(
|
|
968
|
+
/when expected tag is ['"]?([^'"]+)['"]?/,
|
|
969
|
+
)?.[1];
|
|
970
|
+
if (expectedTag) {
|
|
971
|
+
return workers.putScript({
|
|
972
|
+
accountId,
|
|
973
|
+
scriptName: name,
|
|
974
|
+
metadata: {
|
|
975
|
+
...metadata,
|
|
976
|
+
migrations: {
|
|
977
|
+
...migrations,
|
|
978
|
+
oldTag: expectedTag,
|
|
979
|
+
newTag: bumpMigrationTagVersion(expectedTag),
|
|
980
|
+
},
|
|
981
|
+
},
|
|
982
|
+
files: bundle.files,
|
|
983
|
+
});
|
|
984
|
+
}
|
|
985
|
+
return Effect.fail(err as any);
|
|
986
|
+
}),
|
|
987
|
+
);
|
|
988
|
+
const { settings, durableObjectNamespaces } =
|
|
989
|
+
yield* getWorkerSettingsWithDurableObjects(
|
|
990
|
+
name,
|
|
991
|
+
expectedDurableObjectClassNames,
|
|
992
|
+
);
|
|
993
|
+
// Reconcile workers.dev subdomain against observed cloud state.
|
|
994
|
+
// We can't diff `news.url` against `olds.url` here because both
|
|
995
|
+
// default to `undefined` (meaning "enable") — that comparison
|
|
996
|
+
// would skip the API call on every deploy where the user never
|
|
997
|
+
// explicitly set `url`, leaving the subdomain in whatever state
|
|
998
|
+
// Cloudflare currently has it (disabled by default, or whatever
|
|
999
|
+
// a previous failed/external action left it as).
|
|
1000
|
+
const desiredSubdomainEnabled = news.url !== false;
|
|
1001
|
+
const observedSubdomain = yield* workers
|
|
1002
|
+
.getScriptSubdomain({
|
|
1003
|
+
accountId,
|
|
1004
|
+
scriptName: name,
|
|
1005
|
+
})
|
|
1006
|
+
.pipe(
|
|
1007
|
+
Effect.orElseSucceed<workers.GetScriptSubdomainResponse>(() => ({
|
|
1008
|
+
enabled: false,
|
|
1009
|
+
previewsEnabled: false,
|
|
1010
|
+
})),
|
|
1011
|
+
);
|
|
1012
|
+
if (
|
|
1013
|
+
desiredSubdomainEnabled !== observedSubdomain.enabled ||
|
|
1014
|
+
desiredSubdomainEnabled !== observedSubdomain.previewsEnabled
|
|
1015
|
+
) {
|
|
1016
|
+
yield* session.note(
|
|
1017
|
+
`${desiredSubdomainEnabled ? "Enabling" : "Disabling"} workers.dev subdomain...`,
|
|
1018
|
+
);
|
|
1019
|
+
// Cloudflare's script registry is eventually consistent — for the
|
|
1020
|
+
// first few hundred ms after `putScript` returns, POST /subdomain
|
|
1021
|
+
// can still get back `WorkerNotFound` (a generic "unknown error"
|
|
1022
|
+
// body), or a bare 500 surfaced as `InternalServerError` /
|
|
1023
|
+
// `UnknownCloudflareError` (code 10013). Bigger uploads race harder.
|
|
1024
|
+
// Retry the subdomain toggle on those transient tags with a short
|
|
1025
|
+
// exponential backoff; same pattern we use elsewhere in this
|
|
1026
|
+
// provider for DO-namespace propagation and for `putScript` itself.
|
|
1027
|
+
yield* setWorkerSubdomain(name, desiredSubdomainEnabled).pipe(
|
|
1028
|
+
Effect.retry({
|
|
1029
|
+
while: (error) =>
|
|
1030
|
+
error._tag === "WorkerNotFound" ||
|
|
1031
|
+
error._tag === "InternalServerError" ||
|
|
1032
|
+
error._tag === "UnknownCloudflareError",
|
|
1033
|
+
schedule: Schedule.exponential(200).pipe(
|
|
1034
|
+
Schedule.both(Schedule.recurs(15)),
|
|
1035
|
+
),
|
|
1036
|
+
}),
|
|
1037
|
+
);
|
|
1038
|
+
}
|
|
1039
|
+
const desiredDomains = normalizeDomains(news.domain);
|
|
1040
|
+
const previousDomains = output?.domains ?? [];
|
|
1041
|
+
if (desiredDomains.length > 0 || previousDomains.length > 0) {
|
|
1042
|
+
yield* session.note(
|
|
1043
|
+
`Reconciling custom domains (${desiredDomains.length}) ...`,
|
|
1044
|
+
);
|
|
1045
|
+
}
|
|
1046
|
+
const reconciled = yield* reconcileDomains(name, desiredDomains);
|
|
1047
|
+
const workersDevUrl =
|
|
1048
|
+
news.url !== false
|
|
1049
|
+
? `https://${name}.${yield* getAccountSubdomain(accountId)}.workers.dev`
|
|
1050
|
+
: undefined;
|
|
1051
|
+
const domains = [
|
|
1052
|
+
...reconciled.map((d) => `https://${d.hostname}`),
|
|
1053
|
+
...(workersDevUrl ? [workersDevUrl] : []),
|
|
1054
|
+
];
|
|
1055
|
+
const crons = yield* reconcileCrons(
|
|
1056
|
+
name,
|
|
1057
|
+
normalizeCrons([...getCronBindings(bindings), ...(news.crons ?? [])]),
|
|
1058
|
+
output?.crons ?? [],
|
|
1059
|
+
session,
|
|
1060
|
+
);
|
|
1061
|
+
return {
|
|
1062
|
+
workerId: worker.id ?? name,
|
|
1063
|
+
workerName: name,
|
|
1064
|
+
logpush: worker.logpush ?? undefined,
|
|
1065
|
+
url: domains[0],
|
|
1066
|
+
tags: settings.tags ?? metadata.tags,
|
|
1067
|
+
durableObjectNamespaces,
|
|
1068
|
+
accountId,
|
|
1069
|
+
domains,
|
|
1070
|
+
crons,
|
|
1071
|
+
hash,
|
|
1072
|
+
} satisfies Worker["Attributes"];
|
|
1073
|
+
});
|
|
1074
|
+
|
|
1075
|
+
const hasChanged = Effect.fn(function* (
|
|
1076
|
+
id: string,
|
|
1077
|
+
props: WorkerProps,
|
|
1078
|
+
output: Worker["Attributes"],
|
|
1079
|
+
) {
|
|
1080
|
+
if (props.script !== undefined) {
|
|
1081
|
+
const scriptHash = yield* hashScript(props.script);
|
|
1082
|
+
if (scriptHash !== output.hash?.bundle) {
|
|
1083
|
+
return true;
|
|
1084
|
+
}
|
|
1085
|
+
if (!props.assets) {
|
|
1086
|
+
return false;
|
|
1087
|
+
}
|
|
1088
|
+
const assetsHash = Predicate.hasProperty(props.assets, "hash")
|
|
1089
|
+
? props.assets.hash
|
|
1090
|
+
: undefined;
|
|
1091
|
+
if (assetsHash === undefined) {
|
|
1092
|
+
return true;
|
|
1093
|
+
}
|
|
1094
|
+
return assetsHash !== output.hash?.assets;
|
|
1095
|
+
}
|
|
1096
|
+
if (props.vite) {
|
|
1097
|
+
const input = yield* hashDirectory({
|
|
1098
|
+
cwd: props.vite.rootDir,
|
|
1099
|
+
memo: props.vite.memo,
|
|
1100
|
+
});
|
|
1101
|
+
return input !== output.hash?.input;
|
|
1102
|
+
}
|
|
1103
|
+
const bundleHash = yield* prepareBundle(id, props).pipe(
|
|
1104
|
+
Effect.map((b) => b.hash),
|
|
1105
|
+
);
|
|
1106
|
+
if (bundleHash !== output.hash?.bundle) {
|
|
1107
|
+
return true;
|
|
1108
|
+
}
|
|
1109
|
+
if (!props.assets) {
|
|
1110
|
+
return false;
|
|
1111
|
+
}
|
|
1112
|
+
// We deliberately don't read the assets directory during diff.
|
|
1113
|
+
// For `AssetsWithHash` (the documented contract) the upstream
|
|
1114
|
+
// `Command.Build` already gave us an authoritative hash — we
|
|
1115
|
+
// just compare strings. Reading the directory here would
|
|
1116
|
+
// (a) hash the same tree twice per apply (`putWorker` reads
|
|
1117
|
+
// again when an upload is actually required), and (b) crash
|
|
1118
|
+
// when the prior state was written on a different machine
|
|
1119
|
+
// and `path` doesn't exist locally — blocking any local
|
|
1120
|
+
// reapply even though the precomputed hash is right there
|
|
1121
|
+
// in props.
|
|
1122
|
+
//
|
|
1123
|
+
// For the legacy `string` / `AssetsProps` shapes there's no
|
|
1124
|
+
// hash in props to compare against, so we conservatively
|
|
1125
|
+
// assume the assets changed; `putWorker` will read once,
|
|
1126
|
+
// hash, and use `keepAssets` if it turns out nothing actually
|
|
1127
|
+
// changed.
|
|
1128
|
+
const assetsHash = Predicate.hasProperty(props.assets, "hash")
|
|
1129
|
+
? props.assets.hash
|
|
1130
|
+
: undefined;
|
|
1131
|
+
if (assetsHash === undefined) {
|
|
1132
|
+
return true;
|
|
1133
|
+
}
|
|
1134
|
+
return assetsHash !== output.hash?.assets;
|
|
1135
|
+
});
|
|
1136
|
+
|
|
1137
|
+
return Worker.Provider.of({
|
|
1138
|
+
stables: ["workerId", "workerName"],
|
|
1139
|
+
list: () =>
|
|
1140
|
+
Effect.gen(function* () {
|
|
1141
|
+
const { accountId } = yield* yield* CloudflareEnvironment;
|
|
1142
|
+
// Account-scoped enumeration of every Worker script. The
|
|
1143
|
+
// per-script `read` makes several extra calls (subdomain,
|
|
1144
|
+
// settings, domains, schedule) to fully hydrate
|
|
1145
|
+
// url/durableObjectNamespaces/domains/crons. Doing that for
|
|
1146
|
+
// every script on the account is both expensive (4 calls × N)
|
|
1147
|
+
// and fragile — a single script with a binding shape the
|
|
1148
|
+
// settings schema doesn't know about would break the whole
|
|
1149
|
+
// listing (the same reason `read` deliberately avoids
|
|
1150
|
+
// `listScripts`). For `list()` we hydrate the core identifying
|
|
1151
|
+
// and settings fields that come straight from the script
|
|
1152
|
+
// metadata and leave the binding-derived fields at the same
|
|
1153
|
+
// defaults `read` returns when those sub-resources are absent
|
|
1154
|
+
// (`url: undefined`, `durableObjectNamespaces: {}`,
|
|
1155
|
+
// `domains: []`, `crons: []`). `accountId` + `workerName` are
|
|
1156
|
+
// sufficient for `delete`.
|
|
1157
|
+
return yield* workers.listScripts.pages({ accountId }).pipe(
|
|
1158
|
+
Stream.runCollect,
|
|
1159
|
+
Effect.map((chunk) =>
|
|
1160
|
+
Array.from(chunk).flatMap((page) =>
|
|
1161
|
+
// Annotate the element type as the full `Attributes` shape
|
|
1162
|
+
// (incl. the optional `hash`) so it matches `read` exactly.
|
|
1163
|
+
// `list()` is an inference source for the provider's resource
|
|
1164
|
+
// type; a narrower element (e.g. via `satisfies`, which omits
|
|
1165
|
+
// `hash`) would derail `Res` inference and cascade every
|
|
1166
|
+
// lifecycle method's requirement channel to `never`.
|
|
1167
|
+
(page.result ?? []).flatMap(
|
|
1168
|
+
(script): Worker["Attributes"][] =>
|
|
1169
|
+
script.id
|
|
1170
|
+
? [
|
|
1171
|
+
{
|
|
1172
|
+
accountId,
|
|
1173
|
+
workerId: script.id,
|
|
1174
|
+
workerName: script.id,
|
|
1175
|
+
logpush: script.logpush ?? undefined,
|
|
1176
|
+
url: undefined,
|
|
1177
|
+
tags: script.tags ?? undefined,
|
|
1178
|
+
durableObjectNamespaces: {},
|
|
1179
|
+
domains: [],
|
|
1180
|
+
crons: [],
|
|
1181
|
+
},
|
|
1182
|
+
]
|
|
1183
|
+
: [],
|
|
1184
|
+
),
|
|
1185
|
+
),
|
|
1186
|
+
),
|
|
1187
|
+
);
|
|
1188
|
+
}),
|
|
1189
|
+
diff: Effect.fn(function* ({ id, news, olds, output, newBindings }) {
|
|
1190
|
+
const { accountId } = yield* yield* CloudflareEnvironment;
|
|
1191
|
+
if (!isResolved(news)) return undefined;
|
|
1192
|
+
if ((output?.accountId ?? accountId) !== accountId) {
|
|
1193
|
+
return { action: "replace" };
|
|
1194
|
+
}
|
|
1195
|
+
const workerName = yield* createWorkerName(id, news.name);
|
|
1196
|
+
const oldWorkerName = output?.workerName
|
|
1197
|
+
? output.workerName
|
|
1198
|
+
: yield* createWorkerName(id, olds?.name);
|
|
1199
|
+
if (workerName !== oldWorkerName) {
|
|
1200
|
+
return { action: "replace" };
|
|
1201
|
+
}
|
|
1202
|
+
if (!output) {
|
|
1203
|
+
return;
|
|
1204
|
+
}
|
|
1205
|
+
const newDomains = normalizeDomains(news.domain)
|
|
1206
|
+
.map((h) => `https://${h}`)
|
|
1207
|
+
.sort();
|
|
1208
|
+
const oldDomains = (output?.domains ?? [])
|
|
1209
|
+
.filter((u) => !u.endsWith(".workers.dev"))
|
|
1210
|
+
.sort();
|
|
1211
|
+
const domainsChanged =
|
|
1212
|
+
newDomains.length !== oldDomains.length ||
|
|
1213
|
+
newDomains.some((d, i) => d !== oldDomains[i]);
|
|
1214
|
+
const newCrons = normalizeCrons([
|
|
1215
|
+
...(Array.isArray(newBindings)
|
|
1216
|
+
? getCronBindings(
|
|
1217
|
+
newBindings as ResourceBinding<Worker["Binding"]>[],
|
|
1218
|
+
)
|
|
1219
|
+
: []),
|
|
1220
|
+
...(news.crons ?? []),
|
|
1221
|
+
]).sort();
|
|
1222
|
+
const oldCrons = [...(output?.crons ?? [])].sort();
|
|
1223
|
+
const cronsChanged =
|
|
1224
|
+
newCrons.length !== oldCrons.length ||
|
|
1225
|
+
newCrons.some((cron, index) => cron !== oldCrons[index]);
|
|
1226
|
+
// `url` is `domains[0]`: the first custom domain in user order if
|
|
1227
|
+
// any, otherwise the workers.dev URL (derived from the stable
|
|
1228
|
+
// worker name + account subdomain). It's stable across this update
|
|
1229
|
+
// exactly when that first domain is unchanged — which is NOT the
|
|
1230
|
+
// same as "the domain set is unchanged": adding a second custom
|
|
1231
|
+
// domain leaves `url` put, while reordering changes it even though
|
|
1232
|
+
// the set is equal. Compute the resulting `url` and carry it
|
|
1233
|
+
// forward as a stable only when it matches the old one, so
|
|
1234
|
+
// downstream resources that reference `worker.url` (e.g. a GitHub
|
|
1235
|
+
// Webhook delivery URL built via `Output.interpolate`) resolve it
|
|
1236
|
+
// to a concrete value during planning instead of an unresolved
|
|
1237
|
+
// Output — otherwise every worker update spuriously re-updates them.
|
|
1238
|
+
const newCustomDomains = normalizeDomains(news.domain);
|
|
1239
|
+
const newUrl =
|
|
1240
|
+
newCustomDomains.length > 0
|
|
1241
|
+
? `https://${newCustomDomains[0]}`
|
|
1242
|
+
: news.url !== false
|
|
1243
|
+
? (output.domains ?? []).find((u) => u.endsWith(".workers.dev"))
|
|
1244
|
+
: undefined;
|
|
1245
|
+
const urlStable = newUrl !== undefined && newUrl === output.url;
|
|
1246
|
+
// `durableObjectNamespaces` maps each hosted DO class name to the
|
|
1247
|
+
// namespace id Cloudflare assigned it. Those ids are permanent for
|
|
1248
|
+
// the lifetime of a (worker, class) pair, so the map only changes
|
|
1249
|
+
// when a class is added or removed — never on a plain code/config
|
|
1250
|
+
// update. Carry it forward as a stable whenever the set of local DO
|
|
1251
|
+
// class names is unchanged, for the same reason as `url` above:
|
|
1252
|
+
// downstream resources that bind a DO namespace via
|
|
1253
|
+
// `worker.durableObjectNamespaces[name]` (e.g. a Container attached
|
|
1254
|
+
// to a DO) must resolve it to a concrete value during planning.
|
|
1255
|
+
// Otherwise the binding holds an unresolved Output, which
|
|
1256
|
+
// `diffBindings` treats as "changed", spuriously re-updating the
|
|
1257
|
+
// bound resource on every deploy. Class names are structural (not the
|
|
1258
|
+
// namespace id), so this comparison holds even when `newBindings` is
|
|
1259
|
+
// otherwise unresolved.
|
|
1260
|
+
const newDoClassNames = Array.isArray(newBindings)
|
|
1261
|
+
? getExpectedDurableObjectClassNames(
|
|
1262
|
+
(newBindings as ResourceBinding<Worker["Binding"]>[]).flatMap(
|
|
1263
|
+
(b) => b.data.bindings ?? [],
|
|
1264
|
+
),
|
|
1265
|
+
workerName,
|
|
1266
|
+
).sort()
|
|
1267
|
+
: [];
|
|
1268
|
+
const oldDoClassNames = Object.keys(
|
|
1269
|
+
output.durableObjectNamespaces ?? {},
|
|
1270
|
+
).sort();
|
|
1271
|
+
const doNamespacesStable =
|
|
1272
|
+
oldWorkerName === workerName &&
|
|
1273
|
+
newDoClassNames.length === oldDoClassNames.length &&
|
|
1274
|
+
newDoClassNames.every((name, i) => name === oldDoClassNames[i]);
|
|
1275
|
+
if (
|
|
1276
|
+
domainsChanged ||
|
|
1277
|
+
cronsChanged ||
|
|
1278
|
+
(yield* hasChanged(id, news, output))
|
|
1279
|
+
) {
|
|
1280
|
+
// `workerId` is always stable across an update; seed it so it
|
|
1281
|
+
// survives now that `diff.stables` overrides `provider.stables`
|
|
1282
|
+
// rather than being merged with it.
|
|
1283
|
+
const stables: string[] = ["workerId"];
|
|
1284
|
+
if (oldWorkerName === workerName) {
|
|
1285
|
+
stables.push("workerName");
|
|
1286
|
+
}
|
|
1287
|
+
if (urlStable) {
|
|
1288
|
+
stables.push("url");
|
|
1289
|
+
}
|
|
1290
|
+
if (doNamespacesStable) {
|
|
1291
|
+
stables.push("durableObjectNamespaces");
|
|
1292
|
+
}
|
|
1293
|
+
return {
|
|
1294
|
+
action: "update",
|
|
1295
|
+
stables: stables.length > 0 ? stables : undefined,
|
|
1296
|
+
};
|
|
1297
|
+
}
|
|
1298
|
+
}),
|
|
1299
|
+
precreate: Effect.fn(function* ({ id, news, session }) {
|
|
1300
|
+
const { accountId } = yield* yield* CloudflareEnvironment;
|
|
1301
|
+
const name = yield* createWorkerName(id, news.name);
|
|
1302
|
+
const exportMap = news.exports ?? {};
|
|
1303
|
+
const durableObjects = Object.keys(exportMap)
|
|
1304
|
+
.filter((logicalId) => isDurableObjectExport(exportMap[logicalId]))
|
|
1305
|
+
.map((logicalId) => ({
|
|
1306
|
+
logicalId,
|
|
1307
|
+
className: logicalId,
|
|
1308
|
+
}));
|
|
1309
|
+
const doClasses = durableObjects.map((binding) => binding.className);
|
|
1310
|
+
const containers = doClasses.map((className) => ({ className }));
|
|
1311
|
+
const alchemyDoTags = durableObjects.map(
|
|
1312
|
+
({ logicalId, className }) =>
|
|
1313
|
+
`alchemy:do:${logicalId}:${className}`,
|
|
1314
|
+
);
|
|
1315
|
+
const tags = Array.from(
|
|
1316
|
+
new Set([
|
|
1317
|
+
...createAlchemyWorkerTags(id),
|
|
1318
|
+
...alchemyDoTags,
|
|
1319
|
+
...(news.tags ?? []),
|
|
1320
|
+
]),
|
|
1321
|
+
);
|
|
1322
|
+
yield* Effect.logInfo(
|
|
1323
|
+
`Cloudflare Worker precreate: starting ${name}`,
|
|
1324
|
+
);
|
|
1325
|
+
yield* Effect.logInfo(
|
|
1326
|
+
`Cloudflare Worker precreate: durable objects ${JSON.stringify(
|
|
1327
|
+
durableObjects,
|
|
1328
|
+
)}`,
|
|
1329
|
+
);
|
|
1330
|
+
const existingSettings = yield* workers
|
|
1331
|
+
.getScriptScriptAndVersionSetting({
|
|
1332
|
+
accountId,
|
|
1333
|
+
scriptName: name,
|
|
1334
|
+
})
|
|
1335
|
+
.pipe(
|
|
1336
|
+
// A freshly pre-created stub can briefly report "has no
|
|
1337
|
+
// versions" before its first version registers — treat it the
|
|
1338
|
+
// same as a missing worker (nothing to adopt yet).
|
|
1339
|
+
Effect.catchTag("WorkerNotFound", () =>
|
|
1340
|
+
Effect.succeed(undefined),
|
|
1341
|
+
),
|
|
1342
|
+
Effect.catchTag("WorkerHasNoVersions", () =>
|
|
1343
|
+
Effect.succeed(undefined),
|
|
1344
|
+
),
|
|
1345
|
+
);
|
|
1346
|
+
let durableObjectNamespaces = getDurableObjectNamespaces(
|
|
1347
|
+
existingSettings?.bindings,
|
|
1348
|
+
);
|
|
1349
|
+
|
|
1350
|
+
if (existingSettings) {
|
|
1351
|
+
// Engine has already cleared this resource for write via
|
|
1352
|
+
// `read` + AdoptPolicy. Either we own it (matching tags) or
|
|
1353
|
+
// the user opted in to a takeover (`--adopt` / `adopt(true)`).
|
|
1354
|
+
yield* Effect.logInfo(
|
|
1355
|
+
`Cloudflare Worker precreate: reusing existing ${name}`,
|
|
1356
|
+
);
|
|
1357
|
+
} else {
|
|
1358
|
+
yield* session.note("Pre-creating worker...");
|
|
1359
|
+
const mainModule = "main.js";
|
|
1360
|
+
const placeholderScript = `${doClasses.length > 0 ? 'import { DurableObject } from "cloudflare:workers";\n\n' : ""}export default { fetch() { return new Response("Alchemy worker is being deployed...") } };\n${doClasses
|
|
1361
|
+
.map(
|
|
1362
|
+
(className) =>
|
|
1363
|
+
`export class ${className} extends DurableObject {}`,
|
|
1364
|
+
)
|
|
1365
|
+
.join("\n")}`;
|
|
1366
|
+
yield* workers
|
|
1367
|
+
.putScript({
|
|
1368
|
+
accountId,
|
|
1369
|
+
scriptName: name,
|
|
1370
|
+
metadata: {
|
|
1371
|
+
mainModule,
|
|
1372
|
+
bindings:
|
|
1373
|
+
doClasses.length > 0
|
|
1374
|
+
? doClasses.map((className) => ({
|
|
1375
|
+
type: "durable_object_namespace" as const,
|
|
1376
|
+
name: className,
|
|
1377
|
+
className,
|
|
1378
|
+
}))
|
|
1379
|
+
: undefined,
|
|
1380
|
+
...getCompatibility(news),
|
|
1381
|
+
containers,
|
|
1382
|
+
migrations:
|
|
1383
|
+
doClasses.length > 0
|
|
1384
|
+
? {
|
|
1385
|
+
oldTag: undefined,
|
|
1386
|
+
newTag: undefined,
|
|
1387
|
+
newClasses: [],
|
|
1388
|
+
deletedClasses: [],
|
|
1389
|
+
renamedClasses: [],
|
|
1390
|
+
transferredClasses: [],
|
|
1391
|
+
newSqliteClasses: doClasses,
|
|
1392
|
+
}
|
|
1393
|
+
: undefined,
|
|
1394
|
+
observability: news.observability ?? {
|
|
1395
|
+
enabled: true,
|
|
1396
|
+
logs: {
|
|
1397
|
+
enabled: true,
|
|
1398
|
+
invocationLogs: true,
|
|
1399
|
+
},
|
|
1400
|
+
},
|
|
1401
|
+
tags,
|
|
1402
|
+
},
|
|
1403
|
+
files: [
|
|
1404
|
+
new File([placeholderScript], mainModule, {
|
|
1405
|
+
type: "application/javascript+module",
|
|
1406
|
+
}),
|
|
1407
|
+
],
|
|
1408
|
+
})
|
|
1409
|
+
.pipe(
|
|
1410
|
+
// Cloudflare's PUT /workers/scripts/{name} intermittently
|
|
1411
|
+
// returns code 10002 / "An unknown error has occurred" on the
|
|
1412
|
+
// first put for a fresh worker name. Surfaced as the shared
|
|
1413
|
+
// `InternalServerError` upstream (alchemy-run/distilled#290).
|
|
1414
|
+
// Also match `UnknownCloudflareError` for older
|
|
1415
|
+
// @distilled.cloud/cloudflare versions that haven't picked
|
|
1416
|
+
// up the patch yet.
|
|
1417
|
+
Effect.retry({
|
|
1418
|
+
while: (e) =>
|
|
1419
|
+
e._tag === "InternalServerError" ||
|
|
1420
|
+
e._tag === "UnknownCloudflareError",
|
|
1421
|
+
schedule: Schedule.exponential(1000).pipe(
|
|
1422
|
+
Schedule.both(Schedule.recurs(5)),
|
|
1423
|
+
),
|
|
1424
|
+
}),
|
|
1425
|
+
);
|
|
1426
|
+
if (doClasses.length > 0) {
|
|
1427
|
+
({ durableObjectNamespaces } =
|
|
1428
|
+
yield* getWorkerSettingsWithDurableObjects(name, doClasses));
|
|
1429
|
+
}
|
|
1430
|
+
}
|
|
1431
|
+
|
|
1432
|
+
if (existingSettings && doClasses.length > 0) {
|
|
1433
|
+
({ durableObjectNamespaces } =
|
|
1434
|
+
yield* getWorkerSettingsWithDurableObjects(name, doClasses));
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
return {
|
|
1438
|
+
workerId: name,
|
|
1439
|
+
workerName: name,
|
|
1440
|
+
logpush: existingSettings?.logpush ?? undefined,
|
|
1441
|
+
url: undefined,
|
|
1442
|
+
tags: existingSettings?.tags ?? tags,
|
|
1443
|
+
durableObjectNamespaces,
|
|
1444
|
+
accountId,
|
|
1445
|
+
domains: [],
|
|
1446
|
+
crons: [],
|
|
1447
|
+
} satisfies Worker["Attributes"];
|
|
1448
|
+
}),
|
|
1449
|
+
read: Effect.fn(
|
|
1450
|
+
function* ({ id, output, olds }) {
|
|
1451
|
+
const { accountId } = yield* yield* CloudflareEnvironment;
|
|
1452
|
+
const workerName =
|
|
1453
|
+
output?.workerName ?? (yield* createWorkerName(id, olds?.name));
|
|
1454
|
+
yield* Effect.logInfo(
|
|
1455
|
+
`Cloudflare Worker read: checking ${workerName}`,
|
|
1456
|
+
);
|
|
1457
|
+
// We deliberately don't call `listScripts({ accountId })` here:
|
|
1458
|
+
// it pulls every Worker on the account back through a strict
|
|
1459
|
+
// schema decode, and a single existing Worker the schema doesn't
|
|
1460
|
+
// know about (e.g. `placement_mode: "targeted"`) breaks the
|
|
1461
|
+
// entire read. `getScriptSettings` already fails with
|
|
1462
|
+
// `WorkerNotFound` if the script doesn't exist, which the
|
|
1463
|
+
// surrounding `Effect.catchTag` turns into `undefined` — that's
|
|
1464
|
+
// all the existence check we need.
|
|
1465
|
+
const [subdomain, settings, domainsList] = yield* Effect.all([
|
|
1466
|
+
workers.getScriptSubdomain({
|
|
1467
|
+
accountId,
|
|
1468
|
+
scriptName: workerName,
|
|
1469
|
+
}),
|
|
1470
|
+
workers.getScriptScriptAndVersionSetting({
|
|
1471
|
+
accountId,
|
|
1472
|
+
scriptName: workerName,
|
|
1473
|
+
}),
|
|
1474
|
+
workers
|
|
1475
|
+
.listDomains({
|
|
1476
|
+
accountId,
|
|
1477
|
+
service: workerName,
|
|
1478
|
+
})
|
|
1479
|
+
.pipe(Effect.map((r) => r.result ?? [])),
|
|
1480
|
+
]);
|
|
1481
|
+
// Preserve the order the user provided in `olds.domain`. The
|
|
1482
|
+
// Cloudflare API returns domains in non-deterministic order,
|
|
1483
|
+
// which would cause downstream `worker.domains[0]` reads to flip
|
|
1484
|
+
// between deploys. Drift (domains we don't know about) is
|
|
1485
|
+
// appended after the user-ordered ones.
|
|
1486
|
+
const userOrder = normalizeDomains(olds?.domain);
|
|
1487
|
+
const orderedHostnames = [
|
|
1488
|
+
...userOrder.flatMap(
|
|
1489
|
+
(h) =>
|
|
1490
|
+
domainsList.find((d) => d.hostname === h)?.hostname ?? [],
|
|
1491
|
+
),
|
|
1492
|
+
...domainsList.flatMap((d) =>
|
|
1493
|
+
d.hostname && !userOrder.includes(d.hostname)
|
|
1494
|
+
? [d.hostname]
|
|
1495
|
+
: [],
|
|
1496
|
+
),
|
|
1497
|
+
];
|
|
1498
|
+
const workersDevUrl = subdomain.enabled
|
|
1499
|
+
? `https://${workerName}.${yield* getAccountSubdomain(accountId)}.workers.dev`
|
|
1500
|
+
: undefined;
|
|
1501
|
+
const domains = [
|
|
1502
|
+
...orderedHostnames.map((h) => `https://${h}`),
|
|
1503
|
+
...(workersDevUrl ? [workersDevUrl] : []),
|
|
1504
|
+
];
|
|
1505
|
+
const crons = yield* getWorkerCrons(workerName);
|
|
1506
|
+
yield* Effect.logInfo(
|
|
1507
|
+
`Cloudflare Worker read: found ${workerName}`,
|
|
1508
|
+
);
|
|
1509
|
+
const attrs = {
|
|
1510
|
+
accountId,
|
|
1511
|
+
workerId: workerName,
|
|
1512
|
+
workerName,
|
|
1513
|
+
logpush: settings.logpush ?? undefined,
|
|
1514
|
+
url: domains[0],
|
|
1515
|
+
tags: settings.tags ?? undefined,
|
|
1516
|
+
durableObjectNamespaces: getDurableObjectNamespaces(
|
|
1517
|
+
settings.bindings,
|
|
1518
|
+
),
|
|
1519
|
+
domains,
|
|
1520
|
+
crons,
|
|
1521
|
+
} satisfies Worker["Attributes"];
|
|
1522
|
+
|
|
1523
|
+
// Centralized ownership decision: the engine routes `read`'s
|
|
1524
|
+
// return value based on `AdoptPolicy`. We hand it the attrs
|
|
1525
|
+
// either as-is (owned: alchemy tags identify this stack/stage/id,
|
|
1526
|
+
// safe to silently adopt even without `--adopt`) or branded with
|
|
1527
|
+
// `Unowned` (caller must opt in via `--adopt` or the engine
|
|
1528
|
+
// raises `OwnedBySomeoneElse`).
|
|
1529
|
+
return hasAlchemyWorkerTags(id, settings.tags ?? [])
|
|
1530
|
+
? attrs
|
|
1531
|
+
: Unowned(attrs);
|
|
1532
|
+
},
|
|
1533
|
+
(effect) =>
|
|
1534
|
+
effect.pipe(
|
|
1535
|
+
// A worker that exists but hasn't registered a version yet reads
|
|
1536
|
+
// as "not deployed" — fall through to (re)create like NotFound.
|
|
1537
|
+
Effect.catchTag("WorkerNotFound", () =>
|
|
1538
|
+
Effect.succeed(undefined),
|
|
1539
|
+
),
|
|
1540
|
+
Effect.catchTag("WorkerHasNoVersions", () =>
|
|
1541
|
+
Effect.succeed(undefined),
|
|
1542
|
+
),
|
|
1543
|
+
),
|
|
1544
|
+
),
|
|
1545
|
+
reconcile: Effect.fn(function* ({
|
|
1546
|
+
id,
|
|
1547
|
+
news,
|
|
1548
|
+
olds,
|
|
1549
|
+
bindings,
|
|
1550
|
+
output,
|
|
1551
|
+
session,
|
|
1552
|
+
}) {
|
|
1553
|
+
const { accountId } = yield* yield* CloudflareEnvironment;
|
|
1554
|
+
const name =
|
|
1555
|
+
output?.workerName ?? (yield* createWorkerName(id, news.name));
|
|
1556
|
+
const durableObjects = getDurableObjectBindings(bindings, name).map(
|
|
1557
|
+
({ logicalId, className }) => ({
|
|
1558
|
+
logicalId,
|
|
1559
|
+
className,
|
|
1560
|
+
}),
|
|
1561
|
+
);
|
|
1562
|
+
yield* Effect.logInfo(
|
|
1563
|
+
`Cloudflare Worker reconcile: starting ${name}`,
|
|
1564
|
+
);
|
|
1565
|
+
yield* Effect.logInfo(
|
|
1566
|
+
`Cloudflare Worker reconcile: durable objects ${JSON.stringify(
|
|
1567
|
+
durableObjects,
|
|
1568
|
+
)}`,
|
|
1569
|
+
);
|
|
1570
|
+
|
|
1571
|
+
// Observe — fetch the script's current settings if it already exists.
|
|
1572
|
+
// `putWorker` is a true upsert against the Cloudflare API; the
|
|
1573
|
+
// existing settings inform asset/migration decisions and let the
|
|
1574
|
+
// reconciler converge whether the worker is brand-new, adopted, or
|
|
1575
|
+
// an in-place update.
|
|
1576
|
+
const existingSettings = yield* workers
|
|
1577
|
+
.getScriptScriptAndVersionSetting({
|
|
1578
|
+
accountId,
|
|
1579
|
+
scriptName: name,
|
|
1580
|
+
})
|
|
1581
|
+
.pipe(
|
|
1582
|
+
// After a pre-create stub (or under a busy account right after
|
|
1583
|
+
// the first upload) the settings read can race the script
|
|
1584
|
+
// registry and 404 with "has no versions". Treat it as "no
|
|
1585
|
+
// existing settings" so reconcile proceeds to upload/converge.
|
|
1586
|
+
Effect.catchTag("WorkerNotFound", () =>
|
|
1587
|
+
Effect.succeed(undefined),
|
|
1588
|
+
),
|
|
1589
|
+
Effect.catchTag("WorkerHasNoVersions", () =>
|
|
1590
|
+
Effect.succeed(undefined),
|
|
1591
|
+
),
|
|
1592
|
+
);
|
|
1593
|
+
yield* Effect.logInfo(
|
|
1594
|
+
`Cloudflare Worker reconcile: existing durable object tags ${JSON.stringify(
|
|
1595
|
+
(existingSettings?.tags ?? []).filter((tag) =>
|
|
1596
|
+
tag.startsWith("alchemy:do:"),
|
|
1597
|
+
),
|
|
1598
|
+
)}`,
|
|
1599
|
+
);
|
|
1600
|
+
yield* Effect.logInfo(
|
|
1601
|
+
`Cloudflare Worker reconcile: previous durable object tags ${JSON.stringify(
|
|
1602
|
+
(output?.tags ?? []).filter((tag) =>
|
|
1603
|
+
tag.startsWith("alchemy:do:"),
|
|
1604
|
+
),
|
|
1605
|
+
)}`,
|
|
1606
|
+
);
|
|
1607
|
+
return yield* putWorker(
|
|
1608
|
+
id,
|
|
1609
|
+
news,
|
|
1610
|
+
bindings,
|
|
1611
|
+
olds,
|
|
1612
|
+
output,
|
|
1613
|
+
session,
|
|
1614
|
+
existingSettings,
|
|
1615
|
+
);
|
|
1616
|
+
}),
|
|
1617
|
+
delete: Effect.fn(function* ({ output }) {
|
|
1618
|
+
yield* Effect.logInfo(
|
|
1619
|
+
`Cloudflare Worker delete: deleting ${output.workerName}`,
|
|
1620
|
+
);
|
|
1621
|
+
// Look up live domain IDs rather than trusting persisted state.
|
|
1622
|
+
// We no longer track `{ id, zoneId }` on the output; fetching
|
|
1623
|
+
// straight from Cloudflare handles both the normal case and
|
|
1624
|
+
// adopted workers whose domains we never recorded.
|
|
1625
|
+
const liveDomains = yield* workers
|
|
1626
|
+
.listDomains({
|
|
1627
|
+
accountId: output.accountId,
|
|
1628
|
+
service: output.workerName,
|
|
1629
|
+
})
|
|
1630
|
+
.pipe(
|
|
1631
|
+
Effect.map((r) => r.result ?? []),
|
|
1632
|
+
Effect.catch(() => Effect.succeed([])),
|
|
1633
|
+
);
|
|
1634
|
+
if (liveDomains.length) {
|
|
1635
|
+
yield* Effect.all(
|
|
1636
|
+
liveDomains.flatMap((d) =>
|
|
1637
|
+
d.id
|
|
1638
|
+
? [
|
|
1639
|
+
workers
|
|
1640
|
+
.deleteDomain({
|
|
1641
|
+
accountId: output.accountId,
|
|
1642
|
+
domainId: d.id,
|
|
1643
|
+
})
|
|
1644
|
+
.pipe(
|
|
1645
|
+
Effect.catchTag("DomainNotFound", () => Effect.void),
|
|
1646
|
+
),
|
|
1647
|
+
]
|
|
1648
|
+
: [],
|
|
1649
|
+
),
|
|
1650
|
+
{ concurrency: "unbounded" },
|
|
1651
|
+
);
|
|
1652
|
+
}
|
|
1653
|
+
yield* workers
|
|
1654
|
+
.deleteScript({
|
|
1655
|
+
accountId: output.accountId,
|
|
1656
|
+
scriptName: output.workerName,
|
|
1657
|
+
// Force teardown of queue consumers, durable object classes, and
|
|
1658
|
+
// service bindings hanging off this worker. Without `force`, those
|
|
1659
|
+
// conditions raise QueueConsumerConflict / ServiceBindingConflict
|
|
1660
|
+
// and leave the script in CF. Alchemy is the source of truth for
|
|
1661
|
+
// the worker, so we want a hard delete on teardown.
|
|
1662
|
+
force: true,
|
|
1663
|
+
})
|
|
1664
|
+
.pipe(Effect.catchTag("WorkerNotFound", () => Effect.void));
|
|
1665
|
+
}),
|
|
1666
|
+
tail: ({ output }) =>
|
|
1667
|
+
telemetry.tailScript({
|
|
1668
|
+
accountId: output.accountId,
|
|
1669
|
+
scriptName: output.workerName,
|
|
1670
|
+
}),
|
|
1671
|
+
logs: ({ output, options }) =>
|
|
1672
|
+
telemetry.queryLogs({
|
|
1673
|
+
accountId: output.accountId,
|
|
1674
|
+
filters: [
|
|
1675
|
+
{
|
|
1676
|
+
key: "$workers.scriptName",
|
|
1677
|
+
operation: "eq",
|
|
1678
|
+
type: "string",
|
|
1679
|
+
value: output.workerName,
|
|
1680
|
+
},
|
|
1681
|
+
],
|
|
1682
|
+
options,
|
|
1683
|
+
}),
|
|
1684
|
+
});
|
|
1685
|
+
}),
|
|
1686
|
+
);
|
|
1687
|
+
|
|
1688
|
+
const contentTypeFromExtension = (extension: string) => {
|
|
1689
|
+
switch (extension) {
|
|
1690
|
+
case ".wasm":
|
|
1691
|
+
return "application/wasm";
|
|
1692
|
+
case ".txt":
|
|
1693
|
+
case ".html":
|
|
1694
|
+
case ".sql":
|
|
1695
|
+
case ".custom":
|
|
1696
|
+
return "text/plain";
|
|
1697
|
+
case ".bin":
|
|
1698
|
+
return "application/octet-stream";
|
|
1699
|
+
case ".mjs":
|
|
1700
|
+
case ".js":
|
|
1701
|
+
return "application/javascript+module";
|
|
1702
|
+
case ".cjs":
|
|
1703
|
+
return "application/javascript";
|
|
1704
|
+
case ".map":
|
|
1705
|
+
return "application/source-map";
|
|
1706
|
+
default:
|
|
1707
|
+
return "application/octet-stream";
|
|
1708
|
+
}
|
|
1709
|
+
};
|
|
1710
|
+
|
|
1711
|
+
function bumpMigrationTagVersion(
|
|
1712
|
+
oldTag: string | undefined,
|
|
1713
|
+
): string | undefined {
|
|
1714
|
+
if (!oldTag) return undefined;
|
|
1715
|
+
const version = oldTag.match(/^(alchemy:)?v(\d+)$/)?.[2];
|
|
1716
|
+
if (!version) return "alchemy:v1";
|
|
1717
|
+
return `alchemy:v${parseInt(version, 10) + 1}`;
|
|
1718
|
+
}
|
|
1719
|
+
|
|
1720
|
+
function getDurableObjectBindings(
|
|
1721
|
+
bindings: ReadonlyArray<ResourceBinding>,
|
|
1722
|
+
workerName: string,
|
|
1723
|
+
) {
|
|
1724
|
+
// Resource authors (and the `make`/`yield* Tag`/plan-vs-apply machinery)
|
|
1725
|
+
// can register the same DO binding multiple times under the same logical
|
|
1726
|
+
// id — `binding()` is a plain `worker.bind` and intentionally has no
|
|
1727
|
+
// dedup. Collapse duplicates here so each `(logicalId, bindingName,
|
|
1728
|
+
// className)` tuple appears at most once. We also exclude cross-script
|
|
1729
|
+
// references: a `scriptName` pointing to *another* worker means this
|
|
1730
|
+
// worker just references a foreign class — ship the binding to
|
|
1731
|
+
// Cloudflare, but don't drive class migrations for it.
|
|
1732
|
+
const seen = new Set<string>();
|
|
1733
|
+
return bindings.flatMap((binding) =>
|
|
1734
|
+
(binding.data.bindings ?? []).flatMap((item: WorkerBinding) => {
|
|
1735
|
+
if (
|
|
1736
|
+
item.type !== "durable_object_namespace" ||
|
|
1737
|
+
!("className" in item) ||
|
|
1738
|
+
!item.className
|
|
1739
|
+
) {
|
|
1740
|
+
return [];
|
|
1741
|
+
}
|
|
1742
|
+
if (item.scriptName !== undefined && item.scriptName !== workerName) {
|
|
1743
|
+
return [];
|
|
1744
|
+
}
|
|
1745
|
+
const dedupKey = `${binding.sid}::${item.name}::${item.className}`;
|
|
1746
|
+
if (seen.has(dedupKey)) return [];
|
|
1747
|
+
seen.add(dedupKey);
|
|
1748
|
+
return [
|
|
1749
|
+
{
|
|
1750
|
+
logicalId: binding.sid,
|
|
1751
|
+
bindingName: item.name,
|
|
1752
|
+
className: item.className,
|
|
1753
|
+
},
|
|
1754
|
+
];
|
|
1755
|
+
}),
|
|
1756
|
+
);
|
|
1757
|
+
}
|
|
1758
|
+
|
|
1759
|
+
function getDurableObjectTagMap(tags: ReadonlyArray<string>) {
|
|
1760
|
+
return Object.fromEntries(
|
|
1761
|
+
tags.flatMap((tag) => {
|
|
1762
|
+
if (!tag.startsWith("alchemy:do:")) {
|
|
1763
|
+
return [];
|
|
1764
|
+
}
|
|
1765
|
+
const parts = tag.split(":");
|
|
1766
|
+
const logicalId = parts[2];
|
|
1767
|
+
const className = parts.slice(3).join(":");
|
|
1768
|
+
return logicalId && className ? [[logicalId, className]] : [];
|
|
1769
|
+
}),
|
|
1770
|
+
);
|
|
1771
|
+
}
|