UNPKG

@zeushq/nextjs-zidentity

Version:

Next.js SDK for signin in with Zeus Identity

152 lines (142 loc) 4.66 kB
import { CookieStore, TransientStore, clientFactory, loginHandler as baseLoginHandler, logoutHandler as baseLogoutHandler, callbackHandler as baseCallbackHandler } from './zsession'; import { handlerFactory, callbackHandler, loginHandler, logoutHandler, profileHandler, Handlers, HandleAuth, HandleLogin, HandleProfile, HandleLogout, HandleCallback, LoginOptions, LogoutOptions, GetLoginState, ProfileOptions, CallbackOptions, AfterCallback, AfterRefetch } from './handlers'; import { sessionFactory, accessTokenFactory, SessionCache, GetSession, GetAccessToken, Session, AccessTokenRequest, GetAccessTokenResult, Claims } from './session/'; import { withPageAuthRequiredFactory, withApiAuthRequiredFactory, WithApiAuthRequired, withApiAuthOptionalFactory, WithApiAuthOptional, WithPageAuthRequired, GetServerSidePropsResultWithSession, WithPageAuthRequiredOptions, PageRoute } from './helpers'; import { InitZeusIdentity, SignInWithZeusAuth } from './instance'; import version from './version'; import { getConfig, getLoginUrl, ConfigParameters } from './config'; let instance: SignInWithZeusAuth; function getInstance(): SignInWithZeusAuth { if (instance) { return instance; } instance = initZeusIdentity(); return instance; } export const initZeusIdentity: InitZeusIdentity = (params) => { const { baseConfig, nextConfig } = getConfig(params); // Init base layer (with base config) const getClient = clientFactory(baseConfig, { name: 'nextjs-zidentity', version }); const transientStore = new TransientStore(baseConfig); const cookieStore = new CookieStore(baseConfig); const sessionCache = new SessionCache(baseConfig, cookieStore); const baseHandleLogin = baseLoginHandler(baseConfig, getClient, transientStore); const baseHandleLogout = baseLogoutHandler(baseConfig, getClient, sessionCache); const baseHandleCallback = baseCallbackHandler(baseConfig, getClient, sessionCache, transientStore); // Init Next layer (with next config) const getSession = sessionFactory(sessionCache); const getAccessToken = accessTokenFactory(nextConfig, getClient, sessionCache); const withApiAuthRequired = withApiAuthRequiredFactory(sessionCache); const withApiAuthOptional = withApiAuthOptionalFactory(sessionCache); const withPageAuthRequired = withPageAuthRequiredFactory(nextConfig.routes.login, getSession); const handleLogin = loginHandler(baseHandleLogin, nextConfig); const handleLogout = logoutHandler(baseHandleLogout); const handleCallback = callbackHandler(baseHandleCallback, nextConfig); const handleProfile = profileHandler(getClient, getAccessToken, sessionCache); const handleAuth = handlerFactory({ handleLogin, handleLogout, handleCallback, handleProfile }); return { getSession, getAccessToken, withApiAuthRequired, withApiAuthOptional, withPageAuthRequired, handleLogin, handleLogout, handleCallback, handleProfile, handleAuth }; }; export const getSession: GetSession = (...args) => getInstance().getSession(...args); export const getAccessToken: GetAccessToken = (...args) => getInstance().getAccessToken(...args); export const withApiAuthRequired: WithApiAuthRequired = (...args) => getInstance().withApiAuthRequired(...args); export const withApiAuthOptional: WithApiAuthOptional = (...args) => getInstance().withApiAuthOptional(...args); export const withPageAuthRequired: WithPageAuthRequired = withPageAuthRequiredFactory(getLoginUrl(), getSession); export const handleLogin: HandleLogin = (...args) => getInstance().handleLogin(...args); export const handleLogout: HandleLogout = (...args) => getInstance().handleLogout(...args); export const handleCallback: HandleCallback = (...args) => getInstance().handleCallback(...args); export const handleProfile: HandleProfile = (...args) => getInstance().handleProfile(...args); export const handleAuth: HandleAuth = (...args) => getInstance().handleAuth(...args); export { UserProvider, UserProviderProps, UserProfile, UserContext, useUser, WithPageAuthRequiredProps } from './frontend'; export { ConfigParameters, HandleAuth, HandleLogin, HandleProfile, HandleLogout, HandleCallback, ProfileOptions, Handlers, GetServerSidePropsResultWithSession, WithPageAuthRequiredOptions, PageRoute, WithApiAuthRequired, WithApiAuthOptional, WithPageAuthRequired, SessionCache, GetSession, GetAccessToken, Session, Claims, AccessTokenRequest, GetAccessTokenResult, CallbackOptions, AfterCallback, AfterRefetch, LoginOptions, LogoutOptions, GetLoginState };