@@ -26,21 +26,28 @@ var constructor = function () {
2626 self . launcher = null ;
2727 self . filters = { } ;
2828 self . userAttributes = { } ;
29+ self . testHelpers = null ;
2930
3031 /**
31- * Generates the Rokt launcher script URL with optional domain override
32+ * Generates the Rokt launcher script URL with optional domain override and extensions
3233 * @param {string } domain - The CNAME domain to use for overriding the launcher url
34+ * @param {Array<string> } extensions - List of extension query parameters to append
3335 * @returns {string } The complete launcher script URL
3436 */
35- function generateLauncherScript ( _domain ) {
37+ function generateLauncherScript ( _domain , extensions ) {
3638 // Override domain if a customer is using a CNAME
3739 // If a customer is using a CNAME, a domain will be passed. If not, we use the default domain.
3840 var domain = typeof _domain !== 'undefined' ? _domain : 'apps.rokt.com' ;
3941 var protocol = 'https://' ;
4042 var launcherPath = '/wsdk/integrations/launcher.js' ;
43+ var baseUrl = [ protocol , domain , launcherPath ] . join ( '' ) ;
4144
42- return [ protocol , domain , launcherPath ] . join ( '' ) ;
45+ if ( ! extensions || extensions . length === 0 ) {
46+ return baseUrl ;
47+ }
48+ return baseUrl + '?extensions=' + extensions . join ( ',' ) ;
4349 }
50+
4451 /**
4552 * Passes attributes to the Rokt Web SDK for client-side hashing
4653 * @see https://docs.rokt.com/developers/integration-guides/web/library/integration-launcher#hash-attributes
@@ -64,6 +71,7 @@ var constructor = function () {
6471 filteredUserAttributes
6572 ) {
6673 var accountId = settings . accountId ;
74+ var roktExtensions = extractRoktExtensions ( settings . roktExtensions ) ;
6775 self . userAttributes = filteredUserAttributes ;
6876 self . onboardingExpProvider = settings . onboardingExpProvider ;
6977 var domain = window . mParticle . Rokt . domain ;
@@ -78,6 +86,7 @@ var constructor = function () {
7886 if ( testMode ) {
7987 self . testHelpers = {
8088 generateLauncherScript : generateLauncherScript ,
89+ extractRoktExtensions : extractRoktExtensions ,
8190 } ;
8291 attachLauncher ( accountId , launcherOptions ) ;
8392 return ;
@@ -87,7 +96,7 @@ var constructor = function () {
8796 var target = document . head || document . body ;
8897 var script = document . createElement ( 'script' ) ;
8998 script . type = 'text/javascript' ;
90- script . src = generateLauncherScript ( domain ) ;
99+ script . src = generateLauncherScript ( domain , roktExtensions ) ;
91100 script . async = true ;
92101 script . crossOrigin = 'anonymous' ;
93102 script . fetchPriority = 'high' ;
@@ -192,6 +201,22 @@ var constructor = function () {
192201 return self . launcher . selectPlacements ( selectPlacementsOptions ) ;
193202 }
194203
204+ /**
205+ * Sets extension data for Rokt Web SDK
206+ * @param {Object } partnerExtensionData - The extension data object containing:
207+ * - [extensionName] {string}: Name of the extension
208+ * - [extensionName].options {Object}: Key-value pairs of options for the extension
209+ * @returns {void } Nothing is returned
210+ */
211+ function setExtensionData ( partnerExtensionData ) {
212+ if ( ! isInitialized ( ) ) {
213+ console . error ( 'Rokt Kit: Not initialized' ) ;
214+ return ;
215+ }
216+
217+ window . Rokt . setExtensionData ( partnerExtensionData ) ;
218+ }
219+
195220 function onUserIdentified ( filteredUser ) {
196221 self . filters . filteredUser = filteredUser ;
197222 self . userAttributes = filteredUser . getAllUserAttributes ( ) ;
@@ -290,6 +315,7 @@ var constructor = function () {
290315
291316 // Kit Callback Methods
292317 this . init = initForwarder ;
318+ this . setExtensionData = setExtensionData ;
293319 this . setUserAttribute = setUserAttribute ;
294320 this . onUserIdentified = onUserIdentified ;
295321 this . removeUserAttribute = removeUserAttribute ;
@@ -368,6 +394,25 @@ function mergeObjects() {
368394 return resObj ;
369395}
370396
397+ function parseSettingsString ( settingsString ) {
398+ try {
399+ return JSON . parse ( settingsString . replace ( / & q u o t ; / g, '"' ) ) ;
400+ } catch ( error ) {
401+ throw new Error ( 'Settings string contains invalid JSON' ) ;
402+ }
403+ }
404+
405+ function extractRoktExtensions ( settingsString ) {
406+ var settings = settingsString ? parseSettingsString ( settingsString ) : [ ] ;
407+
408+ var roktExtensions = [ ] ;
409+ for ( var i = 0 ; i < settings . length ; i ++ ) {
410+ roktExtensions . push ( settings [ i ] . value ) ;
411+ }
412+
413+ return roktExtensions ;
414+ }
415+
371416if ( window && window . mParticle && window . mParticle . addForwarder ) {
372417 window . mParticle . addForwarder ( {
373418 name : name ,
0 commit comments