/** ~2 minutes: long enough to read a preview and confirm, short enough not to linger. */ export declare const REWIND_TOKEN_TTL_MS = 120000; export interface IssuedRewindToken { readonly token: string; readonly expiresAt: number; } export declare class RewindTokenStore { private readonly now; private readonly ttlMs; private readonly tokens; constructor(now?: () => number, ttlMs?: number); /** Mint a fresh single-use token bound to a plan `fingerprint`. */ issue(fingerprint: string): IssuedRewindToken; /** * Consume `token` for a rewind whose plan has `fingerprint`. Returns true only * when the token exists, has not expired, and was minted for this exact plan. * The token is removed on any consume attempt that finds it, so it can never * be reused. */ consume(token: string, fingerprint: string): boolean; private pruneExpired; } /** The fingerprint a token is bound to, session + turn + scope. */ export declare function rewindFingerprint(sessionId: string, turnId: string | null, scope: string): string; //# sourceMappingURL=tokens.d.ts.map