/*!
 * Copyright (c) 2019 Contributors to the Eclipse Foundation
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0
 *
 * SPDX-License-Identifier: EPL-2.0
 */
import { HttpThingsHandle } from './handles/things.interfaces';
import { HttpRequester, HttpRequestSenderBuilder } from './request-factory/http-request-sender';
import { DefaultDittoHttpClient, DittoHttpClient } from './ditto-client-http';
import { HttpMessagesHandle } from './handles/messages-http';
import { PoliciesHandle } from './handles/policies';
import { SearchHandle } from './handles/search';
import { FeaturesHandle } from './handles/features.interfaces';
import { AuthProvider } from '../auth/auth-provider';
import { ApiVersion } from '../model/ditto-protocol';
import { AbstractBuilder, AuthenticationStep, BuildStep, CustomBuilderContext, CustomFeaturesHandleStep, CustomMessagesHandleStep, CustomPoliciesHandleStep, CustomSearchHandleStep, CustomThingsHandleStep, EnvironmentStep, ProtocolStep } from './builder-steps';
export interface HttpBuilderInitialStep extends ProtocolStep<HttpClientBuildStep> {
}
export interface HttpBuildStep<C extends DittoHttpClient> extends BuildStep {
    /**
     * Builds a DittoClient for the selected API.
     *
     * @returns The DittoClient
     */
    build(): C;
}
/**
 * Build step for adding custom handles.
 * @param <H> - Type of the things handle.
 * @param <C> - Type of the client.
 */
export interface HttpCustomHandlesBuildStep<H extends HttpThingsHandle, C extends DittoHttpClient> extends HttpBuildStep<C>, BuildStep, CustomThingsHandleStep<HttpRequestSenderBuilder, H>, CustomFeaturesHandleStep<HttpRequestSenderBuilder, FeaturesHandle>, CustomMessagesHandleStep<HttpRequestSenderBuilder, HttpMessagesHandle>, CustomPoliciesHandleStep<HttpRequestSenderBuilder, PoliciesHandle>, CustomSearchHandleStep<HttpRequestSenderBuilder, SearchHandle> {
}
/**
 * Interface to build the Context.
 */
export interface HttpClientBuildStep extends HttpCustomHandlesBuildStep<HttpThingsHandle, DittoHttpClient> {
}
/**
 * Implementation of all the methods to build a Context.
 */
export declare class HttpClientBuilder extends AbstractBuilder<HttpClientBuildStep> implements HttpBuilderInitialStep, EnvironmentStep<HttpClientBuildStep>, AuthenticationStep<HttpClientBuildStep>, HttpClientBuildStep {
    private readonly requester;
    private customHandles;
    private constructor();
    /**
     * Build a new HttpClientBuilder.
     *
     * @param requester - The requester to use.
     */
    static newBuilder(requester: HttpRequester): HttpBuilderInitialStep;
    finalize(): HttpClientBuildStep;
    build(): DefaultDittoHttpClient;
    buildClient(tls: boolean, domain: string, apiVersion: ApiVersion, authProviders: AuthProvider[]): DefaultDittoHttpClient;
    private buildUrl;
    withCustomThingsHandle(factory: (requestSenderBuilder: HttpRequestSenderBuilder, customBuilderContext?: CustomBuilderContext) => HttpThingsHandle): this;
    withCustomFeaturesHandle(factory: (requestSenderBuilder: HttpRequestSenderBuilder, thingId: string, customBuilderContext?: CustomBuilderContext) => FeaturesHandle): this;
    withCustomMessagesHandle(factory: (requestSenderBuilder: HttpRequestSenderBuilder, customBuilderContext?: CustomBuilderContext) => HttpMessagesHandle): this;
    withCustomPoliciesHandle(factory: (requestSenderBuilder: HttpRequestSenderBuilder, customBuilderContext?: CustomBuilderContext) => PoliciesHandle): this;
    withCustomSearchHandle(factory: (requestSenderBuilder: HttpRequestSenderBuilder, customBuilderContext?: CustomBuilderContext) => SearchHandle): this;
}
//# sourceMappingURL=http-client-builder.d.ts.map