///
import { AbstractLocalServer, ServerSettings, ServerInitialSettings } from "./browser";
import type { Socket } from "socket.io";
import type { Express, Request, Response } from "express";
import * as express from "express";
import { Server } from "http";
import { DbUserAccountDetails } from "./schema/user";
import type { IvipBaseApp } from "../app";
import { ConnectedClient } from "./shared/clients";
import { SimpleCache } from "ivipbase-core";
export { ServerSettings };
export type { ServerInitialSettings };
export declare const isPossiblyServer = true;
export type HttpApp = express.Express;
export type HttpRouter = express.Router;
export type HttpSocket = Socket;
export type HttpRequest = express.Request;
export type HttpResponse = express.Response;
export { Express, Request, Response };
type expressRouteMethod = "get" | "put" | "post" | "delete";
type HttpMethod = expressRouteMethod | "GET" | "PUT" | "POST" | "DELETE";
export interface RouteRequestEnvironment {
/** Se a solicitação tiver um token "Authentication: bearer", o usuário será associado à solicitação recebida */
user?: DbUserAccountDetails;
/** Se o contexto for enviado pelo cabeçalho DataBase-Context, será associado à solicitação recebida */
context: {
[key: string]: any;
};
database_name?: string;
}
export type RouteRequest = Request & Partial;
export declare class LocalServer extends AbstractLocalServer {
protected paused: boolean;
readonly isServer: boolean;
readonly app: HttpApp;
readonly router: HttpRouter;
readonly server: Server;
readonly clients: Map;
authCache: SimpleCache;
readonly metaInfoCache: SimpleCache;
stats: Record;
cpuUsage: number;
networkStats: {
sent: number;
received: number;
};
memoryUsage: {
total: number;
free: number;
used: number;
};
timestamp: number;
}>;
readonly tokenSalt: {
[dbName: string]: string;
};
constructor(localApp: IvipBaseApp, settings?: Partial);
init(): Promise;
/**
* Cria um roteador Express
* @returns
*/
createRouter(): express.Router;
/**
* Interrompe temporariamente o servidor de lidar com conexões recebidas, mas mantém as conexões existentes abertas
*/
pause(): Promise;
/**
* Resumo do tratamento de conexões de entrada
*/
resume(): Promise;
/**
* Estende a API do servidor com suas próprias funções personalizadas. Seu manipulador estará ouvindo
* no caminho /ext/[nome do banco de dados]/[ext_path].
* @example
* // Lado do servidor:
* const _quotes = [...];
* server.extend('get', 'quotes/random', (req, res) => {
* let index = Math.round(Math.random() * _quotes.length);
* res.send(quotes[index]);
* })
* // Lado do cliente:
* client.callExtension('get', 'quotes/random')
* .then(quote => {
* console.log(`Got random quote: ${quote}`);
* })
* @param method Método HTTP para associar
* @param ext_path Caminho para associar (anexado a /ext/)
* @param handler Seu callback de manipulador de solicitação do Express
*/
extend(database: string, method: HttpMethod, ext_path: string, handler: (req: HttpRequest, res: HttpResponse) => void): void;
}
//# sourceMappingURL=index.d.ts.map