/** The neo4j session shape the reader consumes — kept minimal so a fake can * stand in for the real driver session in unit tests. */ export interface TzSessionLike { run(query: string, params: Record): Promise<{ records: Array<{ get(key: string): unknown; }>; }>; } export type AccountTimezoneSource = 'graph' | 'unset' | 'invalid' | 'unavailable'; /** Read the raw stored timezone from the operator's UserProfile row. Returns the * trimmed string exactly as stored, or null when the row is missing, the value * is absent/blank, or the value is not a string. No IANA validation here — that * is classifyTimezone's job, kept separate so "row present but corrupt" stays * distinguishable from "no row". */ export declare function readRawTimezone(session: TzSessionLike, accountId: string, userId: string): Promise; /** Classify a raw stored value into a usable timezone plus a source that keeps * the three no-timezone reasons distinct: `unset` (no row / blank — the operator * never configured one), `invalid` (a value is stored but is not a real IANA * zone — corrupt/stale, a different failure to diagnose), `graph` (usable). */ export declare function classifyTimezone(raw: string | null): { tz: string | null; source: Extract; }; export interface AccountTimezoneDeps { neo4jUri: string; neo4jUser: string; neo4jPassword: string; } /** Resolve the operator's timezone, fail-open and time-bounded. `graph` — a valid * IANA zone was read. `unset` — the profile has no usable timezone. `invalid` — a * value is stored but is not a real IANA zone. `unavailable` — no neo4j env, * missing ids, a driver/connection error, or the read exceeded the cap. In every * non-`graph` case tz is null and the hook falls back to the server zone. Never * throws; a spawn is never blocked or delayed beyond READ_TIMEOUT_MS on the read. */ export declare function resolveAccountTimezone(deps: AccountTimezoneDeps, accountId: string, userId: string, logger: (line: string) => void): Promise<{ tz: string | null; source: AccountTimezoneSource; }>; //# sourceMappingURL=account-timezone.d.ts.map