import { Request, Application } from 'express';
import { Reply, RequestState } from './requestResponse';
import { ConfigApp } from './config/config';
import { WithSecurityStrategy } from './security';
interface WsInterface {
    canHandlePut: (path: string, source: string | undefined) => boolean;
    handlePut: (requestId: string, context: string, path: string, source: string | undefined, value: unknown) => Promise<Reply>;
}
interface PutAppInterfaces {
    ws?: WsInterface;
    [key: string]: unknown;
}
interface PutApp extends Application {
    config: ConfigApp['config'];
    intervals: NodeJS.Timeout[];
    interfaces: PutAppInterfaces;
    signalk: ConfigApp['signalk'];
    handleMessage: ConfigApp['handleMessage'];
    securityStrategy: WithSecurityStrategy['securityStrategy'];
    registerActionHandler?: typeof registerActionHandler;
    deRegisterActionHandler?: typeof deRegisterActionHandler;
}
interface PathApp {
    intervals: NodeJS.Timeout[];
    interfaces: PutAppInterfaces;
    securityStrategy: WithSecurityStrategy['securityStrategy'];
}
type ActionCallback = (reply: ActionResult) => void;
interface ActionResult {
    state: RequestState | 'SUCCESS' | 'FAILURE' | 'PENDING';
    statusCode?: number;
    message?: string;
}
type ActionHandler = (context: string, path: string, value: unknown, callback: ActionCallback) => ActionResult | void;
interface PutBody {
    value: unknown;
    source?: string;
}
interface SkRequest extends Request {
    skPrincipal?: {
        identifier: string;
    };
}
export declare function start(app: PutApp): void;
export declare function deletePath(app: PathApp, contextParam: string | null, path: string, req?: SkRequest | null, requestId?: string | null, updateCb?: (reply: Reply) => void): Promise<Reply>;
export declare function putPath(app: PathApp, contextParam: string | null, path: string, body: PutBody, req?: SkRequest | null, requestId?: string | null, updateCb?: (reply: Reply) => void): Promise<Reply>;
export declare function registerActionHandler(context: string, path: string, source: string, callback: ActionHandler): () => void;
export declare function deRegisterActionHandler(context: string, path: string, source: string, callback: ActionHandler): void;
export {};
//# sourceMappingURL=put.d.ts.map