@sentdm/voice-client 0.0.0-stage → 0.1.1

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.
Files changed (99) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/LICENSE +201 -0
  3. package/README.md +283 -2
  4. package/adapter/loader.d.mts +3 -0
  5. package/adapter/loader.d.mts.map +1 -0
  6. package/adapter/loader.d.ts +3 -0
  7. package/adapter/loader.d.ts.map +1 -0
  8. package/adapter/loader.js +6 -0
  9. package/adapter/loader.js.map +1 -0
  10. package/adapter/loader.mjs +3 -0
  11. package/adapter/loader.mjs.map +1 -0
  12. package/adapter/sinch.d.mts +3 -0
  13. package/adapter/sinch.d.mts.map +1 -0
  14. package/adapter/sinch.d.ts +3 -0
  15. package/adapter/sinch.d.ts.map +1 -0
  16. package/adapter/sinch.js +280 -0
  17. package/adapter/sinch.js.map +1 -0
  18. package/adapter/sinch.mjs +276 -0
  19. package/adapter/sinch.mjs.map +1 -0
  20. package/adapter/types.d.mts +78 -0
  21. package/adapter/types.d.mts.map +1 -0
  22. package/adapter/types.d.ts +78 -0
  23. package/adapter/types.d.ts.map +1 -0
  24. package/adapter/types.js +3 -0
  25. package/adapter/types.js.map +1 -0
  26. package/adapter/types.mjs +2 -0
  27. package/adapter/types.mjs.map +1 -0
  28. package/audio.d.mts +42 -0
  29. package/audio.d.mts.map +1 -0
  30. package/audio.d.ts +42 -0
  31. package/audio.d.ts.map +1 -0
  32. package/audio.js +125 -0
  33. package/audio.js.map +1 -0
  34. package/audio.mjs +121 -0
  35. package/audio.mjs.map +1 -0
  36. package/call.d.mts +60 -0
  37. package/call.d.mts.map +1 -0
  38. package/call.d.ts +60 -0
  39. package/call.d.ts.map +1 -0
  40. package/call.js +84 -0
  41. package/call.js.map +1 -0
  42. package/call.mjs +80 -0
  43. package/call.mjs.map +1 -0
  44. package/client.d.mts +111 -0
  45. package/client.d.mts.map +1 -0
  46. package/client.d.ts +111 -0
  47. package/client.d.ts.map +1 -0
  48. package/client.js +365 -0
  49. package/client.js.map +1 -0
  50. package/client.mjs +361 -0
  51. package/client.mjs.map +1 -0
  52. package/errors.d.mts +2 -0
  53. package/errors.d.mts.map +1 -0
  54. package/errors.d.ts +2 -0
  55. package/errors.d.ts.map +1 -0
  56. package/errors.js +16 -0
  57. package/errors.js.map +1 -0
  58. package/errors.mjs +4 -0
  59. package/errors.mjs.map +1 -0
  60. package/index.d.mts +4 -0
  61. package/index.d.mts.map +1 -0
  62. package/index.d.ts +4 -0
  63. package/index.d.ts.map +1 -0
  64. package/index.js +18 -0
  65. package/index.js.map +1 -0
  66. package/index.mjs +4 -0
  67. package/index.mjs.map +1 -0
  68. package/internal/tslib.js +75 -0
  69. package/internal/tslib.mjs +17 -0
  70. package/invite.d.mts +28 -0
  71. package/invite.d.mts.map +1 -0
  72. package/invite.d.ts +28 -0
  73. package/invite.d.ts.map +1 -0
  74. package/invite.js +64 -0
  75. package/invite.js.map +1 -0
  76. package/invite.mjs +60 -0
  77. package/invite.mjs.map +1 -0
  78. package/package.json +41 -3
  79. package/src/adapter/loader.ts +4 -0
  80. package/src/adapter/sinch.ts +333 -0
  81. package/src/adapter/types.ts +63 -0
  82. package/src/audio.ts +174 -0
  83. package/src/call.ts +145 -0
  84. package/src/client.ts +582 -0
  85. package/src/errors.ts +15 -0
  86. package/src/index.ts +14 -0
  87. package/src/invite.ts +75 -0
  88. package/src/sw.js +14 -0
  89. package/src/tsconfig.json +11 -0
  90. package/src/version.ts +1 -0
  91. package/sw.js +14 -0
  92. package/version.d.mts +2 -0
  93. package/version.d.mts.map +1 -0
  94. package/version.d.ts +2 -0
  95. package/version.d.ts.map +1 -0
  96. package/version.js +5 -0
  97. package/version.js.map +1 -0
  98. package/version.mjs +2 -0
  99. package/version.mjs.map +1 -0
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+ var _SinchAdapter_instances, _SinchAdapter_sinch, _SinchAdapter_options, _SinchAdapter_client, _SinchAdapter_token, _SinchAdapter_inputDeviceId, _SinchAdapter_audio, _SinchAdapter_calls, _SinchAdapter_answerRetryAt, _SinchAdapter_incomingListeners, _SinchAdapter_callEventListeners, _SinchAdapter_start, _SinchAdapter_stop, _SinchAdapter_started, _SinchAdapter_useInput, _SinchAdapter_playback, _SinchAdapter_placed, _SinchAdapter_play, _SinchAdapter_receive, _SinchAdapter_track, _SinchAdapter_ended, _SinchAdapter_warning, _SinchAdapter_emit;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.loadSinchAdapter = void 0;
5
+ const tslib_1 = require("../internal/tslib.js");
6
+ const voice_client_core_1 = require("@sentdm/voice-client-core");
7
+ const environmentHost = 'ocra-euc1.api.sinch.com';
8
+ const applicationPrefix = '//rtc.sinch.com/applications/';
9
+ const answerThrottle = 1500;
10
+ const providerError = (error) => error instanceof voice_client_core_1.SentVoiceError ? error : (new voice_client_core_1.SentVoiceError({
11
+ code: 'UNKNOWN',
12
+ category: 'signaling',
13
+ retriable: false,
14
+ message: 'An unexpected calling error occurred.',
15
+ providerDetail: error,
16
+ }));
17
+ // The Sinch backend refuses a call it cannot set up with `Unable to connect call (<reason>)`, an HTTP
18
+ // failure whose only discriminator is that text. The caller gets a stable code and Sent's wording; the
19
+ // provider's reason is kept as provider detail, for telemetry.
20
+ const setupRefusal = /^Unable to connect call(?: \((.+)\))?/;
21
+ const setupRefusalMessages = {
22
+ 'destination user not found': 'The destination is not registered.',
23
+ };
24
+ const callSetupError = (error) => {
25
+ const match = setupRefusal.exec(error.message);
26
+ if (!match)
27
+ return undefined;
28
+ const reason = match[1];
29
+ const message = reason === undefined ? undefined : setupRefusalMessages[reason];
30
+ return new voice_client_core_1.CallFailedError({
31
+ message: message ?? 'The call could not be connected.',
32
+ providerDetail: error,
33
+ });
34
+ };
35
+ const rethrow = (error) => {
36
+ throw providerError(error);
37
+ };
38
+ const guard = (action) => {
39
+ try {
40
+ return action();
41
+ }
42
+ catch (error) {
43
+ return rethrow(error);
44
+ }
45
+ };
46
+ const loadSinchAdapter = async (options) => new SinchAdapter(await Promise.resolve().then(() => tslib_1.__importStar(require('sinch-rtc'))).catch((error) => {
47
+ throw new voice_client_core_1.NetworkError({ message: 'The calling provider could not be loaded.', providerDetail: error });
48
+ }), options);
49
+ exports.loadSinchAdapter = loadSinchAdapter;
50
+ class SinchAdapter {
51
+ constructor(sinch, options) {
52
+ _SinchAdapter_instances.add(this);
53
+ _SinchAdapter_sinch.set(this, void 0);
54
+ _SinchAdapter_options.set(this, void 0);
55
+ _SinchAdapter_client.set(this, void 0);
56
+ _SinchAdapter_token.set(this, '');
57
+ _SinchAdapter_inputDeviceId.set(this, void 0);
58
+ _SinchAdapter_audio.set(this, void 0);
59
+ _SinchAdapter_calls.set(this, new Map());
60
+ _SinchAdapter_answerRetryAt.set(this, new Map());
61
+ _SinchAdapter_incomingListeners.set(this, []);
62
+ _SinchAdapter_callEventListeners.set(this, []);
63
+ tslib_1.__classPrivateFieldSet(this, _SinchAdapter_sinch, sinch, "f");
64
+ tslib_1.__classPrivateFieldSet(this, _SinchAdapter_options, options, "f");
65
+ }
66
+ async register(token) {
67
+ tslib_1.__classPrivateFieldSet(this, _SinchAdapter_token, token, "f");
68
+ tslib_1.__classPrivateFieldSet(this, _SinchAdapter_client, tslib_1.__classPrivateFieldGet(this, _SinchAdapter_client, "f") ?? await tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_start).call(this, token).catch(rethrow), "f");
69
+ }
70
+ async unregister() {
71
+ const client = tslib_1.__classPrivateFieldGet(this, _SinchAdapter_client, "f");
72
+ tslib_1.__classPrivateFieldSet(this, _SinchAdapter_client, undefined, "f");
73
+ if (client)
74
+ await tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_stop).call(this, client).catch(rethrow);
75
+ }
76
+ async call(target) {
77
+ const { callClient } = tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_started).call(this);
78
+ return tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_placed).call(this, target.kind === 'user' ? callClient.callUser(target.id) : callClient.callPhoneNumber(target.number));
79
+ }
80
+ async joinConference(room) {
81
+ return tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_placed).call(this, tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_started).call(this).callClient.callConference(room));
82
+ }
83
+ async answer(callId) {
84
+ const wait = (tslib_1.__classPrivateFieldGet(this, _SinchAdapter_answerRetryAt, "f").get(callId) ?? 0) - Date.now();
85
+ if (wait > 0)
86
+ await new Promise((resolve) => setTimeout(resolve, wait));
87
+ const call = tslib_1.__classPrivateFieldGet(this, _SinchAdapter_calls, "f").get(callId);
88
+ if (!call)
89
+ return;
90
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_answerRetryAt, "f").set(callId, Date.now() + answerThrottle);
91
+ await call.answer().catch((error) => {
92
+ throw new voice_client_core_1.MediaPermissionError({ providerDetail: error });
93
+ });
94
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_play).call(this, call);
95
+ }
96
+ async reject(callId) {
97
+ return this.hangup(callId);
98
+ }
99
+ async hangup(callId) {
100
+ guard(() => tslib_1.__classPrivateFieldGet(this, _SinchAdapter_calls, "f").get(callId)?.hangup());
101
+ }
102
+ mute(callId, muted) {
103
+ const call = tslib_1.__classPrivateFieldGet(this, _SinchAdapter_calls, "f").get(callId);
104
+ if (muted)
105
+ call?.mute();
106
+ else
107
+ call?.unmute();
108
+ }
109
+ sendDigits(callId, digits) {
110
+ guard(() => tslib_1.__classPrivateFieldGet(this, _SinchAdapter_calls, "f").get(callId)?.sendDtmf(digits));
111
+ }
112
+ async getStats(callId) {
113
+ const call = tslib_1.__classPrivateFieldGet(this, _SinchAdapter_calls, "f").get(callId);
114
+ const report = await call?.getPeerConnectionStats();
115
+ const stats = { jitter: 0, packetLoss: 0, rtt: 0 };
116
+ report?.forEach((entry) => {
117
+ if (entry.type === 'inbound-rtp' && entry.kind === 'audio') {
118
+ const lost = Math.max(0, entry.packetsLost ?? 0);
119
+ const packets = lost + (entry.packetsReceived ?? 0);
120
+ stats.jitter = (entry.jitter ?? 0) * 1000;
121
+ stats.packetLoss = packets > 0 ? lost / packets : 0;
122
+ }
123
+ else if (entry.type === 'candidate-pair' && entry.state === 'succeeded') {
124
+ stats.rtt = (entry.currentRoundTripTime ?? 0) * 1000;
125
+ }
126
+ });
127
+ return stats;
128
+ }
129
+ onIncoming(listener) {
130
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_incomingListeners, "f").push(listener);
131
+ }
132
+ onCallEvent(listener) {
133
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_callEventListeners, "f").push(listener);
134
+ }
135
+ async setInputDevice(deviceId) {
136
+ tslib_1.__classPrivateFieldSet(this, _SinchAdapter_inputDeviceId, deviceId, "f");
137
+ if (tslib_1.__classPrivateFieldGet(this, _SinchAdapter_client, "f")?.isStarted())
138
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_useInput).call(this, tslib_1.__classPrivateFieldGet(this, _SinchAdapter_client, "f").callClient, deviceId);
139
+ }
140
+ async setOutputDevice(deviceId) {
141
+ const audio = tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_playback).call(this);
142
+ if (!('setSinkId' in audio)) {
143
+ throw new voice_client_core_1.CapabilityUnsupportedError({
144
+ message: 'Choosing the audio output device is not supported by this browser.',
145
+ });
146
+ }
147
+ await audio.setSinkId(deviceId).catch(rethrow);
148
+ }
149
+ }
150
+ _SinchAdapter_sinch = new WeakMap(), _SinchAdapter_options = new WeakMap(), _SinchAdapter_client = new WeakMap(), _SinchAdapter_token = new WeakMap(), _SinchAdapter_inputDeviceId = new WeakMap(), _SinchAdapter_audio = new WeakMap(), _SinchAdapter_calls = new WeakMap(), _SinchAdapter_answerRetryAt = new WeakMap(), _SinchAdapter_incomingListeners = new WeakMap(), _SinchAdapter_callEventListeners = new WeakMap(), _SinchAdapter_instances = new WeakSet(), _SinchAdapter_start = async function _SinchAdapter_start(token) {
151
+ const { iss, sub } = (0, voice_client_core_1.readClaims)(token);
152
+ const client = tslib_1.__classPrivateFieldGet(this, _SinchAdapter_sinch, "f").Sinch.getSinchClientBuilder()
153
+ .applicationKey(iss.slice(applicationPrefix.length))
154
+ .userId(sub.slice(`${iss}/users/`.length))
155
+ .environmentHost(environmentHost)
156
+ .build();
157
+ const { url, scope } = tslib_1.__classPrivateFieldGet(this, _SinchAdapter_options, "f").serviceWorker ?? {};
158
+ try {
159
+ await new Promise((resolve, reject) => {
160
+ client.addListener({
161
+ onCredentialsRequired: (_, registration) => void registration.register(tslib_1.__classPrivateFieldGet(this, _SinchAdapter_token, "f")),
162
+ onClientStarted: ({ callClient }) => {
163
+ callClient.addListener({ onIncomingCall: (_, call) => tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_receive).call(this, call) });
164
+ if (tslib_1.__classPrivateFieldGet(this, _SinchAdapter_inputDeviceId, "f") !== undefined)
165
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_useInput).call(this, callClient, tslib_1.__classPrivateFieldGet(this, _SinchAdapter_inputDeviceId, "f"));
166
+ resolve();
167
+ },
168
+ onClientFailed: (_, error) => reject(error),
169
+ });
170
+ client
171
+ .setSupportManagedPush(url, scope === undefined ? undefined : { scope })
172
+ .then(() => client.start(), reject);
173
+ });
174
+ }
175
+ catch (error) {
176
+ await tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_stop).call(this, client).catch(() => { });
177
+ throw error;
178
+ }
179
+ return client;
180
+ }, _SinchAdapter_stop = async function _SinchAdapter_stop(client) {
181
+ try {
182
+ await client.disableManagedPushSupport();
183
+ }
184
+ finally {
185
+ client.terminate();
186
+ }
187
+ }, _SinchAdapter_started = function _SinchAdapter_started() {
188
+ if (!tslib_1.__classPrivateFieldGet(this, _SinchAdapter_client, "f"))
189
+ throw new voice_client_core_1.NotRegisteredError();
190
+ return tslib_1.__classPrivateFieldGet(this, _SinchAdapter_client, "f");
191
+ }, _SinchAdapter_useInput = function _SinchAdapter_useInput(callClient, deviceId) {
192
+ callClient.setAudioTrackConstraints({ deviceId });
193
+ }, _SinchAdapter_playback = function _SinchAdapter_playback() {
194
+ return (tslib_1.__classPrivateFieldSet(this, _SinchAdapter_audio, tslib_1.__classPrivateFieldGet(this, _SinchAdapter_audio, "f") ?? (tslib_1.__classPrivateFieldGet(this, _SinchAdapter_options, "f").audioElement ?? new Audio()), "f"));
195
+ }, _SinchAdapter_placed = async function _SinchAdapter_placed(placing) {
196
+ const call = await placing.catch(rethrow);
197
+ if (!call.outgoingStream?.getAudioTracks().length) {
198
+ guard(() => call.hangup());
199
+ throw new voice_client_core_1.MediaPermissionError();
200
+ }
201
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_play).call(this, call);
202
+ return tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_track).call(this, call);
203
+ }, _SinchAdapter_play = function _SinchAdapter_play(call) {
204
+ const audio = tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_playback).call(this);
205
+ audio.autoplay = true;
206
+ audio.srcObject = call.incomingStream ?? null;
207
+ }, _SinchAdapter_receive = function _SinchAdapter_receive(call) {
208
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_track).call(this, call);
209
+ for (const listener of tslib_1.__classPrivateFieldGet(this, _SinchAdapter_incomingListeners, "f"))
210
+ listener({ callId: call.id, from: call.remoteUserId });
211
+ }, _SinchAdapter_track = function _SinchAdapter_track(call) {
212
+ const listener = {
213
+ onCallProgressing: () => tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_emit).call(this, { callId: call.id, type: 'ringing' }),
214
+ onCallAnswered: () => tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_emit).call(this, { callId: call.id, type: 'answered' }),
215
+ onCallEstablished: () => tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_emit).call(this, { callId: call.id, type: 'connected' }),
216
+ onCallQualityWarningEvent: (_, warning) => {
217
+ const event = tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_warning).call(this, call.id, warning);
218
+ if (event)
219
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_emit).call(this, event);
220
+ },
221
+ onCallEnded: () => {
222
+ call.removeListener(listener);
223
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_calls, "f").delete(call.id);
224
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_answerRetryAt, "f").delete(call.id);
225
+ if (tslib_1.__classPrivateFieldGet(this, _SinchAdapter_audio, "f") && tslib_1.__classPrivateFieldGet(this, _SinchAdapter_audio, "f").srcObject === call.incomingStream)
226
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_audio, "f").srcObject = null;
227
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_emit).call(this, tslib_1.__classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_ended).call(this, call));
228
+ },
229
+ };
230
+ call.addListener(listener);
231
+ tslib_1.__classPrivateFieldGet(this, _SinchAdapter_calls, "f").set(call.id, call);
232
+ return call.id;
233
+ }, _SinchAdapter_ended = function _SinchAdapter_ended({ id: callId, details: { endCause, error } }) {
234
+ const { CallEndCause, ErrorType } = tslib_1.__classPrivateFieldGet(this, _SinchAdapter_sinch, "f");
235
+ switch (endCause) {
236
+ case CallEndCause.Denied:
237
+ return { callId, type: 'ended', reason: 'busy' };
238
+ case CallEndCause.NoAnswer:
239
+ case CallEndCause.Timeout:
240
+ return { callId, type: 'ended', reason: 'noAnswer' };
241
+ case CallEndCause.Inactive:
242
+ return {
243
+ callId,
244
+ type: 'ended',
245
+ reason: 'failed',
246
+ error: new voice_client_core_1.NetworkError({ providerDetail: error }),
247
+ };
248
+ case CallEndCause.Failure:
249
+ if (!error)
250
+ return { callId, type: 'ended', reason: 'failed' };
251
+ return {
252
+ callId,
253
+ type: 'ended',
254
+ reason: 'failed',
255
+ error: error.domain === ErrorType.Network ?
256
+ new voice_client_core_1.NetworkError({ providerDetail: error })
257
+ : (callSetupError(error) ?? providerError(error)),
258
+ };
259
+ default:
260
+ return { callId, type: 'ended', reason: 'completed' };
261
+ }
262
+ }, _SinchAdapter_warning = function _SinchAdapter_warning(callId, { name, type }) {
263
+ const cleared = type === tslib_1.__classPrivateFieldGet(this, _SinchAdapter_sinch, "f").CallQualityWarningEventType.Recover;
264
+ switch (name) {
265
+ case 'missingMediaStream':
266
+ return { callId, type: cleared ? 'reconnected' : 'reconnecting' };
267
+ case 'highInboundJitter':
268
+ return { callId, type: 'qualityWarning', warning: { metric: 'jitter', cleared } };
269
+ case 'highInboundPacketLoss':
270
+ return { callId, type: 'qualityWarning', warning: { metric: 'packetLoss', cleared } };
271
+ case 'highRemoteInboundRtt':
272
+ return { callId, type: 'qualityWarning', warning: { metric: 'rtt', cleared } };
273
+ default:
274
+ return undefined;
275
+ }
276
+ }, _SinchAdapter_emit = function _SinchAdapter_emit(event) {
277
+ for (const listener of tslib_1.__classPrivateFieldGet(this, _SinchAdapter_callEventListeners, "f"))
278
+ listener(event);
279
+ };
280
+ //# sourceMappingURL=sinch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sinch.js","sourceRoot":"","sources":["../src/adapter/sinch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,276 @@
1
+ var _SinchAdapter_instances, _SinchAdapter_sinch, _SinchAdapter_options, _SinchAdapter_client, _SinchAdapter_token, _SinchAdapter_inputDeviceId, _SinchAdapter_audio, _SinchAdapter_calls, _SinchAdapter_answerRetryAt, _SinchAdapter_incomingListeners, _SinchAdapter_callEventListeners, _SinchAdapter_start, _SinchAdapter_stop, _SinchAdapter_started, _SinchAdapter_useInput, _SinchAdapter_playback, _SinchAdapter_placed, _SinchAdapter_play, _SinchAdapter_receive, _SinchAdapter_track, _SinchAdapter_ended, _SinchAdapter_warning, _SinchAdapter_emit;
2
+ import { __classPrivateFieldGet, __classPrivateFieldSet } from "../internal/tslib.mjs";
3
+ import { CallFailedError, CapabilityUnsupportedError, MediaPermissionError, NetworkError, NotRegisteredError, SentVoiceError, readClaims, } from '@sentdm/voice-client-core';
4
+ const environmentHost = 'ocra-euc1.api.sinch.com';
5
+ const applicationPrefix = '//rtc.sinch.com/applications/';
6
+ const answerThrottle = 1500;
7
+ const providerError = (error) => error instanceof SentVoiceError ? error : (new SentVoiceError({
8
+ code: 'UNKNOWN',
9
+ category: 'signaling',
10
+ retriable: false,
11
+ message: 'An unexpected calling error occurred.',
12
+ providerDetail: error,
13
+ }));
14
+ // The Sinch backend refuses a call it cannot set up with `Unable to connect call (<reason>)`, an HTTP
15
+ // failure whose only discriminator is that text. The caller gets a stable code and Sent's wording; the
16
+ // provider's reason is kept as provider detail, for telemetry.
17
+ const setupRefusal = /^Unable to connect call(?: \((.+)\))?/;
18
+ const setupRefusalMessages = {
19
+ 'destination user not found': 'The destination is not registered.',
20
+ };
21
+ const callSetupError = (error) => {
22
+ const match = setupRefusal.exec(error.message);
23
+ if (!match)
24
+ return undefined;
25
+ const reason = match[1];
26
+ const message = reason === undefined ? undefined : setupRefusalMessages[reason];
27
+ return new CallFailedError({
28
+ message: message ?? 'The call could not be connected.',
29
+ providerDetail: error,
30
+ });
31
+ };
32
+ const rethrow = (error) => {
33
+ throw providerError(error);
34
+ };
35
+ const guard = (action) => {
36
+ try {
37
+ return action();
38
+ }
39
+ catch (error) {
40
+ return rethrow(error);
41
+ }
42
+ };
43
+ export const loadSinchAdapter = async (options) => new SinchAdapter(await import('sinch-rtc').catch((error) => {
44
+ throw new NetworkError({ message: 'The calling provider could not be loaded.', providerDetail: error });
45
+ }), options);
46
+ class SinchAdapter {
47
+ constructor(sinch, options) {
48
+ _SinchAdapter_instances.add(this);
49
+ _SinchAdapter_sinch.set(this, void 0);
50
+ _SinchAdapter_options.set(this, void 0);
51
+ _SinchAdapter_client.set(this, void 0);
52
+ _SinchAdapter_token.set(this, '');
53
+ _SinchAdapter_inputDeviceId.set(this, void 0);
54
+ _SinchAdapter_audio.set(this, void 0);
55
+ _SinchAdapter_calls.set(this, new Map());
56
+ _SinchAdapter_answerRetryAt.set(this, new Map());
57
+ _SinchAdapter_incomingListeners.set(this, []);
58
+ _SinchAdapter_callEventListeners.set(this, []);
59
+ __classPrivateFieldSet(this, _SinchAdapter_sinch, sinch, "f");
60
+ __classPrivateFieldSet(this, _SinchAdapter_options, options, "f");
61
+ }
62
+ async register(token) {
63
+ __classPrivateFieldSet(this, _SinchAdapter_token, token, "f");
64
+ __classPrivateFieldSet(this, _SinchAdapter_client, __classPrivateFieldGet(this, _SinchAdapter_client, "f") ?? await __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_start).call(this, token).catch(rethrow), "f");
65
+ }
66
+ async unregister() {
67
+ const client = __classPrivateFieldGet(this, _SinchAdapter_client, "f");
68
+ __classPrivateFieldSet(this, _SinchAdapter_client, undefined, "f");
69
+ if (client)
70
+ await __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_stop).call(this, client).catch(rethrow);
71
+ }
72
+ async call(target) {
73
+ const { callClient } = __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_started).call(this);
74
+ return __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_placed).call(this, target.kind === 'user' ? callClient.callUser(target.id) : callClient.callPhoneNumber(target.number));
75
+ }
76
+ async joinConference(room) {
77
+ return __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_placed).call(this, __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_started).call(this).callClient.callConference(room));
78
+ }
79
+ async answer(callId) {
80
+ const wait = (__classPrivateFieldGet(this, _SinchAdapter_answerRetryAt, "f").get(callId) ?? 0) - Date.now();
81
+ if (wait > 0)
82
+ await new Promise((resolve) => setTimeout(resolve, wait));
83
+ const call = __classPrivateFieldGet(this, _SinchAdapter_calls, "f").get(callId);
84
+ if (!call)
85
+ return;
86
+ __classPrivateFieldGet(this, _SinchAdapter_answerRetryAt, "f").set(callId, Date.now() + answerThrottle);
87
+ await call.answer().catch((error) => {
88
+ throw new MediaPermissionError({ providerDetail: error });
89
+ });
90
+ __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_play).call(this, call);
91
+ }
92
+ async reject(callId) {
93
+ return this.hangup(callId);
94
+ }
95
+ async hangup(callId) {
96
+ guard(() => __classPrivateFieldGet(this, _SinchAdapter_calls, "f").get(callId)?.hangup());
97
+ }
98
+ mute(callId, muted) {
99
+ const call = __classPrivateFieldGet(this, _SinchAdapter_calls, "f").get(callId);
100
+ if (muted)
101
+ call?.mute();
102
+ else
103
+ call?.unmute();
104
+ }
105
+ sendDigits(callId, digits) {
106
+ guard(() => __classPrivateFieldGet(this, _SinchAdapter_calls, "f").get(callId)?.sendDtmf(digits));
107
+ }
108
+ async getStats(callId) {
109
+ const call = __classPrivateFieldGet(this, _SinchAdapter_calls, "f").get(callId);
110
+ const report = await call?.getPeerConnectionStats();
111
+ const stats = { jitter: 0, packetLoss: 0, rtt: 0 };
112
+ report?.forEach((entry) => {
113
+ if (entry.type === 'inbound-rtp' && entry.kind === 'audio') {
114
+ const lost = Math.max(0, entry.packetsLost ?? 0);
115
+ const packets = lost + (entry.packetsReceived ?? 0);
116
+ stats.jitter = (entry.jitter ?? 0) * 1000;
117
+ stats.packetLoss = packets > 0 ? lost / packets : 0;
118
+ }
119
+ else if (entry.type === 'candidate-pair' && entry.state === 'succeeded') {
120
+ stats.rtt = (entry.currentRoundTripTime ?? 0) * 1000;
121
+ }
122
+ });
123
+ return stats;
124
+ }
125
+ onIncoming(listener) {
126
+ __classPrivateFieldGet(this, _SinchAdapter_incomingListeners, "f").push(listener);
127
+ }
128
+ onCallEvent(listener) {
129
+ __classPrivateFieldGet(this, _SinchAdapter_callEventListeners, "f").push(listener);
130
+ }
131
+ async setInputDevice(deviceId) {
132
+ __classPrivateFieldSet(this, _SinchAdapter_inputDeviceId, deviceId, "f");
133
+ if (__classPrivateFieldGet(this, _SinchAdapter_client, "f")?.isStarted())
134
+ __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_useInput).call(this, __classPrivateFieldGet(this, _SinchAdapter_client, "f").callClient, deviceId);
135
+ }
136
+ async setOutputDevice(deviceId) {
137
+ const audio = __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_playback).call(this);
138
+ if (!('setSinkId' in audio)) {
139
+ throw new CapabilityUnsupportedError({
140
+ message: 'Choosing the audio output device is not supported by this browser.',
141
+ });
142
+ }
143
+ await audio.setSinkId(deviceId).catch(rethrow);
144
+ }
145
+ }
146
+ _SinchAdapter_sinch = new WeakMap(), _SinchAdapter_options = new WeakMap(), _SinchAdapter_client = new WeakMap(), _SinchAdapter_token = new WeakMap(), _SinchAdapter_inputDeviceId = new WeakMap(), _SinchAdapter_audio = new WeakMap(), _SinchAdapter_calls = new WeakMap(), _SinchAdapter_answerRetryAt = new WeakMap(), _SinchAdapter_incomingListeners = new WeakMap(), _SinchAdapter_callEventListeners = new WeakMap(), _SinchAdapter_instances = new WeakSet(), _SinchAdapter_start = async function _SinchAdapter_start(token) {
147
+ const { iss, sub } = readClaims(token);
148
+ const client = __classPrivateFieldGet(this, _SinchAdapter_sinch, "f").Sinch.getSinchClientBuilder()
149
+ .applicationKey(iss.slice(applicationPrefix.length))
150
+ .userId(sub.slice(`${iss}/users/`.length))
151
+ .environmentHost(environmentHost)
152
+ .build();
153
+ const { url, scope } = __classPrivateFieldGet(this, _SinchAdapter_options, "f").serviceWorker ?? {};
154
+ try {
155
+ await new Promise((resolve, reject) => {
156
+ client.addListener({
157
+ onCredentialsRequired: (_, registration) => void registration.register(__classPrivateFieldGet(this, _SinchAdapter_token, "f")),
158
+ onClientStarted: ({ callClient }) => {
159
+ callClient.addListener({ onIncomingCall: (_, call) => __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_receive).call(this, call) });
160
+ if (__classPrivateFieldGet(this, _SinchAdapter_inputDeviceId, "f") !== undefined)
161
+ __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_useInput).call(this, callClient, __classPrivateFieldGet(this, _SinchAdapter_inputDeviceId, "f"));
162
+ resolve();
163
+ },
164
+ onClientFailed: (_, error) => reject(error),
165
+ });
166
+ client
167
+ .setSupportManagedPush(url, scope === undefined ? undefined : { scope })
168
+ .then(() => client.start(), reject);
169
+ });
170
+ }
171
+ catch (error) {
172
+ await __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_stop).call(this, client).catch(() => { });
173
+ throw error;
174
+ }
175
+ return client;
176
+ }, _SinchAdapter_stop = async function _SinchAdapter_stop(client) {
177
+ try {
178
+ await client.disableManagedPushSupport();
179
+ }
180
+ finally {
181
+ client.terminate();
182
+ }
183
+ }, _SinchAdapter_started = function _SinchAdapter_started() {
184
+ if (!__classPrivateFieldGet(this, _SinchAdapter_client, "f"))
185
+ throw new NotRegisteredError();
186
+ return __classPrivateFieldGet(this, _SinchAdapter_client, "f");
187
+ }, _SinchAdapter_useInput = function _SinchAdapter_useInput(callClient, deviceId) {
188
+ callClient.setAudioTrackConstraints({ deviceId });
189
+ }, _SinchAdapter_playback = function _SinchAdapter_playback() {
190
+ return (__classPrivateFieldSet(this, _SinchAdapter_audio, __classPrivateFieldGet(this, _SinchAdapter_audio, "f") ?? (__classPrivateFieldGet(this, _SinchAdapter_options, "f").audioElement ?? new Audio()), "f"));
191
+ }, _SinchAdapter_placed = async function _SinchAdapter_placed(placing) {
192
+ const call = await placing.catch(rethrow);
193
+ if (!call.outgoingStream?.getAudioTracks().length) {
194
+ guard(() => call.hangup());
195
+ throw new MediaPermissionError();
196
+ }
197
+ __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_play).call(this, call);
198
+ return __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_track).call(this, call);
199
+ }, _SinchAdapter_play = function _SinchAdapter_play(call) {
200
+ const audio = __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_playback).call(this);
201
+ audio.autoplay = true;
202
+ audio.srcObject = call.incomingStream ?? null;
203
+ }, _SinchAdapter_receive = function _SinchAdapter_receive(call) {
204
+ __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_track).call(this, call);
205
+ for (const listener of __classPrivateFieldGet(this, _SinchAdapter_incomingListeners, "f"))
206
+ listener({ callId: call.id, from: call.remoteUserId });
207
+ }, _SinchAdapter_track = function _SinchAdapter_track(call) {
208
+ const listener = {
209
+ onCallProgressing: () => __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_emit).call(this, { callId: call.id, type: 'ringing' }),
210
+ onCallAnswered: () => __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_emit).call(this, { callId: call.id, type: 'answered' }),
211
+ onCallEstablished: () => __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_emit).call(this, { callId: call.id, type: 'connected' }),
212
+ onCallQualityWarningEvent: (_, warning) => {
213
+ const event = __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_warning).call(this, call.id, warning);
214
+ if (event)
215
+ __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_emit).call(this, event);
216
+ },
217
+ onCallEnded: () => {
218
+ call.removeListener(listener);
219
+ __classPrivateFieldGet(this, _SinchAdapter_calls, "f").delete(call.id);
220
+ __classPrivateFieldGet(this, _SinchAdapter_answerRetryAt, "f").delete(call.id);
221
+ if (__classPrivateFieldGet(this, _SinchAdapter_audio, "f") && __classPrivateFieldGet(this, _SinchAdapter_audio, "f").srcObject === call.incomingStream)
222
+ __classPrivateFieldGet(this, _SinchAdapter_audio, "f").srcObject = null;
223
+ __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_emit).call(this, __classPrivateFieldGet(this, _SinchAdapter_instances, "m", _SinchAdapter_ended).call(this, call));
224
+ },
225
+ };
226
+ call.addListener(listener);
227
+ __classPrivateFieldGet(this, _SinchAdapter_calls, "f").set(call.id, call);
228
+ return call.id;
229
+ }, _SinchAdapter_ended = function _SinchAdapter_ended({ id: callId, details: { endCause, error } }) {
230
+ const { CallEndCause, ErrorType } = __classPrivateFieldGet(this, _SinchAdapter_sinch, "f");
231
+ switch (endCause) {
232
+ case CallEndCause.Denied:
233
+ return { callId, type: 'ended', reason: 'busy' };
234
+ case CallEndCause.NoAnswer:
235
+ case CallEndCause.Timeout:
236
+ return { callId, type: 'ended', reason: 'noAnswer' };
237
+ case CallEndCause.Inactive:
238
+ return {
239
+ callId,
240
+ type: 'ended',
241
+ reason: 'failed',
242
+ error: new NetworkError({ providerDetail: error }),
243
+ };
244
+ case CallEndCause.Failure:
245
+ if (!error)
246
+ return { callId, type: 'ended', reason: 'failed' };
247
+ return {
248
+ callId,
249
+ type: 'ended',
250
+ reason: 'failed',
251
+ error: error.domain === ErrorType.Network ?
252
+ new NetworkError({ providerDetail: error })
253
+ : (callSetupError(error) ?? providerError(error)),
254
+ };
255
+ default:
256
+ return { callId, type: 'ended', reason: 'completed' };
257
+ }
258
+ }, _SinchAdapter_warning = function _SinchAdapter_warning(callId, { name, type }) {
259
+ const cleared = type === __classPrivateFieldGet(this, _SinchAdapter_sinch, "f").CallQualityWarningEventType.Recover;
260
+ switch (name) {
261
+ case 'missingMediaStream':
262
+ return { callId, type: cleared ? 'reconnected' : 'reconnecting' };
263
+ case 'highInboundJitter':
264
+ return { callId, type: 'qualityWarning', warning: { metric: 'jitter', cleared } };
265
+ case 'highInboundPacketLoss':
266
+ return { callId, type: 'qualityWarning', warning: { metric: 'packetLoss', cleared } };
267
+ case 'highRemoteInboundRtt':
268
+ return { callId, type: 'qualityWarning', warning: { metric: 'rtt', cleared } };
269
+ default:
270
+ return undefined;
271
+ }
272
+ }, _SinchAdapter_emit = function _SinchAdapter_emit(event) {
273
+ for (const listener of __classPrivateFieldGet(this, _SinchAdapter_callEventListeners, "f"))
274
+ listener(event);
275
+ };
276
+ //# sourceMappingURL=sinch.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sinch.mjs","sourceRoot":"","sources":["../src/adapter/sinch.ts"],"names":[],"mappings":"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"}