@civic/auth 0.0.1-beta.3 → 0.0.1-beta.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +3 -0
- package/.eslintrc.json +10 -0
- package/.prettierignore +3 -0
- package/.prettierrc +1 -0
- package/.turbo/turbo-build.log +13 -0
- package/.turbo/turbo-lint.log +14 -0
- package/.turbo/turbo-test.log +1678 -0
- package/README.md +26 -4
- package/civic-auth-0.0.1-beta.15.tgz +0 -0
- package/civic-auth-0.0.1-beta.17.tgz +0 -0
- package/dist/AuthProvider-BYZ8w92b.d.mts +15 -0
- package/dist/AuthProvider-BgOwv9h8.d.ts +15 -0
- package/dist/AuthProvider-Bj_Prt1x.d.ts +21 -0
- package/dist/AuthProvider-DUAoX4G9.d.mts +21 -0
- package/dist/UserProvider-BA2uflVB.d.ts +16 -0
- package/dist/UserProvider-Bl3j1PUO.d.mts +16 -0
- package/dist/UserProvider-CMLaYOUD.d.ts +16 -0
- package/dist/UserProvider-Cbm8MZkJ.d.mts +16 -0
- package/dist/chunk-4PLCDPEN.mjs +599 -0
- package/dist/chunk-4PLCDPEN.mjs.map +1 -0
- package/dist/chunk-5UQQYXCX.js +1 -0
- package/dist/chunk-5UQQYXCX.js.map +1 -0
- package/dist/{chunk-UV56GNIT.mjs → chunk-63YGK3A7.mjs} +84 -62
- package/dist/chunk-63YGK3A7.mjs.map +1 -0
- package/dist/{chunk-4GIHS7LB.js → chunk-6RFRDWIP.js} +88 -66
- package/dist/chunk-6RFRDWIP.js.map +1 -0
- package/dist/chunk-7K3QN2AT.js +599 -0
- package/dist/chunk-7K3QN2AT.js.map +1 -0
- package/dist/chunk-AM2Y662I.js +601 -0
- package/dist/chunk-AM2Y662I.js.map +1 -0
- package/dist/chunk-AP4627CS.mjs +223 -0
- package/dist/chunk-AP4627CS.mjs.map +1 -0
- package/dist/chunk-CRTRMMJ7.js.map +1 -1
- package/dist/chunk-CTVJJBBA.js +118 -0
- package/dist/chunk-CTVJJBBA.js.map +1 -0
- package/dist/chunk-EKLYHP2D.mjs +711 -0
- package/dist/chunk-EKLYHP2D.mjs.map +1 -0
- package/dist/chunk-FHRZSX3C.js +710 -0
- package/dist/chunk-FHRZSX3C.js.map +1 -0
- package/dist/chunk-GB3H3I47.js +711 -0
- package/dist/chunk-GB3H3I47.js.map +1 -0
- package/dist/{chunk-WPISYQG3.js → chunk-JDZPCA3P.js} +51 -32
- package/dist/chunk-JDZPCA3P.js.map +1 -0
- package/dist/chunk-JEOPLLWO.js +223 -0
- package/dist/chunk-JEOPLLWO.js.map +1 -0
- package/dist/chunk-MK7557NR.mjs +118 -0
- package/dist/chunk-MK7557NR.mjs.map +1 -0
- package/dist/chunk-NLRREFOX.mjs +710 -0
- package/dist/chunk-NLRREFOX.mjs.map +1 -0
- package/dist/{chunk-NQPMNXBL.mjs → chunk-O3WGNLRO.mjs} +50 -31
- package/dist/chunk-O3WGNLRO.mjs.map +1 -0
- package/dist/chunk-OXXUQ36U.mjs +283 -0
- package/dist/chunk-OXXUQ36U.mjs.map +1 -0
- package/dist/chunk-PMJAV4JJ.mjs +1 -0
- package/dist/chunk-PMJAV4JJ.mjs.map +1 -0
- package/dist/chunk-Q7DSPTUG.mjs +601 -0
- package/dist/chunk-Q7DSPTUG.mjs.map +1 -0
- package/dist/chunk-TH6FI2XI.js +283 -0
- package/dist/chunk-TH6FI2XI.js.map +1 -0
- package/dist/cjs/src/browser/storage.d.ts +6 -0
- package/dist/cjs/src/browser/storage.d.ts.map +1 -0
- package/dist/cjs/src/browser/storage.js +13 -0
- package/dist/cjs/src/browser/storage.js.map +1 -0
- package/dist/cjs/src/config.d.ts +3 -0
- package/dist/cjs/src/config.d.ts.map +1 -0
- package/dist/cjs/src/config.js +8 -0
- package/dist/cjs/src/config.js.map +1 -0
- package/dist/cjs/src/constants.d.ts +9 -0
- package/dist/cjs/src/constants.d.ts.map +1 -0
- package/dist/cjs/src/constants.js +26 -0
- package/dist/cjs/src/constants.js.map +1 -0
- package/dist/cjs/src/index.d.ts +4 -0
- package/dist/cjs/src/index.d.ts.map +1 -0
- package/dist/cjs/src/index.js +3 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/lib/cookies.d.ts +7 -0
- package/dist/cjs/src/lib/cookies.d.ts.map +1 -0
- package/dist/cjs/src/lib/cookies.js +26 -0
- package/dist/cjs/src/lib/cookies.js.map +1 -0
- package/dist/cjs/src/lib/jwt.d.ts +3 -0
- package/dist/cjs/src/lib/jwt.d.ts.map +1 -0
- package/dist/cjs/src/lib/jwt.js +13 -0
- package/dist/cjs/src/lib/jwt.js.map +1 -0
- package/dist/cjs/src/lib/logger.d.ts +26 -0
- package/dist/cjs/src/lib/logger.d.ts.map +1 -0
- package/dist/cjs/src/lib/logger.js +62 -0
- package/dist/cjs/src/lib/logger.js.map +1 -0
- package/dist/cjs/src/lib/oauth.d.ts +19 -0
- package/dist/cjs/src/lib/oauth.d.ts.map +1 -0
- package/dist/cjs/src/lib/oauth.js +67 -0
- package/dist/cjs/src/lib/oauth.js.map +1 -0
- package/dist/cjs/src/lib/postMessage.d.ts +4 -0
- package/dist/cjs/src/lib/postMessage.d.ts.map +1 -0
- package/dist/cjs/src/lib/postMessage.js +18 -0
- package/dist/cjs/src/lib/postMessage.js.map +1 -0
- package/dist/cjs/src/lib/windowUtil.d.ts +4 -0
- package/dist/cjs/src/lib/windowUtil.d.ts.map +1 -0
- package/dist/cjs/src/lib/windowUtil.js +34 -0
- package/dist/cjs/src/lib/windowUtil.js.map +1 -0
- package/dist/cjs/src/nextjs/GetUser.d.ts +6 -0
- package/dist/cjs/src/nextjs/GetUser.d.ts.map +1 -0
- package/dist/cjs/src/nextjs/GetUser.js +22 -0
- package/dist/cjs/src/nextjs/GetUser.js.map +1 -0
- package/dist/cjs/src/nextjs/config.d.ts +178 -0
- package/dist/cjs/src/nextjs/config.d.ts.map +1 -0
- package/dist/cjs/src/nextjs/config.js +167 -0
- package/dist/cjs/src/nextjs/config.js.map +1 -0
- package/dist/cjs/src/nextjs/cookies.d.ts +30 -0
- package/dist/cjs/src/nextjs/cookies.d.ts.map +1 -0
- package/dist/cjs/src/nextjs/cookies.js +119 -0
- package/dist/cjs/src/nextjs/cookies.js.map +1 -0
- package/dist/cjs/src/nextjs/hooks/index.d.ts +2 -0
- package/dist/cjs/src/nextjs/hooks/index.d.ts.map +1 -0
- package/dist/cjs/src/nextjs/hooks/index.js +6 -0
- package/dist/cjs/src/nextjs/hooks/index.js.map +1 -0
- package/dist/cjs/src/nextjs/hooks/useTokenCookie.d.ts +3 -0
- package/dist/cjs/src/nextjs/hooks/useTokenCookie.d.ts.map +1 -0
- package/dist/cjs/src/nextjs/hooks/useTokenCookie.js +41 -0
- package/dist/cjs/src/nextjs/hooks/useTokenCookie.js.map +1 -0
- package/dist/cjs/src/nextjs/hooks/useUserCookie.d.ts +3 -0
- package/dist/cjs/src/nextjs/hooks/useUserCookie.d.ts.map +1 -0
- package/dist/cjs/src/nextjs/hooks/useUserCookie.js +40 -0
- package/dist/cjs/src/nextjs/hooks/useUserCookie.js.map +1 -0
- package/dist/cjs/src/nextjs/index.d.ts +7 -0
- package/dist/cjs/src/nextjs/index.d.ts.map +1 -0
- package/dist/cjs/src/nextjs/index.js +18 -0
- package/dist/cjs/src/nextjs/index.js.map +1 -0
- package/dist/cjs/src/nextjs/middleware/index.d.ts +2 -0
- package/dist/cjs/src/nextjs/middleware/index.d.ts.map +1 -0
- package/dist/cjs/src/nextjs/middleware/index.js +8 -0
- package/dist/cjs/src/nextjs/middleware/index.js.map +1 -0
- package/dist/cjs/src/nextjs/middleware.d.ts +59 -0
- package/dist/cjs/src/nextjs/middleware.d.ts.map +1 -0
- package/dist/cjs/src/nextjs/middleware.js +116 -0
- package/dist/cjs/src/nextjs/middleware.js.map +1 -0
- package/dist/cjs/src/nextjs/providers/NextAuthProvider.d.ts +9 -0
- package/dist/cjs/src/nextjs/providers/NextAuthProvider.d.ts.map +1 -0
- package/dist/cjs/src/nextjs/providers/NextAuthProvider.js +76 -0
- package/dist/cjs/src/nextjs/providers/NextAuthProvider.js.map +1 -0
- package/dist/cjs/src/nextjs/routeHandler.d.ts +18 -0
- package/dist/cjs/src/nextjs/routeHandler.d.ts.map +1 -0
- package/dist/cjs/src/nextjs/routeHandler.js +217 -0
- package/dist/cjs/src/nextjs/routeHandler.js.map +1 -0
- package/dist/cjs/src/nextjs/utils.d.ts +3 -0
- package/dist/cjs/src/nextjs/utils.d.ts.map +1 -0
- package/dist/cjs/src/nextjs/utils.js +9 -0
- package/dist/cjs/src/nextjs/utils.js.map +1 -0
- package/dist/cjs/src/reactjs/components/SignInButton.d.ts +8 -0
- package/dist/cjs/src/reactjs/components/SignInButton.d.ts.map +1 -0
- package/dist/cjs/src/reactjs/components/SignInButton.js +20 -0
- package/dist/cjs/src/reactjs/components/SignInButton.js.map +1 -0
- package/dist/cjs/src/reactjs/components/SignOutButton.d.ts +6 -0
- package/dist/cjs/src/reactjs/components/SignOutButton.d.ts.map +1 -0
- package/dist/cjs/src/reactjs/components/SignOutButton.js +20 -0
- package/dist/cjs/src/reactjs/components/SignOutButton.js.map +1 -0
- package/dist/cjs/src/reactjs/components/UserButton.d.ts +8 -0
- package/dist/cjs/src/reactjs/components/UserButton.d.ts.map +1 -0
- package/dist/cjs/src/reactjs/components/UserButton.js +136 -0
- package/dist/cjs/src/reactjs/components/UserButton.js.map +1 -0
- package/dist/cjs/src/reactjs/components/index.d.ts +6 -0
- package/dist/cjs/src/reactjs/components/index.d.ts.map +1 -0
- package/dist/cjs/src/reactjs/components/index.js +14 -0
- package/dist/cjs/src/reactjs/components/index.js.map +1 -0
- package/dist/cjs/src/reactjs/hooks/index.d.ts +7 -0
- package/dist/cjs/src/reactjs/hooks/index.d.ts.map +1 -0
- package/dist/cjs/src/reactjs/hooks/index.js +16 -0
- package/dist/cjs/src/reactjs/hooks/index.js.map +1 -0
- package/dist/cjs/src/reactjs/hooks/useAuth.d.ts +3 -0
- package/dist/cjs/src/reactjs/hooks/useAuth.d.ts.map +1 -0
- package/dist/cjs/src/reactjs/hooks/useAuth.js +15 -0
- package/dist/cjs/src/reactjs/hooks/useAuth.js.map +1 -0
- package/dist/cjs/src/reactjs/hooks/useUser.d.ts +4 -0
- package/dist/cjs/src/reactjs/hooks/useUser.d.ts.map +1 -0
- package/dist/cjs/src/reactjs/hooks/useUser.js +15 -0
- package/dist/cjs/src/reactjs/hooks/useUser.js.map +1 -0
- package/dist/cjs/src/reactjs/index.d.ts +6 -0
- package/dist/cjs/src/reactjs/index.d.ts.map +1 -0
- package/dist/cjs/src/reactjs/index.js +30 -0
- package/dist/cjs/src/reactjs/index.js.map +1 -0
- package/dist/cjs/src/reactjs/providers/index.d.ts +8 -0
- package/dist/cjs/src/reactjs/providers/index.d.ts.map +1 -0
- package/dist/cjs/src/reactjs/providers/index.js +19 -0
- package/dist/cjs/src/reactjs/providers/index.js.map +1 -0
- package/dist/cjs/src/server/ServerAuthenticationResolver.d.ts +18 -0
- package/dist/cjs/src/server/ServerAuthenticationResolver.d.ts.map +1 -0
- package/dist/cjs/src/server/ServerAuthenticationResolver.js +61 -0
- package/dist/cjs/src/server/ServerAuthenticationResolver.js.map +1 -0
- package/dist/cjs/src/server/config.d.ts +16 -0
- package/dist/cjs/src/server/config.d.ts.map +1 -0
- package/dist/cjs/src/server/config.js +3 -0
- package/dist/cjs/src/server/config.js.map +1 -0
- package/dist/cjs/src/server/index.d.ts +6 -0
- package/dist/cjs/src/server/index.d.ts.map +1 -0
- package/dist/cjs/src/server/index.js +14 -0
- package/dist/cjs/src/server/index.js.map +1 -0
- package/dist/cjs/src/server/login.d.ts +17 -0
- package/dist/cjs/src/server/login.d.ts.map +1 -0
- package/dist/cjs/src/server/login.js +42 -0
- package/dist/cjs/src/server/login.js.map +1 -0
- package/dist/cjs/src/server/refresh.d.ts +7 -0
- package/dist/cjs/src/server/refresh.d.ts.map +1 -0
- package/dist/cjs/src/server/refresh.js +16 -0
- package/dist/cjs/src/server/refresh.js.map +1 -0
- package/dist/cjs/src/services/AuthenticationService.d.ts +87 -0
- package/dist/cjs/src/services/AuthenticationService.d.ts.map +1 -0
- package/dist/cjs/src/services/AuthenticationService.js +218 -0
- package/dist/cjs/src/services/AuthenticationService.js.map +1 -0
- package/dist/cjs/src/services/PKCE.d.ts +20 -0
- package/dist/cjs/src/services/PKCE.d.ts.map +1 -0
- package/dist/cjs/src/services/PKCE.js +50 -0
- package/dist/cjs/src/services/PKCE.js.map +1 -0
- package/dist/cjs/src/services/types.d.ts +23 -0
- package/dist/cjs/src/services/types.d.ts.map +1 -0
- package/dist/cjs/src/services/types.js +11 -0
- package/dist/cjs/src/services/types.js.map +1 -0
- package/dist/cjs/src/shared/components/CivicAuthIframe.d.ts +8 -0
- package/dist/cjs/src/shared/components/CivicAuthIframe.d.ts.map +1 -0
- package/dist/cjs/src/shared/components/CivicAuthIframe.js +35 -0
- package/dist/cjs/src/shared/components/CivicAuthIframe.js.map +1 -0
- package/dist/cjs/src/shared/components/CivicAuthIframeContainer.d.ts +9 -0
- package/dist/cjs/src/shared/components/CivicAuthIframeContainer.d.ts.map +1 -0
- package/dist/cjs/src/shared/components/CivicAuthIframeContainer.js +154 -0
- package/dist/cjs/src/shared/components/CivicAuthIframeContainer.js.map +1 -0
- package/dist/cjs/src/shared/components/CloseIcon.d.ts +4 -0
- package/dist/cjs/src/shared/components/CloseIcon.d.ts.map +1 -0
- package/dist/cjs/src/shared/components/CloseIcon.js +12 -0
- package/dist/cjs/src/shared/components/CloseIcon.js.map +1 -0
- package/dist/cjs/src/shared/components/LoadingIcon.d.ts +4 -0
- package/dist/cjs/src/shared/components/LoadingIcon.d.ts.map +1 -0
- package/dist/cjs/src/shared/components/LoadingIcon.js +36 -0
- package/dist/cjs/src/shared/components/LoadingIcon.js.map +1 -0
- package/dist/cjs/src/shared/hooks/index.d.ts +5 -0
- package/dist/cjs/src/shared/hooks/index.d.ts.map +1 -0
- package/dist/cjs/src/shared/hooks/index.js +12 -0
- package/dist/cjs/src/shared/hooks/index.js.map +1 -0
- package/dist/cjs/src/shared/hooks/useAuth.d.ts +3 -0
- package/dist/cjs/src/shared/hooks/useAuth.d.ts.map +1 -0
- package/dist/cjs/src/shared/hooks/useAuth.js +15 -0
- package/dist/cjs/src/shared/hooks/useAuth.js.map +1 -0
- package/dist/cjs/src/shared/hooks/useConfig.d.ts +3 -0
- package/dist/cjs/src/shared/hooks/useConfig.d.ts.map +1 -0
- package/dist/cjs/src/shared/hooks/useConfig.js +16 -0
- package/dist/cjs/src/shared/hooks/useConfig.js.map +1 -0
- package/dist/cjs/src/shared/hooks/useIframe.d.ts +3 -0
- package/dist/cjs/src/shared/hooks/useIframe.d.ts.map +1 -0
- package/dist/cjs/src/shared/hooks/useIframe.js +16 -0
- package/dist/cjs/src/shared/hooks/useIframe.js.map +1 -0
- package/dist/cjs/src/shared/hooks/useSession.d.ts +3 -0
- package/dist/cjs/src/shared/hooks/useSession.d.ts.map +1 -0
- package/dist/cjs/src/shared/hooks/useSession.js +16 -0
- package/dist/cjs/src/shared/hooks/useSession.js.map +1 -0
- package/dist/cjs/src/shared/hooks/useToken.d.ts +3 -0
- package/dist/cjs/src/shared/hooks/useToken.d.ts.map +1 -0
- package/dist/cjs/src/shared/hooks/useToken.js +15 -0
- package/dist/cjs/src/shared/hooks/useToken.js.map +1 -0
- package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.d.ts +15 -0
- package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -0
- package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.js +43 -0
- package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.js.map +1 -0
- package/dist/cjs/src/shared/lib/UserSession.d.ts +12 -0
- package/dist/cjs/src/shared/lib/UserSession.d.ts.map +1 -0
- package/dist/cjs/src/shared/lib/UserSession.js +24 -0
- package/dist/cjs/src/shared/lib/UserSession.js.map +1 -0
- package/dist/cjs/src/shared/lib/session.d.ts +3 -0
- package/dist/cjs/src/shared/lib/session.d.ts.map +1 -0
- package/dist/cjs/src/shared/lib/session.js +13 -0
- package/dist/cjs/src/shared/lib/session.js.map +1 -0
- package/dist/cjs/src/shared/lib/storage.d.ts +25 -0
- package/dist/cjs/src/shared/lib/storage.d.ts.map +1 -0
- package/dist/cjs/src/shared/lib/storage.js +21 -0
- package/dist/cjs/src/shared/lib/storage.js.map +1 -0
- package/dist/cjs/src/shared/lib/types.d.ts +22 -0
- package/dist/cjs/src/shared/lib/types.d.ts.map +1 -0
- package/dist/cjs/src/shared/lib/types.js +19 -0
- package/dist/cjs/src/shared/lib/types.js.map +1 -0
- package/dist/cjs/src/shared/lib/util.d.ts +33 -0
- package/dist/cjs/src/shared/lib/util.d.ts.map +1 -0
- package/dist/cjs/src/shared/lib/util.js +163 -0
- package/dist/cjs/src/shared/lib/util.js.map +1 -0
- package/dist/cjs/src/shared/providers/AuthContext.d.ts +10 -0
- package/dist/cjs/src/shared/providers/AuthContext.d.ts.map +1 -0
- package/dist/cjs/src/shared/providers/AuthContext.js +6 -0
- package/dist/cjs/src/shared/providers/AuthContext.js.map +1 -0
- package/dist/cjs/src/shared/providers/AuthProvider.d.ts +20 -0
- package/dist/cjs/src/shared/providers/AuthProvider.d.ts.map +1 -0
- package/dist/cjs/src/shared/providers/AuthProvider.js +289 -0
- package/dist/cjs/src/shared/providers/AuthProvider.js.map +1 -0
- package/dist/cjs/src/shared/providers/CivicAuthProvider.d.ts +6 -0
- package/dist/cjs/src/shared/providers/CivicAuthProvider.d.ts.map +1 -0
- package/dist/cjs/src/shared/providers/CivicAuthProvider.js +21 -0
- package/dist/cjs/src/shared/providers/CivicAuthProvider.js.map +1 -0
- package/dist/cjs/src/shared/providers/ConfigProvider.d.ts +21 -0
- package/dist/cjs/src/shared/providers/ConfigProvider.d.ts.map +1 -0
- package/dist/cjs/src/shared/providers/ConfigProvider.js +46 -0
- package/dist/cjs/src/shared/providers/ConfigProvider.js.map +1 -0
- package/dist/cjs/src/shared/providers/IframeProvider.d.ts +16 -0
- package/dist/cjs/src/shared/providers/IframeProvider.d.ts.map +1 -0
- package/dist/cjs/src/shared/providers/IframeProvider.js +38 -0
- package/dist/cjs/src/shared/providers/IframeProvider.js.map +1 -0
- package/dist/cjs/src/shared/providers/SessionProvider.d.ts +13 -0
- package/dist/cjs/src/shared/providers/SessionProvider.d.ts.map +1 -0
- package/dist/cjs/src/shared/providers/SessionProvider.js +40 -0
- package/dist/cjs/src/shared/providers/SessionProvider.js.map +1 -0
- package/dist/cjs/src/shared/providers/TokenProvider.d.ts +18 -0
- package/dist/cjs/src/shared/providers/TokenProvider.d.ts.map +1 -0
- package/dist/cjs/src/shared/providers/TokenProvider.js +80 -0
- package/dist/cjs/src/shared/providers/TokenProvider.js.map +1 -0
- package/dist/cjs/src/shared/providers/UserProvider.d.ts +18 -0
- package/dist/cjs/src/shared/providers/UserProvider.d.ts.map +1 -0
- package/dist/cjs/src/shared/providers/UserProvider.js +65 -0
- package/dist/cjs/src/shared/providers/UserProvider.js.map +1 -0
- package/dist/cjs/src/types.d.ts +146 -0
- package/dist/cjs/src/types.d.ts.map +1 -0
- package/dist/cjs/src/types.js +3 -0
- package/dist/cjs/src/types.js.map +1 -0
- package/dist/cjs/src/utils.d.ts +15 -0
- package/dist/cjs/src/utils.d.ts.map +1 -0
- package/dist/cjs/src/utils.js +47 -0
- package/dist/cjs/src/utils.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/esm/src/browser/storage.d.ts +6 -0
- package/dist/esm/src/browser/storage.d.ts.map +1 -0
- package/dist/esm/src/browser/storage.js +9 -0
- package/dist/esm/src/browser/storage.js.map +1 -0
- package/dist/esm/src/config.d.ts +3 -0
- package/dist/esm/src/config.d.ts.map +1 -0
- package/dist/esm/src/config.js +5 -0
- package/dist/esm/src/config.js.map +1 -0
- package/dist/esm/src/constants.d.ts +9 -0
- package/dist/esm/src/constants.d.ts.map +1 -0
- package/dist/esm/src/constants.js +17 -0
- package/dist/esm/src/constants.js.map +1 -0
- package/dist/esm/src/index.d.ts +4 -0
- package/dist/esm/src/index.d.ts.map +1 -0
- package/dist/esm/src/index.js +2 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/lib/cookies.d.ts +7 -0
- package/dist/esm/src/lib/cookies.d.ts.map +1 -0
- package/dist/esm/src/lib/cookies.js +23 -0
- package/dist/esm/src/lib/cookies.js.map +1 -0
- package/dist/esm/src/lib/jwt.d.ts +3 -0
- package/dist/esm/src/lib/jwt.d.ts.map +1 -0
- package/dist/esm/src/lib/jwt.js +9 -0
- package/dist/esm/src/lib/jwt.js.map +1 -0
- package/dist/esm/src/lib/logger.d.ts +26 -0
- package/dist/esm/src/lib/logger.d.ts.map +1 -0
- package/dist/esm/src/lib/logger.js +55 -0
- package/dist/esm/src/lib/logger.js.map +1 -0
- package/dist/esm/src/lib/oauth.d.ts +19 -0
- package/dist/esm/src/lib/oauth.d.ts.map +1 -0
- package/dist/esm/src/lib/oauth.js +60 -0
- package/dist/esm/src/lib/oauth.js.map +1 -0
- package/dist/esm/src/lib/postMessage.d.ts +4 -0
- package/dist/esm/src/lib/postMessage.d.ts.map +1 -0
- package/dist/esm/src/lib/postMessage.js +15 -0
- package/dist/esm/src/lib/postMessage.js.map +1 -0
- package/dist/esm/src/lib/windowUtil.d.ts +4 -0
- package/dist/esm/src/lib/windowUtil.d.ts.map +1 -0
- package/dist/esm/src/lib/windowUtil.js +30 -0
- package/dist/esm/src/lib/windowUtil.js.map +1 -0
- package/dist/esm/src/nextjs/GetUser.d.ts +6 -0
- package/dist/esm/src/nextjs/GetUser.d.ts.map +1 -0
- package/dist/esm/src/nextjs/GetUser.js +18 -0
- package/dist/esm/src/nextjs/GetUser.js.map +1 -0
- package/dist/esm/src/nextjs/config.d.ts +178 -0
- package/dist/esm/src/nextjs/config.d.ts.map +1 -0
- package/dist/esm/src/nextjs/config.js +162 -0
- package/dist/esm/src/nextjs/config.js.map +1 -0
- package/dist/esm/src/nextjs/cookies.d.ts +30 -0
- package/dist/esm/src/nextjs/cookies.d.ts.map +1 -0
- package/dist/esm/src/nextjs/cookies.js +112 -0
- package/dist/esm/src/nextjs/cookies.js.map +1 -0
- package/dist/esm/src/nextjs/hooks/index.d.ts +2 -0
- package/dist/esm/src/nextjs/hooks/index.d.ts.map +1 -0
- package/dist/esm/src/nextjs/hooks/index.js +2 -0
- package/dist/esm/src/nextjs/hooks/index.js.map +1 -0
- package/dist/esm/src/nextjs/hooks/useTokenCookie.d.ts +3 -0
- package/dist/esm/src/nextjs/hooks/useTokenCookie.d.ts.map +1 -0
- package/dist/esm/src/nextjs/hooks/useTokenCookie.js +37 -0
- package/dist/esm/src/nextjs/hooks/useTokenCookie.js.map +1 -0
- package/dist/esm/src/nextjs/hooks/useUserCookie.d.ts +3 -0
- package/dist/esm/src/nextjs/hooks/useUserCookie.d.ts.map +1 -0
- package/dist/esm/src/nextjs/hooks/useUserCookie.js +36 -0
- package/dist/esm/src/nextjs/hooks/useUserCookie.js.map +1 -0
- package/dist/esm/src/nextjs/index.d.ts +7 -0
- package/dist/esm/src/nextjs/index.d.ts.map +1 -0
- package/dist/esm/src/nextjs/index.js +6 -0
- package/dist/esm/src/nextjs/index.js.map +1 -0
- package/dist/esm/src/nextjs/middleware/index.d.ts +2 -0
- package/dist/esm/src/nextjs/middleware/index.d.ts.map +1 -0
- package/dist/esm/src/nextjs/middleware/index.js +2 -0
- package/dist/esm/src/nextjs/middleware/index.js.map +1 -0
- package/dist/esm/src/nextjs/middleware.d.ts +59 -0
- package/dist/esm/src/nextjs/middleware.d.ts.map +1 -0
- package/dist/esm/src/nextjs/middleware.js +107 -0
- package/dist/esm/src/nextjs/middleware.js.map +1 -0
- package/dist/esm/src/nextjs/providers/NextAuthProvider.d.ts +9 -0
- package/dist/esm/src/nextjs/providers/NextAuthProvider.d.ts.map +1 -0
- package/dist/esm/src/nextjs/providers/NextAuthProvider.js +50 -0
- package/dist/esm/src/nextjs/providers/NextAuthProvider.js.map +1 -0
- package/dist/esm/src/nextjs/routeHandler.d.ts +18 -0
- package/dist/esm/src/nextjs/routeHandler.d.ts.map +1 -0
- package/dist/esm/src/nextjs/routeHandler.js +212 -0
- package/dist/esm/src/nextjs/routeHandler.js.map +1 -0
- package/dist/esm/src/nextjs/utils.d.ts +3 -0
- package/dist/esm/src/nextjs/utils.d.ts.map +1 -0
- package/dist/esm/src/nextjs/utils.js +5 -0
- package/dist/esm/src/nextjs/utils.js.map +1 -0
- package/dist/esm/src/reactjs/components/SignInButton.d.ts +8 -0
- package/dist/esm/src/reactjs/components/SignInButton.d.ts.map +1 -0
- package/dist/esm/src/reactjs/components/SignInButton.js +14 -0
- package/dist/esm/src/reactjs/components/SignInButton.js.map +1 -0
- package/dist/esm/src/reactjs/components/SignOutButton.d.ts +6 -0
- package/dist/esm/src/reactjs/components/SignOutButton.d.ts.map +1 -0
- package/dist/esm/src/reactjs/components/SignOutButton.js +14 -0
- package/dist/esm/src/reactjs/components/SignOutButton.js.map +1 -0
- package/dist/esm/src/reactjs/components/UserButton.d.ts +8 -0
- package/dist/esm/src/reactjs/components/UserButton.d.ts.map +1 -0
- package/dist/esm/src/reactjs/components/UserButton.js +110 -0
- package/dist/esm/src/reactjs/components/UserButton.js.map +1 -0
- package/dist/esm/src/reactjs/components/index.d.ts +6 -0
- package/dist/esm/src/reactjs/components/index.d.ts.map +1 -0
- package/dist/esm/src/reactjs/components/index.js +6 -0
- package/dist/esm/src/reactjs/components/index.js.map +1 -0
- package/dist/esm/src/reactjs/hooks/index.d.ts +7 -0
- package/dist/esm/src/reactjs/hooks/index.d.ts.map +1 -0
- package/dist/esm/src/reactjs/hooks/index.js +7 -0
- package/dist/esm/src/reactjs/hooks/index.js.map +1 -0
- package/dist/esm/src/reactjs/hooks/useAuth.d.ts +3 -0
- package/dist/esm/src/reactjs/hooks/useAuth.d.ts.map +1 -0
- package/dist/esm/src/reactjs/hooks/useAuth.js +12 -0
- package/dist/esm/src/reactjs/hooks/useAuth.js.map +1 -0
- package/dist/esm/src/reactjs/hooks/useUser.d.ts +4 -0
- package/dist/esm/src/reactjs/hooks/useUser.d.ts.map +1 -0
- package/dist/esm/src/reactjs/hooks/useUser.js +12 -0
- package/dist/esm/src/reactjs/hooks/useUser.js.map +1 -0
- package/dist/esm/src/reactjs/index.d.ts +6 -0
- package/dist/esm/src/reactjs/index.d.ts.map +1 -0
- package/dist/esm/src/reactjs/index.js +8 -0
- package/dist/esm/src/reactjs/index.js.map +1 -0
- package/dist/esm/src/reactjs/providers/index.d.ts +8 -0
- package/dist/esm/src/reactjs/providers/index.d.ts.map +1 -0
- package/dist/esm/src/reactjs/providers/index.js +7 -0
- package/dist/esm/src/reactjs/providers/index.js.map +1 -0
- package/dist/esm/src/server/ServerAuthenticationResolver.d.ts +18 -0
- package/dist/esm/src/server/ServerAuthenticationResolver.d.ts.map +1 -0
- package/dist/esm/src/server/ServerAuthenticationResolver.js +57 -0
- package/dist/esm/src/server/ServerAuthenticationResolver.js.map +1 -0
- package/dist/esm/src/server/config.d.ts +16 -0
- package/dist/esm/src/server/config.d.ts.map +1 -0
- package/dist/esm/src/server/config.js +2 -0
- package/dist/esm/src/server/config.js.map +1 -0
- package/dist/esm/src/server/index.d.ts +6 -0
- package/dist/esm/src/server/index.d.ts.map +1 -0
- package/dist/esm/src/server/index.js +5 -0
- package/dist/esm/src/server/index.js.map +1 -0
- package/dist/esm/src/server/login.d.ts +17 -0
- package/dist/esm/src/server/login.d.ts.map +1 -0
- package/dist/esm/src/server/login.js +37 -0
- package/dist/esm/src/server/login.js.map +1 -0
- package/dist/esm/src/server/refresh.d.ts +7 -0
- package/dist/esm/src/server/refresh.d.ts.map +1 -0
- package/dist/esm/src/server/refresh.js +13 -0
- package/dist/esm/src/server/refresh.js.map +1 -0
- package/dist/esm/src/services/AuthenticationService.d.ts +87 -0
- package/dist/esm/src/services/AuthenticationService.d.ts.map +1 -0
- package/dist/esm/src/services/AuthenticationService.js +212 -0
- package/dist/esm/src/services/AuthenticationService.js.map +1 -0
- package/dist/esm/src/services/PKCE.d.ts +20 -0
- package/dist/esm/src/services/PKCE.d.ts.map +1 -0
- package/dist/esm/src/services/PKCE.js +44 -0
- package/dist/esm/src/services/PKCE.js.map +1 -0
- package/dist/esm/src/services/types.d.ts +23 -0
- package/dist/esm/src/services/types.d.ts.map +1 -0
- package/dist/esm/src/services/types.js +7 -0
- package/dist/esm/src/services/types.js.map +1 -0
- package/dist/esm/src/shared/components/CivicAuthIframe.d.ts +8 -0
- package/dist/esm/src/shared/components/CivicAuthIframe.d.ts.map +1 -0
- package/dist/esm/src/shared/components/CivicAuthIframe.js +9 -0
- package/dist/esm/src/shared/components/CivicAuthIframe.js.map +1 -0
- package/dist/esm/src/shared/components/CivicAuthIframeContainer.d.ts +9 -0
- package/dist/esm/src/shared/components/CivicAuthIframeContainer.d.ts.map +1 -0
- package/dist/esm/src/shared/components/CivicAuthIframeContainer.js +128 -0
- package/dist/esm/src/shared/components/CivicAuthIframeContainer.js.map +1 -0
- package/dist/esm/src/shared/components/CloseIcon.d.ts +4 -0
- package/dist/esm/src/shared/components/CloseIcon.d.ts.map +1 -0
- package/dist/esm/src/shared/components/CloseIcon.js +6 -0
- package/dist/esm/src/shared/components/CloseIcon.js.map +1 -0
- package/dist/esm/src/shared/components/LoadingIcon.d.ts +4 -0
- package/dist/esm/src/shared/components/LoadingIcon.d.ts.map +1 -0
- package/dist/esm/src/shared/components/LoadingIcon.js +30 -0
- package/dist/esm/src/shared/components/LoadingIcon.js.map +1 -0
- package/dist/esm/src/shared/hooks/index.d.ts +5 -0
- package/dist/esm/src/shared/hooks/index.d.ts.map +1 -0
- package/dist/esm/src/shared/hooks/index.js +5 -0
- package/dist/esm/src/shared/hooks/index.js.map +1 -0
- package/dist/esm/src/shared/hooks/useAuth.d.ts +3 -0
- package/dist/esm/src/shared/hooks/useAuth.d.ts.map +1 -0
- package/dist/esm/src/shared/hooks/useAuth.js +12 -0
- package/dist/esm/src/shared/hooks/useAuth.js.map +1 -0
- package/dist/esm/src/shared/hooks/useConfig.d.ts +3 -0
- package/dist/esm/src/shared/hooks/useConfig.d.ts.map +1 -0
- package/dist/esm/src/shared/hooks/useConfig.js +13 -0
- package/dist/esm/src/shared/hooks/useConfig.js.map +1 -0
- package/dist/esm/src/shared/hooks/useIframe.d.ts +3 -0
- package/dist/esm/src/shared/hooks/useIframe.d.ts.map +1 -0
- package/dist/esm/src/shared/hooks/useIframe.js +13 -0
- package/dist/esm/src/shared/hooks/useIframe.js.map +1 -0
- package/dist/esm/src/shared/hooks/useSession.d.ts +3 -0
- package/dist/esm/src/shared/hooks/useSession.d.ts.map +1 -0
- package/dist/esm/src/shared/hooks/useSession.js +13 -0
- package/dist/esm/src/shared/hooks/useSession.js.map +1 -0
- package/dist/esm/src/shared/hooks/useToken.d.ts +3 -0
- package/dist/esm/src/shared/hooks/useToken.d.ts.map +1 -0
- package/dist/esm/src/shared/hooks/useToken.js +12 -0
- package/dist/esm/src/shared/hooks/useToken.js.map +1 -0
- package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.d.ts +15 -0
- package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -0
- package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.js +39 -0
- package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.js.map +1 -0
- package/dist/esm/src/shared/lib/UserSession.d.ts +12 -0
- package/dist/esm/src/shared/lib/UserSession.d.ts.map +1 -0
- package/dist/esm/src/shared/lib/UserSession.js +20 -0
- package/dist/esm/src/shared/lib/UserSession.js.map +1 -0
- package/dist/esm/src/shared/lib/session.d.ts +3 -0
- package/dist/esm/src/shared/lib/session.d.ts.map +1 -0
- package/dist/esm/src/shared/lib/session.js +10 -0
- package/dist/esm/src/shared/lib/session.js.map +1 -0
- package/dist/esm/src/shared/lib/storage.d.ts +25 -0
- package/dist/esm/src/shared/lib/storage.d.ts.map +1 -0
- package/dist/esm/src/shared/lib/storage.js +17 -0
- package/dist/esm/src/shared/lib/storage.js.map +1 -0
- package/dist/esm/src/shared/lib/types.d.ts +22 -0
- package/dist/esm/src/shared/lib/types.d.ts.map +1 -0
- package/dist/esm/src/shared/lib/types.js +16 -0
- package/dist/esm/src/shared/lib/types.js.map +1 -0
- package/dist/esm/src/shared/lib/util.d.ts +33 -0
- package/dist/esm/src/shared/lib/util.d.ts.map +1 -0
- package/dist/esm/src/shared/lib/util.js +127 -0
- package/dist/esm/src/shared/lib/util.js.map +1 -0
- package/dist/esm/src/shared/providers/AuthContext.d.ts +10 -0
- package/dist/esm/src/shared/providers/AuthContext.d.ts.map +1 -0
- package/dist/esm/src/shared/providers/AuthContext.js +3 -0
- package/dist/esm/src/shared/providers/AuthContext.js.map +1 -0
- package/dist/esm/src/shared/providers/AuthProvider.d.ts +20 -0
- package/dist/esm/src/shared/providers/AuthProvider.d.ts.map +1 -0
- package/dist/esm/src/shared/providers/AuthProvider.js +263 -0
- package/dist/esm/src/shared/providers/AuthProvider.js.map +1 -0
- package/dist/esm/src/shared/providers/CivicAuthProvider.d.ts +6 -0
- package/dist/esm/src/shared/providers/CivicAuthProvider.d.ts.map +1 -0
- package/dist/esm/src/shared/providers/CivicAuthProvider.js +15 -0
- package/dist/esm/src/shared/providers/CivicAuthProvider.js.map +1 -0
- package/dist/esm/src/shared/providers/ConfigProvider.d.ts +21 -0
- package/dist/esm/src/shared/providers/ConfigProvider.d.ts.map +1 -0
- package/dist/esm/src/shared/providers/ConfigProvider.js +19 -0
- package/dist/esm/src/shared/providers/ConfigProvider.js.map +1 -0
- package/dist/esm/src/shared/providers/IframeProvider.d.ts +16 -0
- package/dist/esm/src/shared/providers/IframeProvider.d.ts.map +1 -0
- package/dist/esm/src/shared/providers/IframeProvider.js +11 -0
- package/dist/esm/src/shared/providers/IframeProvider.js.map +1 -0
- package/dist/esm/src/shared/providers/SessionProvider.d.ts +13 -0
- package/dist/esm/src/shared/providers/SessionProvider.d.ts.map +1 -0
- package/dist/esm/src/shared/providers/SessionProvider.js +13 -0
- package/dist/esm/src/shared/providers/SessionProvider.js.map +1 -0
- package/dist/esm/src/shared/providers/TokenProvider.d.ts +18 -0
- package/dist/esm/src/shared/providers/TokenProvider.d.ts.map +1 -0
- package/dist/esm/src/shared/providers/TokenProvider.js +53 -0
- package/dist/esm/src/shared/providers/TokenProvider.js.map +1 -0
- package/dist/esm/src/shared/providers/UserProvider.d.ts +18 -0
- package/dist/esm/src/shared/providers/UserProvider.d.ts.map +1 -0
- package/dist/esm/src/shared/providers/UserProvider.js +38 -0
- package/dist/esm/src/shared/providers/UserProvider.js.map +1 -0
- package/dist/esm/src/types.d.ts +146 -0
- package/dist/esm/src/types.d.ts.map +1 -0
- package/dist/esm/src/types.js +2 -0
- package/dist/esm/src/types.js.map +1 -0
- package/dist/esm/src/utils.d.ts +15 -0
- package/dist/esm/src/utils.d.ts.map +1 -0
- package/dist/esm/src/utils.js +43 -0
- package/dist/esm/src/utils.js.map +1 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/index.css +71 -73
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -0
- package/dist/nextjs/client.css +340 -0
- package/dist/nextjs/client.css.map +1 -0
- package/dist/nextjs/client.d.mts +10 -0
- package/dist/nextjs/client.d.ts +10 -0
- package/dist/nextjs/client.js +185 -0
- package/dist/nextjs/client.js.map +1 -0
- package/dist/nextjs/client.mjs +185 -0
- package/dist/nextjs/client.mjs.map +1 -0
- package/dist/nextjs.d.mts +60 -18
- package/dist/nextjs.d.ts +60 -18
- package/dist/nextjs.js +156 -94
- package/dist/nextjs.js.map +1 -1
- package/dist/nextjs.mjs +147 -85
- package/dist/nextjs.mjs.map +1 -1
- package/dist/react.d.mts +30 -84
- package/dist/react.d.ts +30 -84
- package/dist/react.js +31 -983
- package/dist/react.js.map +1 -1
- package/dist/react.mjs +62 -1014
- package/dist/react.mjs.map +1 -1
- package/dist/server.d.mts +14 -34
- package/dist/server.d.ts +14 -34
- package/dist/server.js +6 -3
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +6 -3
- package/dist/src/browser/storage.d.ts +6 -0
- package/dist/src/browser/storage.d.ts.map +1 -0
- package/dist/src/browser/storage.js +9 -0
- package/dist/src/browser/storage.js.map +1 -0
- package/dist/src/config.d.ts +3 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +5 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/constants.d.ts +9 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +17 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/cookies.d.ts +7 -0
- package/dist/src/lib/cookies.d.ts.map +1 -0
- package/dist/src/lib/cookies.js +23 -0
- package/dist/src/lib/cookies.js.map +1 -0
- package/dist/src/lib/jwt.d.ts +3 -0
- package/dist/src/lib/jwt.d.ts.map +1 -0
- package/dist/src/lib/jwt.js +9 -0
- package/dist/src/lib/jwt.js.map +1 -0
- package/dist/src/lib/logger.d.ts +26 -0
- package/dist/src/lib/logger.d.ts.map +1 -0
- package/dist/src/lib/logger.js +55 -0
- package/dist/src/lib/logger.js.map +1 -0
- package/dist/src/lib/oauth.d.ts +19 -0
- package/dist/src/lib/oauth.d.ts.map +1 -0
- package/dist/src/lib/oauth.js +60 -0
- package/dist/src/lib/oauth.js.map +1 -0
- package/dist/src/lib/postMessage.d.ts +4 -0
- package/dist/src/lib/postMessage.d.ts.map +1 -0
- package/dist/src/lib/postMessage.js +15 -0
- package/dist/src/lib/postMessage.js.map +1 -0
- package/dist/src/lib/windowUtil.d.ts +4 -0
- package/dist/src/lib/windowUtil.d.ts.map +1 -0
- package/dist/src/lib/windowUtil.js +30 -0
- package/dist/src/lib/windowUtil.js.map +1 -0
- package/dist/src/nextjs/GetUser.d.ts +6 -0
- package/dist/src/nextjs/GetUser.d.ts.map +1 -0
- package/dist/src/nextjs/GetUser.js +18 -0
- package/dist/src/nextjs/GetUser.js.map +1 -0
- package/dist/src/nextjs/config.d.ts +178 -0
- package/dist/src/nextjs/config.d.ts.map +1 -0
- package/dist/src/nextjs/config.js +164 -0
- package/dist/src/nextjs/config.js.map +1 -0
- package/dist/src/nextjs/cookies.d.ts +30 -0
- package/dist/src/nextjs/cookies.d.ts.map +1 -0
- package/dist/src/nextjs/cookies.js +109 -0
- package/dist/src/nextjs/cookies.js.map +1 -0
- package/dist/src/nextjs/hooks/index.d.ts +2 -0
- package/dist/src/nextjs/hooks/index.d.ts.map +1 -0
- package/dist/src/nextjs/hooks/index.js +2 -0
- package/dist/src/nextjs/hooks/index.js.map +1 -0
- package/dist/src/nextjs/hooks/useTokenCookie.d.ts +3 -0
- package/dist/src/nextjs/hooks/useTokenCookie.d.ts.map +1 -0
- package/dist/src/nextjs/hooks/useTokenCookie.js +37 -0
- package/dist/src/nextjs/hooks/useTokenCookie.js.map +1 -0
- package/dist/src/nextjs/hooks/useUserCookie.d.ts +3 -0
- package/dist/src/nextjs/hooks/useUserCookie.d.ts.map +1 -0
- package/dist/src/nextjs/hooks/useUserCookie.js +36 -0
- package/dist/src/nextjs/hooks/useUserCookie.js.map +1 -0
- package/dist/src/nextjs/index.d.ts +7 -0
- package/dist/src/nextjs/index.d.ts.map +1 -0
- package/dist/src/nextjs/index.js +6 -0
- package/dist/src/nextjs/index.js.map +1 -0
- package/dist/src/nextjs/middleware/index.d.ts +2 -0
- package/dist/src/nextjs/middleware/index.d.ts.map +1 -0
- package/dist/src/nextjs/middleware/index.js +2 -0
- package/dist/src/nextjs/middleware/index.js.map +1 -0
- package/dist/src/nextjs/middleware.d.ts +59 -0
- package/dist/src/nextjs/middleware.d.ts.map +1 -0
- package/dist/src/nextjs/middleware.js +107 -0
- package/dist/src/nextjs/middleware.js.map +1 -0
- package/dist/src/nextjs/providers/NextAuthProvider.d.ts +9 -0
- package/dist/src/nextjs/providers/NextAuthProvider.d.ts.map +1 -0
- package/dist/src/nextjs/providers/NextAuthProvider.js +50 -0
- package/dist/src/nextjs/providers/NextAuthProvider.js.map +1 -0
- package/dist/src/nextjs/routeHandler.d.ts +18 -0
- package/dist/src/nextjs/routeHandler.d.ts.map +1 -0
- package/dist/src/nextjs/routeHandler.js +216 -0
- package/dist/src/nextjs/routeHandler.js.map +1 -0
- package/dist/src/nextjs/utils.d.ts +3 -0
- package/dist/src/nextjs/utils.d.ts.map +1 -0
- package/dist/src/nextjs/utils.js +5 -0
- package/dist/src/nextjs/utils.js.map +1 -0
- package/dist/src/reactjs/components/SignInButton.d.ts +8 -0
- package/dist/src/reactjs/components/SignInButton.d.ts.map +1 -0
- package/dist/src/reactjs/components/SignInButton.js +14 -0
- package/dist/src/reactjs/components/SignInButton.js.map +1 -0
- package/dist/src/reactjs/components/SignOutButton.d.ts +6 -0
- package/dist/src/reactjs/components/SignOutButton.d.ts.map +1 -0
- package/dist/src/reactjs/components/SignOutButton.js +14 -0
- package/dist/src/reactjs/components/SignOutButton.js.map +1 -0
- package/dist/src/reactjs/components/UserButton.d.ts +8 -0
- package/dist/src/reactjs/components/UserButton.d.ts.map +1 -0
- package/dist/src/reactjs/components/UserButton.js +110 -0
- package/dist/src/reactjs/components/UserButton.js.map +1 -0
- package/dist/src/reactjs/components/index.d.ts +6 -0
- package/dist/src/reactjs/components/index.d.ts.map +1 -0
- package/dist/src/reactjs/components/index.js +6 -0
- package/dist/src/reactjs/components/index.js.map +1 -0
- package/dist/src/reactjs/hooks/index.d.ts +8 -0
- package/dist/src/reactjs/hooks/index.d.ts.map +1 -0
- package/dist/src/reactjs/hooks/index.js +8 -0
- package/dist/src/reactjs/hooks/index.js.map +1 -0
- package/dist/src/reactjs/hooks/useAuth.d.ts +3 -0
- package/dist/src/reactjs/hooks/useAuth.d.ts.map +1 -0
- package/dist/src/reactjs/hooks/useAuth.js +12 -0
- package/dist/src/reactjs/hooks/useAuth.js.map +1 -0
- package/dist/src/reactjs/hooks/useUser.d.ts +4 -0
- package/dist/src/reactjs/hooks/useUser.d.ts.map +1 -0
- package/dist/src/reactjs/hooks/useUser.js +12 -0
- package/dist/src/reactjs/hooks/useUser.js.map +1 -0
- package/dist/src/reactjs/index.d.ts +6 -0
- package/dist/src/reactjs/index.d.ts.map +1 -0
- package/dist/src/reactjs/index.js +8 -0
- package/dist/src/reactjs/index.js.map +1 -0
- package/dist/src/reactjs/providers/index.d.ts +8 -0
- package/dist/src/reactjs/providers/index.d.ts.map +1 -0
- package/dist/src/reactjs/providers/index.js +7 -0
- package/dist/src/reactjs/providers/index.js.map +1 -0
- package/dist/src/server/ServerAuthenticationResolver.d.ts +18 -0
- package/dist/src/server/ServerAuthenticationResolver.d.ts.map +1 -0
- package/dist/src/server/ServerAuthenticationResolver.js +62 -0
- package/dist/src/server/ServerAuthenticationResolver.js.map +1 -0
- package/dist/src/server/config.d.ts +16 -0
- package/dist/src/server/config.d.ts.map +1 -0
- package/dist/src/server/config.js +2 -0
- package/dist/src/server/config.js.map +1 -0
- package/dist/src/server/index.d.ts +6 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +5 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/server/login.d.ts +17 -0
- package/dist/src/server/login.d.ts.map +1 -0
- package/dist/src/server/login.js +37 -0
- package/dist/src/server/login.js.map +1 -0
- package/dist/src/server/refresh.d.ts +7 -0
- package/dist/src/server/refresh.d.ts.map +1 -0
- package/dist/src/server/refresh.js +13 -0
- package/dist/src/server/refresh.js.map +1 -0
- package/dist/src/services/AuthenticationService.d.ts +87 -0
- package/dist/src/services/AuthenticationService.d.ts.map +1 -0
- package/dist/src/services/AuthenticationService.js +222 -0
- package/dist/src/services/AuthenticationService.js.map +1 -0
- package/dist/src/services/PKCE.d.ts +20 -0
- package/dist/src/services/PKCE.d.ts.map +1 -0
- package/dist/src/services/PKCE.js +44 -0
- package/dist/src/services/PKCE.js.map +1 -0
- package/dist/src/services/types.d.ts +23 -0
- package/dist/src/services/types.d.ts.map +1 -0
- package/dist/src/services/types.js +7 -0
- package/dist/src/services/types.js.map +1 -0
- package/dist/src/shared/components/CivicAuthIframe.d.ts +8 -0
- package/dist/src/shared/components/CivicAuthIframe.d.ts.map +1 -0
- package/dist/src/shared/components/CivicAuthIframe.js +9 -0
- package/dist/src/shared/components/CivicAuthIframe.js.map +1 -0
- package/dist/src/shared/components/CivicAuthIframeContainer.d.ts +9 -0
- package/dist/src/shared/components/CivicAuthIframeContainer.d.ts.map +1 -0
- package/dist/src/shared/components/CivicAuthIframeContainer.js +130 -0
- package/dist/src/shared/components/CivicAuthIframeContainer.js.map +1 -0
- package/dist/src/shared/components/CloseIcon.d.ts +4 -0
- package/dist/src/shared/components/CloseIcon.d.ts.map +1 -0
- package/dist/src/shared/components/CloseIcon.js +6 -0
- package/dist/src/shared/components/CloseIcon.js.map +1 -0
- package/dist/src/shared/components/LoadingIcon.d.ts +4 -0
- package/dist/src/shared/components/LoadingIcon.d.ts.map +1 -0
- package/dist/src/shared/components/LoadingIcon.js +24 -0
- package/dist/src/shared/components/LoadingIcon.js.map +1 -0
- package/dist/src/shared/hooks/index.d.ts +5 -0
- package/dist/src/shared/hooks/index.d.ts.map +1 -0
- package/dist/src/shared/hooks/index.js +5 -0
- package/dist/src/shared/hooks/index.js.map +1 -0
- package/dist/src/shared/hooks/useAuth.d.ts +3 -0
- package/dist/src/shared/hooks/useAuth.d.ts.map +1 -0
- package/dist/src/shared/hooks/useAuth.js +12 -0
- package/dist/src/shared/hooks/useAuth.js.map +1 -0
- package/dist/src/shared/hooks/useConfig.d.ts +3 -0
- package/dist/src/shared/hooks/useConfig.d.ts.map +1 -0
- package/dist/src/shared/hooks/useConfig.js +13 -0
- package/dist/src/shared/hooks/useConfig.js.map +1 -0
- package/dist/src/shared/hooks/useIframe.d.ts +3 -0
- package/dist/src/shared/hooks/useIframe.d.ts.map +1 -0
- package/dist/src/shared/hooks/useIframe.js +13 -0
- package/dist/src/shared/hooks/useIframe.js.map +1 -0
- package/dist/src/shared/hooks/useSession.d.ts +3 -0
- package/dist/src/shared/hooks/useSession.d.ts.map +1 -0
- package/dist/src/shared/hooks/useSession.js +13 -0
- package/dist/src/shared/hooks/useSession.js.map +1 -0
- package/dist/src/shared/hooks/useToken.d.ts +3 -0
- package/dist/src/shared/hooks/useToken.d.ts.map +1 -0
- package/dist/src/shared/hooks/useToken.js +12 -0
- package/dist/src/shared/hooks/useToken.js.map +1 -0
- package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts +15 -0
- package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -0
- package/dist/src/shared/lib/GenericAuthenticationRefresher.js +43 -0
- package/dist/src/shared/lib/GenericAuthenticationRefresher.js.map +1 -0
- package/dist/src/shared/lib/UserSession.d.ts +12 -0
- package/dist/src/shared/lib/UserSession.d.ts.map +1 -0
- package/dist/src/shared/lib/UserSession.js +20 -0
- package/dist/src/shared/lib/UserSession.js.map +1 -0
- package/dist/src/shared/lib/session.d.ts +3 -0
- package/dist/src/shared/lib/session.d.ts.map +1 -0
- package/dist/src/shared/lib/session.js +10 -0
- package/dist/src/shared/lib/session.js.map +1 -0
- package/dist/src/shared/lib/storage.d.ts +25 -0
- package/dist/src/shared/lib/storage.d.ts.map +1 -0
- package/dist/src/shared/lib/storage.js +17 -0
- package/dist/src/shared/lib/storage.js.map +1 -0
- package/dist/src/shared/lib/types.d.ts +22 -0
- package/dist/src/shared/lib/types.d.ts.map +1 -0
- package/dist/src/shared/lib/types.js +16 -0
- package/dist/src/shared/lib/types.js.map +1 -0
- package/dist/src/shared/lib/util.d.ts +33 -0
- package/dist/src/shared/lib/util.d.ts.map +1 -0
- package/dist/src/shared/lib/util.js +126 -0
- package/dist/src/shared/lib/util.js.map +1 -0
- package/dist/src/shared/providers/AuthContext.d.ts +10 -0
- package/dist/src/shared/providers/AuthContext.d.ts.map +1 -0
- package/dist/src/shared/providers/AuthContext.js +3 -0
- package/dist/src/shared/providers/AuthContext.js.map +1 -0
- package/dist/src/shared/providers/AuthProvider.d.ts +20 -0
- package/dist/src/shared/providers/AuthProvider.d.ts.map +1 -0
- package/dist/src/shared/providers/AuthProvider.js +263 -0
- package/dist/src/shared/providers/AuthProvider.js.map +1 -0
- package/dist/src/shared/providers/CivicAuthProvider.d.ts +6 -0
- package/dist/src/shared/providers/CivicAuthProvider.d.ts.map +1 -0
- package/dist/src/shared/providers/CivicAuthProvider.js +15 -0
- package/dist/src/shared/providers/CivicAuthProvider.js.map +1 -0
- package/dist/src/shared/providers/ConfigProvider.d.ts +21 -0
- package/dist/src/shared/providers/ConfigProvider.d.ts.map +1 -0
- package/dist/src/shared/providers/ConfigProvider.js +19 -0
- package/dist/src/shared/providers/ConfigProvider.js.map +1 -0
- package/dist/src/shared/providers/IframeProvider.d.ts +16 -0
- package/dist/src/shared/providers/IframeProvider.d.ts.map +1 -0
- package/dist/src/shared/providers/IframeProvider.js +11 -0
- package/dist/src/shared/providers/IframeProvider.js.map +1 -0
- package/dist/src/shared/providers/SessionProvider.d.ts +13 -0
- package/dist/src/shared/providers/SessionProvider.d.ts.map +1 -0
- package/dist/src/shared/providers/SessionProvider.js +13 -0
- package/dist/src/shared/providers/SessionProvider.js.map +1 -0
- package/dist/src/shared/providers/TokenProvider.d.ts +18 -0
- package/dist/src/shared/providers/TokenProvider.d.ts.map +1 -0
- package/dist/src/shared/providers/TokenProvider.js +53 -0
- package/dist/src/shared/providers/TokenProvider.js.map +1 -0
- package/dist/src/shared/providers/UserProvider.d.ts +18 -0
- package/dist/src/shared/providers/UserProvider.d.ts.map +1 -0
- package/dist/src/shared/providers/UserProvider.js +38 -0
- package/dist/src/shared/providers/UserProvider.js.map +1 -0
- package/dist/src/types.d.ts +146 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils.d.ts +15 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +43 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/storage-ANmRwpZ3.d.ts +25 -0
- package/dist/storage-B2eAQNdv.d.ts +25 -0
- package/dist/storage-BJPUpxhm.d.mts +25 -0
- package/dist/storage-BJyqsZwC.d.mts +25 -0
- package/dist/test/integration/sdk.test.d.ts +2 -0
- package/dist/test/integration/sdk.test.d.ts.map +1 -0
- package/dist/test/integration/sdk.test.js +183 -0
- package/dist/test/integration/sdk.test.js.map +1 -0
- package/dist/test/support/fixtures.d.ts +26 -0
- package/dist/test/support/fixtures.d.ts.map +1 -0
- package/dist/test/support/fixtures.js +55 -0
- package/dist/test/support/fixtures.js.map +1 -0
- package/dist/test/support/tokens.json +26 -0
- package/dist/test/unit/lib/oauth.test.d.ts +2 -0
- package/dist/test/unit/lib/oauth.test.d.ts.map +1 -0
- package/dist/test/unit/lib/oauth.test.js +55 -0
- package/dist/test/unit/lib/oauth.test.js.map +1 -0
- package/dist/test/unit/logger.test.d.ts +2 -0
- package/dist/test/unit/logger.test.d.ts.map +1 -0
- package/dist/test/unit/logger.test.js +141 -0
- package/dist/test/unit/logger.test.js.map +1 -0
- package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts +2 -0
- package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts.map +1 -0
- package/dist/test/unit/nextjs/NextAuthProvider.test.js +29 -0
- package/dist/test/unit/nextjs/NextAuthProvider.test.js.map +1 -0
- package/dist/test/unit/nextjs/config.test.d.ts +2 -0
- package/dist/test/unit/nextjs/config.test.d.ts.map +1 -0
- package/dist/test/unit/nextjs/config.test.js +189 -0
- package/dist/test/unit/nextjs/config.test.js.map +1 -0
- package/dist/test/unit/nextjs/getUser.test.d.ts +2 -0
- package/dist/test/unit/nextjs/getUser.test.d.ts.map +1 -0
- package/dist/test/unit/nextjs/getUser.test.js +36 -0
- package/dist/test/unit/nextjs/getUser.test.js.map +1 -0
- package/dist/test/unit/nextjs/middleware.test.d.ts +2 -0
- package/dist/test/unit/nextjs/middleware.test.d.ts.map +1 -0
- package/dist/test/unit/nextjs/middleware.test.js +113 -0
- package/dist/test/unit/nextjs/middleware.test.js.map +1 -0
- package/dist/test/unit/nextjs/utils.test.d.ts +2 -0
- package/dist/test/unit/nextjs/utils.test.d.ts.map +1 -0
- package/dist/test/unit/nextjs/utils.test.js +13 -0
- package/dist/test/unit/nextjs/utils.test.js.map +1 -0
- package/dist/test/unit/publicApi/apiSnapshot.test.d.ts +2 -0
- package/dist/test/unit/publicApi/apiSnapshot.test.d.ts.map +1 -0
- package/dist/test/unit/publicApi/apiSnapshot.test.js +10 -0
- package/dist/test/unit/publicApi/apiSnapshot.test.js.map +1 -0
- package/dist/test/unit/react/components/SignInButton.test.d.ts +2 -0
- package/dist/test/unit/react/components/SignInButton.test.d.ts.map +1 -0
- package/dist/test/unit/react/components/SignInButton.test.js +31 -0
- package/dist/test/unit/react/components/SignInButton.test.js.map +1 -0
- package/dist/test/unit/react/components/SignOutButton.test.d.ts +2 -0
- package/dist/test/unit/react/components/SignOutButton.test.d.ts.map +1 -0
- package/dist/test/unit/react/components/SignOutButton.test.js +30 -0
- package/dist/test/unit/react/components/SignOutButton.test.js.map +1 -0
- package/dist/test/unit/server/login.test.d.ts +2 -0
- package/dist/test/unit/server/login.test.d.ts.map +1 -0
- package/dist/test/unit/server/login.test.js +127 -0
- package/dist/test/unit/server/login.test.js.map +1 -0
- package/dist/test/unit/server/session.test.d.ts +2 -0
- package/dist/test/unit/server/session.test.d.ts.map +1 -0
- package/dist/test/unit/server/session.test.js +41 -0
- package/dist/test/unit/server/session.test.js.map +1 -0
- package/dist/test/unit/services/AuthenticationService.test.d.ts +2 -0
- package/dist/test/unit/services/AuthenticationService.test.d.ts.map +1 -0
- package/dist/test/unit/services/AuthenticationService.test.js +104 -0
- package/dist/test/unit/services/AuthenticationService.test.js.map +1 -0
- package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts +2 -0
- package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts.map +1 -0
- package/dist/test/unit/services/ServerAuthenticationResolver.test.js +74 -0
- package/dist/test/unit/services/ServerAuthenticationResolver.test.js.map +1 -0
- package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts +2 -0
- package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts.map +1 -0
- package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js +61 -0
- package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js.map +1 -0
- package/dist/test/unit/shared/UserSession.test.d.ts +2 -0
- package/dist/test/unit/shared/UserSession.test.d.ts.map +1 -0
- package/dist/test/unit/shared/UserSession.test.js +37 -0
- package/dist/test/unit/shared/UserSession.test.js.map +1 -0
- package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts +2 -0
- package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts.map +1 -0
- package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js +120 -0
- package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js.map +1 -0
- package/dist/test/unit/shared/storage.test.d.ts +2 -0
- package/dist/test/unit/shared/storage.test.d.ts.map +1 -0
- package/dist/test/unit/shared/storage.test.js +53 -0
- package/dist/test/unit/shared/storage.test.js.map +1 -0
- package/dist/test/unit/utils.test.d.ts +2 -0
- package/dist/test/unit/utils.test.d.ts.map +1 -0
- package/dist/test/unit/utils.test.js +40 -0
- package/dist/test/unit/utils.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types-Bqm9OCZN.d.mts +22 -0
- package/dist/types-Bqm9OCZN.d.ts +22 -0
- package/dist/types-BxAubCqO.d.mts +58 -0
- package/dist/types-BxAubCqO.d.ts +58 -0
- package/dist/types-DOfl9w7j.d.mts +23 -0
- package/dist/types-DOfl9w7j.d.ts +23 -0
- package/dist/types-HdCjGldB.d.mts +58 -0
- package/dist/types-HdCjGldB.d.ts +58 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +40 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +53 -43
- package/src/browser/storage.ts +11 -0
- package/src/config.ts +6 -0
- package/src/constants.ts +29 -0
- package/src/index.ts +16 -0
- package/src/lib/cookies.ts +28 -0
- package/src/lib/jwt.ts +15 -0
- package/src/lib/logger.ts +72 -0
- package/src/lib/oauth.ts +83 -0
- package/src/lib/postMessage.ts +22 -0
- package/src/lib/windowUtil.ts +29 -0
- package/src/nextjs/GetUser.ts +22 -0
- package/src/nextjs/config.ts +205 -0
- package/src/nextjs/cookies.ts +162 -0
- package/src/nextjs/hooks/index.ts +1 -0
- package/src/nextjs/hooks/useTokenCookie.ts +41 -0
- package/src/nextjs/hooks/useUserCookie.ts +41 -0
- package/src/nextjs/index.ts +20 -0
- package/src/nextjs/middleware/index.ts +1 -0
- package/src/nextjs/middleware.ts +155 -0
- package/src/nextjs/providers/NextAuthProvider.tsx +87 -0
- package/src/nextjs/routeHandler.ts +297 -0
- package/src/nextjs/utils.ts +9 -0
- package/src/reactjs/components/SignInButton.tsx +32 -0
- package/src/reactjs/components/SignOutButton.tsx +24 -0
- package/src/reactjs/components/UserButton.tsx +215 -0
- package/src/reactjs/components/index.ts +5 -0
- package/src/reactjs/hooks/index.ts +6 -0
- package/src/reactjs/hooks/useAuth.ts +15 -0
- package/src/reactjs/hooks/useUser.ts +20 -0
- package/src/reactjs/index.ts +19 -0
- package/src/reactjs/providers/index.ts +27 -0
- package/src/server/ServerAuthenticationResolver.ts +102 -0
- package/src/server/config.ts +17 -0
- package/src/server/index.ts +12 -0
- package/src/server/login.ts +59 -0
- package/src/server/refresh.ts +23 -0
- package/src/services/AuthenticationService.ts +324 -0
- package/src/services/PKCE.ts +45 -0
- package/src/services/types.ts +54 -0
- package/src/shared/components/CivicAuthIframe.tsx +26 -0
- package/src/shared/components/CivicAuthIframeContainer.tsx +190 -0
- package/src/shared/components/CloseIcon.tsx +21 -0
- package/src/shared/components/LoadingIcon.tsx +53 -0
- package/src/shared/hooks/index.ts +4 -0
- package/src/shared/hooks/useAuth.ts +15 -0
- package/src/shared/hooks/useConfig.ts +14 -0
- package/src/shared/hooks/useIframe.ts +14 -0
- package/src/shared/hooks/useSession.ts +14 -0
- package/src/shared/hooks/useToken.ts +15 -0
- package/src/shared/lib/GenericAuthenticationRefresher.ts +70 -0
- package/src/shared/lib/UserSession.ts +25 -0
- package/src/shared/lib/session.ts +11 -0
- package/src/shared/lib/storage.ts +40 -0
- package/src/shared/lib/types.ts +26 -0
- package/src/shared/lib/util.ts +217 -0
- package/src/shared/providers/AuthContext.tsx +11 -0
- package/src/shared/providers/AuthProvider.tsx +390 -0
- package/src/shared/providers/CivicAuthProvider.tsx +31 -0
- package/src/shared/providers/ConfigProvider.tsx +50 -0
- package/src/shared/providers/IframeProvider.tsx +34 -0
- package/src/shared/providers/SessionProvider.tsx +29 -0
- package/src/shared/providers/TokenProvider.tsx +78 -0
- package/src/shared/providers/UserProvider.tsx +80 -0
- package/src/types.ts +227 -0
- package/src/utils.ts +58 -0
- package/test/integration/sdk.test.tsx +266 -0
- package/test/support/fixtures.ts +56 -0
- package/test/support/tokens.json +26 -0
- package/test/unit/lib/oauth.test.ts +72 -0
- package/test/unit/logger.test.ts +175 -0
- package/test/unit/nextjs/NextAuthProvider.test.tsx +38 -0
- package/test/unit/nextjs/config.test.ts +218 -0
- package/test/unit/nextjs/getUser.test.ts +41 -0
- package/test/unit/nextjs/middleware.test.ts +138 -0
- package/test/unit/nextjs/routeHandler.test.ts.skipped +369 -0
- package/test/unit/nextjs/utils.test.ts +17 -0
- package/test/unit/publicApi/__snapshots__/apiSnapshot.test.ts.snap +17 -0
- package/test/unit/publicApi/apiSnapshot.test.ts +11 -0
- package/test/unit/react/components/SignInButton.test.tsx +50 -0
- package/test/unit/react/components/SignOutButton.test.tsx +49 -0
- package/test/unit/server/login.test.ts +181 -0
- package/test/unit/server/session.test.ts +51 -0
- package/test/unit/services/AuthenticationService.test.ts +152 -0
- package/test/unit/services/ServerAuthenticationResolver.test.ts +115 -0
- package/test/unit/shared/GenericAuthenticationRefresher.test.ts +89 -0
- package/test/unit/shared/UserSession.test.ts +42 -0
- package/test/unit/shared/components/CivicAuthIframeContainer.test.tsx +154 -0
- package/test/unit/shared/storage.test.ts +67 -0
- package/test/unit/utils.test.ts +48 -0
- package/tsconfig.build.json +5 -0
- package/tsconfig.cjs.json +8 -0
- package/tsconfig.esm.json +7 -0
- package/tsconfig.json +42 -0
- package/vitest.config.ts +41 -0
- package/dist/chunk-4GIHS7LB.js.map +0 -1
- package/dist/chunk-GNGLWGZJ.mjs +0 -238
- package/dist/chunk-GNGLWGZJ.mjs.map +0 -1
- package/dist/chunk-NQPMNXBL.mjs.map +0 -1
- package/dist/chunk-UV56GNIT.mjs.map +0 -1
- package/dist/chunk-VXIWRZWU.js +0 -238
- package/dist/chunk-VXIWRZWU.js.map +0 -1
- package/dist/chunk-WPISYQG3.js.map +0 -1
- package/dist/index-DoDoIY_K.d.mts +0 -79
- package/dist/index-DoDoIY_K.d.ts +0 -79
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/lucas/dev/civic/civic-auth/packages/civic-auth-client/dist/react.js","../src/react/hooks/useUser.tsx","../src/react/providers/UserProvider.tsx","../src/react/hooks/useAuth.tsx","../src/shared/AuthContext.tsx","../src/react/hooks/useToken.tsx","../src/react/providers/TokenProvider.tsx","../src/react/hooks/useSession.tsx","../src/react/providers/SessionProvider.tsx","../src/lib/jwt.ts","../src/shared/AuthProvider.tsx","../src/services/UserInfoService.ts","../src/services/SessionService.ts","../src/react/components/CivicAuthIframeModal.tsx","../src/react/components/LoadingIcon.tsx","../src/react/components/CloseIcon.tsx","../src/react/components/CivicAuthIframe.tsx","../src/config.ts","../src/lib/windowUtil.ts","../src/shared/CivicAuthProvider.tsx","../src/react/providers/NextAuthProvider.tsx","../src/react/hooks/useUserCookie.ts","../src/lib/cookies.ts","../src/react/components/UserButton.tsx","../src/react/components/SignInButton.tsx","../src/react/components/SignOutButton.tsx","../src/react/components/NextLogOut.tsx"],"names":["createContext","useContext","queryClient","jsx","user","parseJWT","jsxs","useState","useMemo","useCallback","useRef","useEffect"],"mappings":"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","file":"/Users/lucas/dev/civic/civic-auth/packages/civic-auth-client/dist/react.js","sourcesContent":[null,"\"use client\";\nimport { useContext } from \"react\";\nimport { UserContext, UserContextType } from \"@/react/providers\";\n\nconst useUser = <\n T extends Record<string, unknown> = Record<string, never>,\n>(): UserContextType<T> => {\n const context = useContext(UserContext);\n\n if (!context) {\n throw new Error(\"useUser must be used within a UserProvider\");\n }\n\n return context as UserContextType<T>;\n};\n\nexport { useUser };\n","\"use client\";\nimport { createContext, ReactNode } from \"react\";\nimport { useQuery, UseQueryResult } from \"@tanstack/react-query\";\nimport { JWT } from \"oslo/jwt\";\nimport { EmptyObject, User, UserInfoService } from \"@/types\";\nimport { useAuth } from \"@/react/hooks/useAuth\";\nimport { useToken } from \"@/react/hooks/useToken\";\nimport { useSession } from \"@/react/hooks/useSession\";\nimport { AuthContextType } from \"@/shared/AuthContext\";\n\ntype UserContextType<\n T extends Record<string, unknown> & JWT[\"payload\"] = Record<string, unknown> &\n JWT[\"payload\"],\n> = {\n user: User<T> | null;\n} & Omit<AuthContextType, \"isAuthenticated\">;\n\nconst UserContext = createContext<UserContextType | null>(null);\n\nconst UserProvider = <T extends EmptyObject>({\n children,\n userInfoService,\n}: {\n children: ReactNode;\n userInfoService: UserInfoService | undefined;\n}) => {\n const { isLoading: authLoading, error: authError } = useAuth();\n const session = useSession();\n const { forwardedTokens, idToken, accessToken, refreshToken } = useToken();\n const { signIn, signOut } = useAuth();\n\n const fetchUser = async (): Promise<User<T> | null> => {\n if (!accessToken || !userInfoService) {\n return null;\n }\n const user = await userInfoService?.getUserInfo<T>(accessToken, idToken);\n if (!user) {\n return null;\n }\n return {\n ...user,\n forwardedTokens,\n idToken,\n accessToken,\n refreshToken,\n };\n };\n\n const {\n data: user,\n isLoading: userLoading,\n error: userError,\n }: UseQueryResult<User<T> | null, Error> = useQuery({\n queryKey: [\"user\", session?.idToken],\n queryFn: fetchUser,\n enabled: !!session?.idToken, // Only run the query if we have an access token\n });\n\n const isLoading = authLoading || userLoading;\n const error = authError || userError;\n\n return (\n <UserContext.Provider\n value={{\n user: user ?? null,\n isLoading,\n error,\n signIn,\n signOut,\n }}\n >\n {children}\n </UserContext.Provider>\n );\n};\n\nexport type { UserContextType };\n\nexport { UserProvider, UserContext };\n","\"use client\";\nimport { useContext } from \"react\";\n\nimport { AuthContext } from \"@/shared/AuthContext.tsx\";\n\nconst useAuth = () => {\n const context = useContext(AuthContext);\n\n if (!context) {\n throw new Error(\"useAuth must be used within an AuthProvider\");\n }\n\n return context;\n};\n\nexport { useAuth };\n","import { createContext } from \"react\";\nimport { DisplayMode } from \"@/types.ts\";\n\nexport type AuthContextType = {\n signIn: (displayMode?: DisplayMode) => Promise<void>;\n isAuthenticated: boolean;\n isLoading: boolean;\n error: Error | null;\n signOut: () => Promise<void>;\n};\nexport const AuthContext = createContext<AuthContextType | null>(null);\n","\"use client\";\nimport { useContext } from \"react\";\nimport { TokenContext } from \"@/react/providers/TokenProvider\";\n\nconst useToken = () => {\n const context = useContext(TokenContext);\n\n if (!context) {\n throw new Error(\"useToken must be used within a TokenProvider\");\n }\n\n return context;\n};\n\nexport { useToken };\n","\"use client\";\nimport { createContext, ReactNode, useMemo } from \"react\";\nimport { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useAuth } from \"@/react/hooks/useAuth\";\nimport { useSession } from \"@/react/hooks/useSession\";\nimport { ForwardedTokens, IdToken } from \"@/types\";\nimport { parseJWT } from \"oslo/jwt\";\nimport { convertForwardedTokenFormat } from \"@/lib/jwt.js\";\n\ntype TokenContextType = {\n accessToken: string | null;\n idToken: string | null;\n forwardedTokens: ForwardedTokens;\n refreshToken: () => Promise<void>;\n isLoading: boolean;\n error: Error | null;\n};\n\nconst TokenContext = createContext<TokenContextType | undefined>(undefined);\n\nconst TokenProvider = ({ children }: { children: ReactNode }) => {\n const { isLoading, error: authError } = useAuth();\n const session = useSession();\n const queryClient = useQueryClient();\n\n const refreshTokenMutation = useMutation({\n mutationFn: async () => {\n // Implement token refresh logic here\n throw new Error(\"Method not implemented.\");\n },\n onSuccess: () => {\n // Invalidate and refetch queries that depend on the auth session\n queryClient.invalidateQueries({ queryKey: [\"session\"] });\n },\n });\n\n const decodeTokens = useMemo(() => {\n if (!session?.idToken) return null;\n\n const parsedJWT = parseJWT(session.idToken) as IdToken | null;\n\n if (!parsedJWT) return null;\n\n const { forwardedTokens } = parsedJWT.payload;\n\n return forwardedTokens\n ? convertForwardedTokenFormat(forwardedTokens)\n : null;\n }, [session?.idToken]);\n\n const value = useMemo(\n () => ({\n accessToken: session.accessToken || null,\n idToken: session.idToken || null,\n forwardedTokens: decodeTokens || {},\n refreshToken: refreshTokenMutation.mutateAsync,\n isLoading,\n error: (authError || refreshTokenMutation.error) as Error | null,\n }),\n [\n session.accessToken,\n session.idToken,\n decodeTokens,\n refreshTokenMutation.mutateAsync,\n refreshTokenMutation.error,\n isLoading,\n authError,\n ],\n );\n\n return (\n <TokenContext.Provider value={value}>{children}</TokenContext.Provider>\n );\n};\n\nexport type { TokenContextType };\nexport { TokenProvider, TokenContext };\n","\"use client\";\nimport { useContext } from \"react\";\nimport { SessionContext } from \"@/react/providers/SessionProvider\";\n\n// TokenProvider will use this internal context to access session\nconst useSession = () => {\n const context = useContext(SessionContext);\n if (!context) {\n throw new Error(\"useSession must be used within an SessionProvider\");\n }\n return context;\n};\n\nexport { useSession };\n","\"use client\";\nimport { SessionData } from \"@/types\";\nimport React, { createContext, ReactNode } from \"react\";\n\nconst defaultSession: SessionData = {\n authenticated: false,\n idToken: undefined,\n accessToken: undefined,\n displayMode: \"iframe\",\n};\n\n// Context for exposing session specifically to the TokenProvider\nconst SessionContext = createContext<SessionData>(defaultSession);\n\ntype SessionContextType = {\n children: ReactNode;\n session?: SessionData;\n};\n\nconst SessionProvider = ({ children, session }: SessionContextType) => (\n <SessionContext.Provider value={session || defaultSession}>\n {children}\n </SessionContext.Provider>\n);\n\nexport type { SessionContextType };\nexport { SessionProvider, SessionContext };\n","import { ForwardedTokens, ForwardedTokensJWT } from \"@/types.js\";\n\nexport const convertForwardedTokenFormat = (\n inputTokens: ForwardedTokensJWT,\n): ForwardedTokens =>\n Object.fromEntries(\n Object.entries(inputTokens).map(([source, tokens]) => [\n source,\n {\n idToken: tokens?.id_token,\n accessToken: tokens?.access_token,\n refreshToken: tokens?.refresh_token,\n },\n ]),\n );\n","\"use client\";\nimport {\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { AuthSessionServiceImpl } from \"@/services\";\nimport { Config, DisplayMode, UserInfoService } from \"@/types\";\nimport { CivicAuthIframeModal } from \"@/react/components/CivicAuthIframeModal\";\nimport { TokenProvider } from \"../react/providers/TokenProvider\";\nimport { UserProvider } from \"../react/providers/UserProvider\";\nimport { SessionProvider } from \"../react/providers/SessionProvider\";\nimport { DEFAULT_SCOPES } from \"@/constants\";\nimport { authConfig } from \"@/config\";\nimport { LoadingIcon } from \"../react/components/LoadingIcon\";\nimport { isWindowInIframe } from \"@/lib/windowUtil\";\nimport { AuthContext } from \"@/shared/AuthContext\";\n\n// Global this object setup\nlet globalThisObject;\nif (typeof window !== \"undefined\") {\n globalThisObject = window;\n} else if (typeof global !== \"undefined\") {\n globalThisObject = global;\n} else {\n globalThisObject = Function(\"return this\")();\n}\nglobalThisObject.globalThis = globalThisObject;\n\nexport type AuthProviderProps = {\n children: ReactNode;\n clientId: string;\n redirectUrl?: string;\n nonce?: string;\n config?: Config;\n onSignIn?: (error?: Error) => void;\n onSignOut?: () => void;\n authServiceImpl?: AuthSessionServiceImpl;\n serverSideTokenExchange?: boolean;\n};\n\nconst AuthProvider = ({\n children,\n clientId,\n redirectUrl: inputRedirectUrl,\n config = authConfig,\n nonce,\n onSignIn,\n onSignOut,\n authServiceImpl,\n serverSideTokenExchange,\n}: AuthProviderProps) => {\n const [iframeUrl, setIframeUrl] = useState<string | null>(null);\n const [currentUrl, setCurrentUrl] = useState<string | null>(null);\n const [isInIframe, setIsInIframe] = useState(false);\n const [authResponseUrl, setAuthResponseUrl] = useState<string | null>(null);\n const [tokenExchangeError, setTokenExchangeError] = useState<Error>();\n const queryClient = useQueryClient();\n const iframeRef = useRef<HTMLIFrameElement>(null);\n\n // check if the current window is in an iframe with the iframe id, and set an isInIframe state\n useEffect(() => {\n if (typeof globalThis.window !== \"undefined\") {\n setCurrentUrl(globalThis.window.location.href);\n const isInIframeVal = isWindowInIframe(globalThis.window);\n setIsInIframe(isInIframeVal);\n }\n }, []);\n\n const redirectUrl = useMemo(\n () => (inputRedirectUrl || currentUrl || \"\").split(\"?\")[0],\n [currentUrl, inputRedirectUrl],\n );\n\n const authService = useMemo<AuthSessionServiceImpl | null>(\n () =>\n currentUrl\n ? authServiceImpl ||\n new AuthSessionServiceImpl(\n clientId,\n redirectUrl,\n config?.oauthServer,\n config?.endpoints,\n )\n : null,\n [currentUrl, clientId, redirectUrl, config, authServiceImpl],\n );\n\n const [userInfoService, setUserInfoService] = useState<UserInfoService>();\n useEffect(() => {\n if (!authService) return;\n authService.getUserInfoService().then(setUserInfoService);\n }, [authService]);\n\n const {\n data: session,\n isLoading,\n error,\n } = useQuery({\n queryKey: [\"session\", authResponseUrl, iframeUrl, currentUrl, isInIframe],\n queryFn: async () => {\n if (!authService) {\n return { authenticated: false };\n }\n const url = new URL(\n authResponseUrl\n ? authResponseUrl\n : globalThis.window.location.href || \"\",\n );\n\n const code = url.searchParams.get(\"code\");\n if (code && !isInIframe && !serverSideTokenExchange) {\n try {\n console.log(\"AuthProvider useQuery code\", { isInIframe, code });\n const newSession = await authService.tokenExchange(url.toString());\n onSignIn?.(); // Call onSignIn without an error if successful\n return newSession;\n } catch (error) {\n setTokenExchangeError(error as Error);\n onSignIn?.(\n error instanceof Error ? error : new Error(\"Failed to sign in\"),\n ); // Pass the error to onSignIn\n return { authenticated: false };\n }\n }\n // if we have existing tokens, then validate them and return the session data\n // otherwise check if we have a code in the url and exchange it for tokens\n // if we have neither, return undefined\n const existingSessionData = await authService.validateExistingSession();\n if (existingSessionData.authenticated) {\n return existingSessionData;\n }\n return existingSessionData;\n },\n });\n\n const signOutMutation = useMutation({\n mutationFn: async () => {\n // Implement signOut logic here\n authService?.updateSessionData({});\n setIframeUrl(null);\n setAuthResponseUrl(null);\n onSignOut?.();\n },\n onSuccess: () => {\n queryClient.setQueryData(\n [\"session\", authResponseUrl, iframeUrl, currentUrl, isInIframe],\n null,\n );\n },\n });\n\n const signIn = useCallback(\n async (overrideDisplayMode: DisplayMode = \"iframe\") => {\n if (!authService) return;\n\n const url = await authService.getAuthorizationUrl(\n // This is the default scope. We will eventually pull this from the partner dashboard\n DEFAULT_SCOPES,\n overrideDisplayMode,\n nonce,\n );\n\n // For iframe mode we need popups to not be blocked because the login app will try to open IDP login in a popup\n if (overrideDisplayMode === \"iframe\") {\n setIframeUrl(url);\n return;\n }\n authService.loadAuthorizationUrl(url, overrideDisplayMode);\n },\n [authService, nonce],\n );\n\n const isAuthenticated = useMemo(\n () => (session ? session.authenticated : false),\n [session],\n );\n\n const value = useMemo(\n () => ({\n isLoading,\n error: error as Error | null,\n signOut: async () => {\n await signOutMutation.mutateAsync();\n },\n isAuthenticated,\n signIn,\n }),\n [isLoading, error, signOutMutation, isAuthenticated, signIn],\n );\n return (\n <AuthContext.Provider value={value}>\n <SessionProvider session={session}>\n <TokenProvider>\n <UserProvider userInfoService={userInfoService}>\n {!isInIframe && iframeUrl && !session?.authenticated && (\n <CivicAuthIframeModal\n iframeRef={iframeRef}\n authUrl={iframeUrl}\n redirectUri={redirectUrl}\n setAuthResponseUrl={setAuthResponseUrl}\n onClose={() => setIframeUrl(null)}\n />\n )}\n {(tokenExchangeError ||\n isLoading ||\n error ||\n (isInIframe && !(tokenExchangeError || error))) && (\n <div className=\"absolute left-0 top-0 z-50 flex h-screen w-screen items-center justify-center bg-white\">\n <div className=\"absolute inset-0 flex items-center justify-center bg-white\">\n {tokenExchangeError || error ? (\n <div>\n Error: {(tokenExchangeError || (error as Error)).message}\n </div>\n ) : (\n <LoadingIcon />\n )}\n </div>\n </div>\n )}\n {children}\n </UserProvider>\n </TokenProvider>\n </SessionProvider>\n </AuthContext.Provider>\n );\n};\n\nexport { AuthProvider };\n","import { UserInfoService, Endpoints } from \"@/types\";\nimport { parseJWT } from \"oslo/jwt\";\n\nexport class UserInfoServiceImpl implements UserInfoService {\n constructor(private endpoints: Endpoints) {}\n\n extractUserFromIdToken<T>(idToken: string): T | null {\n const parsedJWT = parseJWT(idToken);\n if (!parsedJWT) {\n return null;\n }\n return parsedJWT.payload as T;\n }\n\n async getUserInfo<T>(\n accessToken: string,\n idToken: string | null,\n ): Promise<T | null> {\n if (idToken) {\n return this.extractUserFromIdToken<T>(idToken);\n }\n\n const userInfo = await fetch(this.endpoints.userinfo, {\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n return userInfo.json() as T;\n }\n}\n","import {\n AuthSessionService,\n DisplayMode,\n Endpoints,\n OIDCTokenResponseBody,\n ParsedTokens,\n SessionData,\n UnknownObject,\n User,\n UserInfoService,\n} from \"../types\";\nimport { UserInfoServiceImpl } from \"./UserInfoService\";\nimport { generateCodeVerifier, OAuth2Client } from \"oslo/oauth2\";\nimport {\n displayModeFromState,\n generateState,\n getOauthEndpoints,\n} from \"@/lib/oauth\";\nimport { isPopupBlocked } from \"@/utils\";\nimport { buildOauth2Client, validateOauth2Tokens } from \"@/shared/util.js\";\n\nexport type StorageInterface = {\n get(): SessionData;\n getUser(): User<UnknownObject> | null;\n set(data: Partial<SessionData>): void;\n setUser(data: User<UnknownObject> | null): void;\n clear(): void;\n};\n\nexport class AuthSessionServiceImpl implements AuthSessionService {\n private endpoints: Endpoints | undefined;\n private oauth2Client: OAuth2Client | undefined;\n private userInfoService: UserInfoService | undefined;\n private codeVerifier: string | undefined = undefined;\n private refreshTokenTimeout: NodeJS.Timeout | null = null;\n\n constructor(\n readonly clientId: string,\n readonly redirectUrl: string,\n readonly oauthServer: string,\n readonly inputEndpoints?: Partial<Endpoints> | undefined,\n ) {\n this.codeVerifier = this.getCodeVerifier();\n this.endpoints = inputEndpoints as Endpoints;\n this.redirectUrl = redirectUrl;\n }\n\n protected getCodeVerifier(): string {\n return generateCodeVerifier();\n }\n\n public async getUserInfoService(): Promise<UserInfoService> {\n if (this.userInfoService) {\n return this.userInfoService;\n }\n const endpoints = await this.getEndpoints();\n\n this.userInfoService = new UserInfoServiceImpl(endpoints);\n return this.userInfoService;\n }\n\n protected async getEndpoints(): Promise<Endpoints> {\n if (this.endpoints?.auth) {\n return this.endpoints;\n }\n const jwksEndpoints = await getOauthEndpoints(this.oauthServer);\n return this.endpoints\n ? { ...this.endpoints, ...jwksEndpoints }\n : jwksEndpoints;\n }\n\n protected async getOauth2Client() {\n if (this.oauth2Client) {\n return this.oauth2Client;\n }\n const endpoints = await this.getEndpoints();\n this.oauth2Client = buildOauth2Client(\n this.clientId,\n this.redirectUrl,\n endpoints,\n );\n return this.oauth2Client;\n }\n\n getSessionData(): SessionData {\n console.log(\"getSessionData\", this.clientId);\n const storedItem =\n localStorage.getItem(`civic-auth:${this.clientId}`) || \"{}\";\n console.log(\"stored item\", storedItem);\n return JSON.parse(storedItem) as SessionData;\n }\n\n updateSessionData(data: Partial<SessionData>): void {\n localStorage.setItem(\n `civic-auth:${this.clientId}`,\n JSON.stringify({ ...data }),\n );\n }\n\n getUser(): User<UnknownObject> | null {\n return JSON.parse(\n localStorage.getItem(`civic-auth:${this.clientId}:user`) || \"{}\",\n ) as User<UnknownObject>;\n }\n\n setUser(data: User<UnknownObject> | null): void {\n localStorage.setItem(\n `civic-auth:${this.clientId}:user`,\n JSON.stringify(data === null ? {} : data),\n );\n }\n\n clearSessionData(): void {\n localStorage.setItem(`civic-auth:${this.clientId}`, JSON.stringify({}));\n }\n\n async getAuthorizationUrlWithChallenge(\n state: string,\n scopes: string[],\n ): Promise<URL> {\n const oauth2Client = await this.getOauth2Client();\n if (this.endpoints?.challenge) {\n const challenge = await fetch(this.endpoints.challenge).then((res) =>\n res.json().then((data) => data.challenge),\n );\n const oAuthUrl = await oauth2Client.createAuthorizationURL({\n state,\n scopes,\n });\n oAuthUrl.searchParams.append(\"code_challenge\", challenge);\n oAuthUrl.searchParams.append(\"code_challenge_method\", \"S256\");\n return oAuthUrl;\n }\n return oauth2Client.createAuthorizationURL({\n state,\n codeVerifier: this.codeVerifier,\n codeChallengeMethod: \"S256\",\n scopes,\n });\n }\n\n async getAuthorizationUrl(\n scopes: string[],\n displayMode: DisplayMode,\n nonce?: string,\n ): Promise<string> {\n const state = generateState(displayMode);\n const existingSessionData = this.getSessionData();\n // TODO DK NOTES: Getter should not update state. This would be confusing to others. Should probably be part of signIn()\n this.updateSessionData({\n ...existingSessionData,\n codeVerifier: this.codeVerifier,\n displayMode,\n });\n const oAuthUrl = await this.getAuthorizationUrlWithChallenge(state, scopes);\n if (nonce) {\n // nonce isn't supported by oslo, so we add it manually\n oAuthUrl.searchParams.append(\"nonce\", nonce);\n }\n oAuthUrl.searchParams.append(\"prompt\", \"consent\");\n return oAuthUrl.toString();\n }\n\n // TODO fix the Window reference\n loadAuthorizationUrl(authorizationURL: string, displayMode: DisplayMode) {\n switch (displayMode) {\n case \"iframe\":\n // Implement iframe logic\n break;\n case \"redirect\":\n window.location.href = authorizationURL;\n break;\n case \"new_tab\":\n window.open(authorizationURL, \"_blank\");\n break;\n case \"custom_tab\":\n // Implement custom tab logic (might require native app integration)\n break;\n }\n }\n\n async init(): Promise<this> {\n await this.getOauth2Client();\n return this;\n }\n\n async logout(): Promise<void> {\n this.updateSessionData({ authenticated: false });\n }\n\n determineDisplayMode(displayMode: DisplayMode): DisplayMode {\n // If popups are blocked and we're in iframe mode, we need to override the display mode to redirect\n if (isPopupBlocked() && displayMode === \"iframe\") {\n displayMode = \"redirect\";\n }\n // TODO: Add additional checks to determine the display mode for new_mode if new tabs are blocked.\n return displayMode;\n }\n\n async signIn(\n displayMode: DisplayMode,\n scopes: string[],\n nonce: string,\n ): Promise<void> {\n const authorizationURL = await this.getAuthorizationUrl(\n scopes,\n displayMode,\n nonce,\n );\n\n this.loadAuthorizationUrl(authorizationURL, displayMode);\n }\n\n async tokenExchange(responseUrl: string): Promise<SessionData> {\n let session = this.getSessionData();\n\n if (!session.authenticated) {\n const url = new URL(responseUrl);\n const authorizationCode = url.searchParams.get(\"code\");\n const returnedState = url.searchParams.get(\"state\");\n if (!authorizationCode || !returnedState) {\n throw new Error(\"Invalid authorization response\");\n }\n const codeVerifier = session.codeVerifier;\n const oauth2Client = await this.getOauth2Client();\n const tokens =\n await oauth2Client.validateAuthorizationCode<OIDCTokenResponseBody>(\n authorizationCode,\n {\n codeVerifier,\n },\n );\n\n // Validate relevant tokens\n try {\n await this.validateTokens(tokens);\n } catch (error) {\n console.error(\"tokenExchange tokens\", { error, tokens });\n throw new Error(\n `OIDC tokens validation failed: ${(error as Error).message}`,\n );\n }\n const parsedDisplayMode = displayModeFromState(\n returnedState,\n session.displayMode,\n );\n // Update session with authentication result\n session = {\n ...session,\n displayMode: parsedDisplayMode,\n idToken: tokens.id_token,\n authenticated: true,\n state: returnedState,\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token,\n timestamp: Date.now(),\n expiresIn: tokens.expires_in,\n };\n this.updateSessionData(session);\n const user = await (\n await this.getUserInfoService()\n ).getUserInfo(tokens.access_token, tokens.id_token || null);\n this.setUser(user);\n }\n\n // Set up automatic token refresh\n this.setupTokenRefresh(session);\n\n if (session.displayMode === \"new_tab\") {\n // Close the popup window\n window.close();\n } else if (session.displayMode === \"redirect\") {\n // TODO: Determine if there is anything additional to do here\n }\n return session;\n }\n\n private setupTokenRefresh(session: SessionData): void {\n if (this.refreshTokenTimeout) {\n clearTimeout(this.refreshTokenTimeout);\n }\n\n if (session.expiresIn) {\n // Calculate remaining time by subtracting elapsed time from total expiration time\n const elapsedTime = Date.now() - (session.timestamp || 0);\n const remainingTime = session.expiresIn * 1000 - elapsedTime;\n // Refresh the token 1 minute before it expires\n const refreshTime = Math.max(0, remainingTime - 60000);\n\n this.refreshTokenTimeout = setTimeout(() => {\n this.refreshToken()\n .then((newSession) => {\n console.log(\"Token refreshed successfully\", newSession);\n })\n .catch((error) => {\n console.error(\"Failed to refresh token:\", error);\n // Handle the error (e.g., log out the user or retry)\n // TODO this should be replaced by the real logout once it is available\n this.updateSessionData({});\n });\n }, refreshTime);\n }\n }\n\n async refreshToken(): Promise<SessionData> {\n const sessionData = this.getSessionData();\n if (!sessionData.refreshToken) {\n throw new Error(\"No refresh token available\");\n }\n const oauth2Client = await this.getOauth2Client();\n const tokens = await oauth2Client.refreshAccessToken<OIDCTokenResponseBody>(\n sessionData.refreshToken,\n );\n\n // Update session data\n const session = {\n ...sessionData,\n idToken: tokens.id_token,\n authenticated: true,\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token,\n timestamp: Date.now(),\n expiresIn: tokens.expires_in,\n };\n this.updateSessionData(session);\n\n // Schedule next automatic refresh\n this.setupTokenRefresh(session);\n\n return session;\n }\n\n async getUserInfo<T extends UnknownObject>(): Promise<User<T> | null> {\n const sessionData = this.getSessionData();\n if (!sessionData.accessToken) {\n throw new Error(\"No access token available\");\n }\n const userInfoService = await this.getUserInfoService();\n return userInfoService.getUserInfo<T>(\n sessionData.accessToken,\n sessionData.idToken || null,\n );\n }\n\n /**\n * Uses the jose library to validate a JWT token using the OAuth JWKS endpoint\n * @returns {Promise<jose.JWTPayload>}\n * @throws {Error} if the token is invalid\n * @param tokens\n */\n async validateTokens(tokens: OIDCTokenResponseBody): Promise<ParsedTokens> {\n const endpoints = await this.getEndpoints();\n\n if (!this.oauth2Client) await this.init();\n\n return validateOauth2Tokens(\n tokens,\n endpoints,\n this.oauth2Client!,\n this.oauthServer,\n );\n }\n\n async validateExistingSession(): Promise<SessionData> {\n const sessionData = this.getSessionData();\n try {\n if (!sessionData.idToken || !sessionData.accessToken) {\n const unAuthenticatedSession = { ...sessionData, authenticated: false };\n this.updateSessionData(unAuthenticatedSession);\n return unAuthenticatedSession;\n }\n await this.validateTokens({\n id_token: sessionData.idToken as string,\n access_token: sessionData.accessToken as string,\n refresh_token: sessionData.refreshToken as string,\n });\n sessionData.authenticated = true;\n return sessionData;\n } catch (error) {\n console.warn(\"Failed to validate existing tokens\", error);\n const unAuthenticatedSession = {\n authenticated: false,\n };\n this.updateSessionData(unAuthenticatedSession);\n return unAuthenticatedSession;\n }\n }\n}\n","\"use client\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { LoadingIcon } from \"./LoadingIcon\";\nimport { CloseIcon } from \"./CloseIcon\";\nimport { CivicAuthIframe } from \"./CivicAuthIframe\";\n\ntype CivicAuthIframeModalProps = {\n authUrl: string;\n redirectUri: string;\n setAuthResponseUrl: (authResponse: string) => void;\n onClose: () => void;\n iframeRef: React.RefObject<HTMLIFrameElement>;\n redirectInProgress?: boolean;\n closeOnRedirect?: boolean;\n};\n\nconst CivicAuthIframeModal = ({\n authUrl,\n redirectUri,\n setAuthResponseUrl,\n onClose,\n iframeRef,\n redirectInProgress = false,\n closeOnRedirect = true,\n}: CivicAuthIframeModalProps) => {\n const [isLoading, setIsLoading] = useState(true);\n\n const processIframeUrl = useCallback(() => {\n if (iframeRef.current && iframeRef.current.contentWindow) {\n try {\n const iframeUrl = iframeRef.current.contentWindow.location.href;\n\n if (iframeUrl.startsWith(redirectUri)) {\n setAuthResponseUrl(iframeUrl);\n if (closeOnRedirect) onClose();\n return true; // Successfully processed the URL\n }\n } catch {\n // If we get here, the iframe hasn't redirected to our origin yet\n console.log(\"Waiting for redirect...\");\n }\n }\n return false; // Haven't processed the URL yet\n }, [closeOnRedirect, iframeRef, onClose, redirectUri, setAuthResponseUrl]);\n\n const intervalId = useRef<NodeJS.Timeout>();\n\n const handleEscape = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n onClose();\n }\n },\n [onClose],\n );\n\n // handle Escape\n useEffect(() => {\n window.addEventListener(\"keydown\", handleEscape);\n\n return () => window.removeEventListener(\"keydown\", handleEscape);\n });\n\n const handleIframeLoad = () => {\n setIsLoading(false);\n console.log(\"handleIframeLoad\");\n if (processIframeUrl() && intervalId.current) {\n clearInterval(intervalId.current);\n }\n };\n\n return (\n <div\n className=\"absolute left-0 top-0 z-50 flex h-screen w-screen items-center justify-center bg-neutral-950 bg-opacity-50\"\n onClick={onClose}\n >\n <div\n className=\"relative rounded-3xl bg-white p-6 shadow-lg\"\n onClick={(e) => e.stopPropagation()}\n >\n <button\n className=\"absolute right-4 top-4 flex cursor-pointer items-center justify-center border-none bg-transparent p-1 text-neutral-400\"\n onClick={onClose}\n >\n <CloseIcon />\n </button>\n\n {(isLoading || redirectInProgress) && (\n <div className=\"absolute inset-0 flex items-center justify-center rounded-3xl bg-neutral-100\">\n <LoadingIcon />\n </div>\n )}\n\n <CivicAuthIframe\n ref={iframeRef}\n authUrl={authUrl}\n onLoad={handleIframeLoad}\n />\n </div>\n </div>\n );\n};\n\nexport type { CivicAuthIframeModalProps };\n\nexport { CivicAuthIframeModal };\n","const LoadingIcon = () => (\n <div role=\"status\">\n <svg\n aria-hidden=\"true\"\n className=\"inline h-8 w-8 animate-spin fill-neutral-600 text-neutral-200 dark:fill-neutral-300 dark:text-neutral-600\"\n viewBox=\"0 0 100 101\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z\"\n fill=\"currentFill\"\n />\n </svg>\n <span className=\"sr-only\">Loading...</span>\n </div>\n);\n\nexport { LoadingIcon };\n","const CloseIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-x\"\n >\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </svg>\n);\n\nexport { CloseIcon };\n","\"use client\";\nimport { IFRAME_ID } from \"@/constants\";\nimport { forwardRef } from \"react\";\n\ntype CivicAuthIframeProps = {\n authUrl: string;\n onLoad?: () => void;\n};\n\nconst CivicAuthIframe = forwardRef<HTMLIFrameElement, CivicAuthIframeProps>(\n ({ authUrl, onLoad }, ref) => {\n return (\n <iframe\n id={IFRAME_ID}\n ref={ref}\n src={authUrl}\n className=\"h-96 w-80 border-none\"\n onLoad={onLoad}\n />\n );\n },\n);\n\nCivicAuthIframe.displayName = \"CivicAuthIframe\";\n\nexport type { CivicAuthIframeProps };\n\nexport { CivicAuthIframe };\n","import { Config } from \"@/types\";\n\nexport const authConfig: Config = {\n // TODO change this to the production URL once we're out of beta\n oauthServer: \"https://auth-dev.civic.com/oauth/\",\n};\n","const isWindowInIframe = (window: Window): boolean => {\n if (typeof window !== \"undefined\") {\n // use the window width to determine if we're in an iframe or not\n try {\n if (window?.frameElement?.id === \"civic-auth-iframe\") {\n return true;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (_e) {\n // If we get an error, we're not in an iframe\n return false;\n }\n }\n return false;\n};\n\nexport { isWindowInIframe };\n","\"use client\";\nimport { AuthProvider, AuthProviderProps } from \"./AuthProvider\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\n\n// adding the styles import here to be added to the bundle\nimport \"@civic/auth/styles.css\";\n\nconst queryClient = new QueryClient();\n\ntype CivicAuthProviderProps = Omit<\n AuthProviderProps,\n \"authServiceImpl\" | \"serverSideTokenExchange\"\n>;\n\nconst CivicAuthProvider = ({ children, ...props }: CivicAuthProviderProps) => {\n return (\n <QueryClientProvider client={queryClient}>\n <AuthProvider {...props}>{children}</AuthProvider>\n </QueryClientProvider>\n );\n};\n\nexport { CivicAuthProvider, type CivicAuthProviderProps };\n","\"use client\";\n/**\n * A very small context provider for the user object - it takes the user object from the cookie and provides it to the app.\n */\nimport { createContext, useContext, useEffect, useMemo, useState } from \"react\";\nimport { useUserCookie } from \"../hooks/useUserCookie.js\";\nimport { AuthProvider, AuthProviderProps } from \"@/shared/AuthProvider.js\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { AuthSessionServiceImpl } from \"@/services\";\nimport { UnknownObject, User } from \"@/types.js\";\nimport { resolveAuthConfig } from \"@/nextjs/config.js\";\nimport { resolveCallbackUrl } from \"@/nextjs/utils.js\";\n\nconst queryClient = new QueryClient();\n\ntype UserContextType = {\n user: User<UnknownObject> | null;\n};\n\nconst defaultUserContext = { user: null };\nconst UserContext = createContext<UserContextType>(defaultUserContext);\n\nexport type NextCivicAuthProviderProps = Omit<AuthProviderProps, \"clientId\">;\n\nexport const CivicNextAuthProvider = ({\n children,\n ...props\n}: NextCivicAuthProviderProps) => {\n const user = useUserCookie();\n const [redirectUrl, setRedirectUrl] = useState<string>(\"\");\n const { clientId, oauthServer, callbackUrl, challengeUrl } =\n resolveAuthConfig();\n\n useEffect(() => {\n if (typeof globalThis.window !== \"undefined\") {\n const currentUrl = globalThis.window.location.href;\n setRedirectUrl(resolveCallbackUrl(resolveAuthConfig(), currentUrl));\n }\n }, [callbackUrl]);\n\n // create a custom authService that uses a challenge endpoint to get\n // the challenge to add to the auth request\n const authService = useMemo<AuthSessionServiceImpl | undefined>(() => {\n if (redirectUrl && clientId && oauthServer) {\n return new AuthSessionServiceImpl(clientId, redirectUrl, oauthServer, {\n challenge: challengeUrl,\n });\n }\n return undefined;\n }, [redirectUrl, clientId, oauthServer, challengeUrl]);\n\n return (\n <QueryClientProvider client={queryClient}>\n <AuthProvider\n {...props}\n config={{ oauthServer }}\n clientId={clientId}\n authServiceImpl={authService}\n serverSideTokenExchange={true}\n >\n <UserContext.Provider value={user}>{children}</UserContext.Provider>\n </AuthProvider>\n </QueryClientProvider>\n );\n};\nexport const useNextUser = () => useContext(UserContext);\n","\"use client\";\nimport { useEffect, useRef } from \"react\";\nimport { useRouter } from \"next/navigation.js\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { getCookieValue } from \"@/lib/cookies.js\";\n\nconst getUserFromCookie = () => {\n const userCookie = getCookieValue(\"user\", globalThis.window);\n return userCookie;\n};\n\nexport const useUserCookie = () => {\n const hasRunRef = useRef(false);\n const router = useRouter();\n\n const { data: user } = useQuery({\n queryKey: [\"user\"],\n queryFn: () => getUserFromCookie(),\n refetchInterval: 2000,\n refetchIntervalInBackground: true,\n enabled: !hasRunRef.current,\n refetchOnWindowFocus: true,\n });\n\n useEffect(() => {\n if (user) {\n if (!hasRunRef.current) {\n hasRunRef.current = true;\n router.refresh();\n }\n } else {\n hasRunRef.current = false;\n }\n }, [user, router]);\n\n return user;\n};\n","const getCookieValue = (key: string, window: Window) => {\n const cookie = window.document.cookie;\n if (!cookie) return null;\n const cookies = cookie.split(\";\");\n for (const c of cookies) {\n const [name, value] = c.trim().split(\"=\");\n if (name === key) {\n try {\n return JSON.parse(decodeURIComponent(value));\n } catch (e) {\n console.log(\"Error parsing cookie value\", e);\n return value;\n }\n }\n }\n return null;\n};\nexport { getCookieValue };\n","\"use client\";\nimport { useAuth, useUser } from \"@/react/hooks\";\nimport { DisplayMode } from \"@/types\";\nimport { cn } from \"@/utils\";\nimport { useCallback, useEffect, useState } from \"react\";\n\nconst ChevronDown = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-down\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nconst ChevronUp = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-up\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n);\n\nconst UserButton = ({\n displayMode,\n className,\n}: {\n displayMode?: DisplayMode;\n className?: string;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const { signIn, isAuthenticated, signOut } = useAuth();\n const { user } = useUser();\n\n const handleClickOutside = useCallback((event: MouseEvent) => {\n const target = event.target as HTMLElement;\n\n if (!target.closest(\"#civic-dropdown-container\")) {\n setIsOpen(false);\n }\n }, []);\n\n const handleSignOut = useCallback(async () => {\n await signOut();\n\n setIsOpen(false);\n }, [signOut]);\n\n const handleSignIn = useCallback(async () => {\n await signIn(displayMode);\n\n setIsOpen(false);\n }, [signIn, displayMode]);\n\n const handleEscape = useCallback((event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsOpen(false);\n }\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n window.addEventListener(\"click\", handleClickOutside);\n\n window.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n window.removeEventListener(\"click\", handleClickOutside);\n\n window.removeEventListener(\"keydown\", handleEscape);\n };\n }, [handleClickOutside, handleEscape, isOpen]);\n\n if (isAuthenticated) {\n return (\n <div className=\"relative\" id=\"civic-dropdown-container\">\n <button\n className={cn(\n \"flex w-full items-center justify-between gap-2 rounded-full border border-neutral-500 px-3 py-2 text-neutral-500 transition-colors hover:bg-neutral-200 hover:bg-opacity-50\",\n className,\n )}\n onClick={() => setIsOpen((isOpen) => !isOpen)}\n >\n {user?.picture ? (\n <span className=\"relative flex h-10 w-10 shrink-0 gap-2 overflow-hidden rounded-full\">\n <img\n className=\"h-full w-full object-cover\"\n src={user.picture}\n alt={user?.name || user?.email}\n />\n </span>\n ) : (\n <div />\n )}\n\n <span>{user?.name || user?.email}</span>\n\n {isOpen ? <ChevronUp /> : <ChevronDown />}\n </button>\n <div\n className={\n isOpen\n ? \"absolute right-0 mt-2 w-full rounded-lg bg-white py-2 text-neutral-500 shadow-xl\"\n : \"hidden\"\n }\n >\n <ul>\n <li>\n <button\n className=\"block w-full px-4 py-2 transition-colors hover:bg-neutral-200 hover:bg-opacity-50\"\n onClick={handleSignOut}\n >\n Logout\n </button>\n </li>\n </ul>\n </div>\n </div>\n );\n }\n\n return (\n <button\n className={cn(\n \"rounded-full border border-neutral-500 px-3 py-2 transition-colors hover:bg-neutral-200 hover:bg-opacity-50\",\n className,\n )}\n onClick={handleSignIn}\n >\n Sign in\n </button>\n );\n};\n\nexport { UserButton };\n","\"use client\";\nimport { cn } from \"@/utils\";\nimport { useAuth } from \"@/react/hooks\";\nimport { DisplayMode } from \"@/types\";\n\nconst SignInButton = ({\n displayMode,\n className,\n}: {\n displayMode?: DisplayMode;\n className?: string;\n}) => {\n const { signIn } = useAuth();\n\n return (\n <button\n className={cn(\n \"rounded-full border border-neutral-500 px-3 py-2 transition-colors hover:bg-neutral-200 hover:bg-opacity-50\",\n className,\n )}\n onClick={() => signIn(displayMode)}\n >\n Sign In\n </button>\n );\n};\n\nexport { SignInButton };\n","\"use client\";\nimport { cn } from \"@/utils\";\nimport { useAuth } from \"@/react/hooks\";\n\nconst SignOutButton = ({ className }: { className?: string }) => {\n const { signOut } = useAuth();\n\n return (\n <button\n className={cn(\n \"rounded-full border border-neutral-500 px-3 py-2 transition-colors hover:bg-neutral-200 hover:bg-opacity-50\",\n className,\n )}\n onClick={() => signOut()}\n >\n Sign Out\n </button>\n );\n};\n\nexport { SignOutButton };\n","/**\n * Trigger a backend API that logs the user out and then redirects to the homepage (TODO parameterize the redirect)\n */\nimport { resolveAuthConfig } from \"@/nextjs/config.js\";\nimport React, { ReactNode } from \"react\";\n\nconst NextLogOut = ({ children }: { children: ReactNode }) => {\n const config = resolveAuthConfig();\n const logoutUrl = `${config.logoutUrl}`;\n\n return <a href={logoutUrl}>{children}</a>;\n};\n\nexport { NextLogOut };\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/patrick/Code/civic-auth/packages/civic-auth-client/dist/react.js","../src/react/hooks/useUser.tsx","../src/shared/CivicAuthProvider.tsx","../src/react/components/UserButton.tsx","../src/react/components/SignInButton.tsx","../src/react/components/SignOutButton.tsx"],"names":["jsx","isOpen"],"mappings":"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","file":"/Users/patrick/Code/civic-auth/packages/civic-auth-client/dist/react.js","sourcesContent":[null,"\"use client\";\nimport { useContext } from \"react\";\nimport { UserContext, UserContextType } from \"@/react/providers\";\n\nconst useUser = <\n T extends Record<string, unknown> = Record<string, never>,\n>(): UserContextType<T> => {\n const context = useContext(UserContext);\n\n if (!context) {\n throw new Error(\"useUser must be used within a UserProvider\");\n }\n\n return context as UserContextType<T>;\n};\n\nexport { useUser };\n","\"use client\";\nimport { AuthProvider, AuthProviderProps } from \"./AuthProvider\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\n\n// adding the styles import here to be added to the bundle\nimport \"@civic/auth/styles.css\";\nimport { BrowserPublicClientPKCEProducer } from \"@/services/PKCE\";\nimport { UserProvider } from \"./UserProvider\";\nimport { LocalStorageAdapter } from \"@/browser/storage\";\n\nconst queryClient = new QueryClient();\n\ntype CivicAuthProviderProps = Omit<AuthProviderProps, \"pkceConsumer\">;\n\nconst CivicAuthProvider = ({ children, ...props }: CivicAuthProviderProps) => {\n return (\n <QueryClientProvider client={queryClient}>\n <AuthProvider\n {...props}\n pkceConsumer={new BrowserPublicClientPKCEProducer()}\n >\n <UserProvider storage={new LocalStorageAdapter()}>\n {children}\n </UserProvider>\n </AuthProvider>\n </QueryClientProvider>\n );\n};\n\nexport { CivicAuthProvider, type CivicAuthProviderProps };\n","\"use client\";\nimport { useUser } from \"@/react/hooks\";\nimport { DisplayMode } from \"@/types\";\nimport { cn } from \"@/utils\";\nimport { useCallback, useEffect, useState } from \"react\";\n\nconst ChevronDown = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-down\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n);\n\nconst ChevronUp = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-chevron-up\"\n >\n <path d=\"m18 15-6-6-6 6\" />\n </svg>\n);\n\nconst UserButton = ({\n displayMode,\n className,\n}: {\n displayMode?: DisplayMode;\n className?: string;\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const { user, signIn, signOut } = useUser();\n\n const handleClickOutside = useCallback((event: MouseEvent) => {\n const target = event.target as HTMLElement;\n\n if (!target.closest(\"#civic-dropdown-container\")) {\n setIsOpen(false);\n }\n }, []);\n\n const handleSignOut = useCallback(async () => {\n signOut();\n\n setIsOpen(false);\n }, [signOut]);\n\n const handleSignIn = useCallback(async () => {\n await signIn(displayMode);\n\n setIsOpen(false);\n }, [signIn, displayMode]);\n\n const handleEscape = useCallback((event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setIsOpen(false);\n }\n }, []);\n\n useEffect(() => {\n if (isOpen) {\n window.addEventListener(\"click\", handleClickOutside);\n\n window.addEventListener(\"keydown\", handleEscape);\n }\n\n return () => {\n window.removeEventListener(\"click\", handleClickOutside);\n\n window.removeEventListener(\"keydown\", handleEscape);\n };\n }, [handleClickOutside, handleEscape, isOpen]);\n\n if (user) {\n return (\n <div className=\"cac-relative\" id=\"civic-dropdown-container\">\n <button\n className={cn(\n \"cac-flex cac-w-full cac-items-center cac-justify-between cac-gap-2 cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-text-neutral-500 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\",\n className,\n )}\n onClick={() => setIsOpen((isOpen) => !isOpen)}\n >\n {user?.picture ? (\n <span className=\"cac-relative cac-flex cac-h-10 cac-w-10 cac-shrink-0 cac-gap-2 cac-overflow-hidden cac-rounded-full\">\n <img\n className=\"cac-h-full cac-w-full cac-object-cover\"\n src={user.picture}\n alt={user?.name || user?.email}\n />\n </span>\n ) : (\n <div />\n )}\n\n <span>{user?.name || user?.email}</span>\n\n {isOpen ? <ChevronUp /> : <ChevronDown />}\n </button>\n <div\n className={\n isOpen\n ? \"cac-absolute cac-right-0 cac-mt-2 cac-w-full cac-rounded-lg cac-bg-white cac-py-2 cac-text-neutral-500 cac-shadow-xl\"\n : \"cac-hidden\"\n }\n >\n <ul>\n <li>\n <button\n className=\"cac-block cac-w-full cac-px-4 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\"\n onClick={handleSignOut}\n >\n Logout\n </button>\n </li>\n </ul>\n </div>\n </div>\n );\n }\n\n return (\n <button\n data-testid=\"sign-in-button\"\n className={cn(\n \"cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\",\n className,\n )}\n onClick={handleSignIn}\n >\n Sign in\n </button>\n );\n};\n\nexport { UserButton };\n","\"use client\";\nimport { cn } from \"@/utils\";\nimport { DisplayMode } from \"@/types\";\nimport { useUser } from \"@/react/hooks\";\n\nconst SignInButton = ({\n displayMode,\n className,\n}: {\n displayMode?: DisplayMode;\n className?: string;\n}) => {\n const { signIn } = useUser();\n\n return (\n <button\n data-testid=\"sign-in-button\"\n className={cn(\n \"cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\",\n className,\n )}\n onClick={() => signIn(displayMode)}\n >\n Sign In\n </button>\n );\n};\n\nexport { SignInButton };\n","\"use client\";\nimport { cn } from \"@/utils\";\nimport { useUser } from \"@/react/hooks\";\n\nconst SignOutButton = ({ className }: { className?: string }) => {\n const { signOut } = useUser();\n\n return (\n <button\n className={cn(\n \"cac-rounded-full cac-border cac-border-neutral-500 cac-px-3 cac-py-2 cac-transition-colors hover:cac-bg-neutral-200 hover:cac-bg-opacity-50\",\n className,\n )}\n onClick={() => signOut()}\n >\n Sign Out\n </button>\n );\n};\n\nexport { SignOutButton };\n"]}
|