import { type TokenProvider } from "./auth";
import { RequiredConfig } from "./config";
import { type StorageClient } from "./storage";
import { EndpointType, InputType, OutputType } from "./types/client";
export type StreamingConnectionMode = "client" | "server";
/**
* The stream API options. It requires the API input and also
* offers configuration options.
*/
export type StreamOptions = {
/**
* The endpoint URL. If not provided, it will be generated from the
* `endpointId` and the `queryParams`.
*/
readonly url?: string;
/**
* The API input payload.
*/
readonly input?: Input;
/**
* The query parameters to be sent with the request.
*/
readonly queryParams?: Record;
/**
* The maximum time interval in milliseconds between stream chunks. Defaults to 15s.
*/
readonly timeout?: number;
/**
* Whether it should auto-upload File-like types to fal's storage
* or not.
*/
readonly autoUpload?: boolean;
/**
* The HTTP method, defaults to `post`;
*/
readonly method?: "get" | "post" | "put" | "delete" | string;
/**
* The content type the client accepts as response.
* By default this is set to `text/event-stream`.
*/
readonly accept?: string;
/**
* The streaming connection mode. This is used to determine
* whether the streaming will be done from the browser itself (client)
* or through your own server, either when running on NodeJS or when
* using a proxy that supports streaming.
*
* It defaults to `server`. Set to `client` if your server proxy doesn't
* support streaming.
*/
readonly connectionMode?: StreamingConnectionMode;
/**
* The signal to abort the request.
*/
readonly signal?: AbortSignal;
/**
* A custom token provider function. Only used when `connectionMode` is `"client"`.
* When provided, this function will be used to fetch authentication tokens
* instead of the default internal token fetching mechanism.
*/
readonly tokenProvider?: TokenProvider;
};
type FalStreamEventType = "data" | "error" | "done";
type EventHandler = (event: T) => void;
/**
* The class representing a streaming response. With t
*/
export declare class FalStream {
config: RequiredConfig;
endpointId: string;
url: string;
options: StreamOptions;
private listeners;
private buffer;
private currentData;
private lastEventTimestamp;
private streamClosed;
private _requestId;
private donePromise;
private abortController;
constructor(endpointId: string, config: RequiredConfig, options: StreamOptions);
private start;
private handleResponse;
private handleError;
on: (type: FalStreamEventType, listener: EventHandler) => void;
private emit;
[Symbol.asyncIterator](): AsyncGenerator, void, unknown>;
/**
* Gets a reference to the `Promise` that indicates whether the streaming
* is done or not. Developers should always call this in their apps to ensure
* the request is over.
*
* An alternative to this, is to use `on('done')` in case your application
* architecture works best with event listeners.
*
* @returns the promise that resolves when the request is done.
*/
done: () => Promise