@builder.io/sdk-solid 5.1.0 → 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.
package/lib/node/dev.js CHANGED
@@ -216,6 +216,279 @@ var getUserAttributes = () => {
216
216
  };
217
217
  };
218
218
 
219
+ // src/constants/sdk-version.ts
220
+ var SDK_VERSION = "5.1.1";
221
+
222
+ // src/helpers/sdk-headers.ts
223
+ var getSdkHeaders = () => ({
224
+ "X-Builder-SDK": TARGET,
225
+ "X-Builder-SDK-GEN": "2",
226
+ "X-Builder-SDK-Version": SDK_VERSION
227
+ });
228
+
229
+ // src/helpers/nullable.ts
230
+ var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
231
+
232
+ // src/helpers/url.ts
233
+ var getTopLevelDomain = (host) => {
234
+ if (host === "localhost" || host === "127.0.0.1") {
235
+ return host;
236
+ }
237
+ const parts = host.split(".");
238
+ if (parts.length > 2) {
239
+ return parts.slice(1).join(".");
240
+ }
241
+ return host;
242
+ };
243
+
244
+ // src/helpers/cookie.ts
245
+ var getCookieSync = ({
246
+ name,
247
+ canTrack
248
+ }) => {
249
+ try {
250
+ if (!canTrack) {
251
+ return void 0;
252
+ }
253
+ return document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))?.split("=")[1];
254
+ } catch (err) {
255
+ logger.warn("[COOKIE] GET error: ", err?.message || err);
256
+ return void 0;
257
+ }
258
+ };
259
+ var getCookie = async (args) => getCookieSync(args);
260
+ var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
261
+ var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
262
+ var createCookieString = ({
263
+ name,
264
+ value,
265
+ expires
266
+ }) => {
267
+ const secure = isBrowser() ? location.protocol === "https:" : true;
268
+ const secureObj = secure ? SECURE_CONFIG : [[]];
269
+ const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
270
+ const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
271
+ const cookie = stringifyCookie(cookieValue);
272
+ return cookie;
273
+ };
274
+ var setCookie = async ({
275
+ name,
276
+ value,
277
+ expires,
278
+ canTrack
279
+ }) => {
280
+ try {
281
+ if (!canTrack) {
282
+ return;
283
+ }
284
+ const cookie = createCookieString({
285
+ name,
286
+ value,
287
+ expires
288
+ });
289
+ document.cookie = cookie;
290
+ } catch (err) {
291
+ logger.warn("[COOKIE] SET error: ", err?.message || err);
292
+ }
293
+ };
294
+
295
+ // src/helpers/uuid.ts
296
+ function uuidv4() {
297
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
298
+ const r = Math.random() * 16 | 0, v = c == "x" ? r : r & 3 | 8;
299
+ return v.toString(16);
300
+ });
301
+ }
302
+ function uuid() {
303
+ return uuidv4().replace(/-/g, "");
304
+ }
305
+
306
+ // src/helpers/sessionId.ts
307
+ var SESSION_LOCAL_STORAGE_KEY = "builderSessionId";
308
+ var getSessionId = async ({
309
+ canTrack
310
+ }) => {
311
+ if (!canTrack) {
312
+ return void 0;
313
+ }
314
+ const sessionId = await getCookie({
315
+ name: SESSION_LOCAL_STORAGE_KEY,
316
+ canTrack
317
+ });
318
+ if (checkIsDefined(sessionId)) {
319
+ return sessionId;
320
+ } else {
321
+ const newSessionId = createSessionId();
322
+ setSessionId({
323
+ id: newSessionId,
324
+ canTrack
325
+ });
326
+ return newSessionId;
327
+ }
328
+ };
329
+ var createSessionId = () => uuid();
330
+ var setSessionId = ({
331
+ id,
332
+ canTrack
333
+ }) => setCookie({
334
+ name: SESSION_LOCAL_STORAGE_KEY,
335
+ value: id,
336
+ canTrack
337
+ });
338
+
339
+ // src/helpers/localStorage.ts
340
+ var getLocalStorage = () => isBrowser() && typeof localStorage !== "undefined" ? localStorage : void 0;
341
+ var getLocalStorageItem = ({
342
+ key,
343
+ canTrack
344
+ }) => {
345
+ try {
346
+ if (canTrack) {
347
+ return getLocalStorage()?.getItem(key);
348
+ }
349
+ return void 0;
350
+ } catch (err) {
351
+ console.debug("[LocalStorage] GET error: ", err);
352
+ return void 0;
353
+ }
354
+ };
355
+ var setLocalStorageItem = ({
356
+ key,
357
+ canTrack,
358
+ value
359
+ }) => {
360
+ try {
361
+ if (canTrack) {
362
+ getLocalStorage()?.setItem(key, value);
363
+ }
364
+ } catch (err) {
365
+ console.debug("[LocalStorage] SET error: ", err);
366
+ }
367
+ };
368
+
369
+ // src/helpers/visitorId.ts
370
+ var VISITOR_LOCAL_STORAGE_KEY = "builderVisitorId";
371
+ var getVisitorId = ({
372
+ canTrack
373
+ }) => {
374
+ if (!canTrack) {
375
+ return void 0;
376
+ }
377
+ const visitorId = getLocalStorageItem({
378
+ key: VISITOR_LOCAL_STORAGE_KEY,
379
+ canTrack
380
+ });
381
+ if (checkIsDefined(visitorId)) {
382
+ return visitorId;
383
+ } else {
384
+ const newVisitorId = createVisitorId();
385
+ setVisitorId({
386
+ id: newVisitorId,
387
+ canTrack
388
+ });
389
+ return newVisitorId;
390
+ }
391
+ };
392
+ var createVisitorId = () => uuid();
393
+ var setVisitorId = ({
394
+ id,
395
+ canTrack
396
+ }) => setLocalStorageItem({
397
+ key: VISITOR_LOCAL_STORAGE_KEY,
398
+ value: id,
399
+ canTrack
400
+ });
401
+
402
+ // src/functions/log-fetch.ts
403
+ function logFetch(url) {
404
+ if (typeof process !== "undefined" && process.env?.DEBUG) {
405
+ if (String(process.env.DEBUG) == "true") {
406
+ logger.log(url);
407
+ }
408
+ }
409
+ }
410
+
411
+ // src/functions/track/index.ts
412
+ var getTrackingEventData = async ({
413
+ canTrack
414
+ }) => {
415
+ if (!canTrack) {
416
+ return {
417
+ visitorId: void 0,
418
+ sessionId: void 0
419
+ };
420
+ }
421
+ const sessionId = await getSessionId({
422
+ canTrack
423
+ });
424
+ const visitorId = getVisitorId({
425
+ canTrack
426
+ });
427
+ return {
428
+ sessionId,
429
+ visitorId
430
+ };
431
+ };
432
+ var createEvent = async ({
433
+ type: eventType,
434
+ canTrack,
435
+ apiKey,
436
+ metadata,
437
+ ...properties
438
+ }) => ({
439
+ type: eventType,
440
+ data: {
441
+ ...properties,
442
+ metadata: {
443
+ url: location.href,
444
+ ...metadata
445
+ },
446
+ ...await getTrackingEventData({
447
+ canTrack
448
+ }),
449
+ userAttributes: getUserAttributes(),
450
+ ownerId: apiKey
451
+ }
452
+ });
453
+ async function _track({
454
+ apiHost,
455
+ ...eventProps
456
+ }) {
457
+ if (!eventProps.apiKey) {
458
+ logger.error("Missing API key for track call. Please provide your API key.");
459
+ return;
460
+ }
461
+ if (!eventProps.canTrack) {
462
+ return;
463
+ }
464
+ if (isEditing()) {
465
+ return;
466
+ }
467
+ if (!(isBrowser() || TARGET === "reactNative")) {
468
+ return;
469
+ }
470
+ const baseUrl = apiHost || "https://cdn.builder.io";
471
+ const url = `${baseUrl}/api/v1/track`;
472
+ logFetch(url);
473
+ return fetch(url, {
474
+ method: "POST",
475
+ body: JSON.stringify({
476
+ events: [await createEvent(eventProps)]
477
+ }),
478
+ headers: {
479
+ "content-type": "application/json",
480
+ ...getSdkHeaders()
481
+ },
482
+ mode: "cors"
483
+ }).catch((err) => {
484
+ console.error("Failed to track: ", err);
485
+ });
486
+ }
487
+ var track = (args) => _track({
488
+ ...args,
489
+ canTrack: true
490
+ });
491
+
219
492
  // src/functions/evaluate/helpers.ts
