@sentdm/voice-client 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +70 -0
- package/LICENSE +201 -0
- package/README.md +283 -2
- package/THIRD_PARTY_NOTICES.md +153 -0
- package/adapter/loader.d.mts +3 -0
- package/adapter/loader.d.mts.map +1 -0
- package/adapter/loader.d.ts +3 -0
- package/adapter/loader.d.ts.map +1 -0
- package/adapter/loader.js +6 -0
- package/adapter/loader.js.map +1 -0
- package/adapter/loader.mjs +3 -0
- package/adapter/loader.mjs.map +1 -0
- package/adapter/sinch-rtc.js +30 -0
- package/adapter/sinch-rtc.mjs +31 -0
- package/adapter/sinch.d.mts +3 -0
- package/adapter/sinch.d.mts.map +1 -0
- package/adapter/sinch.d.ts +3 -0
- package/adapter/sinch.d.ts.map +1 -0
- package/adapter/sinch.js +296 -0
- package/adapter/sinch.js.map +1 -0
- package/adapter/sinch.mjs +292 -0
- package/adapter/sinch.mjs.map +1 -0
- package/adapter/types.d.mts +79 -0
- package/adapter/types.d.mts.map +1 -0
- package/adapter/types.d.ts +79 -0
- package/adapter/types.d.ts.map +1 -0
- package/adapter/types.js +3 -0
- package/adapter/types.js.map +1 -0
- package/adapter/types.mjs +2 -0
- package/adapter/types.mjs.map +1 -0
- package/audio.d.mts +42 -0
- package/audio.d.mts.map +1 -0
- package/audio.d.ts +42 -0
- package/audio.d.ts.map +1 -0
- package/audio.js +125 -0
- package/audio.js.map +1 -0
- package/audio.mjs +121 -0
- package/audio.mjs.map +1 -0
- package/call.d.mts +60 -0
- package/call.d.mts.map +1 -0
- package/call.d.ts +60 -0
- package/call.d.ts.map +1 -0
- package/call.js +84 -0
- package/call.js.map +1 -0
- package/call.mjs +80 -0
- package/call.mjs.map +1 -0
- package/client.d.mts +118 -0
- package/client.d.mts.map +1 -0
- package/client.d.ts +118 -0
- package/client.d.ts.map +1 -0
- package/client.js +371 -0
- package/client.js.map +1 -0
- package/client.mjs +367 -0
- package/client.mjs.map +1 -0
- package/errors.d.mts +2 -0
- package/errors.d.mts.map +1 -0
- package/errors.d.ts +2 -0
- package/errors.d.ts.map +1 -0
- package/errors.js +16 -0
- package/errors.js.map +1 -0
- package/errors.mjs +4 -0
- package/errors.mjs.map +1 -0
- package/index.d.mts +4 -0
- package/index.d.mts.map +1 -0
- package/index.d.ts +4 -0
- package/index.d.ts.map +1 -0
- package/index.js +18 -0
- package/index.js.map +1 -0
- package/index.mjs +4 -0
- package/index.mjs.map +1 -0
- package/internal/tslib.js +75 -0
- package/internal/tslib.mjs +17 -0
- package/invite.d.mts +28 -0
- package/invite.d.mts.map +1 -0
- package/invite.d.ts +28 -0
- package/invite.d.ts.map +1 -0
- package/invite.js +64 -0
- package/invite.js.map +1 -0
- package/invite.mjs +60 -0
- package/invite.mjs.map +1 -0
- package/package.json +41 -3
- package/src/adapter/loader.ts +4 -0
- package/src/adapter/sinch-rtc.ts +3 -0
- package/src/adapter/sinch.ts +348 -0
- package/src/adapter/types.ts +64 -0
- package/src/audio.ts +174 -0
- package/src/call.ts +145 -0
- package/src/client.ts +598 -0
- package/src/errors.ts +15 -0
- package/src/index.ts +14 -0
- package/src/invite.ts +75 -0
- package/src/sw.js +14 -0
- package/src/tsconfig.json +11 -0
- package/src/version.ts +1 -0
- package/sw.js +14 -0
- package/version.d.mts +2 -0
- package/version.d.mts.map +1 -0
- package/version.d.ts +2 -0
- package/version.d.ts.map +1 -0
- package/version.js +5 -0
- package/version.js.map +1 -0
- package/version.mjs +2 -0
- package/version.mjs.map +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sinch.mjs","sourceRoot":"","sources":["../src/adapter/sinch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { CallStats, QualityWarning } from "../call.mjs";
|
|
2
|
+
import { type SentVoiceError } from '@sentdm/voice-client-core';
|
|
3
|
+
/**
|
|
4
|
+
* The seam between the SDK core and a calling provider. It covers only what the public surface
|
|
5
|
+
* needs and must never be reachable from a public entry point.
|
|
6
|
+
*
|
|
7
|
+
* - Ids are wire ids: the core adds and strips the tenant prefix, so user ids, room names and
|
|
8
|
+
* incoming `from` values are already namespaced.
|
|
9
|
+
* - `register` takes the provider credential Sent exchanged the voice token for. While registered, it
|
|
10
|
+
* hands the provider a fresh credential.
|
|
11
|
+
* - Every failure is a `SentVoiceError`. A provider error without a mapping becomes one with code
|
|
12
|
+
* `UNKNOWN`, category `signaling` and the raw error kept as provider detail, which only telemetry reads.
|
|
13
|
+
* - Calls are identified by the provider call id. Their events start once the id is known from
|
|
14
|
+
* `call`, `joinConference` or `onIncoming`, and `ended` is the last event of every call,
|
|
15
|
+
* including one ended by `reject` or `hangup`.
|
|
16
|
+
* - `reject` declines an incoming call that has not been answered.
|
|
17
|
+
* - Stats report jitter and rtt in milliseconds and packetLoss as a fraction between 0 and 1.
|
|
18
|
+
*/
|
|
19
|
+
export interface ProviderAdapter {
|
|
20
|
+
register(credential: string): Promise<void>;
|
|
21
|
+
unregister(): Promise<void>;
|
|
22
|
+
call(target: CallTarget): Promise<string>;
|
|
23
|
+
joinConference(room: string): Promise<string>;
|
|
24
|
+
answer(callId: string): Promise<void>;
|
|
25
|
+
reject(callId: string): Promise<void>;
|
|
26
|
+
hangup(callId: string): Promise<void>;
|
|
27
|
+
mute(callId: string, muted: boolean): void;
|
|
28
|
+
sendDigits(callId: string, digits: string): void;
|
|
29
|
+
getStats(callId: string): Promise<CallStats>;
|
|
30
|
+
onIncoming(listener: (call: IncomingCall) => void): void;
|
|
31
|
+
onCallEvent(listener: (event: CallEvent) => void): void;
|
|
32
|
+
setInputDevice(deviceId: string): Promise<void>;
|
|
33
|
+
setOutputDevice(deviceId: string): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
export type AdapterFactory = (options: AdapterOptions) => Promise<ProviderAdapter>;
|
|
36
|
+
export interface AdapterOptions {
|
|
37
|
+
serviceWorker?: {
|
|
38
|
+
url?: string | undefined;
|
|
39
|
+
scope?: string | undefined;
|
|
40
|
+
} | undefined;
|
|
41
|
+
audioElement?: HTMLAudioElement | undefined;
|
|
42
|
+
}
|
|
43
|
+
export type CallTarget = {
|
|
44
|
+
kind: 'user';
|
|
45
|
+
id: string;
|
|
46
|
+
} | {
|
|
47
|
+
kind: 'number';
|
|
48
|
+
number: string;
|
|
49
|
+
};
|
|
50
|
+
export interface IncomingCall {
|
|
51
|
+
callId: string;
|
|
52
|
+
from: string;
|
|
53
|
+
}
|
|
54
|
+
export type CallEvent = {
|
|
55
|
+
callId: string;
|
|
56
|
+
type: 'ringing';
|
|
57
|
+
} | {
|
|
58
|
+
callId: string;
|
|
59
|
+
type: 'answered';
|
|
60
|
+
} | {
|
|
61
|
+
callId: string;
|
|
62
|
+
type: 'connected';
|
|
63
|
+
} | {
|
|
64
|
+
callId: string;
|
|
65
|
+
type: 'reconnecting';
|
|
66
|
+
} | {
|
|
67
|
+
callId: string;
|
|
68
|
+
type: 'reconnected';
|
|
69
|
+
} | {
|
|
70
|
+
callId: string;
|
|
71
|
+
type: 'qualityWarning';
|
|
72
|
+
warning: QualityWarning;
|
|
73
|
+
} | {
|
|
74
|
+
callId: string;
|
|
75
|
+
type: 'ended';
|
|
76
|
+
reason: 'completed' | 'failed' | 'busy' | 'noAnswer';
|
|
77
|
+
error?: SentVoiceError;
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../src/adapter/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { CallStats, QualityWarning } from "../call.js";
|
|
2
|
+
import { type SentVoiceError } from '@sentdm/voice-client-core';
|
|
3
|
+
/**
|
|
4
|
+
* The seam between the SDK core and a calling provider. It covers only what the public surface
|
|
5
|
+
* needs and must never be reachable from a public entry point.
|
|
6
|
+
*
|
|
7
|
+
* - Ids are wire ids: the core adds and strips the tenant prefix, so user ids, room names and
|
|
8
|
+
* incoming `from` values are already namespaced.
|
|
9
|
+
* - `register` takes the provider credential Sent exchanged the voice token for. While registered, it
|
|
10
|
+
* hands the provider a fresh credential.
|
|
11
|
+
* - Every failure is a `SentVoiceError`. A provider error without a mapping becomes one with code
|
|
12
|
+
* `UNKNOWN`, category `signaling` and the raw error kept as provider detail, which only telemetry reads.
|
|
13
|
+
* - Calls are identified by the provider call id. Their events start once the id is known from
|
|
14
|
+
* `call`, `joinConference` or `onIncoming`, and `ended` is the last event of every call,
|
|
15
|
+
* including one ended by `reject` or `hangup`.
|
|
16
|
+
* - `reject` declines an incoming call that has not been answered.
|
|
17
|
+
* - Stats report jitter and rtt in milliseconds and packetLoss as a fraction between 0 and 1.
|
|
18
|
+
*/
|
|
19
|
+
export interface ProviderAdapter {
|
|
20
|
+
register(credential: string): Promise<void>;
|
|
21
|
+
unregister(): Promise<void>;
|
|
22
|
+
call(target: CallTarget): Promise<string>;
|
|
23
|
+
joinConference(room: string): Promise<string>;
|
|
24
|
+
answer(callId: string): Promise<void>;
|
|
25
|
+
reject(callId: string): Promise<void>;
|
|
26
|
+
hangup(callId: string): Promise<void>;
|
|
27
|
+
mute(callId: string, muted: boolean): void;
|
|
28
|
+
sendDigits(callId: string, digits: string): void;
|
|
29
|
+
getStats(callId: string): Promise<CallStats>;
|
|
30
|
+
onIncoming(listener: (call: IncomingCall) => void): void;
|
|
31
|
+
onCallEvent(listener: (event: CallEvent) => void): void;
|
|
32
|
+
setInputDevice(deviceId: string): Promise<void>;
|
|
33
|
+
setOutputDevice(deviceId: string): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
export type AdapterFactory = (options: AdapterOptions) => Promise<ProviderAdapter>;
|
|
36
|
+
export interface AdapterOptions {
|
|
37
|
+
serviceWorker?: {
|
|
38
|
+
url?: string | undefined;
|
|
39
|
+
scope?: string | undefined;
|
|
40
|
+
} | undefined;
|
|
41
|
+
audioElement?: HTMLAudioElement | undefined;
|
|
42
|
+
}
|
|
43
|
+
export type CallTarget = {
|
|
44
|
+
kind: 'user';
|
|
45
|
+
id: string;
|
|
46
|
+
} | {
|
|
47
|
+
kind: 'number';
|
|
48
|
+
number: string;
|
|
49
|
+
};
|
|
50
|
+
export interface IncomingCall {
|
|
51
|
+
callId: string;
|
|
52
|
+
from: string;
|
|
53
|
+
}
|
|
54
|
+
export type CallEvent = {
|
|
55
|
+
callId: string;
|
|
56
|
+
type: 'ringing';
|
|
57
|
+
} | {
|
|
58
|
+
callId: string;
|
|
59
|
+
type: 'answered';
|
|
60
|
+
} | {
|
|
61
|
+
callId: string;
|
|
62
|
+
type: 'connected';
|
|
63
|
+
} | {
|
|
64
|
+
callId: string;
|
|
65
|
+
type: 'reconnecting';
|
|
66
|
+
} | {
|
|
67
|
+
callId: string;
|
|
68
|
+
type: 'reconnected';
|
|
69
|
+
} | {
|
|
70
|
+
callId: string;
|
|
71
|
+
type: 'qualityWarning';
|
|
72
|
+
warning: QualityWarning;
|
|
73
|
+
} | {
|
|
74
|
+
callId: string;
|
|
75
|
+
type: 'ended';
|
|
76
|
+
reason: 'completed' | 'failed' | 'busy' | 'noAnswer';
|
|
77
|
+
error?: SentVoiceError;
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/adapter/types.ts"],"names":[],"mappings":"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"}
|
package/adapter/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/adapter/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/adapter/types.ts"],"names":[],"mappings":""}
|
package/audio.d.mts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { TypedEmitter, type Log } from '@sentdm/voice-client-core';
|
|
2
|
+
export interface AudioControllerEvents {
|
|
3
|
+
deviceChanged: () => void;
|
|
4
|
+
}
|
|
5
|
+
interface AudioAdapter {
|
|
6
|
+
setInputDevice(deviceId: string): Promise<void>;
|
|
7
|
+
setOutputDevice(deviceId: string): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export interface AudioLifecycle {
|
|
10
|
+
loaded(adapter: AudioAdapter): void;
|
|
11
|
+
callStarted(): void;
|
|
12
|
+
destroyed(): void;
|
|
13
|
+
}
|
|
14
|
+
interface AudioProvider {
|
|
15
|
+
check(): void;
|
|
16
|
+
onLifecycle(lifecycle: AudioLifecycle): void;
|
|
17
|
+
}
|
|
18
|
+
export declare class AudioController extends TypedEmitter<AudioControllerEvents> {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(log: Log, inputDeviceId: string | undefined, outputDeviceId: string | undefined, provider: AudioProvider);
|
|
21
|
+
/**
|
|
22
|
+
* Lists the microphones. Browsers leave labels and ids empty, and may list only one, until the
|
|
23
|
+
* user has allowed microphone access in the page, which the first call asks for.
|
|
24
|
+
*/
|
|
25
|
+
inputDevices(): Promise<MediaDeviceInfo[]>;
|
|
26
|
+
/** Lists the speakers, which browsers also hide until the user has allowed microphone access. */
|
|
27
|
+
outputDevices(): Promise<MediaDeviceInfo[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Switches the microphone of the call in progress and of later calls, falling back to the
|
|
30
|
+
* default one while the device is missing. Called before `register()`, it takes effect from `register()`.
|
|
31
|
+
*/
|
|
32
|
+
setInputDevice(deviceId: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Plays calls through this speaker. Throws `CapabilityUnsupportedError` in browsers that cannot
|
|
35
|
+
* choose the audio output. Called before `register()`, it takes effect from `register()`.
|
|
36
|
+
*/
|
|
37
|
+
setOutputDevice(deviceId: string): Promise<void>;
|
|
38
|
+
on<E extends keyof AudioControllerEvents>(event: E, listener: AudioControllerEvents[E]): this;
|
|
39
|
+
once<E extends keyof AudioControllerEvents>(event: E, listener: AudioControllerEvents[E]): this;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=audio.d.mts.map
|
package/audio.d.mts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.d.mts","sourceRoot":"","sources":["src/audio.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,YAAY,EAAE,KAAK,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAE/F,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,UAAU,YAAY;IACpB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC,WAAW,IAAI,IAAI,CAAC;IACpB,SAAS,IAAI,IAAI,CAAC;CACnB;AAED,UAAU,aAAa;IACrB,KAAK,IAAI,IAAI,CAAC;IACd,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;CAC9C;AAED,qBAAa,eAAgB,SAAQ,YAAY,CAAC,qBAAqB,CAAC;;gBAWpE,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,QAAQ,EAAE,aAAa;IAczB;;;OAGG;IACH,YAAY,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAI1C,iGAAiG;IACjG,aAAa,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAI3C;;;OAGG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASrD;;;OAGG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7C,EAAE,CAAC,CAAC,SAAS,MAAM,qBAAqB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI;IAK7F,IAAI,CAAC,CAAC,SAAS,MAAM,qBAAqB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI;CAwEzG"}
|
package/audio.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { TypedEmitter, type Log } from '@sentdm/voice-client-core';
|
|
2
|
+
export interface AudioControllerEvents {
|
|
3
|
+
deviceChanged: () => void;
|
|
4
|
+
}
|
|
5
|
+
interface AudioAdapter {
|
|
6
|
+
setInputDevice(deviceId: string): Promise<void>;
|
|
7
|
+
setOutputDevice(deviceId: string): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export interface AudioLifecycle {
|
|
10
|
+
loaded(adapter: AudioAdapter): void;
|
|
11
|
+
callStarted(): void;
|
|
12
|
+
destroyed(): void;
|
|
13
|
+
}
|
|
14
|
+
interface AudioProvider {
|
|
15
|
+
check(): void;
|
|
16
|
+
onLifecycle(lifecycle: AudioLifecycle): void;
|
|
17
|
+
}
|
|
18
|
+
export declare class AudioController extends TypedEmitter<AudioControllerEvents> {
|
|
19
|
+
#private;
|
|
20
|
+
constructor(log: Log, inputDeviceId: string | undefined, outputDeviceId: string | undefined, provider: AudioProvider);
|
|
21
|
+
/**
|
|
22
|
+
* Lists the microphones. Browsers leave labels and ids empty, and may list only one, until the
|
|
23
|
+
* user has allowed microphone access in the page, which the first call asks for.
|
|
24
|
+
*/
|
|
25
|
+
inputDevices(): Promise<MediaDeviceInfo[]>;
|
|
26
|
+
/** Lists the speakers, which browsers also hide until the user has allowed microphone access. */
|
|
27
|
+
outputDevices(): Promise<MediaDeviceInfo[]>;
|
|
28
|
+
/**
|
|
29
|
+
* Switches the microphone of the call in progress and of later calls, falling back to the
|
|
30
|
+
* default one while the device is missing. Called before `register()`, it takes effect from `register()`.
|
|
31
|
+
*/
|
|
32
|
+
setInputDevice(deviceId: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Plays calls through this speaker. Throws `CapabilityUnsupportedError` in browsers that cannot
|
|
35
|
+
* choose the audio output. Called before `register()`, it takes effect from `register()`.
|
|
36
|
+
*/
|
|
37
|
+
setOutputDevice(deviceId: string): Promise<void>;
|
|
38
|
+
on<E extends keyof AudioControllerEvents>(event: E, listener: AudioControllerEvents[E]): this;
|
|
39
|
+
once<E extends keyof AudioControllerEvents>(event: E, listener: AudioControllerEvents[E]): this;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=audio.d.ts.map
|
package/audio.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["src/audio.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,YAAY,EAAE,KAAK,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAE/F,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,UAAU,YAAY;IACpB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC,WAAW,IAAI,IAAI,CAAC;IACpB,SAAS,IAAI,IAAI,CAAC;CACnB;AAED,UAAU,aAAa;IACrB,KAAK,IAAI,IAAI,CAAC;IACd,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;CAC9C;AAED,qBAAa,eAAgB,SAAQ,YAAY,CAAC,qBAAqB,CAAC;;gBAWpE,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,QAAQ,EAAE,aAAa;IAczB;;;OAGG;IACH,YAAY,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAI1C,iGAAiG;IACjG,aAAa,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAI3C;;;OAGG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASrD;;;OAGG;IACG,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7C,EAAE,CAAC,CAAC,SAAS,MAAM,qBAAqB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI;IAK7F,IAAI,CAAC,CAAC,SAAS,MAAM,qBAAqB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,IAAI;CAwEzG"}
|
package/audio.js
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _AudioController_instances, _AudioController_log, _AudioController_provider, _AudioController_adapter, _AudioController_pendingInput, _AudioController_pendingOutput, _AudioController_listening, _AudioController_destroyed, _AudioController_deviceChanged, _AudioController_list, _AudioController_load, _AudioController_checkInput, _AudioController_retryOutput, _AudioController_listen, _AudioController_destroy;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AudioController = void 0;
|
|
5
|
+
const tslib_1 = require("./internal/tslib.js");
|
|
6
|
+
/// <reference lib="dom" />
|
|
7
|
+
const voice_client_core_1 = require("@sentdm/voice-client-core");
|
|
8
|
+
class AudioController extends voice_client_core_1.TypedEmitter {
|
|
9
|
+
constructor(log, inputDeviceId, outputDeviceId, provider) {
|
|
10
|
+
super();
|
|
11
|
+
_AudioController_instances.add(this);
|
|
12
|
+
_AudioController_log.set(this, void 0);
|
|
13
|
+
_AudioController_provider.set(this, void 0);
|
|
14
|
+
_AudioController_adapter.set(this, void 0);
|
|
15
|
+
_AudioController_pendingInput.set(this, void 0);
|
|
16
|
+
_AudioController_pendingOutput.set(this, void 0);
|
|
17
|
+
_AudioController_listening.set(this, false);
|
|
18
|
+
_AudioController_destroyed.set(this, false);
|
|
19
|
+
_AudioController_deviceChanged.set(this, () => this.emit('deviceChanged'));
|
|
20
|
+
tslib_1.__classPrivateFieldSet(this, _AudioController_log, log, "f");
|
|
21
|
+
tslib_1.__classPrivateFieldSet(this, _AudioController_pendingInput, inputDeviceId, "f");
|
|
22
|
+
tslib_1.__classPrivateFieldSet(this, _AudioController_pendingOutput, outputDeviceId, "f");
|
|
23
|
+
tslib_1.__classPrivateFieldSet(this, _AudioController_provider, provider, "f");
|
|
24
|
+
provider.onLifecycle({
|
|
25
|
+
loaded: (adapter) => tslib_1.__classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_load).call(this, adapter),
|
|
26
|
+
callStarted: () => tslib_1.__classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_retryOutput).call(this),
|
|
27
|
+
destroyed: () => tslib_1.__classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_destroy).call(this),
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Lists the microphones. Browsers leave labels and ids empty, and may list only one, until the
|
|
32
|
+
* user has allowed microphone access in the page, which the first call asks for.
|
|
33
|
+
*/
|
|
34
|
+
inputDevices() {
|
|
35
|
+
return tslib_1.__classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_list).call(this, 'audioinput');
|
|
36
|
+
}
|
|
37
|
+
/** Lists the speakers, which browsers also hide until the user has allowed microphone access. */
|
|
38
|
+
outputDevices() {
|
|
39
|
+
return tslib_1.__classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_list).call(this, 'audiooutput');
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Switches the microphone of the call in progress and of later calls, falling back to the
|
|
43
|
+
* default one while the device is missing. Called before `register()`, it takes effect from `register()`.
|
|
44
|
+
*/
|
|
45
|
+
async setInputDevice(deviceId) {
|
|
46
|
+
tslib_1.__classPrivateFieldGet(this, _AudioController_provider, "f").check();
|
|
47
|
+
if (!tslib_1.__classPrivateFieldGet(this, _AudioController_adapter, "f")) {
|
|
48
|
+
tslib_1.__classPrivateFieldSet(this, _AudioController_pendingInput, deviceId, "f");
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
await tslib_1.__classPrivateFieldGet(this, _AudioController_adapter, "f").setInputDevice(deviceId);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Plays calls through this speaker. Throws `CapabilityUnsupportedError` in browsers that cannot
|
|
55
|
+
* choose the audio output. Called before `register()`, it takes effect from `register()`.
|
|
56
|
+
*/
|
|
57
|
+
async setOutputDevice(deviceId) {
|
|
58
|
+
tslib_1.__classPrivateFieldGet(this, _AudioController_provider, "f").check();
|
|
59
|
+
if (!('setSinkId' in HTMLMediaElement.prototype)) {
|
|
60
|
+
throw new voice_client_core_1.CapabilityUnsupportedError({
|
|
61
|
+
message: 'Choosing the audio output device is not supported by this browser.',
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
if (!tslib_1.__classPrivateFieldGet(this, _AudioController_adapter, "f")) {
|
|
65
|
+
tslib_1.__classPrivateFieldSet(this, _AudioController_pendingOutput, deviceId, "f");
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
tslib_1.__classPrivateFieldSet(this, _AudioController_pendingOutput, undefined, "f");
|
|
69
|
+
await tslib_1.__classPrivateFieldGet(this, _AudioController_adapter, "f").setOutputDevice(deviceId);
|
|
70
|
+
}
|
|
71
|
+
on(event, listener) {
|
|
72
|
+
tslib_1.__classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_listen).call(this);
|
|
73
|
+
return super.on(event, listener);
|
|
74
|
+
}
|
|
75
|
+
once(event, listener) {
|
|
76
|
+
tslib_1.__classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_listen).call(this);
|
|
77
|
+
return super.once(event, listener);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.AudioController = AudioController;
|
|
81
|
+
_AudioController_log = new WeakMap(), _AudioController_provider = new WeakMap(), _AudioController_adapter = new WeakMap(), _AudioController_pendingInput = new WeakMap(), _AudioController_pendingOutput = new WeakMap(), _AudioController_listening = new WeakMap(), _AudioController_destroyed = new WeakMap(), _AudioController_deviceChanged = new WeakMap(), _AudioController_instances = new WeakSet(), _AudioController_list = async function _AudioController_list(kind) {
|
|
82
|
+
if (!navigator.mediaDevices) {
|
|
83
|
+
throw new voice_client_core_1.CapabilityUnsupportedError({
|
|
84
|
+
message: 'Audio devices can only be listed in a secure context (HTTPS or localhost).',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
88
|
+
return devices.filter((device) => device.kind === kind);
|
|
89
|
+
}, _AudioController_load = function _AudioController_load(adapter) {
|
|
90
|
+
tslib_1.__classPrivateFieldSet(this, _AudioController_adapter, adapter, "f");
|
|
91
|
+
const input = tslib_1.__classPrivateFieldGet(this, _AudioController_pendingInput, "f");
|
|
92
|
+
const output = tslib_1.__classPrivateFieldGet(this, _AudioController_pendingOutput, "f");
|
|
93
|
+
if (input !== undefined) {
|
|
94
|
+
adapter
|
|
95
|
+
.setInputDevice(input)
|
|
96
|
+
.catch((error) => tslib_1.__classPrivateFieldGet(this, _AudioController_log, "f").warn(`The audio input device ${input} could not be used, using the default device: ${error}`));
|
|
97
|
+
void tslib_1.__classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_checkInput).call(this, input);
|
|
98
|
+
}
|
|
99
|
+
if (output !== undefined) {
|
|
100
|
+
adapter.setOutputDevice(output).then(() => (tslib_1.__classPrivateFieldSet(this, _AudioController_pendingOutput, undefined, "f")), (error) => tslib_1.__classPrivateFieldGet(this, _AudioController_log, "f").info(`The audio output device ${output} could not be used yet, retrying on the first call: ${error}`));
|
|
101
|
+
}
|
|
102
|
+
}, _AudioController_checkInput = async function _AudioController_checkInput(deviceId) {
|
|
103
|
+
const ids = (await this.inputDevices().catch(() => [])).map((device) => device.deviceId);
|
|
104
|
+
if (ids.some(Boolean) && !ids.includes(deviceId)) {
|
|
105
|
+
tslib_1.__classPrivateFieldGet(this, _AudioController_log, "f").warn(`The audio input device ${deviceId} was not found, using the default device.`);
|
|
106
|
+
}
|
|
107
|
+
}, _AudioController_retryOutput = function _AudioController_retryOutput() {
|
|
108
|
+
const output = tslib_1.__classPrivateFieldGet(this, _AudioController_pendingOutput, "f");
|
|
109
|
+
if (output === undefined || !tslib_1.__classPrivateFieldGet(this, _AudioController_adapter, "f"))
|
|
110
|
+
return;
|
|
111
|
+
tslib_1.__classPrivateFieldSet(this, _AudioController_pendingOutput, undefined, "f");
|
|
112
|
+
tslib_1.__classPrivateFieldGet(this, _AudioController_adapter, "f")
|
|
113
|
+
.setOutputDevice(output)
|
|
114
|
+
.catch((error) => tslib_1.__classPrivateFieldGet(this, _AudioController_log, "f").warn(`The audio output device ${output} could not be used, using the default device: ${error}`));
|
|
115
|
+
}, _AudioController_listen = function _AudioController_listen() {
|
|
116
|
+
if (tslib_1.__classPrivateFieldGet(this, _AudioController_listening, "f") || tslib_1.__classPrivateFieldGet(this, _AudioController_destroyed, "f") || !navigator.mediaDevices)
|
|
117
|
+
return;
|
|
118
|
+
navigator.mediaDevices.addEventListener('devicechange', tslib_1.__classPrivateFieldGet(this, _AudioController_deviceChanged, "f"));
|
|
119
|
+
tslib_1.__classPrivateFieldSet(this, _AudioController_listening, true, "f");
|
|
120
|
+
}, _AudioController_destroy = function _AudioController_destroy() {
|
|
121
|
+
tslib_1.__classPrivateFieldSet(this, _AudioController_destroyed, true, "f");
|
|
122
|
+
if (tslib_1.__classPrivateFieldGet(this, _AudioController_listening, "f"))
|
|
123
|
+
navigator.mediaDevices.removeEventListener('devicechange', tslib_1.__classPrivateFieldGet(this, _AudioController_deviceChanged, "f"));
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=audio.js.map
|
package/audio.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.js","sourceRoot":"","sources":["src/audio.ts"],"names":[],"mappings":"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"}
|
package/audio.mjs
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
var _AudioController_instances, _AudioController_log, _AudioController_provider, _AudioController_adapter, _AudioController_pendingInput, _AudioController_pendingOutput, _AudioController_listening, _AudioController_destroyed, _AudioController_deviceChanged, _AudioController_list, _AudioController_load, _AudioController_checkInput, _AudioController_retryOutput, _AudioController_listen, _AudioController_destroy;
|
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet } from "./internal/tslib.mjs";
|
|
3
|
+
/// <reference lib="dom" />
|
|
4
|
+
import { CapabilityUnsupportedError, TypedEmitter } from '@sentdm/voice-client-core';
|
|
5
|
+
export class AudioController extends TypedEmitter {
|
|
6
|
+
constructor(log, inputDeviceId, outputDeviceId, provider) {
|
|
7
|
+
super();
|
|
8
|
+
_AudioController_instances.add(this);
|
|
9
|
+
_AudioController_log.set(this, void 0);
|
|
10
|
+
_AudioController_provider.set(this, void 0);
|
|
11
|
+
_AudioController_adapter.set(this, void 0);
|
|
12
|
+
_AudioController_pendingInput.set(this, void 0);
|
|
13
|
+
_AudioController_pendingOutput.set(this, void 0);
|
|
14
|
+
_AudioController_listening.set(this, false);
|
|
15
|
+
_AudioController_destroyed.set(this, false);
|
|
16
|
+
_AudioController_deviceChanged.set(this, () => this.emit('deviceChanged'));
|
|
17
|
+
__classPrivateFieldSet(this, _AudioController_log, log, "f");
|
|
18
|
+
__classPrivateFieldSet(this, _AudioController_pendingInput, inputDeviceId, "f");
|
|
19
|
+
__classPrivateFieldSet(this, _AudioController_pendingOutput, outputDeviceId, "f");
|
|
20
|
+
__classPrivateFieldSet(this, _AudioController_provider, provider, "f");
|
|
21
|
+
provider.onLifecycle({
|
|
22
|
+
loaded: (adapter) => __classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_load).call(this, adapter),
|
|
23
|
+
callStarted: () => __classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_retryOutput).call(this),
|
|
24
|
+
destroyed: () => __classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_destroy).call(this),
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Lists the microphones. Browsers leave labels and ids empty, and may list only one, until the
|
|
29
|
+
* user has allowed microphone access in the page, which the first call asks for.
|
|
30
|
+
*/
|
|
31
|
+
inputDevices() {
|
|
32
|
+
return __classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_list).call(this, 'audioinput');
|
|
33
|
+
}
|
|
34
|
+
/** Lists the speakers, which browsers also hide until the user has allowed microphone access. */
|
|
35
|
+
outputDevices() {
|
|
36
|
+
return __classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_list).call(this, 'audiooutput');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Switches the microphone of the call in progress and of later calls, falling back to the
|
|
40
|
+
* default one while the device is missing. Called before `register()`, it takes effect from `register()`.
|
|
41
|
+
*/
|
|
42
|
+
async setInputDevice(deviceId) {
|
|
43
|
+
__classPrivateFieldGet(this, _AudioController_provider, "f").check();
|
|
44
|
+
if (!__classPrivateFieldGet(this, _AudioController_adapter, "f")) {
|
|
45
|
+
__classPrivateFieldSet(this, _AudioController_pendingInput, deviceId, "f");
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
await __classPrivateFieldGet(this, _AudioController_adapter, "f").setInputDevice(deviceId);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Plays calls through this speaker. Throws `CapabilityUnsupportedError` in browsers that cannot
|
|
52
|
+
* choose the audio output. Called before `register()`, it takes effect from `register()`.
|
|
53
|
+
*/
|
|
54
|
+
async setOutputDevice(deviceId) {
|
|
55
|
+
__classPrivateFieldGet(this, _AudioController_provider, "f").check();
|
|
56
|
+
if (!('setSinkId' in HTMLMediaElement.prototype)) {
|
|
57
|
+
throw new CapabilityUnsupportedError({
|
|
58
|
+
message: 'Choosing the audio output device is not supported by this browser.',
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
if (!__classPrivateFieldGet(this, _AudioController_adapter, "f")) {
|
|
62
|
+
__classPrivateFieldSet(this, _AudioController_pendingOutput, deviceId, "f");
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
__classPrivateFieldSet(this, _AudioController_pendingOutput, undefined, "f");
|
|
66
|
+
await __classPrivateFieldGet(this, _AudioController_adapter, "f").setOutputDevice(deviceId);
|
|
67
|
+
}
|
|
68
|
+
on(event, listener) {
|
|
69
|
+
__classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_listen).call(this);
|
|
70
|
+
return super.on(event, listener);
|
|
71
|
+
}
|
|
72
|
+
once(event, listener) {
|
|
73
|
+
__classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_listen).call(this);
|
|
74
|
+
return super.once(event, listener);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
_AudioController_log = new WeakMap(), _AudioController_provider = new WeakMap(), _AudioController_adapter = new WeakMap(), _AudioController_pendingInput = new WeakMap(), _AudioController_pendingOutput = new WeakMap(), _AudioController_listening = new WeakMap(), _AudioController_destroyed = new WeakMap(), _AudioController_deviceChanged = new WeakMap(), _AudioController_instances = new WeakSet(), _AudioController_list = async function _AudioController_list(kind) {
|
|
78
|
+
if (!navigator.mediaDevices) {
|
|
79
|
+
throw new CapabilityUnsupportedError({
|
|
80
|
+
message: 'Audio devices can only be listed in a secure context (HTTPS or localhost).',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
84
|
+
return devices.filter((device) => device.kind === kind);
|
|
85
|
+
}, _AudioController_load = function _AudioController_load(adapter) {
|
|
86
|
+
__classPrivateFieldSet(this, _AudioController_adapter, adapter, "f");
|
|
87
|
+
const input = __classPrivateFieldGet(this, _AudioController_pendingInput, "f");
|
|
88
|
+
const output = __classPrivateFieldGet(this, _AudioController_pendingOutput, "f");
|
|
89
|
+
if (input !== undefined) {
|
|
90
|
+
adapter
|
|
91
|
+
.setInputDevice(input)
|
|
92
|
+
.catch((error) => __classPrivateFieldGet(this, _AudioController_log, "f").warn(`The audio input device ${input} could not be used, using the default device: ${error}`));
|
|
93
|
+
void __classPrivateFieldGet(this, _AudioController_instances, "m", _AudioController_checkInput).call(this, input);
|
|
94
|
+
}
|
|
95
|
+
if (output !== undefined) {
|
|
96
|
+
adapter.setOutputDevice(output).then(() => (__classPrivateFieldSet(this, _AudioController_pendingOutput, undefined, "f")), (error) => __classPrivateFieldGet(this, _AudioController_log, "f").info(`The audio output device ${output} could not be used yet, retrying on the first call: ${error}`));
|
|
97
|
+
}
|
|
98
|
+
}, _AudioController_checkInput = async function _AudioController_checkInput(deviceId) {
|
|
99
|
+
const ids = (await this.inputDevices().catch(() => [])).map((device) => device.deviceId);
|
|
100
|
+
if (ids.some(Boolean) && !ids.includes(deviceId)) {
|
|
101
|
+
__classPrivateFieldGet(this, _AudioController_log, "f").warn(`The audio input device ${deviceId} was not found, using the default device.`);
|
|
102
|
+
}
|
|
103
|
+
}, _AudioController_retryOutput = function _AudioController_retryOutput() {
|
|
104
|
+
const output = __classPrivateFieldGet(this, _AudioController_pendingOutput, "f");
|
|
105
|
+
if (output === undefined || !__classPrivateFieldGet(this, _AudioController_adapter, "f"))
|
|
106
|
+
return;
|
|
107
|
+
__classPrivateFieldSet(this, _AudioController_pendingOutput, undefined, "f");
|
|
108
|
+
__classPrivateFieldGet(this, _AudioController_adapter, "f")
|
|
109
|
+
.setOutputDevice(output)
|
|
110
|
+
.catch((error) => __classPrivateFieldGet(this, _AudioController_log, "f").warn(`The audio output device ${output} could not be used, using the default device: ${error}`));
|
|
111
|
+
}, _AudioController_listen = function _AudioController_listen() {
|
|
112
|
+
if (__classPrivateFieldGet(this, _AudioController_listening, "f") || __classPrivateFieldGet(this, _AudioController_destroyed, "f") || !navigator.mediaDevices)
|
|
113
|
+
return;
|
|
114
|
+
navigator.mediaDevices.addEventListener('devicechange', __classPrivateFieldGet(this, _AudioController_deviceChanged, "f"));
|
|
115
|
+
__classPrivateFieldSet(this, _AudioController_listening, true, "f");
|
|
116
|
+
}, _AudioController_destroy = function _AudioController_destroy() {
|
|
117
|
+
__classPrivateFieldSet(this, _AudioController_destroyed, true, "f");
|
|
118
|
+
if (__classPrivateFieldGet(this, _AudioController_listening, "f"))
|
|
119
|
+
navigator.mediaDevices.removeEventListener('devicechange', __classPrivateFieldGet(this, _AudioController_deviceChanged, "f"));
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=audio.mjs.map
|
package/audio.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.mjs","sourceRoot":"","sources":["src/audio.ts"],"names":[],"mappings":"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"}
|