export type AnyModel = CookieJar | Environment | Folder | GraphQlIntrospection | GrpcConnection | GrpcEvent | GrpcRequest | HttpRequest | HttpResponse | HttpResponseEvent | KeyValue | Plugin | Settings | SyncState | WebsocketConnection | WebsocketEvent | WebsocketRequest | Workspace | WorkspaceMeta;
export type ClientCertificate = {
    host: string;
    port: number | null;
    crtFile: string | null;
    keyFile: string | null;
    pfxFile: string | null;
    passphrase: string | null;
    enabled?: boolean;
};
export type Cookie = {
    raw_cookie: string;
    domain: CookieDomain;
    expires: CookieExpires;
    path: [string, boolean];
};
export type CookieDomain = {
    "HostOnly": string;
} | {
    "Suffix": string;
} | "NotPresent" | "Empty";
export type CookieExpires = {
    "AtUtc": string;
} | "SessionEnd";
export type CookieJar = {
    model: "cookie_jar";
    id: string;
    createdAt: string;
    updatedAt: string;
    workspaceId: string;
    cookies: Array<Cookie>;
    name: string;
};
export type DnsOverride = {
    hostname: string;
    ipv4: Array<string>;
    ipv6: Array<string>;
    enabled?: boolean;
};
export type EditorKeymap = "default" | "vim" | "vscode" | "emacs";
export type EncryptedKey = {
    encryptedKey: string;
};
export type Environment = {
    model: "environment";
    id: string;
    workspaceId: string;
    createdAt: string;
    updatedAt: string;
    name: string;
    public: boolean;
    parentModel: string;
    parentId: string | null;
    variables: Array<EnvironmentVariable>;
    color: string | null;
    sortPriority: number;
};
export type EnvironmentVariable = {
    enabled?: boolean;
    name: string;
    value: string;
    id?: string;
};
export type Folder = {
    model: "folder";
    id: string;
    createdAt: string;
    updatedAt: string;
    workspaceId: string;
    folderId: string | null;
    authentication: Record<string, any>;
    authenticationType: string | null;
    description: string;
    headers: Array<HttpRequestHeader>;
    name: string;
    sortPriority: number;
};
export type GraphQlIntrospection = {
    model: "graphql_introspection";
    id: string;
    createdAt: string;
    updatedAt: string;
    workspaceId: string;
    requestId: string;
    content: string | null;
};
export type GrpcConnection = {
    model: "grpc_connection";
    id: string;
    createdAt: string;
    updatedAt: string;
    workspaceId: string;
    requestId: string;
    elapsed: number;
    error: string | null;
    method: string;
    service: string;
    status: number;
    state: GrpcConnectionState;
    trailers: {
        [key in string]?: string;
    };
    url: string;
};
export type GrpcConnectionState = "initialized" | "connected" | "closed";
export type GrpcEvent = {
    model: "grpc_event";
    id: string;
    createdAt: string;
    updatedAt: string;
    workspaceId: string;
    requestId: string;
    connectionId: string;
    content: string;
    error: string | null;
    eventType: GrpcEventType;
    metadata: {
        [key in string]?: string;
    };
    status: number | null;
};
export type GrpcEventType = "info" | "error" | "client_message" | "server_message" | "connection_start" | "connection_end";
export type GrpcRequest = {
    model: "grpc_request";
    id: string;
    createdAt: string;
    updatedAt: string;
    workspaceId: string;
    folderId: string | null;
    authenticationType: string | null;
    authentication: Record<string, any>;
    description: string;
    message: string;
    metadata: Array<HttpRequestHeader>;
    method: string | null;
    name: string;
    service: string | null;
    sortPriority: number;
    url: string;
};
export type HttpRequest = {
    model: "http_request";
    id: string;
    createdAt: string;
    updatedAt: string;
    workspaceId: string;
    folderId: string | null;
    authentication: Record<string, any>;
    authenticationType: string | null;
    body: Record<string, any>;
    bodyType: string | null;
    description: string;
    headers: Array<HttpRequestHeader>;
    method: string;
    name: string;
    sortPriority: number;
    url: string;
    urlParameters: Array<HttpUrlParameter>;
};
export type HttpRequestHeader = {
    enabled?: boolean;
    name: string;
    value: string;
    id?: string;
};
export type HttpResponse = {
    model: "http_response";
    id: string;
    createdAt: string;
    updatedAt: string;
    workspaceId: string;
    requestId: string;
    bodyPath: string | null;
    contentLength: number | null;
    contentLengthCompressed: number | null;
    elapsed: number;
    elapsedHeaders: number;
    elapsedDns: number;
    error: string | null;
    headers: Array<HttpResponseHeader>;
    remoteAddr: string | null;
    requestContentLength: number | null;
    requestHeaders: Array<HttpResponseHeader>;
    status: number;
    statusReason: string | null;
    state: HttpResponseState;
    url: string;
    version: string | null;
};
export type HttpResponseEvent = {
    model: "http_response_event";
    id: string;
    createdAt: string;
    updatedAt: string;
    workspaceId: string;
    responseId: string;
    event: HttpResponseEventData;
};
/**
 * Serializable representation of HTTP response events for DB storage.
 * This mirrors `yaak_http::sender::HttpResponseEvent` but with serde support.
 * The `From` impl is in yaak-http to avoid circular dependencies.
 */
