-
Notifications
You must be signed in to change notification settings - Fork 253
Expand file tree
/
Copy patherrors.ts
More file actions
138 lines (116 loc) · 3.53 KB
/
errors.ts
File metadata and controls
138 lines (116 loc) · 3.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import { DisconnectReason, RequestResponse_Reason } from '@livekit/protocol';
export class LivekitError extends Error {
code: number;
constructor(code: number, message?: string) {
super(message || 'an error has occured');
this.name = 'LiveKitError';
this.code = code;
}
}
export enum ConnectionErrorReason {
NotAllowed,
ServerUnreachable,
InternalError,
Cancelled,
LeaveRequest,
}
export class ConnectionError extends LivekitError {
status?: number;
context?: unknown | DisconnectReason;
reason: ConnectionErrorReason;
reasonName: string;
constructor(
message: string,
reason: ConnectionErrorReason,
status?: number,
context?: unknown | DisconnectReason,
) {
super(1, message);
this.name = 'ConnectionError';
this.status = status;
this.reason = reason;
this.context = context;
this.reasonName = ConnectionErrorReason[reason];
}
}
export class DeviceUnsupportedError extends LivekitError {
constructor(message?: string) {
super(21, message ?? 'device is unsupported');
this.name = 'DeviceUnsupportedError';
}
}
export class TrackInvalidError extends LivekitError {
constructor(message?: string) {
super(20, message ?? 'track is invalid');
this.name = 'TrackInvalidError';
}
}
export class UnsupportedServer extends LivekitError {
constructor(message?: string) {
super(10, message ?? 'unsupported server');
this.name = 'UnsupportedServer';
}
}
export class UnexpectedConnectionState extends LivekitError {
constructor(message?: string) {
super(12, message ?? 'unexpected connection state');
this.name = 'UnexpectedConnectionState';
}
}
export class NegotiationError extends LivekitError {
constructor(message?: string) {
super(13, message ?? 'unable to negotiate');
this.name = 'NegotiationError';
}
}
export class PublishDataError extends LivekitError {
constructor(message?: string) {
super(14, message ?? 'unable to publish data');
this.name = 'PublishDataError';
}
}
export class PublishTrackError extends LivekitError {
status: number;
constructor(message: string, status: number) {
super(15, message);
this.name = 'PublishTrackError';
this.status = status;
}
}
export type RequestErrorReason =
| Exclude<RequestResponse_Reason, RequestResponse_Reason.OK>
| 'TimeoutError';
export class SignalRequestError extends LivekitError {
reason: RequestErrorReason;
reasonName: string;
constructor(message: string, reason: RequestErrorReason) {
super(15, message);
this.reason = reason;
this.reasonName = typeof reason === 'string' ? reason : RequestResponse_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;
}
}
}