@cat-factory/contracts 0.173.0 → 0.175.0

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.
@@ -287,7 +287,7 @@ export declare const blockSchema: v.ObjectSchema<{
287
287
  * runs with no infra stood up.
288
288
  */
289
289
  readonly provisioning: v.OptionalSchema<v.ObjectSchema<{
290
- readonly type: v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>;
290
+ readonly type: v.PicklistSchema<["kubernetes", "docker-compose", "cloudflare", "custom", "infraless"], undefined>;
291
291
  readonly manifestSource: v.OptionalSchema<v.VariantSchema<"type", [v.ObjectSchema<{
292
292
  readonly type: v.LiteralSchema<"colocated", undefined>;
293
293
  readonly path: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 500, undefined>]>;
@@ -259,8 +259,13 @@ export type EnvironmentManifest = v.InferOutput<typeof environmentManifestSchema
259
259
  * The provision type a service declares — the INPUT SHAPE it produces. `infraless` means
260
260
  * the service stands up no environment (the Tester runs with no infra). A `custom` service
261
261
  * additionally pins a `manifestId` (see {@link serviceProvisioningSchema}).
262
+ *
263
+ * `cloudflare` is the per-PR Cloudflare Workers preview: unlike every other type the service
264
+ * declares NOTHING repo-specific here, because the recipe lives in the repo's own preview
265
+ * workflow rather than in a compose file or a manifest tree the platform reads. Declaring the
266
+ * type is the whole service side of it.
262
267
  */
263
- export declare const provisionTypeSchema: v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>;
268
+ export declare const provisionTypeSchema: v.PicklistSchema<["kubernetes", "docker-compose", "cloudflare", "custom", "infraless"], undefined>;
264
269
  export type ProvisionType = v.InferOutput<typeof provisionTypeSchema>;
265
270
  /**
266
271
  * Machine-readable cause of an environment-provisioning failure, surfaced on the run's
@@ -277,9 +282,10 @@ export type EnvironmentFailureReason = v.InferOutput<typeof environmentFailureRe
277
282
  * The engine a workspace/user handler uses to stand up / connect to an environment for a
278
283
  * provision type. `none` is the synthetic engine for `infraless`. `local-docker` runs a
279
284
  * compose stack locally; `local-k3s`/`remote-kubernetes` drive a kube apiserver;
285
+ * `cloudflare` drives a repo's preview workflow over the VCS deployments API;
280
286
  * `remote-custom` is the generic BYO HTTP management API.
281
287
  */
282
- export declare const infraEngineSchema: v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "remote-custom", "none"], undefined>;
288
+ export declare const infraEngineSchema: v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "cloudflare", "remote-custom", "none"], undefined>;
283
289
  export type InfraEngine = v.InferOutput<typeof infraEngineSchema>;
284
290
  /** A custom-manifest-type identifier (lower-kebab slug). */
285
291
  export declare const manifestIdSchema: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>;
@@ -950,8 +956,49 @@ export declare const eksProvisionConfigSchema: v.ObjectSchema<{
950
956
  }, undefined>], undefined>, undefined>, undefined>;
951
957
  }, undefined>;
952
958
  export type EksProvisionConfig = v.InferOutput<typeof eksProvisionConfigSchema>;
