@vgroup/dialbox 0.1.27 → 0.1.29

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.
@@ -15,8 +15,6 @@ export class TwilioService {
15
15
  this.notificationSerivce = notificationSerivce;
16
16
  this.openInProgressDialpad = new BehaviorSubject(false);
17
17
  this.currentCall = new BehaviorSubject(null);
18
- this.incomingCalls = new BehaviorSubject([]);
19
- this.incomingCalls$ = this.incomingCalls.asObservable();
20
18
  this.currentCallState = new BehaviorSubject('none'); //in-progress, out-progress, none
21
19
  this.callType = new BehaviorSubject('NIL');
22
20
  this.isIncomingCallPicked = new BehaviorSubject(false); // for both incoming and outgoing
@@ -34,8 +32,6 @@ export class TwilioService {
34
32
  this.triggerSMSReload = new BehaviorSubject(false);
35
33
  this.tokenInitialized = false;
36
34
  this.tokenInitialization$ = null;
37
- this.devicePromise = null;
38
- this.processedCallSids = new Set();
39
35
  this.initializeToken();
40
36
  }
41
37
  initializeToken() {
@@ -46,6 +42,7 @@ export class TwilioService {
46
42
  this.incomingCallToken = data.token;
47
43
  localStorage.setItem('in-token', data.token);
48
44
  this.tokenInitialized = true;
45
+ console.log('dfdfdsfdsfds');
49
46
  this.initializeDevice();
50
47
  }), catchError(error => {
51
48
  console.error('Error initializing Twilio token:', error);
@@ -56,78 +53,45 @@ export class TwilioService {
56
53
  }
57
54
  initializeTwilioDevice() {
58
55
  if (this.tokenInitialized && this.incomingCallToken) {
59
- this.initializeDevice().catch(err => console.error('Device initialization failed', err));
56
+ this.initializeDevice();
60
57
  }
61
58
  else {
62
59
  this.initializeToken().subscribe();
63
60
  }
64
61
  }
65
62
  initializeDevice() {
66
- if (this.devicePromise) {
67
- return this.devicePromise;
68
- }
69
- const token = this.incomingCallToken;
70
- if (!token) {
71
- return Promise.reject('No Twilio token available');
72
- }
73
- // Destroy any existing device before creating a new one
74
63
  if (this.device) {
75
64
  this.device.destroy();
76
65
  }
77
- this.devicePromise = new Promise((resolve, reject) => {
78
- const device = new Device(token, {
79
- allowIncomingWhileBusy: true,
80
- closeProtection: true,
81
- });
82
- const cleanup = () => {
83
- device.off('registered', onRegistered);
84
- device.off('error', onError);
85
- device.off('incoming', onIncoming);
86
- };
87
- const onRegistered = () => {
88
- console.log('Twilio Device registered');
89
- this.device = device;
90
- cleanup();
91
- resolve(device);
92
- };
93
- const onError = (error) => {
94
- console.error('Twilio Device Error:', error);
95
- this.devicePromise = null; // Allow retry
96
- cleanup();
97
- reject(error);
98
- };
99
- const onIncoming = (call) => {
100
- const callSid = call.parameters['CallSid'];
101
- if (callSid && !this.processedCallSids.has(callSid)) {
102
- this.processedCallSids.add(callSid);
103
- console.log('New incoming call:', callSid);
104
- const currentCalls = this.incomingCalls.getValue();
105
- this.incomingCalls.next([...currentCalls, call]);
106
- // The original currentCall can still represent the most recent call for single-call contexts
107
- this.currentCall.next(call);
108
- this.callType.next('INCOMING');
109
- this.currentCallState.next('incoming');
110
- this.notificationSerivce.showNotification(call);
111
- const callEndHandler = () => {
112
- this.processedCallSids.delete(callSid);
113
- const currentCalls = this.incomingCalls.getValue().filter(c => c.parameters['CallSid'] !== callSid);
114
- this.incomingCalls.next(currentCalls);
115
- call.off('disconnect', callEndHandler);
116
- call.off('cancel', callEndHandler);
117
- };
118
- call.on('disconnect', callEndHandler);
119
- call.on('cancel', callEndHandler);
120
- }
121
- else {
122
- console.log('Duplicate incoming call event ignored for CallSid:', callSid);
123
- }
124
- };
125
- device.on('registered', onRegistered);
126
- device.on('error', onError);
127
- device.on('incoming', onIncoming);
128
- device.register();
66
+ if (!this.incomingCallToken) {
67
+ console.error('No Twilio token available');
68
+ return;
69
+ }
70
+ this.device = new Device(this.incomingCallToken, {
71
+ allowIncomingWhileBusy: true,
72
+ closeProtection: true
73
+ });
74
+ console.log("device created");
75
+ this.device.register();
76
+ this.device.on('incoming', (call) => {
77
+ console.log("incoming call", call);
78
+ this.currentCall.next(call);
79
+ this.callType.next('INCOMING');
80
+ this.currentCallState.next('incoming');
81
+ this.notificationSerivce.showNotification(call);
82
+ });
83
+ this.device.on('error', (error) => {
84
+ console.error('Twilio Device Error:', error);
85
+ // Reset initialization state on error to allow retry
86
+ this.tokenInitialized = false;
87
+ });
88
+ this.device.on('registered', () => {
89
+ console.log('Twilio Device registered successfully');
90
+ });
91
+ this.device.on('unregistered', () => {
92
+ console.log('Twilio Device unregistered');
93
+ this.tokenInitialized = false;
129
94
  });
130
- return this.devicePromise;
131
95
  }
132
96
  // onIncomingCall(){
133
97
  // this.device.on('incoming', (call:any) => {
@@ -229,4 +193,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
229
193
  providedIn: 'root'
230
194
  }]
231
195
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ExtensionService }, { type: i3.NotificationService }]; } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpbGlvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvc2VydmljZS90d2lsaW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUdqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBYzNELE1BQU0sT0FBTyxhQUFhO0lBOEJ4QixZQUNVLElBQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxtQkFBd0M7UUFGeEMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUEvQmxELDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLENBQUM7UUFDN0Msa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUN4RCxtQkFBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7UUFJdEYsYUFBUSxHQUFHLElBQUksZUFB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TUFBTSxHQUFHLHlDQUF5QyxHQUFHLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwSCxDQUFDOzsyR0ExUFUsYUFBYTsrR0FBYixhQUFhLGNBRlosTUFBTTs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGV2aWNlLCBDYWxsIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uU2VydmljZSB9IGZyb20gJy4vZXh0ZW5zaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4vTm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBEaWFsUGF5bG9hZCB7XG4gIG51bWJlcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGltZzogc3RyaW5nO1xuICBjYWxsZXJJZDpzdHJpbmc7XG4gIGlzRGlhbEZyb21IaXN0b3J5OmJvb2xlYW47XG4gIGZyb206c3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290JyAgXG59KVxuZXhwb3J0IGNsYXNzIFR3aWxpb1NlcnZpY2Uge1xuICBcbiAgb3BlbkluUHJvZ3Jlc3NEaWFscGFkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGN1cnJlbnRDYWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYWxsIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgaW5jb21pbmdDYWxscyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsbFtdPihbXSk7XG4gIGluY29taW5nQ2FsbHMkID0gdGhpcy5pbmNvbWluZ0NhbGxzLmFzT2JzZXJ2YWJsZSgpO1xuICBjdXJyZW50Q2FsbFN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KCdub25lJyk7IC8vaW4tcHJvZ3Jlc3MsIG91dC1wcm9ncmVzcywgbm9uZVxuICBkZXZpY2U6YW55O1xuICBpbmNvbWluZ0NhbGxUb2tlbj86c3RyaW5nO1xuICBvdXRnb2luZ0NhbGxUb2tlbj86c3RyaW5nO1xuICBjYWxsVHlwZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignTklMJyk7XG4gIGlzSW5jb21pbmdDYWxsUGlja2VkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7IC8vIGZvciBib3RoIGluY29taW5nIGFuZCBvdXRnb2luZ1xuICB0b2tlbjphbnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyk7XG4gIGlzTmV3Q29udGFjdEFkZGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHVwZGF0ZVJlY2VudENhbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgY2FsbGhhbmRsZUZyb21Ob3RpZmljYXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xuXG4gIGVuZENhbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgZGlhbE51bWJlckZyb21PdGhlck1vZHVsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGlhbFBheWxvYWQ+KHsgbnVtYmVyOiAnJywgbmFtZTogJycsIGltZzogJycsIGNhbGxlcklkOiAnJywgaXNEaWFsRnJvbUhpc3Rvcnk6IGZhbHNlLCBmcm9tOiAnJyB9KTtcblxuICB0b2dnbGVDYWxsZXJJZEFsZXJ0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgaXNUcmlhbE92ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNQYXltZW50RHVlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGlzQXZhaWxhYmxlTnVtYmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGNhbGxlcklkTGlzdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcbiAgdHJpZ2dlclNNU1JlbG9hZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHByaXZhdGUgdG9rZW5Jbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIHRva2VuSW5pdGlhbGl6YXRpb24kOiBPYnNlcnZhYmxlPGFueT4gfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIFxuICAgIHByaXZhdGUgZXh0ZW5zaW9uU2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcml2Y2U6IE5vdGlmaWNhdGlvblNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pbml0aWFsaXplVG9rZW4oKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVRva2VuKCkge1xuICAgIGlmICh0aGlzLnRva2VuSW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kIHx8IG9mKG51bGwpO1xuICAgIH1cblxuICAgIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0SW5jb21pbmdDYWxsVG9rZW4oKS5waXBlKFxuICAgICAgdGFwKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxUb2tlbiA9IGRhdGEudG9rZW47XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdpbi10b2tlbicsIGRhdGEudG9rZW4pO1xuICAgICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVEZXZpY2UoKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBUd2lsaW8gdG9rZW46JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpIC8vIENhY2hlIHRoZSByZXN1bHQgZm9yIHN1YnNlcXVlbnQgc3Vic2NyaWJlcnNcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQ7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZVR3aWxpb0RldmljZSgpIHtcbiAgICBpZiAodGhpcy50b2tlbkluaXRpYWxpemVkICYmIHRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURldmljZSgpLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKCdEZXZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkJywgZXJyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRva2VuKCkuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZXZpY2VQcm9taXNlOiBQcm9taXNlPERldmljZT4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwcm9jZXNzZWRDYWxsU2lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZURldmljZSgpOiBQcm9taXNlPERldmljZT4ge1xuICAgIGlmICh0aGlzLmRldmljZVByb21pc2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmRldmljZVByb21pc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmluY29taW5nQ2FsbFRva2VuO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTm8gVHdpbGlvIHRva2VuIGF2YWlsYWJsZScpO1xuICAgIH1cblxuICAgIC8vIERlc3Ryb3kgYW55IGV4aXN0aW5nIGRldmljZSBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lXG4gICAgaWYgKHRoaXMuZGV2aWNlKSB7XG4gICAgICB0aGlzLmRldmljZS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5kZXZpY2VQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgZGV2aWNlID0gbmV3IERldmljZSh0b2tlbiwge1xuICAgICAgICBhbGxvd0luY29taW5nV2hpbGVCdXN5OiB0cnVlLFxuICAgICAgICBjbG9zZVByb3RlY3Rpb246IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgZGV2aWNlLm9mZigncmVnaXN0ZXJlZCcsIG9uUmVnaXN0ZXJlZCk7XG4gICAgICAgIGRldmljZS5vZmYoJ2Vycm9yJywgb25FcnJvcik7XG4gICAgICAgIGRldmljZS5vZmYoJ2luY29taW5nJywgb25JbmNvbWluZyk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblJlZ2lzdGVyZWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW8gRGV2aWNlIHJlZ2lzdGVyZWQnKTtcbiAgICAgICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVzb2x2ZShkZXZpY2UpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25FcnJvciA9IChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1R3aWxpbyBEZXZpY2UgRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICB0aGlzLmRldmljZVByb21pc2UgPSBudWxsOyAvLyBBbGxvdyByZXRyeVxuICAgICAgICBjbGVhbnVwKCk7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvbkluY29taW5nID0gKGNhbGw6IENhbGwpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbFNpZCA9IGNhbGwucGFyYW1ldGVyc1snQ2FsbFNpZCddO1xuICAgICAgICBpZiAoY2FsbFNpZCAmJiAhdGhpcy5wcm9jZXNzZWRDYWxsU2lkcy5oYXMoY2FsbFNpZCkpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NlZENhbGxTaWRzLmFkZChjYWxsU2lkKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnTmV3IGluY29taW5nIGNhbGw6JywgY2FsbFNpZCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudENhbGxzID0gdGhpcy5pbmNvbWluZ0NhbGxzLmdldFZhbHVlKCk7XG4gICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzLm5leHQoWy4uLmN1cnJlbnRDYWxscywgY2FsbF0pO1xuXG4gICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIGN1cnJlbnRDYWxsIGNhbiBzdGlsbCByZXByZXNlbnQgdGhlIG1vc3QgcmVjZW50IGNhbGwgZm9yIHNpbmdsZS1jYWxsIGNvbnRleHRzXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbC5uZXh0KGNhbGwpO1xuICAgICAgICAgIHRoaXMuY2FsbFR5cGUubmV4dCgnSU5DT01JTkcnKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsU3RhdGUubmV4dCgnaW5jb21pbmcnKTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcml2Y2Uuc2hvd05vdGlmaWNhdGlvbihjYWxsKTtcblxuICAgICAgICAgIGNvbnN0IGNhbGxFbmRIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWRDYWxsU2lkcy5kZWxldGUoY2FsbFNpZCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q2FsbHMgPSB0aGlzLmluY29taW5nQ2FsbHMuZ2V0VmFsdWUoKS5maWx0ZXIoYyA9PiBjLnBhcmFtZXRlcnNbJ0NhbGxTaWQnXSAhPT0gY2FsbFNpZCk7XG4gICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHMubmV4dChjdXJyZW50Q2FsbHMpO1xuXG4gICAgICAgICAgICBjYWxsLm9mZignZGlzY29ubmVjdCcsIGNhbGxFbmRIYW5kbGVyKTtcbiAgICAgICAgICAgIGNhbGwub2ZmKCdjYW5jZWwnLCBjYWxsRW5kSGFuZGxlcik7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBjYWxsLm9uKCdkaXNjb25uZWN0JywgY2FsbEVuZEhhbmRsZXIpO1xuICAgICAgICAgIGNhbGwub24oJ2NhbmNlbCcsIGNhbGxFbmRIYW5kbGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnRHVwbGljYXRlIGluY29taW5nIGNhbGwgZXZlbnQgaWdub3JlZCBmb3IgQ2FsbFNpZDonLCBjYWxsU2lkKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZGV2aWNlLm9uKCdyZWdpc3RlcmVkJywgb25SZWdpc3RlcmVkKTtcbiAgICAgIGRldmljZS5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIGRldmljZS5vbignaW5jb21pbmcnLCBvbkluY29taW5nKTtcblxuICAgICAgZGV2aWNlLnJlZ2lzdGVyKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5kZXZpY2VQcm9taXNlO1xuICB9XG5cbiAgLy8gb25JbmNvbWluZ0NhbGwoKXtcbiAgLy8gICB0aGlzLmRldmljZS5vbignaW5jb21pbmcnLCAoY2FsbDphbnkpID0+IHtcbiAgLy8gICAgIGNvbnNvbGUubG9nKGNhbGwpO1xuICAgICBcbiAgLy8gICAgIC8vY2FsbC5hY2NlcHQoKTtcbiAgLy8gICB9KTtcbiAgLy8gfVxuICBzYXZlQ29udGFjdChwYXlsb2FkOiBhbnkpOiBPYnNlcnZhYmxlPFtdPiB7XG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpfSkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9hZGQvY29udGFjdHMvbWFudWFsbHknLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cbiAgdXBkYXRlQ29udGFjdChwYXlsb2FkOmFueSl7XG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgdGhpcy50b2tlbn0pIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBkYXRlL2NvbnRhY3QnLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cbiAgXG4gIGRlbGV0ZUNvbnRhY3QoaWQ6c3RyaW5nKXtcbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgIHBob25lYm9va2lkOiBpZFxuICAgIH1cbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9kZWxldGUvY29udGFjdC8nK2lkLHBheWxvYWQsIGh0dHBPcHRpb25zKTtcbiAgfVxuICBnZXRDb250YWN0TGlzdCgpe1xuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svcmVhZC9jb250YWN0cycsIGh0dHBPcHRpb25zKTtcbiAgfVxuXG4gIGFkZENvbnRhY3RUb0Zhdm91cml0ZShwYXlsb2FkOiBhbnkpe1xuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL3VwZGF0ZS9mYXZvdXJpdGUnLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cblxuICBnZXRGYXZvdXJpdENvbnRhY3RzKCl7XG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9mYXZvdXJpdGUvY29udGFjdHMnLCBodHRwT3B0aW9ucyk7XG4gIH1cblxuICBnZXRSZWNlbnRDYWxscyhwYWdlSW5kZXg/OiBzdHJpbmcsIHBhZ2VTaXplPzogc3RyaW5nLCl7XG4gICAgLy8gbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgLy8gcGFyYW1zID0gcGFyYW1zLnNldCgnc2l6ZScsIHBhZ2VTaXplKTtcbiAgICAvLyBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgcGFnZUluZGV4KTtcbiAgICBjb25zdCBoZWFkZXJzID0gIHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfTtcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9e2hlYWRlcnN9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9yZWNlbnQvY2FsbHMnLCBodHRwT3B0aW9ucyk7XG4gIH1cbiAgZGVsZXRlUmVjZW50Q2FsbExvZyhpZDpzdHJpbmd8IHN0cmluZ1tdKXtcbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgIHJlY29yZElkOiBpZFxuICAgIH1cbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9kZWxldGUvY2FsbHMvJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cblxuICB1cGxvYWRQaG90byhwYXlsb2FkOiBhbnkpe1xuICAgIGxldCBodHRwT3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXG4gICAgICB9KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBsb2FkL3Bob3RvJyxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cblxuICBkZWxldGVQaG90byhpZDpzdHJpbmcpe1xuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgcGhvbmVib29raWQ6IGlkXG4gICAgfVxuICAgIGxldCBodHRwT3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXG4gICAgICB9KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svZGVsZXRlL3Bob3RvLycraWQscGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xuICB9XG5cbiAgLy8gdG9nZ2xlQ2FsbGVySWRBbGVydEZuKHZhbDogYW55KSB7XG4gIC8vICAgbGV0IGh0dHBPcHRpb25zID0ge1xuICAvLyAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgLy8gICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcbiAgLy8gICAgIH0pXG4gIC8vICAgfTtcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwLnB1dDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvc29mdHBob25lL2NhbGxlcmlkL2FsZXJ0LycgKyB2YWwsIHt9LCBodHRwT3B0aW9ucyk7XG4gIC8vIH1cblxuICB0b2dnbGVDb3V0cnlDb2RlVG9hc3QodmFsOmFueSl7XG4gICAgbGV0IGh0dHBPcHRpb25zID0ge1xuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcbiAgICAgIH0pXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvc29mdHBob25lL2NvdW50cnljb2RlL2FsZXJ0LycgKyB2YWwsIHt9LCBodHRwT3B0aW9ucyk7XG4gIH1cbiAgZ2V0VG9OdW1iZXIoZGlhbGxlZE5vOiBzdHJpbmcsIGlzb0NvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSksXG4gICAgICBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdpc29Db2RlJywgaXNvQ29kZSlcbiAgICB9O1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdpc29Db2RlJywgaXNvQ29kZSlcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvc29mdHBob25lL2NoZWNrL2NvdW50cnlDb2RlLycgKyBkaWFsbGVkTm8sIGh0dHBPcHRpb25zKTtcbiAgfSBcblxufVxuIl19
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpbGlvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvc2VydmljZS90d2lsaW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQVEsTUFBTSxtQkFBbUIsQ0FBQztBQUdqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBYzNELE1BQU0sT0FBTyxhQUFhO0lBNEJ4QixZQUNVLElBQWdCLEVBQ2hCLGdCQUFrQyxFQUNsQyxtQkFBd0M7UUFGeEMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUE3QmxELDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVELGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLENBQUM7UUFDckQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7UUFJdEYsYUFBUSxHQUFHLElBQUksZUFBZSxDQUFTLEtBQUssQ0FBQyxDQUFDO1FBQzlDLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDLENBQUMsaUNBQWlDO1FBQzdGLFVBQUssR0FBTyxZ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QUFrQixFQUFFLFVBQVUsRUFBRSxTQUFTLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzNILE1BQU0sRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDO1NBQ2pELENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDdkQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSyxXQUFXLENBQUMsTUFBTSxHQUFHLHlDQUF5QyxHQUFHLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNwSCxDQUFDOzsyR0FoTlUsYUFBYTsrR0FBYixhQUFhLGNBRlosTUFBTTs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBzaGFyZVJlcGxheSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGV2aWNlLCBDYWxsIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uU2VydmljZSB9IGZyb20gJy4vZXh0ZW5zaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4vTm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBEaWFsUGF5bG9hZCB7XG4gIG51bWJlcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGltZzogc3RyaW5nO1xuICBjYWxsZXJJZDpzdHJpbmc7XG4gIGlzRGlhbEZyb21IaXN0b3J5OmJvb2xlYW47XG4gIGZyb206c3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290JyAgXG59KVxuZXhwb3J0IGNsYXNzIFR3aWxpb1NlcnZpY2Uge1xuICBcbiAgb3BlbkluUHJvZ3Jlc3NEaWFscGFkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGN1cnJlbnRDYWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYWxsIHwgbnVsbD4obnVsbCk7XG4gIGN1cnJlbnRDYWxsU3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oJ25vbmUnKTsgLy9pbi1wcm9ncmVzcywgb3V0LXByb2dyZXNzLCBub25lXG4gIGRldmljZTphbnk7XG4gIGluY29taW5nQ2FsbFRva2VuPzpzdHJpbmc7XG4gIG91dGdvaW5nQ2FsbFRva2VuPzpzdHJpbmc7XG4gIGNhbGxUeXBlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdOSUwnKTtcbiAgaXNJbmNvbWluZ0NhbGxQaWNrZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTsgLy8gZm9yIGJvdGggaW5jb21pbmcgYW5kIG91dGdvaW5nXG4gIHRva2VuOmFueSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKTtcbiAgaXNOZXdDb250YWN0QWRkZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgdXBkYXRlUmVjZW50Q2FsbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBjYWxsaGFuZGxlRnJvbU5vdGlmaWNhdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih7fSk7XG5cbiAgZW5kQ2FsbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBkaWFsTnVtYmVyRnJvbU90aGVyTW9kdWxlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEaWFsUGF5bG9hZD4oeyBudW1iZXI6ICcnLCBuYW1lOiAnJywgaW1nOiAnJywgY2FsbGVySWQ6ICcnLCBpc0RpYWxGcm9tSGlzdG9yeTogZmFsc2UsIGZyb206ICcnIH0pO1xuXG4gIHRvZ2dsZUNhbGxlcklkQWxlcnQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBpc1RyaWFsT3ZlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc1BheW1lbnREdWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNBdmFpbGFibGVOdW1iZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgY2FsbGVySWRMaXN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4oW10pO1xuICB0cmlnZ2VyU01TUmVsb2FkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSB0b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgdG9rZW5Jbml0aWFsaXphdGlvbiQ6IE9ic2VydmFibGU8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgXG4gICAgcHJpdmF0ZSBleHRlbnNpb25TZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VyaXZjZTogTm90aWZpY2F0aW9uU2VydmljZVxuICApIHtcbiAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplVG9rZW4oKSB7XG4gICAgaWYgKHRoaXMudG9rZW5Jbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgfHwgb2YobnVsbCk7XG4gICAgfVxuXG4gICAgdGhpcy50b2tlbkluaXRpYWxpemF0aW9uJCA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRJbmNvbWluZ0NhbGxUb2tlbigpLnBpcGUoXG4gICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmluY29taW5nQ2FsbFRva2VuID0gZGF0YS50b2tlbjtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2luLXRva2VuJywgZGF0YS50b2tlbik7XG4gICAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkZmRmZHNmZHNmZHMnKVxuICAgICAgICB0aGlzLmluaXRpYWxpemVEZXZpY2UoKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBUd2lsaW8gdG9rZW46JywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpIC8vIENhY2hlIHRoZSByZXN1bHQgZm9yIHN1YnNlcXVlbnQgc3Vic2NyaWJlcnNcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQ7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZVR3aWxpb0RldmljZSgpIHtcbiAgICBpZiAodGhpcy50b2tlbkluaXRpYWxpemVkICYmIHRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURldmljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZURldmljZSgpIHtcbiAgICBpZiAodGhpcy5kZXZpY2UpIHtcbiAgICAgIHRoaXMuZGV2aWNlLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIFR3aWxpbyB0b2tlbiBhdmFpbGFibGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRldmljZSA9IG5ldyBEZXZpY2UodGhpcy5pbmNvbWluZ0NhbGxUb2tlbiwgeyBcbiAgICAgIGFsbG93SW5jb21pbmdXaGlsZUJ1c3k6IHRydWUsXG4gICAgICBjbG9zZVByb3RlY3Rpb246IHRydWVcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhcImRldmljZSBjcmVhdGVkXCIpXG4gICAgXG4gICAgdGhpcy5kZXZpY2UucmVnaXN0ZXIoKTtcblxuICAgIHRoaXMuZGV2aWNlLm9uKCdpbmNvbWluZycsIChjYWxsOiBDYWxsKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcImluY29taW5nIGNhbGxcIixjYWxsKVxuICAgICAgdGhpcy5jdXJyZW50Q2FsbC5uZXh0KGNhbGwpO1xuICAgICAgdGhpcy5jYWxsVHlwZS5uZXh0KCdJTkNPTUlORycpO1xuICAgICAgdGhpcy5jdXJyZW50Q2FsbFN0YXRlLm5leHQoJ2luY29taW5nJyk7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcml2Y2Uuc2hvd05vdGlmaWNhdGlvbihjYWxsKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGV2aWNlLm9uKCdlcnJvcicsIChlcnJvcjogYW55KSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdUd2lsaW8gRGV2aWNlIEVycm9yOicsIGVycm9yKTtcbiAgICAgIC8vIFJlc2V0IGluaXRpYWxpemF0aW9uIHN0YXRlIG9uIGVycm9yIHRvIGFsbG93IHJldHJ5XG4gICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGV2aWNlLm9uKCdyZWdpc3RlcmVkJywgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGV2aWNlLm9uKCd1bnJlZ2lzdGVyZWQnLCAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnVHdpbGlvIERldmljZSB1bnJlZ2lzdGVyZWQnKTtcbiAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gb25JbmNvbWluZ0NhbGwoKXtcbiAgLy8gICB0aGlzLmRldmljZS5vbignaW5jb21pbmcnLCAoY2FsbDphbnkpID0+IHtcbiAgLy8gICAgIGNvbnNvbGUubG9nKGNhbGwpO1xuICAgICBcbiAgLy8gICAgIC8vY2FsbC5hY2NlcHQoKTtcbiAgLy8gICB9KTtcbiAgLy8gfVxuICBzYXZlQ29udGFjdChwYXlsb2FkOiBhbnkpOiBPYnNlcnZhYmxlPFtdPiB7XG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpfSkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9hZGQvY29udGFjdHMvbWFudWFsbHknLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cbiAgdXBkYXRlQ29udGFjdChwYXlsb2FkOmFueSl7XG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgdGhpcy50b2tlbn0pIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBkYXRlL2NvbnRhY3QnLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cbiAgXG4gIGRlbGV0ZUNvbnRhY3QoaWQ6c3RyaW5nKXtcbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgIHBob25lYm9va2lkOiBpZFxuICAgIH1cbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9kZWxldGUvY29udGFjdC8nK2lkLHBheWxvYWQsIGh0dHBPcHRpb25zKTtcbiAgfVxuICBnZXRDb250YWN0TGlzdCgpe1xuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svcmVhZC9jb250YWN0cycsIGh0dHBPcHRpb25zKTtcbiAgfVxuXG4gIGFkZENvbnRhY3RUb0Zhdm91cml0ZShwYXlsb2FkOiBhbnkpe1xuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL3VwZGF0ZS9mYXZvdXJpdGUnLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cblxuICBnZXRGYXZvdXJpdENvbnRhY3RzKCl7XG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9mYXZvdXJpdGUvY29udGFjdHMnLCBodHRwT3B0aW9ucyk7XG4gIH1cblxuICBnZXRSZWNlbnRDYWxscyhwYWdlSW5kZXg/OiBzdHJpbmcsIHBhZ2VTaXplPzogc3RyaW5nLCl7XG4gICAgLy8gbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgLy8gcGFyYW1zID0gcGFyYW1zLnNldCgnc2l6ZScsIHBhZ2VTaXplKTtcbiAgICAvLyBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgcGFnZUluZGV4KTtcbiAgICBjb25zdCBoZWFkZXJzID0gIHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfTtcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9e2hlYWRlcnN9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9yZWNlbnQvY2FsbHMnLCBodHRwT3B0aW9ucyk7XG4gIH1cbiAgZGVsZXRlUmVjZW50Q2FsbExvZyhpZDpzdHJpbmd8IHN0cmluZ1tdKXtcbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgIHJlY29yZElkOiBpZFxuICAgIH1cbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9kZWxldGUvY2FsbHMvJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cblxuICB1cGxvYWRQaG90byhwYXlsb2FkOiBhbnkpe1xuICAgIGxldCBodHRwT3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXG4gICAgICB9KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBsb2FkL3Bob3RvJyxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cblxuICBkZWxldGVQaG90byhpZDpzdHJpbmcpe1xuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgcGhvbmVib29raWQ6IGlkXG4gICAgfVxuICAgIGxldCBodHRwT3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXG4gICAgICB9KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svZGVsZXRlL3Bob3RvLycraWQscGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xuICB9XG5cbiAgLy8gdG9nZ2xlQ2FsbGVySWRBbGVydEZuKHZhbDogYW55KSB7XG4gIC8vICAgbGV0IGh0dHBPcHRpb25zID0ge1xuICAvLyAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgLy8gICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcbiAgLy8gICAgIH0pXG4gIC8vICAgfTtcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwLnB1dDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvc29mdHBob25lL2NhbGxlcmlkL2FsZXJ0LycgKyB2YWwsIHt9LCBodHRwT3B0aW9ucyk7XG4gIC8vIH1cblxuICB0b2dnbGVDb3V0cnlDb2RlVG9hc3QodmFsOmFueSl7XG4gICAgbGV0IGh0dHBPcHRpb25zID0ge1xuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcbiAgICAgIH0pXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvc29mdHBob25lL2NvdW50cnljb2RlL2FsZXJ0LycgKyB2YWwsIHt9LCBodHRwT3B0aW9ucyk7XG4gIH1cbiAgZ2V0VG9OdW1iZXIoZGlhbGxlZE5vOiBzdHJpbmcsIGlzb0NvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xuICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSksXG4gICAgICBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdpc29Db2RlJywgaXNvQ29kZSlcbiAgICB9O1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdpc29Db2RlJywgaXNvQ29kZSlcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvc29mdHBob25lL2NoZWNrL2NvdW50cnlDb2RlLycgKyBkaWFsbGVkTm8sIGh0dHBPcHRpb25zKTtcbiAgfSBcblxufVxuIl19
@@ -1373,8 +1373,6 @@ class TwilioService {
1373
1373
  this.notificationSerivce = notificationSerivce;
1374
1374
  this.openInProgressDialpad = new BehaviorSubject(false);
1375
1375
  this.currentCall = new BehaviorSubject(null);
1376
- this.incomingCalls = new BehaviorSubject([]);
1377
- this.incomingCalls$ = this.incomingCalls.asObservable();
1378
1376
  this.currentCallState = new BehaviorSubject('none'); //in-progress, out-progress, none
1379
1377
  this.callType = new BehaviorSubject('NIL');
1380
1378
  this.isIncomingCallPicked = new BehaviorSubject(false); // for both incoming and outgoing
@@ -1392,8 +1390,6 @@ class TwilioService {
1392
1390
  this.triggerSMSReload = new BehaviorSubject(false);
1393
1391
  this.tokenInitialized = false;
1394
1392
  this.tokenInitialization$ = null;
1395
- this.devicePromise = null;
1396
- this.processedCallSids = new Set();
1397
1393
  this.initializeToken();
1398
1394
  }
1399
1395
  initializeToken() {
@@ -1404,6 +1400,7 @@ class TwilioService {
1404
1400
  this.incomingCallToken = data.token;
1405
1401
  localStorage.setItem('in-token', data.token);
1406
1402
  this.tokenInitialized = true;
1403
+ console.log('dfdfdsfdsfds');
1407
1404
  this.initializeDevice();
1408
1405
  }), catchError(error => {
1409
1406
  console.error('Error initializing Twilio token:', error);
@@ -1414,78 +1411,45 @@ class TwilioService {
1414
1411
  }
1415
1412
  initializeTwilioDevice() {
1416
1413
  if (this.tokenInitialized && this.incomingCallToken) {
1417
- this.initializeDevice().catch(err => console.error('Device initialization failed', err));
1414
+ this.initializeDevice();
1418
1415
  }
1419
1416
  else {
1420
1417
  this.initializeToken().subscribe();
1421
1418
  }
1422
1419
  }
1423
1420
  initializeDevice() {
1424
- if (this.devicePromise) {
1425
- return this.devicePromise;
1426
- }
1427
- const token = this.incomingCallToken;
1428
- if (!token) {
1429
- return Promise.reject('No Twilio token available');
1430
- }
1431
- // Destroy any existing device before creating a new one
1432
1421
  if (this.device) {
1433
1422
  this.device.destroy();
1434
1423
  }
1435
- this.devicePromise = new Promise((resolve, reject) => {
1436
- const device = new Device(token, {
1437
- allowIncomingWhileBusy: true,
1438
- closeProtection: true,
1439
- });
1440
- const cleanup = () => {
1441
- device.off('registered', onRegistered);
1442
- device.off('error', onError);
1443
- device.off('incoming', onIncoming);
1444
- };
1445
- const onRegistered = () => {
1446
- console.log('Twilio Device registered');
1447
- this.device = device;
1448
- cleanup();
1449
- resolve(device);
1450
- };
1451
- const onError = (error) => {
1452
- console.error('Twilio Device Error:', error);
1453
- this.devicePromise = null; // Allow retry
1454
- cleanup();
1455
- reject(error);
1456
- };
1457
- const onIncoming = (call) => {
1458
- const callSid = call.parameters['CallSid'];
1459
- if (callSid && !this.processedCallSids.has(callSid)) {
1460
- this.processedCallSids.add(callSid);
1461
- console.log('New incoming call:', callSid);
1462
- const currentCalls = this.incomingCalls.getValue();
1463
- this.incomingCalls.next([...currentCalls, call]);
1464
- // The original currentCall can still represent the most recent call for single-call contexts
1465
- this.currentCall.next(call);
1466
- this.callType.next('INCOMING');
1467
- this.currentCallState.next('incoming');
1468
- this.notificationSerivce.showNotification(call);
1469
- const callEndHandler = () => {
1470
- this.processedCallSids.delete(callSid);
1471
- const currentCalls = this.incomingCalls.getValue().filter(c => c.parameters['CallSid'] !== callSid);
1472
- this.incomingCalls.next(currentCalls);
1473
- call.off('disconnect', callEndHandler);
1474
- call.off('cancel', callEndHandler);
1475
- };
1476
- call.on('disconnect', callEndHandler);
1477
- call.on('cancel', callEndHandler);
1478
- }
1479
- else {
1480
- console.log('Duplicate incoming call event ignored for CallSid:', callSid);
1481
- }
1482
- };
1483
- device.on('registered', onRegistered);
1484
- device.on('error', onError);
1485
- device.on('incoming', onIncoming);
1486
- device.register();
1424
+ if (!this.incomingCallToken) {
1425
+ console.error('No Twilio token available');
1426
+ return;
1427
+ }
1428
+ this.device = new Device(this.incomingCallToken, {
1429
+ allowIncomingWhileBusy: true,
1430
+ closeProtection: true
1431
+ });
1432
+ console.log("device created");
1433
+ this.device.register();
1434
+ this.device.on('incoming', (call) => {
1435
+ console.log("incoming call", call);
1436
+ this.currentCall.next(call);
1437
+ this.callType.next('INCOMING');
1438
+ this.currentCallState.next('incoming');
1439
+ this.notificationSerivce.showNotification(call);
1440
+ });
1441
+ this.device.on('error', (error) => {
1442
+ console.error('Twilio Device Error:', error);
1443
+ // Reset initialization state on error to allow retry
1444
+ this.tokenInitialized = false;
1445
+ });
1446
+ this.device.on('registered', () => {
1447
+ console.log('Twilio Device registered successfully');
1448
+ });
1449
+ this.device.on('unregistered', () => {
1450
+ console.log('Twilio Device unregistered');
1451
+ this.tokenInitialized = false;
1487
1452
  });
1488
- return this.devicePromise;
1489
1453
  }
1490
1454
  // onIncomingCall(){
1491
1455
  // this.device.on('incoming', (call:any) => {
@@ -1610,15 +1574,34 @@ class IncomingCallComponent {
1610
1574
  this.selectedIncomingCallInfo = new EventEmitter();
1611
1575
  }
1612
1576
  ngOnInit() {
1577
+ // this.twilioService.currentCall.subscribe((call: any) => {
1578
+ // if (call) {
1579
+ // this.twilioCallData = call;
1580
+ // this.notificationSerivce.showNotification(call);
1581
+ // // Handle the call UI
1582
+ // }
1583
+ // });
1613
1584
  try {
1614
- this.twilioService.incomingCalls$.subscribe(calls => {
1615
- this.newIncomingCallsList = calls;
1616
- this.incomingCallsNewList.emit(this.newIncomingCallsList);
1617
- if (calls.length > 0 && !this.twilioCallData) {
1618
- const firstCall = calls[0];
1619
- this.twilioCallData = firstCall;
1620
- this.twilioAuthId = firstCall.customParameters.get('twilioAuthId');
1585
+ this.twilioService.currentCall.subscribe(call => {
1586
+ if (call) {
1587
+ this.twilioCallData = call;
1588
+ this.twilioAuthId = call.customParameters.get('twilioAuthId');
1589
+ if (!call.parameters) {
1590
+ call.parameters = {};
1591
+ }
1621
1592
  this.sendIPforIncomingCall(this.twilioAuthId, '');
1593
+ call.on('cancel', () => {
1594
+ if (this.incomingCallData && this.incomingCallData.parameters && this.incomingCallData.parameters.CallSid) {
1595
+ this.newIncomingCallsList = this.newIncomingCallsList.filter((item) => item.parameters && item.parameters.CallSid !== this.incomingCallData.parameters.CallSid);
1596
+ }
1597
+ this.rejectCallFromList(call);
1598
+ });
1599
+ call.on('disconnect', () => {
1600
+ if (this.incomingCallData && this.incomingCallData.parameters && this.incomingCallData.parameters.CallSid) {
1601
+ this.newIncomingCallsList = this.newIncomingCallsList.filter((item) => item.parameters && item.parameters.CallSid !== this.incomingCallData.parameters.CallSid);
1602
+ }
1603
+ this.rejectCallFromList(call);
1604
+ });
1622
1605
  }
1623
1606
  });
1624
1607
  }
@@ -1641,15 +1624,6 @@ class IncomingCallComponent {
1641
1624
  }
1642
1625
  });
1643
1626
  }
1644
- removeCallFromList(callSid) {
1645
- if (this.newIncomingCallsList) {
1646
- this.newIncomingCallsList = this.newIncomingCallsList.filter((c) => c.parameters['CallSid'] !== callSid);
1647
- this.incomingCallsNewList.emit(this.newIncomingCallsList);
1648
- if (this.newIncomingCallsList.length === 0) {
1649
- this.closeIncomingCallDiv.emit({ show: 0, call: null });
1650
- }
1651
- }
1652
- }
1653
1627
  rejectCallFromList(data) {
1654
1628
  if (!data)
1655
1629
  return;
@@ -1664,7 +1638,11 @@ class IncomingCallComponent {
1664
1638
  this.sendIPforIncomingCall(data.customParameters.get('twilioAuthId'), 'answered');
1665
1639
  }
1666
1640
  if (this.newIncomingCallsList && data && data.parameters && data.parameters.CallSid) {
1667
- this.removeCallFromList(data.parameters.CallSid);
1641
+ this.newIncomingCallsList = this.newIncomingCallsList.filter((item) => item.parameters && item.parameters.CallSid !== data.parameters.CallSid);
1642
+ this.incomingCallsNewList.emit(this.newIncomingCallsList);
1643
+ if (this.newIncomingCallsList.length == 0) {
1644
+ this.closeIncomingCallDiv.emit({ show: 0, call: data });
1645
+ }
1668
1646
  }
1669
1647
  }
1670
1648
  closeIncomingCallWrapper(val) {
@@ -2174,9 +2152,6 @@ class CallProgressComponent {
2174
2152
  incomingCallsNewList(data) {
2175
2153
  this.newIncomingCallsList = data;
2176
2154
  this.incomingCallsNewInfo.emit(this.newIncomingCallsList);
2177
- if (!data || data.length === 0) {
2178
- this.incomingCallDiv = false;
2179
- }
2180
2155
  }
2181
2156
  selectedIncomingCallInfo(data) {
2182
2157
  this.selectedIncomingCall = data;
@@ -2519,7 +2494,7 @@ class DialboxComponent {
2519
2494
  console.log('366---', data);
2520
2495
  this.extensionService.getUserInformation(data['twilioAuthId']).subscribe(response => {
2521
2496
  incomingCallData['userInfo'] = response;
2522
- const alreadyExists = this.incomingCallsList.some((call) => { var _a, _b; return ((_a = call.parameters) === null || _a === void 0 ? void 0 : _a.CallSid) === ((_b = incomingCallData.parameters) === null || _b === void 0 ? void 0 : _b.CallSid); });
2497
+ const alreadyExists = this.incomingCallsList.some((call) => { var _a, _b, _c, _d; return ((_a = call.parameters) === null || _a === void 0 ? void 0 : _a.From) === ((_b = incomingCallData.parameters) === null || _b === void 0 ? void 0 : _b.From) || ((_c = call.parameters) === null || _c === void 0 ? void 0 : _c.CallSid) === ((_d = incomingCallData.parameters) === null || _d === void 0 ? void 0 : _d.CallSid); });
2523
2498
  if (!alreadyExists) {
2524
2499
  this.incomingCallsList.push(incomingCallData);
2525
2500
  }