import assert from "assert"; import { RawEvent, NormalizedEvent, Direction } from "../../types"; export default (event: RawEvent): NormalizedEvent<"hubspot"> => { assert(event, `Hubspot:engagements null event: ${event}`); assert( event.engagement_id, `Hubspot:engagements event is missing the required field engagement_id ${event}` ); assert( event.engagement.createdAt, `Hubspot:engagements event is missing the required field engagement.createdAt ${event}` ); const engagement = event.engagement || {}; let text: string = ""; let email: string | null = null; let phone: string | null = null; let href: string | null = null; let direction: Direction = null; switch (engagement.type) { case "NOTE": text = `New Note`; break; case "EMAIL": text = `Outbound Email`; email = event.metadata && event.metadata.to && event.metadata.to[0] && event.metadata.to[0].email; direction = "outbound"; break; case "INCOMING_EMAIL": text = `Inbound Email`; email = event.metadata && event.metadata.from && event.metadata.from.email; direction = "inbound"; break; case "TASK": text = `New Task`; href = `https://app.hubspot.com/contacts/${engagement.portalId}/tasks/list/view/all/?taskId=${engagement.id}&ownerId=${engagement.ownerId}`; break; case "MEETING": text = `New Meeting`; break; case "CALL": text = `New Call`; phone = event.metadata.toNumber || null; href = event.metadata.recordingUrl || null; direction = "outbound"; break; case "CONVERSATION_SESSION": text = "Chat Session"; href = `https://app.hubspot.com/live-messages/${event.engagement.portalId}/inbox`; break; default: text = `Unknown Hubspot Engagement - ${engagement.type}`; break; } return { id: `hubspot|${event.engagement_id}`, ts: Date.parse(event.engagement.createdAt), user_info: { source_user_id: event.associations.contactIds[0] ? String(event.associations.contactIds[0]) : null, user_id: null, name: null, email, title: null, birthday: null, company: { name: null, id: null, industry: null, employee_count: null, plan: null }, created_at: null, age: null, gender: null, website: null, ip: null, avatar: null, nickname: null, phone, city: null, country: null, postal_code: null, region: null, address_line1: null, continent_code: null, address_line2: null, country_code: null, timezone: null, user_agent: null, is_employee: null, custom_attributes: null }, text, href, is_bad: false, direction, source: "hubspot", stream: "engagements" }; };