959
+ /** The secret-bundle key the Cloudflare env backend reads its VCS API token from. */
960
+ export declare const CLOUDFLARE_ENV_TOKEN_SECRET_KEY = "githubToken";
961
+ /** Default templates, exported so the provider, the UI hints and the docs cannot drift apart. */
962
+ export declare const CLOUDFLARE_DEFAULT_WORKER_NAME_TEMPLATE = "cat-factory-pr-{{pullNumber}}";
963
+ export declare const CLOUDFLARE_DEFAULT_ENVIRONMENT_NAME_TEMPLATE = "pr-{{pullNumber}}";
964
+ /**
965
+ * The Cloudflare preview engine connection (the "how"). Everything here is non-secret; the
966
+ * VCS API token rides the encrypted secret bundle under
967
+ * {@link CLOUDFLARE_ENV_TOKEN_SECRET_KEY}.
968
+ *
969
+ * The two name templates are the CONTRACT WITH THE WORKFLOW, which is why they are config and
970
+ * not constants: the platform derives the environment name it deploys under and the Worker
971
+ * URL it hands the tester, and the workflow names its resources from the same values. Change
972
+ * one and you must change the other. They default to the reference workflow's shape, so a
973
+ * deployment that copied `deploy/preview` unmodified sets neither.
974
+ */
975
+ export declare const cloudflareEnvironmentConfigSchema: v.ObjectSchema<{
976
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
977
+ /**
978
+ * The account's `*.workers.dev` subdomain — the preview URL is
979
+ * `https://<worker>.<subdomain>.workers.dev`. The platform can DERIVE that before anything
980
+ * is built, which is what lets a tester be handed a URL without waiting on a deploy that
981
+ * takes minutes.
982
+ */
983
+ readonly workersSubdomain: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 63, undefined>, v.RegexAction<string, "must be a bare workers.dev subdomain label, e.g. \"my-account\"">]>;
984
+ /** VCS API root. Absent ⇒ `https://api.github.com`. Set it for GitHub Enterprise Server. */
985
+ readonly apiBaseUrl: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
986
+ /**
987
+ * `owner/repo` carrying the preview workflow. Absent ⇒ THE BLOCK'S OWN REPO, resolved per
988
+ * provision — which is the point of a built-in backend over a pasted manifest: one handler
989
+ * serves every repository in the workspace instead of being pinned to one.
990
+ */
991
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>, undefined>;
992
+ /** Worker name template; the URL is derived from it. Absent ⇒ `cat-factory-pr-{{pullNumber}}`. */
993
+ readonly workerNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
994
+ /** Deployment environment name template. Absent ⇒ `pr-{{pullNumber}}`. */
995
+ readonly environmentNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
996
+ /** Fallback TTL (ms) after which the env is swept + torn down. */
997
+ readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
998
+ }, undefined>;
999
+ export type CloudflareEnvironmentConfig = v.InferOutput<typeof cloudflareEnvironmentConfigSchema>;
953
1000
  /** Built-in environment backend kinds the contract knows by name. */
954
- export declare const RESERVED_ENVIRONMENT_BACKEND_KINDS: readonly ['manifest', 'kubernetes', 'eks'];
1001
+ export declare const RESERVED_ENVIRONMENT_BACKEND_KINDS: readonly ['manifest', 'kubernetes', 'eks', 'cloudflare'];
955
1002
  /**
956
1003
  * The `kind` slug of a CUSTOM (third-party, programmatically-registered) environment
957
1004
  * backend: any lower-kebab slug that isn't a reserved built-in. A custom backend stores
@@ -1461,6 +1508,32 @@ export declare const environmentBackendConfigSchema: v.VariantSchema<"kind", [v.
1461
1508
  }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
1462
1509
  }, undefined>], undefined>, undefined>, undefined>;
1463
1510
  }, undefined>;
1511
+ }, undefined>, v.ObjectSchema<{
1512
+ readonly kind: v.LiteralSchema<"cloudflare", undefined>;
1513
+ readonly cloudflare: v.ObjectSchema<{
1514
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
1515
+ /**
1516
+ * The account's `*.workers.dev` subdomain — the preview URL is
1517
+ * `https://<worker>.<subdomain>.workers.dev`. The platform can DERIVE that before anything
1518
+ * is built, which is what lets a tester be handed a URL without waiting on a deploy that
1519
+ * takes minutes.
1520
+ */
1521
+ readonly workersSubdomain: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 63, undefined>, v.RegexAction<string, "must be a bare workers.dev subdomain label, e.g. \"my-account\"">]>;
1522
+ /** VCS API root. Absent ⇒ `https://api.github.com`. Set it for GitHub Enterprise Server. */
1523
+ readonly apiBaseUrl: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
1524
+ /**
1525
+ * `owner/repo` carrying the preview workflow. Absent ⇒ THE BLOCK'S OWN REPO, resolved per
1526
+ * provision — which is the point of a built-in backend over a pasted manifest: one handler
1527
+ * serves every repository in the workspace instead of being pinned to one.
1528
+ */
1529
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>, undefined>;
1530
+ /** Worker name template; the URL is derived from it. Absent ⇒ `cat-factory-pr-{{pullNumber}}`. */
1531
+ readonly workerNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
1532
+ /** Deployment environment name template. Absent ⇒ `pr-{{pullNumber}}`. */
1533
+ readonly environmentNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
1534
+ /** Fallback TTL (ms) after which the env is swept + torn down. */
1535
+ readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
1536
+ }, undefined>;
1464
1537
  }, undefined>, v.ObjectSchema<{
1465
1538
  readonly kind: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>, v.RegexAction<string, "must be a lower-kebab slug">, v.CheckAction<string, "reserved backend kind">]>;
