@civic/auth 0.0.1-beta.30 → 0.0.1-beta.31
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/.turbo/turbo-lint$colon$fix.log +16 -0
- package/.turbo/turbo-test.log +552 -1077
- package/dist/{src/shared/providers → cjs/src/shared}/AuthProvider.d.ts +7 -9
- package/dist/cjs/src/shared/AuthProvider.d.ts.map +1 -0
- package/dist/{src/shared/providers → cjs/src/shared}/AuthProvider.js +70 -87
- package/dist/cjs/src/shared/AuthProvider.js.map +1 -0
- package/dist/{src/shared/providers → cjs/src/shared}/CivicAuthProvider.d.ts +3 -3
- package/dist/cjs/src/shared/CivicAuthProvider.d.ts.map +1 -0
- package/dist/cjs/src/shared/CivicAuthProvider.js +19 -0
- package/dist/cjs/src/shared/CivicAuthProvider.js.map +1 -0
- package/dist/{src/shared/lib → cjs/src/shared}/GenericAuthenticationRefresher.d.ts +4 -4
- package/dist/cjs/src/shared/GenericAuthenticationRefresher.d.ts.map +1 -0
- package/dist/{src/shared/lib → cjs/src/shared}/GenericAuthenticationRefresher.js +11 -7
- package/dist/cjs/src/shared/GenericAuthenticationRefresher.js.map +1 -0
- package/dist/{src/shared/providers → cjs/src/shared}/UserProvider.d.ts +6 -7
- package/dist/cjs/src/shared/UserProvider.d.ts.map +1 -0
- package/dist/cjs/src/shared/UserProvider.js +42 -0
- package/dist/cjs/src/shared/UserProvider.js.map +1 -0
- package/dist/cjs/src/shared/UserSession.d.ts +12 -0
- package/dist/cjs/src/shared/UserSession.d.ts.map +1 -0
- package/dist/cjs/src/shared/UserSession.js +24 -0
- package/dist/cjs/src/shared/UserSession.js.map +1 -0
- package/dist/cjs/src/shared/session.d.ts +3 -0
- package/dist/cjs/src/shared/session.d.ts.map +1 -0
- package/dist/cjs/src/shared/session.js +13 -0
- package/dist/cjs/src/shared/session.js.map +1 -0
- package/dist/{src/shared/lib → cjs/src/shared}/util.d.ts +10 -4
- package/dist/cjs/src/shared/util.d.ts.map +1 -0
- package/dist/cjs/src/shared/util.js +162 -0
- package/dist/cjs/src/shared/util.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/src/nextjs/cookies.d.ts.map +1 -1
- package/dist/src/nextjs/cookies.js +12 -8
- package/dist/src/nextjs/cookies.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/.turbo/turbo-lint.log +0 -14
- package/civic-auth-0.0.1-beta.15.tgz +0 -0
- package/civic-auth-0.0.1-beta.17.tgz +0 -0
- package/dist/AuthProvider-BYZ8w92b.d.mts +0 -15
- package/dist/AuthProvider-BgOwv9h8.d.ts +0 -15
- package/dist/AuthProvider-Bj_Prt1x.d.ts +0 -21
- package/dist/AuthProvider-DUAoX4G9.d.mts +0 -21
- package/dist/UserProvider-BA2uflVB.d.ts +0 -16
- package/dist/UserProvider-Bl3j1PUO.d.mts +0 -16
- package/dist/UserProvider-CMLaYOUD.d.ts +0 -16
- package/dist/UserProvider-Cbm8MZkJ.d.mts +0 -16
- package/dist/chunk-4PLCDPEN.mjs +0 -599
- package/dist/chunk-4PLCDPEN.mjs.map +0 -1
- package/dist/chunk-5UQQYXCX.js +0 -1
- package/dist/chunk-5UQQYXCX.js.map +0 -1
- package/dist/chunk-63YGK3A7.mjs +0 -223
- package/dist/chunk-63YGK3A7.mjs.map +0 -1
- package/dist/chunk-6RFRDWIP.js +0 -223
- package/dist/chunk-6RFRDWIP.js.map +0 -1
- package/dist/chunk-7K3QN2AT.js +0 -599
- package/dist/chunk-7K3QN2AT.js.map +0 -1
- package/dist/chunk-AM2Y662I.js +0 -601
- package/dist/chunk-AM2Y662I.js.map +0 -1
- package/dist/chunk-AP4627CS.mjs +0 -223
- package/dist/chunk-AP4627CS.mjs.map +0 -1
- package/dist/chunk-CRTRMMJ7.js +0 -59
- package/dist/chunk-CRTRMMJ7.js.map +0 -1
- package/dist/chunk-CTVJJBBA.js +0 -118
- package/dist/chunk-CTVJJBBA.js.map +0 -1
- package/dist/chunk-EKLYHP2D.mjs +0 -711
- package/dist/chunk-EKLYHP2D.mjs.map +0 -1
- package/dist/chunk-FHRZSX3C.js +0 -710
- package/dist/chunk-FHRZSX3C.js.map +0 -1
- package/dist/chunk-GB3H3I47.js +0 -711
- package/dist/chunk-GB3H3I47.js.map +0 -1
- package/dist/chunk-JDZPCA3P.js +0 -173
- package/dist/chunk-JDZPCA3P.js.map +0 -1
- package/dist/chunk-JEOPLLWO.js +0 -223
- package/dist/chunk-JEOPLLWO.js.map +0 -1
- package/dist/chunk-MK7557NR.mjs +0 -118
- package/dist/chunk-MK7557NR.mjs.map +0 -1
- package/dist/chunk-NLRREFOX.mjs +0 -710
- package/dist/chunk-NLRREFOX.mjs.map +0 -1
- package/dist/chunk-O3WGNLRO.mjs +0 -173
- package/dist/chunk-O3WGNLRO.mjs.map +0 -1
- package/dist/chunk-OXXUQ36U.mjs +0 -283
- package/dist/chunk-OXXUQ36U.mjs.map +0 -1
- package/dist/chunk-PMJAV4JJ.mjs +0 -1
- package/dist/chunk-PMJAV4JJ.mjs.map +0 -1
- package/dist/chunk-Q7DSPTUG.mjs +0 -601
- package/dist/chunk-Q7DSPTUG.mjs.map +0 -1
- package/dist/chunk-RGHW4PYM.mjs +0 -59
- package/dist/chunk-RGHW4PYM.mjs.map +0 -1
- package/dist/chunk-TH6FI2XI.js +0 -283
- package/dist/chunk-TH6FI2XI.js.map +0 -1
- package/dist/index.css +0 -340
- package/dist/index.css.map +0 -1
- package/dist/index.d.mts +0 -5
- package/dist/index.d.ts +0 -5
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -3
- package/dist/index.mjs.map +0 -1
- package/dist/nextjs/client.css +0 -340
- package/dist/nextjs/client.css.map +0 -1
- package/dist/nextjs/client.d.mts +0 -10
- package/dist/nextjs/client.d.ts +0 -10
- package/dist/nextjs/client.js +0 -185
- package/dist/nextjs/client.js.map +0 -1
- package/dist/nextjs/client.mjs +0 -185
- package/dist/nextjs/client.mjs.map +0 -1
- package/dist/nextjs.d.mts +0 -267
- package/dist/nextjs.d.ts +0 -267
- package/dist/nextjs.js +0 -315
- package/dist/nextjs.js.map +0 -1
- package/dist/nextjs.mjs +0 -315
- package/dist/nextjs.mjs.map +0 -1
- package/dist/react.d.mts +0 -65
- package/dist/react.d.ts +0 -65
- package/dist/react.js +0 -226
- package/dist/react.js.map +0 -1
- package/dist/react.mjs +0 -226
- package/dist/react.mjs.map +0 -1
- package/dist/server.d.mts +0 -35
- package/dist/server.d.ts +0 -35
- package/dist/server.js +0 -20
- package/dist/server.js.map +0 -1
- package/dist/server.mjs +0 -20
- package/dist/server.mjs.map +0 -1
- package/dist/src/browser/storage.d.ts +0 -6
- package/dist/src/browser/storage.d.ts.map +0 -1
- package/dist/src/browser/storage.js +0 -9
- package/dist/src/browser/storage.js.map +0 -1
- package/dist/src/config.d.ts +0 -3
- package/dist/src/config.d.ts.map +0 -1
- package/dist/src/config.js +0 -5
- package/dist/src/config.js.map +0 -1
- package/dist/src/constants.d.ts +0 -9
- package/dist/src/constants.d.ts.map +0 -1
- package/dist/src/constants.js +0 -17
- package/dist/src/constants.js.map +0 -1
- package/dist/src/index.d.ts +0 -4
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -2
- package/dist/src/index.js.map +0 -1
- package/dist/src/lib/cookies.d.ts +0 -7
- package/dist/src/lib/cookies.d.ts.map +0 -1
- package/dist/src/lib/cookies.js +0 -23
- package/dist/src/lib/cookies.js.map +0 -1
- package/dist/src/lib/jwt.d.ts +0 -3
- package/dist/src/lib/jwt.d.ts.map +0 -1
- package/dist/src/lib/jwt.js +0 -9
- package/dist/src/lib/jwt.js.map +0 -1
- package/dist/src/lib/logger.d.ts +0 -26
- package/dist/src/lib/logger.d.ts.map +0 -1
- package/dist/src/lib/logger.js +0 -55
- package/dist/src/lib/logger.js.map +0 -1
- package/dist/src/lib/oauth.d.ts +0 -19
- package/dist/src/lib/oauth.d.ts.map +0 -1
- package/dist/src/lib/oauth.js +0 -60
- package/dist/src/lib/oauth.js.map +0 -1
- package/dist/src/lib/postMessage.d.ts +0 -4
- package/dist/src/lib/postMessage.d.ts.map +0 -1
- package/dist/src/lib/postMessage.js +0 -15
- package/dist/src/lib/postMessage.js.map +0 -1
- package/dist/src/lib/windowUtil.d.ts +0 -4
- package/dist/src/lib/windowUtil.d.ts.map +0 -1
- package/dist/src/lib/windowUtil.js +0 -30
- package/dist/src/lib/windowUtil.js.map +0 -1
- package/dist/src/nextjs/GetUser.d.ts +0 -6
- package/dist/src/nextjs/GetUser.d.ts.map +0 -1
- package/dist/src/nextjs/GetUser.js +0 -18
- package/dist/src/nextjs/GetUser.js.map +0 -1
- package/dist/src/nextjs/config.d.ts +0 -178
- package/dist/src/nextjs/config.d.ts.map +0 -1
- package/dist/src/nextjs/config.js +0 -164
- package/dist/src/nextjs/config.js.map +0 -1
- package/dist/src/nextjs/cookies.d.ts +0 -30
- package/dist/src/nextjs/hooks/index.d.ts +0 -2
- package/dist/src/nextjs/hooks/index.d.ts.map +0 -1
- package/dist/src/nextjs/hooks/index.js +0 -2
- package/dist/src/nextjs/hooks/index.js.map +0 -1
- package/dist/src/nextjs/hooks/useTokenCookie.d.ts +0 -3
- package/dist/src/nextjs/hooks/useTokenCookie.d.ts.map +0 -1
- package/dist/src/nextjs/hooks/useTokenCookie.js +0 -37
- package/dist/src/nextjs/hooks/useTokenCookie.js.map +0 -1
- package/dist/src/nextjs/hooks/useUserCookie.d.ts +0 -3
- package/dist/src/nextjs/hooks/useUserCookie.d.ts.map +0 -1
- package/dist/src/nextjs/hooks/useUserCookie.js +0 -36
- package/dist/src/nextjs/hooks/useUserCookie.js.map +0 -1
- package/dist/src/nextjs/index.d.ts +0 -7
- package/dist/src/nextjs/index.d.ts.map +0 -1
- package/dist/src/nextjs/index.js +0 -6
- package/dist/src/nextjs/index.js.map +0 -1
- package/dist/src/nextjs/middleware/index.d.ts +0 -2
- package/dist/src/nextjs/middleware/index.d.ts.map +0 -1
- package/dist/src/nextjs/middleware/index.js +0 -2
- package/dist/src/nextjs/middleware/index.js.map +0 -1
- package/dist/src/nextjs/middleware.d.ts +0 -59
- package/dist/src/nextjs/middleware.d.ts.map +0 -1
- package/dist/src/nextjs/middleware.js +0 -107
- package/dist/src/nextjs/middleware.js.map +0 -1
- package/dist/src/nextjs/providers/NextAuthProvider.d.ts +0 -9
- package/dist/src/nextjs/providers/NextAuthProvider.d.ts.map +0 -1
- package/dist/src/nextjs/providers/NextAuthProvider.js +0 -50
- package/dist/src/nextjs/providers/NextAuthProvider.js.map +0 -1
- package/dist/src/nextjs/routeHandler.d.ts +0 -18
- package/dist/src/nextjs/routeHandler.d.ts.map +0 -1
- package/dist/src/nextjs/routeHandler.js +0 -216
- package/dist/src/nextjs/routeHandler.js.map +0 -1
- package/dist/src/nextjs/utils.d.ts +0 -3
- package/dist/src/nextjs/utils.d.ts.map +0 -1
- package/dist/src/nextjs/utils.js +0 -5
- package/dist/src/nextjs/utils.js.map +0 -1
- package/dist/src/reactjs/components/SignInButton.d.ts +0 -8
- package/dist/src/reactjs/components/SignInButton.d.ts.map +0 -1
- package/dist/src/reactjs/components/SignInButton.js +0 -14
- package/dist/src/reactjs/components/SignInButton.js.map +0 -1
- package/dist/src/reactjs/components/SignOutButton.d.ts +0 -6
- package/dist/src/reactjs/components/SignOutButton.d.ts.map +0 -1
- package/dist/src/reactjs/components/SignOutButton.js +0 -14
- package/dist/src/reactjs/components/SignOutButton.js.map +0 -1
- package/dist/src/reactjs/components/UserButton.d.ts +0 -8
- package/dist/src/reactjs/components/UserButton.d.ts.map +0 -1
- package/dist/src/reactjs/components/UserButton.js +0 -110
- package/dist/src/reactjs/components/UserButton.js.map +0 -1
- package/dist/src/reactjs/components/index.d.ts +0 -6
- package/dist/src/reactjs/components/index.d.ts.map +0 -1
- package/dist/src/reactjs/components/index.js +0 -6
- package/dist/src/reactjs/components/index.js.map +0 -1
- package/dist/src/reactjs/hooks/index.d.ts +0 -8
- package/dist/src/reactjs/hooks/index.d.ts.map +0 -1
- package/dist/src/reactjs/hooks/index.js +0 -8
- package/dist/src/reactjs/hooks/index.js.map +0 -1
- package/dist/src/reactjs/hooks/useAuth.d.ts +0 -3
- package/dist/src/reactjs/hooks/useAuth.d.ts.map +0 -1
- package/dist/src/reactjs/hooks/useAuth.js +0 -12
- package/dist/src/reactjs/hooks/useAuth.js.map +0 -1
- package/dist/src/reactjs/hooks/useUser.d.ts +0 -4
- package/dist/src/reactjs/hooks/useUser.d.ts.map +0 -1
- package/dist/src/reactjs/hooks/useUser.js +0 -12
- package/dist/src/reactjs/hooks/useUser.js.map +0 -1
- package/dist/src/reactjs/index.d.ts +0 -6
- package/dist/src/reactjs/index.d.ts.map +0 -1
- package/dist/src/reactjs/index.js +0 -8
- package/dist/src/reactjs/index.js.map +0 -1
- package/dist/src/reactjs/providers/index.d.ts +0 -8
- package/dist/src/reactjs/providers/index.d.ts.map +0 -1
- package/dist/src/reactjs/providers/index.js +0 -7
- package/dist/src/reactjs/providers/index.js.map +0 -1
- package/dist/src/server/ServerAuthenticationResolver.d.ts +0 -18
- package/dist/src/server/ServerAuthenticationResolver.d.ts.map +0 -1
- package/dist/src/server/ServerAuthenticationResolver.js +0 -62
- package/dist/src/server/ServerAuthenticationResolver.js.map +0 -1
- package/dist/src/server/config.d.ts +0 -16
- package/dist/src/server/config.d.ts.map +0 -1
- package/dist/src/server/config.js +0 -2
- package/dist/src/server/config.js.map +0 -1
- package/dist/src/server/index.d.ts +0 -6
- package/dist/src/server/index.d.ts.map +0 -1
- package/dist/src/server/index.js +0 -5
- package/dist/src/server/index.js.map +0 -1
- package/dist/src/server/login.d.ts +0 -17
- package/dist/src/server/login.d.ts.map +0 -1
- package/dist/src/server/login.js +0 -37
- package/dist/src/server/login.js.map +0 -1
- package/dist/src/server/refresh.d.ts +0 -7
- package/dist/src/server/refresh.d.ts.map +0 -1
- package/dist/src/server/refresh.js +0 -13
- package/dist/src/server/refresh.js.map +0 -1
- package/dist/src/services/AuthenticationService.d.ts +0 -87
- package/dist/src/services/AuthenticationService.d.ts.map +0 -1
- package/dist/src/services/AuthenticationService.js +0 -222
- package/dist/src/services/AuthenticationService.js.map +0 -1
- package/dist/src/services/PKCE.d.ts +0 -20
- package/dist/src/services/PKCE.d.ts.map +0 -1
- package/dist/src/services/PKCE.js +0 -44
- package/dist/src/services/PKCE.js.map +0 -1
- package/dist/src/services/types.d.ts +0 -23
- package/dist/src/services/types.d.ts.map +0 -1
- package/dist/src/services/types.js +0 -7
- package/dist/src/services/types.js.map +0 -1
- package/dist/src/shared/components/CivicAuthIframe.d.ts +0 -8
- package/dist/src/shared/components/CivicAuthIframe.d.ts.map +0 -1
- package/dist/src/shared/components/CivicAuthIframe.js +0 -9
- package/dist/src/shared/components/CivicAuthIframe.js.map +0 -1
- package/dist/src/shared/components/CivicAuthIframeContainer.d.ts +0 -9
- package/dist/src/shared/components/CivicAuthIframeContainer.d.ts.map +0 -1
- package/dist/src/shared/components/CivicAuthIframeContainer.js +0 -130
- package/dist/src/shared/components/CivicAuthIframeContainer.js.map +0 -1
- package/dist/src/shared/components/CloseIcon.d.ts +0 -4
- package/dist/src/shared/components/CloseIcon.d.ts.map +0 -1
- package/dist/src/shared/components/CloseIcon.js +0 -6
- package/dist/src/shared/components/CloseIcon.js.map +0 -1
- package/dist/src/shared/components/LoadingIcon.d.ts +0 -4
- package/dist/src/shared/components/LoadingIcon.d.ts.map +0 -1
- package/dist/src/shared/components/LoadingIcon.js +0 -24
- package/dist/src/shared/components/LoadingIcon.js.map +0 -1
- package/dist/src/shared/hooks/index.d.ts +0 -5
- package/dist/src/shared/hooks/index.d.ts.map +0 -1
- package/dist/src/shared/hooks/index.js +0 -5
- package/dist/src/shared/hooks/index.js.map +0 -1
- package/dist/src/shared/hooks/useAuth.d.ts +0 -3
- package/dist/src/shared/hooks/useAuth.d.ts.map +0 -1
- package/dist/src/shared/hooks/useAuth.js +0 -12
- package/dist/src/shared/hooks/useAuth.js.map +0 -1
- package/dist/src/shared/hooks/useConfig.d.ts +0 -3
- package/dist/src/shared/hooks/useConfig.d.ts.map +0 -1
- package/dist/src/shared/hooks/useConfig.js +0 -13
- package/dist/src/shared/hooks/useConfig.js.map +0 -1
- package/dist/src/shared/hooks/useIframe.d.ts +0 -3
- package/dist/src/shared/hooks/useIframe.d.ts.map +0 -1
- package/dist/src/shared/hooks/useIframe.js +0 -13
- package/dist/src/shared/hooks/useIframe.js.map +0 -1
- package/dist/src/shared/hooks/useSession.d.ts +0 -3
- package/dist/src/shared/hooks/useSession.d.ts.map +0 -1
- package/dist/src/shared/hooks/useSession.js +0 -13
- package/dist/src/shared/hooks/useSession.js.map +0 -1
- package/dist/src/shared/hooks/useToken.d.ts +0 -3
- package/dist/src/shared/hooks/useToken.d.ts.map +0 -1
- package/dist/src/shared/hooks/useToken.js +0 -12
- package/dist/src/shared/hooks/useToken.js.map +0 -1
- package/dist/src/shared/lib/GenericAuthenticationRefresher.d.ts.map +0 -1
- package/dist/src/shared/lib/GenericAuthenticationRefresher.js.map +0 -1
- package/dist/src/shared/lib/UserSession.d.ts +0 -12
- package/dist/src/shared/lib/UserSession.d.ts.map +0 -1
- package/dist/src/shared/lib/UserSession.js +0 -20
- package/dist/src/shared/lib/UserSession.js.map +0 -1
- package/dist/src/shared/lib/session.d.ts +0 -3
- package/dist/src/shared/lib/session.d.ts.map +0 -1
- package/dist/src/shared/lib/session.js +0 -10
- package/dist/src/shared/lib/session.js.map +0 -1
- package/dist/src/shared/lib/storage.d.ts +0 -25
- package/dist/src/shared/lib/storage.d.ts.map +0 -1
- package/dist/src/shared/lib/storage.js +0 -17
- package/dist/src/shared/lib/storage.js.map +0 -1
- package/dist/src/shared/lib/types.d.ts +0 -22
- package/dist/src/shared/lib/types.d.ts.map +0 -1
- package/dist/src/shared/lib/types.js +0 -16
- package/dist/src/shared/lib/types.js.map +0 -1
- package/dist/src/shared/lib/util.d.ts.map +0 -1
- package/dist/src/shared/lib/util.js +0 -126
- package/dist/src/shared/lib/util.js.map +0 -1
- package/dist/src/shared/providers/AuthContext.d.ts +0 -10
- package/dist/src/shared/providers/AuthContext.d.ts.map +0 -1
- package/dist/src/shared/providers/AuthContext.js +0 -3
- package/dist/src/shared/providers/AuthContext.js.map +0 -1
- package/dist/src/shared/providers/AuthProvider.d.ts.map +0 -1
- package/dist/src/shared/providers/AuthProvider.js.map +0 -1
- package/dist/src/shared/providers/CivicAuthProvider.d.ts.map +0 -1
- package/dist/src/shared/providers/CivicAuthProvider.js +0 -15
- package/dist/src/shared/providers/CivicAuthProvider.js.map +0 -1
- package/dist/src/shared/providers/ConfigProvider.d.ts +0 -21
- package/dist/src/shared/providers/ConfigProvider.d.ts.map +0 -1
- package/dist/src/shared/providers/ConfigProvider.js +0 -19
- package/dist/src/shared/providers/ConfigProvider.js.map +0 -1
- package/dist/src/shared/providers/IframeProvider.d.ts +0 -16
- package/dist/src/shared/providers/IframeProvider.d.ts.map +0 -1
- package/dist/src/shared/providers/IframeProvider.js +0 -11
- package/dist/src/shared/providers/IframeProvider.js.map +0 -1
- package/dist/src/shared/providers/SessionProvider.d.ts +0 -13
- package/dist/src/shared/providers/SessionProvider.d.ts.map +0 -1
- package/dist/src/shared/providers/SessionProvider.js +0 -13
- package/dist/src/shared/providers/SessionProvider.js.map +0 -1
- package/dist/src/shared/providers/TokenProvider.d.ts +0 -18
- package/dist/src/shared/providers/TokenProvider.d.ts.map +0 -1
- package/dist/src/shared/providers/TokenProvider.js +0 -53
- package/dist/src/shared/providers/TokenProvider.js.map +0 -1
- package/dist/src/shared/providers/UserProvider.d.ts.map +0 -1
- package/dist/src/shared/providers/UserProvider.js +0 -38
- package/dist/src/shared/providers/UserProvider.js.map +0 -1
- package/dist/src/types.d.ts +0 -146
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -2
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils.d.ts +0 -15
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/utils.js +0 -43
- package/dist/src/utils.js.map +0 -1
- package/dist/storage-ANmRwpZ3.d.ts +0 -25
- package/dist/storage-B2eAQNdv.d.ts +0 -25
- package/dist/storage-BJPUpxhm.d.mts +0 -25
- package/dist/storage-BJyqsZwC.d.mts +0 -25
- package/dist/test/integration/sdk.test.d.ts +0 -2
- package/dist/test/integration/sdk.test.d.ts.map +0 -1
- package/dist/test/integration/sdk.test.js +0 -183
- package/dist/test/integration/sdk.test.js.map +0 -1
- package/dist/test/support/fixtures.d.ts +0 -26
- package/dist/test/support/fixtures.d.ts.map +0 -1
- package/dist/test/support/fixtures.js +0 -55
- package/dist/test/support/fixtures.js.map +0 -1
- package/dist/test/support/tokens.json +0 -26
- package/dist/test/unit/lib/oauth.test.d.ts +0 -2
- package/dist/test/unit/lib/oauth.test.d.ts.map +0 -1
- package/dist/test/unit/lib/oauth.test.js +0 -55
- package/dist/test/unit/lib/oauth.test.js.map +0 -1
- package/dist/test/unit/logger.test.d.ts +0 -2
- package/dist/test/unit/logger.test.d.ts.map +0 -1
- package/dist/test/unit/logger.test.js +0 -141
- package/dist/test/unit/logger.test.js.map +0 -1
- package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts +0 -2
- package/dist/test/unit/nextjs/NextAuthProvider.test.d.ts.map +0 -1
- package/dist/test/unit/nextjs/NextAuthProvider.test.js +0 -29
- package/dist/test/unit/nextjs/NextAuthProvider.test.js.map +0 -1
- package/dist/test/unit/nextjs/config.test.d.ts +0 -2
- package/dist/test/unit/nextjs/config.test.d.ts.map +0 -1
- package/dist/test/unit/nextjs/config.test.js +0 -189
- package/dist/test/unit/nextjs/config.test.js.map +0 -1
- package/dist/test/unit/nextjs/getUser.test.d.ts +0 -2
- package/dist/test/unit/nextjs/getUser.test.d.ts.map +0 -1
- package/dist/test/unit/nextjs/getUser.test.js +0 -36
- package/dist/test/unit/nextjs/getUser.test.js.map +0 -1
- package/dist/test/unit/nextjs/middleware.test.d.ts +0 -2
- package/dist/test/unit/nextjs/middleware.test.d.ts.map +0 -1
- package/dist/test/unit/nextjs/middleware.test.js +0 -113
- package/dist/test/unit/nextjs/middleware.test.js.map +0 -1
- package/dist/test/unit/nextjs/utils.test.d.ts +0 -2
- package/dist/test/unit/nextjs/utils.test.d.ts.map +0 -1
- package/dist/test/unit/nextjs/utils.test.js +0 -13
- package/dist/test/unit/nextjs/utils.test.js.map +0 -1
- package/dist/test/unit/publicApi/apiSnapshot.test.d.ts +0 -2
- package/dist/test/unit/publicApi/apiSnapshot.test.d.ts.map +0 -1
- package/dist/test/unit/publicApi/apiSnapshot.test.js +0 -10
- package/dist/test/unit/publicApi/apiSnapshot.test.js.map +0 -1
- package/dist/test/unit/react/components/SignInButton.test.d.ts +0 -2
- package/dist/test/unit/react/components/SignInButton.test.d.ts.map +0 -1
- package/dist/test/unit/react/components/SignInButton.test.js +0 -31
- package/dist/test/unit/react/components/SignInButton.test.js.map +0 -1
- package/dist/test/unit/react/components/SignOutButton.test.d.ts +0 -2
- package/dist/test/unit/react/components/SignOutButton.test.d.ts.map +0 -1
- package/dist/test/unit/react/components/SignOutButton.test.js +0 -30
- package/dist/test/unit/react/components/SignOutButton.test.js.map +0 -1
- package/dist/test/unit/server/login.test.d.ts +0 -2
- package/dist/test/unit/server/login.test.d.ts.map +0 -1
- package/dist/test/unit/server/login.test.js +0 -127
- package/dist/test/unit/server/login.test.js.map +0 -1
- package/dist/test/unit/server/session.test.d.ts +0 -2
- package/dist/test/unit/server/session.test.d.ts.map +0 -1
- package/dist/test/unit/server/session.test.js +0 -41
- package/dist/test/unit/server/session.test.js.map +0 -1
- package/dist/test/unit/services/AuthenticationService.test.d.ts +0 -2
- package/dist/test/unit/services/AuthenticationService.test.d.ts.map +0 -1
- package/dist/test/unit/services/AuthenticationService.test.js +0 -104
- package/dist/test/unit/services/AuthenticationService.test.js.map +0 -1
- package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts +0 -2
- package/dist/test/unit/services/ServerAuthenticationResolver.test.d.ts.map +0 -1
- package/dist/test/unit/services/ServerAuthenticationResolver.test.js +0 -74
- package/dist/test/unit/services/ServerAuthenticationResolver.test.js.map +0 -1
- package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts +0 -2
- package/dist/test/unit/shared/GenericAuthenticationRefresher.test.d.ts.map +0 -1
- package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js +0 -61
- package/dist/test/unit/shared/GenericAuthenticationRefresher.test.js.map +0 -1
- package/dist/test/unit/shared/UserSession.test.d.ts +0 -2
- package/dist/test/unit/shared/UserSession.test.d.ts.map +0 -1
- package/dist/test/unit/shared/UserSession.test.js +0 -37
- package/dist/test/unit/shared/UserSession.test.js.map +0 -1
- package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts +0 -2
- package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.d.ts.map +0 -1
- package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js +0 -120
- package/dist/test/unit/shared/components/CivicAuthIframeContainer.test.js.map +0 -1
- package/dist/test/unit/shared/storage.test.d.ts +0 -2
- package/dist/test/unit/shared/storage.test.d.ts.map +0 -1
- package/dist/test/unit/shared/storage.test.js +0 -53
- package/dist/test/unit/shared/storage.test.js.map +0 -1
- package/dist/test/unit/utils.test.d.ts +0 -2
- package/dist/test/unit/utils.test.d.ts.map +0 -1
- package/dist/test/unit/utils.test.js +0 -40
- package/dist/test/unit/utils.test.js.map +0 -1
- package/dist/types-Bqm9OCZN.d.mts +0 -22
- package/dist/types-Bqm9OCZN.d.ts +0 -22
- package/dist/types-BxAubCqO.d.mts +0 -58
- package/dist/types-BxAubCqO.d.ts +0 -58
- package/dist/types-DOfl9w7j.d.mts +0 -23
- package/dist/types-DOfl9w7j.d.ts +0 -23
- package/dist/types-HdCjGldB.d.mts +0 -58
- package/dist/types-HdCjGldB.d.ts +0 -58
- package/dist/vitest.config.d.ts +0 -3
- package/dist/vitest.config.d.ts.map +0 -1
- package/dist/vitest.config.js +0 -40
- package/dist/vitest.config.js.map +0 -1
package/dist/nextjs.d.ts
DELETED
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
import * as next_dist_shared_lib_image_config from 'next/dist/shared/lib/image-config';
|
|
2
|
-
import * as next_dist_lib_load_custom_routes from 'next/dist/lib/load-custom-routes';
|
|
3
|
-
import * as next_dist_server_config_shared from 'next/dist/server/config-shared';
|
|
4
|
-
import { NextConfig } from 'next';
|
|
5
|
-
import { T as TokensCookieConfig, a as CookieConfig, O as OAuthTokens, C as CodeVerifier } from './types-DOfl9w7j.js';
|
|
6
|
-
import { U as User, S as SessionData, a as UnknownObject } from './types-BxAubCqO.js';
|
|
7
|
-
import { NextRequest, NextResponse } from 'next/server.js';
|
|
8
|
-
import { NextResponse as NextResponse$1 } from 'next/server';
|
|
9
|
-
import { C as CookieStorage, a as CookieStorageSettings } from './storage-ANmRwpZ3.js';
|
|
10
|
-
import 'oslo/oauth2';
|
|
11
|
-
|
|
12
|
-
type CookiesConfigObject = {
|
|
13
|
-
tokens: TokensCookieConfig;
|
|
14
|
-
user: CookieConfig;
|
|
15
|
-
};
|
|
16
|
-
type AuthConfigWithDefaults = {
|
|
17
|
-
clientId: string;
|
|
18
|
-
oauthServer: string;
|
|
19
|
-
callbackUrl: string;
|
|
20
|
-
loginUrl: string;
|
|
21
|
-
logoutUrl: string;
|
|
22
|
-
challengeUrl: string;
|
|
23
|
-
include: string[];
|
|
24
|
-
exclude: string[];
|
|
25
|
-
cookies: CookiesConfigObject;
|
|
26
|
-
};
|
|
27
|
-
type AuthConfig = Partial<AuthConfigWithDefaults>;
|
|
28
|
-
type DefinedAuthConfig = AuthConfigWithDefaults;
|
|
29
|
-
/**
|
|
30
|
-
* Default configuration values that will be used if not overridden
|
|
31
|
-
*/
|
|
32
|
-
declare const defaultAuthConfig: Omit<AuthConfigWithDefaults, "clientId">;
|
|
33
|
-
/**
|
|
34
|
-
* Resolves the authentication configuration by combining:
|
|
35
|
-
* 1. Default values
|
|
36
|
-
* 2. Environment variables (set internally by the plugin)
|
|
37
|
-
* 3. Explicitly passed configuration
|
|
38
|
-
*
|
|
39
|
-
* Note: Developers should not set _civic_auth_* environment variables directly.
|
|
40
|
-
* Instead, pass configuration to the createCivicAuthPlugin in next.config.js:
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```js
|
|
44
|
-
* // next.config.js
|
|
45
|
-
* export default createCivicAuthPlugin({
|
|
46
|
-
* callbackUrl: '/custom/callback',
|
|
47
|
-
* })
|
|
48
|
-
* ```
|
|
49
|
-
*/
|
|
50
|
-
declare const resolveAuthConfig: (config?: AuthConfig) => AuthConfigWithDefaults;
|
|
51
|
-
/**
|
|
52
|
-
* Creates a Next.js plugin that handles auth configuration.
|
|
53
|
-
*
|
|
54
|
-
* This is the main configuration point for the auth system.
|
|
55
|
-
* Do not set _civic_auth_* environment variables directly - instead,
|
|
56
|
-
* pass your configuration here:
|
|
57
|
-
*
|
|
58
|
-
* @example
|
|
59
|
-
* ```js
|
|
60
|
-
* // next.config.js
|
|
61
|
-
* export default createCivicAuthPlugin({
|
|
62
|
-
* clientId: 'my-client-id',
|
|
63
|
-
* callbackUrl: '/custom/callback',
|
|
64
|
-
* loginUrl: '/custom/login',
|
|
65
|
-
* logoutUrl: '/custom/logout',
|
|
66
|
-
* include: ['/protected/*'],
|
|
67
|
-
* exclude: ['/public/*']
|
|
68
|
-
* })
|
|
69
|
-
* ```
|
|
70
|
-
*
|
|
71
|
-
* The plugin sets internal environment variables that are used by
|
|
72
|
-
* the auth system. These variables should not be set manually.
|
|
73
|
-
*/
|
|
74
|
-
declare const createCivicAuthPlugin: (authConfig: AuthConfig & Pick<Required<AuthConfig>, "clientId">) => (nextConfig?: NextConfig) => {
|
|
75
|
-
env: {
|
|
76
|
-
_civic_auth_client_id: string;
|
|
77
|
-
_civic_oauth_server: string;
|
|
78
|
-
_civic_auth_callback_url: string;
|
|
79
|
-
_civic_auth_challenge_url: string;
|
|
80
|
-
_civic_auth_login_url: string;
|
|
81
|
-
_civic_auth_logout_url: string;
|
|
82
|
-
_civic_auth_includes: string;
|
|
83
|
-
_civic_auth_excludes: string;
|
|
84
|
-
_civic_auth_cookie_config: string;
|
|
85
|
-
};
|
|
86
|
-
exportPathMap?: (defaultMap: next_dist_server_config_shared.ExportPathMap, ctx: {
|
|
87
|
-
dev: boolean;
|
|
88
|
-
dir: string;
|
|
89
|
-
outDir: string | null;
|
|
90
|
-
distDir: string;
|
|
91
|
-
buildId: string;
|
|
92
|
-
}) => Promise<next_dist_server_config_shared.ExportPathMap> | next_dist_server_config_shared.ExportPathMap;
|
|
93
|
-
i18n?: next_dist_server_config_shared.I18NConfig | null;
|
|
94
|
-
eslint?: next_dist_server_config_shared.ESLintConfig;
|
|
95
|
-
typescript?: next_dist_server_config_shared.TypeScriptConfig;
|
|
96
|
-
headers?: () => Promise<next_dist_lib_load_custom_routes.Header[]>;
|
|
97
|
-
rewrites?: () => Promise<next_dist_lib_load_custom_routes.Rewrite[] | {
|
|
98
|
-
beforeFiles: next_dist_lib_load_custom_routes.Rewrite[];
|
|
99
|
-
afterFiles: next_dist_lib_load_custom_routes.Rewrite[];
|
|
100
|
-
fallback: next_dist_lib_load_custom_routes.Rewrite[];
|
|
101
|
-
}>;
|
|
102
|
-
redirects?: () => Promise<next_dist_lib_load_custom_routes.Redirect[]>;
|
|
103
|
-
excludeDefaultMomentLocales?: boolean;
|
|
104
|
-
webpack?: next_dist_server_config_shared.NextJsWebpackConfig | null;
|
|
105
|
-
trailingSlash?: boolean;
|
|
106
|
-
distDir?: string;
|
|
107
|
-
cleanDistDir?: boolean;
|
|
108
|
-
assetPrefix?: string;
|
|
109
|
-
cacheHandler?: string | undefined;
|
|
110
|
-
cacheMaxMemorySize?: number;
|
|
111
|
-
useFileSystemPublicRoutes?: boolean;
|
|
112
|
-
generateBuildId?: () => string | null | Promise<string | null>;
|
|
113
|
-
generateEtags?: boolean;
|
|
114
|
-
pageExtensions?: string[];
|
|
115
|
-
compress?: boolean;
|
|
116
|
-
analyticsId?: string;
|
|
117
|
-
poweredByHeader?: boolean;
|
|
118
|
-
images?: next_dist_shared_lib_image_config.ImageConfig;
|
|
119
|
-
devIndicators?: {
|
|
120
|
-
buildActivity?: boolean;
|
|
121
|
-
buildActivityPosition?: "bottom-right" | "bottom-left" | "top-right" | "top-left";
|
|
122
|
-
};
|
|
123
|
-
onDemandEntries?: {
|
|
124
|
-
maxInactiveAge?: number;
|
|
125
|
-
pagesBufferLength?: number;
|
|
126
|
-
};
|
|
127
|
-
amp?: {
|
|
128
|
-
canonicalBase?: string;
|
|
129
|
-
};
|
|
130
|
-
deploymentId?: string;
|
|
131
|
-
basePath?: string;
|
|
132
|
-
sassOptions?: {
|
|
133
|
-
[key: string]: any;
|
|
134
|
-
};
|
|
135
|
-
productionBrowserSourceMaps?: boolean;
|
|
136
|
-
optimizeFonts?: boolean;
|
|
137
|
-
reactProductionProfiling?: boolean;
|
|
138
|
-
reactStrictMode?: boolean | null;
|
|
139
|
-
publicRuntimeConfig?: {
|
|
140
|
-
[key: string]: any;
|
|
141
|
-
};
|
|
142
|
-
serverRuntimeConfig?: {
|
|
143
|
-
[key: string]: any;
|
|
144
|
-
};
|
|
145
|
-
httpAgentOptions?: {
|
|
146
|
-
keepAlive?: boolean;
|
|
147
|
-
};
|
|
148
|
-
outputFileTracing?: boolean;
|
|
149
|
-
staticPageGenerationTimeout?: number;
|
|
150
|
-
crossOrigin?: "anonymous" | "use-credentials";
|
|
151
|
-
swcMinify?: boolean;
|
|
152
|
-
compiler?: {
|
|
153
|
-
reactRemoveProperties?: boolean | {
|
|
154
|
-
properties?: string[];
|
|
155
|
-
};
|
|
156
|
-
relay?: {
|
|
157
|
-
src: string;
|
|
158
|
-
artifactDirectory?: string;
|
|
159
|
-
language?: "typescript" | "javascript" | "flow";
|
|
160
|
-
eagerEsModules?: boolean;
|
|
161
|
-
};
|
|
162
|
-
removeConsole?: boolean | {
|
|
163
|
-
exclude?: string[];
|
|
164
|
-
};
|
|
165
|
-
styledComponents?: boolean | next_dist_server_config_shared.StyledComponentsConfig;
|
|
166
|
-
emotion?: boolean | next_dist_server_config_shared.EmotionConfig;
|
|
167
|
-
styledJsx?: boolean | {
|
|
168
|
-
useLightningcss?: boolean;
|
|
169
|
-
};
|
|
170
|
-
};
|
|
171
|
-
output?: "standalone" | "export";
|
|
172
|
-
transpilePackages?: string[];
|
|
173
|
-
skipMiddlewareUrlNormalize?: boolean;
|
|
174
|
-
skipTrailingSlashRedirect?: boolean;
|
|
175
|
-
modularizeImports?: Record<string, {
|
|
176
|
-
transform: string | Record<string, string>;
|
|
177
|
-
preventFullImport?: boolean;
|
|
178
|
-
skipDefaultConversion?: boolean;
|
|
179
|
-
}>;
|
|
180
|
-
logging?: {
|
|
181
|
-
fetches?: {
|
|
182
|
-
fullUrl?: boolean;
|
|
183
|
-
};
|
|
184
|
-
};
|
|
185
|
-
experimental?: next_dist_server_config_shared.ExperimentalConfig;
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Used on the server-side to get the user object from the cookie
|
|
190
|
-
*/
|
|
191
|
-
|
|
192
|
-
declare const getUser: () => User | null;
|
|
193
|
-
|
|
194
|
-
type Middleware = (request: NextRequest) => Promise<NextResponse> | NextResponse;
|
|
195
|
-
/**
|
|
196
|
-
*
|
|
197
|
-
* Use this when auth is the only middleware you need.
|
|
198
|
-
* Usage:
|
|
199
|
-
*
|
|
200
|
-
* export default authMiddleware({ loginUrl = '/login' }); // or just authMiddleware();
|
|
201
|
-
*
|
|
202
|
-
*/
|
|
203
|
-
declare const authMiddleware: (authConfig?: Omit<AuthConfigWithDefaults, "clientId">) => (request: NextRequest) => Promise<NextResponse>;
|
|
204
|
-
/**
|
|
205
|
-
* Usage:
|
|
206
|
-
*
|
|
207
|
-
* export default withAuth(async (request) => {
|
|
208
|
-
* console.log('my middleware');
|
|
209
|
-
* return NextResponse.next();
|
|
210
|
-
* })
|
|
211
|
-
*/
|
|
212
|
-
declare function withAuth(middleware: Middleware): (request: NextRequest) => Promise<NextResponse>;
|
|
213
|
-
/**
|
|
214
|
-
* Use this when you want to configure the middleware here (an alternative is to do it in the next.config file)
|
|
215
|
-
*
|
|
216
|
-
* Usage:
|
|
217
|
-
*
|
|
218
|
-
* const withAuth = auth({ loginUrl = '/login' }); // or just auth();
|
|
219
|
-
*
|
|
220
|
-
* export default withAuth(async (request) => {
|
|
221
|
-
* console.log('my middleware');
|
|
222
|
-
* return NextResponse.next();
|
|
223
|
-
* })
|
|
224
|
-
*
|
|
225
|
-
*/
|
|
226
|
-
declare function auth(authConfig?: AuthConfig): (middleware: Middleware) => ((request: NextRequest) => Promise<NextResponse>);
|
|
227
|
-
|
|
228
|
-
/**
|
|
229
|
-
* Creates an authentication handler for Next.js API routes
|
|
230
|
-
*
|
|
231
|
-
* Usage:
|
|
232
|
-
* ```ts
|
|
233
|
-
* // app/api/auth/[...civicauth]/route.ts
|
|
234
|
-
* import { handler } from '@civic/auth/nextjs'
|
|
235
|
-
* export const GET = handler({
|
|
236
|
-
* // optional config overrides
|
|
237
|
-
* })
|
|
238
|
-
* ```
|
|
239
|
-
*/
|
|
240
|
-
declare const handler: (authConfig?: {}) => (request: NextRequest) => Promise<NextResponse>;
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* Creates HTTP-only cookies for authentication tokens
|
|
244
|
-
*/
|
|
245
|
-
declare const createTokenCookies: (response: NextResponse$1, sessionData: SessionData, config: AuthConfig) => void;
|
|
246
|
-
/**
|
|
247
|
-
* Creates a client-readable cookie with user info
|
|
248
|
-
*/
|
|
249
|
-
declare const createUserInfoCookie: (response: NextResponse$1, user: User<UnknownObject> | null, sessionData: SessionData, config: AuthConfig) => void;
|
|
250
|
-
/**
|
|
251
|
-
* Clears all authentication cookies
|
|
252
|
-
*/
|
|
253
|
-
declare const clearAuthCookies: (config: AuthConfig) => Promise<void>;
|
|
254
|
-
type KeySetter = OAuthTokens | CodeVerifier;
|
|
255
|
-
declare class NextjsCookieStorage extends CookieStorage {
|
|
256
|
-
readonly config: Partial<TokensCookieConfig>;
|
|
257
|
-
constructor(config?: Partial<TokensCookieConfig>);
|
|
258
|
-
get(key: string): string | null;
|
|
259
|
-
set(key: KeySetter, value: string): void;
|
|
260
|
-
}
|
|
261
|
-
declare class NextjsClientStorage extends CookieStorage {
|
|
262
|
-
constructor(config?: Partial<CookieStorageSettings>);
|
|
263
|
-
get(key: string): string | null;
|
|
264
|
-
set(key: string, value: string): void;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
export { type AuthConfig, type AuthConfigWithDefaults, type CookiesConfigObject, type DefinedAuthConfig, NextjsClientStorage, NextjsCookieStorage, auth, authMiddleware, clearAuthCookies, createCivicAuthPlugin, createTokenCookies, createUserInfoCookie, defaultAuthConfig, getUser, handler, resolveAuthConfig, withAuth };
|
package/dist/nextjs.js
DELETED
|
@@ -1,315 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var _chunkTH6FI2XIjs = require('./chunk-TH6FI2XI.js');
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var _chunkJEOPLLWOjs = require('./chunk-JEOPLLWO.js');
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
var _chunkAM2Y662Ijs = require('./chunk-AM2Y662I.js');
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
var _chunkCRTRMMJ7js = require('./chunk-CRTRMMJ7.js');
|
|
30
|
-
|
|
31
|
-
// src/nextjs/GetUser.ts
|
|
32
|
-
var getUser2 = () => {
|
|
33
|
-
var _a;
|
|
34
|
-
const clientStorage = new (0, _chunkTH6FI2XIjs.NextjsClientStorage)();
|
|
35
|
-
const userSession = new (0, _chunkAM2Y662Ijs.GenericUserSession)(clientStorage);
|
|
36
|
-
const tokens = _chunkAM2Y662Ijs.retrieveTokens.call(void 0, clientStorage);
|
|
37
|
-
const user = userSession.get();
|
|
38
|
-
if (!user || !tokens) return null;
|
|
39
|
-
return _chunkCRTRMMJ7js.__spreadProps.call(void 0, _chunkCRTRMMJ7js.__spreadValues.call(void 0, {}, user), {
|
|
40
|
-
idToken: tokens.id_token,
|
|
41
|
-
accessToken: tokens.access_token,
|
|
42
|
-
refreshToken: (_a = tokens.refresh_token) != null ? _a : ""
|
|
43
|
-
});
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
// src/nextjs/middleware.ts
|
|
47
|
-
var _serverjs = require('next/server.js');
|
|
48
|
-
var _picomatch = require('picomatch'); var _picomatch2 = _interopRequireDefault(_picomatch);
|
|
49
|
-
var matchGlob = (pathname, globPattern) => {
|
|
50
|
-
const matches = _picomatch2.default.call(void 0, globPattern);
|
|
51
|
-
return matches(pathname);
|
|
52
|
-
};
|
|
53
|
-
var matchesGlobs = (pathname, patterns) => patterns.some((pattern) => {
|
|
54
|
-
if (!pattern) return false;
|
|
55
|
-
console.log("matching", {
|
|
56
|
-
pattern,
|
|
57
|
-
pathname,
|
|
58
|
-
match: matchGlob(pathname, pattern)
|
|
59
|
-
});
|
|
60
|
-
return matchGlob(pathname, pattern);
|
|
61
|
-
});
|
|
62
|
-
var applyAuth = (authConfig, request) => _chunkCRTRMMJ7js.__async.call(void 0, void 0, null, function* () {
|
|
63
|
-
const authConfigWithDefaults = _chunkTH6FI2XIjs.resolveAuthConfig.call(void 0, authConfig);
|
|
64
|
-
const isAuthenticated = !!request.cookies.get("id_token");
|
|
65
|
-
if (request.nextUrl.pathname === authConfigWithDefaults.loginUrl && request.method === "GET") {
|
|
66
|
-
console.log("\u2192 Skipping auth check - this is the login URL");
|
|
67
|
-
return void 0;
|
|
68
|
-
}
|
|
69
|
-
if (!matchesGlobs(request.nextUrl.pathname, authConfigWithDefaults.include)) {
|
|
70
|
-
console.log("\u2192 Skipping auth check - path not in include patterns");
|
|
71
|
-
return void 0;
|
|
72
|
-
}
|
|
73
|
-
if (matchesGlobs(request.nextUrl.pathname, authConfigWithDefaults.exclude)) {
|
|
74
|
-
console.log("\u2192 Skipping auth check - path in exclude patterns");
|
|
75
|
-
return void 0;
|
|
76
|
-
}
|
|
77
|
-
if (!isAuthenticated) {
|
|
78
|
-
const loginUrl = new URL(authConfigWithDefaults.loginUrl, request.url);
|
|
79
|
-
console.log("\u2192 No valid token found - redirecting to login", loginUrl);
|
|
80
|
-
return _serverjs.NextResponse.redirect(loginUrl);
|
|
81
|
-
}
|
|
82
|
-
console.log("\u2192 Auth check passed");
|
|
83
|
-
return void 0;
|
|
84
|
-
});
|
|
85
|
-
var authMiddleware = (authConfig = _chunkTH6FI2XIjs.defaultAuthConfig) => (request) => _chunkCRTRMMJ7js.__async.call(void 0, void 0, null, function* () {
|
|
86
|
-
const response = yield applyAuth(authConfig, request);
|
|
87
|
-
if (response) return response;
|
|
88
|
-
return _serverjs.NextResponse.next();
|
|
89
|
-
});
|
|
90
|
-
function withAuth(middleware) {
|
|
91
|
-
return (request) => _chunkCRTRMMJ7js.__async.call(void 0, this, null, function* () {
|
|
92
|
-
const response = yield applyAuth({}, request);
|
|
93
|
-
if (response) return response;
|
|
94
|
-
return middleware(request);
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
function auth(authConfig = {}) {
|
|
98
|
-
return (middleware) => {
|
|
99
|
-
return (request) => _chunkCRTRMMJ7js.__async.call(void 0, this, null, function* () {
|
|
100
|
-
const response = yield applyAuth(authConfig, request);
|
|
101
|
-
if (response) return response;
|
|
102
|
-
return middleware(request);
|
|
103
|
-
});
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// src/nextjs/routeHandler.ts
|
|
108
|
-
|
|
109
|
-
var _cachejs = require('next/cache.js');
|
|
110
|
-
var _headersjs = require('next/headers.js');
|
|
111
|
-
var logger = _chunkTH6FI2XIjs.loggers.nextjs.handlers.auth;
|
|
112
|
-
var AuthError = class extends Error {
|
|
113
|
-
constructor(message, status = 401) {
|
|
114
|
-
super(message);
|
|
115
|
-
this.status = status;
|
|
116
|
-
this.name = "AuthError";
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
function handleChallenge(request, config) {
|
|
120
|
-
return _chunkCRTRMMJ7js.__async.call(void 0, this, null, function* () {
|
|
121
|
-
var _a, _b;
|
|
122
|
-
const cookieStorage = new (0, _chunkTH6FI2XIjs.NextjsCookieStorage)((_b = (_a = config.cookies) == null ? void 0 : _a.tokens) != null ? _b : {});
|
|
123
|
-
const pkceProducer = new (0, _chunkAM2Y662Ijs.GenericPublicClientPKCEProducer)(cookieStorage);
|
|
124
|
-
const challenge = yield pkceProducer.getCodeChallenge();
|
|
125
|
-
const appUrl = request.nextUrl.searchParams.get("appUrl");
|
|
126
|
-
if (appUrl) {
|
|
127
|
-
cookieStorage.set("app_url" /* APP_URL */, appUrl);
|
|
128
|
-
}
|
|
129
|
-
return _serverjs.NextResponse.json({ status: "success", challenge });
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
function performTokenExchangeAndSetCookies(request, config, code, state, appUrl) {
|
|
133
|
-
return _chunkCRTRMMJ7js.__async.call(void 0, this, null, function* () {
|
|
134
|
-
const resolvedConfigs = _chunkTH6FI2XIjs.resolveAuthConfig.call(void 0, config);
|
|
135
|
-
const cookieStorage = new (0, _chunkTH6FI2XIjs.NextjsCookieStorage)(resolvedConfigs.cookies.tokens);
|
|
136
|
-
const callbackUrl = _chunkTH6FI2XIjs.resolveCallbackUrl.call(void 0, resolvedConfigs, appUrl);
|
|
137
|
-
try {
|
|
138
|
-
yield _chunkJEOPLLWOjs.resolveOAuthAccessCode.call(void 0, code, state, cookieStorage, _chunkCRTRMMJ7js.__spreadProps.call(void 0, _chunkCRTRMMJ7js.__spreadValues.call(void 0, {}, resolvedConfigs), {
|
|
139
|
-
redirectUrl: callbackUrl
|
|
140
|
-
}));
|
|
141
|
-
} catch (error) {
|
|
142
|
-
logger.error("Token exchange failed:", error);
|
|
143
|
-
throw new AuthError("Failed to authenticate user", 401);
|
|
144
|
-
}
|
|
145
|
-
const user = yield _chunkAM2Y662Ijs.getUser.call(void 0, cookieStorage);
|
|
146
|
-
if (!user) {
|
|
147
|
-
throw new AuthError("Failed to get user info", 401);
|
|
148
|
-
}
|
|
149
|
-
const clientStorage = new (0, _chunkTH6FI2XIjs.NextjsClientStorage)();
|
|
150
|
-
const userSession = new (0, _chunkAM2Y662Ijs.GenericUserSession)(clientStorage);
|
|
151
|
-
userSession.set(user);
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
function handleCallback(request, config) {
|
|
155
|
-
return _chunkCRTRMMJ7js.__async.call(void 0, this, null, function* () {
|
|
156
|
-
var _a;
|
|
157
|
-
const resolvedConfigs = _chunkTH6FI2XIjs.resolveAuthConfig.call(void 0, config);
|
|
158
|
-
console.log("handleCallback", { request, resolvedConfigs });
|
|
159
|
-
const code = request.nextUrl.searchParams.get("code");
|
|
160
|
-
const state = request.nextUrl.searchParams.get("state") || "";
|
|
161
|
-
if (!code || !state) throw new AuthError("Bad parameters", 400);
|
|
162
|
-
const appUrl = ((_a = request.cookies.get("app_url" /* APP_URL */)) == null ? void 0 : _a.value) || request.nextUrl.searchParams.get("appUrl");
|
|
163
|
-
console.log("handleCallback", {
|
|
164
|
-
code,
|
|
165
|
-
state,
|
|
166
|
-
cookies: _headersjs.cookies.call(void 0, ),
|
|
167
|
-
appUrl
|
|
168
|
-
});
|
|
169
|
-
const codeVerifier = request.cookies.get("code_verifier" /* COOKIE_NAME */);
|
|
170
|
-
if (!codeVerifier || !appUrl) {
|
|
171
|
-
console.log("handleCallback no code_verifier found", {
|
|
172
|
-
state,
|
|
173
|
-
serverTokenExchange: _chunkAM2Y662Ijs.serverTokenExchangeFromState.call(void 0, `${state}`)
|
|
174
|
-
});
|
|
175
|
-
let response2 = new (0, _serverjs.NextResponse)(
|
|
176
|
-
`<html><body><span style="display:none">${_chunkAM2Y662Ijs.TOKEN_EXCHANGE_TRIGGER_TEXT}</span></body></html>`
|
|
177
|
-
);
|
|
178
|
-
if (state && _chunkAM2Y662Ijs.serverTokenExchangeFromState.call(void 0, state)) {
|
|
179
|
-
console.log(
|
|
180
|
-
"handleCallback serverTokenExchangeFromState, launching redirect page...",
|
|
181
|
-
{
|
|
182
|
-
requestUrl: request.url,
|
|
183
|
-
configCallbackUrl: resolvedConfigs.callbackUrl
|
|
184
|
-
}
|
|
185
|
-
);
|
|
186
|
-
const requestUrl = new URL(request.url);
|
|
187
|
-
const fetchUrl = `${resolvedConfigs.callbackUrl}?${requestUrl.searchParams.toString()}&sameDomainServerTokenExchange=true`;
|
|
188
|
-
response2 = new (0, _serverjs.NextResponse)(
|
|
189
|
-
`<html>
|
|
190
|
-
<body>
|
|
191
|
-
<span style="display:none">
|
|
192
|
-
<script>
|
|
193
|
-
window.onload = function () {
|
|
194
|
-
const appUrl = globalThis.window?.location?.origin;
|
|
195
|
-
fetch('${fetchUrl}&appUrl=' + appUrl).then((response) => {
|
|
196
|
-
response.json().then((jsonResponse) => {
|
|
197
|
-
console.log('fetch jsonResponse', jsonResponse);
|
|
198
|
-
if (jsonResponse.redirectUrl) {
|
|
199
|
-
console.log('handleCallback serverTokenExchangeFromState, redirecting');
|
|
200
|
-
window.location.href = jsonResponse.redirectUrl;
|
|
201
|
-
}
|
|
202
|
-
});
|
|
203
|
-
});
|
|
204
|
-
};
|
|
205
|
-
</script>
|
|
206
|
-
</span>
|
|
207
|
-
</body>
|
|
208
|
-
</html>
|
|
209
|
-
`
|
|
210
|
-
);
|
|
211
|
-
}
|
|
212
|
-
response2.headers.set("Content-Type", "text/html; charset=utf-8");
|
|
213
|
-
console.log(
|
|
214
|
-
`handleCallback no code_verifier found, returning ${_chunkAM2Y662Ijs.TOKEN_EXCHANGE_TRIGGER_TEXT}`
|
|
215
|
-
);
|
|
216
|
-
return response2;
|
|
217
|
-
}
|
|
218
|
-
yield performTokenExchangeAndSetCookies(
|
|
219
|
-
request,
|
|
220
|
-
resolvedConfigs,
|
|
221
|
-
code,
|
|
222
|
-
state,
|
|
223
|
-
appUrl
|
|
224
|
-
);
|
|
225
|
-
if (request.url.includes("sameDomainServerTokenExchange=true")) {
|
|
226
|
-
console.log(
|
|
227
|
-
"handleCallback sameDomainServerTokenExchange = true, returnining redirectUrl",
|
|
228
|
-
appUrl
|
|
229
|
-
);
|
|
230
|
-
return _serverjs.NextResponse.json({
|
|
231
|
-
status: "success",
|
|
232
|
-
redirectUrl: appUrl
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
if (_chunkAM2Y662Ijs.serverTokenExchangeFromState.call(void 0, state)) {
|
|
236
|
-
console.log(
|
|
237
|
-
"handleCallback serverTokenExchangeFromState, redirect to appUrl",
|
|
238
|
-
appUrl
|
|
239
|
-
);
|
|
240
|
-
if (!appUrl) {
|
|
241
|
-
throw new Error("appUrl undefined. Cannot redirect.");
|
|
242
|
-
}
|
|
243
|
-
return _serverjs.NextResponse.redirect(`${appUrl}`);
|
|
244
|
-
}
|
|
245
|
-
const response = new (0, _serverjs.NextResponse)(
|
|
246
|
-
`<html><span style="display:none">${_chunkAM2Y662Ijs.TOKEN_EXCHANGE_SUCCESS_TEXT}</span></html>`
|
|
247
|
-
);
|
|
248
|
-
response.headers.set("Content-Type", "text/html; charset=utf-8");
|
|
249
|
-
return response;
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
var getAbsoluteRedirectPath = (redirectPath, currentBasePath) => new URL(redirectPath, currentBasePath).href;
|
|
253
|
-
function handleLogout(request, config) {
|
|
254
|
-
return _chunkCRTRMMJ7js.__async.call(void 0, this, null, function* () {
|
|
255
|
-
var _a;
|
|
256
|
-
const resolvedConfigs = _chunkTH6FI2XIjs.resolveAuthConfig.call(void 0, config);
|
|
257
|
-
const defaultRedirectPath = (_a = resolvedConfigs.loginUrl) != null ? _a : "/";
|
|
258
|
-
const redirectTarget = new URL(request.url).searchParams.get("redirect") || defaultRedirectPath;
|
|
259
|
-
const isAbsoluteRedirect = /^(https?:\/\/|www\.).+/i.test(redirectTarget);
|
|
260
|
-
const appUrl = request.nextUrl.searchParams.get("appUrl");
|
|
261
|
-
const finalRedirectUrl = isAbsoluteRedirect ? redirectTarget : getAbsoluteRedirectPath(
|
|
262
|
-
redirectTarget,
|
|
263
|
-
new URL(appUrl != null ? appUrl : request.url).origin
|
|
264
|
-
);
|
|
265
|
-
const response = _serverjs.NextResponse.redirect(finalRedirectUrl);
|
|
266
|
-
_chunkTH6FI2XIjs.clearAuthCookies.call(void 0, config);
|
|
267
|
-
try {
|
|
268
|
-
_cachejs.revalidatePath.call(void 0, isAbsoluteRedirect ? finalRedirectUrl : redirectTarget);
|
|
269
|
-
} catch (error) {
|
|
270
|
-
logger.warn("Failed to revalidate path after logout:", error);
|
|
271
|
-
}
|
|
272
|
-
return response;
|
|
273
|
-
});
|
|
274
|
-
}
|
|
275
|
-
var handler = (authConfig = {}) => (request) => _chunkCRTRMMJ7js.__async.call(void 0, void 0, null, function* () {
|
|
276
|
-
const config = _chunkTH6FI2XIjs.resolveAuthConfig.call(void 0, authConfig);
|
|
277
|
-
try {
|
|
278
|
-
const pathname = request.nextUrl.pathname;
|
|
279
|
-
const pathSegments = pathname.split("/");
|
|
280
|
-
const lastSegment = pathSegments[pathSegments.length - 1];
|
|
281
|
-
switch (lastSegment) {
|
|
282
|
-
case "challenge":
|
|
283
|
-
return yield handleChallenge(request, config);
|
|
284
|
-
case "callback":
|
|
285
|
-
return yield handleCallback(request, config);
|
|
286
|
-
case "logout":
|
|
287
|
-
return yield handleLogout(request, config);
|
|
288
|
-
default:
|
|
289
|
-
throw new AuthError(`Invalid auth route: ${pathname}`, 404);
|
|
290
|
-
}
|
|
291
|
-
} catch (error) {
|
|
292
|
-
logger.error("Auth handler error:", error);
|
|
293
|
-
const status = error instanceof AuthError ? error.status : 500;
|
|
294
|
-
const message = error instanceof Error ? error.message : "Authentication failed";
|
|
295
|
-
const response = _serverjs.NextResponse.json({ error: message }, { status });
|
|
296
|
-
_chunkTH6FI2XIjs.clearAuthCookies.call(void 0, config);
|
|
297
|
-
return response;
|
|
298
|
-
}
|
|
299
|
-
});
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
exports.NextjsClientStorage = _chunkTH6FI2XIjs.NextjsClientStorage; exports.NextjsCookieStorage = _chunkTH6FI2XIjs.NextjsCookieStorage; exports.auth = auth; exports.authMiddleware = authMiddleware; exports.clearAuthCookies = _chunkTH6FI2XIjs.clearAuthCookies; exports.createCivicAuthPlugin = _chunkTH6FI2XIjs.createCivicAuthPlugin; exports.createTokenCookies = _chunkTH6FI2XIjs.createTokenCookies; exports.createUserInfoCookie = _chunkTH6FI2XIjs.createUserInfoCookie; exports.defaultAuthConfig = _chunkTH6FI2XIjs.defaultAuthConfig; exports.getUser = getUser2; exports.handler = handler; exports.resolveAuthConfig = _chunkTH6FI2XIjs.resolveAuthConfig; exports.withAuth = withAuth;
|
|
315
|
-
//# sourceMappingURL=nextjs.js.map
|
package/dist/nextjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/patrick/Code/civic-auth/packages/civic-auth-client/dist/nextjs.js","../src/nextjs/GetUser.ts","../src/nextjs/middleware.ts","../src/nextjs/routeHandler.ts"],"names":["getUser","NextResponse","response"],"mappings":"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","file":"/Users/patrick/Code/civic-auth/packages/civic-auth-client/dist/nextjs.js","sourcesContent":[null,"/**\n * Used on the server-side to get the user object from the cookie\n */\nimport { User } from \"@/types\";\nimport { GenericUserSession } from \"@/shared/UserSession\";\nimport { NextjsClientStorage } from \"@/nextjs/cookies\";\nimport { retrieveTokens } from \"@/shared/util\";\n\nexport const getUser = (): User | null => {\n const clientStorage = new NextjsClientStorage();\n const userSession = new GenericUserSession(clientStorage);\n const tokens = retrieveTokens(clientStorage);\n const user = userSession.get();\n if (!user || !tokens) return null;\n\n return {\n ...user!,\n idToken: tokens.id_token,\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token ?? \"\",\n } as User;\n};\n","/**\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 { NextRequest, NextResponse } from \"next/server.js\";\nimport picomatch from \"picomatch\";\nimport {\n AuthConfig,\n defaultAuthConfig,\n resolveAuthConfig,\n} 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 = defaultAuthConfig) =>\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 async (request: NextRequest): Promise<NextResponse> => {\n const response = await applyAuth({}, request);\n if (response) return response;\n\n return middleware(request);\n };\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","import { NextRequest, NextResponse } from \"next/server.js\";\nimport { revalidatePath } from \"next/cache.js\";\nimport { AuthConfig, resolveAuthConfig } from \"@/nextjs/config.js\";\nimport { loggers } from \"@/lib/logger.js\";\nimport {\n clearAuthCookies,\n NextjsClientStorage,\n NextjsCookieStorage,\n} from \"@/nextjs/cookies.js\";\nimport { GenericPublicClientPKCEProducer } from \"@/services/PKCE.js\";\nimport { resolveOAuthAccessCode } from \"@/server/login.js\";\nimport { getUser } from \"@/shared/session.js\";\nimport { resolveCallbackUrl } from \"@/nextjs/utils.js\";\nimport { GenericUserSession } from \"@/shared/UserSession.js\";\nimport {\n TOKEN_EXCHANGE_SUCCESS_TEXT,\n TOKEN_EXCHANGE_TRIGGER_TEXT,\n} from \"@/constants.js\";\nimport { serverTokenExchangeFromState } from \"@/lib/oauth.js\";\nimport { cookies } from \"next/headers.js\";\nimport { CodeVerifier } from \"@/shared/types\";\n\nconst logger = loggers.nextjs.handlers.auth;\n\nclass AuthError extends Error {\n constructor(\n message: string,\n public readonly status: number = 401,\n ) {\n super(message);\n this.name = \"AuthError\";\n }\n}\n\n/**\n * create a code verifier and challenge for PKCE\n * saving the verifier in a cookie for later use\n * @returns {Promise<NextResponse>}\n */\nasync function handleChallenge(\n request: NextRequest,\n config: AuthConfig,\n): Promise<NextResponse> {\n const cookieStorage = new NextjsCookieStorage(config.cookies?.tokens ?? {});\n const pkceProducer = new GenericPublicClientPKCEProducer(cookieStorage);\n\n const challenge = await pkceProducer.getCodeChallenge();\n const appUrl = request.nextUrl.searchParams.get(\"appUrl\");\n if (appUrl) {\n cookieStorage.set(CodeVerifier.APP_URL, appUrl);\n }\n return NextResponse.json({ status: \"success\", challenge });\n}\n\nasync function performTokenExchangeAndSetCookies(\n request: NextRequest,\n config: AuthConfig,\n code: string,\n state: string,\n appUrl: string,\n) {\n const resolvedConfigs = resolveAuthConfig(config);\n const cookieStorage = new NextjsCookieStorage(resolvedConfigs.cookies.tokens);\n\n const callbackUrl = resolveCallbackUrl(resolvedConfigs, appUrl);\n try {\n await resolveOAuthAccessCode(code, state, cookieStorage, {\n ...resolvedConfigs,\n redirectUrl: callbackUrl,\n });\n } catch (error) {\n logger.error(\"Token exchange failed:\", error);\n throw new AuthError(\"Failed to authenticate user\", 401);\n }\n\n const user = await getUser(cookieStorage);\n if (!user) {\n throw new AuthError(\"Failed to get user info\", 401);\n }\n\n const clientStorage = new NextjsClientStorage();\n const userSession = new GenericUserSession(clientStorage);\n userSession.set(user);\n}\nasync function handleCallback(\n request: NextRequest,\n config: AuthConfig,\n): Promise<NextResponse> {\n const resolvedConfigs = resolveAuthConfig(config);\n console.log(\"handleCallback\", { request, resolvedConfigs });\n const code = request.nextUrl.searchParams.get(\"code\");\n const state = request.nextUrl.searchParams.get(\"state\") || \"\";\n if (!code || !state) throw new AuthError(\"Bad parameters\", 400);\n\n // appUrl is passed from the client to the server in the query string\n // this is necessary because the server does not have access to the client's window.location.origin\n // and can not accurately determine the appUrl (specially if the app is behind a reverse proxy)\n const appUrl =\n request.cookies.get(CodeVerifier.APP_URL)?.value ||\n request.nextUrl.searchParams.get(\"appUrl\");\n\n // If we have a code_verifier cookie and the appUrl, we can do a token exchange.\n // Otherwise, just render an empty page.\n // The initial redirect back from the auth server does not send cookies, because the redirect is from a 3rd-party domain.\n // The client will make an additional call to this route with cookies included, at which point we do the token exchange.\n console.log(\"handleCallback\", {\n code,\n state,\n cookies: cookies(),\n appUrl,\n });\n\n const codeVerifier = request.cookies.get(CodeVerifier.COOKIE_NAME);\n\n if (!codeVerifier || !appUrl) {\n console.log(\"handleCallback no code_verifier found\", {\n state,\n serverTokenExchange: serverTokenExchangeFromState(`${state}`),\n });\n let response = new NextResponse(\n `<html><body><span style=\"display:none\">${TOKEN_EXCHANGE_TRIGGER_TEXT}</span></body></html>`,\n );\n\n // in server-side token exchange mode we need to launch a page that will trigger the token exchange\n // from the same domain, allowing it access to the code_verifier cookie\n // we only need to do this in redirect mode, as the iframe already triggers a client-side token exchange\n // if no code-verifier cookie is found\n if (state && serverTokenExchangeFromState(state)) {\n console.log(\n \"handleCallback serverTokenExchangeFromState, launching redirect page...\",\n {\n requestUrl: request.url,\n configCallbackUrl: resolvedConfigs.callbackUrl,\n },\n );\n // we need to replace the URL with resolved config in case the server is hosted\n // behind a reverse proxy or load balancer\n const requestUrl = new URL(request.url);\n const fetchUrl = `${resolvedConfigs.callbackUrl}?${requestUrl.searchParams.toString()}&sameDomainServerTokenExchange=true`;\n response = new NextResponse(\n `<html>\n <body>\n <span style=\"display:none\">\n <script>\n window.onload = function () {\n const appUrl = globalThis.window?.location?.origin;\n fetch('${fetchUrl}&appUrl=' + appUrl).then((response) => {\n response.json().then((jsonResponse) => {\n console.log('fetch jsonResponse', jsonResponse);\n if (jsonResponse.redirectUrl) {\n console.log('handleCallback serverTokenExchangeFromState, redirecting');\n window.location.href = jsonResponse.redirectUrl;\n }\n });\n });\n };\n </script>\n </span>\n </body>\n </html>\n `,\n );\n }\n response.headers.set(\"Content-Type\", \"text/html; charset=utf-8\");\n console.log(\n `handleCallback no code_verifier found, returning ${TOKEN_EXCHANGE_TRIGGER_TEXT}`,\n );\n return response;\n }\n\n await performTokenExchangeAndSetCookies(\n request,\n resolvedConfigs,\n code,\n state,\n appUrl,\n );\n\n if (request.url.includes(\"sameDomainServerTokenExchange=true\")) {\n console.log(\n \"handleCallback sameDomainServerTokenExchange = true, returnining redirectUrl\",\n appUrl,\n );\n return NextResponse.json({\n status: \"success\",\n redirectUrl: appUrl,\n });\n }\n\n // this is the case where a 'normal' redirect is happening\n if (serverTokenExchangeFromState(state)) {\n console.log(\n \"handleCallback serverTokenExchangeFromState, redirect to appUrl\",\n appUrl,\n );\n if (!appUrl) {\n throw new Error(\"appUrl undefined. Cannot redirect.\");\n }\n return NextResponse.redirect(`${appUrl}`);\n }\n // return an empty HTML response so the iframe doesn't show any response\n // in the short moment between the redirect and the parent window\n // acknowledging the redirect and closing the iframe\n const response = new NextResponse(\n `<html><span style=\"display:none\">${TOKEN_EXCHANGE_SUCCESS_TEXT}</span></html>`,\n );\n response.headers.set(\"Content-Type\", \"text/html; charset=utf-8\");\n return response;\n}\n\n/**\n * If redirectPath is an absolute path, return it as-is.\n * Otherwise for relative paths, append it to the current domain.\n * @param redirectPath\n * @returns\n */\nconst getAbsoluteRedirectPath = (\n redirectPath: string,\n currentBasePath: string,\n) => new URL(redirectPath, currentBasePath).href;\n\nexport async function handleLogout(\n request: NextRequest,\n config: AuthConfig,\n): Promise<NextResponse> {\n const resolvedConfigs = resolveAuthConfig(config);\n const defaultRedirectPath = resolvedConfigs.loginUrl ?? \"/\";\n const redirectTarget =\n new URL(request.url).searchParams.get(\"redirect\") || defaultRedirectPath;\n\n const isAbsoluteRedirect = /^(https?:\\/\\/|www\\.).+/i.test(redirectTarget);\n\n const appUrl = request.nextUrl.searchParams.get(\"appUrl\");\n\n const finalRedirectUrl = isAbsoluteRedirect\n ? redirectTarget\n : getAbsoluteRedirectPath(\n redirectTarget,\n new URL(appUrl ?? request.url).origin,\n );\n\n const response = NextResponse.redirect(finalRedirectUrl);\n\n clearAuthCookies(config);\n\n try {\n revalidatePath(isAbsoluteRedirect ? finalRedirectUrl : redirectTarget);\n } catch (error) {\n logger.warn(\"Failed to revalidate path after logout:\", error);\n }\n\n return response;\n}\n\n/**\n * Creates an authentication handler for Next.js API routes\n *\n * Usage:\n * ```ts\n * // app/api/auth/[...civicauth]/route.ts\n * import { handler } from '@civic/auth/nextjs'\n * export const GET = handler({\n * // optional config overrides\n * })\n * ```\n */\nexport const handler =\n (authConfig = {}) =>\n async (request: NextRequest): Promise<NextResponse> => {\n const config = resolveAuthConfig(authConfig);\n\n try {\n const pathname = request.nextUrl.pathname;\n const pathSegments = pathname.split(\"/\");\n const lastSegment = pathSegments[pathSegments.length - 1];\n\n switch (lastSegment) {\n case \"challenge\":\n return await handleChallenge(request, config);\n case \"callback\":\n return await handleCallback(request, config);\n case \"logout\":\n return await handleLogout(request, config);\n default:\n throw new AuthError(`Invalid auth route: ${pathname}`, 404);\n }\n } catch (error) {\n logger.error(\"Auth handler error:\", error);\n\n const status = error instanceof AuthError ? error.status : 500;\n const message =\n error instanceof Error ? error.message : \"Authentication failed\";\n\n const response = NextResponse.json({ error: message }, { status });\n\n clearAuthCookies(config);\n return response;\n }\n };\n"]}
|