import assert from "assert"; import { RawEvent, NormalizedEvent } from "../../types"; export default (event: RawEvent): NormalizedEvent<"code"> => { assert(event, `Node:User null event: ${event}`); assert( event.messageId, `Node:User event is missing the required field messageId ${event}` ); assert( event.timestamp, `Node:User event is missing the required field timestamp ${event}` ); const traits = event.traits || {}; const address = traits.address || {}; const company = { name: (traits.company && traits.company.name) || null, id: (traits.company && traits.company.id) || null, industry: (traits.company && traits.company.industry) || null, employee_count: (traits.company && traits.company.employee_count) || null, plan: (traits.company && traits.company.plan) || null }; return { id: `node|${event.messageId}`, ts: Date.parse(event.timestamp), user_info: { source_user_id: null, user_id: event.userId || null, name: traits.name || `${traits.firstName || ""} ${traits.lastName || ""}`.trim() || null, email: traits.email || null, title: traits.title || null, birthday: traits.birthday || null, company, created_at: traits.createdAt ? Date.parse(traits.createdAt) : null, age: traits.age || null, gender: traits.gender || null, website: traits.website || null, ip: null, avatar: traits.avatar || null, nickname: traits.username || traits.firstName || null, phone: traits.phone || null, city: address.city || null, country: address.country || null, postal_code: address.postalCode || null, region: address.state || null, address_line1: address.street || null, continent_code: null, address_line2: null, country_code: null, timezone: null, user_agent: null, is_employee: null, custom_attributes: Object.keys(traits).length ? JSON.stringify({ "code|user": { _ts: Date.parse(event.timestamp), ...traits } }) : null }, text: "User Identified" || null, href: null, is_bad: false, direction: null, source: "code", stream: "user" }; };