1466
1539
  readonly manifest: v.ObjectSchema<{
@@ -1602,7 +1675,7 @@ export type EnvironmentBackendKind = EnvironmentBackendConfig['kind'];
1602
1675
  * handler (the "how") at provision time.
1603
1676
  */
1604
1677
  export declare const serviceProvisioningSchema: v.ObjectSchema<{
1605
- readonly type: v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>;
1678
+ readonly type: v.PicklistSchema<["kubernetes", "docker-compose", "cloudflare", "custom", "infraless"], undefined>;
1606
1679
  /** `kubernetes`: where the per-PR manifests live (colocated in the PR repo, or a separate repo). */
1607
1680
  readonly manifestSource: v.OptionalSchema<v.VariantSchema<"type", [v.ObjectSchema<{
1608
1681
  readonly type: v.LiteralSchema<"colocated", undefined>;
@@ -2293,6 +2366,32 @@ export declare const infraHandlerConfigSchema: v.VariantSchema<"engine", [v.Obje
2293
2366
  readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
2294
2367
  }, undefined>, undefined>, undefined>;
2295
2368
  }, undefined>;
2369
+ }, undefined>, v.ObjectSchema<{
2370
+ readonly engine: v.LiteralSchema<"cloudflare", undefined>;
2371
+ readonly cloudflare: v.ObjectSchema<{
2372
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
2373
+ /**
2374
+ * The account's `*.workers.dev` subdomain — the preview URL is
2375
+ * `https://<worker>.<subdomain>.workers.dev`. The platform can DERIVE that before anything
2376
+ * is built, which is what lets a tester be handed a URL without waiting on a deploy that
2377
+ * takes minutes.
2378
+ */
2379
+ readonly workersSubdomain: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 63, undefined>, v.RegexAction<string, "must be a bare workers.dev subdomain label, e.g. \"my-account\"">]>;
2380
+ /** VCS API root. Absent ⇒ `https://api.github.com`. Set it for GitHub Enterprise Server. */
2381
+ readonly apiBaseUrl: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
2382
+ /**
2383
+ * `owner/repo` carrying the preview workflow. Absent ⇒ THE BLOCK'S OWN REPO, resolved per
2384
+ * provision — which is the point of a built-in backend over a pasted manifest: one handler
2385
+ * serves every repository in the workspace instead of being pinned to one.
2386
+ */
2387
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>, undefined>;
2388
+ /** Worker name template; the URL is derived from it. Absent ⇒ `cat-factory-pr-{{pullNumber}}`. */
2389
+ readonly workerNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
2390
+ /** Deployment environment name template. Absent ⇒ `pr-{{pullNumber}}`. */
2391
+ readonly environmentNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
2392
+ /** Fallback TTL (ms) after which the env is swept + torn down. */
2393
+ readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
2394
+ }, undefined>;
2296
2395
  }, undefined>, v.ObjectSchema<{
2297
2396
  readonly engine: v.LiteralSchema<"remote-custom", undefined>;
2298
2397
  readonly manifest: v.ObjectSchema<{
@@ -2464,10 +2563,10 @@ export declare const upsertCustomManifestTypeSchema: v.ObjectSchema<{
2464
2563
  export type UpsertCustomManifestTypeInput = v.InferOutput<typeof upsertCustomManifestTypeSchema>;
2465
2564
  /** One registered infra handler, as exposed to clients (never secret VALUES). */
2466
2565
  export declare const environmentHandlerViewSchema: v.ObjectSchema<{
2467
- readonly provisionType: v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>;
2566
+ readonly provisionType: v.PicklistSchema<["kubernetes", "docker-compose", "cloudflare", "custom", "infraless"], undefined>;
2468
2567
  /** For `custom`: the manifest id this handler is keyed to; `null` otherwise. */
2469
2568
  readonly manifestId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
2470
- readonly engine: v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "remote-custom", "none"], undefined>;
2569
+ readonly engine: v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "cloudflare", "remote-custom", "none"], undefined>;
2471
2570
  readonly providerId: v.StringSchema<undefined>;
2472
2571
  readonly label: v.StringSchema<undefined>;
2473
2572
  readonly baseUrl: v.StringSchema<undefined>;
@@ -2807,6 +2906,32 @@ export declare const environmentHandlerViewSchema: v.ObjectSchema<{
2807
2906
  readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
2808
2907
  }, undefined>, undefined>, undefined>;
2809
2908
  }, undefined>;
2909
+ }, undefined>, v.ObjectSchema<{
2910
+ readonly engine: v.LiteralSchema<"cloudflare", undefined>;
2911
+ readonly cloudflare: v.ObjectSchema<{
2912
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
2913
+ /**
2914
+ * The account's `*.workers.dev` subdomain — the preview URL is
2915
+ * `https://<worker>.<subdomain>.workers.dev`. The platform can DERIVE that before anything
2916
+ * is built, which is what lets a tester be handed a URL without waiting on a deploy that
2917
+ * takes minutes.
2918
+ */
2919
+ readonly workersSubdomain: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 63, undefined>, v.RegexAction<string, "must be a bare workers.dev subdomain label, e.g. \"my-account\"">]>;
2920
+ /** VCS API root. Absent ⇒ `https://api.github.com`. Set it for GitHub Enterprise Server. */
2921
+ readonly apiBaseUrl: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
2922
+ /**
2923
+ * `owner/repo` carrying the preview workflow. Absent ⇒ THE BLOCK'S OWN REPO, resolved per
2924
+ * provision — which is the point of a built-in backend over a pasted manifest: one handler
2925
+ * serves every repository in the workspace instead of being pinned to one.
2926
+ */
2927
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>, undefined>;
2928
+ /** Worker name template; the URL is derived from it. Absent ⇒ `cat-factory-pr-{{pullNumber}}`. */
2929
+ readonly workerNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
2930
+ /** Deployment environment name template. Absent ⇒ `pr-{{pullNumber}}`. */
2931
+ readonly environmentNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
2932
+ /** Fallback TTL (ms) after which the env is swept + torn down. */
2933
+ readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
2934
+ }, undefined>;
2810
2935
  }, undefined>, v.ObjectSchema<{
2811
2936
  readonly engine: v.LiteralSchema<"remote-custom", undefined>;
2812
2937
  readonly manifest: v.ObjectSchema<{
@@ -2950,7 +3075,7 @@ export type EnvironmentHandlerView = v.InferOutput<typeof environmentHandlerView
2950
3075
  * the engine). Every secret key the chosen backend references must be supplied.
2951
3076
  */
2952
3077
  export declare const registerEnvironmentHandlerSchema: v.ObjectSchema<{
2953
- readonly provisionType: v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>;
3078
+ readonly provisionType: v.PicklistSchema<["kubernetes", "docker-compose", "cloudflare", "custom", "infraless"], undefined>;
2954
3079
  readonly manifestId: v.OptionalSchema<v.NullableSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, undefined>, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>]>, undefined>, undefined>;
2955
3080
  readonly config: v.VariantSchema<"engine", [v.ObjectSchema<{
2956
3081
  readonly engine: v.LiteralSchema<"local-docker", undefined>;
@@ -3275,6 +3400,32 @@ export declare const registerEnvironmentHandlerSchema: v.ObjectSchema<{
3275
3400
  readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
3276
3401
  }, undefined>, undefined>, undefined>;
3277
3402
  }, undefined>;
3403
+ }, undefined>, v.ObjectSchema<{
3404
+ readonly engine: v.LiteralSchema<"cloudflare", undefined>;
3405
+ readonly cloudflare: v.ObjectSchema<{
3406
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
3407
+ /**
3408
+ * The account's `*.workers.dev` subdomain — the preview URL is
3409
+ * `https://<worker>.<subdomain>.workers.dev`. The platform can DERIVE that before anything
3410
+ * is built, which is what lets a tester be handed a URL without waiting on a deploy that
3411
+ * takes minutes.
3412
+ */
3413
+ readonly workersSubdomain: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 63, undefined>, v.RegexAction<string, "must be a bare workers.dev subdomain label, e.g. \"my-account\"">]>;
3414
+ /** VCS API root. Absent ⇒ `https://api.github.com`. Set it for GitHub Enterprise Server. */
3415
+ readonly apiBaseUrl: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
3416
+ /**
3417
+ * `owner/repo` carrying the preview workflow. Absent ⇒ THE BLOCK'S OWN REPO, resolved per
3418
+ * provision — which is the point of a built-in backend over a pasted manifest: one handler
3419
+ * serves every repository in the workspace instead of being pinned to one.
3420
+ */
3421
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>, undefined>;
3422
+ /** Worker name template; the URL is derived from it. Absent ⇒ `cat-factory-pr-{{pullNumber}}`. */
3423
+ readonly workerNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
3424
+ /** Deployment environment name template. Absent ⇒ `pr-{{pullNumber}}`. */
3425
+ readonly environmentNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
3426
+ /** Fallback TTL (ms) after which the env is swept + torn down. */
3427
+ readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
3428
+ }, undefined>;
3278
3429
  }, undefined>, v.ObjectSchema<{
3279
3430
  readonly engine: v.LiteralSchema<"remote-custom", undefined>;
3280
3431
  readonly manifest: v.ObjectSchema<{
@@ -3743,6 +3894,32 @@ export declare const testEnvironmentHandlerSchema: v.ObjectSchema<{
3743
3894
  readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
3744
3895
  }, undefined>, undefined>, undefined>;
3745
3896
  }, undefined>;
3897
+ }, undefined>, v.ObjectSchema<{
3898
+ readonly engine: v.LiteralSchema<"cloudflare", undefined>;
3899
+ readonly cloudflare: v.ObjectSchema<{
3900
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
3901
+ /**
3902
+ * The account's `*.workers.dev` subdomain — the preview URL is
3903
+ * `https://<worker>.<subdomain>.workers.dev`. The platform can DERIVE that before anything
3904
+ * is built, which is what lets a tester be handed a URL without waiting on a deploy that
3905
+ * takes minutes.
3906
+ */
3907
+ readonly workersSubdomain: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 63, undefined>, v.RegexAction<string, "must be a bare workers.dev subdomain label, e.g. \"my-account\"">]>;
3908
+ /** VCS API root. Absent ⇒ `https://api.github.com`. Set it for GitHub Enterprise Server. */
3909
+ readonly apiBaseUrl: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
3910
+ /**
3911
+ * `owner/repo` carrying the preview workflow. Absent ⇒ THE BLOCK'S OWN REPO, resolved per
3912
+ * provision — which is the point of a built-in backend over a pasted manifest: one handler
3913
+ * serves every repository in the workspace instead of being pinned to one.
3914
+ */
3915
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>, undefined>;
3916
+ /** Worker name template; the URL is derived from it. Absent ⇒ `cat-factory-pr-{{pullNumber}}`. */
3917
+ readonly workerNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
3918
+ /** Deployment environment name template. Absent ⇒ `pr-{{pullNumber}}`. */
3919
+ readonly environmentNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
3920
+ /** Fallback TTL (ms) after which the env is swept + torn down. */
3921
+ readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
3922
+ }, undefined>;
3746
3923
  }, undefined>, v.ObjectSchema<{
3747
3924
  readonly engine: v.LiteralSchema<"remote-custom", undefined>;
3748
3925
  readonly manifest: v.ObjectSchema<{
@@ -4212,6 +4389,32 @@ export declare const upsertEnvironmentUserHandlerBodySchema: v.ObjectSchema<{
4212
4389
  readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
4213
4390
  }, undefined>, undefined>, undefined>;
4214
4391
  }, undefined>;
4392
+ }, undefined>, v.ObjectSchema<{
4393
+ readonly engine: v.LiteralSchema<"cloudflare", undefined>;
4394
+ readonly cloudflare: v.ObjectSchema<{
4395
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
4396
+ /**
4397
+ * The account's `*.workers.dev` subdomain — the preview URL is
4398
+ * `https://<worker>.<subdomain>.workers.dev`. The platform can DERIVE that before anything
4399
+ * is built, which is what lets a tester be handed a URL without waiting on a deploy that
4400
+ * takes minutes.
4401
+ */
4402
+ readonly workersSubdomain: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 63, undefined>, v.RegexAction<string, "must be a bare workers.dev subdomain label, e.g. \"my-account\"">]>;
4403
+ /** VCS API root. Absent ⇒ `https://api.github.com`. Set it for GitHub Enterprise Server. */
4404
+ readonly apiBaseUrl: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
4405
+ /**
4406
+ * `owner/repo` carrying the preview workflow. Absent ⇒ THE BLOCK'S OWN REPO, resolved per
4407
+ * provision — which is the point of a built-in backend over a pasted manifest: one handler
4408
+ * serves every repository in the workspace instead of being pinned to one.
4409
+ */
4410
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>, undefined>;
4411
+ /** Worker name template; the URL is derived from it. Absent ⇒ `cat-factory-pr-{{pullNumber}}`. */
4412
+ readonly workerNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
4413
+ /** Deployment environment name template. Absent ⇒ `pr-{{pullNumber}}`. */
4414
+ readonly environmentNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
4415
+ /** Fallback TTL (ms) after which the env is swept + torn down. */
4416
+ readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
4417
+ }, undefined>;
4215
4418
  }, undefined>, v.ObjectSchema<{
4216
4419
  readonly engine: v.LiteralSchema<"remote-custom", undefined>;
4217
4420
  readonly manifest: v.ObjectSchema<{
@@ -4353,10 +4556,10 @@ export type UpsertEnvironmentUserHandlerBody = v.InferOutput<typeof upsertEnviro
4353
4556
  /** The batched per-type handler bundle: every workspace handler + the custom-type catalog. */
4354
4557
  export declare const environmentHandlersBundleSchema: v.ObjectSchema<{
4355
4558
  readonly handlers: v.ArraySchema<v.ObjectSchema<{
4356
- readonly provisionType: v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>;
4559
+ readonly provisionType: v.PicklistSchema<["kubernetes", "docker-compose", "cloudflare", "custom", "infraless"], undefined>;
4357
4560
  /** For `custom`: the manifest id this handler is keyed to; `null` otherwise. */
4358
4561
  readonly manifestId: v.NullableSchema<v.StringSchema<undefined>, undefined>;
4359
- readonly engine: v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "remote-custom", "none"], undefined>;
4562
+ readonly engine: v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "cloudflare", "remote-custom", "none"], undefined>;
4360
4563
  readonly providerId: v.StringSchema<undefined>;
4361
4564
  readonly label: v.StringSchema<undefined>;
4362
4565
  readonly baseUrl: v.StringSchema<undefined>;
@@ -4696,6 +4899,32 @@ export declare const environmentHandlersBundleSchema: v.ObjectSchema<{
4696
4899
  readonly scope: v.OptionalSchema<v.PicklistSchema<["per-environment", "shared"], undefined>, undefined>;
4697
4900
  }, undefined>, undefined>, undefined>;
4698
4901
  }, undefined>;
4902
+ }, undefined>, v.ObjectSchema<{
4903
+ readonly engine: v.LiteralSchema<"cloudflare", undefined>;
4904
+ readonly cloudflare: v.ObjectSchema<{
4905
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
4906
+ /**
4907
+ * The account's `*.workers.dev` subdomain — the preview URL is
4908
+ * `https://<worker>.<subdomain>.workers.dev`. The platform can DERIVE that before anything
4909
+ * is built, which is what lets a tester be handed a URL without waiting on a deploy that
4910
+ * takes minutes.
4911
+ */
4912
+ readonly workersSubdomain: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 63, undefined>, v.RegexAction<string, "must be a bare workers.dev subdomain label, e.g. \"my-account\"">]>;
4913
+ /** VCS API root. Absent ⇒ `https://api.github.com`. Set it for GitHub Enterprise Server. */
4914
+ readonly apiBaseUrl: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
4915
+ /**
4916
+ * `owner/repo` carrying the preview workflow. Absent ⇒ THE BLOCK'S OWN REPO, resolved per
4917
+ * provision — which is the point of a built-in backend over a pasted manifest: one handler
4918
+ * serves every repository in the workspace instead of being pinned to one.
4919
+ */
4920
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>, undefined>;
4921
+ /** Worker name template; the URL is derived from it. Absent ⇒ `cat-factory-pr-{{pullNumber}}`. */
4922
+ readonly workerNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
4923
+ /** Deployment environment name template. Absent ⇒ `pr-{{pullNumber}}`. */
4924
+ readonly environmentNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
4925
+ /** Fallback TTL (ms) after which the env is swept + torn down. */
4926
+ readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
4927
+ }, undefined>;
4699
4928
  }, undefined>, v.ObjectSchema<{
4700
4929
  readonly engine: v.LiteralSchema<"remote-custom", undefined>;
4701
4930
  readonly manifest: v.ObjectSchema<{
@@ -4899,13 +5128,13 @@ export declare const environmentHandleSchema: v.ObjectSchema<{
4899
5128
  * (`kubernetes` | `docker-compose` | `custom` | `infraless`). Recorded at provision
4900
5129
  * time so run details can show exactly what was provisioned. Null for legacy rows.
4901
5130
  */
4902
- readonly provisionType: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>, undefined>, undefined>;
5131
+ readonly provisionType: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["kubernetes", "docker-compose", "cloudflare", "custom", "infraless"], undefined>, undefined>, undefined>;
4903
5132
  /**
4904
5133
  * The resolved engine that handled the provisioning (`local-docker` | `local-k3s` |
4905
5134
  * `remote-kubernetes` | `remote-custom` | `none`). Surfaced in run details alongside
4906
5135
  * the provider label. Null for legacy rows.
4907
5136
  */
4908
- readonly engine: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "remote-custom", "none"], undefined>, undefined>, undefined>;
5137
+ readonly engine: v.OptionalSchema<v.NullableSchema<v.PicklistSchema<["local-docker", "local-k3s", "remote-kubernetes", "cloudflare", "remote-custom", "none"], undefined>, undefined>, undefined>;
4909
5138
  }, undefined>;
4910
5139
  export type EnvironmentHandle = v.InferOutput<typeof environmentHandleSchema>;
4911
5140
  /** A workspace's provider binding, as exposed to clients (never secret values). */
@@ -5413,6 +5642,32 @@ export declare const environmentConnectionSchema: v.ObjectSchema<{
5413
5642
  }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
5414
5643
  }, undefined>], undefined>, undefined>, undefined>;
