@remotion/renderer
Version:
Render Remotion videos using Node.js or Bun
510 lines (507 loc) • 15 kB
TypeScript
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable lines-between-class-members */
/* eslint-disable no-redeclare */
/* eslint-disable @typescript-eslint/no-empty-interface */
/* eslint-disable @typescript-eslint/no-shadow */
/* eslint-disable no-dupe-class-members */
/// <reference types="node" />
import type {Server as HTTPSServer} from 'https';
import {EventEmitter} from 'node:events';
import type {
Agent,
ClientRequest,
ClientRequestArgs,
IncomingMessage,
OutgoingHttpHeaders,
Server as HTTPServer,
} from 'node:http';
import type {URL} from 'node:url';
import type {ZlibOptions} from 'node:zlib';
import type {Duplex, DuplexOptions} from 'stream';
import type {SecureContextOptions} from 'tls';
declare class WebSocket extends EventEmitter {
/** The connection is not yet open. */
static readonly CONNECTING: 0;
/** The connection is open and ready to communicate. */
static readonly OPEN: 1;
/** The connection is in the process of closing. */
static readonly CLOSING: 2;
/** The connection is closed. */
static readonly CLOSED: 3;
binaryType: 'nodebuffer' | 'arraybuffer' | 'fragments';
readonly bufferedAmount: number;
readonly extensions: string;
/** Indicates whether the websocket is paused */
readonly isPaused: boolean;
readonly protocol: string;
/** The current state of the connection */
readonly readyState:
| typeof WebSocket.CONNECTING
| typeof WebSocket.OPEN
| typeof WebSocket.CLOSING
| typeof WebSocket.CLOSED;
readonly url: string;
/** The connection is not yet open. */
readonly CONNECTING: 0;
/** The connection is open and ready to communicate. */
readonly OPEN: 1;
/** The connection is in the process of closing. */
readonly CLOSING: 2;
/** The connection is closed. */
readonly CLOSED: 3;
onopen: ((event: WebSocket.Event) => void) | null;
onerror: ((event: WebSocket.ErrorEvent) => void) | null;
onclose: ((event: WebSocket.CloseEvent) => void) | null;
onmessage: ((event: WebSocket.MessageEvent) => void) | null;
constructor(address: null);
constructor(
address: string | URL,
options?: WebSocket.ClientOptions | ClientRequestArgs
);
constructor(
address: string | URL,
protocols?: string | string[],
options?: WebSocket.ClientOptions | ClientRequestArgs
);
close(code?: number, data?: string | Buffer): void;
ping(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
pong(data?: any, mask?: boolean, cb?: (err: Error) => void): void;
send(data: any, cb?: (err?: Error) => void): void;
send(
data: any,
options: {
mask?: boolean | undefined;
binary?: boolean | undefined;
compress?: boolean | undefined;
fin?: boolean | undefined;
},
cb?: (err?: Error) => void
): void;
terminate(): void;
/**
* Pause the websocket causing it to stop emitting events. Some events can still be
* emitted after this is called, until all buffered data is consumed. This method
* is a noop if the ready state is `CONNECTING` or `CLOSED`.
*/
pause(): void;
/**
* Make a paused socket resume emitting events. This method is a noop if the ready
* state is `CONNECTING` or `CLOSED`.
*/
resume(): void;
addEventListener(
method: 'message',
cb: (event: WebSocket.MessageEvent) => void,
options?: WebSocket.EventListenerOptions
): void;
addEventListener(
method: 'close',
cb: (event: WebSocket.CloseEvent) => void,
options?: WebSocket.EventListenerOptions
): void;
addEventListener(
method: 'error',
cb: (event: WebSocket.ErrorEvent) => void,
options?: WebSocket.EventListenerOptions
): void;
addEventListener(
method: 'open',
cb: (event: WebSocket.Event) => void,
options?: WebSocket.EventListenerOptions
): void;
removeEventListener(
method: 'message',
cb: (event: WebSocket.MessageEvent) => void
): void;
removeEventListener(
method: 'close',
cb: (event: WebSocket.CloseEvent) => void
): void;
removeEventListener(
method: 'error',
cb: (event: WebSocket.ErrorEvent) => void
): void;
removeEventListener(
method: 'open',
cb: (event: WebSocket.Event) => void
): void;
on(
event: 'close',
listener: (this: WebSocket, code: number, reason: Buffer) => void
): this;
on(event: 'error', listener: (this: WebSocket, err: Error) => void): this;
on(
event: 'upgrade',
listener: (this: WebSocket, request: IncomingMessage) => void
): this;
on(
event: 'message',
listener: (
this: WebSocket,
data: WebSocket.RawData,
isBinary: boolean
) => void
): this;
on(event: 'open', listener: (this: WebSocket) => void): this;
on(
event: 'ping' | 'pong',
listener: (this: WebSocket, data: Buffer) => void
): this;
on(
event: 'unexpected-response',
listener: (
this: WebSocket,
request: ClientRequest,
response: IncomingMessage
) => void
): this;
on(
event: string | symbol,
listener: (this: WebSocket, ...args: any[]) => void
): this;
once(
event: 'close',
listener: (this: WebSocket, code: number, reason: Buffer) => void
): this;
once(event: 'error', listener: (this: WebSocket, err: Error) => void): this;
once(
event: 'upgrade',
listener: (this: WebSocket, request: IncomingMessage) => void
): this;
once(
event: 'message',
listener: (
this: WebSocket,
data: WebSocket.RawData,
isBinary: boolean
) => void
): this;
once(event: 'open', listener: (this: WebSocket) => void): this;
once(
event: 'ping' | 'pong',
listener: (this: WebSocket, data: Buffer) => void
): this;
once(
event: 'unexpected-response',
listener: (
this: WebSocket,
request: ClientRequest,
response: IncomingMessage
) => void
): this;
once(
event: string | symbol,
listener: (this: WebSocket, ...args: any[]) => void
): this;
off(
event: 'close',
listener: (this: WebSocket, code: number, reason: Buffer) => void
): this;
off(event: 'error', listener: (this: WebSocket, err: Error) => void): this;
off(
event: 'upgrade',
listener: (this: WebSocket, request: IncomingMessage) => void
): this;
off(
event: 'message',
listener: (
this: WebSocket,
data: WebSocket.RawData,
isBinary: boolean
) => void
): this;
off(event: 'open', listener: (this: WebSocket) => void): this;
off(
event: 'ping' | 'pong',
listener: (this: WebSocket, data: Buffer) => void
): this;
off(
event: 'unexpected-response',
listener: (
this: WebSocket,
request: ClientRequest,
response: IncomingMessage
) => void
): this;
off(
event: string | symbol,
listener: (this: WebSocket, ...args: any[]) => void
): this;
addListener(
event: 'close',
listener: (code: number, reason: Buffer) => void
): this;
addListener(event: 'error', listener: (err: Error) => void): this;
addListener(
event: 'upgrade',
listener: (request: IncomingMessage) => void
): this;
addListener(
event: 'message',
listener: (data: WebSocket.RawData, isBinary: boolean) => void
): this;
addListener(event: 'open', listener: () => void): this;
addListener(event: 'ping' | 'pong', listener: (data: Buffer) => void): this;
addListener(
event: 'unexpected-response',
listener: (request: ClientRequest, response: IncomingMessage) => void
): this;
addListener(event: string | symbol, listener: (...args: any[]) => void): this;
removeListener(
event: 'close',
listener: (code: number, reason: Buffer) => void
): this;
removeListener(event: 'error', listener: (err: Error) => void): this;
removeListener(
event: 'upgrade',
listener: (request: IncomingMessage) => void
): this;
removeListener(
event: 'message',
listener: (data: WebSocket.RawData, isBinary: boolean) => void
): this;
removeListener(event: 'open', listener: () => void): this;
removeListener(
event: 'ping' | 'pong',
listener: (data: Buffer) => void
): this;
removeListener(
event: 'unexpected-response',
listener: (request: ClientRequest, response: IncomingMessage) => void
): this;
removeListener(
event: string | symbol,
listener: (...args: any[]) => void
): this;
}
declare const WebSocketAlias: typeof WebSocket;
declare type WebSocketAlias = WebSocket;
declare namespace WebSocket {
/**
* Data represents the raw message payload received over the WebSocket.
*/
type RawData = Buffer | ArrayBuffer | Buffer[];
/**
* Data represents the message payload received over the WebSocket.
*/
type Data = string | Buffer | ArrayBuffer | Buffer[];
/**
* CertMeta represents the accepted types for certificate & key data.
*/
type CertMeta = string | string[] | Buffer | Buffer[];
/**
* VerifyClientCallbackSync is a synchronous callback used to inspect the
* incoming message. The return value (boolean) of the function determines
* whether or not to accept the handshake.
*/
type VerifyClientCallbackSync = (info: {
origin: string;
secure: boolean;
req: IncomingMessage;
}) => boolean;
/**
* VerifyClientCallbackAsync is an asynchronous callback used to inspect the
* incoming message. The return value (boolean) of the function determines
* whether or not to accept the handshake.
*/
type VerifyClientCallbackAsync = (
info: {
origin: string;
secure: boolean;
req: IncomingMessage;
},
callback: (
res: boolean,
code?: number,
message?: string,
headers?: OutgoingHttpHeaders
) => void
) => void;
interface ClientOptions extends SecureContextOptions {
protocol?: string | undefined;
followRedirects?: boolean | undefined;
generateMask?(mask: Buffer): void;
handshakeTimeout?: number | undefined;
maxRedirects?: number | undefined;
perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
localAddress?: string | undefined;
protocolVersion?: number | undefined;
headers?:
| {
[key: string]: string;
}
| undefined;
origin?: string | undefined;
agent?: Agent | undefined;
host?: string | undefined;
family?: number | undefined;
checkServerIdentity?(servername: string, cert: CertMeta): boolean;
rejectUnauthorized?: boolean | undefined;
maxPayload?: number | undefined;
skipUTF8Validation?: boolean | undefined;
}
interface PerMessageDeflateOptions {
serverNoContextTakeover?: boolean | undefined;
clientNoContextTakeover?: boolean | undefined;
serverMaxWindowBits?: number | undefined;
clientMaxWindowBits?: number | undefined;
zlibDeflateOptions?:
| {
flush?: number | undefined;
finishFlush?: number | undefined;
chunkSize?: number | undefined;
windowBits?: number | undefined;
level?: number | undefined;
memLevel?: number | undefined;
strategy?: number | undefined;
dictionary?: Buffer | Buffer[] | DataView | undefined;
info?: boolean | undefined;
}
| undefined;
zlibInflateOptions?: ZlibOptions | undefined;
threshold?: number | undefined;
concurrencyLimit?: number | undefined;
}
interface Event {
type: string;
target: WebSocket;
}
interface ErrorEvent {
error: any;
message: string;
type: string;
target: WebSocket;
}
interface CloseEvent {
wasClean: boolean;
code: number;
reason: string;
type: string;
target: WebSocket;
}
interface MessageEvent {
data: Data;
type: string;
target: WebSocket;
}
interface EventListenerOptions {
once?: boolean | undefined;
}
interface ServerOptions {
host?: string | undefined;
port?: number | undefined;
backlog?: number | undefined;
server?: HTTPServer | HTTPSServer | undefined;
verifyClient?:
| VerifyClientCallbackAsync
| VerifyClientCallbackSync
| undefined;
handleProtocols?: (
protocols: Set<string>,
request: IncomingMessage
) => string | false;
path?: string | undefined;
noServer?: boolean | undefined;
clientTracking?: boolean | undefined;
perMessageDeflate?: boolean | PerMessageDeflateOptions | undefined;
maxPayload?: number | undefined;
skipUTF8Validation?: boolean | undefined;
WebSocket?: typeof WebSocket.WebSocket | undefined;
}
interface AddressInfo {
address: string;
family: string;
port: number;
}
class Server<T extends WebSocket = WebSocket> extends EventEmitter {
options: ServerOptions;
path: string;
clients: Set<T>;
constructor(options?: ServerOptions, callback?: () => void);
address(): AddressInfo | string;
close(cb?: (err?: Error) => void): void;
handleUpgrade(
request: IncomingMessage,
socket: Duplex,
upgradeHead: Buffer,
callback: (client: T, request: IncomingMessage) => void
): void;
shouldHandle(request: IncomingMessage): boolean | Promise<boolean>;
on(
event: 'connection',
cb: (this: Server<T>, socket: T, request: IncomingMessage) => void
): this;
on(event: 'error', cb: (this: Server<T>, error: Error) => void): this;
on(
event: 'headers',
cb: (this: Server<T>, headers: string[], request: IncomingMessage) => void
): this;
on(event: 'close' | 'listening', cb: (this: Server<T>) => void): this;
on(
event: string | symbol,
listener: (this: Server<T>, ...args: any[]) => void
): this;
once(
event: 'connection',
cb: (this: Server<T>, socket: T, request: IncomingMessage) => void
): this;
once(event: 'error', cb: (this: Server<T>, error: Error) => void): this;
once(
event: 'headers',
cb: (this: Server<T>, headers: string[], request: IncomingMessage) => void
): this;
once(event: 'close' | 'listening', cb: (this: Server<T>) => void): this;
once(
event: string | symbol,
listener: (this: Server<T>, ...args: any[]) => void
): this;
off(
event: 'connection',
cb: (this: Server<T>, socket: T, request: IncomingMessage) => void
): this;
off(event: 'error', cb: (this: Server<T>, error: Error) => void): this;
off(
event: 'headers',
cb: (this: Server<T>, headers: string[], request: IncomingMessage) => void
): this;
off(event: 'close' | 'listening', cb: (this: Server<T>) => void): this;
off(
event: string | symbol,
listener: (this: Server<T>, ...args: any[]) => void
): this;
addListener(
event: 'connection',
cb: (client: T, request: IncomingMessage) => void
): this;
addListener(event: 'error', cb: (err: Error) => void): this;
addListener(
event: 'headers',
cb: (headers: string[], request: IncomingMessage) => void
): this;
addListener(event: 'close' | 'listening', cb: () => void): this;
addListener(
event: string | symbol,
listener: (...args: any[]) => void
): this;
removeListener(event: 'connection', cb: (client: T) => void): this;
removeListener(event: 'error', cb: (err: Error) => void): this;
removeListener(
event: 'headers',
cb: (headers: string[], request: IncomingMessage) => void
): this;
removeListener(event: 'close' | 'listening', cb: () => void): this;
removeListener(
event: string | symbol,
listener: (...args: any[]) => void
): this;
}
const WebSocketServer: typeof Server;
interface WebSocketServer extends Server {}
const WebSocket: typeof WebSocketAlias;
interface WebSocket extends WebSocketAlias {}
function createWebSocketStream(
websocket: WebSocket,
options?: DuplexOptions
): Duplex;
}
export = WebSocket;