import type { EndpointBuilder } from '../domain/configuration';
import type { Context } from '../tools/serialisation/context';
import type { RawError } from '../domain/error/error.types';
import { Observable } from '../tools/observable';
/**
* beacon payload max queue size implementation is 64kb
* ensure that we leave room for logs, rum and potential other users
*/
export declare const RECOMMENDED_REQUEST_BYTES_LIMIT: number;
/**
* Use POST request without content type to:
* - avoid CORS preflight requests
* - allow usage of sendBeacon
*
* multiple elements are sent separated by \n in order
* to be parsed correctly without content type header
*/
export interface HttpRequest
{
observable: Observable>;
send(this: void, payload: Body): void;
sendOnExit(this: void, payload: Body): void;
}
export interface HttpResponse extends Context {
status: number;
type?: ResponseType;
}
export interface BandwidthStats {
ongoingByteCount: number;
ongoingRequestCount: number;
}
export type HttpRequestEvent = {
type: 'failure';
bandwidth: BandwidthStats;
payload: Body;
} | {
type: 'queue-full';
bandwidth: BandwidthStats;
payload: Body;
} | {
type: 'success';
bandwidth: BandwidthStats;
payload: Body;
};
export interface Payload {
data: string | FormData | Blob;
bytesCount: number;
retry?: RetryInfo;
encoding?: 'deflate';
}
export interface RetryInfo {
count: number;
lastFailureStatus: number;
}
export declare function createHttpRequest(endpointBuilders: EndpointBuilder[], reportError: (error: RawError) => void, bytesLimit?: number): HttpRequest;
export declare function fetchStrategy(endpointBuilder: EndpointBuilder, payload: Payload, onResponse?: (r: HttpResponse) => void): void;