5415
5644
  }, undefined>;
5645
+ }, undefined>, v.ObjectSchema<{
5646
+ readonly kind: v.LiteralSchema<"cloudflare", undefined>;
5647
+ readonly cloudflare: v.ObjectSchema<{
5648
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
5649
+ /**
5650
+ * The account's `*.workers.dev` subdomain — the preview URL is
5651
+ * `https://<worker>.<subdomain>.workers.dev`. The platform can DERIVE that before anything
5652
+ * is built, which is what lets a tester be handed a URL without waiting on a deploy that
5653
+ * takes minutes.
5654
+ */
5655
+ readonly workersSubdomain: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 63, undefined>, v.RegexAction<string, "must be a bare workers.dev subdomain label, e.g. \"my-account\"">]>;
5656
+ /** VCS API root. Absent ⇒ `https://api.github.com`. Set it for GitHub Enterprise Server. */
5657
+ readonly apiBaseUrl: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
5658
+ /**
5659
+ * `owner/repo` carrying the preview workflow. Absent ⇒ THE BLOCK'S OWN REPO, resolved per
5660
+ * provision — which is the point of a built-in backend over a pasted manifest: one handler
5661
+ * serves every repository in the workspace instead of being pinned to one.
5662
+ */
5663
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>, undefined>;
5664
+ /** Worker name template; the URL is derived from it. Absent ⇒ `cat-factory-pr-{{pullNumber}}`. */
5665
+ readonly workerNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
5666
+ /** Deployment environment name template. Absent ⇒ `pr-{{pullNumber}}`. */
5667
+ readonly environmentNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
5668
+ /** Fallback TTL (ms) after which the env is swept + torn down. */
5669
+ readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
5670
+ }, undefined>;
5416
5671
  }, undefined>, v.ObjectSchema<{
5417
5672
  readonly kind: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>, v.RegexAction<string, "must be a lower-kebab slug">, v.CheckAction<string, "reserved backend kind">]>;
