@snugdesk/avaya-ipo-widget 0.1.1 → 0.2.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.
package/index.d.ts CHANGED
@@ -1,65 +1,17 @@
1
1
  import * as i0 from '@angular/core';
2
- import { NgZone, OnInit, AfterViewInit, OnDestroy, EventEmitter, ChangeDetectorRef } from '@angular/core';
3
- import * as i6 from '@angular/forms';
2
+ import { NgZone, OnInit, OnDestroy, EventEmitter, ChangeDetectorRef, AfterViewInit, ElementRef } from '@angular/core';
3
+ import * as i14 from '@angular/forms';
4
4
  import { FormGroup, FormBuilder } from '@angular/forms';
5
- import { HttpClient } from '@angular/common/http';
6
5
  import * as rxjs from 'rxjs';
7
- import { BehaviorSubject, Subject, Subscription } from 'rxjs';
8
- import { SnugdeskAuthenticationService, TenantService, UserService } from '@snugdesk/core';
9
- import * as i9 from 'ngx-intl-tel-input';
6
+ import { BehaviorSubject, Subject } from 'rxjs';
7
+ import { HttpClient } from '@angular/common/http';
8
+ import * as i19 from 'ngx-intl-tel-input';
10
9
  import { CountryISO, SearchCountryField } from 'ngx-intl-tel-input';
11
- import * as i5 from '@angular/common';
12
- import * as i7 from '@angular/material/form-field';
13
- import * as i8 from '@angular/material/input';
14
-
15
- interface ActiveCall {
16
- callId: string;
17
- phoneNumber: string;
18
- lookupPhoneNumber: any;
19
- duration: number;
20
- timer?: any;
21
- isMuted: boolean;
22
- isOnHold: boolean;
23
- startTime: number;
24
- slot?: '1' | '2' | '3';
25
- }
26
- interface CallMetadata {
27
- tenantId: string;
28
- agentId: string;
29
- phoneNumber: string;
30
- callId: string;
31
- }
32
-
33
- interface RecordingSession {
34
- audioContext: AudioContext;
35
- recordingStream: MediaStreamAudioDestinationNode;
36
- recorder?: MediaRecorder | null;
37
- metadata: CallMetadata;
38
- stopping: boolean;
39
- chunkIndex: number;
40
- chunkTimer?: number;
41
- }
42
- declare class RecordingManagerService {
43
- private http;
44
- private sessions;
45
- private readonly MIME_TYPE_PREFERRED;
46
- private readonly MIME_TYPE_FALLBACK;
47
- private readonly CHUNK_DURATION_MS;
48
- private readonly AUDIO_CONTEXT_CLOSE_DELAY_MS;
49
- private readonly CALL_HISTORY_API_URL;
50
- constructor(http: HttpClient);
51
- startRecording(localMediaStream: MediaStream, remoteMediaStream: MediaStream, metadata: CallMetadata): RecordingSession | undefined;
52
- getSession(callId: string): RecordingSession | undefined;
53
- stopRecording(callId: string): void;
54
- /** Start a new MediaRecorder for the next chunk so the blob has its own headers */
55
- private startNextChunk;
56
- private uploadCallRecording;
57
- private convertBlobToBase64;
58
- private generateFilename;
59
- private generateChunkFilename;
60
- static ɵfac: i0.ɵɵFactoryDeclaration<RecordingManagerService, never>;
61
- static ɵprov: i0.ɵɵInjectableDeclaration<RecordingManagerService>;
62
- }
10
+ import * as i13 from '@angular/common';
11
+ import * as i15 from '@angular/material/form-field';
12
+ import * as i16 from '@angular/material/input';
13
+ import * as i17 from '@angular/material/icon';
14
+ import * as i18 from '@angular/material/button';
63
15
 
