/**
 * Credentials a lender provisioned onto this device, and the leases that keep
 * them legitimate.
 *
 * This is the borrower's half of **complete** sharing. The credential itself
 * lives in the normal token store and is routed like any other account — that is
 * the point, since it survives the lender being offline. What lives here is the
 * proof that the lender still consents, and the machinery to keep it fresh.
 *
 * **The enforcement is cooperative and the code should say so.** A resident
 * credential sits on a machine its holder controls, and the token store is
 * obfuscated rather than encrypted. Someone determined to bypass this can. What
 * these checks buy is that the honest path is also the correct one: a borrower
 * running the shipped software stops when the lender says stop, and stops on its
 * own if the lender becomes unreachable for longer than the lease allows.
 *
 * @module proxy/residentGrants
 */
import type { ProxyResidentGrant, ProxyShareLease, ProxyShareLeaseVerdict } from "../types/index.js";
export declare function initResidentGrants(filePath: string): void;
export declare function listResidentGrants(): Promise<ProxyResidentGrant[]>;
export declare function getResidentGrantForAccount(accountKeyOrLabel: string): Promise<ProxyResidentGrant | undefined>;
export declare function saveResidentGrant(grant: ProxyResidentGrant): Promise<void>;
export declare function removeResidentGrant(accountLabel: string): Promise<boolean>;
/**
 * May this resident account serve right now?
 *
 * Returns `undefined` for an account that is not resident at all — the node's
 * own credentials, which answer to nobody.
 */
export declare function evaluateResidentAccount(accountKeyOrLabel: string, now?: number): Promise<ProxyShareLeaseVerdict | undefined>;
/** Accumulate spend the borrower owes the lender an account of. */
export declare function recordResidentSpend(accountLabel: string, coins: number): Promise<void>;
/**
 * Check in with a lender: report what was spent, collect a fresh lease.
 *
 * Reporting happens **before** the new lease is stored, and the counters are
 * only drawn down once the lender has acknowledged them — a heartbeat that
 * fails halfway leaves the spend to be reported again rather than losing it.
 *
 * A `stop` answer is honored immediately by clearing the lease's grace: the
 * lender has said no, and there is nothing to wait out.
 */
export declare function heartbeatResidentGrant(resident: ProxyResidentGrant, now?: number): Promise<{
    ok: boolean;
    stopped: boolean;
    detail: string;
}>;
/**
 * Check in with every lender whose heartbeat is due.
 *
 * Best-effort by design: a lender being unreachable is the case the offline
 * grace exists for, not an error to surface.
 */
export declare function heartbeatDueResidentGrants(now?: number): Promise<void>;
/** The lease a resident account is currently operating under. */
export declare function residentLease(resident: ProxyResidentGrant): ProxyShareLease;