5418
5673
  readonly manifest: v.ObjectSchema<{
@@ -6046,6 +6301,32 @@ export declare const registerEnvironmentProviderSchema: v.ObjectSchema<{
6046
6301
  }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
6047
6302
  }, undefined>], undefined>, undefined>, undefined>;
6048
6303
  }, undefined>;
6304
+ }, undefined>, v.ObjectSchema<{
6305
+ readonly kind: v.LiteralSchema<"cloudflare", undefined>;
6306
+ readonly cloudflare: v.ObjectSchema<{
6307
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
6308
+ /**
6309
+ * The account's `*.workers.dev` subdomain — the preview URL is
6310
+ * `https://<worker>.<subdomain>.workers.dev`. The platform can DERIVE that before anything
6311
+ * is built, which is what lets a tester be handed a URL without waiting on a deploy that
6312
+ * takes minutes.
6313
+ */
6314
+ readonly workersSubdomain: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 63, undefined>, v.RegexAction<string, "must be a bare workers.dev subdomain label, e.g. \"my-account\"">]>;
6315
+ /** VCS API root. Absent ⇒ `https://api.github.com`. Set it for GitHub Enterprise Server. */
6316
+ readonly apiBaseUrl: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
6317
+ /**
6318
+ * `owner/repo` carrying the preview workflow. Absent ⇒ THE BLOCK'S OWN REPO, resolved per
6319
+ * provision — which is the point of a built-in backend over a pasted manifest: one handler
6320
+ * serves every repository in the workspace instead of being pinned to one.
6321
+ */
6322
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>, undefined>;
6323
+ /** Worker name template; the URL is derived from it. Absent ⇒ `cat-factory-pr-{{pullNumber}}`. */
6324
+ readonly workerNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
6325
+ /** Deployment environment name template. Absent ⇒ `pr-{{pullNumber}}`. */
6326
+ readonly environmentNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
6327
+ /** Fallback TTL (ms) after which the env is swept + torn down. */
6328
+ readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
6329
+ }, undefined>;
6049
6330
  }, undefined>, v.ObjectSchema<{
6050
6331
  readonly kind: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>, v.RegexAction<string, "must be a lower-kebab slug">, v.CheckAction<string, "reserved backend kind">]>;
