Skip to content

Commit 2cffd75

Browse files
refactor: Migrate Types to TypeScript as enums and utils
1 parent b6883b6 commit 2cffd75

23 files changed

+1110
-585
lines changed

src/apiClient.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,10 @@ export default function APIClient(
135135
this.queueEventForBatchUpload(event);
136136
}
137137

138-
if (event.EventName !== Types.MessageType.AppStateTransition) {
138+
// https://go.mparticle.com/work/SQDSDKS-6935
139+
// While Event Name is 'usually' a string, there are some cases where it is a number
140+
// in that it could be a type of MessageType Enum
141+
if (event.EventName as unknown as number !== Types.MessageType.AppStateTransition) {
139142
if (kitBlocker && kitBlocker.kitBlockingEnabled) {
140143
event = kitBlocker.createBlockedEvent(event);
141144
}

src/batchUploader.ts

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Batch } from '@mparticle/event-models';
22
import Constants from './constants';
33
import { SDKEvent, MParticleWebSDK, SDKLoggerApi } from './sdkRuntimeModels';
44
import { convertEvents } from './sdkToEventsApiConverter';
5-
import Types from './types';
5+
import { MessageType } from './types';
66
import { getRampNumber, isEmpty } from './utils';
77
import { SessionStorageVault, LocalStorageVault } from './vault';
88
import {
@@ -167,29 +167,35 @@ export class BatchUploader {
167167
* @param event event that should be queued
168168
*/
169169
public queueEvent(event: SDKEvent): void {
170-
if (!isEmpty(event)) {
171-
this.eventsQueuedForProcessing.push(event);
172-
if (this.offlineStorageEnabled && this.eventVault) {
173-
this.eventVault.store(this.eventsQueuedForProcessing);
174-
}
175-
this.mpInstance.Logger.verbose(
176-
`Queuing event: ${JSON.stringify(event)}`
177-
);
178-
this.mpInstance.Logger.verbose(
179-
`Queued event count: ${this.eventsQueuedForProcessing.length}`
180-
);
170+
if (isEmpty(event)) {
171+
return;
172+
}
181173

182-
// TODO: Remove this check once the v2 code path is removed
183-
// https://go.mparticle.com/work/SQDSDKS-3720
184-
if (
185-
!this.batchingEnabled ||
186-
Types.TriggerUploadType[event.EventDataType]
187-
) {
188-
this.prepareAndUpload(false, false);
189-
}
174+
const { verbose } = this.mpInstance.Logger;
175+
176+
this.eventsQueuedForProcessing.push(event);
177+
if (this.offlineStorageEnabled && this.eventVault) {
178+
this.eventVault.store(this.eventsQueuedForProcessing);
179+
}
180+
181+
verbose(`Queuing event: ${JSON.stringify(event)}`);
182+
verbose(`Queued event count: ${this.eventsQueuedForProcessing.length}`);
183+
184+
if (this.shouldTriggerImmediateUpload(event.EventDataType)) {
185+
this.prepareAndUpload(false, false);
190186
}
191187
}
192188

189+
// https://go.mparticle.com/work/SQDSDKS-3720
190+
private shouldTriggerImmediateUpload (eventDataType: number): boolean {
191+
const priorityEvents = [
192+
MessageType.Commerce,
193+
MessageType.UserIdentityChange,
194+
] as const;
195+
196+
return !this.batchingEnabled || priorityEvents.includes(eventDataType as typeof priorityEvents[number]);
197+
};
198+
193199
/**
194200
* This implements crucial logic to:
195201
* - bucket pending events by MPID, and then by Session, and upload individual batches for each bucket.

src/constants.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,11 @@ const Constants = {
184184
Login: 'login',
185185
Identify: 'identify',
186186
},
187+
188+
Environment: {
189+
Development: 'development',
190+
Production: 'production',
191+
},
187192
} as const;
188193

189194
export default Constants;

src/forwarders.interfaces.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,6 @@ export interface ConfiguredKit
6363
setOptOut(isOptingOut: boolean): string | KitMappedMethodFailure;
6464
removeUserAttribute(key: string): string;
6565
setUserAttribute(key: string, value: string): string;
66-
67-
// TODO: Convert type to enum during Identity migration
68-
// https://go.mparticle.com/work/SQDSDKS-5218
6966
setUserIdentity(id: UserIdentityId, type: UserIdentityType): void;
7067

7168
// TODO: https://go.mparticle.com/work/SQDSDKS-5156

src/identity-user-interfaces.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { AllUserAttributes, MPID, Product, User } from '@mparticle/web-sdk';
22
import { SDKIdentityTypeEnum } from './identity.interfaces';
3-
import { MessageType } from './types.interfaces';
3+
import { MessageType } from './types';
44
import { BaseEvent } from './sdkRuntimeModels';
55
import Constants from './constants';
66
const { HTTPCodes } = Constants;
@@ -58,7 +58,7 @@ export interface ISDKUserIdentityChangeData {
5858
}
5959

6060
export interface IUserIdentityChangeEvent extends BaseEvent {
61-
messageType: MessageType.UserIdentityChange;
61+
messageType: typeof MessageType.UserIdentityChange;
6262
userIdentityChanges: ISDKUserIdentityChanges;
6363
}
6464

@@ -75,7 +75,7 @@ export interface ISDKUserAttributeChangeData {
7575
}
7676

7777
export interface IUserAttributeChangeEvent extends BaseEvent {
78-
messageType: MessageType.UserAttributeChange;
78+
messageType: typeof MessageType.UserAttributeChange;
7979
userAttributeChanges: ISDKUserAttributeChangeData;
8080
}
8181

src/identity.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import Constants, { HTTP_OK } from './constants';
2-
import Types from './types';
2+
import Types, { IdentityType } from './types';
33
import {
44
cacheOrClearIdCache,
55
createKnownIdentities,
@@ -17,7 +17,6 @@ import {
1717
isObject,
1818
} from './utils';
1919
import { hasMPIDAndUserLoginChanged, hasMPIDChanged } from './user-utils';
20-
import { getNewIdentitiesByName } from './type-utils';
2120
import { processReadyQueue } from './pre-init-utils';
2221

2322
export default function Identity(mpInstance) {
@@ -1623,7 +1622,7 @@ export default function Identity(mpInstance) {
16231622
self.setForwarderCallbacks(newUser, method);
16241623
}
16251624

1626-
const newIdentitiesByName = getNewIdentitiesByName(
1625+
const newIdentitiesByName = IdentityType.getNewIdentitiesByName(
16271626
newIdentitiesByType
16281627
);
16291628

src/kitFilterHelper.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
import { generateHash } from "./utils";
1+
import { generateHash, valueof } from "./utils";
22
// TODO: https://mparticle-eng.atlassian.net/browse/SQDSDKS-5381
3-
import { EventTypeEnum, IdentityType } from "./types.interfaces";
4-
import Constants from './constants';
3+
import { EventType, IdentityType } from "./types";
54

65
export default class KitFilterHelper {
7-
static hashEventType(eventType: EventTypeEnum): number {
6+
static hashEventType(eventType: valueof<typeof EventType>): number {
87
return generateHash(eventType as unknown as string);
98
};
109

11-
static hashEventName(eventName: string, eventType: EventTypeEnum): number {
10+
static hashEventName(eventName: string, eventType: valueof<typeof EventType>): number {
1211
return generateHash(eventType + eventName);
1312
};
1413

15-
static hashEventAttributeKey(eventType: EventTypeEnum, eventName: string, customAttributeName: string): number {
14+
static hashEventAttributeKey(eventType: valueof<typeof EventType>, eventName: string, customAttributeName: string): number {
1615
return generateHash(eventType + eventName + customAttributeName);
1716
}
1817

@@ -22,7 +21,7 @@ export default class KitFilterHelper {
2221

2322
// User Identities are not actually hashed, this method is named this way to
2423
// be consistent with the filter class. UserIdentityType is also a number
25-
static hashUserIdentity(userIdentity: IdentityType): IdentityType {
24+
static hashUserIdentity(userIdentity: typeof IdentityType): typeof IdentityType {
2625
return userIdentity;
2726
}
2827

src/mp-instance.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,8 @@ export default function mParticleInstance(instanceName) {
212212
*/
213213
this.getEnvironment = function() {
214214
return self._Store.SDKConfig.isDevelopmentMode
215-
? Types.Environment.Development
216-
: Types.Environment.Production;
215+
? Constants.Environment.Development
216+
: Constants.Environment.Production;
217217
};
218218
/**
219219
* Returns the mParticle SDK version number

src/sdkRuntimeModels.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
} from '@mparticle/web-sdk';
99
import { IStore } from './store';
1010
import Validators from './validators';
11-
import { Dictionary } from './utils';
11+
import { Dictionary, valueof } from './utils';
1212
import { IServerModel } from './serverModel';
1313
import { IKitConfigs } from './configAPIClient';
1414
import { SDKConsentApi, SDKConsentState } from './consent';
@@ -29,7 +29,7 @@ import {
2929
IdentityCallback,
3030
ISDKUserAttributes,
3131
} from './identity-user-interfaces';
32-
import { IIdentityType } from './types.interfaces';
32+
import { IdentityType } from './types';
3333
import IntegrationCapture from './integrationCapture';
3434
import { INativeSdkHelpers } from './nativeSdkHelpers.interfaces';
3535
import { ICookieSyncManager, IPixelConfiguration } from './cookieSyncManager.interfaces';
@@ -154,7 +154,7 @@ interface IEvents {
154154
export interface MParticleWebSDK {
155155
addForwarder(mockForwarder: MPForwarder): void;
156156
_IntegrationCapture: IntegrationCapture;
157-
IdentityType: IIdentityType;
157+
IdentityType: valueof<typeof IdentityType>;
158158
_Identity: IIdentity;
159159
Identity: SDKIdentityApi;
160160
Logger: SDKLoggerApi;

src/sideloadedKit.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,23 @@ import {
66
IKitFilterSettings,
77
} from './configAPIClient';
88
import { UnregisteredKit } from './forwarders.interfaces';
9-
import { EventTypeEnum, IdentityType } from './types.interfaces';
9+
import { EventType, IdentityType } from './types';
10+
import { valueof } from './utils';
1011

1112
export interface IMPSideloadedKit {
1213
kitInstance: UnregisteredKit;
1314
filterDictionary: IKitFilterSettings;
1415

15-
addEventTypeFilter(eventType: EventTypeEnum): void;
16-
addEventNameFilter(eventType: EventTypeEnum, eventName: string): void;
16+
addEventTypeFilter(eventType: valueof<typeof EventType>): void;
17+
addEventNameFilter(eventType: valueof<typeof EventType>, eventName: string): void;
1718
addEventAttributeFilter(
18-
eventType: EventTypeEnum,
19+
eventType: valueof<typeof EventType>,
1920
eventName: string,
2021
customAttributeKey: string
2122
): void;
2223
addScreenNameFilter(screenName: string): void;
2324
addScreenAttributeFilter(screenName: string, screenAttribute: string): void;
24-
addUserIdentityFilter(userIdentity: IdentityType): void;
25+
addUserIdentityFilter(userIdentity: typeof IdentityType): void;
2526
addUserAttributeFilter(userAttributeKey: string): void;
2627
}
2728

@@ -57,13 +58,13 @@ export default class MPSideloadedKit implements IMPSideloadedKit{
5758
this.kitInstance = unregisteredKitInstance;
5859
}
5960

60-
public addEventTypeFilter(eventType: EventTypeEnum): void {
61+
public addEventTypeFilter(eventType: valueof<typeof EventType>): void {
6162
const hashedEventType = KitFilterHelper.hashEventType(eventType);
6263
this.filterDictionary.eventTypeFilters.push(hashedEventType);
6364
}
6465

6566
public addEventNameFilter(
66-
eventType: EventTypeEnum,
67+
eventType: valueof<typeof EventType>,
6768
eventName: string
6869
): void {
6970
const hashedEventName = KitFilterHelper.hashEventName(
@@ -74,7 +75,7 @@ export default class MPSideloadedKit implements IMPSideloadedKit{
7475
}
7576

7677
public addEventAttributeFilter(
77-
eventType: EventTypeEnum,
78+
eventType: valueof<typeof EventType>,
7879
eventName: string,
7980
customAttributeKey: string
8081
): void {
@@ -89,7 +90,7 @@ export default class MPSideloadedKit implements IMPSideloadedKit{
8990
public addScreenNameFilter(screenName: string): void {
9091
const hashedScreenName = KitFilterHelper.hashEventName(
9192
screenName,
92-
EventTypeEnum.Unknown
93+
EventType.Unknown,
9394
);
9495
this.filterDictionary.screenNameFilters.push(hashedScreenName);
9596
}
@@ -99,7 +100,7 @@ export default class MPSideloadedKit implements IMPSideloadedKit{
99100
screenAttribute: string
100101
): void {
101102
const hashedScreenAttribute = KitFilterHelper.hashEventAttributeKey(
102-
EventTypeEnum.Unknown,
103+
EventType.Unknown,
103104
screenName,
104105
screenAttribute
105106
);
@@ -108,7 +109,7 @@ export default class MPSideloadedKit implements IMPSideloadedKit{
108109
);
109110
}
110111

111-
public addUserIdentityFilter(userIdentity: IdentityType): void {
112+
public addUserIdentityFilter(userIdentity: typeof IdentityType): void {
112113
const hashedIdentityType = KitFilterHelper.hashUserIdentity(
113114
userIdentity
114115
);

0 commit comments

Comments
 (0)