Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 52 additions & 3 deletions src/Rokt-Kit.js
Original file line number Diff line number Diff line change
Expand Up @@ -412,10 +412,40 @@ var constructor = function () {
attributes: selectPlacementsAttributes,
});

// Log custom event for selectPlacements call
logSelectPlacementsEvent(selectPlacementsAttributes);
var selection = self.launcher.selectPlacements(selectPlacementsOptions);

// After selection resolves, sync the Rokt session ID back to mParticle
// as an integration attribute so server-side integrations can link events.
// We log the custom event AFTER setting the attribute because
// setIntegrationAttribute alone doesn't fire a network request —
// if the user closes the page before another event fires, the server
// would never receive the session ID.
if (selection && typeof selection.then === 'function') {
selection
.then(function (sel) {
if (sel && sel.context && sel.context.sessionId) {
sel.context.sessionId
.then(function (sessionId) {
_setRoktSessionId(sessionId);
logSelectPlacementsEvent(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@crisryantan Should we also logSelectPlacementsEvent in a catch, and in an else statement? I assume this may happen if a selection fails, in which case we should still send the original selectPlacements event.

selectPlacementsAttributes
);
})
.catch(function () {
logSelectPlacementsEvent(
selectPlacementsAttributes
);
});
} else {
logSelectPlacementsEvent(selectPlacementsAttributes);
}
})
.catch(function () {
logSelectPlacementsEvent(selectPlacementsAttributes);
});
}

return self.launcher.selectPlacements(selectPlacementsOptions);
return selection;
}

/**
Expand Down Expand Up @@ -525,6 +555,25 @@ var constructor = function () {
}
}

function _setRoktSessionId(sessionId) {
if (!sessionId || typeof sessionId !== 'string') {
return;
}
try {
var mpInstance = window.mParticle.getInstance();
if (
mpInstance &&
typeof mpInstance.setIntegrationAttribute === 'function'
) {
mpInstance.setIntegrationAttribute(moduleId, {
roktSessionId: sessionId,
});
}
} catch (e) {
// Best effort — never let this break the partner page
}
}

function onUserIdentified(filteredUser) {
self.filters.filteredUser = filteredUser;
self.userAttributes = filteredUser.getAllUserAttributes();
Expand Down
Loading
Loading