import { GetServerSidePropsContext, GetServerSidePropsResult, PreviewData } from 'next'; import { ParsedUrlQuery } from 'querystring'; import { getLoginSession } from '../config/auth/session'; export type ExtendedGetServerSideProps< P extends { [key: string]: any } = { [key: string]: any }, Q extends ParsedUrlQuery = ParsedUrlQuery, D extends PreviewData = PreviewData, > = ( context: GetServerSidePropsContext, session: Awaited>, ) => Promise>; const withPageAuthRequired =

( fn?: ExtendedGetServerSideProps

, ) => async (context: GetServerSidePropsContext) => { try { const { req } = context; const session = await getLoginSession(req); if (!fn) { return { props: {} }; } return await fn(context, session); } catch (error) { return { redirect: { destination: '/login', permanent: false } }; } }; export default withPageAuthRequired;