vue-peer
Version:
With this package, you can have video calls along with two or multi-person chat communication. You can easily bind and display your streams in any video element you want.
44 lines (43 loc) • 1.43 kB
TypeScript
import { DataConnection, MediaConnection } from "peerjs";
export interface MessageType<Metadata> {
fromMetadata?: MetadataType<Metadata>;
to?: string;
}
export interface MetadataUser {
user: string;
}
export type MetadataType<T> = T & {
user: string;
};
export interface VuePeerConnection<T> extends VuePeerStream<T> {
user: string;
conn?: DataConnection;
call?: MediaConnection;
}
export type VuePeerStream<T> = {
id: string;
regAt: number;
stream?: MediaStream;
metadata: MetadataType<T>;
};
export declare enum VuePeerSocketEvent {
MESSAGE = "message",
LOCAL_VIDEO = "local_video",
USER_JOINED = "user_joined",
ON_ACCEPTED = "on_accepted",
ERROR_IN_PEER = "error_in_peer",
ERROR_IN_SOCKET = "error_in_socket",
ERROR_IN_NAVIGATOR = "error_in_navigator"
}
export type MessageEvent<T> = (data: T) => void;
export type UserJoinedEvent<T> = (sessions: Array<VuePeerStream<T>>) => void;
export type LocalVideoEvent = (stream: MediaStream) => void;
export type ErrorEvent = (err: Error) => void;
export type AcceptedEvent<T> = (metadata: MetadataType<T>) => boolean;
export type VuePeerEvent<TMetadata, TMessage> = MessageEvent<TMessage> | UserJoinedEvent<TMetadata> | AcceptedEvent<TMetadata> | LocalVideoEvent | ErrorEvent;
export interface VuePeerOption<T> {
socketUrl: string;
room: string;
metadata: MetadataType<T>;
showLogs?: boolean;
}