@zeushq/nextjs-zidentity
Version:
Next.js SDK for signin in with Zeus Identity
108 lines • 3.33 kB
TypeScript
import { NextApiResponse, NextApiRequest } from 'next';
import { AuthorizationParameters, HandleLogin as BaseHandleLogin } from '../zsession';
import { NextConfig } from '../config';
/**
* Use this to store additional state for the user before they visit the Identity Provider to login.
*
* ```js
* // pages/api/auth/[...zidentity].js
* import { handleAuth, handleLogin } from '@zeushq/nextjs-zidentity';
*
* const getLoginState = (req, loginOptions) => {
* return { basket_id: getBasketId(req) };
* };
*
* export default handleAuth({
* async login(req, res) {
* try {
* await handleLogin(req, res, { getLoginState });
* } catch (error) {
* res.status(error.status || 500).end(error.message);
* }
* }
* });
* ```
*
* @category Server
*/
export declare type GetLoginState = (req: NextApiRequest, options: LoginOptions) => {
[key: string]: any;
};
/**
* Authorization params to pass to the login handler.
*
* @category Server
*/
export interface AuthorizationParams extends Partial<AuthorizationParameters> {
/**
* The invitation id to join an organization.
*
* To create a link for your user's to accept an organization invite, read the `invitation` and `organization`
* query params and pass them to the authorization server to log the user in:
*
* ```js
* // pages/api/invite.js
* import { handleLogin } from '@zeushq/nextjs-zidentity';
*
* export default async function invite(req, res) {
* try {
* const { invitation, organization } = req.query;
* if (!invitation) {
* res.status(400).end('Missing "invitation" parameter');
* }
* await handleLogin(req, res, {
* authorizationParams: {
* invitation,
* organization
* }
* });
* } catch (error) {
* res.status(error.status || 500).end(error.message);
* }
* } ;
* ```
*
* Your invite url can then take the format:
* `https://example.com/api/invite?invitation=invitation_id&organization=org_id`
*/
invitation?: string;
/**
* This is useful to specify instead of {@Link NextConfig.organization} when your app has multiple
* organizations, it should match {@Link CallbackOptions.organization}.
*/
organization?: string;
/**
* Redirect to signup route instead of login
*/
signup?: boolean;
}
/**
* Custom options to pass to login.
*
* @category Server
*/
export interface LoginOptions {
/**
* Override the default {@link BaseConfig.authorizationParams authorizationParams}
*/
authorizationParams?: AuthorizationParams;
/**
* URL to return to after login, overrides the Default is {@link BaseConfig.baseURL}
*/
returnTo?: string;
/**
* Generate a unique state value for use during login transactions.
*/
getLoginState?: GetLoginState;
}
/**
* The handler for the `api/auth/login` route.
*
* @category Server
*/
export declare type HandleLogin = (req: NextApiRequest, res: NextApiResponse, options?: LoginOptions) => Promise<void>;
/**
* @ignore
*/
export default function handleLoginFactory(handler: BaseHandleLogin, nextConfig: NextConfig): HandleLogin;
//# sourceMappingURL=login.d.ts.map