6051
6332
  readonly manifest: v.ObjectSchema<{
@@ -6681,6 +6962,32 @@ export declare const testEnvironmentConnectionSchema: v.ObjectSchema<{
6681
6962
  }, "a secret entry must set exactly one of secretRef or valueTemplate.">]>, undefined>;
6682
6963
  }, undefined>], undefined>, undefined>, undefined>;
6683
6964
  }, undefined>;
6965
+ }, undefined>, v.ObjectSchema<{
6966
+ readonly kind: v.LiteralSchema<"cloudflare", undefined>;
6967
+ readonly cloudflare: v.ObjectSchema<{
6968
+ readonly label: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>]>;
6969
+ /**
6970
+ * The account's `*.workers.dev` subdomain — the preview URL is
6971
+ * `https://<worker>.<subdomain>.workers.dev`. The platform can DERIVE that before anything
6972
+ * is built, which is what lets a tester be handed a URL without waiting on a deploy that
6973
+ * takes minutes.
6974
+ */
6975
+ readonly workersSubdomain: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 63, undefined>, v.RegexAction<string, "must be a bare workers.dev subdomain label, e.g. \"my-account\"">]>;
6976
+ /** VCS API root. Absent ⇒ `https://api.github.com`. Set it for GitHub Enterprise Server. */
6977
+ readonly apiBaseUrl: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 2000, undefined>]>, undefined>;
6978
+ /**
6979
+ * `owner/repo` carrying the preview workflow. Absent ⇒ THE BLOCK'S OWN REPO, resolved per
6980
+ * provision — which is the point of a built-in backend over a pasted manifest: one handler
6981
+ * serves every repository in the workspace instead of being pinned to one.
6982
+ */
6983
+ readonly repo: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.RegexAction<string, "must be \"owner/repo\"">]>, undefined>;
6984
+ /** Worker name template; the URL is derived from it. Absent ⇒ `cat-factory-pr-{{pullNumber}}`. */
6985
+ readonly workerNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
6986
+ /** Deployment environment name template. Absent ⇒ `pr-{{pullNumber}}`. */
6987
+ readonly environmentNameTemplate: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 120, undefined>, v.RegexAction<string, "may contain only lowercase letters, digits, hyphens and {{placeholders}}">]>, undefined>;
6988
+ /** Fallback TTL (ms) after which the env is swept + torn down. */
6989
+ readonly defaultTtlMs: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.MinValueAction<number, 60000, undefined>]>, undefined>;
6990
+ }, undefined>;
6684
6991
  }, undefined>, v.ObjectSchema<{
6685
6992
  readonly kind: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.TrimAction, v.MinLengthAction<string, 1, undefined>, v.MaxLengthAction<string, 64, undefined>, v.RegexAction<string, "must be a lower-kebab slug">, v.CheckAction<string, "reserved backend kind">]>;
