{
  "_id": "6a1cb1491d7bb097a0a3382b",
  "Package": "shinyOAuth",
  "Title": "Provider-Agnostic OAuth Authentication for 'shiny' Applications",
  "Version": "0.5.0.9000",
  "Authors@R": "person(\"Luka\", \"Koning\", email = \"koningluka@gmail.com\", role = c(\"aut\", \"cre\", \"cph\"))",
  "Description": "Provides a simple, configurable, provider-agnostic 'OAuth\n2.0' and 'OpenID Connect' (OIDC) authentication framework for\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, asynchronous flows, and hooks for audit logging.",
  "License": "MIT + file LICENSE",
  "Encoding": "UTF-8",
  "Roxygen": "list(markdown = TRUE)",
  "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.0.0",
  "Config/pak/sysreqs": "cmake make libuv1-dev libssl-dev zlib1g-dev",
  "Repository": "https://lukakoning.r-universe.dev",
  "Date/Publication": "2026-05-31 21:22:13 UTC",
  "RemoteUrl": "https://github.com/lukakoning/shinyoauth",
  "RemoteRef": "HEAD",
  "RemoteSha": "42cd3523e3d7fe35116e1509327e0388fa86b906",
  "NeedsCompilation": "no",
  "Packaged": {
    "Date": "2026-05-31 22:02:17 UTC",
    "User": "root"
  },
  "Author": "Luka Koning [aut, cre, cph]",
  "Maintainer": "Luka Koning <koningluka@gmail.com>",
  "MD5sum": "fff82d27d3867716c8d084b657266ca3",
  "_user": "lukakoning",
  "_type": "src",
  "_file": "shinyOAuth_0.5.0.9000.tar.gz",
  "_fileid": "2540c6799e47101e9e99036ad10df8334d30505fba337b76316795d724019fb2",
  "_filesize": 1224223,
  "_sha256": "2540c6799e47101e9e99036ad10df8334d30505fba337b76316795d724019fb2",
  "_created": "2026-05-31T22:02:17.000Z",
  "_published": "2026-05-31T22:08:09.870Z",
  "_distro": "noble",
  "_jobs": [
    {
      "job": 78760582353,
      "time": 288,
      "config": "linux-devel-x86_64",
      "r": "4.7.0",
      "check": "NOTE",
      "artifact": "7320473404"
    },
    {
      "job": 78760582342,
      "time": 310,
      "config": "linux-release-x86_64",
      "r": "4.6.0",
      "check": "NOTE",
      "artifact": "7320475453"
    },
    {
      "job": 78760582333,
      "time": 185,
      "config": "macos-oldrel-arm64",
      "r": "4.5.3",
      "check": "NOTE",
      "artifact": "7320462899"
    },
    {
      "job": 78760582341,
      "time": 153,
      "config": "macos-release-arm64",
      "r": "4.6.0",
      "check": "NOTE",
      "artifact": "7320459778"
    },
    {
      "job": 78760379502,
      "time": 198,
      "config": "source",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7320444398"
    },
    {
      "job": 78760582343,
      "time": 133,
      "config": "wasm-release",
      "r": "4.6.0",
      "check": "OK",
      "artifact": "7320457827"
    },
    {
      "job": 78760582347,
      "time": 274,
      "config": "windows-devel",
      "r": "4.7.0",
      "check": "NOTE",
      "artifact": "7320471742"
    },
    {
      "job": 78760582358,
      "time": 223,
      "config": "windows-oldrel",
      "r": "4.5.3",
      "check": "NOTE",
      "artifact": "7320466882"
    },
    {
      "job": 78760582352,
      "time": 248,
      "config": "windows-release",
      "r": "4.6.0",
      "check": "NOTE",
      "artifact": "7320469413"
    }
  ],
  "_buildurl": "https://github.com/r-universe/lukakoning/actions/runs/26725667113",
  "_status": "success",
  "_host": "GitHub-Actions",
  "_upstream": "https://github.com/lukakoning/shinyoauth",
  "_commit": {
    "id": "42cd3523e3d7fe35116e1509327e0388fa86b906",
    "author": "lukakoning <koningluka@gmail.com>",
    "committer": "lukakoning <koningluka@gmail.com>",
    "message": "Update NEWS.md\n",
    "time": 1780262533
  },
  "_maintainer": {
    "name": "Luka Koning",
    "email": "koningluka@gmail.com",
    "login": "lukakoning",
    "description": "",
    "uuid": 102363211
  },
  "_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.0",
      "role": "Imports"
    },
    {
      "package": "openssl",
      "version": ">= 2.0.0",
      "role": "Imports"
    },
    {
      "package": "httr2",
      "version": ">= 1.1.0",
      "role": "Imports"
    },
    {
      "package": "urltools",
      "version": ">= 1.7.3",
      "role": "Imports"
    },
    {
      "package": "cachem",
      "version": ">= 1.1.0",
      "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": "testthat",
      "version": ">= 3.0.0",
      "role": "Suggests"
    },
    {
      "package": "knitr",
      "role": "Suggests"
    },
    {
      "package": "rmarkdown",
      "role": "Suggests"
    },
    {
      "package": "webfakes",
      "role": "Suggests"
    },
    {
      "package": "promises",
      "role": "Suggests"
    },
    {
      "package": "mirai",
      "version": ">= 2.0.0",
      "role": "Suggests"
    },
    {
      "package": "future",
      "role": "Suggests"
    },
    {
      "package": "withr",
      "role": "Suggests"
    },
    {
      "package": "later",
      "role": "Suggests"
    },
    {
      "package": "callr",
      "role": "Suggests"
    },
    {
      "package": "chromote",
      "role": "Suggests"
    },
    {
      "package": "sodium",
      "role": "Suggests"
    },
    {
      "package": "shinytest2",
      "role": "Suggests"
    },
    {
      "package": "xml2",
      "role": "Suggests"
    },
    {
      "package": "otelsdk",
      "role": "Suggests"
    }
  ],
  "_owner": "lukakoning",
  "_selfowned": true,
  "_usedby": 0,
  "_updates": [
    {
      "week": "2025-44",
      "n": 28
    },
    {
      "week": "2025-45",
      "n": 11
    },
    {
      "week": "2025-46",
      "n": 12
    },
    {
      "week": "2025-47",
      "n": 2
    },
    {
      "week": "2025-48",
      "n": 6
    },
    {
      "week": "2025-51",
      "n": 3
    },
    {
      "week": "2025-52",
      "n": 1
    },
    {
      "week": "2026-01",
      "n": 95
    },
    {
      "week": "2026-02",
      "n": 5
    },
    {
      "week": "2026-03",
      "n": 8
    },
    {
      "week": "2026-05",
      "n": 17
    },
    {
      "week": "2026-06",
      "n": 23
    },
    {
      "week": "2026-07",
      "n": 80
    },
    {
      "week": "2026-10",
      "n": 7
    },
    {
      "week": "2026-17",
      "n": 38
    },
    {
      "week": "2026-18",
      "n": 87
    },
    {
      "week": "2026-19",
      "n": 90
    },
    {
      "week": "2026-20",
      "n": 117
    },
    {
      "week": "2026-21",
      "n": 43
    },
    {
      "week": "2026-22",
      "n": 32
    }
  ],
  "_tags": [
    {
      "name": "v0.1.1",
      "date": "2025-11-04"
    },
    {
      "name": "v0.1.3",
      "date": "2025-11-10"
    },
    {
      "name": "v0.1.4",
      "date": "2025-11-24"
    },
    {
      "name": "v0.2.0",
      "date": "2026-01-12"
    },
    {
      "name": "v0.3.0",
      "date": "2026-01-30"
    },
    {
      "name": "v0.4.0",
      "date": "2026-02-14"
    },
    {
      "name": "v0.5.0",
      "date": "2026-05-23"
    }
  ],
  "_stars": 28,
  "_contributors": [
    {
      "user": "lukakoning",
      "count": 705,
      "uuid": 102363211
    }
  ],
  "_userbio": {
    "uuid": 102363211,
    "type": "user",
    "name": "lukakoning"
  },
  "_downloads": {
    "count": 323,
    "source": "https://cranlogs.r-pkg.org/downloads/total/last-month/shinyOAuth"
  },
  "_devurl": "https://github.com/lukakoning/shinyoauth",
  "_pkgdown": "https://lukakoning.github.io/shinyOAuth/",
  "_searchresults": 22,
  "_rbuild": "4.6.0",
  "_assets": [
    "extra/citation.cff",
    "extra/citation.html",
    "extra/citation.json",
    "extra/citation.txt",
    "extra/contents.json",
    "extra/NEWS.html",
    "extra/NEWS.txt",
    "extra/readme.html",
    "extra/readme.md",
    "extra/shinyOAuth.html",
    "manual.pdf"
  ],
  "_homeurl": "https://github.com/lukakoning/shinyoauth",
  "_realowner": "lukakoning",
  "_cranurl": true,
  "_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"
    }
  ],
  "_exports": [
    "client_bearer_req",
    "custom_cache",
    "error_on_softened",
    "get_userinfo",
    "handle_callback",
    "introspect_token",
    "is_ok_host",
    "oauth_client",
    "oauth_client_mtls_registration",
    "oauth_client_secret_apple",
    "oauth_form_post_ui",
    "oauth_module_server",
    "oauth_provider",
    "oauth_provider_apple",
    "oauth_provider_auth0",
    "oauth_provider_github",
    "oauth_provider_google",
    "oauth_provider_keycloak",
    "oauth_provider_microsoft",
    "oauth_provider_oidc",
    "oauth_provider_oidc_discover",
    "oauth_provider_okta",
    "oauth_provider_slack",
    "oauth_provider_spotify",
    "OAuthClient",
    "OAuthProvider",
    "OAuthToken",
    "perform_client_bearer_req",
    "perform_resource_req",
    "prepare_call",
    "refresh_token",
    "resource_req",
    "revoke_token",
    "use_shinyOAuth"
  ],
  "_help": [
    {
      "page": "client_bearer_req",
      "title": "Alias for 'resource_req()'",
      "topics": [
        "client_bearer_req"
      ]
    },
    {
      "page": "custom_cache",
      "title": "Create a custom cache backend (cachem-like)",
      "topics": [
        "custom_cache"
      ]
    },
    {
      "page": "get_userinfo",
      "title": "Get user info from OAuth 2.0 provider",
      "topics": [
        "get_userinfo"
      ]
    },
    {
      "page": "handle_callback",
      "title": "Handle OAuth 2.0 callback: verify state, swap code for token, verify token",
      "topics": [
        "handle_callback"
      ]
    },
    {
      "page": "introspect_token",
      "title": "Introspect an OAuth 2.0 token",
      "topics": [
        "introspect_token"
      ]
    },
    {
      "page": "is_ok_host",
      "title": "Check if URL(s) are HTTPS and/or in allowed hosts lists",
      "topics": [
        "is_ok_host"
      ]
    },
    {
      "page": "oauth_client",
      "title": "Create generic OAuthClient",
      "topics": [
        "oauth_client"
      ]
    },
    {
      "page": "oauth_client_mtls_registration",
      "title": "Build RFC 8705 mTLS registration metadata",
      "topics": [
        "oauth_client_mtls_registration"
      ]
    },
    {
      "page": "oauth_client_secret_apple",
      "title": "Create an Apple client secret JWT",
      "topics": [
        "oauth_client_secret_apple"
      ]
    },
    {
      "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 & OIDC authentication module for Shiny applications",
      "topics": [
        "oauth_module_server"
      ]
    },
    {
      "page": "oauth_provider",
      "title": "Create generic OAuthProvider",
      "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_github",
      "title": "Create a GitHub OAuthProvider",
      "topics": [
        "oauth_provider_github"
      ]
    },
    {
      "page": "oauth_provider_google",
      "title": "Create a Google OAuthProvider",
      "topics": [
        "oauth_provider_google"
      ]
    },
    {
      "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_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": "OAuthClient",
      "title": "OAuthClient S7 class",
      "topics": [
        "OAuthClient"
      ]
    },
    {
      "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": "Build and perform an authenticated httr2 request for a protected resource",
      "topics": [
        "perform_resource_req"
      ]
    },
    {
      "page": "prepare_call",
      "title": "Prepare a OAuth 2.0 authorization call and build an authorization URL",
      "topics": [
        "prepare_call"
      ]
    },
    {
      "page": "refresh_token",
      "title": "Refresh an OAuth 2.0 token",
      "topics": [
        "refresh_token"
      ]
    },
    {
      "page": "resource_req",
      "title": "Build an authenticated httr2 request for a protected resource",
      "topics": [
        "resource_req"
      ]
    },
    {
      "page": "revoke_token",
      "title": "Revoke an OAuth 2.0 token",
      "topics": [
        "revoke_token"
      ]
    },
    {
      "page": "use_shinyOAuth",
      "title": "Add JavaScript dependency to the UI of a Shiny app",
      "topics": [
        "use_shinyOAuth"
      ]
    }
  ],
  "_readme": "https://github.com/lukakoning/shinyoauth/raw/HEAD/README.md",
  "_rundeps": [
    "askpass",
    "base64enc",
    "bslib",
    "cachem",
    "cli",
    "commonmark",
    "curl",
    "digest",
    "fastmap",
    "fontawesome",
    "fs",
    "glue",
    "htmltools",
    "httpuv",
    "httr2",
    "jose",
    "jquerylib",
    "jsonlite",
    "later",
    "lifecycle",
    "magrittr",
    "memoise",
    "mime",
    "openssl",
    "otel",
    "promises",
    "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",
        "Start with discovery when possible",
        "Mutual TLS (mTLS)",
        "JWT-secured authorization request (JAR)",
        "Pushed authorization requests (PAR)",
        "Form Post response mode",
        "JWT-secured authorization response mode (JARM)",
        "Demonstrating proof-of-possession (DPoP)"
      ],
      "created": "2026-05-28 20:09:04",
      "modified": "2026-05-31 20:34:32",
      "commits": 3
    },
    {
      "source": "audit-logging.Rmd",
      "filename": "audit-logging.html",
      "title": "Audit logging and hooks",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Receiving audit events",
        "Event structure",
        "HTTP context sanitization",
        "Excluding HTTP context entirely",
        "Audit events from async workers (mirai daemons)",
        "Digest fields and keying",
        "Event catalog",
        "Authorization redirect issuance",
        "Event: audit_redirect_issued",
        "Callback query rejected",
        "Event: audit_callback_query_rejected",
        "Callback issuer validation",
        "Event: audit_callback_iss_missing",
        "Event: audit_callback_iss_mismatch",
        "Event: audit_callback_iss_validation_failed",
        "Callback received",
        "Event: audit_callback_received",
        "Callback validation",
        "Event: audit_callback_validation_success",
        "Event: audit_callback_validation_failed",
        "State store access",
        "Event: audit_state_store_lookup_failed",
        "Event: audit_state_store_removal_failed",
        "Token exchange",
        "Event: audit_token_exchange",
        "Event: audit_token_exchange_error",
        "Token introspection",
        "Event: audit_token_introspection",
        "Login result",
        "Event: audit_login_success",
        "Event: audit_login_failed",
        "Logout and session clears",
        "Event: audit_logout",
        "Event: audit_session_cleared",
        "Token revocation",
        "Event: audit_token_revocation",
        "Refresh failures while keeping the session (indefinite sessions)",
        "Event: audit_refresh_failed_but_kept_session",
        "Browser cookie/WebCrypto error",
        "Event: audit_browser_cookie_error",
        "Invalid browser token",
        "Event: audit_invalid_browser_token",
        "Token refresh",
        "Event: audit_token_refresh",
        "Userinfo fetch",
        "Event: audit_userinfo",
        "State parsing failures",
        "Event: audit_state_parse_failure",
        "Error response state consumption",
        "Event: audit_error_state_consumed",
        "Event: audit_error_state_consumption_failed",
        "Module/session lifecycle",
        "Event: audit_session_started",
        "Event: audit_session_ended",
        "Event: audit_session_ended_revoke",
        "Authentication state changes",
        "Event: audit_authenticated_changed",
        "Error events",
        "Event: error",
        "Event: http_error",
        "Event: transport_error"
      ],
      "created": "2025-10-27 18:25:53",
      "modified": "2026-05-31 20:34:32",
      "commits": 33
    },
    {
      "source": "authentication-flow.Rmd",
      "filename": "authentication-flow.html",
      "title": "Authentication flow",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "What happens during the authentication flow?",
        "1. First page load: set a browser token",
        "2. Decide whether to start login",
        "3. Build the authorization URL (prepare_call())",
        "4. App redirects to the provider",
        "5. User authenticates and authorizes",
        "6. Provider redirects user back to the app",
        "What changes with response_mode = \"form_post\"?",
        "7. Callback processing & state verification (oauth_module_server())",
        "8. Exchange authorization code for tokens",
        "What changes when mTLS is enabled (RFC 8705)",
        "What changes when DPoP is enabled (RFC 9449)",
        "9. Validate ID token (OIDC only)",
        "10. Fetch userinfo (optional)",
        "11. Build the OAuthToken object",
        "12. Token introspection (optional)",
        "13. Mark session as authenticated",
        "14. Clean URL & tidy UI; clear browser token",
        "15. Post-flow session management",
        "Refresh behavior (refresh_token())",
        "16. Logout and token revocation"
      ],
      "created": "2025-10-27 18:25:53",
      "modified": "2026-05-28 17:48:56",
      "commits": 60
    },
    {
      "source": "example-spotify.Rmd",
      "filename": "example-spotify.html",
      "title": "Example: Spotify login to display listening data",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Code"
      ],
      "created": "2025-10-27 18:25:53",
      "modified": "2026-05-14 21:46:43",
      "commits": 10
    },
    {
      "source": "opentelemetry.Rmd",
      "filename": "opentelemetry.html",
      "title": "OpenTelemetry",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Logs",
        "Traces",
        "Span catalog",
        "Span: shinyOAuth.module.init",
        "Span: shinyOAuth.login.request",
        "Span: shinyOAuth.login.par",
        "Span: shinyOAuth.login.par.http",
        "Span: shinyOAuth.callback",
        "Span: shinyOAuth.form_post",
        "Span: shinyOAuth.form_post.bridge",
        "Span: shinyOAuth.callback.validate",
        "Span: shinyOAuth.callback.worker",
        "Span: shinyOAuth.token.exchange",
        "Span: shinyOAuth.token.exchange.http",
        "Span: shinyOAuth.token.verify",
        "Span: shinyOAuth.userinfo",
        "Span: shinyOAuth.userinfo.http",
        "Span: shinyOAuth.refresh",
        "Span: shinyOAuth.refresh.worker",
        "Span: shinyOAuth.logout",
        "Span: shinyOAuth.session.end.revoke",
        "Span: shinyOAuth.token.revoke",
        "Span: shinyOAuth.token.revoke.http",
        "Span: shinyOAuth.token.revoke.worker",
        "Span: shinyOAuth.token.introspect",
        "Span: shinyOAuth.token.introspect.http",
        "Span: shinyOAuth.token.introspect.worker"
      ],
      "created": "2026-04-25 14:04:58",
      "modified": "2026-05-27 20:46:57",
      "commits": 9
    },
    {
      "source": "usage.Rmd",
      "filename": "usage.html",
      "title": "Usage",
      "engine": "knitr::rmarkdown",
      "headings": [
        "Overview",
        "Minimal Shiny module example",
        "Manual login button variant",
        "Making authenticated API calls",
        "Async mode to keep UI responsive",
        "'mirai' async backend (recommended)",
        "'future' async backend",
        "Logout",
        "Using response_mode = \"form_post\"",
        "Deploying on Posit Connect Cloud (avoiding embedded deployment)",
        "Global options",
        "Observability/logging",
        "Networking/security",
        "Extra parameter overrides",
        "Async timeout (mirai)",
        "Async condition replay",
        "Token lifetime fallback",
        "HTTP settings (timeout, retries, user agent)",
        "State store",
        "Size caps",
        "State envelope",
        "Callback query",
        "Development/debugging",
        "Browser cookie & preventing XSS",
        "Multi‑process deployments: share state store, key, and policy",
        "Security checklist"
      ],
      "created": "2025-10-27 18:25:53",
      "modified": "2026-05-29 10:17:31",
      "commits": 72
    }
  ],
  "_score": 7.567731962548069,
  "_indexed": true,
  "_nocasepkg": "shinyoauth",
  "_universes": [
    "lukakoning"
  ],
  "_binaries": [
    {
      "r": "4.7.0",
      "os": "linux",
      "version": "0.5.0.9000",
      "date": "2026-05-31T22:04:42.000Z",
      "distro": "noble",
      "commit": "42cd3523e3d7fe35116e1509327e0388fa86b906",
      "fileid": "36de548c537b0dc839a487e2f8f8b1cd62bcaaa49cea50336f6a09eac0592dbd",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/26725667113"
    },
    {
      "r": "4.6.0",
      "os": "linux",
      "version": "0.5.0.9000",
      "date": "2026-05-31T22:04:56.000Z",
      "distro": "noble",
      "commit": "42cd3523e3d7fe35116e1509327e0388fa86b906",
      "fileid": "29cef206c75f490da6d9bf3f192138a42386a5fdde478fedb057b03d7f19a2ab",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/26725667113"
    },
    {
      "r": "4.5.3",
      "os": "mac",
      "version": "0.5.0.9000",
      "date": "2026-05-31T22:04:07.000Z",
      "commit": "42cd3523e3d7fe35116e1509327e0388fa86b906",
      "fileid": "7f8328d58f5575be38b3126ada04e67439074efb06ce4d8b2bd41cd04ce6af4e",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/26725667113"
    },
    {
      "r": "4.6.0",
      "os": "mac",
      "version": "0.5.0.9000",
      "date": "2026-05-31T22:03:54.000Z",
      "commit": "42cd3523e3d7fe35116e1509327e0388fa86b906",
      "fileid": "0e72befe60c23e74535cb4d74c898cb04fa3c70bf0387cc21e644dfeb4c900ff",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/26725667113"
    },
    {
      "r": "4.6.0",
      "os": "wasm",
      "version": "0.5.0.9000",
      "date": "2026-05-31T22:04:57.000Z",
      "commit": "42cd3523e3d7fe35116e1509327e0388fa86b906",
      "fileid": "e4ab6fd4165798c0f91fb7190ec8e5dbda73c54b59e79da07ee98af10615e50d",
      "status": "success",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/26725667113"
    },
    {
      "r": "4.7.0",
      "os": "win",
      "version": "0.5.0.9000",
      "date": "2026-05-31T22:03:53.000Z",
      "commit": "42cd3523e3d7fe35116e1509327e0388fa86b906",
      "fileid": "2054922b3d1dde931e0393cf982a81afd82d9ca0b8bd829a96326b88f31de7c9",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/26725667113"
    },
    {
      "r": "4.5.3",
      "os": "win",
      "version": "0.5.0.9000",
      "date": "2026-05-31T22:03:53.000Z",
      "commit": "42cd3523e3d7fe35116e1509327e0388fa86b906",
      "fileid": "7ec0017dfca77a4549e7505ba5cff5176ea51755a9985d271654d9e0f5dc6ec4",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/26725667113"
    },
    {
      "r": "4.6.0",
      "os": "win",
      "version": "0.5.0.9000",
      "date": "2026-05-31T22:03:40.000Z",
      "commit": "42cd3523e3d7fe35116e1509327e0388fa86b906",
      "fileid": "e41b7da71cbaea622b567f00334f2b6d793992f4398d74dfed50dc0b56d840c2",
      "status": "success",
      "check": "NOTE",
      "buildurl": "https://github.com/r-universe/lukakoning/actions/runs/26725667113"
    }
  ]
}