import { Module } from '@nuxt/types';
import { IDeliveryClient, IContentItem, MultipleItemsQuery, IDeliveryNetworkResponse, Responses, Contracts, IDeliveryClientConfig } from '@kentico/kontent-delivery';

interface INuxtDeliveryClient extends IDeliveryClient {
    viaCache<TContentItem extends IContentItem>(query: MultipleItemsQuery<TContentItem>, seconds: number, cacheKey?: string, isServerProcess?: boolean): Promise<IDeliveryNetworkResponse<Responses.IListContentItemsResponse<TContentItem>, Contracts.IListContentItemsContract>>;
}

declare type Exclude<T, U> = T extends U ? never : T;
declare type RequireOne<T, K extends keyof T> = {
    [X in Exclude<keyof T, K>]?: T[X];
} & {
    [P in K]-?: T[P];
};
interface ModuleOptions extends RequireOne<IDeliveryClientConfig, 'projectId'> {
}
declare const deliveryClientModule: Module<IDeliveryClientConfig>;
declare module '@nuxt/types' {
    interface Context {
        $nuxtDeliveryClient: INuxtDeliveryClient;
    }
    interface NuxtAppOptions {
        $nuxtDeliveryClient: INuxtDeliveryClient;
    }
    interface Configuration {
        nuxtDeliveryClient?: IDeliveryClientConfig;
    }
}
declare module 'vue/types/vue' {
    interface Vue {
        $nuxtDeliveryClient: INuxtDeliveryClient;
    }
}

declare const meta: any;

export { ModuleOptions, deliveryClientModule as default, meta };