6686
6993
  readonly manifest: v.ObjectSchema<{
@@ -7067,7 +7374,7 @@ export declare const provisioningRecommendationSchema: v.ObjectSchema<{
7067
7374
  readonly detected: v.BooleanSchema<undefined>;
7068
7375
  /** The prefilled service provisioning the user confirms/edits (the "what + where"). */
7069
7376
  readonly provisioning: v.ObjectSchema<{
7070
- readonly type: v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>;
7377
+ readonly type: v.PicklistSchema<["kubernetes", "docker-compose", "cloudflare", "custom", "infraless"], undefined>;
7071
7378
  /** `kubernetes`: where the per-PR manifests live (colocated in the PR repo, or a separate repo). */
7072
7379
  readonly manifestSource: v.OptionalSchema<v.VariantSchema<"type", [v.ObjectSchema<{
7073
7380
  readonly type: v.LiteralSchema<"colocated", undefined>;
@@ -7496,7 +7803,7 @@ export declare const detectServiceProvisioningSchema: v.ObjectSchema<{
7496
7803
  * manifests are also present. Only `kubernetes`/`docker-compose`/`custom` change the search
7497
7804
  * order (the others have nothing to auto-detect); absent ⇒ prefer `kubernetes` (richer).
7498
7805
  */
7499
- readonly prefer: v.OptionalSchema<v.PicklistSchema<["kubernetes", "docker-compose", "custom", "infraless"], undefined>, undefined>;
7806
+ readonly prefer: v.OptionalSchema<v.PicklistSchema<["kubernetes", "docker-compose", "cloudflare", "custom", "infraless"], undefined>, undefined>;
7500
7807
  /**
7501
7808
  * `custom` only: the selected custom-manifest-type id. When PRESENT, that type's `detect()`
7502
7809
  * hook runs (or its `defaultManifestPath` seeds the path search when it has no hook — see