@mparticle/web-rokt-kit 1.5.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,23 +29,29 @@ var constructor = function () {
29
29
 
30
30
  self.launcher = null;
31
31
  self.filters = {};
32
- self.filteredUser = {};
33
32
  self.userAttributes = {};
33
+ self.testHelpers = null;
34
34
 
35
35
  /**
36
- * Generates the Rokt launcher script URL with optional domain override
36
+ * Generates the Rokt launcher script URL with optional domain override and extensions
37
37
  * @param {string} domain - The CNAME domain to use for overriding the launcher url
38
+ * @param {Array<string>} extensions - List of extension query parameters to append
38
39
  * @returns {string} The complete launcher script URL
39
40
  */
40
- function generateLauncherScript(_domain) {
41
+ function generateLauncherScript(_domain, extensions) {
41
42
  // Override domain if a customer is using a CNAME
42
43
  // If a customer is using a CNAME, a domain will be passed. If not, we use the default domain.
43
44
  var domain = typeof _domain !== 'undefined' ? _domain : 'apps.rokt.com';
44
45
  var protocol = 'https://';
45
46
  var launcherPath = '/wsdk/integrations/launcher.js';
47
+ var baseUrl = [protocol, domain, launcherPath].join('');
46
48
 
47
- return [protocol, domain, launcherPath].join('');
49
+ if (!extensions || extensions.length === 0) {
50
+ return baseUrl;
51
+ }
52
+ return baseUrl + '?extensions=' + extensions.join(',');
48
53
  }
54
+
49
55
  /**
50
56
  * Passes attributes to the Rokt Web SDK for client-side hashing
51
57
  * @see https://docs.rokt.com/developers/integration-guides/web/library/integration-launcher#hash-attributes
@@ -69,10 +75,14 @@ var constructor = function () {
69
75
  filteredUserAttributes
70
76
  ) {
71
77
  var accountId = settings.accountId;
78
+ var roktExtensions = extractRoktExtensions(settings.roktExtensions);
72
79
  self.userAttributes = filteredUserAttributes;
73
80
  self.onboardingExpProvider = settings.onboardingExpProvider;
74
81
  var domain = window.mParticle.Rokt.domain;
75
- var launcherOptions = window.mParticle.Rokt.launcherOptions || {};
82
+ var launcherOptions = mergeObjects(
83
+ {},
84
+ window.mParticle.Rokt.launcherOptions || {}
85
+ );
76
86
  launcherOptions.integrationName = generateIntegrationName(
77
87
  launcherOptions.integrationName
78
88
  );
@@ -80,6 +90,7 @@ var constructor = function () {
80
90
  if (testMode) {
81
91
  self.testHelpers = {
82
92
  generateLauncherScript: generateLauncherScript,
93
+ extractRoktExtensions: extractRoktExtensions,
83
94
  };
84
95
  attachLauncher(accountId, launcherOptions);
85
96
  return;
@@ -89,7 +100,7 @@ var constructor = function () {
89
100
  var target = document.head || document.body;
90
101
  var script = document.createElement('script');
91
102
  script.type = 'text/javascript';
92
- script.src = generateLauncherScript(domain);
103
+ script.src = generateLauncherScript(domain, roktExtensions);
93
104
  script.async = true;
94
105
  script.crossOrigin = 'anonymous';
95
106
  script.fetchPriority = 'high';
@@ -119,6 +130,18 @@ var constructor = function () {
119
130
  console.warn('Unable to find Rokt on the page');
120
131
  }
121
132
  }
133
+ /**
134
+ * Returns the user identities from the filtered user, if any
135
+ * @param {Object} filteredUser - The filtered user object containing identities
136
+ * @returns {Object} The user identities from the filtered user
137
+ */
138
+ function returnUserIdentities(filteredUser) {
139
+ if (!filteredUser || !filteredUser.getUserIdentities) {
140
+ return {};
141
+ }
142
+
143
+ return filteredUser.getUserIdentities().userIdentities;
144
+ }
122
145
 
123
146
  /**
124
147
  * Selects placements for Rokt Web SDK with merged attributes, filters, and experimentation options
@@ -164,8 +187,11 @@ var constructor = function () {
164
187
  ? fetchOptimizely()
165
188
  : {};
166
189
 
190
+ var filteredUserIdentities = returnUserIdentities(filteredUser);
191
+
167
192
  var selectPlacementsAttributes = mergeObjects(
168
193
  filteredAttributes,
194
+ filteredUserIdentities,
169
195
  optimizelyAttributes,
170
196
  {
171
197
  mpid: mpid,
@@ -179,8 +205,24 @@ var constructor = function () {
179
205
  return self.launcher.selectPlacements(selectPlacementsOptions);
180
206
  }
181
207
 
208
+ /**
209
+ * Sets extension data for Rokt Web SDK
210
+ * @param {Object} partnerExtensionData - The extension data object containing:
211
+ * - [extensionName] {string}: Name of the extension
212
+ * - [extensionName].options {Object}: Key-value pairs of options for the extension
213
+ * @returns {void} Nothing is returned
214
+ */
215
+ function setExtensionData(partnerExtensionData) {
216
+ if (!isInitialized()) {
217
+ console.error('Rokt Kit: Not initialized');
218
+ return;
219
+ }
220
+
221
+ window.Rokt.setExtensionData(partnerExtensionData);
222
+ }
223
+
182
224
  function onUserIdentified(filteredUser) {
183
- self.filteredUser = filteredUser;
225
+ self.filters.filteredUser = filteredUser;
184
226
  self.userAttributes = filteredUser.getAllUserAttributes();
185
227
  }
186
228
 
@@ -204,7 +246,6 @@ var constructor = function () {
204
246
  .then(function (launcher) {
205
247
  // Assign the launcher to a global variable for later access
206
248
  window.Rokt.currentLauncher = launcher;
207
-
208
249
  // Locally cache the launcher and filters
209
250
  self.launcher = launcher;
210
251
 
@@ -218,11 +259,8 @@ var constructor = function () {
218
259
  console.warn(
219
260
  'Rokt Kit: No filtered user has been set.'
220
261
  );
221
- } else {
222
- self.filteredUser = roktFilters.filteredUser;
223
262
  }
224
263
  }
225
-
226
264
  // Attaches the kit to the Rokt manager
227
265
  window.mParticle.Rokt.attachKit(self);
228
266
 
@@ -281,6 +319,7 @@ var constructor = function () {
281
319
 
282
320
  // Kit Callback Methods
283
321
  this.init = initForwarder;
322
+ this.setExtensionData = setExtensionData;
284
323
  this.setUserAttribute = setUserAttribute;
285
324
  this.onUserIdentified = onUserIdentified;
286
325
  this.removeUserAttribute = removeUserAttribute;
@@ -299,7 +338,7 @@ var constructor = function () {
299
338
 
300
339
  function generateIntegrationName(customIntegrationName) {
301
340
  var coreSdkVersion = window.mParticle.getVersion();
302
- var kitVersion = "1.5.0";
341
+ var kitVersion = "1.6.1";
303
342
  var name = 'mParticle_' + 'wsdkv_' + coreSdkVersion + '_kitv_' + kitVersion;
304
343
 
305
344
  if (customIntegrationName) {
@@ -359,6 +398,26 @@ function mergeObjects() {
359
398
  return resObj;
360
399
  }
361
400
 
401
+ function parseSettingsString(settingsString) {
402
+ try {
403
+ return JSON.parse(settingsString.replace(/&quot;/g, '"'));
404
+ } catch (error) {
405
+ console.error('Settings string contains invalid JSON');
406
+ }
407
+ return [];
408
+ }
409
+
410
+ function extractRoktExtensions(settingsString) {
411
+ var settings = settingsString ? parseSettingsString(settingsString) : [];
412
+ var roktExtensions = [];
413
+
414
+ for (var i = 0; i < settings.length; i++) {
415
+ roktExtensions.push(settings[i].value);
416
+ }
417
+
418
+ return roktExtensions;
419
+ }
420
+
362
421
  if (window && window.mParticle && window.mParticle.addForwarder) {
363
422
  window.mParticle.addForwarder({
364
423
  name: name,
@@ -28,23 +28,29 @@ var RoktKit = (function (exports) {
28
28
 
29
29
  self.launcher = null;
30
30
  self.filters = {};
31
- self.filteredUser = {};
32
31
  self.userAttributes = {};
32
+ self.testHelpers = null;
33
33
 
34
34
  /**
35
- * Generates the Rokt launcher script URL with optional domain override
35
+ * Generates the Rokt launcher script URL with optional domain override and extensions
36
36
  * @param {string} domain - The CNAME domain to use for overriding the launcher url
37
+ * @param {Array<string>} extensions - List of extension query parameters to append
37
38
  * @returns {string} The complete launcher script URL
38
39
  */
39
- function generateLauncherScript(_domain) {
40
+ function generateLauncherScript(_domain, extensions) {
40
41
  // Override domain if a customer is using a CNAME
41
42
  // If a customer is using a CNAME, a domain will be passed. If not, we use the default domain.
42
43
  var domain = typeof _domain !== 'undefined' ? _domain : 'apps.rokt.com';
43
44
  var protocol = 'https://';
44
45
  var launcherPath = '/wsdk/integrations/launcher.js';
46
+ var baseUrl = [protocol, domain, launcherPath].join('');
45
47
 
46
- return [protocol, domain, launcherPath].join('');
48
+ if (!extensions || extensions.length === 0) {
49
+ return baseUrl;
50
+ }
51
+ return baseUrl + '?extensions=' + extensions.join(',');
47
52
  }
53
+
48
54
  /**
49
55
  * Passes attributes to the Rokt Web SDK for client-side hashing
50
56
  * @see https://docs.rokt.com/developers/integration-guides/web/library/integration-launcher#hash-attributes
@@ -68,10 +74,14 @@ var RoktKit = (function (exports) {
68
74
  filteredUserAttributes
69
75
  ) {
70
76
  var accountId = settings.accountId;
77
+ var roktExtensions = extractRoktExtensions(settings.roktExtensions);
71
78
  self.userAttributes = filteredUserAttributes;
72
79
  self.onboardingExpProvider = settings.onboardingExpProvider;
73
80
  var domain = window.mParticle.Rokt.domain;
74
- var launcherOptions = window.mParticle.Rokt.launcherOptions || {};
81
+ var launcherOptions = mergeObjects(
82
+ {},
83
+ window.mParticle.Rokt.launcherOptions || {}
84
+ );
75
85
  launcherOptions.integrationName = generateIntegrationName(
76
86
  launcherOptions.integrationName
77
87
  );
@@ -79,6 +89,7 @@ var RoktKit = (function (exports) {
79
89
  if (testMode) {
80
90
  self.testHelpers = {
81
91
  generateLauncherScript: generateLauncherScript,
92
+ extractRoktExtensions: extractRoktExtensions,
82
93
  };
83
94
  attachLauncher(accountId, launcherOptions);
84
95
  return;
@@ -88,7 +99,7 @@ var RoktKit = (function (exports) {
88
99
  var target = document.head || document.body;
89
100
  var script = document.createElement('script');
90
101
  script.type = 'text/javascript';
91
- script.src = generateLauncherScript(domain);
102
+ script.src = generateLauncherScript(domain, roktExtensions);
92
103
  script.async = true;
93
104
  script.crossOrigin = 'anonymous';
94
105
  script.fetchPriority = 'high';
@@ -118,6 +129,18 @@ var RoktKit = (function (exports) {
118
129
  console.warn('Unable to find Rokt on the page');
119
130
  }
120
131
  }
132
+ /**
133
+ * Returns the user identities from the filtered user, if any
134
+ * @param {Object} filteredUser - The filtered user object containing identities
135
+ * @returns {Object} The user identities from the filtered user
136
+ */
137
+ function returnUserIdentities(filteredUser) {
138
+ if (!filteredUser || !filteredUser.getUserIdentities) {
139
+ return {};
140
+ }
141
+
142
+ return filteredUser.getUserIdentities().userIdentities;
143
+ }
121
144
 
122
145
  /**
123
146
  * Selects placements for Rokt Web SDK with merged attributes, filters, and experimentation options
@@ -163,8 +186,11 @@ var RoktKit = (function (exports) {
163
186
  ? fetchOptimizely()
164
187
  : {};
165
188
 
189
+ var filteredUserIdentities = returnUserIdentities(filteredUser);
190
+
166
191
  var selectPlacementsAttributes = mergeObjects(
167
192
  filteredAttributes,
193
+ filteredUserIdentities,
168
194
  optimizelyAttributes,
169
195
  {
170
196
  mpid: mpid,
@@ -178,8 +204,24 @@ var RoktKit = (function (exports) {
178
204
  return self.launcher.selectPlacements(selectPlacementsOptions);
179
205
  }
180
206
 
207
+ /**
208
+ * Sets extension data for Rokt Web SDK
209
+ * @param {Object} partnerExtensionData - The extension data object containing:
210
+ * - [extensionName] {string}: Name of the extension
211
+ * - [extensionName].options {Object}: Key-value pairs of options for the extension
212
+ * @returns {void} Nothing is returned
213
+ */
214
+ function setExtensionData(partnerExtensionData) {
215
+ if (!isInitialized()) {
216
+ console.error('Rokt Kit: Not initialized');
217
+ return;
218
+ }
219
+
220
+ window.Rokt.setExtensionData(partnerExtensionData);
221
+ }
222
+
181
223
  function onUserIdentified(filteredUser) {
182
- self.filteredUser = filteredUser;
224
+ self.filters.filteredUser = filteredUser;
183
225
  self.userAttributes = filteredUser.getAllUserAttributes();
184
226
  }
185
227
 
@@ -203,7 +245,6 @@ var RoktKit = (function (exports) {
203
245
  .then(function (launcher) {
204
246
  // Assign the launcher to a global variable for later access
205
247
  window.Rokt.currentLauncher = launcher;
206
-
207
248
  // Locally cache the launcher and filters
208
249
  self.launcher = launcher;
209
250
 
@@ -217,11 +258,8 @@ var RoktKit = (function (exports) {
217
258
  console.warn(
218
259
  'Rokt Kit: No filtered user has been set.'
219
260
  );
220
- } else {
221
- self.filteredUser = roktFilters.filteredUser;
222
261
  }
223
262
  }
224
-
225
263
  // Attaches the kit to the Rokt manager
226
264
  window.mParticle.Rokt.attachKit(self);
227
265
 
@@ -280,6 +318,7 @@ var RoktKit = (function (exports) {
280
318
 
281
319
  // Kit Callback Methods
282
320
  this.init = initForwarder;
321
+ this.setExtensionData = setExtensionData;
283
322
  this.setUserAttribute = setUserAttribute;
284
323
  this.onUserIdentified = onUserIdentified;
285
324
  this.removeUserAttribute = removeUserAttribute;
@@ -298,7 +337,7 @@ var RoktKit = (function (exports) {
298
337
 
299
338
  function generateIntegrationName(customIntegrationName) {
300
339
  var coreSdkVersion = window.mParticle.getVersion();
301
- var kitVersion = "1.5.0";
340
+ var kitVersion = "1.6.1";
302
341
  var name = 'mParticle_' + 'wsdkv_' + coreSdkVersion + '_kitv_' + kitVersion;
303
342
 
304
343
  if (customIntegrationName) {
@@ -358,6 +397,26 @@ var RoktKit = (function (exports) {
358
397
  return resObj;
359
398
  }
360
399
 
400
+ function parseSettingsString(settingsString) {
401
+ try {
402
+ return JSON.parse(settingsString.replace(/&quot;/g, '"'));
403
+ } catch (error) {
404
+ console.error('Settings string contains invalid JSON');
405
+ }
406
+ return [];
407
+ }
408
+
409
+ function extractRoktExtensions(settingsString) {
410
+ var settings = settingsString ? parseSettingsString(settingsString) : [];
411
+ var roktExtensions = [];
412
+
413
+ for (var i = 0; i < settings.length; i++) {
414
+ roktExtensions.push(settings[i].value);
415
+ }
416
+
417
+ return roktExtensions;
418
+ }
419
+
361
420
  if (window && window.mParticle && window.mParticle.addForwarder) {
362
421
  window.mParticle.addForwarder({
363
422
  name: name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mparticle/web-rokt-kit",
3
- "version": "1.5.0",
3
+ "version": "1.6.1",
4
4
  "description": "mParticle integration kit for Rokt",
5
5
  "main": "dist/Rokt-Kit.common.js",
6
6
  "files": [