export type HttpResponseEventData = {
    "type": "setting";
    name: string;
    value: string;
} | {
    "type": "info";
    message: string;
} | {
    "type": "redirect";
    url: string;
    status: number;
    behavior: string;
} | {
    "type": "send_url";
    method: string;
    scheme: string;
    username: string;
    password: string;
    host: string;
    port: number;
    path: string;
    query: string;
    fragment: string;
} | {
    "type": "receive_url";
    version: string;
    status: string;
} | {
    "type": "header_up";
    name: string;
    value: string;
} | {
    "type": "header_down";
    name: string;
    value: string;
} | {
    "type": "chunk_sent";
    bytes: number;
} | {
    "type": "chunk_received";
    bytes: number;
} | {
    "type": "dns_resolved";
    hostname: string;
    addresses: Array<string>;
    duration: bigint;
    overridden: boolean;
};
export type HttpResponseHeader = {
    name: string;
    value: string;
};
export type HttpResponseState = "initialized" | "connected" | "closed";
export type HttpUrlParameter = {
    enabled?: boolean;
    name: string;
    value: string;
    id?: string;
};
export type KeyValue = {
    model: "key_value";
    id: string;
    createdAt: string;
    updatedAt: string;
    key: string;
    namespace: string;
    value: string;
};
export type Plugin = {
    model: "plugin";
    id: string;
    createdAt: string;
    updatedAt: string;
    checkedAt: string | null;
    directory: string;
    enabled: boolean;
    url: string | null;
};
export type ProxySetting = {
    "type": "enabled";
    http: string;
    https: string;
    auth: ProxySettingAuth | null;
    bypass: string;
    disabled: boolean;
} | {
    "type": "disabled";
};
export type ProxySettingAuth = {
    user: string;
    password: string;
};
export type Settings = {
    model: "settings";
    id: string;
    createdAt: string;
    updatedAt: string;
    appearance: string;
    clientCertificates: Array<ClientCertificate>;
    coloredMethods: boolean;
    editorFont: string | null;
    editorFontSize: number;
    editorKeymap: EditorKeymap;
    editorSoftWrap: boolean;
    hideWindowControls: boolean;
    useNativeTitlebar: boolean;
    interfaceFont: string | null;
    interfaceFontSize: number;
    interfaceScale: number;
    openWorkspaceNewWindow: boolean | null;
    proxy: ProxySetting | null;
    themeDark: string;
    themeLight: string;
    updateChannel: string;
    hideLicenseBadge: boolean;
    autoupdate: boolean;
    autoDownloadUpdates: boolean;
    checkNotifications: boolean;
    hotkeys: {
        [key in string]?: Array<string>;
    };
};
export type SyncState = {
    model: "sync_state";
    id: string;
    workspaceId: string;
    createdAt: string;
    updatedAt: string;
    flushedAt: string;
    modelId: string;
    checksum: string;
    relPath: string;
    syncDir: string;
};
export type WebsocketConnection = {
    model: "websocket_connection";
    id: string;
    createdAt: string;
    updatedAt: string;
    workspaceId: string;
    requestId: string;
    elapsed: number;
    error: string | null;
    headers: Array<HttpResponseHeader>;
    state: WebsocketConnectionState;
    status: number;
    url: string;
};
export type WebsocketConnectionState = "initialized" | "connected" | "closing" | "closed";
export type WebsocketEvent = {
    model: "websocket_event";
    id: string;
    createdAt: string;
    updatedAt: string;
    workspaceId: string;
    requestId: string;
    connectionId: string;
    isServer: boolean;
    message: Array<number>;
    messageType: WebsocketEventType;
};
export type WebsocketEventType = "binary" | "close" | "frame" | "open" | "ping" | "pong" | "text";
export type WebsocketRequest = {
    model: "websocket_request";
    id: string;
    createdAt: string;
    updatedAt: string;
    workspaceId: string;
    folderId: string | null;
    authentication: Record<string, any>;
    authenticationType: string | null;
    description: string;
    headers: Array<HttpRequestHeader>;
    message: string;
    name: string;
    sortPriority: number;
    url: string;
    urlParameters: Array<HttpUrlParameter>;
};
export type Workspace = {
    model: "workspace";
    id: string;
    createdAt: string;
    updatedAt: string;
    authentication: Record<string, any>;
    authenticationType: string | null;
    description: string;
    headers: Array<HttpRequestHeader>;
    name: string;
    encryptionKeyChallenge: string | null;
    settingValidateCertificates: boolean;
    settingFollowRedirects: boolean;
    settingRequestTimeout: number;
    settingDnsOverrides: Array<DnsOverride>;
};
export type WorkspaceMeta = {
    model: "workspace_meta";
    id: string;
    workspaceId: string;
    createdAt: string;
    updatedAt: string;
    encryptionKey: EncryptedKey | null;
    settingSyncDir: string | null;
};
