ahs-cti 1.0.1-beta.6 → 1.0.1-beta.8

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.
@@ -5,7 +5,7 @@ import {
5
5
  __spreadValues,
6
6
  axios_default,
7
7
  useToast
8
- } from "./chunk-FFYJ4LWU.mjs";
8
+ } from "./chunk-B7G5PWDP.mjs";
9
9
 
10
10
  // call-control-sdk/lib/pages/callHistory/index.tsx
11
11
  import { memo, useEffect, useState as useState2 } from "react";
@@ -366,4 +366,4 @@ var callHistory_default = CallHistory;
366
366
  export {
367
367
  callHistory_default as default
368
368
  };
369
- //# sourceMappingURL=callHistory-Z5ABHFDQ.mjs.map
369
+ //# sourceMappingURL=callHistory-PEG4WRIU.mjs.map
@@ -68,6 +68,7 @@ var SDKStateManager = class {
68
68
  isInitialized: false,
69
69
  sdkConfig: {
70
70
  disableEndCallButton: false,
71
+ disableEndConference: false,
71
72
  disabledDialButton: false,
72
73
  disabledMoreOptionsButton: false,
73
74
  enableSmsServices: false,
@@ -81,6 +82,7 @@ var SDKStateManager = class {
81
82
  disableConferenceButton: false,
82
83
  disableHoldButton: false,
83
84
  disableMuteButton: false,
85
+ disableAlternateDialing: true,
84
86
  disabled: {},
85
87
  enabled: {},
86
88
  outlined: {}
@@ -169,11 +171,12 @@ var SDKStateManager = class {
169
171
  isPermissionsLoaded: false,
170
172
  userPermissions: null,
171
173
  menuEntitlements: null,
172
- consultInfo: null
174
+ consultInfo: null,
175
+ rootCallUuid: null
173
176
  };
174
177
  }
175
178
  loadFromStorage() {
176
- var _a2, _b;
179
+ var _a2, _b, _c;
177
180
  try {
178
181
  const stored = getSession(this.STORAGE_KEY);
179
182
  if (stored) {
@@ -187,6 +190,7 @@ var SDKStateManager = class {
187
190
  isInitialized: parsedState.isInitialized || false,
188
191
  sdkConfig: parsedState.sdkConfig || {
189
192
  disableEndCallButton: false,
193
+ disableEndConference: false,
190
194
  disabledMoreOptionsButton: false,
191
195
  enableSmsServices: false,
192
196
  enableQueueName: false,
@@ -200,6 +204,7 @@ var SDKStateManager = class {
200
204
  disableConferenceButton: false,
201
205
  disableHoldButton: false,
202
206
  disableMuteButton: false,
207
+ disableAlternateDialing: true,
203
208
  disabled: {},
204
209
  enabled: {},
205
210
  outlined: {}
@@ -236,7 +241,8 @@ var SDKStateManager = class {
236
241
  sdk: parsedState.sdk || null,
237
242
  isPermissionsLoaded: parsedState.isPermissionsLoaded || false,
238
243
  userPermissions: parsedState.userPermissions || null,
239
- menuEntitlements: parsedState.menuEntitlements || null
244
+ menuEntitlements: parsedState.menuEntitlements || null,
245
+ rootCallUuid: (_c = parsedState.rootCallUuid) != null ? _c : null
240
246
  });
241
247
  }
242
248
  } catch (error) {
@@ -263,7 +269,8 @@ var SDKStateManager = class {
263
269
  sdk: this.state.sdk,
264
270
  isPermissionsLoaded: this.state.isPermissionsLoaded,
265
271
  userPermissions: this.state.userPermissions,
266
- menuEntitlements: this.state.menuEntitlements
272
+ menuEntitlements: this.state.menuEntitlements,
273
+ rootCallUuid: this.state.rootCallUuid
267
274
  };
268
275
  setSession(this.STORAGE_KEY, persistentState);
269
276
  } catch (error) {
@@ -295,6 +302,7 @@ var SDKStateManager = class {
295
302
  this.state.authorization = initResult;
296
303
  this.state.sdkConfig = __spreadValues(__spreadValues({
297
304
  disableEndCallButton: false,
305
+ disableEndConference: false,
298
306
  disabledDialButton: false,
299
307
  disabledMoreOptionsButton: false,
300
308
  enableQueueName: false,
@@ -307,6 +315,7 @@ var SDKStateManager = class {
307
315
  disableConferenceButton: false,
308
316
  disableHoldButton: false,
309
317
  disableMuteButton: false,
318
+ disableAlternateDialing: true,
310
319
  disabled: {},
311
320
  enabled: {},
312
321
  outlined: {}
@@ -398,6 +407,11 @@ var SDKStateManager = class {
398
407
  this.state.consultInfo = info;
399
408
  this.notifyListeners();
400
409
  }
410
+ setRootCallUuid(uuid) {
411
+ this.state.rootCallUuid = uuid;
412
+ this.saveToStorage();
413
+ this.notifyListeners();
414
+ }
401
415
  setAgentStatus(status) {
402
416
  this.state.agentStatus = status;
403
417
  this.saveToStorage();
@@ -584,6 +598,7 @@ var SDKStateManager = class {
584
598
  * Get SDK controls configuration derived exclusively from structured entitlements.
585
599
  */
586
600
  getControlsConfig() {
601
+ var _a2;
587
602
  const { sdk, isPermissionsLoaded } = this.state;
588
603
  if (!isPermissionsLoaded || !sdk) {
589
604
  return {
@@ -608,9 +623,10 @@ var SDKStateManager = class {
608
623
  SDK_PERMISSIONS.CALL_INBOUND
609
624
  );
610
625
  const isAnyCallAllowed = isDialAllowed || isInboundAllowed;
626
+ const isEndCallDisabledByCallControls = !!((_a2 = this.state.sdkConfig) == null ? void 0 : _a2.disableEndCallButton);
611
627
  const isHoldAllowed = isAnyCallAllowed;
612
628
  const isMuteAllowed = isAnyCallAllowed;
613
- const isEndCallAllowed = isAnyCallAllowed;
629
+ const isEndCallAllowed = isAnyCallAllowed && !isEndCallDisabledByCallControls;
614
630
  const isConferenceAllowed = this.isBitEnabled("call_conference", "");
615
631
  const isTransferEnabled = this.isBitEnabled("call_transfer", "");
616
632
  const isBlindAllowed = this.isBitEnabled(
@@ -916,4 +932,4 @@ export {
916
932
  useToast,
917
933
  SDKProvider
918
934
  };
919
- //# sourceMappingURL=chunk-FFYJ4LWU.mjs.map
935
+ //# sourceMappingURL=chunk-B7G5PWDP.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../call-control-sdk/lib/permissions/sdk-constants.ts","../call-control-sdk/lib/hooks/sdk-state.ts","../call-control-sdk/lib/utils/storage.ts","../call-control-sdk/lib/services/toastMessage.tsx","../call-control-sdk/lib/components/SDKProvider.tsx","../call-control-sdk/lib/services/endPoint.ts","../call-control-sdk/lib/services/axios.ts"],"sourcesContent":["/**\r\n * SDK Permission Constants\r\n *\r\n * Defines permission codes for call control features.\r\n * These codes match the 'items' in the backend entitlements response.\r\n */\r\n\r\nexport const SDK_WILDCARD = \"*\" as const;\r\n\r\n/** Menu entitlement codes from userInfo.entitlements.menus */\r\nexport const SDK_MENU_CODES = {\r\n WILDCARD: SDK_WILDCARD,\r\n CALL_HISTORY: \"call_history\",\r\n} as const;\r\n\r\nexport const SDK_PERMISSIONS = {\r\n WILDCARD: SDK_WILDCARD,\r\n // main object key constants\r\n\r\n CALLS: \"calls\",\r\n CALL_TRANSFER: \"call_transfer\",\r\n CALL_CONFERENCE: \"call_conference\",\r\n\r\n // in each object has items list of objects\r\n\r\n CALL_INBOUND: \"call_inbound\",\r\n CALL_OUTBOUND: \"call_outbound\",\r\n\r\n CONFERENCE: \"call_conference\",\r\n\r\n TRANSFER_BLIND: \"call_transfer_blind\",\r\n TRANSFER_ATTENDED: \"call_transfer_attended\",\r\n TRANSFER_WARM: \"call_transfer_warm\",\r\n} as const;\r\n","import { getSession, removeSession, setSession } from \"@react-solutions/vault\";\r\nimport type {\r\n SDKState,\r\n CallData,\r\n ConferenceLineTypes,\r\n SDKConfig,\r\n InitSDKRes,\r\n URLConfig,\r\n ConsultInfo,\r\n} from \"../../types\";\r\nimport { STORAGE_KEY } from \"../utils/storage\";\r\nimport {\r\n SDK_PERMISSIONS,\r\n type SDKEntitlements,\r\n type ControlsFromPermissions,\r\n SDK_MENU_CODES,\r\n} from \"../permissions\";\r\n\r\nclass SDKStateManager {\r\n private state: SDKState;\r\n private listeners: Array<() => void> = [];\r\n private readonly STORAGE_KEY = STORAGE_KEY;\r\n\r\n private apiKey: string | undefined;\r\n private tenantId: string | undefined;\r\n\r\n constructor() {\r\n this.state = this.getInitialState();\r\n this.loadFromStorage();\r\n }\r\n\r\n private getInitialState(): SDKState {\r\n return {\r\n authorization: undefined,\r\n process: null,\r\n agentId: \"\",\r\n openConferenceDialog: false,\r\n openCallTransferDialog: false,\r\n isInitialized: false,\r\n sdkConfig: {\r\n disableEndCallButton: false,\r\n disableEndConference: false,\r\n disabledDialButton: false,\r\n disabledMoreOptionsButton: false,\r\n enableSmsServices: false,\r\n enableQueueName: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disableAlternateDialing: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n },\r\n urlConfig: {\r\n baseURL: \"\",\r\n iframeURL: \"\",\r\n iframeAPIURL: \"\",\r\n webSocketURL: \"\",\r\n coreBaseURL: \"\",\r\n id: \"\",\r\n password: \"\",\r\n },\r\n callStartTime: null,\r\n controlPanelPosition: { x: 10, y: 10 },\r\n iframePosition: {\r\n x: window.screen?.availWidth - 460,\r\n y: window.screen?.height - 580,\r\n },\r\n callData: {\r\n agent_id: -1,\r\n queue_name: \"\",\r\n hold: 0,\r\n mute: 0,\r\n status: \"\",\r\n type: \"\",\r\n event_time: \"\",\r\n phone_number: \"\",\r\n },\r\n conferenceLine: [\r\n {\r\n line: 1,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 2,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 3,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 4,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 5,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n ],\r\n hold: 0,\r\n mute: 0,\r\n agentStatus: \"\",\r\n sdk: null,\r\n isPermissionsLoaded: false,\r\n userPermissions: null,\r\n menuEntitlements: null,\r\n consultInfo: null,\r\n rootCallUuid: null,\r\n };\r\n }\r\n\r\n private loadFromStorage(): void {\r\n try {\r\n const stored = <SDKState>getSession(this.STORAGE_KEY);\r\n if (stored) {\r\n const parsedState = stored;\r\n this.state = {\r\n ...this.state,\r\n agentId: parsedState.agentId || \"\",\r\n authorization: parsedState.authorization || undefined,\r\n process: parsedState.process || null,\r\n openConferenceDialog: parsedState?.openConferenceDialog || false,\r\n openCallTransferDialog: parsedState?.openCallTransferDialog || false,\r\n isInitialized: parsedState.isInitialized || false,\r\n sdkConfig: parsedState.sdkConfig || {\r\n disableEndCallButton: false,\r\n disableEndConference: false,\r\n disabledMoreOptionsButton: false,\r\n enableSmsServices: false,\r\n enableQueueName: false,\r\n disabledDialButton: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disableAlternateDialing: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n },\r\n urlConfig: parsedState.urlConfig || {\r\n id: \"\",\r\n baseURL: \"\",\r\n iframeURL: \"\",\r\n iframeAPIURL: \"\",\r\n webSocketURL: \"\",\r\n coreBaseURL: \"\",\r\n password: \"\",\r\n },\r\n callStartTime: parsedState.callStartTime || null,\r\n controlPanelPosition: parsedState.controlPanelPosition || {\r\n x: 10,\r\n y: 10,\r\n },\r\n iframePosition: parsedState.iframePosition || {\r\n x: window.screen?.availWidth - 460,\r\n y: window.screen?.height - 580,\r\n },\r\n callData: parsedState.callData || {\r\n mobileNumber: \"\",\r\n callReferenceId: \"\",\r\n agent_id: \"\",\r\n status: \"\",\r\n type: \"\",\r\n event_time: \"\",\r\n phone_number: \"\",\r\n },\r\n conferenceLine:\r\n parsedState.conferenceLine &&\r\n Array.isArray(parsedState.conferenceLine) &&\r\n parsedState.conferenceLine.length > 0\r\n ? parsedState.conferenceLine\r\n : this.state.conferenceLine,\r\n agentStatus: parsedState.agentStatus,\r\n sdk: parsedState.sdk || null,\r\n isPermissionsLoaded: parsedState.isPermissionsLoaded || false,\r\n userPermissions: parsedState.userPermissions || null,\r\n menuEntitlements: parsedState.menuEntitlements || null,\r\n rootCallUuid: parsedState.rootCallUuid ?? null,\r\n };\r\n }\r\n } catch (error) {\r\n console.warn(\"Failed to load SDK state:\", error);\r\n }\r\n }\r\n\r\n private saveToStorage(): void {\r\n try {\r\n const persistentState = {\r\n agentId: this.state.agentId,\r\n authorization: this.state.authorization,\r\n process: this.state.process,\r\n isInitialized: this.state.isInitialized,\r\n openConferenceDialog: this.state.openConferenceDialog,\r\n openCallTransferDialog: this.state.openCallTransferDialog,\r\n sdkConfig: this.state.sdkConfig,\r\n urlConfig: this.state.urlConfig,\r\n callStartTime: this.state.callStartTime,\r\n controlPanelPosition: this.state.controlPanelPosition,\r\n iframePosition: this.state.iframePosition,\r\n callData: this.state.callData,\r\n conferenceLine: this.state.conferenceLine,\r\n agentStatus: this.state.agentStatus,\r\n sdk: this.state.sdk,\r\n isPermissionsLoaded: this.state.isPermissionsLoaded,\r\n userPermissions: this.state.userPermissions,\r\n menuEntitlements: this.state.menuEntitlements,\r\n rootCallUuid: this.state.rootCallUuid,\r\n };\r\n setSession(this.STORAGE_KEY, persistentState);\r\n } catch (error) {\r\n console.warn(\"Failed to save SDK state:\", error);\r\n }\r\n }\r\n\r\n private notifyListeners(): void {\r\n this.listeners.forEach((listener) => listener());\r\n }\r\n\r\n private validateCredentials(apiKey: string, tenantId: string): void {\r\n if (!apiKey || typeof apiKey !== \"string\" || apiKey.trim().length === 0) {\r\n throw new Error(\"API key not available\");\r\n }\r\n if (\r\n !tenantId ||\r\n typeof tenantId !== \"string\" ||\r\n tenantId.trim().length === 0\r\n ) {\r\n throw new Error(\"Tenant ID not available\");\r\n }\r\n this.apiKey = apiKey.trim();\r\n this.tenantId = tenantId.trim();\r\n }\r\n\r\n public initialize(\r\n apiKey: string,\r\n tenantId: string,\r\n agentId: string,\r\n urlConfig?: URLConfig,\r\n initResult?: InitSDKRes,\r\n sdkConfig?: SDKConfig,\r\n ): void {\r\n this.validateCredentials(apiKey, tenantId);\r\n if (\r\n !agentId ||\r\n typeof agentId !== \"string\" ||\r\n agentId.trim().length === 0\r\n ) {\r\n throw new Error(\"Agent ID not available\");\r\n } else {\r\n this.state.agentId = agentId;\r\n this.state.openConferenceDialog = false;\r\n this.state.openCallTransferDialog = false;\r\n this.state.authorization = initResult;\r\n this.state.sdkConfig = {\r\n disableEndCallButton: false,\r\n disableEndConference: false,\r\n disabledDialButton: false,\r\n disabledMoreOptionsButton: false,\r\n enableQueueName: false,\r\n disableCallTransferButton: false,\r\n disableBlindTransfer: false,\r\n disableAttendedTransfer: false,\r\n disableWarmTransfer: false,\r\n isDraggable: true,\r\n disableSoftPhone: false,\r\n disableConferenceButton: false,\r\n disableHoldButton: false,\r\n disableMuteButton: false,\r\n disableAlternateDialing: true,\r\n disabled: {},\r\n enabled: {},\r\n outlined: {},\r\n ...sdkConfig,\r\n ...initResult?.callControls,\r\n };\r\n this.state.urlConfig = {\r\n baseURL: urlConfig?.baseURL || \"\",\r\n iframeURL: urlConfig?.iframeURL || \"\",\r\n iframeAPIURL: urlConfig?.iframeAPIURL || \"\",\r\n webSocketURL: urlConfig?.webSocketURL || \"\",\r\n coreBaseURL: urlConfig?.coreBaseURL || \"\",\r\n id: initResult?.userInfo?.id ? String(initResult.userInfo.id) : \"\",\r\n password: urlConfig?.password || \"\",\r\n };\r\n this.state.isInitialized = true;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n }\r\n\r\n public getState(): SDKState {\r\n return { ...this.state };\r\n }\r\n\r\n public getCredentials(): {\r\n apiKey: string | undefined;\r\n tenantId: string | undefined;\r\n } {\r\n return { apiKey: this.apiKey, tenantId: this.tenantId };\r\n }\r\n public getSdkAuthToken(): string | undefined {\r\n return this.state.authorization?.accessToken;\r\n }\r\n\r\n public subscribe(listener: () => void): () => void {\r\n this.listeners.push(listener);\r\n return () => {\r\n const index = this.listeners.indexOf(listener);\r\n if (index > -1) {\r\n this.listeners.splice(index, 1);\r\n }\r\n };\r\n }\r\n\r\n // public setHolding(isHolding: boolean): void {\r\n // \tthis.state.isHolding = isHolding;\r\n // \tthis.saveToStorage();\r\n // \tthis.notifyListeners();\r\n // }\r\n\r\n // public setMuted(isMuted: boolean): void {\r\n // \tthis.state.isMuted = isMuted;\r\n // \tthis.saveToStorage();\r\n // \tthis.notifyListeners();\r\n // }\r\n\r\n public setProcess(process: {\r\n process_id: number;\r\n process_name: string;\r\n }): void {\r\n this.state.process = process;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setControlPanelPosition(position: { x: number; y: number }): void {\r\n this.state.controlPanelPosition = position;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setIframePosition(position: { x: number; y: number }): void {\r\n this.state.iframePosition = position;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public startCall(): void {\r\n this.state.callStartTime = Date.now();\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public endCall(): void {\r\n this.state.callStartTime = null;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setInitCheck(): void {\r\n this.state.isInitialized = false;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setOpenConferenceDialog(open: boolean): void {\r\n this.state.openConferenceDialog = open;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setOpenCallTransferDialog(open: boolean): void {\r\n this.state.openCallTransferDialog = open;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setConsultInfo(info: ConsultInfo | null): void {\r\n this.state.consultInfo = info;\r\n this.notifyListeners();\r\n }\r\n\r\n public setRootCallUuid(uuid: string | null): void {\r\n this.state.rootCallUuid = uuid;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setAgentStatus(status: string): void {\r\n this.state.agentStatus = status;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public updateCallData(data: Partial<CallData>): void {\r\n this.state.callData = { ...this.state.callData, ...data };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public updateConferenceData(data: ConferenceLineTypes[]): void {\r\n this.state.conferenceLine = [...data];\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public setConferenceLine(line: ConferenceLineTypes): void {\r\n if (\r\n !this.state.conferenceLine ||\r\n !Array.isArray(this.state.conferenceLine)\r\n ) {\r\n this.state.conferenceLine = this.getInitialState().conferenceLine;\r\n }\r\n\r\n const conferenceLineData = this.state.conferenceLine?.map(\r\n (each: ConferenceLineTypes) => {\r\n if (each.line === line.line) {\r\n return line;\r\n }\r\n return each;\r\n },\r\n );\r\n this.state.conferenceLine = conferenceLineData;\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public resetConferenceLines(): void {\r\n this.state.conferenceLine = [\r\n {\r\n line: 1,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 2,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 3,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 4,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n {\r\n line: 5,\r\n status: \"IDLE\",\r\n type: \"\",\r\n phone: \"\",\r\n isMute: false,\r\n isHold: false,\r\n isCallStart: false,\r\n isMergeCall: false,\r\n },\r\n ];\r\n\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n public clearStorageAndReset(): void {\r\n try {\r\n removeSession(this.STORAGE_KEY);\r\n this.state = this.getInitialState();\r\n this.notifyListeners();\r\n } catch (error) {\r\n console.warn(\"Failed to clear:\", error);\r\n }\r\n }\r\n\r\n public getConferenceLines(): ConferenceLineTypes[] {\r\n return this.state.conferenceLine || [];\r\n }\r\n\r\n /**\r\n * Update SDK config with permission-based controls.\r\n * Merges the provided controls with existing config.\r\n */\r\n public updateSDKConfigFromPermissions(\r\n permissionControls: Partial<SDKConfig>,\r\n ): void {\r\n this.state.sdkConfig = {\r\n ...this.state.sdkConfig,\r\n ...permissionControls,\r\n };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n /**\r\n * Revert call consult controls back to the base permission-derived values.\r\n * Called when a CALL_STATE event arrives without call_consult_controls.\r\n */\r\n public resetConsultControls(): void {\r\n const base = this.getControlsConfig();\r\n this.state.sdkConfig = {\r\n ...this.state.sdkConfig,\r\n disableEndCallButton: base.disableEndCallButton,\r\n disableCallTransferButton: base.disableCallTransferButton,\r\n disableConferenceButton: base.disableConferenceButton,\r\n disableHoldButton: base.disableHoldButton,\r\n disableMuteButton: base.disableMuteButton,\r\n };\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n // ============ Entitlement Logic (Ported from SDKPermissionManager) ============\r\n\r\n /**\r\n * Set user information (entitlements) from login response\r\n */\r\n public setSDKPermissions(userInfo: any): void {\r\n if (!userInfo) return;\r\n\r\n // In a real scenario, this would come from userInfo.entitlements?.sdk\r\n // For now, we use the structured format expected by the SDK\r\n\r\n const sdk: SDKEntitlements = userInfo.entitlements?.sdk;\r\n const sdkPermissions = Array.isArray(userInfo.permissions) ? userInfo.permissions : null;\r\n const sdkMenus = Array.isArray(userInfo.entitlements?.menus)\r\n ? userInfo.entitlements.menus\r\n : null;\r\n\r\n // const sdkMenus:any[] = [\r\n // {\r\n // \"code\": SDK_MENU_CODES.WILDCARD,\r\n // \"name\": \"Role Management\",\r\n // \"enabled\": true\r\n // },\r\n // // {\r\n // // \"code\": SDK_MENU_CODES.CALL_HISTORY,\r\n // // \"name\": \"Role Management\",\r\n // // \"enabled\": true\r\n // // }\r\n // ]\r\n\r\n // const sdk: SDKEntitlements = {\r\n // calls: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.CALL_OUTBOUND,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.CALL_INBOUND,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // call_transfer: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_BLIND,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_ATTENDED,\r\n // enabled: true,\r\n // },\r\n // {\r\n // code: SDK_PERMISSIONS.TRANSFER_WARM,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // call_conference: {\r\n // enabled: true,\r\n // items: [\r\n // {\r\n // code: SDK_PERMISSIONS.CONFERENCE,\r\n // enabled: true,\r\n // },\r\n // ],\r\n // },\r\n // };\r\n\r\n this.state.sdk = sdk;\r\n this.state.userPermissions = sdkPermissions\r\n this.state.menuEntitlements = sdkMenus\r\n this.state.isPermissionsLoaded = true;\r\n\r\n // Automatically update SDK config based on these new entitlements\r\n const permissionControls = this.getControlsConfig();\r\n this.updateSDKConfigFromPermissions(permissionControls);\r\n\r\n this.saveToStorage();\r\n this.notifyListeners();\r\n }\r\n\r\n /**\r\n * Check if a bit is enabled in entitlements\r\n */\r\n public isBitEnabled(\r\n category: keyof SDKEntitlements,\r\n bitCode: string,\r\n ): boolean {\r\n const sdk = this.state.sdk;\r\n if (!sdk) return false;\r\n\r\n const categoryEntitlement = sdk[category];\r\n if (!categoryEntitlement) return false;\r\n if (!categoryEntitlement.enabled) return false;\r\n\r\n if (!bitCode) return true; // Just checking category enabledness\r\n\r\n const bit = categoryEntitlement.items?.find(\r\n (item: any) => item.code === bitCode,\r\n );\r\n return bit ? bit.enabled : false;\r\n }\r\n\r\n /** Check if the user has a specific flat permission (e.g. \"calls:inbound\") */\r\n public hasPermission(permission: string): boolean {\r\n const perms = this.state.userPermissions;\r\n if (!perms) return false;\r\n return perms.includes(\"*\") || perms.includes(permission);\r\n }\r\n\r\n /** Check if any of the provided permissions is granted */\r\n public hasAnyPermission(permissions: string[]): boolean {\r\n return permissions.some((p) => this.hasPermission(p));\r\n }\r\n\r\n /** Check if all of the provided permissions are granted */\r\n public hasAllPermissions(permissions: string[]): boolean {\r\n return permissions.every((p) => this.hasPermission(p));\r\n }\r\n\r\n /** Check if a menu entitlement is enabled (e.g. \"campaign\"). Supports \"*\" wildcard. */\r\n public hasMenuFeature(code: string): boolean {\r\n const menus = this.state.menuEntitlements;\r\n if (!menus) return false;\r\n if (menus.some((m) => m.code === \"*\" && m.enabled)) return true;\r\n const entry = menus.find((m) => m.code === code);\r\n return entry ? entry.enabled : false;\r\n }\r\n\r\n /**\r\n * Get SDK controls configuration derived exclusively from structured entitlements.\r\n */\r\n public getControlsConfig(): ControlsFromPermissions {\r\n const { sdk, isPermissionsLoaded } = this.state;\r\n\r\n // If entitlements not loaded yet or missing, disable everything (Fail Closed)\r\n if (!isPermissionsLoaded || !sdk) {\r\n return {\r\n disabledDialButton: true,\r\n disableEndCallButton: true,\r\n disableCallTransferButton: true,\r\n disableBlindTransfer: true,\r\n disableAttendedTransfer: true,\r\n disableWarmTransfer: true,\r\n disableConferenceButton: true,\r\n disableHoldButton: true,\r\n disableMuteButton: true,\r\n disabledMoreOptionsButton: true,\r\n };\r\n }\r\n\r\n // --- Dial/Inbound Checks ---\r\n const isDialAllowed = this.isBitEnabled(\r\n \"calls\",\r\n SDK_PERMISSIONS.CALL_OUTBOUND,\r\n );\r\n const isInboundAllowed = this.isBitEnabled(\r\n \"calls\",\r\n SDK_PERMISSIONS.CALL_INBOUND,\r\n );\r\n const isAnyCallAllowed = isDialAllowed || isInboundAllowed;\r\n const isEndCallDisabledByCallControls = !!this.state.sdkConfig?.disableEndCallButton;\r\n\r\n // --- Call Controls ---\r\n const isHoldAllowed = isAnyCallAllowed;\r\n const isMuteAllowed = isAnyCallAllowed;\r\n const isEndCallAllowed = isAnyCallAllowed && !isEndCallDisabledByCallControls;\r\n const isConferenceAllowed = this.isBitEnabled(\"call_conference\", \"\");\r\n const isTransferEnabled = this.isBitEnabled(\"call_transfer\", \"\");\r\n\r\n // --- Transfer Controls ---\r\n const isBlindAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_BLIND,\r\n );\r\n const isAttendedAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_ATTENDED,\r\n );\r\n const isWarmAllowed = this.isBitEnabled(\r\n \"call_transfer\",\r\n SDK_PERMISSIONS.TRANSFER_WARM,\r\n );\r\n\r\n return {\r\n disabledDialButton: !isDialAllowed,\r\n disableEndCallButton: !isEndCallAllowed,\r\n disableCallTransferButton: !isTransferEnabled,\r\n disableBlindTransfer: !isBlindAllowed,\r\n disableAttendedTransfer: !isAttendedAllowed,\r\n disableWarmTransfer: !isWarmAllowed,\r\n disableConferenceButton: !isConferenceAllowed,\r\n disableHoldButton: !isHoldAllowed,\r\n disableMuteButton: !isMuteAllowed,\r\n disabledMoreOptionsButton: false,\r\n };\r\n }\r\n}\r\n\r\nexport const sdkStateManager = new SDKStateManager();\r\n\r\nexport type { SDKStateManager };\r\n","export const STORAGE_KEY = \"call-control-sdk-state\";\r\n","import { createContext, useContext, useState, ReactNode } from \"react\";\r\nimport { Snackbar, Alert, AlertColor } from \"@mui/material\";\r\n\r\ntype ToastContextType = {\r\n\tshowToast: (message: string, severity?: AlertColor) => void;\r\n};\r\n\r\nconst ToastContext = createContext<ToastContextType | undefined>(undefined);\r\n\r\nconst noopToast: ToastContextType = {\r\n\tshowToast: (message, severity) => {\r\n\t\tconsole.warn(`[Toast outside provider] ${severity ?? \"info\"}: ${message}`);\r\n\t},\r\n};\r\n\r\nexport const useToast = () => {\r\n\tconst ctx = useContext(ToastContext);\r\n\treturn ctx ?? noopToast;\r\n};\r\n\r\nexport const ToastProvider = ({ children }: { children: ReactNode }) => {\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst [message, setMessage] = useState(\"\");\r\n\tconst [severity, setSeverity] = useState<AlertColor>(\"info\");\r\n\r\n\tconst showToast = (msg: string, sev: AlertColor = \"info\") => {\r\n\t\tsetMessage(msg);\r\n\t\tsetSeverity(sev);\r\n\t\tsetOpen(true);\r\n\t};\r\n\r\n\treturn (\r\n\t\t<ToastContext.Provider value={{ showToast }}>\r\n\t\t\t{children}\r\n\t\t\t<Snackbar\r\n\t\t\t\topen={open}\r\n\t\t\t\tcolor={severity}\r\n\t\t\t\tautoHideDuration={3000}\r\n\t\t\t\tonClose={() => setOpen(false)}\r\n\t\t\t\tanchorOrigin={{ vertical: \"top\", horizontal: \"right\" }}\r\n\t\t\t>\r\n\t\t\t\t<Alert\r\n\t\t\t\t\tvariant=\"filled\"\r\n\t\t\t\t\tseverity={severity}\r\n\t\t\t\t\tonClose={() => setOpen(false)}\r\n\t\t\t\t\tsx={{ width: \"100%\" }}\r\n\t\t\t\t>\r\n\t\t\t\t\t{message}\r\n\t\t\t\t</Alert>\r\n\t\t\t</Snackbar>\r\n\t\t</ToastContext.Provider>\r\n\t);\r\n};\r\n","import { memo } from \"react\";\r\nimport { ToastProvider } from \"../services/toastMessage\";\r\nimport React from \"react\";\r\nimport { SDKProviderProps } from \"../../types\";\r\n\r\nexport const SDKProvider = memo<SDKProviderProps>(({ children }) => {\r\n\treturn <ToastProvider>{children}</ToastProvider>;\r\n});\r\n\r\nSDKProvider.displayName = \"SDKProvider\";\r\n","import { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\n\r\n// export const IP = \"192.168.100.254\";\r\n\r\n// export const IFRAME_IP = \"10.10.95.25\"\r\n// export const IFRAME_URL = `https://${IFRAME_IP}:8089`;\r\n// export const IFRAME_API_URL = `https://${IFRAME_IP}:8000`;\r\n\r\n\r\n// export const BASE_URL = `http://${IP}:8095`;\r\n// export const WS_BASE_URL = `ws://${IP}:8095`;\r\n\r\n// export const IFRAME_URL = sdkStateManager?.getState()?.urlConfig?.iframeURL\r\n// export const IFRAME_API_URL = sdkStateManager?.getState()?.urlConfig?.iframeAPIURL\r\n\r\n// Dynamically get URLs from SDK state\r\nconst getBaseURL = () => sdkStateManager?.getState()?.urlConfig?.baseURL || \"\";\r\nconst getCoreURL = () => sdkStateManager?.getState()?.urlConfig?.coreBaseURL || \"\";\r\n\r\nexport const BASE_URL = getBaseURL();\r\nexport const CORE_URL = getCoreURL();\r\n\r\nexport const VERSION = {\r\n\tv1: \"/api/v1\",\r\n};\r\n\r\n// Dynamic endpoint getters that fetch URLs from SDK state at runtime\r\nexport const END_POINT = {\r\n\tget LOGIN() { return `${getBaseURL()}${VERSION.v1}/cti/login?provider=convox`; },\r\n\tget READY_AGENT() { return `${getCoreURL()}${VERSION.v1}/agents/ready`; },\r\n\tget UPDATE_AGENT_BREAK() { return `${getCoreURL()}${VERSION.v1}/agents/status`; },\r\n\tget CLICK_TO_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/dial`; },\r\n\tget HOLD_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hold`; },\r\n\tget MUTE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/mute`; },\r\n\tget UNMUTE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/mute`; },\r\n\tget END_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget LOGOUT() { return `${getBaseURL()}${VERSION.v1}/cti/logout?provider=convox`; },\r\n\r\n\tget CONFERENCE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/add`; },\r\n\tget CONFERENCE_MERGE_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/merge`; },\r\n\tget CONFERENCE_CALL_HOLD_OR_UN_HOLD() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hold`; },\r\n\tget CONFERENCE_CALL_MUTE_OT_UN_MUTE() { return `${getCoreURL()}${VERSION.v1}/cti/calls/mute`; },\r\n\tget CONFERENCE_CALL_END() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget CONFERENCE_CALL_END_ALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/hangup`; },\r\n\tget CONFERENCE_CALL_TRANSFER() { return `${getCoreURL()}${VERSION.v1}/cti/calls/conference/transfer`; },\r\n\tget TRANSFER_CALL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer-call`; },\r\n\tget TRANSFER_COMPLETE() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer/complete`; },\r\n\tget TRANSFER_CANCEL() { return `${getCoreURL()}${VERSION.v1}/cti/calls/transfer/cancel`; },\r\n\r\n\tget AGENTS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/users`; },\r\n\tget PROCESS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/processes-list`; },\r\n\tget BREAKS_LIST() { return `${getBaseURL()}${VERSION.v1}/cti/breaks`; },\r\n\tget TRANSFER_TO_DETAILS() { return `${getBaseURL()}${VERSION.v1}/cti/transfer-to-details?provider=convox`; },\r\n\tget SEND_NOTIFICATIONS() { return `${getBaseURL()}${VERSION.v1}/cti/notifications/send`; },\r\n\r\n\tget CALL_HISTORY() { return `${getBaseURL()}${VERSION.v1}/dashboard/call-history`; },\r\n\tget SENTIMENTAL_ANALYSIS() { return `${getBaseURL()}${VERSION.v1}/users/get_sentiment_analysis`; },\r\n\tget DISPOSITIONS() { return `${getBaseURL()}${VERSION.v1}/cti/calls/dispositions`; },\r\n\tget HOSPITALS_SERVICES() { return `${getBaseURL()}${VERSION.v1}/cti/hospital/services`; },\r\n\tget BLIEND_TRANSFER() { return `${getBaseURL()}${VERSION.v1}/cti/calls/blind_transfer?provider=convox`; },\r\n\r\n\tget AUTH_LOGOUT() { return `${getBaseURL()}${VERSION.v1}/auth/logout`; },\r\n\r\n\t// Permissions\r\n\tget USER_PERMISSIONS() { return `${getBaseURL()}${VERSION.v1}/rbac/users/me/permissions`; },\r\n\r\n\t// Supervisor Call Monitoring (Listen / Whisper / Barge via ChanSpy)\r\n\tget SUPERVISOR_CALL_LISTEN() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/listen`; },\r\n\tget SUPERVISOR_CALL_LEAVE() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/leave`; },\r\n\tget SUPERVISOR_CALL_CHANGE_MODE() { return `${getBaseURL()}${VERSION.v1}/cti/supervisor/mode`; },\r\n\r\n\t// Call History pages\r\n\tget CALLS_HISTORY() { return `${getBaseURL()}${VERSION.v1}/calls/history`; },\r\n\tget MISSED_CALLS() { return `${getBaseURL()}${VERSION.v1}/supervisor/missed-calls`; },\r\n\tRECORDING_BY_CALL: (call_uuid: string) => `${getBaseURL()}${VERSION.v1}/recordings/call/${call_uuid}`,\r\n};\r\n\r\n// export const WS_END_POINT = {\r\n// \tWS: `${WS_BASE_URL}${VERSION.v1}/cti/ws`,\r\n// };\r\n\r\n// export const STORAGE_KEY = \"call-control-sdk-state\";\r\n","import axios, { AxiosInstance, AxiosResponse, AxiosError, InternalAxiosRequestConfig } from \"axios\";\r\nimport { BASE_URL } from \"./endPoint\";\r\nimport { sdkStateManager } from \"../hooks/sdk-state\";\r\n\r\nconst DEFAULT_TOKEN = sdkStateManager.getSdkAuthToken() ?? \"\";\r\n\r\nconst REQUEST_TIMEOUT = 60000;\r\n\r\nfunction getAuthToken(): string {\r\n\treturn sdkStateManager.getSdkAuthToken() ?? \"\";\r\n}\r\n\r\nfunction createAxiosInstance(): AxiosInstance {\r\n\tconst instance = axios.create({\r\n\t\t// baseURL: sdkStateManager.getState()?.urlConfig?.baseURL,\r\n\t\theaders: {\r\n\t\t\t\"Content-Type\": \"application/json\",\r\n\t\t\tAccept: \"application/json\",\r\n\t\t\t\"x-tenant-id\": sdkStateManager.getCredentials()?.tenantId ?? \"\",\r\n\t\t\t\"x-api-key\": sdkStateManager.getCredentials()?.apiKey ?? \"\",\r\n\t\t\tAuthorization: DEFAULT_TOKEN\r\n\t\t\t\t? (DEFAULT_TOKEN.startsWith(\"Bearer \") ? DEFAULT_TOKEN : `Bearer ${DEFAULT_TOKEN}`)\r\n\t\t\t\t: \"\",\r\n\t\t},\r\n\t\ttimeout: REQUEST_TIMEOUT,\r\n\t\twithCredentials: false,\r\n\t});\r\n\r\n\tinstance.interceptors.request.use(\r\n\t\t(config: InternalAxiosRequestConfig) => {\r\n\t\t\tconst token = getAuthToken();\r\n\r\n\t\t\tif (token && config.headers) {\r\n\t\t\t\t// Only add \"Bearer \" prefix if the token doesn't already have it\r\n\t\t\t\tconst authToken = token.startsWith(\"Bearer \") ? token : `Bearer ${token}`;\r\n\t\t\t\tconfig.headers.Authorization = authToken;\r\n\t\t\t}\r\n\r\n\t\t\t// Debug log for API calls\r\n\t\t\tconsole.log(\"API Request:\", {\r\n\t\t\t\turl: config.url,\r\n\t\t\t\tmethod: config.method,\r\n\t\t\t\thasToken: !!token,\r\n\t\t\t\ttokenStartsWithBearer: token?.startsWith(\"Bearer \"),\r\n\t\t\t\theaders: {\r\n\t\t\t\t\tAuthorization: config.headers.Authorization,\r\n\t\t\t\t\t\"x-tenant-id\": config.headers[\"x-tenant-id\"],\r\n\t\t\t\t\t\"x-api-key\": config.headers[\"x-api-key\"],\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t(config as any).metadata = { startTime: new Date().getTime() };\r\n\r\n\t\t\treturn config;\r\n\t\t},\r\n\t\t(error: AxiosError) => {\r\n\t\t\tconsole.error(\"Request interceptor error:\", error);\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n\r\n\tinstance.interceptors.response.use(\r\n\t\t(response: AxiosResponse) => {\r\n\t\t\treturn response;\r\n\t\t},\r\n\t\tasync (error: AxiosError) => {\r\n\t\t\tconst originalRequest = error.config as InternalAxiosRequestConfig & { _retry?: boolean };\r\n\r\n\t\t\tif (error.response?.status === 401 && !originalRequest._retry) {\r\n\t\t\t\tsdkStateManager.setInitCheck();\r\n\t\t\t\tconsole.warn(\"Unauthorized request, attempting retry...\");\r\n\t\t\t}\r\n\r\n\t\t\tif (!error.response) {\r\n\t\t\t\tconsole.error(\"Network error:\", error.message);\r\n\t\t\t\terror.message = \"Network error: Please check your internet connection\";\r\n\t\t\t}\r\n\r\n\t\t\tif (error.response && error.response.status >= 500) {\r\n\t\t\t\tconsole.error(\"Server error:\", error.response.status, error.response.data);\r\n\t\t\t\terror.message = \"Server error: Please try again later\";\r\n\t\t\t}\r\n\r\n\t\t\treturn Promise.reject(error);\r\n\t\t}\r\n\t);\r\n\r\n\treturn instance;\r\n}\r\n\r\nconst axiosInstance: AxiosInstance = createAxiosInstance();\r\n\r\nexport default axiosInstance;\r\n"],"mappings":"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","names":["_a","jsx","_a","_a"]}
package/dist/index.d.mts CHANGED
@@ -16,6 +16,7 @@ import React from 'react';
16
16
  */
17
17
  type SDKConfig$1 = {
18
18
  disableEndCallButton?: boolean;
19
+ disableEndConference?: boolean;
19
20
  enableSmsServices?: boolean;
20
21
  enableQueueName?: boolean;
21
22
  enableRingtone?: boolean;
@@ -60,13 +61,13 @@ type CallData$1 = {
60
61
  queue_name?: string;
61
62
  mobileNumber?: string;
62
63
  callReferenceId?: string;
63
- convoxId?: string;
64
+ callId?: string;
64
65
  type?: string;
65
66
  status: string;
66
67
  agent_id: number;
67
68
  phone_number?: string;
68
69
  event_time?: string;
69
- convox_id?: string;
70
+ call_id?: string;
70
71
  process_id?: string;
71
72
  process_name?: string;
72
73
  mute?: number;
@@ -94,7 +95,7 @@ type SDKState$1 = {
94
95
  sdkConfig: SDKConfig$1 | null;
95
96
  urlConfig: any | null;
96
97
  isInitialized: boolean;
97
- convox_id?: string;
98
+ call_id?: string;
98
99
  process_id?: number;
99
100
  callStartTime: number | null;
100
101
  position?: { x: number; y: number };
@@ -645,6 +646,7 @@ interface CallData {
645
646
  */
646
647
  interface SDKConfig {
647
648
  disableEndCallButton?: boolean;
649
+ disableEndConference?: boolean;
648
650
  disabledDialButton?: boolean;
649
651
  enableSmsServices?: boolean;
650
652
  enableQueueName?: boolean;
@@ -715,7 +717,7 @@ interface CallControlPanelProps {
715
717
  * any omitted field falls back to the current session/call state automatically.
716
718
  *
717
719
  * @properties
718
- * - `convox_id?: string` - Convox call ID (defaults to active call's convox_id)
720
+ * - `call_id?: string` - Convox call ID (defaults to active call's call_id)
719
721
  * - `agent_id?: string` - Agent identifier (defaults to logged-in agent)
720
722
  * - `set_followUp?: string` - Whether a follow-up is required: "Y" or "N" (default: "N")
721
723
  * - `callback_date?: string` - Scheduled callback date (YYYY-MM-DD)
@@ -723,7 +725,7 @@ interface CallControlPanelProps {
723
725
  * - `callback_mins?: number` - Scheduled callback minute (0–59)
724
726
  * - `mobile_number?: string` - Customer phone number (defaults to active call's phone_number)
725
727
  * - `list_comments?: string` - Optional comments for the call log
726
- * - `call_reference_id?: string` - Call reference ID (defaults to active call's convox_id)
728
+ * - `call_reference_id?: string` - Call reference ID (defaults to active call's call_id)
727
729
  * - `disposition?: string` - Call outcome code (default: "RES")
728
730
  * - `line_number?: number` - Conference line number (default: 0)
729
731
  * - `reason?: string` - End reason sent to server (default: "normal")
@@ -752,7 +754,7 @@ interface CallControlPanelProps {
752
754
  * @author CTI SDK Team
753
755
  */
754
756
  interface EndCallPayload {
755
- convox_id?: string;
757
+ call_id?: string;
756
758
  agent_id?: string;
757
759
  set_followUp?: string;
758
760
  callback_date?: string;
@@ -1080,7 +1082,7 @@ interface ProcessData {
1080
1082
  * Contains information about the current call
1081
1083
  *
1082
1084
  * @properties
1083
- * - `convox_id: string` - 🔗 Call reference identifier
1085
+ * - `call_id: string` - 🔗 Call reference identifier
1084
1086
  * - `phone_number: string` - 📱 Customer phone number
1085
1087
  *
1086
1088
  * @since 1.0.0
@@ -1092,7 +1094,7 @@ interface EndCallPayLoadData {
1092
1094
  * @description Unique identifier for the call
1093
1095
  * @type {string}
1094
1096
  */
1095
- convox_id: string;
1097
+ call_id: string;
1096
1098
 
1097
1099
  /**
1098
1100
  * 📱 Customer phone number
@@ -1656,13 +1658,17 @@ interface StartCallPayload {
1656
1658
  /** Optional auto-answer flag; defaults to false when omitted. */
1657
1659
  auto_answer?: boolean;
1658
1660
  /** Optional Convox call id passthrough. */
1659
- convox_id?: string;
1661
+ call_id?: string;
1660
1662
  /** Optional caller-provided reference id. */
1661
1663
  reference_id?: string;
1662
1664
  /** Optional source identifier (e.g. campaign, dialpad). */
1663
1665
  call_source?: string;
1664
1666
  /** Optional case id passthrough. */
1665
1667
  caseId?: string;
1668
+ /** Whether the call is being made during wrap-up. */
1669
+ isWrapup?: boolean;
1670
+ /** Convox call UUID of the parent call; used for wrap-up chaining. */
1671
+ parentCallUuid?: string;
1666
1672
  }
1667
1673
 
1668
1674
  interface ConferenceCallPayload {
package/dist/index.d.ts CHANGED
@@ -16,6 +16,7 @@ import React from 'react';
16
16
  */
17
17
  type SDKConfig$1 = {
18
18
  disableEndCallButton?: boolean;
19
+ disableEndConference?: boolean;
19
20
  enableSmsServices?: boolean;
20
21
  enableQueueName?: boolean;
21
22
  enableRingtone?: boolean;
@@ -60,13 +61,13 @@ type CallData$1 = {
60
61
  queue_name?: string;
61
62
  mobileNumber?: string;
62
63
  callReferenceId?: string;
63
- convoxId?: string;
64
+ callId?: string;
64
65
  type?: string;
65
66
  status: string;
66
67
  agent_id: number;
67
68
  phone_number?: string;
68
69
  event_time?: string;
69
- convox_id?: string;
70
+ call_id?: string;
70
71
  process_id?: string;
71
72
  process_name?: string;
72
73
  mute?: number;
@@ -94,7 +95,7 @@ type SDKState$1 = {
94
95
  sdkConfig: SDKConfig$1 | null;
95
96
  urlConfig: any | null;
96
97
  isInitialized: boolean;
97
- convox_id?: string;
98
+ call_id?: string;
98
99
  process_id?: number;
99
100
  callStartTime: number | null;
100
101
  position?: { x: number; y: number };
@@ -645,6 +646,7 @@ interface CallData {
645
646
  */
646
647
  interface SDKConfig {
647
648
  disableEndCallButton?: boolean;
649
+ disableEndConference?: boolean;
648
650
  disabledDialButton?: boolean;
649
651
  enableSmsServices?: boolean;
650
652
  enableQueueName?: boolean;
@@ -715,7 +717,7 @@ interface CallControlPanelProps {
715
717
  * any omitted field falls back to the current session/call state automatically.
716
718
  *
717
719
  * @properties
718
- * - `convox_id?: string` - Convox call ID (defaults to active call's convox_id)
720
+ * - `call_id?: string` - Convox call ID (defaults to active call's call_id)
719
721
  * - `agent_id?: string` - Agent identifier (defaults to logged-in agent)
720
722
  * - `set_followUp?: string` - Whether a follow-up is required: "Y" or "N" (default: "N")
721
723
  * - `callback_date?: string` - Scheduled callback date (YYYY-MM-DD)
@@ -723,7 +725,7 @@ interface CallControlPanelProps {
723
725
  * - `callback_mins?: number` - Scheduled callback minute (0–59)
724
726
  * - `mobile_number?: string` - Customer phone number (defaults to active call's phone_number)
725
727
  * - `list_comments?: string` - Optional comments for the call log
726
- * - `call_reference_id?: string` - Call reference ID (defaults to active call's convox_id)
728
+ * - `call_reference_id?: string` - Call reference ID (defaults to active call's call_id)
727
729
  * - `disposition?: string` - Call outcome code (default: "RES")
728
730
  * - `line_number?: number` - Conference line number (default: 0)
729
731
  * - `reason?: string` - End reason sent to server (default: "normal")
@@ -752,7 +754,7 @@ interface CallControlPanelProps {
752
754
  * @author CTI SDK Team
753
755
  */
754
756
  interface EndCallPayload {
755
- convox_id?: string;
757
+ call_id?: string;
756
758
  agent_id?: string;
757
759
  set_followUp?: string;
758
760
  callback_date?: string;
@@ -1080,7 +1082,7 @@ interface ProcessData {
1080
1082
  * Contains information about the current call
1081
1083
  *
1082
1084
  * @properties
1083
- * - `convox_id: string` - 🔗 Call reference identifier
1085
+ * - `call_id: string` - 🔗 Call reference identifier
1084
1086
  * - `phone_number: string` - 📱 Customer phone number
1085
1087
  *
1086
1088
  * @since 1.0.0
@@ -1092,7 +1094,7 @@ interface EndCallPayLoadData {
1092
1094
  * @description Unique identifier for the call
1093
1095
  * @type {string}
1094
1096
  */
1095
- convox_id: string;
1097
+ call_id: string;
1096
1098
 
1097
1099
  /**
1098
1100
  * 📱 Customer phone number
@@ -1656,13 +1658,17 @@ interface StartCallPayload {
1656
1658
  /** Optional auto-answer flag; defaults to false when omitted. */
1657
1659
  auto_answer?: boolean;
1658
1660
  /** Optional Convox call id passthrough. */
1659
- convox_id?: string;
1661
+ call_id?: string;
1660
1662
  /** Optional caller-provided reference id. */
1661
1663
  reference_id?: string;
1662
1664
  /** Optional source identifier (e.g. campaign, dialpad). */
1663
1665
  call_source?: string;
1664
1666
  /** Optional case id passthrough. */
1665
1667
  caseId?: string;
1668
+ /** Whether the call is being made during wrap-up. */
1669
+ isWrapup?: boolean;
1670
+ /** Convox call UUID of the parent call; used for wrap-up chaining. */
1671
+ parentCallUuid?: string;
1666
1672
  }
1667
1673
 
1668
1674
  interface ConferenceCallPayload {