Skip to content

Commit b174545

Browse files
committed
feat: capture page url
1 parent 0ec95bb commit b174545

9 files changed

Lines changed: 113 additions & 6 deletions

dist/types/src/kitBlocking.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ export default class KitBlocker {
6666
LaunchReferral?: string;
6767
ExpandedEventCount: number;
6868
ActiveTimeOnSite: number;
69+
PageUrl?: string;
6970
IsBackgroundAST?: boolean;
7071
AlreadySentToForwarders?: boolean;
7172
};
@@ -110,6 +111,7 @@ export default class KitBlocker {
110111
LaunchReferral?: string;
111112
ExpandedEventCount: number;
112113
ActiveTimeOnSite: number;
114+
PageUrl?: string;
113115
IsBackgroundAST?: boolean;
114116
AlreadySentToForwarders?: boolean;
115117
};

dist/types/src/sdkRuntimeModels.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export interface SDKEvent {
6060
LaunchReferral?: string;
6161
ExpandedEventCount: number;
6262
ActiveTimeOnSite: number;
63+
PageUrl?: string;
6364
IsBackgroundAST?: boolean;
6465
AlreadySentToForwarders?: boolean;
6566
}

package-lock.json

Lines changed: 5 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@
103103
"@babel/preset-env": "^7.6.0",
104104
"@babel/preset-typescript": "^7.6.0",
105105
"@mparticle/data-planning-models": "^0.1.0",
106-
"@mparticle/event-models": "^1.1.9",
106+
"@mparticle/event-models": "^1.3.0",
107107
"@rollup/plugin-babel": "6.0.3",
108108
"@rollup/plugin-commonjs": "25.0.4",
109109
"@rollup/plugin-json": "^5.0.2",
@@ -159,7 +159,7 @@
159159
"webpack-cli": "^5.0.2"
160160
},
161161
"peerDependencies": {
162-
"@mparticle/event-models": "^1.1.9"
162+
"@mparticle/event-models": "^1.3.0"
163163
},
164164
"dependencies": {
165165
"@babel/runtime": "^7.23.2"

src/sdkRuntimeModels.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ export interface SDKEvent {
9494
LaunchReferral?: string;
9595
ExpandedEventCount: number;
9696
ActiveTimeOnSite: number;
97+
PageUrl?: string;
9798
IsBackgroundAST?: boolean;
9899
AlreadySentToForwarders?: boolean;
99100
}

src/sdkToEventsApiConverter.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,8 @@ export function convertBaseEventData(
663663
custom_attributes: sdkEvent.EventAttributes,
664664
location: convertSDKLocation(sdkEvent.Location),
665665
source_message_id: sdkEvent.SourceMessageId,
666-
active_time_on_site_ms: sdkEvent.ActiveTimeOnSite
666+
active_time_on_site_ms: sdkEvent.ActiveTimeOnSite,
667+
page_url: sdkEvent.PageUrl,
667668
};
668669

669670
return commonEventData;

src/serverModel.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@ export default function ServerModel(
310310
event.name
311311
),
312312
ActiveTimeOnSite: mpInstance._timeOnSiteTimer?.getTimeInForeground(),
313+
PageUrl: window.location.href || null,
313314
SourceMessageId:
314315
event.sourceMessageId ||
315316
mpInstance._Helpers.generateUniqueId(),

test/src/tests-runtimeToBatchEventsDTO.ts

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,4 +510,84 @@ describe('Old model to batch model conversion', () => {
510510
// set screen back on
511511
window.screen = originalScreen;
512512
});
513+
514+
it('propagates PageUrl to page_url on the converted event', () => {
515+
const sdkEvent: SDKEvent = {
516+
EventName: 'Page View',
517+
EventCategory: Types.EventType.Navigation,
518+
ExpandedEventCount: 0,
519+
EventDataType: Types.MessageType.PageEvent,
520+
EventAttributes: null,
521+
ConsentState: null,
522+
CurrencyCode: null,
523+
CustomFlags: {},
524+
DataPlan: {},
525+
Debug: true,
526+
DeviceId: '0edd580e-d887-44e4-89ae-cd65aa0ee933',
527+
Location: null,
528+
MPID: '-8433569646818451201',
529+
OptOut: null,
530+
SDKVersion: '2.11.15',
531+
SourceMessageId: 'testSMID',
532+
SessionId: '64102C03-592F-440D-8BCC-1D27AAA6B188',
533+
SessionStartDate: 1603211322698,
534+
Timestamp: 1603212299414,
535+
ActiveTimeOnSite: 10,
536+
PageUrl: 'https://example.com/checkout?utm=should-be-stripped-server-side',
537+
UserAttributes: {},
538+
UserIdentities: [],
539+
IsFirstRun: true,
540+
};
541+
542+
const batch = Converter.convertEvents(
543+
'-8433569646818451201',
544+
[sdkEvent],
545+
window.mParticle.getInstance()
546+
);
547+
548+
expect(batch).to.be.ok;
549+
expect(batch.events.length).to.equal(1);
550+
const event = batch.events[0] as EventsApi.CustomEvent;
551+
expect(event.data.page_url).to.equal(
552+
'https://example.com/checkout?utm=should-be-stripped-server-side'
553+
);
554+
});
555+
556+
it('omits page_url when PageUrl is not set on the SDK event', () => {
557+
const sdkEvent: SDKEvent = {
558+
EventName: 'Page View',
559+
EventCategory: Types.EventType.Navigation,
560+
ExpandedEventCount: 0,
561+
EventDataType: Types.MessageType.PageEvent,
562+
EventAttributes: null,
563+
ConsentState: null,
564+
CurrencyCode: null,
565+
CustomFlags: {},
566+
DataPlan: {},
567+
Debug: true,
568+
DeviceId: '0edd580e-d887-44e4-89ae-cd65aa0ee933',
569+
Location: null,
570+
MPID: '-8433569646818451201',
571+
OptOut: null,
572+
SDKVersion: '2.11.15',
573+
SourceMessageId: 'testSMID',
574+
SessionId: '64102C03-592F-440D-8BCC-1D27AAA6B188',
575+
SessionStartDate: 1603211322698,
576+
Timestamp: 1603212299414,
577+
ActiveTimeOnSite: 10,
578+
UserAttributes: {},
579+
UserIdentities: [],
580+
IsFirstRun: true,
581+
};
582+
583+
const batch = Converter.convertEvents(
584+
'-8433569646818451201',
585+
[sdkEvent],
586+
window.mParticle.getInstance()
587+
);
588+
589+
expect(batch).to.be.ok;
590+
const event = batch.events[0] as EventsApi.CustomEvent;
591+
expect(event.data.page_url).to.equal(undefined);
592+
});
513593
});

test/src/tests-serverModel.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,25 @@ describe('ServerModel', () => {
297297
);
298298
});
299299

300+
it('should capture window.location.href as PageUrl', () => {
301+
const event: BaseEvent = {
302+
name: 'Test Event',
303+
messageType: Types.MessageType.PageEvent,
304+
eventType: Types.EventType.Navigation,
305+
data: { foo: 'bar' },
306+
sourceMessageId: 'test-source-message-id',
307+
customFlags: {},
308+
};
309+
310+
const actualEventObject = mParticle
311+
.getInstance()
312+
._ServerModel.createEventObject(event) as IUploadObject;
313+
314+
expect(actualEventObject.PageUrl, 'PageUrl').to.equal(
315+
window.location.href
316+
);
317+
});
318+
300319
it('should create an event object with a user', () => {
301320
const event: BaseEvent = {
302321
name: 'Test Event',

0 commit comments

Comments
 (0)