import { type TokenProvider } from "./auth";
import { RequiredConfig } from "./config";
import { ApiError } from "./response";
type WithRequestId = {
request_id: string;
};
/**
* A connection object that allows you to `send` request payloads to a
* realtime endpoint.
*/
export interface RealtimeConnection {
send(input: Input & Partial): void;
close(): void;
}
/**
* Options for connecting to the realtime endpoint.
*/
export interface RealtimeConnectionHandler {
/**
* The connection key. This is used to reuse the same connection
* across multiple calls to `connect`. This is particularly useful in
* contexts where the connection is established as part of a component
* lifecycle (e.g. React) and the component is re-rendered multiple times.
*/
connectionKey?: string;
/**
* If `true`, the connection will only be established on the client side.
* This is useful for frameworks that reuse code for both server-side
* rendering and client-side rendering (e.g. Next.js).
*
* This is set to `true` by default when running on React in the server.
* Otherwise, it is set to `false`.
*
* Note that more SSR frameworks might be automatically detected
* in the future. In the meantime, you can set this to `true` when needed.
*/
clientOnly?: boolean;
/**
* The throtle duration in milliseconds. This is used to throtle the
* calls to the `send` function. Realtime apps usually react to user
* input, which can be very frequent (e.g. fast typing or mouse/drag movements).
*
* The default value is `128` milliseconds.
*/
throttleInterval?: number;
/**
* Configures the maximum amount of frames to store in memory before starting to drop
* old ones for in favor of the newer ones. It must be between `1` and `60`.
*
* The recommended is `2`. The default is `undefined` so it can be determined
* by the app (normally is set to the recommended setting).
*/
maxBuffering?: number;
/**
* Optional path to append after the app id. Defaults to `/realtime`.
*/
path?: string;
/**
* Optional encoder for outgoing messages. Defaults to msgpack.
* Should return either a `Uint8Array` (binary) or string (text frame).
*/
encodeMessage?: (input: any) => Uint8Array | string;
/**
* Optional decoder for incoming messages. Defaults to msgpack with JSON
* support for string payloads.
*/
decodeMessage?: (data: any) => Promise | any;
/**
* Callback function that is called when a result is received.
* @param result - The result of the request.
*/
onResult(result: Output & WithRequestId): void;
/**
* Callback function that is called when an error occurs.
* @param error - The error that occurred.
*/
onError?(error: ApiError): void;
/**
* A custom token provider function. When provided, this function will be
* used to fetch authentication tokens instead of the default internal
* token fetching mechanism.
*
* This is useful when you want to fetch tokens through your own backend proxy.
* If not provided, the default `getTemporaryAuthToken` will be used.
*/
tokenProvider?: TokenProvider;
/**
* The token expiration time in seconds. This is used to determine when to
* refresh the token. The token will be refreshed at 90% of this value.
*
* Only relevant when using a custom `tokenProvider`. If a custom `tokenProvider`
* is used without specifying this value, automatic token refresh will be disabled.
*/
tokenExpirationSeconds?: number;
}
export interface RealtimeClient {
/**
* Connect to the realtime endpoint. The default implementation uses
* WebSockets to connect to fal function endpoints that support WSS.
*
* @param app the app alias or identifier.
* @param handler the connection handler.
*/
connect (app: string, handler: RealtimeConnectionHandler): RealtimeConnection ;
}
type RealtimeClientDependencies = {
config: RequiredConfig;
};
export declare function createRealtimeClient({ config, }: RealtimeClientDependencies): RealtimeClient;
export {};