Driftwatch

Cloudflare / Cloudflare API /

Breakingdirection flip: their tools call this safe

type can now return "duo"

What changed

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

Affects type on access_azureAD reachable from 4 operations.

New value: duo.

can now return "duo"

Who is affected

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

Before and after

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

Code that breaks

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

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