@builder.io/sdk-solid 5.0.1 → 5.1.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.
@@ -215,6 +215,279 @@ var getUserAttributes = () => {
215
215
  };
216
216
  };
217
217
 
218
+ // src/constants/sdk-version.ts
219
+ var SDK_VERSION = "5.1.1";
220
+
221
+ // src/helpers/sdk-headers.ts
222
+ var getSdkHeaders = () => ({
223
+ "X-Builder-SDK": TARGET,
224
+ "X-Builder-SDK-GEN": "2",
225
+ "X-Builder-SDK-Version": SDK_VERSION
226
+ });
227
+
228
+ // src/helpers/nullable.ts
229
+ var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
230
+
231
+ // src/helpers/url.ts
232
+ var getTopLevelDomain = (host) => {
233
+ if (host === "localhost" || host === "127.0.0.1") {
234
+ return host;
235
+ }
236
+ const parts = host.split(".");
237
+ if (parts.length > 2) {
238
+ return parts.slice(1).join(".");
239
+ }
240
+ return host;
241
+ };
242
+
243
+ // src/helpers/cookie.ts
244
+ var getCookieSync = ({
245
+ name,
246
+ canTrack
247
+ }) => {
248
+ try {
249
+ if (!canTrack) {
250
+ return void 0;
251
+ }
252
+ return document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))?.split("=")[1];
253
+ } catch (err) {
254
+ logger.warn("[COOKIE] GET error: ", err?.message || err);
255
+ return void 0;
256
+ }
257
+ };
258
+ var getCookie = async (args) => getCookieSync(args);
259
+ var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
260
+ var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
261
+ var createCookieString = ({
262
+ name,
263
+ value,
264
+ expires
265
+ }) => {
266
+ const secure = isBrowser() ? location.protocol === "https:" : true;
267
+ const secureObj = secure ? SECURE_CONFIG : [[]];
268
+ const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
269
+ const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
270
+ const cookie = stringifyCookie(cookieValue);
271
+ return cookie;
272
+ };
273
+ var setCookie = async ({
274
+ name,
275
+ value,
276
+ expires,
277
+ canTrack
278
+ }) => {
279
+ try {
280
+ if (!canTrack) {
281
+ return;
282
+ }
283
+ const cookie = createCookieString({
284
+ name,
285
+ value,
286
+ expires
287
+ });
288
+ document.cookie = cookie;
289
+ } catch (err) {
290
+ logger.warn("[COOKIE] SET error: ", err?.message || err);
291
+ }
292
+ };
293
+
294
+ // src/helpers/uuid.ts
295
+ function uuidv4() {
296
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
297
+ const r = Math.random() * 16 | 0, v = c == "x" ? r : r & 3 | 8;
298
+ return v.toString(16);
299
+ });
300
+ }
301
+ function uuid() {
302
+ return uuidv4().replace(/-/g, "");
303
+ }
304
+
305
+ // src/helpers/sessionId.ts
306
+ var SESSION_LOCAL_STORAGE_KEY = "builderSessionId";
307
+ var getSessionId = async ({
308
+ canTrack
309
+ }) => {
310
+ if (!canTrack) {
311
+ return void 0;
312
+ }
313
+ const sessionId = await getCookie({
314
+ name: SESSION_LOCAL_STORAGE_KEY,
315
+ canTrack
316
+ });
317
+ if (checkIsDefined(sessionId)) {
318
+ return sessionId;
319
+ } else {
320
+ const newSessionId = createSessionId();
321
+ setSessionId({
322
+ id: newSessionId,
323
+ canTrack
324
+ });
325
+ return newSessionId;
326
+ }
327
+ };
328
+ var createSessionId = () => uuid();
329
+ var setSessionId = ({
330
+ id,
331
+ canTrack
332
+ }) => setCookie({
333
+ name: SESSION_LOCAL_STORAGE_KEY,
334
+ value: id,
335
+ canTrack
336
+ });
337
+
338
+ // src/helpers/localStorage.ts
339
+ var getLocalStorage = () => isBrowser() && typeof localStorage !== "undefined" ? localStorage : void 0;
340
+ var getLocalStorageItem = ({
341
+ key,
342
+ canTrack
343
+ }) => {
344
+ try {
345
+ if (canTrack) {
346
+ return getLocalStorage()?.getItem(key);
347
+ }
348
+ return void 0;
349
+ } catch (err) {
350
+ console.debug("[LocalStorage] GET error: ", err);
351
+ return void 0;
352
+ }
353
+ };
354
+ var setLocalStorageItem = ({
355
+ key,
356
+ canTrack,
357
+ value
358
+ }) => {
359
+ try {
360
+ if (canTrack) {
361
+ getLocalStorage()?.setItem(key, value);
362
+ }
363
+ } catch (err) {
364
+ console.debug("[LocalStorage] SET error: ", err);
365
+ }
366
+ };
367
+
368
+ // src/helpers/visitorId.ts
369
+ var VISITOR_LOCAL_STORAGE_KEY = "builderVisitorId";
370
+ var getVisitorId = ({
371
+ canTrack
372
+ }) => {
373
+ if (!canTrack) {
374
+ return void 0;
375
+ }
376
+ const visitorId = getLocalStorageItem({
377
+ key: VISITOR_LOCAL_STORAGE_KEY,
378
+ canTrack
379
+ });
380
+ if (checkIsDefined(visitorId)) {
381
+ return visitorId;
382
+ } else {
383
+ const newVisitorId = createVisitorId();
384
+ setVisitorId({
385
+ id: newVisitorId,
386
+ canTrack
387
+ });
388
+ return newVisitorId;
389
+ }
390
+ };
391
+ var createVisitorId = () => uuid();
392
+ var setVisitorId = ({
393
+ id,
394
+ canTrack
395
+ }) => setLocalStorageItem({
396
+ key: VISITOR_LOCAL_STORAGE_KEY,
397
+ value: id,
398
+ canTrack
399
+ });
400
+
401
+ // src/functions/log-fetch.ts
402
+ function logFetch(url) {
403
+ if (typeof process !== "undefined" && process.env?.DEBUG) {
404
+ if (String(process.env.DEBUG) == "true") {
405
+ logger.log(url);
406
+ }
407
+ }
408
+ }
409
+
410
+ // src/functions/track/index.ts
411
+ var getTrackingEventData = async ({
412
+ canTrack
413
+ }) => {
414
+ if (!canTrack) {
415
+ return {
416
+ visitorId: void 0,
417
+ sessionId: void 0
418
+ };
419
+ }
420
+ const sessionId = await getSessionId({
421
+ canTrack
422
+ });
423
+ const visitorId = getVisitorId({
424
+ canTrack
425
+ });
426
+ return {
427
+ sessionId,
428
+ visitorId
429
+ };
430
+ };
431
+ var createEvent = async ({
432
+ type: eventType,
433
+ canTrack,
434
+ apiKey,
435
+ metadata,
436
+ ...properties
437
+ }) => ({
438
+ type: eventType,
439
+ data: {
440
+ ...properties,
441
+ metadata: {
442
+ url: location.href,
443
+ ...metadata
444
+ },
445
+ ...await getTrackingEventData({
446
+ canTrack
447
+ }),
448
+ userAttributes: getUserAttributes(),
449
+ ownerId: apiKey
450
+ }
451
+ });
452
+ async function _track({
453
+ apiHost,
454
+ ...eventProps
455
+ }) {
456
+ if (!eventProps.apiKey) {
457
+ logger.error("Missing API key for track call. Please provide your API key.");
458
+ return;
459
+ }
460
+ if (!eventProps.canTrack) {
461
+ return;
462
+ }
463
+ if (isEditing()) {
464
+ return;
465
+ }
466
+ if (!(isBrowser() || TARGET === "reactNative")) {
467
+ return;
468
+ }
469
+ const baseUrl = apiHost || "https://cdn.builder.io";
470
+ const url = `${baseUrl}/api/v1/track`;
471
+ logFetch(url);
472
+ return fetch(url, {
473
+ method: "POST",
474
+ body: JSON.stringify({
475
+ events: [await createEvent(eventProps)]
476
+ }),
477
+ headers: {
478
+ "content-type": "application/json",
479
+ ...getSdkHeaders()
480
+ },
481
+ mode: "cors"
482
+ }).catch((err) => {
483
+ console.error("Failed to track: ", err);
484
+ });
485
+ }
486
+ var track = (args) => _track({
487
+ ...args,
488
+ canTrack: true
489
+ });
490
+
218
491
  // src/functions/evaluate/helpers.ts
