export interface GitboyPushUpdate {
    ref: string;
    old: string;
    new: string;
    /** Files changed between old and new; null when gitboy could not say (new branch, deletion, tag, over budget). */
    changedPaths: string[] | null;
    truncated: boolean;
}
export interface GitboyPush {
    deliveryId: string;
    event: "push";
    repository: {
        owner: string;
        name: string;
    } | null;
    updates: GitboyPushUpdate[];
}
export interface GitboyStoreRepo {
    owner: string;
    name: string;
    branch: string;
}
/** True when `header` is `sha256=<hex HMAC-SHA256 of rawBody>` under `secret`. */
export declare function verifyGitboySignature(secret: string, rawBody: Buffer, header: string | undefined): boolean;
type Headers = Record<string, string | string[] | undefined>;
/** A gitboy `push` delivery, or null for any other event, a missing delivery id or a malformed body. Never throws. */
export declare function parseGitboyPush(rawBody: Buffer, headers: Headers): GitboyPush | null;
/**
 * True when the push is to the store's repository (owner and name compared case-insensitively,
 * as gitboy resolves them) and moves `refs/heads/<branch>` exactly.
 */
export declare function storePushMatches(push: GitboyPush, store: GitboyStoreRepo): boolean;
export declare const DEFAULT_DELIVERY_LOG_SIZE = 1000;
/** Recently seen delivery ids, oldest evicted first. gitboy retries keep the delivery id. */
export declare class DeliveryLog {
    private readonly capacity;
    private readonly ids;
    constructor(capacity?: number);
    /** Records `id` and reports whether it had already been seen. */
    seen(id: string): boolean;
    get size(): number;
}
export {};
