@zeushq/nextjs-zidentity
Version:
Next.js SDK for signin in with Zeus Identity
152 lines (142 loc) • 4.66 kB
text/typescript
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
};