@mparticle/web-sdk
Version:
mParticle core SDK for web applications
798 lines (744 loc) • 29.7 kB
text/typescript
import {
SDKEvent,
SDKGeoLocation,
SDKProduct,
SDKPromotion,
SDKProductActionType,
} from './sdkRuntimeModels';
import * as EventsApi from '@mparticle/event-models';
import {
SDKConsentState,
SDKGDPRConsentState,
SDKCCPAConsentState,
} from './consent';
import Types from './types';
import { Dictionary, isEmpty } from './utils';
import { ISDKUserIdentity } from './identity-user-interfaces';
import { SDKIdentityTypeEnum } from './identity.interfaces';
import Constants from './constants';
import { IMParticleWebSDKInstance } from './mp-instance';
const { FeatureFlags } = Constants;
const {
CaptureIntegrationSpecificIds,
CaptureIntegrationSpecificIdsV2,
} = FeatureFlags;
type PartnerIdentities = Dictionary<string>;
// https://go.mparticle.com/work/SQDSDKS-6964
interface Batch extends EventsApi.Batch {
partner_identities?: PartnerIdentities;
}
export function convertEvents(
mpid: string,
sdkEvents: SDKEvent[],
mpInstance: IMParticleWebSDKInstance
): Batch | null {
if (!mpid) {
return null;
}
if (!sdkEvents || sdkEvents.length < 1) {
return null;
}
const {
_IntegrationCapture,
_Helpers,
} = mpInstance
const {
getFeatureFlag,
} = _Helpers;
const user = mpInstance.Identity.getCurrentUser();
const uploadEvents: EventsApi.BaseEvent[] = [];
let lastEvent: SDKEvent = null;
for (const sdkEvent of sdkEvents) {
if (sdkEvent) {
lastEvent = sdkEvent;
const baseEvent = convertEvent(sdkEvent);
if (baseEvent) {
uploadEvents.push(baseEvent);
}
}
}
if (!lastEvent) {
return null;
}
let currentConsentState: SDKConsentState = null;
// Add the consent state from either the Last Event or the user
if (!isEmpty(lastEvent.ConsentState)) {
currentConsentState = lastEvent.ConsentState;
} else if (!isEmpty(user)) {
currentConsentState = user.getConsentState();
}
const upload: Batch = {
source_request_id: mpInstance._Helpers.generateUniqueId(),
mpid,
timestamp_unixtime_ms: new Date().getTime(),
environment: lastEvent.Debug
? EventsApi.BatchEnvironmentEnum.development
: EventsApi.BatchEnvironmentEnum.production,
events: uploadEvents,
mp_deviceid: lastEvent.DeviceId,
sdk_version: lastEvent.SDKVersion,
// TODO: Refactor this to read from _Store or a global config
application_info: {
application_version: lastEvent.AppVersion,
application_name: lastEvent.AppName,
package: lastEvent.Package,
sideloaded_kits_count: mpInstance._Store.sideloadedKitsCount,
},
device_info: {
platform: EventsApi.DeviceInformationPlatformEnum.web,
screen_width:
typeof window !== 'undefined' &&
typeof window.screen !== 'undefined'
? window.screen.width
: 0,
screen_height:
typeof window !== 'undefined' &&
typeof window.screen !== 'undefined'
? window.screen.height
: 0,
},
user_attributes: lastEvent.UserAttributes,
user_identities: convertUserIdentities(lastEvent.UserIdentities),
consent_state: convertConsentState(currentConsentState),
integration_attributes: lastEvent.IntegrationAttributes,
};
if (lastEvent.DataPlan && lastEvent.DataPlan.PlanId) {
upload.context = {
data_plan: {
plan_id: lastEvent.DataPlan.PlanId,
plan_version: lastEvent.DataPlan.PlanVersion || undefined,
},
};
}
// https://go.mparticle.com/work/SQDSDKS-7639
const integrationSpecificIds = getFeatureFlag && Boolean(getFeatureFlag(CaptureIntegrationSpecificIds));
const integrationSpecificIdsV2 = getFeatureFlag && (getFeatureFlag(CaptureIntegrationSpecificIdsV2) as string);
const isIntegrationCaptureEnabled = (integrationSpecificIdsV2 && integrationSpecificIdsV2 !== Constants.CaptureIntegrationSpecificIdsV2Modes.None) || integrationSpecificIds === true;
if (isIntegrationCaptureEnabled) {
const capturedPartnerIdentities: PartnerIdentities = _IntegrationCapture?.getClickIdsAsPartnerIdentities();
if (!isEmpty(capturedPartnerIdentities)) {
upload.partner_identities = capturedPartnerIdentities;
}
}
return upload;
}
export function convertConsentState(
sdkConsentState?: SDKConsentState
): EventsApi.ConsentState | null {
if (isEmpty(sdkConsentState)) {
return null;
}
const consentState: EventsApi.ConsentState = {
gdpr: convertGdprConsentState(sdkConsentState.getGDPRConsentState()),
ccpa: convertCcpaConsentState(sdkConsentState.getCCPAConsentState()),
};
return consentState;
}
export function convertGdprConsentState(
sdkGdprConsentState: SDKGDPRConsentState
): { [key: string]: EventsApi.GDPRConsentState | null } {
if (!sdkGdprConsentState) {
return null;
}
const state: { [key: string]: EventsApi.GDPRConsentState } = {};
for (const purpose in sdkGdprConsentState) {
if (sdkGdprConsentState.hasOwnProperty(purpose)) {
state[purpose] = {
consented: sdkGdprConsentState[purpose].Consented,
hardware_id: sdkGdprConsentState[purpose].HardwareId,
document: sdkGdprConsentState[purpose].ConsentDocument,
timestamp_unixtime_ms: sdkGdprConsentState[purpose].Timestamp,
location: sdkGdprConsentState[purpose].Location,
};
}
}
return state;
}
export function convertCcpaConsentState(
sdkCcpaConsentState: SDKCCPAConsentState
): { data_sale_opt_out: EventsApi.CCPAConsentState } {
if (!sdkCcpaConsentState) {
return null;
}
const state: { data_sale_opt_out: EventsApi.CCPAConsentState } = {
data_sale_opt_out: {
consented: sdkCcpaConsentState.Consented,
hardware_id: sdkCcpaConsentState.HardwareId,
document: sdkCcpaConsentState.ConsentDocument,
timestamp_unixtime_ms: sdkCcpaConsentState.Timestamp,
location: sdkCcpaConsentState.Location,
},
};
return state;
}
export function convertUserIdentities(
sdkUserIdentities?: ISDKUserIdentity[]
): EventsApi.BatchUserIdentities | null {
if (!sdkUserIdentities || !sdkUserIdentities.length) {
return null;
}
const batchIdentities: EventsApi.BatchUserIdentities = {};
for (const identity of sdkUserIdentities) {
switch (identity.Type) {
case Types.IdentityType.CustomerId:
batchIdentities.customer_id = identity.Identity;
break;
case Types.IdentityType.Email:
batchIdentities.email = identity.Identity;
break;
case Types.IdentityType.Facebook:
batchIdentities.facebook = identity.Identity;
break;
case Types.IdentityType.FacebookCustomAudienceId:
batchIdentities.facebook_custom_audience_id = identity.Identity;
break;
case Types.IdentityType.Google:
batchIdentities.google = identity.Identity;
break;
case Types.IdentityType.Microsoft:
batchIdentities.microsoft = identity.Identity;
break;
case Types.IdentityType.Other:
batchIdentities.other = identity.Identity;
break;
case Types.IdentityType.Other2:
batchIdentities.other_id_2 = identity.Identity;
break;
case Types.IdentityType.Other3:
batchIdentities.other_id_3 = identity.Identity;
break;
case Types.IdentityType.Other4:
batchIdentities.other_id_4 = identity.Identity;
break;
case Types.IdentityType.Other5:
batchIdentities.other_id_5 = identity.Identity;
break;
case Types.IdentityType.Other6:
batchIdentities.other_id_6 = identity.Identity;
break;
case Types.IdentityType.Other7:
batchIdentities.other_id_7 = identity.Identity;
break;
case Types.IdentityType.Other8:
batchIdentities.other_id_8 = identity.Identity;
break;
case Types.IdentityType.Other9:
batchIdentities.other_id_9 = identity.Identity;
break;
case Types.IdentityType.Other10:
batchIdentities.other_id_10 = identity.Identity;
break;
case Types.IdentityType.MobileNumber:
batchIdentities.mobile_number = identity.Identity;
break;
case Types.IdentityType.PhoneNumber2:
batchIdentities.phone_number_2 = identity.Identity;
break;
case Types.IdentityType.PhoneNumber3:
batchIdentities.phone_number_3 = identity.Identity;
break;
default:
break;
}
}
return batchIdentities;
}
export function convertEvent(sdkEvent: SDKEvent): EventsApi.BaseEvent | null {
if (!sdkEvent) {
return null;
}
switch (sdkEvent.EventDataType) {
case Types.MessageType.AppStateTransition:
return convertAST(sdkEvent);
case Types.MessageType.Commerce:
return convertCommerceEvent(sdkEvent);
case Types.MessageType.CrashReport:
return convertCrashReportEvent(sdkEvent);
case Types.MessageType.OptOut:
return convertOptOutEvent(sdkEvent);
case Types.MessageType.PageEvent:
// Note: Media Events are also sent as PageEvents/CustomEvents
return convertCustomEvent(sdkEvent);
case Types.MessageType.PageView:
return convertPageViewEvent(sdkEvent);
case Types.MessageType.Profile:
//deprecated and not supported by the web SDK
return null;
case Types.MessageType.SessionEnd:
return convertSessionEndEvent(sdkEvent);
case Types.MessageType.SessionStart:
return convertSessionStartEvent(sdkEvent);
case Types.MessageType.UserAttributeChange:
return convertUserAttributeChangeEvent(sdkEvent);
case Types.MessageType.UserIdentityChange:
return convertUserIdentityChangeEvent(sdkEvent);
default:
break;
}
return null;
}
export function convertProductActionType(
actionType: SDKProductActionType
): EventsApi.ProductActionActionEnum {
if (!actionType) {
return EventsApi.ProductActionActionEnum.unknown;
}
switch (actionType) {
case SDKProductActionType.AddToCart:
return EventsApi.ProductActionActionEnum.addToCart;
case SDKProductActionType.AddToWishlist:
return EventsApi.ProductActionActionEnum.addToWishlist;
case SDKProductActionType.Checkout:
return EventsApi.ProductActionActionEnum.checkout;
case SDKProductActionType.CheckoutOption:
return EventsApi.ProductActionActionEnum.checkoutOption;
case SDKProductActionType.Click:
return EventsApi.ProductActionActionEnum.click;
case SDKProductActionType.Purchase:
return EventsApi.ProductActionActionEnum.purchase;
case SDKProductActionType.Refund:
return EventsApi.ProductActionActionEnum.refund;
case SDKProductActionType.RemoveFromCart:
return EventsApi.ProductActionActionEnum.removeFromCart;
case SDKProductActionType.RemoveFromWishlist:
return EventsApi.ProductActionActionEnum.removeFromWishlist;
case SDKProductActionType.ViewDetail:
return EventsApi.ProductActionActionEnum.viewDetail;
default:
return EventsApi.ProductActionActionEnum.unknown;
}
}
export function convertProductAction(
sdkEvent: SDKEvent
): EventsApi.ProductAction | null {
if (!sdkEvent.ProductAction) {
return null;
}
const productAction: EventsApi.ProductAction = {
action: convertProductActionType(
sdkEvent.ProductAction.ProductActionType
),
checkout_step: sdkEvent.ProductAction.CheckoutStep,
checkout_options: sdkEvent.ProductAction.CheckoutOptions,
transaction_id: sdkEvent.ProductAction.TransactionId,
affiliation: sdkEvent.ProductAction.Affiliation,
total_amount: sdkEvent.ProductAction.TotalAmount,
tax_amount: sdkEvent.ProductAction.TaxAmount,
shipping_amount: sdkEvent.ProductAction.ShippingAmount,
coupon_code: sdkEvent.ProductAction.CouponCode,
products: convertProducts(sdkEvent.ProductAction.ProductList),
};
return productAction;
}
export function convertProducts(
sdkProducts: SDKProduct[]
): EventsApi.Product[] | null {
if (!sdkProducts || !sdkProducts.length) {
return null;
}
const products: EventsApi.Product[] = [];
for (const sdkProduct of sdkProducts) {
const product: EventsApi.Product = {
id: sdkProduct.Sku,
name: sdkProduct.Name,
brand: sdkProduct.Brand,
category: sdkProduct.Category,
variant: sdkProduct.Variant,
total_product_amount: sdkProduct.TotalAmount,
position: sdkProduct.Position,
price: sdkProduct.Price,
quantity: sdkProduct.Quantity,
coupon_code: sdkProduct.CouponCode,
custom_attributes: sdkProduct.Attributes as Record<string, string>,
};
products.push(product);
}
return products;
}
export function convertPromotionAction(
sdkEvent: SDKEvent
): EventsApi.PromotionAction | null {
if (!sdkEvent.PromotionAction) {
return null;
}
const promotionAction: EventsApi.PromotionAction = {
action: sdkEvent.PromotionAction
.PromotionActionType as EventsApi.PromotionActionActionEnum,
promotions: convertPromotions(sdkEvent.PromotionAction.PromotionList),
};
return promotionAction;
}
export function convertPromotions(
sdkPromotions: SDKPromotion[]
): EventsApi.Promotion[] | null {
if (!sdkPromotions || !sdkPromotions.length) {
return null;
}
const promotions: EventsApi.Promotion[] = [];
for (const sdkPromotion of sdkPromotions) {
const promotion: EventsApi.Promotion = {
id: sdkPromotion.Id,
name: sdkPromotion.Name,
creative: sdkPromotion.Creative,
position: sdkPromotion.Position,
};
promotions.push(promotion);
}
return promotions;
}
export function convertImpressions(
sdkEvent: SDKEvent
): EventsApi.ProductImpression[] | null {
if (!sdkEvent.ProductImpressions) {
return null;
}
const impressions: EventsApi.ProductImpression[] = [];
for (const sdkImpression of sdkEvent.ProductImpressions) {
const impression: EventsApi.ProductImpression = {
product_impression_list: sdkImpression.ProductImpressionList,
products: convertProducts(sdkImpression.ProductList),
};
impressions.push(impression);
}
return impressions;
}
export function convertShoppingCart(
sdkEvent: SDKEvent
): EventsApi.ShoppingCart | null {
if (
!sdkEvent.ShoppingCart ||
!sdkEvent.ShoppingCart.ProductList ||
!sdkEvent.ShoppingCart.ProductList.length
) {
return null;
}
const shoppingCart: EventsApi.ShoppingCart = {
products: convertProducts(sdkEvent.ShoppingCart.ProductList),
};
return shoppingCart;
}
export function convertCommerceEvent(
sdkEvent: SDKEvent
): EventsApi.CommerceEvent {
const commonEventData: EventsApi.CommonEventData = convertBaseEventData(
sdkEvent
);
let commerceEventData: EventsApi.CommerceEventData = {
custom_flags: sdkEvent.CustomFlags,
product_action: convertProductAction(sdkEvent),
promotion_action: convertPromotionAction(sdkEvent),
product_impressions: convertImpressions(sdkEvent),
shopping_cart: convertShoppingCart(sdkEvent),
currency_code: sdkEvent.CurrencyCode,
};
commerceEventData = Object.assign(commerceEventData, commonEventData);
return {
event_type: EventsApi.EventTypeEnum.commerceEvent,
data: commerceEventData,
};
}
export function convertCrashReportEvent(
sdkEvent: SDKEvent
): EventsApi.CrashReportEvent {
const commonEventData: EventsApi.CommonEventData = convertBaseEventData(
sdkEvent
);
let crashReportEventData: EventsApi.CrashReportEventData = {
message: sdkEvent.EventName,
};
crashReportEventData = Object.assign(crashReportEventData, commonEventData);
return {
event_type: EventsApi.EventTypeEnum.crashReport,
data: crashReportEventData,
};
}
export function convertAST(
sdkEvent: SDKEvent
): EventsApi.ApplicationStateTransitionEvent {
const commonEventData: EventsApi.CommonEventData = convertBaseEventData(
sdkEvent
);
// Determine the transition type based on IsBackgroundAST flag
const { applicationBackground, applicationInitialized } = EventsApi.ApplicationStateTransitionEventDataApplicationTransitionTypeEnum;
const transitionType = sdkEvent.IsBackgroundAST ? applicationBackground : applicationInitialized;
let astEventData: EventsApi.ApplicationStateTransitionEventData = {
application_transition_type: transitionType,
is_first_run: sdkEvent.IsFirstRun,
is_upgrade: false,
launch_referral: sdkEvent.LaunchReferral,
};
astEventData = Object.assign(astEventData, commonEventData);
return {
event_type: EventsApi.EventTypeEnum.applicationStateTransition,
data: astEventData,
};
}
export function convertSessionEndEvent(
sdkEvent: SDKEvent
): EventsApi.SessionEndEvent {
const commonEventData: EventsApi.CommonEventData = convertBaseEventData(
sdkEvent
);
let sessionEndEventData: EventsApi.SessionEndEventData = {
session_duration_ms: sdkEvent.SessionLength,
//note: External Events DTO does not support the session mpids array as of this time.
//spanning_mpids: sdkEvent.SessionMpids
};
sessionEndEventData = Object.assign(sessionEndEventData, commonEventData);
return {
event_type: EventsApi.EventTypeEnum.sessionEnd,
data: sessionEndEventData,
};
}
export function convertSessionStartEvent(
sdkEvent: SDKEvent
): EventsApi.SessionStartEvent {
const commonEventData: EventsApi.CommonEventData = convertBaseEventData(
sdkEvent
);
let sessionStartEventData: EventsApi.SessionStartEventData = {};
sessionStartEventData = Object.assign(
sessionStartEventData,
commonEventData
);
return {
event_type: EventsApi.EventTypeEnum.sessionStart,
data: sessionStartEventData,
};
}
export function convertPageViewEvent(
sdkEvent: SDKEvent
): EventsApi.ScreenViewEvent {
const commonEventData: EventsApi.CommonEventData = convertBaseEventData(
sdkEvent
);
let screenViewEventData: EventsApi.ScreenViewEventData = {
custom_flags: sdkEvent.CustomFlags,
screen_name: sdkEvent.EventName,
};
screenViewEventData = Object.assign(screenViewEventData, commonEventData);
return {
event_type: EventsApi.EventTypeEnum.screenView,
data: screenViewEventData,
};
}
export function convertOptOutEvent(sdkEvent: SDKEvent): EventsApi.OptOutEvent {
const commonEventData: EventsApi.CommonEventData = convertBaseEventData(
sdkEvent
);
let optOutEventData: EventsApi.OptOutEventData = {
is_opted_out: sdkEvent.OptOut,
};
optOutEventData = Object.assign(optOutEventData, commonEventData);
return {
event_type: EventsApi.EventTypeEnum.optOut,
data: optOutEventData,
};
}
export function convertCustomEvent(sdkEvent: SDKEvent): EventsApi.CustomEvent {
const commonEventData: EventsApi.CommonEventData = convertBaseEventData(
sdkEvent
);
let customEventData: EventsApi.CustomEventData = {
custom_event_type: convertSdkEventType(
sdkEvent.EventCategory
) as EventsApi.CustomEventDataCustomEventTypeEnum,
custom_flags: sdkEvent.CustomFlags,
event_name: sdkEvent.EventName,
};
customEventData = Object.assign(customEventData, commonEventData);
return {
event_type: EventsApi.EventTypeEnum.customEvent,
data: customEventData,
};
}
export function convertSdkEventType(
sdkEventType: number
):
| EventsApi.CustomEventDataCustomEventTypeEnum
| EventsApi.CommerceEventDataCustomEventTypeEnum {
switch (sdkEventType) {
case Types.EventType.Other:
return EventsApi.CustomEventDataCustomEventTypeEnum.other;
case Types.EventType.Location:
return EventsApi.CustomEventDataCustomEventTypeEnum.location;
case Types.EventType.Navigation:
return EventsApi.CustomEventDataCustomEventTypeEnum.navigation;
case Types.EventType.Search:
return EventsApi.CustomEventDataCustomEventTypeEnum.search;
case Types.EventType.Social:
return EventsApi.CustomEventDataCustomEventTypeEnum.social;
case Types.EventType.Transaction:
return EventsApi.CustomEventDataCustomEventTypeEnum.transaction;
case Types.EventType.UserContent:
return EventsApi.CustomEventDataCustomEventTypeEnum.userContent;
case Types.EventType.UserPreference:
return EventsApi.CustomEventDataCustomEventTypeEnum.userPreference;
case Types.EventType.Media:
return EventsApi.CustomEventDataCustomEventTypeEnum.media;
case Types.CommerceEventType.ProductAddToCart:
return EventsApi.CommerceEventDataCustomEventTypeEnum.addToCart;
case Types.CommerceEventType.ProductAddToWishlist:
return EventsApi.CommerceEventDataCustomEventTypeEnum.addToWishlist;
case Types.CommerceEventType.ProductCheckout:
return EventsApi.CommerceEventDataCustomEventTypeEnum.checkout;
case Types.CommerceEventType.ProductCheckoutOption:
return EventsApi.CommerceEventDataCustomEventTypeEnum
.checkoutOption;
case Types.CommerceEventType.ProductClick:
return EventsApi.CommerceEventDataCustomEventTypeEnum.click;
case Types.CommerceEventType.ProductImpression:
return EventsApi.CommerceEventDataCustomEventTypeEnum.impression;
case Types.CommerceEventType.ProductPurchase:
return EventsApi.CommerceEventDataCustomEventTypeEnum.purchase;
case Types.CommerceEventType.ProductRefund:
return EventsApi.CommerceEventDataCustomEventTypeEnum.refund;
case Types.CommerceEventType.ProductRemoveFromCart:
return EventsApi.CommerceEventDataCustomEventTypeEnum
.removeFromCart;
case Types.CommerceEventType.ProductRemoveFromWishlist:
return EventsApi.CommerceEventDataCustomEventTypeEnum
.removeFromWishlist;
case Types.CommerceEventType.ProductViewDetail:
return EventsApi.CommerceEventDataCustomEventTypeEnum.viewDetail;
case Types.CommerceEventType.PromotionClick:
return EventsApi.CommerceEventDataCustomEventTypeEnum
.promotionClick;
case Types.CommerceEventType.PromotionView:
return EventsApi.CommerceEventDataCustomEventTypeEnum.promotionView;
default:
return EventsApi.CustomEventDataCustomEventTypeEnum.unknown;
}
}
export function convertBaseEventData(
sdkEvent: SDKEvent
): EventsApi.CommonEventData {
const commonEventData: EventsApi.CommonEventData = {
timestamp_unixtime_ms: sdkEvent.Timestamp,
session_uuid: sdkEvent.SessionId,
session_start_unixtime_ms: sdkEvent.SessionStartDate,
custom_attributes: sdkEvent.EventAttributes,
location: convertSDKLocation(sdkEvent.Location),
source_message_id: sdkEvent.SourceMessageId,
active_time_on_site_ms: sdkEvent.ActiveTimeOnSite
};
return commonEventData;
}
export function convertSDKLocation(
sdkEventLocation: SDKGeoLocation
): EventsApi.GeoLocation {
if (sdkEventLocation && Object.keys(sdkEventLocation).length) {
return {
latitude: sdkEventLocation.lat,
longitude: sdkEventLocation.lng,
};
}
return null;
}
export function convertUserAttributeChangeEvent(
sdkEvent: SDKEvent
): EventsApi.UserAttributeChangeEvent | null {
const commonEventData: EventsApi.CommonEventData = convertBaseEventData(
sdkEvent
);
let userAttributeChangeEvent: EventsApi.UserAttributeChangeEventData = {
user_attribute_name: sdkEvent.UserAttributeChanges.UserAttributeName,
new: sdkEvent.UserAttributeChanges.New,
old: sdkEvent.UserAttributeChanges.Old,
deleted: sdkEvent.UserAttributeChanges.Deleted,
is_new_attribute: sdkEvent.UserAttributeChanges.IsNewAttribute,
};
userAttributeChangeEvent = {
...userAttributeChangeEvent,
...commonEventData,
};
return {
event_type: EventsApi.EventTypeEnum.userAttributeChange,
data: userAttributeChangeEvent,
};
}
export function convertUserIdentityChangeEvent(
sdkEvent: SDKEvent
): EventsApi.UserIdentityChangeEvent | null {
const commonEventData: EventsApi.CommonEventData = convertBaseEventData(
sdkEvent
);
let userIdentityChangeEvent: EventsApi.UserIdentityChangeEventData = {
new: {
identity_type: convertUserIdentityTypeToServerIdentityType(
sdkEvent.UserIdentityChanges.New.IdentityType
),
identity: sdkEvent.UserIdentityChanges.New.Identity || null,
timestamp_unixtime_ms: sdkEvent.Timestamp,
created_this_batch:
sdkEvent.UserIdentityChanges.New.CreatedThisBatch,
},
old: {
identity_type: convertUserIdentityTypeToServerIdentityType(
sdkEvent.UserIdentityChanges.Old.IdentityType
),
identity: sdkEvent.UserIdentityChanges.Old.Identity || null,
timestamp_unixtime_ms: sdkEvent.Timestamp,
created_this_batch:
sdkEvent.UserIdentityChanges.Old.CreatedThisBatch,
},
};
userIdentityChangeEvent = Object.assign(
userIdentityChangeEvent,
commonEventData
);
return {
event_type: EventsApi.EventTypeEnum.userIdentityChange,
data: userIdentityChangeEvent,
};
}
export function convertUserIdentityTypeToServerIdentityType(
identityType: SDKIdentityTypeEnum
): EventsApi.IdentityType {
switch (identityType) {
case SDKIdentityTypeEnum.other:
return EventsApi.IdentityTypeEnum.other;
case SDKIdentityTypeEnum.customerId:
return EventsApi.IdentityTypeEnum.customerId;
case SDKIdentityTypeEnum.facebook:
return EventsApi.IdentityTypeEnum.facebook;
case SDKIdentityTypeEnum.twitter:
return EventsApi.IdentityTypeEnum.twitter;
case SDKIdentityTypeEnum.google:
return EventsApi.IdentityTypeEnum.google;
case SDKIdentityTypeEnum.microsoft:
return EventsApi.IdentityTypeEnum.microsoft;
case SDKIdentityTypeEnum.yahoo:
return EventsApi.IdentityTypeEnum.yahoo;
case SDKIdentityTypeEnum.email:
return EventsApi.IdentityTypeEnum.email;
case SDKIdentityTypeEnum.alias:
return EventsApi.IdentityTypeEnum.alias;
case SDKIdentityTypeEnum.facebookCustomAudienceId:
return EventsApi.IdentityTypeEnum.facebookCustomAudienceId;
case SDKIdentityTypeEnum.otherId2:
return EventsApi.IdentityTypeEnum.otherId2;
case SDKIdentityTypeEnum.otherId3:
return EventsApi.IdentityTypeEnum.otherId3;
case SDKIdentityTypeEnum.otherId4:
return EventsApi.IdentityTypeEnum.otherId4;
case SDKIdentityTypeEnum.otherId5:
return EventsApi.IdentityTypeEnum.otherId5;
case SDKIdentityTypeEnum.otherId6:
return EventsApi.IdentityTypeEnum.otherId6;
case SDKIdentityTypeEnum.otherId7:
return EventsApi.IdentityTypeEnum.otherId7;
case SDKIdentityTypeEnum.otherId8:
return EventsApi.IdentityTypeEnum.otherId8;
case SDKIdentityTypeEnum.otherId9:
return EventsApi.IdentityTypeEnum.otherId9;
case SDKIdentityTypeEnum.otherId10:
return EventsApi.IdentityTypeEnum.otherId10;
case SDKIdentityTypeEnum.mobileNumber:
return EventsApi.IdentityTypeEnum.mobileNumber;
case SDKIdentityTypeEnum.phoneNumber2:
return EventsApi.IdentityTypeEnum.phoneNumber2;
case SDKIdentityTypeEnum.phoneNumber3:
return EventsApi.IdentityTypeEnum.phoneNumber3;
}
}