import { Resource } from "./resource";
import { CancelToken } from "axios";
/**
 * Define JSON type
 */
export declare type JsonArray = Array<string | number | boolean | Date | JsonDict | JsonArray>;
export interface JsonDict {
    [key: string]: string | number | boolean | Date | null | JsonDict | JsonArray;
}
export declare type Json = JsonDict | JsonDict[];
/**
 * Services shared interfaces.
 */
export interface StoreUserAddon {
    userId: string;
}
export interface APIUserAddon {
    user_id: string;
}
export declare abstract class UserAddon extends Resource {
    /**
     * The user's ID this report belongs to.
     */
    userId: string;
    constructor(userId: string);
}
export declare type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
export interface Config {
    cancelToken?: CancelToken;
    /**
     * The request timeout in milliseconds.
     */
    timeout?: number;
}
export interface PaginatedResponse<T> {
    count: number;
    results: T[];
    next: string | null;
    previous: string | null;
}
export declare type HTMLText = string;
declare type ValueOf<T> = T[keyof T];
declare type KeyValueTupleToObject<T extends [keyof any, any]> = {
    [K in T[0]]: Extract<T, [K, any]>[1];
};
declare type RequiredKeys<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? never : K;
}[keyof T];
declare type OptionalKeys<T> = {
    [K in keyof T]-?: {} extends Pick<T, K> ? K : never;
}[keyof T];
export declare type MapKeysRaw<T, M extends Record<string, string>> = KeyValueTupleToObject<ValueOf<{
    [K in RequiredKeys<T>]-?: [K extends keyof M ? M[K] : K, T[K]];
}>> & Partial<KeyValueTupleToObject<ValueOf<{
    [K in OptionalKeys<T>]-?: [K extends keyof M ? M[K] : K, T[K]];
}>>> extends infer O ? {
    [K in keyof O]: O[K];
} : never;
export declare type MapKeys<T, M extends Record<string, string>, O extends Partial<Record<keyof MapKeysRaw<T, M>, any>> = {}> = Omit<MapKeysRaw<T, M>, keyof O> & O;
export {};
