@webex/contact-center 3.12.0-task-refactor.9 → 3.12.0-task-refactor.11

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.
Files changed (35) hide show
  1. package/dist/cc.js +51 -2
  2. package/dist/cc.js.map +1 -1
  3. package/dist/config.js +6 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/services/config/constants.js +1 -1
  6. package/dist/services/config/constants.js.map +1 -1
  7. package/dist/services/task/Task.js +10 -4
  8. package/dist/services/task/Task.js.map +1 -1
  9. package/dist/services/task/TaskManager.js +3 -0
  10. package/dist/services/task/TaskManager.js.map +1 -1
  11. package/dist/services/task/state-machine/uiControlsComputer.js +1 -1
  12. package/dist/services/task/state-machine/uiControlsComputer.js.map +1 -1
  13. package/dist/services/task/types.js +10 -0
  14. package/dist/services/task/types.js.map +1 -1
  15. package/dist/types/cc.d.ts +17 -0
  16. package/dist/types/config.d.ts +6 -0
  17. package/dist/types/services/task/types.d.ts +11 -1
  18. package/dist/types/types.d.ts +2 -0
  19. package/dist/types.js.map +1 -1
  20. package/dist/webex.js +1 -1
  21. package/package.json +1 -1
  22. package/src/cc.ts +74 -2
  23. package/src/config.ts +6 -0
  24. package/src/services/config/constants.ts +1 -1
  25. package/src/services/task/Task.ts +9 -4
  26. package/src/services/task/TaskManager.ts +4 -0
  27. package/src/services/task/state-machine/uiControlsComputer.ts +1 -1
  28. package/src/services/task/types.ts +11 -0
  29. package/src/types.ts +2 -0
  30. package/test/unit/spec/cc.ts +139 -0
  31. package/test/unit/spec/services/config/index.ts +1 -1
  32. package/test/unit/spec/services/task/TaskManager.ts +14 -0
  33. package/test/unit/spec/services/task/state-machine/uiControlsComputer.ts +47 -0
  34. package/umd/contact-center.min.js +2 -2
  35. package/umd/contact-center.min.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_PAGE","exports","DEFAULT_PAGE_SIZE","AGENT_STATE_AVAILABLE_ID","AGENT_STATE_AVAILABLE","AGENT_STATE_AVAILABLE_DESCRIPTION","DEFAULT_AUXCODE_ATTRIBUTES","METHODS","GET_AGENT_CONFIG","GET_USER_USING_CI","GET_DESKTOP_PROFILE_BY_ID","GET_MULTIMEDIA_PROFILE_BY_ID","GET_LIST_OF_TEAMS","GET_ALL_TEAMS","GET_LIST_OF_AUX_CODES","GET_ALL_AUX_CODES","GET_SITE_INFO","GET_ORG_INFO","GET_ORGANIZATION_SETTING","GET_TENANT_DATA","GET_URL_MAPPING","GET_DIAL_PLAN_DATA","GET_AI_FEATURE_FLAGS","GET_QUEUES","PARSE_AGENT_CONFIGS","GET_URL_MAPPING_UTIL","GET_MSFT_CONFIG","GET_WEBEX_CONFIG","GET_DEFAULT_AGENT_DN","GET_FILTERED_DIALPLAN_ENTRIES","GET_FILTER_AUX_CODES","GET_DEFAULT_WRAP_UP_CODE","endPointMap","userByCI","orgId","agentId","desktopProfile","desktopProfileId","multimediaProfile","multimediaProfileId","listTeams","page","pageSize","filter","length","listAuxCodes","attributes","orgInfo","orgSettings","siteInfo","siteId","tenantData","urlMapping","dialPlan","aiFeature","queueList","queryParams","entryPointList","addressBookEntries","addressBookId","outdialAniEntries","outdialANI"],"sources":["constants.ts"],"sourcesContent":["// making query params configurable for List Teams and List Aux Codes API\nexport const DEFAULT_PAGE = 0;\n\n/**\n * Default page size for paginated API requests.\n * @type {number}\n * @public\n * @example\n * const pageSize = DEFAULT_PAGE_SIZE; // 100\n * @ignore\n */\nexport const DEFAULT_PAGE_SIZE = 100;\n\n/**\n * Agent state ID for 'Available'.\n * @type {string}\n * @public\n * @ignore\n */\nexport const AGENT_STATE_AVAILABLE_ID = '0';\n\n/**\n * Agent state label for 'Available'.\n * @type {string}\n * @public\n * @ignore\n */\nexport const AGENT_STATE_AVAILABLE = 'Available';\n\n/**\n * Description for the 'Available' agent state.\n * @type {string}\n * @public\n * @ignore\n */\nexport const AGENT_STATE_AVAILABLE_DESCRIPTION = 'Agent is available to receive calls';\n\n/**\n * Default attributes for auxiliary code API requests.\n * @type {string[]}\n * @public\n * @ignore\n */\nexport const DEFAULT_AUXCODE_ATTRIBUTES = [\n 'id',\n 'isSystemCode',\n 'name',\n 'defaultCode',\n 'workTypeCode',\n 'active',\n];\n\n// Method names for config services\nexport const METHODS = {\n // AgentConfigService methods\n GET_AGENT_CONFIG: 'getAgentConfig',\n GET_USER_USING_CI: 'getUserUsingCI',\n GET_DESKTOP_PROFILE_BY_ID: 'getDesktopProfileById',\n GET_MULTIMEDIA_PROFILE_BY_ID: 'getMultimediaProfileById',\n GET_LIST_OF_TEAMS: 'getListOfTeams',\n GET_ALL_TEAMS: 'getAllTeams',\n GET_LIST_OF_AUX_CODES: 'getListOfAuxCodes',\n GET_ALL_AUX_CODES: 'getAllAuxCodes',\n GET_SITE_INFO: 'getSiteInfo',\n GET_ORG_INFO: 'getOrgInfo',\n GET_ORGANIZATION_SETTING: 'getOrganizationSetting',\n GET_TENANT_DATA: 'getTenantData',\n GET_URL_MAPPING: 'getURLMapping',\n GET_DIAL_PLAN_DATA: 'getDialPlanData',\n GET_AI_FEATURE_FLAGS: 'getAIFeatureFlags',\n GET_QUEUES: 'getQueues',\n\n // Util methods\n PARSE_AGENT_CONFIGS: 'parseAgentConfigs',\n GET_URL_MAPPING_UTIL: 'getUrlMapping',\n GET_MSFT_CONFIG: 'getMsftConfig',\n GET_WEBEX_CONFIG: 'getWebexConfig',\n GET_DEFAULT_AGENT_DN: 'getDefaultAgentDN',\n GET_FILTERED_DIALPLAN_ENTRIES: 'getFilteredDialplanEntries',\n GET_FILTER_AUX_CODES: 'getFilterAuxCodes',\n GET_DEFAULT_WRAP_UP_CODE: 'getDefaultWrapUpCode',\n};\n\n/**\n * Maps API endpoint names to functions that generate endpoint URLs for various organization resources.\n * @public\n * @example\n * const url = endPointMap.userByCI('org123', 'agent456');\n */\nexport const endPointMap = {\n /**\n * Gets the endpoint for a user by CI user ID.\n * @param orgId - Organization ID.\n * @param agentId - Agent ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.userByCI('org123', 'agent456');\n * @ignore\n */\n userByCI: (orgId: string, agentId: string) =>\n `organization/${orgId}/user/by-ci-user-id/${agentId}`,\n\n /**\n * Gets the endpoint for a desktop profile.\n * @param orgId - Organization ID.\n * @param desktopProfileId - Desktop profile ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.desktopProfile('org123', 'profile789');\n * @ignore\n */\n desktopProfile: (orgId: string, desktopProfileId: string) =>\n `organization/${orgId}/agent-profile/${desktopProfileId}`,\n\n /**\n * Gets the endpoint for a multimedia profile.\n * @param orgId - Organization ID.\n * @param multimediaProfileId - Multimedia profile ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.multimediaProfile('org123', 'multi456');\n * @ignore\n */\n multimediaProfile: (orgId: string, multimediaProfileId: string) =>\n `organization/${orgId}/multimedia-profile/${multimediaProfileId}`,\n\n /**\n * Gets the endpoint for listing teams with optional filters.\n * @param orgId - Organization ID.\n * @param page - Page number.\n * @param pageSize - Page size.\n * @param filter - Array of team IDs to filter.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.listTeams('org123', 0, 100, ['team1', 'team2']);\n * @ignore\n */\n listTeams: (orgId: string, page: number, pageSize: number, filter: string[]) =>\n `organization/${orgId}/v2/team?page=${page}&pageSize=${pageSize}${\n filter && filter.length > 0 ? `&filter=id=in=(${filter})` : ''\n }`,\n\n /**\n * Gets the endpoint for listing auxiliary codes with optional filters and attributes.\n * @param orgId - Organization ID.\n * @param page - Page number.\n * @param pageSize - Page size.\n * @param filter - Array of auxiliary code IDs to filter.\n * @param attributes - Array of attribute names to include.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.listAuxCodes('org123', 0, 100, ['aux1'], ['id', 'name']);\n * @ignore\n */\n listAuxCodes: (\n orgId: string,\n page: number,\n pageSize: number,\n filter: string[],\n attributes: string[]\n ) =>\n `organization/${orgId}/v2/auxiliary-code?page=${page}&pageSize=${pageSize}${\n filter && filter.length > 0 ? `&filter=id=in=(${filter})` : ''\n }&attributes=${attributes}`,\n\n /**\n * Gets the endpoint for organization info.\n * @param orgId - Organization ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.orgInfo('org123');\n * @ignore\n */\n orgInfo: (orgId: string) => `organization/${orgId}`,\n\n /**\n * Gets the endpoint for organization settings.\n * @param orgId - Organization ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.orgSettings('org123');\n * @ignore\n */\n orgSettings: (orgId: string) => `organization/${orgId}/v2/organization-setting?agentView=true`,\n\n /**\n * Gets the endpoint for site info.\n * @param orgId - Organization ID.\n * @param siteId - Site ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.siteInfo('org123', 'site456');\n * @ignore\n */\n siteInfo: (orgId: string, siteId: string) => `organization/${orgId}/site/${siteId}`,\n\n /**\n * Gets the endpoint for tenant configuration data.\n * @param orgId - Organization ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.tenantData('org123');\n * @ignore\n */\n tenantData: (orgId: string) => `organization/${orgId}/v2/tenant-configuration?agentView=true`,\n\n /**\n * Gets the endpoint for organization URL mapping.\n * @param orgId - Organization ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.urlMapping('org123');\n * @ignore\n */\n urlMapping: (orgId: string) => `organization/${orgId}/v2/org-url-mapping?sort=name,ASC`,\n\n /**\n * Gets the endpoint for dial plan.\n * @param orgId - Organization ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.dialPlan('org123');\n * @ignore\n */\n dialPlan: (orgId: string) => `organization/${orgId}/dial-plan?agentView=true`,\n /**\n * Gets the endpoint for listing AI feature flags.\n * @param orgId - Organization ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.aiFeatureFlags('org123');\n * @ignore\n */\n aiFeature: (orgId: string) => `organization/${orgId}/v2/ai-feature?page=0&pageSize=100`,\n\n /**\n * Gets the endpoint for the queue list with custom query parameters.\n * @param orgId - Organization ID.\n * @param queryParams - Query parameters string.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.queueList('org123', 'page=0&pageSize=10');\n * @ignore\n */\n queueList: (orgId: string, queryParams: string) =>\n `/organization/${orgId}/v2/contact-service-queue?${queryParams}`,\n /**\n * Gets the endpoint for entry points list with custom query parameters.\n * @param orgId - Organization ID.\n * @param queryParams - Query parameters string.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.entryPointList('org123', 'page=0&pageSize=10');\n * @ignore\n */\n entryPointList: (orgId: string, queryParams: string) =>\n `/organization/${orgId}/v2/entry-point?${queryParams}`,\n /**\n * Gets the endpoint for address book entries with custom query parameters.\n * @param orgId - Organization ID.\n * @param addressBookId - Address book ID.\n * @param queryParams - Query parameters string.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.addressBookEntries('org123', 'book456', 'page=0&pageSize=10');\n * @ignore\n */\n addressBookEntries: (orgId: string, addressBookId: string, queryParams: string) =>\n `/organization/${orgId}/v2/address-book/${addressBookId}/entry?${queryParams}`,\n\n /**\n * Gets the endpoint for outdial ANI entries with custom query parameters.\n * @param orgId - Organization ID.\n * @param outdialANI - Outdial ANI ID.\n * @param queryParams - Query parameters string.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.outdialAniEntries('org123', 'ani456', 'page=0&pageSize=10');\n * @ignore\n */\n outdialAniEntries: (orgId: string, outdialANI: string, queryParams: string) =>\n `organization/${orgId}/v2/outdial-ani/${outdialANI}/entry${\n queryParams ? `?${queryParams}` : ''\n }`,\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["DEFAULT_PAGE","exports","DEFAULT_PAGE_SIZE","AGENT_STATE_AVAILABLE_ID","AGENT_STATE_AVAILABLE","AGENT_STATE_AVAILABLE_DESCRIPTION","DEFAULT_AUXCODE_ATTRIBUTES","METHODS","GET_AGENT_CONFIG","GET_USER_USING_CI","GET_DESKTOP_PROFILE_BY_ID","GET_MULTIMEDIA_PROFILE_BY_ID","GET_LIST_OF_TEAMS","GET_ALL_TEAMS","GET_LIST_OF_AUX_CODES","GET_ALL_AUX_CODES","GET_SITE_INFO","GET_ORG_INFO","GET_ORGANIZATION_SETTING","GET_TENANT_DATA","GET_URL_MAPPING","GET_DIAL_PLAN_DATA","GET_AI_FEATURE_FLAGS","GET_QUEUES","PARSE_AGENT_CONFIGS","GET_URL_MAPPING_UTIL","GET_MSFT_CONFIG","GET_WEBEX_CONFIG","GET_DEFAULT_AGENT_DN","GET_FILTERED_DIALPLAN_ENTRIES","GET_FILTER_AUX_CODES","GET_DEFAULT_WRAP_UP_CODE","endPointMap","userByCI","orgId","agentId","desktopProfile","desktopProfileId","multimediaProfile","multimediaProfileId","listTeams","page","pageSize","filter","length","listAuxCodes","attributes","orgInfo","orgSettings","siteInfo","siteId","tenantData","urlMapping","dialPlan","aiFeature","queueList","queryParams","entryPointList","addressBookEntries","addressBookId","outdialAniEntries","outdialANI"],"sources":["constants.ts"],"sourcesContent":["// making query params configurable for List Teams and List Aux Codes API\nexport const DEFAULT_PAGE = 0;\n\n/**\n * Default page size for paginated API requests.\n * @type {number}\n * @public\n * @example\n * const pageSize = DEFAULT_PAGE_SIZE; // 100\n * @ignore\n */\nexport const DEFAULT_PAGE_SIZE = 100;\n\n/**\n * Agent state ID for 'Available'.\n * @type {string}\n * @public\n * @ignore\n */\nexport const AGENT_STATE_AVAILABLE_ID = '0';\n\n/**\n * Agent state label for 'Available'.\n * @type {string}\n * @public\n * @ignore\n */\nexport const AGENT_STATE_AVAILABLE = 'Available';\n\n/**\n * Description for the 'Available' agent state.\n * @type {string}\n * @public\n * @ignore\n */\nexport const AGENT_STATE_AVAILABLE_DESCRIPTION = 'Agent is available to receive calls';\n\n/**\n * Default attributes for auxiliary code API requests.\n * @type {string[]}\n * @public\n * @ignore\n */\nexport const DEFAULT_AUXCODE_ATTRIBUTES = [\n 'id',\n 'isSystemCode',\n 'name',\n 'defaultCode',\n 'workTypeCode',\n 'active',\n];\n\n// Method names for config services\nexport const METHODS = {\n // AgentConfigService methods\n GET_AGENT_CONFIG: 'getAgentConfig',\n GET_USER_USING_CI: 'getUserUsingCI',\n GET_DESKTOP_PROFILE_BY_ID: 'getDesktopProfileById',\n GET_MULTIMEDIA_PROFILE_BY_ID: 'getMultimediaProfileById',\n GET_LIST_OF_TEAMS: 'getListOfTeams',\n GET_ALL_TEAMS: 'getAllTeams',\n GET_LIST_OF_AUX_CODES: 'getListOfAuxCodes',\n GET_ALL_AUX_CODES: 'getAllAuxCodes',\n GET_SITE_INFO: 'getSiteInfo',\n GET_ORG_INFO: 'getOrgInfo',\n GET_ORGANIZATION_SETTING: 'getOrganizationSetting',\n GET_TENANT_DATA: 'getTenantData',\n GET_URL_MAPPING: 'getURLMapping',\n GET_DIAL_PLAN_DATA: 'getDialPlanData',\n GET_AI_FEATURE_FLAGS: 'getAIFeatureFlags',\n GET_QUEUES: 'getQueues',\n\n // Util methods\n PARSE_AGENT_CONFIGS: 'parseAgentConfigs',\n GET_URL_MAPPING_UTIL: 'getUrlMapping',\n GET_MSFT_CONFIG: 'getMsftConfig',\n GET_WEBEX_CONFIG: 'getWebexConfig',\n GET_DEFAULT_AGENT_DN: 'getDefaultAgentDN',\n GET_FILTERED_DIALPLAN_ENTRIES: 'getFilteredDialplanEntries',\n GET_FILTER_AUX_CODES: 'getFilterAuxCodes',\n GET_DEFAULT_WRAP_UP_CODE: 'getDefaultWrapUpCode',\n};\n\n/**\n * Maps API endpoint names to functions that generate endpoint URLs for various organization resources.\n * @public\n * @example\n * const url = endPointMap.userByCI('org123', 'agent456');\n */\nexport const endPointMap = {\n /**\n * Gets the endpoint for a user by CI user ID.\n * @param orgId - Organization ID.\n * @param agentId - Agent ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.userByCI('org123', 'agent456');\n * @ignore\n */\n userByCI: (orgId: string, agentId: string) =>\n `organization/${orgId}/user/by-ci-user-id/${agentId}`,\n\n /**\n * Gets the endpoint for a desktop profile.\n * @param orgId - Organization ID.\n * @param desktopProfileId - Desktop profile ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.desktopProfile('org123', 'profile789');\n * @ignore\n */\n desktopProfile: (orgId: string, desktopProfileId: string) =>\n `organization/${orgId}/agent-profile/${desktopProfileId}`,\n\n /**\n * Gets the endpoint for a multimedia profile.\n * @param orgId - Organization ID.\n * @param multimediaProfileId - Multimedia profile ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.multimediaProfile('org123', 'multi456');\n * @ignore\n */\n multimediaProfile: (orgId: string, multimediaProfileId: string) =>\n `organization/${orgId}/multimedia-profile/${multimediaProfileId}`,\n\n /**\n * Gets the endpoint for listing teams with optional filters.\n * @param orgId - Organization ID.\n * @param page - Page number.\n * @param pageSize - Page size.\n * @param filter - Array of team IDs to filter.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.listTeams('org123', 0, 100, ['team1', 'team2']);\n * @ignore\n */\n listTeams: (orgId: string, page: number, pageSize: number, filter: string[]) =>\n `organization/${orgId}/v2/team?page=${page}&pageSize=${pageSize}${\n filter && filter.length > 0 ? `&filter=id=in=(${filter})` : ''\n }`,\n\n /**\n * Gets the endpoint for listing auxiliary codes with optional filters and attributes.\n * @param orgId - Organization ID.\n * @param page - Page number.\n * @param pageSize - Page size.\n * @param filter - Array of auxiliary code IDs to filter.\n * @param attributes - Array of attribute names to include.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.listAuxCodes('org123', 0, 100, ['aux1'], ['id', 'name']);\n * @ignore\n */\n listAuxCodes: (\n orgId: string,\n page: number,\n pageSize: number,\n filter: string[],\n attributes: string[]\n ) =>\n `organization/${orgId}/v2/auxiliary-code?page=${page}&pageSize=${pageSize}${\n filter && filter.length > 0 ? `&filter=id=in=(${filter})` : ''\n }&attributes=${attributes}&desktopProfileFilter=true`,\n\n /**\n * Gets the endpoint for organization info.\n * @param orgId - Organization ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.orgInfo('org123');\n * @ignore\n */\n orgInfo: (orgId: string) => `organization/${orgId}`,\n\n /**\n * Gets the endpoint for organization settings.\n * @param orgId - Organization ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.orgSettings('org123');\n * @ignore\n */\n orgSettings: (orgId: string) => `organization/${orgId}/v2/organization-setting?agentView=true`,\n\n /**\n * Gets the endpoint for site info.\n * @param orgId - Organization ID.\n * @param siteId - Site ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.siteInfo('org123', 'site456');\n * @ignore\n */\n siteInfo: (orgId: string, siteId: string) => `organization/${orgId}/site/${siteId}`,\n\n /**\n * Gets the endpoint for tenant configuration data.\n * @param orgId - Organization ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.tenantData('org123');\n * @ignore\n */\n tenantData: (orgId: string) => `organization/${orgId}/v2/tenant-configuration?agentView=true`,\n\n /**\n * Gets the endpoint for organization URL mapping.\n * @param orgId - Organization ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.urlMapping('org123');\n * @ignore\n */\n urlMapping: (orgId: string) => `organization/${orgId}/v2/org-url-mapping?sort=name,ASC`,\n\n /**\n * Gets the endpoint for dial plan.\n * @param orgId - Organization ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.dialPlan('org123');\n * @ignore\n */\n dialPlan: (orgId: string) => `organization/${orgId}/dial-plan?agentView=true`,\n /**\n * Gets the endpoint for listing AI feature flags.\n * @param orgId - Organization ID.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.aiFeatureFlags('org123');\n * @ignore\n */\n aiFeature: (orgId: string) => `organization/${orgId}/v2/ai-feature?page=0&pageSize=100`,\n\n /**\n * Gets the endpoint for the queue list with custom query parameters.\n * @param orgId - Organization ID.\n * @param queryParams - Query parameters string.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.queueList('org123', 'page=0&pageSize=10');\n * @ignore\n */\n queueList: (orgId: string, queryParams: string) =>\n `/organization/${orgId}/v2/contact-service-queue?${queryParams}`,\n /**\n * Gets the endpoint for entry points list with custom query parameters.\n * @param orgId - Organization ID.\n * @param queryParams - Query parameters string.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.entryPointList('org123', 'page=0&pageSize=10');\n * @ignore\n */\n entryPointList: (orgId: string, queryParams: string) =>\n `/organization/${orgId}/v2/entry-point?${queryParams}`,\n /**\n * Gets the endpoint for address book entries with custom query parameters.\n * @param orgId - Organization ID.\n * @param addressBookId - Address book ID.\n * @param queryParams - Query parameters string.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.addressBookEntries('org123', 'book456', 'page=0&pageSize=10');\n * @ignore\n */\n addressBookEntries: (orgId: string, addressBookId: string, queryParams: string) =>\n `/organization/${orgId}/v2/address-book/${addressBookId}/entry?${queryParams}`,\n\n /**\n * Gets the endpoint for outdial ANI entries with custom query parameters.\n * @param orgId - Organization ID.\n * @param outdialANI - Outdial ANI ID.\n * @param queryParams - Query parameters string.\n * @returns The endpoint URL string.\n * @public\n * @example\n * const url = endPointMap.outdialAniEntries('org123', 'ani456', 'page=0&pageSize=10');\n * @ignore\n */\n outdialAniEntries: (orgId: string, outdialANI: string, queryParams: string) =>\n `organization/${orgId}/v2/outdial-ani/${outdialANI}/entry${\n queryParams ? `?${queryParams}` : ''\n }`,\n};\n"],"mappings":"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","ignoreList":[]}
