{
  "name": "Login + OIDC Code w/ PKCE (Demo)",
  "description": "Illustrative PingOne DaVinci flow: identifier-first login, HTML form, OIDC auth code with PKCE, consent, and token exchange.",
  "nodes": [
    {
      "type": "identifier-first",
      "id": "idn1",
      "outputs": {
        "next": "html1"
      }
    },
    {
      "type": "html-form",
      "id": "html1",
      "config": {
        "fields": [
          "username",
          "password"
        ]
      },
      "outputs": {
        "success": "authn1"
      }
    },
    {
      "type": "authenticate",
      "id": "authn1",
      "config": {
        "directory": "demo"
      },
      "outputs": {
        "success": "consent1",
        "failure": "html1"
      }
    },
    {
      "type": "consent",
      "id": "consent1",
      "config": {
        "scopes": [
          "openid",
          "profile",
          "email"
        ]
      },
      "outputs": {
        "granted": "oidc1",
        "denied": "html1"
      }
    },
    {
      "type": "oidc-authz-code",
      "id": "oidc1",
      "config": {
        "pkce": "S256_REQUIRED"
      },
      "outputs": {
        "success": "token1"
      }
    },
    {
      "type": "token-exchange",
      "id": "token1",
      "config": {
        "grant": "authorization_code"
      },
      "outputs": {
        "success": "end"
      }
    }
  ]
}