alchemy 2.0.0-beta.76 → 2.0.0-beta.78
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/THIRD_PARTY_LICENSES.md +11 -11
- package/bin/alchemy.js +1 -1
- package/bin/alchemy.js.map +1 -1
- package/bin/alchemy.ts +1 -1
- package/bin/cli.js +166 -35
- package/bin/exec.js +12863 -6308
- package/bin/exec.js.map +1 -1
- package/bin/exec.ts +1 -1
- package/bin/register-oxc.js +38 -0
- package/lib/AWS/AMP/Scraper.js +1 -1
- package/lib/AWS/AMP/Scraper.js.map +1 -1
- package/lib/AWS/ApiGateway/common.d.ts +1 -1
- package/lib/AWS/ApiGateway/common.d.ts.map +1 -1
- package/lib/AWS/ApiGatewayV2/common.d.ts +1 -1
- package/lib/AWS/ApiGatewayV2/common.d.ts.map +1 -1
- package/lib/AWS/AppRunner/Service.d.ts +11 -27
- package/lib/AWS/AppRunner/Service.d.ts.map +1 -1
- package/lib/AWS/AppRunner/Service.js +7 -21
- package/lib/AWS/AppRunner/Service.js.map +1 -1
- package/lib/AWS/AppSync/common.d.ts +1 -1
- package/lib/AWS/AppSync/common.d.ts.map +1 -1
- package/lib/AWS/Assets.d.ts +2 -2
- package/lib/AWS/Assets.d.ts.map +1 -1
- package/lib/AWS/Assets.js +2 -2
- package/lib/AWS/Assets.js.map +1 -1
- package/lib/AWS/AuthProvider.d.ts +40 -53
- package/lib/AWS/AuthProvider.d.ts.map +1 -1
- package/lib/AWS/AuthProvider.js +480 -215
- package/lib/AWS/AuthProvider.js.map +1 -1
- package/lib/AWS/Batch/JobDefinition.d.ts +11 -27
- package/lib/AWS/Batch/JobDefinition.d.ts.map +1 -1
- package/lib/AWS/Batch/JobDefinition.js +7 -21
- package/lib/AWS/Batch/JobDefinition.js.map +1 -1
- package/lib/AWS/Bedrock/LanguageModel.d.ts +2 -2
- package/lib/AWS/Bedrock/LanguageModel.d.ts.map +1 -1
- package/lib/AWS/Bedrock/LanguageModel.js +1 -1
- package/lib/AWS/Bedrock/LanguageModel.js.map +1 -1
- package/lib/AWS/Bootstrap.d.ts +2 -2
- package/lib/AWS/Bootstrap.d.ts.map +1 -1
- package/lib/AWS/Budgets/BindingHttp.d.ts +1 -8
- package/lib/AWS/Budgets/BindingHttp.d.ts.map +1 -1
- package/lib/AWS/Budgets/BindingHttp.js +2 -7
- package/lib/AWS/Budgets/BindingHttp.js.map +1 -1
- package/lib/AWS/Budgets/DescribeBudgetActionsForBudgetHttp.d.ts.map +1 -1
- package/lib/AWS/Budgets/DescribeBudgetActionsForBudgetHttp.js +0 -3
- package/lib/AWS/Budgets/DescribeBudgetActionsForBudgetHttp.js.map +1 -1
- package/lib/AWS/CloudFront/KvRoutesUpdate.d.ts.map +1 -1
- package/lib/AWS/CloudFront/KvRoutesUpdate.js +9 -1
- package/lib/AWS/CloudFront/KvRoutesUpdate.js.map +1 -1
- package/lib/AWS/CloudMap/internal.d.ts +2 -2
- package/lib/AWS/CloudMap/internal.d.ts.map +1 -1
- package/lib/AWS/Connection/DbAuthToken.d.ts +2 -1
- package/lib/AWS/Connection/DbAuthToken.d.ts.map +1 -1
- package/lib/AWS/Credentials.d.ts +2 -2
- package/lib/AWS/Credentials.d.ts.map +1 -1
- package/lib/AWS/Credentials.js +1 -1
- package/lib/AWS/Credentials.js.map +1 -1
- package/lib/AWS/DSQL/Connect.d.ts +2 -2
- package/lib/AWS/DSQL/Connect.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/Table.d.ts.map +1 -1
- package/lib/AWS/DynamoDB/Table.js +22 -11
- package/lib/AWS/DynamoDB/Table.js.map +1 -1
- package/lib/AWS/EC2/GetAmi.d.ts +2 -0
- package/lib/AWS/EC2/GetAmi.d.ts.map +1 -1
- package/lib/AWS/EC2/Instance.d.ts +11 -27
- package/lib/AWS/EC2/Instance.d.ts.map +1 -1
- package/lib/AWS/EC2/Instance.js +17 -22
- package/lib/AWS/EC2/Instance.js.map +1 -1
- package/lib/AWS/EC2/SecurityGroup.d.ts +70 -2
- package/lib/AWS/EC2/SecurityGroup.d.ts.map +1 -1
- package/lib/AWS/EC2/SecurityGroup.js +256 -66
- package/lib/AWS/EC2/SecurityGroup.js.map +1 -1
- package/lib/AWS/EC2/SecurityGroupRule.d.ts +43 -9
- package/lib/AWS/EC2/SecurityGroupRule.d.ts.map +1 -1
- package/lib/AWS/EC2/SecurityGroupRule.js +102 -22
- package/lib/AWS/EC2/SecurityGroupRule.js.map +1 -1
- package/lib/AWS/EC2/hosted.d.ts +6 -7
- package/lib/AWS/EC2/hosted.d.ts.map +1 -1
- package/lib/AWS/EC2/hosted.js.map +1 -1
- package/lib/AWS/ECR/Image.d.ts +23 -12
- package/lib/AWS/ECR/Image.d.ts.map +1 -1
- package/lib/AWS/ECR/Image.js +26 -5
- package/lib/AWS/ECR/Image.js.map +1 -1
- package/lib/AWS/ECR/ImageSource.d.ts +5 -6
- package/lib/AWS/ECR/ImageSource.d.ts.map +1 -1
- package/lib/AWS/ECR/ImageSource.js.map +1 -1
- package/lib/AWS/ECS/EcsDevWatch.d.ts +1 -1
- package/lib/AWS/ECS/EcsDevWatch.d.ts.map +1 -1
- package/lib/AWS/ECS/FlociServiceProvider.js +2 -2
- package/lib/AWS/ECS/FlociTaskProvider.js +2 -2
- package/lib/AWS/ECS/Service.d.ts +7 -21
- package/lib/AWS/ECS/Service.d.ts.map +1 -1
- package/lib/AWS/ECS/Service.js +14 -28
- package/lib/AWS/ECS/Service.js.map +1 -1
- package/lib/AWS/ECS/Task.d.ts +12 -26
- package/lib/AWS/ECS/Task.d.ts.map +1 -1
- package/lib/AWS/ECS/Task.js +7 -21
- package/lib/AWS/ECS/Task.js.map +1 -1
- package/lib/AWS/EKS/KubernetesAdapter.js +4 -4
- package/lib/AWS/EKS/internal/podIdentity.d.ts +4 -4
- package/lib/AWS/EKS/internal/podIdentity.d.ts.map +1 -1
- package/lib/AWS/ElastiCache/CacheCluster.d.ts +60 -0
- package/lib/AWS/ElastiCache/CacheCluster.d.ts.map +1 -0
- package/lib/AWS/ElastiCache/CacheCluster.js +199 -0
- package/lib/AWS/ElastiCache/CacheCluster.js.map +1 -0
- package/lib/AWS/ElastiCache/ConnectCacheCluster.d.ts +46 -0
- package/lib/AWS/ElastiCache/ConnectCacheCluster.d.ts.map +1 -0
- package/lib/AWS/ElastiCache/ConnectCacheCluster.js +5 -0
- package/lib/AWS/ElastiCache/ConnectCacheCluster.js.map +1 -0
- package/lib/AWS/ElastiCache/ConnectCacheClusterHttp.d.ts +4 -0
- package/lib/AWS/ElastiCache/ConnectCacheClusterHttp.d.ts.map +1 -0
- package/lib/AWS/ElastiCache/ConnectCacheClusterHttp.js +52 -0
- package/lib/AWS/ElastiCache/ConnectCacheClusterHttp.js.map +1 -0
- package/lib/AWS/ElastiCache/ConnectReplicationGroup.d.ts +47 -0
- package/lib/AWS/ElastiCache/ConnectReplicationGroup.d.ts.map +1 -0
- package/lib/AWS/ElastiCache/ConnectReplicationGroup.js +5 -0
- package/lib/AWS/ElastiCache/ConnectReplicationGroup.js.map +1 -0
- package/lib/AWS/ElastiCache/ConnectReplicationGroupHttp.d.ts +4 -0
- package/lib/AWS/ElastiCache/ConnectReplicationGroupHttp.d.ts.map +1 -0
- package/lib/AWS/ElastiCache/ConnectReplicationGroupHttp.js +77 -0
- package/lib/AWS/ElastiCache/ConnectReplicationGroupHttp.js.map +1 -0
- package/lib/AWS/ElastiCache/ReplicationGroup.d.ts +95 -0
- package/lib/AWS/ElastiCache/ReplicationGroup.d.ts.map +1 -0
- package/lib/AWS/ElastiCache/ReplicationGroup.js +383 -0
- package/lib/AWS/ElastiCache/ReplicationGroup.js.map +1 -0
- package/lib/AWS/ElastiCache/SubnetGroup.d.ts +39 -0
- package/lib/AWS/ElastiCache/SubnetGroup.d.ts.map +1 -0
- package/lib/AWS/ElastiCache/SubnetGroup.js +136 -0
- package/lib/AWS/ElastiCache/SubnetGroup.js.map +1 -0
- package/lib/AWS/ElastiCache/index.d.ts +7 -0
- package/lib/AWS/ElastiCache/index.d.ts.map +1 -1
- package/lib/AWS/ElastiCache/index.js +7 -0
- package/lib/AWS/ElastiCache/index.js.map +1 -1
- package/lib/AWS/ElastiCache/internal.d.ts +13 -0
- package/lib/AWS/ElastiCache/internal.d.ts.map +1 -0
- package/lib/AWS/ElastiCache/internal.js +19 -0
- package/lib/AWS/ElastiCache/internal.js.map +1 -0
- package/lib/AWS/Environment.d.ts +2 -3
- package/lib/AWS/Environment.d.ts.map +1 -1
- package/lib/AWS/Environment.js +17 -47
- package/lib/AWS/Environment.js.map +1 -1
- package/lib/AWS/IAM/actions.generated.js +1 -1
- package/lib/AWS/IAM/actions.generated.js.map +1 -1
- package/lib/AWS/IdentityCenter/AccountAssignment.js +6 -0
- package/lib/AWS/IdentityCenter/AccountAssignment.js.map +1 -1
- package/lib/AWS/IdentityCenter/common.d.ts +2 -2
- package/lib/AWS/IdentityCenter/common.d.ts.map +1 -1
- package/lib/AWS/Lambda/BindingHttp.d.ts +62 -10
- package/lib/AWS/Lambda/BindingHttp.d.ts.map +1 -1
- package/lib/AWS/Lambda/BindingHttp.js +161 -22
- package/lib/AWS/Lambda/BindingHttp.js.map +1 -1
- package/lib/AWS/Lambda/EventInvokeConfig.d.ts +1 -1
- package/lib/AWS/Lambda/EventInvokeConfig.d.ts.map +1 -1
- package/lib/AWS/Lambda/FlociFunctionProvider.js +2 -2
- package/lib/AWS/Lambda/FlociMicrovmImageProvider.js +2 -2
- package/lib/AWS/Lambda/Function.d.ts +14 -23
- package/lib/AWS/Lambda/Function.d.ts.map +1 -1
- package/lib/AWS/Lambda/Function.js +38 -35
- package/lib/AWS/Lambda/Function.js.map +1 -1
- package/lib/AWS/Lambda/FunctionImage.d.ts +1 -1
- package/lib/AWS/Lambda/GetFunctionHttp.d.ts +1 -1
- package/lib/AWS/Lambda/GetFunctionHttp.d.ts.map +1 -1
- package/lib/AWS/Lambda/InvokeFunctionHttp.d.ts +1 -1
- package/lib/AWS/Lambda/InvokeFunctionHttp.d.ts.map +1 -1
- package/lib/AWS/Lambda/InvokeWithResponseStreamHttp.d.ts +1 -1
- package/lib/AWS/Lambda/InvokeWithResponseStreamHttp.d.ts.map +1 -1
- package/lib/AWS/Lambda/MicrovmBinding.d.ts.map +1 -1
- package/lib/AWS/Lambda/MicrovmBinding.js +11 -214
- package/lib/AWS/Lambda/MicrovmBinding.js.map +1 -1
- package/lib/AWS/Lambda/MicrovmBundle.d.ts +1 -1
- package/lib/AWS/Lambda/MicrovmBundle.d.ts.map +1 -1
- package/lib/AWS/Lambda/MicrovmBundle.js +1 -12
- package/lib/AWS/Lambda/MicrovmBundle.js.map +1 -1
- package/lib/AWS/Lambda/MicrovmImage.d.ts +12 -28
- package/lib/AWS/Lambda/MicrovmImage.d.ts.map +1 -1
- package/lib/AWS/Lambda/MicrovmImage.js +8 -22
- package/lib/AWS/Lambda/MicrovmImage.js.map +1 -1
- package/lib/AWS/Lambda/MicrovmRuntimeContext.js +1 -1
- package/lib/AWS/Local/DevWatchProvider.d.ts +4 -4
- package/lib/AWS/Local/DevWatchProvider.d.ts.map +1 -1
- package/lib/AWS/Local/DevWatchProvider.js +16 -6
- package/lib/AWS/Local/DevWatchProvider.js.map +1 -1
- package/lib/AWS/Local/Local.d.ts +13 -1
- package/lib/AWS/Local/Local.d.ts.map +1 -1
- package/lib/AWS/Local/Local.js +10 -9
- package/lib/AWS/Local/Local.js.map +1 -1
- package/lib/AWS/Logs/LogGroup.d.ts.map +1 -1
- package/lib/AWS/Logs/LogGroup.js +6 -2
- package/lib/AWS/Logs/LogGroup.js.map +1 -1
- package/lib/AWS/MediaPackageV2/internal.d.ts +1 -1
- package/lib/AWS/MediaPackageV2/internal.d.ts.map +1 -1
- package/lib/AWS/Notifications/internal.d.ts +1 -1
- package/lib/AWS/Notifications/internal.d.ts.map +1 -1
- package/lib/AWS/OAM/internal.d.ts +1 -1
- package/lib/AWS/OAM/internal.d.ts.map +1 -1
- package/lib/AWS/Organizations/Account.d.ts +2 -2
- package/lib/AWS/Organizations/Account.d.ts.map +1 -1
- package/lib/AWS/Organizations/Account.js +16 -8
- package/lib/AWS/Organizations/Account.js.map +1 -1
- package/lib/AWS/Organizations/DelegatedAdministrator.d.ts +2 -3
- package/lib/AWS/Organizations/DelegatedAdministrator.d.ts.map +1 -1
- package/lib/AWS/Organizations/DelegatedAdministrator.js +5 -5
- package/lib/AWS/Organizations/DelegatedAdministrator.js.map +1 -1
- package/lib/AWS/Organizations/Organization.d.ts +1 -1
- package/lib/AWS/Organizations/Organization.d.ts.map +1 -1
- package/lib/AWS/Organizations/Organization.js +2 -2
- package/lib/AWS/Organizations/Organization.js.map +1 -1
- package/lib/AWS/Organizations/common.d.ts +9 -0
- package/lib/AWS/Organizations/common.d.ts.map +1 -1
- package/lib/AWS/Organizations/common.js +17 -1
- package/lib/AWS/Organizations/common.js.map +1 -1
- package/lib/AWS/Personalize/internal.d.ts +1 -1
- package/lib/AWS/Personalize/internal.d.ts.map +1 -1
- package/lib/AWS/Providers.d.ts.map +1 -1
- package/lib/AWS/Providers.js +4 -1
- package/lib/AWS/Providers.js.map +1 -1
- package/lib/AWS/RDS/Connect.d.ts +3 -3
- package/lib/AWS/RDS/Connect.d.ts.map +1 -1
- package/lib/AWS/RDS/DBInstance.d.ts +226 -11
- package/lib/AWS/RDS/DBInstance.d.ts.map +1 -1
- package/lib/AWS/RDS/DBInstance.js +692 -36
- package/lib/AWS/RDS/DBInstance.js.map +1 -1
- package/lib/AWS/RDS/DBParameterGroup.d.ts +8 -9
- package/lib/AWS/RDS/DBParameterGroup.d.ts.map +1 -1
- package/lib/AWS/RDS/DBParameterGroup.js +53 -27
- package/lib/AWS/RDS/DBParameterGroup.js.map +1 -1
- package/lib/AWS/Route53/HostedZoneLookup.d.ts +1 -1
- package/lib/AWS/Route53/HostedZoneLookup.d.ts.map +1 -1
- package/lib/AWS/S3/AbortMultipartUploadHttp.d.ts +1 -1
- package/lib/AWS/S3/AbortMultipartUploadHttp.d.ts.map +1 -1
- package/lib/AWS/S3/BindingHttp.d.ts +13 -5
- package/lib/AWS/S3/BindingHttp.d.ts.map +1 -1
- package/lib/AWS/S3/BindingHttp.js +28 -30
- package/lib/AWS/S3/BindingHttp.js.map +1 -1
- package/lib/AWS/S3/Bucket.d.ts +95 -5
- package/lib/AWS/S3/Bucket.d.ts.map +1 -1
- package/lib/AWS/S3/Bucket.js +165 -47
- package/lib/AWS/S3/Bucket.js.map +1 -1
- package/lib/AWS/S3/CompleteMultipartUploadHttp.d.ts +1 -1
- package/lib/AWS/S3/CompleteMultipartUploadHttp.d.ts.map +1 -1
- package/lib/AWS/S3/CopyObjectHttp.d.ts +1 -1
- package/lib/AWS/S3/CopyObjectHttp.d.ts.map +1 -1
- package/lib/AWS/S3/CreateMultipartUploadHttp.d.ts +1 -1
- package/lib/AWS/S3/CreateMultipartUploadHttp.d.ts.map +1 -1
- package/lib/AWS/S3/DeleteObjectHttp.d.ts +1 -1
- package/lib/AWS/S3/DeleteObjectHttp.d.ts.map +1 -1
- package/lib/AWS/S3/DeleteObjectTaggingHttp.d.ts +1 -1
- package/lib/AWS/S3/DeleteObjectTaggingHttp.d.ts.map +1 -1
- package/lib/AWS/S3/DeleteObjectsHttp.d.ts +1 -1
- package/lib/AWS/S3/DeleteObjectsHttp.d.ts.map +1 -1
- package/lib/AWS/S3/GetObjectAttributesHttp.d.ts +1 -1
- package/lib/AWS/S3/GetObjectAttributesHttp.d.ts.map +1 -1
- package/lib/AWS/S3/GetObjectHttp.d.ts +1 -1
- package/lib/AWS/S3/GetObjectHttp.d.ts.map +1 -1
- package/lib/AWS/S3/GetObjectLegalHoldHttp.d.ts +1 -1
- package/lib/AWS/S3/GetObjectLegalHoldHttp.d.ts.map +1 -1
- package/lib/AWS/S3/GetObjectRetentionHttp.d.ts +1 -1
- package/lib/AWS/S3/GetObjectRetentionHttp.d.ts.map +1 -1
- package/lib/AWS/S3/GetObjectTaggingHttp.d.ts +1 -1
- package/lib/AWS/S3/GetObjectTaggingHttp.d.ts.map +1 -1
- package/lib/AWS/S3/HeadObjectHttp.d.ts +1 -1
- package/lib/AWS/S3/HeadObjectHttp.d.ts.map +1 -1
- package/lib/AWS/S3/ListMultipartUploadsHttp.d.ts +1 -1
- package/lib/AWS/S3/ListMultipartUploadsHttp.d.ts.map +1 -1
- package/lib/AWS/S3/ListObjectVersionsHttp.d.ts +1 -1
- package/lib/AWS/S3/ListObjectVersionsHttp.d.ts.map +1 -1
- package/lib/AWS/S3/ListObjectsV2Http.d.ts +1 -1
- package/lib/AWS/S3/ListObjectsV2Http.d.ts.map +1 -1
- package/lib/AWS/S3/ListPartsHttp.d.ts +1 -1
- package/lib/AWS/S3/ListPartsHttp.d.ts.map +1 -1
- package/lib/AWS/S3/PresignGetObject.d.ts +2 -2
- package/lib/AWS/S3/PresignGetObject.d.ts.map +1 -1
- package/lib/AWS/S3/PresignGetObject.js.map +1 -1
- package/lib/AWS/S3/PresignPutObject.d.ts +2 -2
- package/lib/AWS/S3/PresignPutObject.d.ts.map +1 -1
- package/lib/AWS/S3/PresignPutObject.js.map +1 -1
- package/lib/AWS/S3/PutObjectHttp.d.ts +1 -1
- package/lib/AWS/S3/PutObjectHttp.d.ts.map +1 -1
- package/lib/AWS/S3/PutObjectLegalHoldHttp.d.ts +1 -1
- package/lib/AWS/S3/PutObjectLegalHoldHttp.d.ts.map +1 -1
- package/lib/AWS/S3/PutObjectRetentionHttp.d.ts +1 -1
- package/lib/AWS/S3/PutObjectRetentionHttp.d.ts.map +1 -1
- package/lib/AWS/S3/PutObjectTaggingHttp.d.ts +1 -1
- package/lib/AWS/S3/PutObjectTaggingHttp.d.ts.map +1 -1
- package/lib/AWS/S3/RestoreObjectHttp.d.ts +1 -1
- package/lib/AWS/S3/RestoreObjectHttp.d.ts.map +1 -1
- package/lib/AWS/S3/UploadPartCopyHttp.d.ts +1 -1
- package/lib/AWS/S3/UploadPartCopyHttp.d.ts.map +1 -1
- package/lib/AWS/S3/UploadPartHttp.d.ts +1 -1
- package/lib/AWS/S3/UploadPartHttp.d.ts.map +1 -1
- package/lib/AWS/SNS/Subscription.d.ts.map +1 -1
- package/lib/AWS/SNS/Subscription.js +21 -5
- package/lib/AWS/SNS/Subscription.js.map +1 -1
- package/lib/AWS/StateStore/State.d.ts +24 -4
- package/lib/AWS/StateStore/State.d.ts.map +1 -1
- package/lib/AWS/StateStore/State.js +19 -27
- package/lib/AWS/StateStore/State.js.map +1 -1
- package/lib/AWS/Synthetics/Canary.d.ts.map +1 -1
- package/lib/AWS/Synthetics/Canary.js +4 -9
- package/lib/AWS/Synthetics/Canary.js.map +1 -1
- package/lib/Alchemist/Entrypoint.d.ts +22 -0
- package/lib/Alchemist/Entrypoint.d.ts.map +1 -0
- package/lib/Alchemist/Entrypoint.js +27 -0
- package/lib/Alchemist/Entrypoint.js.map +1 -0
- package/lib/Alchemist/Errors.d.ts +31 -0
- package/lib/Alchemist/Errors.d.ts.map +1 -0
- package/lib/Alchemist/Errors.js +19 -0
- package/lib/Alchemist/Errors.js.map +1 -0
- package/lib/Alchemist/Progress.d.ts +16 -0
- package/lib/Alchemist/Progress.d.ts.map +1 -0
- package/lib/Alchemist/Progress.js +129 -0
- package/lib/Alchemist/Progress.js.map +1 -0
- package/lib/Alchemist/Runtime.d.ts +22 -0
- package/lib/Alchemist/Runtime.d.ts.map +1 -0
- package/lib/Alchemist/Runtime.js +28 -0
- package/lib/Alchemist/Runtime.js.map +1 -0
- package/lib/Alchemist/Session.d.ts +114 -0
- package/lib/Alchemist/Session.d.ts.map +1 -0
- package/lib/Alchemist/Session.js +214 -0
- package/lib/Alchemist/Session.js.map +1 -0
- package/lib/Alchemist/index.d.ts +15 -0
- package/lib/Alchemist/index.d.ts.map +1 -0
- package/lib/Alchemist/index.js +15 -0
- package/lib/Alchemist/index.js.map +1 -0
- package/lib/Alchemist/routes/aws.d.ts +21 -0
- package/lib/Alchemist/routes/aws.d.ts.map +1 -0
- package/lib/Alchemist/routes/aws.js +54 -0
- package/lib/Alchemist/routes/aws.js.map +1 -0
- package/lib/Alchemist/routes/cloudflare.d.ts +63 -0
- package/lib/Alchemist/routes/cloudflare.d.ts.map +1 -0
- package/lib/Alchemist/routes/cloudflare.js +113 -0
- package/lib/Alchemist/routes/cloudflare.js.map +1 -0
- package/lib/Alchemist/routes/cloudflareToken.d.ts +93 -0
- package/lib/Alchemist/routes/cloudflareToken.d.ts.map +1 -0
- package/lib/Alchemist/routes/cloudflareToken.js +111 -0
- package/lib/Alchemist/routes/cloudflareToken.js.map +1 -0
- package/lib/Alchemist/routes/drift.d.ts +55 -0
- package/lib/Alchemist/routes/drift.d.ts.map +1 -0
- package/lib/Alchemist/routes/drift.js +52 -0
- package/lib/Alchemist/routes/drift.js.map +1 -0
- package/lib/Alchemist/routes/logs.d.ts +41 -0
- package/lib/Alchemist/routes/logs.d.ts.map +1 -0
- package/lib/Alchemist/routes/logs.js +112 -0
- package/lib/Alchemist/routes/logs.js.map +1 -0
- package/lib/Alchemist/routes/nuke.d.ts +46 -0
- package/lib/Alchemist/routes/nuke.d.ts.map +1 -0
- package/lib/Alchemist/routes/nuke.js +80 -0
- package/lib/Alchemist/routes/nuke.js.map +1 -0
- package/lib/Alchemist/routes/profile.d.ts +133 -0
- package/lib/Alchemist/routes/profile.d.ts.map +1 -0
- package/lib/Alchemist/routes/profile.js +257 -0
- package/lib/Alchemist/routes/profile.js.map +1 -0
- package/lib/Alchemist/routes/provider.d.ts +33 -0
- package/lib/Alchemist/routes/provider.d.ts.map +1 -0
- package/lib/Alchemist/routes/provider.js +65 -0
- package/lib/Alchemist/routes/provider.js.map +1 -0
- package/lib/Alchemist/routes/stack.d.ts +78 -0
- package/lib/Alchemist/routes/stack.d.ts.map +1 -0
- package/lib/Alchemist/routes/stack.js +67 -0
- package/lib/Alchemist/routes/stack.js.map +1 -0
- package/lib/Alchemist/routes/state.d.ts +35 -0
- package/lib/Alchemist/routes/state.d.ts.map +1 -0
- package/lib/Alchemist/routes/state.js +46 -0
- package/lib/Alchemist/routes/state.js.map +1 -0
- package/lib/Apply.d.ts +8 -6
- package/lib/Apply.d.ts.map +1 -1
- package/lib/Apply.js +209 -103
- package/lib/Apply.js.map +1 -1
- package/lib/Auth/AuthProvider.d.ts +201 -25
- package/lib/Auth/AuthProvider.d.ts.map +1 -1
- package/lib/Auth/AuthProvider.js +180 -40
- package/lib/Auth/AuthProvider.js.map +1 -1
- package/lib/Auth/BrowserOAuth.d.ts +27 -0
- package/lib/Auth/BrowserOAuth.d.ts.map +1 -0
- package/lib/Auth/BrowserOAuth.js +41 -0
- package/lib/Auth/BrowserOAuth.js.map +1 -0
- package/lib/Auth/Credentials.d.ts +11 -6
- package/lib/Auth/Credentials.d.ts.map +1 -1
- package/lib/Auth/Credentials.js +62 -23
- package/lib/Auth/Credentials.js.map +1 -1
- package/lib/Auth/CredentialsCache.d.ts +15 -0
- package/lib/Auth/CredentialsCache.d.ts.map +1 -0
- package/lib/Auth/CredentialsCache.js +34 -0
- package/lib/Auth/CredentialsCache.js.map +1 -0
- package/lib/Auth/Demand.d.ts +59 -34
- package/lib/Auth/Demand.d.ts.map +1 -1
- package/lib/Auth/Demand.js +151 -61
- package/lib/Auth/Demand.js.map +1 -1
- package/lib/Auth/Env.d.ts +4 -4
- package/lib/Auth/Env.d.ts.map +1 -1
- package/lib/Auth/Env.js +18 -9
- package/lib/Auth/Env.js.map +1 -1
- package/lib/Auth/Inspect.d.ts +33 -0
- package/lib/Auth/Inspect.d.ts.map +1 -0
- package/lib/Auth/Inspect.js +67 -0
- package/lib/Auth/Inspect.js.map +1 -0
- package/lib/Auth/Lock.d.ts +6 -0
- package/lib/Auth/Lock.d.ts.map +1 -1
- package/lib/Auth/Lock.js +26 -14
- package/lib/Auth/Lock.js.map +1 -1
- package/lib/Auth/OAuthFlow.d.ts +119 -0
- package/lib/Auth/OAuthFlow.d.ts.map +1 -0
- package/lib/Auth/OAuthFlow.js +314 -0
- package/lib/Auth/OAuthFlow.js.map +1 -0
- package/lib/Auth/Paths.d.ts +18 -0
- package/lib/Auth/Paths.d.ts.map +1 -0
- package/lib/Auth/Paths.js +20 -0
- package/lib/Auth/Paths.js.map +1 -0
- package/lib/Auth/Profile.d.ts +91 -67
- package/lib/Auth/Profile.d.ts.map +1 -1
- package/lib/Auth/Profile.js +449 -92
- package/lib/Auth/Profile.js.map +1 -1
- package/lib/Auth/Resolve.d.ts +42 -0
- package/lib/Auth/Resolve.d.ts.map +1 -0
- package/lib/Auth/Resolve.js +90 -0
- package/lib/Auth/Resolve.js.map +1 -0
- package/lib/Auth/StoredAuthProvider.d.ts +84 -0
- package/lib/Auth/StoredAuthProvider.d.ts.map +1 -0
- package/lib/Auth/StoredAuthProvider.js +179 -0
- package/lib/Auth/StoredAuthProvider.js.map +1 -0
- package/lib/Auth/index.d.ts +1 -0
- package/lib/Auth/index.d.ts.map +1 -1
- package/lib/Auth/index.js +1 -0
- package/lib/Auth/index.js.map +1 -1
- package/lib/Axiom/AuthProvider.d.ts +17 -26
- package/lib/Axiom/AuthProvider.d.ts.map +1 -1
- package/lib/Axiom/AuthProvider.js +89 -172
- package/lib/Axiom/AuthProvider.js.map +1 -1
- package/lib/Axiom/Credentials.d.ts +2 -4
- package/lib/Axiom/Credentials.d.ts.map +1 -1
- package/lib/Axiom/Credentials.js +5 -10
- package/lib/Axiom/Credentials.js.map +1 -1
- package/lib/Axiom/Providers.d.ts +2 -2
- package/lib/Axiom/Providers.d.ts.map +1 -1
- package/lib/Axiom/Providers.js +3 -3
- package/lib/Axiom/Providers.js.map +1 -1
- package/lib/Bundle/Bundle.d.ts +3 -5
- package/lib/Bundle/Bundle.d.ts.map +1 -1
- package/lib/Bundle/Bundle.js.map +1 -1
- package/lib/Cli/CliKit/CliKit.d.ts +92 -0
- package/lib/Cli/CliKit/CliKit.d.ts.map +1 -0
- package/lib/Cli/CliKit/CliKit.js +27 -0
- package/lib/Cli/CliKit/CliKit.js.map +1 -0
- package/lib/Cli/CliKit/index.d.ts +9 -0
- package/lib/Cli/CliKit/index.d.ts.map +1 -0
- package/lib/Cli/CliKit/index.js +9 -0
- package/lib/Cli/CliKit/index.js.map +1 -0
- package/lib/Cli/CliKit/interaction.d.ts +13 -0
- package/lib/Cli/CliKit/interaction.d.ts.map +1 -0
- package/lib/Cli/CliKit/interaction.js +17 -0
- package/lib/Cli/CliKit/interaction.js.map +1 -0
- package/lib/Cli/CliKit/layer.d.ts +7 -0
- package/lib/Cli/CliKit/layer.d.ts.map +1 -0
- package/lib/Cli/CliKit/layer.js +34 -0
- package/lib/Cli/CliKit/layer.js.map +1 -0
- package/lib/Cli/DevOptions.d.ts +17 -0
- package/lib/Cli/DevOptions.d.ts.map +1 -0
- package/lib/Cli/DevOptions.js +16 -0
- package/lib/Cli/DevOptions.js.map +1 -0
- package/lib/Cli/Format.d.ts +5 -0
- package/lib/Cli/Format.d.ts.map +1 -0
- package/lib/Cli/Format.js +27 -0
- package/lib/Cli/Format.js.map +1 -0
- package/lib/Cli/GlobalLog.d.ts +41 -0
- package/lib/Cli/GlobalLog.d.ts.map +1 -0
- package/lib/Cli/GlobalLog.js +112 -0
- package/lib/Cli/GlobalLog.js.map +1 -0
- package/lib/Cli/LoggingCli.d.ts +4 -3
- package/lib/Cli/LoggingCli.d.ts.map +1 -1
- package/lib/Cli/LoggingCli.js +240 -100
- package/lib/Cli/LoggingCli.js.map +1 -1
- package/lib/Cli/ModeTag.d.ts +1 -1
- package/lib/Cli/ModeTag.js +1 -1
- package/lib/Cli/NamespaceTree.d.ts +18 -8
- package/lib/Cli/NamespaceTree.d.ts.map +1 -1
- package/lib/Cli/NamespaceTree.js +52 -11
- package/lib/Cli/NamespaceTree.js.map +1 -1
- package/lib/Cli/PlainCliFormatter.d.ts +11 -0
- package/lib/Cli/PlainCliFormatter.d.ts.map +1 -0
- package/lib/Cli/PlainCliFormatter.js +70 -0
- package/lib/Cli/PlainCliFormatter.js.map +1 -0
- package/lib/Cli/PropertyDiff.d.ts +37 -0
- package/lib/Cli/PropertyDiff.d.ts.map +1 -0
- package/lib/Cli/PropertyDiff.js +162 -0
- package/lib/Cli/PropertyDiff.js.map +1 -0
- package/lib/Cli/checkVersion.d.ts.map +1 -1
- package/lib/Cli/checkVersion.js +10 -6
- package/lib/Cli/checkVersion.js.map +1 -1
- package/lib/Cli/commands/aws.d.ts +2 -4
- package/lib/Cli/commands/aws.d.ts.map +1 -1
- package/lib/Cli/commands/aws.js +44 -56
- package/lib/Cli/commands/aws.js.map +1 -1
- package/lib/Cli/commands/cloudflare.d.ts +6 -7
- package/lib/Cli/commands/cloudflare.d.ts.map +1 -1
- package/lib/Cli/commands/cloudflare.js +156 -314
- package/lib/Cli/commands/cloudflare.js.map +1 -1
- package/lib/Cli/commands/compat.d.ts +11 -0
- package/lib/Cli/commands/compat.d.ts.map +1 -0
- package/lib/Cli/commands/compat.js +19 -0
- package/lib/Cli/commands/compat.js.map +1 -0
- package/lib/Cli/commands/confirm.d.ts +33 -0
- package/lib/Cli/commands/confirm.d.ts.map +1 -0
- package/lib/Cli/commands/confirm.js +39 -0
- package/lib/Cli/commands/confirm.js.map +1 -0
- package/lib/Cli/commands/deploy.d.ts +20 -32
- package/lib/Cli/commands/deploy.d.ts.map +1 -1
- package/lib/Cli/commands/deploy.js +141 -141
- package/lib/Cli/commands/deploy.js.map +1 -1
- package/lib/Cli/commands/dev.d.ts +5 -4
- package/lib/Cli/commands/dev.d.ts.map +1 -1
- package/lib/Cli/commands/dev.js +55 -26
- package/lib/Cli/commands/dev.js.map +1 -1
- package/lib/Cli/commands/drift.d.ts +12 -0
- package/lib/Cli/commands/drift.d.ts.map +1 -0
- package/lib/Cli/commands/drift.js +68 -0
- package/lib/Cli/commands/drift.js.map +1 -0
- package/lib/Cli/commands/errors.d.ts +35 -0
- package/lib/Cli/commands/errors.d.ts.map +1 -0
- package/lib/Cli/commands/errors.js +106 -0
- package/lib/Cli/commands/errors.js.map +1 -0
- package/lib/Cli/commands/flags.d.ts +48 -0
- package/lib/Cli/commands/flags.d.ts.map +1 -0
- package/lib/Cli/commands/flags.js +100 -0
- package/lib/Cli/commands/flags.js.map +1 -0
- package/lib/Cli/commands/instrument.d.ts +10 -0
- package/lib/Cli/commands/instrument.d.ts.map +1 -0
- package/lib/Cli/commands/instrument.js +14 -0
- package/lib/Cli/commands/instrument.js.map +1 -0
- package/lib/Cli/commands/logs.d.ts +5 -4
- package/lib/Cli/commands/logs.d.ts.map +1 -1
- package/lib/Cli/commands/logs.js +64 -89
- package/lib/Cli/commands/logs.js.map +1 -1
- package/lib/Cli/commands/nuke.d.ts +3 -2
- package/lib/Cli/commands/nuke.d.ts.map +1 -1
- package/lib/Cli/commands/nuke.js +89 -588
- package/lib/Cli/commands/nuke.js.map +1 -1
- package/lib/Cli/commands/profile/commands.d.ts +9 -0
- package/lib/Cli/commands/profile/commands.d.ts.map +1 -0
- package/lib/Cli/commands/profile/commands.js +276 -0
- package/lib/Cli/commands/profile/commands.js.map +1 -0
- package/lib/Cli/commands/profile/flows.d.ts +36 -0
- package/lib/Cli/commands/profile/flows.d.ts.map +1 -0
- package/lib/Cli/commands/profile/flows.js +155 -0
- package/lib/Cli/commands/profile/flows.js.map +1 -0
- package/lib/Cli/commands/profile/hub.d.ts +8 -0
- package/lib/Cli/commands/profile/hub.d.ts.map +1 -0
- package/lib/Cli/commands/profile/hub.js +154 -0
- package/lib/Cli/commands/profile/hub.js.map +1 -0
- package/lib/Cli/commands/profile/index.d.ts +2 -0
- package/lib/Cli/commands/profile/index.d.ts.map +1 -0
- package/lib/Cli/commands/profile/index.js +2 -0
- package/lib/Cli/commands/profile/index.js.map +1 -0
- package/lib/Cli/commands/provider.d.ts +17 -0
- package/lib/Cli/commands/provider.d.ts.map +1 -0
- package/lib/Cli/commands/provider.js +44 -0
- package/lib/Cli/commands/provider.js.map +1 -0
- package/lib/Cli/commands/render.d.ts +12 -0
- package/lib/Cli/commands/render.d.ts.map +1 -0
- package/lib/Cli/commands/render.js +82 -0
- package/lib/Cli/commands/render.js.map +1 -0
- package/lib/Cli/commands/state.d.ts +8 -1
- package/lib/Cli/commands/state.d.ts.map +1 -1
- package/lib/Cli/commands/state.js +125 -248
- package/lib/Cli/commands/state.js.map +1 -1
- package/lib/Cli/components/types.d.ts +104 -0
- package/lib/Cli/components/types.d.ts.map +1 -0
- package/lib/Cli/components/types.js +4 -0
- package/lib/Cli/components/types.js.map +1 -0
- package/lib/Cli/components/ui/Data.d.ts +15 -0
- package/lib/Cli/components/ui/Data.d.ts.map +1 -0
- package/lib/Cli/components/ui/Data.js +8 -0
- package/lib/Cli/components/ui/Data.js.map +1 -0
- package/lib/Cli/components/ui/Environment.d.ts +45 -0
- package/lib/Cli/components/ui/Environment.d.ts.map +1 -0
- package/lib/Cli/components/ui/Environment.js +38 -0
- package/lib/Cli/components/ui/Environment.js.map +1 -0
- package/lib/Cli/components/ui/Feedback.d.ts +57 -0
- package/lib/Cli/components/ui/Feedback.d.ts.map +1 -0
- package/lib/Cli/components/ui/Feedback.js +83 -0
- package/lib/Cli/components/ui/Feedback.js.map +1 -0
- package/lib/Cli/components/ui/Interactive.d.ts +157 -0
- package/lib/Cli/components/ui/Interactive.d.ts.map +1 -0
- package/lib/Cli/components/ui/Interactive.js +527 -0
- package/lib/Cli/components/ui/Interactive.js.map +1 -0
- package/lib/Cli/components/ui/Layout.d.ts +74 -0
- package/lib/Cli/components/ui/Layout.d.ts.map +1 -0
- package/lib/Cli/components/ui/Layout.js +91 -0
- package/lib/Cli/components/ui/Layout.js.map +1 -0
- package/lib/Cli/components/ui/Live.d.ts +49 -0
- package/lib/Cli/components/ui/Live.d.ts.map +1 -0
- package/lib/Cli/components/ui/Live.js +43 -0
- package/lib/Cli/components/ui/Live.js.map +1 -0
- package/lib/Cli/components/ui/ProgressBar.d.ts +16 -0
- package/lib/Cli/components/ui/ProgressBar.d.ts.map +1 -0
- package/lib/Cli/components/ui/ProgressBar.js +17 -0
- package/lib/Cli/components/ui/ProgressBar.js.map +1 -0
- package/lib/Cli/components/ui/Transcript.d.ts +12 -0
- package/lib/Cli/components/ui/Transcript.d.ts.map +1 -0
- package/lib/Cli/components/ui/Transcript.js +14 -0
- package/lib/Cli/components/ui/Transcript.js.map +1 -0
- package/lib/Cli/components/ui/Typography.d.ts +17 -0
- package/lib/Cli/components/ui/Typography.d.ts.map +1 -0
- package/lib/Cli/components/ui/Typography.js +21 -0
- package/lib/Cli/components/ui/Typography.js.map +1 -0
- package/lib/Cli/components/ui/index.d.ts +16 -0
- package/lib/Cli/components/ui/index.d.ts.map +1 -0
- package/lib/Cli/components/ui/index.js +16 -0
- package/lib/Cli/components/ui/index.js.map +1 -0
- package/lib/Cli/components/view/ApprovePlan.d.ts +16 -0
- package/lib/Cli/components/view/ApprovePlan.d.ts.map +1 -0
- package/lib/Cli/components/view/ApprovePlan.js +59 -0
- package/lib/Cli/components/view/ApprovePlan.js.map +1 -0
- package/lib/Cli/components/view/Help.d.ts +4 -0
- package/lib/Cli/components/view/Help.d.ts.map +1 -0
- package/lib/Cli/components/view/Help.js +116 -0
- package/lib/Cli/components/view/Help.js.map +1 -0
- package/lib/Cli/components/view/Logo.d.ts +7 -0
- package/lib/Cli/components/view/Logo.d.ts.map +1 -0
- package/lib/Cli/components/view/Logo.js +118 -0
- package/lib/Cli/components/view/Logo.js.map +1 -0
- package/lib/Cli/components/view/Nuke.d.ts +36 -0
- package/lib/Cli/components/view/Nuke.d.ts.map +1 -0
- package/lib/Cli/components/view/Nuke.js +148 -0
- package/lib/Cli/components/view/Nuke.js.map +1 -0
- package/lib/Cli/components/view/PlanDecision.d.ts +15 -0
- package/lib/Cli/components/view/PlanDecision.d.ts.map +1 -0
- package/lib/Cli/components/view/PlanDecision.js +26 -0
- package/lib/Cli/components/view/PlanDecision.js.map +1 -0
- package/lib/Cli/components/view/PlanRow.d.ts +17 -0
- package/lib/Cli/components/view/PlanRow.d.ts.map +1 -0
- package/lib/Cli/components/view/PlanRow.js +14 -0
- package/lib/Cli/components/view/PlanRow.js.map +1 -0
- package/lib/Cli/components/view/PlanTree.d.ts +116 -0
- package/lib/Cli/components/view/PlanTree.d.ts.map +1 -0
- package/lib/Cli/components/view/PlanTree.js +207 -0
- package/lib/Cli/components/view/PlanTree.js.map +1 -0
- package/lib/Cli/components/view/PlanView.d.ts +23 -0
- package/lib/Cli/components/view/PlanView.d.ts.map +1 -0
- package/lib/Cli/components/view/PlanView.js +310 -0
- package/lib/Cli/components/view/PlanView.js.map +1 -0
- package/lib/Cli/components/view/Profile.d.ts +130 -0
- package/lib/Cli/components/view/Profile.d.ts.map +1 -0
- package/lib/Cli/components/view/Profile.js +147 -0
- package/lib/Cli/components/view/Profile.js.map +1 -0
- package/lib/Cli/components/view/ProfileDashboard.d.ts +152 -0
- package/lib/Cli/components/view/ProfileDashboard.d.ts.map +1 -0
- package/lib/Cli/components/view/ProfileDashboard.js +485 -0
- package/lib/Cli/components/view/ProfileDashboard.js.map +1 -0
- package/lib/Cli/components/view/Prompts.d.ts +10 -0
- package/lib/Cli/components/view/Prompts.d.ts.map +1 -0
- package/lib/Cli/components/view/Prompts.js +440 -0
- package/lib/Cli/components/view/Prompts.js.map +1 -0
- package/lib/Cli/components/view/Runtime.d.ts +8 -0
- package/lib/Cli/components/view/Runtime.d.ts.map +1 -0
- package/lib/Cli/components/view/Runtime.js +670 -0
- package/lib/Cli/components/view/Runtime.js.map +1 -0
- package/lib/Cli/components/view/SigilCli.d.ts +5 -0
- package/lib/Cli/components/view/SigilCli.d.ts.map +1 -0
- package/lib/Cli/components/view/SigilCli.js +134 -0
- package/lib/Cli/components/view/SigilCli.js.map +1 -0
- package/lib/Cli/components/view/StackOutputs.d.ts +10 -0
- package/lib/Cli/components/view/StackOutputs.d.ts.map +1 -0
- package/lib/Cli/components/view/StackOutputs.js +14 -0
- package/lib/Cli/components/view/StackOutputs.js.map +1 -0
- package/lib/Cli/components/view/StateExplorer.d.ts +118 -0
- package/lib/Cli/components/view/StateExplorer.d.ts.map +1 -0
- package/lib/Cli/components/view/StateExplorer.js +664 -0
- package/lib/Cli/components/view/StateExplorer.js.map +1 -0
- package/lib/Cli/components/view/statusStyle.d.ts +18 -0
- package/lib/Cli/components/view/statusStyle.d.ts.map +1 -0
- package/lib/Cli/components/view/statusStyle.js +69 -0
- package/lib/Cli/components/view/statusStyle.js.map +1 -0
- package/lib/Cli/components/view/usePlanPresentation.d.ts +25 -0
- package/lib/Cli/components/view/usePlanPresentation.d.ts.map +1 -0
- package/lib/Cli/components/view/usePlanPresentation.js +54 -0
- package/lib/Cli/components/view/usePlanPresentation.js.map +1 -0
- package/lib/Cli/components/view/usePlanViewport.d.ts +31 -0
- package/lib/Cli/components/view/usePlanViewport.d.ts.map +1 -0
- package/lib/Cli/components/view/usePlanViewport.js +113 -0
- package/lib/Cli/components/view/usePlanViewport.js.map +1 -0
- package/lib/Cli/exec.d.ts +5 -1
- package/lib/Cli/exec.d.ts.map +1 -1
- package/lib/Cli/exec.js +174 -19
- package/lib/Cli/exec.js.map +1 -1
- package/lib/Cli/main.d.ts +4 -1
- package/lib/Cli/main.d.ts.map +1 -1
- package/lib/Cli/main.js +129 -38
- package/lib/Cli/main.js.map +1 -1
- package/lib/Cli/selectCli.d.ts +5 -3
- package/lib/Cli/selectCli.d.ts.map +1 -1
- package/lib/Cli/selectCli.js +16 -9
- package/lib/Cli/selectCli.js.map +1 -1
- package/lib/Cloudflare/AI/GatewayProvider.d.ts +1 -1
- package/lib/Cloudflare/AI/GatewayProvider.js +1 -1
- package/lib/Cloudflare/AI/LanguageModel.d.ts +2 -2
- package/lib/Cloudflare/AI/LanguageModel.d.ts.map +1 -1
- package/lib/Cloudflare/AI/LanguageModel.js +1 -1
- package/lib/Cloudflare/AI/ProviderKey.d.ts +3 -3
- package/lib/Cloudflare/AI/ProviderKey.js +3 -3
- package/lib/Cloudflare/AI/SearchToken.d.ts.map +1 -1
- package/lib/Cloudflare/AI/SearchToken.js +3 -6
- package/lib/Cloudflare/AI/SearchToken.js.map +1 -1
- package/lib/Cloudflare/Access.js +1 -1
- package/lib/Cloudflare/Alerting/Webhook.d.ts +1 -1
- package/lib/Cloudflare/Alerting/Webhook.js +1 -1
- package/lib/Cloudflare/ApiToken/UserApiToken.d.ts +1 -1
- package/lib/Cloudflare/ApiToken/UserApiToken.js +1 -1
- package/lib/Cloudflare/Auth/AuthConfig.d.ts +60 -0
- package/lib/Cloudflare/Auth/AuthConfig.d.ts.map +1 -0
- package/lib/Cloudflare/Auth/AuthConfig.js +68 -0
- package/lib/Cloudflare/Auth/AuthConfig.js.map +1 -0
- package/lib/Cloudflare/Auth/AuthProvider.d.ts +2 -142
- package/lib/Cloudflare/Auth/AuthProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Auth/AuthProvider.js +473 -327
- package/lib/Cloudflare/Auth/AuthProvider.js.map +1 -1
- package/lib/Cloudflare/Auth/OAuthClient.d.ts +16 -48
- package/lib/Cloudflare/Auth/OAuthClient.d.ts.map +1 -1
- package/lib/Cloudflare/Auth/OAuthClient.js +25 -260
- package/lib/Cloudflare/Auth/OAuthClient.js.map +1 -1
- package/lib/Cloudflare/Auth/OAuthScopes.d.ts +88 -0
- package/lib/Cloudflare/Auth/OAuthScopes.d.ts.map +1 -0
- package/lib/Cloudflare/Auth/OAuthScopes.js +887 -0
- package/lib/Cloudflare/Auth/OAuthScopes.js.map +1 -0
- package/lib/Cloudflare/Auth/TokenPolicy.d.ts +34 -0
- package/lib/Cloudflare/Auth/TokenPolicy.d.ts.map +1 -0
- package/lib/Cloudflare/Auth/TokenPolicy.js +51 -0
- package/lib/Cloudflare/Auth/TokenPolicy.js.map +1 -0
- package/lib/Cloudflare/Bridge.d.ts +7 -0
- package/lib/Cloudflare/Bridge.d.ts.map +1 -1
- package/lib/Cloudflare/Bridge.js +8 -0
- package/lib/Cloudflare/Bridge.js.map +1 -1
- package/lib/Cloudflare/CloudflareEnvironment.d.ts +3 -10
- package/lib/Cloudflare/CloudflareEnvironment.d.ts.map +1 -1
- package/lib/Cloudflare/CloudflareEnvironment.js +10 -16
- package/lib/Cloudflare/CloudflareEnvironment.js.map +1 -1
- package/lib/Cloudflare/CloudflareEnvironmentService.d.ts +9 -0
- package/lib/Cloudflare/CloudflareEnvironmentService.d.ts.map +1 -0
- package/lib/Cloudflare/CloudflareEnvironmentService.js +5 -0
- package/lib/Cloudflare/CloudflareEnvironmentService.js.map +1 -0
- package/lib/Cloudflare/Containers/Container.d.ts +10 -25
- package/lib/Cloudflare/Containers/Container.d.ts.map +1 -1
- package/lib/Cloudflare/Containers/Container.js +9 -23
- package/lib/Cloudflare/Containers/Container.js.map +1 -1
- package/lib/Cloudflare/Containers/ContainerApplication.d.ts +23 -31
- package/lib/Cloudflare/Containers/ContainerApplication.d.ts.map +1 -1
- package/lib/Cloudflare/Containers/ContainerApplication.js +0 -1
- package/lib/Cloudflare/Containers/ContainerApplication.js.map +1 -1
- package/lib/Cloudflare/Containers/ContainerPlatform.d.ts +2 -2
- package/lib/Cloudflare/Containers/ContainerPlatform.d.ts.map +1 -1
- package/lib/Cloudflare/Containers/ContainerPlatform.js +1 -2
- package/lib/Cloudflare/Containers/ContainerPlatform.js.map +1 -1
- package/lib/Cloudflare/Containers/ContainerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Containers/ContainerProvider.js +122 -65
- package/lib/Cloudflare/Containers/ContainerProvider.js.map +1 -1
- package/lib/Cloudflare/Containers/ContainerPublication.d.ts +4 -0
- package/lib/Cloudflare/Containers/ContainerPublication.d.ts.map +1 -0
- package/lib/Cloudflare/Containers/ContainerPublication.js +8 -0
- package/lib/Cloudflare/Containers/ContainerPublication.js.map +1 -0
- package/lib/Cloudflare/Containers/LocalContainerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Containers/LocalContainerProvider.js +3 -2
- package/lib/Cloudflare/Containers/LocalContainerProvider.js.map +1 -1
- package/lib/Cloudflare/Containers/StartContainer.d.ts +1 -1
- package/lib/Cloudflare/Containers/StartContainer.d.ts.map +1 -1
- package/lib/Cloudflare/Credentials.d.ts +6 -20
- package/lib/Cloudflare/Credentials.d.ts.map +1 -1
- package/lib/Cloudflare/Credentials.js +12 -54
- package/lib/Cloudflare/Credentials.js.map +1 -1
- package/lib/Cloudflare/D1/CloneDatabase.d.ts +1 -1
- package/lib/Cloudflare/D1/CloneDatabase.d.ts.map +1 -1
- package/lib/Cloudflare/D1/Database.js +3 -3
- package/lib/Cloudflare/D1/Database.js.map +1 -1
- package/lib/Cloudflare/D1/ImportDatabase.d.ts +1 -1
- package/lib/Cloudflare/D1/ImportDatabase.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/ReadDnsLocal.d.ts +1 -1
- package/lib/Cloudflare/DNS/ReadDnsLocal.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/ReadWriteDnsLocal.d.ts +1 -1
- package/lib/Cloudflare/DNS/ReadWriteDnsLocal.d.ts.map +1 -1
- package/lib/Cloudflare/DNS/WriteDnsLocal.d.ts +1 -1
- package/lib/Cloudflare/DNS/WriteDnsLocal.d.ts.map +1 -1
- package/lib/Cloudflare/EdgeSession.d.ts +1 -1
- package/lib/Cloudflare/EdgeSession.d.ts.map +1 -1
- package/lib/Cloudflare/EdgeSession.js +1 -1
- package/lib/Cloudflare/EdgeSession.js.map +1 -1
- package/lib/Cloudflare/Fetcher.d.ts.map +1 -1
- package/lib/Cloudflare/Fetcher.js +58 -116
- package/lib/Cloudflare/Fetcher.js.map +1 -1
- package/lib/Cloudflare/Flagship/Flag.d.ts +8 -1
- package/lib/Cloudflare/Flagship/Flag.d.ts.map +1 -1
- package/lib/Cloudflare/Flagship/Flag.js.map +1 -1
- package/lib/Cloudflare/HostnameTlsSetting/HostnameTlsSetting.d.ts.map +1 -1
- package/lib/Cloudflare/HostnameTlsSetting/HostnameTlsSetting.js +10 -24
- package/lib/Cloudflare/HostnameTlsSetting/HostnameTlsSetting.js.map +1 -1
- package/lib/Cloudflare/Hyperdrive/Connection.d.ts +1 -1
- package/lib/Cloudflare/Hyperdrive/Connection.d.ts.map +1 -1
- package/lib/Cloudflare/Hyperdrive/Connection.js +10 -7
- package/lib/Cloudflare/Hyperdrive/Connection.js.map +1 -1
- package/lib/Cloudflare/KV/ReadNamespaceHttp.d.ts +1 -1
- package/lib/Cloudflare/KV/ReadNamespaceLocal.d.ts +1 -1
- package/lib/Cloudflare/KV/ReadNamespaceLocal.d.ts.map +1 -1
- package/lib/Cloudflare/KV/ReadWriteNamespaceHttp.d.ts +1 -1
- package/lib/Cloudflare/KV/ReadWriteNamespaceLocal.d.ts +1 -1
- package/lib/Cloudflare/KV/ReadWriteNamespaceLocal.d.ts.map +1 -1
- package/lib/Cloudflare/KV/WriteNamespaceHttp.d.ts +1 -1
- package/lib/Cloudflare/KV/WriteNamespaceLocal.d.ts +1 -1
- package/lib/Cloudflare/KV/WriteNamespaceLocal.d.ts.map +1 -1
- package/lib/Cloudflare/LoadBalancer/LoadBalancer.js +1 -1
- package/lib/Cloudflare/LoadBalancer/LoadBalancer.js.map +1 -1
- package/lib/Cloudflare/LoadBalancer/Monitor.js.map +1 -1
- package/lib/Cloudflare/Local.d.ts +8 -1
- package/lib/Cloudflare/Local.d.ts.map +1 -1
- package/lib/Cloudflare/Local.js +6 -2
- package/lib/Cloudflare/Local.js.map +1 -1
- package/lib/Cloudflare/LocalGateway.d.ts +1 -1
- package/lib/Cloudflare/LocalGateway.d.ts.map +1 -1
- package/lib/Cloudflare/LocalRuntime.d.ts +7 -2
- package/lib/Cloudflare/LocalRuntime.d.ts.map +1 -1
- package/lib/Cloudflare/LocalRuntime.js +8 -2
- package/lib/Cloudflare/LocalRuntime.js.map +1 -1
- package/lib/Cloudflare/Logs.d.ts.map +1 -1
- package/lib/Cloudflare/Logs.js +18 -13
- package/lib/Cloudflare/Logs.js.map +1 -1
- package/lib/Cloudflare/MagicTransit/IpsecTunnel.d.ts +1 -1
- package/lib/Cloudflare/MagicTransit/IpsecTunnel.js +1 -1
- package/lib/Cloudflare/MtlsCertificate/MtlsCertificate.d.ts +1 -1
- package/lib/Cloudflare/MtlsCertificate/MtlsCertificate.js +1 -1
- package/lib/Cloudflare/Organization/Organization.js +1 -1
- package/lib/Cloudflare/Organization/Organization.js.map +1 -1
- package/lib/Cloudflare/OriginTlsClientAuth/Certificate.d.ts +2 -2
- package/lib/Cloudflare/OriginTlsClientAuth/Certificate.js +2 -2
- package/lib/Cloudflare/OriginTlsClientAuth/HostnameAssociation.d.ts +1 -1
- package/lib/Cloudflare/OriginTlsClientAuth/HostnameAssociation.js +1 -1
- package/lib/Cloudflare/OriginTlsClientAuth/HostnameCertificate.d.ts +2 -2
- package/lib/Cloudflare/OriginTlsClientAuth/HostnameCertificate.js +2 -2
- package/lib/Cloudflare/OriginTlsClientAuth/Setting.d.ts +1 -1
- package/lib/Cloudflare/OriginTlsClientAuth/Setting.js +1 -1
- package/lib/Cloudflare/Pages/Project.d.ts +1 -1
- package/lib/Cloudflare/Pages/Project.js +1 -1
- package/lib/Cloudflare/Pipelines/LegacyPipeline.d.ts +2 -2
- package/lib/Cloudflare/Pipelines/LegacyPipeline.js +2 -2
- package/lib/Cloudflare/Pipelines/Sink.d.ts +3 -3
- package/lib/Cloudflare/Pipelines/Sink.js +3 -3
- package/lib/Cloudflare/Providers.d.ts +12 -18
- package/lib/Cloudflare/Providers.d.ts.map +1 -1
- package/lib/Cloudflare/Providers.js +15 -21
- package/lib/Cloudflare/Providers.js.map +1 -1
- package/lib/Cloudflare/Queues/Consumer.js +2 -2
- package/lib/Cloudflare/Queues/Consumer.js.map +1 -1
- package/lib/Cloudflare/Queues/Queue.js +2 -2
- package/lib/Cloudflare/Queues/Queue.js.map +1 -1
- package/lib/Cloudflare/Queues/WriteQueueHttp.d.ts +1 -1
- package/lib/Cloudflare/R2/Bucket.d.ts.map +1 -1
- package/lib/Cloudflare/R2/Bucket.js +15 -2
- package/lib/Cloudflare/R2/Bucket.js.map +1 -1
- package/lib/Cloudflare/R2/BucketBinding.d.ts.map +1 -1
- package/lib/Cloudflare/R2/BucketBinding.js +1 -0
- package/lib/Cloudflare/R2/BucketBinding.js.map +1 -1
- package/lib/Cloudflare/R2/BucketSippy.d.ts +7 -7
- package/lib/Cloudflare/R2/BucketSippy.js +7 -7
- package/lib/Cloudflare/R2/BucketTypes.d.ts +8 -0
- package/lib/Cloudflare/R2/BucketTypes.d.ts.map +1 -1
- package/lib/Cloudflare/R2/BucketTypes.js.map +1 -1
- package/lib/Cloudflare/R2/ReadBucketHttp.d.ts +1 -1
- package/lib/Cloudflare/R2/ReadBucketLocal.d.ts +1 -1
- package/lib/Cloudflare/R2/ReadBucketLocal.d.ts.map +1 -1
- package/lib/Cloudflare/R2/ReadWriteBucketHttp.d.ts +1 -1
- package/lib/Cloudflare/R2/ReadWriteBucketLocal.d.ts +1 -1
- package/lib/Cloudflare/R2/ReadWriteBucketLocal.d.ts.map +1 -1
- package/lib/Cloudflare/R2/WriteBucketBinding.d.ts.map +1 -1
- package/lib/Cloudflare/R2/WriteBucketBinding.js +9 -6
- package/lib/Cloudflare/R2/WriteBucketBinding.js.map +1 -1
- package/lib/Cloudflare/R2/WriteBucketHttp.d.ts +1 -1
- package/lib/Cloudflare/R2/WriteBucketLocal.d.ts +1 -1
- package/lib/Cloudflare/R2/WriteBucketLocal.d.ts.map +1 -1
- package/lib/Cloudflare/R2/index.d.ts +1 -0
- package/lib/Cloudflare/R2/index.d.ts.map +1 -1
- package/lib/Cloudflare/R2/index.js +1 -0
- package/lib/Cloudflare/R2/index.js.map +1 -1
- package/lib/Cloudflare/SecretsStore/Secret.js +3 -3
- package/lib/Cloudflare/SecretsStore/Secret.js.map +1 -1
- package/lib/Cloudflare/Snippets/SnippetRules.d.ts.map +1 -1
- package/lib/Cloudflare/Snippets/SnippetRules.js +5 -3
- package/lib/Cloudflare/Snippets/SnippetRules.js.map +1 -1
- package/lib/Cloudflare/StateStore/Api.d.ts +18 -0
- package/lib/Cloudflare/StateStore/Api.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/Api.js +2 -2
- package/lib/Cloudflare/StateStore/Api.js.map +1 -1
- package/lib/Cloudflare/StateStore/CredentialsFile.d.ts +10 -6
- package/lib/Cloudflare/StateStore/CredentialsFile.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/CredentialsFile.js +23 -1
- package/lib/Cloudflare/StateStore/CredentialsFile.js.map +1 -1
- package/lib/Cloudflare/StateStore/State.d.ts +11 -9
- package/lib/Cloudflare/StateStore/State.d.ts.map +1 -1
- package/lib/Cloudflare/StateStore/State.js +138 -113
- package/lib/Cloudflare/StateStore/State.js.map +1 -1
- package/lib/Cloudflare/Tunnel/ReadTunnelBinding.d.ts +1 -1
- package/lib/Cloudflare/Tunnel/ReadTunnelBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/ReadTunnelLocal.d.ts +1 -1
- package/lib/Cloudflare/Tunnel/ReadTunnelLocal.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/ReadWriteTunnelBinding.d.ts +1 -1
- package/lib/Cloudflare/Tunnel/ReadWriteTunnelBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/ReadWriteTunnelLocal.d.ts +1 -1
- package/lib/Cloudflare/Tunnel/ReadWriteTunnelLocal.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/WriteTunnelBinding.d.ts +1 -1
- package/lib/Cloudflare/Tunnel/WriteTunnelBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Tunnel/WriteTunnelLocal.d.ts +1 -1
- package/lib/Cloudflare/Tunnel/WriteTunnelLocal.d.ts.map +1 -1
- package/lib/Cloudflare/Vectorize/SearchIndexHttpClient.js +1 -1
- package/lib/Cloudflare/Vectorize/SearchIndexHttpClient.js.map +1 -1
- package/lib/Cloudflare/Website/Nextjs.d.ts.map +1 -1
- package/lib/Cloudflare/Website/Nextjs.js +4 -12
- package/lib/Cloudflare/Website/Nextjs.js.map +1 -1
- package/lib/Cloudflare/Website/Nuxt.d.ts +1 -1
- package/lib/Cloudflare/Website/Nuxt.js +1 -1
- package/lib/Cloudflare/Website/Octane.d.ts +1 -1
- package/lib/Cloudflare/Website/Octane.js +1 -1
- package/lib/Cloudflare/Website/SvelteKit.d.ts +1 -1
- package/lib/Cloudflare/Website/SvelteKit.js +1 -1
- package/lib/Cloudflare/Website/Vocs.d.ts +1 -1
- package/lib/Cloudflare/Website/Vocs.d.ts.map +1 -1
- package/lib/Cloudflare/Website/Vocs.js +3 -7
- package/lib/Cloudflare/Website/Vocs.js.map +1 -1
- package/lib/Cloudflare/Workers/AIBinding.d.ts +1 -1
- package/lib/Cloudflare/Workers/AIBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Assets.d.ts +2 -2
- package/lib/Cloudflare/Workers/Assets.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Assets.js +74 -26
- package/lib/Cloudflare/Workers/Assets.js.map +1 -1
- package/lib/Cloudflare/Workers/BrowserBinding.d.ts +1 -1
- package/lib/Cloudflare/Workers/BrowserBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/BrowserHttpClient.d.ts +2 -2
- package/lib/Cloudflare/Workers/BrowserHttpClient.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/BrowserHttpClient.js +10 -3
- package/lib/Cloudflare/Workers/BrowserHttpClient.js.map +1 -1
- package/lib/Cloudflare/Workers/CloudflareTracer.d.ts +9 -0
- package/lib/Cloudflare/Workers/CloudflareTracer.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/CloudflareTracer.js +87 -0
- package/lib/Cloudflare/Workers/CloudflareTracer.js.map +1 -0
- package/lib/Cloudflare/Workers/Compatibility.d.ts +13 -0
- package/lib/Cloudflare/Workers/Compatibility.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Compatibility.js +31 -6
- package/lib/Cloudflare/Workers/Compatibility.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObject.d.ts +72 -7
- package/lib/Cloudflare/Workers/DurableObject.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObject.js +48 -7
- package/lib/Cloudflare/Workers/DurableObject.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectBridge.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectBridge.js +5 -1
- package/lib/Cloudflare/Workers/DurableObjectBridge.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectState.d.ts +25 -2
- package/lib/Cloudflare/Workers/DurableObjectState.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectState.js +7 -2
- package/lib/Cloudflare/Workers/DurableObjectState.js.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectStorage.d.ts +7 -1
- package/lib/Cloudflare/Workers/DurableObjectStorage.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/DurableObjectStorage.js +27 -22
- package/lib/Cloudflare/Workers/DurableObjectStorage.js.map +1 -1
- package/lib/Cloudflare/Workers/HttpServer.d.ts +1 -1
- package/lib/Cloudflare/Workers/HttpServer.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/HttpServer.js +1 -1
- package/lib/Cloudflare/Workers/HttpServer.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 +155 -68
- package/lib/Cloudflare/Workers/LocalWorkerProvider.js.map +1 -1
- package/lib/Cloudflare/Workers/RateLimitBinding.d.ts +1 -1
- package/lib/Cloudflare/Workers/RateLimitBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Rpc.d.ts +9 -1
- package/lib/Cloudflare/Workers/Rpc.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Rpc.js +4 -3
- package/lib/Cloudflare/Workers/Rpc.js.map +1 -1
- package/lib/Cloudflare/Workers/RpcAsync.js +1 -1
- package/lib/Cloudflare/Workers/RpcAsync.js.map +1 -1
- package/lib/Cloudflare/Workers/RpcWorker.d.ts +12 -5
- package/lib/Cloudflare/Workers/RpcWorker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/RpcWorker.js +8 -2
- package/lib/Cloudflare/Workers/RpcWorker.js.map +1 -1
- package/lib/Cloudflare/Workers/SecretKeyBinding.d.ts +1 -1
- package/lib/Cloudflare/Workers/SecretKeyBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Source.d.ts +3 -0
- package/lib/Cloudflare/Workers/Source.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Source.js +3 -1
- package/lib/Cloudflare/Workers/Source.js.map +1 -1
- package/lib/Cloudflare/Workers/Sources/Prebuilt.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Sources/Prebuilt.js +3 -2
- package/lib/Cloudflare/Workers/Sources/Prebuilt.js.map +1 -1
- package/lib/Cloudflare/Workers/Sources/Python.d.ts +2 -0
- package/lib/Cloudflare/Workers/Sources/Python.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Sources/Python.js +19 -14
- package/lib/Cloudflare/Workers/Sources/Python.js.map +1 -1
- package/lib/Cloudflare/Workers/Sources/Rolldown.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Sources/Rolldown.js +25 -10
- package/lib/Cloudflare/Workers/Sources/Rolldown.js.map +1 -1
- package/lib/Cloudflare/Workers/Sources/Vite.d.ts +1 -1
- package/lib/Cloudflare/Workers/Sources/Vite.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Sources/Vite.js +6 -4
- package/lib/Cloudflare/Workers/Sources/Vite.js.map +1 -1
- package/lib/Cloudflare/Workers/Sources/WorkerModulePlugin.d.ts +23 -0
- package/lib/Cloudflare/Workers/Sources/WorkerModulePlugin.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/Sources/WorkerModulePlugin.js +52 -0
- package/lib/Cloudflare/Workers/Sources/WorkerModulePlugin.js.map +1 -0
- package/lib/Cloudflare/Workers/Telemetry.d.ts +113 -0
- package/lib/Cloudflare/Workers/Telemetry.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/Telemetry.js +129 -0
- package/lib/Cloudflare/Workers/Telemetry.js.map +1 -0
- package/lib/Cloudflare/Workers/VersionMetadataBinding.d.ts +1 -1
- package/lib/Cloudflare/Workers/VersionMetadataBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/ViteBuildChildRunner.js +6 -1
- package/lib/Cloudflare/Workers/ViteBuildChildRunner.js.map +1 -1
- package/lib/Cloudflare/Workers/ViteChild.d.ts +2 -2
- package/lib/Cloudflare/Workers/ViteChild.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/ViteChild.js +21 -18
- package/lib/Cloudflare/Workers/ViteChild.js.map +1 -1
- package/lib/Cloudflare/Workers/ViteChild.shared.d.ts +2 -0
- package/lib/Cloudflare/Workers/ViteChild.shared.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/ViteChild.shared.js.map +1 -1
- package/lib/Cloudflare/Workers/ViteChildRunner.js +2 -1
- package/lib/Cloudflare/Workers/ViteChildRunner.js.map +1 -1
- package/lib/Cloudflare/Workers/Worker.d.ts +269 -150
- package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/Worker.js +137 -147
- package/lib/Cloudflare/Workers/Worker.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts +9 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js +23 -0
- package/lib/Cloudflare/Workers/WorkerAsyncBindings.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts +37 -1
- package/lib/Cloudflare/Workers/WorkerBinding.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerBridge.js +5 -5
- package/lib/Cloudflare/Workers/WorkerBridge.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerEntrypoint.d.ts +42 -13
- package/lib/Cloudflare/Workers/WorkerEntrypoint.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerEntrypoint.js +36 -10
- package/lib/Cloudflare/Workers/WorkerEntrypoint.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerLoader.d.ts +30 -4
- package/lib/Cloudflare/Workers/WorkerLoader.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerLoader.js +36 -5
- package/lib/Cloudflare/Workers/WorkerLoader.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerProvider.d.ts +20 -0
- package/lib/Cloudflare/Workers/WorkerProvider.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerProvider.js +486 -72
- package/lib/Cloudflare/Workers/WorkerProvider.js.map +1 -1
- package/lib/Cloudflare/Workers/WorkerRuntime.d.ts +82 -0
- package/lib/Cloudflare/Workers/WorkerRuntime.d.ts.map +1 -0
- package/lib/Cloudflare/Workers/WorkerRuntime.js +77 -0
- package/lib/Cloudflare/Workers/WorkerRuntime.js.map +1 -0
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.js +9 -6
- package/lib/Cloudflare/Workers/WorkerRuntimeContext.js.map +1 -1
- package/lib/Cloudflare/Workers/cloudflare_workers.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/cloudflare_workers.js +4 -1
- package/lib/Cloudflare/Workers/cloudflare_workers.js.map +1 -1
- package/lib/Cloudflare/Workers/index.d.ts +1 -0
- package/lib/Cloudflare/Workers/index.d.ts.map +1 -1
- package/lib/Cloudflare/Workers/index.js +1 -0
- package/lib/Cloudflare/Workers/index.js.map +1 -1
- package/lib/Cloudflare/Workflows/Workflow.d.ts +79 -31
- package/lib/Cloudflare/Workflows/Workflow.d.ts.map +1 -1
- package/lib/Cloudflare/Workflows/Workflow.js +49 -21
- package/lib/Cloudflare/Workflows/Workflow.js.map +1 -1
- package/lib/Cloudflare/Workflows/WorkflowBridge.d.ts +2 -1
- package/lib/Cloudflare/Workflows/WorkflowBridge.d.ts.map +1 -1
- package/lib/Cloudflare/Workflows/WorkflowBridge.js +9 -6
- package/lib/Cloudflare/Workflows/WorkflowBridge.js.map +1 -1
- package/lib/Cloudflare/Workflows/WorkflowRuntime.d.ts +42 -0
- package/lib/Cloudflare/Workflows/WorkflowRuntime.d.ts.map +1 -0
- package/lib/Cloudflare/Workflows/WorkflowRuntime.js +20 -0
- package/lib/Cloudflare/Workflows/WorkflowRuntime.js.map +1 -0
- package/lib/Cloudflare/index.d.ts.map +1 -1
- package/lib/Cloudflare/index.js +3 -1
- package/lib/Cloudflare/index.js.map +1 -1
- package/lib/Command/Command.d.ts +1 -1
- package/lib/Command/Command.d.ts.map +1 -1
- package/lib/Command/Command.js +2 -2
- package/lib/Command/Command.js.map +1 -1
- package/lib/Command/Dev.d.ts +5 -2
- package/lib/Command/Dev.d.ts.map +1 -1
- package/lib/Command/Dev.js +33 -8
- package/lib/Command/Dev.js.map +1 -1
- package/lib/Command/Local.d.ts +7 -1
- package/lib/Command/Local.d.ts.map +1 -1
- package/lib/Command/Local.js +5 -2
- package/lib/Command/Local.js.map +1 -1
- package/lib/Command/Memo.d.ts.map +1 -1
- package/lib/Command/Memo.js +6 -7
- package/lib/Command/Memo.js.map +1 -1
- package/lib/Command/Providers.d.ts +1 -1
- package/lib/Command/Providers.d.ts.map +1 -1
- package/lib/Deploy.d.ts +1 -1
- package/lib/Deploy.d.ts.map +1 -1
- package/lib/Destroy.d.ts +1 -1
- package/lib/Destroy.d.ts.map +1 -1
- package/lib/Docker/BuildHash.d.ts +13 -0
- package/lib/Docker/BuildHash.d.ts.map +1 -1
- package/lib/Docker/BuildHash.js +53 -3
- package/lib/Docker/BuildHash.js.map +1 -1
- package/lib/Docker/Container.d.ts +1 -1
- package/lib/Docker/Container.js +1 -1
- package/lib/Docker/Docker.d.ts +20 -8
- package/lib/Docker/Docker.d.ts.map +1 -1
- package/lib/Docker/Docker.js +132 -54
- package/lib/Docker/Docker.js.map +1 -1
- package/lib/Docker/Image.d.ts +1 -1
- package/lib/Docker/Image.js +1 -1
- package/lib/Docker/Registry.d.ts +1 -1
- package/lib/Docker/RegistryError.d.ts +21 -0
- package/lib/Docker/RegistryError.d.ts.map +1 -0
- package/lib/Docker/RegistryError.js +28 -0
- package/lib/Docker/RegistryError.js.map +1 -0
- package/lib/Docker/RemoteImage.d.ts +1 -1
- package/lib/Docker/RemoteImage.js +1 -1
- package/lib/Docker/Service.d.ts +7 -21
- package/lib/Docker/Service.d.ts.map +1 -1
- package/lib/Docker/Service.js +7 -21
- package/lib/Docker/Service.js.map +1 -1
- package/lib/Docker/ServiceImage.d.ts +5 -6
- package/lib/Docker/ServiceImage.d.ts.map +1 -1
- package/lib/Docker/ServiceImage.js.map +1 -1
- package/lib/Docker/index.d.ts +1 -0
- package/lib/Docker/index.d.ts.map +1 -1
- package/lib/Docker/index.js +1 -0
- package/lib/Docker/index.js.map +1 -1
- package/lib/Drift.d.ts +91 -0
- package/lib/Drift.d.ts.map +1 -0
- package/lib/{Sync.js → Drift.js} +98 -29
- package/lib/Drift.js.map +1 -0
- package/lib/Drizzle/Postgres.d.ts.map +1 -1
- package/lib/Drizzle/Postgres.js +3 -1
- package/lib/Drizzle/Postgres.js.map +1 -1
- package/lib/Drizzle/Schema.d.ts.map +1 -1
- package/lib/Drizzle/Schema.js +5 -5
- package/lib/Drizzle/Schema.js.map +1 -1
- package/lib/Fly/App.d.ts +1 -1
- package/lib/Fly/App.d.ts.map +1 -1
- package/lib/Fly/AuthProvider.d.ts +6 -20
- package/lib/Fly/AuthProvider.d.ts.map +1 -1
- package/lib/Fly/AuthProvider.js +32 -124
- package/lib/Fly/AuthProvider.js.map +1 -1
- package/lib/Fly/Bucket.d.ts +1 -1
- package/lib/Fly/Bucket.d.ts.map +1 -1
- package/lib/Fly/BucketBinding.js +5 -5
- package/lib/Fly/Catalog.d.ts +1 -1
- package/lib/Fly/Catalog.d.ts.map +1 -1
- package/lib/Fly/CheckpointHttp.d.ts.map +1 -1
- package/lib/Fly/CheckpointHttp.js +2 -2
- package/lib/Fly/CheckpointHttp.js.map +1 -1
- package/lib/Fly/Credentials.d.ts +15 -6
- package/lib/Fly/Credentials.d.ts.map +1 -1
- package/lib/Fly/Credentials.js +25 -13
- package/lib/Fly/Credentials.js.map +1 -1
- package/lib/Fly/DecryptHttp.d.ts.map +1 -1
- package/lib/Fly/DecryptHttp.js +2 -2
- package/lib/Fly/DecryptHttp.js.map +1 -1
- package/lib/Fly/EncryptHttp.d.ts.map +1 -1
- package/lib/Fly/EncryptHttp.js +2 -2
- package/lib/Fly/EncryptHttp.js.map +1 -1
- package/lib/Fly/Environment.d.ts +1 -1
- package/lib/Fly/Environment.d.ts.map +1 -1
- package/lib/Fly/ExecHttp.d.ts.map +1 -1
- package/lib/Fly/ExecHttp.js +2 -2
- package/lib/Fly/ExecHttp.js.map +1 -1
- package/lib/Fly/GetSecretHttp.d.ts.map +1 -1
- package/lib/Fly/GetSecretHttp.js +3 -3
- package/lib/Fly/GetSecretHttp.js.map +1 -1
- package/lib/Fly/ListSecretsHttp.d.ts.map +1 -1
- package/lib/Fly/ListSecretsHttp.js +2 -2
- package/lib/Fly/ListSecretsHttp.js.map +1 -1
- package/lib/Fly/Machine.d.ts +65 -0
- package/lib/Fly/Machine.d.ts.map +1 -1
- package/lib/Fly/Machine.js +34 -19
- package/lib/Fly/Machine.js.map +1 -1
- package/lib/Fly/Postgres.d.ts +1 -1
- package/lib/Fly/Postgres.d.ts.map +1 -1
- package/lib/Fly/Providers.d.ts +1 -1
- package/lib/Fly/Providers.d.ts.map +1 -1
- package/lib/Fly/Providers.js +2 -2
- package/lib/Fly/Providers.js.map +1 -1
- package/lib/Fly/Redis.d.ts +1 -1
- package/lib/Fly/Redis.d.ts.map +1 -1
- package/lib/Fly/RedisBinding.js +2 -2
- package/lib/Fly/Secret.d.ts +4 -4
- package/lib/Fly/Secret.js +4 -4
- package/lib/Fly/SecretHttp.js +1 -1
- package/lib/Fly/Service.d.ts +46 -3
- package/lib/Fly/Service.d.ts.map +1 -1
- package/lib/Fly/Service.js +47 -22
- package/lib/Fly/Service.js.map +1 -1
- package/lib/Fly/SignHttp.d.ts.map +1 -1
- package/lib/Fly/SignHttp.js +2 -2
- package/lib/Fly/SignHttp.js.map +1 -1
- package/lib/Fly/Sprite.d.ts +2 -2
- package/lib/Fly/Sprite.js +2 -2
- package/lib/Fly/VerifyHttp.d.ts.map +1 -1
- package/lib/Fly/VerifyHttp.js +2 -2
- package/lib/Fly/VerifyHttp.js.map +1 -1
- package/lib/Fly/Volume.d.ts +8 -8
- package/lib/Fly/Volume.d.ts.map +1 -1
- package/lib/Fly/Website/AssetDeployment.d.ts.map +1 -1
- package/lib/Fly/Website/AssetDeployment.js +1 -1
- package/lib/Fly/Website/AssetDeployment.js.map +1 -1
- package/lib/Fly/WriteSecretHttp.d.ts.map +1 -1
- package/lib/Fly/WriteSecretHttp.js +2 -2
- package/lib/Fly/WriteSecretHttp.js.map +1 -1
- package/lib/Fly/replicas.d.ts +12 -10
- package/lib/Fly/replicas.d.ts.map +1 -1
- package/lib/Fly/replicas.js +74 -9
- package/lib/Fly/replicas.js.map +1 -1
- package/lib/Git/Api/GitHub.d.ts +38 -0
- package/lib/Git/Api/GitHub.d.ts.map +1 -0
- package/lib/Git/Api/GitHub.js +38 -0
- package/lib/Git/Api/GitHub.js.map +1 -0
- package/lib/Git/Api/Internal.d.ts +27 -0
- package/lib/Git/Api/Internal.d.ts.map +1 -0
- package/lib/Git/Api/Internal.js +27 -0
- package/lib/Git/Api/Internal.js.map +1 -0
- package/lib/Git/Api/Objects.d.ts +140 -0
- package/lib/Git/Api/Objects.d.ts.map +1 -0
- package/lib/Git/Api/Objects.js +100 -0
- package/lib/Git/Api/Objects.js.map +1 -0
- package/lib/Git/Api/Protocol.d.ts +41 -0
- package/lib/Git/Api/Protocol.d.ts.map +1 -0
- package/lib/Git/Api/Protocol.js +23 -0
- package/lib/Git/Api/Protocol.js.map +1 -0
- package/lib/Git/Api/Pulls.d.ts +157 -0
- package/lib/Git/Api/Pulls.d.ts.map +1 -0
- package/lib/Git/Api/Pulls.js +109 -0
- package/lib/Git/Api/Pulls.js.map +1 -0
- package/lib/Git/Api/Refs.d.ts +95 -0
- package/lib/Git/Api/Refs.d.ts.map +1 -0
- package/lib/Git/Api/Refs.js +70 -0
- package/lib/Git/Api/Refs.js.map +1 -0
- package/lib/Git/Api/Repos.d.ts +168 -0
- package/lib/Git/Api/Repos.d.ts.map +1 -0
- package/lib/Git/Api/Repos.js +123 -0
- package/lib/Git/Api/Repos.js.map +1 -0
- package/lib/Git/Api/Schema.d.ts +511 -0
- package/lib/Git/Api/Schema.d.ts.map +1 -0
- package/lib/Git/Api/Schema.js +443 -0
- package/lib/Git/Api/Schema.js.map +1 -0
- package/lib/Git/Api.d.ts +65 -0
- package/lib/Git/Api.d.ts.map +1 -0
- package/lib/Git/Api.js +54 -0
- package/lib/Git/Api.js.map +1 -0
- package/lib/Git/BlobStore.d.ts +129 -0
- package/lib/Git/BlobStore.d.ts.map +1 -0
- package/lib/Git/BlobStore.js +118 -0
- package/lib/Git/BlobStore.js.map +1 -0
- package/lib/Git/BlobStoreS3.d.ts +13 -0
- package/lib/Git/BlobStoreS3.d.ts.map +1 -0
- package/lib/Git/BlobStoreS3.js +184 -0
- package/lib/Git/BlobStoreS3.js.map +1 -0
- package/lib/Git/Engine.d.ts +127 -0
- package/lib/Git/Engine.d.ts.map +1 -0
- package/lib/Git/Engine.js +290 -0
- package/lib/Git/Engine.js.map +1 -0
- package/lib/Git/GitHubCompat.d.ts +155 -0
- package/lib/Git/GitHubCompat.d.ts.map +1 -0
- package/lib/Git/GitHubCompat.js +444 -0
- package/lib/Git/GitHubCompat.js.map +1 -0
- package/lib/Git/Hasher/Hasher.d.ts +129 -0
- package/lib/Git/Hasher/Hasher.d.ts.map +1 -0
- package/lib/Git/Hasher/Hasher.js +170 -0
- package/lib/Git/Hasher/Hasher.js.map +1 -0
- package/lib/Git/Hasher/Lambda.d.ts +18 -0
- package/lib/Git/Hasher/Lambda.d.ts.map +1 -0
- package/lib/Git/Hasher/Lambda.js +81 -0
- package/lib/Git/Hasher/Lambda.js.map +1 -0
- package/lib/Git/Hasher/LambdaEvent.d.ts +45 -0
- package/lib/Git/Hasher/LambdaEvent.d.ts.map +1 -0
- package/lib/Git/Hasher/LambdaEvent.js +99 -0
- package/lib/Git/Hasher/LambdaEvent.js.map +1 -0
- package/lib/Git/Hasher/LambdaFunction.d.ts +7 -0
- package/lib/Git/Hasher/LambdaFunction.d.ts.map +1 -0
- package/lib/Git/Hasher/LambdaFunction.js +41 -0
- package/lib/Git/Hasher/LambdaFunction.js.map +1 -0
- package/lib/Git/Hasher/Protocol.d.ts +46 -0
- package/lib/Git/Hasher/Protocol.d.ts.map +1 -0
- package/lib/Git/Hasher/Protocol.js +235 -0
- package/lib/Git/Hasher/Protocol.js.map +1 -0
- package/lib/Git/Hasher/WorkerLoader.d.ts +17 -0
- package/lib/Git/Hasher/WorkerLoader.d.ts.map +1 -0
- package/lib/Git/Hasher/WorkerLoader.js +90 -0
- package/lib/Git/Hasher/WorkerLoader.js.map +1 -0
- package/lib/Git/Hasher/WorkerLoaderModule.d.ts +5 -0
- package/lib/Git/Hasher/WorkerLoaderModule.d.ts.map +1 -0
- package/lib/Git/Hasher/WorkerLoaderModule.js +47 -0
- package/lib/Git/Hasher/WorkerLoaderModule.js.map +1 -0
- package/lib/Git/Hasher/index.d.ts +16 -0
- package/lib/Git/Hasher/index.d.ts.map +1 -0
- package/lib/Git/Hasher/index.js +16 -0
- package/lib/Git/Hasher/index.js.map +1 -0
- package/lib/Git/Http/ReceivePack.d.ts +38 -0
- package/lib/Git/Http/ReceivePack.d.ts.map +1 -0
- package/lib/Git/Http/ReceivePack.js +94 -0
- package/lib/Git/Http/ReceivePack.js.map +1 -0
- package/lib/Git/Http.d.ts +5 -0
- package/lib/Git/Http.d.ts.map +1 -0
- package/lib/Git/Http.js +5 -0
- package/lib/Git/Http.js.map +1 -0
- package/lib/Git/Jobs/Bundle.d.ts +139 -0
- package/lib/Git/Jobs/Bundle.d.ts.map +1 -0
- package/lib/Git/Jobs/Bundle.js +160 -0
- package/lib/Git/Jobs/Bundle.js.map +1 -0
- package/lib/Git/Jobs/Compact.d.ts +145 -0
- package/lib/Git/Jobs/Compact.d.ts.map +1 -0
- package/lib/Git/Jobs/Compact.js +331 -0
- package/lib/Git/Jobs/Compact.js.map +1 -0
- package/lib/Git/Jobs/Fork.d.ts +116 -0
- package/lib/Git/Jobs/Fork.d.ts.map +1 -0
- package/lib/Git/Jobs/Fork.js +173 -0
- package/lib/Git/Jobs/Fork.js.map +1 -0
- package/lib/Git/Jobs/Import.d.ts +144 -0
- package/lib/Git/Jobs/Import.d.ts.map +1 -0
- package/lib/Git/Jobs/Import.js +291 -0
- package/lib/Git/Jobs/Import.js.map +1 -0
- package/lib/Git/Jobs/Purge.d.ts +62 -0
- package/lib/Git/Jobs/Purge.d.ts.map +1 -0
- package/lib/Git/Jobs/Purge.js +55 -0
- package/lib/Git/Jobs/Purge.js.map +1 -0
- package/lib/Git/Operations.d.ts +136 -0
- package/lib/Git/Operations.d.ts.map +1 -0
- package/lib/Git/Operations.js +684 -0
- package/lib/Git/Operations.js.map +1 -0
- package/lib/Git/Protocol/Advertise.d.ts +50 -0
- package/lib/Git/Protocol/Advertise.d.ts.map +1 -0
- package/lib/Git/Protocol/Advertise.js +116 -0
- package/lib/Git/Protocol/Advertise.js.map +1 -0
- package/lib/Git/Protocol/Delta.d.ts +60 -0
- package/lib/Git/Protocol/Delta.d.ts.map +1 -0
- package/lib/Git/Protocol/Delta.js +147 -0
- package/lib/Git/Protocol/Delta.js.map +1 -0
- package/lib/Git/Protocol/GzipBody.d.ts +65 -0
- package/lib/Git/Protocol/GzipBody.d.ts.map +1 -0
- package/lib/Git/Protocol/GzipBody.js +108 -0
- package/lib/Git/Protocol/GzipBody.js.map +1 -0
- package/lib/Git/Protocol/ObjectCodec.d.ts +346 -0
- package/lib/Git/Protocol/ObjectCodec.d.ts.map +1 -0
- package/lib/Git/Protocol/ObjectCodec.js +685 -0
- package/lib/Git/Protocol/ObjectCodec.js.map +1 -0
- package/lib/Git/Protocol/PackParser.d.ts +231 -0
- package/lib/Git/Protocol/PackParser.d.ts.map +1 -0
- package/lib/Git/Protocol/PackParser.js +636 -0
- package/lib/Git/Protocol/PackParser.js.map +1 -0
- package/lib/Git/Protocol/PackWriter.d.ts +50 -0
- package/lib/Git/Protocol/PackWriter.d.ts.map +1 -0
- package/lib/Git/Protocol/PackWriter.js +82 -0
- package/lib/Git/Protocol/PackWriter.js.map +1 -0
- package/lib/Git/Protocol/PartialScan.d.ts +183 -0
- package/lib/Git/Protocol/PartialScan.d.ts.map +1 -0
- package/lib/Git/Protocol/PartialScan.js +513 -0
- package/lib/Git/Protocol/PartialScan.js.map +1 -0
- package/lib/Git/Protocol/Pkt.d.ts +107 -0
- package/lib/Git/Protocol/Pkt.d.ts.map +1 -0
- package/lib/Git/Protocol/Pkt.js +227 -0
- package/lib/Git/Protocol/Pkt.js.map +1 -0
- package/lib/Git/Protocol/ReceivePack.d.ts +190 -0
- package/lib/Git/Protocol/ReceivePack.d.ts.map +1 -0
- package/lib/Git/Protocol/ReceivePack.js +250 -0
- package/lib/Git/Protocol/ReceivePack.js.map +1 -0
- package/lib/Git/Protocol/Sideband.d.ts +97 -0
- package/lib/Git/Protocol/Sideband.d.ts.map +1 -0
- package/lib/Git/Protocol/Sideband.js +214 -0
- package/lib/Git/Protocol/Sideband.js.map +1 -0
- package/lib/Git/Protocol/Store.d.ts +160 -0
- package/lib/Git/Protocol/Store.d.ts.map +1 -0
- package/lib/Git/Protocol/Store.js +11 -0
- package/lib/Git/Protocol/Store.js.map +1 -0
- package/lib/Git/Protocol/TreeDiff.d.ts +114 -0
- package/lib/Git/Protocol/TreeDiff.d.ts.map +1 -0
- package/lib/Git/Protocol/TreeDiff.js +347 -0
- package/lib/Git/Protocol/TreeDiff.js.map +1 -0
- package/lib/Git/Protocol/UploadPack.d.ts +103 -0
- package/lib/Git/Protocol/UploadPack.d.ts.map +1 -0
- package/lib/Git/Protocol/UploadPack.js +269 -0
- package/lib/Git/Protocol/UploadPack.js.map +1 -0
- package/lib/Git/Protocol/Zlib.d.ts +75 -0
- package/lib/Git/Protocol/Zlib.d.ts.map +1 -0
- package/lib/Git/Protocol/Zlib.js +256 -0
- package/lib/Git/Protocol/Zlib.js.map +1 -0
- package/lib/Git/Push.d.ts +47 -0
- package/lib/Git/Push.d.ts.map +1 -0
- package/lib/Git/Push.js +12 -0
- package/lib/Git/Push.js.map +1 -0
- package/lib/Git/PushInput.d.ts +14 -0
- package/lib/Git/PushInput.d.ts.map +1 -0
- package/lib/Git/PushInput.js +45 -0
- package/lib/Git/PushInput.js.map +1 -0
- package/lib/Git/PushWire.d.ts +17 -0
- package/lib/Git/PushWire.d.ts.map +1 -0
- package/lib/Git/PushWire.js +49 -0
- package/lib/Git/PushWire.js.map +1 -0
- package/lib/Git/RegistryD1.d.ts +10 -0
- package/lib/Git/RegistryD1.d.ts.map +1 -0
- package/lib/Git/RegistryD1.js +188 -0
- package/lib/Git/RegistryD1.js.map +1 -0
- package/lib/Git/RegistryObject.d.ts +210 -0
- package/lib/Git/RegistryObject.d.ts.map +1 -0
- package/lib/Git/RegistryObject.js +287 -0
- package/lib/Git/RegistryObject.js.map +1 -0
- package/lib/Git/RepoObject.d.ts +804 -0
- package/lib/Git/RepoObject.d.ts.map +1 -0
- package/lib/Git/RepoObject.js +3839 -0
- package/lib/Git/RepoObject.js.map +1 -0
- package/lib/Git/Server.d.ts +215 -0
- package/lib/Git/Server.d.ts.map +1 -0
- package/lib/Git/Server.js +620 -0
- package/lib/Git/Server.js.map +1 -0
- package/lib/Git/Store/Closure.d.ts +85 -0
- package/lib/Git/Store/Closure.d.ts.map +1 -0
- package/lib/Git/Store/Closure.js +374 -0
- package/lib/Git/Store/Closure.js.map +1 -0
- package/lib/Git/Store/HeadSnapshot.d.ts +38 -0
- package/lib/Git/Store/HeadSnapshot.d.ts.map +1 -0
- package/lib/Git/Store/HeadSnapshot.js +12 -0
- package/lib/Git/Store/HeadSnapshot.js.map +1 -0
- package/lib/Git/Store/IncomingBody.d.ts +37 -0
- package/lib/Git/Store/IncomingBody.d.ts.map +1 -0
- package/lib/Git/Store/IncomingBody.js +61 -0
- package/lib/Git/Store/IncomingBody.js.map +1 -0
- package/lib/Git/Store/Keys.d.ts +105 -0
- package/lib/Git/Store/Keys.d.ts.map +1 -0
- package/lib/Git/Store/Keys.js +107 -0
- package/lib/Git/Store/Keys.js.map +1 -0
- package/lib/Git/Store/ObjectStore.d.ts +210 -0
- package/lib/Git/Store/ObjectStore.d.ts.map +1 -0
- package/lib/Git/Store/ObjectStore.js +598 -0
- package/lib/Git/Store/ObjectStore.js.map +1 -0
- package/lib/Git/Store/PackSource.d.ts +23 -0
- package/lib/Git/Store/PackSource.d.ts.map +1 -0
- package/lib/Git/Store/PackSource.js +129 -0
- package/lib/Git/Store/PackSource.js.map +1 -0
- package/lib/Git/Store/Sql.d.ts +213 -0
- package/lib/Git/Store/Sql.d.ts.map +1 -0
- package/lib/Git/Store/Sql.js +244 -0
- package/lib/Git/Store/Sql.js.map +1 -0
- package/lib/Git/Store/StreamingSource.d.ts +66 -0
- package/lib/Git/Store/StreamingSource.d.ts.map +1 -0
- package/lib/Git/Store/StreamingSource.js +274 -0
- package/lib/Git/Store/StreamingSource.js.map +1 -0
- package/lib/Git/index.d.ts +39 -0
- package/lib/Git/index.d.ts.map +1 -0
- package/lib/Git/index.js +38 -0
- package/lib/Git/index.js.map +1 -0
- package/lib/GitHub/AuthProvider.d.ts +20 -29
- package/lib/GitHub/AuthProvider.d.ts.map +1 -1
- package/lib/GitHub/AuthProvider.js +141 -75
- package/lib/GitHub/AuthProvider.js.map +1 -1
- package/lib/GitHub/BranchProtection.d.ts +309 -0
- package/lib/GitHub/BranchProtection.d.ts.map +1 -0
- package/lib/GitHub/BranchProtection.js +334 -0
- package/lib/GitHub/BranchProtection.js.map +1 -0
- package/lib/GitHub/Collaborator.d.ts +112 -0
- package/lib/GitHub/Collaborator.d.ts.map +1 -0
- package/lib/GitHub/Collaborator.js +164 -0
- package/lib/GitHub/Collaborator.js.map +1 -0
- package/lib/GitHub/Credentials.d.ts +2 -3
- package/lib/GitHub/Credentials.d.ts.map +1 -1
- package/lib/GitHub/Credentials.js +6 -10
- package/lib/GitHub/Credentials.js.map +1 -1
- package/lib/GitHub/Env.js +7 -7
- package/lib/GitHub/Issue.d.ts +168 -0
- package/lib/GitHub/Issue.d.ts.map +1 -0
- package/lib/GitHub/Issue.js +229 -0
- package/lib/GitHub/Issue.js.map +1 -0
- package/lib/GitHub/Label.d.ts +194 -0
- package/lib/GitHub/Label.d.ts.map +1 -0
- package/lib/GitHub/Label.js +260 -0
- package/lib/GitHub/Label.js.map +1 -0
- package/lib/GitHub/Milestone.d.ts +203 -0
- package/lib/GitHub/Milestone.d.ts.map +1 -0
- package/lib/GitHub/Milestone.js +261 -0
- package/lib/GitHub/Milestone.js.map +1 -0
- package/lib/GitHub/Providers.d.ts +3 -4
- package/lib/GitHub/Providers.d.ts.map +1 -1
- package/lib/GitHub/Providers.js +24 -5
- package/lib/GitHub/Providers.js.map +1 -1
- package/lib/GitHub/PullRequest.d.ts +220 -0
- package/lib/GitHub/PullRequest.d.ts.map +1 -0
- package/lib/GitHub/PullRequest.js +323 -0
- package/lib/GitHub/PullRequest.js.map +1 -0
- package/lib/GitHub/Release.d.ts +256 -0
- package/lib/GitHub/Release.d.ts.map +1 -0
- package/lib/GitHub/Release.js +315 -0
- package/lib/GitHub/Release.js.map +1 -0
- package/lib/GitHub/Ruleset.d.ts +277 -0
- package/lib/GitHub/Ruleset.d.ts.map +1 -0
- package/lib/GitHub/Ruleset.js +284 -0
- package/lib/GitHub/Ruleset.js.map +1 -0
- package/lib/GitHub/TeamAccess.d.ts +130 -0
- package/lib/GitHub/TeamAccess.d.ts.map +1 -0
- package/lib/GitHub/TeamAccess.js +176 -0
- package/lib/GitHub/TeamAccess.js.map +1 -0
- package/lib/GitHub/WikiPage.d.ts +252 -0
- package/lib/GitHub/WikiPage.d.ts.map +1 -0
- package/lib/GitHub/WikiPage.js +360 -0
- package/lib/GitHub/WikiPage.js.map +1 -0
- package/lib/GitHub/index.d.ts +10 -0
- package/lib/GitHub/index.d.ts.map +1 -1
- package/lib/GitHub/index.js +10 -0
- package/lib/GitHub/index.js.map +1 -1
- package/lib/Hetzner/AuthProvider.d.ts +7 -20
- package/lib/Hetzner/AuthProvider.d.ts.map +1 -1
- package/lib/Hetzner/AuthProvider.js +42 -130
- package/lib/Hetzner/AuthProvider.js.map +1 -1
- package/lib/Hetzner/Catalog.d.ts +5 -5
- package/lib/Hetzner/Catalog.d.ts.map +1 -1
- package/lib/Hetzner/Credentials.d.ts +1 -3
- package/lib/Hetzner/Credentials.d.ts.map +1 -1
- package/lib/Hetzner/Credentials.js +4 -9
- package/lib/Hetzner/Credentials.js.map +1 -1
- package/lib/Hetzner/PlacementGroup.d.ts +1 -1
- package/lib/Hetzner/PlacementGroup.d.ts.map +1 -1
- package/lib/Hetzner/Providers.d.ts +1 -1
- package/lib/Hetzner/Providers.d.ts.map +1 -1
- package/lib/Hetzner/Providers.js +2 -2
- package/lib/Hetzner/Providers.js.map +1 -1
- package/lib/Hetzner/Server.d.ts.map +1 -1
- package/lib/Hetzner/Server.js +29 -6
- package/lib/Hetzner/Server.js.map +1 -1
- package/lib/Hetzner/hosted.d.ts +2 -2
- package/lib/Http/Platform.d.ts +18 -0
- package/lib/Http/Platform.d.ts.map +1 -0
- package/lib/Http/Platform.js +35 -0
- package/lib/Http/Platform.js.map +1 -0
- package/lib/Http/index.d.ts +6 -0
- package/lib/Http/index.d.ts.map +1 -0
- package/lib/Http/index.js +6 -0
- package/lib/Http/index.js.map +1 -0
- package/lib/Http.d.ts +7 -1
- package/lib/Http.d.ts.map +1 -1
- package/lib/Http.js +2 -4
- package/lib/Http.js.map +1 -1
- package/lib/Interaction.d.ts +186 -0
- package/lib/Interaction.d.ts.map +1 -0
- package/lib/Interaction.js +149 -0
- package/lib/Interaction.js.map +1 -0
- package/lib/Kubernetes/ClusterAdapter.d.ts +4 -5
- package/lib/Kubernetes/ClusterAdapter.d.ts.map +1 -1
- package/lib/Kubernetes/ClusterAdapter.js.map +1 -1
- package/lib/Kubernetes/Deployment.d.ts +7 -21
- package/lib/Kubernetes/Deployment.d.ts.map +1 -1
- package/lib/Kubernetes/Deployment.js +7 -21
- package/lib/Kubernetes/Deployment.js.map +1 -1
- package/lib/Kubernetes/Job.d.ts +7 -21
- package/lib/Kubernetes/Job.d.ts.map +1 -1
- package/lib/Kubernetes/Job.js +7 -21
- package/lib/Kubernetes/Job.js.map +1 -1
- package/lib/Kubernetes/internal/helm.js +1 -1
- package/lib/Kubernetes/internal/kubeconfig.js +1 -1
- package/lib/Kubernetes/internal/workload.js +4 -4
- package/lib/Local/DevLog.d.ts +32 -0
- package/lib/Local/DevLog.d.ts.map +1 -0
- package/lib/Local/DevLog.js +114 -0
- package/lib/Local/DevLog.js.map +1 -0
- package/lib/Local/LocalProvider.d.ts +4 -3
- package/lib/Local/LocalProvider.d.ts.map +1 -1
- package/lib/Local/LocalProvider.js +5 -4
- package/lib/Local/LocalProvider.js.map +1 -1
- package/lib/Local/ProviderLayer.d.ts +12 -9
- package/lib/Local/ProviderLayer.d.ts.map +1 -1
- package/lib/Local/ProviderLayer.js +25 -15
- package/lib/Local/ProviderLayer.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 +2 -2
- package/lib/Local/RpcProvider.js.map +1 -1
- package/lib/Local/RpcProviderProxy.d.ts +13 -1
- package/lib/Local/RpcProviderProxy.d.ts.map +1 -1
- package/lib/Local/RpcProviderProxy.js +16 -17
- package/lib/Local/RpcProviderProxy.js.map +1 -1
- package/lib/Local/RpcServer.d.ts +31 -10
- package/lib/Local/RpcServer.d.ts.map +1 -1
- package/lib/Local/RpcServer.js +40 -21
- package/lib/Local/RpcServer.js.map +1 -1
- package/lib/Local/RpcServerEnvironment.d.ts +2 -2
- package/lib/Local/RpcServerEnvironment.d.ts.map +1 -1
- package/lib/Local/RpcServerEnvironment.js +4 -3
- package/lib/Local/RpcServerEnvironment.js.map +1 -1
- package/lib/Local/RpcSpawner.d.ts +14 -5
- package/lib/Local/RpcSpawner.d.ts.map +1 -1
- package/lib/Local/RpcSpawner.js +105 -38
- package/lib/Local/RpcSpawner.js.map +1 -1
- package/lib/Local/Sidecar.d.ts +2 -0
- package/lib/Local/Sidecar.d.ts.map +1 -0
- package/lib/Local/Sidecar.js +30 -0
- package/lib/Local/Sidecar.js.map +1 -0
- package/lib/Neon/AuthProvider.d.ts +4 -13
- package/lib/Neon/AuthProvider.d.ts.map +1 -1
- package/lib/Neon/AuthProvider.js +24 -107
- package/lib/Neon/AuthProvider.js.map +1 -1
- package/lib/Neon/Credentials.d.ts +1 -3
- package/lib/Neon/Credentials.d.ts.map +1 -1
- package/lib/Neon/Credentials.js +4 -9
- package/lib/Neon/Credentials.js.map +1 -1
- package/lib/Neon/Providers.d.ts +1 -1
- package/lib/Neon/Providers.d.ts.map +1 -1
- package/lib/Neon/Providers.js +2 -2
- package/lib/Neon/Providers.js.map +1 -1
- package/lib/Nuke.d.ts +89 -0
- package/lib/Nuke.d.ts.map +1 -0
- package/lib/Nuke.js +267 -0
- package/lib/Nuke.js.map +1 -0
- package/lib/Output.js +1 -1
- package/lib/Phase.js +2 -2
- package/lib/Plan.d.ts +27 -5
- package/lib/Plan.d.ts.map +1 -1
- package/lib/Plan.js +174 -25
- package/lib/Plan.js.map +1 -1
- package/lib/Planetscale/AuthProvider.d.ts +25 -37
- package/lib/Planetscale/AuthProvider.d.ts.map +1 -1
- package/lib/Planetscale/AuthProvider.js +267 -150
- package/lib/Planetscale/AuthProvider.js.map +1 -1
- package/lib/Planetscale/Credentials.d.ts +2 -3
- package/lib/Planetscale/Credentials.d.ts.map +1 -1
- package/lib/Planetscale/Credentials.js +17 -14
- package/lib/Planetscale/Credentials.js.map +1 -1
- package/lib/Planetscale/OAuthClient.d.ts +8 -52
- package/lib/Planetscale/OAuthClient.d.ts.map +1 -1
- package/lib/Planetscale/OAuthClient.js +18 -240
- package/lib/Planetscale/OAuthClient.js.map +1 -1
- package/lib/Planetscale/Providers.d.ts +1 -1
- package/lib/Planetscale/Providers.d.ts.map +1 -1
- package/lib/Planetscale/Providers.js +2 -2
- package/lib/Planetscale/Providers.js.map +1 -1
- package/lib/Planetscale/Util.d.ts +1 -1
- package/lib/Planetscale/Util.d.ts.map +1 -1
- package/lib/Prisma/App.d.ts.map +1 -1
- package/lib/Prisma/App.js +81 -43
- package/lib/Prisma/App.js.map +1 -1
- package/lib/Prisma/AuthProvider.d.ts +7 -15
- package/lib/Prisma/AuthProvider.d.ts.map +1 -1
- package/lib/Prisma/AuthProvider.js +54 -121
- package/lib/Prisma/AuthProvider.js.map +1 -1
- package/lib/Prisma/Branch.d.ts.map +1 -1
- package/lib/Prisma/Branch.js +81 -36
- package/lib/Prisma/Branch.js.map +1 -1
- package/lib/Prisma/Bucket.d.ts.map +1 -1
- package/lib/Prisma/Bucket.js +41 -21
- package/lib/Prisma/Bucket.js.map +1 -1
- package/lib/Prisma/BucketAccessKey.d.ts.map +1 -1
- package/lib/Prisma/BucketAccessKey.js +46 -19
- package/lib/Prisma/BucketAccessKey.js.map +1 -1
- package/lib/Prisma/Client.d.ts +2 -1
- package/lib/Prisma/Client.d.ts.map +1 -1
- package/lib/Prisma/Client.js +5 -5
- package/lib/Prisma/Client.js.map +1 -1
- package/lib/Prisma/Compute.d.ts +89 -31
- package/lib/Prisma/Compute.d.ts.map +1 -1
- package/lib/Prisma/Compute.js +240 -137
- package/lib/Prisma/Compute.js.map +1 -1
- package/lib/Prisma/ComputeArchive.d.ts +9 -0
- package/lib/Prisma/ComputeArchive.d.ts.map +1 -1
- package/lib/Prisma/ComputeArchive.js +14 -4
- package/lib/Prisma/ComputeArchive.js.map +1 -1
- package/lib/Prisma/ComputeBuild.d.ts +67 -2
- package/lib/Prisma/ComputeBuild.d.ts.map +1 -1
- package/lib/Prisma/ComputeBuild.js +147 -1
- package/lib/Prisma/ComputeBuild.js.map +1 -1
- package/lib/Prisma/ComputeLifecycle.d.ts +51 -8
- package/lib/Prisma/ComputeLifecycle.d.ts.map +1 -1
- package/lib/Prisma/ComputeLifecycle.js +82 -40
- package/lib/Prisma/ComputeLifecycle.js.map +1 -1
- package/lib/Prisma/Connection.d.ts.map +1 -1
- package/lib/Prisma/Connection.js +72 -30
- package/lib/Prisma/Connection.js.map +1 -1
- package/lib/Prisma/Credentials.d.ts +22 -0
- package/lib/Prisma/Credentials.d.ts.map +1 -0
- package/lib/Prisma/Credentials.js +43 -0
- package/lib/Prisma/Credentials.js.map +1 -0
- package/lib/Prisma/Database.d.ts +9 -4
- package/lib/Prisma/Database.d.ts.map +1 -1
- package/lib/Prisma/Database.js +102 -66
- package/lib/Prisma/Database.js.map +1 -1
- package/lib/Prisma/Deployment.d.ts.map +1 -1
- package/lib/Prisma/Deployment.js +55 -26
- package/lib/Prisma/Deployment.js.map +1 -1
- package/lib/Prisma/EnvironmentVariable.d.ts.map +1 -1
- package/lib/Prisma/EnvironmentVariable.js +50 -26
- package/lib/Prisma/EnvironmentVariable.js.map +1 -1
- package/lib/Prisma/Internal/AppPromotion.d.ts +5 -4
- package/lib/Prisma/Internal/AppPromotion.d.ts.map +1 -1
- package/lib/Prisma/Internal/AppPromotion.js +16 -15
- package/lib/Prisma/Internal/AppPromotion.js.map +1 -1
- package/lib/Prisma/Internal/DatabaseSecrets.d.ts +5 -5
- package/lib/Prisma/Internal/DatabaseSecrets.d.ts.map +1 -1
- package/lib/Prisma/Internal/DatabaseSecrets.js +10 -5
- package/lib/Prisma/Internal/DatabaseSecrets.js.map +1 -1
- package/lib/Prisma/Internal/DeploymentActions.d.ts +3 -3
- package/lib/Prisma/Internal/DeploymentActions.d.ts.map +1 -1
- package/lib/Prisma/Internal/DeploymentActions.js +7 -11
- package/lib/Prisma/Internal/DeploymentActions.js.map +1 -1
- package/lib/Prisma/Internal/DeploymentIdentity.d.ts +2 -3
- package/lib/Prisma/Internal/DeploymentIdentity.d.ts.map +1 -1
- package/lib/Prisma/Internal/DeploymentIdentity.js +23 -2
- package/lib/Prisma/Internal/DeploymentIdentity.js.map +1 -1
- package/lib/Prisma/Internal/DeploymentObserve.d.ts +2 -2
- package/lib/Prisma/Internal/DeploymentObserve.d.ts.map +1 -1
- package/lib/Prisma/Internal/DeploymentObserve.js +3 -1
- package/lib/Prisma/Internal/DeploymentObserve.js.map +1 -1
- package/lib/Prisma/Internal/LogsClient.d.ts +8 -0
- package/lib/Prisma/Internal/LogsClient.d.ts.map +1 -0
- package/lib/Prisma/Internal/LogsClient.js +120 -0
- package/lib/Prisma/Internal/LogsClient.js.map +1 -0
- package/lib/Prisma/Internal/Observed.d.ts +164 -0
- package/lib/Prisma/Internal/Observed.d.ts.map +1 -0
- package/lib/Prisma/Internal/Observed.js +36 -0
- package/lib/Prisma/Internal/Observed.js.map +1 -0
- package/lib/Prisma/Internal/Pagination.d.ts +18 -0
- package/lib/Prisma/Internal/Pagination.d.ts.map +1 -0
- package/lib/Prisma/Internal/Pagination.js +13 -0
- package/lib/Prisma/Internal/Pagination.js.map +1 -0
- package/lib/Prisma/Operations.d.ts +2 -2
- package/lib/Prisma/Operations.d.ts.map +1 -1
- package/lib/Prisma/Operations.js +3 -2
- package/lib/Prisma/Operations.js.map +1 -1
- package/lib/Prisma/PrismaEnvironment.d.ts +1 -2
- package/lib/Prisma/PrismaEnvironment.d.ts.map +1 -1
- package/lib/Prisma/PrismaEnvironment.js +4 -9
- package/lib/Prisma/PrismaEnvironment.js.map +1 -1
- package/lib/Prisma/PrismaLogs.d.ts +2 -2
- package/lib/Prisma/PrismaLogs.d.ts.map +1 -1
- package/lib/Prisma/PrismaLogs.js +13 -4
- package/lib/Prisma/PrismaLogs.js.map +1 -1
- package/lib/Prisma/Project.d.ts +1 -2
- package/lib/Prisma/Project.d.ts.map +1 -1
- package/lib/Prisma/Project.js +84 -52
- package/lib/Prisma/Project.js.map +1 -1
- package/lib/Prisma/Providers.d.ts +19 -3
- package/lib/Prisma/Providers.d.ts.map +1 -1
- package/lib/Prisma/Providers.js +31 -12
- package/lib/Prisma/Providers.js.map +1 -1
- package/lib/Prisma/SourceRepository.d.ts.map +1 -1
- package/lib/Prisma/SourceRepository.js +137 -45
- package/lib/Prisma/SourceRepository.js.map +1 -1
- package/lib/Provider.d.ts +16 -4
- package/lib/Provider.d.ts.map +1 -1
- package/lib/Provider.js +21 -18
- package/lib/Provider.js.map +1 -1
- package/lib/Railway/AuditLog.d.ts +46 -5
- package/lib/Railway/AuditLog.d.ts.map +1 -1
- package/lib/Railway/AuditLog.js +14 -4
- package/lib/Railway/AuditLog.js.map +1 -1
- package/lib/Railway/AuthProvider.d.ts +19 -19
- package/lib/Railway/AuthProvider.d.ts.map +1 -1
- package/lib/Railway/AuthProvider.js +193 -127
- package/lib/Railway/AuthProvider.js.map +1 -1
- package/lib/Railway/Bucket.d.ts +1 -1
- package/lib/Railway/Bucket.d.ts.map +1 -1
- package/lib/Railway/Bucket.js +41 -21
- package/lib/Railway/Bucket.js.map +1 -1
- package/lib/Railway/BucketBinding.js +5 -5
- package/lib/Railway/Catalog.d.ts +42 -4
- package/lib/Railway/Catalog.d.ts.map +1 -1
- package/lib/Railway/Catalog.js +6 -1
- package/lib/Railway/Catalog.js.map +1 -1
- package/lib/Railway/CloudAgent.d.ts +68 -4
- package/lib/Railway/CloudAgent.d.ts.map +1 -1
- package/lib/Railway/CloudAgent.js +26 -22
- package/lib/Railway/CloudAgent.js.map +1 -1
- package/lib/Railway/Credentials.d.ts +2 -5
- package/lib/Railway/Credentials.d.ts.map +1 -1
- package/lib/Railway/Credentials.js +5 -11
- package/lib/Railway/Credentials.js.map +1 -1
- package/lib/Railway/CustomDomain.d.ts +1 -1
- package/lib/Railway/CustomDomain.d.ts.map +1 -1
- package/lib/Railway/CustomDomain.js +60 -34
- package/lib/Railway/CustomDomain.js.map +1 -1
- package/lib/Railway/Environment.d.ts +20 -2
- package/lib/Railway/Environment.d.ts.map +1 -1
- package/lib/Railway/Environment.js +7 -2
- package/lib/Railway/Environment.js.map +1 -1
- package/lib/Railway/Function.d.ts +1 -1
- package/lib/Railway/Function.d.ts.map +1 -1
- package/lib/Railway/Function.js +77 -59
- package/lib/Railway/Function.js.map +1 -1
- package/lib/Railway/GraphQL.d.ts +1230 -0
- package/lib/Railway/GraphQL.d.ts.map +1 -0
- package/lib/Railway/GraphQL.js +132 -0
- package/lib/Railway/GraphQL.js.map +1 -0
- package/lib/Railway/Group.d.ts +1 -1
- package/lib/Railway/Group.d.ts.map +1 -1
- package/lib/Railway/Group.js +103 -32
- package/lib/Railway/Group.js.map +1 -1
- package/lib/Railway/LoginSession.d.ts +13 -5
- package/lib/Railway/LoginSession.d.ts.map +1 -1
- package/lib/Railway/LoginSession.js +9 -8
- package/lib/Railway/LoginSession.js.map +1 -1
- package/lib/Railway/Mongo.d.ts +1 -1
- package/lib/Railway/Mongo.d.ts.map +1 -1
- package/lib/Railway/Mongo.js +118 -104
- package/lib/Railway/Mongo.js.map +1 -1
- package/lib/Railway/MountVolume.d.ts.map +1 -1
- package/lib/Railway/MountVolume.js +5 -4
- package/lib/Railway/MountVolume.js.map +1 -1
- package/lib/Railway/MySQL.d.ts +1 -1
- package/lib/Railway/MySQL.d.ts.map +1 -1
- package/lib/Railway/MySQL.js +118 -104
- package/lib/Railway/MySQL.js.map +1 -1
- package/lib/Railway/Postgres.d.ts +1 -1
- package/lib/Railway/Postgres.d.ts.map +1 -1
- package/lib/Railway/Postgres.js +124 -106
- package/lib/Railway/Postgres.js.map +1 -1
- package/lib/Railway/PrivateNetwork.d.ts +87 -61
- package/lib/Railway/PrivateNetwork.d.ts.map +1 -1
- package/lib/Railway/PrivateNetwork.js +298 -196
- package/lib/Railway/PrivateNetwork.js.map +1 -1
- package/lib/Railway/Project.d.ts +80 -6
- package/lib/Railway/Project.d.ts.map +1 -1
- package/lib/Railway/Project.js +27 -20
- package/lib/Railway/Project.js.map +1 -1
- package/lib/Railway/ProjectEnvironment.d.ts +1 -1
- package/lib/Railway/ProjectEnvironment.d.ts.map +1 -1
- package/lib/Railway/ProjectEnvironment.js +25 -18
- package/lib/Railway/ProjectEnvironment.js.map +1 -1
- package/lib/Railway/Providers.d.ts +1 -1
- package/lib/Railway/Providers.d.ts.map +1 -1
- package/lib/Railway/Providers.js +4 -3
- package/lib/Railway/Providers.js.map +1 -1
- package/lib/Railway/Redis.d.ts +1 -1
- package/lib/Railway/Redis.d.ts.map +1 -1
- package/lib/Railway/Redis.js +57 -46
- package/lib/Railway/Redis.js.map +1 -1
- package/lib/Railway/RedisBinding.js +2 -2
- package/lib/Railway/Sandbox.d.ts +183 -17
- package/lib/Railway/Sandbox.d.ts.map +1 -1
- package/lib/Railway/Sandbox.js +117 -58
- package/lib/Railway/Sandbox.js.map +1 -1
- package/lib/Railway/SandboxCheckpoint.d.ts +84 -0
- package/lib/Railway/SandboxCheckpoint.d.ts.map +1 -0
- package/lib/Railway/SandboxCheckpoint.js +189 -0
- package/lib/Railway/SandboxCheckpoint.js.map +1 -0
- package/lib/Railway/Service.d.ts +75 -2
- package/lib/Railway/Service.d.ts.map +1 -1
- package/lib/Railway/Service.js +42 -0
- package/lib/Railway/Service.js.map +1 -1
- package/lib/Railway/ServiceDomain.d.ts +102 -3
- package/lib/Railway/ServiceDomain.d.ts.map +1 -1
- package/lib/Railway/ServiceDomain.js +135 -38
- package/lib/Railway/ServiceDomain.js.map +1 -1
- package/lib/Railway/ServiceProvider.d.ts +2 -10
- package/lib/Railway/ServiceProvider.d.ts.map +1 -1
- package/lib/Railway/ServiceProvider.js +281 -125
- package/lib/Railway/ServiceProvider.js.map +1 -1
- package/lib/Railway/TcpProxy.d.ts +1 -1
- package/lib/Railway/TcpProxy.d.ts.map +1 -1
- package/lib/Railway/TcpProxy.js +26 -18
- package/lib/Railway/TcpProxy.js.map +1 -1
- package/lib/Railway/Template.d.ts +5 -5
- package/lib/Railway/Template.d.ts.map +1 -1
- package/lib/Railway/Template.js +84 -57
- package/lib/Railway/Template.js.map +1 -1
- package/lib/Railway/Usage.d.ts +82 -5
- package/lib/Railway/Usage.d.ts.map +1 -1
- package/lib/Railway/Usage.js +30 -14
- package/lib/Railway/Usage.js.map +1 -1
- package/lib/Railway/Variable.d.ts +1 -1
- package/lib/Railway/Variable.d.ts.map +1 -1
- package/lib/Railway/Variable.js +10 -12
- package/lib/Railway/Variable.js.map +1 -1
- package/lib/Railway/Volume.d.ts +77 -3
- package/lib/Railway/Volume.d.ts.map +1 -1
- package/lib/Railway/Volume.js +71 -39
- package/lib/Railway/Volume.js.map +1 -1
- package/lib/Railway/VolumeBackup.d.ts +20 -4
- package/lib/Railway/VolumeBackup.d.ts.map +1 -1
- package/lib/Railway/VolumeBackup.js +53 -34
- package/lib/Railway/VolumeBackup.js.map +1 -1
- package/lib/Railway/Website/Cdn.d.ts +18 -2
- package/lib/Railway/Website/Cdn.d.ts.map +1 -1
- package/lib/Railway/Website/Cdn.js +82 -35
- package/lib/Railway/Website/Cdn.js.map +1 -1
- package/lib/Railway/hosted.d.ts.map +1 -1
- package/lib/Railway/hosted.js +10 -3
- package/lib/Railway/hosted.js.map +1 -1
- package/lib/Railway/index.d.ts +1 -0
- package/lib/Railway/index.d.ts.map +1 -1
- package/lib/Railway/index.js +1 -0
- package/lib/Railway/index.js.map +1 -1
- package/lib/Railway/local-context.d.ts +125 -0
- package/lib/Railway/local-context.d.ts.map +1 -0
- package/lib/Railway/local-context.js +254 -0
- package/lib/Railway/local-context.js.map +1 -0
- package/lib/Railway/transient.d.ts +6 -16
- package/lib/Railway/transient.d.ts.map +1 -1
- package/lib/Railway/transient.js +20 -32
- package/lib/Railway/transient.js.map +1 -1
- package/lib/Report.d.ts +248 -0
- package/lib/Report.d.ts.map +1 -0
- package/lib/Report.js +18 -0
- package/lib/Report.js.map +1 -0
- package/lib/Rpc.d.ts +22 -1
- package/lib/Rpc.d.ts.map +1 -1
- package/lib/Rpc.js +37 -2
- package/lib/Rpc.js.map +1 -1
- package/lib/Runtime/Bootstrap/Process.js +2 -2
- package/lib/Runtime.d.ts +1 -1
- package/lib/Runtime.js +1 -1
- package/lib/RuntimeContext.d.ts +1 -1
- package/lib/RuntimeContext.js +1 -1
- package/lib/SQL/Postgres.d.ts.map +1 -1
- package/lib/SQL/Postgres.js +5 -1
- package/lib/SQL/Postgres.js.map +1 -1
- package/lib/SQL/PostgresTls.d.ts +29 -0
- package/lib/SQL/PostgresTls.d.ts.map +1 -0
- package/lib/SQL/PostgresTls.js +63 -0
- package/lib/SQL/PostgresTls.js.map +1 -0
- package/lib/Server/Process.js +1 -1
- package/lib/Server/index.d.ts +0 -2
- package/lib/Server/index.d.ts.map +1 -1
- package/lib/Server/index.js +0 -2
- package/lib/Server/index.js.map +1 -1
- package/lib/Stack.d.ts +7 -6
- package/lib/Stack.d.ts.map +1 -1
- package/lib/Stack.js +4 -5
- package/lib/Stack.js.map +1 -1
- package/lib/StackContext.d.ts +4 -0
- package/lib/StackContext.d.ts.map +1 -0
- package/lib/StackContext.js +3 -0
- package/lib/StackContext.js.map +1 -0
- package/lib/State/Export.d.ts +6 -4
- package/lib/State/Export.d.ts.map +1 -1
- package/lib/State/Export.js +13 -18
- package/lib/State/Export.js.map +1 -1
- package/lib/State/HttpStateApi.d.ts +8 -8
- package/lib/State/HttpStateStore.d.ts +6 -11
- package/lib/State/HttpStateStore.d.ts.map +1 -1
- package/lib/State/HttpStateStore.js +25 -35
- package/lib/State/HttpStateStore.js.map +1 -1
- package/lib/State/LocalState.d.ts.map +1 -1
- package/lib/State/LocalState.js +6 -13
- package/lib/State/LocalState.js.map +1 -1
- package/lib/State/PostgresState.d.ts +4 -4
- package/lib/State/PostgresState.d.ts.map +1 -1
- package/lib/State/PostgresState.js +5 -4
- package/lib/State/PostgresState.js.map +1 -1
- package/lib/State/State.d.ts +5 -0
- package/lib/State/State.d.ts.map +1 -1
- package/lib/State/State.js.map +1 -1
- package/lib/State/Tree.d.ts +62 -0
- package/lib/State/Tree.d.ts.map +1 -0
- package/lib/State/Tree.js +166 -0
- package/lib/State/Tree.js.map +1 -0
- package/lib/State/index.d.ts +1 -0
- package/lib/State/index.d.ts.map +1 -1
- package/lib/State/index.js +1 -0
- package/lib/State/index.js.map +1 -1
- package/lib/Stripe/Account.d.ts +308 -0
- package/lib/Stripe/Account.d.ts.map +1 -0
- package/lib/Stripe/Account.js +436 -0
- package/lib/Stripe/Account.js.map +1 -0
- package/lib/Stripe/AccountExternalAccount.d.ts +139 -0
- package/lib/Stripe/AccountExternalAccount.d.ts.map +1 -0
- package/lib/Stripe/AccountExternalAccount.js +354 -0
- package/lib/Stripe/AccountExternalAccount.js.map +1 -0
- package/lib/Stripe/AccountPerson.d.ts +142 -0
- package/lib/Stripe/AccountPerson.d.ts.map +1 -0
- package/lib/Stripe/AccountPerson.js +354 -0
- package/lib/Stripe/AccountPerson.js.map +1 -0
- package/lib/Stripe/Alert.d.ts +168 -0
- package/lib/Stripe/Alert.d.ts.map +1 -0
- package/lib/Stripe/Alert.js +285 -0
- package/lib/Stripe/Alert.js.map +1 -0
- package/lib/Stripe/ApplePayDomain.d.ts +75 -0
- package/lib/Stripe/ApplePayDomain.d.ts.map +1 -0
- package/lib/Stripe/ApplePayDomain.js +178 -0
- package/lib/Stripe/ApplePayDomain.js.map +1 -0
- package/lib/Stripe/AppsSecret.d.ts +120 -0
- package/lib/Stripe/AppsSecret.d.ts.map +1 -0
- package/lib/Stripe/AppsSecret.js +232 -0
- package/lib/Stripe/AppsSecret.js.map +1 -0
- package/lib/Stripe/AuthProvider.d.ts +27 -0
- package/lib/Stripe/AuthProvider.d.ts.map +1 -0
- package/lib/Stripe/AuthProvider.js +56 -0
- package/lib/Stripe/AuthProvider.js.map +1 -0
- package/lib/Stripe/BillingMeter.d.ts +168 -0
- package/lib/Stripe/BillingMeter.d.ts.map +1 -0
- package/lib/Stripe/BillingMeter.js +270 -0
- package/lib/Stripe/BillingMeter.js.map +1 -0
- package/lib/Stripe/BillingPortalConfiguration.d.ts +358 -0
- package/lib/Stripe/BillingPortalConfiguration.d.ts.map +1 -0
- package/lib/Stripe/BillingPortalConfiguration.js +480 -0
- package/lib/Stripe/BillingPortalConfiguration.js.map +1 -0
- package/lib/Stripe/ConsumeEvents.d.ts +80 -0
- package/lib/Stripe/ConsumeEvents.d.ts.map +1 -0
- package/lib/Stripe/ConsumeEvents.js +139 -0
- package/lib/Stripe/ConsumeEvents.js.map +1 -0
- package/lib/Stripe/Coupon.d.ts +179 -0
- package/lib/Stripe/Coupon.d.ts.map +1 -0
- package/lib/Stripe/Coupon.js +323 -0
- package/lib/Stripe/Coupon.js.map +1 -0
- package/lib/Stripe/CreateAccount.d.ts +25 -0
- package/lib/Stripe/CreateAccount.d.ts.map +1 -0
- package/lib/Stripe/CreateAccount.js +3 -0
- package/lib/Stripe/CreateAccount.js.map +1 -0
- package/lib/Stripe/CreateAccountHttp.d.ts +11 -0
- package/lib/Stripe/CreateAccountHttp.d.ts.map +1 -0
- package/lib/Stripe/CreateAccountHttp.js +17 -0
- package/lib/Stripe/CreateAccountHttp.js.map +1 -0
- package/lib/Stripe/CreateAccountLink.d.ts +29 -0
- package/lib/Stripe/CreateAccountLink.d.ts.map +1 -0
- package/lib/Stripe/CreateAccountLink.js +3 -0
- package/lib/Stripe/CreateAccountLink.js.map +1 -0
- package/lib/Stripe/CreateAccountLinkHttp.d.ts +11 -0
- package/lib/Stripe/CreateAccountLinkHttp.d.ts.map +1 -0
- package/lib/Stripe/CreateAccountLinkHttp.js +17 -0
- package/lib/Stripe/CreateAccountLinkHttp.js.map +1 -0
- package/lib/Stripe/CreateAppsSecret.d.ts +25 -0
- package/lib/Stripe/CreateAppsSecret.d.ts.map +1 -0
- package/lib/Stripe/CreateAppsSecret.js +3 -0
- package/lib/Stripe/CreateAppsSecret.js.map +1 -0
- package/lib/Stripe/CreateAppsSecretHttp.d.ts +11 -0
- package/lib/Stripe/CreateAppsSecretHttp.d.ts.map +1 -0
- package/lib/Stripe/CreateAppsSecretHttp.js +17 -0
- package/lib/Stripe/CreateAppsSecretHttp.js.map +1 -0
- package/lib/Stripe/CreateBillingPortalSession.d.ts +33 -0
- package/lib/Stripe/CreateBillingPortalSession.d.ts.map +1 -0
- package/lib/Stripe/CreateBillingPortalSession.js +3 -0
- package/lib/Stripe/CreateBillingPortalSession.js.map +1 -0
- package/lib/Stripe/CreateBillingPortalSessionHttp.d.ts +11 -0
- package/lib/Stripe/CreateBillingPortalSessionHttp.d.ts.map +1 -0
- package/lib/Stripe/CreateBillingPortalSessionHttp.js +17 -0
- package/lib/Stripe/CreateBillingPortalSessionHttp.js.map +1 -0
- package/lib/Stripe/CreateCheckoutSession.d.ts +35 -0
- package/lib/Stripe/CreateCheckoutSession.d.ts.map +1 -0
- package/lib/Stripe/CreateCheckoutSession.js +3 -0
- package/lib/Stripe/CreateCheckoutSession.js.map +1 -0
- package/lib/Stripe/CreateCheckoutSessionHttp.d.ts +11 -0
- package/lib/Stripe/CreateCheckoutSessionHttp.d.ts.map +1 -0
- package/lib/Stripe/CreateCheckoutSessionHttp.js +17 -0
- package/lib/Stripe/CreateCheckoutSessionHttp.js.map +1 -0
- package/lib/Stripe/CreateCreditGrant.d.ts +27 -0
- package/lib/Stripe/CreateCreditGrant.d.ts.map +1 -0
- package/lib/Stripe/CreateCreditGrant.js +3 -0
- package/lib/Stripe/CreateCreditGrant.js.map +1 -0
- package/lib/Stripe/CreateCreditGrantHttp.d.ts +11 -0
- package/lib/Stripe/CreateCreditGrantHttp.d.ts.map +1 -0
- package/lib/Stripe/CreateCreditGrantHttp.js +17 -0
- package/lib/Stripe/CreateCreditGrantHttp.js.map +1 -0
- package/lib/Stripe/CreateCustomer.d.ts +24 -0
- package/lib/Stripe/CreateCustomer.d.ts.map +1 -0
- package/lib/Stripe/CreateCustomer.js +3 -0
- package/lib/Stripe/CreateCustomer.js.map +1 -0
- package/lib/Stripe/CreateCustomerHttp.d.ts +11 -0
- package/lib/Stripe/CreateCustomerHttp.d.ts.map +1 -0
- package/lib/Stripe/CreateCustomerHttp.js +17 -0
- package/lib/Stripe/CreateCustomerHttp.js.map +1 -0
- package/lib/Stripe/CreateFileLink.d.ts +23 -0
- package/lib/Stripe/CreateFileLink.d.ts.map +1 -0
- package/lib/Stripe/CreateFileLink.js +3 -0
- package/lib/Stripe/CreateFileLink.js.map +1 -0
- package/lib/Stripe/CreateFileLinkHttp.d.ts +11 -0
- package/lib/Stripe/CreateFileLinkHttp.d.ts.map +1 -0
- package/lib/Stripe/CreateFileLinkHttp.js +17 -0
- package/lib/Stripe/CreateFileLinkHttp.js.map +1 -0
- package/lib/Stripe/CreateIssuingCard.d.ts +25 -0
- package/lib/Stripe/CreateIssuingCard.d.ts.map +1 -0
- package/lib/Stripe/CreateIssuingCard.js +3 -0
- package/lib/Stripe/CreateIssuingCard.js.map +1 -0
- package/lib/Stripe/CreateIssuingCardHttp.d.ts +11 -0
- package/lib/Stripe/CreateIssuingCardHttp.d.ts.map +1 -0
- package/lib/Stripe/CreateIssuingCardHttp.js +17 -0
- package/lib/Stripe/CreateIssuingCardHttp.js.map +1 -0
- package/lib/Stripe/CreateIssuingCardholder.d.ts +32 -0
- package/lib/Stripe/CreateIssuingCardholder.d.ts.map +1 -0
- package/lib/Stripe/CreateIssuingCardholder.js +3 -0
- package/lib/Stripe/CreateIssuingCardholder.js.map +1 -0
- package/lib/Stripe/CreateIssuingCardholderHttp.d.ts +11 -0
- package/lib/Stripe/CreateIssuingCardholderHttp.d.ts.map +1 -0
- package/lib/Stripe/CreateIssuingCardholderHttp.js +17 -0
- package/lib/Stripe/CreateIssuingCardholderHttp.js.map +1 -0
- package/lib/Stripe/CreateTerminalReader.d.ts +25 -0
- package/lib/Stripe/CreateTerminalReader.d.ts.map +1 -0
- package/lib/Stripe/CreateTerminalReader.js +3 -0
- package/lib/Stripe/CreateTerminalReader.js.map +1 -0
- package/lib/Stripe/CreateTerminalReaderHttp.d.ts +11 -0
- package/lib/Stripe/CreateTerminalReaderHttp.d.ts.map +1 -0
- package/lib/Stripe/CreateTerminalReaderHttp.js +17 -0
- package/lib/Stripe/CreateTerminalReaderHttp.js.map +1 -0
- package/lib/Stripe/Credentials.d.ts +15 -0
- package/lib/Stripe/Credentials.d.ts.map +1 -0
- package/lib/Stripe/Credentials.js +27 -0
- package/lib/Stripe/Credentials.js.map +1 -0
- package/lib/Stripe/CreditGrant.d.ts +219 -0
- package/lib/Stripe/CreditGrant.d.ts.map +1 -0
- package/lib/Stripe/CreditGrant.js +364 -0
- package/lib/Stripe/CreditGrant.js.map +1 -0
- package/lib/Stripe/Customer.d.ts +90 -0
- package/lib/Stripe/Customer.d.ts.map +1 -0
- package/lib/Stripe/Customer.js +203 -0
- package/lib/Stripe/Customer.js.map +1 -0
- package/lib/Stripe/CustomerTaxId.d.ts +81 -0
- package/lib/Stripe/CustomerTaxId.d.ts.map +1 -0
- package/lib/Stripe/CustomerTaxId.js +228 -0
- package/lib/Stripe/CustomerTaxId.js.map +1 -0
- package/lib/Stripe/EntitlementsFeature.d.ts +96 -0
- package/lib/Stripe/EntitlementsFeature.d.ts.map +1 -0
- package/lib/Stripe/EntitlementsFeature.js +261 -0
- package/lib/Stripe/EntitlementsFeature.js.map +1 -0
- package/lib/Stripe/Events.d.ts +91 -0
- package/lib/Stripe/Events.d.ts.map +1 -0
- package/lib/Stripe/Events.js +102 -0
- package/lib/Stripe/Events.js.map +1 -0
- package/lib/Stripe/FileLink.d.ts +92 -0
- package/lib/Stripe/FileLink.d.ts.map +1 -0
- package/lib/Stripe/FileLink.js +229 -0
- package/lib/Stripe/FileLink.js.map +1 -0
- package/lib/Stripe/IssuingCard.d.ts +249 -0
- package/lib/Stripe/IssuingCard.d.ts.map +1 -0
- package/lib/Stripe/IssuingCard.js +423 -0
- package/lib/Stripe/IssuingCard.js.map +1 -0
- package/lib/Stripe/IssuingCardholder.d.ts +366 -0
- package/lib/Stripe/IssuingCardholder.d.ts.map +1 -0
- package/lib/Stripe/IssuingCardholder.js +520 -0
- package/lib/Stripe/IssuingCardholder.js.map +1 -0
- package/lib/Stripe/IssuingPersonalizationDesign.d.ts +185 -0
- package/lib/Stripe/IssuingPersonalizationDesign.d.ts.map +1 -0
- package/lib/Stripe/IssuingPersonalizationDesign.js +340 -0
- package/lib/Stripe/IssuingPersonalizationDesign.js.map +1 -0
- package/lib/Stripe/Metadata.d.ts +39 -0
- package/lib/Stripe/Metadata.d.ts.map +1 -0
- package/lib/Stripe/Metadata.js +58 -0
- package/lib/Stripe/Metadata.js.map +1 -0
- package/lib/Stripe/PaymentLink.d.ts +219 -0
- package/lib/Stripe/PaymentLink.d.ts.map +1 -0
- package/lib/Stripe/PaymentLink.js +491 -0
- package/lib/Stripe/PaymentLink.js.map +1 -0
- package/lib/Stripe/PaymentMethodConfiguration.d.ts +269 -0
- package/lib/Stripe/PaymentMethodConfiguration.d.ts.map +1 -0
- package/lib/Stripe/PaymentMethodConfiguration.js +330 -0
- package/lib/Stripe/PaymentMethodConfiguration.js.map +1 -0
- package/lib/Stripe/PaymentMethodDomain.d.ts +118 -0
- package/lib/Stripe/PaymentMethodDomain.d.ts.map +1 -0
- package/lib/Stripe/PaymentMethodDomain.js +209 -0
- package/lib/Stripe/PaymentMethodDomain.js.map +1 -0
- package/lib/Stripe/Plan.d.ts +175 -0
- package/lib/Stripe/Plan.d.ts.map +1 -0
- package/lib/Stripe/Plan.js +305 -0
- package/lib/Stripe/Plan.js.map +1 -0
- package/lib/Stripe/Price.d.ts +176 -0
- package/lib/Stripe/Price.d.ts.map +1 -0
- package/lib/Stripe/Price.js +344 -0
- package/lib/Stripe/Price.js.map +1 -0
- package/lib/Stripe/Product.d.ts +92 -0
- package/lib/Stripe/Product.d.ts.map +1 -0
- package/lib/Stripe/Product.js +222 -0
- package/lib/Stripe/Product.js.map +1 -0
- package/lib/Stripe/ProductFeature.d.ts +70 -0
- package/lib/Stripe/ProductFeature.d.ts.map +1 -0
- package/lib/Stripe/ProductFeature.js +206 -0
- package/lib/Stripe/ProductFeature.js.map +1 -0
- package/lib/Stripe/PromotionCode.d.ts +168 -0
- package/lib/Stripe/PromotionCode.d.ts.map +1 -0
- package/lib/Stripe/PromotionCode.js +396 -0
- package/lib/Stripe/PromotionCode.js.map +1 -0
- package/lib/Stripe/Providers.d.ts +36 -0
- package/lib/Stripe/Providers.d.ts.map +1 -0
- package/lib/Stripe/Providers.js +162 -0
- package/lib/Stripe/Providers.js.map +1 -0
- package/lib/Stripe/RadarValueList.d.ts +112 -0
- package/lib/Stripe/RadarValueList.d.ts.map +1 -0
- package/lib/Stripe/RadarValueList.js +259 -0
- package/lib/Stripe/RadarValueList.js.map +1 -0
- package/lib/Stripe/RadarValueListItem.d.ts +69 -0
- package/lib/Stripe/RadarValueListItem.d.ts.map +1 -0
- package/lib/Stripe/RadarValueListItem.js +213 -0
- package/lib/Stripe/RadarValueListItem.js.map +1 -0
- package/lib/Stripe/RestrictedApiKey.d.ts +85 -0
- package/lib/Stripe/RestrictedApiKey.d.ts.map +1 -0
- package/lib/Stripe/RestrictedApiKey.js +91 -0
- package/lib/Stripe/RestrictedApiKey.js.map +1 -0
- package/lib/Stripe/RetrieveAccount.d.ts +23 -0
- package/lib/Stripe/RetrieveAccount.d.ts.map +1 -0
- package/lib/Stripe/RetrieveAccount.js +3 -0
- package/lib/Stripe/RetrieveAccount.js.map +1 -0
- package/lib/Stripe/RetrieveAccountExternalAccount.d.ts +23 -0
- package/lib/Stripe/RetrieveAccountExternalAccount.d.ts.map +1 -0
- package/lib/Stripe/RetrieveAccountExternalAccount.js +3 -0
- package/lib/Stripe/RetrieveAccountExternalAccount.js.map +1 -0
- package/lib/Stripe/RetrieveAccountExternalAccountHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveAccountExternalAccountHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveAccountExternalAccountHttp.js +31 -0
- package/lib/Stripe/RetrieveAccountExternalAccountHttp.js.map +1 -0
- package/lib/Stripe/RetrieveAccountHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveAccountHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveAccountHttp.js +18 -0
- package/lib/Stripe/RetrieveAccountHttp.js.map +1 -0
- package/lib/Stripe/RetrieveAccountPerson.d.ts +23 -0
- package/lib/Stripe/RetrieveAccountPerson.d.ts.map +1 -0
- package/lib/Stripe/RetrieveAccountPerson.js +3 -0
- package/lib/Stripe/RetrieveAccountPerson.js.map +1 -0
- package/lib/Stripe/RetrieveAccountPersonHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveAccountPersonHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveAccountPersonHttp.js +31 -0
- package/lib/Stripe/RetrieveAccountPersonHttp.js.map +1 -0
- package/lib/Stripe/RetrieveAlert.d.ts +23 -0
- package/lib/Stripe/RetrieveAlert.d.ts.map +1 -0
- package/lib/Stripe/RetrieveAlert.js +3 -0
- package/lib/Stripe/RetrieveAlert.js.map +1 -0
- package/lib/Stripe/RetrieveAlertHttp.d.ts +10 -0
- package/lib/Stripe/RetrieveAlertHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveAlertHttp.js +17 -0
- package/lib/Stripe/RetrieveAlertHttp.js.map +1 -0
- package/lib/Stripe/RetrieveApplePayDomain.d.ts +23 -0
- package/lib/Stripe/RetrieveApplePayDomain.d.ts.map +1 -0
- package/lib/Stripe/RetrieveApplePayDomain.js +3 -0
- package/lib/Stripe/RetrieveApplePayDomain.js.map +1 -0
- package/lib/Stripe/RetrieveApplePayDomainHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveApplePayDomainHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveApplePayDomainHttp.js +18 -0
- package/lib/Stripe/RetrieveApplePayDomainHttp.js.map +1 -0
- package/lib/Stripe/RetrieveAppsSecret.d.ts +24 -0
- package/lib/Stripe/RetrieveAppsSecret.d.ts.map +1 -0
- package/lib/Stripe/RetrieveAppsSecret.js +3 -0
- package/lib/Stripe/RetrieveAppsSecret.js.map +1 -0
- package/lib/Stripe/RetrieveAppsSecretHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveAppsSecretHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveAppsSecretHttp.js +36 -0
- package/lib/Stripe/RetrieveAppsSecretHttp.js.map +1 -0
- package/lib/Stripe/RetrieveBillingMeter.d.ts +23 -0
- package/lib/Stripe/RetrieveBillingMeter.d.ts.map +1 -0
- package/lib/Stripe/RetrieveBillingMeter.js +3 -0
- package/lib/Stripe/RetrieveBillingMeter.js.map +1 -0
- package/lib/Stripe/RetrieveBillingMeterHttp.d.ts +10 -0
- package/lib/Stripe/RetrieveBillingMeterHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveBillingMeterHttp.js +17 -0
- package/lib/Stripe/RetrieveBillingMeterHttp.js.map +1 -0
- package/lib/Stripe/RetrieveBillingPortalConfiguration.d.ts +23 -0
- package/lib/Stripe/RetrieveBillingPortalConfiguration.d.ts.map +1 -0
- package/lib/Stripe/RetrieveBillingPortalConfiguration.js +3 -0
- package/lib/Stripe/RetrieveBillingPortalConfiguration.js.map +1 -0
- package/lib/Stripe/RetrieveBillingPortalConfigurationHttp.d.ts +10 -0
- package/lib/Stripe/RetrieveBillingPortalConfigurationHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveBillingPortalConfigurationHttp.js +17 -0
- package/lib/Stripe/RetrieveBillingPortalConfigurationHttp.js.map +1 -0
- package/lib/Stripe/RetrieveCoupon.d.ts +23 -0
- package/lib/Stripe/RetrieveCoupon.d.ts.map +1 -0
- package/lib/Stripe/RetrieveCoupon.js +3 -0
- package/lib/Stripe/RetrieveCoupon.js.map +1 -0
- package/lib/Stripe/RetrieveCouponHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveCouponHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveCouponHttp.js +18 -0
- package/lib/Stripe/RetrieveCouponHttp.js.map +1 -0
- package/lib/Stripe/RetrieveCreditGrant.d.ts +23 -0
- package/lib/Stripe/RetrieveCreditGrant.d.ts.map +1 -0
- package/lib/Stripe/RetrieveCreditGrant.js +3 -0
- package/lib/Stripe/RetrieveCreditGrant.js.map +1 -0
- package/lib/Stripe/RetrieveCreditGrantHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveCreditGrantHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveCreditGrantHttp.js +18 -0
- package/lib/Stripe/RetrieveCreditGrantHttp.js.map +1 -0
- package/lib/Stripe/RetrieveCustomer.d.ts +23 -0
- package/lib/Stripe/RetrieveCustomer.d.ts.map +1 -0
- package/lib/Stripe/RetrieveCustomer.js +3 -0
- package/lib/Stripe/RetrieveCustomer.js.map +1 -0
- package/lib/Stripe/RetrieveCustomerHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveCustomerHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveCustomerHttp.js +18 -0
- package/lib/Stripe/RetrieveCustomerHttp.js.map +1 -0
- package/lib/Stripe/RetrieveCustomerTaxId.d.ts +23 -0
- package/lib/Stripe/RetrieveCustomerTaxId.d.ts.map +1 -0
- package/lib/Stripe/RetrieveCustomerTaxId.js +3 -0
- package/lib/Stripe/RetrieveCustomerTaxId.js.map +1 -0
- package/lib/Stripe/RetrieveCustomerTaxIdHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveCustomerTaxIdHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveCustomerTaxIdHttp.js +31 -0
- package/lib/Stripe/RetrieveCustomerTaxIdHttp.js.map +1 -0
- package/lib/Stripe/RetrieveEntitlementsFeature.d.ts +23 -0
- package/lib/Stripe/RetrieveEntitlementsFeature.d.ts.map +1 -0
- package/lib/Stripe/RetrieveEntitlementsFeature.js +3 -0
- package/lib/Stripe/RetrieveEntitlementsFeature.js.map +1 -0
- package/lib/Stripe/RetrieveEntitlementsFeatureHttp.d.ts +10 -0
- package/lib/Stripe/RetrieveEntitlementsFeatureHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveEntitlementsFeatureHttp.js +17 -0
- package/lib/Stripe/RetrieveEntitlementsFeatureHttp.js.map +1 -0
- package/lib/Stripe/RetrieveFileLink.d.ts +23 -0
- package/lib/Stripe/RetrieveFileLink.d.ts.map +1 -0
- package/lib/Stripe/RetrieveFileLink.js +3 -0
- package/lib/Stripe/RetrieveFileLink.js.map +1 -0
- package/lib/Stripe/RetrieveFileLinkHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveFileLinkHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveFileLinkHttp.js +18 -0
- package/lib/Stripe/RetrieveFileLinkHttp.js.map +1 -0
- package/lib/Stripe/RetrieveIssuingCard.d.ts +23 -0
- package/lib/Stripe/RetrieveIssuingCard.d.ts.map +1 -0
- package/lib/Stripe/RetrieveIssuingCard.js +3 -0
- package/lib/Stripe/RetrieveIssuingCard.js.map +1 -0
- package/lib/Stripe/RetrieveIssuingCardHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveIssuingCardHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveIssuingCardHttp.js +18 -0
- package/lib/Stripe/RetrieveIssuingCardHttp.js.map +1 -0
- package/lib/Stripe/RetrieveIssuingCardholder.d.ts +23 -0
- package/lib/Stripe/RetrieveIssuingCardholder.d.ts.map +1 -0
- package/lib/Stripe/RetrieveIssuingCardholder.js +3 -0
- package/lib/Stripe/RetrieveIssuingCardholder.js.map +1 -0
- package/lib/Stripe/RetrieveIssuingCardholderHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveIssuingCardholderHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveIssuingCardholderHttp.js +18 -0
- package/lib/Stripe/RetrieveIssuingCardholderHttp.js.map +1 -0
- package/lib/Stripe/RetrieveIssuingPersonalizationDesign.d.ts +23 -0
- package/lib/Stripe/RetrieveIssuingPersonalizationDesign.d.ts.map +1 -0
- package/lib/Stripe/RetrieveIssuingPersonalizationDesign.js +3 -0
- package/lib/Stripe/RetrieveIssuingPersonalizationDesign.js.map +1 -0
- package/lib/Stripe/RetrieveIssuingPersonalizationDesignHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveIssuingPersonalizationDesignHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveIssuingPersonalizationDesignHttp.js +18 -0
- package/lib/Stripe/RetrieveIssuingPersonalizationDesignHttp.js.map +1 -0
- package/lib/Stripe/RetrievePaymentLink.d.ts +23 -0
- package/lib/Stripe/RetrievePaymentLink.d.ts.map +1 -0
- package/lib/Stripe/RetrievePaymentLink.js +3 -0
- package/lib/Stripe/RetrievePaymentLink.js.map +1 -0
- package/lib/Stripe/RetrievePaymentLinkHttp.d.ts +11 -0
- package/lib/Stripe/RetrievePaymentLinkHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrievePaymentLinkHttp.js +18 -0
- package/lib/Stripe/RetrievePaymentLinkHttp.js.map +1 -0
- package/lib/Stripe/RetrievePaymentMethodConfiguration.d.ts +23 -0
- package/lib/Stripe/RetrievePaymentMethodConfiguration.d.ts.map +1 -0
- package/lib/Stripe/RetrievePaymentMethodConfiguration.js +3 -0
- package/lib/Stripe/RetrievePaymentMethodConfiguration.js.map +1 -0
- package/lib/Stripe/RetrievePaymentMethodConfigurationHttp.d.ts +10 -0
- package/lib/Stripe/RetrievePaymentMethodConfigurationHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrievePaymentMethodConfigurationHttp.js +17 -0
- package/lib/Stripe/RetrievePaymentMethodConfigurationHttp.js.map +1 -0
- package/lib/Stripe/RetrievePaymentMethodDomain.d.ts +23 -0
- package/lib/Stripe/RetrievePaymentMethodDomain.d.ts.map +1 -0
- package/lib/Stripe/RetrievePaymentMethodDomain.js +3 -0
- package/lib/Stripe/RetrievePaymentMethodDomain.js.map +1 -0
- package/lib/Stripe/RetrievePaymentMethodDomainHttp.d.ts +10 -0
- package/lib/Stripe/RetrievePaymentMethodDomainHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrievePaymentMethodDomainHttp.js +17 -0
- package/lib/Stripe/RetrievePaymentMethodDomainHttp.js.map +1 -0
- package/lib/Stripe/RetrievePlan.d.ts +23 -0
- package/lib/Stripe/RetrievePlan.d.ts.map +1 -0
- package/lib/Stripe/RetrievePlan.js +3 -0
- package/lib/Stripe/RetrievePlan.js.map +1 -0
- package/lib/Stripe/RetrievePlanHttp.d.ts +11 -0
- package/lib/Stripe/RetrievePlanHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrievePlanHttp.js +18 -0
- package/lib/Stripe/RetrievePlanHttp.js.map +1 -0
- package/lib/Stripe/RetrievePrice.d.ts +23 -0
- package/lib/Stripe/RetrievePrice.d.ts.map +1 -0
- package/lib/Stripe/RetrievePrice.js +3 -0
- package/lib/Stripe/RetrievePrice.js.map +1 -0
- package/lib/Stripe/RetrievePriceHttp.d.ts +11 -0
- package/lib/Stripe/RetrievePriceHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrievePriceHttp.js +18 -0
- package/lib/Stripe/RetrievePriceHttp.js.map +1 -0
- package/lib/Stripe/RetrieveProduct.d.ts +30 -0
- package/lib/Stripe/RetrieveProduct.d.ts.map +1 -0
- package/lib/Stripe/RetrieveProduct.js +3 -0
- package/lib/Stripe/RetrieveProduct.js.map +1 -0
- package/lib/Stripe/RetrieveProductFeature.d.ts +23 -0
- package/lib/Stripe/RetrieveProductFeature.d.ts.map +1 -0
- package/lib/Stripe/RetrieveProductFeature.js +3 -0
- package/lib/Stripe/RetrieveProductFeature.js.map +1 -0
- package/lib/Stripe/RetrieveProductFeatureHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveProductFeatureHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveProductFeatureHttp.js +31 -0
- package/lib/Stripe/RetrieveProductFeatureHttp.js.map +1 -0
- package/lib/Stripe/RetrieveProductHttp.d.ts +12 -0
- package/lib/Stripe/RetrieveProductHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveProductHttp.js +33 -0
- package/lib/Stripe/RetrieveProductHttp.js.map +1 -0
- package/lib/Stripe/RetrievePromotionCode.d.ts +23 -0
- package/lib/Stripe/RetrievePromotionCode.d.ts.map +1 -0
- package/lib/Stripe/RetrievePromotionCode.js +3 -0
- package/lib/Stripe/RetrievePromotionCode.js.map +1 -0
- package/lib/Stripe/RetrievePromotionCodeHttp.d.ts +11 -0
- package/lib/Stripe/RetrievePromotionCodeHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrievePromotionCodeHttp.js +18 -0
- package/lib/Stripe/RetrievePromotionCodeHttp.js.map +1 -0
- package/lib/Stripe/RetrieveRadarValueList.d.ts +23 -0
- package/lib/Stripe/RetrieveRadarValueList.d.ts.map +1 -0
- package/lib/Stripe/RetrieveRadarValueList.js +3 -0
- package/lib/Stripe/RetrieveRadarValueList.js.map +1 -0
- package/lib/Stripe/RetrieveRadarValueListHttp.d.ts +10 -0
- package/lib/Stripe/RetrieveRadarValueListHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveRadarValueListHttp.js +17 -0
- package/lib/Stripe/RetrieveRadarValueListHttp.js.map +1 -0
- package/lib/Stripe/RetrieveRadarValueListItem.d.ts +23 -0
- package/lib/Stripe/RetrieveRadarValueListItem.d.ts.map +1 -0
- package/lib/Stripe/RetrieveRadarValueListItem.js +3 -0
- package/lib/Stripe/RetrieveRadarValueListItem.js.map +1 -0
- package/lib/Stripe/RetrieveRadarValueListItemHttp.d.ts +10 -0
- package/lib/Stripe/RetrieveRadarValueListItemHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveRadarValueListItemHttp.js +17 -0
- package/lib/Stripe/RetrieveRadarValueListItemHttp.js.map +1 -0
- package/lib/Stripe/RetrieveShippingRate.d.ts +23 -0
- package/lib/Stripe/RetrieveShippingRate.d.ts.map +1 -0
- package/lib/Stripe/RetrieveShippingRate.js +3 -0
- package/lib/Stripe/RetrieveShippingRate.js.map +1 -0
- package/lib/Stripe/RetrieveShippingRateHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveShippingRateHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveShippingRateHttp.js +18 -0
- package/lib/Stripe/RetrieveShippingRateHttp.js.map +1 -0
- package/lib/Stripe/RetrieveTaxRate.d.ts +23 -0
- package/lib/Stripe/RetrieveTaxRate.d.ts.map +1 -0
- package/lib/Stripe/RetrieveTaxRate.js +3 -0
- package/lib/Stripe/RetrieveTaxRate.js.map +1 -0
- package/lib/Stripe/RetrieveTaxRateHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveTaxRateHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveTaxRateHttp.js +18 -0
- package/lib/Stripe/RetrieveTaxRateHttp.js.map +1 -0
- package/lib/Stripe/RetrieveTaxRegistration.d.ts +23 -0
- package/lib/Stripe/RetrieveTaxRegistration.d.ts.map +1 -0
- package/lib/Stripe/RetrieveTaxRegistration.js +3 -0
- package/lib/Stripe/RetrieveTaxRegistration.js.map +1 -0
- package/lib/Stripe/RetrieveTaxRegistrationHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveTaxRegistrationHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveTaxRegistrationHttp.js +18 -0
- package/lib/Stripe/RetrieveTaxRegistrationHttp.js.map +1 -0
- package/lib/Stripe/RetrieveTaxSettings.d.ts +25 -0
- package/lib/Stripe/RetrieveTaxSettings.d.ts.map +1 -0
- package/lib/Stripe/RetrieveTaxSettings.js +3 -0
- package/lib/Stripe/RetrieveTaxSettings.js.map +1 -0
- package/lib/Stripe/RetrieveTaxSettingsHttp.d.ts +12 -0
- package/lib/Stripe/RetrieveTaxSettingsHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveTaxSettingsHttp.js +26 -0
- package/lib/Stripe/RetrieveTaxSettingsHttp.js.map +1 -0
- package/lib/Stripe/RetrieveTerminalConfiguration.d.ts +23 -0
- package/lib/Stripe/RetrieveTerminalConfiguration.d.ts.map +1 -0
- package/lib/Stripe/RetrieveTerminalConfiguration.js +3 -0
- package/lib/Stripe/RetrieveTerminalConfiguration.js.map +1 -0
- package/lib/Stripe/RetrieveTerminalConfigurationHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveTerminalConfigurationHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveTerminalConfigurationHttp.js +18 -0
- package/lib/Stripe/RetrieveTerminalConfigurationHttp.js.map +1 -0
- package/lib/Stripe/RetrieveTerminalLocation.d.ts +23 -0
- package/lib/Stripe/RetrieveTerminalLocation.d.ts.map +1 -0
- package/lib/Stripe/RetrieveTerminalLocation.js +3 -0
- package/lib/Stripe/RetrieveTerminalLocation.js.map +1 -0
- package/lib/Stripe/RetrieveTerminalLocationHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveTerminalLocationHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveTerminalLocationHttp.js +18 -0
- package/lib/Stripe/RetrieveTerminalLocationHttp.js.map +1 -0
- package/lib/Stripe/RetrieveTerminalReader.d.ts +23 -0
- package/lib/Stripe/RetrieveTerminalReader.d.ts.map +1 -0
- package/lib/Stripe/RetrieveTerminalReader.js +3 -0
- package/lib/Stripe/RetrieveTerminalReader.js.map +1 -0
- package/lib/Stripe/RetrieveTerminalReaderHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveTerminalReaderHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveTerminalReaderHttp.js +18 -0
- package/lib/Stripe/RetrieveTerminalReaderHttp.js.map +1 -0
- package/lib/Stripe/RetrieveWebhookEndpoint.d.ts +23 -0
- package/lib/Stripe/RetrieveWebhookEndpoint.d.ts.map +1 -0
- package/lib/Stripe/RetrieveWebhookEndpoint.js +3 -0
- package/lib/Stripe/RetrieveWebhookEndpoint.js.map +1 -0
- package/lib/Stripe/RetrieveWebhookEndpointHttp.d.ts +11 -0
- package/lib/Stripe/RetrieveWebhookEndpointHttp.d.ts.map +1 -0
- package/lib/Stripe/RetrieveWebhookEndpointHttp.js +18 -0
- package/lib/Stripe/RetrieveWebhookEndpointHttp.js.map +1 -0
- package/lib/Stripe/ShippingRate.d.ts +192 -0
- package/lib/Stripe/ShippingRate.d.ts.map +1 -0
- package/lib/Stripe/ShippingRate.js +375 -0
- package/lib/Stripe/ShippingRate.js.map +1 -0
- package/lib/Stripe/StripeHttp.d.ts +58 -0
- package/lib/Stripe/StripeHttp.d.ts.map +1 -0
- package/lib/Stripe/StripeHttp.js +110 -0
- package/lib/Stripe/StripeHttp.js.map +1 -0
- package/lib/Stripe/TaxRate.d.ts +153 -0
- package/lib/Stripe/TaxRate.d.ts.map +1 -0
- package/lib/Stripe/TaxRate.js +287 -0
- package/lib/Stripe/TaxRate.js.map +1 -0
- package/lib/Stripe/TaxRegistration.d.ts +275 -0
- package/lib/Stripe/TaxRegistration.d.ts.map +1 -0
- package/lib/Stripe/TaxRegistration.js +300 -0
- package/lib/Stripe/TaxRegistration.js.map +1 -0
- package/lib/Stripe/TaxSettings.d.ts +165 -0
- package/lib/Stripe/TaxSettings.d.ts.map +1 -0
- package/lib/Stripe/TaxSettings.js +207 -0
- package/lib/Stripe/TaxSettings.js.map +1 -0
- package/lib/Stripe/TerminalConfiguration.d.ts +368 -0
- package/lib/Stripe/TerminalConfiguration.d.ts.map +1 -0
- package/lib/Stripe/TerminalConfiguration.js +537 -0
- package/lib/Stripe/TerminalConfiguration.js.map +1 -0
- package/lib/Stripe/TerminalLocation.d.ts +215 -0
- package/lib/Stripe/TerminalLocation.d.ts.map +1 -0
- package/lib/Stripe/TerminalLocation.js +371 -0
- package/lib/Stripe/TerminalLocation.js.map +1 -0
- package/lib/Stripe/TerminalReader.d.ts +124 -0
- package/lib/Stripe/TerminalReader.d.ts.map +1 -0
- package/lib/Stripe/TerminalReader.js +239 -0
- package/lib/Stripe/TerminalReader.js.map +1 -0
- package/lib/Stripe/UpdateAccount.d.ts +23 -0
- package/lib/Stripe/UpdateAccount.d.ts.map +1 -0
- package/lib/Stripe/UpdateAccount.js +3 -0
- package/lib/Stripe/UpdateAccount.js.map +1 -0
- package/lib/Stripe/UpdateAccountHttp.d.ts +11 -0
- package/lib/Stripe/UpdateAccountHttp.d.ts.map +1 -0
- package/lib/Stripe/UpdateAccountHttp.js +18 -0
- package/lib/Stripe/UpdateAccountHttp.js.map +1 -0
- package/lib/Stripe/UpdateCreditGrant.d.ts +24 -0
- package/lib/Stripe/UpdateCreditGrant.d.ts.map +1 -0
- package/lib/Stripe/UpdateCreditGrant.js +3 -0
- package/lib/Stripe/UpdateCreditGrant.js.map +1 -0
- package/lib/Stripe/UpdateCreditGrantHttp.d.ts +11 -0
- package/lib/Stripe/UpdateCreditGrantHttp.d.ts.map +1 -0
- package/lib/Stripe/UpdateCreditGrantHttp.js +18 -0
- package/lib/Stripe/UpdateCreditGrantHttp.js.map +1 -0
- package/lib/Stripe/UpdateCustomer.d.ts +23 -0
- package/lib/Stripe/UpdateCustomer.d.ts.map +1 -0
- package/lib/Stripe/UpdateCustomer.js +3 -0
- package/lib/Stripe/UpdateCustomer.js.map +1 -0
- package/lib/Stripe/UpdateCustomerHttp.d.ts +11 -0
- package/lib/Stripe/UpdateCustomerHttp.d.ts.map +1 -0
- package/lib/Stripe/UpdateCustomerHttp.js +18 -0
- package/lib/Stripe/UpdateCustomerHttp.js.map +1 -0
- package/lib/Stripe/UpdateFileLink.d.ts +24 -0
- package/lib/Stripe/UpdateFileLink.d.ts.map +1 -0
- package/lib/Stripe/UpdateFileLink.js +3 -0
- package/lib/Stripe/UpdateFileLink.js.map +1 -0
- package/lib/Stripe/UpdateFileLinkHttp.d.ts +11 -0
- package/lib/Stripe/UpdateFileLinkHttp.d.ts.map +1 -0
- package/lib/Stripe/UpdateFileLinkHttp.js +18 -0
- package/lib/Stripe/UpdateFileLinkHttp.js.map +1 -0
- package/lib/Stripe/UpdateIssuingCard.d.ts +23 -0
- package/lib/Stripe/UpdateIssuingCard.d.ts.map +1 -0
- package/lib/Stripe/UpdateIssuingCard.js +3 -0
- package/lib/Stripe/UpdateIssuingCard.js.map +1 -0
- package/lib/Stripe/UpdateIssuingCardHttp.d.ts +11 -0
- package/lib/Stripe/UpdateIssuingCardHttp.d.ts.map +1 -0
- package/lib/Stripe/UpdateIssuingCardHttp.js +18 -0
- package/lib/Stripe/UpdateIssuingCardHttp.js.map +1 -0
- package/lib/Stripe/UpdateIssuingCardholder.d.ts +23 -0
- package/lib/Stripe/UpdateIssuingCardholder.d.ts.map +1 -0
- package/lib/Stripe/UpdateIssuingCardholder.js +3 -0
- package/lib/Stripe/UpdateIssuingCardholder.js.map +1 -0
- package/lib/Stripe/UpdateIssuingCardholderHttp.d.ts +11 -0
- package/lib/Stripe/UpdateIssuingCardholderHttp.d.ts.map +1 -0
- package/lib/Stripe/UpdateIssuingCardholderHttp.js +18 -0
- package/lib/Stripe/UpdateIssuingCardholderHttp.js.map +1 -0
- package/lib/Stripe/UpdateTaxSettings.d.ts +28 -0
- package/lib/Stripe/UpdateTaxSettings.d.ts.map +1 -0
- package/lib/Stripe/UpdateTaxSettings.js +3 -0
- package/lib/Stripe/UpdateTaxSettings.js.map +1 -0
- package/lib/Stripe/UpdateTaxSettingsHttp.d.ts +12 -0
- package/lib/Stripe/UpdateTaxSettingsHttp.d.ts.map +1 -0
- package/lib/Stripe/UpdateTaxSettingsHttp.js +26 -0
- package/lib/Stripe/UpdateTaxSettingsHttp.js.map +1 -0
- package/lib/Stripe/UpdateTerminalReader.d.ts +23 -0
- package/lib/Stripe/UpdateTerminalReader.d.ts.map +1 -0
- package/lib/Stripe/UpdateTerminalReader.js +3 -0
- package/lib/Stripe/UpdateTerminalReader.js.map +1 -0
- package/lib/Stripe/UpdateTerminalReaderHttp.d.ts +11 -0
- package/lib/Stripe/UpdateTerminalReaderHttp.d.ts.map +1 -0
- package/lib/Stripe/UpdateTerminalReaderHttp.js +18 -0
- package/lib/Stripe/UpdateTerminalReaderHttp.js.map +1 -0
- package/lib/Stripe/WebhookEndpoint.d.ts +135 -0
- package/lib/Stripe/WebhookEndpoint.d.ts.map +1 -0
- package/lib/Stripe/WebhookEndpoint.js +266 -0
- package/lib/Stripe/WebhookEndpoint.js.map +1 -0
- package/lib/Stripe/index.d.ts +151 -0
- package/lib/Stripe/index.d.ts.map +1 -0
- package/lib/Stripe/index.js +151 -0
- package/lib/Stripe/index.js.map +1 -0
- package/lib/Stripe/missing.d.ts +9 -0
- package/lib/Stripe/missing.d.ts.map +1 -0
- package/lib/Stripe/missing.js +13 -0
- package/lib/Stripe/missing.js.map +1 -0
- package/lib/Telemetry/Layer.d.ts +6 -0
- package/lib/Telemetry/Layer.d.ts.map +1 -1
- package/lib/Telemetry/Layer.js +16 -5
- package/lib/Telemetry/Layer.js.map +1 -1
- package/lib/Telemetry.d.ts +7 -61
- package/lib/Telemetry.d.ts.map +1 -1
- package/lib/Telemetry.js +9 -304
- package/lib/Telemetry.js.map +1 -1
- package/lib/TelemetryRuntime.d.ts +105 -0
- package/lib/TelemetryRuntime.d.ts.map +1 -0
- package/lib/TelemetryRuntime.js +308 -0
- package/lib/TelemetryRuntime.js.map +1 -0
- package/lib/Test/Alchemy.d.ts +2 -0
- package/lib/Test/Alchemy.d.ts.map +1 -1
- package/lib/Test/Alchemy.js +2 -0
- package/lib/Test/Alchemy.js.map +1 -1
- package/lib/Test/Bun.d.ts +2 -0
- package/lib/Test/Bun.d.ts.map +1 -1
- package/lib/Test/Bun.js +2 -0
- package/lib/Test/Bun.js.map +1 -1
- package/lib/Test/Core.d.ts +23 -4
- package/lib/Test/Core.d.ts.map +1 -1
- package/lib/Test/Core.js +24 -10
- package/lib/Test/Core.js.map +1 -1
- package/lib/Test/Vitest.d.ts +2 -0
- package/lib/Test/Vitest.d.ts.map +1 -1
- package/lib/Test/Vitest.js +2 -0
- package/lib/Test/Vitest.js.map +1 -1
- package/lib/Test/index.d.ts +1 -1
- package/lib/Test/index.d.ts.map +1 -1
- package/lib/Test/index.js +1 -1
- package/lib/Test/index.js.map +1 -1
- package/lib/UserFacingError.d.ts +26 -0
- package/lib/UserFacingError.d.ts.map +1 -0
- package/lib/UserFacingError.js +25 -0
- package/lib/UserFacingError.js.map +1 -0
- package/lib/Util/AtomicFile.d.ts +19 -0
- package/lib/Util/AtomicFile.d.ts.map +1 -0
- package/lib/Util/AtomicFile.js +22 -0
- package/lib/Util/AtomicFile.js.map +1 -0
- package/lib/Util/ConsoleSink.d.ts +4 -0
- package/lib/Util/ConsoleSink.d.ts.map +1 -0
- package/lib/Util/ConsoleSink.js +24 -0
- package/lib/Util/ConsoleSink.js.map +1 -0
- package/lib/Util/LineBuffer.d.ts +9 -0
- package/lib/Util/LineBuffer.d.ts.map +1 -0
- package/lib/Util/LineBuffer.js +23 -0
- package/lib/Util/LineBuffer.js.map +1 -0
- package/lib/Util/Memoize.d.ts +20 -0
- package/lib/Util/Memoize.d.ts.map +1 -0
- package/lib/Util/Memoize.js +38 -0
- package/lib/Util/Memoize.js.map +1 -0
- package/lib/Util/Node.d.ts +29 -5
- package/lib/Util/Node.d.ts.map +1 -1
- package/lib/Util/Node.js +37 -10
- package/lib/Util/Node.js.map +1 -1
- package/lib/Util/PlatformServices.d.ts +6 -2
- package/lib/Util/PlatformServices.d.ts.map +1 -1
- package/lib/Util/PlatformServices.js +6 -2
- package/lib/Util/PlatformServices.js.map +1 -1
- package/lib/Util/ResourceOutput.d.ts +30 -0
- package/lib/Util/ResourceOutput.d.ts.map +1 -0
- package/lib/Util/ResourceOutput.js +60 -0
- package/lib/Util/ResourceOutput.js.map +1 -0
- package/lib/Util/Terminal.d.ts +23 -0
- package/lib/Util/Terminal.d.ts.map +1 -0
- package/lib/Util/Terminal.js +56 -0
- package/lib/Util/Terminal.js.map +1 -0
- package/lib/Util/Theme.d.ts +123 -0
- package/lib/Util/Theme.d.ts.map +1 -0
- package/lib/Util/Theme.js +133 -0
- package/lib/Util/Theme.js.map +1 -0
- package/lib/Util/gitignore-rules-to-globs.d.ts +3 -3
- package/lib/Util/gitignore-rules-to-globs.js +3 -3
- package/lib/Util/interactive.d.ts +17 -12
- package/lib/Util/interactive.d.ts.map +1 -1
- package/lib/Util/interactive.js +81 -13
- package/lib/Util/interactive.js.map +1 -1
- package/lib/Util/proxy-chain.js +17 -0
- package/lib/Util/proxy-chain.js.map +1 -1
- package/lib/Util/scc.d.ts +11 -3
- package/lib/Util/scc.d.ts.map +1 -1
- package/lib/Util/scc.js +35 -22
- package/lib/Util/scc.js.map +1 -1
- package/lib/Util/tarGzip.d.ts +3 -1
- package/lib/Util/tarGzip.d.ts.map +1 -1
- package/lib/Util/tarGzip.js +15 -5
- package/lib/Util/tarGzip.js.map +1 -1
- package/lib/Util/zip.d.ts +2 -2
- package/lib/Util/zip.d.ts.map +1 -1
- package/lib/Util/zip.js +13 -38
- package/lib/Util/zip.js.map +1 -1
- package/lib/Utils/ip-address.d.ts +6 -0
- package/lib/Utils/ip-address.d.ts.map +1 -0
- package/lib/Utils/ip-address.js +83 -0
- package/lib/Utils/ip-address.js.map +1 -0
- package/lib/Website/Server.d.ts.map +1 -1
- package/lib/Website/Server.js +14 -4
- package/lib/Website/Server.js.map +1 -1
- package/lib/Website/ServerLocal.d.ts +2 -1
- package/lib/Website/ServerLocal.js +1 -2
- package/lib/Website/ServerLocal.js.map +1 -1
- package/lib/index.d.ts +3 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -2
- package/lib/index.js.map +1 -1
- package/package.json +94 -60
- package/src/AWS/AGENTS.md +1 -1
- package/src/AWS/AMP/Scraper.ts +1 -1
- package/src/AWS/AppRunner/Service.ts +11 -27
- package/src/AWS/Assets.ts +2 -2
- package/src/AWS/AuthProvider.ts +748 -429
- package/src/AWS/Batch/JobDefinition.ts +11 -27
- package/src/AWS/Bedrock/LanguageModel.ts +2 -2
- package/src/AWS/Budgets/BindingHttp.ts +2 -13
- package/src/AWS/Budgets/DescribeBudgetActionsForBudgetHttp.ts +0 -3
- package/src/AWS/CloudFront/KvRoutesUpdate.ts +20 -1
- package/src/AWS/Connection/DbAuthToken.ts +1 -1
- package/src/AWS/Credentials.ts +3 -3
- package/src/AWS/DSQL/Connect.ts +2 -2
- package/src/AWS/DynamoDB/Table.ts +33 -17
- package/src/AWS/EC2/Instance.ts +24 -29
- package/src/AWS/EC2/InternetGateway.ts +1 -1
- package/src/AWS/EC2/NatGateway.ts +1 -1
- package/src/AWS/EC2/NetworkInterface.ts +1 -1
- package/src/AWS/EC2/NetworkInterfaceAttachment.ts +1 -1
- package/src/AWS/EC2/RouteTable.ts +1 -1
- package/src/AWS/EC2/RouteTableAssociation.ts +1 -1
- package/src/AWS/EC2/SecurityGroup.ts +376 -79
- package/src/AWS/EC2/SecurityGroupRule.ts +147 -23
- package/src/AWS/EC2/Snapshot.ts +1 -1
- package/src/AWS/EC2/Subnet.ts +1 -1
- package/src/AWS/EC2/Volume.ts +1 -1
- package/src/AWS/EC2/VolumeAttachment.ts +1 -1
- package/src/AWS/EC2/Vpc.ts +1 -1
- package/src/AWS/EC2/VpcEndpoint.ts +1 -1
- package/src/AWS/EC2/hosted.ts +5 -6
- package/src/AWS/ECR/Image.ts +29 -7
- package/src/AWS/ECR/ImageSource.ts +4 -5
- package/src/AWS/ECS/FlociServiceProvider.ts +2 -2
- package/src/AWS/ECS/FlociTaskProvider.ts +2 -2
- package/src/AWS/ECS/Service.ts +13 -28
- package/src/AWS/ECS/Task.ts +7 -21
- package/src/AWS/EKS/KubernetesAdapter.ts +4 -4
- package/src/AWS/ElastiCache/CacheCluster.ts +323 -0
- package/src/AWS/ElastiCache/ConnectCacheCluster.ts +58 -0
- package/src/AWS/ElastiCache/ConnectCacheClusterHttp.ts +77 -0
- package/src/AWS/ElastiCache/ConnectReplicationGroup.ts +62 -0
- package/src/AWS/ElastiCache/ConnectReplicationGroupHttp.ts +110 -0
- package/src/AWS/ElastiCache/ReplicationGroup.ts +594 -0
- package/src/AWS/ElastiCache/SubnetGroup.ts +208 -0
- package/src/AWS/ElastiCache/index.ts +7 -0
- package/src/AWS/ElastiCache/internal.ts +36 -0
- package/src/AWS/Environment.ts +21 -54
- package/src/AWS/IAM/actions.generated.ts +1 -1
- package/src/AWS/IdentityCenter/AccountAssignment.ts +7 -0
- package/src/AWS/Lambda/BindingHttp.ts +237 -25
- package/src/AWS/Lambda/FlociFunctionProvider.ts +2 -2
- package/src/AWS/Lambda/FlociMicrovmImageProvider.ts +2 -2
- package/src/AWS/Lambda/Function.ts +62 -44
- package/src/AWS/Lambda/MicrovmBinding.ts +15 -276
- package/src/AWS/Lambda/MicrovmBundle.ts +1 -16
- package/src/AWS/Lambda/MicrovmImage.ts +12 -28
- package/src/AWS/Lambda/MicrovmProvider.ts +1 -1
- package/src/AWS/Lambda/MicrovmRuntimeContext.ts +1 -1
- package/src/AWS/Lambda/NetworkConnector.ts +1 -1
- package/src/AWS/Local/DevWatchProvider.ts +18 -8
- package/src/AWS/Local/Local.ts +11 -10
- package/src/AWS/Logs/LogGroup.ts +8 -2
- package/src/AWS/Organizations/Account.ts +18 -10
- package/src/AWS/Organizations/DelegatedAdministrator.ts +7 -7
- package/src/AWS/Organizations/Organization.ts +3 -5
- package/src/AWS/Organizations/common.ts +21 -1
- package/src/AWS/Providers.ts +12 -0
- package/src/AWS/RDS/Connect.ts +3 -3
- package/src/AWS/RDS/DBInstance.ts +979 -53
- package/src/AWS/RDS/DBParameterGroup.ts +89 -40
- package/src/AWS/S3/BindingHttp.ts +46 -37
- package/src/AWS/S3/Bucket.ts +221 -83
- package/src/AWS/S3/PresignGetObject.ts +2 -4
- package/src/AWS/S3/PresignPutObject.ts +2 -4
- package/src/AWS/SNS/Subscription.ts +29 -9
- package/src/AWS/StateStore/State.ts +24 -36
- package/src/AWS/Synthetics/Canary.ts +4 -11
- package/src/Alchemist/Entrypoint.ts +33 -0
- package/src/Alchemist/Errors.ts +36 -0
- package/src/Alchemist/Progress.ts +175 -0
- package/src/Alchemist/Runtime.ts +40 -0
- package/src/Alchemist/Session.ts +452 -0
- package/src/Alchemist/index.ts +24 -0
- package/src/Alchemist/routes/aws.ts +88 -0
- package/src/Alchemist/routes/cloudflare.ts +188 -0
- package/src/Alchemist/routes/cloudflareToken.ts +215 -0
- package/src/Alchemist/routes/drift.ts +94 -0
- package/src/Alchemist/routes/logs.ts +185 -0
- package/src/Alchemist/routes/nuke.ts +146 -0
- package/src/Alchemist/routes/profile.ts +427 -0
- package/src/Alchemist/routes/provider.ts +107 -0
- package/src/Alchemist/routes/stack.ts +137 -0
- package/src/Alchemist/routes/state.ts +90 -0
- package/src/Apply.ts +312 -173
- package/src/Auth/AuthProvider.ts +416 -158
- package/src/Auth/BrowserOAuth.ts +68 -0
- package/src/Auth/Credentials.ts +155 -46
- package/src/Auth/CredentialsCache.ts +57 -0
- package/src/Auth/Demand.ts +209 -84
- package/src/Auth/Env.ts +40 -16
- package/src/Auth/Inspect.ts +129 -0
- package/src/Auth/Lock.ts +48 -30
- package/src/Auth/OAuthFlow.ts +551 -0
- package/src/Auth/Paths.ts +30 -0
- package/src/Auth/Profile.ts +768 -164
- package/src/Auth/Resolve.ts +136 -0
- package/src/Auth/StoredAuthProvider.ts +291 -0
- package/src/Auth/index.ts +1 -0
- package/src/Axiom/AuthProvider.ts +112 -314
- package/src/Axiom/Credentials.ts +5 -13
- package/src/Axiom/Providers.ts +3 -3
- package/src/Bundle/Bundle.ts +3 -5
- package/src/Cli/CliKit/CliKit.ts +183 -0
- package/src/Cli/CliKit/index.ts +50 -0
- package/src/Cli/CliKit/interaction.ts +19 -0
- package/src/Cli/CliKit/layer.ts +50 -0
- package/src/Cli/DevOptions.ts +19 -0
- package/src/Cli/Format.ts +31 -0
- package/src/Cli/GlobalLog.ts +147 -0
- package/src/Cli/LoggingCli.ts +312 -108
- package/src/Cli/ModeTag.ts +1 -1
- package/src/Cli/NamespaceTree.ts +94 -21
- package/src/Cli/PlainCliFormatter.ts +75 -0
- package/src/Cli/PropertyDiff.ts +229 -0
- package/src/Cli/checkVersion.ts +19 -6
- package/src/Cli/commands/aws.ts +68 -101
- package/src/Cli/commands/cloudflare.ts +204 -444
- package/src/Cli/commands/compat.ts +25 -0
- package/src/Cli/commands/confirm.ts +46 -0
- package/src/Cli/commands/deploy.ts +226 -213
- package/src/Cli/commands/dev.ts +75 -34
- package/src/Cli/commands/drift.ts +107 -0
- package/src/Cli/commands/errors.ts +162 -0
- package/src/Cli/commands/flags.ts +203 -0
- package/src/Cli/commands/instrument.ts +27 -0
- package/src/Cli/commands/logs.ts +127 -145
- package/src/Cli/commands/nuke.ts +146 -819
- package/src/Cli/commands/profile/commands.ts +482 -0
- package/src/Cli/commands/profile/flows.ts +218 -0
- package/src/Cli/commands/profile/hub.ts +191 -0
- package/src/Cli/commands/profile/index.ts +1 -0
- package/src/Cli/commands/provider.ts +63 -0
- package/src/Cli/commands/render.ts +121 -0
- package/src/Cli/commands/state.ts +250 -387
- package/src/Cli/components/types.ts +141 -0
- package/src/Cli/components/ui/Data.tsx +44 -0
- package/src/Cli/components/ui/Environment.tsx +87 -0
- package/src/Cli/components/ui/Feedback.tsx +269 -0
- package/src/Cli/components/ui/Interactive.tsx +1061 -0
- package/src/Cli/components/ui/Layout.tsx +252 -0
- package/src/Cli/components/ui/Live.tsx +131 -0
- package/src/Cli/components/ui/ProgressBar.tsx +57 -0
- package/src/Cli/components/ui/Transcript.tsx +42 -0
- package/src/Cli/components/ui/Typography.tsx +83 -0
- package/src/Cli/components/ui/index.ts +68 -0
- package/src/Cli/components/view/ApprovePlan.tsx +102 -0
- package/src/Cli/components/view/Help.tsx +381 -0
- package/src/Cli/components/view/Logo.tsx +169 -0
- package/src/Cli/components/view/Nuke.tsx +258 -0
- package/src/Cli/components/view/PlanDecision.tsx +81 -0
- package/src/Cli/components/view/PlanRow.tsx +39 -0
- package/src/Cli/components/view/PlanTree.ts +354 -0
- package/src/Cli/components/view/PlanView.tsx +826 -0
- package/src/Cli/components/view/Profile.tsx +446 -0
- package/src/Cli/components/view/ProfileDashboard.tsx +930 -0
- package/src/Cli/components/view/Prompts.tsx +794 -0
- package/src/Cli/components/view/Runtime.tsx +976 -0
- package/src/Cli/components/view/SigilCli.tsx +186 -0
- package/src/Cli/components/view/StackOutputs.tsx +38 -0
- package/src/Cli/components/view/StateExplorer.tsx +1179 -0
- package/src/Cli/components/view/statusStyle.ts +97 -0
- package/src/Cli/components/view/usePlanPresentation.ts +82 -0
- package/src/Cli/components/view/usePlanViewport.ts +172 -0
- package/src/Cli/exec.ts +281 -32
- package/src/Cli/main.ts +188 -42
- package/src/Cli/selectCli.ts +30 -15
- package/src/Cloudflare/AI/GatewayProvider.ts +1 -1
- package/src/Cloudflare/AI/LanguageModel.ts +2 -2
- package/src/Cloudflare/AI/ProviderKey.ts +3 -3
- package/src/Cloudflare/AI/SearchToken.ts +3 -6
- package/src/Cloudflare/Access.ts +1 -1
- package/src/Cloudflare/Alerting/Webhook.ts +1 -1
- package/src/Cloudflare/ApiToken/UserApiToken.ts +1 -1
- package/src/Cloudflare/Auth/AuthConfig.ts +117 -0
- package/src/Cloudflare/Auth/AuthProvider.ts +712 -608
- package/src/Cloudflare/Auth/OAuthClient.ts +40 -366
- package/src/Cloudflare/Auth/OAuthScopes.ts +921 -0
- package/src/Cloudflare/Auth/TokenPolicy.ts +79 -0
- package/src/Cloudflare/Bridge.ts +9 -0
- package/src/Cloudflare/CloudflareEnvironment.ts +11 -25
- package/src/Cloudflare/CloudflareEnvironmentService.ts +10 -0
- package/src/Cloudflare/Containers/Container.ts +12 -24
- package/src/Cloudflare/Containers/ContainerApplication.ts +22 -30
- package/src/Cloudflare/Containers/ContainerPlatform.ts +6 -6
- package/src/Cloudflare/Containers/ContainerProvider.ts +183 -86
- package/src/Cloudflare/Containers/ContainerPublication.ts +13 -0
- package/src/Cloudflare/Containers/LocalContainerProvider.ts +3 -2
- package/src/Cloudflare/Credentials.ts +18 -72
- package/src/Cloudflare/D1/Database.ts +3 -3
- package/src/Cloudflare/EdgeSession.ts +2 -3
- package/src/Cloudflare/Fetcher.ts +65 -174
- package/src/Cloudflare/Flagship/Flag.ts +13 -2
- package/src/Cloudflare/HostnameTlsSetting/HostnameTlsSetting.ts +21 -41
- package/src/Cloudflare/Hyperdrive/Connection.ts +19 -12
- package/src/Cloudflare/Iam/ResourceGroup.ts +1 -1
- package/src/Cloudflare/LoadBalancer/LoadBalancer.ts +2 -2
- package/src/Cloudflare/LoadBalancer/Monitor.ts +1 -1
- package/src/Cloudflare/Local.ts +8 -4
- package/src/Cloudflare/LocalRuntime.ts +8 -2
- package/src/Cloudflare/Logs.ts +73 -59
- package/src/Cloudflare/MagicTransit/IpsecTunnel.ts +1 -1
- package/src/Cloudflare/MtlsCertificate/MtlsCertificate.ts +1 -1
- package/src/Cloudflare/Organization/Organization.ts +1 -1
- package/src/Cloudflare/OriginTlsClientAuth/Certificate.ts +2 -2
- package/src/Cloudflare/OriginTlsClientAuth/HostnameAssociation.ts +1 -1
- package/src/Cloudflare/OriginTlsClientAuth/HostnameCertificate.ts +2 -2
- package/src/Cloudflare/OriginTlsClientAuth/Setting.ts +1 -1
- package/src/Cloudflare/Pages/Project.ts +1 -1
- package/src/Cloudflare/Pipelines/LegacyPipeline.ts +2 -2
- package/src/Cloudflare/Pipelines/Sink.ts +3 -3
- package/src/Cloudflare/Providers.ts +13 -51
- package/src/Cloudflare/Queues/Consumer.ts +2 -2
- package/src/Cloudflare/Queues/Queue.ts +2 -2
- package/src/Cloudflare/R2/Bucket.ts +25 -2
- package/src/Cloudflare/R2/BucketBinding.ts +1 -0
- package/src/Cloudflare/R2/BucketSippy.ts +7 -7
- package/src/Cloudflare/R2/BucketTypes.ts +8 -0
- package/src/Cloudflare/R2/WriteBucketBinding.ts +9 -6
- package/src/Cloudflare/R2/index.ts +1 -0
- package/src/Cloudflare/SecretsStore/Secret.ts +3 -3
- package/src/Cloudflare/Snippets/SnippetRules.ts +9 -3
- package/src/Cloudflare/StateStore/Api.ts +2 -2
- package/src/Cloudflare/StateStore/CredentialsFile.ts +11 -6
- package/src/Cloudflare/StateStore/State.ts +262 -210
- package/src/Cloudflare/Vectorize/SearchIndexHttpClient.ts +2 -2
- package/src/Cloudflare/Website/Nextjs.ts +4 -15
- package/src/Cloudflare/Website/Nuxt.ts +1 -1
- package/src/Cloudflare/Website/Octane.ts +1 -1
- package/src/Cloudflare/Website/SvelteKit.ts +1 -1
- package/src/Cloudflare/Website/Vocs.ts +3 -7
- package/src/Cloudflare/Workers/Assets.ts +106 -38
- package/src/Cloudflare/Workers/BrowserHttpClient.ts +10 -3
- package/src/Cloudflare/Workers/CloudflareTracer.ts +113 -0
- package/src/Cloudflare/Workers/Compatibility.ts +37 -7
- package/src/Cloudflare/Workers/DurableObject.ts +90 -12
- package/src/Cloudflare/Workers/DurableObjectBridge.ts +9 -1
- package/src/Cloudflare/Workers/DurableObjectState.ts +46 -9
- package/src/Cloudflare/Workers/DurableObjectStorage.ts +46 -35
- package/src/Cloudflare/Workers/HttpServer.ts +2 -1
- package/src/Cloudflare/Workers/InferEnv.ts +2 -2
- package/src/Cloudflare/Workers/LocalWorkerProvider.ts +204 -79
- package/src/Cloudflare/Workers/Rpc.ts +17 -2
- package/src/Cloudflare/Workers/RpcAsync.ts +1 -1
- package/src/Cloudflare/Workers/RpcWorker.ts +44 -18
- package/src/Cloudflare/Workers/Source.ts +9 -1
- package/src/Cloudflare/Workers/Sources/Prebuilt.ts +3 -2
- package/src/Cloudflare/Workers/Sources/Python.ts +21 -14
- package/src/Cloudflare/Workers/Sources/Rolldown.ts +35 -19
- package/src/Cloudflare/Workers/Sources/Vite.ts +42 -34
- package/src/Cloudflare/Workers/Sources/WorkerModulePlugin.ts +75 -0
- package/src/Cloudflare/Workers/Telemetry.ts +170 -0
- package/src/Cloudflare/Workers/ViteBuildChildRunner.ts +6 -1
- package/src/Cloudflare/Workers/ViteChild.shared.ts +2 -0
- package/src/Cloudflare/Workers/ViteChild.ts +23 -22
- package/src/Cloudflare/Workers/ViteChildRunner.ts +2 -1
- package/src/Cloudflare/Workers/Worker.ts +277 -268
- package/src/Cloudflare/Workers/WorkerAsyncBindings.ts +29 -0
- package/src/Cloudflare/Workers/WorkerBinding.ts +1 -1
- package/src/Cloudflare/Workers/WorkerBridge.ts +6 -6
- package/src/Cloudflare/Workers/WorkerEntrypoint.ts +47 -14
- package/src/Cloudflare/Workers/WorkerLoader.ts +40 -8
- package/src/Cloudflare/Workers/WorkerProvider.ts +641 -59
- package/src/Cloudflare/Workers/WorkerRuntime.ts +195 -0
- package/src/Cloudflare/Workers/WorkerRuntimeContext.ts +10 -6
- package/src/Cloudflare/Workers/cloudflare_workers.ts +5 -1
- package/src/Cloudflare/Workers/index.ts +1 -0
- package/src/Cloudflare/Workers/worker-module.d.ts +9 -0
- package/src/Cloudflare/Workflows/Workflow.ts +105 -43
- package/src/Cloudflare/Workflows/WorkflowBridge.ts +14 -10
- package/src/Cloudflare/Workflows/WorkflowRuntime.ts +56 -0
- package/src/Cloudflare/index.ts +3 -1
- package/src/Command/Command.ts +11 -3
- package/src/Command/Dev.ts +35 -9
- package/src/Command/Local.ts +8 -2
- package/src/Command/Memo.ts +6 -7
- package/src/Docker/BuildHash.ts +75 -8
- package/src/Docker/Container.ts +1 -1
- package/src/Docker/Docker.ts +226 -81
- package/src/Docker/Image.ts +1 -1
- package/src/Docker/Registry.ts +1 -1
- package/src/Docker/RegistryError.ts +52 -0
- package/src/Docker/RemoteImage.ts +1 -1
- package/src/Docker/Service.ts +7 -21
- package/src/Docker/ServiceImage.ts +4 -5
- package/src/Docker/index.ts +5 -0
- package/src/{Sync.ts → Drift.ts} +161 -59
- package/src/Drizzle/Postgres.ts +3 -1
- package/src/Drizzle/Schema.ts +5 -7
- package/src/Fly/AuthProvider.ts +44 -232
- package/src/Fly/BucketBinding.ts +6 -6
- package/src/Fly/CheckpointHttp.ts +5 -2
- package/src/Fly/Credentials.ts +29 -16
- package/src/Fly/DecryptHttp.ts +5 -2
- package/src/Fly/EncryptHttp.ts +5 -2
- package/src/Fly/ExecHttp.ts +5 -2
- package/src/Fly/GetSecretHttp.ts +6 -3
- package/src/Fly/ListSecretsHttp.ts +5 -2
- package/src/Fly/Machine.ts +67 -20
- package/src/Fly/Providers.ts +2 -2
- package/src/Fly/RedisBinding.ts +2 -2
- package/src/Fly/Secret.ts +4 -4
- package/src/Fly/SecretHttp.ts +1 -1
- package/src/Fly/Service.ts +47 -23
- package/src/Fly/SignHttp.ts +5 -2
- package/src/Fly/Sprite.ts +2 -2
- package/src/Fly/VerifyHttp.ts +5 -2
- package/src/Fly/Website/AssetDeployment.ts +12 -9
- package/src/Fly/WriteSecretHttp.ts +5 -2
- package/src/Fly/replicas.ts +94 -10
- package/src/Git/Api/GitHub.ts +106 -0
- package/src/Git/Api/Internal.ts +27 -0
- package/src/Git/Api/Objects.ts +161 -0
- package/src/Git/Api/Protocol.ts +37 -0
- package/src/Git/Api/Pulls.ts +158 -0
- package/src/Git/Api/Refs.ts +96 -0
- package/src/Git/Api/Repos.ts +170 -0
- package/src/Git/Api/Schema.ts +552 -0
- package/src/Git/Api.ts +82 -0
- package/src/Git/BlobStore.ts +265 -0
- package/src/Git/BlobStoreS3.ts +265 -0
- package/src/Git/DESIGN.md +2098 -0
- package/src/Git/Engine.ts +461 -0
- package/src/Git/GitHubCompat.ts +713 -0
- package/src/Git/Hasher/Hasher.ts +360 -0
- package/src/Git/Hasher/Lambda.ts +126 -0
- package/src/Git/Hasher/LambdaEvent.ts +149 -0
- package/src/Git/Hasher/LambdaFunction.ts +46 -0
- package/src/Git/Hasher/Protocol.ts +309 -0
- package/src/Git/Hasher/WorkerLoader.ts +179 -0
- package/src/Git/Hasher/WorkerLoaderModule.ts +72 -0
- package/src/Git/Hasher/index.ts +39 -0
- package/src/Git/Http/ReceivePack.ts +133 -0
- package/src/Git/Http.ts +4 -0
- package/src/Git/Jobs/Bundle.ts +264 -0
- package/src/Git/Jobs/Compact.ts +517 -0
- package/src/Git/Jobs/Fork.ts +376 -0
- package/src/Git/Jobs/Import.ts +435 -0
- package/src/Git/Jobs/Purge.ts +136 -0
- package/src/Git/Operations.ts +1087 -0
- package/src/Git/Protocol/Advertise.ts +159 -0
- package/src/Git/Protocol/Delta.ts +182 -0
- package/src/Git/Protocol/GzipBody.ts +153 -0
- package/src/Git/Protocol/ObjectCodec.ts +941 -0
- package/src/Git/Protocol/PackParser.ts +907 -0
- package/src/Git/Protocol/PackWriter.ts +141 -0
- package/src/Git/Protocol/PartialScan.ts +705 -0
- package/src/Git/Protocol/Pkt.ts +289 -0
- package/src/Git/Protocol/ReceivePack.ts +446 -0
- package/src/Git/Protocol/Sideband.ts +289 -0
- package/src/Git/Protocol/Store.ts +176 -0
- package/src/Git/Protocol/TreeDiff.ts +464 -0
- package/src/Git/Protocol/UploadPack.ts +366 -0
- package/src/Git/Protocol/Zlib.ts +350 -0
- package/src/Git/Push.ts +71 -0
- package/src/Git/PushInput.ts +73 -0
- package/src/Git/PushWire.ts +90 -0
- package/src/Git/RFC-building-blocks.md +548 -0
- package/src/Git/RegistryD1.ts +338 -0
- package/src/Git/RegistryObject.ts +522 -0
- package/src/Git/RepoObject.ts +5876 -0
- package/src/Git/Server.ts +827 -0
- package/src/Git/Store/Closure.ts +539 -0
- package/src/Git/Store/HeadSnapshot.ts +49 -0
- package/src/Git/Store/IncomingBody.ts +67 -0
- package/src/Git/Store/Keys.ts +129 -0
- package/src/Git/Store/ObjectStore.ts +1086 -0
- package/src/Git/Store/PackSource.ts +160 -0
- package/src/Git/Store/Sql.ts +492 -0
- package/src/Git/Store/StreamingSource.ts +335 -0
- package/src/Git/index.ts +75 -0
- package/src/GitHub/AuthProvider.ts +225 -143
- package/src/GitHub/BranchProtection.ts +651 -0
- package/src/GitHub/Collaborator.ts +239 -0
- package/src/GitHub/Credentials.ts +6 -13
- package/src/GitHub/Env.ts +8 -8
- package/src/GitHub/Issue.ts +379 -0
- package/src/GitHub/Label.ts +373 -0
- package/src/GitHub/Milestone.ts +424 -0
- package/src/GitHub/Providers.ts +37 -5
- package/src/GitHub/PullRequest.ts +570 -0
- package/src/GitHub/Release.ts +520 -0
- package/src/GitHub/Ruleset.ts +568 -0
- package/src/GitHub/TeamAccess.ts +251 -0
- package/src/GitHub/WikiPage.ts +581 -0
- package/src/GitHub/index.ts +10 -0
- package/src/Hetzner/AuthProvider.ts +50 -238
- package/src/Hetzner/Credentials.ts +4 -12
- package/src/Hetzner/Providers.ts +2 -2
- package/src/Hetzner/Server.ts +34 -6
- package/src/Http/Platform.ts +47 -0
- package/src/Http/index.ts +5 -0
- package/src/Http.ts +9 -5
- package/src/Interaction.ts +354 -0
- package/src/Kubernetes/ClusterAdapter.ts +4 -5
- package/src/Kubernetes/Deployment.ts +7 -21
- package/src/Kubernetes/Job.ts +7 -21
- package/src/Kubernetes/internal/helm.ts +1 -1
- package/src/Kubernetes/internal/kubeconfig.ts +1 -1
- package/src/Kubernetes/internal/workload.ts +4 -4
- package/src/Local/DevLog.ts +135 -0
- package/src/Local/LocalProvider.ts +7 -6
- package/src/Local/ProviderLayer.ts +31 -15
- package/src/Local/RpcProvider.ts +3 -3
- package/src/Local/RpcProviderProxy.ts +28 -21
- package/src/Local/RpcServer.ts +101 -53
- package/src/Local/RpcServerEnvironment.ts +4 -3
- package/src/Local/RpcSpawner.ts +161 -78
- package/src/Local/Sidecar.ts +32 -0
- package/src/Neon/AuthProvider.ts +31 -203
- package/src/Neon/Credentials.ts +4 -12
- package/src/Neon/Providers.ts +2 -2
- package/src/Nuke.ts +467 -0
- package/src/Output.ts +1 -1
- package/src/Phase.ts +3 -3
- package/src/Plan.ts +931 -712
- package/src/Planetscale/AuthProvider.ts +397 -324
- package/src/Planetscale/Credentials.ts +21 -19
- package/src/Planetscale/OAuthClient.ts +34 -328
- package/src/Planetscale/Providers.ts +2 -2
- package/src/Planetscale/Util.ts +1 -1
- package/src/Prisma/App.ts +126 -80
- package/src/Prisma/AuthProvider.ts +62 -240
- package/src/Prisma/Branch.ts +133 -66
- package/src/Prisma/Bucket.ts +64 -25
- package/src/Prisma/BucketAccessKey.ts +68 -32
- package/src/Prisma/Client.ts +8 -11
- package/src/Prisma/Compute.ts +362 -200
- package/src/Prisma/ComputeArchive.ts +29 -3
- package/src/Prisma/ComputeBuild.ts +256 -3
- package/src/Prisma/ComputeLifecycle.ts +179 -160
- package/src/Prisma/Connection.ts +112 -55
- package/src/Prisma/Credentials.ts +73 -0
- package/src/Prisma/Database.ts +191 -155
- package/src/Prisma/Deployment.ts +70 -50
- package/src/Prisma/EnvironmentVariable.ts +112 -69
- package/src/Prisma/Internal/AppPromotion.ts +39 -27
- package/src/Prisma/Internal/DatabaseSecrets.ts +23 -19
- package/src/Prisma/Internal/DeploymentActions.ts +24 -40
- package/src/Prisma/Internal/DeploymentIdentity.ts +29 -3
- package/src/Prisma/Internal/DeploymentObserve.ts +4 -5
- package/src/Prisma/Internal/LogsClient.ts +165 -0
- package/src/Prisma/Internal/Observed.ts +192 -0
- package/src/Prisma/Internal/Pagination.ts +16 -0
- package/src/Prisma/Operations.ts +3 -2
- package/src/Prisma/PrismaEnvironment.ts +8 -16
- package/src/Prisma/PrismaLogs.ts +38 -16
- package/src/Prisma/Project.ts +163 -129
- package/src/Prisma/Providers.ts +44 -9
- package/src/Prisma/SourceRepository.ts +223 -87
- package/src/Provider.ts +31 -28
- package/src/Railway/AuditLog.ts +41 -17
- package/src/Railway/AuthProvider.ts +292 -236
- package/src/Railway/Bucket.ts +96 -65
- package/src/Railway/BucketBinding.ts +7 -7
- package/src/Railway/Catalog.ts +8 -1
- package/src/Railway/CloudAgent.ts +73 -56
- package/src/Railway/Credentials.ts +5 -14
- package/src/Railway/CustomDomain.ts +112 -67
- package/src/Railway/Environment.ts +18 -7
- package/src/Railway/Function.ts +169 -136
- package/src/Railway/GraphQL.ts +215 -0
- package/src/Railway/Group.ts +172 -72
- package/src/Railway/LoginSession.ts +12 -17
- package/src/Railway/Mongo.ts +236 -194
- package/src/Railway/MountVolume.ts +5 -4
- package/src/Railway/MySQL.ts +236 -194
- package/src/Railway/Postgres.ts +243 -197
- package/src/Railway/PrivateNetwork.ts +444 -310
- package/src/Railway/Project.ts +86 -64
- package/src/Railway/ProjectEnvironment.ts +87 -58
- package/src/Railway/Providers.ts +8 -4
- package/src/Railway/Redis.ts +118 -93
- package/src/Railway/RedisBinding.ts +2 -2
- package/src/Railway/Sandbox.ts +282 -133
- package/src/Railway/SandboxCheckpoint.ts +290 -0
- package/src/Railway/Service.ts +76 -2
- package/src/Railway/ServiceDomain.ts +279 -63
- package/src/Railway/ServiceProvider.ts +500 -238
- package/src/Railway/TcpProxy.ts +50 -37
- package/src/Railway/Template.ts +190 -136
- package/src/Railway/Usage.ts +93 -47
- package/src/Railway/Variable.ts +35 -35
- package/src/Railway/Volume.ts +150 -90
- package/src/Railway/VolumeBackup.ts +144 -101
- package/src/Railway/Website/Cdn.ts +136 -55
- package/src/Railway/hosted.ts +10 -3
- package/src/Railway/index.ts +1 -0
- package/src/Railway/local-context.ts +333 -0
- package/src/Railway/transient.ts +26 -52
- package/src/Report.ts +365 -0
- package/src/Rpc.ts +53 -1
- package/src/Runtime/Bootstrap/Process.ts +2 -2
- package/src/Runtime.ts +1 -1
- package/src/RuntimeContext.ts +1 -1
- package/src/SQL/Postgres.ts +5 -1
- package/src/SQL/PostgresTls.ts +70 -0
- package/src/Server/Process.ts +1 -1
- package/src/Server/index.ts +0 -2
- package/src/Stack.ts +14 -9
- package/src/StackContext.ts +6 -0
- package/src/State/Export.ts +28 -47
- package/src/State/HttpStateStore.ts +31 -37
- package/src/State/LocalState.ts +6 -16
- package/src/State/PostgresState.ts +6 -5
- package/src/State/State.ts +5 -0
- package/src/State/Tree.ts +277 -0
- package/src/State/index.ts +1 -0
- package/src/Stripe/Account.ts +795 -0
- package/src/Stripe/AccountExternalAccount.ts +568 -0
- package/src/Stripe/AccountPerson.ts +562 -0
- package/src/Stripe/Alert.ts +437 -0
- package/src/Stripe/ApplePayDomain.ts +254 -0
- package/src/Stripe/AppsSecret.ts +385 -0
- package/src/Stripe/AuthProvider.ts +74 -0
- package/src/Stripe/BillingMeter.ts +449 -0
- package/src/Stripe/BillingPortalConfiguration.ts +920 -0
- package/src/Stripe/ConsumeEvents.ts +278 -0
- package/src/Stripe/Coupon.ts +535 -0
- package/src/Stripe/CreateAccount.ts +39 -0
- package/src/Stripe/CreateAccountHttp.ts +20 -0
- package/src/Stripe/CreateAccountLink.ts +43 -0
- package/src/Stripe/CreateAccountLinkHttp.ts +20 -0
- package/src/Stripe/CreateAppsSecret.ts +39 -0
- package/src/Stripe/CreateAppsSecretHttp.ts +20 -0
- package/src/Stripe/CreateBillingPortalSession.ts +52 -0
- package/src/Stripe/CreateBillingPortalSessionHttp.ts +20 -0
- package/src/Stripe/CreateCheckoutSession.ts +53 -0
- package/src/Stripe/CreateCheckoutSessionHttp.ts +20 -0
- package/src/Stripe/CreateCreditGrant.ts +45 -0
- package/src/Stripe/CreateCreditGrantHttp.ts +20 -0
- package/src/Stripe/CreateCustomer.ts +38 -0
- package/src/Stripe/CreateCustomerHttp.ts +20 -0
- package/src/Stripe/CreateFileLink.ts +37 -0
- package/src/Stripe/CreateFileLinkHttp.ts +20 -0
- package/src/Stripe/CreateIssuingCard.ts +43 -0
- package/src/Stripe/CreateIssuingCardHttp.ts +20 -0
- package/src/Stripe/CreateIssuingCardholder.ts +50 -0
- package/src/Stripe/CreateIssuingCardholderHttp.ts +20 -0
- package/src/Stripe/CreateTerminalReader.ts +43 -0
- package/src/Stripe/CreateTerminalReaderHttp.ts +20 -0
- package/src/Stripe/Credentials.ts +54 -0
- package/src/Stripe/CreditGrant.ts +627 -0
- package/src/Stripe/Customer.ts +315 -0
- package/src/Stripe/CustomerTaxId.ts +351 -0
- package/src/Stripe/EntitlementsFeature.ts +384 -0
- package/src/Stripe/Events.ts +94 -0
- package/src/Stripe/FileLink.ts +335 -0
- package/src/Stripe/IssuingCard.ts +712 -0
- package/src/Stripe/IssuingCardholder.ts +907 -0
- package/src/Stripe/IssuingPersonalizationDesign.ts +582 -0
- package/src/Stripe/Metadata.ts +93 -0
- package/src/Stripe/PaymentLink.ts +779 -0
- package/src/Stripe/PaymentMethodConfiguration.ts +619 -0
- package/src/Stripe/PaymentMethodDomain.ts +342 -0
- package/src/Stripe/Plan.ts +482 -0
- package/src/Stripe/Price.ts +523 -0
- package/src/Stripe/Product.ts +339 -0
- package/src/Stripe/ProductFeature.ts +300 -0
- package/src/Stripe/PromotionCode.ts +612 -0
- package/src/Stripe/Providers.ts +306 -0
- package/src/Stripe/RadarValueList.ts +397 -0
- package/src/Stripe/RadarValueListItem.ts +308 -0
- package/src/Stripe/RestrictedApiKey.ts +210 -0
- package/src/Stripe/RetrieveAccount.ts +42 -0
- package/src/Stripe/RetrieveAccountExternalAccount.ts +47 -0
- package/src/Stripe/RetrieveAccountExternalAccountHttp.ts +52 -0
- package/src/Stripe/RetrieveAccountHttp.ts +21 -0
- package/src/Stripe/RetrieveAccountPerson.ts +42 -0
- package/src/Stripe/RetrieveAccountPersonHttp.ts +52 -0
- package/src/Stripe/RetrieveAlert.ts +42 -0
- package/src/Stripe/RetrieveAlertHttp.ts +20 -0
- package/src/Stripe/RetrieveApplePayDomain.ts +46 -0
- package/src/Stripe/RetrieveApplePayDomainHttp.ts +21 -0
- package/src/Stripe/RetrieveAppsSecret.ts +47 -0
- package/src/Stripe/RetrieveAppsSecretHttp.ts +58 -0
- package/src/Stripe/RetrieveBillingMeter.ts +42 -0
- package/src/Stripe/RetrieveBillingMeterHttp.ts +20 -0
- package/src/Stripe/RetrieveBillingPortalConfiguration.ts +47 -0
- package/src/Stripe/RetrieveBillingPortalConfigurationHttp.ts +20 -0
- package/src/Stripe/RetrieveCoupon.ts +42 -0
- package/src/Stripe/RetrieveCouponHttp.ts +21 -0
- package/src/Stripe/RetrieveCreditGrant.ts +46 -0
- package/src/Stripe/RetrieveCreditGrantHttp.ts +21 -0
- package/src/Stripe/RetrieveCustomer.ts +42 -0
- package/src/Stripe/RetrieveCustomerHttp.ts +21 -0
- package/src/Stripe/RetrieveCustomerTaxId.ts +42 -0
- package/src/Stripe/RetrieveCustomerTaxIdHttp.ts +52 -0
- package/src/Stripe/RetrieveEntitlementsFeature.ts +47 -0
- package/src/Stripe/RetrieveEntitlementsFeatureHttp.ts +20 -0
- package/src/Stripe/RetrieveFileLink.ts +42 -0
- package/src/Stripe/RetrieveFileLinkHttp.ts +21 -0
- package/src/Stripe/RetrieveIssuingCard.ts +42 -0
- package/src/Stripe/RetrieveIssuingCardHttp.ts +21 -0
- package/src/Stripe/RetrieveIssuingCardholder.ts +47 -0
- package/src/Stripe/RetrieveIssuingCardholderHttp.ts +21 -0
- package/src/Stripe/RetrieveIssuingPersonalizationDesign.ts +47 -0
- package/src/Stripe/RetrieveIssuingPersonalizationDesignHttp.ts +21 -0
- package/src/Stripe/RetrievePaymentLink.ts +42 -0
- package/src/Stripe/RetrievePaymentLinkHttp.ts +21 -0
- package/src/Stripe/RetrievePaymentMethodConfiguration.ts +47 -0
- package/src/Stripe/RetrievePaymentMethodConfigurationHttp.ts +20 -0
- package/src/Stripe/RetrievePaymentMethodDomain.ts +47 -0
- package/src/Stripe/RetrievePaymentMethodDomainHttp.ts +20 -0
- package/src/Stripe/RetrievePlan.ts +39 -0
- package/src/Stripe/RetrievePlanHttp.ts +21 -0
- package/src/Stripe/RetrievePrice.ts +39 -0
- package/src/Stripe/RetrievePriceHttp.ts +21 -0
- package/src/Stripe/RetrieveProduct.ts +46 -0
- package/src/Stripe/RetrieveProductFeature.ts +46 -0
- package/src/Stripe/RetrieveProductFeatureHttp.ts +52 -0
- package/src/Stripe/RetrieveProductHttp.ts +58 -0
- package/src/Stripe/RetrievePromotionCode.ts +46 -0
- package/src/Stripe/RetrievePromotionCodeHttp.ts +21 -0
- package/src/Stripe/RetrieveRadarValueList.ts +46 -0
- package/src/Stripe/RetrieveRadarValueListHttp.ts +20 -0
- package/src/Stripe/RetrieveRadarValueListItem.ts +47 -0
- package/src/Stripe/RetrieveRadarValueListItemHttp.ts +20 -0
- package/src/Stripe/RetrieveShippingRate.ts +42 -0
- package/src/Stripe/RetrieveShippingRateHttp.ts +21 -0
- package/src/Stripe/RetrieveTaxRate.ts +42 -0
- package/src/Stripe/RetrieveTaxRateHttp.ts +21 -0
- package/src/Stripe/RetrieveTaxRegistration.ts +46 -0
- package/src/Stripe/RetrieveTaxRegistrationHttp.ts +21 -0
- package/src/Stripe/RetrieveTaxSettings.ts +41 -0
- package/src/Stripe/RetrieveTaxSettingsHttp.ts +46 -0
- package/src/Stripe/RetrieveTerminalConfiguration.ts +47 -0
- package/src/Stripe/RetrieveTerminalConfigurationHttp.ts +21 -0
- package/src/Stripe/RetrieveTerminalLocation.ts +45 -0
- package/src/Stripe/RetrieveTerminalLocationHttp.ts +21 -0
- package/src/Stripe/RetrieveTerminalReader.ts +46 -0
- package/src/Stripe/RetrieveTerminalReaderHttp.ts +21 -0
- package/src/Stripe/RetrieveWebhookEndpoint.ts +46 -0
- package/src/Stripe/RetrieveWebhookEndpointHttp.ts +21 -0
- package/src/Stripe/ShippingRate.ts +614 -0
- package/src/Stripe/StripeHttp.ts +241 -0
- package/src/Stripe/TaxRate.ts +468 -0
- package/src/Stripe/TaxRegistration.ts +722 -0
- package/src/Stripe/TaxSettings.ts +395 -0
- package/src/Stripe/TerminalConfiguration.ts +977 -0
- package/src/Stripe/TerminalLocation.ts +627 -0
- package/src/Stripe/TerminalReader.ts +377 -0
- package/src/Stripe/UpdateAccount.ts +42 -0
- package/src/Stripe/UpdateAccountHttp.ts +21 -0
- package/src/Stripe/UpdateCreditGrant.ts +47 -0
- package/src/Stripe/UpdateCreditGrantHttp.ts +21 -0
- package/src/Stripe/UpdateCustomer.ts +42 -0
- package/src/Stripe/UpdateCustomerHttp.ts +21 -0
- package/src/Stripe/UpdateFileLink.ts +43 -0
- package/src/Stripe/UpdateFileLinkHttp.ts +21 -0
- package/src/Stripe/UpdateIssuingCard.ts +46 -0
- package/src/Stripe/UpdateIssuingCardHttp.ts +21 -0
- package/src/Stripe/UpdateIssuingCardholder.ts +46 -0
- package/src/Stripe/UpdateIssuingCardholderHttp.ts +21 -0
- package/src/Stripe/UpdateTaxSettings.ts +48 -0
- package/src/Stripe/UpdateTaxSettingsHttp.ts +46 -0
- package/src/Stripe/UpdateTerminalReader.ts +46 -0
- package/src/Stripe/UpdateTerminalReaderHttp.ts +21 -0
- package/src/Stripe/WebhookEndpoint.ts +411 -0
- package/src/Stripe/index.ts +150 -0
- package/src/Stripe/missing.ts +16 -0
- package/src/Telemetry/Layer.ts +16 -5
- package/src/Telemetry.ts +21 -440
- package/src/TelemetryRuntime.ts +446 -0
- package/src/Test/Alchemy.ts +2 -0
- package/src/Test/Bun.ts +2 -0
- package/src/Test/Core.ts +42 -13
- package/src/Test/Vitest.ts +2 -0
- package/src/Test/index.ts +6 -1
- package/src/UserFacingError.ts +35 -0
- package/src/Util/AtomicFile.ts +36 -0
- package/src/Util/ConsoleSink.ts +23 -0
- package/src/Util/LineBuffer.ts +20 -0
- package/src/Util/Memoize.ts +48 -0
- package/src/Util/Node.ts +44 -14
- package/src/Util/PlatformServices.ts +11 -1
- package/src/Util/ResourceOutput.ts +77 -0
- package/src/Util/Terminal.ts +81 -0
- package/src/Util/Theme.ts +150 -0
- package/src/Util/gitignore-rules-to-globs.ts +3 -3
- package/src/Util/interactive.ts +103 -16
- package/src/Util/proxy-chain.ts +19 -0
- package/src/Util/scc.ts +43 -23
- package/src/Util/tarGzip.ts +33 -5
- package/src/Util/zip.ts +16 -45
- package/src/Utils/ip-address.ts +90 -0
- package/src/Website/Server.ts +19 -4
- package/src/Website/ServerLocal.ts +6 -2
- package/src/index.ts +3 -2
- package/lib/AWS/Website/ServerLocal.d.ts +0 -2
- package/lib/AWS/Website/ServerLocal.d.ts.map +0 -1
- package/lib/AWS/Website/ServerLocal.js +0 -4
- package/lib/AWS/Website/ServerLocal.js.map +0 -1
- package/lib/Cli/Cli.d.ts +0 -21
- package/lib/Cli/Cli.d.ts.map +0 -1
- package/lib/Cli/Cli.js +0 -5
- package/lib/Cli/Cli.js.map +0 -1
- package/lib/Cli/Event.d.ts +0 -29
- package/lib/Cli/Event.d.ts.map +0 -1
- package/lib/Cli/Event.js +0 -1
- package/lib/Cli/Event.js.map +0 -1
- package/lib/Cli/commands/_shared.d.ts +0 -138
- package/lib/Cli/commands/_shared.d.ts.map +0 -1
- package/lib/Cli/commands/_shared.js +0 -298
- package/lib/Cli/commands/_shared.js.map +0 -1
- package/lib/Cli/commands/login.d.ts +0 -14
- package/lib/Cli/commands/login.d.ts.map +0 -1
- package/lib/Cli/commands/login.js +0 -115
- package/lib/Cli/commands/login.js.map +0 -1
- package/lib/Cli/commands/profile.d.ts +0 -25
- package/lib/Cli/commands/profile.d.ts.map +0 -1
- package/lib/Cli/commands/profile.js +0 -83
- package/lib/Cli/commands/profile.js.map +0 -1
- package/lib/Cli/commands/sync.d.ts +0 -22
- package/lib/Cli/commands/sync.d.ts.map +0 -1
- package/lib/Cli/commands/sync.js +0 -64
- package/lib/Cli/commands/sync.js.map +0 -1
- package/lib/Cli/commands/tail.d.ts +0 -9
- package/lib/Cli/commands/tail.d.ts.map +0 -1
- package/lib/Cli/commands/tail.js +0 -97
- package/lib/Cli/commands/tail.js.map +0 -1
- package/lib/Cli/tui/InkCLI.d.ts +0 -4
- package/lib/Cli/tui/InkCLI.d.ts.map +0 -1
- package/lib/Cli/tui/InkCLI.js +0 -53
- package/lib/Cli/tui/InkCLI.js.map +0 -1
- package/lib/Cli/tui/components/ApprovePlan.d.ts +0 -9
- package/lib/Cli/tui/components/ApprovePlan.d.ts.map +0 -1
- package/lib/Cli/tui/components/ApprovePlan.js +0 -21
- package/lib/Cli/tui/components/ApprovePlan.js.map +0 -1
- package/lib/Cli/tui/components/Nuke.d.ts +0 -36
- package/lib/Cli/tui/components/Nuke.d.ts.map +0 -1
- package/lib/Cli/tui/components/Nuke.js +0 -132
- package/lib/Cli/tui/components/Nuke.js.map +0 -1
- package/lib/Cli/tui/components/Plan.d.ts +0 -8
- package/lib/Cli/tui/components/Plan.d.ts.map +0 -1
- package/lib/Cli/tui/components/Plan.js +0 -87
- package/lib/Cli/tui/components/Plan.js.map +0 -1
- package/lib/Cli/tui/components/PlanProgress.d.ts +0 -55
- package/lib/Cli/tui/components/PlanProgress.d.ts.map +0 -1
- package/lib/Cli/tui/components/PlanProgress.js +0 -292
- package/lib/Cli/tui/components/PlanProgress.js.map +0 -1
- package/lib/Railway/RetryPolicy.d.ts +0 -22
- package/lib/Railway/RetryPolicy.d.ts.map +0 -1
- package/lib/Railway/RetryPolicy.js +0 -43
- package/lib/Railway/RetryPolicy.js.map +0 -1
- package/lib/Sync.d.ts +0 -109
- package/lib/Sync.d.ts.map +0 -1
- package/lib/Sync.js.map +0 -1
- package/lib/Util/Clank.d.ts +0 -45
- package/lib/Util/Clank.d.ts.map +0 -1
- package/lib/Util/Clank.js +0 -79
- package/lib/Util/Clank.js.map +0 -1
- package/src/AWS/Website/ServerLocal.ts +0 -4
- package/src/Cli/Cli.ts +0 -23
- package/src/Cli/Event.ts +0 -51
- package/src/Cli/commands/_shared.ts +0 -498
- package/src/Cli/commands/login.ts +0 -169
- package/src/Cli/commands/profile.ts +0 -132
- package/src/Cli/commands/sync.ts +0 -123
- package/src/Cli/commands/tail.ts +0 -155
- package/src/Cli/tui/InkCLI.tsx +0 -69
- package/src/Cli/tui/components/ApprovePlan.tsx +0 -44
- package/src/Cli/tui/components/Nuke.tsx +0 -273
- package/src/Cli/tui/components/Plan.tsx +0 -211
- package/src/Cli/tui/components/PlanProgress.tsx +0 -455
- package/src/Railway/RetryPolicy.ts +0 -53
- package/src/Util/Clank.ts +0 -103
|
@@ -0,0 +1,2098 @@
|
|
|
1
|
+
# git-service — Final Design Document
|
|
2
|
+
|
|
3
|
+
**A Git hosting service on Cloudflare Workers + Durable Objects + R2, built as `packages/git` with Alchemy Effect-native Workers.**
|
|
4
|
+
|
|
5
|
+
Stance: **protocol-first minimalist core (Proposal A's skeleton) with Proposal B's product ergonomics and scale seams grafted on.** v1 is the smallest system that real `git` clients (git ≥ 1.6.6 through current) can clone, fetch, and push against, with transactional refs and a typed REST management plane. Every cut has a named upgrade seam. The architecture is the ripgit/chr33s-validated shape (Worker router → one DO per repo → SQLite refs/objects + R2 overflow), re-expressed in Effect with real transactions (`transactionSync`), typed errors, streaming responses, and auth from day one.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 0. Resolved contradictions (A vs B)
|
|
10
|
+
|
|
11
|
+
Every place the two proposals disagreed, with the decision and the one-line reason:
|
|
12
|
+
|
|
13
|
+
| Topic | A said | B said | **Decision** | Why (one line) |
|
|
14
|
+
|---|---|---|---|---|
|
|
15
|
+
| Object bytes at rest | zlib rows in DO SQLite, >1 MiB → R2 | Pack-first: pushed packs verbatim to R2, DO holds index only | **A** (rows + R2 overflow; packs are v1.1) | Pack emission from pre-deflated rows is pure concatenation (zero CPU), ripgit-proven in 128 MB; B's two-pass R2-fixup ingest is the single riskiest subsystem and buys nothing until repos outgrow the 50 MiB push cap — the `location`/`pack_id` columns keep B's endgame reachable without a migration. |
|
|
16
|
+
| Where the protocol runs | Inside the Repo DO | Worker data plane, DO control plane | **A** (in the DO) | The bytes live in the DO's SQLite so they must transit it anyway; duration billing is ~$0.0001 per clone-minute (0.125 GB × 60 s × $12.50/M GB-s), and B's Worker-side streaming becomes the natural v1.1 fast path only once compacted packs live in R2. |
|
|
17
|
+
| Fetch protocol | v0 only | v2 primary + v0 fallback | **A** (v0 only) | Every client ≥1.6.6 falls back to v0 silently; v2 is a pure-additive choreography file over the same closure/pack code, so shipping it in v1 doubles conformance surface for zero client reach. |
|
|
18
|
+
| Push ingestion | Buffer ≤ 50 MiB, `RandomAccess` seam | Stream to R2 multipart + 2-pass fixups | **A** (buffer + cap) | Bounded, simple, ripgit-proven; the parser is written against a `RandomAccess` source so the R2-tee upgrade is one implementation swap, not a protocol change. |
|
|
19
|
+
| Served deltas / thin packs | Never (fat packs) | Thin REF_DELTA against have-closure | **A** (never) | Thin-pack/ofs-delta serving are protocol MAYs; fat fetches are a bandwidth tax, not a correctness issue, and delta emission is the classic source of corruption bugs. |
|
|
20
|
+
| Name authority | Singleton Registry DO | Per-namespace NamespaceDO | **A** (singleton) with B's shard seam | Control-plane traffic is tiny in v1 and a singleton gives global listing for free; `getByName("registry:" + owner)` sharding changes no RPC interface. |
|
|
21
|
+
| Concurrent pushes | Unaddressed (staging ids make it safe-ish) | SQL receive lease + 503 | **Graft B, simplified**: in-memory `Effect.Semaphore` in the DO | Two 50 MiB buffers ≈ the whole isolate heap; one DO instance means an in-memory gate suffices (eviction kills the connection anyway) — no lease table needed. Waiters block ≤ 30 s, then `503 Retry-After: 10`. |
|
|
22
|
+
| Connectivity check on push | new-oids exist only | Full referenced-object membership | **Graft B** (full check) | With everything in SQLite the membership check is cheap batched SQL, and it's the difference between "corrupt client" and "corrupt repo". |
|
|
23
|
+
| Commit graph shape | `commits` + `commit_parents` tables | Single row, concatenated parents, `gen`, `commit_time` | **A's normalized tables + B's `gen`/`commit_time` columns** | Normalized parents make the BFS a JOIN; generation numbers bound negotiation walks and cost nothing at ingest. |
|
|
24
|
+
| Oid encoding | TEXT 40-hex | BLOB 20-byte | **A** (TEXT hex) | zdata BLOBs dominate storage, so index bytes aren't the bottleneck; hex rows are debuggable and match the wire. |
|
|
25
|
+
| Fork | Vague (test-plan only) | Catalog-row sharing of parent's immutable R2 keys | **Graft B's sharing, adapted**: row snapshot copy + shared R2 keys via `objects.r2_key` | SQLite rows must be copied (no cross-DO sharing), but R2 objects are immutable and shared by full key; parent's R2 prefix is retained while `fork_count > 0`. |
|
|
26
|
+
| Import / fork / delete execution | Unspecified | Cloudflare Queue consumer jobs | **DO alarm jobs, no Queue** | Alarms have the same 15-min budget as queue consumers, reuse the DO-resident ingest code directly, and add zero infrastructure. |
|
|
27
|
+
| Async-op status surface | — | `jobs` table + jobs endpoints | **Neither**: `Repo.status` field + `RepoNotReady` error | Polling `GET /repos/:o/:r` for `status: importing\|forking\|deleting → ready\|404` needs no jobs API and no cross-DO status plumbing. |
|
|
28
|
+
| REST ref writes | Deferred to v2 | PUT/DELETE with CAS in v1 | **Graft B** (in v1) | They reuse the exact `transactionSync` CAS path receive-pack already needs — ~50 lines for a genuinely useful surface (CI tagging, release automation). |
|
|
29
|
+
| Repo create response | `Repo` | `RepoCreated` with bootstrap write token + remote URL | **Graft B** | Kills the create-then-mint round trip; the token machinery exists anyway. |
|
|
30
|
+
| `readOnly` repos | — | Repo flag, `ReadOnlyRepo` 403 | **Graft B** | One config row + one check in receive-pack and ref-write; Artifacts parity. |
|
|
31
|
+
| Token scopes | read/write/admin, names, optional TTL | read/write, mandatory TTL | **A** (three scopes, names, optional TTL) | Per-repo `admin` scope enables delegated token management without handing out the deployer key; mandatory TTL is policy, not mechanism — leave it to the caller. |
|
|
32
|
+
| Blob REST reads | base64 JSON ≤ 1 MiB + raw streaming route | Octet-stream HttpApi endpoint + `file` path endpoint | **A's split + B's `file` route** (as a raw route) | Raw routes keep binary streaming out of schema land (repo convention); the path-walk `file` read is cheap over existing tree primitives and highly useful. |
|
|
33
|
+
| Error tag namespacing | Plain tags (`RepoNotFound`) | Prefixed (`git-service/RepoNotFound`) | **A** (plain) | Shorter wire payloads, matches `HttpApiError` conventions; the API name already scopes the client. |
|
|
34
|
+
| Repo delete semantics | Sync NoContent | Async job id | **NoContent immediately, async purge via alarm** (`status: "deleting"` until gone) | R2 prefix deletion is a list+delete loop that can't run inline; the status field already carries the async story. |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 1. Decisions up front (the opinionated core)
|
|
39
|
+
|
|
40
|
+
| Decision | Choice | Why |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| Protocol version | **v0 only** (upload-pack and receive-pack) | git ≥ 2.26 sends `Git-Protocol: version=2` but falls back cleanly when the server answers v0. ripgit ships v0-only and hosts 40k-commit repos. v2 is a pure-additive upgrade (§10). |
|
|
43
|
+
| Negotiation | multi_ack_detailed + no-done, "lazy-ready" | Converges in ≤ 2 POSTs, stateless, answered per-POST from SQLite. |
|
|
44
|
+
| Served packs | **No deltas, no thin packs.** Every entry = varint header + stored zlib bytes, concatenated | Legal (thin-pack/ofs-delta are MAYs); zero-CPU pack emission because objects are stored as `zlib(content)` — pack generation is literally concatenation + SHA-1. |
|
|
45
|
+
| Push ingestion | Full thin-pack + ofs/ref-delta support, **pack body buffered, hard cap 50 MiB**, one push at a time per repo | Thin packs on push are non-optional (git always sends them over HTTP). Buffering with a cap is the ripgit-proven memory budget; the streaming-to-R2 upgrade is a contained change (§3.6). |
|
|
46
|
+
| Where the protocol runs | **Inside the Repo DO** (Worker authenticates + proxies) | The DO owns refs and all loose object bytes; single-threading + input/output gates make ref CAS trivially serializable. Duration billing is a non-issue (§0). |
|
|
47
|
+
| Object storage | zlib-compressed rows in DO SQLite; objects > 1 MiB compressed → R2; pack compaction to R2 is **v1.1**, schema-ready | Simplest storage that is actually transactional. The 2 MB SQLite row cap forces the R2 split; the `location` column makes compaction additive. |
|
|
48
|
+
| Refs | DO SQLite, CAS inside `transactionSync` | The single strongest reason this architecture works. R2 is disqualified (1 write/s/key, last-writer-wins). |
|
|
49
|
+
| Hashing | SHA-1 only (`object-format=sha1`) | sha256 repos are rare; oid schemas are branded so widening later is mechanical. |
|
|
50
|
+
| Repos | All private in v1. Anonymous = 401. `readOnly` flag rejects writes with a typed 403 | Cuts the visibility model; auth is one code path. |
|
|
51
|
+
| Shallow | `shallow` + `deepen <n>` (depth only) in v1 | Without it `actions/checkout` (depth=1 default) fails hard. Bounded BFS + boundary lines — cheap. `deepen-since`/`deepen-not` cut. |
|
|
52
|
+
| Fork / import / delete | Async DO-alarm jobs; status via `Repo.status`; forks share parent R2 keys | Reuses DO-resident ingest and purge code; zero new infrastructure; R2 immutability makes sharing safe. |
|
|
53
|
+
| Free Workers plan | Unsupported | 10 ms CPU cannot inflate a pack. `GitWorker` sets `limits.cpu_ms = 300_000`. |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 2. Architecture
|
|
58
|
+
|
|
59
|
+
### 2.1 Components
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
┌────────────────────────────────────────────────┐
|
|
63
|
+
git CLI / REST │ GitWorker (stateless, Effect-native Worker) │
|
|
64
|
+
client │ • routes /api/v1/** → Effect HttpApi │
|
|
65
|
+
──────────────► │ • routes /:owner/:repo.git/** → git protocol │
|
|
66
|
+
│ • parses Basic/Bearer creds (never verifies │
|
|
67
|
+
│ repo tokens itself — the Repo DO does) │
|
|
68
|
+
│ • verifies the admin key (timingSafeEqual) │
|
|
69
|
+
│ • Registry lookups (owner/name → repoId), │
|
|
70
|
+
│ 60 s in-isolate LRU cache │
|
|
71
|
+
└───────┬──────────────────────────┬─────────────┘
|
|
72
|
+
│ typed RPC / stub.fetch │ typed RPC
|
|
73
|
+
▼ ▼
|
|
74
|
+
┌──────────────────────────────┐ ┌────────────────────────┐
|
|
75
|
+
│ Repo DO (one per repo, │ │ Registry DO │
|
|
76
|
+
│ getByName(repoId)) │ │ (singleton, │
|
|
77
|
+
│ owns: refs, objects index, │ │ getByName("registry"))│
|
|
78
|
+
│ loose object bytes, tokens, │ │ owns: owner/name → │
|
|
79
|
+
│ commit graph, push staging, │ │ repoId map, listing, │
|
|
80
|
+
│ alarm jobs (import/fork/ │ │ uniqueness, fork │
|
|
81
|
+
│ delete-purge/GC) │ │ lineage + counts │
|
|
82
|
+
│ runs: advertise, upload- │ └────────────────────────┘
|
|
83
|
+
│ pack, receive-pack │
|
|
84
|
+
└──────────┬───────────────────┘
|
|
85
|
+
│ R2 binding (inside the DO for oversize reads/writes)
|
|
86
|
+
▼
|
|
87
|
+
┌──────────────────────────────┐
|
|
88
|
+
│ R2 bucket "git-objects" │
|
|
89
|
+
│ {repoId}/objects/{oid} │ oversize loose objects (immutable)
|
|
90
|
+
│ {repoId}/packs/pack-*.pack │ v1.1 compaction output (immutable)
|
|
91
|
+
└──────────────────────────────┘
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**Why one DO per repo (not a namespace DO holding many):** per-repo write serialization for free (ref CAS needs no locks), per-repo isolation of the 10 GB SQLite ceiling, horizontal scale by construction. The DO id is `idFromName(repoId)` where `repoId` is a ULID minted at creation — **not** `owner/name` — so renames never move data and a deleted-then-recreated `owner/name` gets a fresh DO (no zombie state).
|
|
95
|
+
|
|
96
|
+
**Why a singleton Registry DO:** repo CRUD needs a uniqueness authority, a listing surface, and a fork-lineage ledger. It's low-rate control-plane traffic. Upgrade seam: shard by owner via `getByName("registry:" + owner)` — the RPC interface doesn't change; global listing then requires fan-out or is cut. The Worker caches `owner/name → repoId` per-isolate for 60 s; the Repo DO stores its own `(owner, name)` and rejects mismatched requests, so a stale cache entry fails safe and triggers re-resolve.
|
|
97
|
+
|
|
98
|
+
**Why the git protocol runs in the DO, not the Worker:** every byte the protocol needs (refs, object rows, commit graph, tokens) lives in the DO's SQLite. Running upload/receive-pack in the Worker would mean chatty RPC choreography for thin-base lookups, staging batches, and manifest paging. Inside the DO it's direct synchronous SQL. Long pushes don't starve reads: workerd interleaves other events at non-storage `await` points (client body reads, R2 calls), and the ref CAS at the end is a single `transactionSync`. The one inherited rule: **re-verify nothing across an `await` — all ref reads/writes happen inside the final `transactionSync`.**
|
|
99
|
+
|
|
100
|
+
**Push serialization:** the Repo DO's runtime closure holds an `Effect.Semaphore(1)` guarding receive-pack ingest (two concurrent 50 MiB buffers would exhaust the 128 MB isolate). A second push waits up to 30 s for the permit, then gets `503` + `Retry-After: 10` (git retries cleanly). In-memory is sufficient: there is exactly one live instance per DO, and an eviction mid-push kills the holder's connection anyway.
|
|
101
|
+
|
|
102
|
+
### 2.2 URL space
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
/api/v1/** REST (Effect HttpApi)
|
|
106
|
+
/api/v1/repos/:o/:r/blobs/:oid/raw raw blob bytes (raw route, streaming)
|
|
107
|
+
/api/v1/repos/:o/:r/file?ref&path file-at-path bytes (raw route, streaming)
|
|
108
|
+
/:owner/:repo[.git]/info/refs smart-HTTP ref advertisement
|
|
109
|
+
/:owner/:repo[.git]/git-upload-pack fetch/clone
|
|
110
|
+
/:owner/:repo[.git]/git-receive-pack push
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
`api` is a reserved owner name (Registry rejects it at creation). The Worker's `fetch` is the canonical `StateStore/Api.ts` composition: `HttpApiBuilder.layer(GitApi)` + handler layers + `Layer.merge(rawGitRoutes)` (raw routes registered on the same `HttpRouter`) + `[Etag.layer, HttpPlatformStub, Path.layer]` + `HttpRouter.toHttpEffect` (§5, §6).
|
|
114
|
+
|
|
115
|
+
### 2.3 Request flows
|
|
116
|
+
|
|
117
|
+
**Clone (fresh):**
|
|
118
|
+
1. `GET /:o/:r.git/info/refs?service=git-upload-pack` → Worker parses Basic creds, Registry lookup (cached) → `repos.getByName(repoId).fetch(request)` → DO verifies token (read scope), rejects with `RepoNotReady` semantics (503) while `status != ready`, then emits the v0 advertisement: `# service=` prelude, flush, `HEAD` first with capability line (`multi_ack_detailed no-done side-band-64k shallow ofs-delta agent=git-service/1 symref=HEAD:refs/heads/<default> object-format=sha1`), refs sorted, annotated tags peeled (`^{}` lines), flush. `Cache-Control: no-cache`. Empty repo: zero-id `capabilities^{}` line.
|
|
119
|
+
2. `POST git-upload-pack` — body is `want`s + flush + `done` (no haves). DO gunzips if `Content-Encoding: gzip` (`DecompressionStream("gzip")`; sniff `1f 8b` defensively), parses pkt-lines, computes the full closure (§3.5), replies `NAK` then the pack on sideband band 1 (65515-byte frames), progress on band 2, flush. If the client did **not** negotiate `side-band-64k`, the pack is sent raw after the ACK/NAK section. The response body is a `Stream<Uint8Array>` — `HttpServerResponse.stream(...)`, chunked, flushed as written; the Worker proxies the `HttpServerResponse` from `stub.fetch` untouched.
|
|
120
|
+
|
|
121
|
+
**Incremental fetch:** same, but the POST carries `have`s. Round 1 (ends in flush): DO `ACK <oid> common` for each have that exists in `objects`, `ACK <oid> ready` once the want-closure is coverable, else `NAK`. With `no-done` the DO may continue straight into the pack after `ready`. Round 2 (ends in `done`): final `ACK`/`NAK` + pack. Closure = commits BFS from wants stopping at ACKed haves (generation numbers bound the walk), plus those commits' full tree/blob closure with an in-walk visited set (§3.5 — the accepted v1 fat: ~one snapshot's worth of redundancy at the boundary; harmless to clients).
|
|
122
|
+
|
|
123
|
+
**Shallow clone (`--depth N`):** wants + `deepen N`. DO does a depth-bounded BFS, emits `shallow <oid>` boundary lines (and `unshallow` for previously-shallow client tips now complete), flush, then ACK/NAK + depth-truncated pack. Client `shallow` lines on later fetches are treated as additional walk boundaries.
|
|
124
|
+
|
|
125
|
+
**Push:**
|
|
126
|
+
1. `GET info/refs?service=git-receive-pack` → v0 advertisement with `report-status report-status-v2 delete-refs side-band-64k atomic ofs-delta object-format=sha1 agent=git-service/1`.
|
|
127
|
+
2. `POST git-receive-pack` → DO: acquire the push semaphore; parse command pkt-lines (`old new refname\0caps` on the first); handle the **empty-flush probe** (git sends a bare `0000` POST when the payload exceeds `http.postBuffer`; reply empty 200 so it retries with the real body). Reject writes to `readOnly` repos with `ng` per ref. Buffer the raw pack (reject > 50 MiB with `unpack pack exceeds 50 MiB limit` + per-ref `ng` — a clean in-band report, not an HTTP error). Ingest (§3.6): index → resolve deltas (thin bases from own store) → hash → stage → **connectivity check** (every oid referenced by staged commits/trees is in staged ∪ live objects; batched SQL). Then one `transactionSync`: CAS every command's old-oid against `refs`, honor `atomic` (all-or-nothing) vs per-ref, flip staged objects live, insert commit-graph rows, update `default_branch` on first branch push. Reply `report-status` (`unpack ok` / `ok|ng <ref>`) **wrapped in sideband band 1** when the client negotiated side-band (unmuxed report while sideband is active breaks the client). `report-status-v2` is advertised and implemented identically (no `option` lines — valid).
|
|
128
|
+
3. Post-commit, `state.waitUntil`: GC bookkeeping, compaction-threshold check (v1.1 alarm).
|
|
129
|
+
|
|
130
|
+
**Fork:** `POST /repos/:o/:r/fork` → Registry CAS-inserts the target row (`status: "forking"`, `fork_of`, bump parent `fork_count`) → new Repo DO initializes and arms an immediate alarm → alarm job streams a row snapshot from the parent DO over an RPC `Stream` (refs, objects metadata **including `zdata` for `location='row'` rows**, commits, config) and copies it in batches; `location='r2'` rows are copied **by reference** — the `r2_key` column carries the parent's full key (immutable, shared) → `status: "ready"`. Documented v1 limit: fork cost is O(parent row bytes); v1.1 compaction (bytes in shared R2 packs) makes forks near-O(index).
|
|
131
|
+
|
|
132
|
+
**Import:** `POST /repos/import` → Registry inserts (`status: "importing"`) → Repo DO alarm job acts as a git v0/v2 HTTP client against the source URL (depth-limited fetch), ingests through the same `PackParser` path with the same 50 MiB cap (documented v1 limit: small/depth-limited imports only), sets refs, `status: "ready"`; failures set `status` back plus an error detail readable on the Repo resource.
|
|
133
|
+
|
|
134
|
+
**Delete:** `DELETE /repos/:o/:r` → Registry marks `deleted_at` (name freed for reuse only after purge), Repo `status: "deleting"` → NoContent immediately → alarm job purges: R2 prefix list+delete loop (bounded per alarm run, re-armed until done) — **but the R2 prefix is retained while Registry reports `fork_count > 0`** (forks reference those keys); SQLite dropped via `deleteAll`; Registry row removed last. Purge is idempotent and alarm-retried.
|
|
135
|
+
|
|
136
|
+
**REST call:** `POST /api/v1/repos/:o/:r/tokens` → HttpApi middleware parses credentials into a `Credentials` service → handler calls `repos.getByName(repoId).createToken(credentials, {...})` → DO enforces scope and returns; tagged errors surface as typed HTTP statuses.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 3. Storage design
|
|
141
|
+
|
|
142
|
+
### 3.1 Repo DO SQLite schema (exact DDL)
|
|
143
|
+
|
|
144
|
+
```sql
|
|
145
|
+
-- config: repoId, owner, name, default_branch, description, created_at,
|
|
146
|
+
-- schema_version, status ('ready'|'importing'|'forking'|'deleting'),
|
|
147
|
+
-- read_only ('0'|'1'), fork_of (parent repoId or absent)
|
|
148
|
+
CREATE TABLE IF NOT EXISTS config (key TEXT PRIMARY KEY, value TEXT NOT NULL);
|
|
149
|
+
|
|
150
|
+
-- all refs, full names. HEAD is virtual: symref to config.default_branch.
|
|
151
|
+
CREATE TABLE IF NOT EXISTS refs (
|
|
152
|
+
name TEXT PRIMARY KEY, -- 'refs/heads/main', 'refs/tags/v1'
|
|
153
|
+
oid TEXT NOT NULL -- 40-hex sha1
|
|
154
|
+
) WITHOUT ROWID;
|
|
155
|
+
|
|
156
|
+
-- object index + loose bytes. zdata is zlib(content) WITHOUT the loose header,
|
|
157
|
+
-- so pack emission is: varint(type,size) + zdata, verbatim.
|
|
158
|
+
CREATE TABLE IF NOT EXISTS objects (
|
|
159
|
+
oid TEXT PRIMARY KEY, -- 40-hex
|
|
160
|
+
type INTEGER NOT NULL, -- 1=commit 2=tree 3=blob 4=tag
|
|
161
|
+
size INTEGER NOT NULL, -- uncompressed bytes
|
|
162
|
+
zsize INTEGER NOT NULL, -- stored/compressed bytes
|
|
163
|
+
location TEXT NOT NULL DEFAULT 'row', -- 'row' | 'r2' | 'pack' (pack = v1.1)
|
|
164
|
+
zdata BLOB, -- NULL when location != 'row'
|
|
165
|
+
r2_key TEXT, -- full R2 key when location='r2'; may point at a
|
|
166
|
+
-- FORK PARENT's prefix (immutable, shared)
|
|
167
|
+
pack_id TEXT, -- v1.1: packs/pack-<sha>.pack
|
|
168
|
+
pack_offset INTEGER, -- v1.1: byte offset of zdata within pack
|
|
169
|
+
staged_push TEXT -- NULL = live; else the push_id that staged it
|
|
170
|
+
) WITHOUT ROWID;
|
|
171
|
+
CREATE INDEX IF NOT EXISTS idx_objects_staged ON objects(staged_push) WHERE staged_push IS NOT NULL;
|
|
172
|
+
|
|
173
|
+
-- commit graph for closure/negotiation walks (populated at ingest)
|
|
174
|
+
CREATE TABLE IF NOT EXISTS commits (
|
|
175
|
+
oid TEXT PRIMARY KEY,
|
|
176
|
+
tree TEXT NOT NULL,
|
|
177
|
+
gen INTEGER NOT NULL, -- generation number: max(parent gen) + 1; roots = 1
|
|
178
|
+
commit_time INTEGER NOT NULL -- committer timestamp (seam: deepen-since)
|
|
179
|
+
) WITHOUT ROWID;
|
|
180
|
+
CREATE TABLE IF NOT EXISTS commit_parents (
|
|
181
|
+
oid TEXT NOT NULL,
|
|
182
|
+
parent TEXT NOT NULL,
|
|
183
|
+
ord INTEGER NOT NULL,
|
|
184
|
+
PRIMARY KEY (oid, parent)
|
|
185
|
+
) WITHOUT ROWID;
|
|
186
|
+
|
|
187
|
+
-- per-repo access tokens (§8)
|
|
188
|
+
CREATE TABLE IF NOT EXISTS tokens (
|
|
189
|
+
id TEXT PRIMARY KEY, -- ULID
|
|
190
|
+
token_hash TEXT NOT NULL UNIQUE, -- hex(sha256(token))
|
|
191
|
+
name TEXT NOT NULL,
|
|
192
|
+
scope TEXT NOT NULL, -- 'read' | 'write' | 'admin'
|
|
193
|
+
created_at INTEGER NOT NULL,
|
|
194
|
+
expires_at INTEGER, -- NULL = no expiry
|
|
195
|
+
last_used_at INTEGER
|
|
196
|
+
) WITHOUT ROWID;
|
|
197
|
+
|
|
198
|
+
-- crash-safety bookkeeping for pushes (GC'd by alarm)
|
|
199
|
+
CREATE TABLE IF NOT EXISTS pushes (
|
|
200
|
+
push_id TEXT PRIMARY KEY,
|
|
201
|
+
started_at INTEGER NOT NULL,
|
|
202
|
+
state TEXT NOT NULL -- 'staging' | 'committed'
|
|
203
|
+
) WITHOUT ROWID;
|
|
204
|
+
|
|
205
|
+
-- async job bookkeeping (import/fork/delete-purge progress; single row per kind)
|
|
206
|
+
CREATE TABLE IF NOT EXISTS jobs (
|
|
207
|
+
kind TEXT PRIMARY KEY, -- 'import' | 'fork' | 'purge' | 'gc'
|
|
208
|
+
state TEXT NOT NULL, -- 'running' | 'failed'
|
|
209
|
+
detail TEXT,
|
|
210
|
+
updated_at INTEGER NOT NULL
|
|
211
|
+
) WITHOUT ROWID;
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
Registry DO:
|
|
215
|
+
|
|
216
|
+
```sql
|
|
217
|
+
CREATE TABLE IF NOT EXISTS repos (
|
|
218
|
+
owner TEXT NOT NULL,
|
|
219
|
+
name TEXT NOT NULL,
|
|
220
|
+
repo_id TEXT NOT NULL UNIQUE, -- ULID
|
|
221
|
+
description TEXT,
|
|
222
|
+
fork_of TEXT, -- parent repo_id, NULL if not a fork
|
|
223
|
+
fork_count INTEGER NOT NULL DEFAULT 0,
|
|
224
|
+
created_at INTEGER NOT NULL,
|
|
225
|
+
deleted_at INTEGER, -- soft-delete marker during purge
|
|
226
|
+
PRIMARY KEY (owner, name)
|
|
227
|
+
) WITHOUT ROWID;
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Schema init runs in the DO's outer init effect under `blockConcurrencyWhile` semantics (idempotent `CREATE TABLE IF NOT EXISTS`), with a `schema_version` config row for future migrations. Note the platform gotcha: DO RPC methods must not be named `delete` (Cloudflare stub proxy reserves it) — use `remove`/`purge`.
|
|
231
|
+
|
|
232
|
+
### 3.2 R2 key scheme
|
|
233
|
+
|
|
234
|
+
```
|
|
235
|
+
{repoId}/objects/{oid} zlib(content), immutable, written once
|
|
236
|
+
{repoId}/packs/pack-{sha1}.pack v1.1 compaction output, immutable
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
All R2 keys are **immutable and content-addressed** — this sidesteps the 1-write/s/key limit, makes conditional-put re-runs (idempotent alarm jobs) safe, and makes **cross-repo fork references safe** (a fork's `objects.r2_key` may point into the parent's prefix). R2 `list()` is never used on a hot path (Class A, $4.50/M); the `objects` table is the sole inventory. List is used only in delete-purge and GC reconciliation.
|
|
240
|
+
|
|
241
|
+
### 3.3 Loose vs. R2 thresholds and the promotion story
|
|
242
|
+
|
|
243
|
+
- **`location='row'`**: compressed size ≤ **1 MiB** (safety margin under the 2 MB SQLite row cap). This is where every normal object lives in v1. Read cost: DO rows at $0.001/M, synchronous, no 6-connection cap — 360× cheaper and far faster than per-object R2 GETs.
|
|
244
|
+
- **`location='r2'`**: compressed size > 1 MiB → written to `{repoId}/objects/{oid}` at ingest (single streaming `put`), row records metadata + `r2_key`.
|
|
245
|
+
- **Per-object cap (v1): 64 MiB uncompressed.** Delta application needs base + result in memory; this cap keeps worst-case ingest memory bounded. Rejected with `unpack object too large` + `ng`.
|
|
246
|
+
- **Promotion/compaction (v1.1, schema-ready, not in v1):** an alarm fires when `SUM(zsize) WHERE location='row'` > **1 GB** or live loose count > **50 000**. The handler streams a no-delta pack of the oldest N objects to R2 via multipart (5 MiB uniform parts), then in one `transactionSync` flips those rows to `location='pack'` with `pack_id`/`pack_offset` and NULLs `zdata`. Because pack entries are `varint header + zlib(content)` and we store `zlib(content)`, the "pack" is a concatenation — and `pack_offset` points at the zdata span, so fetch does **ranged R2 reads** per object, or (B's fast path, adopted as the v1.1 clone path) streams whole entry-regions verbatim for full clones. Idempotent (content-addressed pack key + conditional put), alarm-retried, 15-min budget respected by capping objects per run. Nothing in the fetch path changes shape: the emitter already dispatches on `location`.
|
|
247
|
+
|
|
248
|
+
This ordering (row → r2/pack) is forced by the platform numbers: DO storage $0.20/GB-mo vs R2 $0.015 (13×) makes R2 the long-term home; DO rows' read economics make them the right hot tier; the 2 MB row cap draws the line.
|
|
249
|
+
|
|
250
|
+
### 3.4 Transactionality of ref updates
|
|
251
|
+
|
|
252
|
+
All ref mutations — push commands, REST ref writes, fork/import finalization — go through one code path in the Repo DO:
|
|
253
|
+
|
|
254
|
+
```ts
|
|
255
|
+
// inside receive-pack finalize, single event, no awaits inside:
|
|
256
|
+
storage.transactionSync(() => {
|
|
257
|
+
for (const cmd of commands) {
|
|
258
|
+
const current = sql.exec("SELECT oid FROM refs WHERE name = ?", cmd.ref).one()?.oid ?? ZERO;
|
|
259
|
+
if (current !== cmd.oldOid) { results.push(ng(cmd.ref, "fetch first")); if (atomic) throw new RefCasFailed(results); continue; }
|
|
260
|
+
// delete / insert / update refs row
|
|
261
|
+
}
|
|
262
|
+
sql.exec("UPDATE objects SET staged_push = NULL WHERE staged_push = ?", pushId);
|
|
263
|
+
// insert commits / commit_parents rows for staged commits
|
|
264
|
+
sql.exec("UPDATE pushes SET state = 'committed' WHERE push_id = ?", pushId);
|
|
265
|
+
});
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
The DO's input/output gates guarantee no interleaving between statements; `transactionSync` guarantees atomicity against mid-event failure. The client's `old-oid` is the compare-and-swap token (this also makes force-push semantics correct without locking). REST `PUT/DELETE` ref endpoints run the same block with a single synthetic command (`expectedOid` → old-oid; absent `expectedOid` = unconditional). Crash before the transaction ⇒ staged rows with a dangling `push_id`; a daily alarm deletes `pushes` rows in `staging` older than 24 h and their staged objects (R2 orphans under `objects/` are harmless — content-addressed — and re-pushed identical objects hit the same key).
|
|
269
|
+
|
|
270
|
+
### 3.5 Fetch closure computation and pack assembly within 128 MB
|
|
271
|
+
|
|
272
|
+
**Closure:** BFS from wants over `commit_parents` (in-DO SQL, chunked `IN` lists ≤ 100 params), stopping at haves that exist in `objects`, bounded below by generation numbers (never walk past `min(gen(haves))` unnecessarily), and at the depth bound when `deepen` is present. Then walk each frontier commit's tree: read tree rows, parse entries, recurse, with an in-memory visited `Set<string>` shared across the whole walk. Memory: 500 k oids ≈ 25 MB of Set — cap manifest at 1 M objects for v1 (larger repos are a documented v1 limit; the v1.1 fix is whole-pack streaming from R2 for clones).
|
|
273
|
+
|
|
274
|
+
**Emission (all streaming, constant memory):**
|
|
275
|
+
|
|
276
|
+
```
|
|
277
|
+
PACK + version(2) + count(manifest.length) — count known before streaming: manifest is materialized first
|
|
278
|
+
for each oid in manifest (batched row reads, ≤100/query, ~8 MiB adaptive zsize budget):
|
|
279
|
+
emit varint(type, size) + zdata — 'row': the BLOB; 'r2': R2 get body; 'pack' (v1.1): R2 ranged get
|
|
280
|
+
sha1.update(everything) — node:crypto createHash, incremental
|
|
281
|
+
emit sha1 trailer
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Wrapped in a sideband-band-1 framing transform (≤ 65515-byte payloads) when negotiated, returned as `HttpServerResponse.stream`. No compression CPU at all — bytes are stored pre-deflated. Progress lines (`Counting objects...`) on band 2 every N objects.
|
|
285
|
+
|
|
286
|
+
### 3.6 Push ingest within 128 MB
|
|
287
|
+
|
|
288
|
+
Single pass over the buffered pack (≤ 50 MiB), under the push semaphore:
|
|
289
|
+
|
|
290
|
+
1. Validate `PACK`, version 2, count.
|
|
291
|
+
2. Per entry: parse type/size varint. Non-delta: `zlib.createInflate()`, feed the tail; on `end`, `bytesWritten` = exact compressed span (workerd-verified). Hash `sha1("<type> <size>\0" + content)`. **Store the compressed span verbatim as `zdata`** — no recompression. Deltas (OFS with the +1-bias offset decoding, REF with 20-byte base id): resolve base from (a) already-ingested entries via a bounded LRU of resolved contents (20 MiB, shared buffers), (b) re-inflation from the pack buffer on cache miss, or (c) **the object store for thin bases** (REF_DELTA to a prior push — the normal case). Apply the copy/insert instruction stream (`size==0 ⇒ 0x10000` special case), verify `result_size`, hash, `deflateSync` (level 6), store.
|
|
292
|
+
3. Verify the trailing pack SHA-1; mismatch ⇒ `unpack pack checksum mismatch` + all-`ng`.
|
|
293
|
+
4. Rows inserted with `staged_push = pushId` as resolved (objects > 1 MiB compressed go to R2 first, then the row). Existing oids skipped (idempotent re-push).
|
|
294
|
+
5. **Connectivity check (full):** collect every oid referenced by staged commits (tree, parents) and staged trees (entries), and every command's `new-oid`; batched `SELECT` membership against staged ∪ live objects (chunked `IN` ≤ 100). Any miss ⇒ `unpack missing objects` + all-`ng`. Cheap SQL; prevents a buggy/malicious client from corrupting the repo.
|
|
295
|
+
6. Compute `gen`/`commit_time` for staged commits (parents are all present per step 5).
|
|
296
|
+
|
|
297
|
+
Budget: 50 MiB pack + 20 MiB cache + ≤ 64 MiB single-object worst case is theoretical-max-tight; in practice large objects aren't delta'd against large bases, and ripgit ships this exact profile in 128 MB. The semaphore guarantees one ingest at a time. The pack size cap is enforced *before* buffering via `Content-Length` when present and by counting during body read otherwise.
|
|
298
|
+
|
|
299
|
+
**Upgrade seam (v1.x, when the 50 MiB cap hurts):** tee the incoming body to R2 multipart (`{repoId}/incoming/{pushId}.pack`) while indexing in the same pass; delta re-resolution then uses R2 ranged reads instead of the memory buffer. The parser is written against a `RandomAccess` abstraction (`PackParser.ingest(source: RandomAccess)`) from day one so this swap touches one implementation, not the protocol code.
|
|
300
|
+
|
|
301
|
+
---
|
|
302
|
+
|
|
303
|
+
## 4. Git protocol scope for v1
|
|
304
|
+
|
|
305
|
+
### Supported (exact)
|
|
306
|
+
|
|
307
|
+
| Area | v1 support |
|
|
308
|
+
|---|---|
|
|
309
|
+
| Transport | Smart HTTP only. `info/refs` advertisement with `# service=` prelude for both services; `Cache-Control: no-cache`; 401 + `WWW-Authenticate: Basic realm="git-service"`; gzip request bodies decompressed (`DecompressionStream("gzip")` + `1f 8b` sniff); streamed chunked responses; `ERR` pkt / band-3 for in-band fatals; 503 + `Retry-After` on push contention. |
|
|
310
|
+
| upload-pack (fetch/clone) | **Protocol v0.** Capabilities: `multi_ack_detailed`, `no-done`, `side-band-64k`, `shallow` (+ `deepen <n>` only), `agent`, `symref=HEAD:...`, `object-format=sha1`. Peeled `^{}` lines for annotated tags. Negotiation: ack `common` for known haves, `ready` when coverable, else `NAK`; ≤ 2 rounds. Empty-repo advertisement (`capabilities^{}`). Non-sideband clients get the raw pack. |
|
|
311
|
+
| receive-pack (push) | Protocol v0 (push has no v2). Capabilities: `report-status`, `report-status-v2`, `delete-refs`, `side-band-64k`, `atomic`, `ofs-delta`, `object-format=sha1`, `agent`. Create/update/delete refs, old-oid CAS, force push (unpoliced in v1), thin-pack + ofs/ref-delta ingestion, full connectivity check, empty-flush probe handling, report inside band 1, one-push-at-a-time serialization. |
|
|
312
|
+
| Objects | commit, tree, blob, **tag (annotated tags stored and served — not dropped)**. Byte-verbatim round-tripping (we never re-serialize; hashes, gpgsig, timezones survive — automatic, since stored bytes are the received bytes). |
|
|
313
|
+
|
|
314
|
+
The cut list with upgrade paths is consolidated in §10.
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
## 5. The Effect HttpApi REST surface
|
|
319
|
+
|
|
320
|
+
Contract lives in `src/Api.ts`, following `packages/alchemy/src/Cloudflare/StateStore/Api.ts` / `State/HttpStateApi.ts` conventions (effect `4.0.0-beta.105`, `effect/unstable/httpapi`). Abbreviated only where repetitive:
|
|
321
|
+
|
|
322
|
+
```ts
|
|
323
|
+
import * as Context from "effect/Context";
|
|
324
|
+
import * as Redacted from "effect/Redacted";
|
|
325
|
+
import * as Schema from "effect/Schema";
|
|
326
|
+
import * as HttpApi from "effect/unstable/httpapi/HttpApi";
|
|
327
|
+
import * as HttpApiGroup from "effect/unstable/httpapi/HttpApiGroup";
|
|
328
|
+
import * as HttpApiEndpoint from "effect/unstable/httpapi/HttpApiEndpoint";
|
|
329
|
+
import * as HttpApiMiddleware from "effect/unstable/httpapi/HttpApiMiddleware";
|
|
330
|
+
import * as HttpApiSecurity from "effect/unstable/httpapi/HttpApiSecurity";
|
|
331
|
+
import * as HttpApiSchema from "effect/unstable/httpapi/HttpApiSchema";
|
|
332
|
+
|
|
333
|
+
// ── primitives ────────────────────────────────────────────────────────────
|
|
334
|
+
export const Oid = Schema.String.pipe(Schema.pattern(/^[0-9a-f]{40}$/), Schema.brand("Oid"));
|
|
335
|
+
export const RepoName = Schema.String.pipe(Schema.pattern(/^[a-z0-9](?:[a-z0-9._-]{0,98}[a-z0-9])?$/i));
|
|
336
|
+
export const OwnerName = RepoName;
|
|
337
|
+
export const RefName = Schema.String.pipe(Schema.pattern(/^refs\/[^\s~^:?*\[\\]+$/));
|
|
338
|
+
export const TokenScope = Schema.Literals(["read", "write", "admin"]);
|
|
339
|
+
export const RepoStatus = Schema.Literals(["ready", "importing", "forking", "deleting"]);
|
|
340
|
+
|
|
341
|
+
// ── error taxonomy (tagged, status-annotated) ─────────────────────────────
|
|
342
|
+
export class Unauthorized extends Schema.TaggedErrorClass<Unauthorized>()("Unauthorized",
|
|
343
|
+
{}, HttpApiSchema.annotations({ status: 401 })) {}
|
|
344
|
+
export class Forbidden extends Schema.TaggedErrorClass<Forbidden>()("Forbidden",
|
|
345
|
+
{ required: TokenScope }, HttpApiSchema.annotations({ status: 403 })) {}
|
|
346
|
+
export class ReadOnlyRepo extends Schema.TaggedErrorClass<ReadOnlyRepo>()("ReadOnlyRepo",
|
|
347
|
+
{}, HttpApiSchema.annotations({ status: 403 })) {}
|
|
348
|
+
export class RepoNotFound extends Schema.TaggedErrorClass<RepoNotFound>()("RepoNotFound",
|
|
349
|
+
{ owner: Schema.String, repo: Schema.String }, HttpApiSchema.annotations({ status: 404 })) {}
|
|
350
|
+
export class RepoAlreadyExists extends Schema.TaggedErrorClass<RepoAlreadyExists>()("RepoAlreadyExists",
|
|
351
|
+
{ owner: Schema.String, repo: Schema.String }, HttpApiSchema.annotations({ status: 409 })) {}
|
|
352
|
+
export class RepoNotReady extends Schema.TaggedErrorClass<RepoNotReady>()("RepoNotReady",
|
|
353
|
+
{ status: RepoStatus }, HttpApiSchema.annotations({ status: 409 })) {}
|
|
354
|
+
export class RefNotFound extends Schema.TaggedErrorClass<RefNotFound>()("RefNotFound",
|
|
355
|
+
{ ref: Schema.String }, HttpApiSchema.annotations({ status: 404 })) {}
|
|
356
|
+
export class RefConflict extends Schema.TaggedErrorClass<RefConflict>()("RefConflict",
|
|
357
|
+
{ ref: Schema.String, currentOid: Schema.NullOr(Oid) }, HttpApiSchema.annotations({ status: 409 })) {}
|
|
358
|
+
export class ObjectNotFound extends Schema.TaggedErrorClass<ObjectNotFound>()("ObjectNotFound",
|
|
359
|
+
{ oid: Schema.String }, HttpApiSchema.annotations({ status: 404 })) {}
|
|
360
|
+
export class WrongObjectType extends Schema.TaggedErrorClass<WrongObjectType>()("WrongObjectType",
|
|
361
|
+
{ oid: Schema.String, expected: Schema.String, actual: Schema.String },
|
|
362
|
+
HttpApiSchema.annotations({ status: 422 })) {}
|
|
363
|
+
export class ObjectTooLarge extends Schema.TaggedErrorClass<ObjectTooLarge>()("ObjectTooLarge",
|
|
364
|
+
{ oid: Schema.String, size: Schema.Number }, HttpApiSchema.annotations({ status: 422 })) {}
|
|
365
|
+
export class TokenNotFound extends Schema.TaggedErrorClass<TokenNotFound>()("TokenNotFound",
|
|
366
|
+
{ id: Schema.String }, HttpApiSchema.annotations({ status: 404 })) {}
|
|
367
|
+
export class ImportFailed extends Schema.TaggedErrorClass<ImportFailed>()("ImportFailed",
|
|
368
|
+
{ reason: Schema.String }, HttpApiSchema.annotations({ status: 502 })) {}
|
|
369
|
+
export class ValidationError extends Schema.TaggedErrorClass<ValidationError>()("ValidationError",
|
|
370
|
+
{ message: Schema.String }, HttpApiSchema.annotations({ status: 400 })) {}
|
|
371
|
+
|
|
372
|
+
// ── auth middleware ───────────────────────────────────────────────────────
|
|
373
|
+
// Parses Basic (git CLI: password = token) or Bearer into a Credentials service.
|
|
374
|
+
// Enforcement happens in the Repo DO, which owns the tokens table (§8).
|
|
375
|
+
export class Credentials extends Context.Service<Credentials, {
|
|
376
|
+
readonly token: Redacted.Redacted<string>; // repo token or admin key
|
|
377
|
+
}>()("git-service/Credentials") {}
|
|
378
|
+
|
|
379
|
+
export class GitAuth extends HttpApiMiddleware.Service<GitAuth, { provides: Credentials }>()(
|
|
380
|
+
"git-service/GitAuth",
|
|
381
|
+
{ security: { bearer: HttpApiSecurity.bearer, basic: HttpApiSecurity.basic },
|
|
382
|
+
error: Unauthorized },
|
|
383
|
+
) {}
|
|
384
|
+
|
|
385
|
+
// ── domain shapes ─────────────────────────────────────────────────────────
|
|
386
|
+
export class Repo extends Schema.Class<Repo>("Repo")({
|
|
387
|
+
owner: OwnerName, name: RepoName, repoId: Schema.String,
|
|
388
|
+
defaultBranch: Schema.String, description: Schema.NullOr(Schema.String),
|
|
389
|
+
readOnly: Schema.Boolean,
|
|
390
|
+
forkOf: Schema.NullOr(Schema.String), // parent repoId
|
|
391
|
+
status: RepoStatus, // poll this for async fork/import/delete
|
|
392
|
+
createdAt: Schema.Number,
|
|
393
|
+
}) {}
|
|
394
|
+
export class Ref extends Schema.Class<Ref>("Ref")({
|
|
395
|
+
name: RefName, oid: Oid, peeled: Schema.optional(Oid),
|
|
396
|
+
}) {}
|
|
397
|
+
const Signature = Schema.Struct({
|
|
398
|
+
name: Schema.String, email: Schema.String, date: Schema.Number, tz: Schema.String });
|
|
399
|
+
export class CommitInfo extends Schema.Class<CommitInfo>("CommitInfo")({
|
|
400
|
+
oid: Oid, tree: Oid, parents: Schema.Array(Oid),
|
|
401
|
+
author: Signature, committer: Signature, message: Schema.String,
|
|
402
|
+
}) {}
|
|
403
|
+
export class TreeEntry extends Schema.Class<TreeEntry>("TreeEntry")({
|
|
404
|
+
mode: Schema.String, name: Schema.String, oid: Oid,
|
|
405
|
+
type: Schema.Literals(["blob", "tree", "commit"]), // commit = gitlink
|
|
406
|
+
}) {}
|
|
407
|
+
export class TokenInfo extends Schema.Class<TokenInfo>("TokenInfo")({
|
|
408
|
+
id: Schema.String, name: Schema.String, scope: TokenScope,
|
|
409
|
+
createdAt: Schema.Number, expiresAt: Schema.NullOr(Schema.Number),
|
|
410
|
+
lastUsedAt: Schema.NullOr(Schema.Number),
|
|
411
|
+
}) {}
|
|
412
|
+
export class CreatedToken extends TokenInfo.extend<CreatedToken>("CreatedToken")({
|
|
413
|
+
token: Schema.String, // shown exactly once
|
|
414
|
+
}) {}
|
|
415
|
+
export class RepoCreated extends Schema.Class<RepoCreated>("RepoCreated")({
|
|
416
|
+
repo: Repo,
|
|
417
|
+
remote: Schema.String, // https clone URL
|
|
418
|
+
token: CreatedToken, // bootstrap 'write' token, one round trip
|
|
419
|
+
}) {}
|
|
420
|
+
const Paginated = <A extends Schema.Top>(items: A) => Schema.Struct({
|
|
421
|
+
items: Schema.Array(items), nextCursor: Schema.NullOr(Schema.String), hasMore: Schema.Boolean,
|
|
422
|
+
});
|
|
423
|
+
|
|
424
|
+
// ── groups ────────────────────────────────────────────────────────────────
|
|
425
|
+
const RepoPath = Schema.Struct({ owner: OwnerName, repo: RepoName });
|
|
426
|
+
|
|
427
|
+
const repos = HttpApiGroup.make("repos")
|
|
428
|
+
.add(HttpApiEndpoint.post("create", "/repos", {
|
|
429
|
+
payload: Schema.Struct({
|
|
430
|
+
owner: OwnerName, name: RepoName,
|
|
431
|
+
defaultBranch: Schema.optional(Schema.String), // default "main"
|
|
432
|
+
description: Schema.optional(Schema.String),
|
|
433
|
+
readOnly: Schema.optional(Schema.Boolean),
|
|
434
|
+
}),
|
|
435
|
+
success: RepoCreated,
|
|
436
|
+
error: [RepoAlreadyExists, ValidationError, Forbidden],
|
|
437
|
+
}))
|
|
438
|
+
.add(HttpApiEndpoint.get("get", "/repos/:owner/:repo", {
|
|
439
|
+
params: RepoPath, success: Repo, error: RepoNotFound,
|
|
440
|
+
}))
|
|
441
|
+
.add(HttpApiEndpoint.patch("update", "/repos/:owner/:repo", {
|
|
442
|
+
params: RepoPath,
|
|
443
|
+
payload: Schema.Struct({
|
|
444
|
+
description: Schema.optional(Schema.NullOr(Schema.String)),
|
|
445
|
+
defaultBranch: Schema.optional(Schema.String), // must resolve to an existing branch
|
|
446
|
+
readOnly: Schema.optional(Schema.Boolean),
|
|
447
|
+
}),
|
|
448
|
+
success: Repo,
|
|
449
|
+
error: [RepoNotFound, RefNotFound, Forbidden],
|
|
450
|
+
}))
|
|
451
|
+
.add(HttpApiEndpoint.get("list", "/repos", {
|
|
452
|
+
query: Schema.Struct({
|
|
453
|
+
owner: Schema.optional(OwnerName),
|
|
454
|
+
cursor: Schema.optional(Schema.String),
|
|
455
|
+
limit: Schema.optional(Schema.Int.pipe(Schema.between(1, 100))),
|
|
456
|
+
}),
|
|
457
|
+
success: Paginated(Repo),
|
|
458
|
+
}))
|
|
459
|
+
.add(HttpApiEndpoint.del("delete", "/repos/:owner/:repo", {
|
|
460
|
+
params: RepoPath, success: HttpApiSchema.NoContent, // async purge; status → 'deleting' → 404
|
|
461
|
+
error: [RepoNotFound, Forbidden],
|
|
462
|
+
}))
|
|
463
|
+
.add(HttpApiEndpoint.post("fork", "/repos/:owner/:repo/fork", {
|
|
464
|
+
params: RepoPath,
|
|
465
|
+
payload: Schema.Struct({ targetOwner: OwnerName, targetName: RepoName }),
|
|
466
|
+
success: RepoCreated, // status: 'forking'; poll GET repo
|
|
467
|
+
error: [RepoNotFound, RepoAlreadyExists, RepoNotReady, Forbidden],
|
|
468
|
+
}))
|
|
469
|
+
.add(HttpApiEndpoint.post("import", "/repos/import", {
|
|
470
|
+
payload: Schema.Struct({
|
|
471
|
+
owner: OwnerName, name: RepoName,
|
|
472
|
+
source: Schema.Struct({
|
|
473
|
+
url: Schema.String,
|
|
474
|
+
ref: Schema.optional(Schema.String),
|
|
475
|
+
depth: Schema.optional(Schema.Int.pipe(Schema.greaterThan(0))),
|
|
476
|
+
}),
|
|
477
|
+
}),
|
|
478
|
+
success: RepoCreated, // status: 'importing'; poll GET repo
|
|
479
|
+
error: [RepoAlreadyExists, ImportFailed, Forbidden],
|
|
480
|
+
}))
|
|
481
|
+
.middleware(GitAuth);
|
|
482
|
+
|
|
483
|
+
const refs = HttpApiGroup.make("refs")
|
|
484
|
+
.add(HttpApiEndpoint.get("list", "/repos/:owner/:repo/refs", {
|
|
485
|
+
params: RepoPath,
|
|
486
|
+
query: Schema.Struct({ prefix: Schema.optional(Schema.String) }), // e.g. "refs/heads/"
|
|
487
|
+
success: Schema.Struct({ head: Schema.NullOr(Schema.String), refs: Schema.Array(Ref) }),
|
|
488
|
+
error: RepoNotFound,
|
|
489
|
+
}))
|
|
490
|
+
.add(HttpApiEndpoint.get("get", "/repos/:owner/:repo/ref", {
|
|
491
|
+
params: RepoPath,
|
|
492
|
+
query: Schema.Struct({ name: RefName }), // query, not path — refnames contain '/'
|
|
493
|
+
success: Ref,
|
|
494
|
+
error: [RepoNotFound, RefNotFound],
|
|
495
|
+
}))
|
|
496
|
+
.add(HttpApiEndpoint.put("update", "/repos/:owner/:repo/ref", {
|
|
497
|
+
params: RepoPath,
|
|
498
|
+
query: Schema.Struct({ name: RefName }),
|
|
499
|
+
payload: Schema.Struct({
|
|
500
|
+
newOid: Oid,
|
|
501
|
+
expectedOid: Schema.optional(Schema.NullOr(Oid)), // null = must-not-exist; absent = unconditional
|
|
502
|
+
}),
|
|
503
|
+
success: Ref,
|
|
504
|
+
error: [RepoNotFound, RefConflict, ObjectNotFound, ReadOnlyRepo, Forbidden],
|
|
505
|
+
}))
|
|
506
|
+
.add(HttpApiEndpoint.del("remove", "/repos/:owner/:repo/ref", {
|
|
507
|
+
params: RepoPath,
|
|
508
|
+
query: Schema.Struct({ name: RefName }),
|
|
509
|
+
payload: Schema.Struct({ expectedOid: Schema.optional(Oid) }),
|
|
510
|
+
success: HttpApiSchema.NoContent,
|
|
511
|
+
error: [RepoNotFound, RefNotFound, RefConflict, ReadOnlyRepo, Forbidden],
|
|
512
|
+
}))
|
|
513
|
+
.middleware(GitAuth);
|
|
514
|
+
|
|
515
|
+
const objects = HttpApiGroup.make("objects")
|
|
516
|
+
.add(HttpApiEndpoint.get("commit", "/repos/:owner/:repo/commits/:oid", {
|
|
517
|
+
params: RepoPath.pipe(Schema.extend(Schema.Struct({ oid: Oid }))),
|
|
518
|
+
success: CommitInfo,
|
|
519
|
+
error: [RepoNotFound, ObjectNotFound, WrongObjectType],
|
|
520
|
+
}))
|
|
521
|
+
.add(HttpApiEndpoint.get("log", "/repos/:owner/:repo/log", {
|
|
522
|
+
params: RepoPath,
|
|
523
|
+
query: Schema.Struct({
|
|
524
|
+
ref: Schema.optional(Schema.String), // refname or oid; default HEAD
|
|
525
|
+
cursor: Schema.optional(Schema.String),
|
|
526
|
+
limit: Schema.optional(Schema.Int.pipe(Schema.between(1, 100))),
|
|
527
|
+
}),
|
|
528
|
+
success: Paginated(CommitInfo),
|
|
529
|
+
error: [RepoNotFound, RefNotFound],
|
|
530
|
+
}))
|
|
531
|
+
.add(HttpApiEndpoint.get("tree", "/repos/:owner/:repo/trees/:oid", {
|
|
532
|
+
params: RepoPath.pipe(Schema.extend(Schema.Struct({ oid: Oid }))),
|
|
533
|
+
success: Schema.Struct({ oid: Oid, entries: Schema.Array(TreeEntry) }),
|
|
534
|
+
error: [RepoNotFound, ObjectNotFound, WrongObjectType],
|
|
535
|
+
}))
|
|
536
|
+
.add(HttpApiEndpoint.get("blob", "/repos/:owner/:repo/blobs/:oid", {
|
|
537
|
+
params: RepoPath.pipe(Schema.extend(Schema.Struct({ oid: Oid }))),
|
|
538
|
+
success: Schema.Struct({
|
|
539
|
+
oid: Oid, size: Schema.Number,
|
|
540
|
+
encoding: Schema.Literals(["base64"]), content: Schema.String, // ≤ 1 MiB only
|
|
541
|
+
}),
|
|
542
|
+
error: [RepoNotFound, ObjectNotFound, WrongObjectType, ObjectTooLarge], // 422 → use /raw
|
|
543
|
+
}))
|
|
544
|
+
// Raw streaming reads are registered as RAW HttpRouter routes (octet-stream),
|
|
545
|
+
// outside HttpApi schema-land by design (same policy as the git wire endpoints):
|
|
546
|
+
// GET /api/v1/repos/:owner/:repo/blobs/:oid/raw
|
|
547
|
+
// GET /api/v1/repos/:owner/:repo/file?ref=<refname|oid>&path=<path> (tree-walk per segment)
|
|
548
|
+
.middleware(GitAuth);
|
|
549
|
+
|
|
550
|
+
const tokens = HttpApiGroup.make("tokens")
|
|
551
|
+
.add(HttpApiEndpoint.post("create", "/repos/:owner/:repo/tokens", {
|
|
552
|
+
params: RepoPath,
|
|
553
|
+
payload: Schema.Struct({
|
|
554
|
+
name: Schema.String, scope: TokenScope,
|
|
555
|
+
ttlSeconds: Schema.optional(Schema.Int.pipe(Schema.greaterThan(0))),
|
|
556
|
+
}),
|
|
557
|
+
success: CreatedToken,
|
|
558
|
+
error: [RepoNotFound, Forbidden],
|
|
559
|
+
}))
|
|
560
|
+
.add(HttpApiEndpoint.get("list", "/repos/:owner/:repo/tokens", {
|
|
561
|
+
params: RepoPath, success: Schema.Array(TokenInfo), error: [RepoNotFound, Forbidden],
|
|
562
|
+
}))
|
|
563
|
+
.add(HttpApiEndpoint.del("revoke", "/repos/:owner/:repo/tokens/:id", {
|
|
564
|
+
params: RepoPath.pipe(Schema.extend(Schema.Struct({ id: Schema.String }))),
|
|
565
|
+
success: HttpApiSchema.NoContent,
|
|
566
|
+
error: [RepoNotFound, TokenNotFound, Forbidden],
|
|
567
|
+
}))
|
|
568
|
+
.middleware(GitAuth);
|
|
569
|
+
|
|
570
|
+
export const GitApi = HttpApi.make("git-service")
|
|
571
|
+
.add(repos).add(refs).add(objects).add(tokens)
|
|
572
|
+
.prefix("/api/v1");
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
**Authorization matrix** (enforced in the Repo DO, §8): admin key → everything; repo `admin` token → its repo's write + token create/list/revoke + repo update/delete; `write` → its repo's reads + receive-pack + ref writes; `read` → its repo's reads + upload-pack only. Repo create/list-all/fork/import are admin-key-only.
|
|
576
|
+
|
|
577
|
+
`GitAuthLive` follows `StateAuthLive` exactly: `Layer.effect(GitAuth, ...)` returning `{ bearer, basic }` handlers that wrap the endpoint effect with a `Credentials` provision (Basic: password field is the token, username ignored). Handlers pass `Credentials` to Repo-DO RPCs, which are the enforcement point. Mounting uses the canonical composition — `HttpApiBuilder.layer(GitApi)` + group handler layers + `GitAuthLive` + `[Etag.layer, HttpPlatformStub, Path.layer]` (the `HttpPlatform` stub copied verbatim from `StateStore/Api.ts:333`) + `Layer.merge(rawApi)` + `HttpRouter.toHttpEffect` assigned to `fetch`.
|
|
578
|
+
|
|
579
|
+
---
|
|
580
|
+
|
|
581
|
+
## 6. Package layout — `packages/git`
|
|
582
|
+
|
|
583
|
+
Shape: **library-with-deployable-stack**, modeled on `packages/better-auth` — exports Worker/DO classes + the HttpApi contract for users to compose into their own Stacks, plus a canonical Stack factory and an example app.
|
|
584
|
+
|
|
585
|
+
```
|
|
586
|
+
packages/git/
|
|
587
|
+
package.json # @alchemy.run/git; exports ".", "./*" (types/bun/worker→src, import→lib);
|
|
588
|
+
# peerDeps: alchemy workspace:*, effect catalog:, @cloudflare/workers-types catalog:;
|
|
589
|
+
# devDeps: alchemy-test workspace:*, isomorphic-git (test-only wire client)
|
|
590
|
+
tsconfig.json # composite, extends ../../tsconfig.base.json, refs ../alchemy, paths @/* → src/*
|
|
591
|
+
tsconfig.test.json
|
|
592
|
+
src/
|
|
593
|
+
index.ts # barrel: Api contract, error classes, GitWorker, Repo, Registry, GitService
|
|
594
|
+
Api.ts # §5 verbatim — HttpApi contract + schemas + tagged errors + GitAuth tag
|
|
595
|
+
Auth.ts # Credentials service, GitAuthLive, credential parsing (Basic/Bearer),
|
|
596
|
+
# admin-key timing-safe compare (crypto.subtle.timingSafeEqual)
|
|
597
|
+
GitWorker.ts # class GitWorker extends Cloudflare.Worker<GitWorker>()(...):
|
|
598
|
+
# HttpApi mount, raw routes (git wire, /blobs/:oid/raw, /file),
|
|
599
|
+
# Registry LRU cache, stub.fetch proxying, nodejs_compat + limits.cpu_ms
|
|
600
|
+
RepoObject.ts # class Repo extends Cloudflare.DurableObject<Repo>()("GitRepo") {} + Repo.make(impl):
|
|
601
|
+
# RPC surface (verifyToken, createToken, listTokens, revokeToken,
|
|
602
|
+
# getRepoMeta, updateRepoMeta, listRefs, getRef, updateRef, removeRef,
|
|
603
|
+
# readObject, readCommitLog, readFileAtPath, snapshotRows (Stream),
|
|
604
|
+
# startImport, startFork, startPurge)
|
|
605
|
+
# + fetch (git wire choreography) + alarm (jobs: import/fork/purge/gc)
|
|
606
|
+
# + in-memory push Semaphore
|
|
607
|
+
RegistryObject.ts # class Registry DO: createRepo, resolve, list, forkLineage,
|
|
608
|
+
# bumpForkCount, markDeleted, remove
|
|
609
|
+
Service.ts # GitService(options?): a function returning an Effect the user
|
|
610
|
+
# yields inside their OWN Alchemy.Stack; deploys GitWorker (+ DOs + R2
|
|
611
|
+
# transitively) and returns { worker, url }. No Stack is shipped.
|
|
612
|
+
git/ # pure protocol/codec modules — no DO/R2 imports, unit-testable
|
|
613
|
+
Pkt.ts # pkt-line read/write, flush/delim, ERR pkt; Stream transforms
|
|
614
|
+
Sideband.ts # band-1/2/3 framing transform (65515 cap)
|
|
615
|
+
ObjectCodec.ts # oid hashing (node:crypto sha1, incremental), loose header,
|
|
616
|
+
# commit/tree/tag parse + tree entry sort rules, varints
|
|
617
|
+
Delta.ts # copy/insert delta application, size verification
|
|
618
|
+
PackParser.ts # §3.6 ingest over a RandomAccess source; node:zlib Inflate.bytesWritten
|
|
619
|
+
PackWriter.ts # §3.5 no-delta emitter: header/count, varint+zdata concat, sha1 trailer
|
|
620
|
+
Advertise.ts # v0 advertisement builders (upload/receive capability sets, peeled tags)
|
|
621
|
+
UploadPack.ts # v0 fetch choreography: request parse, negotiation, shallow, closure driver
|
|
622
|
+
ReceivePack.ts # v0 push choreography: command parse, probe, ingest driver,
|
|
623
|
+
# connectivity check driver, report-status
|
|
624
|
+
GzipBody.ts # Content-Encoding: gzip detection + DecompressionStream + 1f8b sniff
|
|
625
|
+
store/
|
|
626
|
+
Sql.ts # DDL (§3.1), typed query helpers, chunked-IN utilities, transactionSync wrappers
|
|
627
|
+
ObjectStore.ts # row/r2/pack placement policy, batched reads, thresholds, staging, r2_key resolution
|
|
628
|
+
Keys.ts # R2 key scheme (§3.2)
|
|
629
|
+
Closure.ts # commit BFS (gen-bounded), tree walk, visited set, depth bounds
|
|
630
|
+
jobs/
|
|
631
|
+
Import.ts # alarm job: git HTTP client against source, PackParser reuse, status flips
|
|
632
|
+
Fork.ts # alarm job: parent snapshotRows Stream → batched inserts, r2_key sharing
|
|
633
|
+
Purge.ts # alarm job: bounded R2 prefix delete loop (fork-count-gated), deleteAll, Registry removal
|
|
634
|
+
test/
|
|
635
|
+
fixtures/stack.ts # user-authored Alchemy.Stack over GitService() — one per suite
|
|
636
|
+
fixtures/packs/*.pack # generated once by real git, checked in (never at test time)
|
|
637
|
+
codec.test.ts # pure: pkt-line, varints, delta apply, object hashing, tree sort
|
|
638
|
+
pack.test.ts # pure: parse/write round-trips against checked-in fixture packs
|
|
639
|
+
GitService.test.ts # REST lifecycle via HttpApiClient against deployed URL
|
|
640
|
+
GitProtocol.e2e.test.ts # real git CLI against deployed URL (§9)
|
|
641
|
+
GitProtocol.wire.test.ts # isomorphic-git in-process client: malformed packs, forced thin REF_DELTA,
|
|
642
|
+
# ERR-pkt / band-3 assertions
|
|
643
|
+
examples/git-service/
|
|
644
|
+
alchemy.run.ts # user-authored Alchemy.Stack yielding GitService()
|
|
645
|
+
package.json # alchemy deploy | dev | destroy | logs | tail
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
Conventions honored: no `Input<T>` in props; Effect 4 APIs only (`Effect.result` + `Result.*`, `Schema.TaggedErrorClass`, `Schema.Literals`, `Effect.fn`); no `async/await`/raw Node IO in handlers (Effect platform services; sync CPU crypto/zlib wrapped in `Effect.sync` at module boundaries, not per-byte); file-based `main: import.meta.url` (never inline `script` — unsupported in dev); `@/` path alias; test fixtures own their directory; DO RPC methods avoid the reserved name `delete`; JSDoc `@section`/`@example` on exported classes for `bun generate:api-reference` (synthetic provider dir like better-auth).
|
|
649
|
+
|
|
650
|
+
---
|
|
651
|
+
|
|
652
|
+
## 7. Core codec plan: write it in Effect; the zlib boundary is `node:zlib`
|
|
653
|
+
|
|
654
|
+
**Reuse verdict: write our own; port algorithms, import nothing (at runtime).** isomorphic-git is Promise-based, filesystem-shaped, and not streaming-safe under 128 MB (it *is* used as a **devDependency test client** for wire-level negative tests); wasm-git drags libgit2 through WASM for a problem that is ~1500 lines of well-specified codec; ripgit's Rust is the right recipe in the wrong language. The wire formats are small, frozen, and exhaustively documented — the risk is in choreography, not codecs, and choreography must be ours anyway. Everything is pure functions / Stream transforms in `src/Git/Protocol/` with zero platform imports, so the entire codec layer unit-tests in plain bun without a deploy. Port with attribution: `applyDelta` (~80 lines) and tree sort-order from isomorphic-git; OFS-delta offset codec cross-checked against ripgit and gitformat-pack.
|
|
655
|
+
|
|
656
|
+
**The zlib boundary (the one platform-sensitive decision), per empirical workerd verification (workerd 1.20260801.1):**
|
|
657
|
+
|
|
658
|
+
| Need | Tool | Why |
|
|
659
|
+
|---|---|---|
|
|
660
|
+
| Pack entry parsing (unknown compressed span) | `node:zlib` `createInflate()` per entry | `end` fires at `Z_STREAM_END` mid-`write` without `.end()`, and `inflate.bytesWritten` reports the **exact compressed bytes consumed** — the only way to find the next entry. Native, one instance per object, cheap. `DecompressionStream` is disqualified: errors on trailing bytes, doesn't report consumption. |
|
|
661
|
+
| One-shot inflate of an exactly-known span (blob reads via index) | `zlib.inflateSync` or `DecompressionStream("deflate")` | Spans are exact so strictness is fine. |
|
|
662
|
+
| Request-body gunzip | `DecompressionStream("gzip")` | Single well-formed stream; pipe-through. Branch on `Content-Encoding: gzip`, sniff `1f 8b` defensively. |
|
|
663
|
+
| Compression at rest | `zlib.deflateSync(content)` (level 6) | Only runs for delta-resolved objects — the ingest fast path stores the pack's compressed span **verbatim** for non-delta entries. |
|
|
664
|
+
| Hashing | `node:crypto` `createHash("sha1")` incremental | Pack trailers and large objects; loose ids hash `"<type> <size>\0" + content`. |
|
|
665
|
+
|
|
666
|
+
`Protocol/PackParser.ts` (via a thin `Zlib` helper) is the **only** module allowed to touch `node:zlib`. No pako, no fflate.
|
|
667
|
+
|
|
668
|
+
Codec inventory: pkt-line reader/writer (65516 payload cap, flush/delim/ERR), sideband mux, type/size varint (little-endian 7-bit), OFS_DELTA offset (big-endian 7-bit **with the +1 bias per continuation** — the classic bug), delta instruction stream (copy/insert, `size==0 ⇒ 0x10000`), tree entry encode/parse with the `foo` < `foo/` directory sort quirk, commit/tag header parsing (continuation lines, gpgsig), pack header/trailer. Each has table-driven unit tests plus round-trip tests against real-git-generated fixture packs checked into `test/fixtures/packs/` (normal, thin, ofs-heavy, ref-delta, big-blob, empty), with `git index-pack --strict` / `git fsck` as the oracle for writer output.
|
|
669
|
+
|
|
670
|
+
---
|
|
671
|
+
|
|
672
|
+
## 8. Auth model: nothing inside the engine
|
|
673
|
+
|
|
674
|
+
The engine holds no credentials, no users, and no policy. Who may call
|
|
675
|
+
which route is decided by the `HttpRouter` middleware the user puts in front
|
|
676
|
+
of the routes, before the engine sees a request; the engine's routes
|
|
677
|
+
declare no middleware and no auth errors.
|
|
678
|
+
|
|
679
|
+
Every endpoint in `Api/*.ts` is an Effect `HttpApiEndpoint`.
|
|
680
|
+
The user defines their own API and composes its routes beside Git. `Git.ApiLive` is a native HttpRouter route layer,
|
|
681
|
+
merged beside `HttpApiBuilder.layer(AppApi)` by the application. `Git.ApiHandlersLive`
|
|
682
|
+
supplies the shared implementation. `Git.GroupsLive` exposes default native
|
|
683
|
+
group layers for applications that override a Git handler with
|
|
684
|
+
`HttpApiBuilder.group(Git.Api, ...)` and ordinary `Layer.mergeAll`.
|
|
685
|
+
|
|
686
|
+
The application owns authentication and the HTTP server. Its
|
|
687
|
+
`HttpRouter.middleware` layer applies to whichever public route layers it
|
|
688
|
+
chooses. Schema composition (`addHttpApi`) is independent of route registration.
|
|
689
|
+
There is no Git server wrapper and no application API argument.
|
|
690
|
+
|
|
691
|
+
The application can instead build its own API from the exported groups and
|
|
692
|
+
native `HttpApiMiddleware`. Every group must be built against that actual API.
|
|
693
|
+
Raw handlers still receive middleware-provided services.
|
|
694
|
+
|
|
695
|
+
`Git.Engine` provides transport-independent repository operations. The HTTP
|
|
696
|
+
adapter `ReceivePack.decode` reads bounded commands and retains the streaming
|
|
697
|
+
body. The handler authorizes the proposed refs, calls `preparePush`, optionally
|
|
698
|
+
reads staged objects to validate content, then calls `commitPush`. These are
|
|
699
|
+
scoped, single-use operations. Scope exit aborts uncommitted staging; cleanup
|
|
700
|
+
checks durable commit state before deleting spilled bytes. Git report-status
|
|
701
|
+
encoding lives in the HTTP adapter. There is no policy callback service.
|
|
702
|
+
|
|
703
|
+
Application policy functions use ordinary typed effects, including the request
|
|
704
|
+
user and database services. REST ref updates/removals use `prepareRefUpdate` /
|
|
705
|
+
`prepareRefRemoval`; merges use `prepareMerge`, pinning both inspected tips.
|
|
706
|
+
Applications call the same policies on every exposed write path, including
|
|
707
|
+
GitHub merges. `PushDenied` is encoded as a Git rejection or a typed JSON 403.
|
|
708
|
+
|
|
709
|
+
The push pipeline's internal hash route is not part of `Git.Api`: it is
|
|
710
|
+
`Git.InternalApi`, registered by `Git.InternalApiLive` beside public routes and
|
|
711
|
+
outside the user's middleware; it authenticates with `InternalSecret`, a
|
|
712
|
+
deploy-time `Alchemy.Random` value no user holds.
|
|
713
|
+
|
|
714
|
+
Tokens, users, and sessions are an implementation outside the engine:
|
|
715
|
+
the example uses Better Auth API keys (`@better-auth/api-key`) as the
|
|
716
|
+
git password and Better Auth sessions for browsers, both resolved in its
|
|
717
|
+
one middleware; anonymous callers read public repositories (the
|
|
718
|
+
middleware asks `Git.RegistryStore`). The test fixtures do the same with
|
|
719
|
+
two shared secrets. There is no tokens table and no admin key.
|
|
720
|
+
|
|
721
|
+
---
|
|
722
|
+
|
|
723
|
+
## 9. v1 test plan sketch
|
|
724
|
+
|
|
725
|
+
**Tier 1 — pure codec (no cloud, milliseconds):** `codec.test.ts` / `pack.test.ts` in plain alchemy-test. Table-driven pkt-line/varint/delta/tree-sort cases; parse→write→parse round-trips on checked-in fixture packs (generated once by real `git pack-objects`, committed — never generated at test time); thin-pack resolution against a fixture object store; the OFS +1-bias multi-byte offset case; the `0x10000` copy-size case; tree-sort fsck cases; zlib-boundary accounting (concatenated streams, trailing junk, mid-chunk `Z_STREAM_END`); PackWriter output accepted by `git index-pack --strict`.
|
|
726
|
+
|
|
727
|
+
**Tier 2 — deployed REST (`GitService.test.ts`):** standard harness —
|
|
728
|
+
|
|
729
|
+
```ts
|
|
730
|
+
const { test, beforeAll, afterAll, deploy, destroy } = Test.make({
|
|
731
|
+
providers: Cloudflare.providers(), state: Cloudflare.state() });
|
|
732
|
+
const stack = beforeAll(deploy(Stack)); // fixtures/stack.ts
|
|
733
|
+
afterAll.skipIf(!!process.env.NO_DESTROY)(destroy(Stack));
|
|
734
|
+
```
|
|
735
|
+
|
|
736
|
+
`HttpApiClient.make(GitApi, { baseUrl: url })` driving: create repo (admin key) → `RepoCreated` carries a working bootstrap token → 409 on duplicate → PATCH description/readOnly → mint read/write tokens → token list is masked → refs empty on fresh repo → REST ref update with CAS (`RefConflict` on stale `expectedOid`, `ObjectNotFound` on bogus oid, `ReadOnlyRepo` when flagged) → typed 404s decode as the tagged classes → token TTL expiry (60 s + bounded `Effect.repeat` poll) and revocation → 401/403 after → delete → `status: "deleting"` → eventual 404. First requests retried through edge propagation (`Schedule.spaced("1500 millis"), times: 40`). Deterministic repo names; pre-test purge of leftovers (delete-if-exists before create).
|
|
737
|
+
|
|
738
|
+
**Tier 3 — real git CLI e2e (`GitProtocol.e2e.test.ts`, the money suite):** deploys the same stack; drives the actual `git` binary via the Effect platform `Command` service against `https://x:${token}@${host}/${owner}/${repo}.git`, work-trees under `FileSystem.makeTempDirectory` (Effect platform services only — no `node:fs`). Every step wrapped in bounded retries/timeouts per the speed doctrine (per-test ≤ 120 s):
|
|
739
|
+
|
|
740
|
+
1. **Empty-repo clone** — clone succeeds, warns empty, correct default branch (symref/unborn behavior).
|
|
741
|
+
2. **First push** — init, 3 commits (incl. an executable file, a symlink, a subdirectory), `git push` → `ok` report; REST `refs` + `commits/:oid` + `trees/:oid` + `/file` agree with `git rev-parse`/`git ls-tree`/`git show` byte-for-byte.
|
|
742
|
+
3. **Clone-back + fsck** — fresh clone, `git fsck --strict` clean, `git log` matches. (Transitively proves advertisement, negotiation, pack emission, object round-tripping.)
|
|
743
|
+
4. **Incremental fetch** — push 2 more commits from clone A; `git fetch` in clone B; fast-forward merge; content identical (asserts the haves/ACK path, not just re-clone).
|
|
744
|
+
5. **CAS / force push** — non-FF push rejected (`ng fetch first`), then `push --force` succeeds; fetch-after-force-push works in the other clone. **CAS race**: two clones push conflicting updates concurrently → exactly one `ok`, one `ng`; `--atomic` batch is all-or-nothing.
|
|
745
|
+
6. **Concurrent push serialization** — two parallel pushes to one repo → both eventually succeed (semaphore wait) or the second sees 503 + retry; never a corrupted repo.
|
|
746
|
+
7. **Branch + tag lifecycle** — push new branch, push **annotated** tag (round-trips as a tag object, peeled `^{}` in advertisement — ripgit's silent-drop bug is a named regression test), `git push --delete` both.
|
|
747
|
+
8. **Shallow** — `git clone --depth 1` succeeds; `git fetch --deepen 1` extends it.
|
|
748
|
+
9. **Large blob** — commit a 3 MiB random binary (deterministic seed), push, clone back, byte-identical (exercises `location='r2'` both directions).
|
|
749
|
+
10. **Big-ish push** (`skipIf(process.env.FAST)`) — ~2 000 deterministic commits (fixture script, cached tarball) push and clone within timeout (exercises thin-pack ingest with deep delta chains).
|
|
750
|
+
11. **readOnly** — flag repo readOnly, push → per-ref `ng`; unflag, push succeeds.
|
|
751
|
+
12. **Auth matrix** — read token clones but push → 403/`ng`; garbage token → 401 + git auth-retry stderr; token in remote URL works.
|
|
752
|
+
13. **Fork + import** — fork, poll `status` via `Effect.repeat` until `ready`, clone fork, histories identical, push divergent commit to fork → parent unaffected; **delete parent → fork still clones** (R2 fork-retention pin). Import from a sibling repo in the same deployment (avoids external flake), verify refs; optionally a small public repo depth-limited.
|
|
753
|
+
14. **Cleanup pin** — `stack.destroy()` at suite end; out-of-band distilled verification that the R2 prefix and Registry rows are gone (leak = provider bug by definition).
|
|
754
|
+
|
|
755
|
+
**Tier 3b — wire-level negative tests (`GitProtocol.wire.test.ts`):** isomorphic-git as an in-process HTTP client for cases needing byte-level control without shelling out: truncated pack → checksum `ng`; forced thin REF_DELTA against known base; pack referencing a missing tree → connectivity-check `ng`; oversize pack → clean in-band 50 MiB rejection; `ERR` pkt / band-3 assertions.
|
|
756
|
+
|
|
757
|
+
Per house rules: `bun run test test/... --profile testing` wrapped in `timeout 240`; `Effect.repeat` with bounded schedules for all polling (never `while(Date.now())`); deterministic names (never `Date.now()`); `NO_DESTROY=1` for local iteration.
|
|
758
|
+
|
|
759
|
+
---
|
|
760
|
+
|
|
761
|
+
## 10. Cut list & v2 seams
|
|
762
|
+
|
|
763
|
+
Every cut, its consequence, and the seam that makes it additive (seams marked **▲** are already load-bearing columns/interfaces in v1's shape):
|
|
764
|
+
|
|
765
|
+
| Cut | Consequence | Upgrade path |
|
|
766
|
+
|---|---|---|
|
|
767
|
+
| Protocol v2 | None visible — clients fall back to v0 silently | Additive: branch on `Git-Protocol: version=2` in `info/refs`, add `ls-refs` + `fetch` command handlers over the same `Closure` + `PackWriter` code. Advertisement/choreography are per-version files — a new file, not a rewrite. |
|
|
768
|
+
| ▲ Pack compaction / R2 packs (v1.1) | DO storage cost 13× R2 until it lands; 1 M-object manifest cap | `objects.location='pack'` + `pack_id`/`pack_offset` columns exist; emitter dispatches on location; alarm scaffolding present. Clone fast-path then streams whole entry-regions from R2 (B's verbatim-region trick — OFS offsets are entry-relative, so contiguous regions copy safely). |
|
|
769
|
+
| ▲ Streaming push > 50 MiB | Large initial pushes rejected (clean in-band report) | `PackParser` is written against `RandomAccess`; swap the memory buffer for an R2-multipart tee + ranged-read re-resolution. Plan body caps (100 MB Pro) remain the outer bound. |
|
|
770
|
+
| `thin-pack` / `ofs-delta` in **served** packs | Fatter fetches (~1.3–2×, no cross-object compression) | Delta-aware writer, or serve compaction packs (which may carry deltas) verbatim for clones. |
|
|
771
|
+
| `filter` (partial clone) | v0 clients warn and ignore; `--filter` unavailable | Advertise `filter`; `blob:none`/`blob:limit` are manifest predicates — the walk already knows types/sizes. |
|
|
772
|
+
| `include-tag` | Clients cope (fetch tags explicitly) | Tag-closure step in `Closure`. |
|
|
773
|
+
| `deepen-since` / `deepen-not` / `deepen-relative` (`git fetch --deepen`) | Rare flags fail (absolute `--depth <n>` deepening works) | ▲ `commits.commit_time` already stored; add walk predicates. |
|
|
774
|
+
| Multi-round minimal negotiation | Slightly fat incremental fetches (boundary snapshot redundancy) | ▲ Real common-ancestor negotiation over `commits`/`commit_parents` + `gen` — all data present. |
|
|
775
|
+
| `packfile-uris` | — | Natural once compacted packs exist: presigned R2 URLs for whole packs. |
|
|
776
|
+
| push-cert, push-options | Not advertised ⇒ clients don't send them | Add protocol parsing and expose decoded data to application handlers. |
|
|
777
|
+
| Force-push / branch protection | Any write token can force-push | Policy table consulted inside the existing CAS `transactionSync` — pure addition. |
|
|
778
|
+
| Object-level GC | Unreachable objects persist (storage is the cheap resource) | Reachability sweep in the GC alarm; fork-aware deletion needs the refcount ledger below. |
|
|
779
|
+
| Shared-pack refcount ledger | Fork-retention rule is coarse (`fork_count > 0` retains the whole prefix forever) | Registry-maintained per-key refcounts on fork/delete → precise shared-object GC. |
|
|
780
|
+
| Dumb HTTP | None (modern git never falls back when smart content-types are correct) | Never. |
|
|
781
|
+
| SHA-256 repos | `object-format=sha1` advertised; mismatch rejected with `ERR` | ▲ `Oid` is branded; widen schema + dual hashing. |
|
|
782
|
+
| LFS | Large files ride normal objects up to the 64 MiB cap | LFS Batch API as an independent REST group + R2 streaming (chr33s reference); keys `{repoId}/lfs/<sha256>` reserved. |
|
|
783
|
+
| Registry sharding / global listing at scale | Singleton Registry serializes control-plane writes | ▲ `getByName("registry:" + owner)` — RPC interface unchanged. |
|
|
784
|
+
| Users / orgs / OAuth / public repos | Single admin key + capability tokens only | ▲ `Credentials` Context service boundary; edge-auth worker via service binding. |
|
|
785
|
+
| Cheap forks / big-repo import | Fork copies parent row bytes; import capped at 50 MiB pack | Falls out of compaction (bytes in shared R2 packs) + streaming ingest — both seams above. |
|
|
786
|
+
| PRs / issues / review | — | New tables in the Repo DO (it already holds the commit graph; merge-bases are `commit_parents` BFS), new HttpApi groups; the REST layer grows by group addition, not restructuring. |
|
|
787
|
+
|
|
788
|
+
---
|
|
789
|
+
|
|
790
|
+
*Implementable from this document plus the repo: start with `src/Git/Protocol/` (Tier-1 tests green offline), then `Store/`, then `RepoObject.ts` choreography, then the Worker/API mount, then the e2e suite. `packages/alchemy/src/Cloudflare/StateStore/Api.ts` is the mounting reference; `test/Cloudflare/Workers/fixtures/http-api/` is the Worker+DO+R2 reference; `packages/better-auth` is the packaging reference.*
|
|
791
|
+
---
|
|
792
|
+
|
|
793
|
+
# Part II — v2: scaling to enormous repositories
|
|
794
|
+
|
|
795
|
+
v1 is deliberately one Durable Object per repo holding **everything**: refs,
|
|
796
|
+
the object index, and the object bytes. That buys transactional ref CAS for
|
|
797
|
+
free and is provably correct (Part I), but it caps out on two axes:
|
|
798
|
+
|
|
799
|
+
- **Storage** — DO SQLite is 10 GB, so bytes-in-rows caps a repo at ~10 GB.
|
|
800
|
+
- **Bandwidth** — every clone byte transits one single-threaded DO in one
|
|
801
|
+
datacenter. No horizontal read scaling, no geographic spread.
|
|
802
|
+
|
|
803
|
+
The v2 insight: **a git repo is 99.9% immutable content-addressed bytes and
|
|
804
|
+
0.1% mutable transactional state.** Immutable content-addressed data needs
|
|
805
|
+
*zero* coordination, so it should never live behind a coordination point.
|
|
806
|
+
Sharding the DO would be solving a problem we should not have. Instead,
|
|
807
|
+
split the planes.
|
|
808
|
+
|
|
809
|
+
## 11. The three planes
|
|
810
|
+
|
|
811
|
+
| Plane | Home | Holds | Scales by |
|
|
812
|
+
|---|---|---|---|
|
|
813
|
+
| **Refs** (mutable) | Repo DO | refs, tokens, config, push staging, commit graph | Nothing needed — kilobytes; the only thing that requires serialized CAS |
|
|
814
|
+
| **Objects** (immutable) | R2 | content-addressed packs + pack indexes + clone bundles | R2 (unbounded, immutable keys, no per-key write contention) |
|
|
815
|
+
| **Serving** (stateless) | Workers + Cache API | advertisement, negotiation, pack streaming | Per-PoP: every datacenter serves independently |
|
|
816
|
+
|
|
817
|
+
The DO stays the authority for "what is the current tip", which is the only
|
|
818
|
+
question that needs an authority. Everything else is content-addressed and
|
|
819
|
+
therefore cacheable, shareable, and replicable without coordination.
|
|
820
|
+
|
|
821
|
+
### 11.1 Why this is the right shape
|
|
822
|
+
|
|
823
|
+
This is the same refs-in-database + objects-in-blob-store architecture that
|
|
824
|
+
GitHub (Spokes), GitLab (Gitaly + object storage), and AWS CodeCommit
|
|
825
|
+
(DynamoDB + S3) converged on, expressed in Cloudflare primitives. The
|
|
826
|
+
difference from v1 is not "more machines" — it is *removing the byte path
|
|
827
|
+
from the coordination point*.
|
|
828
|
+
|
|
829
|
+
### 11.2 Request flows after v2
|
|
830
|
+
|
|
831
|
+
```
|
|
832
|
+
clone (warm) client → Worker → Cache API hit (DO: 0 calls, R2: 0 gets)
|
|
833
|
+
clone (cold) client → Worker → DO.planClone (refs only, ~1 KB)
|
|
834
|
+
→ R2 GET bundle → stream to client (DO: 1 tiny RPC)
|
|
835
|
+
fetch (incr.) client → Worker → DO.planFetch (negotiate on the
|
|
836
|
+
commit graph) → R2 ranged reads (DO: 1 tiny RPC)
|
|
837
|
+
push client → Worker → DO (ingest + CAS, unchanged) (serialized, by design)
|
|
838
|
+
```
|
|
839
|
+
|
|
840
|
+
## 12. Object plane: packs, indexes, bundles
|
|
841
|
+
|
|
842
|
+
### 12.1 Compaction (loose rows → R2 packs)
|
|
843
|
+
|
|
844
|
+
An alarm fires when `SUM(zsize) WHERE location='row'` exceeds **1 GB** or the
|
|
845
|
+
live loose count exceeds **50 000**. It streams a no-delta pack of the
|
|
846
|
+
oldest N objects to R2 via multipart (5 MiB parts), then flips those rows to
|
|
847
|
+
`location='pack'` with `pack_id`/`pack_offset` in one `transactionSync` and
|
|
848
|
+
NULLs their `zdata`.
|
|
849
|
+
|
|
850
|
+
Because objects are stored **pre-deflated** (v1's decision, made for CPU
|
|
851
|
+
reasons), a pack is literally `varint header + zdata` concatenated — so
|
|
852
|
+
compaction is a copy, not a recompression, and `pack_offset` points at a
|
|
853
|
+
byte span that can be served by an R2 ranged read verbatim.
|
|
854
|
+
|
|
855
|
+
Keys are content-addressed and immutable:
|
|
856
|
+
|
|
857
|
+
```
|
|
858
|
+
{repoId}/packs/pack-{sha1}.pack compacted objects (immutable)
|
|
859
|
+
{repoId}/bundles/bundle-{refsHash}.pack full-clone bundle (immutable)
|
|
860
|
+
{repoId}/objects/{oid} oversize loose objects (v1, unchanged)
|
|
861
|
+
```
|
|
862
|
+
|
|
863
|
+
**Only blobs are packed (DESIGN §22).** `Compact.ts` selects `type = 3`
|
|
864
|
+
rows exclusively; commits, trees and tags stay `location='row'` in SQLite
|
|
865
|
+
for the life of the repo, and the REST `ObjectStats` reports them as
|
|
866
|
+
`resident` (distinct from `loose`, which is now *blobs awaiting
|
|
867
|
+
compaction*). The reason is the fetch path: the want→have closure is a
|
|
868
|
+
tree walk, and a tree walk over pack storage is the worst access pattern
|
|
869
|
+
a window cache can see — trees are tiny and, packed in oid order, land in
|
|
870
|
+
every 4 MiB window of every pack. On a 15.6k-object repo that walk alone
|
|
871
|
+
cost 12 s of TTFB after batching (27 s before). Over rows it is a handful
|
|
872
|
+
of batched `SELECT ... IN` calls. Commits and trees are a few percent of a
|
|
873
|
+
repo's bytes, so keeping them local buys sub-second negotiation for every
|
|
874
|
+
incremental fetch at negligible SQLite cost.
|
|
875
|
+
|
|
876
|
+
### 12.2 Clone bundles
|
|
877
|
+
|
|
878
|
+
A clone is, on the wire, exactly one pack containing the closure of the
|
|
879
|
+
advertised refs. v1 recomputes that pack per clone. A **bundle** computes it
|
|
880
|
+
once, after pushes settle (debounced alarm), and stores it under a key
|
|
881
|
+
derived from the ref snapshot it covers (`refsHash`).
|
|
882
|
+
|
|
883
|
+
Serving a clone then becomes: match the request's wants against the current
|
|
884
|
+
advertisement, and if they agree, stream the bundle bytes. No closure walk,
|
|
885
|
+
no per-object reads, no compression — and the bytes are immutable, so the
|
|
886
|
+
Cache API can serve them from every PoP.
|
|
887
|
+
|
|
888
|
+
Staleness is handled in three escalating tiers:
|
|
889
|
+
|
|
890
|
+
1. **Exact match** (v2.0) — bundle covers exactly the current refs → stream
|
|
891
|
+
it; otherwise fall back to dynamic assembly. Hot repos with bursty clone
|
|
892
|
+
traffic (CI fleets cloning the same tip) hit this nearly always.
|
|
893
|
+
2. **`packfile-uris`** (v2.1, needs protocol v2) — the server hands the
|
|
894
|
+
client a CDN URL for the big pack and sends only the remainder in-band.
|
|
895
|
+
The bundle no longer has to be current, only *mostly* current.
|
|
896
|
+
3. **`bundle-uri`** (v2.2, git ≥ 2.38) — advertise a base bundle plus
|
|
897
|
+
incrementals with `creationToken`s; the client fetches them all from
|
|
898
|
+
cache and then does an ordinary incremental fetch. Server work per clone
|
|
899
|
+
collapses to a tiny negotiation.
|
|
900
|
+
|
|
901
|
+
Bundles are derived data: GC keeps the newest base plus K incrementals and
|
|
902
|
+
deletes older ones lazily. Because keys are content-addressed, a new bundle
|
|
903
|
+
never overwrites an in-flight one.
|
|
904
|
+
|
|
905
|
+
### 12.3 The object index at scale
|
|
906
|
+
|
|
907
|
+
If the index itself outgrows the DO (~10M+ objects), the answer is again not
|
|
908
|
+
a shard: the **pack index files in R2 are the index** (binary-searchable by
|
|
909
|
+
oid), and the oid's own hash prefix is a perfectly uniform partition key if
|
|
910
|
+
they ever need splitting. Content addressing *is* the trie — there is no
|
|
911
|
+
tree structure to invent.
|
|
912
|
+
|
|
913
|
+
## 13. Serving plane: Workers + Cache API
|
|
914
|
+
|
|
915
|
+
- **Advertisement caching.** `GET /info/refs` output changes only on push,
|
|
916
|
+
so it is cached under a key derived from the repo id + refs hash and
|
|
917
|
+
purged on push. A clone storm then costs the DO ~one call *per push*
|
|
918
|
+
rather than one per clone.
|
|
919
|
+
- **Worker-side clone fast path.** The Worker asks the DO for a *plan*
|
|
920
|
+
(`planClone`: refs snapshot + bundle key, ~1 KB) and, when the plan says
|
|
921
|
+
"bundle", streams R2 → client itself, framing sideband as it goes. The DO
|
|
922
|
+
never touches a pack byte.
|
|
923
|
+
- **Dynamic fetches** stay proxied to the DO in v2.0 (they need the commit
|
|
924
|
+
graph); v2.1 moves negotiation to the Worker over a cached commit-graph
|
|
925
|
+
file, leaving the DO purely as the ref authority.
|
|
926
|
+
|
|
927
|
+
## 14. Scaling model (napkin math)
|
|
928
|
+
|
|
929
|
+
Everything is per-repo; repos are independent DOs, so fleet capacity is the
|
|
930
|
+
sum. These are estimates derived from platform limits and architecture, not
|
|
931
|
+
measurements — §15 is the plan to replace them with numbers.
|
|
932
|
+
|
|
933
|
+
| Dimension | v1 (as built) | v2 (this design) | Bound by |
|
|
934
|
+
|---|---|---|---|
|
|
935
|
+
| Clone bandwidth (per repo) | ~50–100 MB/s aggregate | edge line rate; Tbps-class aggregate | v1: one DO streams every byte. v2: immutable bytes in cache/R2 |
|
|
936
|
+
| Clone TPS (per repo) | ~50–200/s | 10k+/s | v2: advertisement cached; DO called ~once per push |
|
|
937
|
+
| Incremental fetch | ~1–5 s CPU per 1M-object closure | ms for recent tips | commit graph + (v2.1) bitmaps |
|
|
938
|
+
| Push TPS (per repo) | ~3–10/s | ~5–20/s | **Inherent**: a ref is a serialization point in git's own semantics |
|
|
939
|
+
| Repo size | ~10 GB | unbounded (R2) | DO SQLite cap lifted off the byte path |
|
|
940
|
+
| Push size | 50 MiB | unbounded | `RandomAccess` seam → R2 multipart tee |
|
|
941
|
+
|
|
942
|
+
**v2 makes reads scale like a CDN and leaves writes scaling like git** —
|
|
943
|
+
which is the correct place to land, because git's semantics cap per-ref
|
|
944
|
+
write concurrency regardless of who hosts it.
|
|
945
|
+
|
|
946
|
+
## 15. Remaining bottlenecks (ranked) and how each is measured
|
|
947
|
+
|
|
948
|
+
1. **Cold closure computation on enormous repos.** A 10M-object visited set
|
|
949
|
+
as a JS `Set` is ~400 MB–1 GB, over the Worker's 128 MB. Fix is git's own:
|
|
950
|
+
binary commit-graph + **reachability bitmaps** (EWAH), turning a 10M-node
|
|
951
|
+
walk into bitmap ANDs over a few MB. This is the hardest real engineering
|
|
952
|
+
on the path to enormous repos.
|
|
953
|
+
2. ~~**Subrequest limit (1000) vs. fragmented packs.**~~ **Addressed**
|
|
954
|
+
(§16.2): pack reads are served from window-aligned slabs, so a fetch
|
|
955
|
+
costs a handful of R2 GETs rather than one per object (68.2 s → 1.16 s
|
|
956
|
+
on a 1202-object pack). Remaining work is pack *ordering* — laying out
|
|
957
|
+
compaction output so a typical fetch touches few windows — which is an
|
|
958
|
+
optimization now rather than a cliff.
|
|
959
|
+
3. **Per-repo push serialization.** Inherent (see above); measured, not
|
|
960
|
+
fixed.
|
|
961
|
+
4. **Registry singleton** — ~500 control-plane ops/s globally. Resolve
|
|
962
|
+
caching shields reads; `getByName("registry:" + owner)` shards writes.
|
|
963
|
+
5. **First-byte latency for distant clients** — the refs DO lives in one
|
|
964
|
+
datacenter. Cached advertisements hide most of it; location hints place
|
|
965
|
+
hot repos near their users.
|
|
966
|
+
6. **R2 write throughput during compaction/bundling** — a large repack is
|
|
967
|
+
minutes of alarm work; must use the bounded-per-run + re-arm pattern the
|
|
968
|
+
purge job already uses (15-minute alarm budget).
|
|
969
|
+
|
|
970
|
+
Each gets a benchmark in `test/GitBench.e2e.test.ts` (§16) so the table
|
|
971
|
+
above becomes measured numbers rather than estimates.
|
|
972
|
+
|
|
973
|
+
## 16. Measured (test/GitBench.e2e.test.ts, deployed, SCALE=1)
|
|
974
|
+
|
|
975
|
+
Run: `bun run test test/GitBench.e2e.test.ts --profile testing`
|
|
976
|
+
(`BENCH_SCALE=4` for 4× workloads). Each case asserts only correctness and
|
|
977
|
+
prints a line, so a slow datacenter minute can never fail the suite.
|
|
978
|
+
|
|
979
|
+
### 16.1 End-to-end (via the `git` CLI, so client cost is included)
|
|
980
|
+
|
|
981
|
+
| Measurement | Result | Reading |
|
|
982
|
+
|---|---|---|
|
|
983
|
+
| push 300 commits | 2.0 s (147 commits/s) | one push, ingest-dominated |
|
|
984
|
+
| clone — dynamic closure walk | 1.17 s | v1 path: walk + per-object reads |
|
|
985
|
+
| **clone — R2 bundle** | **0.44 s** | **2.7× faster** |
|
|
986
|
+
| clone — fully packed repo (ranged R2 reads) | 0.60 s | compaction costs ~35% vs bundle, still beats dynamic |
|
|
987
|
+
| incremental fetch (1 commit) | 477 ms | 2 round trips + negotiation |
|
|
988
|
+
| 8 concurrent clones, 256 KiB each | 9.9–10.7 clones/s | bound by `git` process spawn + TLS, **not** by the server |
|
|
989
|
+
| 10 serial pushes (same branch) | 4.6 pushes/s | the predicted per-ref serialization floor |
|
|
990
|
+
| 4 concurrent pushes (distinct branches) | 9.2 pushes/s | DO semaphore serializes ingest, by design |
|
|
991
|
+
| 10 concurrent repo creates | 7.9–12 creates/s | Registry singleton |
|
|
992
|
+
| repo GET (resolve-cached) | 25 ms | in-isolate cache hit |
|
|
993
|
+
| repo LIST, 13 rows → 14 rows | **416 ms → 27 ms** | **15×** after fixing the N+1 (below) |
|
|
994
|
+
| compact 202 loose objects → R2 | 0.9 s | ~220 objects/s |
|
|
995
|
+
|
|
996
|
+
### 16.2 Server capacity — the v2 claim, measured
|
|
997
|
+
|
|
998
|
+
Driving `git-upload-pack` over raw HTTP removes the client from the
|
|
999
|
+
measurement. Comparing the bundle path against the dynamic closure walk
|
|
1000
|
+
(forced by sending a `have` the server does not know, which disqualifies
|
|
1001
|
+
the bundle while producing the identical pack) is like-for-like:
|
|
1002
|
+
|
|
1003
|
+
| Concurrency | dynamic closure walk (v1 path) | R2 bundle via Worker (v2 path) |
|
|
1004
|
+
|---|---|---|
|
|
1005
|
+
| 1 | 4.7 clones/s, 2.4 MiB/s | 5.4 clones/s, 2.7 MiB/s |
|
|
1006
|
+
| 8 | 17.2 clones/s, 8.7 MiB/s | 17.9 clones/s, 9.1 MiB/s |
|
|
1007
|
+
| **32** | **20.2 clones/s, 10.2 MiB/s** | **62.1 clones/s, 31.5 MiB/s** |
|
|
1008
|
+
|
|
1009
|
+
Dynamic fetch over a **compacted** repo (1202 objects in one R2 pack), the
|
|
1010
|
+
case bottleneck #2 warned about:
|
|
1011
|
+
|
|
1012
|
+
| | |
|
|
1013
|
+
|---|---|
|
|
1014
|
+
| one ranged GET per object (naive) | **68.2 s** for a 53 KiB fetch |
|
|
1015
|
+
| coalesced window reads | **1.16 s** (59×) |
|
|
1016
|
+
|
|
1017
|
+
Reading a pack object-by-object costs one serialized R2 round trip each.
|
|
1018
|
+
Window-aligned slabs (4 MiB, ≤6 retained) mean touching any object fetches
|
|
1019
|
+
its whole neighbourhood once, so a small pack collapses to a single GET —
|
|
1020
|
+
and the Workers subrequest budget stops being a correctness cliff.
|
|
1021
|
+
|
|
1022
|
+
This is the design's central claim, measured. The dynamic path **saturates
|
|
1023
|
+
at ~20 clones/s** — one Durable Object's single-threaded ceiling, and more
|
|
1024
|
+
load does not improve it — while the bundle path keeps scaling with
|
|
1025
|
+
concurrency (3.1× at 32-way, still climbing). Serialized planes flatten;
|
|
1026
|
+
immutable content-addressed bytes served by Workers do not.
|
|
1027
|
+
|
|
1028
|
+
### 16.3 Real world: this repository (test/GitRealWorld.e2e.test.ts)
|
|
1029
|
+
|
|
1030
|
+
The strongest test we have is pushing the alchemy monorepo itself — a
|
|
1031
|
+
depth-1 tree re-committed as one root commit, which keeps the real object
|
|
1032
|
+
count and byte volume while staying fully connected (pushing from a shallow
|
|
1033
|
+
clone would reference parents the server does not have, which receive-pack
|
|
1034
|
+
correctly refuses):
|
|
1035
|
+
|
|
1036
|
+
| Step | Result |
|
|
1037
|
+
|---|---|
|
|
1038
|
+
| push 12,315 files / 13,699 objects / 38.1 MiB | 20.6 s |
|
|
1039
|
+
| clone back, loose objects | 19.5 s |
|
|
1040
|
+
| **clone back after compaction (R2 packs)** | **3.4 s — 5.7×** |
|
|
1041
|
+
| `git fsck --strict`, HEAD and tree oid equality | identical |
|
|
1042
|
+
| incremental push on top | works |
|
|
1043
|
+
|
|
1044
|
+
Compaction making clones **5.7× faster** on a real repo is the v2 storage
|
|
1045
|
+
plane paying off end to end: the same objects, read as a few large ranged
|
|
1046
|
+
GETs out of an immutable pack instead of thousands of row reads.
|
|
1047
|
+
|
|
1048
|
+
Verification note: the suite deliberately does **not** `diff -r` the two
|
|
1049
|
+
working trees. Tree-oid equality is the stronger and correct assertion —
|
|
1050
|
+
identical tree oids mean every path, mode and blob matches — whereas a
|
|
1051
|
+
directory diff also compares things git does not track (empty directories,
|
|
1052
|
+
submodule mount points), which legitimately differ between a working tree
|
|
1053
|
+
and a fresh clone of it.
|
|
1054
|
+
|
|
1055
|
+
### 16.4 Push size: the cap is gone, the large path needs a cursor
|
|
1056
|
+
|
|
1057
|
+
A push larger than the in-memory threshold is **no longer rejected**. The
|
|
1058
|
+
body is parked in R2 and parsed back through `Store/PackSource.ts`, an
|
|
1059
|
+
R2-backed `RandomAccess` with window-coalesced reads — the seam
|
|
1060
|
+
`PackParser` was written against from the start. The DO's ingest now runs
|
|
1061
|
+
on `PackParser` (which the pack fixtures cover directly) rather than its
|
|
1062
|
+
own buffer-only copy.
|
|
1063
|
+
|
|
1064
|
+
Getting there took one real fix. `PackParser` read **the entire remainder
|
|
1065
|
+
of the pack for every entry** (`source.read(offset, dataEnd - offset)`).
|
|
1066
|
+
On a buffer that is free — a subarray view — which is why nobody noticed;
|
|
1067
|
+
against R2 it copies ~19 MiB per entry, so a 13.7k-object pack moved
|
|
1068
|
+
hundreds of gigabytes and blew a 600 s timeout. Entries are a few KiB, so
|
|
1069
|
+
the parser now reads a bounded 512 KiB window and grows it only for the
|
|
1070
|
+
rare object whose compressed stream runs past it.
|
|
1071
|
+
|
|
1072
|
+
| 38 MiB alchemy push | before | after |
|
|
1073
|
+
|---|---|---|
|
|
1074
|
+
| via R2 (streamed ingest) | >600 s (timeout) | **44.4 s** |
|
|
1075
|
+
| in memory | 20.6 s | 20.6 s |
|
|
1076
|
+
|
|
1077
|
+
So the R2 path costs about **2×** memory rather than 30×, and the
|
|
1078
|
+
threshold ships at 32 MiB — comfortably inside a 128 MB isolate, covering
|
|
1079
|
+
the overwhelming majority of pushes at full speed, with anything larger
|
|
1080
|
+
merely slower instead of refused.
|
|
1081
|
+
|
|
1082
|
+
### 16.5 Public repos — anonymous read access
|
|
1083
|
+
|
|
1084
|
+
Repos carry a `public` flag (GitHub's model). Tokenless callers are
|
|
1085
|
+
`{ kind: "anonymous" }` in `CallerAuth` and get exactly one grant: `read`
|
|
1086
|
+
on repos whose flag is set — REST reads, raw file/blob routes, the
|
|
1087
|
+
advertisement, and `upload-pack` (tokenless `git clone`). Writes, token
|
|
1088
|
+
management, and everything on private repos still require a token;
|
|
1089
|
+
anonymous wire requests to private repos answer `401 + WWW-Authenticate`
|
|
1090
|
+
so git prompts. Listing is visibility-filtered: the admin key sees all
|
|
1091
|
+
rows, everyone else sees `is_public = 1` only (denormalized into the
|
|
1092
|
+
Registry, like the other list columns). Enforcement stays in the Repo DO
|
|
1093
|
+
(`authorize`/`wireAuth`) — the Worker middleware only parses credentials,
|
|
1094
|
+
and a missing `Authorization` header now parses to anonymous instead of
|
|
1095
|
+
401.
|
|
1096
|
+
|
|
1097
|
+
### 16.5 The push cap was still there — request buffering
|
|
1098
|
+
|
|
1099
|
+
Pushing the **full alchemy history** (~100 MiB pack) found the residual
|
|
1100
|
+
cap: the DO read the request with `request.arrayBuffer`, materializing the
|
|
1101
|
+
whole body inside the 128 MB isolate before any parsing — OOM, 500, after
|
|
1102
|
+
~7 s. Everything downstream (R2 parking, windowed parsing) was already
|
|
1103
|
+
size-independent; the *receive* wasn't.
|
|
1104
|
+
|
|
1105
|
+
The fix is `Store/IncomingBody.ts`: the body is consumed as a stream.
|
|
1106
|
+
Bodies that finish within `MAX_PACK_BYTES` return as one buffer (the fast
|
|
1107
|
+
path); the moment the threshold is crossed, everything received and
|
|
1108
|
+
everything still arriving spills to R2 via **multipart upload** in uniform
|
|
1109
|
+
8 MiB parts, so peak memory is ~threshold + one part no matter how large
|
|
1110
|
+
the push. A 1 MiB head is retained for the pkt-line command section, and
|
|
1111
|
+
the pack is parsed back off R2 through `sliceRandomAccess` + windowed
|
|
1112
|
+
reads. gzip bodies (git only gzips requests it fully buffered, i.e. small
|
|
1113
|
+
ones) keep the buffered path; a spilled gzip body is rejected in-band.
|
|
1114
|
+
|
|
1115
|
+
Measured, full alchemy `main` (44,051 objects, 67 MiB thin pack):
|
|
1116
|
+
|
|
1117
|
+
push: 92 s wall — server ingest 76.8 s (SQL 5.7 s)
|
|
1118
|
+
clone back: 50.6 s, 152.8 MiB; `git fsck --strict` clean, HEAD identical
|
|
1119
|
+
|
|
1120
|
+
Also worth recording: Cloudflare's edge caps request bodies at 100 MB on
|
|
1121
|
+
most plans, so beyond that git needs its transfer split (`git push` per
|
|
1122
|
+
ref / partial history first) regardless of what this service does.
|
|
1123
|
+
|
|
1124
|
+
### 16.6 Ingest batching, and what it revealed
|
|
1125
|
+
|
|
1126
|
+
Staging cost **two statements per object** — an existence probe and an
|
|
1127
|
+
insert — so a 13.7k-object push ran ~27k statements and ~13.7k transactions
|
|
1128
|
+
inside one single-threaded Durable Object. Ingest now stages in batches of
|
|
1129
|
+
256 (or 8 MiB) via a single `transactionSync` with `INSERT OR IGNORE` (no
|
|
1130
|
+
probe), adopting crashed-push rows with one chunked `UPDATE`, and the
|
|
1131
|
+
parser hands the sink its already-inflated bytes so commits/trees are not
|
|
1132
|
+
inflated twice.
|
|
1133
|
+
|
|
1134
|
+
38 MiB alchemy push via R2: 44.4s -> 37.4s
|
|
1135
|
+
clone back: 18.5s -> 16.6s
|
|
1136
|
+
|
|
1137
|
+
A 16% win, not the 5x the statement count suggested — which is the useful
|
|
1138
|
+
result: **transaction commits were not the dominant cost**. What remains is
|
|
1139
|
+
per-object work that batching cannot remove (inflate, sha1, one statement
|
|
1140
|
+
each, Effect frames) plus, importantly, *client-side* cost the measurement
|
|
1141
|
+
does not separate: `git push` also packs 13.7k objects locally and uploads
|
|
1142
|
+
38 MiB over the tester's uplink. Isolating server ingest needs either
|
|
1143
|
+
server-side timing or a loopback baseline — until then these numbers are an
|
|
1144
|
+
upper bound on server cost, not a measurement of it.
|
|
1145
|
+
|
|
1146
|
+
The deeper point is that this work is **serial by construction**: one repo
|
|
1147
|
+
is one Durable Object, and a push is one request to it. No amount of
|
|
1148
|
+
horizontal Worker/R2 scale touches it. Making a single large push
|
|
1149
|
+
dramatically faster requires parallelism *within* the repo — see §17.
|
|
1150
|
+
|
|
1151
|
+
### 16.7 What the measurements corrected
|
|
1152
|
+
|
|
1153
|
+
1. **`repos.list` was O(N) Durable Object wakes** — the handler fanned out
|
|
1154
|
+
`getRepoMeta` per row, so listing 100 repos woke 100 DOs. **Fixed**:
|
|
1155
|
+
`default_branch` / `read_only` / `status` are denormalised onto the
|
|
1156
|
+
registry row (the Repo DO pushes them on change and remains the source
|
|
1157
|
+
of truth). 416 ms → 27 ms. Live `objects` stats still need the DO, so a
|
|
1158
|
+
listing reports zeros there and callers who want them read the repo
|
|
1159
|
+
directly. Note for future schema work: the Registry needed an explicit
|
|
1160
|
+
`ALTER TABLE` migration, because `CREATE TABLE IF NOT EXISTS` silently
|
|
1161
|
+
leaves an existing table's columns alone.
|
|
1162
|
+
2. **Small-clone throughput is round-trip-bound, not bandwidth-bound.** At
|
|
1163
|
+
256 KiB per clone the git client's process spawn plus two HTTP round
|
|
1164
|
+
trips dominate, so the bundle win shows up as latency; the bandwidth
|
|
1165
|
+
ceiling only appears under raw concurrency (§16.2) or on much larger
|
|
1166
|
+
repos.
|
|
1167
|
+
3. **Advertisement caching is deliberately NOT implemented.** A TTL cache
|
|
1168
|
+
on `info/refs` would make "push, then fetch from another machine"
|
|
1169
|
+
unreliable for the length of the TTL — a real correctness regression for
|
|
1170
|
+
CI. Doing it properly means an epoch the Worker can read without asking
|
|
1171
|
+
the DO (Cache API entry purged on push), which is a v2.1 item; the
|
|
1172
|
+
remaining per-clone DO cost is two small RPCs, and §16.2 shows that is
|
|
1173
|
+
not the ceiling.
|
|
1174
|
+
|
|
1175
|
+
---
|
|
1176
|
+
|
|
1177
|
+
# Part III — v3: the maximum-performance DO architecture
|
|
1178
|
+
|
|
1179
|
+
## 17. Why v2 still has a floor
|
|
1180
|
+
|
|
1181
|
+
v2 made *reads* scale (immutable bytes served by Workers from R2) and left
|
|
1182
|
+
*writes* where git semantics put them. But the measurements in §16 expose a
|
|
1183
|
+
floor that no amount of horizontal scale removes:
|
|
1184
|
+
|
|
1185
|
+
- one repo = one Durable Object = **one thread**;
|
|
1186
|
+
- a push is **one request** to it;
|
|
1187
|
+
- ingest is ~13.7k objects × (inflate + sha1 + one statement + Effect
|
|
1188
|
+
frames), strictly serial.
|
|
1189
|
+
|
|
1190
|
+
Batching transactions bought 16% (§16.5) — proof that the remaining cost is
|
|
1191
|
+
per-object work, not commit overhead. Making a large push an order of
|
|
1192
|
+
magnitude faster requires parallelism **inside the repo**.
|
|
1193
|
+
|
|
1194
|
+
The enabling observation: a repo holds two kinds of state with completely
|
|
1195
|
+
different constraints.
|
|
1196
|
+
|
|
1197
|
+
| | mutability | ordering | consequence |
|
|
1198
|
+
|---|---|---|---|
|
|
1199
|
+
| refs, tokens | mutable | CAS, strictly serialized | must live in one DO |
|
|
1200
|
+
| objects | **immutable, content-addressed** | **none whatsoever** | can be written anywhere, in any order, in parallel |
|
|
1201
|
+
|
|
1202
|
+
Object writes are serialized today only because they share a DO with the
|
|
1203
|
+
refs. That serialization is *accidental*, not essential.
|
|
1204
|
+
|
|
1205
|
+
## 18. Target architecture
|
|
1206
|
+
|
|
1207
|
+
| Tier | Instances | Holds | Why here |
|
|
1208
|
+
|---|---|---|---|
|
|
1209
|
+
| **Worker** | horizontal | pack parsing (inflate + sha1), fan-out, response assembly | stateless CPU; parsing has no reason to sit in a coordination point |
|
|
1210
|
+
| **Ref DO** | 1 / repo | refs, tokens, commit graph, push staging state, CAS | the only thing git forces to serialize |
|
|
1211
|
+
| **Object shard DO** | N / repo, by oid prefix | content-addressed objects (hot tier) | independent writes ⇒ N-way parallel; N × 10 GB ceiling |
|
|
1212
|
+
| **R2** | — | compacted packs, clone bundles | immutable bulk, ranged reads, no egress |
|
|
1213
|
+
|
|
1214
|
+
**Sharding key: the oid itself.** An oid is a uniform hash, so a fixed
|
|
1215
|
+
2-hex-char prefix distributes perfectly with zero rebalancing. A trie or
|
|
1216
|
+
dynamic split solves skewed key distributions — a problem content
|
|
1217
|
+
addressing does not have. Fix `N = 256` at repo creation and never reshard:
|
|
1218
|
+
256 × 10 GB = 2.5 TB per repo.
|
|
1219
|
+
|
|
1220
|
+
**Why fan-out is safe.** Staging across shards is not atomic and does not
|
|
1221
|
+
need to be: objects are immutable and content-addressed, so a partial write
|
|
1222
|
+
is inert (worst case some staged rows are GC'd). The only atomic step is
|
|
1223
|
+
the ref CAS in the ref DO, which runs after the connectivity check passes.
|
|
1224
|
+
Sharding never touches the consistency-critical path.
|
|
1225
|
+
|
|
1226
|
+
**Cost shape.** DO *instances* are not billed; requests, active duration and
|
|
1227
|
+
storage are. Fan-out means one RPC per shard **touched** (objects batched
|
|
1228
|
+
per shard), so ~256 requests for a large push (~$0.00004) and far *less*
|
|
1229
|
+
total active duration, since 256 DOs busy ~50 ms beats one DO busy 20 s.
|
|
1230
|
+
The real costs are cold-start latency across shards and a wider failure
|
|
1231
|
+
surface — both mitigated by immutability making every retry free.
|
|
1232
|
+
|
|
1233
|
+
## 19. Phases
|
|
1234
|
+
|
|
1235
|
+
**Phase 0 — measure honestly (prerequisite). DONE — and it settled the
|
|
1236
|
+
question.** Repos now report `lastPush` timing measured inside the Durable
|
|
1237
|
+
Object. For the 38 MiB / 13,701-object alchemy push:
|
|
1238
|
+
|
|
1239
|
+
| | |
|
|
1240
|
+
|---|---|
|
|
1241
|
+
| **server ingest** | **27.0 s** |
|
|
1242
|
+
| connectivity check | ~0 ms |
|
|
1243
|
+
| ref CAS finalize | ~0 ms |
|
|
1244
|
+
| **server total** | **28.7 s of a 32.3 s wall clock (89%)** |
|
|
1245
|
+
| client + network | 3.5 s |
|
|
1246
|
+
|
|
1247
|
+
So the earlier suspicion that client packing and upload dominated was
|
|
1248
|
+
**wrong**: the server owns 89% of the time, and effectively all of it is
|
|
1249
|
+
the per-object ingest loop at **2.10 ms/object**. Connectivity and CAS —
|
|
1250
|
+
the parts that genuinely must be serialized — are free.
|
|
1251
|
+
|
|
1252
|
+
**Phase 0b — where the ingest time actually goes.** Splitting `ingestMs`
|
|
1253
|
+
settled the next question too:
|
|
1254
|
+
|
|
1255
|
+
| | | |
|
|
1256
|
+
|---|---|---|
|
|
1257
|
+
| SQL staging | 2.0 s | **9%** |
|
|
1258
|
+
| CPU (inflate, sha1, parse, Effect frames) | 20.4 s | **91%** |
|
|
1259
|
+
|
|
1260
|
+
So **sharding storage addresses only 9%** of push cost. It remains valuable
|
|
1261
|
+
for the 10 GB → 2.5 TB capacity ceiling, but it is not the throughput fix.
|
|
1262
|
+
The throughput fix is per-object CPU — and 1.49 ms to inflate ~2.7 KB and
|
|
1263
|
+
hash it is ~50x the cost of the actual work, i.e. it is overhead, not
|
|
1264
|
+
computation.
|
|
1265
|
+
|
|
1266
|
+
First cut at that overhead: `zlib.createInflate()` built a Node Transform
|
|
1267
|
+
stream (EventEmitter, buffers) and took an async event-loop round trip **per
|
|
1268
|
+
object**. Driving the engine synchronously the way Node's own `inflateSync`
|
|
1269
|
+
does removes both:
|
|
1270
|
+
|
|
1271
|
+
CPU 20.4s -> 15.9s per object 1.74ms -> 1.42ms
|
|
1272
|
+
wall clock 28.1s -> 23.2s
|
|
1273
|
+
|
|
1274
|
+
with a hard-won caveat baked into the code: workerd's `node:zlib` shim
|
|
1275
|
+
returns only the *first chunk* (observed: 525,107 bytes of a 1,337,267-byte
|
|
1276
|
+
object) and reports a plausible `bytesWritten` alongside it, where Node
|
|
1277
|
+
loops until done. The fast path therefore validates its output against the
|
|
1278
|
+
size the pack header already declares and falls back to the stream path on
|
|
1279
|
+
any mismatch — silent truncation would otherwise corrupt objects. Pack
|
|
1280
|
+
fixtures alone would not have caught this; only the deployed push did.
|
|
1281
|
+
|
|
1282
|
+
Remaining per-object overhead to attack next, in order: `crypto.createHash`
|
|
1283
|
+
allocated per object (same shape of problem as `createInflate`), Effect
|
|
1284
|
+
frames in the sink, and window slicing.
|
|
1285
|
+
|
|
1286
|
+
That is still the argument for phases 1–2, but with corrected weights: the expensive work
|
|
1287
|
+
(inflate, sha1, one insert) is *per object* and has no ordering
|
|
1288
|
+
requirement, yet runs single-threaded because it shares a DO with the refs.
|
|
1289
|
+
At 2.10 ms/object, 16-way fan-out puts a 13.7k-object push at ~1.7 s.
|
|
1290
|
+
|
|
1291
|
+
**Phase 1 — hoist pack parsing to the Worker.** Inflate + sha1 for every
|
|
1292
|
+
object currently runs on the ref DO's single thread; it is stateless CPU.
|
|
1293
|
+
Moving it to the Worker frees the DO and is the prerequisite for fan-out
|
|
1294
|
+
(the Worker must hold resolved objects to route them).
|
|
1295
|
+
|
|
1296
|
+
**Phase 2 — shard the object store.** `ObjectShard` DO addressed
|
|
1297
|
+
`{repoId}:{oidPrefix}`; `ObjectStore` becomes a router that batches by
|
|
1298
|
+
prefix and writes shards in parallel. Connectivity checks become N parallel
|
|
1299
|
+
batched queries. Compaction runs per shard, producing per-shard R2 packs.
|
|
1300
|
+
|
|
1301
|
+
**Phase 3 — parallel fetch assembly.** A dynamic fetch reads its manifest
|
|
1302
|
+
from N shards concurrently instead of walking one DO.
|
|
1303
|
+
|
|
1304
|
+
**Phase 4 — reachability bitmaps.** With throughput fixed, the remaining
|
|
1305
|
+
ceiling is closure computation on multi-million-object repos: EWAH bitmaps
|
|
1306
|
+
over the commit graph replace the visited-set walk.
|
|
1307
|
+
|
|
1308
|
+
Expected shape of the win: 13.7k objects at ~1.5 ms serial ≈ 20 s; fanned
|
|
1309
|
+
across even 16 shards with parsing overlapped in the Worker ≈ 1–2 s.
|
|
1310
|
+
|
|
1311
|
+
|
|
1312
|
+
## 20. GitHub REST v3 compatibility (Tier 1)
|
|
1313
|
+
|
|
1314
|
+
`src/GitHubCompat.ts` mounts a `/api/v3/**` facade so GitHub-flavored
|
|
1315
|
+
tooling talks to the service unmodified:
|
|
1316
|
+
|
|
1317
|
+
```sh
|
|
1318
|
+
export GH_HOST=git.example.com # your deployed host (https)
|
|
1319
|
+
export GH_ENTERPRISE_TOKEN=gs_... # admin key or repo token
|
|
1320
|
+
gh api repos/alchemy/alchemy # → GitHub-shaped JSON
|
|
1321
|
+
gh api repos/alchemy/alchemy/pulls -f state=open
|
|
1322
|
+
gh api -X POST repos/o/r/pulls -f title=T -f head=topic -f base=main
|
|
1323
|
+
gh api -X PUT repos/o/r/pulls/1/merge
|
|
1324
|
+
```
|
|
1325
|
+
|
|
1326
|
+
The facade is a pure translation layer over the same Repo-DO RPCs as
|
|
1327
|
+
`/api/v1` (auth enforcement unchanged, anonymous reads on public repos
|
|
1328
|
+
included). Covered: `/user`, repo get, branches, commits (list/single with
|
|
1329
|
+
files), contents, and the full pulls lifecycle. GitHub-isms handled:
|
|
1330
|
+
`Authorization: token` scheme, merged-PR = `closed`+`merged: true`,
|
|
1331
|
+
`{ message }` errors, `Link: rel="next"` pagination carrying opaque keyset
|
|
1332
|
+
cursors (`gh api --paginate` and Octokit follow them verbatim).
|
|
1333
|
+
|
|
1334
|
+
Out of scope, deliberately: GraphQL (so `gh pr ...` porcelain does not
|
|
1335
|
+
work — use `gh api` paths), issues/reviews/comments/checks/search, rename
|
|
1336
|
+
detection, and additions/deletions counts (always 0; content diffs are
|
|
1337
|
+
client-side by design). `gh` requires https for enterprise hosts, so the
|
|
1338
|
+
facade is exercised locally by shape tests replaying gh's exact wire
|
|
1339
|
+
requests (verified against `GH_DEBUG=api` output) and by `gh` itself only
|
|
1340
|
+
against https deployments.
|
|
1341
|
+
|
|
1342
|
+
## 21. Learnings from Cursor's Continuity (git-at-any-scale)
|
|
1343
|
+
|
|
1344
|
+
Cursor's Continuity ([blog](https://cursor.com/blog/git-at-any-scale))
|
|
1345
|
+
solves the same problem shape — git on object storage with a single
|
|
1346
|
+
linearization point — with one structural inversion worth studying: for
|
|
1347
|
+
them **object storage is the source of truth** (a WAL of pushed packs +
|
|
1348
|
+
a tiny WAL-index object updated by compare-and-swap), and every server
|
|
1349
|
+
disk is a disposable warm cache rebuilt from the WAL. For us the Durable
|
|
1350
|
+
Object's SQLite *is* the truth and R2 holds derived artifacts. Their
|
|
1351
|
+
compute is fungible and their storage is authoritative; ours is the
|
|
1352
|
+
opposite. What transfers:
|
|
1353
|
+
|
|
1354
|
+
**Adopt — the push WAL (durability + provenance).** Today the DO's
|
|
1355
|
+
SQLite is the only representation of refs/index/graph; the received pack
|
|
1356
|
+
is exploded into rows and discarded. Appending a small WAL record per
|
|
1357
|
+
push to the BlobStore — `{ pushId, refTxn (old→new per ref), packKey,
|
|
1358
|
+
subject, timestamp }` plus the self-contained (fattened) pack — makes
|
|
1359
|
+
the entire repository reconstructable from blob storage alone: disaster
|
|
1360
|
+
recovery independent of DO state, byte-level push provenance ("rewind
|
|
1361
|
+
and fast-forward", audit paired with the auth `subject`), backend
|
|
1362
|
+
migration, and future read replicas. This composes with the planned
|
|
1363
|
+
push-epoch redesign (§19 / RFC): the epoch record *is* the WAL entry —
|
|
1364
|
+
make it durable in the BlobStore instead of a SQLite row and both
|
|
1365
|
+
designs land in one change. Storage cost is bounded by folding WAL packs
|
|
1366
|
+
into compaction epochs (Continuity compacts the WAL too).
|
|
1367
|
+
|
|
1368
|
+
**Adopt — geometric pack compaction.** `Compact` currently writes one
|
|
1369
|
+
new pack per run and never merges packs, so pack count grows with
|
|
1370
|
+
repository age and read fan-out grows with it. Continuity's incremental
|
|
1371
|
+
geometric compaction (merge packs whenever sizes violate a geometric
|
|
1372
|
+
progression) bounds pack count logarithmically. Directly applicable to
|
|
1373
|
+
our Compact job; also the precondition for WAL-pack folding above.
|
|
1374
|
+
|
|
1375
|
+
**Adapt — conditional-GET freshness for DO-less reads.** Continuity
|
|
1376
|
+
replicas serve reads after a ~10 ms conditional GET on the WAL index
|
|
1377
|
+
(304 = current). Mapped onto us: a tiny `head` object in R2 (ref
|
|
1378
|
+
snapshot hash + current bundle key), updated at push finalize, would let
|
|
1379
|
+
**Workers serve advertisements and clone bundles without waking the DO**
|
|
1380
|
+
— the clone-storm path goes fully DO-less while the DO remains the write
|
|
1381
|
+
linearization point. The subtlety is commit ordering: SQLite commit is
|
|
1382
|
+
our truth, so the head object is written after commit and a crash
|
|
1383
|
+
between the two leaves it stale. Either accept bounded staleness with
|
|
1384
|
+
repair-on-next-push, or move the commit point into the head-object CAS
|
|
1385
|
+
itself (the full Continuity inversion — a much bigger change). Start
|
|
1386
|
+
with the former.
|
|
1387
|
+
|
|
1388
|
+
**Adapt — repos as cattle (hibernation).** Continuity garbage-collects
|
|
1389
|
+
idle replicas and re-materializes from the WAL on access. Our analog:
|
|
1390
|
+
once a WAL exists, an idle repo's DO can evict object rows (or all
|
|
1391
|
+
state) and re-materialize on next access — DO storage is the expensive
|
|
1392
|
+
tier, R2 the cheap one. Matters for the agent-created-repos fleet shape
|
|
1393
|
+
(their explicit target, and ours).
|
|
1394
|
+
|
|
1395
|
+
**Skip — running upstream git.** Their biggest simplification (normal
|
|
1396
|
+
git repos on NVMe, upstream git does the work) is unavailable on
|
|
1397
|
+
workerd: no processes, no disk. Our Effect reimplementation is the cost
|
|
1398
|
+
of running where we run.
|
|
1399
|
+
|
|
1400
|
+
**Note — S3 CAS revives the AWS-parity store story.** Continuity's
|
|
1401
|
+
linearization is a compare-and-swap on an S3 object (`If-Match` /
|
|
1402
|
+
`If-None-Match` conditional writes) — no DynamoDB, no consensus. That
|
|
1403
|
+
replaces the RFC §6 assumption that AWS parity needs DynamoDB
|
|
1404
|
+
transactions for ref CAS: a WAL-index CAS on S3 is sufficient, exactly
|
|
1405
|
+
as Continuity demonstrates at 120–300 pushes/s (Standard vs Express One
|
|
1406
|
+
Zone). The wire-plane hosting problem (Lambda's ~6 MB request cap)
|
|
1407
|
+
remains the real blocker; the store problem is now solved on paper.
|
|
1408
|
+
|
|
1409
|
+
Benchmarks worth stealing: sustained small-push throughput per repo
|
|
1410
|
+
(their 120–300/s number; ours is bounded by one DO — measure it), and
|
|
1411
|
+
read-scaling under clone storm with the DO-less head-object path.
|
|
1412
|
+
|
|
1413
|
+
### §21.2 Push admission, and a bottleneck that wasn't
|
|
1414
|
+
|
|
1415
|
+
**Push admission is bounded by memory, not by count.** The Repo DO's
|
|
1416
|
+
ingest semaphore existed for one reason (§2.1): two concurrent 50 MiB
|
|
1417
|
+
buffers would exhaust a 128 MB isolate. It is *not* a correctness
|
|
1418
|
+
device — a DO's input gate only closes across storage awaits, and
|
|
1419
|
+
receive-pack awaits the network and blob storage, so pushes interleave
|
|
1420
|
+
regardless; what makes that safe is `staged_push = pushId` scoping plus
|
|
1421
|
+
a synchronous `transactionSync` finalize. Bounding the count therefore
|
|
1422
|
+
made a kilobyte push wait out a 50 MiB upload for no reason. It now
|
|
1423
|
+
reserves permits by buffered ceiling (`min(content-length,
|
|
1424
|
+
MAX_PACK_BYTES)`, one permit per MiB, budget 64).
|
|
1425
|
+
|
|
1426
|
+
| small push (same repo) | latency |
|
|
1427
|
+
| --- | --- |
|
|
1428
|
+
| uncontended | 737 ms |
|
|
1429
|
+
| while a 12 MiB upload is in flight | **802 ms** (+9%) |
|
|
1430
|
+
|
|
1431
|
+
Under the old single permit the second push waited for the first to
|
|
1432
|
+
release, i.e. for the whole upload — by construction, not by measurement.
|
|
1433
|
+
|
|
1434
|
+
**What this does NOT fix:** concurrent pushes to *different branches*
|
|
1435
|
+
still measure ~2.7/s, unchanged. Admission was never the ceiling there;
|
|
1436
|
+
the DO is one JavaScript thread, so each push's inflate/SHA-1/SQL work
|
|
1437
|
+
serializes whatever admission allows. Per-repo push throughput remains
|
|
1438
|
+
the sharding problem of Part III.
|
|
1439
|
+
|
|
1440
|
+
**Stale clone bundles are not a bottleneck (measured, hypothesis
|
|
1441
|
+
withdrawn).** The concern was that any ref moving after a bundle was cut
|
|
1442
|
+
drops every clone onto a dynamic closure walk until the next re-cut.
|
|
1443
|
+
Measured in one run against one repo, with the serving plane recorded on
|
|
1444
|
+
`x-git-served-by` so neither arm can be mistaken for the other:
|
|
1445
|
+
|
|
1446
|
+
| clones, concurrency 32 | served by | rate |
|
|
1447
|
+
| --- | --- | --- |
|
|
1448
|
+
| fresh bundle | `do-bundle:bundle` | 40.4/s |
|
|
1449
|
+
| stale bundle | `dynamic` | **35.9/s** |
|
|
1450
|
+
|
|
1451
|
+
An 11% cost, not the ~2x the earlier cross-run comparison suggested —
|
|
1452
|
+
those "dynamic" figures came from requests carrying an unknown `have`,
|
|
1453
|
+
which forces a *negotiation* walk, a strictly more expensive path than a
|
|
1454
|
+
plain full clone with no usable bundle. Comparing across runs compared
|
|
1455
|
+
two different things.
|
|
1456
|
+
|
|
1457
|
+
A bundle+delta splice was built and reverted. It is defeated by a
|
|
1458
|
+
deliberate v1 tradeoff in `Store/Closure.ts`: boundary (common) commits'
|
|
1459
|
+
tree/blob closures are **not** subtracted, so
|
|
1460
|
+
`computeClosure(wants, haves = bundle refs)` returns a whole snapshot
|
|
1461
|
+
rather than a delta. The spliced pack measured exactly 2x the bundle
|
|
1462
|
+
(1.013 MiB vs 0.507 MiB) at 15.8 clones/s — worse than the dynamic path
|
|
1463
|
+
it replaced. Making it work needs one of: the bundle recording its own
|
|
1464
|
+
object set at cut time (`runBundleJob` already holds the manifest) so
|
|
1465
|
+
the delta is a set subtraction rather than a walk; or protocol v2
|
|
1466
|
+
`packfile-uris`, which is git's own answer — the client takes the bundle
|
|
1467
|
+
by URI and runs an ordinary incremental fetch on top. Neither is worth
|
|
1468
|
+
doing for 11%.
|
|
1469
|
+
|
|
1470
|
+
### §21.1 Implemented and measured
|
|
1471
|
+
|
|
1472
|
+
Both performance adoptions above are now implemented; measured on a
|
|
1473
|
+
deployed stack (`test/GitBench.e2e.test.ts --profile testing`, SCALE=1,
|
|
1474
|
+
same machine, before/after runs ~1 h apart).
|
|
1475
|
+
|
|
1476
|
+
**The head snapshot (DO-less anonymous reads).** The Repo DO rewrites a
|
|
1477
|
+
tiny JSON object (`{repoId}/head`: refs, visibility, current bundle)
|
|
1478
|
+
after every commit that changes what an anonymous reader can see; the
|
|
1479
|
+
Worker serves the `info/refs` advertisement and bundle-covered full
|
|
1480
|
+
clones straight from it. Engagement is proven, not inferred: responses
|
|
1481
|
+
carry `x-git-served-by: head-snapshot` and the bench asserts it. The
|
|
1482
|
+
Auth block still decides anonymous access (the Worker asks it with the
|
|
1483
|
+
snapshot's repo context), a presented credential always goes to the DO,
|
|
1484
|
+
and `startPurge` deletes the snapshot synchronously so deleted repos
|
|
1485
|
+
stop serving immediately.
|
|
1486
|
+
|
|
1487
|
+
| anonymous reads on a public repo | before | after |
|
|
1488
|
+
| --- | --- | --- |
|
|
1489
|
+
| raw full clones, concurrency 32 | 69.4/s · 17.4 MiB/s | **101.0/s · 25.3 MiB/s** |
|
|
1490
|
+
| same run, authed clones (DO path) | — | 48.1/s · 24.4 MiB/s |
|
|
1491
|
+
| advertisements, concurrency 32 | 201.2/s | 206.5/s |
|
|
1492
|
+
| advertisement, serial | — | 87 ms each |
|
|
1493
|
+
|
|
1494
|
+
The controlled comparison is the second row: in the same run, on the
|
|
1495
|
+
same bytes, anonymous DO-less clones sustain **2.1× the throughput of
|
|
1496
|
+
authed clones that plan through the DO** — cloud noise hits both
|
|
1497
|
+
equally. The advertisement storm is flat because the *client* is the
|
|
1498
|
+
bottleneck there (87 ms serial ≈ the bench machine's RTT; 32-way ≈
|
|
1499
|
+
200/s is its ceiling): the assertion proves the DO left the path, but a
|
|
1500
|
+
single-machine instrument cannot show the server-side headroom that
|
|
1501
|
+
buys. The clone rows, which move real bytes, do.
|
|
1502
|
+
|
|
1503
|
+
**Geometric pack merging.** `Compact` now restores the geometric
|
|
1504
|
+
invariant (factor 2) after each run: the smallest violating packs merge
|
|
1505
|
+
by pure concatenation — our packs store non-delta entries, so a merge
|
|
1506
|
+
is `header(Σcounts) + bodies + sha1` and one additive offset UPDATE per
|
|
1507
|
+
source pack, no recompression. Unreferenced source packs grace-delete a
|
|
1508
|
+
minute later (in-flight ranged reads finish first).
|
|
1509
|
+
|
|
1510
|
+
| dynamic fetch, repo compacted in 6 increments | before | after |
|
|
1511
|
+
| --- | --- | --- |
|
|
1512
|
+
| ms/fetch (serial ×8, 2.3 MiB pack) | 730 | **300–334** |
|
|
1513
|
+
|
|
1514
|
+
**2.2–2.4× faster** reads over the aged repo, reproduced across two
|
|
1515
|
+
post-change runs. The push path is unchanged by both features (serial
|
|
1516
|
+
push 1.3–1.5/s across all runs — the per-ref serialization floor §15
|
|
1517
|
+
already names; that ceiling is v3's problem, not this change's).
|
|
1518
|
+
|
|
1519
|
+
## 22. The clone-throughput sweep
|
|
1520
|
+
|
|
1521
|
+
The complaint: clones pull 10–20 MB/s. The first question was whose
|
|
1522
|
+
number that is, and the answer settles what to fix.
|
|
1523
|
+
|
|
1524
|
+
### §22.1 Diagnosis (production, `alchemy/alchemy`, 44k objects)
|
|
1525
|
+
|
|
1526
|
+
| measurement | value | meaning |
|
|
1527
|
+
| --- | --- | --- |
|
|
1528
|
+
| client ← Cloudflare edge, 50 MB static download | **67 MB/s** | the pipe is not the limit |
|
|
1529
|
+
| bundle path, raw passthrough, 152 MiB | 10–21 MB/s (one sample stalled at 227 KB/s for 264 s) | **our streaming path is the limit** |
|
|
1530
|
+
| bundle path, sideband | 10.5–17 MB/s | framing is not the difference; the variance is |
|
|
1531
|
+
| dynamic path | 3.1 MB/s, TTFB 9.2 s | 44k sequential SQLite point reads |
|
|
1532
|
+
| `info/refs` advertisement (2 refs) | **1.5 s** | per-request planning cost, paid twice per clone |
|
|
1533
|
+
| repo object stats | loose=44,041 packed=0 r2=10, 152.7 MiB | **never compacted** — `COMPACT_COUNT_THRESHOLD` was 50,000 |
|
|
1534
|
+
| bytes served vs bytes pushed | 152 MiB served, 70 MiB thin pack pushed | non-delta packs are 2.2x on the wire |
|
|
1535
|
+
|
|
1536
|
+
Three independent problems, in order of user impact: the Worker's bundle
|
|
1537
|
+
streaming pipeline caps single-stream throughput far below the client's
|
|
1538
|
+
pipe; every wire request pays ~1.5 s before its first byte; and the repo
|
|
1539
|
+
was serving its fallback path from 44k un-packed SQLite rows.
|
|
1540
|
+
|
|
1541
|
+
### §22.2 Root causes
|
|
1542
|
+
|
|
1543
|
+
**Streaming (the throughput ceiling).** `serveBundle` piped R2's body
|
|
1544
|
+
through `Stream.fromReadableStream` → `wrapSideband` (a `Stream.flatMap`
|
|
1545
|
+
per chunk) → `HttpServerResponse.stream` → `toReadableStream`. Every
|
|
1546
|
+
R2 chunk crossed an Effect fiber hand-off twice and was copied twice by
|
|
1547
|
+
the sideband framer (`sidebandFrame` allocated a payload buffer, then
|
|
1548
|
+
`pktLine` allocated again). At concurrency 4 the aggregate was only
|
|
1549
|
+
1.5x a single stream — the isolate was CPU-bound on stream machinery,
|
|
1550
|
+
not waiting on the network.
|
|
1551
|
+
|
|
1552
|
+
**TTFB.** `readMeta` ran `SELECT location, COUNT(*), SUM(zsize) FROM
|
|
1553
|
+
objects GROUP BY location` on **every** request (via `requireMeta` at
|
|
1554
|
+
the wire dispatch, inside `authorize`, and inside `writeHeadSnapshot`),
|
|
1555
|
+
a full scan of a `WITHOUT ROWID` table whose leaf pages carry inline
|
|
1556
|
+
zdata. Only the REST repo-detail response ever reads `meta.objects`.
|
|
1557
|
+
|
|
1558
|
+
**Dynamic path.** `packEntryStream` did one `sql.first` and ~6 Effect
|
|
1559
|
+
stream nodes per object; the closure's tree walk did one SQL round trip
|
|
1560
|
+
plus one inflate per tree, serially, before the first byte; and the
|
|
1561
|
+
manifest order (commits → tags → trees → blobs) was uncorrelated with
|
|
1562
|
+
compacted-pack layout (`ORDER BY oid`), so a 6-window LRU over a large
|
|
1563
|
+
pack thrashed.
|
|
1564
|
+
|
|
1565
|
+
### §22.3 What changed
|
|
1566
|
+
|
|
1567
|
+
- **Native passthrough.** `ObjectBody`/`BlobBody` expose the store's
|
|
1568
|
+
own `ReadableStream` (`readable`); `respondWithPack` pipes it into the
|
|
1569
|
+
`Response` via `HttpServerResponse.raw`. Raw clones go through an
|
|
1570
|
+
`IdentityTransformStream` (workerd pipes it without JS touching the
|
|
1571
|
+
bytes); sideband clones go through `sidebandTransform`, a web
|
|
1572
|
+
`TransformStream` emitting a 5-byte header + a `subarray` per frame —
|
|
1573
|
+
no copy, no fiber per chunk. The Effect path remains as the fallback
|
|
1574
|
+
for stores without a native stream (S3).
|
|
1575
|
+
- **`requireMeta` is config-only.** The objects aggregate is opt-in
|
|
1576
|
+
(`requireMetaStats`), paid by `getRepoMeta`/`updateRepoMeta` only.
|
|
1577
|
+
- **Compaction thresholds** 50k objects / 1 GiB → **4k / 64 MiB**.
|
|
1578
|
+
- **Batched emission and closure.** `ObjectStore.packEntries` reads
|
|
1579
|
+
objects 256 per statement, concatenates each batch into one chunk,
|
|
1580
|
+
and orders pack-resident objects by (pack, offset) so each 4 MiB
|
|
1581
|
+
window is fetched exactly once; `readContentBatch` + a level-order BFS
|
|
1582
|
+
read whole tree levels per statement. `packStream` uses the batched
|
|
1583
|
+
emitter whenever the source offers it.
|
|
1584
|
+
- `sidebandFrame` builds its frame in one allocation (was two copies).
|
|
1585
|
+
|
|
1586
|
+
### §22.4 Measured (36 MiB / 15.6k-object repo, one client, same edge)
|
|
1587
|
+
|
|
1588
|
+
All numbers from `GitBench.e2e.test.ts` "single large clone", the same
|
|
1589
|
+
client machine and edge for every row. "Before" is the row-storage,
|
|
1590
|
+
Effect-stream code at the start of the sweep; the rest are cumulative.
|
|
1591
|
+
|
|
1592
|
+
| path (what real clients use) | before | native pump | +blob-only compaction | +pre-framed twin, per-window emitter |
|
|
1593
|
+
| --- | --- | --- | --- | --- |
|
|
1594
|
+
| raw bundle, 1 stream | 20.3 MiB/s | 41.0 | 37.9 | 40.9 (client line rate ≈ 40–70) |
|
|
1595
|
+
| raw bundle, 4 streams (aggregate) | 29.7 MiB/s | 106.1 | 71.8 | 82.3 |
|
|
1596
|
+
| **sideband bundle (every `git clone`)** | 15.5 MiB/s | 12.7–15.7 | 15.7 | **32.7** |
|
|
1597
|
+
| dynamic fetch — TTFB | 1.4 s (rows) / 27.5 s (packed) | 12.0 s | **0.43 s** | 0.56 s |
|
|
1598
|
+
| dynamic fetch — transfer | 6.2 MiB/s (rows) / 0.2 (packed) | 7.9 | 7.0 | 7.9 |
|
|
1599
|
+
|
|
1600
|
+
Run-to-run variance on the client link is large; the best verified run of
|
|
1601
|
+
the final code (every pack de-framed and trailer-checked): raw 98.4 MiB/s
|
|
1602
|
+
(0.56 s end to end), sideband **80.2 MiB/s** (0.69 s — a real `git clone`
|
|
1603
|
+
of the 40 MiB repo), dynamic 9.8 MiB/s with 0.72 s TTFB, four concurrent
|
|
1604
|
+
raw streams at 93 MiB/s aggregate. Before the sweep the same clone took
|
|
1605
|
+
about 3 s.
|
|
1606
|
+
|
|
1607
|
+
What each step bought, and what it did not:
|
|
1608
|
+
|
|
1609
|
+
- **Native pump** (§22.3): the raw path went from an Effect stream to a
|
|
1610
|
+
platform `pipeTo` and doubled; four streams saturate the client link.
|
|
1611
|
+
It did NOT move sideband — three different framers (Effect stream,
|
|
1612
|
+
`TransformStream`, manual 1 MiB batched writes) all landed at ~15 MiB/s.
|
|
1613
|
+
The constant was never the framing: it is the cost of bundle bytes
|
|
1614
|
+
crossing into JS at all. Hence the **pre-framed twin**
|
|
1615
|
+
(`bundleSidebandKey`): the bundle job writes the pack a second time,
|
|
1616
|
+
already cut into 65515-byte band-1 frames, and sideband serving becomes
|
|
1617
|
+
a pure pipe plus a 4-byte flush. 2× on the path every real client uses,
|
|
1618
|
+
for 2× bundle storage.
|
|
1619
|
+
- **Lowering the compaction thresholds** (50k → 4k objects) exposed a
|
|
1620
|
+
latent disaster: a fetch over pack storage took 27 s to start and 243 s
|
|
1621
|
+
to finish — the per-object emitter, in manifest order, missed the
|
|
1622
|
+
window cache on nearly every object (15.6k × 4 MiB window reads).
|
|
1623
|
+
Batching + (pack, offset) ordering fixed the transfer (0.2 → 7.9 MiB/s)
|
|
1624
|
+
but the tree walk still cost 12 s: trees are tiny and, packed in oid
|
|
1625
|
+
order, touch every window. **Blob-only compaction** removed the walk
|
|
1626
|
+
from R2 entirely — TTFB 12 s → 0.43 s — at the cost of keeping
|
|
1627
|
+
commits/trees/tags (a few percent of bytes) as SQLite rows.
|
|
1628
|
+
- The dynamic transfer rate is now bounded by generation inside the DO
|
|
1629
|
+
(per-batch SQL + concat for resident objects, one window fetch per
|
|
1630
|
+
4 MiB of blobs), not by the response path; the per-window emitter and
|
|
1631
|
+
one-window lookahead did not move it. Clones do not take this path (the
|
|
1632
|
+
bundle covers them); incremental fetches are small. Left as the next
|
|
1633
|
+
target.
|
|
1634
|
+
|
|
1635
|
+
**Durability finding, same sweep.** A real `git push` of the 36 MiB
|
|
1636
|
+
clone (a delta-heavy pack, unlike the snapshot the bench pushes) was
|
|
1637
|
+
rejected: `Durable Object's isolate exceeded its memory limit and was
|
|
1638
|
+
reset`, mid-`transactionSync`. The ingest's own footprint is bounded
|
|
1639
|
+
(8 MiB staging batches, 20 MiB resolved-content LRU) — but the whole
|
|
1640
|
+
pack sat in memory under the 50 MiB spill threshold, and instances of one
|
|
1641
|
+
DO class share an isolate: the other repo's per-instance window cache and
|
|
1642
|
+
its push gate were invisible to this push's accounting. Fixed by making
|
|
1643
|
+
the window cache and the push-admission semaphore **isolate-wide**
|
|
1644
|
+
(one 32 MiB LRU, one 64-permit gate) and lowering the in-memory spill
|
|
1645
|
+
threshold to 24 MiB. The same push then succeeded with the first repo's
|
|
1646
|
+
caches warm; the clone back through the DO was fsck-clean.
|
|
1647
|
+
|
|
1648
|
+
**Truncation finding, same sweep.** One bench run reported the dynamic
|
|
1649
|
+
arm at 0.5 MiB of a 40.6 MiB pack — and passed. The compaction alarm
|
|
1650
|
+
had moved rows to a pack between the closure (which recorded
|
|
1651
|
+
`location='row'`) and emission (whose batched `SELECT oid, zdata` then
|
|
1652
|
+
saw NULL); the emitter failed the stream, the bridge errored the
|
|
1653
|
+
`ReadableStream`, the pump aborted the writable — and the client's HTTP
|
|
1654
|
+
library read the aborted body as a clean end. Two fixes: the row emitter
|
|
1655
|
+
now re-dispatches a moved object on its *current* location instead of
|
|
1656
|
+
failing (compaction and fetches run concurrently by design), and every
|
|
1657
|
+
timed clone in the bench de-frames the response and verifies the pack's
|
|
1658
|
+
SHA-1 trailer, so bytes-received can never again stand in for a pack.
|
|
1659
|
+
Real git was never at risk of a silent bad clone — it verifies the same
|
|
1660
|
+
trailer — but it would have seen "unexpected EOF" on a fetch that raced a
|
|
1661
|
+
compaction.
|
|
1662
|
+
|
|
1663
|
+
### §22.5 The push-ingest sweep
|
|
1664
|
+
|
|
1665
|
+
Measured with the platform's own per-invocation `cpuTime`/`wallTime`
|
|
1666
|
+
(a `wrangler tail`), because workerd freezes `performance.now()` during
|
|
1667
|
+
synchronous work — server-side timers only advance across awaits, which
|
|
1668
|
+
is itself diagnostic but cannot attribute CPU. The 15.6k-object, 40 MiB
|
|
1669
|
+
push of this repository, real `git push`, same edge:
|
|
1670
|
+
|
|
1671
|
+
| | push wall | DO cpu / wall | ingest | staging | finalize |
|
|
1672
|
+
| --- | --- | --- | --- | --- | --- |
|
|
1673
|
+
| start of sweep (in memory, per-row staging) | 63.6 s | — | 46 s | 3.1 s | 2.0 s |
|
|
1674
|
+
| spilled reads as views, 64 KiB probe | 34 s | 10.0 / 34.9 s | 20 s | 6.6 s | 2.7 s |
|
|
1675
|
+
| **promoted wire pack** | **24 s** | 8.3 / 16.0 s | 11–15 s | **0.4 s** | **0.7 s** |
|
|
1676
|
+
| + synchronous per-entry fast path | 16–18 s | 7.2 / 16.9 s | 8.7–10.8 s | 0.3–0.6 s | 0.6–0.7 s |
|
|
1677
|
+
|
|
1678
|
+
What the numbers taught, in order:
|
|
1679
|
+
|
|
1680
|
+
1. **Production CPU is ~10x this laptop, uniformly.** A probe worker
|
|
1681
|
+
timing every per-object primitive (sync/streaming inflate, SHA-1,
|
|
1682
|
+
copies, a JS loop, Effect overhead, deflate) found nothing
|
|
1683
|
+
pathological — each is 8–15x slower there. Local ingest at
|
|
1684
|
+
0.14 ms/object *is* production ingest at ~1.5 ms. Every microsecond
|
|
1685
|
+
per object is worth ten. (`ZlibProbe.e2e.test.ts`; the local variant
|
|
1686
|
+
pins that workerd keeps the synchronous exact-span inflate.)
|
|
1687
|
+
2. **The spilled reader copied 512 KiB per entry.** `blobRandomAccess`
|
|
1688
|
+
returned `slice()` for in-window reads and the parser probes each
|
|
1689
|
+
entry with a window-sized read: ~8 GB of memcpy per push, 31.9 s of
|
|
1690
|
+
CPU. Views fixed it (the in-memory reader always handed out views);
|
|
1691
|
+
the probe dropped to 64 KiB so crossing a window edge is rare and
|
|
1692
|
+
small, and the window grows to the header's declared size in one step.
|
|
1693
|
+
3. **Durable Object storage cost is bytes WRITTEN, not statements.**
|
|
1694
|
+
Multi-row inserts and 8x larger batches did nothing on production
|
|
1695
|
+
(locally they halved staging time — commits are cheap there); finalize
|
|
1696
|
+
was 55 ms locally vs 4.9 s in production for the same 7.3k-object push.
|
|
1697
|
+
Staging writes every blob into SQLite; the staged→live flip rewrites
|
|
1698
|
+
every one of those records. Both are proportional to blob bytes.
|
|
1699
|
+
4. **So don't write blobs to SQLite: promote the wire pack.** A push whose
|
|
1700
|
+
body spilled already holds every non-delta blob in exactly the
|
|
1701
|
+
compaction layout (typeSize header + zdata). Ingest now stages those
|
|
1702
|
+
rows as `location='pack'` references into the incoming object (pack id
|
|
1703
|
+
`wire-<receiveId>`, `packKeyOf` maps it), which then outlives the
|
|
1704
|
+
request as repo data. 9,633 of this push's 15.6k objects never touch a
|
|
1705
|
+
row; staging 6.6 s → 0.4 s, finalize 2.7 s → 0.7 s, and the later
|
|
1706
|
+
compaction rewrite of those blobs never happens. Delta-resolved blobs
|
|
1707
|
+
(fresh deflate, in no pack), trees, commits and tags still take rows.
|
|
1708
|
+
5. **Spill early; merge rewrites wire packs.** With promotion the spilled
|
|
1709
|
+
path is the fast path, so the in-memory threshold is 4 MiB (a 5.7 MiB
|
|
1710
|
+
in-memory push spent 6 s in finalize; spilled, 2.2 s), and a spilled
|
|
1711
|
+
push's admission permit is its window working set, not its body. Wire
|
|
1712
|
+
packs also carry trees, commits and delta entries, so geometric merge
|
|
1713
|
+
*rewrites* them — copies only the referenced spans with regenerated
|
|
1714
|
+
headers and repoints each row — into a clean pack, then grace-deletes
|
|
1715
|
+
the wire object like any other source. Read fan-out stays geometric.
|
|
1716
|
+
|
|
1717
|
+
6. **A synchronous inner loop.** With sources exposing `readSync` (a
|
|
1718
|
+
view into the buffer or a cached window), a non-delta entry is decoded,
|
|
1719
|
+
inflated, hashed and copied with no fiber hop, and entries reach the
|
|
1720
|
+
staging sink 256 at a time. 13% of production ingest CPU; workerd's
|
|
1721
|
+
`_processChunk` closes its binding after one chunk, so an inflate
|
|
1722
|
+
engine cannot be reused there (probed and recorded).
|
|
1723
|
+
|
|
1724
|
+
Where this leaves a 40 MiB push: about 6.7 s is the client (git's own
|
|
1725
|
+
pack build plus the upload; GitHub pays the same), ~7 s is the server's
|
|
1726
|
+
per-object verification CPU on a core roughly 10x slower than a laptop's,
|
|
1727
|
+
and ~1 s is staging plus finalize. The verification is what git requires
|
|
1728
|
+
to trust a pack — every entry inflated and hashed before any ref moves —
|
|
1729
|
+
and it runs single-threaded in the repo's Durable Object. Going meaningfully
|
|
1730
|
+
below this means parallelizing that verification across isolates (a pack
|
|
1731
|
+
has no index, so boundaries are only known by inflating; hashing could be
|
|
1732
|
+
fanned out but is under half the work) or changing what the client sends.
|
|
1733
|
+
|
|
1734
|
+
Left: the remaining ingest CPU (inflate + SHA-1 + parse, ~7 s here) is
|
|
1735
|
+
the work git itself requires to trust a pack; finalize's residual is the
|
|
1736
|
+
flip of the delta-resolved rows. Both scale with object count, not bytes.
|
|
1737
|
+
|
|
1738
|
+
### §22.6 Streaming ingest
|
|
1739
|
+
|
|
1740
|
+
The push body was received whole (in memory below the threshold, spilled
|
|
1741
|
+
to blob storage above it) and only then parsed. Two serial phases, each
|
|
1742
|
+
as long as the other; and a 128 MB isolate that can hold exactly one
|
|
1743
|
+
large body. Ingest now parses the body **while it arrives**:
|
|
1744
|
+
|
|
1745
|
+
- `StreamingSource` (`Store/StreamingSource.ts`) is a `RandomAccess` over
|
|
1746
|
+
4 MiB slabs the receiver fills. A read past what has arrived waits;
|
|
1747
|
+
a read behind the retention window (16 MiB) is served from the spilled
|
|
1748
|
+
object once the body has ended — and fails if it never spills, so a
|
|
1749
|
+
parser that needs an evicted base defers that entry to a pass after
|
|
1750
|
+
`awaitEnd` (`BaseEvictedError`). The feeder parks when it is 24 MiB
|
|
1751
|
+
ahead of the parser, and a waiting reader always releases a parked
|
|
1752
|
+
feeder: the two never deadlock on each other.
|
|
1753
|
+
- `receiveWireBodyStreaming` feeds the source and, past the threshold,
|
|
1754
|
+
uploads uniform 8 MiB parts concurrently (three in flight) so no
|
|
1755
|
+
round trip to blob storage stalls the request body. The part list is
|
|
1756
|
+
completed in part-number order regardless of settle order
|
|
1757
|
+
(`orderedMultipart`) — R2 validates the uniform-part rule against the
|
|
1758
|
+
list as given, and the tail settles before earlier parts do.
|
|
1759
|
+
- The parser tolerates an unknown pack length: the entry loop is driven
|
|
1760
|
+
by the header's count, the trailer SHA-1 is fed incrementally with a
|
|
1761
|
+
20-byte lag, and the trailer is compared once the source ends.
|
|
1762
|
+
|
|
1763
|
+
The head of the body (the pkt-line commands) is read as a 1 MiB range
|
|
1764
|
+
before anything else; a delete-only push is a 12-byte probe that fails.
|
|
1765
|
+
|
|
1766
|
+
### §22.7 The hasher fan-out
|
|
1767
|
+
|
|
1768
|
+
Verification is what git requires to trust a pack: every entry inflated
|
|
1769
|
+
and hashed before any ref moves. It scales with object count, and on a
|
|
1770
|
+
core ~10x slower than a laptop it was the bulk of a 40 MiB push. It is
|
|
1771
|
+
now a service — `Hasher` (`Hasher/Hasher.ts`) — with two layers:
|
|
1772
|
+
`HasherInline` (the same isolate) and `HasherSelf`, which POSTs pack
|
|
1773
|
+
parts to `/_alchemy/git/hash` on the Worker's own `Self` binding, so a
|
|
1774
|
+
push is verified by as many isolates as it has parts. The route is
|
|
1775
|
+
admin-authenticated (the Worker's own key) and answers a compact binary
|
|
1776
|
+
result: entry coordinates, oids, and for delta-resolved entries the fresh
|
|
1777
|
+
zlib bytes; non-delta entries ship no bytes (their rows are promoted
|
|
1778
|
+
coordinates or are read back from the source).
|
|
1779
|
+
|
|
1780
|
+
### §22.8 Raw chunks, resync, stitching
|
|
1781
|
+
|
|
1782
|
+
A pack has no index: entry boundaries are only known by inflating. The
|
|
1783
|
+
first fan-out shipped each part with the previous part's incomplete tail,
|
|
1784
|
+
which made the dispatch a serial chain gated on each part's result — the
|
|
1785
|
+
fan-out degenerated to one hasher at a time. Two passes (a cheap
|
|
1786
|
+
boundary pre-scan in the DO, then hashing by known spans) moved the CPU
|
|
1787
|
+
back into the single-threaded object.
|
|
1788
|
+
|
|
1789
|
+
The pump now dispatches **raw 4 MiB chunks as they arrive**, four in
|
|
1790
|
+
flight, with no dependency between them. Every chunk but the first is
|
|
1791
|
+
scanned in *resync* mode (`PartialScan.ts`): `findBoundary` walks the
|
|
1792
|
+
chunk for a zlib header (`0x78` + one of the four FLG bytes) at which two
|
|
1793
|
+
consecutive entries parse, and the scan proceeds from there — lenient,
|
|
1794
|
+
because `remaining` is only an upper bound and the last chunk runs into
|
|
1795
|
+
the trailer. The DO then consumes results in chunk order: the bytes
|
|
1796
|
+
between the last settled boundary and a chunk's first found boundary —
|
|
1797
|
+
one straddling entry, normally — are scanned as a region from the
|
|
1798
|
+
retained payloads; a region that ends exactly at the found boundary
|
|
1799
|
+
confirms the resync, otherwise the chunk is rescanned sequentially from
|
|
1800
|
+
the settled boundary. Chunks too small to hold two entries report no
|
|
1801
|
+
boundary and are settled by a later region. Deltas whose base lies in
|
|
1802
|
+
another chunk come back unresolved and are applied after the trailer,
|
|
1803
|
+
against bases from any chunk or from the live store.
|
|
1804
|
+
|
|
1805
|
+
The platform's own timeline (a `wrangler tail` of the hash calls) showed
|
|
1806
|
+
the fan-out working and the push still slow: chunks 0–3 arrived within
|
|
1807
|
+
0.7 s and the rest dribbled in at ~4 MiB/s, while the receive-pack
|
|
1808
|
+
invocation's wall time was five times its CPU. Everything the Durable
|
|
1809
|
+
Object received it also sent out twice — to the spill and to the hashers.
|
|
1810
|
+
|
|
1811
|
+
### §22.9 The pack never enters the Durable Object
|
|
1812
|
+
|
|
1813
|
+
The whole pipeline above now runs in the **stateless Worker**
|
|
1814
|
+
(`Server.ts` `receivePackRoute`): it receives the body, verifies it
|
|
1815
|
+
through the fan-out, stitches, resolves deltas, and ships the Repo DO only
|
|
1816
|
+
*rows* over RPC — `beginPush` (authorization of the parsed commands, the
|
|
1817
|
+
staging push row), `stagePush` (batches of staged rows, three in flight
|
|
1818
|
+
and joined before the commit; promoted rows are coordinates into the wire
|
|
1819
|
+
pack, inline rows carry their zlib bytes — `PushWire.ts`), `readPushBase`
|
|
1820
|
+
(thin-delta bases), and `commitPush` (connectivity over the staged rows,
|
|
1821
|
+
the commit graph, the transactional ref CAS, post-commit bookkeeping).
|
|
1822
|
+
The DO's memory, CPU and egress are untouched by push size; its part of
|
|
1823
|
+
a push is SQL.
|
|
1824
|
+
|
|
1825
|
+
Moving the pipeline exposed the next wall: the receiver was sending
|
|
1826
|
+
every byte out twice — to the spill and to the hashers — and the last
|
|
1827
|
+
part was dispatched only when the multipart upload completed, because
|
|
1828
|
+
that was when the streaming source ended. Three changes:
|
|
1829
|
+
|
|
1830
|
+
- **The hasher writes the spill.** Parts are body-aligned 8 MiB (R2's
|
|
1831
|
+
uniform-part rule), and each `hashPart` call carries the multipart
|
|
1832
|
+
upload's key and id: the hasher isolate writes the part it verifies
|
|
1833
|
+
(`BlobStoreShape.uploadPart` — parts may be uploaded from any isolate;
|
|
1834
|
+
`complete` takes the collected parts and sorts them). The receiver
|
|
1835
|
+
sends each byte out once; the first part carries the command section
|
|
1836
|
+
and the pack header before its first entry (`skip`).
|
|
1837
|
+
- **The source ends at body end.** `expectFallback` makes an evicted read
|
|
1838
|
+
wait for the completed spill instead of failing, so the last part is
|
|
1839
|
+
dispatched the moment the body ends, and results settle while the body
|
|
1840
|
+
is still arriving: the consumer is a forked fiber, the producer runs
|
|
1841
|
+
on the request's own (hash fibers are its children).
|
|
1842
|
+
- **The straddler is speculative.** The entry crossing a part edge is
|
|
1843
|
+
dispatched the moment its part settles, sized from its own header out
|
|
1844
|
+
of the retained bytes, so a 10 MB blob spanning three parts is hashed
|
|
1845
|
+
alongside the parts rather than after the last one — and `findBoundary`
|
|
1846
|
+
searches the whole part (it searched the first MiB: a part whose head
|
|
1847
|
+
lay inside such a blob reported no boundary and was hashed serially).
|
|
1848
|
+
|
|
1849
|
+
What is left is the Worker's own I/O: a single invocation receives the
|
|
1850
|
+
body and forwards it, and the two share the isolate's throughput.
|
|
1851
|
+
|
|
1852
|
+
### §22.10 Measured, and the wall
|
|
1853
|
+
|
|
1854
|
+
The same two pushes as §22.5 — this repository's 15.6k-object, 40 MiB
|
|
1855
|
+
delta-heavy pack (`loose`) and a 15.3k-object, 44 MiB pack of mostly
|
|
1856
|
+
whole blobs (`synthetic`) — real `git push` from the same client, same
|
|
1857
|
+
edge, and GitHub on a fresh repository from the same client for scale.
|
|
1858
|
+
Cloudflare timings vary run to run by ±20%; the ranges are what was seen.
|
|
1859
|
+
|
|
1860
|
+
| | loose push | synthetic push | incremental push | bare clone |
|
|
1861
|
+
| --- | --- | --- | --- | --- |
|
|
1862
|
+
| GitHub (fresh repo) | 3.3 s | 4.6 s | 1.2 s | 1.3 / 2.1 s |
|
|
1863
|
+
| start of this sweep (in-DO, sequential fan-out) | 16 s | 10.8 s | 0.9–1.3 s | 1.3 s |
|
|
1864
|
+
| pipeline in the Worker (§22.9) | 19 s | 12.9 s | | |
|
|
1865
|
+
| + hashers write the spill, body-aligned parts | 14–19 s | 9.3–12.9 s | | |
|
|
1866
|
+
| + speculative straddler, whole-part boundary search | 11.3–14.8 s | 7.7 s | 0.3–0.4 s | |
|
|
1867
|
+
| + scan-first hash responses, native receive loop | 13–14.6 s | 9.5–11 s | 0.3–0.7 s | 1.3 s |
|
|
1868
|
+
| **`HasherInline`** (no fan-out; the reference assembly) | 9.9–13.5 s | 8.8 s | 0.24–0.27 s | 1.3 s |
|
|
1869
|
+
|
|
1870
|
+
The receive-side phases of a loose push at the end of the sweep (from
|
|
1871
|
+
the pump's own log, `Date.now` advancing only across I/O): parts 1–3
|
|
1872
|
+
arrive within 1.3 s (18 MiB/s, the client's rate to Cloudflare's own
|
|
1873
|
+
speed test), then nothing arrives for 4.5 s while three hash calls are in
|
|
1874
|
+
flight, then the rest; the body ends at 8.7 s and the last result settles
|
|
1875
|
+
at 8.7 s. The hash calls' wall times stack instead of overlapping.
|
|
1876
|
+
|
|
1877
|
+
**Why: service-binding subrequests run on the caller's thread.** A probe
|
|
1878
|
+
route fanning one 8 MiB part out N times, timed from the client:
|
|
1879
|
+
|
|
1880
|
+
| transport | n=1 | n=3 | n=6 |
|
|
1881
|
+
| --- | --- | --- | --- |
|
|
1882
|
+
| self service binding (`Cloudflare.Workers.Self`) | 1.1 s | 1.9–2.6 s | 3.9–4.5 s |
|
|
1883
|
+
| service binding to a second script | 0.7–1.0 s | 1.4–2.5 s | 3.6–3.9 s |
|
|
1884
|
+
| `fetch` to the Worker's own workers.dev URL | refused (connection lost) |
|
|
1885
|
+
| `fetch` to a second script's workers.dev URL | refused (connection lost) |
|
|
1886
|
+
|
|
1887
|
+
Six calls cost six times one call over both bindings: the callee executes
|
|
1888
|
+
in the caller's isolate (four concurrent self calls with 8 MiB bodies hit
|
|
1889
|
+
the isolate's memory limit, error 1102), and the in-Worker clock does not
|
|
1890
|
+
even advance across the call. The fan-out therefore never parallelized
|
|
1891
|
+
CPU; it moved bytes around on one thread. What it did buy — and what the
|
|
1892
|
+
Worker-side pipeline keeps — is a Durable Object that never sees a pack
|
|
1893
|
+
byte, a receive that is not blocked on the spill, and hashing that
|
|
1894
|
+
overlaps the client's upload as well as one thread allows.
|
|
1895
|
+
|
|
1896
|
+
Requests arriving from OUTSIDE are spread across isolates: four
|
|
1897
|
+
concurrent external calls of the same part finished as two pairs (2.0 s
|
|
1898
|
+
and 4.1 s), i.e. two-way parallelism. Cross-zone `fetch` to a hasher on
|
|
1899
|
+
another zone would inherit that, at the price of real network egress
|
|
1900
|
+
competing with the client's upload.
|
|
1901
|
+
|
|
1902
|
+
On one thread the floor for a push is roughly `max(ingress, hash CPU)`
|
|
1903
|
+
plus staging and commit: for the loose pack about 2.5 s of upload and 5 s
|
|
1904
|
+
of hashing on a core ~10x slower than a laptop's, so 6–7 s before the
|
|
1905
|
+
commit — the measured 8.7–11 s is that floor plus imperfect overlap. The
|
|
1906
|
+
synthetic pack hashes in ~2 s and lands nearer 6 s. Reaching GitHub's
|
|
1907
|
+
3.3 s on the delta-heavy pack needs compute Workers do not offer per
|
|
1908
|
+
request: native `index-pack` in a Container (verifying 40 MiB in well
|
|
1909
|
+
under a second, writing R2 from its own network), or a multi-core host
|
|
1910
|
+
behind a cross-zone HTTP hasher. Both are layers this design admits
|
|
1911
|
+
(`Hasher` is a service); neither is built here.
|
|
1912
|
+
|
|
1913
|
+
With the fan-out removed (`HasherInline`, the receiver hashing as parts
|
|
1914
|
+
arrive and spilling them itself), the loose push measures 9.9–13.5 s and
|
|
1915
|
+
the receiver's own CPU shows the hashing — 5.0–7.9 s of it — that the
|
|
1916
|
+
fan-out had spread over invocations on the same thread. That layer is now
|
|
1917
|
+
the reference assembly; `HasherSelf` stays as the shape a remote hasher
|
|
1918
|
+
takes.
|
|
1919
|
+
|
|
1920
|
+
Where the pipeline is already at or past parity: incremental pushes
|
|
1921
|
+
(0.24–0.7 s vs 1.2 s), bare clones (§22.4), and the read path.
|
|
1922
|
+
|
|
1923
|
+
### §22.11 Hasher layers: the same push on other compute
|
|
1924
|
+
|
|
1925
|
+
`Hasher` is a service precisely so the compute behind verification can be
|
|
1926
|
+
chosen per deployment. Three layers ship:
|
|
1927
|
+
|
|
1928
|
+
| layer | where the scan runs | spill parts written by | parallelism | cost model |
|
|
1929
|
+
| --- | --- | --- | --- | --- |
|
|
1930
|
+
| `HasherInline` (default) | the receiving Worker | the receiver | none (one thread) | included in the Worker's CPU |
|
|
1931
|
+
| `HasherSelf` | another invocation of the same script | the hasher | none on Cloudflare (§22.10) | same |
|
|
1932
|
+
| `HasherLambda(fn)` (`alchemy/Git/Hasher`) | an AWS Lambda per chunk | the receiver | one Lambda per 4 MiB chunk, all at once | Lambda-seconds + cross-cloud egress |
|
|
1933
|
+
|
|
1934
|
+
**`HasherLambda`.** The Git Worker binds `AWS.Lambda.InvokeFunction` on a
|
|
1935
|
+
Lambda declared in the same stack (`HasherFunction`, an Effect-native
|
|
1936
|
+
Function whose only handler answers hash events); the stack carries both
|
|
1937
|
+
provider sets. Binding a Lambda operation to a *Worker* host provisions —
|
|
1938
|
+
once per Worker — an IAM user, key and least-privilege assume-role Role,
|
|
1939
|
+
binds the key and role ARN onto the Worker, and signs each invoke with
|
|
1940
|
+
credentials assumed through a single-flight, expiry-aware resolver: the
|
|
1941
|
+
cross-cloud scaffolding the MicroVM bindings introduced, now shared by
|
|
1942
|
+
every function-scoped Lambda `*Http` binding (`BindingHttp.ts`).
|
|
1943
|
+
|
|
1944
|
+
The invoke payload is JSON, so a chunk travels base64: chunks are 4 MiB
|
|
1945
|
+
(≈5.6 MB encoded, under the 6 MB limit) — the pump reads chunks of the
|
|
1946
|
+
hasher's declared size and, because a Lambda cannot reach the blob store,
|
|
1947
|
+
uploads the 8 MiB spill parts itself from the retained bytes
|
|
1948
|
+
(`writesSpill: false`). The response is bounded to the same limit: the
|
|
1949
|
+
Lambda omits non-blob content (the receiver inflates trees and commits
|
|
1950
|
+
from its retained bytes) and, when the fresh zdata of delta-resolved
|
|
1951
|
+
entries would still overflow, demotes the largest of them back to
|
|
1952
|
+
`unresolved` with their base references, so the receiver resolves those
|
|
1953
|
+
as it would any cross-chunk delta. Any failure on the Lambda side — a
|
|
1954
|
+
throttle, a cold-start timeout, a rejected payload — hashes that chunk
|
|
1955
|
+
inline: a push never fails because its hasher did.
|
|
1956
|
+
|
|
1957
|
+
Measured, same pushes and client as §22.10 (`HasherLambda`, `us-east-1`,
|
|
1958
|
+
3 GB functions, the Worker on Cloudflare's edge):
|
|
1959
|
+
|
|
1960
|
+
| | loose push | synthetic push | incremental push |
|
|
1961
|
+
| --- | --- | --- | --- |
|
|
1962
|
+
| GitHub (fresh repo) | 3.3 s | 4.6 s | 1.2 s |
|
|
1963
|
+
| `HasherInline` | 9.9–13.5 s | 8.8 s | 0.24–0.4 s |
|
|
1964
|
+
| **`HasherLambda`** | **6.8–7.9 s** | **6.3–6.7 s** | 0.27–0.8 s |
|
|
1965
|
+
|
|
1966
|
+
The body now arrives in 0.8–2.7 s (the receiver's thread is free), the
|
|
1967
|
+
last chunk settles within a second of it, and the receiver's own CPU
|
|
1968
|
+
drops to 1.4–2.7 s: the trailer SHA-1, the staging batches, and — on the
|
|
1969
|
+
delta-heavy pack — 515 cross-chunk deltas resolved locally plus the
|
|
1970
|
+
10 MB straddler that exceeds an invoke payload and is hashed inline.
|
|
1971
|
+
Those, the staging round trips (0.7–1.2 s) and the commit (0.6–0.7 s)
|
|
1972
|
+
are what remains between this and GitHub.
|
|
1973
|
+
|
|
1974
|
+
What this buys: every chunk verifies at once, on a core several times
|
|
1975
|
+
faster than a Worker's, so hashing leaves the receive's critical path;
|
|
1976
|
+
what it costs: the chunk crosses to AWS and the scan comes back, so a
|
|
1977
|
+
Lambda hasher is worth it for pushes of tens of MiB and irrelevant for the
|
|
1978
|
+
kilobyte pushes that dominate a repository's life — which is why it is a
|
|
1979
|
+
layer and not the default.
|
|
1980
|
+
|
|
1981
|
+
### §22.12 Hasher on dynamically loaded Workers
|
|
1982
|
+
|
|
1983
|
+
`WorkerLoader` instantiates a Worker from module source at runtime, under
|
|
1984
|
+
a name the runtime caches. The question that decides whether it is a
|
|
1985
|
+
hasher was answered by a probe (four loaded workers each running a fixed
|
|
1986
|
+
CPU burn, timed from the client):
|
|
1987
|
+
|
|
1988
|
+
| | n=1 | n=4 same name | n=4 distinct names | n=8 |
|
|
1989
|
+
| --- | --- | --- | --- | --- |
|
|
1990
|
+
| CPU burn, client time | 0.44–0.79 s | 1.94 s (serial) | **0.65 s (parallel)** | refused |
|
|
1991
|
+
| 100 MB allocation each | ok | ok | ok, four isolates at once | refused |
|
|
1992
|
+
|
|
1993
|
+
Distinct names are distinct isolates, and distinct isolates run **in
|
|
1994
|
+
parallel with the caller** — unlike a service binding (§22.10). Each has
|
|
1995
|
+
its own 128 MB. The runtime allows four concurrent dynamic-worker
|
|
1996
|
+
invocations per request; an eighth call fails with "Dynamic worker
|
|
1997
|
+
concurrency limit exceeded".
|
|
1998
|
+
|
|
1999
|
+
`HasherWorkerLoader` (`alchemy/Git/Hasher`) keeps four fixed names
|
|
2000
|
+
(`git-hasher-0..3`, warm across pushes), dispatches 4 MiB chunks over the
|
|
2001
|
+
hash route's own protocol, and lets the pump write the spill
|
|
2002
|
+
(`writesSpill: false`); the loaded hasher has no bindings and
|
|
2003
|
+
`globalOutbound: null`. Its module is the real scanner: the Worker
|
|
2004
|
+
bundler gained a `?worker` import (`WorkerModulePlugin.ts`) that bundles
|
|
2005
|
+
the target into one self-contained module and imports it as a string —
|
|
2006
|
+
nested `?worker` imports included — so `WorkerLoaderModule.ts` is ordinary
|
|
2007
|
+
TypeScript that shares `PartialScan` with everything else. (The loader's
|
|
2008
|
+
`get` also wrapped the native stub as an entrypoint and had no `fetch`;
|
|
2009
|
+
fixed with a regression test.)
|
|
2010
|
+
|
|
2011
|
+
Measured, same pushes and client as §22.10:
|
|
2012
|
+
|
|
2013
|
+
| | loose push | synthetic push | incremental push |
|
|
2014
|
+
| --- | --- | --- | --- |
|
|
2015
|
+
| GitHub (fresh repo) | 3.3 s | 4.6 s | 1.2 s |
|
|
2016
|
+
| `HasherInline` | 9.9–13.5 s | 8.8 s | 0.24–0.4 s |
|
|
2017
|
+
| `HasherLambda` | 6.8–7.9 s | 6.3–6.7 s | 0.27–0.8 s |
|
|
2018
|
+
| **`HasherWorkerLoader`** | **7.1–7.8 s** | **6.8 s** | 0.24 s |
|
|
2019
|
+
|
|
2020
|
+
The body is in by 0.8–1.5 s, chunks settle in waves of four (four by
|
|
2021
|
+
0.9 s, the next four by 2.1 s, the last by 2.5 s), and the receiver's own
|
|
2022
|
+
CPU is the lowest of the three (0.9–1.4 s: no base64, no signing). What
|
|
2023
|
+
remains is the same tail as §22.11 — cross-chunk deltas, the oversize
|
|
2024
|
+
straddler, staging and the commit — and the four-way cap: a push wider
|
|
2025
|
+
than four chunks hashes in waves.
|
|
2026
|
+
|
|
2027
|
+
### §22.13 Deltas as jobs, and the resolved pack
|
|
2028
|
+
|
|
2029
|
+
Two receiver-side costs survived every hasher: the cross-chunk and thin
|
|
2030
|
+
deltas the scan leaves unresolved (515 on the delta-heavy pack) were
|
|
2031
|
+
applied, hashed and deflated on the receiver's thread, and every
|
|
2032
|
+
delta-resolved blob was staged inline — its fresh zlib written into
|
|
2033
|
+
SQLite and rewritten by the staged→live flip.
|
|
2034
|
+
|
|
2035
|
+
**Delta rounds.** `Hasher.resolveDeltas(bases, jobs)` applies a batch of
|
|
2036
|
+
deltas whose bases the caller supplies (a base's zlib or, for a live
|
|
2037
|
+
object, its content), returning oid, fresh zlib and non-blob content.
|
|
2038
|
+
The pump resolves in rounds: every delta whose base is known joins a
|
|
2039
|
+
byte-bounded batch — bases shipped once per batch — and the batches run
|
|
2040
|
+
across the hasher's slots at once; a delta on a still-unresolved delta
|
|
2041
|
+
waits for the next round. The receiver only assembles bytes it already
|
|
2042
|
+
holds. Every layer implements it (the loaded worker and the self route
|
|
2043
|
+
answer `mode=deltas`; the Lambda keeps it inline until its payload budget
|
|
2044
|
+
is worth spending). 515 deltas: 0.26–0.37 s of round trips instead of
|
|
2045
|
+
receiver CPU.
|
|
2046
|
+
|
|
2047
|
+
**The resolved pack.** While a body spills, delta-resolved blobs are held
|
|
2048
|
+
back from staging; after the rounds their zlib is written as one object,
|
|
2049
|
+
`wire-<receiveId>-r` (`typeSize header + zdata` per entry, the promoted
|
|
2050
|
+
layout `packKeyOf` already maps), and their rows become coordinates. The
|
|
2051
|
+
DO writes no blob bytes for a large push at all: on the delta-heavy pack
|
|
2052
|
+
every one of its 13,646 blobs is a coordinate and 1,968 trees, commits
|
|
2053
|
+
and tags stay resident (the resolved pack is 4.1 MB). Compaction's
|
|
2054
|
+
geometric merge treats it like any wire pack.
|
|
2055
|
+
|
|
2056
|
+
### §22.14 The lazy flip
|
|
2057
|
+
|
|
2058
|
+
With every blob a coordinate, `finalize` was still 0.6–0.7 s of a
|
|
2059
|
+
~4.3 s push: `UPDATE objects SET staged_push = NULL WHERE staged_push = ?`
|
|
2060
|
+
rewrites every staged row of a WITHOUT ROWID table keyed by random oids —
|
|
2061
|
+
one page per row, on the response path. A staging table would only move
|
|
2062
|
+
the same random-page insert to commit time.
|
|
2063
|
+
|
|
2064
|
+
A push's objects are now live the moment its `pushes` row is committed:
|
|
2065
|
+
every read predicate is `LIVE_OBJECTS` —
|
|
2066
|
+
`staged_push IS NULL OR staged_push IN (committed pushes)` — a
|
|
2067
|
+
materialized subquery over a table that holds at most the pushes whose
|
|
2068
|
+
flip is pending. The transaction commits the refs, the graph and the
|
|
2069
|
+
push row; the per-row rewrite runs after the response (`flipPush`, in
|
|
2070
|
+
the DO's `waitUntil`), and GC flips any committed push whose deferred
|
|
2071
|
+
flip never ran. A new push may adopt rows only from pushes that are not
|
|
2072
|
+
committed, so a committed-unflipped row is never re-staged (and then
|
|
2073
|
+
GC'd) out from under a live object. Finalize on the delta-heavy push:
|
|
2074
|
+
0.7 s → the refs and graph alone; locally 50 ms → 2 ms.
|
|
2075
|
+
|
|
2076
|
+
### §22.15 Where the sweep stands
|
|
2077
|
+
|
|
2078
|
+
Same pushes and client; three runs each on the loader hasher after
|
|
2079
|
+
§22.13–14, best and median (the spread is the client's uplink — the
|
|
2080
|
+
route's own total is 3.4–3.9 s for the loose push and 2.2–3.6 s for the
|
|
2081
|
+
synthetic one):
|
|
2082
|
+
|
|
2083
|
+
| | loose push | synthetic push |
|
|
2084
|
+
| --- | --- | --- |
|
|
2085
|
+
| GitHub (fresh repo) | 3.3 s | 4.6 s |
|
|
2086
|
+
| start of the sweep | 63.6 s | — |
|
|
2087
|
+
| `HasherWorkerLoader`, §22.12 | 7.1–7.8 s | 6.8 s |
|
|
2088
|
+
| + delta jobs, resolved pack, lazy flip, batched graph, edge-only connectivity | **5.9 s best, 6.5 s median** | **4.8 s best, 6.4 s median** |
|
|
2089
|
+
|
|
2090
|
+
The whole-blob push meets GitHub on a good run. The delta-heavy push is
|
|
2091
|
+
2.6 s behind on its best run, and the route's remaining time is the
|
|
2092
|
+
hashing waves — ten 4 MiB chunks over four isolates, the third wave
|
|
2093
|
+
landing a second after the body — plus the delta rounds (0.2–0.4 s),
|
|
2094
|
+
the resolved pack's late write and the commit round trip (0.5–0.7 s).
|
|
2095
|
+
The next lever for it is more than four hashers per push: a loaded
|
|
2096
|
+
hasher can hold a loader binding of its own and fan a chunk out a
|
|
2097
|
+
second time, or a push can split its chunks across the loader and a
|
|
2098
|
+
Lambda. Neither is built here.
|