@@ -200,7 +200,8 @@ class Task extends _events.EventEmitter {
200
200
  }
201
201
  const currentState = snapshot.value;
202
202
  const context = snapshot.context;
203
- return (0, _uiControlsComputer.computeUIControls)(currentState, context, this.data);
203
+ const uiControls = (0, _uiControlsComputer.computeUIControls)(currentState, context, this.data);
204
+ return uiControls;
204
205
  }
205
206
 
206
207
  /**
@@ -318,9 +319,13 @@ class Task extends _events.EventEmitter {
318
319
  emitTaskOfferContact: this.createEmitSelfAction(_types.TASK_EVENTS.TASK_OFFER_CONTACT, {
319
320
  updateTaskData: true
320
321
  }),
321
- emitTaskAssigned: this.createEmitSelfAction(_types.TASK_EVENTS.TASK_ASSIGNED, {
322
- updateTaskData: true
323
- }),
322
+ emitTaskAssigned: ({
323
+ event
324
+ }) => {
325
+ this.updateTaskFromEvent(event);
326
+ this.emit(_types.TASK_EVENTS.TASK_ASSIGNED, this);
327
+ this.emit(_types.TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, this);
328
+ },
324
329
  emitTaskEnd: this.createEmitSelfAction(_types.TASK_EVENTS.TASK_END, {
325
330
  updateTaskData: true
326
331
  }),
@@ -339,6 +344,7 @@ class Task extends _events.EventEmitter {
339
344
  } else {
340
345
  this.emit(_types.TASK_EVENTS.TASK_CONSULTING, this);
341
346
  }
347
+ this.emit(_types.TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, this);
342
348
  },
343
349
  emitTaskConsultAccepted: this.createEmitSelfAction(_types.TASK_EVENTS.TASK_CONSULT_ACCEPTED),
344
350
  emitTaskConsultEnd: this.createEmitSelfAction(_types.TASK_EVENTS.TASK_CONSULT_END, {
@@ -1 +1 @@
1
- {"version":3,"names":["_events","require","_xstate","_types","_constants","_constants2","_Utils","_MetricsManager","_interopRequireDefault","_constants3","_loggerProxy","_stateMachine","_uiControlsComputer","_AutoWrapup","e","__esModule","default","Task","EventEmitter","constructor","contact","data","uiControlConfig","wrapupData","agentId","channelType","resolveChannelType","metricsManager","MetricsManager","getInstance","webCallMap","currentUiControls","getDefaultUIControls","initializeStateMachine","setupAutoWrapupTimer","mediaType","interaction","MEDIA_CHANNEL","TELEPHONY","TASK_CHANNEL_TYPE","VOICE","DIGITAL","decline","unsupportedMethodError","pauseRecording","resumeRecording","resumeRecordingPayload","consult","consultPayload","endConsult","consultEndPayload","consultTransfer","consultTransferPayload","consultConference","exitConference","transferConference","switchCall","toggleMute","unregisterWebCallListeners","LoggerProxy","log","module","CC_FILE","method","interactionId","cancelAutoWrapupTimer","autoWrapup","clear","undefined","hold","resume","holdResume","uiControls","updateUiControls","forceEmit","nextControls","computeUIControls","shouldEmit","haveUIControlsChanged","emit","TASK_EVENTS","TASK_UI_CONTROLS_UPDATED","machine","createTaskStateMachine","actions","getStateMachineActionOverrides","stateMachineService","createActor","subscribe","snapshot","previousState","lastState","currentState","value","eventType","event","type","state","start","sendStateMachineEvent","send","getCurrentState","getSnapshot","context","stopStateMachine","stop","extractTaskDataFromEvent","taskData","autoAnswerIfNeeded","autoAnswerSupported","voiceVariant","VOICE_VARIANT","WEBRTC","shouldAutoAnswer","isAutoAnswering","info","TASK_FILE","accept","trackEvent","METRIC_EVENT_NAMES","TASK_AUTO_ANSWER_SUCCESS","taskId","isAutoAnswered","TASK_AUTO_ANSWERED","error","updateTaskData","TASK_AUTO_ANSWER_FAILED","message","updateTaskFromEvent","getCommonActionOverrides","getChannelSpecificActionOverrides","createEmitSelfAction","taskEvent","syncTaskDataFromEvent","emitTaskIncoming","TASK_INCOMING","emitTaskHydrate","TASK_HYDRATE","emitTaskOfferContact","TASK_OFFER_CONTACT","emitTaskAssigned","TASK_ASSIGNED","emitTaskEnd","TASK_END","emitTaskOfferConsult","TASK_OFFER_CONSULT","emitTaskConsultCreated","TASK_CONSULT_CREATED","emitTaskConsulting","isConsulted","TASK_CONSULT_ACCEPTED","TASK_CONSULTING","emitTaskConsultAccepted","emitTaskConsultEnd","TASK_CONSULT_END","emitTaskConsultQueueCancelled","TASK_CONSULT_QUEUE_CANCELLED","emitTaskConsultQueueFailed","TASK_CONSULT_QUEUE_FAILED","emitTaskReject","reason","TASK_REJECT","emitTaskWrapup","shouldEmitWrapup","Boolean","wrapUpRequired","TASK_WRAPUP","emitTaskWrappedup","TASK_WRAPPEDUP","requestAutoAnswer","requestCleanup","TASK_CLEANUP","removeFromCollection","cleanupResources","wrapUpProps","METHODS","SETUP_AUTO_WRAPUP_TIMER","defaultWrapupReason","wrapUpReasonList","find","r","isDefault","intervalMs","autoWrapupInterval","AutoWrapup","allowCancelAutoWrapup","wrapup","wrapUpReason","name","auxCodeId","id","reconcileData","oldData","newData","Object","keys","forEach","key","Array","isArray","methodName","Error","updatedData","shouldOverwrite","pruneStaleInteractionMaps","incoming","incomingInteraction","currentInteraction","mapKey","incomingMap","currentMap","transfer","transferPayload","timeEvent","TASK_TRANSFER_SUCCESS","TASK_TRANSFER_FAILED","result","destinationType","DESTINATION_TYPE","QUEUE","vteamTransfer","blindTransfer","destination","to","isConsultTransfer","getCommonTrackingFieldForAQMResponse","detailedError","getErrorDetails","toString","getCommonTrackingFieldForAQMResponseFailed","details","end","requestInteractionId","mainInteractionId","TASK_END_SUCCESS","TASK_END_FAILED","response","wrapupPayload","TASK_WRAPUP_SUCCESS","TASK_WRAPUP_FAILED","length","wrapUpCode","exports"],"sources":["Task.ts"],"sourcesContent":["import {EventEmitter} from 'events';\nimport {createActor} from 'xstate';\nimport type {ActorRefFrom, SnapshotFrom} from 'xstate';\nimport {\n ITask,\n TaskData,\n TaskResponse,\n WrapupPayLoad,\n TaskId,\n TransferPayLoad,\n DESTINATION_TYPE,\n TASK_EVENTS,\n TaskUIControls,\n ConsultEndPayload,\n ConsultPayload,\n ConsultTransferPayLoad,\n ResumeRecordingPayload,\n MEDIA_CHANNEL,\n TASK_CHANNEL_TYPE,\n VOICE_VARIANT,\n CallId,\n} from './types';\nimport {METHODS} from './constants';\nimport {CC_FILE, TASK_FILE} from '../../constants';\nimport {getErrorDetails} from '../core/Utils';\nimport routingContact from './contact';\nimport MetricsManager from '../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../metrics/constants';\nimport LoggerProxy from '../../logger-proxy';\nimport {createTaskStateMachine, TaskState} from './state-machine';\nimport type {\n TaskEventPayload,\n TaskStateMachine,\n UIControlConfig,\n TaskContext,\n TaskActionsMap,\n TaskActionArgs,\n} from './state-machine';\nimport {\n computeUIControls,\n getDefaultUIControls,\n haveUIControlsChanged,\n} from './state-machine/uiControlsComputer';\nimport AutoWrapup from './AutoWrapup';\nimport {WrapupData} from '../config/types';\n\ntype UIControlConfigInput = Omit<UIControlConfig, 'channelType'> & {\n channelType?: UIControlConfig['channelType'];\n};\n\nexport default abstract class Task extends EventEmitter implements ITask {\n protected contact: ReturnType<typeof routingContact>;\n protected metricsManager: MetricsManager;\n public stateMachineService?: ActorRefFrom<TaskStateMachine>;\n public data: TaskData;\n public webCallMap: Record<TaskId, CallId>;\n public state?: SnapshotFrom<TaskStateMachine>;\n private lastState?: TaskState;\n protected currentUiControls: TaskUIControls;\n protected uiControlConfig: UIControlConfig;\n protected wrapupData?: WrapupData;\n public autoWrapup?: AutoWrapup;\n protected agentId?: string;\n\n constructor(\n contact: ReturnType<typeof routingContact>,\n data: TaskData,\n uiControlConfig: UIControlConfigInput,\n wrapupData?: WrapupData,\n agentId?: string\n ) {\n super();\n this.contact = contact;\n this.data = data;\n const channelType = uiControlConfig.channelType ?? Task.resolveChannelType(data);\n // Include agentId in the config for ownership checks (transfer conference)\n this.uiControlConfig = {...uiControlConfig, channelType, agentId};\n this.wrapupData = wrapupData;\n this.agentId = agentId;\n this.metricsManager = MetricsManager.getInstance();\n this.webCallMap = {};\n this.currentUiControls = getDefaultUIControls();\n this.initializeStateMachine();\n this.setupAutoWrapupTimer();\n }\n\n private static resolveChannelType(data: TaskData): UIControlConfig['channelType'] {\n const mediaType = data?.interaction?.mediaType ?? MEDIA_CHANNEL.TELEPHONY;\n\n return mediaType === MEDIA_CHANNEL.TELEPHONY\n ? TASK_CHANNEL_TYPE.VOICE\n : TASK_CHANNEL_TYPE.DIGITAL;\n }\n\n // Abstract methods that all child classes must implement\n public abstract accept(): Promise<TaskResponse>;\n\n // Voice-specific methods with default implementations that throw errors\n // Voice class will override these with actual implementations\n public async decline(): Promise<TaskResponse> {\n this.unsupportedMethodError('decline');\n }\n\n public async pauseRecording(): Promise<TaskResponse> {\n this.unsupportedMethodError('pauseRecording');\n }\n\n public async resumeRecording(\n resumeRecordingPayload: ResumeRecordingPayload\n ): Promise<TaskResponse> {\n if (resumeRecordingPayload) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('resumeRecording');\n }\n\n public async consult(consultPayload: ConsultPayload): Promise<TaskResponse> {\n if (consultPayload) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('consult');\n }\n\n public async endConsult(consultEndPayload: ConsultEndPayload): Promise<TaskResponse> {\n if (consultEndPayload) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('endConsult');\n }\n\n public async consultTransfer(\n consultTransferPayload?: ConsultTransferPayLoad\n ): Promise<TaskResponse> {\n if (consultTransferPayload) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('consultTransfer');\n }\n\n public async consultConference(): Promise<TaskResponse> {\n this.unsupportedMethodError('consultConference');\n }\n\n public async exitConference(): Promise<TaskResponse> {\n this.unsupportedMethodError('exitConference');\n }\n\n public async transferConference(): Promise<TaskResponse> {\n this.unsupportedMethodError('transferConference');\n }\n\n public async switchCall(): Promise<TaskResponse> {\n this.unsupportedMethodError('switchCall');\n }\n\n public async toggleMute(): Promise<void> {\n this.unsupportedMethodError('toggleMute');\n }\n\n public unregisterWebCallListeners(): void {\n // Default implementation - child classes can override\n LoggerProxy.log('unregisterWebCallListeners called', {\n module: CC_FILE,\n method: 'unregisterWebCallListeners',\n interactionId: this.data?.interactionId,\n });\n }\n\n /**\n * Cancel any in-progress auto wrap-up timer.\n * Base implementation just clears the timer reference so subclasses inherit the behavior.\n */\n public cancelAutoWrapupTimer(): void {\n if (this.autoWrapup) {\n this.autoWrapup.clear();\n this.autoWrapup = undefined;\n LoggerProxy.log('Auto wrap-up timer cancelled', {\n module: CC_FILE,\n method: 'cancelAutoWrapupTimer',\n interactionId: this.data?.interactionId,\n });\n }\n }\n\n // Voice tasks use holdResume(), but provide separate methods for interface compliance\n public async hold(): Promise<TaskResponse> {\n this.unsupportedMethodError('hold');\n }\n\n public async resume(): Promise<TaskResponse> {\n this.unsupportedMethodError('resume');\n }\n\n public async holdResume(): Promise<TaskResponse> {\n this.unsupportedMethodError('holdResume');\n }\n\n /**\n * Latest UI controls derived from state machine state and context.\n */\n public get uiControls(): TaskUIControls {\n return this.currentUiControls;\n }\n\n protected updateUiControls(forceEmit = false): void {\n const nextControls = this.computeUIControls();\n const shouldEmit = forceEmit || haveUIControlsChanged(this.currentUiControls, nextControls);\n this.currentUiControls = nextControls;\n\n if (shouldEmit) {\n this.emit(TASK_EVENTS.TASK_UI_CONTROLS_UPDATED, this.currentUiControls);\n }\n }\n\n /**\n * Initialize the state machine\n */\n private initializeStateMachine(): void {\n const machine: TaskStateMachine = createTaskStateMachine(this.uiControlConfig, {\n actions: this.getStateMachineActionOverrides(),\n });\n\n this.stateMachineService = createActor(machine);\n\n this.stateMachineService.subscribe((snapshot) => {\n const previousState = this.lastState;\n const currentState = snapshot.value as TaskState;\n LoggerProxy.log(`State machine transition: ${previousState || 'N/A'} -> ${currentState}`, {\n module: CC_FILE,\n method: 'onTransition',\n // @ts-ignore - snapshot may include event detail depending on XState version\n eventType: (snapshot as any)?.event?.type,\n });\n this.lastState = currentState;\n this.state = snapshot;\n\n this.updateUiControls(previousState !== currentState);\n });\n\n this.stateMachineService.start();\n this.updateUiControls(true);\n }\n\n /**\n * Send an event to the state machine\n */\n public sendStateMachineEvent(event: TaskEventPayload): void {\n if (this.stateMachineService) {\n LoggerProxy.log(`Sending state machine event: ${event?.type}`, {\n module: CC_FILE,\n method: 'sendStateMachineEvent',\n interactionId: this.data?.interactionId,\n });\n\n this.stateMachineService.send(event);\n }\n }\n\n /**\n * Get the current state machine state\n */\n protected getCurrentState(): TaskState | undefined {\n return this.stateMachineService?.getSnapshot()?.value as TaskState;\n }\n\n /**\n * Compute UI controls based on current state machine state.\n *\n * @returns UI control states for all task actions\n */\n protected computeUIControls(): TaskUIControls {\n const snapshot = this.stateMachineService?.getSnapshot?.();\n\n if (!snapshot) {\n return getDefaultUIControls();\n }\n\n const currentState = snapshot.value as TaskState;\n const context = snapshot.context as TaskContext;\n\n return computeUIControls(currentState, context, this.data);\n }\n\n /**\n * Stop the state machine service\n */\n protected stopStateMachine(): void {\n if (this.stateMachineService) {\n this.stateMachineService.stop();\n this.stateMachineService = undefined;\n }\n }\n\n private static extractTaskDataFromEvent(event?: TaskEventPayload): TaskData | undefined {\n if (!event || typeof event !== 'object') {\n return undefined;\n }\n\n if ('taskData' in event) {\n return (event as {taskData?: TaskData}).taskData;\n }\n\n return undefined;\n }\n\n private async autoAnswerIfNeeded(): Promise<void> {\n if (!this.data) {\n return;\n }\n\n const autoAnswerSupported =\n this.uiControlConfig.channelType === TASK_CHANNEL_TYPE.DIGITAL ||\n this.uiControlConfig.voiceVariant === VOICE_VARIANT.WEBRTC;\n\n if (!autoAnswerSupported) {\n return;\n }\n\n const shouldAutoAnswer = this.data.isAutoAnswering === true;\n\n if (!shouldAutoAnswer) {\n return;\n }\n\n LoggerProxy.info(`Auto-answering task`, {\n module: TASK_FILE,\n method: 'autoAnswerIfNeeded',\n interactionId: this.data.interactionId,\n });\n\n try {\n await this.accept();\n LoggerProxy.info(`Task auto-answered successfully`, {\n module: TASK_FILE,\n method: 'autoAnswerIfNeeded',\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_AUTO_ANSWER_SUCCESS,\n {\n taskId: this.data.interactionId,\n mediaType: this.data.interaction.mediaType,\n isAutoAnswered: true,\n },\n ['behavioral', 'operational']\n );\n\n this.emit(TASK_EVENTS.TASK_AUTO_ANSWERED, this);\n } catch (error) {\n this.updateTaskData({...this.data, isAutoAnswering: false});\n LoggerProxy.error(`Failed to auto-answer task`, {\n module: TASK_FILE,\n method: 'autoAnswerIfNeeded',\n interactionId: this.data.interactionId,\n error,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_AUTO_ANSWER_FAILED,\n {\n taskId: this.data.interactionId,\n mediaType: this.data.interaction.mediaType,\n error: error?.message || 'Unknown error',\n isAutoAnswered: false,\n },\n ['behavioral', 'operational']\n );\n }\n }\n\n private updateTaskFromEvent(event?: TaskEventPayload): void {\n const taskData = Task.extractTaskDataFromEvent(event);\n if (taskData) {\n this.updateTaskData(taskData);\n }\n }\n\n protected getStateMachineActionOverrides(): Partial<TaskActionsMap> {\n return {\n ...this.getCommonActionOverrides(),\n ...this.getChannelSpecificActionOverrides(),\n };\n }\n\n protected getChannelSpecificActionOverrides(): Partial<TaskActionsMap> {\n return {};\n }\n\n protected createEmitSelfAction(\n taskEvent: TASK_EVENTS,\n {updateTaskData = false}: {updateTaskData?: boolean} = {}\n ) {\n return ({event}: TaskActionArgs) => {\n if (updateTaskData) {\n this.updateTaskFromEvent(event);\n }\n LoggerProxy.info(`Emitting task event ${taskEvent}`, {\n module: TASK_FILE,\n method: 'emitTaskEvent',\n interactionId: this.data?.interactionId,\n });\n this.emit(taskEvent, this);\n };\n }\n\n private getCommonActionOverrides(): Partial<TaskActionsMap> {\n return {\n syncTaskDataFromEvent: ({event}: {event: TaskEventPayload}) => {\n this.updateTaskFromEvent(event);\n },\n emitTaskIncoming: this.createEmitSelfAction(TASK_EVENTS.TASK_INCOMING, {\n updateTaskData: true,\n }),\n emitTaskHydrate: this.createEmitSelfAction(TASK_EVENTS.TASK_HYDRATE, {\n updateTaskData: true,\n }),\n emitTaskOfferContact: this.createEmitSelfAction(TASK_EVENTS.TASK_OFFER_CONTACT, {\n updateTaskData: true,\n }),\n emitTaskAssigned: this.createEmitSelfAction(TASK_EVENTS.TASK_ASSIGNED, {\n updateTaskData: true,\n }),\n emitTaskEnd: this.createEmitSelfAction(TASK_EVENTS.TASK_END, {updateTaskData: true}),\n emitTaskOfferConsult: this.createEmitSelfAction(TASK_EVENTS.TASK_OFFER_CONSULT, {\n updateTaskData: true,\n }),\n emitTaskConsultCreated: this.createEmitSelfAction(TASK_EVENTS.TASK_CONSULT_CREATED, {\n updateTaskData: true,\n }),\n emitTaskConsulting: ({event}: TaskActionArgs) => {\n this.updateTaskFromEvent(event);\n if (this.data.isConsulted) {\n this.emit(TASK_EVENTS.TASK_CONSULT_ACCEPTED, this);\n } else {\n this.emit(TASK_EVENTS.TASK_CONSULTING, this);\n }\n },\n emitTaskConsultAccepted: this.createEmitSelfAction(TASK_EVENTS.TASK_CONSULT_ACCEPTED),\n emitTaskConsultEnd: this.createEmitSelfAction(TASK_EVENTS.TASK_CONSULT_END, {\n updateTaskData: true,\n }),\n emitTaskConsultQueueCancelled: this.createEmitSelfAction(\n TASK_EVENTS.TASK_CONSULT_QUEUE_CANCELLED,\n {\n updateTaskData: true,\n }\n ),\n emitTaskConsultQueueFailed: this.createEmitSelfAction(TASK_EVENTS.TASK_CONSULT_QUEUE_FAILED, {\n updateTaskData: true,\n }),\n emitTaskReject: ({event}: TaskActionArgs) => {\n this.updateTaskFromEvent(event);\n const reason =\n event && typeof event === 'object' && 'reason' in event\n ? (event as {reason?: string}).reason\n : undefined;\n this.emit(TASK_EVENTS.TASK_REJECT, reason);\n },\n emitTaskWrapup: ({event}: {event?: TaskEventPayload}) => {\n this.updateTaskFromEvent(event);\n\n const shouldEmitWrapup = Boolean(this.data.wrapUpRequired);\n if (!shouldEmitWrapup) {\n LoggerProxy.info(`Skipping task:wrapup event - wrapUpRequired is false`, {\n module: TASK_FILE,\n method: 'emitTaskEvent',\n interactionId: this.data?.interactionId,\n });\n\n return;\n }\n LoggerProxy.info(`Emitting task event ${TASK_EVENTS.TASK_WRAPUP}`, {\n module: TASK_FILE,\n method: 'emitTaskEvent',\n interactionId: this.data?.interactionId,\n });\n this.emit(TASK_EVENTS.TASK_WRAPUP, this);\n },\n emitTaskWrappedup: this.createEmitSelfAction(TASK_EVENTS.TASK_WRAPPEDUP, {\n updateTaskData: true,\n }),\n requestAutoAnswer: ({event}: TaskActionArgs) => {\n if (event) {\n // parameter intentionally unused\n }\n this.autoAnswerIfNeeded();\n },\n requestCleanup: () => {\n this.emit(TASK_EVENTS.TASK_CLEANUP, this, {removeFromCollection: false});\n },\n cleanupResources: () => {\n this.emit(TASK_EVENTS.TASK_CLEANUP, this, {removeFromCollection: true});\n },\n };\n }\n\n /**\n * Sets up the automatic wrap-up timer if wrap-up is required\n */\n protected setupAutoWrapupTimer(): void {\n if (\n this.data.wrapUpRequired &&\n !this.autoWrapup &&\n this.wrapupData &&\n this.wrapupData.wrapUpProps\n ) {\n const wrapUpProps = this.wrapupData.wrapUpProps;\n if (!wrapUpProps || wrapUpProps.autoWrapup === false) {\n LoggerProxy.info(`Auto wrap-up is not required for this task`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n interactionId: this.data.interactionId,\n });\n\n return;\n }\n const defaultWrapupReason =\n wrapUpProps.wrapUpReasonList?.find((r) => r.isDefault) ?? wrapUpProps.wrapUpReasonList?.[0];\n if (!defaultWrapupReason) {\n LoggerProxy.error('No wrap-up reason configured', {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n });\n\n return;\n }\n const intervalMs = wrapUpProps.autoWrapupInterval;\n if (!intervalMs || intervalMs <= 0) {\n LoggerProxy.error(`Invalid auto wrap-up interval: ${intervalMs}`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n });\n\n return;\n }\n this.autoWrapup = new AutoWrapup(intervalMs, wrapUpProps.allowCancelAutoWrapup);\n this.autoWrapup.start(async () => {\n LoggerProxy.info(`Auto wrap-up timer triggered`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n interactionId: this.data.interactionId,\n });\n await this.wrapup({\n wrapUpReason: defaultWrapupReason.name,\n auxCodeId: defaultWrapupReason.id,\n });\n });\n }\n }\n\n /**\n * Cancels the automatic wrap-up timer if it's running\n */\n private reconcileData(oldData: TaskData, newData: TaskData): TaskData {\n Object.keys(newData).forEach((key) => {\n if (newData[key] && typeof newData[key] === 'object' && !Array.isArray(newData[key])) {\n oldData[key] = this.reconcileData({...oldData[key]}, newData[key]);\n } else {\n oldData[key] = newData[key];\n }\n });\n\n return oldData;\n }\n\n /**\n *\n * @param methodName - The name of the method that is unsupported\n * @throws Error\n */\n protected unsupportedMethodError(methodName: string) {\n LoggerProxy.error(`Unsupported operation`, {\n module: 'TASK',\n method: methodName,\n interactionId: this.data?.interactionId,\n });\n throw new Error(`Unsupported operation: ${methodName}`);\n }\n\n /**\n * This method is used to update the task data.\n * @param updatedData - TaskData\n * @param shouldOverwrite - boolean\n * @example\n * ```typescript\n * task.updateTaskData(updatedData, true);\n * ```\n */\n public updateTaskData(updatedData: TaskData, shouldOverwrite = false): ITask {\n this.data = shouldOverwrite ? updatedData : this.reconcileData(this.data, updatedData);\n if (!shouldOverwrite) {\n this.pruneStaleInteractionMaps(updatedData);\n }\n this.updateUiControls();\n this.setupAutoWrapupTimer();\n\n return this;\n }\n\n /**\n * The backend sends `interaction.media` and `interaction.participants` as complete snapshots\n * of the current call state. `reconcileData` deep-merges and never removes keys, so entries the\n * backend dropped (e.g. a consult leg's media and consultee participant after the consult ends)\n * linger in `this.data`. That stale data drives incorrect UI controls (e.g. the consult button\n * staying disabled after the consult leg is gone, until a page refresh re-hydrates cleanly).\n * Make only these two snapshot maps authoritative to the incoming payload, leaving every other\n * field on the generic deep-merge path (CAD and other partial updates still merge as before).\n */\n private pruneStaleInteractionMaps(incoming: TaskData): void {\n const incomingInteraction = incoming?.interaction;\n const currentInteraction = this.data?.interaction;\n if (!incomingInteraction || !currentInteraction) {\n return;\n }\n\n (['media', 'participants'] as const).forEach((mapKey) => {\n const incomingMap = incomingInteraction[mapKey] as Record<string, unknown> | undefined;\n const currentMap = currentInteraction[mapKey] as Record<string, unknown> | undefined;\n if (!incomingMap || !currentMap || typeof incomingMap !== 'object') {\n return;\n }\n\n Object.keys(currentMap).forEach((id) => {\n if (!(id in incomingMap)) {\n delete currentMap[id];\n }\n });\n });\n }\n\n /**\n * This is used to blind transfer or vTeam transfer the task\n * @param transferPayload\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * const transferPayload = {\n * to: 'myQueueId',\n * destinationType: 'queue',\n * }\n * task.transfer(transferPayload).then(()=>{}).catch(()=>{});\n * ```\n */\n public async transfer(transferPayload: TransferPayLoad): Promise<TaskResponse> {\n LoggerProxy.log(`Starting task transfer for taskId:${this.data.interactionId}`, {\n module: 'Task',\n method: 'transfer',\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n ]);\n let result: TaskResponse;\n if (transferPayload.destinationType === DESTINATION_TYPE.QUEUE) {\n result = await this.contact.vteamTransfer({\n interactionId: this.data.interactionId,\n data: transferPayload,\n });\n } else {\n result = await this.contact.blindTransfer({\n interactionId: this.data.interactionId,\n data: transferPayload,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: transferPayload.to,\n destinationType: transferPayload.destinationType,\n isConsultTransfer: false,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'transfer', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n {\n taskId: this.data.interactionId,\n destination: transferPayload.to,\n destinationType: transferPayload.destinationType,\n isConsultTransfer: false,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * This is used to end the task.\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.end().then(()=>{}).catch(()=>{})\n * ```\n */\n public async end(): Promise<TaskResponse> {\n LoggerProxy.log(`Ending task for taskId:${this.data.interactionId}`, {\n module: 'Task',\n method: 'end',\n });\n const requestInteractionId =\n this.data.interaction?.mainInteractionId || this.data.interactionId;\n\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_END_SUCCESS,\n METRIC_EVENT_NAMES.TASK_END_FAILED,\n ]);\n const response = await this.contact.end({interactionId: requestInteractionId});\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_END_SUCCESS,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n return response;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'end', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_END_FAILED,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * This is used to wrap up the task.\n * @param wrapupPayload - WrapupPayLoad\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.wrapup(wrapupPayload).then(()=>{}).catch(()=>{})\n * ```\n */\n public async wrapup(wrapupPayload: WrapupPayLoad): Promise<TaskResponse> {\n this.cancelAutoWrapupTimer();\n LoggerProxy.log(`Starting task wrapup for taskId:${this.data.interactionId}`, {\n module: 'Task',\n method: 'wrapup',\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_WRAPUP_SUCCESS,\n METRIC_EVENT_NAMES.TASK_WRAPUP_FAILED,\n ]);\n if (!this.data) {\n throw new Error('No task data available');\n }\n if (!wrapupPayload.auxCodeId || wrapupPayload.auxCodeId.length === 0) {\n throw new Error('AuxCodeId is required');\n }\n if (!wrapupPayload.wrapUpReason || wrapupPayload.wrapUpReason.length === 0) {\n throw new Error('WrapUpReason is required');\n }\n\n const response = await this.contact.wrapup({\n interactionId: this.data.interactionId,\n data: wrapupPayload,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_WRAPUP_SUCCESS,\n {\n taskId: this.data.interactionId,\n wrapUpCode: wrapupPayload.auxCodeId,\n wrapUpReason: wrapupPayload.wrapUpReason,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n return response;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'wrapup', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_WRAPUP_FAILED,\n {\n taskId: this.data.interactionId,\n wrapUpCode: wrapupPayload.auxCodeId,\n wrapUpReason: wrapupPayload.wrapUpReason,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_events","require","_xstate","_types","_constants","_constants2","_Utils","_MetricsManager","_interopRequireDefault","_constants3","_loggerProxy","_stateMachine","_uiControlsComputer","_AutoWrapup","e","__esModule","default","Task","EventEmitter","constructor","contact","data","uiControlConfig","wrapupData","agentId","channelType","resolveChannelType","metricsManager","MetricsManager","getInstance","webCallMap","currentUiControls","getDefaultUIControls","initializeStateMachine","setupAutoWrapupTimer","mediaType","interaction","MEDIA_CHANNEL","TELEPHONY","TASK_CHANNEL_TYPE","VOICE","DIGITAL","decline","unsupportedMethodError","pauseRecording","resumeRecording","resumeRecordingPayload","consult","consultPayload","endConsult","consultEndPayload","consultTransfer","consultTransferPayload","consultConference","exitConference","transferConference","switchCall","toggleMute","unregisterWebCallListeners","LoggerProxy","log","module","CC_FILE","method","interactionId","cancelAutoWrapupTimer","autoWrapup","clear","undefined","hold","resume","holdResume","uiControls","updateUiControls","forceEmit","nextControls","computeUIControls","shouldEmit","haveUIControlsChanged","emit","TASK_EVENTS","TASK_UI_CONTROLS_UPDATED","machine","createTaskStateMachine","actions","getStateMachineActionOverrides","stateMachineService","createActor","subscribe","snapshot","previousState","lastState","currentState","value","eventType","event","type","state","start","sendStateMachineEvent","send","getCurrentState","getSnapshot","context","stopStateMachine","stop","extractTaskDataFromEvent","taskData","autoAnswerIfNeeded","autoAnswerSupported","voiceVariant","VOICE_VARIANT","WEBRTC","shouldAutoAnswer","isAutoAnswering","info","TASK_FILE","accept","trackEvent","METRIC_EVENT_NAMES","TASK_AUTO_ANSWER_SUCCESS","taskId","isAutoAnswered","TASK_AUTO_ANSWERED","error","updateTaskData","TASK_AUTO_ANSWER_FAILED","message","updateTaskFromEvent","getCommonActionOverrides","getChannelSpecificActionOverrides","createEmitSelfAction","taskEvent","syncTaskDataFromEvent","emitTaskIncoming","TASK_INCOMING","emitTaskHydrate","TASK_HYDRATE","emitTaskOfferContact","TASK_OFFER_CONTACT","emitTaskAssigned","TASK_ASSIGNED","TASK_MULTI_LOGIN_HYDRATE","emitTaskEnd","TASK_END","emitTaskOfferConsult","TASK_OFFER_CONSULT","emitTaskConsultCreated","TASK_CONSULT_CREATED","emitTaskConsulting","isConsulted","TASK_CONSULT_ACCEPTED","TASK_CONSULTING","emitTaskConsultAccepted","emitTaskConsultEnd","TASK_CONSULT_END","emitTaskConsultQueueCancelled","TASK_CONSULT_QUEUE_CANCELLED","emitTaskConsultQueueFailed","TASK_CONSULT_QUEUE_FAILED","emitTaskReject","reason","TASK_REJECT","emitTaskWrapup","shouldEmitWrapup","Boolean","wrapUpRequired","TASK_WRAPUP","emitTaskWrappedup","TASK_WRAPPEDUP","requestAutoAnswer","requestCleanup","TASK_CLEANUP","removeFromCollection","cleanupResources","wrapUpProps","METHODS","SETUP_AUTO_WRAPUP_TIMER","defaultWrapupReason","wrapUpReasonList","find","r","isDefault","intervalMs","autoWrapupInterval","AutoWrapup","allowCancelAutoWrapup","wrapup","wrapUpReason","name","auxCodeId","id","reconcileData","oldData","newData","Object","keys","forEach","key","Array","isArray","methodName","Error","updatedData","shouldOverwrite","pruneStaleInteractionMaps","incoming","incomingInteraction","currentInteraction","mapKey","incomingMap","currentMap","transfer","transferPayload","timeEvent","TASK_TRANSFER_SUCCESS","TASK_TRANSFER_FAILED","result","destinationType","DESTINATION_TYPE","QUEUE","vteamTransfer","blindTransfer","destination","to","isConsultTransfer","getCommonTrackingFieldForAQMResponse","detailedError","getErrorDetails","toString","getCommonTrackingFieldForAQMResponseFailed","details","end","requestInteractionId","mainInteractionId","TASK_END_SUCCESS","TASK_END_FAILED","response","wrapupPayload","TASK_WRAPUP_SUCCESS","TASK_WRAPUP_FAILED","length","wrapUpCode","exports"],"sources":["Task.ts"],"sourcesContent":["import {EventEmitter} from 'events';\nimport {createActor} from 'xstate';\nimport type {ActorRefFrom, SnapshotFrom} from 'xstate';\nimport {\n ITask,\n TaskData,\n TaskResponse,\n WrapupPayLoad,\n TaskId,\n TransferPayLoad,\n DESTINATION_TYPE,\n TASK_EVENTS,\n TaskUIControls,\n ConsultEndPayload,\n ConsultPayload,\n ConsultTransferPayLoad,\n ResumeRecordingPayload,\n MEDIA_CHANNEL,\n TASK_CHANNEL_TYPE,\n VOICE_VARIANT,\n CallId,\n} from './types';\nimport {METHODS} from './constants';\nimport {CC_FILE, TASK_FILE} from '../../constants';\nimport {getErrorDetails} from '../core/Utils';\nimport routingContact from './contact';\nimport MetricsManager from '../../metrics/MetricsManager';\nimport {METRIC_EVENT_NAMES} from '../../metrics/constants';\nimport LoggerProxy from '../../logger-proxy';\nimport {createTaskStateMachine, TaskState} from './state-machine';\nimport type {\n TaskEventPayload,\n TaskStateMachine,\n UIControlConfig,\n TaskContext,\n TaskActionsMap,\n TaskActionArgs,\n} from './state-machine';\nimport {\n computeUIControls,\n getDefaultUIControls,\n haveUIControlsChanged,\n} from './state-machine/uiControlsComputer';\nimport AutoWrapup from './AutoWrapup';\nimport {WrapupData} from '../config/types';\n\ntype UIControlConfigInput = Omit<UIControlConfig, 'channelType'> & {\n channelType?: UIControlConfig['channelType'];\n};\n\nexport default abstract class Task extends EventEmitter implements ITask {\n protected contact: ReturnType<typeof routingContact>;\n protected metricsManager: MetricsManager;\n public stateMachineService?: ActorRefFrom<TaskStateMachine>;\n public data: TaskData;\n public webCallMap: Record<TaskId, CallId>;\n public state?: SnapshotFrom<TaskStateMachine>;\n private lastState?: TaskState;\n protected currentUiControls: TaskUIControls;\n protected uiControlConfig: UIControlConfig;\n protected wrapupData?: WrapupData;\n public autoWrapup?: AutoWrapup;\n protected agentId?: string;\n\n constructor(\n contact: ReturnType<typeof routingContact>,\n data: TaskData,\n uiControlConfig: UIControlConfigInput,\n wrapupData?: WrapupData,\n agentId?: string\n ) {\n super();\n this.contact = contact;\n this.data = data;\n const channelType = uiControlConfig.channelType ?? Task.resolveChannelType(data);\n // Include agentId in the config for ownership checks (transfer conference)\n this.uiControlConfig = {...uiControlConfig, channelType, agentId};\n this.wrapupData = wrapupData;\n this.agentId = agentId;\n this.metricsManager = MetricsManager.getInstance();\n this.webCallMap = {};\n this.currentUiControls = getDefaultUIControls();\n this.initializeStateMachine();\n this.setupAutoWrapupTimer();\n }\n\n private static resolveChannelType(data: TaskData): UIControlConfig['channelType'] {\n const mediaType = data?.interaction?.mediaType ?? MEDIA_CHANNEL.TELEPHONY;\n\n return mediaType === MEDIA_CHANNEL.TELEPHONY\n ? TASK_CHANNEL_TYPE.VOICE\n : TASK_CHANNEL_TYPE.DIGITAL;\n }\n\n // Abstract methods that all child classes must implement\n public abstract accept(): Promise<TaskResponse>;\n\n // Voice-specific methods with default implementations that throw errors\n // Voice class will override these with actual implementations\n public async decline(): Promise<TaskResponse> {\n this.unsupportedMethodError('decline');\n }\n\n public async pauseRecording(): Promise<TaskResponse> {\n this.unsupportedMethodError('pauseRecording');\n }\n\n public async resumeRecording(\n resumeRecordingPayload: ResumeRecordingPayload\n ): Promise<TaskResponse> {\n if (resumeRecordingPayload) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('resumeRecording');\n }\n\n public async consult(consultPayload: ConsultPayload): Promise<TaskResponse> {\n if (consultPayload) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('consult');\n }\n\n public async endConsult(consultEndPayload: ConsultEndPayload): Promise<TaskResponse> {\n if (consultEndPayload) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('endConsult');\n }\n\n public async consultTransfer(\n consultTransferPayload?: ConsultTransferPayLoad\n ): Promise<TaskResponse> {\n if (consultTransferPayload) {\n // parameter intentionally unused\n }\n this.unsupportedMethodError('consultTransfer');\n }\n\n public async consultConference(): Promise<TaskResponse> {\n this.unsupportedMethodError('consultConference');\n }\n\n public async exitConference(): Promise<TaskResponse> {\n this.unsupportedMethodError('exitConference');\n }\n\n public async transferConference(): Promise<TaskResponse> {\n this.unsupportedMethodError('transferConference');\n }\n\n public async switchCall(): Promise<TaskResponse> {\n this.unsupportedMethodError('switchCall');\n }\n\n public async toggleMute(): Promise<void> {\n this.unsupportedMethodError('toggleMute');\n }\n\n public unregisterWebCallListeners(): void {\n // Default implementation - child classes can override\n LoggerProxy.log('unregisterWebCallListeners called', {\n module: CC_FILE,\n method: 'unregisterWebCallListeners',\n interactionId: this.data?.interactionId,\n });\n }\n\n /**\n * Cancel any in-progress auto wrap-up timer.\n * Base implementation just clears the timer reference so subclasses inherit the behavior.\n */\n public cancelAutoWrapupTimer(): void {\n if (this.autoWrapup) {\n this.autoWrapup.clear();\n this.autoWrapup = undefined;\n LoggerProxy.log('Auto wrap-up timer cancelled', {\n module: CC_FILE,\n method: 'cancelAutoWrapupTimer',\n interactionId: this.data?.interactionId,\n });\n }\n }\n\n // Voice tasks use holdResume(), but provide separate methods for interface compliance\n public async hold(): Promise<TaskResponse> {\n this.unsupportedMethodError('hold');\n }\n\n public async resume(): Promise<TaskResponse> {\n this.unsupportedMethodError('resume');\n }\n\n public async holdResume(): Promise<TaskResponse> {\n this.unsupportedMethodError('holdResume');\n }\n\n /**\n * Latest UI controls derived from state machine state and context.\n */\n public get uiControls(): TaskUIControls {\n return this.currentUiControls;\n }\n\n protected updateUiControls(forceEmit = false): void {\n const nextControls = this.computeUIControls();\n const shouldEmit = forceEmit || haveUIControlsChanged(this.currentUiControls, nextControls);\n this.currentUiControls = nextControls;\n\n if (shouldEmit) {\n this.emit(TASK_EVENTS.TASK_UI_CONTROLS_UPDATED, this.currentUiControls);\n }\n }\n\n /**\n * Initialize the state machine\n */\n private initializeStateMachine(): void {\n const machine: TaskStateMachine = createTaskStateMachine(this.uiControlConfig, {\n actions: this.getStateMachineActionOverrides(),\n });\n\n this.stateMachineService = createActor(machine);\n\n this.stateMachineService.subscribe((snapshot) => {\n const previousState = this.lastState;\n const currentState = snapshot.value as TaskState;\n LoggerProxy.log(`State machine transition: ${previousState || 'N/A'} -> ${currentState}`, {\n module: CC_FILE,\n method: 'onTransition',\n // @ts-ignore - snapshot may include event detail depending on XState version\n eventType: (snapshot as any)?.event?.type,\n });\n this.lastState = currentState;\n this.state = snapshot;\n\n this.updateUiControls(previousState !== currentState);\n });\n\n this.stateMachineService.start();\n this.updateUiControls(true);\n }\n\n /**\n * Send an event to the state machine\n */\n public sendStateMachineEvent(event: TaskEventPayload): void {\n if (this.stateMachineService) {\n LoggerProxy.log(`Sending state machine event: ${event?.type}`, {\n module: CC_FILE,\n method: 'sendStateMachineEvent',\n interactionId: this.data?.interactionId,\n });\n\n this.stateMachineService.send(event);\n }\n }\n\n /**\n * Get the current state machine state\n */\n protected getCurrentState(): TaskState | undefined {\n return this.stateMachineService?.getSnapshot()?.value as TaskState;\n }\n\n /**\n * Compute UI controls based on current state machine state.\n *\n * @returns UI control states for all task actions\n */\n protected computeUIControls(): TaskUIControls {\n const snapshot = this.stateMachineService?.getSnapshot?.();\n\n if (!snapshot) {\n return getDefaultUIControls();\n }\n\n const currentState = snapshot.value as TaskState;\n const context = snapshot.context as TaskContext;\n\n const uiControls = computeUIControls(currentState, context, this.data);\n\n return uiControls;\n }\n\n /**\n * Stop the state machine service\n */\n protected stopStateMachine(): void {\n if (this.stateMachineService) {\n this.stateMachineService.stop();\n this.stateMachineService = undefined;\n }\n }\n\n private static extractTaskDataFromEvent(event?: TaskEventPayload): TaskData | undefined {\n if (!event || typeof event !== 'object') {\n return undefined;\n }\n\n if ('taskData' in event) {\n return (event as {taskData?: TaskData}).taskData;\n }\n\n return undefined;\n }\n\n private async autoAnswerIfNeeded(): Promise<void> {\n if (!this.data) {\n return;\n }\n\n const autoAnswerSupported =\n this.uiControlConfig.channelType === TASK_CHANNEL_TYPE.DIGITAL ||\n this.uiControlConfig.voiceVariant === VOICE_VARIANT.WEBRTC;\n\n if (!autoAnswerSupported) {\n return;\n }\n\n const shouldAutoAnswer = this.data.isAutoAnswering === true;\n\n if (!shouldAutoAnswer) {\n return;\n }\n\n LoggerProxy.info(`Auto-answering task`, {\n module: TASK_FILE,\n method: 'autoAnswerIfNeeded',\n interactionId: this.data.interactionId,\n });\n\n try {\n await this.accept();\n LoggerProxy.info(`Task auto-answered successfully`, {\n module: TASK_FILE,\n method: 'autoAnswerIfNeeded',\n interactionId: this.data.interactionId,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_AUTO_ANSWER_SUCCESS,\n {\n taskId: this.data.interactionId,\n mediaType: this.data.interaction.mediaType,\n isAutoAnswered: true,\n },\n ['behavioral', 'operational']\n );\n\n this.emit(TASK_EVENTS.TASK_AUTO_ANSWERED, this);\n } catch (error) {\n this.updateTaskData({...this.data, isAutoAnswering: false});\n LoggerProxy.error(`Failed to auto-answer task`, {\n module: TASK_FILE,\n method: 'autoAnswerIfNeeded',\n interactionId: this.data.interactionId,\n error,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_AUTO_ANSWER_FAILED,\n {\n taskId: this.data.interactionId,\n mediaType: this.data.interaction.mediaType,\n error: error?.message || 'Unknown error',\n isAutoAnswered: false,\n },\n ['behavioral', 'operational']\n );\n }\n }\n\n private updateTaskFromEvent(event?: TaskEventPayload): void {\n const taskData = Task.extractTaskDataFromEvent(event);\n if (taskData) {\n this.updateTaskData(taskData);\n }\n }\n\n protected getStateMachineActionOverrides(): Partial<TaskActionsMap> {\n return {\n ...this.getCommonActionOverrides(),\n ...this.getChannelSpecificActionOverrides(),\n };\n }\n\n protected getChannelSpecificActionOverrides(): Partial<TaskActionsMap> {\n return {};\n }\n\n protected createEmitSelfAction(\n taskEvent: TASK_EVENTS,\n {updateTaskData = false}: {updateTaskData?: boolean} = {}\n ) {\n return ({event}: TaskActionArgs) => {\n if (updateTaskData) {\n this.updateTaskFromEvent(event);\n }\n LoggerProxy.info(`Emitting task event ${taskEvent}`, {\n module: TASK_FILE,\n method: 'emitTaskEvent',\n interactionId: this.data?.interactionId,\n });\n this.emit(taskEvent, this);\n };\n }\n\n private getCommonActionOverrides(): Partial<TaskActionsMap> {\n return {\n syncTaskDataFromEvent: ({event}: {event: TaskEventPayload}) => {\n this.updateTaskFromEvent(event);\n },\n emitTaskIncoming: this.createEmitSelfAction(TASK_EVENTS.TASK_INCOMING, {\n updateTaskData: true,\n }),\n emitTaskHydrate: this.createEmitSelfAction(TASK_EVENTS.TASK_HYDRATE, {\n updateTaskData: true,\n }),\n emitTaskOfferContact: this.createEmitSelfAction(TASK_EVENTS.TASK_OFFER_CONTACT, {\n updateTaskData: true,\n }),\n emitTaskAssigned: ({event}: TaskActionArgs) => {\n this.updateTaskFromEvent(event);\n this.emit(TASK_EVENTS.TASK_ASSIGNED, this);\n this.emit(TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, this);\n },\n emitTaskEnd: this.createEmitSelfAction(TASK_EVENTS.TASK_END, {updateTaskData: true}),\n emitTaskOfferConsult: this.createEmitSelfAction(TASK_EVENTS.TASK_OFFER_CONSULT, {\n updateTaskData: true,\n }),\n emitTaskConsultCreated: this.createEmitSelfAction(TASK_EVENTS.TASK_CONSULT_CREATED, {\n updateTaskData: true,\n }),\n emitTaskConsulting: ({event}: TaskActionArgs) => {\n this.updateTaskFromEvent(event);\n if (this.data.isConsulted) {\n this.emit(TASK_EVENTS.TASK_CONSULT_ACCEPTED, this);\n } else {\n this.emit(TASK_EVENTS.TASK_CONSULTING, this);\n }\n this.emit(TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, this);\n },\n emitTaskConsultAccepted: this.createEmitSelfAction(TASK_EVENTS.TASK_CONSULT_ACCEPTED),\n emitTaskConsultEnd: this.createEmitSelfAction(TASK_EVENTS.TASK_CONSULT_END, {\n updateTaskData: true,\n }),\n emitTaskConsultQueueCancelled: this.createEmitSelfAction(\n TASK_EVENTS.TASK_CONSULT_QUEUE_CANCELLED,\n {\n updateTaskData: true,\n }\n ),\n emitTaskConsultQueueFailed: this.createEmitSelfAction(TASK_EVENTS.TASK_CONSULT_QUEUE_FAILED, {\n updateTaskData: true,\n }),\n emitTaskReject: ({event}: TaskActionArgs) => {\n this.updateTaskFromEvent(event);\n const reason =\n event && typeof event === 'object' && 'reason' in event\n ? (event as {reason?: string}).reason\n : undefined;\n this.emit(TASK_EVENTS.TASK_REJECT, reason);\n },\n emitTaskWrapup: ({event}: {event?: TaskEventPayload}) => {\n this.updateTaskFromEvent(event);\n\n const shouldEmitWrapup = Boolean(this.data.wrapUpRequired);\n if (!shouldEmitWrapup) {\n LoggerProxy.info(`Skipping task:wrapup event - wrapUpRequired is false`, {\n module: TASK_FILE,\n method: 'emitTaskEvent',\n interactionId: this.data?.interactionId,\n });\n\n return;\n }\n LoggerProxy.info(`Emitting task event ${TASK_EVENTS.TASK_WRAPUP}`, {\n module: TASK_FILE,\n method: 'emitTaskEvent',\n interactionId: this.data?.interactionId,\n });\n this.emit(TASK_EVENTS.TASK_WRAPUP, this);\n },\n emitTaskWrappedup: this.createEmitSelfAction(TASK_EVENTS.TASK_WRAPPEDUP, {\n updateTaskData: true,\n }),\n requestAutoAnswer: ({event}: TaskActionArgs) => {\n if (event) {\n // parameter intentionally unused\n }\n this.autoAnswerIfNeeded();\n },\n requestCleanup: () => {\n this.emit(TASK_EVENTS.TASK_CLEANUP, this, {removeFromCollection: false});\n },\n cleanupResources: () => {\n this.emit(TASK_EVENTS.TASK_CLEANUP, this, {removeFromCollection: true});\n },\n };\n }\n\n /**\n * Sets up the automatic wrap-up timer if wrap-up is required\n */\n protected setupAutoWrapupTimer(): void {\n if (\n this.data.wrapUpRequired &&\n !this.autoWrapup &&\n this.wrapupData &&\n this.wrapupData.wrapUpProps\n ) {\n const wrapUpProps = this.wrapupData.wrapUpProps;\n if (!wrapUpProps || wrapUpProps.autoWrapup === false) {\n LoggerProxy.info(`Auto wrap-up is not required for this task`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n interactionId: this.data.interactionId,\n });\n\n return;\n }\n const defaultWrapupReason =\n wrapUpProps.wrapUpReasonList?.find((r) => r.isDefault) ?? wrapUpProps.wrapUpReasonList?.[0];\n if (!defaultWrapupReason) {\n LoggerProxy.error('No wrap-up reason configured', {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n });\n\n return;\n }\n const intervalMs = wrapUpProps.autoWrapupInterval;\n if (!intervalMs || intervalMs <= 0) {\n LoggerProxy.error(`Invalid auto wrap-up interval: ${intervalMs}`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n });\n\n return;\n }\n this.autoWrapup = new AutoWrapup(intervalMs, wrapUpProps.allowCancelAutoWrapup);\n this.autoWrapup.start(async () => {\n LoggerProxy.info(`Auto wrap-up timer triggered`, {\n module: TASK_FILE,\n method: METHODS.SETUP_AUTO_WRAPUP_TIMER,\n interactionId: this.data.interactionId,\n });\n await this.wrapup({\n wrapUpReason: defaultWrapupReason.name,\n auxCodeId: defaultWrapupReason.id,\n });\n });\n }\n }\n\n /**\n * Cancels the automatic wrap-up timer if it's running\n */\n private reconcileData(oldData: TaskData, newData: TaskData): TaskData {\n Object.keys(newData).forEach((key) => {\n if (newData[key] && typeof newData[key] === 'object' && !Array.isArray(newData[key])) {\n oldData[key] = this.reconcileData({...oldData[key]}, newData[key]);\n } else {\n oldData[key] = newData[key];\n }\n });\n\n return oldData;\n }\n\n /**\n *\n * @param methodName - The name of the method that is unsupported\n * @throws Error\n */\n protected unsupportedMethodError(methodName: string) {\n LoggerProxy.error(`Unsupported operation`, {\n module: 'TASK',\n method: methodName,\n interactionId: this.data?.interactionId,\n });\n throw new Error(`Unsupported operation: ${methodName}`);\n }\n\n /**\n * This method is used to update the task data.\n * @param updatedData - TaskData\n * @param shouldOverwrite - boolean\n * @example\n * ```typescript\n * task.updateTaskData(updatedData, true);\n * ```\n */\n public updateTaskData(updatedData: TaskData, shouldOverwrite = false): ITask {\n this.data = shouldOverwrite ? updatedData : this.reconcileData(this.data, updatedData);\n if (!shouldOverwrite) {\n this.pruneStaleInteractionMaps(updatedData);\n }\n this.updateUiControls();\n this.setupAutoWrapupTimer();\n\n return this;\n }\n\n /**\n * The backend sends `interaction.media` and `interaction.participants` as complete snapshots\n * of the current call state. `reconcileData` deep-merges and never removes keys, so entries the\n * backend dropped (e.g. a consult leg's media and consultee participant after the consult ends)\n * linger in `this.data`. That stale data drives incorrect UI controls (e.g. the consult button\n * staying disabled after the consult leg is gone, until a page refresh re-hydrates cleanly).\n * Make only these two snapshot maps authoritative to the incoming payload, leaving every other\n * field on the generic deep-merge path (CAD and other partial updates still merge as before).\n */\n private pruneStaleInteractionMaps(incoming: TaskData): void {\n const incomingInteraction = incoming?.interaction;\n const currentInteraction = this.data?.interaction;\n if (!incomingInteraction || !currentInteraction) {\n return;\n }\n\n (['media', 'participants'] as const).forEach((mapKey) => {\n const incomingMap = incomingInteraction[mapKey] as Record<string, unknown> | undefined;\n const currentMap = currentInteraction[mapKey] as Record<string, unknown> | undefined;\n if (!incomingMap || !currentMap || typeof incomingMap !== 'object') {\n return;\n }\n\n Object.keys(currentMap).forEach((id) => {\n if (!(id in incomingMap)) {\n delete currentMap[id];\n }\n });\n });\n }\n\n /**\n * This is used to blind transfer or vTeam transfer the task\n * @param transferPayload\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * const transferPayload = {\n * to: 'myQueueId',\n * destinationType: 'queue',\n * }\n * task.transfer(transferPayload).then(()=>{}).catch(()=>{});\n * ```\n */\n public async transfer(transferPayload: TransferPayLoad): Promise<TaskResponse> {\n LoggerProxy.log(`Starting task transfer for taskId:${this.data.interactionId}`, {\n module: 'Task',\n method: 'transfer',\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n ]);\n let result: TaskResponse;\n if (transferPayload.destinationType === DESTINATION_TYPE.QUEUE) {\n result = await this.contact.vteamTransfer({\n interactionId: this.data.interactionId,\n data: transferPayload,\n });\n } else {\n result = await this.contact.blindTransfer({\n interactionId: this.data.interactionId,\n data: transferPayload,\n });\n }\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_SUCCESS,\n {\n taskId: this.data.interactionId,\n destination: transferPayload.to,\n destinationType: transferPayload.destinationType,\n isConsultTransfer: false,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(result),\n },\n ['operational', 'behavioral', 'business']\n );\n\n return result;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'transfer', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_TRANSFER_FAILED,\n {\n taskId: this.data.interactionId,\n destination: transferPayload.to,\n destinationType: transferPayload.destinationType,\n isConsultTransfer: false,\n error: error.toString(),\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * This is used to end the task.\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.end().then(()=>{}).catch(()=>{})\n * ```\n */\n public async end(): Promise<TaskResponse> {\n LoggerProxy.log(`Ending task for taskId:${this.data.interactionId}`, {\n module: 'Task',\n method: 'end',\n });\n const requestInteractionId =\n this.data.interaction?.mainInteractionId || this.data.interactionId;\n\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_END_SUCCESS,\n METRIC_EVENT_NAMES.TASK_END_FAILED,\n ]);\n const response = await this.contact.end({interactionId: requestInteractionId});\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_END_SUCCESS,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n return response;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'end', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_END_FAILED,\n {\n taskId: this.data.interactionId,\n requestInteractionId,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n\n /**\n * This is used to wrap up the task.\n * @param wrapupPayload - WrapupPayLoad\n * @returns Promise<TaskResponse>\n * @throws Error\n * @example\n * ```typescript\n * task.wrapup(wrapupPayload).then(()=>{}).catch(()=>{})\n * ```\n */\n public async wrapup(wrapupPayload: WrapupPayLoad): Promise<TaskResponse> {\n this.cancelAutoWrapupTimer();\n LoggerProxy.log(`Starting task wrapup for taskId:${this.data.interactionId}`, {\n module: 'Task',\n method: 'wrapup',\n });\n try {\n this.metricsManager.timeEvent([\n METRIC_EVENT_NAMES.TASK_WRAPUP_SUCCESS,\n METRIC_EVENT_NAMES.TASK_WRAPUP_FAILED,\n ]);\n if (!this.data) {\n throw new Error('No task data available');\n }\n if (!wrapupPayload.auxCodeId || wrapupPayload.auxCodeId.length === 0) {\n throw new Error('AuxCodeId is required');\n }\n if (!wrapupPayload.wrapUpReason || wrapupPayload.wrapUpReason.length === 0) {\n throw new Error('WrapUpReason is required');\n }\n\n const response = await this.contact.wrapup({\n interactionId: this.data.interactionId,\n data: wrapupPayload,\n });\n\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_WRAPUP_SUCCESS,\n {\n taskId: this.data.interactionId,\n wrapUpCode: wrapupPayload.auxCodeId,\n wrapUpReason: wrapupPayload.wrapUpReason,\n ...MetricsManager.getCommonTrackingFieldForAQMResponse(response),\n },\n ['operational', 'behavioral', 'business']\n );\n\n return response;\n } catch (error) {\n const {error: detailedError} = getErrorDetails(error, 'wrapup', CC_FILE);\n this.metricsManager.trackEvent(\n METRIC_EVENT_NAMES.TASK_WRAPUP_FAILED,\n {\n taskId: this.data.interactionId,\n wrapUpCode: wrapupPayload.auxCodeId,\n wrapUpReason: wrapupPayload.wrapUpReason,\n ...MetricsManager.getCommonTrackingFieldForAQMResponseFailed(\n (error as any).details || {}\n ),\n },\n ['operational', 'behavioral', 'business']\n );\n throw detailedError;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -597,6 +597,9 @@ class TaskManager extends _events.default {
597
597
  // Task data is already updated by the task itself before emitting
598
598
  this.emit(_types.TASK_EVENTS.TASK_HYDRATE, t);
599
599
  });
600
+ task.on(_types.TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, t => {
601
+ this.emit(_types.TASK_EVENTS.TASK_MULTI_LOGIN_HYDRATE, t);
602
+ });
600
603
 
601
604
  // Listen for internal cleanup signal emitted by the state machine
602
605
  task.on(_types.TASK_EVENTS.TASK_CLEANUP, (t, options) => {