livekit-client
Version:
JavaScript/TypeScript client SDK for LiveKit
107 lines (89 loc) • 2.77 kB
text/typescript
import { RequestResponse_Reason } from '@livekit/protocol';
export class LivekitError extends Error {
code: number;
constructor(code: number, message?: string) {
super(message || 'an error has occured');
this.code = code;
}
}
export const enum ConnectionErrorReason {
NotAllowed,
ServerUnreachable,
InternalError,
Cancelled,
LeaveRequest,
}
export class ConnectionError extends LivekitError {
status?: number;
reason?: ConnectionErrorReason;
constructor(message?: string, reason?: ConnectionErrorReason, status?: number) {
super(1, message);
this.status = status;
this.reason = reason;
}
}
export class DeviceUnsupportedError extends LivekitError {
constructor(message?: string) {
super(21, message ?? 'device is unsupported');
}
}
export class TrackInvalidError extends LivekitError {
constructor(message?: string) {
super(20, message ?? 'track is invalid');
}
}
export class UnsupportedServer extends LivekitError {
constructor(message?: string) {
super(10, message ?? 'unsupported server');
}
}
export class UnexpectedConnectionState extends LivekitError {
constructor(message?: string) {
super(12, message ?? 'unexpected connection state');
}
}
export class NegotiationError extends LivekitError {
constructor(message?: string) {
super(13, message ?? 'unable to negotiate');
}
}
export class PublishDataError extends LivekitError {
constructor(message?: string) {
super(13, message ?? 'unable to publish data');
}
}
export type RequestErrorReason =
| Exclude<RequestResponse_Reason, RequestResponse_Reason.OK>
| 'TimeoutError';
export class SignalRequestError extends LivekitError {
reason: RequestErrorReason;
constructor(message: string, reason: RequestErrorReason) {
super(15, message);
this.reason = reason;
}
}
export enum MediaDeviceFailure {
// user rejected permissions
PermissionDenied = 'PermissionDenied',
// device is not available
NotFound = 'NotFound',
// device is in use. On Windows, only a single tab may get access to a device at a time.
DeviceInUse = 'DeviceInUse',
Other = 'Other',
}
export namespace MediaDeviceFailure {
export function getFailure(error: any): MediaDeviceFailure | undefined {
if (error && 'name' in error) {
if (error.name === 'NotFoundError' || error.name === 'DevicesNotFoundError') {
return MediaDeviceFailure.NotFound;
}
if (error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError') {
return MediaDeviceFailure.PermissionDenied;
}
if (error.name === 'NotReadableError' || error.name === 'TrackStartError') {
return MediaDeviceFailure.DeviceInUse;
}
return MediaDeviceFailure.Other;
}
}
}