import { NtpPacket } from "ntp-packet-parser";
import { NtpTimeResult } from "./NtpTimeResult.js";
import { RecursivePartial } from "./RecursivePartial.js";
export interface NtpTimeSyncConstructorOptions {
    servers: string[];
    sampleCount: number;
    replyTimeout: number;
    ntpDefaults: {
        port: number;
        version: number;
        tolerance: number;
        minPoll: number;
        maxPoll: number;
        maxDispersion: number;
        minDispersion: number;
        maxDistance: number;
        maxStratum: number;
        precision: number;
        referenceDate: Date;
    };
}
export interface NtpTimeSyncOptions extends Omit<NtpTimeSyncConstructorOptions, "servers"> {
    servers: ReadonlyArray<{
        host: string;
        port: number;
    }>;
}
export declare const NtpTimeSyncDefaultOptions: {
    servers: string[];
    sampleCount: number;
    replyTimeout: number;
    ntpDefaults: {
        port: number;
        version: number;
        tolerance: number;
        minPoll: number;
        maxPoll: number;
        maxDispersion: number;
        minDispersion: number;
        maxDistance: number;
        maxStratum: number;
        precision: number;
        referenceDate: Date;
    };
};
interface NtpReceivedPacket extends Partial<NtpPacket> {
    destinationTimestamp: Date;
}
export declare class NtpTimeSync {
    private static singleton;
    private options;
    private samples;
    private lastPoll;
    private lastResult;
    constructor(options?: RecursivePartial<NtpTimeSyncConstructorOptions>);
    private recursiveResolveOptions;
    private static isPlainObject;
    /**
     * Parse a server entry into a host/port pair. Supports:
     *   - "host" / "1.2.3.4"                    → default port
     *   - "host:123" / "1.2.3.4:123"            → explicit port
     *   - "[2001:db8::1]" / "[2001:db8::1]:123" → bracketed IPv6, optional port
     *   - "2001:db8::1" / "::1"                 → bare IPv6 literal, default port
     * A bare (unbracketed) IPv6 literal cannot carry a port because the colons
     * are ambiguous, so the default port is always used for it.
     */
    private static parseServer;
    /**
     * Returns a singleton
     */
    static getInstance(options?: RecursivePartial<NtpTimeSyncConstructorOptions>): NtpTimeSync;
    private collectSamples;
    /**
     * @param {boolean} force Force NTP update
     */
    getTime(force?: boolean): Promise<NtpTimeResult>;
    /**
     * Will return the correct timestamp when function was called
     */
    now(force?: boolean): Promise<Date>;
    /**
     * @param {Integer} leapIndicator, defaults to 3 (unsynchronized)
     * @param {Integer} ntpVersion, defaults to `options.ntpDefaults.version`
     * @param {Integer} mode, defaults to 3 (client)
     * @return {Buffer}
     */
    private createPacket;
    private static cleanup;
    getNetworkTime(server: string, port?: number): Promise<NtpReceivedPacket>;
    /**
     * Test if response is acceptable for synchronization
     */
    private acceptResponse;
    /**
     * Average for a list of numbers
     */
    private static avg;
    /**
     * Standard deviation for a list of numbers
     */
    private static stdDev;
}
export {};
//# sourceMappingURL=NtpTimeSync.d.ts.map