import type { PaymentRequirements } from "@x402/core/types";
import { type RequestBindingExtra } from "./binding.js";
import { type DecodedInvoice } from "./bolt11.js";
import { type LnbtcErrorReason } from "./constants.js";
/**
 * Throws an {@link LnbtcError} with the given reason.
 *
 * @param reason - Stable reason
 * @returns Never returns
 */
export declare function reject(reason: LnbtcErrorReason): never;
/**
 * Validates the core requirement terms (step 2 of facilitator validation).
 *
 * @param req - Payment requirements
 * @param networks - Supported networks mapped to BOLT11 currency
 */
export declare function validateCoreTerms(req: PaymentRequirements, networks: Readonly<Record<string, string>>): void;
/**
 * Validates the transfer method and payment flow of an `extra` object.
 *
 * @param extra - Requirements `extra`
 */
export declare function validateMethodAndFlow(extra: Record<string, unknown> | undefined): void;
/**
 * Validates every requirement field a client or server checks before paying or
 * issuing: core terms, method, flow, and binding fields.
 *
 * @param req - Payment requirements
 * @param networks - Supported networks mapped to BOLT11 currency
 * @returns The validated binding fields
 */
export declare function validateRequirements(req: PaymentRequirements, networks: Readonly<Record<string, string>>): RequestBindingExtra;
/**
 * Options for invoice validation.
 */
export interface InvoiceCheckOptions {
    /** Validation time, Unix seconds. */
    now: number;
    /** Non-negative clock-skew allowance, seconds. */
    skew: number;
}
/**
 * Strictly decodes an invoice and checks it against the requirements: the
 * facilitator's step 5, and the client and server pre-payment checks except
 * expiry (see {@link checkExpiry}).
 *
 * @param invoice - BOLT11 invoice text
 * @param req - Requirements whose terms the invoice must match
 * @param expectedRequestHash - The expected request hash, lowercase hex
 * @param networks - Supported networks mapped to BOLT11 currency
 * @param options - Time and expiry policy
 * @returns The decoded invoice
 */
export declare function validateInvoice(invoice: unknown, req: PaymentRequirements, expectedRequestHash: string, networks: Readonly<Record<string, string>>, options: InvoiceCheckOptions): DecodedInvoice;
/**
 * Applies an expiry policy to a decoded invoice.
 *
 * @param invoice - Decoded invoice
 * @param options - Validation time and skew
 * @param policy - `unexpired`: the invoice must not have expired at `now`
 *   (client, server). `settlement`: the paid-but-expired window, valid through
 *   `invoice_end + skew` inclusive (facilitator).
 */
export declare function checkExpiry(invoice: DecodedInvoice, options: InvoiceCheckOptions, policy: "unexpired" | "settlement"): void;
/**
 * Checks that a network is one of the configured networks (own keys only, so
 * names such as `constructor` never match).
 *
 * @param network - Candidate network
 * @param networks - Supported networks mapped to BOLT11 currency
 * @returns Whether the network is supported
 */
export declare function isSupportedNetwork(network: unknown, networks: Readonly<Record<string, string>>): network is string;
/**
 * Validates a clock-skew allowance.
 *
 * @param skew - Seconds
 */
export declare function validateSkew(skew: number): void;
/**
 * Checks for a lowercase compressed secp256k1 public key on the curve.
 *
 * @param value - Candidate
 * @returns Whether it is valid
 */
export declare function isCompressedPubkey(value: unknown): value is string;
/**
 * Current Unix time in whole seconds.
 *
 * @returns Seconds since the epoch
 */
export declare function unixNow(): number;
//# sourceMappingURL=validation.d.ts.map