@civic/auth 0.1.1-beta.0 → 0.1.2-beta.0
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/.turbo/turbo-build.log +3 -3
- package/CHANGELOG.md +5 -0
- package/dist/cjs/src/reactjs/components/UserButton.js +1 -1
- package/dist/cjs/src/reactjs/components/UserButton.js.map +1 -1
- package/dist/cjs/src/server/ServerAuthenticationResolver.d.ts +1 -0
- package/dist/cjs/src/server/ServerAuthenticationResolver.d.ts.map +1 -1
- package/dist/cjs/src/server/ServerAuthenticationResolver.js +6 -2
- package/dist/cjs/src/server/ServerAuthenticationResolver.js.map +1 -1
- package/dist/cjs/src/server/config.d.ts +1 -8
- package/dist/cjs/src/server/config.d.ts.map +1 -1
- package/dist/cjs/src/server/config.js.map +1 -1
- package/dist/cjs/src/server/index.d.ts +1 -0
- package/dist/cjs/src/server/index.d.ts.map +1 -1
- package/dist/cjs/src/server/index.js.map +1 -1
- package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.d.ts +1 -0
- package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
- package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.js +5 -1
- package/dist/cjs/src/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/reactjs/components/UserButton.js +1 -1
- package/dist/esm/src/reactjs/components/UserButton.js.map +1 -1
- package/dist/esm/src/server/ServerAuthenticationResolver.d.ts +1 -0
- package/dist/esm/src/server/ServerAuthenticationResolver.d.ts.map +1 -1
- package/dist/esm/src/server/ServerAuthenticationResolver.js +6 -2
- package/dist/esm/src/server/ServerAuthenticationResolver.js.map +1 -1
- package/dist/esm/src/server/config.d.ts +1 -8
- package/dist/esm/src/server/config.d.ts.map +1 -1
- package/dist/esm/src/server/config.js.map +1 -1
- package/dist/esm/src/server/index.d.ts +1 -0
- package/dist/esm/src/server/index.d.ts.map +1 -1
- package/dist/esm/src/server/index.js.map +1 -1
- package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.d.ts +1 -0
- package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
- package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.js +5 -1
- package/dist/esm/src/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- 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.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/cookies.d.ts +30 -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.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.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/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.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.js +6 -0
- package/dist/src/reactjs/components/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.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.js +7 -0
- package/dist/src/reactjs/providers/index.js.map +1 -0
- package/dist/src/server/ServerAuthenticationResolver.d.ts +19 -0
- package/dist/src/server/ServerAuthenticationResolver.d.ts.map +1 -1
- package/dist/src/server/ServerAuthenticationResolver.js +6 -2
- package/dist/src/server/ServerAuthenticationResolver.js.map +1 -1
- package/dist/src/server/config.d.ts +9 -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 +7 -0
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +5 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/server/refresh.d.ts +7 -0
- package/dist/src/server/refresh.js +13 -0
- package/dist/src/server/refresh.js.map +1 -0
- package/dist/src/services/PKCE.d.ts +20 -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/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/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/{cjs/src/shared → src/shared/lib}/GenericAuthenticationRefresher.d.ts +5 -4
- package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +1 -1
- package/dist/src/shared/lib/GenericAuthenticationRefresher.js +5 -1
- package/dist/src/shared/lib/GenericAuthenticationRefresher.js.map +1 -1
- package/dist/{cjs/src/shared → src/shared/lib}/UserSession.d.ts +1 -1
- package/dist/src/shared/lib/session.d.ts +3 -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/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/{cjs/src/shared → src/shared/providers}/CivicAuthProvider.d.ts +3 -3
- 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/{cjs/src/shared → src/shared/providers}/UserProvider.d.ts +7 -6
- 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/test/integration/sdk.test.d.ts +2 -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.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.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.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.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.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/session.test.d.ts +2 -0
- package/dist/test/unit/services/AuthenticationService.test.d.ts +2 -0
- package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts +2 -0
- package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts +2 -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.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 -1
- 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 +2 -2
- package/src/reactjs/components/UserButton.tsx +1 -1
- package/src/server/ServerAuthenticationResolver.ts +7 -2
- package/src/server/config.ts +1 -9
- package/src/server/index.ts +1 -0
- package/src/shared/lib/GenericAuthenticationRefresher.ts +6 -1
- package/dist/cjs/src/shared/AuthProvider.d.ts +0 -18
- package/dist/cjs/src/shared/AuthProvider.d.ts.map +0 -1
- package/dist/cjs/src/shared/AuthProvider.js +0 -246
- package/dist/cjs/src/shared/AuthProvider.js.map +0 -1
- package/dist/cjs/src/shared/CivicAuthProvider.d.ts.map +0 -1
- package/dist/cjs/src/shared/CivicAuthProvider.js +0 -19
- package/dist/cjs/src/shared/CivicAuthProvider.js.map +0 -1
- package/dist/cjs/src/shared/GenericAuthenticationRefresher.d.ts.map +0 -1
- package/dist/cjs/src/shared/GenericAuthenticationRefresher.js +0 -47
- package/dist/cjs/src/shared/GenericAuthenticationRefresher.js.map +0 -1
- package/dist/cjs/src/shared/UserProvider.d.ts.map +0 -1
- package/dist/cjs/src/shared/UserProvider.js +0 -42
- package/dist/cjs/src/shared/UserProvider.js.map +0 -1
- package/dist/cjs/src/shared/UserSession.d.ts.map +0 -1
- package/dist/cjs/src/shared/UserSession.js +0 -24
- package/dist/cjs/src/shared/UserSession.js.map +0 -1
- package/dist/cjs/src/shared/session.d.ts +0 -3
- package/dist/cjs/src/shared/session.d.ts.map +0 -1
- package/dist/cjs/src/shared/session.js +0 -13
- package/dist/cjs/src/shared/session.js.map +0 -1
- package/dist/cjs/src/shared/util.d.ts +0 -39
- package/dist/cjs/src/shared/util.d.ts.map +0 -1
- package/dist/cjs/src/shared/util.js +0 -162
- package/dist/cjs/src/shared/util.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.d.ts","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":";AAIA,wBAoCG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/// <reference types='vitest' />
|
|
2
|
+
import { defineConfig } from "vite";
|
|
3
|
+
import path from "path";
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
resolve: {
|
|
6
|
+
alias: {
|
|
7
|
+
"@": path.resolve(__dirname, "./src"),
|
|
8
|
+
},
|
|
9
|
+
},
|
|
10
|
+
test: {
|
|
11
|
+
globals: true,
|
|
12
|
+
environment: "jsdom",
|
|
13
|
+
include: ["test/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
|
|
14
|
+
env: {
|
|
15
|
+
NODE_ENV: "development",
|
|
16
|
+
},
|
|
17
|
+
reporters: ["default"],
|
|
18
|
+
coverage: {
|
|
19
|
+
exclude: [
|
|
20
|
+
"**/node_modules/**",
|
|
21
|
+
"**/dist/**",
|
|
22
|
+
"**/build/**",
|
|
23
|
+
"postcss.config.cjs",
|
|
24
|
+
"tailwind.config.js",
|
|
25
|
+
".eslintrc.js",
|
|
26
|
+
"tsup.config.ts",
|
|
27
|
+
"vitest.config.ts",
|
|
28
|
+
],
|
|
29
|
+
reportsDirectory: "../../coverage/apps/civic-auth-client",
|
|
30
|
+
provider: "v8",
|
|
31
|
+
thresholds: {
|
|
32
|
+
lines: 80,
|
|
33
|
+
functions: 70,
|
|
34
|
+
branches: 85,
|
|
35
|
+
statements: 80,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=vitest.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest.config.js","sourceRoot":"","sources":["../vitest.config.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,eAAe,YAAY,CAAC;IAC1B,OAAO,EAAE;QACP,KAAK,EAAE;YACL,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC;SACtC;KACF;IAED,IAAI,EAAE;QACJ,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,OAAO;QACpB,OAAO,EAAE,CAAC,uDAAuD,CAAC;QAClE,GAAG,EAAE;YACH,QAAQ,EAAE,aAAa;SACxB;QACD,SAAS,EAAE,CAAC,SAAS,CAAC;QACtB,QAAQ,EAAE;YACR,OAAO,EAAE;gBACP,oBAAoB;gBACpB,YAAY;gBACZ,aAAa;gBACb,oBAAoB;gBACpB,oBAAoB;gBACpB,cAAc;gBACd,gBAAgB;gBAChB,kBAAkB;aACnB;YACD,gBAAgB,EAAE,uCAAuC;YACzD,QAAQ,EAAE,IAAI;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE;gBACT,SAAS,EAAE,EAAE;gBACb,QAAQ,EAAE,EAAE;gBACZ,UAAU,EAAE,EAAE;aACf;SACF;KACF;CACF,CAAC,CAAC","sourcesContent":["/// <reference types='vitest' />\nimport { defineConfig } from \"vite\";\nimport path from \"path\";\n\nexport default defineConfig({\n resolve: {\n alias: {\n \"@\": path.resolve(__dirname, \"./src\"),\n },\n },\n\n test: {\n globals: true,\n environment: \"jsdom\",\n include: [\"test/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}\"],\n env: {\n NODE_ENV: \"development\",\n },\n reporters: [\"default\"],\n coverage: {\n exclude: [\n \"**/node_modules/**\",\n \"**/dist/**\",\n \"**/build/**\",\n \"postcss.config.cjs\",\n \"tailwind.config.js\",\n \".eslintrc.js\",\n \"tsup.config.ts\",\n \"vitest.config.ts\",\n ],\n reportsDirectory: \"../../coverage/apps/civic-auth-client\",\n provider: \"v8\",\n thresholds: {\n lines: 80,\n functions: 70,\n branches: 85,\n statements: 80,\n },\n },\n },\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@civic/auth",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2-beta.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"module": "dist/index.js",
|
|
6
6
|
"main": "dist/index.ts",
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
"@repo/eslint-config": "0.0.0",
|
|
93
93
|
"@repo/typescript-config": "0.0.0"
|
|
94
94
|
},
|
|
95
|
-
"
|
|
95
|
+
"optionalDependency": {
|
|
96
96
|
"next": "^14"
|
|
97
97
|
},
|
|
98
98
|
"scripts": {
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
storeTokens,
|
|
15
15
|
} from "@/shared/lib/util.js";
|
|
16
16
|
import type { AuthenticationResolver, PKCEProducer } from "@/services/types.ts";
|
|
17
|
+
import { DEFAULT_AUTH_SERVER } from "@/constants.js";
|
|
17
18
|
|
|
18
19
|
export class ServerAuthenticationResolver implements AuthenticationResolver {
|
|
19
20
|
private pkceProducer: PKCEProducer;
|
|
@@ -31,10 +32,14 @@ export class ServerAuthenticationResolver implements AuthenticationResolver {
|
|
|
31
32
|
throw new Error("Method not implemented.");
|
|
32
33
|
}
|
|
33
34
|
|
|
35
|
+
get oauthServer(): string {
|
|
36
|
+
return this.authConfig.oauthServer || DEFAULT_AUTH_SERVER;
|
|
37
|
+
}
|
|
38
|
+
|
|
34
39
|
async init(): Promise<this> {
|
|
35
40
|
// resolve oauth config
|
|
36
41
|
this.endpoints = await getEndpointsWithOverrides(
|
|
37
|
-
this.
|
|
42
|
+
this.oauthServer,
|
|
38
43
|
this.endpointOverrides,
|
|
39
44
|
);
|
|
40
45
|
this.oauth2client = new OAuth2Client(
|
|
@@ -63,7 +68,7 @@ export class ServerAuthenticationResolver implements AuthenticationResolver {
|
|
|
63
68
|
state,
|
|
64
69
|
this.pkceProducer,
|
|
65
70
|
this.oauth2client!, // clean up types here to avoid the ! operator
|
|
66
|
-
this.
|
|
71
|
+
this.oauthServer,
|
|
67
72
|
this.endpoints!, // clean up types here to avoid the ! operator
|
|
68
73
|
);
|
|
69
74
|
|
package/src/server/config.ts
CHANGED
|
@@ -1,17 +1,9 @@
|
|
|
1
1
|
import type { Endpoints } from "@/types.ts";
|
|
2
2
|
|
|
3
|
-
export type CookieConfig = {
|
|
4
|
-
secure?: boolean;
|
|
5
|
-
sameSite?: "strict" | "lax" | "none";
|
|
6
|
-
domain?: string;
|
|
7
|
-
path?: string;
|
|
8
|
-
maxAge?: number;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
3
|
export type AuthConfig = {
|
|
12
4
|
clientId: string;
|
|
13
|
-
oauthServer: string;
|
|
14
5
|
redirectUrl: string;
|
|
6
|
+
oauthServer?: string;
|
|
15
7
|
challengeUrl?: string;
|
|
16
8
|
endpointOverrides?: Partial<Endpoints> | undefined;
|
|
17
9
|
};
|
package/src/server/index.ts
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
} from "@/shared/lib/util.js";
|
|
8
8
|
import type { AuthConfig } from "@/server/config.js";
|
|
9
9
|
import { OAuth2Client } from "oslo/oauth2";
|
|
10
|
+
import { DEFAULT_AUTH_SERVER } from "@/constants.js";
|
|
10
11
|
|
|
11
12
|
export class GenericAuthenticationRefresher implements AuthenticationRefresher {
|
|
12
13
|
private oauth2client: OAuth2Client | undefined;
|
|
@@ -18,10 +19,14 @@ export class GenericAuthenticationRefresher implements AuthenticationRefresher {
|
|
|
18
19
|
private endpointOverrides?: Partial<Endpoints>,
|
|
19
20
|
) {}
|
|
20
21
|
|
|
22
|
+
get oauthServer(): string {
|
|
23
|
+
return this.authConfig.oauthServer || DEFAULT_AUTH_SERVER;
|
|
24
|
+
}
|
|
25
|
+
|
|
21
26
|
async init(): Promise<this> {
|
|
22
27
|
// resolve oauth config
|
|
23
28
|
this.endpoints = await getEndpointsWithOverrides(
|
|
24
|
-
this.
|
|
29
|
+
this.oauthServer,
|
|
25
30
|
this.endpointOverrides,
|
|
26
31
|
);
|
|
27
32
|
this.oauth2client = new OAuth2Client(
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from "react";
|
|
2
|
-
import type { Config, SessionData } from "../types.js";
|
|
3
|
-
import type { PKCEConsumer } from "../services/types";
|
|
4
|
-
export type AuthProviderProps = {
|
|
5
|
-
children: ReactNode;
|
|
6
|
-
clientId: string;
|
|
7
|
-
redirectUrl?: string;
|
|
8
|
-
nonce?: string;
|
|
9
|
-
config?: Config;
|
|
10
|
-
onSignIn?: (error?: Error) => void;
|
|
11
|
-
onSignOut?: () => Promise<void>;
|
|
12
|
-
pkceConsumer?: PKCEConsumer;
|
|
13
|
-
modalIframe?: boolean;
|
|
14
|
-
sessionData?: SessionData;
|
|
15
|
-
};
|
|
16
|
-
declare const AuthProvider: ({ children, clientId, redirectUrl: inputRedirectUrl, config, onSignIn, onSignOut, pkceConsumer, nonce, modalIframe, sessionData: inputSessionData, }: AuthProviderProps) => import("react").JSX.Element;
|
|
17
|
-
export { AuthProvider };
|
|
18
|
-
//# sourceMappingURL=AuthProvider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AuthProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/AuthProvider.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,KAAK,EAAE,MAAM,EAAe,WAAW,EAAE,MAAM,YAAY,CAAC;AAanE,OAAO,KAAK,EAA0B,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAqB7E,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAYF,QAAA,MAAM,YAAY,yJAWf,iBAAiB,gCAwRnB,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
"use client";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.AuthProvider = void 0;
|
|
5
|
-
const react_1 = require("react");
|
|
6
|
-
const react_query_1 = require("@tanstack/react-query");
|
|
7
|
-
const CivicAuthIframeContainer_1 = require("../shared/components/CivicAuthIframeContainer");
|
|
8
|
-
const TokenProvider_1 = require("../shared/providers/TokenProvider");
|
|
9
|
-
const SessionProvider_1 = require("../shared/providers/SessionProvider");
|
|
10
|
-
const constants_1 = require("../constants");
|
|
11
|
-
const config_1 = require("../config");
|
|
12
|
-
const LoadingIcon_1 = require("../shared/components/LoadingIcon");
|
|
13
|
-
const windowUtil_1 = require("../lib/windowUtil");
|
|
14
|
-
const AuthContext_1 = require("@/shared/AuthContext");
|
|
15
|
-
const AuthenticationService_1 = require("../services/AuthenticationService");
|
|
16
|
-
const types_1 = require("../services/types");
|
|
17
|
-
const PKCE_js_1 = require("../services/PKCE.js");
|
|
18
|
-
const oauth_1 = require("../lib/oauth");
|
|
19
|
-
const storage_1 = require("../browser/storage");
|
|
20
|
-
const ConfigProvider_1 = require("../shared/providers/ConfigProvider");
|
|
21
|
-
const session_js_1 = require("./session.js");
|
|
22
|
-
const UserSession_js_1 = require("./UserSession.js");
|
|
23
|
-
const IframeProvider_1 = require("../shared/providers/IframeProvider");
|
|
24
|
-
// Global this object setup
|
|
25
|
-
let globalThisObject;
|
|
26
|
-
if (typeof window !== "undefined") {
|
|
27
|
-
globalThisObject = window;
|
|
28
|
-
}
|
|
29
|
-
else if (typeof global !== "undefined") {
|
|
30
|
-
globalThisObject = global;
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
globalThisObject = Function("return this")();
|
|
34
|
-
}
|
|
35
|
-
globalThisObject.globalThis = globalThisObject;
|
|
36
|
-
function BlockDisplay({ children }) {
|
|
37
|
-
return (React.createElement("div", { className: "cac-relative cac-left-0 cac-top-0 cac-z-50 cac-flex cac-h-screen cac-w-screen cac-items-center cac-justify-center cac-bg-white" },
|
|
38
|
-
React.createElement("div", { className: "cac-absolute cac-inset-0 cac-flex cac-items-center cac-justify-center cac-bg-white" }, children)));
|
|
39
|
-
}
|
|
40
|
-
const AuthProvider = ({ children, clientId, redirectUrl: inputRedirectUrl, config = config_1.authConfig, onSignIn, onSignOut, pkceConsumer, nonce, modalIframe = true, sessionData: inputSessionData, }) => {
|
|
41
|
-
const [iframeUrl, setIframeUrl] = (0, react_1.useState)(null);
|
|
42
|
-
const [currentUrl, setCurrentUrl] = (0, react_1.useState)(null);
|
|
43
|
-
const [isInIframe, setIsInIframe] = (0, react_1.useState)(false);
|
|
44
|
-
const [authResponseUrl, setAuthResponseUrl] = (0, react_1.useState)(null);
|
|
45
|
-
const [tokenExchangeError, setTokenExchangeError] = (0, react_1.useState)();
|
|
46
|
-
const [displayMode, setDisplayMode] = (0, react_1.useState)("iframe");
|
|
47
|
-
const [browserAuthenticationInitiator, setBrowserAuthenticationInitiator] = (0, react_1.useState)();
|
|
48
|
-
const [showIFrame, setShowIFrame] = (0, react_1.useState)(false);
|
|
49
|
-
const [isRedirecting, setIsRedirecting] = (0, react_1.useState)(false);
|
|
50
|
-
const queryClient = (0, react_query_1.useQueryClient)();
|
|
51
|
-
const iframeRef = (0, react_1.useRef)(null);
|
|
52
|
-
// TODO maybe we want to support or derive serverTokenExchange another way?
|
|
53
|
-
const serverTokenExchange = pkceConsumer instanceof PKCE_js_1.ConfidentialClientPKCEConsumer;
|
|
54
|
-
// check if the current window is in an iframe with the iframe id, and set an isInIframe state
|
|
55
|
-
(0, react_1.useEffect)(() => {
|
|
56
|
-
if (typeof globalThis.window !== "undefined") {
|
|
57
|
-
setCurrentUrl(globalThis.window.location.href);
|
|
58
|
-
const isInIframeVal = (0, windowUtil_1.isWindowInIframe)(globalThis.window);
|
|
59
|
-
setIsInIframe(isInIframeVal);
|
|
60
|
-
}
|
|
61
|
-
}, []);
|
|
62
|
-
const redirectUrl = (0, react_1.useMemo)(() => (inputRedirectUrl || currentUrl || "").split("?")[0], [currentUrl, inputRedirectUrl]);
|
|
63
|
-
const [authService, setAuthService] = (0, react_1.useState)();
|
|
64
|
-
(0, react_1.useEffect)(() => {
|
|
65
|
-
if (!currentUrl)
|
|
66
|
-
return;
|
|
67
|
-
AuthenticationService_1.BrowserAuthenticationService.build({
|
|
68
|
-
clientId,
|
|
69
|
-
redirectUrl,
|
|
70
|
-
oauthServer: config.oauthServer,
|
|
71
|
-
scopes: constants_1.DEFAULT_SCOPES,
|
|
72
|
-
displayMode,
|
|
73
|
-
}).then(setAuthService);
|
|
74
|
-
}, [currentUrl, clientId, redirectUrl, config, displayMode]);
|
|
75
|
-
const { data: session, isLoading, error, } = (0, react_query_1.useQuery)({
|
|
76
|
-
queryKey: [
|
|
77
|
-
"session",
|
|
78
|
-
authResponseUrl,
|
|
79
|
-
iframeUrl,
|
|
80
|
-
currentUrl,
|
|
81
|
-
isInIframe,
|
|
82
|
-
authService,
|
|
83
|
-
],
|
|
84
|
-
queryFn: async () => {
|
|
85
|
-
if (!authService) {
|
|
86
|
-
return { authenticated: false };
|
|
87
|
-
}
|
|
88
|
-
if (inputSessionData) {
|
|
89
|
-
return inputSessionData;
|
|
90
|
-
}
|
|
91
|
-
const url = new URL(authResponseUrl
|
|
92
|
-
? authResponseUrl
|
|
93
|
-
: globalThis.window.location.href || "");
|
|
94
|
-
// if we have existing tokens, then validate them and return the session data
|
|
95
|
-
// otherwise check if we have a code in the url and exchange it for tokens
|
|
96
|
-
// if we have neither, return undefined
|
|
97
|
-
const existingSessionData = await authService.validateExistingSession();
|
|
98
|
-
if (existingSessionData.authenticated) {
|
|
99
|
-
return existingSessionData;
|
|
100
|
-
}
|
|
101
|
-
const code = url.searchParams.get("code");
|
|
102
|
-
const state = url.searchParams.get("state");
|
|
103
|
-
if (!serverTokenExchange && code && state && !isInIframe) {
|
|
104
|
-
try {
|
|
105
|
-
await authService.tokenExchange(code, state);
|
|
106
|
-
const clientStorage = new storage_1.LocalStorageAdapter();
|
|
107
|
-
const user = await (0, session_js_1.getUser)(clientStorage);
|
|
108
|
-
if (!user) {
|
|
109
|
-
throw new Error("Failed to get user info");
|
|
110
|
-
}
|
|
111
|
-
const userSession = new UserSession_js_1.GenericUserSession(clientStorage);
|
|
112
|
-
userSession.set(user);
|
|
113
|
-
onSignIn?.(); // Call onSignIn without an error if successful
|
|
114
|
-
return authService.getSessionData();
|
|
115
|
-
}
|
|
116
|
-
catch (error) {
|
|
117
|
-
setTokenExchangeError(error);
|
|
118
|
-
onSignIn?.(error instanceof Error ? error : new Error("Failed to sign in")); // Pass the error to onSignIn
|
|
119
|
-
return { authenticated: false };
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
return existingSessionData;
|
|
123
|
-
},
|
|
124
|
-
});
|
|
125
|
-
const signOutMutation = (0, react_query_1.useMutation)({
|
|
126
|
-
mutationFn: async () => {
|
|
127
|
-
await onSignOut?.();
|
|
128
|
-
// Implement signOut logic here
|
|
129
|
-
const authInitiator = getAuthInitiator();
|
|
130
|
-
await authInitiator?.signOut();
|
|
131
|
-
setIframeUrl(null);
|
|
132
|
-
setShowIFrame(false);
|
|
133
|
-
setAuthResponseUrl(null);
|
|
134
|
-
},
|
|
135
|
-
onSuccess: () => {
|
|
136
|
-
queryClient.setQueryData([
|
|
137
|
-
"session",
|
|
138
|
-
authResponseUrl,
|
|
139
|
-
iframeUrl,
|
|
140
|
-
currentUrl,
|
|
141
|
-
isInIframe,
|
|
142
|
-
authService,
|
|
143
|
-
], null);
|
|
144
|
-
},
|
|
145
|
-
});
|
|
146
|
-
const getAuthInitiator = (0, react_1.useCallback)((overrideDisplayMode) => {
|
|
147
|
-
const useDisplayMode = overrideDisplayMode || displayMode;
|
|
148
|
-
if (!pkceConsumer) {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
return (browserAuthenticationInitiator ||
|
|
152
|
-
new AuthenticationService_1.BrowserAuthenticationInitiator({
|
|
153
|
-
pkceConsumer, // generate and retrieve the challenge client-side
|
|
154
|
-
clientId,
|
|
155
|
-
redirectUrl,
|
|
156
|
-
state: (0, oauth_1.generateState)(useDisplayMode, serverTokenExchange),
|
|
157
|
-
scopes: constants_1.DEFAULT_SCOPES,
|
|
158
|
-
displayMode: useDisplayMode,
|
|
159
|
-
oauthServer: config.oauthServer,
|
|
160
|
-
// the endpoints to use for the login (if not obtained from the auth server
|
|
161
|
-
endpointOverrides: config.endpoints,
|
|
162
|
-
nonce,
|
|
163
|
-
}));
|
|
164
|
-
}, [
|
|
165
|
-
serverTokenExchange,
|
|
166
|
-
displayMode,
|
|
167
|
-
browserAuthenticationInitiator,
|
|
168
|
-
clientId,
|
|
169
|
-
redirectUrl,
|
|
170
|
-
config.oauthServer,
|
|
171
|
-
config.endpoints,
|
|
172
|
-
pkceConsumer,
|
|
173
|
-
nonce,
|
|
174
|
-
]);
|
|
175
|
-
const signIn = (0, react_1.useCallback)(async (overrideDisplayMode = "iframe") => {
|
|
176
|
-
setDisplayMode(overrideDisplayMode);
|
|
177
|
-
const authInitiator = getAuthInitiator(overrideDisplayMode);
|
|
178
|
-
setBrowserAuthenticationInitiator(authInitiator);
|
|
179
|
-
if (overrideDisplayMode === "iframe") {
|
|
180
|
-
setShowIFrame(true);
|
|
181
|
-
}
|
|
182
|
-
else if (overrideDisplayMode === "redirect") {
|
|
183
|
-
setIsRedirecting(true);
|
|
184
|
-
}
|
|
185
|
-
authInitiator?.signIn(iframeRef.current).catch((error) => {
|
|
186
|
-
console.log("signIn error", {
|
|
187
|
-
error,
|
|
188
|
-
isPopupError: error instanceof types_1.PopupError,
|
|
189
|
-
});
|
|
190
|
-
// if we've tried to open a popup and it has failed, then fallback to redirect mode
|
|
191
|
-
if (error instanceof types_1.PopupError) {
|
|
192
|
-
signIn("redirect");
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
}, [getAuthInitiator]);
|
|
196
|
-
// remove event listeners when the component unmounts
|
|
197
|
-
(0, react_1.useEffect)(() => {
|
|
198
|
-
return () => {
|
|
199
|
-
if (browserAuthenticationInitiator) {
|
|
200
|
-
browserAuthenticationInitiator.cleanup();
|
|
201
|
-
}
|
|
202
|
-
};
|
|
203
|
-
}, [browserAuthenticationInitiator]);
|
|
204
|
-
const isAuthenticated = (0, react_1.useMemo)(() => (session ? session.authenticated : false), [session]);
|
|
205
|
-
(0, react_query_1.useQuery)({
|
|
206
|
-
queryKey: ["autoSignIn", modalIframe, redirectUrl, isAuthenticated],
|
|
207
|
-
queryFn: async () => {
|
|
208
|
-
if (!modalIframe &&
|
|
209
|
-
redirectUrl &&
|
|
210
|
-
!isAuthenticated &&
|
|
211
|
-
iframeRef.current) {
|
|
212
|
-
signIn("iframe");
|
|
213
|
-
}
|
|
214
|
-
return true;
|
|
215
|
-
},
|
|
216
|
-
refetchOnWindowFocus: false,
|
|
217
|
-
});
|
|
218
|
-
const value = (0, react_1.useMemo)(() => ({
|
|
219
|
-
isLoading,
|
|
220
|
-
error: error,
|
|
221
|
-
signOut: async () => {
|
|
222
|
-
await signOutMutation.mutateAsync();
|
|
223
|
-
},
|
|
224
|
-
isAuthenticated,
|
|
225
|
-
signIn,
|
|
226
|
-
}), [isLoading, error, signOutMutation, isAuthenticated, signIn]);
|
|
227
|
-
return (React.createElement(AuthContext_1.AuthContext.Provider, { value: value },
|
|
228
|
-
React.createElement(ConfigProvider_1.ConfigProvider, { config: config, redirectUrl: redirectUrl, modalIframe: modalIframe, serverTokenExchange: serverTokenExchange },
|
|
229
|
-
React.createElement(IframeProvider_1.IframeProvider, { setAuthResponseUrl: setAuthResponseUrl, iframeRef: iframeRef },
|
|
230
|
-
React.createElement(SessionProvider_1.SessionProvider, { session: session },
|
|
231
|
-
React.createElement(TokenProvider_1.TokenProvider, null,
|
|
232
|
-
modalIframe && !isInIframe && !session?.authenticated && (React.createElement("div", { style: showIFrame ? { display: "block" } : { display: "none" } },
|
|
233
|
-
React.createElement(CivicAuthIframeContainer_1.CivicAuthIframeContainer, { onClose: () => setShowIFrame(false) }))),
|
|
234
|
-
modalIframe &&
|
|
235
|
-
(isInIframe ||
|
|
236
|
-
isRedirecting ||
|
|
237
|
-
(isLoading && !serverTokenExchange)) && (React.createElement(BlockDisplay, null,
|
|
238
|
-
React.createElement(LoadingIcon_1.LoadingIcon, null))),
|
|
239
|
-
(tokenExchangeError || error) && (React.createElement(BlockDisplay, null,
|
|
240
|
-
React.createElement("div", null,
|
|
241
|
-
"Error: ",
|
|
242
|
-
(tokenExchangeError || error).message))),
|
|
243
|
-
children))))));
|
|
244
|
-
};
|
|
245
|
-
exports.AuthProvider = AuthProvider;
|
|
246
|
-
//# sourceMappingURL=AuthProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AuthProvider.js","sourceRoot":"","sources":["../../../../src/shared/AuthProvider.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;AAEb,iCAA0E;AAC1E,uDAA8E;AAE9E,2FAAwF;AACxF,oEAAiE;AACjE,wEAAqE;AACrE,2CAA6C;AAC7C,qCAAsC;AACtC,iEAA8D;AAC9D,iDAAoD;AACpD,sDAAmD;AACnD,4EAG0C;AAE1C,4CAA8C;AAC9C,gDAAoE;AACpE,uCAA4C;AAC5C,+CAAwD;AACxD,sEAAmE;AACnE,6CAAuC;AACvC,qDAAsD;AACtD,sEAAmE;AAEnE,2BAA2B;AAC3B,IAAI,gBAAgB,CAAC;AACrB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,gBAAgB,GAAG,MAAM,CAAC;AAC5B,CAAC;KAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACzC,gBAAgB,GAAG,MAAM,CAAC;AAC5B,CAAC;KAAM,CAAC;IACN,gBAAgB,GAAG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;AAC/C,CAAC;AACD,gBAAgB,CAAC,UAAU,GAAG,gBAAgB,CAAC;AAe/C,SAAS,YAAY,CAAC,EAAE,QAAQ,EAA2B;IACzD,OAAO,CACL,6BAAK,SAAS,EAAC,gIAAgI;QAC7I,6BAAK,SAAS,EAAC,oFAAoF,IAChG,QAAQ,CACL,CACF,CACP,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,EACpB,QAAQ,EACR,QAAQ,EACR,WAAW,EAAE,gBAAgB,EAC7B,MAAM,GAAG,mBAAU,EACnB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,KAAK,EACL,WAAW,GAAG,IAAI,EAClB,WAAW,EAAE,gBAAgB,GACX,EAAE,EAAE;IACtB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IAChE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IAClE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,IAAA,gBAAQ,EAAgB,IAAI,CAAC,CAAC;IAC5E,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,IAAA,gBAAQ,GAAS,CAAC;IACtE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAAc,QAAQ,CAAC,CAAC;IACtE,MAAM,CAAC,8BAA8B,EAAE,iCAAiC,CAAC,GACvE,IAAA,gBAAQ,GAAyC,CAAC;IACpD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IACpD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,IAAA,4BAAc,GAAE,CAAC;IACrC,MAAM,SAAS,GAAG,IAAA,cAAM,EAAoB,IAAI,CAAC,CAAC;IAElD,2EAA2E;IAC3E,MAAM,mBAAmB,GACvB,YAAY,YAAY,wCAA8B,CAAC;IACzD,8FAA8F;IAC9F,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,OAAO,UAAU,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC7C,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,IAAA,6BAAgB,EAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC1D,aAAa,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,IAAA,eAAO,EACzB,GAAG,EAAE,CAAC,CAAC,gBAAgB,IAAI,UAAU,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC1D,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAC/B,CAAC;IAEF,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,GAA0B,CAAC;IAEzE,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU;YAAE,OAAO;QACxB,oDAA4B,CAAC,KAAK,CAAC;YACjC,QAAQ;YACR,WAAW;YACX,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,MAAM,EAAE,0BAAc;YACtB,WAAW;SACZ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1B,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAE7D,MAAM,EACJ,IAAI,EAAE,OAAO,EACb,SAAS,EACT,KAAK,GACN,GAAG,IAAA,sBAAQ,EAAC;QACX,QAAQ,EAAE;YACR,SAAS;YACT,eAAe;YACf,SAAS;YACT,UAAU;YACV,UAAU;YACV,WAAW;SACZ;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;YAClC,CAAC;YACD,IAAI,gBAAgB,EAAE,CAAC;gBACrB,OAAO,gBAAgB,CAAC;YAC1B,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,GAAG,CACjB,eAAe;gBACb,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,CAC1C,CAAC;YACF,6EAA6E;YAC7E,0EAA0E;YAC1E,uCAAuC;YACvC,MAAM,mBAAmB,GAAG,MAAM,WAAW,CAAC,uBAAuB,EAAE,CAAC;YACxE,IAAI,mBAAmB,CAAC,aAAa,EAAE,CAAC;gBACtC,OAAO,mBAAmB,CAAC;YAC7B,CAAC;YACD,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC,mBAAmB,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;gBACzD,IAAI,CAAC;oBACH,MAAM,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAC7C,MAAM,aAAa,GAAG,IAAI,6BAAmB,EAAE,CAAC;oBAChD,MAAM,IAAI,GAAG,MAAM,IAAA,oBAAO,EAAC,aAAa,CAAC,CAAC;oBAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;oBAC7C,CAAC;oBAED,MAAM,WAAW,GAAG,IAAI,mCAAkB,CAAC,aAAa,CAAC,CAAC;oBAC1D,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBAEtB,QAAQ,EAAE,EAAE,CAAC,CAAC,+CAA+C;oBAC7D,OAAO,WAAW,CAAC,cAAc,EAAE,CAAC;gBACtC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,qBAAqB,CAAC,KAAc,CAAC,CAAC;oBACtC,QAAQ,EAAE,CACR,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAChE,CAAC,CAAC,6BAA6B;oBAChC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;gBAClC,CAAC;YACH,CAAC;YAED,OAAO,mBAAmB,CAAC;QAC7B,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,IAAA,yBAAW,EAAC;QAClC,UAAU,EAAE,KAAK,IAAI,EAAE;YACrB,MAAM,SAAS,EAAE,EAAE,CAAC;YACpB,+BAA+B;YAC/B,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;YACzC,MAAM,aAAa,EAAE,OAAO,EAAE,CAAC;YAC/B,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,SAAS,EAAE,GAAG,EAAE;YACd,WAAW,CAAC,YAAY,CACtB;gBACE,SAAS;gBACT,eAAe;gBACf,SAAS;gBACT,UAAU;gBACV,UAAU;gBACV,WAAW;aACZ,EACD,IAAI,CACL,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,IAAA,mBAAW,EAClC,CAAC,mBAAiC,EAAE,EAAE;QACpC,MAAM,cAAc,GAAG,mBAAmB,IAAI,WAAW,CAAC;QAC1D,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CACL,8BAA8B;YAC9B,IAAI,sDAA8B,CAAC;gBACjC,YAAY,EAAE,kDAAkD;gBAChE,QAAQ;gBACR,WAAW;gBACX,KAAK,EAAE,IAAA,qBAAa,EAAC,cAAc,EAAE,mBAAmB,CAAC;gBACzD,MAAM,EAAE,0BAAc;gBACtB,WAAW,EAAE,cAAc;gBAC3B,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,2EAA2E;gBAC3E,iBAAiB,EAAE,MAAM,CAAC,SAAS;gBACnC,KAAK;aACN,CAAC,CACH,CAAC;IACJ,CAAC,EACD;QACE,mBAAmB;QACnB,WAAW;QACX,8BAA8B;QAC9B,QAAQ;QACR,WAAW;QACX,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,SAAS;QAChB,YAAY;QACZ,KAAK;KACN,CACF,CAAC;IAEF,MAAM,MAAM,GAAG,IAAA,mBAAW,EACxB,KAAK,EAAE,sBAAmC,QAAQ,EAAE,EAAE;QACpD,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACpC,MAAM,aAAa,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QAC5D,iCAAiC,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,mBAAmB,KAAK,QAAQ,EAAE,CAAC;YACrC,aAAa,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,mBAAmB,KAAK,UAAU,EAAE,CAAC;YAC9C,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACvD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE;gBAC1B,KAAK;gBACL,YAAY,EAAE,KAAK,YAAY,kBAAU;aAC1C,CAAC,CAAC;YACH,mFAAmF;YACnF,IAAI,KAAK,YAAY,kBAAU,EAAE,CAAC;gBAChC,MAAM,CAAC,UAAU,CAAC,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,EACD,CAAC,gBAAgB,CAAC,CACnB,CAAC;IAEF,qDAAqD;IACrD,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,IAAI,8BAA8B,EAAE,CAAC;gBACnC,8BAA8B,CAAC,OAAO,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,8BAA8B,CAAC,CAAC,CAAC;IAErC,MAAM,eAAe,GAAG,IAAA,eAAO,EAC7B,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,EAC/C,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,IAAA,sBAAQ,EAAC;QACP,QAAQ,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,CAAC;QACnE,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IACE,CAAC,WAAW;gBACZ,WAAW;gBACX,CAAC,eAAe;gBAChB,SAAS,CAAC,OAAO,EACjB,CAAC;gBACD,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnB,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,oBAAoB,EAAE,KAAK;KAC5B,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAA,eAAO,EACnB,GAAG,EAAE,CAAC,CAAC;QACL,SAAS;QACT,KAAK,EAAE,KAAqB;QAC5B,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,eAAe,CAAC,WAAW,EAAE,CAAC;QACtC,CAAC;QACD,eAAe;QACf,MAAM;KACP,CAAC,EACF,CAAC,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,CAC7D,CAAC;IACF,OAAO,CACL,oBAAC,yBAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK;QAChC,oBAAC,+BAAc,IACb,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,mBAAmB;YAExC,oBAAC,+BAAc,IACb,kBAAkB,EAAE,kBAAkB,EACtC,SAAS,EAAE,SAAS;gBAEpB,oBAAC,iCAAe,IAAC,OAAO,EAAE,OAAO;oBAC/B,oBAAC,6BAAa;wBACX,WAAW,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,EAAE,aAAa,IAAI,CACxD,6BACE,KAAK,EACH,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE;4BAGzD,oBAAC,mDAAwB,IACvB,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GACnC,CACE,CACP;wBAEA,WAAW;4BACV,CAAC,UAAU;gCACT,aAAa;gCACb,CAAC,SAAS,IAAI,CAAC,mBAAmB,CAAC,CAAC,IAAI,CACxC,oBAAC,YAAY;4BACX,oBAAC,yBAAW,OAAG,CACF,CAChB;wBAEF,CAAC,kBAAkB,IAAI,KAAK,CAAC,IAAI,CAChC,oBAAC,YAAY;4BACX;;gCACU,CAAC,kBAAkB,IAAK,KAAe,CAAC,CAAC,OAAO,CACpD,CACO,CAChB;wBACA,QAAQ,CACK,CACA,CACH,CACF,CACI,CACxB,CAAC;AACJ,CAAC,CAAC;AAEO,oCAAY","sourcesContent":["\"use client\";\nimport type { ReactNode } from \"react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport type { Config, DisplayMode, SessionData } from \"@/types.js\";\nimport { CivicAuthIframeContainer } from \"@/shared/components/CivicAuthIframeContainer\";\nimport { TokenProvider } from \"@/shared/providers/TokenProvider\";\nimport { SessionProvider } from \"@/shared/providers/SessionProvider\";\nimport { DEFAULT_SCOPES } from \"@/constants\";\nimport { authConfig } from \"@/config\";\nimport { LoadingIcon } from \"@/shared/components/LoadingIcon\";\nimport { isWindowInIframe } from \"@/lib/windowUtil\";\nimport { AuthContext } from \"@/shared/AuthContext\";\nimport {\n BrowserAuthenticationInitiator,\n BrowserAuthenticationService,\n} from \"@/services/AuthenticationService\";\nimport type { AuthenticationResolver, PKCEConsumer } from \"@/services/types\";\nimport { PopupError } from \"@/services/types\";\nimport { ConfidentialClientPKCEConsumer } from \"@/services/PKCE.js\";\nimport { generateState } from \"@/lib/oauth\";\nimport { LocalStorageAdapter } from \"@/browser/storage\";\nimport { ConfigProvider } from \"@/shared/providers/ConfigProvider\";\nimport { getUser } from \"./session.js\";\nimport { GenericUserSession } from \"./UserSession.js\";\nimport { IframeProvider } from \"@/shared/providers/IframeProvider\";\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?: () => Promise<void>;\n pkceConsumer?: PKCEConsumer;\n modalIframe?: boolean;\n sessionData?: SessionData;\n};\n\nfunction BlockDisplay({ children }: { children: ReactNode }) {\n return (\n <div className=\"cac-relative cac-left-0 cac-top-0 cac-z-50 cac-flex cac-h-screen cac-w-screen cac-items-center cac-justify-center cac-bg-white\">\n <div className=\"cac-absolute cac-inset-0 cac-flex cac-items-center cac-justify-center cac-bg-white\">\n {children}\n </div>\n </div>\n );\n}\n\nconst AuthProvider = ({\n children,\n clientId,\n redirectUrl: inputRedirectUrl,\n config = authConfig,\n onSignIn,\n onSignOut,\n pkceConsumer,\n nonce,\n modalIframe = true,\n sessionData: inputSessionData,\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 [displayMode, setDisplayMode] = useState<DisplayMode>(\"iframe\");\n const [browserAuthenticationInitiator, setBrowserAuthenticationInitiator] =\n useState<BrowserAuthenticationInitiator | null>();\n const [showIFrame, setShowIFrame] = useState(false);\n const [isRedirecting, setIsRedirecting] = useState(false);\n const queryClient = useQueryClient();\n const iframeRef = useRef<HTMLIFrameElement>(null);\n\n // TODO maybe we want to support or derive serverTokenExchange another way?\n const serverTokenExchange =\n pkceConsumer instanceof ConfidentialClientPKCEConsumer;\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, setAuthService] = useState<AuthenticationResolver>();\n\n useEffect(() => {\n if (!currentUrl) return;\n BrowserAuthenticationService.build({\n clientId,\n redirectUrl,\n oauthServer: config.oauthServer,\n scopes: DEFAULT_SCOPES,\n displayMode,\n }).then(setAuthService);\n }, [currentUrl, clientId, redirectUrl, config, displayMode]);\n\n const {\n data: session,\n isLoading,\n error,\n } = useQuery({\n queryKey: [\n \"session\",\n authResponseUrl,\n iframeUrl,\n currentUrl,\n isInIframe,\n authService,\n ],\n queryFn: async () => {\n if (!authService) {\n return { authenticated: false };\n }\n if (inputSessionData) {\n return inputSessionData;\n }\n const url = new URL(\n authResponseUrl\n ? authResponseUrl\n : globalThis.window.location.href || \"\",\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 const code = url.searchParams.get(\"code\");\n const state = url.searchParams.get(\"state\");\n if (!serverTokenExchange && code && state && !isInIframe) {\n try {\n await authService.tokenExchange(code, state);\n const clientStorage = new LocalStorageAdapter();\n const user = await getUser(clientStorage);\n if (!user) {\n throw new Error(\"Failed to get user info\");\n }\n\n const userSession = new GenericUserSession(clientStorage);\n userSession.set(user);\n\n onSignIn?.(); // Call onSignIn without an error if successful\n return authService.getSessionData();\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\n return existingSessionData;\n },\n });\n\n const signOutMutation = useMutation({\n mutationFn: async () => {\n await onSignOut?.();\n // Implement signOut logic here\n const authInitiator = getAuthInitiator();\n await authInitiator?.signOut();\n setIframeUrl(null);\n setShowIFrame(false);\n setAuthResponseUrl(null);\n },\n onSuccess: () => {\n queryClient.setQueryData(\n [\n \"session\",\n authResponseUrl,\n iframeUrl,\n currentUrl,\n isInIframe,\n authService,\n ],\n null,\n );\n },\n });\n\n const getAuthInitiator = useCallback(\n (overrideDisplayMode?: DisplayMode) => {\n const useDisplayMode = overrideDisplayMode || displayMode;\n if (!pkceConsumer) {\n return null;\n }\n return (\n browserAuthenticationInitiator ||\n new BrowserAuthenticationInitiator({\n pkceConsumer, // generate and retrieve the challenge client-side\n clientId,\n redirectUrl,\n state: generateState(useDisplayMode, serverTokenExchange),\n scopes: DEFAULT_SCOPES,\n displayMode: useDisplayMode,\n oauthServer: config.oauthServer,\n // the endpoints to use for the login (if not obtained from the auth server\n endpointOverrides: config.endpoints,\n nonce,\n })\n );\n },\n [\n serverTokenExchange,\n displayMode,\n browserAuthenticationInitiator,\n clientId,\n redirectUrl,\n config.oauthServer,\n config.endpoints,\n pkceConsumer,\n nonce,\n ],\n );\n\n const signIn = useCallback(\n async (overrideDisplayMode: DisplayMode = \"iframe\") => {\n setDisplayMode(overrideDisplayMode);\n const authInitiator = getAuthInitiator(overrideDisplayMode);\n setBrowserAuthenticationInitiator(authInitiator);\n if (overrideDisplayMode === \"iframe\") {\n setShowIFrame(true);\n } else if (overrideDisplayMode === \"redirect\") {\n setIsRedirecting(true);\n }\n authInitiator?.signIn(iframeRef.current).catch((error) => {\n console.log(\"signIn error\", {\n error,\n isPopupError: error instanceof PopupError,\n });\n // if we've tried to open a popup and it has failed, then fallback to redirect mode\n if (error instanceof PopupError) {\n signIn(\"redirect\");\n }\n });\n },\n [getAuthInitiator],\n );\n\n // remove event listeners when the component unmounts\n useEffect(() => {\n return () => {\n if (browserAuthenticationInitiator) {\n browserAuthenticationInitiator.cleanup();\n }\n };\n }, [browserAuthenticationInitiator]);\n\n const isAuthenticated = useMemo(\n () => (session ? session.authenticated : false),\n [session],\n );\n\n useQuery({\n queryKey: [\"autoSignIn\", modalIframe, redirectUrl, isAuthenticated],\n queryFn: async () => {\n if (\n !modalIframe &&\n redirectUrl &&\n !isAuthenticated &&\n iframeRef.current\n ) {\n signIn(\"iframe\");\n }\n return true;\n },\n refetchOnWindowFocus: false,\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 <ConfigProvider\n config={config}\n redirectUrl={redirectUrl}\n modalIframe={modalIframe}\n serverTokenExchange={serverTokenExchange}\n >\n <IframeProvider\n setAuthResponseUrl={setAuthResponseUrl}\n iframeRef={iframeRef}\n >\n <SessionProvider session={session}>\n <TokenProvider>\n {modalIframe && !isInIframe && !session?.authenticated && (\n <div\n style={\n showIFrame ? { display: \"block\" } : { display: \"none\" }\n }\n >\n <CivicAuthIframeContainer\n onClose={() => setShowIFrame(false)}\n />\n </div>\n )}\n\n {modalIframe &&\n (isInIframe ||\n isRedirecting ||\n (isLoading && !serverTokenExchange)) && (\n <BlockDisplay>\n <LoadingIcon />\n </BlockDisplay>\n )}\n\n {(tokenExchangeError || error) && (\n <BlockDisplay>\n <div>\n Error: {(tokenExchangeError || (error as Error)).message}\n </div>\n </BlockDisplay>\n )}\n {children}\n </TokenProvider>\n </SessionProvider>\n </IframeProvider>\n </ConfigProvider>\n </AuthContext.Provider>\n );\n};\n\nexport { AuthProvider };\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CivicAuthProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/CivicAuthProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EAAgB,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAIjE,OAAO,wBAAwB,CAAC;AAOhC,KAAK,sBAAsB,GAAG,IAAI,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAC;AAEtE,QAAA,MAAM,iBAAiB,2BAA4B,sBAAsB,gCAaxE,CAAC;AAEF,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,CAAC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
"use client";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.CivicAuthProvider = void 0;
|
|
5
|
-
const AuthProvider_1 = require("./AuthProvider");
|
|
6
|
-
const react_query_1 = require("@tanstack/react-query");
|
|
7
|
-
// adding the styles import here to be added to the bundle
|
|
8
|
-
require("@civic/auth/styles.css");
|
|
9
|
-
const PKCE_js_1 = require("../services/PKCE.js");
|
|
10
|
-
const UserProvider_1 = require("./UserProvider");
|
|
11
|
-
const storage_1 = require("../browser/storage");
|
|
12
|
-
const queryClient = new react_query_1.QueryClient();
|
|
13
|
-
const CivicAuthProvider = ({ children, ...props }) => {
|
|
14
|
-
return (React.createElement(react_query_1.QueryClientProvider, { client: queryClient },
|
|
15
|
-
React.createElement(AuthProvider_1.AuthProvider, { ...props, pkceConsumer: new PKCE_js_1.BrowserPublicClientPKCEProducer() },
|
|
16
|
-
React.createElement(UserProvider_1.UserProvider, { storage: new storage_1.LocalStorageAdapter() }, children))));
|
|
17
|
-
};
|
|
18
|
-
exports.CivicAuthProvider = CivicAuthProvider;
|
|
19
|
-
//# sourceMappingURL=CivicAuthProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CivicAuthProvider.js","sourceRoot":"","sources":["../../../../src/shared/CivicAuthProvider.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;AACb,iDAAiE;AACjE,uDAAyE;AAEzE,0DAA0D;AAC1D,kCAAgC;AAChC,gDAAqE;AACrE,iDAA8C;AAC9C,+CAAwD;AAExD,MAAM,WAAW,GAAG,IAAI,yBAAW,EAAE,CAAC;AAItC,MAAM,iBAAiB,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK,EAA0B,EAAE,EAAE;IAC3E,OAAO,CACL,oBAAC,iCAAmB,IAAC,MAAM,EAAE,WAAW;QACtC,oBAAC,2BAAY,OACP,KAAK,EACT,YAAY,EAAE,IAAI,yCAA+B,EAAE;YAEnD,oBAAC,2BAAY,IAAC,OAAO,EAAE,IAAI,6BAAmB,EAAE,IAC7C,QAAQ,CACI,CACF,CACK,CACvB,CAAC;AACJ,CAAC,CAAC;AAEO,8CAAiB","sourcesContent":["\"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.js\";\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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GenericAuthenticationRefresher.d.ts","sourceRoot":"","sources":["../../../../src/shared/GenericAuthenticationRefresher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAyB,MAAM,YAAY,CAAC;AAMhF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,qBAAa,8BAA+B,YAAW,uBAAuB;IAK1E,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,iBAAiB,CAAC;IAN5B,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,SAAS,CAAwB;IAEzC,OAAO;IAWD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;WAkBd,KAAK,CAChB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,WAAW,EACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GACrC,OAAO,CAAC,8BAA8B,CAAC;IAWpC,aAAa;CAgBpB"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GenericAuthenticationRefresher = void 0;
|
|
4
|
-
const util_js_ts_1 = require("../shared/lib/util.js.ts");
|
|
5
|
-
const oauth2_1 = require("oslo/oauth2");
|
|
6
|
-
class GenericAuthenticationRefresher {
|
|
7
|
-
authConfig;
|
|
8
|
-
storage;
|
|
9
|
-
endpointOverrides;
|
|
10
|
-
oauth2client;
|
|
11
|
-
endpoints;
|
|
12
|
-
constructor(authConfig, storage, endpointOverrides) {
|
|
13
|
-
this.authConfig = authConfig;
|
|
14
|
-
this.storage = storage;
|
|
15
|
-
this.endpointOverrides = endpointOverrides;
|
|
16
|
-
console.log("GenericAuthenticationRefresher constructor", {
|
|
17
|
-
authConfig,
|
|
18
|
-
endpointOverrides,
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
async init() {
|
|
22
|
-
// resolve oauth config
|
|
23
|
-
this.endpoints = await (0, util_js_ts_1.getEndpointsWithOverrides)(this.authConfig.oauthServer, this.endpointOverrides);
|
|
24
|
-
this.oauth2client = new oauth2_1.OAuth2Client(this.authConfig.clientId, this.endpoints.auth, this.endpoints.token, {
|
|
25
|
-
redirectURI: this.authConfig.redirectUrl,
|
|
26
|
-
});
|
|
27
|
-
return this;
|
|
28
|
-
}
|
|
29
|
-
static async build(authConfig, storage, endpointOverrides) {
|
|
30
|
-
const refresher = new GenericAuthenticationRefresher(authConfig, storage, endpointOverrides);
|
|
31
|
-
await refresher.init();
|
|
32
|
-
return refresher;
|
|
33
|
-
}
|
|
34
|
-
async refreshTokens() {
|
|
35
|
-
if (!this.oauth2client)
|
|
36
|
-
await this.init();
|
|
37
|
-
const tokens = await (0, util_js_ts_1.retrieveTokens)(this.storage);
|
|
38
|
-
if (!tokens?.refresh_token)
|
|
39
|
-
throw new Error("No refresh token available");
|
|
40
|
-
const oauth2Client = this.oauth2client;
|
|
41
|
-
const refreshedTokens = await oauth2Client.refreshAccessToken(tokens.refresh_token);
|
|
42
|
-
(0, util_js_ts_1.storeTokens)(this.storage, refreshedTokens);
|
|
43
|
-
return tokens;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
exports.GenericAuthenticationRefresher = GenericAuthenticationRefresher;
|
|
47
|
-
//# sourceMappingURL=GenericAuthenticationRefresher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GenericAuthenticationRefresher.js","sourceRoot":"","sources":["../../../../src/shared/GenericAuthenticationRefresher.ts"],"names":[],"mappings":";;;AAEA,wDAIiC;AAEjC,wCAA2C;AAE3C,MAAa,8BAA8B;IAK/B;IACA;IACA;IANF,YAAY,CAA2B;IACvC,SAAS,CAAwB;IAEzC,YACU,UAAsB,EACtB,OAAoB,EACpB,iBAAsC;QAFtC,eAAU,GAAV,UAAU,CAAY;QACtB,YAAO,GAAP,OAAO,CAAa;QACpB,sBAAiB,GAAjB,iBAAiB,CAAqB;QAE9C,OAAO,CAAC,GAAG,CAAC,4CAA4C,EAAE;YACxD,UAAU;YACV,iBAAiB;SAClB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,uBAAuB;QACvB,IAAI,CAAC,SAAS,GAAG,MAAM,IAAA,sCAAyB,EAC9C,IAAI,CAAC,UAAU,CAAC,WAAW,EAC3B,IAAI,CAAC,iBAAiB,CACvB,CAAC;QACF,IAAI,CAAC,YAAY,GAAG,IAAI,qBAAY,CAClC,IAAI,CAAC,UAAU,CAAC,QAAQ,EACxB,IAAI,CAAC,SAAS,CAAC,IAAI,EACnB,IAAI,CAAC,SAAS,CAAC,KAAK,EACpB;YACE,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW;SACzC,CACF,CAAC;QAEF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,CAChB,UAAsB,EACtB,OAAoB,EACpB,iBAAsC;QAEtC,MAAM,SAAS,GAAG,IAAI,8BAA8B,CAClD,UAAU,EACV,OAAO,EACP,iBAAiB,CAClB,CAAC;QACF,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;QAEvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QAE1C,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAc,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAE1E,MAAM,YAAY,GAAG,IAAI,CAAC,YAAa,CAAC;QACxC,MAAM,eAAe,GACnB,MAAM,YAAY,CAAC,kBAAkB,CACnC,MAAM,CAAC,aAAa,CACrB,CAAC;QAEJ,IAAA,wBAAW,EAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAE3C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAhED,wEAgEC","sourcesContent":["import type { AuthenticationRefresher } from \"@/services/types.ts\";\nimport type { AuthStorage, Endpoints, OIDCTokenResponseBody } from \"@/types.js\";\nimport {\n getEndpointsWithOverrides,\n retrieveTokens,\n storeTokens,\n} from \"@/shared/lib/util.js.ts\";\nimport type { AuthConfig } from \"@/server/config.ts\";\nimport { OAuth2Client } from \"oslo/oauth2\";\n\nexport class GenericAuthenticationRefresher implements AuthenticationRefresher {\n private oauth2client: OAuth2Client | undefined;\n private endpoints: Endpoints | undefined;\n\n private constructor(\n private authConfig: AuthConfig,\n private storage: AuthStorage,\n private endpointOverrides?: Partial<Endpoints>,\n ) {\n console.log(\"GenericAuthenticationRefresher constructor\", {\n authConfig,\n endpointOverrides,\n });\n }\n\n async init(): Promise<this> {\n // resolve oauth config\n this.endpoints = await getEndpointsWithOverrides(\n this.authConfig.oauthServer,\n this.endpointOverrides,\n );\n this.oauth2client = new OAuth2Client(\n this.authConfig.clientId,\n this.endpoints.auth,\n this.endpoints.token,\n {\n redirectURI: this.authConfig.redirectUrl,\n },\n );\n\n return this;\n }\n\n static async build(\n authConfig: AuthConfig,\n storage: AuthStorage,\n endpointOverrides?: Partial<Endpoints>,\n ): Promise<GenericAuthenticationRefresher> {\n const refresher = new GenericAuthenticationRefresher(\n authConfig,\n storage,\n endpointOverrides,\n );\n await refresher.init();\n\n return refresher;\n }\n\n async refreshTokens() {\n if (!this.oauth2client) await this.init();\n\n const tokens = await retrieveTokens(this.storage);\n if (!tokens?.refresh_token) throw new Error(\"No refresh token available\");\n\n const oauth2Client = this.oauth2client!;\n const refreshedTokens =\n await oauth2Client.refreshAccessToken<OIDCTokenResponseBody>(\n tokens.refresh_token,\n );\n\n storeTokens(this.storage, refreshedTokens);\n\n return tokens;\n }\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UserProvider.d.ts","sourceRoot":"","sources":["../../../../src/shared/UserProvider.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAI5D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,KAAK,eAAe,CAClB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC1E,GAAG,CAAC,SAAS,CAAC,IACd;IACF,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CACtB,GAAG,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;AAE7C,QAAA,MAAM,WAAW,mFAA8C,CAAC;AAEhE,QAAA,MAAM,YAAY,GAAI,CAAC,SAAS,WAAW,kEAKxC;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B,gCA0CA,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
"use client";
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.UserContext = exports.UserProvider = void 0;
|
|
5
|
-
const react_1 = require("react");
|
|
6
|
-
const react_query_1 = require("@tanstack/react-query");
|
|
7
|
-
const useAuth_1 = require("../shared/hooks/useAuth");
|
|
8
|
-
const useToken_1 = require("../shared/hooks/useToken");
|
|
9
|
-
const useSession_1 = require("../shared/hooks/useSession");
|
|
10
|
-
const UserSession_1 = require("../shared/UserSession");
|
|
11
|
-
const UserContext = (0, react_1.createContext)(null);
|
|
12
|
-
exports.UserContext = UserContext;
|
|
13
|
-
const UserProvider = ({ children, storage, user: inputUser, signOut: inputSignOut, }) => {
|
|
14
|
-
const { isLoading: authLoading, error: authError } = (0, useAuth_1.useAuth)();
|
|
15
|
-
const session = (0, useSession_1.useSession)();
|
|
16
|
-
const { accessToken, idToken } = (0, useToken_1.useToken)();
|
|
17
|
-
const { signIn, signOut } = (0, useAuth_1.useAuth)();
|
|
18
|
-
const fetchUser = async () => {
|
|
19
|
-
if (!accessToken) {
|
|
20
|
-
return null;
|
|
21
|
-
}
|
|
22
|
-
const userSession = new UserSession_1.GenericUserSession(storage);
|
|
23
|
-
return userSession.get();
|
|
24
|
-
};
|
|
25
|
-
const { data: user, isLoading: userLoading, error: userError, } = (0, react_query_1.useQuery)({
|
|
26
|
-
queryKey: ["user", session?.idToken],
|
|
27
|
-
queryFn: fetchUser,
|
|
28
|
-
enabled: !!session?.idToken, // Only run the query if we have an access token
|
|
29
|
-
});
|
|
30
|
-
const isLoading = authLoading || userLoading;
|
|
31
|
-
const error = authError || userError;
|
|
32
|
-
const userWithIdToken = user ? { ...user, idToken } : null;
|
|
33
|
-
return (React.createElement(UserContext.Provider, { value: {
|
|
34
|
-
user: (inputUser || userWithIdToken) ?? null,
|
|
35
|
-
isLoading,
|
|
36
|
-
error,
|
|
37
|
-
signIn,
|
|
38
|
-
signOut: inputSignOut || signOut,
|
|
39
|
-
} }, children));
|
|
40
|
-
};
|
|
41
|
-
exports.UserProvider = UserProvider;
|
|
42
|
-
//# sourceMappingURL=UserProvider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UserProvider.js","sourceRoot":"","sources":["../../../../src/shared/UserProvider.tsx"],"names":[],"mappings":";AAAA,YAAY,CAAC;;;AACb,iCAAiD;AACjD,uDAAiE;AAGjE,oDAAiD;AACjD,sDAAmD;AACnD,0DAAuD;AAEvD,sDAA0D;AAS1D,MAAM,WAAW,GAAG,IAAA,qBAAa,EAAyB,IAAI,CAAC,CAAC;AA0DzC,kCAAW;AAxDlC,MAAM,YAAY,GAAG,CAAwB,EAC3C,QAAQ,EACR,OAAO,EACP,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,YAAY,GAMtB,EAAE,EAAE;IACH,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAA,iBAAO,GAAE,CAAC;IAC/D,MAAM,OAAO,GAAG,IAAA,uBAAU,GAAE,CAAC;IAC7B,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,IAAA,mBAAQ,GAAE,CAAC;IAC5C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAA,iBAAO,GAAE,CAAC;IAEtC,MAAM,SAAS,GAAG,KAAK,IAA0B,EAAE;QACjD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,gCAAkB,CAAC,OAAO,CAAC,CAAC;QACpD,OAAO,WAAW,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,EACJ,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,SAAS,GACjB,GAA0C,IAAA,sBAAQ,EAAC;QAClD,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;QACpC,OAAO,EAAE,SAAS;QAClB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,gDAAgD;KAC9E,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,WAAW,IAAI,WAAW,CAAC;IAC7C,MAAM,KAAK,GAAG,SAAS,IAAI,SAAS,CAAC;IAErC,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3D,OAAO,CACL,oBAAC,WAAW,CAAC,QAAQ,IACnB,KAAK,EAAE;YACL,IAAI,EAAE,CAAC,SAAS,IAAI,eAAe,CAAC,IAAI,IAAI;YAC5C,SAAS;YACT,KAAK;YACL,MAAM;YACN,OAAO,EAAE,YAAY,IAAI,OAAO;SACjC,IAEA,QAAQ,CACY,CACxB,CAAC;AACJ,CAAC,CAAC;AAIO,oCAAY","sourcesContent":["\"use client\";\nimport { createContext, ReactNode } from \"react\";\nimport { useQuery, UseQueryResult } from \"@tanstack/react-query\";\nimport { JWT } from \"oslo/jwt\";\nimport { AuthStorage, EmptyObject, User } from \"@/types.js\";\nimport { useAuth } from \"@/shared/hooks/useAuth\";\nimport { useToken } from \"@/shared/hooks/useToken\";\nimport { useSession } from \"@/shared/hooks/useSession\";\nimport { AuthContextType } from \"@/shared/AuthContext\";\nimport { GenericUserSession } from \"@/shared/UserSession\";\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 storage,\n user: inputUser,\n signOut: inputSignOut,\n}: {\n children: ReactNode;\n storage: AuthStorage;\n user?: User<T> | null;\n signOut?: () => Promise<void>;\n}) => {\n const { isLoading: authLoading, error: authError } = useAuth();\n const session = useSession();\n const { accessToken, idToken } = useToken();\n const { signIn, signOut } = useAuth();\n\n const fetchUser = async (): Promise<User | null> => {\n if (!accessToken) {\n return null;\n }\n const userSession = new GenericUserSession(storage);\n return userSession.get();\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 const userWithIdToken = user ? { ...user, idToken } : null;\n\n return (\n <UserContext.Provider\n value={{\n user: (inputUser || userWithIdToken) ?? null,\n isLoading,\n error,\n signIn,\n signOut: inputSignOut || signOut,\n }}\n >\n {children}\n </UserContext.Provider>\n );\n};\n\nexport type { UserContextType };\n\nexport { UserProvider, UserContext };\n"]}
|