Skip to content

Commit cac319e

Browse files
Save Point
1 parent 6cb7247 commit cac319e

File tree

11 files changed

+104
-80
lines changed

11 files changed

+104
-80
lines changed

src/configAPIClient.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { IPixelConfiguration } from './cookieSyncManager';
1616
import { IMParticleWebSDKInstance } from './mp-instance';
1717
import { UserAttributeFilters, UserIdentityFilters } from './forwarders.interfaces';
1818

19+
// FIXME: Technically this is an overlap of ISDKInitConfig
1920
export interface IKitConfigs extends IKitFilterSettings {
2021
name: string;
2122
suffix?: string;
@@ -24,6 +25,8 @@ export interface IKitConfigs extends IKitFilterSettings {
2425
isVisible: boolean;
2526
isDebugString: BooleanStringLowerCase;
2627
hasDebugString: BooleanStringLowerCase;
28+
29+
// TODO: These settings overlap with ForwarderSettings
2730
settings: Dictionary;
2831
eventSubscriptionId: number;
2932
excludeAnonymousUser: boolean;

src/forwarders.interfaces.ts

Lines changed: 50 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import { SDKEvent, SDKEventCustomFlags, SDKInitConfig } from './sdkRuntimeModels';
22
import { Dictionary } from './utils';
3-
import { IKitConfigs, IKitFilterSettings } from './configAPIClient';
4-
import { IdentityApiData } from '@mparticle/web-sdk';
53
import { IFilteringConsentRuleValues, IFilteringEventAttributeValue, IFilteringUserAttributeValue, IKitConfigs, IKitFilterSettings } from './configAPIClient';
64
import { Callback, IdentityApiData, Logger, UserIdentities } from '@mparticle/web-sdk';
75
import {
@@ -45,17 +43,17 @@ export interface ConfiguredKit
4543
common: Dictionary<unknown>;
4644
id: number;
4745
init(
48-
settings: Dictionary<unknown>,
46+
settings: Dictionary<unknown>, // FIXME: Make this a real type
4947
service: forwardingStatsCallback,
5048
testMode: boolean,
5149
trackerId: string | null,
52-
userAttributes: UserAttributes,
53-
userIdentities: ISDKUserIdentity,
50+
userAttributes: ISDKUserAttributes,
51+
userIdentities: ISDKUserIdentity[],
5452
appVersion: string,
5553
appName: string,
5654
customFlags: SDKEventCustomFlags,
5755
clientId: string
58-
): string;
56+
): string;
5957
onIdentifyComplete(
6058
user: IMParticleUser,
6159
filteredIdentityRequest: IdentityApiData
@@ -72,16 +70,27 @@ export interface ConfiguredKit
7270
user: IMParticleUser,
7371
filteredIdentityRequest: IdentityApiData
7472
): string;
75-
onUserIdentified(user: IMParticleUser): string;
73+
74+
// Techically these do not return a value, but we sometimes use a string as a debug message
75+
onUserIdentified(user: IMParticleUser, identityApiData?: IdentityApiData): string;
7676
process(event: SDKEvent): string;
7777
setOptOut(isOptingOut: boolean): string;
7878
removeUserAttribute(key: string): string;
79-
setUserAttribute(key: string, value: string): string;
80-
setUserIdentity(id: UserIdentityId, type: UserIdentityType): void;
79+
setUserAttribute(key: string, value: string | string[]): string;
80+
setUserIdentity(id: UserIdentityId, type: UserIdentityType): string;
8181

8282
// TODO: https://go.mparticle.com/work/SQDSDKS-5156
8383
isSandbox: boolean;
8484
hasSandbox: boolean;
85+
86+
filteringConsentRuleValues: IFilteringConsentRuleValues;
87+
filteringUserAttributeValue: IFilteringUserAttributeValue;
88+
filteringEventAttributeValue: IFilteringEventAttributeValue;
89+
excludeAnonymousUser: boolean;
90+
userIdentityFilters: UserIdentityFilters;
91+
userAttributeFilters: UserAttributeFilters;
92+
initialized: boolean;
93+
logger: Logger;
8594
}
8695

8796
export type UserIdentityId = string;
@@ -102,6 +111,7 @@ interface ForwarderSettings {
102111
PriorityValue?: number;
103112
}
104113

114+
// Represents the Forwarder Module in the SDK
105115
export interface IMPForwarder {
106116
// @deprecated
107117
setForwarderUserIdentities: (userIdentities: UserIdentities) => void;
@@ -113,14 +123,14 @@ export interface IMPForwarder {
113123
settings: ForwarderSettings;
114124
forwarderStatsUploader: AsyncUploader;
115125
isInitialized: boolean;
116-
filteringConsentRuleValues: IFilteringConsentRuleValues;
117-
filteringUserAttributeValue: IFilteringUserAttributeValue;
118-
filteringEventAttributeValue: IFilteringEventAttributeValue;
119-
excludeAnonymousUser: boolean;
120-
userIdentityFilters: UserIdentityFilters;
121-
userAttributeFilters: UserAttributeFilters;
122-
initialized: boolean;
123-
logger: Logger;
126+
// filteringConsentRuleValues: IFilteringConsentRuleValues;
127+
// filteringUserAttributeValue: IFilteringUserAttributeValue;
128+
// filteringEventAttributeValue: IFilteringEventAttributeValue;
129+
// excludeAnonymousUser: boolean;
130+
// userIdentityFilters: UserIdentityFilters;
131+
// userAttributeFilters: UserAttributeFilters;
132+
// initialized: boolean;
133+
// logger: Logger;
124134

125135
suffix?: string;
126136

@@ -149,22 +159,22 @@ export interface IMPForwarder {
149159
sendEventToForwarders: (event: SDKEvent) => void;
150160
processPixelConfigs: (pixelConfigs: SDKInitConfig) => void;
151161
configurePixel: (pixelConfig: IPixelConfiguration) => void;
152-
returnConfiguredKit: (forwarder: RegisteredKit, config: IKitConfigs) => IMPForwarder;
162+
returnConfiguredKit: (forwarder: RegisteredKit, config: IKitConfigs) => ConfiguredKit;
153163

154164
processSideloadedKits: (mpConfig: SDKInitConfig) => void;
155165

156-
init: (
157-
setting: ForwarderSettings,
158-
forwarderSettingsCallback: Callback,
159-
testMode: boolean,
160-
trackerId: string | number | null,
161-
filteredUserAttributes: ISDKUserAttributes,
162-
filteredUserIdentities: ISDKUserIdentity[],
163-
appVersion: string,
164-
appName: string,
165-
customFlags: SDKEventCustomFlags,
166-
clientId: string
167-
) => void;
166+
// init: (
167+
// setting: ForwarderSettings,
168+
// forwarderSettingsCallback: Callback,
169+
// testMode: boolean,
170+
// trackerId: string | number | null,
171+
// filteredUserAttributes: ISDKUserAttributes,
172+
// filteredUserIdentities: ISDKUserIdentity[],
173+
// appVersion: string,
174+
// appName: string,
175+
// customFlags: SDKEventCustomFlags,
176+
// clientId: string
177+
// ) => void;
168178

169179
initForwarders: (userIdentities: UserIdentities, forwarderStatsCallback: Callback) => void;
170180
isEnabledForUserAttributes: (filterObject?: IFilteringUserAttributeValue, user?: IMParticleUser) => boolean;
@@ -173,16 +183,16 @@ export interface IMPForwarder {
173183
name?: string;
174184

175185
// Techically these do not return a value, but we sometimes use a string as a debug message
176-
onUserIdentified?: (user: IMParticleUser, identityApiData?: IdentityApiData) => string;
177-
onIdentifyComplete?: (user: IMParticleUser, identityApiData: IdentityApiData) => string;
178-
onLoginComplete?: (user: IMParticleUser, identityApiData: IdentityApiData) => string;
179-
onLogoutComplete?: (user: IMParticleUser, identityApiData: IdentityApiData) => string;
180-
onModifyComplete?: (user: IMParticleUser, identityApiData: IdentityApiData) => string;
181-
setOptOut: (optOut: boolean) => string;
182-
setUserAttribute?: (key: string, value: string | string[]) => string;
183-
removeUserAttribute?: (key: string) => string;
184-
process?: (event: SDKEvent) => string;
185-
setUserIdentity?: (identity: string, type: number) => string;
186+
// onUserIdentified?: (user: IMParticleUser, identityApiData?: IdentityApiData) => string;
187+
// onIdentifyComplete?: (user: IMParticleUser, identityApiData: IdentityApiData) => string;
188+
// onLoginComplete?: (user: IMParticleUser, identityApiData: IdentityApiData) => string;
189+
// onLogoutComplete?: (user: IMParticleUser, identityApiData: IdentityApiData) => string;
190+
// onModifyComplete?: (user: IMParticleUser, identityApiData: IdentityApiData) => string;
191+
// setOptOut: (optOut: boolean) => string;
192+
// setUserAttribute?: (key: string, value: string | string[]) => string;
193+
// removeUserAttribute?: (key: string) => string;
194+
// process?: (event: SDKEvent) => string;
195+
// setUserIdentity?: (identity: string, type: number) => string;
186196

187197
getForwarderStatsQueue: () => IForwardingStatsData[];
188198
setForwarderStatsQueue: (queue: IForwardingStatsData[]) => void;

src/forwarders.ts

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
import { EventType, IdentityType, MessageType } from './types';
22
import filteredMparticleUser from './filteredMparticleUser';
3-
import { inArray, isEmpty, valueof } from './utils';
3+
import { Dictionary, inArray, isEmpty, valueof } from './utils';
44
import KitFilterHelper from './kitFilterHelper';
55
import Constants from './constants';
6-
import APIClient from './apiClient';
7-
import { IMPForwarder, KitRegistrationConfig, UserAttributeFilters, UserIdentityFilters } from './forwarders.interfaces';
6+
import APIClient, { IForwardingStatsData } from './apiClient';
7+
import { ConfiguredKit, IMPForwarder, KitRegistrationConfig, RegisteredKit, UserAttributeFilters, UserIdentityFilters } from './forwarders.interfaces';
88
import { IMParticleWebSDKInstance } from './mp-instance';
99
import KitBlocker from './kitBlocking';
10-
import { IFilteringUserAttributeValue, IKitConfigs } from './configAPIClient';
10+
import { IFilteringConsentRuleValues, IFilteringEventAttributeValue, IFilteringUserAttributeValue, IKitConfigs } from './configAPIClient';
1111
import { IMParticleUser, ISDKUserAttributes, ISDKUserIdentity, UserAttributes } from './identity-user-interfaces';
12-
import { SDKEvent } from './sdkRuntimeModels';
13-
import { Callback, UserIdentities } from '@mparticle/web-sdk';
12+
import { SDKEvent, SDKInitConfig } from './sdkRuntimeModels';
13+
import { Callback, IdentityApiData, UserIdentities } from '@mparticle/web-sdk';
14+
import { IdentityAPIMethod } from './identity.interfaces';
15+
import { IPixelConfiguration } from './cookieSyncManager';
16+
import { IFetchPayload } from './uploaders';
1417

1518
const { Modify, Identify, Login, Logout } = Constants.IdentityMethods;
1619

@@ -46,7 +49,7 @@ export default function Forwarders(this: IMPForwarder, mpInstance: IMParticleWe
4649
);
4750
});
4851

49-
mpInstance._Store.activeForwarders = configuredForwarders.filter((forwarder: IMPForwarder) => {
52+
mpInstance._Store.activeForwarders = configuredForwarders.filter((forwarder: ConfiguredKit) => {
5053
if (
5154
!isEnabledForUserConsent(
5255
forwarder.filteringConsentRuleValues,
@@ -158,12 +161,12 @@ export default function Forwarders(this: IMPForwarder, mpInstance: IMParticleWe
158161
};
159162

160163
this.applyToForwarders = (functionName: string, functionArgs: any[]) => {
161-
const activeForwarders: IMPForwarder[] = mpInstance._Store.activeForwarders;
164+
const activeForwarders: ConfiguredKit[] = mpInstance._Store.activeForwarders;
162165

163166
if (!activeForwarders) {
164167
return;
165168
}
166-
activeForwarders.forEach(function(forwarder) {
169+
activeForwarders.forEach(function(forwarder: ConfiguredKit) {
167170
const forwarderFunction: IMPForwarder = forwarder[functionName];
168171
if (forwarderFunction) {
169172
try {
@@ -454,7 +457,7 @@ export default function Forwarders(this: IMPForwarder, mpInstance: IMParticleWe
454457
};
455458

456459
this.setForwarderOnUserIdentified = (user: IMParticleUser) => {
457-
mpInstance._Store.activeForwarders.forEach((forwarder) => {
460+
mpInstance._Store.activeForwarders.forEach((forwarder: ConfiguredKit) => {
458461
const filteredUser = filteredMparticleUser(
459462
user.getMPID(),
460463
forwarder,
@@ -473,7 +476,7 @@ export default function Forwarders(this: IMPForwarder, mpInstance: IMParticleWe
473476
this.setForwarderOnIdentityComplete = (user: IMParticleUser, identityMethod: IdentityAPIMethod) => {
474477
let result: string;
475478

476-
mpInstance._Store.activeForwarders.forEach((forwarder: IMPForwarder) => {
479+
mpInstance._Store.activeForwarders.forEach((forwarder: ConfiguredKit) => {
477480
const filteredUser: IMParticleUser = filteredMparticleUser(
478481
user.getMPID(),
479482
forwarder,
@@ -607,7 +610,7 @@ export default function Forwarders(this: IMPForwarder, mpInstance: IMParticleWe
607610
};
608611

609612
this.configureUIEnabledKit = (config: IKitConfigs, kits: Dictionary<RegisteredKit>) => {
610-
let newKit: IMPForwarder | null = null;
613+
let newKit: ConfiguredKit | null = null;
611614
const { SDKConfig } = mpInstance._Store;
612615

613616
for (let kitName in kits) {
@@ -698,8 +701,9 @@ export default function Forwarders(this: IMPForwarder, mpInstance: IMParticleWe
698701
);
699702
};
700703

701-
this.returnConfiguredKit = function(forwarder, config = {} as IKitConfigs) {
702-
const newForwarder = new forwarder.constructor();
704+
this.returnConfiguredKit = (forwarder: RegisteredKit, config: IKitConfigs) => {
705+
// FIXME: Make this a real type
706+
const newForwarder: ConfiguredKit = new forwarder.constructor() as ConfiguredKit;
703707
newForwarder.id = config.moduleId;
704708

705709
// TODO: isSandbox, hasSandbox is never used in any kit or in core SDK.
@@ -723,12 +727,12 @@ export default function Forwarders(this: IMPForwarder, mpInstance: IMParticleWe
723727
newForwarder.userAttributeFilters = config.userAttributeFilters || [];
724728

725729
newForwarder.filteringEventAttributeValue =
726-
config.filteringEventAttributeValue || {};
730+
config.filteringEventAttributeValue || {} as IFilteringEventAttributeValue;
727731
newForwarder.filteringUserAttributeValue =
728-
config.filteringUserAttributeValue || {};
732+
config.filteringUserAttributeValue || {} as IFilteringUserAttributeValue;
729733
newForwarder.eventSubscriptionId = config.eventSubscriptionId || null;
730734
newForwarder.filteringConsentRuleValues =
731-
config.filteringConsentRuleValues || {};
735+
config.filteringConsentRuleValues || {} as IFilteringConsentRuleValues;
732736
newForwarder.excludeAnonymousUser =
733737
config.excludeAnonymousUser || false;
734738

src/kitFilterHelper.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,19 @@
11
import { generateHash, valueof } from "./utils";
22
// TODO: https://mparticle-eng.atlassian.net/browse/SQDSDKS-5381
3-
import { EventType, IdentityType } from "./types";
3+
import { CommerceEventType, EventType, IdentityType } from "./types";
44

55
export default class KitFilterHelper {
6+
// static hashEventType(eventType: valueof<typeof EventType> | valueof<typeof CommerceEventType>): number {
67
static hashEventType(eventType: valueof<typeof EventType>): number {
78
return generateHash(eventType as unknown as string);
89
};
910

11+
// static hashEventName(eventName: string, eventType: valueof<typeof EventType> | valueof<typeof CommerceEventType>): number {
1012
static hashEventName(eventName: string, eventType: valueof<typeof EventType>): number {
1113
return generateHash(eventType + eventName);
1214
};
1315

16+
// static hashEventAttributeKey(eventType: valueof<typeof EventType> | valueof<typeof CommerceEventType>, eventName: string, customAttributeName: string): number {
1417
static hashEventAttributeKey(eventType: valueof<typeof EventType>, eventName: string, customAttributeName: string): number {
1518
return generateHash(eventType + eventName + customAttributeName);
1619
}

src/pre-init-utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import { IPixelConfiguration } from './cookieSyncManager';
2-
import { Kit, MPForwarder } from './forwarders.interfaces';
2+
import { UnregisteredKit } from './forwarders.interfaces';
33
import { IntegrationDelays } from './mp-instance';
44
import { isEmpty, isFunction } from './utils';
55

66
export interface IPreInit {
77
readyQueue: Function[] | any[];
88
integrationDelays: IntegrationDelays;
9-
forwarderConstructors: Kit[];
9+
forwarderConstructors: UnregisteredKit[];
1010
pixelConfigurations?: IPixelConfiguration[];
1111
isDevelopmentMode?: boolean;
1212
}

src/sdkRuntimeModels.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { IKitConfigs } from './configAPIClient';
1515
import { SDKConsentApi, SDKConsentState } from './consent';
1616
import MPSideloadedKit, { IMPSideloadedKit } from './sideloadedKit';
1717
import { ISessionManager } from './sessionManager';
18-
import { ConfiguredKit, IMPForwarder, UnregisteredKit, UserAttributeFilters, UserIdentityFilters } from './forwarders.interfaces';
18+
import { ConfiguredKit, UnregisteredKit, UserAttributeFilters, UserIdentityFilters } from './forwarders.interfaces';
1919
import {
2020
SDKIdentityApi,
2121
IAliasCallback,

src/sideloadedKit.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { UnregisteredKit } from './forwarders.interfaces';
99
import { EventType, IdentityType } from './types';
1010
import { valueof } from './utils';
1111

12+
// FIXME: Decide if this should extend Kit or RegisteredKit depending on the overlap
1213
export interface IMPSideloadedKit {
1314
kitInstance: UnregisteredKit;
1415
filterDictionary: IKitFilterSettings;

src/store.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import {
3939
import { CookieSyncDates, IPixelConfiguration } from './cookieSyncManager';
4040
import { IMParticleWebSDKInstance } from './mp-instance';
4141
import ForegroundTimer from './foregroundTimeTracker';
42-
import { IMPSideloadedKit, IMPSideloadedKitConstructor } from './sideloadedKit';
42+
import { IMPSideloadedKit } from './sideloadedKit';
4343

4444
// This represents the runtime configuration of the SDK AFTER
4545
// initialization has been complete and all settings and
@@ -70,8 +70,7 @@ export interface SDKConfig {
7070
identifyRequest: IdentifyRequest;
7171
identityCallback: IdentityCallback;
7272
integrationDelayTimeout: number;
73-
// sideloadedKits: IMPSideloadedKit[];
74-
sideloadedKits: MPForwarder[];
73+
sideloadedKits: IMPSideloadedKit[];
7574
aliasMaxWindow: number;
7675
deviceId?: string;
7776
forceHttps?: boolean;

src/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const createCookieString = (value: string): string =>
1616
const revertCookieString = (value: string): string =>
1717
replacePipesWithCommas(replaceApostrophesWithQuotes(value));
1818

19-
const inArray = (items: any[], name: string): boolean => {
19+
const inArray = (items: any[], name: any): boolean => {
2020
let i = 0;
2121

2222
if (Array.prototype.indexOf) {

test/jest/utils.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
replaceMPID,
66
replaceAmpWithAmpersand,
77
createCookieSyncUrl,
8+
inArray,
89
} from '../../src/utils';
910
import { deleteAllCookies } from './utils';
1011

@@ -185,6 +186,24 @@ describe('Utils', () => {
185186
});
186187
});
187188

189+
describe('inArray', () => {
190+
it('returns true if the item is in the array', () => {
191+
expect(inArray(['foo', 'bar'], 'foo')).toBe(true);
192+
expect(inArray([1, 2], 2)).toBe(true);
193+
});
194+
195+
it('returns false if the item is not in the array', () => {
196+
expect(inArray(['foo', 'bar'], 'baz')).toBe(false);
197+
expect(inArray([1, 2], 3)).toBe(false);
198+
});
199+
200+
it('returns false if the array is empty', () => {
201+
expect(inArray([], 'foo')).toBe(false);
202+
expect(inArray([], 1)).toBe(false);
203+
});
204+
205+
});
206+
188207
describe('#replaceMPID', () => {
189208
it('replaces the MPID in a string', () => {
190209
const mpid = '1234';

0 commit comments

Comments
 (0)