import { type Account } from '../types/auth';
import { type MetricQuery } from '../types/metricQuery';
/**
 * Returns the account's stored user-level timezone preference, or null for
 * anonymous viewers (embeds / JWT) who have no profile.
 */
export declare function getAccountUserTimezone(account: Account): string | null;
/**
 * Resolves the effective timezone for a query.
 *
 * `sessionTimezone` is a host-controlled per-session override (e.g. an embed URL
 * `?timezone=` param) that outranks everything. Otherwise the resolution is
 * driven by the metricQuery.timezone setting:
 *   - `project_timezone` (what saved charts store by default) or **absent** → the
 *     project TZ for every viewer, tracking project-TZ changes, so the chart is
 *     deterministic across its audience. This replaces the old "unpinned charts
 *     fall through to the viewer's profile" behaviour.
 *   - `user_timezone` → the viewer's profile TZ, falling back to the project
 *     TZ when the viewer has no profile (anonymous embeds/JWT, or no stored
 *     preference).
 *   - any other value → an override IANA zone, frozen regardless of viewer/project.
 *
 * Whether the resolved zone is actually applied to the query is gated by the
 * calling service (EnableTimezoneSupport). The result is validated to prevent
 * SQL injection — it is interpolated into warehouse SQL (e.g. AT TIME ZONE '...').
 */
export declare function resolveQueryTimezone({ sessionTimezone, metricQuery, projectTimezone, userTimezone, }: {
    sessionTimezone: string | null;
    metricQuery: Pick<MetricQuery, 'timezone'>;
    projectTimezone: string;
    userTimezone: string | null;
}): string;
//# sourceMappingURL=resolveQueryTimezone.d.ts.map