UNPKG

@causalfoundry/js-sdk

Version:

Causal Foundry WEB SDK (JS/TS)

92 lines (81 loc) 4.12 kB
import {injectEvent} from '../../core/injector' import {ContentBlock} from '../Navigation/typings' import { BreakProperties, CallCenterEventType, ContactProperties, OpsScorecardProperties, } from './typings' import CallCenterPropertiesTI from './typings-ti' import CfExceptionHandler from "../../core/CfExceptionHandler"; import {isISOLocal} from "../../utils"; const logIngestEvent = async (eventType: CallCenterEventType, properties: BreakProperties | ContactProperties | OpsScorecardProperties, sendNow = false) => { let checkProps: BreakProperties | ContactProperties | OpsScorecardProperties | null = null; switch (eventType) { case CallCenterEventType.Break: checkProps = validateBreakEvent(properties as BreakProperties); break; case CallCenterEventType.Contact: checkProps = validateContactEvent(properties as ContactProperties); break; case CallCenterEventType.OpsScorecard: checkProps = validateOpsScorecardEvent(properties as OpsScorecardProperties); break; default: return; // Exit early if eventType is unrecognized } if (!checkProps) { return; // Exit if the properties validation failed } injectEvent( properties, [CallCenterPropertiesTI], eventType, ContentBlock.CallCenter, '', sendNow ) } const validateBreakEvent = (properties: BreakProperties) => { if(properties.type == undefined){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.Break, 'invalid break type') }else if(properties.action == undefined){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.Break, 'invalid break action') }else if(properties.total_time < 0){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.Break, 'invalid break total_time') }else if(properties.consumed_time < 0){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.Break, 'invalid break consumed_time') } return properties } const validateContactEvent = (properties: ContactProperties) => { if(properties.action == undefined){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.Contact, 'invalid contact action') }else if(properties.details == undefined){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.Contact, 'invalid contact details') }else if(!properties.details.id){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.Contact, 'invalid contact details id') }else if(!properties.details.channel){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.Contact, 'invalid contact details channel') }else if(!properties.details.type){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.Contact, 'invalid contact details type') }else if(properties.details.start_time && !isISOLocal(properties.details.start_time)){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.Contact, 'invalid contact start_time: should be in ISO8601 format e.g. 2025-01-01T12:00:27.87+02:00') }else if(properties.transfer && !properties.transfer.id){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.Contact, 'invalid contact transfer id') } return properties } const validateOpsScorecardEvent = (properties: OpsScorecardProperties) => { if(properties.quality_traits == undefined){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.OpsScorecard, 'invalid quality_traits') }else if(properties.quality_traits.audit_count == undefined){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.OpsScorecard, 'invalid quality_traits audit_count') }else if(!properties.quality_traits.performance_group){ new CfExceptionHandler().throwAndLogError(CallCenterEventType.OpsScorecard, 'invalid quality_traits performance_group') } return properties } export default { logIngestEvent }