@mparticle/web-rokt-kit 1.4.1 → 1.6.0

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.
@@ -17,8 +17,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
17
17
  // See the License for the specific language governing permissions and
18
18
  // limitations under the License.
19
19
 
20
- var roktLauncherScript = 'https://apps.rokt.com/wsdk/integrations/launcher.js';
21
-
22
20
  var name = 'Rokt';
23
21
  var moduleId = 181;
24
22
 
@@ -31,8 +29,28 @@ var constructor = function () {
31
29
 
32
30
  self.launcher = null;
33
31
  self.filters = {};
34
- self.filteredUser = {};
35
32
  self.userAttributes = {};
33
+ self.testHelpers = null;
34
+
35
+ /**
36
+ * Generates the Rokt launcher script URL with optional domain override and extensions
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
39
+ * @returns {string} The complete launcher script URL
40
+ */
41
+ function generateLauncherScript(_domain, extensions) {
42
+ // Override domain if a customer is using a CNAME
43
+ // If a customer is using a CNAME, a domain will be passed. If not, we use the default domain.
44
+ var domain = typeof _domain !== 'undefined' ? _domain : 'apps.rokt.com';
45
+ var protocol = 'https://';
46
+ var launcherPath = '/wsdk/integrations/launcher.js';
47
+ var baseUrl = [protocol, domain, launcherPath].join('');
48
+
49
+ if (!extensions || extensions.length === 0) {
50
+ return baseUrl;
51
+ }
52
+ return baseUrl + '?extensions=' + extensions.join(',');
53
+ }
36
54
 
37
55
  /**
38
56
  * Passes attributes to the Rokt Web SDK for client-side hashing
@@ -57,15 +75,23 @@ var constructor = function () {
57
75
  filteredUserAttributes
58
76
  ) {
59
77
  var accountId = settings.accountId;
78
+ var roktExtensions = extractRoktExtensions(settings.roktExtensions);
60
79
  self.userAttributes = filteredUserAttributes;
61
80
  self.onboardingExpProvider = settings.onboardingExpProvider;
62
-
63
- var launcherOptions = window.mParticle.Rokt.launcherOptions || {};
81
+ var domain = window.mParticle.Rokt.domain;
82
+ var launcherOptions = mergeObjects(
83
+ {},
84
+ window.mParticle.Rokt.launcherOptions || {}
85
+ );
64
86
  launcherOptions.integrationName = generateIntegrationName(
65
87
  launcherOptions.integrationName
66
88
  );
67
89
 
68
90
  if (testMode) {
91
+ self.testHelpers = {
92
+ generateLauncherScript: generateLauncherScript,
93
+ extractRoktExtensions: extractRoktExtensions,
94
+ };
69
95
  attachLauncher(accountId, launcherOptions);
70
96
  return;
71
97
  }
@@ -74,7 +100,7 @@ var constructor = function () {
74
100
  var target = document.head || document.body;
75
101
  var script = document.createElement('script');
76
102
  script.type = 'text/javascript';
77
- script.src = roktLauncherScript;
103
+ script.src = generateLauncherScript(domain, roktExtensions);
78
104
  script.async = true;
79
105
  script.crossOrigin = 'anonymous';
80
106
  script.fetchPriority = 'high';
@@ -104,6 +130,18 @@ var constructor = function () {
104
130
  console.warn('Unable to find Rokt on the page');
105
131
  }
106
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
+ }
107
145
 
108
146
  /**
109
147
  * Selects placements for Rokt Web SDK with merged attributes, filters, and experimentation options
@@ -149,8 +187,11 @@ var constructor = function () {
149
187
  ? fetchOptimizely()
150
188
  : {};
151
189
 
190
+ var filteredUserIdentities = returnUserIdentities(filteredUser);
191
+
152
192
  var selectPlacementsAttributes = mergeObjects(
153
193
  filteredAttributes,
194
+ filteredUserIdentities,
154
195
  optimizelyAttributes,
155
196
  {
156
197
  mpid: mpid,
@@ -164,8 +205,24 @@ var constructor = function () {
164
205
  return self.launcher.selectPlacements(selectPlacementsOptions);
165
206
  }
166
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
+
167
224
  function onUserIdentified(filteredUser) {
168
- self.filteredUser = filteredUser;
225
+ self.filters.filteredUser = filteredUser;
169
226
  self.userAttributes = filteredUser.getAllUserAttributes();
170
227
  }
171
228
 
@@ -189,7 +246,6 @@ var constructor = function () {
189
246
  .then(function (launcher) {
190
247
  // Assign the launcher to a global variable for later access
191
248
  window.Rokt.currentLauncher = launcher;
192
-
193
249
  // Locally cache the launcher and filters
194
250
  self.launcher = launcher;
195
251
 
@@ -203,11 +259,8 @@ var constructor = function () {
203
259
  console.warn(
204
260
  'Rokt Kit: No filtered user has been set.'
205
261
  );
206
- } else {
207
- self.filteredUser = roktFilters.filteredUser;
208
262
  }
209
263
  }
210
-
211
264
  // Attaches the kit to the Rokt manager
212
265
  window.mParticle.Rokt.attachKit(self);
213
266
 
@@ -266,6 +319,7 @@ var constructor = function () {
266
319
 
267
320
  // Kit Callback Methods
268
321
  this.init = initForwarder;
322
+ this.setExtensionData = setExtensionData;
269
323
  this.setUserAttribute = setUserAttribute;
270
324
  this.onUserIdentified = onUserIdentified;
271
325
  this.removeUserAttribute = removeUserAttribute;
@@ -284,7 +338,7 @@ var constructor = function () {
284
338
 
285
339
  function generateIntegrationName(customIntegrationName) {
286
340
  var coreSdkVersion = window.mParticle.getVersion();
287
- var kitVersion = "1.4.1";
341
+ var kitVersion = "1.6.0";
288
342
  var name = 'mParticle_' + 'wsdkv_' + coreSdkVersion + '_kitv_' + kitVersion;
289
343
 
290
344
  if (customIntegrationName) {
@@ -344,6 +398,25 @@ function mergeObjects() {
344
398
  return resObj;
345
399
  }
346
400
 
401
+ function parseSettingsString(settingsString) {
402
+ try {
403
+ return JSON.parse(settingsString.replace(/&quot;/g, '"'));
404
+ } catch (error) {
405
+ throw new Error('Settings string contains invalid JSON');
406
+ }
407
+ }
408
+
409
+ function extractRoktExtensions(settingsString) {
410
+ var settings = settingsString ? parseSettingsString(settingsString) : [];
411
+
412
+ var roktExtensions = [];
413
+ for (var i = 0; i < settings.length; i++) {
414
+ roktExtensions.push(settings[i].value);
415
+ }
416
+
417
+ return roktExtensions;
418
+ }
419
+
347
420
  if (window && window.mParticle && window.mParticle.addForwarder) {
348
421
  window.mParticle.addForwarder({
349
422
  name: name,
@@ -16,8 +16,6 @@ var RoktKit = (function (exports) {
16
16
  // See the License for the specific language governing permissions and
17
17
  // limitations under the License.
18
18
 
19
- var roktLauncherScript = 'https://apps.rokt.com/wsdk/integrations/launcher.js';
20
-
21
19
  var name = 'Rokt';
22
20
  var moduleId = 181;
23
21
 
@@ -30,8 +28,28 @@ var RoktKit = (function (exports) {
30
28
 
31
29
  self.launcher = null;
32
30
  self.filters = {};
33
- self.filteredUser = {};
34
31
  self.userAttributes = {};
32
+ self.testHelpers = null;
33
+
34
+ /**
35
+ * Generates the Rokt launcher script URL with optional domain override and extensions
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
38
+ * @returns {string} The complete launcher script URL
39
+ */
40
+ function generateLauncherScript(_domain, extensions) {
41
+ // Override domain if a customer is using a CNAME
42
+ // If a customer is using a CNAME, a domain will be passed. If not, we use the default domain.
43
+ var domain = typeof _domain !== 'undefined' ? _domain : 'apps.rokt.com';
44
+ var protocol = 'https://';
45
+ var launcherPath = '/wsdk/integrations/launcher.js';
46
+ var baseUrl = [protocol, domain, launcherPath].join('');
47
+
48
+ if (!extensions || extensions.length === 0) {
49
+ return baseUrl;
50
+ }
51
+ return baseUrl + '?extensions=' + extensions.join(',');
52
+ }
35
53
 
36
54
  /**
37
55
  * Passes attributes to the Rokt Web SDK for client-side hashing
@@ -56,15 +74,23 @@ var RoktKit = (function (exports) {
56
74
  filteredUserAttributes
57
75
  ) {
58
76
  var accountId = settings.accountId;
77
+ var roktExtensions = extractRoktExtensions(settings.roktExtensions);
59
78
  self.userAttributes = filteredUserAttributes;
60
79
  self.onboardingExpProvider = settings.onboardingExpProvider;
61
-
62
- var launcherOptions = window.mParticle.Rokt.launcherOptions || {};
80
+ var domain = window.mParticle.Rokt.domain;
81
+ var launcherOptions = mergeObjects(
82
+ {},
83
+ window.mParticle.Rokt.launcherOptions || {}
84
+ );
63
85
  launcherOptions.integrationName = generateIntegrationName(
64
86
  launcherOptions.integrationName
65
87
  );
66
88
 
67
89
  if (testMode) {
90
+ self.testHelpers = {
91
+ generateLauncherScript: generateLauncherScript,
92
+ extractRoktExtensions: extractRoktExtensions,
93
+ };
68
94
  attachLauncher(accountId, launcherOptions);
69
95
  return;
70
96
  }
@@ -73,7 +99,7 @@ var RoktKit = (function (exports) {
73
99
  var target = document.head || document.body;
74
100
  var script = document.createElement('script');
75
101
  script.type = 'text/javascript';
76
- script.src = roktLauncherScript;
102
+ script.src = generateLauncherScript(domain, roktExtensions);
77
103
  script.async = true;
78
104
  script.crossOrigin = 'anonymous';
79
105
  script.fetchPriority = 'high';
@@ -103,6 +129,18 @@ var RoktKit = (function (exports) {
103
129
  console.warn('Unable to find Rokt on the page');
104
130
  }
105
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
+ }
106
144
 
107
145
  /**
108
146
  * Selects placements for Rokt Web SDK with merged attributes, filters, and experimentation options
@@ -148,8 +186,11 @@ var RoktKit = (function (exports) {
148
186
  ? fetchOptimizely()
149
187
  : {};
150
188
 
189
+ var filteredUserIdentities = returnUserIdentities(filteredUser);
190
+
151
191
  var selectPlacementsAttributes = mergeObjects(
152
192
  filteredAttributes,
193
+ filteredUserIdentities,
153
194
  optimizelyAttributes,
154
195
  {
155
196
  mpid: mpid,
@@ -163,8 +204,24 @@ var RoktKit = (function (exports) {
163
204
  return self.launcher.selectPlacements(selectPlacementsOptions);
164
205
  }
165
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
+
166
223
  function onUserIdentified(filteredUser) {
167
- self.filteredUser = filteredUser;
224
+ self.filters.filteredUser = filteredUser;
168
225
  self.userAttributes = filteredUser.getAllUserAttributes();
169
226
  }
170
227
 
@@ -188,7 +245,6 @@ var RoktKit = (function (exports) {
188
245
  .then(function (launcher) {
189
246
  // Assign the launcher to a global variable for later access
190
247
  window.Rokt.currentLauncher = launcher;
191
-
192
248
  // Locally cache the launcher and filters
193
249
  self.launcher = launcher;
194
250
 
@@ -202,11 +258,8 @@ var RoktKit = (function (exports) {
202
258
  console.warn(
203
259
  'Rokt Kit: No filtered user has been set.'
204
260
  );
205
- } else {
206
- self.filteredUser = roktFilters.filteredUser;
207
261
  }
208
262
  }
209
-
210
263
  // Attaches the kit to the Rokt manager
211
264
  window.mParticle.Rokt.attachKit(self);
212
265
 
@@ -265,6 +318,7 @@ var RoktKit = (function (exports) {
265
318
 
266
319
  // Kit Callback Methods
267
320
  this.init = initForwarder;
321
+ this.setExtensionData = setExtensionData;
268
322
  this.setUserAttribute = setUserAttribute;
269
323
  this.onUserIdentified = onUserIdentified;
270
324
  this.removeUserAttribute = removeUserAttribute;
@@ -283,7 +337,7 @@ var RoktKit = (function (exports) {
283
337
 
284
338
  function generateIntegrationName(customIntegrationName) {
285
339
  var coreSdkVersion = window.mParticle.getVersion();
286
- var kitVersion = "1.4.1";
340
+ var kitVersion = "1.6.0";
287
341
  var name = 'mParticle_' + 'wsdkv_' + coreSdkVersion + '_kitv_' + kitVersion;
288
342
 
289
343
  if (customIntegrationName) {
@@ -343,6 +397,25 @@ var RoktKit = (function (exports) {
343
397
  return resObj;
344
398
  }
345
399
 
400
+ function parseSettingsString(settingsString) {
401
+ try {
402
+ return JSON.parse(settingsString.replace(/&quot;/g, '"'));
403
+ } catch (error) {
404
+ throw new Error('Settings string contains invalid JSON');
405
+ }
406
+ }
407
+
408
+ function extractRoktExtensions(settingsString) {
409
+ var settings = settingsString ? parseSettingsString(settingsString) : [];
410
+
411
+ var roktExtensions = [];
412
+ for (var i = 0; i < settings.length; i++) {
413
+ roktExtensions.push(settings[i].value);
414
+ }
415
+
416
+ return roktExtensions;
417
+ }
418
+
346
419
  if (window && window.mParticle && window.mParticle.addForwarder) {
347
420
  window.mParticle.addForwarder({
348
421
  name: name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mparticle/web-rokt-kit",
3
- "version": "1.4.1",
3
+ "version": "1.6.0",
4
4
  "description": "mParticle integration kit for Rokt",
5
5
  "main": "dist/Rokt-Kit.common.js",
6
6
  "files": [