UNPKG

@aicacia/peer

Version:

simple peer to peer for webrtc

99 lines (98 loc) 3.71 kB
import { EventEmitter, type EventEmitter as EventEmitterTypes } from "eventemitter3"; export interface PeerOptions { id?: string; sdpTransform?: (sdp?: string) => string; channelName?: string; channelConfig?: RTCDataChannelInit; config?: RTCConfiguration; offerConfig?: RTCOfferOptions; answerConfig?: RTCAnswerOptions; maxChannelMessageSize?: number; webrtc?: PeerWebRTC; } export interface PeerWebRTC { RTCPeerConnection: typeof RTCPeerConnection; RTCSessionDescription: typeof RTCSessionDescription; RTCIceCandidate: typeof RTCIceCandidate; } export type SignalMessage = { type: "renegotiate"; renegotiate?: boolean; } | { type: "transceiverRequest"; transceiverRequest: { kind: string; init?: RTCRtpTransceiverInit; }; } | { type: "candidate"; candidate: RTCIceCandidateInit; } | RTCSessionDescriptionInit; interface PeerEvents { signal(message: SignalMessage): void; connect(): void; data(event: string | Blob | ArrayBuffer | Uint8Array): void; error(error: Error): void; close(): void; transceiver(transceiver: RTCRtpTransceiver): void; track(track: RTCTrackEvent): void; negotiated(): void; } type PeerEventNames = EventEmitterTypes.EventNames<PeerEvents>; type EventEmitterReturnType<T> = T extends [] ? void : T extends [infer R] ? R : T; export declare class Peer extends EventEmitter<PeerEvents> { private id; private initiator; private channelName; private channelConfig?; private channel?; private maxChannelMessageSize; private sdpTransform; private config; private connection?; private offerConfig?; private answerConfig?; private pendingCandidates; private webrtc; constructor(options?: PeerOptions); getId(): string; getConnection(): RTCPeerConnection | undefined; getChannel(): RTCDataChannel | undefined; isReady(): boolean | undefined; isClosed(): boolean; ready(): Promise<void>; data(): Promise<string | Blob | ArrayBuffer | Uint8Array<ArrayBufferLike>>; closed(): Promise<void>; isInitiator(): boolean; init(): this; close(): this; send(chunk: string | Blob | ArrayBuffer | ArrayBufferView): this; write(chunk: string | Blob | ArrayBuffer | ArrayBufferView): void; writableStream(): WritableStream<string | Blob | ArrayBuffer | ArrayBufferView<ArrayBufferLike>>; readableStream(): ReadableStream<string | Blob | ArrayBuffer>; signal(message: SignalMessage): Promise<this>; waitOnce<K extends PeerEventNames>(event: K): Promise<EventEmitterReturnType<EventEmitter.ArgumentMap<PeerEvents>[K]>>; addTransceiverFromKind(kind: string, init?: RTCRtpTransceiverInit): RTCRtpTransceiver | null; addTrack(track: MediaStreamTrack): RTCRtpSender; removeTrack(sender: RTCRtpSender): this; private internalSignal; negotiate(): Promise<this>; private createOffer; private createAnswer; private createPeer; private internalClose; private onConnectionStateChange; private onNegotiationNeeded; private onICEConnectionStateChange; private onICEGatheringStateChange; private onSignalingStateChange; private onICECandidate; private onTrackRemote; private onDataChannel; private onDataChannelOpen; private onDataChannelMessage; private onDataChannelError; } export declare function writableStreamFromChannel(channel: RTCDataChannel, maxChannelMessageSize: number): WritableStream<string | Blob | ArrayBuffer | ArrayBufferView<ArrayBufferLike>>; export declare function readableStreamFromChannel(channel: RTCDataChannel): ReadableStream<string | Blob | ArrayBuffer>; export {};