import type { ArchiveLocationsFilter, AttributesFilter, ExternalForecastsFilter, ProductsMetaDataFilter, TimeSeriesFilter } from "./requestParameters";
import type { ArchiveAreas, ArchiveAttributes, ArchiveExternalNetCDFStorageForecasts, ArchiveLocations, ArchiveParameters, ArchiveProductsMetadata, TimeSeriesResponse } from "./response";
import type { TransformRequestFunction } from "@deltares/fews-web-oc-utils";
import { BaseFilter } from "./requestParameters/baseFilter";
import { ArchiveSources } from "./response/archivesources";
import { ArchiveParametersFilter } from "./requestParameters/archiveParametersFilter";
export declare class PiArchiveWebserviceProvider {
    private baseUrl;
    private maxUrlLength;
    readonly API_ENDPOINT = "rest/fewspiservice/v1";
    private webservice;
    addPiJsonFormat(queryParameters: string): string;
    /**
     * Constructor for PiArchiveWebserviceProvider
     *
     * @param url the base url where the PI servive is available
     * @param {Object} [options] Optional constructor options
     * @param {number} [options.maxUrlLength] A number that specifies the maximum length of the URL. If the URL length exceeds this value, the requests will be split up.
     * @param {TransformRequestFunction} [options.transformRequestFn] A function that can be used to modify the Request
     * before it is sent to the server. This function takes a Request as a parameter and returns the modified Request.
     * If this option is not specified, the Request will be sent as is.
     */
    constructor(url: string, options?: {
        maxUrlLength?: number;
        transformRequestFn?: TransformRequestFunction;
    });
    /**
     * Request parameters
     *
     * @param filter an object with request query parameters
     * @returns Parameters PI API response
     * @throws 'Fetch Error' if fetch result is not ok
     */
    getParameters(filter: ArchiveParametersFilter): Promise<ArchiveParameters>;
    /**
     * Construct URL for parameters request
     *
     * @param filter an object with request query parameters
     * @returns complete url for making a request
     */
    parametersUrl(filter: ArchiveParametersFilter): URL;
    /**
     * Request locations from the archive
     *
     * @param filter an object with request query parameters
     * @returns Locations PI API response
     * @throws 'Fetch Error' if fetch result is not ok
     */
    getLocations(filter: ArchiveLocationsFilter): Promise<ArchiveLocations>;
    /**
     * Construct URL for locations request
     *
     * @param filter an object with request query parameters
     * @returns complete url for making a request
     */
    locationsUrl(filter: ArchiveLocationsFilter): URL;
    /**
     * Request areas from the archive
     *
     * @param filter an object with request query parameters
     * @returns ArchiveAreas PI API response
     * @throws 'Fetch Error' if fetch result is not ok
     */
    getAreas(filter: BaseFilter): Promise<ArchiveAreas>;
    /**
     * Construct URL for archive areas request
     *
     * @param filter an object with request query parameters
     * @returns complete url for making a request
     */
    areasUrl(filter: BaseFilter): URL;
    /**
     * Request sources from the archive
     *
     * @param filter an object with request query parameters
     * @returns ArchiveSources PI API response
     * @throws 'Fetch Error' if fetch result is not ok
     */
    getSources(filter: BaseFilter): Promise<ArchiveSources>;
    /**
     * Construct URL for archive sources request
     *
     * @param filter an object with request query parameters
     * @returns complete url for making a request
     */
    sourcesUrl(filter: BaseFilter): URL;
    /**
     * Request attributes
     *
     * @param filter an object with request query parameters
     * @returns Attributes PI API response
     * @throws 'Fetch Error' if fetch result is not ok
     */
    getAttributes(filter: AttributesFilter): Promise<ArchiveAttributes>;
    /**
     * Construct URL for attribute request
     *
     * @param filter an object with request query parameters
     * @returns complete url for making a request
     */
    attributesUrl(filter: AttributesFilter): URL;
    /**
     * Request external forecasts
     *
     * @param filter an object with request query parameters
     * @returns External Forecasts PI API response
     * @throws 'Fetch Error' if fetch result is not ok
     */
    getExternalForecasts(filter: ExternalForecastsFilter): Promise<ArchiveExternalNetCDFStorageForecasts>;
    /**
     * Construct URL for external forecast request
     *
     * @param filter an object with request query parameters
     * @returns complete url for making a request
     */
    externalForecastsUrl(filter: ExternalForecastsFilter): URL;
    /**
     * Request product metadata from archive
     *
     * @param filter an object with request query parameters
     * @returns ProductsMetaData PI API response
     * @throws 'Fetch Error' if fetch result is not ok
     */
    getProductsMetaData(filter: ProductsMetaDataFilter): Promise<ArchiveProductsMetadata>;
    /**
     * Construct URL for locations request
     *
     * @param queryParameters query string
     * @returns complete url for making a request
     */
    productsMetaDataUrl(queryParameters: string): URL;
    /**
     * Request Time Series
     *
     * @param filter an object with request query parameters
     * @returns Time Series PI API response
     * @throws 'Fetch Error' if fetch result is not ok
     */
    getTimeSeries(filter: TimeSeriesFilter): Promise<TimeSeriesResponse>;
    /**
     * Construct URL for time series request
     *
     * @param filter an object with request query parameters
     * @returns complete url for making a request
     */
    timeSeriesUrl(filter: TimeSeriesFilter): URL;
}
