Skip to content

Commit d7b7679

Browse files
refactor: Create Distinct Kit Interfaces (#999)
1 parent 92945a9 commit d7b7679

File tree

5 files changed

+36
-154
lines changed

5 files changed

+36
-154
lines changed

src/forwarders.interfaces.ts

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,44 @@
11
import { SDKEvent, SDKEventCustomFlags } from './sdkRuntimeModels';
22
import { Dictionary } from './utils';
3-
import { IKitConfigs } from './configAPIClient';
3+
import { IKitConfigs, IKitFilterSettings } from './configAPIClient';
44
import { IdentityApiData } from '@mparticle/web-sdk';
55
import {
66
IMParticleUser,
77
ISDKUserIdentity,
88
UserAttributes,
99
} from './identity-user-interfaces';
1010

11-
// TODO: https://go.mparticle.com/work/SQDSDKS-6035
12-
export type Kit = Dictionary;
11+
// TODO: https://go.mparticle.com/work/SQDSDKS-4475
1312
export type MPForwarder = Dictionary;
1413

1514
// The state of the kit when accessed via window.KitName via CDN
1615
// or imported as an NPM package
1716
export interface UnregisteredKit {
18-
register(config): void;
17+
constructor: () => void;
18+
register(config: KitRegistrationConfig): void;
19+
name: string;
20+
suffix?: string;
1921
}
2022

2123
// The state of the kit after being added to forwarderConstructors in the CDN
2224
// or after registered to SDKConfig.kits via NPM
2325
export interface RegisteredKit {
24-
constructor(): void;
25-
name: string;
26-
getId(): number;
26+
constructor: () => void;
27+
28+
// Applies to sideloaded kits only
29+
filters?: IKitFilterSettings;
30+
}
31+
32+
// This is the subset of the SDKConfig.kits object that is used to register kits.
33+
export interface KitRegistrationConfig {
34+
kits: Dictionary<RegisteredKit>;
2735
}
2836

2937
// The state of the kit after being configured. This is what the kit looks like when acted on.
3038
export interface ConfiguredKit
3139
extends Omit<IKitConfigs, 'isDebugString' | 'hasDebugString'> {
3240
common: Dictionary<unknown>;
41+
id: number;
3342
init(
3443
settings: Dictionary<unknown>,
3544
service: forwardingStatsCallback,
@@ -45,22 +54,22 @@ export interface ConfiguredKit
4554
onIdentifyComplete(
4655
user: IMParticleUser,
4756
filteredIdentityRequest: IdentityApiData
48-
): string | KitMappedMethodFailure;
57+
): string;
4958
onLoginComplete(
5059
user: IMParticleUser,
5160
filteredIdentityRequest: IdentityApiData
52-
): string | KitMappedMethodFailure;
61+
): string;
5362
onLogoutComplete(
5463
user: IMParticleUser,
5564
filteredIdentityRequest: IdentityApiData
56-
): string | KitMappedMethodFailure;
65+
): string;
5766
onModifyComplete(
5867
user: IMParticleUser,
5968
filteredIdentityRequest: IdentityApiData
60-
): string | KitMappedMethodFailure;
61-
onUserIdentified(user: IMParticleUser): string | KitMappedMethodFailure;
69+
): string;
70+
onUserIdentified(user: IMParticleUser): string;
6271
process(event: SDKEvent): string;
63-
setOptOut(isOptingOut: boolean): string | KitMappedMethodFailure;
72+
setOptOut(isOptingOut: boolean): string;
6473
removeUserAttribute(key: string): string;
6574
setUserAttribute(key: string, value: string): string;
6675
setUserIdentity(id: UserIdentityId, type: UserIdentityType): void;
@@ -69,9 +78,6 @@ export interface ConfiguredKit
6978
isSandbox: boolean;
7079
hasSandbox: boolean;
7180
}
72-
export interface KitMappedMethodFailure {
73-
error: string;
74-
}
7581

7682
export type UserIdentityId = string;
7783
export type UserIdentityType = number;

