Driftwatch

Cloudflare / Cloudflare API /

Breakingdirection flip: their tools call this safe

type can now return "passkeys"

What changed

Producer-side tools call this additive. It breaks exhaustive switches, strict parsers and generated client enums.

Affects type on access_centrify reachable from 4 operations.

New value: passkeys.

can now return "passkeys"

Who is affected

Code that reads Cloudflare's access_centrify objects, used by 4 Cloudflare operations.

Before and after

WhereBeforeAfter
access_centrify.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_github.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_azureAD.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_facebook.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_google.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_google-apps.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_identity-provider.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_oidc.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_okta.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_onelogin.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_yandex.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_linkedin.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_pingone.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"
access_saml.type"azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "pingone", "saml", "yandex""azureAD", "centrify", "cloudflare", "facebook", "github", "google", "google-apps", "linkedin", "oidc", "okta", "onelogin", "onetimepin", "passkeys", "pingone", "saml", "yandex"

Code that breaks

switch (response.type) {
  // existing branches …
  // no branch for "passkeys"
  default:
    throw new Error("unexpected type");
}

Based on Cloudflare’s published API specification. How severity is decided.