export declare const TERMS_URL = "https://gryt.chat/terms"; export declare const GUIDELINES_URL = "https://gryt.chat/community-guidelines"; export declare const TERMS_VERSION = "2026-09-03"; export declare const TERMS_STORAGE_KEY = "gryt.termsAgreement"; export interface TermsAgreement { version: string; agreedAt: string; } export interface TermsStorage { read: () => string | null | Promise; write: (value: string) => void | Promise; } /** What storage held, or null when nothing in it is an agreement. */ export declare function parseAgreement(raw: string | null | undefined): TermsAgreement | null; /** Agreeing to newer terms covers older ones, so a downgrade doesn't ask twice. */ export declare function coversTerms(agreement: TermsAgreement | null, version?: string): boolean; export declare function agreementAt(now: Date, version?: string): TermsAgreement; export interface TermsGate { /** Runs `post` once this device has agreed: now, or after the person presses Agree. */ postAfterAgreeing: (post: () => void) => void; agree: () => void; decline: () => void; /** Reads storage ahead of the first post, so that one doesn't wait for it. */ load: () => void; asking: () => boolean; subscribe: (listener: () => void) => () => void; } export declare function createTermsGate(storage: TermsStorage, version?: string, now?: () => Date): TermsGate;