diff --git a/components/experimental-tooltip.tsx b/components/experimental-tooltip.tsx new file mode 100644 index 0000000..1d82a5e --- /dev/null +++ b/components/experimental-tooltip.tsx @@ -0,0 +1,70 @@ +import React, { useState } from 'react' + +interface ExperimentalTooltipProps { + placement?: 'top' | 'bottom' | 'left' | 'right' +} + +export const ExperimentalTooltip: React.FC = ({ + placement = 'top' +}) => { + const [isVisible, setIsVisible] = useState(false) + + const getTooltipPosition = () => { + switch (placement) { + case 'bottom': + return 'top-full left-1/2 transform -translate-x-1/2 mt-1' + case 'left': + return 'right-full top-1/2 transform -translate-y-1/2 mr-1' + case 'right': + return 'left-full top-1/2 transform -translate-y-1/2 ml-1' + default: // top + return 'bottom-full left-1/2 transform -translate-x-1/2 mb-1' + } + } + + const getArrowPosition = () => { + switch (placement) { + case 'bottom': + return 'bottom-full left-1/2 transform -translate-x-1/2 border-l-transparent border-r-transparent border-t-transparent border-b-gray-800' + case 'left': + return 'left-full top-1/2 transform -translate-y-1/2 border-t-transparent border-b-transparent border-r-transparent border-l-gray-800' + case 'right': + return 'right-full top-1/2 transform -translate-y-1/2 border-t-transparent border-b-transparent border-l-transparent border-r-gray-800' + default: // top + return 'top-full left-1/2 transform -translate-x-1/2 border-l-transparent border-r-transparent border-b-transparent border-t-gray-800' + } + } + + return ( + setIsVisible(true)} + onMouseLeave={() => setIsVisible(false)} + aria-label="tooltip" + > + + + + + {isVisible && ( +
+ Experimental +
+
+ )} + + ) +} diff --git a/linkinator.config.json b/linkinator.config.json index 4af52f1..7d26aec 100644 --- a/linkinator.config.json +++ b/linkinator.config.json @@ -7,6 +7,7 @@ "http://localhost:3000", "https://blog.hello.dev/*", "https://blog.hello.coop/*", - "https://github.com/*" + "https://github.com/*", + "https://cursor.com/*" ] -} +} \ No newline at end of file diff --git a/pages/docs/oidc.mdx b/pages/docs/oidc.mdx index fbd6f50..6b5114f 100644 --- a/pages/docs/oidc.mdx +++ b/pages/docs/oidc.mdx @@ -1,5 +1,6 @@ import { Cards, Card } from 'nextra/components' import { AuthRequestIcon, AuthResponseIcon, IDTokenIcon, ConfigIcon, ErrorIcon, VerificationIcon } from 'components/icons' +import { ExperimentalTooltip } from 'components/experimental-tooltip' # OpenID Connect @@ -9,6 +10,8 @@ The section of the documentation describes Hellō implementation of OpenID Conne The Hellō OpenID Configuration is at [https://issuer.hello.coop/.well-known/openid-configuration](https://issuer.hello.coop/.well-known/openid-configuration). +Hellō also supports [OpenID Connect Key Binding](https://github.com/dickhardt/openid-key-binding) for cryptographically bound ID tokens using RFC 9449 DPoP. + NOTE: The Hellō Issuer is `https://issuer.hello.coop` and is NOT `https://wallet.hello.coop`. This simplifies a separation of concerns per the [Hellō Protocol]() diff --git a/pages/docs/oidc/request.mdx b/pages/docs/oidc/request.mdx index 670e58a..0a3b527 100644 --- a/pages/docs/oidc/request.mdx +++ b/pages/docs/oidc/request.mdx @@ -1,4 +1,5 @@ import { Callout } from 'nextra/components' +import { ExperimentalTooltip } from 'components/experimental-tooltip' # Authentication Request @@ -31,6 +32,7 @@ The **request URL** is `https://wallet.hello.coop/authorize` and a query with th |`prompt`
*optional*|A space delimited list. Accepted values include:| | | - `login` will require the user to re-authenticate at their login provider| | | - `consent` will require the user to review, and potentially change, released claims| +|`dpop_jkt` |JWK Thumbprint of the DPoP public key using SHA-256. Required when using `dpop` scope.| ### Hellō Parameters diff --git a/pages/docs/oidc/token.mdx b/pages/docs/oidc/token.mdx index d0764e5..4ff3964 100644 --- a/pages/docs/oidc/token.mdx +++ b/pages/docs/oidc/token.mdx @@ -1,3 +1,5 @@ +import { ExperimentalTooltip } from 'components/experimental-tooltip' + # ID Token An ID Token is a JSON Web Token (JWT) [RFC 7519](https://www.rfc-editor.org/rfc/rfc7519.html) that has claims per [OpenID Connect §2](https://openid.net/specs/openid-connect-core-1_0.html#IDToken).
In the following example of a raw ID Token: @@ -8,39 +10,41 @@ An ID Token is a JSON Web Token (JWT) [RFC 7519](https://www.rfc-editor.org/rfc/ ### Compact Format ```ansi -eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjIwMjQtMDctMDRUMjI6MjA6MzkuMjg2Wl8xZTAYTIzIn00.ey -Jpc3MiOiJodHRwczovL2lzc3Vlci5oZWxsby5jb29wIiwiYXVkIjoiYXBwX0hlbGxvRGV2ZWxvcGVyUGxheWdyb3VuZF9Jc -TIiLCJub25jZSI6IjE4OTM4Nzc4ODk0MjMyMzE5NTEiLCJqdGkiOiJqdGlfd0ZHdWdpQXp1WVBxTkh2ajJuUnI2enhvX0lq -biIsInN1YiI6IjI2NWE1NmEzLWFjMDQtNDcxYy04MzJlLTVlMTZhNzRlYjFmMSIsIm5hbWUiOiJEaWNrIEhhcmR0IiwicGl -jdHVyZSI6Imh0dHBzOi8vcGljdHVyZXMuaGVsbG8uY29vcC9yLzdjOWFlMTkyLTM2M2MtNDA5ZS05NDVhLWYyNWU1ODMzZT -M3NS5qcGVnIiwiZW1haWwiOiJkaWNrLmhhcmR0QGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3M -jk3MDkwNjcsImV4cCI6MTcyOTcwOTM2N30.NT8d0wSuHqmcaUbiKPYAusalMYJcGj8w726pE8WvfYwlDtms3tMovj7U9eGTwqQykf_tlbz -IrJ4m6KofsriScGrm_2RAiaZTfk3srbWu21WhaLxqHhkbqu0lntNzkgVCjROv_CQ5YcsXh4L0aAJmKpkL3lVATMQSMxBUY0 -bnmDT5jKO2ldxse4WAGSYssSUy1O6YzsjcvRpL3shuTYNkx2NMrqBO2kdTEuFL3IeH8cRFI6x52w7TJKJXs0n8qRVdaul64 -URRrQrhTidVfCdFwswdrUZ3pdyhiTLlhC9Kn9Dtk5F3KVd0SEuzcb9cBJzNvV-vO-j7b-siqUJV4du3Q +eyJhbGciOiJSUzI1NiIsInR5cCI6ImRwb3AraWRfdG9rZW4iLCJraWQiOiIyMDI1LTAxLTE1VDE2OjU2OjQ5LjY2OFpfNzM1LTFjNSJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5oZWxsby5jb29wIiwiYXVkIjoiYXBwX0hlbGxvRGV2ZWxvcGVyUGxheWdyb3VuZF9JcTIiLCJub25jZSI6ImZhMzI5NGY4LTIyMmEtNDcwMS04YmUyLWY1Y2YwZDY1NThmZSIsImp0aSI6Imp0aV9wdXNLQjFZcjhRUk9qQ0FqbGVoNU1yZDFfWmZSIiwic3ViIjoiMjY1YTU2YTMtYWMwNC00NzFjLTgzMmUtNWUxNmE3NGViMWYxIiwidGVuYW50IjoicGVyc29uYWwiLCJuYW1lIjoiRGljayBIYXJkdCIsInBpY3R1cmUiOiJodHRwczovL3BpY3R1cmVzLmhlbGxvLmNvb3AvYXZhdGFyLzFjOGNlMzZlMDczNWFhY2ViYmUyZDUxNjk0ODJjODY3P3M9MjU2LGQ9aWRlbnRpY29uIiwiZW1haWwiOiJkaWNrLmhhcmR0QGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJpYXQiOjE3NTUyNDkzMTQsImV4cCI6MTc1NTI0OTYxNCwiY25mIjp7Imp3ayI6eyJrdHkiOiJFQyIsImNydiI6IlAtMjU2IiwieCI6IkxBT25iQU1FRWROYS16UzFoeG9WWTVIZkp5aWFLRlNIVjVfRWJBY0lBdDQiLCJ5IjoiUDh1QkliNmYxX2VQUU13QjcwS0lVaEowV2pXdjJQQ1BLcjJwVlhpTndROCJ9fX0.NT8d0wSuHqmlpvNCaNaQRSH-XSXg_YDKwJfprtpkr7L2DanDUhXRZ8uAlDyOdDXJm6weEXrHiq9UQC8WGatmQ8V__jeTntPe8njID3MrfSY5jtS3AATfACC8oOqt_NPExW3noKBMjzLP50aa8JPBdu39YBnfOA78tL4K0GcCNDk9ctKf8dJktb4URnl4n7yYpJ_VCFp44bujpoxyr-SXBzZn8Zo2PY0oOApnAICiLs0iS9KhAegEP55Vo4m9Y2uER7YtIGA2S1iUwBbgx0XoFeIn4jQtMNydaksmbPqZFtAFNUKUM85KFnKAx_OMrhqEU0b3lc4kbR1Na_orr4Ucm1e-_pYk_UlOg ``` ### Decoded ID Token +Note: The following example includes the `cnf` claim that appears when the `dpop` scope is requested: + ```json { "header": { - "alg":"RS256", - "typ":"JWT", - "kid":"2024-07-04T22:20:39.286Z_1e0-a23" + "alg": "RS256", + "typ": "dpop+id_token", + "kid": "2025-01-15T16:56:49.668Z_735-1c5" }, "payload": { "iss": "https://issuer.hello.coop", "aud": "app_HelloDeveloperPlayground_Iq2", - "nonce": "1893877889423231951", - "jti": "jti_wFGugiAzuYPqNHvj2nRr6zxo_Ijn", + "nonce": "fa3294f8-222a-4701-8be2-f5cf0d6558fe", + "jti": "jti_pusKB1Yr8QROjCAjleh5Mrd1_ZfR", "sub": "265a56a3-ac04-471c-832e-5e16a74eb1f1", + "tenant": "personal", "name": "Dick Hardt", - "picture": "https://pictures.hello.coop/r/7c9ae192-363c-409e-945a-f25e5833e375.jpeg", + "picture": "https://pictures.hello.coop/avatar/1c8ce36e0735aacebbe2d5169482c867?s=256,d=identicon", "email": "dick.hardt@gmail.com", "email_verified": true, - "iat": 1729709067, - "exp": 1729709367 + "iat": 1755249314, + "exp": 1755249614, + "cnf": { + "jwk": { + "kty": "EC", + "crv": "P-256", + "x": "LAOnbAMEEdNa-zS1hxoVY5HfJyiaKFSHV5_EbAcIAt4", + "y": "P8uBIb6f1_ePQMwB70KIUhJ0WjWv2PCPKr2pVXiNwQ8" + } + } } } ``` @@ -87,3 +91,4 @@ URRrQrhTidVfCdFwswdrUZ3pdyhiTLlhC9Kn9Dtk5F3KVd0SEuzcb9cBJzNvV-vO-j7b-siqUJV4du3Q |`iat`|The time the ID Token was issued in [Epoch time](https://en.wikipedia.org/wiki/Unix_time)| |`exp`|The time the ID Token expires.
Hellō sets the expiry to be 5 minutes (300 seconds) after `iat`| |`tenant`|The Hellō identifier for the organization. Similar to `sub`, use this to identify the organization. Set to `personal` for personal accounts.| +|`cnf` |Confirmation claim containing the public key bound to the ID token when using `dpop` scope.| diff --git a/pages/docs/scopes.mdx b/pages/docs/scopes.mdx index 9c45b1a..9c996a6 100644 --- a/pages/docs/scopes.mdx +++ b/pages/docs/scopes.mdx @@ -1,4 +1,5 @@ import { Callout } from 'nextra/components' +import { ExperimentalTooltip } from 'components/experimental-tooltip' # Hellō Scopes @@ -35,6 +36,8 @@ Following are the scopes currently supported by Hellō. At the top are the stand |`phone`|A verified `phone_number` claim.
`phone_number_verified=true` will always be returned.
*see note below*| |`picture`|A URL to a profile picture. [See FAQ 13](/faqs/#13-what-can-i-do-with-the-picture-url-i-receive) for details| |`profile`|equivalent to `name`, `email`, and `picture`| +|**Experimental**|**The following scopes are currently experimental**| +|`dpop` |Enables key binding for ID tokens using RFC 9449 DPoP.| *NOTE: We previously returned `phone` and `phone_verified` claims and now return `phone_number` and `phone_number_verified` claims per [OIDC Standard Claims](https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims)* diff --git a/public/ai-sitemap.xml b/public/ai-sitemap.xml index e6cdc10..9c1e844 100644 --- a/public/ai-sitemap.xml +++ b/public/ai-sitemap.xml @@ -6,157 +6,157 @@ https://www.hello.dev/markdown/docs/docs.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 1.0 https://www.hello.dev/markdown/docs/docs/admin-mcp.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.7 https://www.hello.dev/markdown/docs/docs/apis/admin.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.8 https://www.hello.dev/markdown/docs/docs/apis/invite.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.8 https://www.hello.dev/markdown/docs/docs/apis/quickstart.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.8 https://www.hello.dev/markdown/docs/docs/apis/wallet.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.8 https://www.hello.dev/markdown/docs/docs/apis/web-client.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.8 https://www.hello.dev/markdown/docs/docs/buttons.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.8 https://www.hello.dev/markdown/docs/docs/getting-started.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.9 https://www.hello.dev/markdown/docs/docs/quickstarts.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.9 https://www.hello.dev/markdown/docs/docs/quickstarts/express.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.8 https://www.hello.dev/markdown/docs/docs/quickstarts/fastify.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.8 https://www.hello.dev/markdown/docs/docs/quickstarts/nextjs.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.8 https://www.hello.dev/markdown/docs/docs/quickstarts/wordpress.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.8 https://www.hello.dev/markdown/docs/docs/scopes.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.8 https://www.hello.dev/markdown/docs/docs/sdks/config.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.7 https://www.hello.dev/markdown/docs/docs/sdks/environment.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.7 https://www.hello.dev/markdown/docs/docs/sdks/express.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.7 https://www.hello.dev/markdown/docs/docs/sdks/faqs.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.7 https://www.hello.dev/markdown/docs/docs/sdks/fastify.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.7 https://www.hello.dev/markdown/docs/docs/sdks/helper.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.7 https://www.hello.dev/markdown/docs/docs/sdks/nextjs.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.7 https://www.hello.dev/markdown/docs/docs/sdks/quickstart.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.7 https://www.hello.dev/markdown/docs/docs/sdks/react.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.7 https://www.hello.dev/markdown/docs/docs/sdks/svelte.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.7 https://www.hello.dev/markdown/docs/docs/sdks/vue.md - 2025-08-04T17:39:20.481Z + 2025-08-15T09:26:48.888Z 0.7 diff --git a/public/sitemap.xml b/public/sitemap.xml index 4d0db69..fe21c22 100644 --- a/public/sitemap.xml +++ b/public/sitemap.xml @@ -1,46 +1,46 @@ -https://www.hello.dev/2025-08-04T17:39:20.265Zdaily0.7 -https://www.hello.dev/docs/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/admin-mcp/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/apis/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/apis/admin/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/apis/invite/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/apis/quickstart/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/apis/wallet/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/apis/web-client/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/buttons/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/comparison/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/getting-started/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/mockin/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/oidc/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/oidc/config/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/oidc/device/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/oidc/errors/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/oidc/request/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/oidc/response/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/oidc/token/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/oidc/unsupported/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/oidc/verification/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/quickstarts/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/quickstarts/express/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/quickstarts/fastify/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/quickstarts/nextjs/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/quickstarts/wordpress/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/roadmap/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/scopes/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/sdks/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/sdks/config/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/sdks/environment/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/sdks/express/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/sdks/faqs/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/sdks/fastify/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/sdks/helper/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/sdks/nextjs/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/sdks/quickstart/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/sdks/react/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/sdks/svelte/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/docs/sdks/vue/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/faqs/2025-08-04T17:39:20.266Zdaily0.7 -https://www.hello.dev/pricing/2025-08-04T17:39:20.266Zdaily0.7 +https://www.hello.dev/2025-08-15T09:26:48.660Zdaily0.7 +https://www.hello.dev/docs/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/admin-mcp/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/apis/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/apis/admin/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/apis/invite/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/apis/quickstart/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/apis/wallet/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/apis/web-client/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/buttons/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/comparison/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/getting-started/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/mockin/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/oidc/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/oidc/config/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/oidc/device/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/oidc/errors/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/oidc/request/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/oidc/response/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/oidc/token/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/oidc/unsupported/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/oidc/verification/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/quickstarts/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/quickstarts/express/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/quickstarts/fastify/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/quickstarts/nextjs/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/quickstarts/wordpress/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/roadmap/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/scopes/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/sdks/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/sdks/config/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/sdks/environment/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/sdks/express/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/sdks/faqs/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/sdks/fastify/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/sdks/helper/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/sdks/nextjs/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/sdks/quickstart/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/sdks/react/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/sdks/svelte/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/docs/sdks/vue/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/faqs/2025-08-15T09:26:48.661Zdaily0.7 +https://www.hello.dev/pricing/2025-08-15T09:26:48.661Zdaily0.7 \ No newline at end of file