219
492
  var getFunctionArguments = ({
220
493
  builder,
@@ -231,11 +504,29 @@ var getFunctionArguments = ({
231
504
  event
232
505
  });
233
506
  };
234
- var getBuilderGlobals = () => ({
507
+ var getBuilderGlobals = (trackingContext) => ({
235
508
  isEditing: isEditing(),
236
509
  isBrowser: isBrowser(),
237
510
  isServer: !isBrowser(),
238
- getUserAttributes: () => getUserAttributes()
511
+ getUserAttributes: () => getUserAttributes(),
512
+ trackConversion: (amount, customProperties) => {
513
+ if (!trackingContext?.apiKey || trackingContext?.canTrack === false) {
514
+ return;
515
+ }
516
+ _track({
517
+ type: "conversion",
518
+ apiKey: trackingContext.apiKey,
519
+ canTrack: trackingContext.canTrack ?? true,
520
+ contentId: trackingContext.contentId,
521
+ variationId: trackingContext.variationId !== trackingContext.contentId ? trackingContext.variationId : void 0,
522
+ metadata: {
523
+ ...customProperties || {},
524
+ ...amount !== void 0 ? {
525
+ amount
526
+ } : {}
527
+ }
528
+ });
529
+ }
239
530
  });
240
531
  var parseCode = (code, {
241
532
  isExpression = true
@@ -304,9 +595,6 @@ var runInBrowser = ({
304
595
  return new Function(...functionArgs.map(([name]) => name), code)(...functionArgs.map(([, value]) => value));
305
596
  };
306
597
 
307
- // src/helpers/nullable.ts
308
- var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
309
-
310
598
  // src/functions/is-node-runtime.ts
311
599
  function isNodeRuntime() {
312
600
  return typeof process !== "undefined" && checkIsDefined(process?.versions?.node);
@@ -351,7 +639,8 @@ function evaluate({
351
639
  rootState,
352
640
  rootSetState,
353
641
  event,
354
- isExpression = true
642
+ isExpression = true,
643
+ trackingContext
355
644
  }) {
356
645
  if (code.trim() === "") {
357
646
  return void 0;
@@ -367,7 +656,7 @@ function evaluate({
367
656
  code: parseCode(code, {
368
657
  isExpression
369
658
  }),
370
- builder: getBuilderGlobals(),
659
+ builder: getBuilderGlobals(trackingContext),
371
660
  context,
372
661
  event,
373
662
  rootSetState,
@@ -955,7 +1244,8 @@ var createEventHandler = (value, options) => (event) => evaluate({
955
1244
  rootState: options.rootState,
956
1245
  rootSetState: options.rootSetState,
957
1246
  event,
958
- isExpression: false
1247
+ isExpression: false,
1248
+ trackingContext: options.trackingContext
959
1249
  });
960
1250
 
961
1251
  // src/functions/get-block-actions.ts
@@ -1036,395 +1326,131 @@ function BlockWrapper(props) {
1036
1326
  rootSetState: props.context.rootSetState,
1037
1327
  localState: props.context.localState,
1038
1328
  context: props.context.context,
1039
- stripPrefix: true
1329
+ stripPrefix: true,
1330
+ trackingContext: {
1331
+ apiKey: props.context.apiKey,
1332
+ canTrack: props.context.canTrack ?? true,
1333
+ contentId: props.context.content?.id,
1334
+ variationId: props.context.content?.testVariationId
1335
+ }
1040
1336
  });
1041
1337
  },
1042
1338
  get children() {
1043
1339
  return props.children;
1044
- }
1045
- });
1046
- }
1047
- var block_wrapper_default = BlockWrapper;
1048
-
1049
- // src/functions/is-previewing.ts
1050
- function isPreviewing(search) {
1051
- const searchToUse = search || (isBrowser() ? window.location.search : void 0);
1052
- if (!searchToUse) {
1053
- return false;
1054
- }
1055
- const normalizedSearch = getSearchString(searchToUse);
1056
- return Boolean(normalizedSearch.indexOf("builder.preview=") !== -1);
1057
- }
1058
-
1059
- // src/functions/register-component.ts
1060
- var createRegisterComponentMessage = (info) => ({
1061
- type: "builder.registerComponent",
1062
- data: serializeIncludingFunctions(info)
1063
- });
1064
- var serializeFn = (fnValue) => {
1065
- const fnStr = fnValue.toString().trim();
1066
- const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
1067
- const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
1068
- return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
1069
- };
1070
- function serializeIncludingFunctions(info) {
1071
- return JSON.parse(JSON.stringify(info, (key, value) => {
1072
- if (typeof value === "function") {
1073
- return serializeFn(value);
1074
- }
1075
- return value;
1076
- }));
1077
- }
1078
-
1079
- // src/functions/register.ts
1080
- var registry = {};
1081
- function register(type, info) {
1082
- if (type === "plugin") {
1083
- info = serializeIncludingFunctions(info);
1084
- }
1085
- let typeList = registry[type];
1086
- if (!typeList) {
1087
- typeList = registry[type] = [];
1088
- }
1089
- typeList.push(info);
1090
- if (isBrowser()) {
1091
- const message = {
1092
- type: "builder.register",
1093
- data: {
1094
- type,
1095
- info
1096
- }
1097
- };
1098
- try {
1099
- parent.postMessage(message, "*");
1100
- if (parent !== window) {
1101
- window.postMessage(message, "*");
1102
- }
1103
- } catch (err) {
1104
- console.debug("Could not postmessage", err);
1105
- }
1106
- }
1107
- }
1108
- function registerAction(action) {
1109
- if (isBrowser()) {
1110
- const actionClone = JSON.parse(JSON.stringify(action));
1111
- if (action.action) {
1112
- actionClone.action = action.action.toString();
1113
- }
1114
- window.parent?.postMessage({
1115
- type: "builder.registerAction",
1116
- data: actionClone
1117
- }, "*");
1118
- }
1119
- }
1120
-
1121
- // src/functions/set-editor-settings.ts
1122
- var settings = {};
1123
- function setEditorSettings(newSettings) {
1124
- if (isBrowser()) {
1125
- Object.assign(settings, newSettings);
1126
- const message = {
1127
- type: "builder.settingsChange",
1128
- data: settings
1129
- };
1130
- parent.postMessage(message, "*");
1131
- }
1132
- }
1133
-
1134
- // src/functions/get-builder-search-params/index.ts
1135
- var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
1136
- var BUILDER_OPTIONS_PREFIX = "options.";
1137
- var getBuilderSearchParams = (_options) => {
1138
- if (!_options) {
1139
- return {};
1140
- }
1141
- const options = normalizeSearchParams(_options);
1142
- const newOptions = {};
1143
- Object.keys(options).forEach((key) => {
1144
- if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
1145
- const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
1146
- newOptions[trimmedKey] = options[key];
1147
- }
1148
- });
1149
- return newOptions;
1150
- };
1151
- var getBuilderSearchParamsFromWindow = () => {
1152
- if (!isBrowser()) {
1153
- return {};
1154
- }
1155
- const searchParams = new URLSearchParams(window.location.search);
1156
- return getBuilderSearchParams(searchParams);
1157
- };
1158
-
1159
- // src/constants/sdk-version.ts
1160
- var SDK_VERSION = "5.0.1";
1161
-
1162
- // src/helpers/sdk-headers.ts
1163
- var getSdkHeaders = () => ({
1164
- "X-Builder-SDK": TARGET,
1165
- "X-Builder-SDK-GEN": "2",
1166
- "X-Builder-SDK-Version": SDK_VERSION
1167
- });
1168
-
1169
- // src/helpers/url.ts
1170
- var getTopLevelDomain = (host) => {
1171
- if (host === "localhost" || host === "127.0.0.1") {
1172
- return host;
1173
- }
1174
- const parts = host.split(".");
1175
- if (parts.length > 2) {
1176
- return parts.slice(1).join(".");
1177
- }
1178
- return host;
1179
- };
1180
-
1181
- // src/helpers/cookie.ts
1182
- var getCookieSync = ({
1183
- name,
1184
- canTrack
1185
- }) => {
1186
- try {
1187
- if (!canTrack) {
1188
- return void 0;
1189
- }
1190
- return document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))?.split("=")[1];
1191
- } catch (err) {
1192
- logger.warn("[COOKIE] GET error: ", err?.message || err);
1193
- return void 0;
1194
- }
1195
- };
1196
- var getCookie = async (args) => getCookieSync(args);
1197
- var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
1198
- var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
1199
- var createCookieString = ({
1200
- name,
1201
- value,
1202
- expires
1203
- }) => {
1204
- const secure = isBrowser() ? location.protocol === "https:" : true;
1205
- const secureObj = secure ? SECURE_CONFIG : [[]];
1206
- const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
1207
- const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
1208
- const cookie = stringifyCookie(cookieValue);
1209
- return cookie;
1210
- };
1211
- var setCookie = async ({
1212
- name,
1213
- value,
1214
- expires,
1215
- canTrack
1216
- }) => {
1217
- try {
1218
- if (!canTrack) {
1219
- return;
1220
- }
1221
- const cookie = createCookieString({
1222
- name,
1223
- value,
1224
- expires
1225
- });
1226
- document.cookie = cookie;
1227
- } catch (err) {
1228
- logger.warn("[COOKIE] SET error: ", err?.message || err);
1229
- }
1230
- };
1231
-
1232
- // src/helpers/uuid.ts
1233
- function uuidv4() {
1234
- return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
1235
- const r = Math.random() * 16 | 0, v = c == "x" ? r : r & 3 | 8;
1236
- return v.toString(16);
1237
- });
1238
- }
1239
- function uuid() {
1240
- return uuidv4().replace(/-/g, "");
1241
- }
1242
-
1243
- // src/helpers/sessionId.ts
1244
- var SESSION_LOCAL_STORAGE_KEY = "builderSessionId";
1245
- var getSessionId = async ({
1246
- canTrack
1247
- }) => {
1248
- if (!canTrack) {
1249
- return void 0;
1250
- }
1251
- const sessionId = await getCookie({
1252
- name: SESSION_LOCAL_STORAGE_KEY,
1253
- canTrack
1340
+ }
1254
1341
  });
1255
- if (checkIsDefined(sessionId)) {
1256
- return sessionId;
1257
- } else {
1258
- const newSessionId = createSessionId();
1259
- setSessionId({
1260
- id: newSessionId,
1261
- canTrack
1262
- });
1263
- return newSessionId;
1264
- }
1265
- };
1266
- var createSessionId = () => uuid();
1267
- var setSessionId = ({
1268
- id,
1269
- canTrack
1270
- }) => setCookie({
1271
- name: SESSION_LOCAL_STORAGE_KEY,
1272
- value: id,
1273
- canTrack
1274
- });
1342
+ }
1343
+ var block_wrapper_default = BlockWrapper;
1275
1344
 