src/sdkRuntimeModels.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { IKitConfigs } from './configAPIClient';
1414
import { SDKConsentApi, SDKConsentState } from './consent';
1515
import MPSideloadedKit from './sideloadedKit';
1616
import { ISessionManager } from './sessionManager';
17-
import { Kit, MPForwarder } from './forwarders.interfaces';
17+
import { ConfiguredKit, MPForwarder, UnregisteredKit } from './forwarders.interfaces';
1818
import {
1919
SDKIdentityApi,
2020
IAliasCallback,
@@ -164,7 +164,7 @@ export interface SDKProduct {
164164

165165
// https://go.mparticle.com/work/SQDSDKS-6949
166166
export interface MParticleWebSDK {
167-
addForwarder(mockForwarder: MPForwarder): void;
167+
addForwarder(forwarder: UnregisteredKit): void;
168168
IdentityType: typeof IdentityType;
169169
CommerceEventType: typeof CommerceEventType;
170170
EventType: typeof EventType;
@@ -181,7 +181,7 @@ export interface MParticleWebSDK {
181181
configurePixel(config: IPixelConfiguration): void;
182182
endSession(): void;
183183
init(apiKey: string, config: SDKInitConfig, instanceName?: string): void;
184-
_getActiveForwarders(): MPForwarder[];
184+
_getActiveForwarders(): ConfiguredKit[];
185185
_getIntegrationDelays(): IntegrationDelays;
186186
_setIntegrationDelay(module: number, shouldDelayIntegration: boolean): void;
187187
_setWrapperSDKInfo(name: WrapperSDKTypes, version: string): void;
@@ -271,7 +271,7 @@ export interface SDKInitConfig
271271
logLevel?: LogLevelType;
272272

273273
kitConfigs?: IKitConfigs[];
274-
kits?: Dictionary<Kit>;
274+
kits?: Dictionary<UnregisteredKit>;
275275
sideloadedKits?: MPForwarder[];
276276
dataPlanOptions?: KitBlockerOptions;
277277
flags?: Dictionary;

src/store.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import {
3030
returnConvertedBoolean,
3131
} from './utils';
3232
import { IMinifiedConsentJSONObject, SDKConsentState } from './consent';
33-
import { Kit, MPForwarder } from './forwarders.interfaces';
33+
import { ConfiguredKit, MPForwarder, UnregisteredKit } from './forwarders.interfaces';
3434
import { IdentityCallback, UserAttributes } from './identity-user-interfaces';
3535
import {
3636
IGlobalStoreV2MinifiedKeys,
@@ -61,7 +61,7 @@ export interface SDKConfig {
6161
package?: string;
6262
flags?: IFeatureFlags;
6363
kitConfigs: IKitConfigs[];
64-
kits: Dictionary<Kit>;
64+
kits: Dictionary<UnregisteredKit>;
6565
logLevel?: LogLevelType;
6666
cookieDomain?: string;
6767
maxCookieSize?: number | undefined;
@@ -176,7 +176,7 @@ export interface IStore {
176176
isLocalStorageAvailable: boolean | null;
177177
storageName: string | null;
178178
prodStorageName: string | null;
179-
activeForwarders: MPForwarder[];
179+
activeForwarders: ConfiguredKit[];
180180
kits: Dictionary<MPForwarder>;
181181
sideloadedKits: MPForwarder[];
182182
configuredForwarders: MPForwarder[];

test/jest/sideloadedKit.spec.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import { UnregisteredKit } from '../../src/forwarders.interfaces';
55
import { IKitFilterSettings } from '../../src/configAPIClient';
66

77
const mockKitInstance: UnregisteredKit = {
8-
register: function() {}
8+
register: function() {},
9+
name: 'mock-kit',
10+
constructor: function() {},
911
};
1012

1113
describe('MPSideloadedKit', () => {

test/jest/utils.ts

Lines changed: 4 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,4 @@
1-
import { UnregisteredKit } from "../../src/forwarders.interfaces";
2-
import { SDKInitConfig } from "../../src/sdkRuntimeModels";
3-
4-
// export interface IMockForwarder {
5-
6-
// }
7-
8-
// export interface IMockForwarderConstructor {
9-
// new(unregisteredKitInstance: MockForwarder): IMockForwarder;
10-
// }
1+
import { KitRegistrationConfig, RegisteredKit, UnregisteredKit } from "../../src/forwarders.interfaces";
112

123
export class MockForwarder {
134
public name: string;
@@ -37,10 +28,10 @@ export class MockForwarder {
3728
this.moduleId = id || 1;
3829
}
3930

40-
public register = (config: SDKInitConfig): void => {
31+
public register = (config: KitRegistrationConfig): void => {
4132
if (config.kits) {
4233
config.kits[this.name] = {
43-
constructor: this.constructor,
34+
constructor: this.constructor as () => RegisteredKit,
4435
};
4536
}
4637
}
@@ -69,129 +60,12 @@ export class MockForwarder {
6960
this.appName = appName;
7061
this.settings = settings;
7162
this.testMode = testMode;
72-
// mParticle.userAttributesFilterOnInitTest = userAttributes;
73-
// mParticle.userIdentitiesFilterOnInitTest = userIdentities;
7463
})
7564
}
7665

77-
// export const MockForwarder = function(forwarderName, forwarderId) {
78-
// var constructor = function() {
79-
// var self = this;
80-
// this.id = forwarderId || 1;
81-
// this.initCalled = false;
82-
// this.processCalled = false;
83-
// this.setUserIdentityCalled = false;
84-
// this.onUserIdentifiedCalled = false;
85-
// this.setOptOutCalled = false;
86-
// this.setUserAttributeCalled = false;
87-
// this.reportingService = null;
88-
// this.name = forwarderName || 'MockForwarder';
89-
// this.userAttributeFilters = [];
90-
// this.setUserIdentityCalled = false;
91-
// this.removeUserAttributeCalled = false;
92-
// this.receivedEvent = null;
93-
// this.isVisible = false;
94-
// this.logOutCalled = false;
95-
96-
// this.trackerId = null;
97-
// this.userAttributes = {};
98-
// this.userIdentities = null;
99-
// this.appVersion = null;
100-
// this.appName = null;
101-
102-
// this.logOut = function() {
103-
// this.logOutCalled = true;
104-
// };
105-
106-
// this.init = function(
107-
// settings,
108-
// reportingService,
109-
// testMode,
110-
// id,
111-
// userAttributes,
112-
// userIdentities,
113-
// appVersion,
114-
// appName
115-
// ) {
116-
// self.reportingService = reportingService;
117-
// self.initCalled = true;
118-
119-
// self.trackerId = id;
120-
// self.userAttributes = userAttributes;
121-
// mParticle.userAttributesFilterOnInitTest = userAttributes;
122-
// mParticle.userIdentitiesFilterOnInitTest = userIdentities;
123-
// self.userIdentities = userIdentities;
124-
// self.appVersion = appVersion;
125-
// self.appName = appName;
126-
// self.settings = settings;
127-
// self.testMode = testMode;
128-
// };
129-
130-
// this.process = function(event) {
131-
// self.processCalled = true;
132-
// this.receivedEvent = event;
133-
// self.reportingService(self, event);
134-
// self.logger.verbose(event.EventName + ' sent');
135-
// };
136-
137-
// this.setUserIdentity = function(a, b) {
138-
// this.userIdentities = {};
139-
// this.userIdentities[b] = a;
140-
// self.setUserIdentityCalled = true;
141-
// };
142-
143-
// this.settings = {
144-
// PriorityValue: 1,
145-
// };
146-
147-
// this.setOptOut = function() {
148-
// this.setOptOutCalled = true;
149-
// };
150-
151-
// this.onUserIdentified = function(user) {
152-
// this.onUserIdentifiedCalled = true;
153-
// this.onUserIdentifiedUser = user;
154-
// };
155-
156-
// this.onIdentifyComplete = function(user) {
157-
// this.onIdentifyCompleteCalled = true;gs
158-
// this.onIdentifyCompleteUser = user;
159-
// };
160-
161-
// this.onLoginComplete = function(user) {
162-
// this.onLoginCompleteCalled = true;
163-
// this.onLoginCompleteUser = user;
164-
// };
165-
166-
// this.onLogoutComplete = function(user) {
167-
// this.onLogoutCompleteCalled = true;
168-
// this.onLogoutCompleteUser = user;
169-
// };
170-
171-
// this.onModifyComplete = function(user) {
172-
// this.onModifyCompleteCalled = true;
173-
// this.onModifyCompleteUser = user;
174-
// };
175-
176-
// this.setUserAttribute = function(key, value) {
177-
// this.setUserAttributeCalled = true;
178-
// this.userAttributes[key] = value;
179-
// };
180-
181-
// this.removeUserAttribute = function(key) {
182-
// this.removeUserAttributeCalled = true;
183-
// delete this.userAttributes[key]
184-
// };
185-
186-
// window[this.name + this.id] = {
187-
// instance: this,
188-
// };
189-
// };
19066
export const MockSideloadedKit = MockForwarder;
19167

192-
export interface IMockSideloadedKit extends MockForwarder {
193-
194-
}
68+
export interface IMockSideloadedKit extends MockForwarder {}
19569

19670
export interface IMockSideloadedKitConstructor {
19771
new(unregisteredKitInstance: UnregisteredKit): IMockSideloadedKit;

0 commit comments

Comments
 (0)