type Font = { family: string[]; label: string; url?: string; }; type ThemeTemplate = { fonts: { font1: Font; font2: Font; }; }; type Operator = 'equal' | 'not-equal' | 'contains' | 'greater-than' | 'greater-than-or-equal' | 'less-than' | 'less-than-or-equal' | 'empty' | 'not-empty' | 'is-true' | 'is-false' | 'in' | 'not-in' | 'in-range' | 'not-in-range' | 'devised-by'; type Style = { dark: ThemeTemplate; light: ThemeTemplate; }; export type ClientScript = { id: string; initArgs: Record; resultKey?: string; }; export type ComponentsDynamicAttrs = { attributes: Record; }; export type ComponentsConfig = Record & { componentsDynamicAttrs?: Record; }; export type ClientCondition = { operator: Operator; key: string; predicate?: string | number; met: ClientConditionResult; unmet?: ClientConditionResult; }; export type ClientConditionResult = { screenId: string; screenName: string; clientScripts?: ClientScript[]; interactionId: string; componentsConfig?: ComponentsConfig; }; export type FlowConfig = { startScreenId?: string; startScreenName?: string; version: number; targetLocales?: string[]; conditions?: ClientCondition[]; condition?: ClientCondition; fingerprintEnabled?: boolean; fingerprintKey?: string; }; export type ProjectConfiguration = { componentsVersion: string; componentsVersionSri?: string; cssTemplate: Style; flows: { [key: string]: FlowConfig; }; styles: Record; }; export type Config = { projectConfig: ProjectConfiguration; executionContext: { geo: string; }; }; export {};