@open-condo/miniapp-utils
Version:
A set of helper functions / components / hooks used to build new condo apps fast
72 lines (69 loc) • 2.84 kB
text/typescript
import { IncomingMessage, ServerResponse } from 'http';
import { UserinfoResponse } from 'openid-client';
type Session = Record<string, unknown> & {
save: () => Promise<void>;
destroy: () => Promise<void>;
};
type SessionGetter = (req: IncomingMessage, res: ServerResponse) => Promise<Session>;
type OIDCClientConfig = {
serverUrl: string;
clientId: string;
clientSecret: string;
scope?: string;
clientOptions?: Record<string, unknown>;
issuerOptions?: Record<string, unknown>;
};
type LoggerType = {
info: (data: unknown) => void;
error: (data: unknown) => void;
};
type OIDCCallbackData<UserInfo extends Record<string, unknown> = Record<string, never>> = {
accessToken?: string;
refreshToken?: string;
idToken?: string;
userInfo?: UserinfoResponse<UserInfo>;
};
type ErrorHandler = (err: unknown, req: IncomingMessage, res: ServerResponse, next: NextFunction) => void;
interface AbstractApp {
get(endpoint: string, ...handlers: Array<RequestHandler | ErrorHandler>): void;
}
type MiddlewareOptions = {
app: AbstractApp;
apiPrefix?: string;
};
type OnAuthSuccessHandler<UserInfo extends Record<string, unknown> = Record<string, never>> = (req: IncomingMessage, res: ServerResponse, data: OIDCCallbackData<UserInfo>) => void | Promise<void>;
type OIDCMiddlewareOptions<UserInfo extends Record<string, unknown> = Record<string, never>> = {
getSession: SessionGetter;
oidcConfig: OIDCClientConfig;
redirectUri: string | Array<string>;
onAuthSuccess?: OnAuthSuccessHandler<UserInfo>;
middlewareOptions?: MiddlewareOptions;
onError?: ErrorHandler;
logger?: LoggerType;
};
type NextFunction = (err?: unknown) => void;
type RequestHandler = (req: IncomingMessage, res: ServerResponse, next?: NextFunction) => void | Promise<void>;
declare class OIDCMiddleware<UserInfo extends Record<string, unknown> = Record<string, never>> {
private static OIDC_ID_TOKEN_KEY;
private static OIDC_ACCESS_TOKEN_KEY;
private static OIDC_REFRESH_TOKEN_KEY;
private static OIDC_NEXT_URL_KEY;
private static OIDC_CHECKS_KEY;
private static OIDC_REDIRECT_URI_KEY;
private static CHECK_SCHEMA;
private readonly getSession;
private readonly client;
private readonly logger;
private readonly redirectUris;
private readonly onAuthSuccess?;
private readonly onError?;
private readonly middlewareOptions;
private readonly scope?;
static getQueryParams(req: IncomingMessage): URLSearchParams;
constructor({ getSession, oidcConfig, redirectUri, logger, onAuthSuccess, onError, middlewareOptions, }: OIDCMiddlewareOptions<UserInfo>);
private sendError;
getAuthHandler(): RequestHandler;
getCallbackHandler(): RequestHandler;
prepareMiddleware(): AbstractApp | null;
}
export { OIDCMiddleware };