ahs-cti 1.0.0-beta.2 → 1.0.0-beta.21

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.
@@ -0,0 +1,920 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
21
+
22
+ // call-control-sdk/lib/permissions/sdk-constants.ts
23
+ var SDK_WILDCARD = "*";
24
+ var SDK_MENU_CODES = {
25
+ WILDCARD: SDK_WILDCARD,
26
+ CALL_HISTORY: "call_history"
27
+ };
28
+ var SDK_PERMISSIONS = {
29
+ WILDCARD: SDK_WILDCARD,
30
+ // main object key constants
31
+ CALLS: "calls",
32
+ CALL_TRANSFER: "call_transfer",
33
+ CALL_CONFERENCE: "call_conference",
34
+ // in each object has items list of objects
35
+ CALL_INBOUND: "call_inbound",
36
+ CALL_OUTBOUND: "call_outbound",
37
+ CONFERENCE: "call_conference",
38
+ TRANSFER_BLIND: "call_transfer_blind",
39
+ TRANSFER_ATTENDED: "call_transfer_attended",
40
+ TRANSFER_WARM: "call_transfer_warm"
41
+ };
42
+
43
+ // call-control-sdk/lib/hooks/sdk-state.ts
44
+ import { getSession, removeSession, setSession } from "@react-solutions/vault";
45
+
46
+ // call-control-sdk/lib/utils/storage.ts
47
+ var STORAGE_KEY = "call-control-sdk-state";
48
+
49
+ // call-control-sdk/lib/hooks/sdk-state.ts
50
+ var SDKStateManager = class {
51
+ constructor() {
52
+ __publicField(this, "state");
53
+ __publicField(this, "listeners", []);
54
+ __publicField(this, "STORAGE_KEY", STORAGE_KEY);
55
+ __publicField(this, "apiKey");
56
+ __publicField(this, "tenantId");
57
+ this.state = this.getInitialState();
58
+ this.loadFromStorage();
59
+ }
60
+ getInitialState() {
61
+ var _a2, _b;
62
+ return {
63
+ authorization: void 0,
64
+ process: null,
65
+ agentId: "",
66
+ openConferenceDialog: false,
67
+ openCallTransferDialog: false,
68
+ isInitialized: false,
69
+ sdkConfig: {
70
+ disableEndCallButton: false,
71
+ disabledDialButton: false,
72
+ disabledMoreOptionsButton: false,
73
+ enableSmsServices: false,
74
+ enableQueueName: false,
75
+ disableCallTransferButton: false,
76
+ disableBlindTransfer: false,
77
+ disableAttendedTransfer: false,
78
+ disableWarmTransfer: false,
79
+ isDraggable: true,
80
+ disableSoftPhone: false,
81
+ disableConferenceButton: false,
82
+ disableHoldButton: false,
83
+ disableMuteButton: false,
84
+ disabled: {},
85
+ enabled: {},
86
+ outlined: {}
87
+ },
88
+ urlConfig: {
89
+ baseURL: "",
90
+ iframeURL: "",
91
+ iframeAPIURL: "",
92
+ webSocketURL: "",
93
+ coreBaseURL: "",
94
+ id: "",
95
+ password: ""
96
+ },
97
+ callStartTime: null,
98
+ controlPanelPosition: { x: 10, y: 10 },
99
+ iframePosition: {
100
+ x: ((_a2 = window.screen) == null ? void 0 : _a2.availWidth) - 460,
101
+ y: ((_b = window.screen) == null ? void 0 : _b.height) - 580
102
+ },
103
+ callData: {
104
+ agent_id: -1,
105
+ queue_name: "",
106
+ hold: 0,
107
+ mute: 0,
108
+ status: "",
109
+ type: "",
110
+ event_time: "",
111
+ phone_number: ""
112
+ },
113
+ conferenceLine: [
114
+ {
115
+ line: 1,
116
+ status: "IDLE",
117
+ type: "",
118
+ phone: "",
119
+ isMute: false,
120
+ isHold: false,
121
+ isCallStart: false,
122
+ isMergeCall: false
123
+ },
124
+ {
125
+ line: 2,
126
+ status: "IDLE",
127
+ type: "",
128
+ phone: "",
129
+ isMute: false,
130
+ isHold: false,
131
+ isCallStart: false,
132
+ isMergeCall: false
133
+ },
134
+ {
135
+ line: 3,
136
+ status: "IDLE",
137
+ type: "",
138
+ phone: "",
139
+ isMute: false,
140
+ isHold: false,
141
+ isCallStart: false,
142
+ isMergeCall: false
143
+ },
144
+ {
145
+ line: 4,
146
+ status: "IDLE",
147
+ type: "",
148
+ phone: "",
149
+ isMute: false,
150
+ isHold: false,
151
+ isCallStart: false,
152
+ isMergeCall: false
153
+ },
154
+ {
155
+ line: 5,
156
+ status: "IDLE",
157
+ type: "",
158
+ phone: "",
159
+ isMute: false,
160
+ isHold: false,
161
+ isCallStart: false,
162
+ isMergeCall: false
163
+ }
164
+ ],
165
+ hold: 0,
166
+ mute: 0,
167
+ agentStatus: "",
168
+ sdk: null,
169
+ isPermissionsLoaded: false,
170
+ userPermissions: null,
171
+ menuEntitlements: null,
172
+ consultInfo: null
173
+ };
174
+ }
175
+ loadFromStorage() {
176
+ var _a2, _b;
177
+ try {
178
+ const stored = getSession(this.STORAGE_KEY);
179
+ if (stored) {
180
+ const parsedState = stored;
181
+ this.state = __spreadProps(__spreadValues({}, this.state), {
182
+ agentId: parsedState.agentId || "",
183
+ authorization: parsedState.authorization || void 0,
184
+ process: parsedState.process || null,
185
+ openConferenceDialog: (parsedState == null ? void 0 : parsedState.openConferenceDialog) || false,
186
+ openCallTransferDialog: (parsedState == null ? void 0 : parsedState.openCallTransferDialog) || false,
187
+ isInitialized: parsedState.isInitialized || false,
188
+ sdkConfig: parsedState.sdkConfig || {
189
+ disableEndCallButton: false,
190
+ disabledMoreOptionsButton: false,
191
+ enableSmsServices: false,
192
+ enableQueueName: false,
193
+ disabledDialButton: false,
194
+ disableCallTransferButton: false,
195
+ disableBlindTransfer: false,
196
+ disableAttendedTransfer: false,
197
+ disableWarmTransfer: false,
198
+ isDraggable: true,
199
+ disableSoftPhone: false,
200
+ disableConferenceButton: false,
201
+ disableHoldButton: false,
202
+ disableMuteButton: false,
203
+ disabled: {},
204
+ enabled: {},
205
+ outlined: {}
206
+ },
207
+ urlConfig: parsedState.urlConfig || {
208
+ id: "",
209
+ baseURL: "",
210
+ iframeURL: "",
211
+ iframeAPIURL: "",
212
+ webSocketURL: "",
213
+ coreBaseURL: "",
214
+ password: ""
215
+ },
216
+ callStartTime: parsedState.callStartTime || null,
217
+ controlPanelPosition: parsedState.controlPanelPosition || {
218
+ x: 10,
219
+ y: 10
220
+ },
221
+ iframePosition: parsedState.iframePosition || {
222
+ x: ((_a2 = window.screen) == null ? void 0 : _a2.availWidth) - 460,
223
+ y: ((_b = window.screen) == null ? void 0 : _b.height) - 580
224
+ },
225
+ callData: parsedState.callData || {
226
+ mobileNumber: "",
227
+ callReferenceId: "",
228
+ agent_id: "",
229
+ status: "",
230
+ type: "",
231
+ event_time: "",
232
+ phone_number: ""
233
+ },
234
+ conferenceLine: parsedState.conferenceLine && Array.isArray(parsedState.conferenceLine) && parsedState.conferenceLine.length > 0 ? parsedState.conferenceLine : this.state.conferenceLine,
235
+ agentStatus: parsedState.agentStatus,
236
+ sdk: parsedState.sdk || null,
237
+ isPermissionsLoaded: parsedState.isPermissionsLoaded || false,
238
+ userPermissions: parsedState.userPermissions || null,
239
+ menuEntitlements: parsedState.menuEntitlements || null
240
+ });
241
+ }
242
+ } catch (error) {
243
+ console.warn("Failed to load SDK state:", error);
244
+ }
245
+ }
246
+ saveToStorage() {
247
+ try {
248
+ const persistentState = {
249
+ agentId: this.state.agentId,
250
+ authorization: this.state.authorization,
251
+ process: this.state.process,
252
+ isInitialized: this.state.isInitialized,
253
+ openConferenceDialog: this.state.openConferenceDialog,
254
+ openCallTransferDialog: this.state.openCallTransferDialog,
255
+ sdkConfig: this.state.sdkConfig,
256
+ urlConfig: this.state.urlConfig,
257
+ callStartTime: this.state.callStartTime,
258
+ controlPanelPosition: this.state.controlPanelPosition,
259
+ iframePosition: this.state.iframePosition,
260
+ callData: this.state.callData,
261
+ conferenceLine: this.state.conferenceLine,
262
+ agentStatus: this.state.agentStatus,
263
+ sdk: this.state.sdk,
264
+ isPermissionsLoaded: this.state.isPermissionsLoaded,
265
+ userPermissions: this.state.userPermissions,
266
+ menuEntitlements: this.state.menuEntitlements
267
+ };
268
+ setSession(this.STORAGE_KEY, persistentState);
269
+ } catch (error) {
270
+ console.warn("Failed to save SDK state:", error);
271
+ }
272
+ }
273
+ notifyListeners() {
274
+ this.listeners.forEach((listener) => listener());
275
+ }
276
+ validateCredentials(apiKey, tenantId) {
277
+ if (!apiKey || typeof apiKey !== "string" || apiKey.trim().length === 0) {
278
+ throw new Error("API key not available");
279
+ }
280
+ if (!tenantId || typeof tenantId !== "string" || tenantId.trim().length === 0) {
281
+ throw new Error("Tenant ID not available");
282
+ }
283
+ this.apiKey = apiKey.trim();
284
+ this.tenantId = tenantId.trim();
285
+ }
286
+ initialize(apiKey, tenantId, agentId, urlConfig, initResult, sdkConfig) {
287
+ var _a2;
288
+ this.validateCredentials(apiKey, tenantId);
289
+ if (!agentId || typeof agentId !== "string" || agentId.trim().length === 0) {
290
+ throw new Error("Agent ID not available");
291
+ } else {
292
+ this.state.agentId = agentId;
293
+ this.state.openConferenceDialog = false;
294
+ this.state.openCallTransferDialog = false;
295
+ this.state.authorization = initResult;
296
+ this.state.sdkConfig = __spreadValues(__spreadValues({
297
+ disableEndCallButton: false,
298
+ disabledDialButton: false,
299
+ disabledMoreOptionsButton: false,
300
+ enableQueueName: false,
301
+ disableCallTransferButton: false,
302
+ disableBlindTransfer: false,
303
+ disableAttendedTransfer: false,
304
+ disableWarmTransfer: false,
305
+ isDraggable: true,
306
+ disableSoftPhone: false,
307
+ disableConferenceButton: false,
308
+ disableHoldButton: false,
309
+ disableMuteButton: false,
310
+ disabled: {},
311
+ enabled: {},
312
+ outlined: {}
313
+ }, sdkConfig), initResult == null ? void 0 : initResult.callControls);
314
+ this.state.urlConfig = {
315
+ baseURL: (urlConfig == null ? void 0 : urlConfig.baseURL) || "",
316
+ iframeURL: (urlConfig == null ? void 0 : urlConfig.iframeURL) || "",
317
+ iframeAPIURL: (urlConfig == null ? void 0 : urlConfig.iframeAPIURL) || "",
318
+ webSocketURL: (urlConfig == null ? void 0 : urlConfig.webSocketURL) || "",
319
+ coreBaseURL: (urlConfig == null ? void 0 : urlConfig.coreBaseURL) || "",
320
+ id: ((_a2 = initResult == null ? void 0 : initResult.userInfo) == null ? void 0 : _a2.id) ? String(initResult.userInfo.id) : "",
321
+ password: (urlConfig == null ? void 0 : urlConfig.password) || ""
322
+ };
323
+ this.state.isInitialized = true;
324
+ this.saveToStorage();
325
+ this.notifyListeners();
326
+ }
327
+ }
328
+ getState() {
329
+ return __spreadValues({}, this.state);
330
+ }
331
+ getCredentials() {
332
+ return { apiKey: this.apiKey, tenantId: this.tenantId };
333
+ }
334
+ getSdkAuthToken() {
335
+ var _a2;
336
+ return (_a2 = this.state.authorization) == null ? void 0 : _a2.accessToken;
337
+ }
338
+ subscribe(listener) {
339
+ this.listeners.push(listener);
340
+ return () => {
341
+ const index = this.listeners.indexOf(listener);
342
+ if (index > -1) {
343
+ this.listeners.splice(index, 1);
344
+ }
345
+ };
346
+ }
347
+ // public setHolding(isHolding: boolean): void {
348
+ // this.state.isHolding = isHolding;
349
+ // this.saveToStorage();
350
+ // this.notifyListeners();
351
+ // }
352
+ // public setMuted(isMuted: boolean): void {
353
+ // this.state.isMuted = isMuted;
354
+ // this.saveToStorage();
355
+ // this.notifyListeners();
356
+ // }
357
+ setProcess(process) {
358
+ this.state.process = process;
359
+ this.saveToStorage();
360
+ this.notifyListeners();
361
+ }
362
+ setControlPanelPosition(position) {
363
+ this.state.controlPanelPosition = position;
364
+ this.saveToStorage();
365
+ this.notifyListeners();
366
+ }
367
+ setIframePosition(position) {
368
+ this.state.iframePosition = position;
369
+ this.saveToStorage();
370
+ this.notifyListeners();
371
+ }
372
+ startCall() {
373
+ this.state.callStartTime = Date.now();
374
+ this.saveToStorage();
375
+ this.notifyListeners();
376
+ }
377
+ endCall() {
378
+ this.state.callStartTime = null;
379
+ this.saveToStorage();
380
+ this.notifyListeners();
381
+ }
382
+ setInitCheck() {
383
+ this.state.isInitialized = false;
384
+ this.saveToStorage();
385
+ this.notifyListeners();
386
+ }
387
+ setOpenConferenceDialog(open) {
388
+ this.state.openConferenceDialog = open;
389
+ this.saveToStorage();
390
+ this.notifyListeners();
391
+ }
392
+ setOpenCallTransferDialog(open) {
393
+ this.state.openCallTransferDialog = open;
394
+ this.saveToStorage();
395
+ this.notifyListeners();
396
+ }
397
+ setConsultInfo(info) {
398
+ this.state.consultInfo = info;
399
+ this.notifyListeners();
400
+ }
401
+ setAgentStatus(status) {
402
+ this.state.agentStatus = status;
403
+ this.saveToStorage();
404
+ this.notifyListeners();
405
+ }
406
+ updateCallData(data) {
407
+ this.state.callData = __spreadValues(__spreadValues({}, this.state.callData), data);
408
+ this.saveToStorage();
409
+ this.notifyListeners();
410
+ }
411
+ updateConferenceData(data) {
412
+ this.state.conferenceLine = [...data];
413
+ this.saveToStorage();
414
+ this.notifyListeners();
415
+ }
416
+ setConferenceLine(line) {
417
+ var _a2;
418
+ if (!this.state.conferenceLine || !Array.isArray(this.state.conferenceLine)) {
419
+ this.state.conferenceLine = this.getInitialState().conferenceLine;
420
+ }
421
+ const conferenceLineData = (_a2 = this.state.conferenceLine) == null ? void 0 : _a2.map(
422
+ (each) => {
423
+ if (each.line === line.line) {
424
+ return line;
425
+ }
426
+ return each;
427
+ }
428
+ );
429
+ this.state.conferenceLine = conferenceLineData;
430
+ this.saveToStorage();
431
+ this.notifyListeners();
432
+ }
433
+ resetConferenceLines() {
434
+ this.state.conferenceLine = [
435
+ {
436
+ line: 1,
437
+ status: "IDLE",
438
+ type: "",
439
+ phone: "",
440
+ isMute: false,
441
+ isHold: false,
442
+ isCallStart: false,
443
+ isMergeCall: false
444
+ },
445
+ {
446
+ line: 2,
447
+ status: "IDLE",
448
+ type: "",
449
+ phone: "",
450
+ isMute: false,
451
+ isHold: false,
452
+ isCallStart: false,
453
+ isMergeCall: false
454
+ },
455
+ {
456
+ line: 3,
457
+ status: "IDLE",
458
+ type: "",
459
+ phone: "",
460
+ isMute: false,
461
+ isHold: false,
462
+ isCallStart: false,
463
+ isMergeCall: false
464
+ },
465
+ {
466
+ line: 4,
467
+ status: "IDLE",
468
+ type: "",
469
+ phone: "",
470
+ isMute: false,
471
+ isHold: false,
472
+ isCallStart: false,
473
+ isMergeCall: false
474
+ },
475
+ {
476
+ line: 5,
477
+ status: "IDLE",
478
+ type: "",
479
+ phone: "",
480
+ isMute: false,
481
+ isHold: false,
482
+ isCallStart: false,
483
+ isMergeCall: false
484
+ }
485
+ ];
486
+ this.saveToStorage();
487
+ this.notifyListeners();
488
+ }
489
+ clearStorageAndReset() {
490
+ try {
491
+ removeSession(this.STORAGE_KEY);
492
+ this.state = this.getInitialState();
493
+ this.notifyListeners();
494
+ } catch (error) {
495
+ console.warn("Failed to clear:", error);
496
+ }
497
+ }
498
+ getConferenceLines() {
499
+ return this.state.conferenceLine || [];
500
+ }
501
+ /**
502
+ * Update SDK config with permission-based controls.
503
+ * Merges the provided controls with existing config.
504
+ */
505
+ updateSDKConfigFromPermissions(permissionControls) {
506
+ this.state.sdkConfig = __spreadValues(__spreadValues({}, this.state.sdkConfig), permissionControls);
507
+ this.saveToStorage();
508
+ this.notifyListeners();
509
+ }
510
+ /**
511
+ * Revert call consult controls back to the base permission-derived values.
512
+ * Called when a CALL_STATE event arrives without call_consult_controls.
513
+ */
514
+ resetConsultControls() {
515
+ const base = this.getControlsConfig();
516
+ this.state.sdkConfig = __spreadProps(__spreadValues({}, this.state.sdkConfig), {
517
+ disableEndCallButton: base.disableEndCallButton,
518
+ disableCallTransferButton: base.disableCallTransferButton,
519
+ disableConferenceButton: base.disableConferenceButton,
520
+ disableHoldButton: base.disableHoldButton,
521
+ disableMuteButton: base.disableMuteButton
522
+ });
523
+ this.saveToStorage();
524
+ this.notifyListeners();
525
+ }
526
+ // ============ Entitlement Logic (Ported from SDKPermissionManager) ============
527
+ /**
528
+ * Set user information (entitlements) from login response
529
+ */
530
+ setSDKPermissions(userInfo) {
531
+ var _a2, _b;
532
+ if (!userInfo) return;
533
+ const sdk = (_a2 = userInfo.entitlements) == null ? void 0 : _a2.sdk;
534
+ const sdkPermissions = Array.isArray(userInfo.permissions) ? userInfo.permissions : null;
535
+ const sdkMenus = Array.isArray((_b = userInfo.entitlements) == null ? void 0 : _b.menus) ? userInfo.entitlements.menus : null;
536
+ this.state.sdk = sdk;
537
+ this.state.userPermissions = sdkPermissions;
538
+ this.state.menuEntitlements = sdkMenus;
539
+ this.state.isPermissionsLoaded = true;
540
+ const permissionControls = this.getControlsConfig();
541
+ this.updateSDKConfigFromPermissions(permissionControls);
542
+ this.saveToStorage();
543
+ this.notifyListeners();
544
+ }
545
+ /**
546
+ * Check if a bit is enabled in entitlements
547
+ */
548
+ isBitEnabled(category, bitCode) {
549
+ var _a2;
550
+ const sdk = this.state.sdk;
551
+ if (!sdk) return false;
552
+ const categoryEntitlement = sdk[category];
553
+ if (!categoryEntitlement) return false;
554
+ if (!categoryEntitlement.enabled) return false;
555
+ if (!bitCode) return true;
556
+ const bit = (_a2 = categoryEntitlement.items) == null ? void 0 : _a2.find(
557
+ (item) => item.code === bitCode
558
+ );
559
+ return bit ? bit.enabled : false;
560
+ }
561
+ /** Check if the user has a specific flat permission (e.g. "calls:inbound") */
562
+ hasPermission(permission) {
563
+ const perms = this.state.userPermissions;
564
+ if (!perms) return false;
565
+ return perms.includes("*") || perms.includes(permission);
566
+ }
567
+ /** Check if any of the provided permissions is granted */
568
+ hasAnyPermission(permissions) {
569
+ return permissions.some((p) => this.hasPermission(p));
570
+ }
571
+ /** Check if all of the provided permissions are granted */
572
+ hasAllPermissions(permissions) {
573
+ return permissions.every((p) => this.hasPermission(p));
574
+ }
575
+ /** Check if a menu entitlement is enabled (e.g. "campaign"). Supports "*" wildcard. */
576
+ hasMenuFeature(code) {
577
+ const menus = this.state.menuEntitlements;
578
+ if (!menus) return false;
579
+ if (menus.some((m) => m.code === "*" && m.enabled)) return true;
580
+ const entry = menus.find((m) => m.code === code);
581
+ return entry ? entry.enabled : false;
582
+ }
583
+ /**
584
+ * Get SDK controls configuration derived exclusively from structured entitlements.
585
+ */
586
+ getControlsConfig() {
587
+ const { sdk, isPermissionsLoaded } = this.state;
588
+ if (!isPermissionsLoaded || !sdk) {
589
+ return {
590
+ disabledDialButton: true,
591
+ disableEndCallButton: true,
592
+ disableCallTransferButton: true,
593
+ disableBlindTransfer: true,
594
+ disableAttendedTransfer: true,
595
+ disableWarmTransfer: true,
596
+ disableConferenceButton: true,
597
+ disableHoldButton: true,
598
+ disableMuteButton: true,
599
+ disabledMoreOptionsButton: true
600
+ };
601
+ }
602
+ const isDialAllowed = this.isBitEnabled(
603
+ "calls",
604
+ SDK_PERMISSIONS.CALL_OUTBOUND
605
+ );
606
+ const isInboundAllowed = this.isBitEnabled(
607
+ "calls",
608
+ SDK_PERMISSIONS.CALL_INBOUND
609
+ );
610
+ const isAnyCallAllowed = isDialAllowed || isInboundAllowed;
611
+ const isHoldAllowed = isAnyCallAllowed;
612
+ const isMuteAllowed = isAnyCallAllowed;
613
+ const isEndCallAllowed = isAnyCallAllowed;
614
+ const isConferenceAllowed = this.isBitEnabled("call_conference", "");
615
+ const isTransferEnabled = this.isBitEnabled("call_transfer", "");
616
+ const isBlindAllowed = this.isBitEnabled(
617
+ "call_transfer",
618
+ SDK_PERMISSIONS.TRANSFER_BLIND
619
+ );
620
+ const isAttendedAllowed = this.isBitEnabled(
621
+ "call_transfer",
622
+ SDK_PERMISSIONS.TRANSFER_ATTENDED
623
+ );
624
+ const isWarmAllowed = this.isBitEnabled(
625
+ "call_transfer",
626
+ SDK_PERMISSIONS.TRANSFER_WARM
627
+ );
628
+ return {
629
+ disabledDialButton: !isDialAllowed,
630
+ disableEndCallButton: !isEndCallAllowed,
631
+ disableCallTransferButton: !isTransferEnabled,
632
+ disableBlindTransfer: !isBlindAllowed,
633
+ disableAttendedTransfer: !isAttendedAllowed,
634
+ disableWarmTransfer: !isWarmAllowed,
635
+ disableConferenceButton: !isConferenceAllowed,
636
+ disableHoldButton: !isHoldAllowed,
637
+ disableMuteButton: !isMuteAllowed,
638
+ disabledMoreOptionsButton: false
639
+ };
640
+ }
641
+ };
642
+ var sdkStateManager = new SDKStateManager();
643
+
644
+ // call-control-sdk/lib/services/toastMessage.tsx
645
+ import { createContext, useContext, useState } from "react";
646
+ import { Snackbar, Alert } from "@mui/material";
647
+ import { jsx, jsxs } from "react/jsx-runtime";
648
+ var ToastContext = createContext(void 0);
649
+ var noopToast = {
650
+ showToast: (message, severity) => {
651
+ console.warn(`[Toast outside provider] ${severity != null ? severity : "info"}: ${message}`);
652
+ }
653
+ };
654
+ var useToast = () => {
655
+ const ctx = useContext(ToastContext);
656
+ return ctx != null ? ctx : noopToast;
657
+ };
658
+ var ToastProvider = ({ children }) => {
659
+ const [open, setOpen] = useState(false);
660
+ const [message, setMessage] = useState("");
661
+ const [severity, setSeverity] = useState("info");
662
+ const showToast = (msg, sev = "info") => {
663
+ setMessage(msg);
664
+ setSeverity(sev);
665
+ setOpen(true);
666
+ };
667
+ return /* @__PURE__ */ jsxs(ToastContext.Provider, { value: { showToast }, children: [
668
+ children,
669
+ /* @__PURE__ */ jsx(
670
+ Snackbar,
671
+ {
672
+ open,
673
+ color: severity,
674
+ autoHideDuration: 3e3,
675
+ onClose: () => setOpen(false),
676
+ anchorOrigin: { vertical: "top", horizontal: "right" },
677
+ children: /* @__PURE__ */ jsx(
678
+ Alert,
679
+ {
680
+ variant: "filled",
681
+ severity,
682
+ onClose: () => setOpen(false),
683
+ sx: { width: "100%" },
684
+ children: message
685
+ }
686
+ )
687
+ }
688
+ )
689
+ ] });
690
+ };
691
+
692
+ // call-control-sdk/lib/components/SDKProvider.tsx
693
+ import { memo } from "react";
694
+ import { jsx as jsx2 } from "react/jsx-runtime";
695
+ var SDKProvider = memo(({ children }) => {
696
+ return /* @__PURE__ */ jsx2(ToastProvider, { children });
697
+ });
698
+ SDKProvider.displayName = "SDKProvider";
699
+
700
+ // call-control-sdk/lib/services/endPoint.ts
701
+ var getBaseURL = () => {
702
+ var _a2, _b, _c;
703
+ return ((_c = (_b = (_a2 = sdkStateManager) == null ? void 0 : _a2.getState()) == null ? void 0 : _b.urlConfig) == null ? void 0 : _c.baseURL) || "";
704
+ };
705
+ var getCoreURL = () => {
706
+ var _a2, _b, _c;
707
+ return ((_c = (_b = (_a2 = sdkStateManager) == null ? void 0 : _a2.getState()) == null ? void 0 : _b.urlConfig) == null ? void 0 : _c.coreBaseURL) || "";
708
+ };
709
+ var BASE_URL = getBaseURL();
710
+ var CORE_URL = getCoreURL();
711
+ var VERSION = {
712
+ v1: "/api/v1"
713
+ };
714
+ var END_POINT = {
715
+ get LOGIN() {
716
+ return `${getBaseURL()}${VERSION.v1}/cti/login?provider=convox`;
717
+ },
718
+ get READY_AGENT() {
719
+ return `${getCoreURL()}${VERSION.v1}/agents/ready`;
720
+ },
721
+ get UPDATE_AGENT_BREAK() {
722
+ return `${getCoreURL()}${VERSION.v1}/agents/status`;
723
+ },
724
+ get CLICK_TO_CALL() {
725
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/dial`;
726
+ },
727
+ get HOLD_CALL() {
728
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/hold`;
729
+ },
730
+ get MUTE_CALL() {
731
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/mute`;
732
+ },
733
+ get UNMUTE_CALL() {
734
+ return `${getCoreURL()}${VERSION.v1}/cti/mute`;
735
+ },
736
+ get END_CALL() {
737
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`;
738
+ },
739
+ get LOGOUT() {
740
+ return `${getBaseURL()}${VERSION.v1}/cti/logout?provider=convox`;
741
+ },
742
+ get CONFERENCE_CALL() {
743
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/add`;
744
+ },
745
+ get CONFERENCE_MERGE_CALL() {
746
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/merge`;
747
+ },
748
+ get CONFERENCE_CALL_HOLD_OR_UN_HOLD() {
749
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/hold`;
750
+ },
751
+ get CONFERENCE_CALL_MUTE_OT_UN_MUTE() {
752
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/mute`;
753
+ },
754
+ get CONFERENCE_CALL_END() {
755
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`;
756
+ },
757
+ get CONFERENCE_CALL_END_ALL() {
758
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`;
759
+ },
760
+ get CONFERENCE_CALL_TRANSFER() {
761
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/transfer`;
762
+ },
763
+ get TRANSFER_CALL() {
764
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer-call`;
765
+ },
766
+ get TRANSFER_COMPLETE() {
767
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer/complete`;
768
+ },
769
+ get TRANSFER_CANCEL() {
770
+ return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer/cancel`;
771
+ },
772
+ get AGENTS_LIST() {
773
+ return `${getBaseURL()}${VERSION.v1}/cti/users`;
774
+ },
775
+ get PROCESS_LIST() {
776
+ return `${getBaseURL()}${VERSION.v1}/cti/processes-list`;
777
+ },
778
+ get BREAKS_LIST() {
779
+ return `${getBaseURL()}${VERSION.v1}/cti/breaks`;
780
+ },
781
+ get TRANSFER_TO_DETAILS() {
782
+ return `${getBaseURL()}${VERSION.v1}/cti/transfer-to-details?provider=convox`;
783
+ },
784
+ get SEND_NOTIFICATIONS() {
785
+ return `${getBaseURL()}${VERSION.v1}/cti/notifications/send`;
786
+ },
787
+ get CALL_HISTORY() {
788
+ return `${getBaseURL()}${VERSION.v1}/dashboard/call-history`;
789
+ },
790
+ get SENTIMENTAL_ANALYSIS() {
791
+ return `${getBaseURL()}${VERSION.v1}/users/get_sentiment_analysis`;
792
+ },
793
+ get DISPOSITIONS() {
794
+ return `${getBaseURL()}${VERSION.v1}/cti/calls/dispositions`;
795
+ },
796
+ SET_CALL_DISPOSITION: (callUuid) => `${getBaseURL()}${VERSION.v1}/calls/${callUuid}/disposition`,
797
+ get HOSPITALS_SERVICES() {
798
+ return `${getBaseURL()}${VERSION.v1}/cti/hospital/services`;
799
+ },
800
+ get BLIEND_TRANSFER() {
801
+ return `${getBaseURL()}${VERSION.v1}/cti/calls/blind_transfer?provider=convox`;
802
+ },
803
+ get AUTH_LOGOUT() {
804
+ return `${getBaseURL()}${VERSION.v1}/auth/logout`;
805
+ },
806
+ // Permissions
807
+ get USER_PERMISSIONS() {
808
+ return `${getBaseURL()}${VERSION.v1}/rbac/users/me/permissions`;
809
+ },
810
+ // Supervisor Call Monitoring (Listen / Whisper / Barge via ChanSpy)
811
+ get SUPERVISOR_CALL_LISTEN() {
812
+ return `${getBaseURL()}${VERSION.v1}/cti/supervisor/listen`;
813
+ },
814
+ get SUPERVISOR_CALL_LEAVE() {
815
+ return `${getBaseURL()}${VERSION.v1}/cti/supervisor/leave`;
816
+ },
817
+ get SUPERVISOR_CALL_CHANGE_MODE() {
818
+ return `${getBaseURL()}${VERSION.v1}/cti/supervisor/mode`;
819
+ },
820
+ // Call History pages
821
+ get CALLS_HISTORY() {
822
+ return `${getBaseURL()}${VERSION.v1}/calls/history`;
823
+ },
824
+ get MISSED_CALLS() {
825
+ return `${getBaseURL()}${VERSION.v1}/supervisor/missed-calls`;
826
+ },
827
+ RECORDING_BY_CALL: (call_uuid) => `${getBaseURL()}${VERSION.v1}/recordings/call/${call_uuid}`
828
+ };
829
+
830
+ // call-control-sdk/lib/services/axios.ts
831
+ import axios from "axios";
832
+ var _a;
833
+ var DEFAULT_TOKEN = (_a = sdkStateManager.getSdkAuthToken()) != null ? _a : "";
834
+ var REQUEST_TIMEOUT = 6e4;
835
+ function getAuthToken() {
836
+ var _a2;
837
+ return (_a2 = sdkStateManager.getSdkAuthToken()) != null ? _a2 : "";
838
+ }
839
+ function createAxiosInstance() {
840
+ var _a2, _b, _c, _d;
841
+ const instance = axios.create({
842
+ // baseURL: sdkStateManager.getState()?.urlConfig?.baseURL,
843
+ headers: {
844
+ "Content-Type": "application/json",
845
+ Accept: "application/json",
846
+ "x-tenant-id": (_b = (_a2 = sdkStateManager.getCredentials()) == null ? void 0 : _a2.tenantId) != null ? _b : "",
847
+ "x-api-key": (_d = (_c = sdkStateManager.getCredentials()) == null ? void 0 : _c.apiKey) != null ? _d : "",
848
+ Authorization: DEFAULT_TOKEN ? DEFAULT_TOKEN.startsWith("Bearer ") ? DEFAULT_TOKEN : `Bearer ${DEFAULT_TOKEN}` : ""
849
+ },
850
+ timeout: REQUEST_TIMEOUT,
851
+ withCredentials: false
852
+ });
853
+ instance.interceptors.request.use(
854
+ (config) => {
855
+ const token = getAuthToken();
856
+ if (token && config.headers) {
857
+ const authToken = token.startsWith("Bearer ") ? token : `Bearer ${token}`;
858
+ config.headers.Authorization = authToken;
859
+ }
860
+ console.log("API Request:", {
861
+ url: config.url,
862
+ method: config.method,
863
+ hasToken: !!token,
864
+ tokenStartsWithBearer: token == null ? void 0 : token.startsWith("Bearer "),
865
+ headers: {
866
+ Authorization: config.headers.Authorization,
867
+ "x-tenant-id": config.headers["x-tenant-id"],
868
+ "x-api-key": config.headers["x-api-key"]
869
+ }
870
+ });
871
+ config.metadata = { startTime: (/* @__PURE__ */ new Date()).getTime() };
872
+ return config;
873
+ },
874
+ (error) => {
875
+ console.error("Request interceptor error:", error);
876
+ return Promise.reject(error);
877
+ }
878
+ );
879
+ instance.interceptors.response.use(
880
+ (response) => {
881
+ return response;
882
+ },
883
+ async (error) => {
884
+ var _a3;
885
+ const originalRequest = error.config;
886
+ if (((_a3 = error.response) == null ? void 0 : _a3.status) === 401 && !originalRequest._retry) {
887
+ sdkStateManager.setInitCheck();
888
+ console.warn("Unauthorized request, attempting retry...");
889
+ }
890
+ if (!error.response) {
891
+ console.error("Network error:", error.message);
892
+ error.message = "Network error: Please check your internet connection";
893
+ }
894
+ if (error.response && error.response.status >= 500) {
895
+ console.error("Server error:", error.response.status, error.response.data);
896
+ error.message = "Server error: Please try again later";
897
+ }
898
+ return Promise.reject(error);
899
+ }
900
+ );
901
+ return instance;
902
+ }
903
+ var axiosInstance = createAxiosInstance();
904
+ var axios_default = axiosInstance;
905
+
906
+ export {
907
+ __spreadValues,
908
+ __spreadProps,
909
+ __publicField,
910
+ STORAGE_KEY,
911
+ SDK_WILDCARD,
912
+ SDK_MENU_CODES,
913
+ SDK_PERMISSIONS,
914
+ sdkStateManager,
915
+ END_POINT,
916
+ axios_default,
917
+ useToast,
918
+ SDKProvider
919
+ };
920
+ //# sourceMappingURL=chunk-6AM6THQM.mjs.map