220
493
  var getFunctionArguments = ({
221
494
  builder,
@@ -232,11 +505,29 @@ var getFunctionArguments = ({
232
505
  event
233
506
  });
234
507
  };
235
- var getBuilderGlobals = () => ({
508
+ var getBuilderGlobals = (trackingContext) => ({
236
509
  isEditing: isEditing(),
237
510
  isBrowser: isBrowser(),
238
511
  isServer: !isBrowser(),
239
- getUserAttributes: () => getUserAttributes()
512
+ getUserAttributes: () => getUserAttributes(),
513
+ trackConversion: (amount, customProperties) => {
514
+ if (!trackingContext?.apiKey || trackingContext?.canTrack === false) {
515
+ return;
516
+ }
517
+ _track({
518
+ type: "conversion",
519
+ apiKey: trackingContext.apiKey,
520
+ canTrack: trackingContext.canTrack ?? true,
521
+ contentId: trackingContext.contentId,
522
+ variationId: trackingContext.variationId !== trackingContext.contentId ? trackingContext.variationId : void 0,
523
+ metadata: {
524
+ ...customProperties || {},
525
+ ...amount !== void 0 ? {
526
+ amount
527
+ } : {}
528
+ }
529
+ });
530
+ }
240
531
  });
241
532
  var parseCode = (code, {
242
533
  isExpression = true
@@ -484,9 +775,6 @@ var runInNode = ({
484
775
  }
485
776
  };
486
777
 
487
- // src/helpers/nullable.ts
488
- var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
489
-
490
778
  // src/functions/is-node-runtime.ts
491
779
  function isNodeRuntime() {
492
780
  return typeof process !== "undefined" && checkIsDefined(process?.versions?.node);
@@ -531,7 +819,8 @@ function evaluate({
531
819
  rootState,
532
820
  rootSetState,
533
821
  event,
534
- isExpression = true
822
+ isExpression = true,
823
+ trackingContext
535
824
  }) {
536
825
  if (code.trim() === "") {
537
826
  return void 0;
@@ -547,7 +836,7 @@ function evaluate({
547
836
  code: parseCode(code, {
548
837
  isExpression
549
838
  }),
550
- builder: getBuilderGlobals(),
839
+ builder: getBuilderGlobals(trackingContext),
551
840
  context,
552
841
  event,
553
842
  rootSetState,
@@ -1122,7 +1411,8 @@ var createEventHandler = (value, options) => (event) => evaluate({
1122
1411
  rootState: options.rootState,
1123
1412
  rootSetState: options.rootSetState,
1124
1413
  event,
1125
- isExpression: false
1414
+ isExpression: false,
1415
+ trackingContext: options.trackingContext
1126
1416
  });
1127
1417
 
1128
1418
  // src/functions/get-block-actions.ts
@@ -1203,395 +1493,131 @@ function BlockWrapper(props) {
1203
1493
  rootSetState: props.context.rootSetState,
1204
1494
  localState: props.context.localState,
1205
1495
  context: props.context.context,
1206
- stripPrefix: true
1496
+ stripPrefix: true,
1497
+ trackingContext: {
1498
+ apiKey: props.context.apiKey,
1499
+ canTrack: props.context.canTrack ?? true,
1500
+ contentId: props.context.content?.id,
1501
+ variationId: props.context.content?.testVariationId
1502
+ }
1207
1503
  });
1208
1504
  },
1209
1505
  get children() {
1210
1506
  return props.children;
1211
- }
1212
- });
1213
- }
1214
- var block_wrapper_default = BlockWrapper;
1215
-
1216
- // src/functions/is-previewing.ts
1217
- function isPreviewing(search) {
1218
- const searchToUse = search || (isBrowser() ? window.location.search : void 0);
1219
- if (!searchToUse) {
1220
- return false;
1221
- }
1222
- const normalizedSearch = getSearchString(searchToUse);
1223
- return Boolean(normalizedSearch.indexOf("builder.preview=") !== -1);
1224
- }
1225
-
1226
- // src/functions/register-component.ts
1227
- var createRegisterComponentMessage = (info) => ({
1228
- type: "builder.registerComponent",
1229
- data: serializeIncludingFunctions(info)
1230
- });
1231
- var serializeFn = (fnValue) => {
1232
- const fnStr = fnValue.toString().trim();
1233
- const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
1234
- const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
1235
- return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
1236
- };
1237
- function serializeIncludingFunctions(info) {
1238
- return JSON.parse(JSON.stringify(info, (key, value) => {
1239
- if (typeof value === "function") {
1240
- return serializeFn(value);
1241
- }
1242
- return value;
1243
- }));
1244
- }
1245
-
1246
- // src/functions/register.ts
1247
- var registry = {};
1248
- function register(type, info) {
1249
- if (type === "plugin") {
1250
- info = serializeIncludingFunctions(info);
1251
- }
1252
- let typeList = registry[type];
1253
- if (!typeList) {
1254
- typeList = registry[type] = [];
1255
- }
1256
- typeList.push(info);
1257
- if (isBrowser()) {
1258
- const message = {
1259
- type: "builder.register",
1260
- data: {
1261
- type,
1262
- info
1263
- }
1264
- };
1265
- try {
1266
- parent.postMessage(message, "*");
1267
- if (parent !== window) {
1268
- window.postMessage(message, "*");
1269
- }
1270
- } catch (err) {
1271
- console.debug("Could not postmessage", err);
1272
- }
1273
- }
1274
- }
1275
- function registerAction(action) {
1276
- if (isBrowser()) {
1277
- const actionClone = JSON.parse(JSON.stringify(action));
1278
- if (action.action) {
1279
- actionClone.action = action.action.toString();
1280
- }
1281
- window.parent?.postMessage({
1282
- type: "builder.registerAction",
1283
- data: actionClone
1284
- }, "*");
1285
- }
1286
- }
1287
-
1288
- // src/functions/set-editor-settings.ts
1289
- var settings = {};
1290
- function setEditorSettings(newSettings) {
1291
- if (isBrowser()) {
1292
- Object.assign(settings, newSettings);
1293
- const message = {
1294
- type: "builder.settingsChange",
1295
- data: settings
1296
- };
1297
- parent.postMessage(message, "*");
1298
- }
1299
- }
1300
-
1301
- // src/functions/get-builder-search-params/index.ts
1302
- var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
1303
- var BUILDER_OPTIONS_PREFIX = "options.";
1304
- var getBuilderSearchParams = (_options) => {
1305
- if (!_options) {
1306
- return {};
1307
- }
1308
- const options = normalizeSearchParams(_options);
1309
- const newOptions = {};
1310
- Object.keys(options).forEach((key) => {
1311
- if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
1312
- const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
1313
- newOptions[trimmedKey] = options[key];
1314
- }
1315
- });
1316
- return newOptions;
1317
- };
1318
- var getBuilderSearchParamsFromWindow = () => {
1319
- if (!isBrowser()) {
1320
- return {};
1321
- }
1322
- const searchParams = new URLSearchParams(window.location.search);
1323
- return getBuilderSearchParams(searchParams);
1324
- };
1325
-
1326
- // src/constants/sdk-version.ts
1327
- var SDK_VERSION = "5.1.0";
1328
-
1329
- // src/helpers/sdk-headers.ts
1330
- var getSdkHeaders = () => ({
1331
- "X-Builder-SDK": TARGET,
1332
- "X-Builder-SDK-GEN": "2",
1333
- "X-Builder-SDK-Version": SDK_VERSION
1334
- });
1335
-
1336
- // src/helpers/url.ts
1337
- var getTopLevelDomain = (host) => {
1338
- if (host === "localhost" || host === "127.0.0.1") {
1339
- return host;
1340
- }
1341
- const parts = host.split(".");
1342
- if (parts.length > 2) {
1343
- return parts.slice(1).join(".");
1344
- }
1345
- return host;
1346
- };
1347
-
1348
- // src/helpers/cookie.ts
1349
- var getCookieSync = ({
1350
- name,
1351
- canTrack
1352
- }) => {
1353
- try {
1354
- if (!canTrack) {
1355
- return void 0;
1356
- }
1357
- return document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))?.split("=")[1];
1358
- } catch (err) {
1359
- logger.warn("[COOKIE] GET error: ", err?.message || err);
1360
- return void 0;
1361
- }
1362
- };
1363
- var getCookie = async (args) => getCookieSync(args);
1364
- var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
1365
- var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
1366
- var createCookieString = ({
1367
- name,
1368
- value,
1369
- expires
1370
- }) => {
1371
- const secure = isBrowser() ? location.protocol === "https:" : true;
1372
- const secureObj = secure ? SECURE_CONFIG : [[]];
1373
- const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
1374
- const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
1375
- const cookie = stringifyCookie(cookieValue);
1376
- return cookie;
1377
- };
1378
- var setCookie = async ({
1379
- name,
1380
- value,
1381
- expires,
1382
- canTrack
1383
- }) => {
1384
- try {
1385
- if (!canTrack) {
1386
- return;
1387
- }
1388
- const cookie = createCookieString({
1389
- name,
1390
- value,
1391
- expires
1392
- });
1393
- document.cookie = cookie;
1394
- } catch (err) {
1395
- logger.warn("[COOKIE] SET error: ", err?.message || err);
1396
- }
1397
- };
1398
-
1399
- // src/helpers/uuid.ts
1400
- function uuidv4() {
1401
- return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
1402
- const r = Math.random() * 16 | 0, v = c == "x" ? r : r & 3 | 8;
1403
- return v.toString(16);
1404
- });
1405
- }
1406
- function uuid() {
1407
- return uuidv4().replace(/-/g, "");
1408
- }
1409
-
1410
- // src/helpers/sessionId.ts
1411
- var SESSION_LOCAL_STORAGE_KEY = "builderSessionId";
1412
- var getSessionId = async ({
1413
- canTrack
1414
- }) => {
1415
- if (!canTrack) {
1416
- return void 0;
1417
- }
1418
- const sessionId = await getCookie({
1419
- name: SESSION_LOCAL_STORAGE_KEY,
1420
- canTrack
1507
+ }
1421
1508
  });
