import { RecordKeyMap, RecordSchema, RecordQueryExpression, RecordTransform, RecordQuery } from '@orbit/records';
import { Dict } from '@orbit/utils';
import { RecordTransformRequest } from './lib/transform-requests';
import { RecordQueryRequest } from './lib/query-requests';
import { ResourceDocument } from './resource-document';
import { RecordDocument } from './record-document';
import { JSONAPIRequestOptions } from './lib/jsonapi-request-options';
import { JSONAPIURLBuilder, JSONAPIURLBuilderSettings } from './jsonapi-url-builder';
import { JSONAPISerializer, JSONAPISerializerSettings } from './jsonapi-serializer';
import { SerializerForFn, SerializerClassForFn, SerializerSettingsForFn } from '@orbit/serializers';
import { RecordOperation } from '@orbit/records';
import { JSONAPIResponse } from './jsonapi-response';
export interface FetchSettings {
    headers?: Dict<any>;
    method?: string;
    json?: Dict<any>;
    body?: string;
    params?: Dict<any>;
    timeout?: number;
    credentials?: string;
    cache?: string;
    redirect?: string;
    referrer?: string;
    referrerPolicy?: string;
    integrity?: string;
}
export interface JSONAPIRequestProcessorSettings {
    sourceName: string;
    serializerFor?: SerializerForFn;
    serializerClassFor?: SerializerClassForFn;
    serializerSettingsFor?: SerializerSettingsForFn;
    SerializerClass?: new (settings: JSONAPISerializerSettings) => JSONAPISerializer;
    URLBuilderClass?: new (settings: JSONAPIURLBuilderSettings) => JSONAPIURLBuilder;
    namespace?: string;
    host?: string;
    defaultFetchSettings?: FetchSettings;
    allowedContentTypes?: string[];
    schema: RecordSchema;
    keyMap?: RecordKeyMap;
}
export declare class JSONAPIRequestProcessor {
    sourceName: string;
    urlBuilder: JSONAPIURLBuilder;
    allowedContentTypes: string[];
    defaultFetchSettings: FetchSettings;
    schema: RecordSchema;
    keyMap?: RecordKeyMap;
    protected _serializer?: JSONAPISerializer;
    protected _serializerFor: SerializerForFn;
    constructor(settings: JSONAPIRequestProcessorSettings);
    /**
     * @deprecated since v0.17, use `serializerFor` instead
     */
    get serializer(): JSONAPISerializer;
    get serializerFor(): SerializerForFn;
    fetch(url: string, customSettings?: FetchSettings): Promise<JSONAPIResponse>;
    initFetchSettings(customSettings?: FetchSettings): FetchSettings;
    operationsFromDeserializedDocument(deserialized: RecordDocument): RecordOperation[];
    buildFetchSettings(request: RecordQueryRequest | RecordTransformRequest): FetchSettings;
    mergeRequestOptions(options: JSONAPIRequestOptions | undefined | (JSONAPIRequestOptions | undefined)[]): JSONAPIRequestOptions | undefined;
    /**
     * @deprecated since v0.17, use `mergeRequestOptions` instead
     */
    customRequestOptions(queryOrTransform: RecordQuery | RecordTransform, queryExpressionOrOperation: RecordQueryExpression | RecordOperation): JSONAPIRequestOptions | undefined;
    preprocessResponseDocument(document: ResourceDocument | undefined, request: RecordQueryRequest | RecordTransformRequest): void;
    protected responseHasContent(response: Response, ignoreUnrecognizedContent?: boolean): boolean;
    protected initDefaultFetchSettings(settings: JSONAPIRequestProcessorSettings): void;
    protected handleFetchResponse(response: Response): Promise<JSONAPIResponse>;
    protected handleFetchResponseError(response: Response, data?: unknown): Promise<Error>;
    protected handleFetchError(e: Error | string): Promise<Error>;
}
