@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,178 @@
|
|
|
1
|
+
import type { NextConfig } from "next";
|
|
2
|
+
import { type CookieConfig, type TokensCookieConfig } from "@/shared/lib/types.js";
|
|
3
|
+
export type CookiesConfigObject = {
|
|
4
|
+
tokens: TokensCookieConfig;
|
|
5
|
+
user: CookieConfig;
|
|
6
|
+
};
|
|
7
|
+
export type AuthConfigWithDefaults = {
|
|
8
|
+
clientId: string;
|
|
9
|
+
oauthServer: string;
|
|
10
|
+
callbackUrl: string;
|
|
11
|
+
loginUrl: string;
|
|
12
|
+
logoutUrl: string;
|
|
13
|
+
challengeUrl: string;
|
|
14
|
+
include: string[];
|
|
15
|
+
exclude: string[];
|
|
16
|
+
cookies: CookiesConfigObject;
|
|
17
|
+
};
|
|
18
|
+
export type AuthConfig = Partial<AuthConfigWithDefaults>;
|
|
19
|
+
export type DefinedAuthConfig = AuthConfigWithDefaults;
|
|
20
|
+
/**
|
|
21
|
+
* Default configuration values that will be used if not overridden
|
|
22
|
+
*/
|
|
23
|
+
export declare const defaultAuthConfig: Omit<AuthConfigWithDefaults, "clientId">;
|
|
24
|
+
/**
|
|
25
|
+
* Resolves the authentication configuration by combining:
|
|
26
|
+
* 1. Default values
|
|
27
|
+
* 2. Environment variables (set internally by the plugin)
|
|
28
|
+
* 3. Explicitly passed configuration
|
|
29
|
+
*
|
|
30
|
+
* Note: Developers should not set _civic_auth_* environment variables directly.
|
|
31
|
+
* Instead, pass configuration to the createCivicAuthPlugin in next.config.js:
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```js
|
|
35
|
+
* // next.config.js
|
|
36
|
+
* export default createCivicAuthPlugin({
|
|
37
|
+
* callbackUrl: '/custom/callback',
|
|
38
|
+
* })
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export declare const resolveAuthConfig: (config?: AuthConfig) => AuthConfigWithDefaults;
|
|
42
|
+
/**
|
|
43
|
+
* Creates a Next.js plugin that handles auth configuration.
|
|
44
|
+
*
|
|
45
|
+
* This is the main configuration point for the auth system.
|
|
46
|
+
* Do not set _civic_auth_* environment variables directly - instead,
|
|
47
|
+
* pass your configuration here:
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```js
|
|
51
|
+
* // next.config.js
|
|
52
|
+
* export default createCivicAuthPlugin({
|
|
53
|
+
* clientId: 'my-client-id',
|
|
54
|
+
* callbackUrl: '/custom/callback',
|
|
55
|
+
* loginUrl: '/custom/login',
|
|
56
|
+
* logoutUrl: '/custom/logout',
|
|
57
|
+
* include: ['/protected/*'],
|
|
58
|
+
* exclude: ['/public/*']
|
|
59
|
+
* })
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* The plugin sets internal environment variables that are used by
|
|
63
|
+
* the auth system. These variables should not be set manually.
|
|
64
|
+
*/
|
|
65
|
+
export declare const createCivicAuthPlugin: (authConfig: AuthConfig & Pick<Required<AuthConfig>, "clientId">) => (nextConfig?: NextConfig) => {
|
|
66
|
+
env: {
|
|
67
|
+
_civic_auth_client_id: string;
|
|
68
|
+
_civic_oauth_server: string;
|
|
69
|
+
_civic_auth_callback_url: string;
|
|
70
|
+
_civic_auth_challenge_url: string;
|
|
71
|
+
_civic_auth_login_url: string;
|
|
72
|
+
_civic_auth_logout_url: string;
|
|
73
|
+
_civic_auth_includes: string;
|
|
74
|
+
_civic_auth_excludes: string;
|
|
75
|
+
_civic_auth_cookie_config: string;
|
|
76
|
+
};
|
|
77
|
+
exportPathMap?: (defaultMap: import("next/dist/server/config-shared.js").ExportPathMap, ctx: {
|
|
78
|
+
dev: boolean;
|
|
79
|
+
dir: string;
|
|
80
|
+
outDir: string | null;
|
|
81
|
+
distDir: string;
|
|
82
|
+
buildId: string;
|
|
83
|
+
}) => Promise<import("next/dist/server/config-shared.js").ExportPathMap> | import("next/dist/server/config-shared.js").ExportPathMap;
|
|
84
|
+
i18n?: import("next/dist/server/config-shared.js").I18NConfig | null;
|
|
85
|
+
eslint?: import("next/dist/server/config-shared.js").ESLintConfig;
|
|
86
|
+
typescript?: import("next/dist/server/config-shared.js").TypeScriptConfig;
|
|
87
|
+
headers?: () => Promise<import("next/dist/lib/load-custom-routes.js").Header[]>;
|
|
88
|
+
rewrites?: () => Promise<import("next/dist/lib/load-custom-routes.js").Rewrite[] | {
|
|
89
|
+
beforeFiles: import("next/dist/lib/load-custom-routes.js").Rewrite[];
|
|
90
|
+
afterFiles: import("next/dist/lib/load-custom-routes.js").Rewrite[];
|
|
91
|
+
fallback: import("next/dist/lib/load-custom-routes.js").Rewrite[];
|
|
92
|
+
}>;
|
|
93
|
+
redirects?: () => Promise<import("next/dist/lib/load-custom-routes.js").Redirect[]>;
|
|
94
|
+
excludeDefaultMomentLocales?: boolean;
|
|
95
|
+
webpack?: import("next/dist/server/config-shared.js").NextJsWebpackConfig | null;
|
|
96
|
+
trailingSlash?: boolean;
|
|
97
|
+
distDir?: string;
|
|
98
|
+
cleanDistDir?: boolean;
|
|
99
|
+
assetPrefix?: string;
|
|
100
|
+
cacheHandler?: string | undefined;
|
|
101
|
+
cacheMaxMemorySize?: number;
|
|
102
|
+
useFileSystemPublicRoutes?: boolean;
|
|
103
|
+
generateBuildId?: () => string | null | Promise<string | null>;
|
|
104
|
+
generateEtags?: boolean;
|
|
105
|
+
pageExtensions?: string[];
|
|
106
|
+
compress?: boolean;
|
|
107
|
+
analyticsId?: string;
|
|
108
|
+
poweredByHeader?: boolean;
|
|
109
|
+
images?: import("next/dist/shared/lib/image-config.js").ImageConfig;
|
|
110
|
+
devIndicators?: {
|
|
111
|
+
buildActivity?: boolean;
|
|
112
|
+
buildActivityPosition?: "bottom-right" | "bottom-left" | "top-right" | "top-left";
|
|
113
|
+
};
|
|
114
|
+
onDemandEntries?: {
|
|
115
|
+
maxInactiveAge?: number;
|
|
116
|
+
pagesBufferLength?: number;
|
|
117
|
+
};
|
|
118
|
+
amp?: {
|
|
119
|
+
canonicalBase?: string;
|
|
120
|
+
};
|
|
121
|
+
deploymentId?: string;
|
|
122
|
+
basePath?: string;
|
|
123
|
+
sassOptions?: {
|
|
124
|
+
[key: string]: any;
|
|
125
|
+
};
|
|
126
|
+
productionBrowserSourceMaps?: boolean;
|
|
127
|
+
optimizeFonts?: boolean;
|
|
128
|
+
reactProductionProfiling?: boolean;
|
|
129
|
+
reactStrictMode?: boolean | null;
|
|
130
|
+
publicRuntimeConfig?: {
|
|
131
|
+
[key: string]: any;
|
|
132
|
+
};
|
|
133
|
+
serverRuntimeConfig?: {
|
|
134
|
+
[key: string]: any;
|
|
135
|
+
};
|
|
136
|
+
httpAgentOptions?: {
|
|
137
|
+
keepAlive?: boolean;
|
|
138
|
+
};
|
|
139
|
+
outputFileTracing?: boolean;
|
|
140
|
+
staticPageGenerationTimeout?: number;
|
|
141
|
+
crossOrigin?: "anonymous" | "use-credentials";
|
|
142
|
+
swcMinify?: boolean;
|
|
143
|
+
compiler?: {
|
|
144
|
+
reactRemoveProperties?: boolean | {
|
|
145
|
+
properties?: string[];
|
|
146
|
+
};
|
|
147
|
+
relay?: {
|
|
148
|
+
src: string;
|
|
149
|
+
artifactDirectory?: string;
|
|
150
|
+
language?: "typescript" | "javascript" | "flow";
|
|
151
|
+
eagerEsModules?: boolean;
|
|
152
|
+
};
|
|
153
|
+
removeConsole?: boolean | {
|
|
154
|
+
exclude?: string[];
|
|
155
|
+
};
|
|
156
|
+
styledComponents?: boolean | import("next/dist/server/config-shared.js").StyledComponentsConfig;
|
|
157
|
+
emotion?: boolean | import("next/dist/server/config-shared.js").EmotionConfig;
|
|
158
|
+
styledJsx?: boolean | {
|
|
159
|
+
useLightningcss?: boolean;
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
output?: "standalone" | "export";
|
|
163
|
+
transpilePackages?: string[];
|
|
164
|
+
skipMiddlewareUrlNormalize?: boolean;
|
|
165
|
+
skipTrailingSlashRedirect?: boolean;
|
|
166
|
+
modularizeImports?: Record<string, {
|
|
167
|
+
transform: string | Record<string, string>;
|
|
168
|
+
preventFullImport?: boolean;
|
|
169
|
+
skipDefaultConversion?: boolean;
|
|
170
|
+
}>;
|
|
171
|
+
logging?: {
|
|
172
|
+
fetches?: {
|
|
173
|
+
fullUrl?: boolean;
|
|
174
|
+
};
|
|
175
|
+
};
|
|
176
|
+
experimental?: import("next/dist/server/config-shared.js").ExperimentalConfig;
|
|
177
|
+
};
|
|
178
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { SessionData, UnknownObject, User } from "@/types.js";
|
|
2
|
+
import type { AuthConfig } from "@/nextjs/config.js";
|
|
3
|
+
import type { CodeVerifier, OAuthTokens, TokensCookieConfig } from "@/shared/lib/types.js";
|
|
4
|
+
import { CookieStorage, type CookieStorageSettings } from "@/shared/lib/storage.js";
|
|
5
|
+
/**
|
|
6
|
+
* Creates HTTP-only cookies for authentication tokens
|
|
7
|
+
*/
|
|
8
|
+
declare const createTokenCookies: (response: Response, sessionData: SessionData, config: AuthConfig) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Creates a client-readable cookie with user info
|
|
11
|
+
*/
|
|
12
|
+
declare const createUserInfoCookie: (response: Response, user: User<UnknownObject> | null, sessionData: SessionData, config: AuthConfig) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Clears all authentication cookies
|
|
15
|
+
*/
|
|
16
|
+
declare const clearAuthCookies: (config: AuthConfig) => Promise<void>;
|
|
17
|
+
type KeySetter = OAuthTokens | CodeVerifier;
|
|
18
|
+
declare class NextjsCookieStorage extends CookieStorage {
|
|
19
|
+
readonly config: Partial<TokensCookieConfig>;
|
|
20
|
+
constructor(config?: Partial<TokensCookieConfig>);
|
|
21
|
+
get(key: string): Promise<string | null>;
|
|
22
|
+
set(key: KeySetter, value: string): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
declare class NextjsClientStorage extends CookieStorage {
|
|
25
|
+
constructor(config?: Partial<CookieStorageSettings>);
|
|
26
|
+
get(key: string): Promise<string | null>;
|
|
27
|
+
set(key: string, value: string): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
export { createTokenCookies, createUserInfoCookie, clearAuthCookies, NextjsCookieStorage, NextjsClientStorage, };
|
|
30
|
+
//# sourceMappingURL=cookies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/nextjs/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/nextjs/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC","sourcesContent":["export { useTokenCookie } from \"@/nextjs/hooks/useTokenCookie.js\";\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTokenCookie.d.ts","sourceRoot":"","sources":["../../../../src/nextjs/hooks/useTokenCookie.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUzD,eAAO,MAAM,cAAc,cAAe,WAAW,KAAG,MAAM,GAAG,IAyBhE,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
3
|
+
import { useRouter } from "next/navigation.js";
|
|
4
|
+
import { useQuery } from "@tanstack/react-query";
|
|
5
|
+
import { getWindowCookieValue } from "@/lib/cookies.js";
|
|
6
|
+
const getTokenFromCookie = (tokenName) => {
|
|
7
|
+
return getWindowCookieValue({
|
|
8
|
+
key: tokenName,
|
|
9
|
+
window: globalThis.window,
|
|
10
|
+
parseJson: false,
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
export const useTokenCookie = (tokenName) => {
|
|
14
|
+
const hasRunRef = useRef(false);
|
|
15
|
+
const router = useRouter();
|
|
16
|
+
const { data: token } = useQuery({
|
|
17
|
+
queryKey: ["token", tokenName],
|
|
18
|
+
queryFn: () => getTokenFromCookie(tokenName) || null,
|
|
19
|
+
refetchInterval: 2000,
|
|
20
|
+
refetchIntervalInBackground: true,
|
|
21
|
+
enabled: !hasRunRef.current,
|
|
22
|
+
refetchOnWindowFocus: true,
|
|
23
|
+
});
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (token) {
|
|
26
|
+
if (!hasRunRef.current) {
|
|
27
|
+
hasRunRef.current = true;
|
|
28
|
+
router.refresh();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
hasRunRef.current = false;
|
|
33
|
+
}
|
|
34
|
+
}, [token, router]);
|
|
35
|
+
return token ?? null;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=useTokenCookie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTokenCookie.js","sourceRoot":"","sources":["../../../../src/nextjs/hooks/useTokenCookie.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,MAAM,kBAAkB,GAAG,CAAC,SAAsB,EAAU,EAAE;IAC5D,OAAO,oBAAoB,CAAC;QAC1B,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAsB,EAAiB,EAAE;IACtE,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QAC/B,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;QAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,IAAI,IAAI;QACpD,eAAe,EAAE,IAAI;QACrB,2BAA2B,EAAE,IAAI;QACjC,OAAO,EAAE,CAAC,SAAS,CAAC,OAAO;QAC3B,oBAAoB,EAAE,IAAI;KAC3B,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACvB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;gBACzB,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IAEpB,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC,CAAC","sourcesContent":["\"use client\";\nimport { useEffect, useRef } from \"react\";\nimport { useRouter } from \"next/navigation.js\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { getWindowCookieValue } from \"@/lib/cookies.js\";\nimport type { OAuthTokens } from \"@/shared/lib/types.js\";\n\nconst getTokenFromCookie = (tokenName: OAuthTokens): string => {\n return getWindowCookieValue({\n key: tokenName,\n window: globalThis.window,\n parseJson: false,\n });\n};\n\nexport const useTokenCookie = (tokenName: OAuthTokens): string | null => {\n const hasRunRef = useRef(false);\n const router = useRouter();\n\n const { data: token } = useQuery({\n queryKey: [\"token\", tokenName],\n queryFn: () => getTokenFromCookie(tokenName) || null,\n refetchInterval: 2000,\n refetchIntervalInBackground: true,\n enabled: !hasRunRef.current,\n refetchOnWindowFocus: true,\n });\n\n useEffect(() => {\n if (token) {\n if (!hasRunRef.current) {\n hasRunRef.current = true;\n router.refresh();\n }\n } else {\n hasRunRef.current = false;\n }\n }, [token, router]);\n\n return token ?? null;\n};\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUserCookie.d.ts","sourceRoot":"","sources":["../../../../src/nextjs/hooks/useUserCookie.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAUpD,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,WAAW,qBAyBlD,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect, useRef } from "react";
|
|
3
|
+
import { useRouter } from "next/navigation.js";
|
|
4
|
+
import { useQuery } from "@tanstack/react-query";
|
|
5
|
+
import { getWindowCookieValue } from "@/lib/cookies.js";
|
|
6
|
+
import { UserStorage } from "@/shared/lib/types.js";
|
|
7
|
+
const getUserFromCookie = () => getWindowCookieValue({
|
|
8
|
+
key: UserStorage.USER,
|
|
9
|
+
window: globalThis.window,
|
|
10
|
+
parseJson: true,
|
|
11
|
+
});
|
|
12
|
+
export const useUserCookie = () => {
|
|
13
|
+
const hasRunRef = useRef(false);
|
|
14
|
+
const router = useRouter();
|
|
15
|
+
const { data: user } = useQuery({
|
|
16
|
+
queryKey: ["user"],
|
|
17
|
+
queryFn: () => getUserFromCookie(),
|
|
18
|
+
refetchInterval: 2000,
|
|
19
|
+
refetchIntervalInBackground: true,
|
|
20
|
+
enabled: !hasRunRef.current,
|
|
21
|
+
refetchOnWindowFocus: true,
|
|
22
|
+
});
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (user) {
|
|
25
|
+
if (!hasRunRef.current) {
|
|
26
|
+
hasRunRef.current = true;
|
|
27
|
+
router.refresh();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
hasRunRef.current = false;
|
|
32
|
+
}
|
|
33
|
+
}, [user, router]);
|
|
34
|
+
return user ?? null;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=useUserCookie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUserCookie.js","sourceRoot":"","sources":["../../../../src/nextjs/hooks/useUserCookie.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAC7B,oBAAoB,CAAC;IACnB,GAAG,EAAE,WAAW,CAAC,IAAI;IACrB,MAAM,EAAE,UAAU,CAAC,MAAM;IACzB,SAAS,EAAE,IAAI;CAChB,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,aAAa,GAAG,GAA0B,EAAE;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QAC9B,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAoB;QACpD,eAAe,EAAE,IAAI;QACrB,2BAA2B,EAAE,IAAI;QACjC,OAAO,EAAE,CAAC,SAAS,CAAC,OAAO;QAC3B,oBAAoB,EAAE,IAAI;KAC3B,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACvB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;gBACzB,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAEnB,OAAO,IAAI,IAAI,IAAI,CAAC;AACtB,CAAC,CAAC","sourcesContent":["\"use client\";\nimport { useEffect, useRef } from \"react\";\nimport { useRouter } from \"next/navigation.js\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { getWindowCookieValue } from \"@/lib/cookies.js\";\nimport type { EmptyObject, User } from \"@/types.js\";\nimport { UserStorage } from \"@/shared/lib/types.js\";\n\nconst getUserFromCookie = () =>\n getWindowCookieValue({\n key: UserStorage.USER,\n window: globalThis.window,\n parseJson: true,\n });\n\nexport const useUserCookie = <T extends EmptyObject>() => {\n const hasRunRef = useRef(false);\n const router = useRouter();\n\n const { data: user } = useQuery({\n queryKey: [\"user\"],\n queryFn: () => getUserFromCookie() as User<T> | null,\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 ?? null;\n};\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { createCivicAuthPlugin } from "@/nextjs/config.js";
|
|
2
|
+
export { getUser } from "@/nextjs/GetUser.js";
|
|
3
|
+
export { handler } from "@/nextjs/routeHandler.js";
|
|
4
|
+
export { createTokenCookies, createUserInfoCookie, clearAuthCookies, NextjsCookieStorage, NextjsClientStorage, } from "@/nextjs/cookies.js";
|
|
5
|
+
export type { AuthConfig, CookiesConfigObject, AuthConfigWithDefaults, DefinedAuthConfig, } from "@/nextjs/config.js";
|
|
6
|
+
export { CivicNextAuthProvider as CivicAuthProvider, type NextCivicAuthProviderProps as AuthProviderProps, } from "@/nextjs/providers/NextAuthProvider.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createCivicAuthPlugin } from "@/nextjs/config.js";
|
|
2
|
+
export { getUser } from "@/nextjs/GetUser.js";
|
|
3
|
+
export { handler } from "@/nextjs/routeHandler.js";
|
|
4
|
+
export { createTokenCookies, createUserInfoCookie, clearAuthCookies, NextjsCookieStorage, NextjsClientStorage, } from "@/nextjs/cookies.js";
|
|
5
|
+
export { CivicNextAuthProvider as CivicAuthProvider, } from "@/nextjs/providers/NextAuthProvider.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nextjs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,EACL,qBAAqB,IAAI,iBAAiB,GAE3C,MAAM,wCAAwC,CAAC","sourcesContent":["export { createCivicAuthPlugin } from \"@/nextjs/config.js\";\nexport { getUser } from \"@/nextjs/GetUser.js\";\nexport { handler } from \"@/nextjs/routeHandler.js\";\nexport {\n createTokenCookies,\n createUserInfoCookie,\n clearAuthCookies,\n NextjsCookieStorage,\n NextjsClientStorage,\n} from \"@/nextjs/cookies.js\";\nexport type {\n AuthConfig,\n CookiesConfigObject,\n AuthConfigWithDefaults,\n DefinedAuthConfig,\n} from \"@/nextjs/config.js\";\nexport {\n CivicNextAuthProvider as CivicAuthProvider,\n type NextCivicAuthProviderProps as AuthProviderProps,\n} from \"@/nextjs/providers/NextAuthProvider.js\";\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/nextjs/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/nextjs/middleware/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC","sourcesContent":["export { authMiddleware, auth, withAuth } from \"@/nextjs/middleware.js\";\n"]}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authenticates the user on all requests by checking the token cookie
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* Option 1: use if no other middleware (e.g. no next-intl etc)
|
|
6
|
+
* export default authMiddleware();
|
|
7
|
+
*
|
|
8
|
+
* Option 2: use if other middleware is needed - default auth config
|
|
9
|
+
* export default withAuth((request) => {
|
|
10
|
+
* console.log('in custom middleware', request.nextUrl.pathname);
|
|
11
|
+
* return NextResponse.next();
|
|
12
|
+
* })
|
|
13
|
+
*
|
|
14
|
+
* Option 3: use if other middleware is needed - specifying auth config
|
|
15
|
+
* const withCivicAuth = auth({ loginUrl: '/login', include: ['/[.*]/user'] })
|
|
16
|
+
* export default withCivicAuth((request) => {
|
|
17
|
+
* console.log('in custom middleware', request.url);
|
|
18
|
+
* return NextResponse.next();
|
|
19
|
+
* })
|
|
20
|
+
*
|
|
21
|
+
*/
|
|
22
|
+
import type { NextRequest } from "next/server.js";
|
|
23
|
+
import { NextResponse } from "next/server.js";
|
|
24
|
+
import type { AuthConfig } from "@/nextjs/config.js";
|
|
25
|
+
type Middleware = (request: NextRequest) => Promise<NextResponse> | NextResponse;
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
* Use this when auth is the only middleware you need.
|
|
29
|
+
* Usage:
|
|
30
|
+
*
|
|
31
|
+
* export default authMiddleware({ loginUrl = '/login' }); // or just authMiddleware();
|
|
32
|
+
*
|
|
33
|
+
*/
|
|
34
|
+
export declare const authMiddleware: (authConfig?: Partial<AuthConfig>) => (request: NextRequest) => Promise<NextResponse>;
|
|
35
|
+
/**
|
|
36
|
+
* Usage:
|
|
37
|
+
*
|
|
38
|
+
* export default withAuth(async (request) => {
|
|
39
|
+
* console.log('my middleware');
|
|
40
|
+
* return NextResponse.next();
|
|
41
|
+
* })
|
|
42
|
+
*/
|
|
43
|
+
export declare function withAuth(middleware: Middleware): (request: NextRequest) => Promise<NextResponse>;
|
|
44
|
+
/**
|
|
45
|
+
* Use this when you want to configure the middleware here (an alternative is to do it in the next.config file)
|
|
46
|
+
*
|
|
47
|
+
* Usage:
|
|
48
|
+
*
|
|
49
|
+
* const withAuth = auth({ loginUrl = '/login' }); // or just auth();
|
|
50
|
+
*
|
|
51
|
+
* export default withAuth(async (request) => {
|
|
52
|
+
* console.log('my middleware');
|
|
53
|
+
* return NextResponse.next();
|
|
54
|
+
* })
|
|
55
|
+
*
|
|
56
|
+
*/
|
|
57
|
+
export declare function auth(authConfig?: AuthConfig): (middleware: Middleware) => ((request: NextRequest) => Promise<NextResponse>);
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/nextjs/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,KAAK,UAAU,GAAG,CAChB,OAAO,EAAE,WAAW,KACjB,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;AAmE1C;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,gBACZ,OAAO,CAAC,UAAU,CAAC,eAChB,WAAW,KAAG,OAAO,CAAC,YAAY,CAOjD,CAAC;AAEJ;;;;;;;GAOG;AAEH,wBAAgB,QAAQ,CACtB,UAAU,EAAE,UAAU,GACrB,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAEjD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,IAAI,CAAC,UAAU,GAAE,UAAe,gBAEhC,UAAU,KACrB,CAAC,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAQrD"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { NextResponse } from "next/server.js";
|
|
2
|
+
import picomatch from "picomatch";
|
|
3
|
+
import { resolveAuthConfig } from "@/nextjs/config.js";
|
|
4
|
+
// Matches globs:
|
|
5
|
+
// Examples:
|
|
6
|
+
// /user
|
|
7
|
+
// /user/*
|
|
8
|
+
// /user/**/info
|
|
9
|
+
const matchGlob = (pathname, globPattern) => {
|
|
10
|
+
const matches = picomatch(globPattern);
|
|
11
|
+
return matches(pathname);
|
|
12
|
+
};
|
|
13
|
+
// Matches globs:
|
|
14
|
+
// Examples:
|
|
15
|
+
// /user
|
|
16
|
+
// /user/*
|
|
17
|
+
// /user/**/info
|
|
18
|
+
const matchesGlobs = (pathname, patterns) => patterns.some((pattern) => {
|
|
19
|
+
if (!pattern)
|
|
20
|
+
return false;
|
|
21
|
+
console.log("matching", {
|
|
22
|
+
pattern,
|
|
23
|
+
pathname,
|
|
24
|
+
match: matchGlob(pathname, pattern),
|
|
25
|
+
});
|
|
26
|
+
return matchGlob(pathname, pattern);
|
|
27
|
+
});
|
|
28
|
+
// internal - used by all exported functions
|
|
29
|
+
const applyAuth = async (authConfig, request) => {
|
|
30
|
+
const authConfigWithDefaults = resolveAuthConfig(authConfig);
|
|
31
|
+
// Check for any valid auth token
|
|
32
|
+
const isAuthenticated = !!request.cookies.get("id_token");
|
|
33
|
+
// skip auth check for redirect to login url
|
|
34
|
+
if (request.nextUrl.pathname === authConfigWithDefaults.loginUrl &&
|
|
35
|
+
request.method === "GET") {
|
|
36
|
+
console.log("→ Skipping auth check - this is the login URL");
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
if (!matchesGlobs(request.nextUrl.pathname, authConfigWithDefaults.include)) {
|
|
40
|
+
console.log("→ Skipping auth check - path not in include patterns");
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
if (matchesGlobs(request.nextUrl.pathname, authConfigWithDefaults.exclude)) {
|
|
44
|
+
console.log("→ Skipping auth check - path in exclude patterns");
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
// Check for either token type
|
|
48
|
+
if (!isAuthenticated) {
|
|
49
|
+
const loginUrl = new URL(authConfigWithDefaults.loginUrl, request.url);
|
|
50
|
+
console.log("→ No valid token found - redirecting to login", loginUrl);
|
|
51
|
+
return NextResponse.redirect(loginUrl);
|
|
52
|
+
}
|
|
53
|
+
console.log("→ Auth check passed");
|
|
54
|
+
return undefined;
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
*
|
|
58
|
+
* Use this when auth is the only middleware you need.
|
|
59
|
+
* Usage:
|
|
60
|
+
*
|
|
61
|
+
* export default authMiddleware({ loginUrl = '/login' }); // or just authMiddleware();
|
|
62
|
+
*
|
|
63
|
+
*/
|
|
64
|
+
export const authMiddleware = (authConfig = {}) => async (request) => {
|
|
65
|
+
const response = await applyAuth(authConfig, request);
|
|
66
|
+
if (response)
|
|
67
|
+
return response;
|
|
68
|
+
// NextJS doesn't do middleware chaining yet, so this does not mean
|
|
69
|
+
// "call the next middleware" - it means "continue to the route handler"
|
|
70
|
+
return NextResponse.next();
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Usage:
|
|
74
|
+
*
|
|
75
|
+
* export default withAuth(async (request) => {
|
|
76
|
+
* console.log('my middleware');
|
|
77
|
+
* return NextResponse.next();
|
|
78
|
+
* })
|
|
79
|
+
*/
|
|
80
|
+
// use this when you have your own middleware to chain
|
|
81
|
+
export function withAuth(middleware) {
|
|
82
|
+
return auth()(middleware);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Use this when you want to configure the middleware here (an alternative is to do it in the next.config file)
|
|
86
|
+
*
|
|
87
|
+
* Usage:
|
|
88
|
+
*
|
|
89
|
+
* const withAuth = auth({ loginUrl = '/login' }); // or just auth();
|
|
90
|
+
*
|
|
91
|
+
* export default withAuth(async (request) => {
|
|
92
|
+
* console.log('my middleware');
|
|
93
|
+
* return NextResponse.next();
|
|
94
|
+
* })
|
|
95
|
+
*
|
|
96
|
+
*/
|
|
97
|
+
export function auth(authConfig = {}) {
|
|
98
|
+
return (middleware) => {
|
|
99
|
+
return async (request) => {
|
|
100
|
+
const response = await applyAuth(authConfig, request);
|
|
101
|
+
if (response)
|
|
102
|
+
return response;
|
|
103
|
+
return middleware(request);
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../src/nextjs/middleware.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Authenticates the user on all requests by checking the token cookie\n *\n * Usage:\n * Option 1: use if no other middleware (e.g. no next-intl etc)\n * export default authMiddleware();\n *\n * Option 2: use if other middleware is needed - default auth config\n * export default withAuth((request) => {\n * console.log('in custom middleware', request.nextUrl.pathname);\n * return NextResponse.next();\n * })\n *\n * Option 3: use if other middleware is needed - specifying auth config\n * const withCivicAuth = auth({ loginUrl: '/login', include: ['/[.*]/user'] })\n * export default withCivicAuth((request) => {\n * console.log('in custom middleware', request.url);\n * return NextResponse.next();\n * })\n *\n */\nimport type { NextRequest } from \"next/server.js\";\nimport { NextResponse } from \"next/server.js\";\nimport picomatch from \"picomatch\";\nimport type { AuthConfig } from \"@/nextjs/config.js\";\nimport { resolveAuthConfig } from \"@/nextjs/config.js\";\n\ntype Middleware = (\n request: NextRequest,\n) => Promise<NextResponse> | NextResponse;\n\n// Matches globs:\n// Examples:\n// /user\n// /user/*\n// /user/**/info\nconst matchGlob = (pathname: string, globPattern: string) => {\n const matches = picomatch(globPattern);\n return matches(pathname);\n};\n\n// Matches globs:\n// Examples:\n// /user\n// /user/*\n// /user/**/info\nconst matchesGlobs = (pathname: string, patterns: string[]) =>\n patterns.some((pattern) => {\n if (!pattern) return false;\n console.log(\"matching\", {\n pattern,\n pathname,\n match: matchGlob(pathname, pattern),\n });\n return matchGlob(pathname, pattern);\n });\n\n// internal - used by all exported functions\nconst applyAuth = async (\n authConfig: AuthConfig,\n request: NextRequest,\n): Promise<NextResponse | undefined> => {\n const authConfigWithDefaults = resolveAuthConfig(authConfig);\n // Check for any valid auth token\n const isAuthenticated = !!request.cookies.get(\"id_token\");\n\n // skip auth check for redirect to login url\n if (\n request.nextUrl.pathname === authConfigWithDefaults.loginUrl &&\n request.method === \"GET\"\n ) {\n console.log(\"→ Skipping auth check - this is the login URL\");\n return undefined;\n }\n\n if (!matchesGlobs(request.nextUrl.pathname, authConfigWithDefaults.include)) {\n console.log(\"→ Skipping auth check - path not in include patterns\");\n return undefined;\n }\n\n if (matchesGlobs(request.nextUrl.pathname, authConfigWithDefaults.exclude)) {\n console.log(\"→ Skipping auth check - path in exclude patterns\");\n return undefined;\n }\n\n // Check for either token type\n if (!isAuthenticated) {\n const loginUrl = new URL(authConfigWithDefaults.loginUrl, request.url);\n console.log(\"→ No valid token found - redirecting to login\", loginUrl);\n return NextResponse.redirect(loginUrl);\n }\n\n console.log(\"→ Auth check passed\");\n return undefined;\n};\n\n/**\n *\n * Use this when auth is the only middleware you need.\n * Usage:\n *\n * export default authMiddleware({ loginUrl = '/login' }); // or just authMiddleware();\n *\n */\nexport const authMiddleware =\n (authConfig: Partial<AuthConfig> = {}) =>\n async (request: NextRequest): Promise<NextResponse> => {\n const response = await applyAuth(authConfig, request);\n if (response) return response;\n\n // NextJS doesn't do middleware chaining yet, so this does not mean\n // \"call the next middleware\" - it means \"continue to the route handler\"\n return NextResponse.next();\n };\n\n/**\n * Usage:\n *\n * export default withAuth(async (request) => {\n * console.log('my middleware');\n * return NextResponse.next();\n * })\n */\n// use this when you have your own middleware to chain\nexport function withAuth(\n middleware: Middleware,\n): (request: NextRequest) => Promise<NextResponse> {\n return auth()(middleware);\n}\n\n/**\n * Use this when you want to configure the middleware here (an alternative is to do it in the next.config file)\n *\n * Usage:\n *\n * const withAuth = auth({ loginUrl = '/login' }); // or just auth();\n *\n * export default withAuth(async (request) => {\n * console.log('my middleware');\n * return NextResponse.next();\n * })\n *\n */\nexport function auth(authConfig: AuthConfig = {}) {\n return (\n middleware: Middleware,\n ): ((request: NextRequest) => Promise<NextResponse>) => {\n return async (request: NextRequest): Promise<NextResponse> => {\n const response = await applyAuth(authConfig, request);\n if (response) return response;\n\n return middleware(request);\n };\n };\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A very small context provider for the user object - it takes the user object from the cookie and provides it to the app.
|
|
3
|
+
*/
|
|
4
|
+
import React from "react";
|
|
5
|
+
import type { AuthProviderProps } from "@/shared/providers/AuthProvider.js";
|
|
6
|
+
type NextCivicAuthProviderProps = Omit<AuthProviderProps, "clientId">;
|
|
7
|
+
declare const CivicNextAuthProvider: ({ children, ...props }: NextCivicAuthProviderProps) => React.JSX.Element;
|
|
8
|
+
export { CivicNextAuthProvider, type NextCivicAuthProviderProps };
|
|
9
|
+
//# sourceMappingURL=NextAuthProvider.d.ts.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
/**
|
|
3
|
+
* A very small context provider for the user object - it takes the user object from the cookie and provides it to the app.
|
|
4
|
+
*/
|
|
5
|
+
import React, { useEffect, useState } from "react";
|
|
6
|
+
import { AuthProvider } from "@/shared/providers/AuthProvider.js";
|
|
7
|
+
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
8
|
+
import { resolveAuthConfig } from "@/nextjs/config.js";
|
|
9
|
+
import { resolveCallbackUrl } from "@/nextjs/utils.js";
|
|
10
|
+
import { ConfidentialClientPKCEConsumer } from "@/services/PKCE.js";
|
|
11
|
+
import { NextjsClientStorage } from "@/nextjs/cookies.js";
|
|
12
|
+
import { UserProvider } from "@/shared/providers/UserProvider.js";
|
|
13
|
+
import { OAuthTokens } from "@/shared/lib/types.js";
|
|
14
|
+
import { useUserCookie } from "@/nextjs/hooks/useUserCookie.js";
|
|
15
|
+
import { useTokenCookie } from "@/nextjs/hooks/index.js";
|
|
16
|
+
const queryClient = new QueryClient();
|
|
17
|
+
const CivicNextAuthProviderInternal = ({ children, ...props }) => {
|
|
18
|
+
const [redirectUrl, setRedirectUrl] = useState("");
|
|
19
|
+
const resolvedConfig = resolveAuthConfig();
|
|
20
|
+
const { clientId, oauthServer, callbackUrl, challengeUrl, logoutUrl } = resolvedConfig;
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (typeof globalThis.window !== "undefined") {
|
|
23
|
+
const appUrl = globalThis.window.location.origin;
|
|
24
|
+
setRedirectUrl(resolveCallbackUrl(resolvedConfig, appUrl));
|
|
25
|
+
}
|
|
26
|
+
}, [callbackUrl, resolvedConfig]);
|
|
27
|
+
const user = useUserCookie();
|
|
28
|
+
const idToken = useTokenCookie(OAuthTokens.ID_TOKEN);
|
|
29
|
+
const combinedUser = user ? { ...(user || {}), idToken } : null;
|
|
30
|
+
const sessionData = {
|
|
31
|
+
authenticated: !!user,
|
|
32
|
+
...(idToken ? { idToken } : {}),
|
|
33
|
+
};
|
|
34
|
+
const signOut = async () => {
|
|
35
|
+
if (props.onSignOut) {
|
|
36
|
+
await props.onSignOut();
|
|
37
|
+
}
|
|
38
|
+
const appUrl = globalThis.window.location.origin;
|
|
39
|
+
window.location.href = `${logoutUrl}?appUrl=${appUrl}`;
|
|
40
|
+
return;
|
|
41
|
+
};
|
|
42
|
+
return (React.createElement(AuthProvider, { ...props, redirectUrl: redirectUrl, config: { oauthServer }, clientId: clientId, pkceConsumer: new ConfidentialClientPKCEConsumer(challengeUrl), sessionData: sessionData },
|
|
43
|
+
React.createElement(UserProvider, { storage: new NextjsClientStorage(), user: combinedUser, signOut: signOut }, children)));
|
|
44
|
+
};
|
|
45
|
+
const CivicNextAuthProvider = ({ children, ...props }) => {
|
|
46
|
+
return (React.createElement(QueryClientProvider, { client: queryClient },
|
|
47
|
+
React.createElement(CivicNextAuthProviderInternal, { ...props }, children)));
|
|
48
|
+
};
|
|
49
|
+
export { CivicNextAuthProvider };
|
|
50
|
+
//# sourceMappingURL=NextAuthProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NextAuthProvider.js","sourceRoot":"","sources":["../../../../src/nextjs/providers/NextAuthProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["\"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 React, { useEffect, useState } from \"react\";\nimport type { AuthProviderProps } from \"@/shared/providers/AuthProvider.js\";\nimport { AuthProvider } from \"@/shared/providers/AuthProvider.js\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport type { User } from \"@/types.js\";\nimport { resolveAuthConfig } from \"@/nextjs/config.js\";\nimport { resolveCallbackUrl } from \"@/nextjs/utils.js\";\nimport { ConfidentialClientPKCEConsumer } from \"@/services/PKCE.js\";\nimport { NextjsClientStorage } from \"@/nextjs/cookies.js\";\nimport { UserProvider } from \"@/shared/providers/UserProvider.js\";\nimport { OAuthTokens } from \"@/shared/lib/types.js\";\nimport { useUserCookie } from \"@/nextjs/hooks/useUserCookie.js\";\nimport { useTokenCookie } from \"@/nextjs/hooks/index.js\";\n\nconst queryClient = new QueryClient();\n\ntype NextCivicAuthProviderProps = Omit<AuthProviderProps, \"clientId\">;\n\nconst CivicNextAuthProviderInternal = ({\n children,\n ...props\n}: NextCivicAuthProviderProps) => {\n const [redirectUrl, setRedirectUrl] = useState<string>(\"\");\n const resolvedConfig = resolveAuthConfig();\n const { clientId, oauthServer, callbackUrl, challengeUrl, logoutUrl } =\n resolvedConfig;\n\n useEffect(() => {\n if (typeof globalThis.window !== \"undefined\") {\n const appUrl = globalThis.window.location.origin;\n setRedirectUrl(resolveCallbackUrl(resolvedConfig, appUrl));\n }\n }, [callbackUrl, resolvedConfig]);\n\n const user = useUserCookie();\n const idToken = useTokenCookie(OAuthTokens.ID_TOKEN);\n const combinedUser = user ? ({ ...(user || {}), idToken } as User) : null;\n const sessionData = {\n authenticated: !!user,\n ...(idToken ? { idToken } : {}),\n };\n const signOut = async (): Promise<void> => {\n if (props.onSignOut) {\n await props.onSignOut();\n }\n const appUrl = globalThis.window.location.origin;\n window.location.href = `${logoutUrl}?appUrl=${appUrl}`;\n return;\n };\n return (\n <AuthProvider\n {...props}\n redirectUrl={redirectUrl}\n config={{ oauthServer }}\n clientId={clientId}\n pkceConsumer={new ConfidentialClientPKCEConsumer(challengeUrl)}\n sessionData={sessionData}\n >\n <UserProvider\n storage={new NextjsClientStorage()}\n user={combinedUser}\n signOut={signOut}\n >\n {children}\n </UserProvider>\n </AuthProvider>\n );\n};\n\nconst CivicNextAuthProvider = ({\n children,\n ...props\n}: NextCivicAuthProviderProps) => {\n return (\n <QueryClientProvider client={queryClient}>\n <CivicNextAuthProviderInternal {...props}>\n {children}\n </CivicNextAuthProviderInternal>\n </QueryClientProvider>\n );\n};\n\nexport { CivicNextAuthProvider, type NextCivicAuthProviderProps };\n"]}
|