import { FullSignalK } from '@signalk/signalk-schema';
import SubscriptionManager from './subscriptionmanager';
export interface HelloMessage {
    name: string;
    version: string;
    self: string;
    roles: string[];
    timestamp: Date;
}
export interface SecurityStrategy {
    isDummy: () => boolean;
    allowReadOnly: () => boolean;
    shouldFilterDeltas: () => boolean;
    filterReadDelta: (user: string, delta: any) => any;
}
interface Bus {
    onValue: (callback: (value: any) => any) => () => void;
}
export interface StreamBundle {
    keys: {
        onValue: (arg0: (key: any) => void) => void;
    };
    getBus: (path: string) => Bus;
}
export interface SignalKServer {
    config: {
        defaults: any;
    };
    handleMessage: (providerId: string, message: any) => void;
    getHello: () => HelloMessage;
    signalk: FullSignalK;
    selfId: string;
    selfType: string;
    subscriptionmanager: SubscriptionManager;
    securityStrategy: SecurityStrategy;
}
export declare class Interface {
    start?: () => void;
    stop?: () => void;
    mdns?: MdnsAdvertisement;
}
export interface MdnsAdvertisement {
    name: string;
    type: string;
    port: number;
}
export interface Unsubscribes extends Array<() => void> {
}
export interface WithContext {
    context: Context;
}
export declare type ContextMatcher = (_: WithContext) => boolean;
export interface NormalizedDelta extends WithContext {
    $source: SourceRef;
    source: Source;
    path: Path;
    value: Value;
    isMeta: boolean;
}
export declare type SourceRef = string;
export declare type Source = any;
export declare type Delta = any;
export declare type Path = string;
export declare type Context = string;
export declare type Value = object | number | string | null;
export interface Position {
    latitude: number;
    longitude: number;
}
export {};