1422
- if (checkIsDefined(sessionId)) {
1423
- return sessionId;
1424
- } else {
1425
- const newSessionId = createSessionId();
1426
- setSessionId({
1427
- id: newSessionId,
1428
- canTrack
1429
- });
1430
- return newSessionId;
1431
- }
1432
- };
1433
- var createSessionId = () => uuid();
1434
- var setSessionId = ({
1435
- id,
1436
- canTrack
1437
- }) => setCookie({
1438
- name: SESSION_LOCAL_STORAGE_KEY,
1439
- value: id,
1440
- canTrack
1441
- });
1509
+ }
1510
+ var block_wrapper_default = BlockWrapper;
1442
1511
 
1443
- // src/helpers/localStorage.ts
1444
- var getLocalStorage = () => isBrowser() && typeof localStorage !== "undefined" ? localStorage : void 0;
1445
- var getLocalStorageItem = ({
1446
- key,
1447
- canTrack
1448
- }) => {
1449
- try {
1450
- if (canTrack) {
1451
- return getLocalStorage()?.getItem(key);
1452
- }
1453
- return void 0;
1454
- } catch (err) {
1455
- console.debug("[LocalStorage] GET error: ", err);
1456
- return void 0;
1512
+ // src/functions/is-previewing.ts
1513
+ function isPreviewing(search) {
1514
+ const searchToUse = search || (isBrowser() ? window.location.search : void 0);
1515
+ if (!searchToUse) {
1516
+ return false;
1457
1517
  }
1518
+ const normalizedSearch = getSearchString(searchToUse);
1519
+ return Boolean(normalizedSearch.indexOf("builder.preview=") !== -1);
1520
+ }
1521
+
1522
+ // src/functions/register-component.ts
1523
+ var createRegisterComponentMessage = (info) => ({
1524
+ type: "builder.registerComponent",
1525
+ data: serializeIncludingFunctions(info)
1526
+ });
1527
+ var serializeFn = (fnValue) => {
1528
+ const fnStr = fnValue.toString().trim();
1529
+ const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
1530
+ const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
1531
+ return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
1458
1532
  };
1459
- var setLocalStorageItem = ({
1460
- key,
1461
- canTrack,
1462
- value
1463
- }) => {
1464
- try {
1465
- if (canTrack) {
1466
- getLocalStorage()?.setItem(key, value);
1533
+ function serializeIncludingFunctions(info) {
1534
+ return JSON.parse(JSON.stringify(info, (key, value) => {
1535
+ if (typeof value === "function") {
1536
+ return serializeFn(value);
1467
1537
  }
1468
- } catch (err) {
1469
- console.debug("[LocalStorage] SET error: ", err);
1470
- }
1471
- };
1538
+ return value;
1539
+ }));
1540
+ }
1472
1541
 
1473
- // src/helpers/visitorId.ts
1474
- var VISITOR_LOCAL_STORAGE_KEY = "builderVisitorId";
1475
- var getVisitorId = ({
1476
- canTrack
1477
- }) => {
1478
- if (!canTrack) {
1479
- return void 0;
1542
+ // src/functions/register.ts
1543
+ var registry = {};
1544
+ function register(type, info) {
1545
+ if (type === "plugin") {
1546
+ info = serializeIncludingFunctions(info);
1480
1547
  }
1481
- const visitorId = getLocalStorageItem({
1482
- key: VISITOR_LOCAL_STORAGE_KEY,
1483
- canTrack
1484
- });
1485
- if (checkIsDefined(visitorId)) {
1486
- return visitorId;
1487
- } else {
1488
- const newVisitorId = createVisitorId();
1489
- setVisitorId({
1490
- id: newVisitorId,
1491
- canTrack
1492
- });
1493
- return newVisitorId;
1548
+ let typeList = registry[type];
1549
+ if (!typeList) {
1550
+ typeList = registry[type] = [];
1494
1551
  }
1495
- };
1496
- var createVisitorId = () => uuid();
1497
- var setVisitorId = ({
1498
- id,
1499
- canTrack
1500
- }) => setLocalStorageItem({
1501
- key: VISITOR_LOCAL_STORAGE_KEY,
1502
- value: id,
1503
- canTrack
1504
- });
1505
-
1506
- // src/functions/log-fetch.ts
1507
- function logFetch(url) {
1508
- if (typeof process !== "undefined" && process.env?.DEBUG) {
1509
- if (String(process.env.DEBUG) == "true") {
1510
- logger.log(url);
1552
+ typeList.push(info);
1553
+ if (isBrowser()) {
1554
+ const message = {
1555
+ type: "builder.register",
1556
+ data: {
1557
+ type,
1558
+ info
1559
+ }
1560
+ };
1561
+ try {
1562
+ parent.postMessage(message, "*");
1563
+ if (parent !== window) {
1564
+ window.postMessage(message, "*");
1565
+ }
1566
+ } catch (err) {
1567
+ console.debug("Could not postmessage", err);
1568
+ }
1569
+ }
1570
+ }
1571
+ function registerAction(action) {
1572
+ if (isBrowser()) {
1573
+ const actionClone = JSON.parse(JSON.stringify(action));
1574
+ if (action.action) {
1575
+ actionClone.action = action.action.toString();
1511
1576
  }
1577
+ window.parent?.postMessage({
1578
+ type: "builder.registerAction",
1579
+ data: actionClone
1580
+ }, "*");
1512
1581
  }
1513
1582
  }
1514
1583
 
1515
- // src/functions/track/index.ts
1516
- var getTrackingEventData = async ({
1517
- canTrack
1518
- }) => {
1519
- if (!canTrack) {
1520
- return {
1521
- visitorId: void 0,
1522
- sessionId: void 0
1584
+ // src/functions/set-editor-settings.ts
1585
+ var settings = {};
1586
+ function setEditorSettings(newSettings) {
1587
+ if (isBrowser()) {
1588
+ Object.assign(settings, newSettings);
1589
+ const message = {
1590
+ type: "builder.settingsChange",
1591
+ data: settings
1523
1592
  };
1593
+ parent.postMessage(message, "*");
1524
1594
  }
1525
- const sessionId = await getSessionId({
1526
- canTrack
1527
- });
1528
- const visitorId = getVisitorId({
1529
- canTrack
1595
+ }
1596
+
1597
+ // src/functions/get-builder-search-params/index.ts
1598
+ var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
1599
+ var BUILDER_OPTIONS_PREFIX = "options.";
1600
+ var getBuilderSearchParams = (_options) => {
1601
+ if (!_options) {
1602
+ return {};
1603
+ }
1604
+ const options = normalizeSearchParams(_options);
1605
+ const newOptions = {};
1606
+ Object.keys(options).forEach((key) => {
1607
+ if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
1608
+ const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
1609
+ newOptions[trimmedKey] = options[key];
1610
+ }
1530
1611
  });
1531
- return {
1532
- sessionId,
1533
- visitorId
1534
- };
1612
+ return newOptions;
1535
1613
  };
1536
- var createEvent = async ({
1537
- type: eventType,
1538
- canTrack,
1539
- apiKey,
1540
- metadata,
1541
- ...properties
1542
- }) => ({
1543
- type: eventType,
1544
- data: {
1545
- ...properties,
1546
- metadata: {
1547
- url: location.href,
1548
- ...metadata
1549
- },
1550
- ...await getTrackingEventData({
1551
- canTrack
1552
- }),
1553
- userAttributes: getUserAttributes(),
1554
- ownerId: apiKey
1555
- }
1556
- });
1557
- async function _track({
1558
- apiHost,
1559
- ...eventProps
1560
- }) {
1561
- if (!eventProps.apiKey) {
1562
- logger.error("Missing API key for track call. Please provide your API key.");
1563
- return;
1564
- }
1565
- if (!eventProps.canTrack) {
1566
- return;
1567
- }
1568
- if (isEditing()) {
1569
- return;
1570
- }
1571
- if (!(isBrowser() || TARGET === "reactNative")) {
1572
- return;
1614
+ var getBuilderSearchParamsFromWindow = () => {
1615
+ if (!isBrowser()) {
1616
+ return {};
1573
1617
  }
1574
- const baseUrl = apiHost || "https://cdn.builder.io";
1575
- const url = `${baseUrl}/api/v1/track`;
1576
- logFetch(url);
1577
- return fetch(url, {
1578
- method: "POST",
1579
- body: JSON.stringify({
1580
- events: [await createEvent(eventProps)]
1581
- }),
1582
- headers: {
1583
- "content-type": "application/json",
1584
- ...getSdkHeaders()
1585
- },
1586
- mode: "cors"
1587
- }).catch((err) => {
1588
- console.error("Failed to track: ", err);
1589
- });
1590
- }
1591
- var track = (args) => _track({
1592
- ...args,
1593
- canTrack: true
1594
- });
1618
+ const searchParams = new URLSearchParams(window.location.search);
1619
+ return getBuilderSearchParams(searchParams);
1620
+ };
1595
1621
 
1596
1622
  // src/functions/is-from-trusted-host.ts
1597
1623
  var DEFAULT_TRUSTED_HOSTS = ["*.beta.builder.io", "beta.builder.io", "builder.io", "localhost", "qa.builder.io"];
@@ -2334,7 +2360,13 @@ function InteractiveElement(props) {
2334
2360
  rootState: props.context.rootState,
2335
2361
  rootSetState: props.context.rootSetState,
2336
2362
  localState: props.context.localState,
2337
- context: props.context.context
2363
+ context: props.context.context,
2364
+ trackingContext: {
2365
+ apiKey: props.context.apiKey,
2366
+ canTrack: props.context.canTrack ?? true,
2367
+ contentId: props.context.content?.id,
2368
+ variationId: props.context.content?.testVariationId
2369
+ }
2338
2370
  })
2339
2371
  } : {};
2340
2372
  });