@hivegpt/hiveai-angular 0.0.478 → 0.0.479
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/bundles/hivegpt-hiveai-angular.umd.js +26 -34
- package/bundles/hivegpt-hiveai-angular.umd.js.map +1 -1
- package/bundles/hivegpt-hiveai-angular.umd.min.js +1 -1
- package/bundles/hivegpt-hiveai-angular.umd.min.js.map +1 -1
- package/esm2015/lib/components/voice-agent/services/voice-agent.service.js +17 -19
- package/fesm2015/hivegpt-hiveai-angular.js +17 -19
- package/fesm2015/hivegpt-hiveai-angular.js.map +1 -1
- package/hivegpt-hiveai-angular.metadata.json +1 -1
- package/lib/components/voice-agent/services/voice-agent.service.d.ts +3 -3
- package/lib/components/voice-agent/services/voice-agent.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -9,15 +9,17 @@ import * as i0 from "@angular/core";
|
|
|
9
9
|
import * as i1 from "./audio-analyzer.service";
|
|
10
10
|
import * as i2 from "./websocket-voice-client.service";
|
|
11
11
|
import * as i3 from "./daily-voice-client.service";
|
|
12
|
+
/** Static Daily.co room URL (used instead of dynamic room_created from backend). */
|
|
13
|
+
const STATIC_DAILY_ROOM_URL = 'https://cloud-4a46e9dfbc8c499daddd480d9c294b88.daily.co/voice-None-1772776583';
|
|
12
14
|
/**
|
|
13
15
|
* Voice agent orchestrator. Coordinates WebSocket (signaling) and Daily.js (WebRTC audio).
|
|
14
16
|
*
|
|
15
17
|
* CRITICAL: This service must NEVER use Socket.IO or ngx-socket-io. Voice flow uses only:
|
|
16
|
-
* - Native WebSocket (WebSocketVoiceClientService) for signaling (
|
|
17
|
-
* - Daily.js (DailyVoiceClientService) for WebRTC audio
|
|
18
|
+
* - Native WebSocket (WebSocketVoiceClientService) for signaling (transcripts)
|
|
19
|
+
* - Daily.js (DailyVoiceClientService) for WebRTC audio via STATIC_DAILY_ROOM_URL.
|
|
18
20
|
*
|
|
19
21
|
* - Maintains callState, statusText, duration, isMicMuted, isUserSpeaking, audioLevels
|
|
20
|
-
* - Uses WebSocket for
|
|
22
|
+
* - Uses WebSocket for transcripts only (no audio)
|
|
21
23
|
* - Uses Daily.js for all audio, mic, and real-time speaking detection
|
|
22
24
|
*/
|
|
23
25
|
export class VoiceAgentService {
|
|
@@ -106,21 +108,6 @@ export class VoiceAgentService {
|
|
|
106
108
|
if (!wsUrl || typeof wsUrl !== 'string') {
|
|
107
109
|
throw new Error('No ws_url in response');
|
|
108
110
|
}
|
|
109
|
-
// Subscribe to room_created BEFORE connecting to avoid race
|
|
110
|
-
this.wsClient.roomCreated$
|
|
111
|
-
.pipe(take(1), takeUntil(this.destroy$))
|
|
112
|
-
.subscribe((roomUrl) => __awaiter(this, void 0, void 0, function* () {
|
|
113
|
-
try {
|
|
114
|
-
yield this.onRoomCreated(roomUrl);
|
|
115
|
-
}
|
|
116
|
-
catch (err) {
|
|
117
|
-
console.error('Daily join failed:', err);
|
|
118
|
-
this.callStateSubject.next('ended');
|
|
119
|
-
this.statusTextSubject.next('Connection failed');
|
|
120
|
-
yield this.disconnect();
|
|
121
|
-
throw err;
|
|
122
|
-
}
|
|
123
|
-
}));
|
|
124
111
|
// Forward transcripts from WebSocket
|
|
125
112
|
this.subscriptions.add(this.wsClient.userTranscript$
|
|
126
113
|
.pipe(takeUntil(this.destroy$))
|
|
@@ -130,6 +117,17 @@ export class VoiceAgentService {
|
|
|
130
117
|
.subscribe((t) => this.botTranscriptSubject.next(t)));
|
|
131
118
|
// Connect signaling WebSocket (no audio over WS)
|
|
132
119
|
this.wsClient.connect(wsUrl);
|
|
120
|
+
// Join Daily.co using static room URL (no wait for room_created)
|
|
121
|
+
try {
|
|
122
|
+
yield this.onRoomCreated(STATIC_DAILY_ROOM_URL);
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
console.error('Daily join failed:', err);
|
|
126
|
+
this.callStateSubject.next('ended');
|
|
127
|
+
this.statusTextSubject.next('Connection failed');
|
|
128
|
+
yield this.disconnect();
|
|
129
|
+
throw err;
|
|
130
|
+
}
|
|
133
131
|
}
|
|
134
132
|
catch (error) {
|
|
135
133
|
console.error('Error connecting voice agent:', error);
|
|
@@ -226,4 +224,4 @@ VoiceAgentService.ctorParameters = () => [
|
|
|
226
224
|
{ type: WebSocketVoiceClientService },
|
|
227
225
|
{ type: DailyVoiceClientService }
|
|
228
226
|
];
|
|
229
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pY2UtYWdlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvcm9oaXR0aGFrdXIvaGl2ZS1ncHQvSGl2ZUFJLVBhY2thZ2VzL0FuZ3VsYXIvcHJvamVjdHMvaGl2ZWdwdC9ldmVudHNncHQtYW5ndWxhci9zcmMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy92b2ljZS1hZ2VudC9zZXJ2aWNlcy92b2ljZS1hZ2VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBZXZFOzs7Ozs7Ozs7O0dBVUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBMEI1QixZQUNVLGFBQW1DLEVBQ25DLFFBQXFDLEVBQ3JDLFdBQW9DO1FBRnBDLGtCQUFhLEdBQWIsYUFBYSxDQUFzQjtRQUNuQyxhQUFRLEdBQVIsUUFBUSxDQUE2QjtRQUNyQyxnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUE1QnRDLHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUFZLE1BQU0sQ0FBQyxDQUFDO1FBQzFELHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELG9CQUFlLEdBQUcsSUFBSSxlQUFlLENBQVMsT0FBTyxDQUFDLENBQUM7UUFDdkQsc0JBQWlCLEdBQUcsSUFBSSxlQUFl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QkFDckUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUN2QixHQUFHLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUNqRCxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUM7UUFDRixjQUFjLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1NBQzlCO0lBQ0gsQ0FBQzs7OztZQW5QRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTlCUSxvQkFBb0I7WUFDcEIsMkJBQTJCO1lBQzNCLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXVkaW9BbmFseXplclNlcnZpY2UgfSBmcm9tICcuL2F1ZGlvLWFuYWx5emVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2ViU29ja2V0Vm9pY2VDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi93ZWJzb2NrZXQtdm9pY2UtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRGFpbHlWb2ljZUNsaWVudFNlcnZpY2UgfSBmcm9tICcuL2RhaWx5LXZvaWNlLWNsaWVudC5zZXJ2aWNlJztcblxuZXhwb3J0IHR5cGUgQ2FsbFN0YXRlID1cbiAgfCAnaWRsZSdcbiAgfCAnY29ubmVjdGluZydcbiAgfCAnY29ubmVjdGVkJ1xuICB8ICdsaXN0ZW5pbmcnXG4gIHwgJ3RhbGtpbmcnXG4gIHwgJ2VuZGVkJztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2NyaXB0RGF0YSB7XG4gIHRleHQ6IHN0cmluZztcbiAgZmluYWw6IGJvb2xlYW47XG59XG5cbi8qKlxuICogVm9pY2UgYWdlbnQgb3JjaGVzdHJhdG9yLiBDb29yZGluYXRlcyBXZWJTb2NrZXQgKHNpZ25hbGluZykgYW5kIERhaWx5LmpzIChXZWJSVEMgYXVkaW8pLlxuICpcbiAqIENSSVRJQ0FMOiBUaGlzIHNlcnZpY2UgbXVzdCBORVZFUiB1c2UgU29ja2V0LklPIG9yIG5neC1zb2NrZXQtaW8uIFZvaWNlIGZsb3cgdXNlcyBvbmx5OlxuICogLSBOYXRpdmUgV2ViU29ja2V0IChXZWJTb2NrZXRWb2ljZUNsaWVudFNlcnZpY2UpIGZvciBzaWduYWxpbmcgKHJvb21fY3JlYXRlZCwgdHJhbnNjcmlwdHMpXG4gKiAtIERhaWx5LmpzIChEYWlseVZvaWNlQ2xpZW50U2VydmljZSkgZm9yIFdlYlJUQyBhdWRpby4gQXVkaW8gZG9lcyBOT1QgZmxvdyBvdmVyIFdlYlNvY2tldC5cbiAqXG4gKiAtIE1haW50YWlucyBjYWxsU3RhdGUsIHN0YXR1c1RleHQsIGR1cmF0aW9uLCBpc01pY011dGVkLCBpc1VzZXJTcGVha2luZywgYXVkaW9MZXZlbHNcbiAqIC0gVXNlcyBXZWJTb2NrZXQgZm9yIHJvb21fY3JlYXRlZCBhbmQgdHJhbnNjcmlwdHMgb25seSAobm8gYXVkaW8pXG4gKiAtIFVzZXMgRGFpbHkuanMgZm9yIGFsbCBhdWRpbywgbWljLCBhbmQgcmVhbC10aW1lIHNwZWFraW5nIGRldGVjdGlvblxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVm9pY2VBZ2VudFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGNhbGxTdGF0ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhbGxTdGF0ZT4oJ2lkbGUnKTtcbiAgcHJpdmF0ZSBzdGF0dXNUZXh0U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgZHVyYXRpb25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcwMDowMCcpO1xuICBwcml2YXRlIGlzTWljTXV0ZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgaXNVc2VyU3BlYWtpbmdTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgYXVkaW9MZXZlbHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXJbXT4oW10pO1xuICBwcml2YXRlIHVzZXJUcmFuc2NyaXB0U3ViamVjdCA9IG5ldyBTdWJqZWN0PFRyYW5zY3JpcHREYXRhPigpO1xuICBwcml2YXRlIGJvdFRyYW5zY3JpcHRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgY2FsbFN0YXJ0VGltZSA9IDA7XG4gIHByaXZhdGUgZHVyYXRpb25JbnRlcnZhbDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjYWxsU3RhdGUkOiBPYnNlcnZhYmxlPENhbGxTdGF0ZT4gPSB0aGlzLmNhbGxTdGF0ZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIHN0YXR1c1RleHQkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLnN0YXR1c1RleHRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBkdXJhdGlvbiQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMuZHVyYXRpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBpc01pY011dGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuaXNNaWNNdXRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGlzVXNlclNwZWFraW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuaXNVc2VyU3BlYWtpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBhdWRpb0xldmVscyQ6IE9ic2VydmFibGU8bnVtYmVyW10+ID0gdGhpcy5hdWRpb0xldmVsc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIHVzZXJUcmFuc2NyaXB0JDogT2JzZXJ2YWJsZTxUcmFuc2NyaXB0RGF0YT4gPVxuICAgIHRoaXMudXNlclRyYW5zY3JpcHRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICBib3RUcmFuc2NyaXB0JDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5ib3RUcmFuc2NyaXB0U3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGF1ZGlvQW5hbHl6ZXI6IEF1ZGlvQW5hbHl6ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgd3NDbGllbnQ6IFdlYlNvY2tldFZvaWNlQ2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIGRhaWx5Q2xpZW50OiBEYWlseVZvaWNlQ2xpZW50U2VydmljZVxuICApIHtcbiAgICAvLyBXYXZlZm9ybSB2aXN1YWxpemF0aW9uIG9ubHkgLSBkbyBOT1QgdXNlIGZvciBzcGVha2luZyBzdGF0ZVxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmF1ZGlvQW5hbHl6ZXIuYXVkaW9MZXZlbHMkLnN1YnNjcmliZSgobGV2ZWxzKSA9PlxuICAgICAgICB0aGlzLmF1ZGlvTGV2ZWxzU3ViamVjdC5uZXh0KGxldmVscylcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICAvKiogUmVzZXQgdG8gaWRsZSBzdGF0ZSAoZS5nLiB3aGVuIG1vZGFsIG9wZW5zIHNvIHVzZXIgY2FuIGNsaWNrIFN0YXJ0IENhbGwpLiAqL1xuICByZXNldFRvSWRsZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jYWxsU3RhdGVTdWJqZWN0LnZhbHVlID09PSAnaWRsZScpIHJldHVybjtcbiAgICB0aGlzLnN0b3BEdXJhdGlvblRpbWVyKCk7XG4gICAgdGhpcy5hdWRpb0FuYWx5emVyLnN0b3AoKTtcbiAgICB0aGlzLndzQ2xpZW50LmRpc2Nvbm5lY3QoKTtcbiAgICAvLyBGaXJlLWFuZC1mb3JnZXQ6IERhaWx5IGRpc2Nvbm5lY3QgaXMgYXN5bmM7IGNvbm5lY3QoKSB3aWxsIGF3YWl0IGlmIG5lZWRlZFxuICAgIHZvaWQgdGhpcy5kYWlseUNsaWVudC5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoJ2lkbGUnKTtcbiAgICB0aGlzLnN0YXR1c1RleHRTdWJqZWN0Lm5leHQoJycpO1xuICAgIHRoaXMuZHVyYXRpb25TdWJqZWN0Lm5leHQoJzA6MDAnKTtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3QoXG4gICAgYXBpVXJsOiBzdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBib3RJZDogc3RyaW5nLFxuICAgIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsXG4gICAgYXBpS2V5OiBzdHJpbmcsXG4gICAgZXZlbnRUb2tlbjogc3RyaW5nLFxuICAgIGV2ZW50VXJsOiBzdHJpbmcsXG4gICAgZG9tYWluQXV0aG9yaXR5OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY2FsbFN0YXRlU3ViamVjdC52YWx1ZSAhPT0gJ2lkbGUnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NhbGwgYWxyZWFkeSBpbiBwcm9ncmVzcycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dCgnY29ubmVjdGluZycpO1xuICAgICAgdGhpcy5zdGF0dXNUZXh0U3ViamVjdC5uZXh0KCdDb25uZWN0aW5nLi4uJyk7XG5cbiAgICAgIGNvbnN0IGJhc2VVcmwgPSBhcGlVcmwucmVwbGFjZSgvXFwvJC8sICcnKTtcbiAgICAgIGNvbnN0IHBvc3RVcmwgPSBgaHR0cHM6Ly8wYTE5LTI0MDUtMjAxLTVjMDItOTkxZS0yNDg3LWQ1Ni0yNTQzLWJkYTgubmdyb2stZnJlZS5hcHAvYWkvYXNrLXZvaWNlYDtcblxuICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgICAgICdkb21haW4tYXV0aG9yaXR5JzogZG9tYWluQXV0aG9yaXR5LFxuICAgICAgICAnZXZlbnR0b2tlbic6IGV2ZW50VG9rZW4sXG4gICAgICAgICdldmVudHVybCc6IGV2ZW50VXJsLFxuICAgICAgICAnaGl2ZS1ib3QtaWQnOiBib3RJZCxcbiAgICAgICAgJ3gtYXBpLWtleSc6IGFwaUtleSxcbiAgICAgICAgXCJuZ3Jvay1za2lwLWJyb3dzZXItd2FybmluZ1wiOlwidHJ1ZVwiXG4gICAgICB9O1xuXG4gICAgICAvLyBQT1NUIHRvIGdldCB3c191cmwgZm9yIHNpZ25hbGluZ1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2gocG9zdFVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGJvdF9pZDogYm90SWQsXG4gICAgICAgICAgY29udmVyc2F0aW9uX2lkOiBjb252ZXJzYXRpb25JZCxcbiAgICAgICAgICB2b2ljZTogJ2FsbG95JyxcbiAgICAgICAgfSksXG4gICAgICB9KTtcblxuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzLnN0YXR1c31gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlcy5qc29uKCk7XG4gICAgICAvLyBVc2Ugb25seSBXZWJTb2NrZXQgVVJMLiBEbyBOT1QgdXNlIGFueSBTb2NrZXQuSU8gVVJMIChlLmcuIHNvY2tldF9pb191cmwpLlxuICAgICAgY29uc3Qgd3NVcmwgPSBqc29uPy5ybl93c191cmw7XG4gICAgICBpZiAoIXdzVXJsIHx8IHR5cGVvZiB3c1VybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB3c191cmwgaW4gcmVzcG9uc2UnKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3Vic2NyaWJlIHRvIHJvb21fY3JlYXRlZCBCRUZPUkUgY29ubmVjdGluZyB0byBhdm9pZCByYWNlXG4gICAgICB0aGlzLndzQ2xpZW50LnJvb21DcmVhdGVkJFxuICAgICAgICAucGlwZSh0YWtlKDEpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKHJvb21VcmwpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5vblJvb21DcmVhdGVkKHJvb21VcmwpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRGFpbHkgam9pbiBmYWlsZWQ6JywgZXJyKTtcbiAgICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdlbmRlZCcpO1xuICAgICAgICAgICAgdGhpcy5zdGF0dXNUZXh0U3ViamVjdC5uZXh0KCdDb25uZWN0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgLy8gRm9yd2FyZCB0cmFuc2NyaXB0cyBmcm9tIFdlYlNvY2tldFxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgdGhpcy53c0NsaWVudC51c2VyVHJhbnNjcmlwdCRcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgLnN1YnNjcmliZSgodCkgPT4gdGhpcy51c2VyVHJhbnNjcmlwdFN1YmplY3QubmV4dCh0KSlcbiAgICAgICk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICB0aGlzLndzQ2xpZW50LmJvdFRyYW5zY3JpcHQkXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHQpID0+IHRoaXMuYm90VHJhbnNjcmlwdFN1YmplY3QubmV4dCh0KSlcbiAgICAgICk7XG5cbiAgICAgIC8vIENvbm5lY3Qgc2lnbmFsaW5nIFdlYlNvY2tldCAobm8gYXVkaW8gb3ZlciBXUylcbiAgICAgIHRoaXMud3NDbGllbnQuY29ubmVjdCh3c1VybCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNvbm5lY3Rpbmcgdm9pY2UgYWdlbnQ6JywgZXJyb3IpO1xuICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoJ2VuZGVkJyk7XG4gICAgICBhd2FpdCB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHRoaXMuc3RhdHVzVGV4dFN1YmplY3QubmV4dCgnQ29ubmVjdGlvbiBmYWlsZWQnKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25Sb29tQ3JlYXRlZChyb29tVXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDb25uZWN0IERhaWx5LmpzIGZvciBXZWJSVEMgYXVkaW9cbiAgICBhd2FpdCB0aGlzLmRhaWx5Q2xpZW50LmNvbm5lY3Qocm9vbVVybCk7XG5cbiAgICAvLyBXYXZlZm9ybTogdXNlIGxvY2FsIG1pYyBzdHJlYW0gZnJvbSBEYWlseSBjbGllbnRcbiAgICB0aGlzLmRhaWx5Q2xpZW50LmxvY2FsU3RyZWFtJFxuICAgICAgLnBpcGUoZmlsdGVyKChzKTogcyBpcyBNZWRpYVN0cmVhbSA9PiBzICE9IG51bGwpLCB0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoc3RyZWFtKSA9PiB7XG4gICAgICAgIHRoaXMuYXVkaW9BbmFseXplci5zdGFydChzdHJlYW0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5kYWlseUNsaWVudC51c2VyU3BlYWtpbmckLnN1YnNjcmliZSgocykgPT5cbiAgICAgICAgdGhpcy5pc1VzZXJTcGVha2luZ1N1YmplY3QubmV4dChzKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRhaWx5Q2xpZW50LnNwZWFraW5nJCxcbiAgICAgICAgdGhpcy5kYWlseUNsaWVudC51c2VyU3BlYWtpbmckLFxuICAgICAgXSkuc3Vic2NyaWJlKChbYm90LCB1c2VyXSkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jYWxsU3RhdGVTdWJqZWN0LnZhbHVlO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gJ2Nvbm5lY3RpbmcnICYmICFib3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdjb25uZWN0aW5nJyAmJiBib3QpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW1ZvaWNlRGVidWddIEZpcnN0IGJvdCBhdWRpbyBhcnJpdmVkIOKAlCB0cmFuc2l0aW9uaW5nIHRvIHRhbGtpbmcg4oCUICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfWApO1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgdGhpcy5zdGFydER1cmF0aW9uVGltZXIoKTtcbiAgICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dCgndGFsa2luZycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdsaXN0ZW5pbmcnKTtcbiAgICAgICAgfSBlbHNlIGlmIChib3QpIHtcbiAgICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dCgndGFsa2luZycpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT09ICd0YWxraW5nJyB8fCBjdXJyZW50ID09PSAnbGlzdGVuaW5nJykge1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdjb25uZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZGFpbHlDbGllbnQubWljTXV0ZWQkLnN1YnNjcmliZSgobXV0ZWQpID0+XG4gICAgICAgIHRoaXMuaXNNaWNNdXRlZFN1YmplY3QubmV4dChtdXRlZClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc29sZS5sb2coYFtWb2ljZURlYnVnXSBSb29tIGpvaW5lZCwgc3RheWluZyBpbiBjb25uZWN0aW5nIHVudGlsIGJvdCBzcGVha3Mg4oCUICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfWApO1xuICAgIHRoaXMuc3RhdHVzVGV4dFN1YmplY3QubmV4dCgnQ29ubmVjdGluZy4uLicpO1xuICB9XG5cbiAgYXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0b3BEdXJhdGlvblRpbWVyKCk7XG4gICAgdGhpcy5hdWRpb0FuYWx5emVyLnN0b3AoKTtcblxuICAgIC8vIERhaWx5IGZpcnN0LCB0aGVuIFdlYlNvY2tldFxuICAgIGF3YWl0IHRoaXMuZGFpbHlDbGllbnQuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMud3NDbGllbnQuZGlzY29ubmVjdCgpO1xuXG4gICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoJ2VuZGVkJyk7XG4gICAgdGhpcy5zdGF0dXNUZXh0U3ViamVjdC5uZXh0KCdDYWxsIEVuZGVkJyk7XG4gIH1cblxuICB0b2dnbGVNaWMoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuaXNNaWNNdXRlZFN1YmplY3QudmFsdWU7XG4gICAgdGhpcy5kYWlseUNsaWVudC5zZXRNdXRlZCghY3VycmVudCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RHVyYXRpb25UaW1lcigpOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVEdXJhdGlvbiA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNhbGxTdGFydFRpbWUgPiAwKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gdGhpcy5jYWxsU3RhcnRUaW1lKSAvIDEwMDApO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihlbGFwc2VkIC8gNjApO1xuICAgICAgICBjb25zdCBzZWNvbmRzID0gZWxhcHNlZCAlIDYwO1xuICAgICAgICB0aGlzLmR1cmF0aW9uU3ViamVjdC5uZXh0KFxuICAgICAgICAgIGAke21pbnV0ZXN9OiR7U3RyaW5nKHNlY29uZHMpLnBhZFN0YXJ0KDIsICcwJyl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgdXBkYXRlRHVyYXRpb24oKTtcbiAgICB0aGlzLmR1cmF0aW9uSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh1cGRhdGVEdXJhdGlvbiwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BEdXJhdGlvblRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmR1cmF0aW9uSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5kdXJhdGlvbkludGVydmFsKTtcbiAgICAgIHRoaXMuZHVyYXRpb25JbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pY2UtYWdlbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvcm9oaXR0aGFrdXIvaGl2ZS1ncHQvSGl2ZUFJLVBhY2thZ2VzL0FuZ3VsYXIvcHJvamVjdHMvaGl2ZWdwdC9ldmVudHNncHQtYW5ndWxhci9zcmMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy92b2ljZS1hZ2VudC9zZXJ2aWNlcy92b2ljZS1hZ2VudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBZXZFLG9GQUFvRjtBQUNwRixNQUFNLHFCQUFxQixHQUN6QiwrRUFBK0UsQ0FBQztBQUVsRjs7Ozs7Ozs7OztHQVVHO0FBSUgsTUFBTSxPQUFPLGlCQUFpQjtJQTBCNUIsWUFDVSxhQUFtQyxFQUNuQyxRQUFxQyxFQUNyQyxXQUFvQztRQUZwQyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDbkMsYUFBUSxHQUFSLFFBQVEsQ0FBNkI7UUFDckMsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBNUJ0QyxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBWSxNQUFNLENBQUMsQ0FBQztRQUMxRCxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRCxvQkFBZSxHQUFHLElBQUksZUFB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QUFDLGVBQWUsQ0FBQyxJQUFJLENBQ3ZCLEdBQUcsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQ2pELENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQztRQUNGLGNBQWMsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7U0FDOUI7SUFDSCxDQUFDOzs7O1lBL09GLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBbENRLG9CQUFvQjtZQUNwQiwyQkFBMkI7WUFDM0IsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdWRpb0FuYWx5emVyU2VydmljZSB9IGZyb20gJy4vYXVkaW8tYW5hbHl6ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBXZWJTb2NrZXRWb2ljZUNsaWVudFNlcnZpY2UgfSBmcm9tICcuL3dlYnNvY2tldC12b2ljZS1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBEYWlseVZvaWNlQ2xpZW50U2VydmljZSB9IGZyb20gJy4vZGFpbHktdm9pY2UtY2xpZW50LnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBDYWxsU3RhdGUgPVxuICB8ICdpZGxlJ1xuICB8ICdjb25uZWN0aW5nJ1xuICB8ICdjb25uZWN0ZWQnXG4gIHwgJ2xpc3RlbmluZydcbiAgfCAndGFsa2luZydcbiAgfCAnZW5kZWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zY3JpcHREYXRhIHtcbiAgdGV4dDogc3RyaW5nO1xuICBmaW5hbDogYm9vbGVhbjtcbn1cblxuLyoqIFN0YXRpYyBEYWlseS5jbyByb29tIFVSTCAodXNlZCBpbnN0ZWFkIG9mIGR5bmFtaWMgcm9vbV9jcmVhdGVkIGZyb20gYmFja2VuZCkuICovXG5jb25zdCBTVEFUSUNfREFJTFlfUk9PTV9VUkwgPVxuICAnaHR0cHM6Ly9jbG91ZC00YTQ2ZTlkZmJjOGM0OTlkYWRkZDQ4MGQ5YzI5NGI4OC5kYWlseS5jby92b2ljZS1Ob25lLTE3NzI3NzY1ODMnO1xuXG4vKipcbiAqIFZvaWNlIGFnZW50IG9yY2hlc3RyYXRvci4gQ29vcmRpbmF0ZXMgV2ViU29ja2V0IChzaWduYWxpbmcpIGFuZCBEYWlseS5qcyAoV2ViUlRDIGF1ZGlvKS5cbiAqXG4gKiBDUklUSUNBTDogVGhpcyBzZXJ2aWNlIG11c3QgTkVWRVIgdXNlIFNvY2tldC5JTyBvciBuZ3gtc29ja2V0LWlvLiBWb2ljZSBmbG93IHVzZXMgb25seTpcbiAqIC0gTmF0aXZlIFdlYlNvY2tldCAoV2ViU29ja2V0Vm9pY2VDbGllbnRTZXJ2aWNlKSBmb3Igc2lnbmFsaW5nICh0cmFuc2NyaXB0cylcbiAqIC0gRGFpbHkuanMgKERhaWx5Vm9pY2VDbGllbnRTZXJ2aWNlKSBmb3IgV2ViUlRDIGF1ZGlvIHZpYSBTVEFUSUNfREFJTFlfUk9PTV9VUkwuXG4gKlxuICogLSBNYWludGFpbnMgY2FsbFN0YXRlLCBzdGF0dXNUZXh0LCBkdXJhdGlvbiwgaXNNaWNNdXRlZCwgaXNVc2VyU3BlYWtpbmcsIGF1ZGlvTGV2ZWxzXG4gKiAtIFVzZXMgV2ViU29ja2V0IGZvciB0cmFuc2NyaXB0cyBvbmx5IChubyBhdWRpbylcbiAqIC0gVXNlcyBEYWlseS5qcyBmb3IgYWxsIGF1ZGlvLCBtaWMsIGFuZCByZWFsLXRpbWUgc3BlYWtpbmcgZGV0ZWN0aW9uXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBWb2ljZUFnZW50U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgY2FsbFN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsbFN0YXRlPignaWRsZScpO1xuICBwcml2YXRlIHN0YXR1c1RleHRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBkdXJhdGlvblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJzAwOjAwJyk7XG4gIHByaXZhdGUgaXNNaWNNdXRlZFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBpc1VzZXJTcGVha2luZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBhdWRpb0xldmVsc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcltdPihbXSk7XG4gIHByaXZhdGUgdXNlclRyYW5zY3JpcHRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8VHJhbnNjcmlwdERhdGE+KCk7XG4gIHByaXZhdGUgYm90VHJhbnNjcmlwdFN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBjYWxsU3RhcnRUaW1lID0gMDtcbiAgcHJpdmF0ZSBkdXJhdGlvbkludGVydmFsOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNhbGxTdGF0ZSQ6IE9ic2VydmFibGU8Q2FsbFN0YXRlPiA9IHRoaXMuY2FsbFN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgc3RhdHVzVGV4dCQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRoaXMuc3RhdHVzVGV4dFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGR1cmF0aW9uJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGhpcy5kdXJhdGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGlzTWljTXV0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5pc01pY011dGVkU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgaXNVc2VyU3BlYWtpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5pc1VzZXJTcGVha2luZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGF1ZGlvTGV2ZWxzJDogT2JzZXJ2YWJsZTxudW1iZXJbXT4gPSB0aGlzLmF1ZGlvTGV2ZWxzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgdXNlclRyYW5zY3JpcHQkOiBPYnNlcnZhYmxlPFRyYW5zY3JpcHREYXRhPiA9XG4gICAgdGhpcy51c2VyVHJhbnNjcmlwdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIGJvdFRyYW5zY3JpcHQkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0aGlzLmJvdFRyYW5zY3JpcHRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXVkaW9BbmFseXplcjogQXVkaW9BbmFseXplclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3c0NsaWVudDogV2ViU29ja2V0Vm9pY2VDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGFpbHlDbGllbnQ6IERhaWx5Vm9pY2VDbGllbnRTZXJ2aWNlXG4gICkge1xuICAgIC8vIFdhdmVmb3JtIHZpc3VhbGl6YXRpb24gb25seSAtIGRvIE5PVCB1c2UgZm9yIHNwZWFraW5nIHN0YXRlXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuYXVkaW9BbmFseXplci5hdWRpb0xldmVscyQuc3Vic2NyaWJlKChsZXZlbHMpID0+XG4gICAgICAgIHRoaXMuYXVkaW9MZXZlbHNTdWJqZWN0Lm5leHQobGV2ZWxzKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIC8qKiBSZXNldCB0byBpZGxlIHN0YXRlIChlLmcuIHdoZW4gbW9kYWwgb3BlbnMgc28gdXNlciBjYW4gY2xpY2sgU3RhcnQgQ2FsbCkuICovXG4gIHJlc2V0VG9JZGxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbGxTdGF0ZVN1YmplY3QudmFsdWUgPT09ICdpZGxlJykgcmV0dXJuO1xuICAgIHRoaXMuc3RvcER1cmF0aW9uVGltZXIoKTtcbiAgICB0aGlzLmF1ZGlvQW5hbHl6ZXIuc3RvcCgpO1xuICAgIHRoaXMud3NDbGllbnQuZGlzY29ubmVjdCgpO1xuICAgIC8vIEZpcmUtYW5kLWZvcmdldDogRGFpbHkgZGlzY29ubmVjdCBpcyBhc3luYzsgY29ubmVjdCgpIHdpbGwgYXdhaXQgaWYgbmVlZGVkXG4gICAgdm9pZCB0aGlzLmRhaWx5Q2xpZW50LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dCgnaWRsZScpO1xuICAgIHRoaXMuc3RhdHVzVGV4dFN1YmplY3QubmV4dCgnJyk7XG4gICAgdGhpcy5kdXJhdGlvblN1YmplY3QubmV4dCgnMDowMCcpO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdChcbiAgICBhcGlVcmw6IHN0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGJvdElkOiBzdHJpbmcsXG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICBhcGlLZXk6IHN0cmluZyxcbiAgICBldmVudFRva2VuOiBzdHJpbmcsXG4gICAgZXZlbnRVcmw6IHN0cmluZyxcbiAgICBkb21haW5BdXRob3JpdHk6IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5jYWxsU3RhdGVTdWJqZWN0LnZhbHVlICE9PSAnaWRsZScpIHtcbiAgICAgIGNvbnNvbGUud2FybignQ2FsbCBhbHJlYWR5IGluIHByb2dyZXNzJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdjb25uZWN0aW5nJyk7XG4gICAgICB0aGlzLnN0YXR1c1RleHRTdWJqZWN0Lm5leHQoJ0Nvbm5lY3RpbmcuLi4nKTtcblxuICAgICAgY29uc3QgYmFzZVVybCA9IGFwaVVybC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgICAgY29uc3QgcG9zdFVybCA9IGBodHRwczovLzBhMTktMjQwNS0yMDEtNWMwMi05OTFlLTI0ODctZDU2LTI1NDMtYmRhOC5uZ3Jvay1mcmVlLmFwcC9haS9hc2stdm9pY2VgO1xuXG4gICAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiBkb21haW5BdXRob3JpdHksXG4gICAgICAgICdldmVudHRva2VuJzogZXZlbnRUb2tlbixcbiAgICAgICAgJ2V2ZW50dXJsJzogZXZlbnRVcmwsXG4gICAgICAgICdoaXZlLWJvdC1pZCc6IGJvdElkLFxuICAgICAgICAneC1hcGkta2V5JzogYXBpS2V5LFxuICAgICAgICBcIm5ncm9rLXNraXAtYnJvd3Nlci13YXJuaW5nXCI6XCJ0cnVlXCJcbiAgICAgIH07XG5cbiAgICAgIC8vIFBPU1QgdG8gZ2V0IHdzX3VybCBmb3Igc2lnbmFsaW5nXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChwb3N0VXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgYm90X2lkOiBib3RJZCxcbiAgICAgICAgICBjb252ZXJzYXRpb25faWQ6IGNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgIHZvaWNlOiAnYWxsb3knLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXMuc3RhdHVzfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgIC8vIFVzZSBvbmx5IFdlYlNvY2tldCBVUkwuIERvIE5PVCB1c2UgYW55IFNvY2tldC5JTyBVUkwgKGUuZy4gc29ja2V0X2lvX3VybCkuXG4gICAgICBjb25zdCB3c1VybCA9IGpzb24/LnJuX3dzX3VybDtcbiAgICAgIGlmICghd3NVcmwgfHwgdHlwZW9mIHdzVXJsICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHdzX3VybCBpbiByZXNwb25zZScpO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3J3YXJkIHRyYW5zY3JpcHRzIGZyb20gV2ViU29ja2V0XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICB0aGlzLndzQ2xpZW50LnVzZXJUcmFuc2NyaXB0JFxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCh0KSA9PiB0aGlzLnVzZXJUcmFuc2NyaXB0U3ViamVjdC5uZXh0KHQpKVxuICAgICAgKTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICAgIHRoaXMud3NDbGllbnQuYm90VHJhbnNjcmlwdCRcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgLnN1YnNjcmliZSgodCkgPT4gdGhpcy5ib3RUcmFuc2NyaXB0U3ViamVjdC5uZXh0KHQpKVxuICAgICAgKTtcblxuICAgICAgLy8gQ29ubmVjdCBzaWduYWxpbmcgV2ViU29ja2V0IChubyBhdWRpbyBvdmVyIFdTKVxuICAgICAgdGhpcy53c0NsaWVudC5jb25uZWN0KHdzVXJsKTtcblxuICAgICAgLy8gSm9pbiBEYWlseS5jbyB1c2luZyBzdGF0aWMgcm9vbSBVUkwgKG5vIHdhaXQgZm9yIHJvb21fY3JlYXRlZClcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMub25Sb29tQ3JlYXRlZChTVEFUSUNfREFJTFlfUk9PTV9VUkwpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0RhaWx5IGpvaW4gZmFpbGVkOicsIGVycik7XG4gICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdlbmRlZCcpO1xuICAgICAgICB0aGlzLnN0YXR1c1RleHRTdWJqZWN0Lm5leHQoJ0Nvbm5lY3Rpb24gZmFpbGVkJyk7XG4gICAgICAgIGF3YWl0IHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNvbm5lY3Rpbmcgdm9pY2UgYWdlbnQ6JywgZXJyb3IpO1xuICAgICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoJ2VuZGVkJyk7XG4gICAgICBhd2FpdCB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICAgIHRoaXMuc3RhdHVzVGV4dFN1YmplY3QubmV4dCgnQ29ubmVjdGlvbiBmYWlsZWQnKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgb25Sb29tQ3JlYXRlZChyb29tVXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBDb25uZWN0IERhaWx5LmpzIGZvciBXZWJSVEMgYXVkaW9cbiAgICBhd2FpdCB0aGlzLmRhaWx5Q2xpZW50LmNvbm5lY3Qocm9vbVVybCk7XG5cbiAgICAvLyBXYXZlZm9ybTogdXNlIGxvY2FsIG1pYyBzdHJlYW0gZnJvbSBEYWlseSBjbGllbnRcbiAgICB0aGlzLmRhaWx5Q2xpZW50LmxvY2FsU3RyZWFtJFxuICAgICAgLnBpcGUoZmlsdGVyKChzKTogcyBpcyBNZWRpYVN0cmVhbSA9PiBzICE9IG51bGwpLCB0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoc3RyZWFtKSA9PiB7XG4gICAgICAgIHRoaXMuYXVkaW9BbmFseXplci5zdGFydChzdHJlYW0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5kYWlseUNsaWVudC51c2VyU3BlYWtpbmckLnN1YnNjcmliZSgocykgPT5cbiAgICAgICAgdGhpcy5pc1VzZXJTcGVha2luZ1N1YmplY3QubmV4dChzKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRhaWx5Q2xpZW50LnNwZWFraW5nJCxcbiAgICAgICAgdGhpcy5kYWlseUNsaWVudC51c2VyU3BlYWtpbmckLFxuICAgICAgXSkuc3Vic2NyaWJlKChbYm90LCB1c2VyXSkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jYWxsU3RhdGVTdWJqZWN0LnZhbHVlO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gJ2Nvbm5lY3RpbmcnICYmICFib3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdjb25uZWN0aW5nJyAmJiBib3QpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW1ZvaWNlRGVidWddIEZpcnN0IGJvdCBhdWRpbyBhcnJpdmVkIOKAlCB0cmFuc2l0aW9uaW5nIHRvIHRhbGtpbmcg4oCUICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfWApO1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgICAgdGhpcy5zdGFydER1cmF0aW9uVGltZXIoKTtcbiAgICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dCgndGFsa2luZycpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdsaXN0ZW5pbmcnKTtcbiAgICAgICAgfSBlbHNlIGlmIChib3QpIHtcbiAgICAgICAgICB0aGlzLmNhbGxTdGF0ZVN1YmplY3QubmV4dCgndGFsa2luZycpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgPT09ICd0YWxraW5nJyB8fCBjdXJyZW50ID09PSAnbGlzdGVuaW5nJykge1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXRlU3ViamVjdC5uZXh0KCdjb25uZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuZGFpbHlDbGllbnQubWljTXV0ZWQkLnN1YnNjcmliZSgobXV0ZWQpID0+XG4gICAgICAgIHRoaXMuaXNNaWNNdXRlZFN1YmplY3QubmV4dChtdXRlZClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc29sZS5sb2coYFtWb2ljZURlYnVnXSBSb29tIGpvaW5lZCwgc3RheWluZyBpbiBjb25uZWN0aW5nIHVudGlsIGJvdCBzcGVha3Mg4oCUICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfWApO1xuICAgIHRoaXMuc3RhdHVzVGV4dFN1YmplY3QubmV4dCgnQ29ubmVjdGluZy4uLicpO1xuICB9XG5cbiAgYXN5bmMgZGlzY29ubmVjdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0b3BEdXJhdGlvblRpbWVyKCk7XG4gICAgdGhpcy5hdWRpb0FuYWx5emVyLnN0b3AoKTtcblxuICAgIC8vIERhaWx5IGZpcnN0LCB0aGVuIFdlYlNvY2tldFxuICAgIGF3YWl0IHRoaXMuZGFpbHlDbGllbnQuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMud3NDbGllbnQuZGlzY29ubmVjdCgpO1xuXG4gICAgdGhpcy5jYWxsU3RhdGVTdWJqZWN0Lm5leHQoJ2VuZGVkJyk7XG4gICAgdGhpcy5zdGF0dXNUZXh0U3ViamVjdC5uZXh0KCdDYWxsIEVuZGVkJyk7XG4gIH1cblxuICB0b2dnbGVNaWMoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuaXNNaWNNdXRlZFN1YmplY3QudmFsdWU7XG4gICAgdGhpcy5kYWlseUNsaWVudC5zZXRNdXRlZCghY3VycmVudCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RHVyYXRpb25UaW1lcigpOiB2b2lkIHtcbiAgICBjb25zdCB1cGRhdGVEdXJhdGlvbiA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNhbGxTdGFydFRpbWUgPiAwKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gdGhpcy5jYWxsU3RhcnRUaW1lKSAvIDEwMDApO1xuICAgICAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcihlbGFwc2VkIC8gNjApO1xuICAgICAgICBjb25zdCBzZWNvbmRzID0gZWxhcHNlZCAlIDYwO1xuICAgICAgICB0aGlzLmR1cmF0aW9uU3ViamVjdC5uZXh0KFxuICAgICAgICAgIGAke21pbnV0ZXN9OiR7U3RyaW5nKHNlY29uZHMpLnBhZFN0YXJ0KDIsICcwJyl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgdXBkYXRlRHVyYXRpb24oKTtcbiAgICB0aGlzLmR1cmF0aW9uSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCh1cGRhdGVEdXJhdGlvbiwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BEdXJhdGlvblRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmR1cmF0aW9uSW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5kdXJhdGlvbkludGVydmFsKTtcbiAgICAgIHRoaXMuZHVyYXRpb25JbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -6,7 +6,7 @@ import * as i0 from '@angular/core';
|
|
|
6
6
|
import { Injectable, NgZone, InjectionToken, EventEmitter, Component, Injector, Output, Input, ElementRef, ChangeDetectionStrategy, ChangeDetectorRef, Renderer2, ViewContainerRef, ViewChild, ViewChildren, NgModule, Pipe, Inject } from '@angular/core';
|
|
7
7
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
8
8
|
import { Subject, BehaviorSubject, Subscription, combineLatest, of } from 'rxjs';
|
|
9
|
-
import { map,
|
|
9
|
+
import { map, takeUntil, filter, take, switchMap, catchError } from 'rxjs/operators';
|
|
10
10
|
import { Socket } from 'ngx-socket-io';
|
|
11
11
|
import { Validators, FormBuilder, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
12
12
|
import * as SpeechSDK from 'microsoft-cognitiveservices-speech-sdk';
|
|
@@ -1021,15 +1021,17 @@ DailyVoiceClientService.ctorParameters = () => [
|
|
|
1021
1021
|
{ type: NgZone }
|
|
1022
1022
|
];
|
|
1023
1023
|
|
|
1024
|
+
/** Static Daily.co room URL (used instead of dynamic room_created from backend). */
|
|
1025
|
+
const STATIC_DAILY_ROOM_URL = 'https://cloud-4a46e9dfbc8c499daddd480d9c294b88.daily.co/voice-None-1772776583';
|
|
1024
1026
|
/**
|
|
1025
1027
|
* Voice agent orchestrator. Coordinates WebSocket (signaling) and Daily.js (WebRTC audio).
|
|
1026
1028
|
*
|
|
1027
1029
|
* CRITICAL: This service must NEVER use Socket.IO or ngx-socket-io. Voice flow uses only:
|
|
1028
|
-
* - Native WebSocket (WebSocketVoiceClientService) for signaling (
|
|
1029
|
-
* - Daily.js (DailyVoiceClientService) for WebRTC audio
|
|
1030
|
+
* - Native WebSocket (WebSocketVoiceClientService) for signaling (transcripts)
|
|
1031
|
+
* - Daily.js (DailyVoiceClientService) for WebRTC audio via STATIC_DAILY_ROOM_URL.
|
|
1030
1032
|
*
|
|
1031
1033
|
* - Maintains callState, statusText, duration, isMicMuted, isUserSpeaking, audioLevels
|
|
1032
|
-
* - Uses WebSocket for
|
|
1034
|
+
* - Uses WebSocket for transcripts only (no audio)
|
|
1033
1035
|
* - Uses Daily.js for all audio, mic, and real-time speaking detection
|
|
1034
1036
|
*/
|
|
1035
1037
|
class VoiceAgentService {
|
|
@@ -1118,21 +1120,6 @@ class VoiceAgentService {
|
|
|
1118
1120
|
if (!wsUrl || typeof wsUrl !== 'string') {
|
|
1119
1121
|
throw new Error('No ws_url in response');
|
|
1120
1122
|
}
|
|
1121
|
-
// Subscribe to room_created BEFORE connecting to avoid race
|
|
1122
|
-
this.wsClient.roomCreated$
|
|
1123
|
-
.pipe(take(1), takeUntil(this.destroy$))
|
|
1124
|
-
.subscribe((roomUrl) => __awaiter(this, void 0, void 0, function* () {
|
|
1125
|
-
try {
|
|
1126
|
-
yield this.onRoomCreated(roomUrl);
|
|
1127
|
-
}
|
|
1128
|
-
catch (err) {
|
|
1129
|
-
console.error('Daily join failed:', err);
|
|
1130
|
-
this.callStateSubject.next('ended');
|
|
1131
|
-
this.statusTextSubject.next('Connection failed');
|
|
1132
|
-
yield this.disconnect();
|
|
1133
|
-
throw err;
|
|
1134
|
-
}
|
|
1135
|
-
}));
|
|
1136
1123
|
// Forward transcripts from WebSocket
|
|
1137
1124
|
this.subscriptions.add(this.wsClient.userTranscript$
|
|
1138
1125
|
.pipe(takeUntil(this.destroy$))
|
|
@@ -1142,6 +1129,17 @@ class VoiceAgentService {
|
|
|
1142
1129
|
.subscribe((t) => this.botTranscriptSubject.next(t)));
|
|
1143
1130
|
// Connect signaling WebSocket (no audio over WS)
|
|
1144
1131
|
this.wsClient.connect(wsUrl);
|
|
1132
|
+
// Join Daily.co using static room URL (no wait for room_created)
|
|
1133
|
+
try {
|
|
1134
|
+
yield this.onRoomCreated(STATIC_DAILY_ROOM_URL);
|
|
1135
|
+
}
|
|
1136
|
+
catch (err) {
|
|
1137
|
+
console.error('Daily join failed:', err);
|
|
1138
|
+
this.callStateSubject.next('ended');
|
|
1139
|
+
this.statusTextSubject.next('Connection failed');
|
|
1140
|
+
yield this.disconnect();
|
|
1141
|
+
throw err;
|
|
1142
|
+
}
|
|
1145
1143
|
}
|
|
1146
1144
|
catch (error) {
|
|
1147
1145
|
console.error('Error connecting voice agent:', error);
|