{
  "_id": "6ae63b451e2c7b3a4f52f12f",
  "Package": "shinyOAuth",
  "Title": "OIDC Authentication and OAuth Authorization for 'shiny'\nApplications",
  "Version": "0.7.0",
  "Authors@R": "person(\"Luka\", \"Koning\", email = \"koningluka@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"))",
  "Description": "Provides a simple, configurable framework for 'OpenID\nConnect' (OIDC) authentication and 'OAuth 2.0' authorization in\n'shiny' applications using 'S7' classes. Defines providers,\nclients, and tokens, as well as various supporting functions\nand a 'shiny' module. Features include cross-site request\nforgery (CSRF) protection, state encryption, 'Proof Key for\nCode Exchange' (PKCE) handling, validation of OIDC identity\ntokens (nonces, signatures, claims), automatic user info\nretrieval for OIDC and supported 'OAuth' providers,\nasynchronous flows, and hooks for audit logging.",
  "License": "MIT + file LICENSE",
  "Encoding": "UTF-8",
  "Config/testthat/edition": "3",
  "VignetteBuilder": "knitr",
  "URL": "https://github.com/lukakoning/shinyOAuth,\nhttps://lukakoning.github.io/shinyOAuth/",
  "BugReports": "https://github.com/lukakoning/shinyOAuth/issues",
  "Config/roxygen2/version": "8.1.0",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-10-31 18:57:44 UTC",
    "User": "root"
  },
  "Author": "Luka Koning [aut, cre, cph]",
  "Maintainer": "Luka Koning <koningluka@gmail.com>",
  "Repository": "https://cran.r-universe.dev",
  "Date/Publication": "2026-10-31 17:50:28 UTC",
  "RemoteUrl": "https://github.com/cran/shinyOAuth",
  "RemoteRef": "HEAD",
  "RemoteSha": "22e291c4522ee97dd5c08a2c8171560a041213b3",
  "_user": "cran",
  "_type": "src",
  "_file": "shinyOAuth_0.7.0.tar.gz",
  "_fileid": "https://r2.ropensci.org/de9b1c72cb2a5ed084f9744ff91753f69ba01f768e0caabe33ed966236791587",
  "_filesize": 2038438,
  "_sha256": "de9b1c72cb2a5ed084f9744ff91753f69ba01f768e0caabe33ed966236791587",
  "_expires": "2027-02-08T19:02:27.000Z",
  "_created": "2026-10-31T18:57:44.000Z",
  "_published": "2026-10-31T19:02:29.458Z",
  "_upstream": "https://github.com/cran/shinyOAuth",
  "_status": "success",
  "_maintainer": {
    "name": "Luka Koning",
    "email": "koningluka@gmail.com",
    "login": "lukakoning",
    "description": "",
    "uuid": 102363211
  },
  "_jobs": [
    {
      "job": 124627868525,
      "time": 225,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "13054535189"
    },
    {
      "job": 124627868391,
      "time": 217,
      "config": "linux-release-x86_64",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "13053489999"
    },
    {
      "job": 124626941188,
      "time": 244,
      "config": "source",
      "r": "4.6.1",
      "check": "OK",
      "artifact": "13054460075"
    },
    {
      "job": 124627868427,
      "time": 113,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "13054141143"
    },
    {
      "job": 124627868563,
      "time": 215,
      "config": "windows-devel-x86_64",
      "r": "4.7.0",
      "check": "OK",
      "artifact": "13054091408"
    },
    {
      "job": 124627868385,
      "time": 194,
      "config": "windows-release-x86_64",
      "r": "4.6.2",
      "check": "OK",
      "artifact": "13053504879"
    }
  ],
  "_buildurl": "https://github.com/r-universe/cran/actions/runs/41231625445",
  "_commit": {
    "id": "22e291c4522ee97dd5c08a2c8171560a041213b3",
    "author": "Luka Koning <koningluka@gmail.com>",
    "committer": "cran-robot <csardi.gabor+cran@gmail.com>",
    "message": "version 0.7.0\n",
    "time": 1793469028
  },
  "_distro": "resolute",
  "_host": "GitHub-Actions",
  "_registered": true,
  "_dependencies": [
    {
      "package": "R",
      "version": ">= 4.1.0",
      "role": "Depends"
    },
    {
      "package": "S7",
      "version": ">= 0.2.0",
      "role": "Imports"
    },
    {
      "package": "R6",
      "version": ">= 2.0",
      "role": "Imports"
    },
    {
      "package": "rlang",
      "version": ">= 1.0.0",
      "role": "Imports"
    },
    {
      "package": "shiny",
      "version": ">= 1.7.0",
      "role": "Imports"
    },
    {
      "package": "jsonlite",
      "version": ">= 1.6",
      "role": "Imports"
    },
    {
      "package": "openssl",
      "version": ">= 2.1.2",
      "role": "Imports"
    },
    {
      "package": "httr2",
      "version": ">= 1.1.0",
      "role": "Imports"
    },
    {
      "package": "curl",
      "role": "Imports"
    },
    {
      "package": "urltools",
      "version": ">= 1.7.3",
      "role": "Imports"
    },
    {
      "package": "cachem",
      "version": ">= 1.1.0",
      "role": "Imports"
    },
    {
      "package": "callr",
      "version": ">= 3.7.6",
      "role": "Imports"
    },
    {
      "package": "jose",
      "version": ">= 1.2.0",
      "role": "Imports"
    },
    {
      "package": "lifecycle",
      "version": ">= 1.0.0",
      "role": "Imports"
    },
    {
      "package": "cli",
      "version": ">= 3.0.0",
      "role": "Imports"
    },
    {
      "package": "htmltools",
      "version": ">= 0.5.0",
      "role": "Imports"
    },
    {
      "package": "otel",
      "version": ">= 0.2.0",
      "role": "Imports"
    },
    {
      "package": "bslib",
      "role": "Suggests"
    },
    {
      "package": "ggplot2",
      "role": "Suggests"
    },
    {
      "package": "purrr",
      "role": "Suggests"
    },
    {
      "package": "dplyr",
      "role": "Suggests"
    },
    {
      "package": "testthat",
      "version": ">= 3.2.2",
      "role": "Suggests"
    },
    {
      "package": "DT",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "webfakes",
      "role": "Suggests"
    },
    {
      "package": "promises",
      "version": ">= 1.3.3",
      "role": "Suggests"
    },
    {
      "package": "mirai",
      "version": ">= 2.5.1",
      "role": "Suggests"
    },
    {
      "package": "future",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    },
    {
      "package": "later",
      "role": "Suggests"
    },
    {
      "package": "processx",
      "role": "Suggests"
    },
    {
      "package": "pkgload",
      "role": "Suggests"
    },
    {
      "package": "chromote",
      "role": "Suggests"
    },
    {
      "package": "httpuv",
      "role": "Suggests"
    },
    {
      "package": "sodium",
      "role": "Suggests"
    },
    {
      "package": "shinytest2",
      "role": "Suggests"
    },
    {
      "package": "xml2",
      "role": "Suggests"
    },
    {
      "package": "otelsdk",
      "role": "Suggests"
    }
  ],
  "_owner": "cran",
  "_selfowned": false,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2025-45",
      "n": 1
    },
    {
      "week": "2025-46",
      "n": 1
    },
    {
      "week": "2025-48",
      "n": 1
    },
    {
      "week": "2026-03",
      "n": 1
    },
    {
      "week": "2026-05",
      "n": 1
    },
    {
      "week": "2026-07",
      "n": 1
    },
    {
      "week": "2026-21",
      "n": 1
    },
    {
      "week": "2026-38",
      "n": 2
    },
    {
      "week": "2026-44",
      "n": 1
    }
  ],
  "_tags": [
    {
      "name": "0.1.1",
      "date": "2025-11-09"
    },
    {
      "name": "0.1.3",
      "date": "2025-11-10"
    },
    {
      "name": "0.1.4",
      "date": "2025-11-24"
    },
    {
      "name": "0.2.0",
      "date": "2026-01-13"
    },
    {
      "name": "0.3.0",
      "date": "2026-01-30"
    },
    {
      "name": "0.4.0",
      "date": "2026-02-14"
    },
    {
      "name": "0.5.0",
      "date": "2026-05-23"
    },
    {
      "name": "0.6.0",
      "date": "2026-09-17"
    },
    {
      "name": "0.6.1",
      "date": "2026-09-18"
    },
    {
      "name": "0.7.0",
      "date": "2026-10-31"
    }
  ],
  "_stars": 0,
  "_contributors": [
    {
      "user": "lukakoning",
      "count": 10,
      "uuid": 102363211
    }
  ],
  "_userbio": {
    "uuid": 6899542,
    "type": "organization",
    "name": "cran",
    "followers": 635,
    "description": "Unofficial read-only mirror of all CRAN R packages"
  },
  "_downloads": {
    "count": 650,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/shinyOAuth"
  },
  "_devurl": "https://github.com/lukakoning/shinyoauth",
  "_pkgdown": "https://lukakoning.github.io/shinyOAuth/",
  "_searchresults": 29,
  "_rbuild": "4.6.1",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/manual.pdf",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "extra/shinyOAuth.html",
    "LICENSE"
  ],
  "_homeurl": "https://github.com/lukakoning/shinyoauth",
  "_realowner": "lukakoning",
  "_cranurl": false,
  "_releases": [
    {
      "version": "0.1.1",
      "date": "2025-11-09"
    },
    {
      "version": "0.1.3",
      "date": "2025-11-10"
    },
    {
      "version": "0.1.4",
      "date": "2025-11-24"
    },
    {
      "version": "0.2.0",
      "date": "2026-01-13"
    },
    {
      "version": "0.3.0",
      "date": "2026-01-30"
    },
    {
      "version": "0.4.0",
      "date": "2026-02-16"
    },
    {
      "version": "0.5.0",
      "date": "2026-05-23"
    },
    {
      "version": "0.6.0",
      "date": "2026-09-17"
    },
    {
      "version": "0.6.1",
      "date": "2026-09-18"
    },
    {
      "version": "0.7.0",
      "date": "2026-10-31"
    }
  ],
  "_exports": [
    "check_oauth21",
    "client_bearer_req",
    "custom_cache",
    "error_on_softened",
    "get_userinfo",
    "handle_callback",
    "introspect_token",
    "is_ok_host",
    "oauth_account_owner",
    "oauth_browser_owner",
    "oauth_client",
    "oauth_client_mtls_registration",
    "oauth_client_secret_apple",
    "oauth_connection",
    "oauth_connection_store_memory",
    "oauth_connections",
    "oauth_connections_server",
    "oauth_connections_ui",
    "oauth_form_post_ui",
    "oauth_module_server",
    "oauth_provider",
    "oauth_provider_apple",
    "oauth_provider_auth0",
    "oauth_provider_authentik",
    "oauth_provider_cognito",
    "oauth_provider_github",
    "oauth_provider_gitlab",
    "oauth_provider_globus",
    "oauth_provider_google",
    "oauth_provider_huggingface",
    "oauth_provider_keycloak",
    "oauth_provider_microsoft",
    "oauth_provider_oidc",
    "oauth_provider_oidc_discover",
    "oauth_provider_okta",
    "oauth_provider_orcid",
    "oauth_provider_slack",
    "oauth_provider_spotify",
    "oauth_provider_surfconext",
    "oauth_token_target",
    "oauth_ui",
    "OAuthClient",
    "OAuthProvider",
    "OAuthToken",
    "perform_client_bearer_req",
    "perform_resource_req",
    "prepare_authorization_request",
    "prepare_call",
    "refresh_token",
    "resource_req",
    "revoke_token",
    "smart_client",
    "smart_context",
    "smart_discover",
    "smart_fhir_user",
    "smart_launch_route",
    "smart_patient",
    "use_shinyOAuth"
  ],
  "_help": [
    {
      "page": "check_oauth21",
      "title": "Review an OAuth client configuration before deployment",
      "topics": [
        "check_oauth21"
      ]
    },
    {
      "page": "client_bearer_req",
      "title": "Alias for 'resource_req()'",
      "topics": [
        "client_bearer_req"
      ]
    },
    {
      "page": "custom_cache",
      "title": "Create a custom state store or signing-key cache",
      "topics": [
        "custom_cache"
      ]
    },
    {
      "page": "get_userinfo",
      "title": "Fetch a user's profile (UserInfo)",
      "topics": [
        "get_userinfo"
      ]
    },
    {
      "page": "handle_callback",
      "title": "Validate an OAuth 2.0 callback and retrieve tokens",
      "topics": [
        "handle_callback"
      ]
    },
    {
      "page": "introspect_token",
      "title": "Introspect an OAuth 2.0 token",
      "topics": [
        "introspect_token"
      ]
    },
    {
      "page": "is_ok_host",
      "title": "Check a URL against the package's host policy",
      "topics": [
        "is_ok_host"
      ]
    },
    {
      "page": "oauth_browser_owner",
      "title": "Configure ownership of retained OAuth connections",
      "topics": [
        "oauth_account_owner",
        "oauth_browser_owner",
        "print.OAuthOwnerPolicy"
      ]
    },
    {
      "page": "oauth_client",
      "title": "Configure OAuth/OIDC client credentials and login settings",
      "topics": [
        "oauth_client"
      ]
    },
    {
      "page": "oauth_client_mtls_registration",
      "title": "Prepare client-certificate registration settings (mTLS)",
      "topics": [
        "oauth_client_mtls_registration"
      ]
    },
    {
      "page": "oauth_client_secret_apple",
      "title": "Create a client secret for Sign in with Apple",
      "topics": [
        "oauth_client_secret_apple"
      ]
    },
    {
      "page": "oauth_connection",
      "title": "Wrap an existing reactive token as a connection",
      "topics": [
        "oauth_connection"
      ]
    },
    {
      "page": "oauth_connection_store_memory",
      "title": "Create a process-local store for retained OAuth connections",
      "topics": [
        "oauth_connection_store_memory",
        "print.OAuthConnectionStore"
      ]
    },
    {
      "page": "oauth_connections",
      "title": "Manage several OAuth connections in one Shiny app",
      "topics": [
        "oauth_connections",
        "print.OAuthConnections"
      ]
    },
    {
      "page": "oauth_connections_server",
      "title": "Connect, restore and use several OAuth authorizations in a Shiny session",
      "topics": [
        "oauth_connections_server"
      ]
    },
    {
      "page": "oauth_connections_ui",
      "title": "Handle callbacks and establish the connection owner's browser session",
      "topics": [
        "oauth_connections_ui"
      ]
    },
    {
      "page": "oauth_form_post_ui",
      "title": "Wrap a Shiny UI to enable OAuth 2.0/OIDC form_post callbacks",
      "topics": [
        "oauth_form_post_ui"
      ]
    },
    {
      "page": "oauth_module_server",
      "title": "OAuth 2.0 authorization and OIDC authentication module for Shiny",
      "topics": [
        "oauth_module_server"
      ]
    },
    {
      "page": "oauth_provider",
      "title": "Configure OAuth/OIDC provider endpoints and validation settings",
      "topics": [
        "oauth_provider"
      ]
    },
    {
      "page": "oauth_provider_apple",
      "title": "Create an Apple OAuthProvider",
      "topics": [
        "oauth_provider_apple"
      ]
    },
    {
      "page": "oauth_provider_auth0",
      "title": "Create an Auth0 OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_auth0"
      ]
    },
    {
      "page": "oauth_provider_authentik",
      "title": "Configure sign-in with authentik",
      "topics": [
        "oauth_provider_authentik"
      ]
    },
    {
      "page": "oauth_provider_cognito",
      "title": "Configure sign-in with an Amazon Cognito user pool",
      "topics": [
        "oauth_provider_cognito"
      ]
    },
    {
      "page": "oauth_provider_github",
      "title": "Create a GitHub OAuthProvider",
      "topics": [
        "oauth_provider_github"
      ]
    },
    {
      "page": "oauth_provider_gitlab",
      "title": "Configure sign-in with GitLab",
      "topics": [
        "oauth_provider_gitlab"
      ]
    },
    {
      "page": "oauth_provider_globus",
      "title": "Configure sign-in with Globus Auth",
      "topics": [
        "oauth_provider_globus"
      ]
    },
    {
      "page": "oauth_provider_google",
      "title": "Create a Google OAuthProvider",
      "topics": [
        "oauth_provider_google"
      ]
    },
    {
      "page": "oauth_provider_huggingface",
      "title": "Configure sign-in with Hugging Face",
      "topics": [
        "oauth_provider_huggingface"
      ]
    },
    {
      "page": "oauth_provider_keycloak",
      "title": "Create a Keycloak OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_keycloak"
      ]
    },
    {
      "page": "oauth_provider_microsoft",
      "title": "Create a Microsoft (Entra ID) OAuthProvider",
      "topics": [
        "oauth_provider_microsoft"
      ]
    },
    {
      "page": "oauth_provider_oidc",
      "title": "Create a generic OpenID Connect (OIDC) OAuthProvider",
      "topics": [
        "oauth_provider_oidc"
      ]
    },
    {
      "page": "oauth_provider_oidc_discover",
      "title": "Discover and create an OpenID Connect (OIDC) OAuthProvider",
      "topics": [
        "oauth_provider_oidc_discover"
      ]
    },
    {
      "page": "oauth_provider_okta",
      "title": "Create an Okta OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_okta"
      ]
    },
    {
      "page": "oauth_provider_orcid",
      "title": "Configure researcher sign-in with ORCID",
      "topics": [
        "oauth_provider_orcid"
      ]
    },
    {
      "page": "oauth_provider_slack",
      "title": "Create a Slack OAuthProvider (via OIDC discovery)",
      "topics": [
        "oauth_provider_slack"
      ]
    },
    {
      "page": "oauth_provider_spotify",
      "title": "Create a Spotify OAuthProvider",
      "topics": [
        "oauth_provider_spotify"
      ]
    },
    {
      "page": "oauth_provider_surfconext",
      "title": "Configure institutional sign-in with SURFconext",
      "topics": [
        "oauth_provider_surfconext"
      ]
    },
    {
      "page": "oauth_token_target",
      "title": "Declare an API token target",
      "topics": [
        "oauth_token_target"
      ]
    },
    {
      "page": "oauth_ui",
      "title": "Set up a Shiny UI for shinyOAuth",
      "topics": [
        "oauth_ui"
      ]
    },
    {
      "page": "OAuthClient",
      "title": "OAuthClient S7 class",
      "topics": [
        "OAuthClient"
      ]
    },
    {
      "page": "OAuthConnection",
      "title": "OAuthConnection R6 class",
      "topics": [
        "OAuthConnection"
      ]
    },
    {
      "page": "OAuthProvider",
      "title": "OAuthProvider S7 class",
      "topics": [
        "OAuthProvider"
      ]
    },
    {
      "page": "OAuthToken",
      "title": "OAuthToken S7 class",
      "topics": [
        "OAuthToken"
      ]
    },
    {
      "page": "perform_client_bearer_req",
      "title": "Alias for 'perform_resource_req()'",
      "topics": [
        "perform_client_bearer_req"
      ]
    },
    {
      "page": "perform_resource_req",
      "title": "Call an API with an access token",
      "topics": [
        "perform_resource_req"
      ]
    },
    {
      "page": "prepare_authorization_request",
      "title": "Prepare a browser authorization request using GET or POST",
      "topics": [
        "prepare_authorization_request"
      ]
    },
    {
      "page": "prepare_call",
      "title": "Prepare an OAuth 2.0 authorization request and build its URL",
      "topics": [
        "prepare_call"
      ]
    },
    {
      "page": "refresh_token",
      "title": "Refresh an OAuth 2.0 token",
      "topics": [
        "refresh_token"
      ]
    },
    {
      "page": "resource_req",
      "title": "Prepare an API request with an access token",
      "topics": [
        "resource_req"
      ]
    },
    {
      "page": "revoke_token",
      "title": "Revoke an OAuth 2.0 token",
      "topics": [
        "revoke_token"
      ]
    },
    {
      "page": "smart_client",
      "title": "Configure a SMART on FHIR app registration",
      "topics": [
        "smart_client"
      ]
    },
    {
      "page": "smart_context",
      "title": "Read a connection's current SMART context",
      "topics": [
        "smart_context",
        "smart_fhir_user",
        "smart_patient"
      ]
    },
    {
      "page": "smart_discover",
      "title": "Discover SMART on FHIR server metadata",
      "topics": [
        "smart_discover"
      ]
    },
    {
      "page": "smart_launch_route",
      "title": "Register a SMART EHR launch entry route",
      "topics": [
        "smart_launch_route"
      ]
    },
    {
      "page": "use_shinyOAuth",
      "title": "Add JavaScript dependency to the UI of a Shiny app",
      "topics": [
        "use_shinyOAuth"
      ]
    }
  ],
  "_readme": "https://github.com/cran/shinyOAuth/raw/HEAD/README.md",
  "_rundeps": [
    "askpass",
    "base64enc",
    "bslib",
    "cachem",
    "callr",
    "cli",
    "commonmark",
    "curl",
    "digest",
    "fastmap",
    "fontawesome",
    "fs",
    "glue",
    "htmltools",
    "httpuv",
    "httr2",
    "jose",
    "jquerylib",
    "jsonlite",
    "later",
    "lifecycle",
    "magrittr",
    "memoise",
    "mime",
    "openssl",
    "otel",
    "processx",
    "promises",
    "ps",
    "R6",
    "rappdirs",
    "Rcpp",
    "rlang",
    "S7",
    "sass",
    "shiny",
    "sourcetools",
    "sys",
    "triebeard",
    "urltools",
    "vctrs",
    "withr",
    "xtable"
  ],
  "_vignettes": [
    {
      "source": "advanced-security.Rmd",
      "filename": "advanced-security.html",
      "title": "Advanced security configuration",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Provider metadata and OIDC discovery",
        "JWT client authentication",
        "Mutual TLS (mTLS)",
        "Pushed authorization requests (PAR)",
        "JWT-secured authorization request (JAR)",
        "Form Post response mode",
        "JWT-secured authorization response mode (JARM)",
        "Demonstrating proof-of-possession (DPoP)",
        "Browser binding and deployment boundary",
        "Endpoint-specific authentication",
        "Certificate binding and platform requirements",
        "Testing signed-request enforcement",
        "Request Objects published by the Shiny app",
        "Deployment behind an HTTPS proxy",
        "Encrypted authorization responses",
        "Token binding requirements and validation",
        "DPoP in API requests",
        "Policy identity across callbacks and retained credentials",
        "Issuer comparison and transport policy",
        "Callback pages and application scripts",
        "Provider key-set validation",
        "Trusted ID-token audiences",
        "Signature and encryption support"
      ],
      "created": "2026-09-17 08:50:02",
      "modified": "2026-10-31 17:50:28",
      "commits": 2
    },
    {
      "source": "audit-logging.Rmd",
      "filename": "audit-logging.html",
      "title": "Audit logging and hooks",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Receiving audit events",
        "Authentication outcomes",
        "Event structure",
        "HTTP context and redaction",
        "Audit events from asynchronous workers",
        "Digest keys across R processes",
        "Event catalog",
        "Login and callbacks",
        "Tokens and profiles",
        "Sessions and saved connections",
        "Error records"
      ],
      "created": "2025-11-09 16:10:02",
      "modified": "2026-10-31 17:50:28",
      "commits": 7
    },
    {
      "source": "authentication-flow.Rmd",
      "filename": "authentication-flow.html",
      "title": "Authentication flow",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Starting login and binding it to the browser",
        "Preparing the authorization request",
        "Pending state and expiry",
        "Authorization at the provider",
        "Receiving and validating the callback",
        "Transaction checks",
        "Several authorization servers",
        "Exchanging the code for tokens",
        "Validating identity and profile information",
        "ID token checks",
        "Introspection and UserInfo",
        "Publishing authentication state",
        "Asynchronous execution",
        "Refresh, reauthentication and logout",
        "Token refresh",
        "Expiry and maximum login age",
        "Logout and revocation",
        "Optional protocol extensions",
        "Audit trail"
      ],
      "created": "2025-11-09 16:10:02",
      "modified": "2026-10-31 17:50:28",
      "commits": 8
    },
    {
      "source": "example-spotify.Rmd",
      "filename": "example-spotify.html",
      "title": "Example: Spotify login to display listening data",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Spotify app registration",
        "Shiny app example",
        "API requests and scopes",
        "Full dashboard example"
      ],
      "created": "2025-11-09 16:10:02",
      "modified": "2026-10-31 17:50:28",
      "commits": 7
    },
    {
      "source": "multiple-authorizations.Rmd",
      "filename": "multiple-authorizations.html",
      "title": "Keep and use multiple OAuth authorizations",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Why keep several authorizations?",
        "Client configuration and connections",
        "Register two clients",
        "1. Configure clients outside server()",
        "2. Keep authorizations when the browser returns",
        "3. Select a connection and make a request",
        "Requests, permissions and refresh",
        "Disconnecting a service",
        "Deployment notes",
        "Keep an ordinary OIDC login alongside SMART connections"
      ],
      "created": "2026-09-17 08:50:02",
      "modified": "2026-10-31 17:50:28",
      "commits": 2
    },
    {
      "source": "opentelemetry.Rmd",
      "filename": "opentelemetry.html",
      "title": "OpenTelemetry logs and traces",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Exporter configuration",
        "Traces and event correlation",
        "Logging and tracing options",
        "Protecting diagnostic data",
        "Authorization metadata privacy",
        "Asynchronous workers",
        "Advanced diagnostic fields",
        "Error attributes and redaction",
        "Span catalog"
      ],
      "created": "2026-05-23 07:20:02",
      "modified": "2026-10-31 17:50:28",
      "commits": 4
    },
    {
      "source": "package-options.Rmd",
      "filename": "package-options.html",
      "title": "Package options reference",
      "engine": "knitr::rmarkdown",
      "headings": [
        "What package options are for",
        "Set an option at app startup",
        "Logging",
        "HTTP settings (timeout, retries, user agent)",
        "Async timeout (mirai)",
        "Async condition replay",
        "Token lifetime fallback",
        "Validation and URL policy",
        "State store",
        "Size caps",
        "State envelope",
        "Callback query",
        "Configuration assessments",
        "Local debugging",
        "Advanced transport constraints",
        "Advanced parameter overrides"
      ],
      "created": "2026-09-17 08:50:02",
      "modified": "2026-10-31 17:50:28",
      "commits": 3
    },
    {
      "source": "usage.Rmd",
      "filename": "usage.html",
      "title": "Usage",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Provider, client, and token objects",
        "GitHub app registration",
        "Minimal Shiny module example",
        "Authentication state and user information",
        "Manual login and logout buttons",
        "Authenticated API requests",
        "Asynchronous execution",
        "Token expiry and session length",
        "Provider configuration and OIDC discovery",
        "Deployment",
        "Callback and browser behavior",
        "Advanced deployment",
        "Posit Connect and Connect Cloud",
        "Multiple R processes",
        "Local Keycloak development",
        "Further configuration"
      ],
      "created": "2025-11-09 16:10:02",
      "modified": "2026-10-31 17:50:28",
      "commits": 9
    },
    {
      "source": "token-targets.Rmd",
      "filename": "token-targets.html",
      "title": "Use one login for several APIs",
      "engine": "knitr::rmarkdown",
      "headings": [
        "One login, different API tokens",
        "Configure two APIs",
        "Choose a token when making a call",
        "Refresh and sign in again",
        "Microsoft example",
        "Advanced: provider support and declaration limits",
        "Identity and refresh-consent scopes",
        "Advanced: Microsoft permissions and consent",
        "Resource identifiers and scope names",
        "Static permissions and unusual short names",
        "Advanced: concurrent refreshes and failures",
        "Request customization and background work"
      ],
      "created": "2026-10-31 17:50:28",
      "modified": "2026-10-31 17:50:28",
      "commits": 1
    },
    {
      "source": "smart-on-fhir.Rmd",
      "filename": "smart-on-fhir.html",
      "title": "Use SMART on FHIR from Shiny",
      "engine": "knitr::rmarkdown",
      "headings": [
        "FHIR and SMART on FHIR",
        "Before running the example",
        "1. Discover the server and configure the client",
        "2. Configure retained connections",
        "3. Authorize and fetch the patient",
        "Search with the same connection",
        "Patient context and user identity are different",
        "Start from an EHR instead",
        "More than one hospital",
        "Other registration and refresh options",
        "Granular permissions and refresh"
      ],
      "created": "2026-09-17 08:50:02",
      "modified": "2026-10-31 17:50:28",
      "commits": 2
    },
    {
      "source": "external-integrations.Rmd",
      "filename": "external-integrations.html",
      "title": "Use your Shiny login with other R packages",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Reuse a login in another package",
        "A complete Shiny example",
        "Refresh and signing in again",
        "SDK token callbacks and database drivers",
        "Several accounts and optional profile retrieval",
        "Advanced: connection lifetime and permissions",
        "Reducing permissions and replacing a login",
        "Advanced: asynchronous token acquisition",
        "Handling token errors",
        "Advanced: background tasks and saved results"
      ],
      "created": "2026-10-31 17:50:28",
      "modified": "2026-10-31 17:50:28",
      "commits": 1
    }
  ],
  "_score": 5.157003196832525,
  "_indexed": false,
  "_nocasepkg": "shinyoauth",
  "_universes": [
    "cran"
  ],
  "_indexurl": "https://lukakoning.r-universe.dev/shinyOAuth",
  "_previous": "0.6.1",
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.7.0",
      "date": "2026-10-31T19:00:19.000Z",
      "distro": "resolute",
      "commit": "22e291c4522ee97dd5c08a2c8171560a041213b3",
      "fileid": "https://r2.ropensci.org/031ef38426dc62d1726905bc7b4b20f78ae2d8e57d5de42841ad7851e643f7c3",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/41231625445"
    },
    {
      "r": "4.6.1",
      "os": "linux",
      "version": "0.7.0",
      "date": "2026-10-31T19:00:19.000Z",
      "distro": "resolute",
      "commit": "22e291c4522ee97dd5c08a2c8171560a041213b3",
      "fileid": "https://r2.ropensci.org/e6bc28d98118f89ff492116ed50ee92bbe688fcb34daa0a481101987aaf114aa",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/41231625445"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.7.0",
      "date": "2026-10-31T19:00:18.000Z",
      "commit": "22e291c4522ee97dd5c08a2c8171560a041213b3",
      "fileid": "https://r2.ropensci.org/f11ede947f2a084c5aabf6a95d255032298fa3b810c3e4a37561ed416c801d39",
      "status": "success",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/41231625445"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.7.0",
      "date": "2026-10-31T18:59:32.000Z",
      "commit": "22e291c4522ee97dd5c08a2c8171560a041213b3",
      "fileid": "https://r2.ropensci.org/6eeb44de0ba0832593f2917679eed226c827509745e1b32adc13183cc846e1c9",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/41231625445"
    },
    {
      "r": "4.6.2",
      "os": "win",
      "version": "0.7.0",
      "date": "2026-10-31T18:59:20.000Z",
      "commit": "22e291c4522ee97dd5c08a2c8171560a041213b3",
      "fileid": "https://r2.ropensci.org/84cfc0d52ba02b3c8d1b4f8c4586cf008c1ab5d480a767e27b9d415f80c8a876",
      "status": "success",
      "check": "OK",
      "buildurl": "https://github.com/r-universe/cran/actions/runs/41231625445"
    }
  ]
}