diff --git a/.changeset/update-openapi-880ff24a8d48.md b/.changeset/update-openapi-880ff24a8d48.md new file mode 100644 index 000000000..ad8591428 --- /dev/null +++ b/.changeset/update-openapi-880ff24a8d48.md @@ -0,0 +1,6 @@ +--- +"cf": minor +--- + +Update the generated command surface for Forge OpenAPI release +`880ff24a8d487f05651f6dc24f482b9845127c7f`. diff --git a/packages/cli/generate.ts b/packages/cli/generate.ts index c9f913b63..6c132e773 100644 --- a/packages/cli/generate.ts +++ b/packages/cli/generate.ts @@ -17,7 +17,7 @@ import type { ForgeOpenApiDocument } from "./generator/openapi.js"; const bundle = process.env.FORGE_OPENAPI_BUNDLE; // Bump this SHA to generate the commands from a new release. -const FORGE_OPENAPI_VERSION = "59bd82aa6c349b9097e34621bd15c4ddf46d6dd1"; +const FORGE_OPENAPI_VERSION = "880ff24a8d487f05651f6dc24f482b9845127c7f"; const FORGE_OPENAPI_RELEASE = `openapi@${FORGE_OPENAPI_VERSION}`; const FORGE_OPENAPI_ASSET = "openapi.forge.json"; const FORGE_OPENAPI_ASSET_URL = `https://github.com/cloudflare/forge/releases/download/${FORGE_OPENAPI_RELEASE}/${FORGE_OPENAPI_ASSET}`; diff --git a/packages/cli/src/commands/_generated/_meta/commands.json b/packages/cli/src/commands/_generated/_meta/commands.json index a3e2b7635..ba7505737 100644 --- a/packages/cli/src/commands/_generated/_meta/commands.json +++ b/packages/cli/src/commands/_generated/_meta/commands.json @@ -8586,7 +8586,7 @@ "name": "store-id", "type": "string", "required": false, - "description": "The store_id field" + "description": "Secrets Store used by this gateway. Omit on update to keep the current store. Cannot be cleared while stored keys or secret references depend on it." }, { "name": "stripe-authorization", @@ -9362,7 +9362,7 @@ "name": "store-id", "type": "string", "required": false, - "description": "The store_id field" + "description": "Secrets Store used by this gateway. Omit on update to keep the current store. Cannot be cleared while stored keys or secret references depend on it." }, { "name": "stripe-authorization", @@ -43523,6 +43523,198 @@ "operationId": "dns.dnssec.list.zsks", "hideCommand": false }, + { + "command": "cf dns domainconnect get-domain-settings", + "name": "get-domain-settings", + "fullPath": ["dns", "domainconnect", "get-domain-settings"], + "description": "Checks whether a domain is in Quicksilver and returns its settings.", + "summary": "Provide settings if domain is served by Cloudflare", + "usage": "cf dns domainconnect get-domain-settings ", + "arguments": [ + { + "name": "domain", + "position": 0, + "type": "string", + "required": true, + "description": "Domain name." + } + ], + "options": [ + { + "name": "dry-run", + "type": "boolean", + "required": false, + "description": "Validate and show what would happen without executing", + "default": false + } + ], + "category": "action", + "hasRequestBody": false, + "httpMethod": "GET", + "apiPath": "/v2/{domain}/settings", + "operationId": "dns.domainconnect.get-domain-settings", + "hideCommand": false + }, + { + "command": "cf dns domainconnect get-heartbeat", + "name": "get-heartbeat", + "fullPath": ["dns", "domainconnect", "get-heartbeat"], + "description": "Used by Kubernetes readiness and liveness probes, and CI builder by executing test/staging.sh.", + "summary": "Heartbeat response", + "usage": "cf dns domainconnect get-heartbeat", + "arguments": [], + "options": [ + { + "name": "dry-run", + "type": "boolean", + "required": false, + "description": "Validate and show what would happen without executing", + "default": false + } + ], + "category": "action", + "hasRequestBody": false, + "httpMethod": "GET", + "apiPath": "/_heartbeat", + "operationId": "dns.domainconnect.get-heartbeat", + "hideCommand": false + }, + { + "command": "cf dns domainconnect get-provider-configuration", + "name": "get-provider-configuration", + "fullPath": ["dns", "domainconnect", "get-provider-configuration"], + "description": "Provides Stratus with extra information about domain connect provider(s).", + "summary": "Serve a provider configuration", + "usage": "cf dns domainconnect get-provider-configuration [options]", + "arguments": [ + { + "name": "account", + "position": 0, + "type": "string", + "required": true, + "description": "Account ID." + } + ], + "options": [ + { + "name": "provider", + "type": "string", + "required": true, + "description": "Provider ID." + }, + { + "name": "service", + "type": "string", + "required": true, + "description": "Service ID." + }, + { + "name": "dry-run", + "type": "boolean", + "required": false, + "description": "Validate and show what would happen without executing", + "default": false + } + ], + "category": "action", + "hasRequestBody": false, + "httpMethod": "GET", + "apiPath": "/v2/provconf/{provider}/{service}/{account}", + "operationId": "dns.domainconnect.get-provider-configuration", + "hideCommand": false + }, + { + "command": "cf dns domainconnect get-provider-template", + "name": "get-provider-template", + "fullPath": ["dns", "domainconnect", "get-provider-template"], + "description": "Providers are the external parties that are configured to interact with Cloudflare.", + "summary": "Serve a provider template", + "usage": "cf dns domainconnect get-provider-template [options]", + "arguments": [ + { + "name": "service", + "position": 0, + "type": "string", + "required": true, + "description": "Service name." + } + ], + "options": [ + { + "name": "provider", + "type": "string", + "required": true, + "description": "Provider name." + }, + { + "name": "dump", + "type": "string", + "required": false, + "description": "Dump raw template." + }, + { + "name": "dry-run", + "type": "boolean", + "required": false, + "description": "Validate and show what would happen without executing", + "default": false + } + ], + "category": "action", + "hasRequestBody": false, + "httpMethod": "GET", + "apiPath": "/v2/domainTemplates/providers/{provider}/services/{service}", + "operationId": "dns.domainconnect.get-provider-template", + "hideCommand": false + }, + { + "command": "cf dns domainconnect post-verify", + "name": "post-verify", + "fullPath": ["dns", "domainconnect", "post-verify"], + "description": "Validates a Domain Connect signed request using DNS TXT public keys.", + "summary": "Request domain connect validation", + "usage": "cf dns domainconnect post-verify [options]", + "arguments": [], + "options": [ + { + "name": "domain", + "type": "string", + "required": false, + "description": "The domain field" + }, + { + "name": "hash", + "type": "string", + "required": false, + "description": "The hash field" + }, + { + "name": "sig", + "type": "string", + "required": false, + "description": "The sig field" + }, + { + "name": "dry-run", + "type": "boolean", + "required": false, + "description": "Validate and show what would happen without executing", + "default": false + }, + { + "name": "body", + "type": "string", + "required": false, + "description": "Raw JSON request body (bypasses individual flags)" + } + ], + "category": "action", + "hasRequestBody": true, + "httpMethod": "POST", + "apiPath": "/v1/verify", + "operationId": "dns.domainconnect.post-verify", + "hideCommand": false + }, { "command": "cf dns records batch", "name": "batch", @@ -66323,7 +66515,7 @@ "httpMethod": "POST", "apiPath": "/accounts/{account_id}/mnm/config", "operationId": "magic-network-monitoring.configs.create", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring configs delete", @@ -66347,7 +66539,7 @@ "httpMethod": "DELETE", "apiPath": "/accounts/{account_id}/mnm/config", "operationId": "magic-network-monitoring.configs.delete", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring configs edit", @@ -66401,7 +66593,7 @@ "httpMethod": "PATCH", "apiPath": "/accounts/{account_id}/mnm/config", "operationId": "magic-network-monitoring.configs.edit", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring configs full get", @@ -66425,7 +66617,7 @@ "httpMethod": "GET", "apiPath": "/accounts/{account_id}/mnm/config/full", "operationId": "magic-network-monitoring.configs.full.get", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring configs get", @@ -66449,7 +66641,7 @@ "httpMethod": "GET", "apiPath": "/accounts/{account_id}/mnm/config", "operationId": "magic-network-monitoring.configs.get", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring configs update", @@ -66503,7 +66695,7 @@ "httpMethod": "PUT", "apiPath": "/accounts/{account_id}/mnm/config", "operationId": "magic-network-monitoring.configs.update", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring rules advertisements edit", @@ -66540,7 +66732,7 @@ "httpMethod": "PATCH", "apiPath": "/accounts/{account_id}/mnm/rules/{rule_id}/advertisement", "operationId": "magic-network-monitoring.rules.advertisements.edit", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring rules bulk create", @@ -66570,7 +66762,7 @@ "httpMethod": "POST", "apiPath": "/accounts/{account_id}/mnm/rules/bulk", "operationId": "magic-network-monitoring.rules.bulk.create", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring rules bulk update", @@ -66600,7 +66792,7 @@ "httpMethod": "PUT", "apiPath": "/accounts/{account_id}/mnm/rules/bulk", "operationId": "magic-network-monitoring.rules.bulk.update", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring rules create", @@ -66696,7 +66888,7 @@ "httpMethod": "POST", "apiPath": "/accounts/{account_id}/mnm/rules", "operationId": "magic-network-monitoring.rules.create", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring rules delete", @@ -66728,7 +66920,7 @@ "httpMethod": "DELETE", "apiPath": "/accounts/{account_id}/mnm/rules/{rule_id}", "operationId": "magic-network-monitoring.rules.delete", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring rules edit", @@ -66831,7 +67023,7 @@ "httpMethod": "PATCH", "apiPath": "/accounts/{account_id}/mnm/rules/{rule_id}", "operationId": "magic-network-monitoring.rules.edit", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring rules get", @@ -66863,7 +67055,7 @@ "httpMethod": "GET", "apiPath": "/accounts/{account_id}/mnm/rules/{rule_id}", "operationId": "magic-network-monitoring.rules.get", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring rules list", @@ -66887,7 +67079,7 @@ "httpMethod": "GET", "apiPath": "/accounts/{account_id}/mnm/rules", "operationId": "magic-network-monitoring.rules.list", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring rules update", @@ -66982,7 +67174,7 @@ "httpMethod": "PUT", "apiPath": "/accounts/{account_id}/mnm/rules", "operationId": "magic-network-monitoring.rules.update", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-network-monitoring vpc-flows tokens create", @@ -67006,7 +67198,7 @@ "httpMethod": "POST", "apiPath": "/accounts/{account_id}/mnm/vpc-flows/token", "operationId": "magic-network-monitoring.vpc-flows.tokens.create", - "hideCommand": false + "hideCommand": true }, { "command": "cf magic-transit advanced-dns-protection configs dns protection rules bulk-delete", @@ -69716,7 +69908,7 @@ "name": "bgp-extra-prefixes", "type": "string", "required": false, - "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table." + "description": "IPv4 prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic\nrouting table. Each entry must be a network address in CIDR notation with no host bits set (for example\n`192.0.2.0/24`, not `192.0.2.1/24`) and must not repeat another entry.\n" }, { "name": "bgp-import-filter-id", @@ -70230,7 +70422,7 @@ "name": "bgp-extra-prefixes", "type": "string", "required": false, - "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table." + "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.\nEach entry must be a network address in CIDR notation with no host bits set (for example `192.0.2.0/24`, not\n`192.0.2.1/24`) and must not repeat another entry. IPv6 prefixes are accepted only when the tunnel has an\n`interface_address6`.\n" }, { "name": "bgp-import-filter-id", @@ -70659,7 +70851,7 @@ "name": "bgp-extra-prefixes", "type": "string", "required": false, - "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table." + "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.\nEach entry must be a network address in CIDR notation with no host bits set (for example `192.0.2.0/24`, not\n`192.0.2.1/24`) and must not repeat another entry. IPv6 prefixes are accepted only when the tunnel has an\n`interface_address6`.\n" }, { "name": "bgp-import-filter-id", @@ -71007,7 +71199,7 @@ "name": "bgp-extra-prefixes", "type": "string", "required": false, - "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table." + "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.\nEach entry must be a network address in CIDR notation with no host bits set (for example `192.0.2.0/24`, not\n`192.0.2.1/24`) and must not repeat another entry. IPv6 prefixes are accepted only when the tunnel has an\n`interface_address6`.\n" }, { "name": "bgp-import-filter-id", @@ -74261,7 +74453,7 @@ "repositories", "create" ], - "description": "Creates an upload repository or reserves an asynchronous deployed Worker import by name. Worker imports require Idempotency-Key.", + "description": "Creates an upload repository or reserves an asynchronous deployed Worker import by name. Worker imports require Idempotency-Key. Push upload source to `main` or specify the `branch` to scan in the scan request.", "summary": "Create repository", "usage": "cf managed-defense vulnerability-discovery repositories create [options]", "arguments": [], @@ -74305,6 +74497,43 @@ "operationId": "managed-defense.vulnerability-discovery.repositories.create", "hideCommand": false }, + { + "command": "cf managed-defense vulnerability-discovery repositories create-token", + "name": "create-token", + "fullPath": [ + "managed-defense", + "vulnerability-discovery", + "repositories", + "create-token" + ], + "description": "Creates a one-hour write token for an existing upload repository. Worker-imported repositories are system-managed and cannot receive upload tokens.", + "summary": "Create upload token", + "usage": "cf managed-defense vulnerability-discovery repositories create-token ", + "arguments": [ + { + "name": "repo-id", + "position": 0, + "type": "string", + "required": true, + "description": "Repo ID" + } + ], + "options": [ + { + "name": "dry-run", + "type": "boolean", + "required": false, + "description": "Validate and show what would happen without executing", + "default": false + } + ], + "category": "action", + "hasRequestBody": false, + "httpMethod": "POST", + "apiPath": "/accounts/{account_id}/managed-defense/vulnerability-discovery/repos/{repo_id}/token", + "operationId": "managed-defense.vulnerability-discovery.repositories.create-token", + "hideCommand": false + }, { "command": "cf managed-defense vulnerability-discovery repositories get", "name": "get", @@ -74404,7 +74633,7 @@ "scans", "create" ], - "description": "Submits repository intent for operator review. This endpoint does not immediately start execution. Worker-imported repositories must be ready; explicit `repo_hosts` must be authorized before the request is persisted.", + "description": "Submits repository intent for operator review. This endpoint does not immediately start execution. Worker-imported repositories must be ready; explicit repository host scopes must be authorized and explicit branch selections must exist before the request is persisted.", "summary": "Create scan", "usage": "cf managed-defense vulnerability-discovery scans create [options]", "arguments": [], @@ -74415,17 +74644,11 @@ "required": false, "description": "Optional. Supply this header to safely retry a request. Required when `worker_script_name` is supplied." }, - { - "name": "repo-hosts", - "type": "string", - "required": false, - "description": "Explicit hostname scopes. Every hostname must be authorized for its repository before review admission; rejected scopes return 422 and do not persist a scan request. Provide as a JSON object or @path/to/file.json." - }, { "name": "repos", "type": "string", "required": true, - "description": "The repos field" + "description": "Repository names must be unique within a request. Provide as a JSON array of objects or @path/to/file.json." }, { "name": "telemetry-window-end", @@ -123955,6 +124178,7 @@ "account", "account_ruleset", "ai_gateway", + "ai_search_instance", "alerting_policy", "alerting_webhook", "cloudflared_tunnel", @@ -124037,6 +124261,7 @@ "account", "account_ruleset", "ai_gateway", + "ai_search_instance", "alerting_policy", "alerting_webhook", "cloudflared_tunnel", @@ -124121,6 +124346,7 @@ "account", "account_ruleset", "ai_gateway", + "ai_search_instance", "alerting_policy", "alerting_webhook", "cloudflared_tunnel", @@ -124330,6 +124556,7 @@ "account", "account_ruleset", "ai_gateway", + "ai_search_instance", "alerting_policy", "alerting_webhook", "api_gateway_operation", @@ -154721,10 +154948,10 @@ "fullPath": ["zero-trust", "dlp", "datasets", "upload"], "description": "This is used for single-column EDMv1 and Custom Word Lists. The EDM format can only be created in the Cloudflare dashboard. For other clients, this operation can only be used for non-secret Custom Word Lists. The body must be a UTF-8 encoded, newline (NL or CRNL) separated list of words to be matched.", "summary": "Upload a new version of a dataset", - "usage": "cf zero-trust dlp datasets upload [options]", + "usage": "cf zero-trust dlp datasets upload [options]", "arguments": [ { - "name": "version", + "name": "dataset-version", "position": 0, "type": "string", "required": true, @@ -155513,44 +155740,6 @@ } ], "options": [ - { - "name": "description", - "type": "string", - "required": false, - "description": "The description field" - }, - { - "name": "name", - "type": "string", - "required": false, - "description": "The name field" - }, - { - "name": "pattern-regex", - "type": "string", - "required": false, - "description": "The pattern.regex field" - }, - { - "name": "pattern-validation", - "type": "string", - "required": false, - "description": "The pattern.validation field", - "enum": ["luhn"] - }, - { - "name": "validator-ids", - "type": "string", - "required": false, - "description": "Validators this entry should reference, by id, at most 10. Replaces the current set.\n\nOptional, unlike the rest of this body: omitting it leaves the current attachments alone, so a\nclient that predates validators cannot detach them by accident. Send `[]` to detach." - }, - { - "name": "type", - "type": "string", - "required": true, - "description": "The type field", - "enum": ["custom", "predefined", "integration"] - }, { "name": "enabled", "type": "boolean", @@ -164430,6 +164619,7 @@ "dns": "dns", "dns dnssec": "Operations for dnssec", "dns dnssec list": "Operations for dnssec.list", + "dns domainconnect": "Operations for domainconnect", "dns records": "Operations for records", "dns settings": "Operations for settings", "dns settings account": "Operations for settings.account", diff --git a/packages/cli/src/commands/_generated/_meta/schemas.json b/packages/cli/src/commands/_generated/_meta/schemas.json index 9716fb039..6d93e1765 100644 --- a/packages/cli/src/commands/_generated/_meta/schemas.json +++ b/packages/cli/src/commands/_generated/_meta/schemas.json @@ -5985,7 +5985,7 @@ "name": "store-id", "type": "string", "required": false, - "description": "The store_id field" + "description": "Secrets Store used by this gateway. Omit on update to keep the current store. Cannot be cleared while stored keys or secret references depend on it." }, { "name": "stripe-authorization", @@ -6590,7 +6590,7 @@ "name": "store-id", "type": "string", "required": false, - "description": "The store_id field" + "description": "Secrets Store used by this gateway. Omit on update to keep the current store. Cannot be cleared while stored keys or secret references depend on it." }, { "name": "stripe-authorization", @@ -30669,6 +30669,109 @@ "hasRequestBody": false, "requestBodyFields": [] }, + "dns domainconnect get-domain-settings": { + "operationId": "dns.domainconnect.get-domain-settings", + "httpMethod": "GET", + "path": "/v2/{domain}/settings", + "pathParams": [ + { + "name": "domain", + "type": "string", + "required": true + } + ], + "queryParams": [], + "hasRequestBody": false, + "requestBodyFields": [] + }, + "dns domainconnect get-heartbeat": { + "operationId": "dns.domainconnect.get-heartbeat", + "httpMethod": "GET", + "path": "/_heartbeat", + "pathParams": [], + "queryParams": [], + "hasRequestBody": false, + "requestBodyFields": [] + }, + "dns domainconnect get-provider-configuration": { + "operationId": "dns.domainconnect.get-provider-configuration", + "httpMethod": "GET", + "path": "/v2/provconf/{provider}/{service}/{account}", + "pathParams": [ + { + "name": "provider", + "type": "string", + "required": true + }, + { + "name": "service", + "type": "string", + "required": true + }, + { + "name": "account", + "type": "string", + "required": true + } + ], + "queryParams": [], + "hasRequestBody": false, + "requestBodyFields": [] + }, + "dns domainconnect get-provider-template": { + "operationId": "dns.domainconnect.get-provider-template", + "httpMethod": "GET", + "path": "/v2/domainTemplates/providers/{provider}/services/{service}", + "pathParams": [ + { + "name": "provider", + "type": "string", + "required": true + }, + { + "name": "service", + "type": "string", + "required": true + } + ], + "queryParams": [ + { + "name": "dump", + "type": "string", + "required": false + } + ], + "hasRequestBody": false, + "requestBodyFields": [] + }, + "dns domainconnect post-verify": { + "operationId": "dns.domainconnect.post-verify", + "httpMethod": "POST", + "path": "/v1/verify", + "pathParams": [], + "queryParams": [], + "hasRequestBody": true, + "requestBodyFields": [ + { + "name": "domain", + "type": "string", + "required": false, + "description": "The domain field" + }, + { + "name": "hash", + "type": "string", + "required": false, + "description": "The hash field" + }, + { + "name": "sig", + "type": "string", + "required": false, + "description": "The sig field" + } + ] + }, "dns records batch": { "operationId": "dns.records.batch", "httpMethod": "POST", @@ -48974,7 +49077,7 @@ "name": "bgp-extra-prefixes", "type": "string", "required": false, - "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table." + "description": "IPv4 prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic\nrouting table. Each entry must be a network address in CIDR notation with no host bits set (for example\n`192.0.2.0/24`, not `192.0.2.1/24`) and must not repeat another entry.\n" }, { "name": "bgp-import-filter-id", @@ -49324,7 +49427,7 @@ "name": "bgp-extra-prefixes", "type": "string", "required": false, - "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table." + "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.\nEach entry must be a network address in CIDR notation with no host bits set (for example `192.0.2.0/24`, not\n`192.0.2.1/24`) and must not repeat another entry. IPv6 prefixes are accepted only when the tunnel has an\n`interface_address6`.\n" }, { "name": "bgp-import-filter-id", @@ -49629,7 +49732,7 @@ "name": "bgp-extra-prefixes", "type": "string", "required": false, - "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table." + "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.\nEach entry must be a network address in CIDR notation with no host bits set (for example `192.0.2.0/24`, not\n`192.0.2.1/24`) and must not repeat another entry. IPv6 prefixes are accepted only when the tunnel has an\n`interface_address6`.\n" }, { "name": "bgp-import-filter-id", @@ -49873,7 +49976,7 @@ "name": "bgp-extra-prefixes", "type": "string", "required": false, - "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table." + "description": "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.\nEach entry must be a network address in CIDR notation with no host bits set (for example `192.0.2.0/24`, not\n`192.0.2.1/24`) and must not repeat another entry. IPv6 prefixes are accepted only when the tunnel has an\n`interface_address6`.\n" }, { "name": "bgp-import-filter-id", @@ -52348,6 +52451,26 @@ } ] }, + "managed-defense vulnerability-discovery repositories create-token": { + "operationId": "managed-defense.vulnerability-discovery.repositories.create-token", + "httpMethod": "POST", + "path": "/accounts/{account_id}/managed-defense/vulnerability-discovery/repos/{repo_id}/token", + "pathParams": [ + { + "name": "account_id", + "type": "string", + "required": true + }, + { + "name": "repo_id", + "type": "string", + "required": true + } + ], + "queryParams": [], + "hasRequestBody": false, + "requestBodyFields": [] + }, "managed-defense vulnerability-discovery repositories get": { "operationId": "managed-defense.vulnerability-discovery.repositories.get", "httpMethod": "GET", @@ -52419,17 +52542,11 @@ "queryParams": [], "hasRequestBody": true, "requestBodyFields": [ - { - "name": "repo-hosts", - "type": "string", - "required": false, - "description": "Explicit hostname scopes. Every hostname must be authorized for its repository before review admission; rejected scopes return 422 and do not persist a scan request. Provide as a JSON object or @path/to/file.json." - }, { "name": "repos", "type": "string", "required": true, - "description": "The repos field" + "description": "Repository names must be unique within a request. Provide as a JSON array of objects or @path/to/file.json." }, { "name": "telemetry-window-end", @@ -108712,42 +108829,6 @@ "queryParams": [], "hasRequestBody": true, "requestBodyFields": [ - { - "name": "description", - "type": "string", - "required": false, - "description": "The description field" - }, - { - "name": "name", - "type": "string", - "required": false, - "description": "The name field" - }, - { - "name": "pattern-regex", - "type": "string", - "required": false, - "description": "The pattern.regex field" - }, - { - "name": "pattern-validation", - "type": "string", - "required": false, - "description": "The pattern.validation field" - }, - { - "name": "validator-ids", - "type": "string", - "required": false, - "description": "Validators this entry should reference, by id, at most 10. Replaces the current set.\n\nOptional, unlike the rest of this body: omitting it leaves the current attachments alone, so a\nclient that predates validators cannot detach them by accident. Send `[]` to detach." - }, - { - "name": "type", - "type": "string", - "required": true, - "description": "The type field" - }, { "name": "enabled", "type": "boolean", diff --git a/packages/cli/src/commands/_generated/_operations/dns/domainconnect/get-domain-settings.ts b/packages/cli/src/commands/_generated/_operations/dns/domainconnect/get-domain-settings.ts new file mode 100644 index 000000000..b4becf12f --- /dev/null +++ b/packages/cli/src/commands/_generated/_operations/dns/domainconnect/get-domain-settings.ts @@ -0,0 +1,12 @@ +/** @generated from dns.domainconnect.get-domain-settings */ +import { path } from "#api"; + +export default { + method: "GET", + path: (request: Record) => + path`/v2/${request.domain}/settings`, + errors: { + 404: "NotFoundError", + 500: "InternalServerError", + }, +} as const; diff --git a/packages/cli/src/commands/_generated/_operations/dns/domainconnect/get-heartbeat.ts b/packages/cli/src/commands/_generated/_operations/dns/domainconnect/get-heartbeat.ts new file mode 100644 index 000000000..11bdfe76e --- /dev/null +++ b/packages/cli/src/commands/_generated/_operations/dns/domainconnect/get-heartbeat.ts @@ -0,0 +1,9 @@ +/** @generated from dns.domainconnect.get-heartbeat */ +export default { + method: "GET", + path: () => "/_heartbeat", + response: "text", + errors: { + 503: "ServiceUnavailableError", + }, +} as const; diff --git a/packages/cli/src/commands/_generated/_operations/dns/domainconnect/get-provider-configuration.ts b/packages/cli/src/commands/_generated/_operations/dns/domainconnect/get-provider-configuration.ts new file mode 100644 index 000000000..70d616967 --- /dev/null +++ b/packages/cli/src/commands/_generated/_operations/dns/domainconnect/get-provider-configuration.ts @@ -0,0 +1,13 @@ +/** @generated from dns.domainconnect.get-provider-configuration */ +import { path } from "#api"; + +export default { + method: "GET", + path: (request: Record) => + path`/v2/provconf/${request.provider}/${request.service}/${request.account}`, + errors: { + 400: "BadRequestError", + 403: "ForbiddenError", + 404: "NotFoundError", + }, +} as const; diff --git a/packages/cli/src/commands/_generated/_operations/dns/domainconnect/get-provider-template.ts b/packages/cli/src/commands/_generated/_operations/dns/domainconnect/get-provider-template.ts new file mode 100644 index 000000000..b882b1227 --- /dev/null +++ b/packages/cli/src/commands/_generated/_operations/dns/domainconnect/get-provider-template.ts @@ -0,0 +1,12 @@ +/** @generated from dns.domainconnect.get-provider-template */ +import { path } from "#api"; + +export default { + method: "GET", + path: (request: Record) => + path`/v2/domainTemplates/providers/${request.provider}/services/${request.service}`, + query: ["dump"], + errors: { + 404: "NotFoundError", + }, +} as const; diff --git a/packages/cli/src/commands/_generated/_operations/dns/domainconnect/post-verify.ts b/packages/cli/src/commands/_generated/_operations/dns/domainconnect/post-verify.ts new file mode 100644 index 000000000..71e0d54f0 --- /dev/null +++ b/packages/cli/src/commands/_generated/_operations/dns/domainconnect/post-verify.ts @@ -0,0 +1,13 @@ +/** @generated from dns.domainconnect.post-verify */ +export default { + method: "POST", + path: () => "/v1/verify", + body: "json", + response: false, + errors: { + 400: "BadRequestError", + 403: "ForbiddenError", + 404: "NotFoundError", + 502: "BadGatewayError", + }, +} as const; diff --git a/packages/cli/src/commands/_generated/_operations/managed-defense/vulnerability-discovery/reports/get.ts b/packages/cli/src/commands/_generated/_operations/managed-defense/vulnerability-discovery/reports/get.ts index c9c134713..40e9ad45c 100644 --- a/packages/cli/src/commands/_generated/_operations/managed-defense/vulnerability-discovery/reports/get.ts +++ b/packages/cli/src/commands/_generated/_operations/managed-defense/vulnerability-discovery/reports/get.ts @@ -7,5 +7,7 @@ export default { path`/accounts/${request.account_id}/managed-defense/vulnerability-discovery/repos/${request.repo_id}/scans/${request.scan_id}/report`, errors: { 404: "NotFoundError", + 409: "ConflictError", + 410: "GoneError", }, } as const; diff --git a/packages/cli/src/commands/_generated/_operations/managed-defense/vulnerability-discovery/repositories/create-token.ts b/packages/cli/src/commands/_generated/_operations/managed-defense/vulnerability-discovery/repositories/create-token.ts new file mode 100644 index 000000000..e426360e8 --- /dev/null +++ b/packages/cli/src/commands/_generated/_operations/managed-defense/vulnerability-discovery/repositories/create-token.ts @@ -0,0 +1,11 @@ +/** @generated from managed-defense.vulnerability-discovery.repositories.create-token */ +import { path } from "#api"; + +export default { + method: "POST", + path: (request: Record) => + path`/accounts/${request.account_id}/managed-defense/vulnerability-discovery/repos/${request.repo_id}/token`, + errors: { + 404: "NotFoundError", + }, +} as const; diff --git a/packages/cli/src/commands/_generated/_operations/managed-defense/vulnerability-discovery/scans/get-report.ts b/packages/cli/src/commands/_generated/_operations/managed-defense/vulnerability-discovery/scans/get-report.ts index 9d3d1077b..5cd01d85e 100644 --- a/packages/cli/src/commands/_generated/_operations/managed-defense/vulnerability-discovery/scans/get-report.ts +++ b/packages/cli/src/commands/_generated/_operations/managed-defense/vulnerability-discovery/scans/get-report.ts @@ -7,5 +7,7 @@ export default { path`/accounts/${request.account_id}/managed-defense/vulnerability-discovery/scans/${request.scan_id}/report`, errors: { 404: "NotFoundError", + 409: "ConflictError", + 410: "GoneError", }, } as const; diff --git a/packages/cli/src/commands/_generated/ai-gateway/gateways/create.ts b/packages/cli/src/commands/_generated/ai-gateway/gateways/create.ts index a6ce4625b..d9d158876 100644 --- a/packages/cli/src/commands/_generated/ai-gateway/gateways/create.ts +++ b/packages/cli/src/commands/_generated/ai-gateway/gateways/create.ts @@ -338,7 +338,11 @@ function builder(yargs: Argv) { description: "The spend_limits.rules field. Provide as a JSON array of objects or @path/to/file.json.", }) - .option("store-id", { type: "string", description: "The store_id field" }) + .option("store-id", { + type: "string", + description: + "Secrets Store used by this gateway. Omit on update to keep the current store. Cannot be cleared while stored keys or secret references depend on it.", + }) .option("stripe-authorization", { type: "string", description: "The stripe.authorization field", diff --git a/packages/cli/src/commands/_generated/ai-gateway/gateways/update.ts b/packages/cli/src/commands/_generated/ai-gateway/gateways/update.ts index 0d9fc6fd2..8a65e49e4 100644 --- a/packages/cli/src/commands/_generated/ai-gateway/gateways/update.ts +++ b/packages/cli/src/commands/_generated/ai-gateway/gateways/update.ts @@ -343,7 +343,11 @@ function builder(yargs: Argv) { description: "The spend_limits.rules field. Provide as a JSON array of objects or @path/to/file.json.", }) - .option("store-id", { type: "string", description: "The store_id field" }) + .option("store-id", { + type: "string", + description: + "Secrets Store used by this gateway. Omit on update to keep the current store. Cannot be cleared while stored keys or secret references depend on it.", + }) .option("stripe-authorization", { type: "string", description: "The stripe.authorization field", diff --git a/packages/cli/src/commands/_generated/containers/applications/create.ts b/packages/cli/src/commands/_generated/containers/applications/create.ts index d04fb8d68..ac9595c49 100644 --- a/packages/cli/src/commands/_generated/containers/applications/create.ts +++ b/packages/cli/src/commands/_generated/containers/applications/create.ts @@ -161,13 +161,11 @@ function builder(yargs: Argv) { "configuration-environment-variables", "configuration-image", "configuration-instance-type", - "constraints-jurisdiction", "constraints-regions", "instances", "max-instances", "rollout-active-grace-period", ]) - .conflicts("constraints-jurisdiction", ["configuration-wrangler-ssh-port"]) .conflicts("constraints-regions", ["configuration-wrangler-ssh-port"]) .conflicts("durable-objects-namespace-id", [ "durable-objects-class-name", diff --git a/packages/cli/src/commands/_generated/dns/domainconnect/get-domain-settings.ts b/packages/cli/src/commands/_generated/dns/domainconnect/get-domain-settings.ts new file mode 100644 index 000000000..ecbac627f --- /dev/null +++ b/packages/cli/src/commands/_generated/dns/domainconnect/get-domain-settings.ts @@ -0,0 +1,68 @@ +import operation from "../../_operations/dns/domainconnect/get-domain-settings.js"; +import type { CommonYargsOptions, InferArgs } from "#lib/cli-types.js"; +import type { ArgClassification } from "#lib/telemetry/index.js"; +/** + * get-domain-settings command + * @generated from apis/overlays/dns.ts + */ +import type { Argv, CommandModule } from "yargs"; +import { createCommandClient } from "#lib/auth.js"; +import { formatDryRun } from "#lib/dry-run.js"; +import { formatOutput } from "#lib/output.js"; +import { withProgress } from "#lib/progress.js"; +import { runWithTelemetry } from "#lib/telemetry/index.js"; + +function builder(yargs: Argv) { + return yargs + .usage( + "$0 dns domainconnect get-domain-settings \n\nChecks whether a domain is in Quicksilver and returns its settings." + ) + .positional("domain", { + type: "string", + description: "Domain name.", + demandOption: true, + }) + .option("dry-run", { + type: "boolean", + description: "Validate and show what would happen without executing", + default: false, + }); +} + +type Args = InferArgs; + +const command: CommandModule = { + command: "get-domain-settings ", + describe: "Provide settings if domain is served by Cloudflare", + builder, + handler: async (argv): Promise => + runWithTelemetry( + { + command: "dns domainconnect get-domain-settings", + classification: { + safeFlags: ["dry-run"], + } satisfies ArgClassification, + }, + argv as Record, + async () => { + if (argv.dryRun) { + formatDryRun({ + command: "cf dns domainconnect get-domain-settings", + method: "GET", + url: `https://api.cloudflare.com/client/v4/v2/${argv["domain"] == null ? "" : encodeURIComponent(String(argv["domain"]))}/settings`, + pathParams: { domain: String(argv["domain"] ?? "") }, + bodyKind: "none", + }); + return; + } + const client = await createCommandClient(argv); + + const result = await withProgress(`Loading`, async () => + client.send(operation, { domain: argv["domain"] }) + ); + formatOutput(result, { successLabel: `Loaded` }); + } + ), +}; + +export default command; diff --git a/packages/cli/src/commands/_generated/dns/domainconnect/get-heartbeat.ts b/packages/cli/src/commands/_generated/dns/domainconnect/get-heartbeat.ts new file mode 100644 index 000000000..a881f3c6f --- /dev/null +++ b/packages/cli/src/commands/_generated/dns/domainconnect/get-heartbeat.ts @@ -0,0 +1,68 @@ +import type { CommonYargsOptions, InferArgs } from "#lib/cli-types.js"; +import type { ArgClassification } from "#lib/telemetry/index.js"; +/** + * get-heartbeat command + * @generated from apis/overlays/dns.ts + */ +import type { Argv, CommandModule } from "yargs"; +import { createCommandClient } from "#lib/auth.js"; +import { formatDryRun } from "#lib/dry-run.js"; +import { formatOutput } from "#lib/output.js"; +import { withProgress } from "#lib/progress.js"; +import { fetchRawBytes, writeRawOutput } from "#lib/raw-fetch.js"; +import { runWithTelemetry } from "#lib/telemetry/index.js"; + +function builder(yargs: Argv) { + return yargs + .usage( + "$0 dns domainconnect get-heartbeat\n\nUsed by Kubernetes readiness and liveness probes, and CI builder by executing test/staging.sh." + ) + .option("dry-run", { + type: "boolean", + description: "Validate and show what would happen without executing", + default: false, + }); +} + +type Args = InferArgs; + +const command: CommandModule = { + command: "get-heartbeat", + describe: "Heartbeat response", + builder, + handler: async (argv): Promise => + runWithTelemetry( + { + command: "dns domainconnect get-heartbeat", + classification: { + safeFlags: ["dry-run"], + } satisfies ArgClassification, + }, + argv as Record, + async () => { + if (argv.dryRun) { + formatDryRun({ + command: "cf dns domainconnect get-heartbeat", + method: "GET", + url: `https://api.cloudflare.com/client/v4/_heartbeat`, + pathParams: {}, + bodyKind: "none", + }); + return; + } + const client = await createCommandClient(argv); + + const __cfRawBytes = await withProgress(`Loading`, async () => + fetchRawBytes(`/_heartbeat`, { + method: "GET", + local: argv.local === true, + persistTo: argv.persistTo as string | undefined, + }) + ); + writeRawOutput(__cfRawBytes.toString("utf-8")); + return; + } + ), +}; + +export default command; diff --git a/packages/cli/src/commands/_generated/dns/domainconnect/get-provider-configuration.ts b/packages/cli/src/commands/_generated/dns/domainconnect/get-provider-configuration.ts new file mode 100644 index 000000000..251c12b4e --- /dev/null +++ b/packages/cli/src/commands/_generated/dns/domainconnect/get-provider-configuration.ts @@ -0,0 +1,86 @@ +import operation from "../../_operations/dns/domainconnect/get-provider-configuration.js"; +import type { CommonYargsOptions, InferArgs } from "#lib/cli-types.js"; +import type { ArgClassification } from "#lib/telemetry/index.js"; +/** + * get-provider-configuration command + * @generated from apis/overlays/dns.ts + */ +import type { Argv, CommandModule } from "yargs"; +import { createCommandClient } from "#lib/auth.js"; +import { formatDryRun } from "#lib/dry-run.js"; +import { formatOutput } from "#lib/output.js"; +import { withProgress } from "#lib/progress.js"; +import { runWithTelemetry } from "#lib/telemetry/index.js"; + +function builder(yargs: Argv) { + return yargs + .usage( + "$0 dns domainconnect get-provider-configuration \n\nProvides Stratus with extra information about domain connect provider(s)." + ) + .positional("account", { + type: "string", + description: "Account ID.", + demandOption: true, + }) + .option("provider", { + type: "string", + description: "Provider ID.", + demandOption: true, + }) + .option("service", { + type: "string", + description: "Service ID.", + demandOption: true, + }) + .option("dry-run", { + type: "boolean", + description: "Validate and show what would happen without executing", + default: false, + }); +} + +type Args = InferArgs; + +const command: CommandModule = { + command: "get-provider-configuration ", + describe: "Serve a provider configuration", + builder, + handler: async (argv): Promise => + runWithTelemetry( + { + command: "dns domainconnect get-provider-configuration", + classification: { + safeFlags: ["dry-run"], + } satisfies ArgClassification, + }, + argv as Record, + async () => { + if (argv.dryRun) { + formatDryRun({ + command: "cf dns domainconnect get-provider-configuration", + method: "GET", + url: `https://api.cloudflare.com/client/v4/v2/provconf/${argv["provider"] == null ? "" : encodeURIComponent(String(argv["provider"]))}/${argv["service"] == null ? "" : encodeURIComponent(String(argv["service"]))}/${argv["account"] == null ? "" : encodeURIComponent(String(argv["account"]))}`, + pathParams: { + provider: String(argv["provider"] ?? ""), + service: String(argv["service"] ?? ""), + account: String(argv["account"] ?? ""), + }, + bodyKind: "none", + }); + return; + } + const client = await createCommandClient(argv); + + const result = await withProgress(`Loading`, async () => + client.send(operation, { + provider: argv["provider"], + service: argv["service"], + account: argv["account"], + }) + ); + formatOutput(result, { successLabel: `Loaded` }); + } + ), +}; + +export default command; diff --git a/packages/cli/src/commands/_generated/dns/domainconnect/get-provider-template.ts b/packages/cli/src/commands/_generated/dns/domainconnect/get-provider-template.ts new file mode 100644 index 000000000..c605bbb0f --- /dev/null +++ b/packages/cli/src/commands/_generated/dns/domainconnect/get-provider-template.ts @@ -0,0 +1,85 @@ +import operation from "../../_operations/dns/domainconnect/get-provider-template.js"; +import type { CommonYargsOptions, InferArgs } from "#lib/cli-types.js"; +import type { ArgClassification } from "#lib/telemetry/index.js"; +/** + * get-provider-template command + * @generated from apis/overlays/dns.ts + */ +import type { Argv, CommandModule } from "yargs"; +import { createCommandClient } from "#lib/auth.js"; +import { formatDryRun } from "#lib/dry-run.js"; +import { formatOutput } from "#lib/output.js"; +import { withProgress } from "#lib/progress.js"; +import { runWithTelemetry } from "#lib/telemetry/index.js"; + +function builder(yargs: Argv) { + return yargs + .usage( + "$0 dns domainconnect get-provider-template \n\nProviders are the external parties that are configured to interact with Cloudflare." + ) + .positional("service", { + type: "string", + description: "Service name.", + demandOption: true, + }) + .option("provider", { + type: "string", + description: "Provider name.", + demandOption: true, + }) + .option("dump", { type: "string", description: "Dump raw template." }) + .option("dry-run", { + type: "boolean", + description: "Validate and show what would happen without executing", + default: false, + }); +} + +type Args = InferArgs; + +const command: CommandModule = { + command: "get-provider-template ", + describe: "Serve a provider template", + builder, + handler: async (argv): Promise => + runWithTelemetry( + { + command: "dns domainconnect get-provider-template", + classification: { + safeFlags: ["dry-run"], + } satisfies ArgClassification, + }, + argv as Record, + async () => { + const queryParams: Record = { + dump: argv["dump"], + }; + if (argv.dryRun) { + formatDryRun({ + command: "cf dns domainconnect get-provider-template", + method: "GET", + url: `https://api.cloudflare.com/client/v4/v2/domainTemplates/providers/${argv["provider"] == null ? "" : encodeURIComponent(String(argv["provider"]))}/services/${argv["service"] == null ? "" : encodeURIComponent(String(argv["service"]))}`, + pathParams: { + provider: String(argv["provider"] ?? ""), + service: String(argv["service"] ?? ""), + }, + query: queryParams, + bodyKind: "none", + }); + return; + } + const client = await createCommandClient(argv); + + const result = await withProgress(`Loading`, async () => + client.send(operation, { + provider: argv["provider"], + service: argv["service"], + ...queryParams, + }) + ); + formatOutput(result, { successLabel: `Loaded` }); + } + ), +}; + +export default command; diff --git a/packages/cli/src/commands/_generated/dns/domainconnect/index.ts b/packages/cli/src/commands/_generated/dns/domainconnect/index.ts new file mode 100644 index 000000000..9641525d3 --- /dev/null +++ b/packages/cli/src/commands/_generated/dns/domainconnect/index.ts @@ -0,0 +1,30 @@ +import $getdomainsettings from "./get-domain-settings.js"; +import $getheartbeat from "./get-heartbeat.js"; +import $getproviderconfiguration from "./get-provider-configuration.js"; +import $getprovidertemplate from "./get-provider-template.js"; +import $postverify from "./post-verify.js"; +import type { CommonYargsOptions } from "#lib/cli-types.js"; +/** + * domainconnect command group + * @generated from apis/overlays/dns.ts + */ +import type { CommandModule } from "yargs"; + +const command: CommandModule = { + command: "domainconnect", + describe: "Operations for domainconnect", + + builder: (yargs) => { + return yargs + .command($getdomainsettings) + .command($getheartbeat) + .command($getproviderconfiguration) + .command($getprovidertemplate) + .command($postverify) + .demandCommand(1, "Please specify a subcommand"); + }, + + handler: () => {}, +}; + +export default command; diff --git a/packages/cli/src/commands/_generated/dns/domainconnect/post-verify.ts b/packages/cli/src/commands/_generated/dns/domainconnect/post-verify.ts new file mode 100644 index 000000000..aaa56a09d --- /dev/null +++ b/packages/cli/src/commands/_generated/dns/domainconnect/post-verify.ts @@ -0,0 +1,119 @@ +import operation from "../../_operations/dns/domainconnect/post-verify.js"; +import type { CommonYargsOptions, InferArgs } from "#lib/cli-types.js"; +import type { ArgClassification } from "#lib/telemetry/index.js"; +/** + * post-verify command + * @generated from apis/overlays/dns.ts + */ +import type { Argv, CommandModule } from "yargs"; +import { createCommandClient } from "#lib/auth.js"; +import { compactBody, parseBody } from "#lib/body-parser.js"; +import { formatDryRun } from "#lib/dry-run.js"; +import { resolveFileToken } from "#lib/input-validation.js"; +import { formatOutput } from "#lib/output.js"; +import { withProgress } from "#lib/progress.js"; +import { runWithTelemetry } from "#lib/telemetry/index.js"; + +function builder(yargs: Argv) { + return yargs + .usage( + "$0 dns domainconnect post-verify\n\nValidates a Domain Connect signed request using DNS TXT public keys." + ) + .option("domain", { type: "string", description: "The domain field" }) + .option("hash", { type: "string", description: "The hash field" }) + .option("sig", { type: "string", description: "The sig field" }) + .option("dry-run", { + type: "boolean", + description: "Validate and show what would happen without executing", + default: false, + }) + .option("body", { + type: "string", + description: "Raw JSON request body (bypasses individual flags)", + }); +} + +type Args = InferArgs; + +const command: CommandModule = { + command: "post-verify", + describe: "Request domain connect validation", + builder, + handler: async (argv): Promise => + runWithTelemetry( + { + command: "dns domainconnect post-verify", + classification: { + safeFlags: ["dry-run"], + } satisfies ArgClassification, + }, + argv as Record, + async () => { + if (argv.dryRun) { + formatDryRun({ + command: "cf dns domainconnect post-verify", + method: "POST", + url: `https://api.cloudflare.com/client/v4/v1/verify`, + pathParams: {}, + bodyKind: "json", + body: + argv.body !== undefined + ? parseBody(argv.body) + : compactBody({ + domain: resolveFileToken( + argv["domain"] as string | undefined, + "domain", + "text" + ), + hash: resolveFileToken( + argv["hash"] as string | undefined, + "hash", + "text" + ), + sig: resolveFileToken( + argv["sig"] as string | undefined, + "sig", + "text" + ), + }), + }); + return; + } + const client = await createCommandClient(argv); + + if (argv.body) { + const bodyData = parseBody(argv.body); + const result = await withProgress(`Creating`, async () => + client.send(operation, { body: bodyData }) + ); + formatOutput(result, { successLabel: `Created` }); + return; + } + + // Assemble request body from individual flags + const bodyData = compactBody({ + domain: resolveFileToken( + argv["domain"] as string | undefined, + "domain", + "text" + ), + hash: resolveFileToken( + argv["hash"] as string | undefined, + "hash", + "text" + ), + sig: resolveFileToken( + argv["sig"] as string | undefined, + "sig", + "text" + ), + }); + const result = await withProgress(`Creating`, async () => + client.send(operation, { body: bodyData }) + ); + formatOutput(result, { successLabel: `Created` }); + } + ), +}; + +export default command; diff --git a/packages/cli/src/commands/_generated/dns/index.ts b/packages/cli/src/commands/_generated/dns/index.ts index e4a0d983c..9ed3125c5 100644 --- a/packages/cli/src/commands/_generated/dns/index.ts +++ b/packages/cli/src/commands/_generated/dns/index.ts @@ -1,4 +1,5 @@ import $dnssec from "./dnssec/index.js"; +import $domainconnect from "./domainconnect/index.js"; import $records from "./records/index.js"; import $settings from "./settings/index.js"; import $usage from "./usage/index.js"; @@ -17,6 +18,7 @@ const command: CommandModule = { builder: (yargs) => { return yargs .command($dnssec) + .command($domainconnect) .command($records) .command($settings) .command($usage) diff --git a/packages/cli/src/commands/_generated/index.ts b/packages/cli/src/commands/_generated/index.ts index bc4a95075..d91c2125a 100644 --- a/packages/cli/src/commands/_generated/index.ts +++ b/packages/cli/src/commands/_generated/index.ts @@ -658,7 +658,7 @@ export const generatedCommands: GeneratedCommand[] = [ () => import("./magic-network-monitoring/index.js"), null ), - hideCommand: false, + hideCommand: true, }, { command: lazyCommand( diff --git a/packages/cli/src/commands/_generated/magic-transit/cf-interconnects/update.ts b/packages/cli/src/commands/_generated/magic-transit/cf-interconnects/update.ts index 38b805b4d..1825e789e 100644 --- a/packages/cli/src/commands/_generated/magic-transit/cf-interconnects/update.ts +++ b/packages/cli/src/commands/_generated/magic-transit/cf-interconnects/update.ts @@ -64,7 +64,7 @@ function builder(yargs: Argv) { type: "string", array: true, description: - "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.", + "IPv4 prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic\nrouting table. Each entry must be a network address in CIDR notation with no host bits set (for example\n`192.0.2.0/24`, not `192.0.2.1/24`) and must not repeat another entry.\n", }) .option("bgp-import-filter-id", { type: "string", diff --git a/packages/cli/src/commands/_generated/magic-transit/gre-tunnels/create.ts b/packages/cli/src/commands/_generated/magic-transit/gre-tunnels/create.ts index 1c584dd04..68abe0e5f 100644 --- a/packages/cli/src/commands/_generated/magic-transit/gre-tunnels/create.ts +++ b/packages/cli/src/commands/_generated/magic-transit/gre-tunnels/create.ts @@ -49,7 +49,7 @@ function builder(yargs: Argv) { type: "string", array: true, description: - "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.", + "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.\nEach entry must be a network address in CIDR notation with no host bits set (for example `192.0.2.0/24`, not\n`192.0.2.1/24`) and must not repeat another entry. IPv6 prefixes are accepted only when the tunnel has an\n`interface_address6`.\n", }) .option("bgp-import-filter-id", { type: "string", diff --git a/packages/cli/src/commands/_generated/magic-transit/ipsec-tunnels/create.ts b/packages/cli/src/commands/_generated/magic-transit/ipsec-tunnels/create.ts index b64bfa76e..9c4743ffe 100644 --- a/packages/cli/src/commands/_generated/magic-transit/ipsec-tunnels/create.ts +++ b/packages/cli/src/commands/_generated/magic-transit/ipsec-tunnels/create.ts @@ -49,7 +49,7 @@ function builder(yargs: Argv) { type: "string", array: true, description: - "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.", + "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.\nEach entry must be a network address in CIDR notation with no host bits set (for example `192.0.2.0/24`, not\n`192.0.2.1/24`) and must not repeat another entry. IPv6 prefixes are accepted only when the tunnel has an\n`interface_address6`.\n", }) .option("bgp-import-filter-id", { type: "string", diff --git a/packages/cli/src/commands/_generated/magic-transit/ipsec-tunnels/update.ts b/packages/cli/src/commands/_generated/magic-transit/ipsec-tunnels/update.ts index 22d236478..2df683eeb 100644 --- a/packages/cli/src/commands/_generated/magic-transit/ipsec-tunnels/update.ts +++ b/packages/cli/src/commands/_generated/magic-transit/ipsec-tunnels/update.ts @@ -53,7 +53,7 @@ function builder(yargs: Argv) { type: "string", array: true, description: - "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.", + "Prefixes in this list will be advertised to the customer device, in addition to the routes in the Magic routing table.\nEach entry must be a network address in CIDR notation with no host bits set (for example `192.0.2.0/24`, not\n`192.0.2.1/24`) and must not repeat another entry. IPv6 prefixes are accepted only when the tunnel has an\n`interface_address6`.\n", }) .option("bgp-import-filter-id", { type: "string", diff --git a/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/repositories/create-token.ts b/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/repositories/create-token.ts new file mode 100644 index 000000000..efd2c7c64 --- /dev/null +++ b/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/repositories/create-token.ts @@ -0,0 +1,81 @@ +import operation from "../../../_operations/managed-defense/vulnerability-discovery/repositories/create-token.js"; +import type { CommonYargsOptions, InferArgs } from "#lib/cli-types.js"; +import type { ArgClassification } from "#lib/telemetry/index.js"; +/** + * create-token command + * @generated from apis/overlays/managed-defense.ts + */ +import type { Argv, CommandModule } from "yargs"; +import { + createCommandClient, + getAccountId, + resolveAccountIdSilent, +} from "#lib/auth.js"; +import { formatDryRun } from "#lib/dry-run.js"; +import { LOCAL_ACCOUNT_ID } from "#lib/local.js"; +import { formatOutput } from "#lib/output.js"; +import { withProgress } from "#lib/progress.js"; +import { runWithTelemetry } from "#lib/telemetry/index.js"; + +function builder(yargs: Argv) { + return yargs + .usage( + "$0 managed-defense vulnerability-discovery repositories create-token \n\nCreates a one-hour write token for an existing upload repository. Worker-imported repositories are system-managed and cannot receive upload tokens." + ) + .positional("repo-id", { + type: "string", + description: "Repo ID", + demandOption: true, + }) + .option("dry-run", { + type: "boolean", + description: "Validate and show what would happen without executing", + default: false, + }); +} + +type Args = InferArgs; + +const command: CommandModule = { + command: "create-token ", + describe: "Create upload token", + builder, + handler: async (argv): Promise => + runWithTelemetry( + { + command: + "managed-defense vulnerability-discovery repositories create-token", + classification: { + safeFlags: ["dry-run"], + } satisfies ArgClassification, + }, + argv as Record, + async () => { + if (argv.dryRun) { + const __cfDryRunAccountId = await resolveAccountIdSilent(); + formatDryRun({ + command: + "cf managed-defense vulnerability-discovery repositories create-token", + method: "POST", + url: `https://api.cloudflare.com/client/v4/accounts/${__cfDryRunAccountId ?? ""}/managed-defense/vulnerability-discovery/repos/${argv["repo-id"] == null ? "" : encodeURIComponent(String(argv["repo-id"]))}/token`, + pathParams: { "repo-id": String(argv["repo-id"] ?? "") }, + bodyKind: "none", + }); + return; + } + const client = await createCommandClient(argv); + const accountId = argv.local ? LOCAL_ACCOUNT_ID : await getAccountId(); + argv.accountId = accountId; + + const result = await withProgress(`Creating`, async () => + client.send(operation, { + account_id: accountId, + repo_id: argv["repo-id"], + }) + ); + formatOutput(result, { successLabel: `Created` }); + } + ), +}; + +export default command; diff --git a/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/repositories/create.ts b/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/repositories/create.ts index 672b5fcd6..2ef07e324 100644 --- a/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/repositories/create.ts +++ b/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/repositories/create.ts @@ -23,7 +23,7 @@ import { runWithTelemetry } from "#lib/telemetry/index.js"; function builder(yargs: Argv) { return yargs .usage( - "$0 managed-defense vulnerability-discovery repositories create\n\nCreates an upload repository or reserves an asynchronous deployed Worker import by name. Worker imports require Idempotency-Key." + "$0 managed-defense vulnerability-discovery repositories create\n\nCreates an upload repository or reserves an asynchronous deployed Worker import by name. Worker imports require Idempotency-Key. Push upload source to `main` or specify the `branch` to scan in the scan request." ) .option("idempotency-key", { type: "string", diff --git a/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/repositories/index.ts b/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/repositories/index.ts index 7a03c396d..73f2f8088 100644 --- a/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/repositories/index.ts +++ b/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/repositories/index.ts @@ -1,3 +1,4 @@ +import $createtoken from "./create-token.js"; import $create from "./create.js"; import $get from "./get.js"; import $list from "./list.js"; @@ -15,6 +16,7 @@ const command: CommandModule = { builder: (yargs) => { return yargs .command($create) + .command($createtoken) .command($get) .command($list) .demandCommand(1, "Please specify a subcommand"); diff --git a/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/scans/create.ts b/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/scans/create.ts index 985b04b5d..20168dff7 100644 --- a/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/scans/create.ts +++ b/packages/cli/src/commands/_generated/managed-defense/vulnerability-discovery/scans/create.ts @@ -14,7 +14,7 @@ import { import { compactBody, parseBody, - parseJsonMap, + parseObjectArray, setNestedValue, } from "#lib/body-parser.js"; import { formatDryRun } from "#lib/dry-run.js"; @@ -27,22 +27,17 @@ import { runWithTelemetry } from "#lib/telemetry/index.js"; function builder(yargs: Argv) { return yargs .usage( - "$0 managed-defense vulnerability-discovery scans create\n\nSubmits repository intent for operator review. This endpoint does not immediately start execution. Worker-imported repositories must be ready; explicit `repo_hosts` must be authorized before the request is persisted." + "$0 managed-defense vulnerability-discovery scans create\n\nSubmits repository intent for operator review. This endpoint does not immediately start execution. Worker-imported repositories must be ready; explicit repository host scopes must be authorized and explicit branch selections must exist before the request is persisted." ) .option("idempotency-key", { type: "string", description: "Optional. Supply this header to safely retry a request. Required when `worker_script_name` is supplied.", }) - .option("repo-hosts", { - type: "string", - description: - "Explicit hostname scopes. Every hostname must be authorized for its repository before review admission; rejected scopes return 422 and do not persist a scan request. Provide as a JSON object or @path/to/file.json.", - }) .option("repos", { type: "string", - array: true, - description: "The repos field", + description: + "Repository names must be unique within a request. Provide as a JSON array of objects or @path/to/file.json.", }) .option("telemetry-window-end", { type: "string", @@ -110,28 +105,21 @@ const command: CommandModule = { body: argv.body !== undefined ? parseBody(argv.body) - : compactBody( - { - repo_hosts: parseJsonMap( - argv["repo-hosts"], - "repo-hosts" + : compactBody({ + repos: parseObjectArray(argv["repos"], "repos"), + telemetry_window: { + end: resolveFileToken( + argv["telemetry-window-end"] as string | undefined, + "telemetry-window-end", + "text" + ), + start: resolveFileToken( + argv["telemetry-window-start"] as string | undefined, + "telemetry-window-start", + "text" ), - repos: argv["repos"], - telemetry_window: { - end: resolveFileToken( - argv["telemetry-window-end"] as string | undefined, - "telemetry-window-end", - "text" - ), - start: resolveFileToken( - argv["telemetry-window-start"] as string | undefined, - "telemetry-window-start", - "text" - ), - }, }, - [["repo_hosts"]] - ), + }), }); return; } @@ -163,14 +151,12 @@ const command: CommandModule = { // Assemble request body from individual flags const bodyData: Record = {}; - if (argv["repo-hosts"] !== undefined) + if (argv["repos"] !== undefined) setNestedValue( bodyData, - ["repo_hosts"], - parseJsonMap(argv["repo-hosts"], "repo-hosts") + ["repos"], + parseObjectArray(argv["repos"], "repos") ); - if (argv["repos"] !== undefined) - setNestedValue(bodyData, ["repos"], argv["repos"]); if (argv["telemetry-window-end"] !== undefined) setNestedValue( bodyData, diff --git a/packages/cli/src/commands/_generated/tags/account-resources/delete.ts b/packages/cli/src/commands/_generated/tags/account-resources/delete.ts index 16ed000e0..f50eadc9a 100644 --- a/packages/cli/src/commands/_generated/tags/account-resources/delete.ts +++ b/packages/cli/src/commands/_generated/tags/account-resources/delete.ts @@ -50,6 +50,7 @@ function builder(yargs: Argv) { "account", "account_ruleset", "ai_gateway", + "ai_search_instance", "alerting_policy", "alerting_webhook", "cloudflared_tunnel", @@ -214,6 +215,7 @@ const command: CommandModule = { "account", "account_ruleset", "ai_gateway", + "ai_search_instance", "alerting_policy", "alerting_webhook", "cloudflared_tunnel", diff --git a/packages/cli/src/commands/_generated/tags/account-resources/get.ts b/packages/cli/src/commands/_generated/tags/account-resources/get.ts index 9b38e962a..88525bc93 100644 --- a/packages/cli/src/commands/_generated/tags/account-resources/get.ts +++ b/packages/cli/src/commands/_generated/tags/account-resources/get.ts @@ -38,6 +38,7 @@ function builder(yargs: Argv) { "account", "account_ruleset", "ai_gateway", + "ai_search_instance", "alerting_policy", "alerting_webhook", "cloudflared_tunnel", diff --git a/packages/cli/src/commands/_generated/tags/account-resources/update.ts b/packages/cli/src/commands/_generated/tags/account-resources/update.ts index 13885f8d1..124116212 100644 --- a/packages/cli/src/commands/_generated/tags/account-resources/update.ts +++ b/packages/cli/src/commands/_generated/tags/account-resources/update.ts @@ -49,6 +49,7 @@ function builder(yargs: Argv) { "account", "account_ruleset", "ai_gateway", + "ai_search_instance", "alerting_policy", "alerting_webhook", "cloudflared_tunnel", @@ -201,6 +202,7 @@ const command: CommandModule = { "account", "account_ruleset", "ai_gateway", + "ai_search_instance", "alerting_policy", "alerting_webhook", "cloudflared_tunnel", diff --git a/packages/cli/src/commands/_generated/tags/values/list.ts b/packages/cli/src/commands/_generated/tags/values/list.ts index 921475c73..66f71a751 100644 --- a/packages/cli/src/commands/_generated/tags/values/list.ts +++ b/packages/cli/src/commands/_generated/tags/values/list.ts @@ -38,6 +38,7 @@ function builder(yargs: Argv) { "account", "account_ruleset", "ai_gateway", + "ai_search_instance", "alerting_policy", "alerting_webhook", "api_gateway_operation", diff --git a/packages/cli/src/commands/_generated/zero-trust/dlp/datasets/upload.ts b/packages/cli/src/commands/_generated/zero-trust/dlp/datasets/upload.ts index 8312480f9..75c77a4d6 100644 --- a/packages/cli/src/commands/_generated/zero-trust/dlp/datasets/upload.ts +++ b/packages/cli/src/commands/_generated/zero-trust/dlp/datasets/upload.ts @@ -22,9 +22,9 @@ import { runWithTelemetry } from "#lib/telemetry/index.js"; function builder(yargs: Argv) { return yargs .usage( - "$0 zero-trust dlp datasets upload \n\nThis is used for single-column EDMv1 and Custom Word Lists. The EDM format can only be created in the Cloudflare dashboard. For other clients, this operation can only be used for non-secret Custom Word Lists. The body must be a UTF-8 encoded, newline (NL or CRNL) separated list of words to be matched." + "$0 zero-trust dlp datasets upload \n\nThis is used for single-column EDMv1 and Custom Word Lists. The EDM format can only be created in the Cloudflare dashboard. For other clients, this operation can only be used for non-secret Custom Word Lists. The body must be a UTF-8 encoded, newline (NL or CRNL) separated list of words to be matched." ) - .positional("version", { + .positional("dataset-version", { type: "string", description: "Version", demandOption: true, @@ -53,7 +53,7 @@ function builder(yargs: Argv) { type Args = InferArgs; const command: CommandModule = { - command: "upload ", + command: "upload ", describe: "Upload a new version of a dataset", builder, handler: async (argv): Promise => @@ -71,10 +71,10 @@ const command: CommandModule = { formatDryRun({ command: "cf zero-trust dlp datasets upload", method: "POST", - url: `https://api.cloudflare.com/client/v4/accounts/${__cfDryRunAccountId ?? ""}/dlp/datasets/${argv["dataset-id"] == null ? "" : encodeURIComponent(String(argv["dataset-id"]))}/upload/${argv["version"] == null ? "" : encodeURIComponent(String(argv["version"]))}`, + url: `https://api.cloudflare.com/client/v4/accounts/${__cfDryRunAccountId ?? ""}/dlp/datasets/${argv["dataset-id"] == null ? "" : encodeURIComponent(String(argv["dataset-id"]))}/upload/${argv["dataset-version"] == null ? "" : encodeURIComponent(String(argv["dataset-version"]))}`, pathParams: { "dataset-id": String(argv["dataset-id"] ?? ""), - version: String(argv["version"] ?? ""), + "dataset-version": String(argv["dataset-version"] ?? ""), }, bodyKind: "octet-stream", body: argv.body, @@ -91,7 +91,7 @@ const command: CommandModule = { requestApi( client, "POST", - `/accounts/${accountId}/dlp/datasets/${encodeURIComponent(String(argv["dataset-id"]))}/upload/${encodeURIComponent(String(argv["version"]))}`, + `/accounts/${accountId}/dlp/datasets/${encodeURIComponent(String(argv["dataset-id"]))}/upload/${encodeURIComponent(String(argv["dataset-version"]))}`, { body: fileContent, headers: { "Content-Type": "application/octet-stream" }, @@ -110,7 +110,7 @@ const command: CommandModule = { requestApi( client, "POST", - `/accounts/${accountId}/dlp/datasets/${encodeURIComponent(String(argv["dataset-id"]))}/upload/${encodeURIComponent(String(argv["version"]))}`, + `/accounts/${accountId}/dlp/datasets/${encodeURIComponent(String(argv["dataset-id"]))}/upload/${encodeURIComponent(String(argv["dataset-version"]))}`, { body: bodyData, headers: { "Content-Type": "application/octet-stream" }, diff --git a/packages/cli/src/commands/_generated/zero-trust/dlp/entries/update.ts b/packages/cli/src/commands/_generated/zero-trust/dlp/entries/update.ts index 0ae92e5d5..cc4a8c6d2 100644 --- a/packages/cli/src/commands/_generated/zero-trust/dlp/entries/update.ts +++ b/packages/cli/src/commands/_generated/zero-trust/dlp/entries/update.ts @@ -13,11 +13,9 @@ import { } from "#lib/auth.js"; import { compactBody, parseBody } from "#lib/body-parser.js"; import { formatDryRun } from "#lib/dry-run.js"; -import { resolveFileToken } from "#lib/input-validation.js"; import { LOCAL_ACCOUNT_ID } from "#lib/local.js"; import { formatOutput } from "#lib/output.js"; import { withProgress } from "#lib/progress.js"; -import { promptForRequiredEnumField } from "#lib/prompt.js"; import { runWithTelemetry } from "#lib/telemetry/index.js"; function builder(yargs: Argv) { @@ -30,35 +28,6 @@ function builder(yargs: Argv) { description: "Entry ID", demandOption: true, }) - .option("description", { - type: "string", - description: "The description field", - }) - .option("name", { type: "string", description: "The name field" }) - .option("pattern-regex", { - type: "string", - description: "The pattern.regex field", - }) - .option("pattern-validation", { - type: "string", - description: "The pattern.validation field", - choices: ["luhn"], - }) - .coerce("pattern-validation", (value) => - resolveFileToken(value, "pattern-validation", "text") - ) - .option("validator-ids", { - type: "string", - array: true, - description: - "Validators this entry should reference, by id, at most 10. Replaces the current set.\n\nOptional, unlike the rest of this body: omitting it leaves the current attachments alone, so a\nclient that predates validators cannot detach them by accident. Send `[]` to detach.", - }) - .option("type", { - type: "string", - description: "The type field", - choices: ["custom", "predefined", "integration"], - }) - .coerce("type", (value) => resolveFileToken(value, "type", "text")) .option("enabled", { type: "boolean", description: "The enabled field" }) .option("dry-run", { type: "boolean", @@ -68,20 +37,6 @@ function builder(yargs: Argv) { .option("body", { type: "string", description: "Update to be applied to the entry.", - }) - .check((argv) => { - const groupSet = ["pattern-regex", "pattern-validation"].some( - (k) => argv[k] !== undefined - ); - if (groupSet) { - const missing = ["pattern-regex"].filter((k) => argv[k] === undefined); - if (missing.length > 0) { - throw new Error( - `${missing.map((m) => "--" + m).join(", ")} ${missing.length === 1 ? "is" : "are"} required when any --pattern-* flag is set` - ); - } - } - return true; }); } @@ -96,7 +51,7 @@ const command: CommandModule = { { command: "zero-trust dlp entries update", classification: { - safeFlags: ["pattern-validation", "type", "enabled", "dry-run"], + safeFlags: ["enabled", "dry-run"], } satisfies ArgClassification, }, argv as Record, @@ -113,26 +68,6 @@ const command: CommandModule = { argv.body !== undefined ? parseBody(argv.body) : compactBody({ - description: resolveFileToken( - argv["description"] as string | undefined, - "description", - "text" - ), - name: resolveFileToken( - argv["name"] as string | undefined, - "name", - "text" - ), - pattern: { - regex: resolveFileToken( - argv["pattern-regex"] as string | undefined, - "pattern-regex", - "text" - ), - validation: argv["pattern-validation"], - }, - validator_ids: argv["validator-ids"], - type: argv["type"], enabled: argv["enabled"], }), }); @@ -154,13 +89,6 @@ const command: CommandModule = { formatOutput(result, { successLabel: `Updated` }); return; } - if (argv["type"] === undefined) { - argv["type"] = await promptForRequiredEnumField( - "type", - "The type field", - ["custom", "predefined", "integration"] as const - ); - } if (argv["enabled"] === undefined) { throw new Error( "--enabled is required (or pass --body with this field set)." @@ -169,26 +97,6 @@ const command: CommandModule = { // Assemble request body from individual flags const bodyData = compactBody({ - description: resolveFileToken( - argv["description"] as string | undefined, - "description", - "text" - ), - name: resolveFileToken( - argv["name"] as string | undefined, - "name", - "text" - ), - pattern: { - regex: resolveFileToken( - argv["pattern-regex"] as string | undefined, - "pattern-regex", - "text" - ), - validation: argv["pattern-validation"], - }, - validator_ids: argv["validator-ids"], - type: argv["type"], enabled: argv["enabled"], }); const result = await withProgress(`Updating`, async () =>