1276
- // src/helpers/localStorage.ts
1277
- var getLocalStorage = () => isBrowser() && typeof localStorage !== "undefined" ? localStorage : void 0;
1278
- var getLocalStorageItem = ({
1279
- key,
1280
- canTrack
1281
- }) => {
1282
- try {
1283
- if (canTrack) {
1284
- return getLocalStorage()?.getItem(key);
1285
- }
1286
- return void 0;
1287
- } catch (err) {
1288
- console.debug("[LocalStorage] GET error: ", err);
1289
- return void 0;
1345
+ // src/functions/is-previewing.ts
1346
+ function isPreviewing(search) {
1347
+ const searchToUse = search || (isBrowser() ? window.location.search : void 0);
1348
+ if (!searchToUse) {
1349
+ return false;
1290
1350
  }
1351
+ const normalizedSearch = getSearchString(searchToUse);
1352
+ return Boolean(normalizedSearch.indexOf("builder.preview=") !== -1);
1353
+ }
1354
+
1355
+ // src/functions/register-component.ts
1356
+ var createRegisterComponentMessage = (info) => ({
1357
+ type: "builder.registerComponent",
1358
+ data: serializeIncludingFunctions(info)
1359
+ });
1360
+ var serializeFn = (fnValue) => {
1361
+ const fnStr = fnValue.toString().trim();
1362
+ const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
1363
+ const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
1364
+ return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
1291
1365
  };
1292
- var setLocalStorageItem = ({
1293
- key,
1294
- canTrack,
1295
- value
1296
- }) => {
1297
- try {
1298
- if (canTrack) {
1299
- getLocalStorage()?.setItem(key, value);
1366
+ function serializeIncludingFunctions(info) {
1367
+ return JSON.parse(JSON.stringify(info, (key, value) => {
1368
+ if (typeof value === "function") {
1369
+ return serializeFn(value);
1300
1370
  }
1301
- } catch (err) {
1302
- console.debug("[LocalStorage] SET error: ", err);
1303
- }
1304
- };
1371
+ return value;
1372
+ }));
1373
+ }
1305
1374
 
1306
- // src/helpers/visitorId.ts
1307
- var VISITOR_LOCAL_STORAGE_KEY = "builderVisitorId";
1308
- var getVisitorId = ({
1309
- canTrack
1310
- }) => {
1311
- if (!canTrack) {
1312
- return void 0;
1375
+ // src/functions/register.ts
1376
+ var registry = {};
1377
+ function register(type, info) {
1378
+ if (type === "plugin") {
1379
+ info = serializeIncludingFunctions(info);
1313
1380
  }
1314
- const visitorId = getLocalStorageItem({
1315
- key: VISITOR_LOCAL_STORAGE_KEY,
1316
- canTrack
1317
- });
1318
- if (checkIsDefined(visitorId)) {
1319
- return visitorId;
1320
- } else {
1321
- const newVisitorId = createVisitorId();
1322
- setVisitorId({
1323
- id: newVisitorId,
1324
- canTrack
1325
- });
1326
- return newVisitorId;
1381
+ let typeList = registry[type];
1382
+ if (!typeList) {
1383
+ typeList = registry[type] = [];
1327
1384
  }
1328
- };
1329
- var createVisitorId = () => uuid();
1330
- var setVisitorId = ({
1331
- id,
1332
- canTrack
1333
- }) => setLocalStorageItem({
1334
- key: VISITOR_LOCAL_STORAGE_KEY,
1335
- value: id,
1336
- canTrack
1337
- });
1338
-
1339
- // src/functions/log-fetch.ts
1340
- function logFetch(url) {
1341
- if (typeof process !== "undefined" && process.env?.DEBUG) {
1342
- if (String(process.env.DEBUG) == "true") {
1343
- logger.log(url);
1385
+ typeList.push(info);
1386
+ if (isBrowser()) {
1387
+ const message = {
1388
+ type: "builder.register",
1389
+ data: {
1390
+ type,
1391
+ info
1392
+ }
1393
+ };
1394
+ try {
1395
+ parent.postMessage(message, "*");
1396
+ if (parent !== window) {
1397
+ window.postMessage(message, "*");
1398
+ }
1399
+ } catch (err) {
1400
+ console.debug("Could not postmessage", err);
1401
+ }
1402
+ }
1403
+ }
1404
+ function registerAction(action) {
1405
+ if (isBrowser()) {
1406
+ const actionClone = JSON.parse(JSON.stringify(action));
1407
+ if (action.action) {
1408
+ actionClone.action = action.action.toString();
1344
1409
  }
1410
+ window.parent?.postMessage({
1411
+ type: "builder.registerAction",
1412
+ data: actionClone
1413
+ }, "*");
1345
1414
  }
1346
1415
  }
1347
1416
 
1348
- // src/functions/track/index.ts
1349
- var getTrackingEventData = async ({
1350
- canTrack
1351
- }) => {
1352
- if (!canTrack) {
1353
- return {
1354
- visitorId: void 0,
1355
- sessionId: void 0
1417
+ // src/functions/set-editor-settings.ts
1418
+ var settings = {};
1419
+ function setEditorSettings(newSettings) {
1420
+ if (isBrowser()) {
1421
+ Object.assign(settings, newSettings);
1422
+ const message = {
1423
+ type: "builder.settingsChange",
1424
+ data: settings
1356
1425
  };
1426
+ parent.postMessage(message, "*");
1357
1427
  }
1358
- const sessionId = await getSessionId({
1359
- canTrack
1360
- });
1361
- const visitorId = getVisitorId({
1362
- canTrack
1428
+ }
1429
+
1430
+ // src/functions/get-builder-search-params/index.ts
1431
+ var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
1432
+ var BUILDER_OPTIONS_PREFIX = "options.";
1433
+ var getBuilderSearchParams = (_options) => {
1434
+ if (!_options) {
1435
+ return {};
1436
+ }
1437
+ const options = normalizeSearchParams(_options);
1438
+ const newOptions = {};
1439
+ Object.keys(options).forEach((key) => {
1440
+ if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
1441
+ const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
1442
+ newOptions[trimmedKey] = options[key];
1443
+ }
1363
1444
  });
1364
- return {
1365
- sessionId,
1366
- visitorId
1367
- };
1445
+ return newOptions;
1368
1446
  };
1369
- var createEvent = async ({
1370
- type: eventType,
1371
- canTrack,
1372
- apiKey,
1373
- metadata,
1374
- ...properties
1375
- }) => ({
1376
- type: eventType,
1377
- data: {
1378
- ...properties,
1379
- metadata: {
1380
- url: location.href,
1381
- ...metadata
1382
- },
1383
- ...await getTrackingEventData({
1384
- canTrack
1385
- }),
1386
- userAttributes: getUserAttributes(),
1387
- ownerId: apiKey
1388
- }
1389
- });
1390
- async function _track({
1391
- apiHost,
1392
- ...eventProps
1393
- }) {
1394
- if (!eventProps.apiKey) {
1395
- logger.error("Missing API key for track call. Please provide your API key.");
1396
- return;
1397
- }
1398
- if (!eventProps.canTrack) {
1399
- return;
1400
- }
1401
- if (isEditing()) {
1402
- return;
1403
- }
1404
- if (!(isBrowser() || TARGET === "reactNative")) {
1405
- return;
1447
+ var getBuilderSearchParamsFromWindow = () => {
1448
+ if (!isBrowser()) {
1449
+ return {};
1406
1450
  }
1407
- const baseUrl = apiHost || "https://cdn.builder.io";
1408
- const url = `${baseUrl}/api/v1/track`;
1409
- logFetch(url);
1410
- return fetch(url, {
1411
- method: "POST",
1412
- body: JSON.stringify({
1413
- events: [await createEvent(eventProps)]
1414
- }),
1415
- headers: {
1416
- "content-type": "application/json",
1417
- ...getSdkHeaders()
1418
- },
1419
- mode: "cors"
1420
- }).catch((err) => {
1421
- console.error("Failed to track: ", err);
1422
- });
1423
- }
1424
- var track = (args) => _track({
1425
- ...args,
1426
- canTrack: true
1427
- });
1451
+ const searchParams = new URLSearchParams(window.location.search);
1452
+ return getBuilderSearchParams(searchParams);
1453
+ };
1428
1454
 
1429
1455
  // src/functions/is-from-trusted-host.ts
1430
1456
  var DEFAULT_TRUSTED_HOSTS = ["*.beta.builder.io", "beta.builder.io", "builder.io", "localhost", "qa.builder.io"];
@@ -2167,7 +2193,13 @@ function InteractiveElement(props) {
2167
2193
  rootState: props.context.rootState,
2168
2194
  rootSetState: props.context.rootSetState,
2169
2195
  localState: props.context.localState,
2170
- context: props.context.context
2196
+ context: props.context.context,
2197
+ trackingContext: {
2198
+ apiKey: props.context.apiKey,
2199
+ canTrack: props.context.canTrack ?? true,
2200
+ contentId: props.context.content?.id,
2201
+ variationId: props.context.content?.testVariationId
2202
+ }
2171
2203
  })
2172
2204
  } : {};
2173
2205
  });