///
import { ComponentType } from 'react';
import { IdTokenClaims, UserinfoResponse } from 'openid-client';
import { AbortSignal } from 'abort-controller';
import { Server } from '@hapi/hapi';
import { Logger } from 'pino';
interface ChunkDependencies {
[chunkName: string]: {
modules: string[];
styles: {
relPath: string;
css: string;
}[];
};
}
interface ServerAuthAuthenticated {
isAuthenticated: true;
credentials: ServerAuthCredentials;
}
interface ServerAuthUnauthenticated {
error?: unknown;
isAuthenticated: false;
}
declare type ServerAuth = ServerAuthAuthenticated | ServerAuthUnauthenticated;
interface ServerAuthCredentials {
audience?: string;
accessToken: string;
claims: IdTokenClaims;
expiresAt: number;
idToken: string;
scope: string[];
user: UserinfoResponse;
}
interface ServerFunctionContext {
auth: ServerAuth;
signal?: AbortSignal;
}
interface ServerFunction {
(ctx: ServerFunctionContext, ...args: any[]): any;
}
declare global {
var __nostalgie_css: (buildPath: string, css: string) => void;
}
interface ServerRenderRequest {
auth: ServerAuth;
automaticReload?: boolean;
path: string;
}
interface ServerRendererSettings {
defaultDeadline: number;
enableTailwind: boolean;
maxIterations: number;
}
interface ServerRendererOptions extends Partial {
}
declare class ServerRenderer {
private readonly app;
private readonly functions;
private readonly chunkDependencies;
private readonly settings;
constructor(app: ComponentType, functions: Record, chunkDependencies: ChunkDependencies, options?: ServerRendererOptions);
invokeFunction(functionName: string, ctx: ServerFunctionContext, args: any[]): Promise;
renderAppOnServer(request: ServerRenderRequest): Promise<{
headers?: Record;
html: string;
queries: number;
renderCount: number;
statusCode?: number;
latency: number;
}>;
private serverAuthToClientAuth;
}
interface NostalgieAuthOptions {
issuer: string;
clientId: string;
clientSecret: string;
cookieSecret: string;
}
interface StartServerOptions {
automaticReload?: boolean;
buildDir?: string;
host?: string;
logger?: Logger;
port?: number;
signal?: AbortSignal;
auth?: NostalgieAuthOptions;
}
declare function main(options: StartServerOptions): Promise;
interface NostalgieServer extends Server {
methods: {
invokeFunction: ServerRenderer['invokeFunction'];
reloadPool(): Promise;
renderAppOnServer: ServerRenderer['renderAppOnServer'];
};
}
declare function initializeServer(options: StartServerOptions): Promise;
declare function startServer(options: StartServerOptions): Promise;
export { NostalgieServer, StartServerOptions, initializeServer, main, startServer };