64
16
  interface RemoteMedia {
65
17
  callId: string;
@@ -76,28 +28,68 @@ declare class AvayaIPOService {
76
28
  callId: string;
77
29
  farEndNumber: string;
78
30
  }>;
31
+ callTerminateSubject: Subject<{
32
+ callId: string;
33
+ reason: any;
34
+ }>;
35
+ outgoingDialSubject: BehaviorSubject<{
36
+ dialed: string;
37
+ }>;
38
+ private ringAudio;
39
+ private lastIncomingCall;
79
40
  callStateSubject: Subject<{
80
41
  callId: string;
81
42
  state: string;
82
43
  }>;
44
+ transferStatusSubject: Subject<{
45
+ callId?: string;
46
+ success: boolean;
47
+ message: string;
48
+ }>;
49
+ private transferInProgressCallId;
83
50
  private callSlots;
84
51
  activeCallsMap: Map<string, any>;
85
52
  activeCallId: string | null;
86
53
  currentcallId: string | null;
54
+ getLastIncomingCall(): {
55
+ callId: string;
56
+ farEndNumber: string;
57
+ } | null;
58
+ clearLastIncomingCall(): void;
59
+ notifyOutgoingDial(dialed: string): void;
60
+ clearOutgoingDial(): void;
61
+ getActiveCallCount(): number;
62
+ setLastIncomingCall(callId: string, farEndNumber: string): void;
63
+ private startRingTone;
64
+ private stopRingTone;
87
65
  private agentId;
88
66
  private loginStatusSubject;
89
67
  loginStatus$: rxjs.Observable<boolean>;
90
68
  private readonly DOM_TAGS;
91
- private readonly CONFIG_TEMPLATE;
69
+ private configTemplate;
92
70
  private readonly agentStatusApiUrl;
93
71
  private readonly CALL_HISTORY_API_URL;
94
72
  private prewarmedStream?;
95
73
  private isSafari;
96
74
  private _rpcPatched;
75
+ private _rpcMessageListenerWs?;
76
+ private isLoggedIn;
77
+ private initAttempts;
97
78
  constructor(zone: NgZone, http: HttpClient);
79
+ setConfigValues(opts: {
80
+ serviceType?: string;
81
+ gatewayIp?: string;
82
+ gatewayPort?: string;
83
+ stunIp?: string;
84
+ stunPort?: string;
85
+ turnIp?: string;
86
+ turnPort?: string;
87
+ }): void;
98
88
  init(): void;
99
- logIn(username: string, password: string): void;
89
+ logIn(username: string, password: string, attempt?: number): void;
90
+ private logCliCapabilities;
100
91
  logOut(): void;
92
+ logout(): void;
101
93
  getAlternateServerConfig(): any;
102
94
  getDeviceList(): void;
103
95
  setDeviceIds(deviceIds: any): void;
@@ -129,13 +121,13 @@ declare class AvayaIPOService {
129
121
  swapLines(): void;
130
122
  swapToSlot(targetSlot: '1' | '2' | '3'): void;
131
123
  dropCallBySlot(targetSlot: '1' | '2' | '3'): void;
132
- mergeCall(): void;
133
124
  logCall(callData: any): rxjs.Observable<Object>;
134
125
  getActiveCallId(): string | null;
135
126
  initLocalMic(): Promise<void>;
136
127
  private patchRpcForTransfers;
137
128
  makeCallWithCustomData(destination: string, dataToSend: string): Promise<'1' | '2' | '3' | null>;
138
129
  transferCallWithTag(target: string, type: 'Attended' | 'Blind'): void;
130
+ consumeTransferInProgress(callId: string): boolean;
139
131
  private _doPatch;
140
132
  /** Pre-warm microphone so AWL always has a local stream when it tries addStream() */
141
133
  prewarmMic(): Promise<MediaStream>;
@@ -143,18 +135,6 @@ declare class AvayaIPOService {
143
135
  static ɵprov: i0.ɵɵInjectableDeclaration<AvayaIPOService>;
144
136
  }
145
137
 
146
- declare class CallSocketService {
147
- private sockets;
148
- private subjects;
149
- open(metadata: CallMetadata): void;
150
- messages$(callId: string): BehaviorSubject<any> | undefined;
151
- send(callId: string, payload: object): void;
152
- close(callId: string): void;
153
- closeAll(): void;
154
- static ɵfac: i0.ɵɵFactoryDeclaration<CallSocketService, never>;
155
- static ɵprov: i0.ɵɵInjectableDeclaration<CallSocketService>;
156
- }
157
-
158
138
  declare class CountryService {
159
139
  private httpClient;
160
140
  private countriesData;
@@ -171,272 +151,580 @@ declare class PhoneNumberLookupService {
171
151
  private httpClient;
172
152
  constructor(httpClient: HttpClient);
173
153
  lookupPhoneNumber(phoneNumber: string, hlr?: boolean): Promise<Object>;
154
+ private normalizeForLookup;
174
155
  static ɵfac: i0.ɵɵFactoryDeclaration<PhoneNumberLookupService, never>;
175
156
  static ɵprov: i0.ɵɵInjectableDeclaration<PhoneNumberLookupService>;
176
157
  }
177
158
 
178
- declare class AvayaIPOWidgetComponent implements OnInit, AfterViewInit, OnDestroy {
159
+ declare class AuthenticationService {
160
+ private readonly jwtHelper;
161
+ tenant$: BehaviorSubject<any>;
162
+ user$: BehaviorSubject<any>;
163
+ isAuthenticated$: BehaviorSubject<boolean>;
164
+ isAuthenticated(): boolean;
165
+ getAuthSessionToken(): string | null;
166
+ getAuthDomainToken(): string | null;
167
+ getDecodedAuthDomainToken(): any;
168
+ getTenantId(): string;
169
+ getDecodedAuthSessionToken(): any;
170
+ getUserId(): string;
171
+ static ɵfac: i0.ɵɵFactoryDeclaration<AuthenticationService, never>;
172
+ static ɵprov: i0.ɵɵInjectableDeclaration<AuthenticationService>;
173
+ }
174
+
175
+ declare class EntitiesSearchService {
179
176
  private http;
180
- private cdr;
181
- private zone;
177
+ private authenticationService;
178
+ private nameCache;
179
+ constructor(http: HttpClient, authenticationService: AuthenticationService);
180
+ fetchContacts(tenantId: string, size?: number, searchAfter?: [string, string]): Promise<any>;
181
+ searchByPhone(tenantId: string, phoneNumber: string, size?: number): Promise<any>;
182
+ searchEntities(tenantId: string, query: string, size?: number, from?: number): Promise<any>;
183
+ getCachedName(tenantId: string, phoneNumber: string): string | null;
184
+ lookupNameByPhone(tenantId: string, phoneNumber: string, size?: number): Promise<string | null>;
185
+ private postEntities;
186
+ private cacheKey;
187
+ private ensureWildcard;
188
+ static ɵfac: i0.ɵɵFactoryDeclaration<EntitiesSearchService, never>;
189
+ static ɵprov: i0.ɵɵInjectableDeclaration<EntitiesSearchService>;
190
+ }
191
+
192
+ declare class AvayaIPOWidgetComponent implements OnInit, OnDestroy {
182
193
  private formBuilder;
194
+ private avayaIPOService;
195
+ private cdr;
183
196
  private countryService;
184
197
  private phoneNumberLookupService;
185
- private avayaIPOService;
186
- private recordingManagerService;
187
- private callSocket;
188
- private authenticationService;
189
- private tenantService;
190
- private userService;
198
+ private entitiesSearchService;
199
+ hostDarkMode: boolean;
200
+ private readonly STORAGE_KEY;
201
+ isVisible: boolean;
202
+ configurationMode?: string;
203
+ avayaIPOServerIP?: string;
204
+ avayaIPOServerPort?: number;
205
+ avayaIPOServerStunServerIP?: string;
206
+ avayaIPOServerStunServerPort?: number;
207
+ avayaIPOServerTurnServerIP?: string;
208
+ avayaIPOServerTurnServerPort?: number;
191
209
  tenantId: string;
192
210
  userId: string;
193
- isVisible: boolean;
194
- containerHeightObservable: BehaviorSubject<number>;
195
- containerWidthObservable: BehaviorSubject<number>;
196
211
  notificationEvent: EventEmitter<number>;
197
- isRecording: boolean;
198
- loginForm: FormGroup;
199
- transferForm: FormGroup;
200
- dtmfForm: FormGroup;
201
- isRinging: boolean;
202
- showActiveCall: boolean;
203
- private loginSubscription;
204
- private incomingCallSubscription;
205
- callDuration: number;
206
- private timer;
207
- isCalling: boolean;
208
- lookupPhoneNumber: any | null;
209
- private ringtone;
212
+ readonly avayaLogoUrl: string;
210
213
  isReconnectingInProgress: boolean;
211
214
  isFailoverInProgress: boolean;
212
215
  isFailbackInProgress: boolean;
213
216
  showLoginForm: boolean;
214
- showLoginPassword: boolean;
215
217
  showLoginLoader: boolean;
216
218
  hasAvayaSocketError: boolean;
217
219
  hasAvayaLoginError: boolean;
220
+ hasAvayaLoginFailedGeneral: boolean;
218
221
  hasAvayaLoginConflictError: boolean;
219
222
  hasAvayaDeviceError: boolean;
220
- callStateSubscription: Subscription;
221
- isMuted: boolean;
222
- isOnHold: boolean;
223
- isactiveCall: boolean;
224
- phoneNumber: string;
225
- isDailpadOpen: boolean;
226
- isCallTransferOpen: boolean;
227
- activeTab: string;
228
- contacts: any[];
229
- searchText: string;
230
- extensionNumber: string;
231
- isDirectoryOpen: boolean;
232
- istransfer: boolean;
233
- rating: number;
234
- isConfereceList: boolean;
235
- conferenceParticipants: any[] | undefined;
236
- currentView: string;
237
- redialTimeout: any;
238
- showCallDisconnected: boolean;
239
- lastDisconnectedCall: any;
240
- activeCalls: ActiveCall[];
241
- currentActiveCallIndex: number;
242
- isAddingNewCall: boolean;
243
- isredialling: boolean;
244
- wasInbound: boolean;
245
- showHistoryPopup: boolean;
246
- noOfCalls: number;
247
- isCallingFromContact: boolean;
248
- bottomActiveTab: string;
249
- disconnecttriggered: boolean;
250
- private lastRemoteStream;
251
- private lastLocalStream;
252
- showInitLoader: boolean;
253
- tenant: any;
254
- user: any;
255
- internalContacts: {
256
- id: number;
257
- name: string;
258
- phone: string;
259
- role: string;
260
- ext: string;
261
- }[];
262
- directoryContacts: {
263
- id: number;
264
- name: string;
265
- phone: string;
266
- rating: number;
267
- }[];
268
- private recognition;
269
- transcriptText: string;
270
- showTranscriptionPopup: boolean;
271
- private recognitionKeepAlive;
272
- transcriptHistory: string[];
273
- private recognitionActive;
274
- private transcriptSegments;
275
- private transcriptStartedAt;
276
- private transcriptEndedAt;
277
- autoDownloadSummaryOnEnd: boolean;
278
- summaryText: string;
279
- displayCallingNumber: string;
280
- redialnumber: string;
281
- isTransferring: boolean;
282
- constructor(http: HttpClient, cdr: ChangeDetectorRef, zone: NgZone, formBuilder: FormBuilder, countryService: CountryService, phoneNumberLookupService: PhoneNumberLookupService, avayaIPOService: AvayaIPOService, recordingManagerService: RecordingManagerService, callSocket: CallSocketService, authenticationService: SnugdeskAuthenticationService, tenantService: TenantService, userService: UserService);
283
- ngOnInit(): Promise<void>;
284
- loadScript(src: string): Promise<void>;
285
- ngAfterViewInit(): void;
286
- ngOnDestroy(): void;
287
- getLookupPhoneNumber(phoneNumber: string): Promise<any>;
223
+ private awlScriptPromise?;
224
+ loginForm: FormGroup;
225
+ activeTab: 'history' | 'contacts' | 'keypad' | 'settings';
226
+ private loginSub?;
227
+ private incomingCallSub?;
228
+ private callStateSub?;
229
+ hideTabs: boolean;
230
+ darkModeEnabled: boolean;
231
+ activeCallNumber: string | null;
232
+ incomingCallName: string | null;
233
+ incomingNameResolved: boolean;
234
+ activeCallName: string | null;
235
+ private callLogIndex;
236
+ private pendingDisconnectSide;
237
+ private callStartTimes;
238
+ constructor(formBuilder: FormBuilder, avayaIPOService: AvayaIPOService, cdr: ChangeDetectorRef, countryService: CountryService, phoneNumberLookupService: PhoneNumberLookupService, entitiesSearchService: EntitiesSearchService);
239
+ ngOnInit(): void;
288
240
  onLogin(): void;
289
241
  onLogout(): void;
290
- makeCall(phoneNumber: string): Promise<void>;
291
- makeCallFromContact(phoneNumber: string): Promise<void>;
292
- cancelCall(): void;
293
- dropCurrentCall(): Promise<void>;
294
- onMute(): void;
295
- onUnmute(): void;
296
- toggleHold(): void;
297
- toggleMute(): void;
298
- onPauseVideo(): void;
299
- onResumeVideo(): void;
300
- onDigitClick(digit: string): void;
301
- onBackspace(): void;
302
- onTransferCall(): void;
303
- onSendDTMF(digit: string | number): void;
304
- onAnswerCall(): void;
305
- onAddVideo(): void;
306
- onRemoveVideo(): void;
307
- allowOnlyNumbers(event: Event): void;
308
- startTimer(index: number): void;
309
- clearTimer(index: number): void;
310
- formatTime(totalSeconds: number): string;
311
- menuDailpad(): void;
312
- selectTab(tab: string): Promise<void>;
313
- fetchContacts(): Promise<void>;
314
- private searchEntities;
315
- private handleCallConnect;
316
- private handleCallDisconnect;
317
- goToDiv(div: string): void;
318
- restrictNumeric(e: KeyboardEvent): boolean;
319
- onRedial(): void;
320
- swapLinesToIndex(index: number): void;
321
- mergeCall(): void;
322
- onAddCall(): void;
323
- getDisplayStatus(call: any): string;
324
- bottomSelectTab(tab: string): void;
325
- /** Central place to notify AvayaIPOService about current picks */
326
- handleDeviceSelection(event: any): void;
327
- private createMixedStream;
328
- private initTranscription;
329
- private stopTranscription;
330
- private generateAndDownloadSummary;
331
- private buildExtractiveSummary;
332
- private splitSentences;
333
- private extractActionItems;
334
- private extractKeyInfo;
335
- private downloadBlobFile;
336
- private fmtHMS;
337
- transferToFromHistory(item: {
338
- phoneNumber?: any;
339
- lookupPhoneNumber?: any;
340
- resolvedDialable?: any;
242
+ private handleLoginStatus;
243
+ selectTab(tab: 'history' | 'contacts' | 'keypad' | 'settings'): void;
244
+ onHistoryMakeCall(payload: {
245
+ dialOut: string;
246
+ name?: string;
341
247
  }): void;
248
+ onPhoneMakeCall(phoneNumber: string): void;
249
+ onContactsMakeCall(payload: {
250
+ dialOut: string;
251
+ name?: string;
252
+ }): void;
253
+ onPhoneEndCall(): void;
254
+ onDeviceChange(change: {
255
+ audioInputId: string;
256
+ audioOutputId: string;
257
+ videoInputId?: string;
258
+ }): void;
259
+ onThemeToggle(enabled: boolean): void;
260
+ onCallScreenChange(active: boolean): void;
261
+ private triggerCall;
262
+ ngOnDestroy(): void;
263
+ private getLookupPhoneNumber;
264
+ private getOpenSearchCallerName;
265
+ private normalizePhoneForSearch;
266
+ private persistSession;
267
+ private restoreSession;
268
+ private restoreThemePreference;
269
+ private clearSession;
270
+ private loadAwlScript;
342
271
  static ɵfac: i0.ɵɵFactoryDeclaration<AvayaIPOWidgetComponent, never>;
343
- static ɵcmp: i0.ɵɵComponentDeclaration<AvayaIPOWidgetComponent, "snugdesk-avaya-ipo-widget", never, { "tenantId": { "alias": "tenantId"; "required": false; }; "userId": { "alias": "userId"; "required": false; }; "isVisible": { "alias": "isVisible"; "required": false; }; "containerHeightObservable": { "alias": "containerHeightObservable"; "required": false; }; "containerWidthObservable": { "alias": "containerWidthObservable"; "required": false; }; }, { "notificationEvent": "notificationEvent"; }, never, never, false, never>;
272
+ static ɵcmp: i0.ɵɵComponentDeclaration<AvayaIPOWidgetComponent, "snugdesk-avaya-ipo-widget", never, { "isVisible": { "alias": "isVisible"; "required": false; }; "configurationMode": { "alias": "configurationMode"; "required": false; }; "avayaIPOServerIP": { "alias": "avayaIPOServerIP"; "required": false; }; "avayaIPOServerPort": { "alias": "avayaIPOServerPort"; "required": false; }; "avayaIPOServerStunServerIP": { "alias": "avayaIPOServerStunServerIP"; "required": false; }; "avayaIPOServerStunServerPort": { "alias": "avayaIPOServerStunServerPort"; "required": false; }; "avayaIPOServerTurnServerIP": { "alias": "avayaIPOServerTurnServerIP"; "required": false; }; "avayaIPOServerTurnServerPort": { "alias": "avayaIPOServerTurnServerPort"; "required": false; }; "tenantId": { "alias": "tenantId"; "required": false; }; "userId": { "alias": "userId"; "required": false; }; }, { "notificationEvent": "notificationEvent"; }, never, never, false, never>;
344
273
  }
345
274
 
346
275
  declare class CallHistoryComponent implements OnInit {
347
276
  private http;
348
- private authenticationService;
349
277
  private cdr;
350
278
  mode: 'dial' | 'transfer';
351
- makeCallEv: EventEmitter<string>;
279
+ tenantId?: string;
280
+ agentId?: string;
281
+ makeCallEv: EventEmitter<{
282
+ dialOut: string;
283
+ name?: string;
284
+ }>;
352
285
  transferEv: EventEmitter<any>;
353
286
  private readonly CALL_HISTORY_API_URL;
354
287
  showHistoryLoader: boolean;
355
288
  callHistory: any[];
289
+ searchTerm: string;
356
290
  recentCallactiveTab: string;
357
- constructor(http: HttpClient, authenticationService: SnugdeskAuthenticationService, cdr: ChangeDetectorRef);
291
+ selectedCall: any;
292
+ constructor(http: HttpClient, cdr: ChangeDetectorRef);
358
293
  ngOnInit(): Promise<void>;
359
294
  recentSelectTab(tab: string): void;
360
295
  loadCallHistory(): Promise<void>;
361
296
  getCallHistory(tenantId: string, agentId: string): Promise<any>;
362
- makeCall(phoneNumber: string): void;
297
+ makeCall(phoneNumber: string, name?: string): void;
298
+ get callerDropped(): any[];
299
+ get filteredRecent(): any[];
300
+ get groupedRecent(): Array<{
301
+ label: string;
302
+ items: any[];
303
+ }>;
304
+ get groupedMissed(): Array<{
305
+ label: string;
306
+ items: any[];
307
+ }>;
308
+ onSelectCall(item: any): void;
309
+ closeDetails(): void;
363
310
  selectFromHistory(item: any): void;
364
311
  private resolveDialable;
312
+ private resolveName;
313
+ private formatDialOutFromInput;
314
+ private getTenantIdFromSession;
315
+ private getUserIdFromSession;
316
+ getPhoneDisplay(item: any): string;
317
+ getPhoneBadge(item: any): string;
318
+ private getInitials;
319
+ private groupByDate;
320
+ private formatDateLabel;
365
321
  static ɵfac: i0.ɵɵFactoryDeclaration<CallHistoryComponent, never>;
366
- static ɵcmp: i0.ɵɵComponentDeclaration<CallHistoryComponent, "app-call-history", never, { "mode": { "alias": "mode"; "required": false; }; }, { "makeCallEv": "makeCallEv"; "transferEv": "transferEv"; }, never, never, false, never>;
322
+ static ɵcmp: i0.ɵɵComponentDeclaration<CallHistoryComponent, "app-call-history", never, { "mode": { "alias": "mode"; "required": false; }; "tenantId": { "alias": "tenantId"; "required": false; }; "agentId": { "alias": "agentId"; "required": false; }; }, { "makeCallEv": "makeCallEv"; "transferEv": "transferEv"; }, never, never, false, never>;
367
323
  }
368
324
 
369
- declare class AuthenticationService {
370
- private readonly jwtHelper;
371
- tenant$: BehaviorSubject<any>;
372
- user$: BehaviorSubject<any>;
373
- isAuthenticated$: BehaviorSubject<boolean>;
374
- isAuthenticated(): boolean;
375
- getAuthSessionToken(): string | null;
376
- getAuthDomainToken(): string | null;
377
- getDecodedAuthDomainToken(): any;
378
- getTenantId(): string;
379
- getDecodedAuthSessionToken(): any;
380
- getUserId(): string;
381
- static ɵfac: i0.ɵɵFactoryDeclaration<AuthenticationService, never>;
382
- static ɵprov: i0.ɵɵInjectableDeclaration<AuthenticationService>;
325
+ declare class CallDetailsComponent {
326
+ call: any;
327
+ getBadge(): string;
328
+ getDisplayName(): string;
329
+ getPhone(): string;
330
+ static ɵfac: i0.ɵɵFactoryDeclaration<CallDetailsComponent, never>;
331
+ static ɵcmp: i0.ɵɵComponentDeclaration<CallDetailsComponent, "app-call-details", never, { "call": { "alias": "call"; "required": false; }; }, {}, never, never, false, never>;
383
332
  }
384
333
 
385
- declare class DialpadComponent implements OnInit, OnDestroy {
334
+ type ContactItem = {
335
+ id: string;
336
+ name: string;
337
+ phone: string;
338
+ entity: any;
339
+ };
340
+ declare class ContactsComponent implements OnInit, AfterViewInit {
341
+ private entitiesSearchService;
342
+ tenantId?: string;
343
+ listEl?: ElementRef<HTMLElement>;
344
+ makeCallEv: EventEmitter<{
345
+ dialOut: string;
346
+ name?: string;
347
+ }>;
348
+ contacts: ContactItem[];
349
+ groupedContacts: Array<{
350
+ label: string;
351
+ items: ContactItem[];
352
+ }>;
353
+ selectedContact: ContactItem | null;
354
+ searchTerm: string;
355
+ isLoading: boolean;
356
+ error: string;
357
+ private searchToken;
358
+ private pageSize;
359
+ private nextFrom;
360
+ private searchAfter?;
361
+ private hasMore;
362
+ isLoadingMore: boolean;
363
+ constructor(entitiesSearchService: EntitiesSearchService);
364
+ ngOnInit(): void;
365
+ ngAfterViewInit(): void;
366
+ private resetAndLoad;
367
+ loadNextPage(): Promise<void>;
368
+ onSearchChange(value: string): void;
369
+ private groupContacts;
370
+ private applySearch;
371
+ openContact(contact: ContactItem): void;
372
+ closeContact(): void;
373
+ onCallContact(contact: ContactItem, ev?: Event): void;
374
+ private searchContacts;
375
+ onListScroll(event: Event): void;
376
+ private ensureFill;
377
+ private getGroupLabel;
378
+ private getPageSize;
379
+ static ɵfac: i0.ɵɵFactoryDeclaration<ContactsComponent, never>;
380
+ static ɵcmp: i0.ɵɵComponentDeclaration<ContactsComponent, "app-contacts", never, { "tenantId": { "alias": "tenantId"; "required": false; }; }, { "makeCallEv": "makeCallEv"; }, never, never, false, never>;
381
+ }
382
+
383
+ declare class ContactCardComponent {
384
+ name: string;
385
+ phone: string;
386
+ call: EventEmitter<Event>;
387
+ get initials(): string;
388
+ onCall(ev: Event): void;
389
+ static ɵfac: i0.ɵɵFactoryDeclaration<ContactCardComponent, never>;
390
+ static ɵcmp: i0.ɵɵComponentDeclaration<ContactCardComponent, "app-contact-card", never, { "name": { "alias": "name"; "required": false; }; "phone": { "alias": "phone"; "required": false; }; }, { "call": "call"; }, never, never, false, never>;
391
+ }
392
+
393
+ declare class ContactDetailsComponent {
394
+ contact: any;
395
+ getDisplayName(): string;
396
+ getPrimaryPhone(): string;
397
+ getEmails(): string[];
398
+ getPhoneNumbers(): string[];
399
+ getInitials(): string;
400
+ static ɵfac: i0.ɵɵFactoryDeclaration<ContactDetailsComponent, never>;
401
+ static ɵcmp: i0.ɵɵComponentDeclaration<ContactDetailsComponent, "app-contact-details", never, { "contact": { "alias": "contact"; "required": false; }; }, {}, never, never, false, never>;
402
+ }
403
+
404
+ declare class SettingsComponent implements OnInit, OnDestroy {
405
+ selectedAudioInputId?: string;
406
+ selectedAudioOutputId?: string;
407
+ extensionId?: string;
408
+ darkMode: boolean;
409
+ change: EventEmitter<{
410
+ audioInputId: string;
411
+ audioOutputId: string;
412
+ videoInputId?: string;
413
+ }>;
414
+ darkModeChange: EventEmitter<boolean>;
415
+ logout: EventEmitter<void>;
416
+ audioInputs: MediaDeviceInfo[];
417
+ audioOutputs: MediaDeviceInfo[];
418
+ ngOnInit(): void;
419
+ onLogout(): void;
420
+ onToggleDarkMode(): void;
421
+ ngOnDestroy(): void;
422
+ private handleDeviceChange;
423
+ private refreshDeviceList;
424
+ onMicChange(deviceId: string | undefined): void;
425
+ onSpeakerChange(deviceId: string | undefined): void;
426
+ private emitDeviceChange;
427
+ trackByDeviceId(index: number, device: MediaDeviceInfo): string;
428
+ static ɵfac: i0.ɵɵFactoryDeclaration<SettingsComponent, never>;
429
+ static ɵcmp: i0.ɵɵComponentDeclaration<SettingsComponent, "app-settings", never, { "selectedAudioInputId": { "alias": "selectedAudioInputId"; "required": false; }; "selectedAudioOutputId": { "alias": "selectedAudioOutputId"; "required": false; }; "extensionId": { "alias": "extensionId"; "required": false; }; "darkMode": { "alias": "darkMode"; "required": false; }; }, { "change": "change"; "darkModeChange": "darkModeChange"; "logout": "logout"; }, never, never, false, never>;
430
+ }
431
+
432
+ declare class AvayaIpoLoginComponent {
433
+ loginForm: FormGroup;
434
+ showLoginLoader: boolean;
435
+ hasAvayaSocketError: boolean;
436
+ hasAvayaLoginError: boolean;
437
+ hasAvayaLoginFailedGeneral: boolean;
438
+ hasAvayaLoginConflictError: boolean;
439
+ hasAvayaDeviceError: boolean;
440
+ login: EventEmitter<void>;
441
+ showLoginPassword: boolean;
442
+ onLoginClick(): void;
443
+ restrictNumeric(evt: KeyboardEvent): boolean;
444
+ static ɵfac: i0.ɵɵFactoryDeclaration<AvayaIpoLoginComponent, never>;
445
+ static ɵcmp: i0.ɵɵComponentDeclaration<AvayaIpoLoginComponent, "app-avaya-ipo-login", never, { "loginForm": { "alias": "loginForm"; "required": false; }; "showLoginLoader": { "alias": "showLoginLoader"; "required": false; }; "hasAvayaSocketError": { "alias": "hasAvayaSocketError"; "required": false; }; "hasAvayaLoginError": { "alias": "hasAvayaLoginError"; "required": false; }; "hasAvayaLoginFailedGeneral": { "alias": "hasAvayaLoginFailedGeneral"; "required": false; }; "hasAvayaLoginConflictError": { "alias": "hasAvayaLoginConflictError"; "required": false; }; "hasAvayaDeviceError": { "alias": "hasAvayaDeviceError"; "required": false; }; }, { "login": "login"; }, never, never, false, never>;
446
+ }
447
+
448
+ interface CallMetadata {
449
+ tenantId: string;
450
+ agentId: string;
451
+ phoneNumber: string;
452
+ callId: string;
453
+ }
454
+
455
+ interface RecordingSession {
456
+ audioContext: AudioContext;
457
+ recordingStream: MediaStreamAudioDestinationNode;
458
+ recorder?: MediaRecorder | null;
459
+ metadata: CallMetadata;
460
+ stopping: boolean;
461
+ chunkIndex: number;
462
+ chunkTimer?: number;
463
+ }
464
+ declare class RecordingManagerService {
465
+ private http;
466
+ private sessions;
467
+ private readonly MIME_TYPE_PREFERRED;
468
+ private readonly MIME_TYPE_FALLBACK;
469
+ private readonly CHUNK_DURATION_MS;
470
+ private readonly AUDIO_CONTEXT_CLOSE_DELAY_MS;
471
+ private readonly CALL_HISTORY_API_URL;
472
+ constructor(http: HttpClient);
473
+ startRecording(localMediaStream: MediaStream, remoteMediaStream: MediaStream, metadata: CallMetadata): RecordingSession | undefined;
474
+ getSession(callId: string): RecordingSession | undefined;
475
+ stopRecording(callId: string): void;
476
+ private startNextChunk;
477
+ private uploadCallRecording;
478
+ private convertBlobToBase64;
479
+ private generateFilename;
480
+ private generateChunkFilename;
481
+ private normalizePhoneNumberForUpload;
482
+ static ɵfac: i0.ɵɵFactoryDeclaration<RecordingManagerService, never>;
483
+ static ɵprov: i0.ɵɵInjectableDeclaration<RecordingManagerService>;
484
+ }
485
+
486
+ type TranscriptMessage = {
487
+ callId: string;
488
+ text: string;
489
+ isFinal: boolean;
490
+ ts: number;
491
+ };
492
+ declare class TranscriptionStreamService implements OnDestroy {
493
+ private http;
494
+ private session;
495
+ private transcriptSubject;
496
+ readonly transcript$: rxjs.Observable<TranscriptMessage>;
497
+ private readonly SAMPLE_RATE;
498
+ private readonly BUFFER_SIZE;
499
+ private readonly SILENCE_RMS_THRESHOLD;
500
+ private readonly KEEP_ALIVE_INTERVAL_MS;
501
+ private readonly SILENCE_FRAME_SAMPLES;
502
+ private readonly SIGNED_URL_ENDPOINT;
503
+ constructor(http: HttpClient);
504
+ ngOnDestroy(): void;
505
+ startSession(callId: string, localStream: MediaStream, remoteStream: MediaStream, languageCode?: string): Promise<void>;
506
+ stopSession(callId: string): void;
507
+ private fetchSignedUrl;
508
+ private mixToMono;
509
+ private calculateRms;
510
+ private encodePcm16;
511
+ private downsampleBuffer;
512
+ private sendSilenceFrame;
513
+ private validateSignedUrl;
514
+ private handleTranscriptPayload;
515
+ static ɵfac: i0.ɵɵFactoryDeclaration<TranscriptionStreamService, never>;
516
+ static ɵprov: i0.ɵɵInjectableDeclaration<TranscriptionStreamService>;
517
+ }
518
+
519
+ declare class PhoneComponent implements OnInit, AfterViewInit, OnDestroy {
386
520
  private cdr;
387
521
  private formBuilder;
388
522
  private avayaIpoService;
389
523
  private authenticationService;
524
+ private recordingManagerService;
525
+ private transcriptionStreamService;
390
526
  contacts: any[];
527
+ tenantId?: string;
528
+ agentId?: string;
529
+ callScreenChange: EventEmitter<boolean>;
530
+ private _isActiveCall;
531
+ set isActiveCall(value: boolean);
532
+ get isActiveCall(): boolean;
533
+ activeCallNumber: string | null;
534
+ incomingCallName?: string | null;
535
+ incomingNameResolved: boolean;
536
+ activeCallName?: string | null;
537
+ serverIp?: string;
538
+ serverPort?: number;
539
+ stunIp?: string;
540
+ stunPort?: number;
541
+ turnIp?: string;
542
+ turnPort?: number;
543
+ configurationMode?: string;
391
544
  makeCallEv: EventEmitter<string>;
545
+ endCallEv: EventEmitter<void>;
392
546
  audioElement: any;
547
+ private callStateSub?;
548
+ private endToneTimeout?;
549
+ private suppressHangupToneOnce;
550
+ private transferStatusSub?;
551
+ private remoteStreamSub?;
552
+ private callTerminateSub?;
553
+ private outgoingDialSub?;
554
+ private transcriptionSub?;
555
+ private lastRemoteStream;
556
+ private lastLocalStream;
557
+ private currentCallId;
558
+ private pendingOutgoing;
559
+ private transcriptionActiveCallId;
560
+ private pendingTranscriptionCallId;
393
561
  dialForm: FormGroup;
562
+ directoryForm: FormGroup;
394
563
  showDirectoryPhonebook: boolean;
564
+ isTransferMode: boolean;
565
+ isAddCallMode: boolean;
566
+ directoryTab: 'contacts' | 'dialpad';
567
+ directoryNumber: string;
568
+ contactSearch: string;
569
+ directoryDigits: {
570
+ digit: string;
571
+ letters: string;
572
+ }[];
395
573
  incomingCallSubscription: any;
396
574
  incomingCallNumber: string | undefined;
575
+ isMuted: boolean;
576
+ isHeld: boolean;
577
+ activeCallDuration: number;
578
+ callStatusText: string;
579
+ transferError: string;
580
+ transferSuccess: string;
581
+ transferPending: boolean;
582
+ private transferErrorTimeout?;
583
+ private activeCallTimer?;
584
+ private muteToggleInProgress;
585
+ private holdToggleInProgress;
586
+ isKeypadOpen: boolean;
587
+ isTranscriptionOpen: boolean;
588
+ transcriptText: string;
589
+ private transcriptHistory;
590
+ private transcriptSegments;
591
+ private transcriptStartedAt;
592
+ private transcriptEndedAt;
593
+ autoDownloadSummaryOnEnd: boolean;
594
+ summaryText: string;
595
+ dtmfBuffer: string;
596
+ private phoneUtil;
397
597
  CountryISO: typeof CountryISO;
398
598
  SearchCountryField: typeof SearchCountryField;
399
- isRinging: boolean | undefined;
599
+ isRinging: boolean;
400
600
  audio: any;
401
- constructor(cdr: ChangeDetectorRef, formBuilder: FormBuilder, avayaIpoService: AvayaIPOService, authenticationService: AuthenticationService);
601
+ get isConnecting(): boolean;
602
+ constructor(cdr: ChangeDetectorRef, formBuilder: FormBuilder, avayaIpoService: AvayaIPOService, authenticationService: AuthenticationService, recordingManagerService: RecordingManagerService, transcriptionStreamService: TranscriptionStreamService);
402
603
  ngOnInit(): void;
604
+ ngAfterViewInit(): void;
403
605
  ngOnDestroy(): void;
404
606
  makeCall(): void;
405
607
  onClear(): void;
406
608
  handleKeyboardInput: (event: KeyboardEvent) => void;
407
609
  handleKeypadInput(digit: string): void;
408
610
  private updatePhoneControl;
611
+ private formatE164;
612
+ private formatDialOut;
409
613
  declineAvayaCall(): void;
410
614
  acceptAvayaCAll(): void;
411
- static ɵfac: i0.ɵɵFactoryDeclaration<DialpadComponent, never>;
412
- static ɵcmp: i0.ɵɵComponentDeclaration<DialpadComponent, "app-dialpad", never, { "contacts": { "alias": "contacts"; "required": false; }; }, { "makeCallEv": "makeCallEv"; }, never, never, false, never>;
615
+ onEndActiveCall(): void;
616
+ private playHangupToneAndThenIdle;
617
+ private finishDisconnectWithoutTone;
618
+ private handleIncomingCall;
619
+ onActiveOpenContacts(): void;
620
+ onActiveOpenKeypad(): void;
621
+ closeKeypad(): void;
622
+ private startTranscriptionForCall;
623
+ private applyTranscriptUpdate;
624
+ openTranscription(): void;
625
+ closeTranscription(): void;
626
+ private stopTranscription;
627
+ private generateAndDownloadSummary;
628
+ private buildExtractiveSummary;
629
+ private splitSentences;
630
+ private extractActionItems;
631
+ private extractKeyInfo;
632
+ private downloadBlobFile;
633
+ private fmtHMS;
634
+ onClosePhonebook(): void;
635
+ onContactsLoaded(list: any[]): void;
636
+ get filteredContacts(): any[];
637
+ onSelectContact(contact: any): void;
638
+ toggleMute(): void;
639
+ toggleHold(): void;
640
+ onTransferCall(): void;
641
+ private emitCallScreenState;
642
+ private startCallTimer;
643
+ private stopCallTimer;
644
+ onIdleToggleDirectory(): void;
645
+ onIdleClear(): void;
646
+ onIdleMakeCall(): void;
647
+ onIdleKeypadInput(digit: string): void;
648
+ onIdleKeyboardInput(ev: KeyboardEvent): void;
649
+ setDirectoryTab(tab: 'contacts' | 'dialpad'): void;
650
+ onDirectoryKeypad(digit: string): void;
651
+ onDirectoryBackspace(): void;
652
+ onDirectoryUseNumber(): void;
653
+ onDirectoryClear(): void;
654
+ onDtmfDigit(digit: string): void;
655
+ onDtmfBackspace(): void;
656
+ private updateDirectoryControl;
657
+ private formatDialOutFromInput;
658
+ private formatTransferTargetFromInput;
659
+ private startRecordingForCall;
660
+ static ɵfac: i0.ɵɵFactoryDeclaration<PhoneComponent, never>;
661
+ static ɵcmp: i0.ɵɵComponentDeclaration<PhoneComponent, "app-phone", never, { "contacts": { "alias": "contacts"; "required": false; }; "tenantId": { "alias": "tenantId"; "required": false; }; "agentId": { "alias": "agentId"; "required": false; }; "isActiveCall": { "alias": "isActiveCall"; "required": false; }; "activeCallNumber": { "alias": "activeCallNumber"; "required": false; }; "incomingCallName": { "alias": "incomingCallName"; "required": false; }; "incomingNameResolved": { "alias": "incomingNameResolved"; "required": false; }; "activeCallName": { "alias": "activeCallName"; "required": false; }; "serverIp": { "alias": "serverIp"; "required": false; }; "serverPort": { "alias": "serverPort"; "required": false; }; "stunIp": { "alias": "stunIp"; "required": false; }; "stunPort": { "alias": "stunPort"; "required": false; }; "turnIp": { "alias": "turnIp"; "required": false; }; "turnPort": { "alias": "turnPort"; "required": false; }; "configurationMode": { "alias": "configurationMode"; "required": false; }; }, { "callScreenChange": "callScreenChange"; "makeCallEv": "makeCallEv"; "endCallEv": "endCallEv"; }, never, never, false, never>;
413
662
  }
414
663
 
415
- declare class DeviceSelectorComponent implements OnInit, OnDestroy {
416
- selectedAudioInputId?: string;
417
- selectedAudioOutputId?: string;
418
- change: EventEmitter<{
419
- audioInputId: string;
420
- audioOutputId: string;
421
- videoInputId?: string;
422
- }>;
423
- audioInputs: MediaDeviceInfo[];
424
- audioOutputs: MediaDeviceInfo[];
664
+ declare class PhoneIdleComponent {
665
+ dialForm: FormGroup;
666
+ contacts: any[];
667
+ showDirectoryPhonebook: boolean;
668
+ isRinging: boolean;
669
+ CountryISO: typeof CountryISO;
670
+ SearchCountryField: typeof SearchCountryField;
671
+ toggleDirectory: EventEmitter<void>;
672
+ clear: EventEmitter<void>;
673
+ makeCall: EventEmitter<void>;
674
+ keypadInput: EventEmitter<string>;
675
+ keyboardInput: EventEmitter<KeyboardEvent>;
676
+ getContactBadge(contact: any): string;
677
+ onToggleDirectory(): void;
678
+ onClear(): void;
679
+ onMakeCall(): void;
680
+ onKeypadInput(d: string): void;
681
+ onKeyboardInput(ev: KeyboardEvent): void;
682
+ static ɵfac: i0.ɵɵFactoryDeclaration<PhoneIdleComponent, never>;
683
+ static ɵcmp: i0.ɵɵComponentDeclaration<PhoneIdleComponent, "app-phone-idle", never, { "dialForm": { "alias": "dialForm"; "required": false; }; "contacts": { "alias": "contacts"; "required": false; }; "showDirectoryPhonebook": { "alias": "showDirectoryPhonebook"; "required": false; }; "isRinging": { "alias": "isRinging"; "required": false; }; "CountryISO": { "alias": "CountryISO"; "required": false; }; "SearchCountryField": { "alias": "SearchCountryField"; "required": false; }; }, { "toggleDirectory": "toggleDirectory"; "clear": "clear"; "makeCall": "makeCall"; "keypadInput": "keypadInput"; "keyboardInput": "keyboardInput"; }, never, never, false, never>;
684
+ }
685
+
686
+ declare class PhoneIncomingComponent {
687
+ incomingAvatarUrl: string;
688
+ incomingCallName?: string;
689
+ incomingNameResolved: boolean;
690
+ incomingCallNumber: string | undefined;
691
+ accept: EventEmitter<void>;
692
+ decline: EventEmitter<void>;
693
+ static ɵfac: i0.ɵɵFactoryDeclaration<PhoneIncomingComponent, never>;
694
+ static ɵcmp: i0.ɵɵComponentDeclaration<PhoneIncomingComponent, "app-phone-incoming", never, { "incomingCallName": { "alias": "incomingCallName"; "required": false; }; "incomingNameResolved": { "alias": "incomingNameResolved"; "required": false; }; "incomingCallNumber": { "alias": "incomingCallNumber"; "required": false; }; }, { "accept": "accept"; "decline": "decline"; }, never, never, false, never>;
695
+ }
696
+
697
+ declare class PhoneActiveComponent implements OnInit {
698
+ private entitiesSearchService;
699
+ tenantId?: string;
700
+ activeAvatarUrl: string;
701
+ activeCallName?: string;
702
+ activeCallNumber: string | null;
703
+ activeCallDuration: number;
704
+ callStatusText: string;
705
+ isConnecting: boolean;
706
+ isMuted: boolean;
707
+ isHeld: boolean;
708
+ endCall: EventEmitter<void>;
709
+ toggleMute: EventEmitter<void>;
710
+ toggleHold: EventEmitter<void>;
711
+ transfer: EventEmitter<void>;
712
+ openContacts: EventEmitter<void>;
713
+ openKeypad: EventEmitter<void>;
714
+ startTranscription: EventEmitter<void>;
715
+ contactsLoaded: EventEmitter<any[]>;
716
+ private isLoadingContacts;
717
+ constructor(entitiesSearchService: EntitiesSearchService);
425
718
  ngOnInit(): void;
426
- ngOnDestroy(): void;
427
- private handleDeviceChange;
428
- private refreshDeviceList;
429
- onMicChange(deviceId: string | undefined): void;
430
- onSpeakerChange(deviceId: string | undefined): void;
431
- private emitDeviceChange;
432
- trackByDeviceId(index: number, device: MediaDeviceInfo): string;
433
- static ɵfac: i0.ɵɵFactoryDeclaration<DeviceSelectorComponent, never>;
434
- static ɵcmp: i0.ɵɵComponentDeclaration<DeviceSelectorComponent, "app-device-selector", never, { "selectedAudioInputId": { "alias": "selectedAudioInputId"; "required": false; }; "selectedAudioOutputId": { "alias": "selectedAudioOutputId"; "required": false; }; }, { "change": "change"; }, never, never, false, never>;
719
+ fetchContacts(): Promise<void>;
720
+ formatDuration(totalSeconds: number): string;
721
+ static ɵfac: i0.ɵɵFactoryDeclaration<PhoneActiveComponent, never>;
722
+ static ɵcmp: i0.ɵɵComponentDeclaration<PhoneActiveComponent, "app-phone-active", never, { "tenantId": { "alias": "tenantId"; "required": false; }; "activeCallName": { "alias": "activeCallName"; "required": false; }; "activeCallNumber": { "alias": "activeCallNumber"; "required": false; }; "activeCallDuration": { "alias": "activeCallDuration"; "required": false; }; "callStatusText": { "alias": "callStatusText"; "required": false; }; "isConnecting": { "alias": "isConnecting"; "required": false; }; "isMuted": { "alias": "isMuted"; "required": false; }; "isHeld": { "alias": "isHeld"; "required": false; }; }, { "endCall": "endCall"; "toggleMute": "toggleMute"; "toggleHold": "toggleHold"; "transfer": "transfer"; "openContacts": "openContacts"; "openKeypad": "openKeypad"; "startTranscription": "startTranscription"; "contactsLoaded": "contactsLoaded"; }, never, never, false, never>;
435
723
  }
436
724
 
437
725
  declare class AvayaIPOWidgetModule {
438
726
  static ɵfac: i0.ɵɵFactoryDeclaration<AvayaIPOWidgetModule, never>;
439
- static ɵmod: i0.ɵɵNgModuleDeclaration<AvayaIPOWidgetModule, [typeof AvayaIPOWidgetComponent, typeof CallHistoryComponent, typeof DialpadComponent, typeof DeviceSelectorComponent], [typeof i5.CommonModule, typeof i6.FormsModule, typeof i6.ReactiveFormsModule, typeof i7.MatFormFieldModule, typeof i8.MatInputModule, typeof i7.MatError, typeof i7.MatFormField, typeof i7.MatLabel, typeof i9.NgxIntlTelInputModule], [typeof AvayaIPOWidgetComponent]>;
727
+ static ɵmod: i0.ɵɵNgModuleDeclaration<AvayaIPOWidgetModule, [typeof AvayaIPOWidgetComponent, typeof CallHistoryComponent, typeof CallDetailsComponent, typeof ContactsComponent, typeof ContactCardComponent, typeof ContactDetailsComponent, typeof SettingsComponent, typeof AvayaIpoLoginComponent, typeof PhoneComponent, typeof PhoneIdleComponent, typeof PhoneIncomingComponent, typeof PhoneActiveComponent], [typeof i13.CommonModule, typeof i14.FormsModule, typeof i14.ReactiveFormsModule, typeof i15.MatFormFieldModule, typeof i16.MatInputModule, typeof i17.MatIconModule, typeof i18.MatButtonModule, typeof i19.NgxIntlTelInputModule], [typeof AvayaIPOWidgetComponent]>;
440
728
  static ɵinj: i0.ɵɵInjectorDeclaration<AvayaIPOWidgetModule>;
441
729
  }
442
730