detritus-client-socket
Version:
A TypeScript NodeJS library to interact with Discord's Gateway
99 lines (98 loc) • 3.15 kB
TypeScript
/// <reference types="node" />
import * as dgram from 'dgram';
import { EventSpewer } from 'detritus-utils';
import { MediaCodecs, MediaCodecTypes } from './constants';
import { Socket as MediaSocket } from './media';
import { RTPHeader, RTPNonce } from './mediapackets/rtp';
export interface FrameOptions {
incrementNonce?: boolean;
incrementSequence?: boolean;
incrementTimestamp?: boolean;
nonce?: number;
sequence?: number;
timestamp?: number;
type?: string;
useCache?: boolean;
}
export interface IpInformation {
ip: null | string;
port: null | number;
}
export interface RTPPayload {
header: RTPHeader;
nonce?: Buffer;
payload?: Buffer;
}
export interface TransportPacket {
codec: MediaCodecs | null;
data: Buffer;
format: MediaCodecTypes | null;
from: UDPFrom;
rtp?: RTPPayload;
userId: null | string;
}
export interface UDPFrom {
address: string;
family: string;
port: number;
size: number;
}
export declare class Socket extends EventSpewer {
caches: {
audio: Buffer;
video?: Buffer;
};
codecs: {
audio: null | string;
video: null | string;
};
connected: boolean;
headers: {
audio: RTPHeader;
video?: RTPHeader;
};
key: null | Uint8Array;
local: IpInformation;
mediaGateway: MediaSocket;
mode: null | string;
nonces: {
audio: RTPNonce;
video?: RTPNonce;
};
remote: IpInformation;
socket: dgram.Socket | null;
ssrc: number;
transportId: null | string;
constructor(mediaGateway: MediaSocket);
get audioSSRC(): number;
get videoSSRC(): number;
get rtxSSRC(): number;
get rtpAudioPayloadType(): null | number;
get rtpVideoPayloadType(): null | number;
get rtpRTXPayloadType(): null | number;
get receiveEnabled(): boolean;
get videoEnabled(): boolean;
setAudioCodec(codec?: MediaCodecs | null | string): Socket;
setVideoCodec(codec?: MediaCodecs | null | string): Socket;
setKey(value: Array<number>): Socket;
setMode(value: string): Socket;
setSSRC(value: number): Socket;
setTransportId(value: string): Socket;
connect(ip?: null | string, port?: null | number): Socket;
disconnect(): void;
onPacket(packet: Buffer, from: UDPFrom): void;
send(packet: Buffer): void;
sendAudioFrame(packet: Buffer, options?: FrameOptions): void;
sendVideoFrame(packet: Buffer, options?: FrameOptions): void;
sendFrame(packet: Buffer, options?: FrameOptions): void;
sendAudioSilenceFrame(): void;
on(event: string | symbol, listener: (...args: any[]) => void): this;
on(event: 'close', listener: () => any): this;
on(event: 'killed', listener: () => any): this;
on(event: 'log', listener: (error: Error) => any): this;
on(event: 'open', listener: () => any): this;
on(event: 'packet', listener: (packet: TransportPacket) => any): this;
on(event: 'ready', listener: () => any): this;
on(event: 'socket', listener: (socket: dgram.Socket) => any): this;
on(event: 'warn', listener: (error: Error) => any): this;
}