///
import express from 'express';
import persist from 'node-persist';
import { Jwt } from '../util/jwt.js';
import { CoralJwtPayload, NintendoAccountIdTokenJwtPayload } from '../util/types.js';
import { HttpServer } from '../util/http-server.js';
import { DeviceConnection, DevicePool } from './devices.js';
import MetricsCollector from './metrics.js';
import { FRequest, FResult, PackageInfo } from './types.js';
export default class Server extends HttpServer {
readonly devices: DevicePool;
readonly metrics: MetricsCollector | null;
validate_tokens: boolean;
strict_validate: boolean;
reattach: (() => void) | null;
health_ttl: number;
readonly app: express.Express;
storage: persist.LocalStorage | null;
limits_coral: [requests: number, period_ms: number] | null;
limits_webservice: [requests: number, period_ms: number] | null;
last_result: {
req: express.Request;
data?: FRequest;
result: FResult;
device?: DeviceConnection;
time: Date;
dv?: number;
dw?: number;
da?: number;
} | null;
constructor(devices: DevicePool, metrics?: MetricsCollector | null);
setDeviceHeaders(res: express.Response, device: DeviceConnection): void;
handleDevicesRequest(req: express.Request, res: express.Response): Promise<{
devices: {
busy: boolean;
id: string;
name: string;
data: {};
}[];
worker_count: number;
available_count: number;
queue: number;
}>;
handleConfigRequest(req: express.Request, res: express.Response): Promise<{
versions: (PackageInfo & {
platform: string;
build: number;
worker_count: number;
})[];
nso_version: string;
}>;
handleFRequest(req: express.Request, res: express.Response): Promise<{
f: string;
timestamp: string | number | undefined;
request_id: string | undefined;
warnings: {
error: string;
error_message: string;
}[] | undefined;
}>;
handleHealthRequest(req: express.Request, res: express.Response): Promise<{
last_result_at: string;
worker_count: number;
available_count: number;
queue: number;
}>;
callWithFridaScript(req: express.Request, res: express.Response, fn: (api: DeviceConnection, queue?: number, attach?: number, device?: DeviceConnection) => Promise, platform?: string | null, version?: string | null, wait?: boolean): Promise;
validateFRequest(req: express.Request, data: FRequest, strict?: boolean, warnings?: {
error: string;
error_message: string;
}[]): Promise;
validateToken(req: express.Request, jwt: Jwt, sig: Buffer, hash_method: '1' | '2', _errors: {
error: string;
error_message: string;
}[], warnings?: {
error: string;
error_message: string;
}[]): Promise;
}