@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.
package/lib/edge/dev.js CHANGED
@@ -221,6 +221,279 @@ var getUserAttributes = () => {
221
221
  };
222
222
  };
223
223
 
224
+ // src/constants/sdk-version.ts
225
+ var SDK_VERSION = "5.1.1";
226
+
227
+ // src/helpers/sdk-headers.ts
228
+ var getSdkHeaders = () => ({
229
+ "X-Builder-SDK": TARGET,
230
+ "X-Builder-SDK-GEN": "2",
231
+ "X-Builder-SDK-Version": SDK_VERSION
232
+ });
233
+
234
+ // src/helpers/nullable.ts
235
+ var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
236
+
237
+ // src/helpers/url.ts
238
+ var getTopLevelDomain = (host) => {
239
+ if (host === "localhost" || host === "127.0.0.1") {
240
+ return host;
241
+ }
242
+ const parts = host.split(".");
243
+ if (parts.length > 2) {
244
+ return parts.slice(1).join(".");
245
+ }
246
+ return host;
247
+ };
248
+
249
+ // src/helpers/cookie.ts
250
+ var getCookieSync = ({
251
+ name,
252
+ canTrack
253
+ }) => {
254
+ try {
255
+ if (!canTrack) {
256
+ return void 0;
257
+ }
258
+ return document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))?.split("=")[1];
259
+ } catch (err) {
260
+ logger.warn("[COOKIE] GET error: ", err?.message || err);
261
+ return void 0;
262
+ }
263
+ };
264
+ var getCookie = async (args) => getCookieSync(args);
265
+ var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
266
+ var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
267
+ var createCookieString = ({
268
+ name,
269
+ value,
270
+ expires
271
+ }) => {
272
+ const secure = isBrowser() ? location.protocol === "https:" : true;
273
+ const secureObj = secure ? SECURE_CONFIG : [[]];
274
+ const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
275
+ const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
276
+ const cookie = stringifyCookie(cookieValue);
277
+ return cookie;
278
+ };
279
+ var setCookie = async ({
280
+ name,
281
+ value,
282
+ expires,
283
+ canTrack
284
+ }) => {
285
+ try {
286
+ if (!canTrack) {
287
+ return;
288
+ }
289
+ const cookie = createCookieString({
290
+ name,
291
+ value,
292
+ expires
293
+ });
294
+ document.cookie = cookie;
295
+ } catch (err) {
296
+ logger.warn("[COOKIE] SET error: ", err?.message || err);
297
+ }
298
+ };
299
+
300
+ // src/helpers/uuid.ts
301
+ function uuidv4() {
302
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
303
+ const r = Math.random() * 16 | 0, v2 = c == "x" ? r : r & 3 | 8;
304
+ return v2.toString(16);
305
+ });
306
+ }
307
+ function uuid() {
308
+ return uuidv4().replace(/-/g, "");
309
+ }
310
+
311
+ // src/helpers/sessionId.ts
312
+ var SESSION_LOCAL_STORAGE_KEY = "builderSessionId";
313
+ var getSessionId = async ({
314
+ canTrack
315
+ }) => {
316
+ if (!canTrack) {
317
+ return void 0;
318
+ }
319
+ const sessionId = await getCookie({
320
+ name: SESSION_LOCAL_STORAGE_KEY,
321
+ canTrack
322
+ });
323
+ if (checkIsDefined(sessionId)) {
324
+ return sessionId;
325
+ } else {
326
+ const newSessionId = createSessionId();
327
+ setSessionId({
328
+ id: newSessionId,
329
+ canTrack
330
+ });
331
+ return newSessionId;
332
+ }
333
+ };
334
+ var createSessionId = () => uuid();
335
+ var setSessionId = ({
336
+ id: id2,
337
+ canTrack
338
+ }) => setCookie({
339
+ name: SESSION_LOCAL_STORAGE_KEY,
340
+ value: id2,
341
+ canTrack
342
+ });
343
+
344
+ // src/helpers/localStorage.ts
345
+ var getLocalStorage = () => isBrowser() && typeof localStorage !== "undefined" ? localStorage : void 0;
346
+ var getLocalStorageItem = ({
347
+ key,
348
+ canTrack
349
+ }) => {
350
+ try {
351
+ if (canTrack) {
352
+ return getLocalStorage()?.getItem(key);
353
+ }
354
+ return void 0;
355
+ } catch (err) {
356
+ console.debug("[LocalStorage] GET error: ", err);
357
+ return void 0;
358
+ }
359
+ };
360
+ var setLocalStorageItem = ({
361
+ key,
362
+ canTrack,
363
+ value
364
+ }) => {
365
+ try {
366
+ if (canTrack) {
367
+ getLocalStorage()?.setItem(key, value);
368
+ }
369
+ } catch (err) {
370
+ console.debug("[LocalStorage] SET error: ", err);
371
+ }
372
+ };
373
+
374
+ // src/helpers/visitorId.ts
375
+ var VISITOR_LOCAL_STORAGE_KEY = "builderVisitorId";
376
+ var getVisitorId = ({
377
+ canTrack
378
+ }) => {
379
+ if (!canTrack) {
380
+ return void 0;
381
+ }
382
+ const visitorId = getLocalStorageItem({
383
+ key: VISITOR_LOCAL_STORAGE_KEY,
384
+ canTrack
385
+ });
386
+ if (checkIsDefined(visitorId)) {
387
+ return visitorId;
388
+ } else {
389
+ const newVisitorId = createVisitorId();
390
+ setVisitorId({
391
+ id: newVisitorId,
392
+ canTrack
393
+ });
394
+ return newVisitorId;
395
+ }
396
+ };
397
+ var createVisitorId = () => uuid();
398
+ var setVisitorId = ({
399
+ id: id2,
400
+ canTrack
401
+ }) => setLocalStorageItem({
402
+ key: VISITOR_LOCAL_STORAGE_KEY,
403
+ value: id2,
404
+ canTrack
405
+ });
406
+
407
+ // src/functions/log-fetch.ts
408
+ function logFetch(url) {
409
+ if (typeof process !== "undefined" && process.env?.DEBUG) {
410
+ if (String(process.env.DEBUG) == "true") {
411
+ logger.log(url);
412
+ }
413
+ }
414
+ }
415
+
416
+ // src/functions/track/index.ts
417
+ var getTrackingEventData = async ({
418
+ canTrack
419
+ }) => {
420
+ if (!canTrack) {
421
+ return {
422
+ visitorId: void 0,
423
+ sessionId: void 0
424
+ };
425
+ }
426
+ const sessionId = await getSessionId({
427
+ canTrack
428
+ });
429
+ const visitorId = getVisitorId({
430
+ canTrack
431
+ });
432
+ return {
433
+ sessionId,
434
+ visitorId
435
+ };
436
+ };
437
+ var createEvent = async ({
438
+ type: eventType,
439
+ canTrack,
440
+ apiKey,
441
+ metadata,
442
+ ...properties
443
+ }) => ({
444
+ type: eventType,
445
+ data: {
446
+ ...properties,
447
+ metadata: {
448
+ url: location.href,
449
+ ...metadata
450
+ },
451
+ ...await getTrackingEventData({
452
+ canTrack
453
+ }),
454
+ userAttributes: getUserAttributes(),
455
+ ownerId: apiKey
456
+ }
457
+ });
458
+ async function _track({
459
+ apiHost,
460
+ ...eventProps
461
+ }) {
462
+ if (!eventProps.apiKey) {
463
+ logger.error("Missing API key for track call. Please provide your API key.");
464
+ return;
465
+ }
466
+ if (!eventProps.canTrack) {
467
+ return;
468
+ }
469
+ if (isEditing()) {
470
+ return;
471
+ }
472
+ if (!(isBrowser() || TARGET === "reactNative")) {
473
+ return;
474
+ }
475
+ const baseUrl = apiHost || "https://cdn.builder.io";
476
+ const url = `${baseUrl}/api/v1/track`;
477
+ logFetch(url);
478
+ return fetch(url, {
479
+ method: "POST",
480
+ body: JSON.stringify({
481
+ events: [await createEvent(eventProps)]
482
+ }),
483
+ headers: {
484
+ "content-type": "application/json",
485
+ ...getSdkHeaders()
486
+ },
487
+ mode: "cors"
488
+ }).catch((err) => {
489
+ console.error("Failed to track: ", err);
490
+ });
491
+ }
492
+ var track = (args) => _track({
493
+ ...args,
494
+ canTrack: true
495
+ });
496
+
224
497
  // src/functions/evaluate/helpers.ts
225
498
  var getFunctionArguments = ({
226
499
  builder,
@@ -237,11 +510,29 @@ var getFunctionArguments = ({
237
510
  event
238
511
  });
239
512
  };
240
- var getBuilderGlobals = () => ({
513
+ var getBuilderGlobals = (trackingContext) => ({
241
514
  isEditing: isEditing(),
242
515
  isBrowser: isBrowser(),
243
516
  isServer: !isBrowser(),
244
- getUserAttributes: () => getUserAttributes()
517
+ getUserAttributes: () => getUserAttributes(),
518
+ trackConversion: (amount, customProperties) => {
519
+ if (!trackingContext?.apiKey || trackingContext?.canTrack === false) {
520
+ return;
521
+ }
522
+ _track({
523
+ type: "conversion",
524
+ apiKey: trackingContext.apiKey,
525
+ canTrack: trackingContext.canTrack ?? true,
526
+ contentId: trackingContext.contentId,
527
+ variationId: trackingContext.variationId !== trackingContext.contentId ? trackingContext.variationId : void 0,
528
+ metadata: {
529
+ ...customProperties || {},
530
+ ...amount !== void 0 ? {
531
+ amount
532
+ } : {}
533
+ }
534
+ });
535
+ }
245
536
  });
246
537
  var parseCode = (code, {
247
538
  isExpression = true
@@ -3485,9 +3776,6 @@ theFunction();
3485
3776
  return output;
3486
3777
  };
3487
3778
 
3488
- // src/helpers/nullable.ts
3489
- var checkIsDefined = (maybeT) => maybeT !== null && maybeT !== void 0;
3490
-
3491
3779
  // src/functions/is-node-runtime.ts
3492
3780
  function isNodeRuntime() {
3493
3781
  return typeof process !== "undefined" && checkIsDefined(process?.versions?.node);
@@ -3532,7 +3820,8 @@ function evaluate({
3532
3820
  rootState,
3533
3821
  rootSetState,
3534
3822
  event,
3535
- isExpression = true
3823
+ isExpression = true,
3824
+ trackingContext
3536
3825
  }) {
3537
3826
  if (code.trim() === "") {
3538
3827
  return void 0;
@@ -3548,7 +3837,7 @@ function evaluate({
3548
3837
  code: parseCode(code, {
3549
3838
  isExpression
3550
3839
  }),
3551
- builder: getBuilderGlobals(),
3840
+ builder: getBuilderGlobals(trackingContext),
3552
3841
  context,
3553
3842
  event,
3554
3843
  rootSetState,
@@ -4136,7 +4425,8 @@ var createEventHandler = (value, options) => (event) => evaluate({
4136
4425
  rootState: options.rootState,
4137
4426
  rootSetState: options.rootSetState,
4138
4427
  event,
4139
- isExpression: false
4428
+ isExpression: false,
4429
+ trackingContext: options.trackingContext
4140
4430
  });
4141
4431
 
4142
4432
  // src/functions/get-block-actions.ts
@@ -4217,395 +4507,131 @@ function BlockWrapper(props) {
4217
4507
  rootSetState: props.context.rootSetState,
4218
4508
  localState: props.context.localState,
4219
4509
  context: props.context.context,
4220
- stripPrefix: true
4510
+ stripPrefix: true,
4511
+ trackingContext: {
4512
+ apiKey: props.context.apiKey,
4513
+ canTrack: props.context.canTrack ?? true,
4514
+ contentId: props.context.content?.id,
4515
+ variationId: props.context.content?.testVariationId
4516
+ }
4221
4517
  });
4222
4518
  },
4223
4519
  get children() {
4224
4520
  return props.children;
4225
- }
4226
- });
4227
- }
4228
- var block_wrapper_default = BlockWrapper;
4229
-
4230
- // src/functions/is-previewing.ts
4231
- function isPreviewing(search) {
4232
- const searchToUse = search || (isBrowser() ? window.location.search : void 0);
4233
- if (!searchToUse) {
4234
- return false;
4235
- }
4236
- const normalizedSearch = getSearchString(searchToUse);
4237
- return Boolean(normalizedSearch.indexOf("builder.preview=") !== -1);
4238
- }
4239
-
4240
- // src/functions/register-component.ts
4241
- var createRegisterComponentMessage = (info) => ({
4242
- type: "builder.registerComponent",
4243
- data: serializeIncludingFunctions(info)
4244
- });
4245
- var serializeFn = (fnValue) => {
4246
- const fnStr = fnValue.toString().trim();
4247
- const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
4248
- const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
4249
- return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
4250
- };
4251
- function serializeIncludingFunctions(info) {
4252
- return JSON.parse(JSON.stringify(info, (key, value) => {
4253
- if (typeof value === "function") {
4254
- return serializeFn(value);
4255
- }
4256
- return value;
4257
- }));
4258
- }
4259
-
4260
- // src/functions/register.ts
4261
- var registry = {};
4262
- function register(type, info) {
4263
- if (type === "plugin") {
4264
- info = serializeIncludingFunctions(info);
4265
- }
4266
- let typeList = registry[type];
4267
- if (!typeList) {
4268
- typeList = registry[type] = [];
4269
- }
4270
- typeList.push(info);
4271
- if (isBrowser()) {
4272
- const message = {
4273
- type: "builder.register",
4274
- data: {
4275
- type,
4276
- info
4277
- }
4278
- };
4279
- try {
4280
- parent.postMessage(message, "*");
4281
- if (parent !== window) {
4282
- window.postMessage(message, "*");
4283
- }
4284
- } catch (err) {
4285
- console.debug("Could not postmessage", err);
4286
- }
4287
- }
4288
- }
4289
- function registerAction(action) {
4290
- if (isBrowser()) {
4291
- const actionClone = JSON.parse(JSON.stringify(action));
4292
- if (action.action) {
4293
- actionClone.action = action.action.toString();
4294
- }
4295
- window.parent?.postMessage({
4296
- type: "builder.registerAction",
4297
- data: actionClone
4298
- }, "*");
4299
- }
4300
- }
4301
-
4302
- // src/functions/set-editor-settings.ts
4303
- var settings = {};
4304
- function setEditorSettings(newSettings) {
4305
- if (isBrowser()) {
4306
- Object.assign(settings, newSettings);
4307
- const message = {
4308
- type: "builder.settingsChange",
4309
- data: settings
4310
- };
4311
- parent.postMessage(message, "*");
4312
- }
4313
- }
4314
-
4315
- // src/functions/get-builder-search-params/index.ts
4316
- var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
4317
- var BUILDER_OPTIONS_PREFIX = "options.";
4318
- var getBuilderSearchParams = (_options) => {
4319
- if (!_options) {
4320
- return {};
4321
- }
4322
- const options = normalizeSearchParams(_options);
4323
- const newOptions = {};
4324
- Object.keys(options).forEach((key) => {
4325
- if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
4326
- const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
4327
- newOptions[trimmedKey] = options[key];
4328
- }
4329
- });
4330
- return newOptions;
4331
- };
4332
- var getBuilderSearchParamsFromWindow = () => {
4333
- if (!isBrowser()) {
4334
- return {};
4335
- }
4336
- const searchParams = new URLSearchParams(window.location.search);
4337
- return getBuilderSearchParams(searchParams);
4338
- };
4339
-
4340
- // src/constants/sdk-version.ts
4341
- var SDK_VERSION = "5.0.1";
4342
-
4343
- // src/helpers/sdk-headers.ts
4344
- var getSdkHeaders = () => ({
4345
- "X-Builder-SDK": TARGET,
4346
- "X-Builder-SDK-GEN": "2",
4347
- "X-Builder-SDK-Version": SDK_VERSION
4348
- });
4349
-
4350
- // src/helpers/url.ts
4351
- var getTopLevelDomain = (host) => {
4352
- if (host === "localhost" || host === "127.0.0.1") {
4353
- return host;
4354
- }
4355
- const parts = host.split(".");
4356
- if (parts.length > 2) {
4357
- return parts.slice(1).join(".");
4358
- }
4359
- return host;
4360
- };
4361
-
4362
- // src/helpers/cookie.ts
4363
- var getCookieSync = ({
4364
- name,
4365
- canTrack
4366
- }) => {
4367
- try {
4368
- if (!canTrack) {
4369
- return void 0;
4370
- }
4371
- return document.cookie.split("; ").find((row) => row.startsWith(`${name}=`))?.split("=")[1];
4372
- } catch (err) {
4373
- logger.warn("[COOKIE] GET error: ", err?.message || err);
4374
- return void 0;
4375
- }
4376
- };
4377
- var getCookie = async (args) => getCookieSync(args);
4378
- var stringifyCookie = (cookie) => cookie.map(([key, value]) => value ? `${key}=${value}` : key).filter(checkIsDefined).join("; ");
4379
- var SECURE_CONFIG = [["secure", ""], ["SameSite", "None"]];
4380
- var createCookieString = ({
4381
- name,
4382
- value,
4383
- expires
4384
- }) => {
4385
- const secure = isBrowser() ? location.protocol === "https:" : true;
4386
- const secureObj = secure ? SECURE_CONFIG : [[]];
4387
- const expiresObj = expires ? [["expires", expires.toUTCString()]] : [[]];
4388
- const cookieValue = [[name, value], ...expiresObj, ["path", "/"], ["domain", getTopLevelDomain(window.location.hostname)], ...secureObj];
4389
- const cookie = stringifyCookie(cookieValue);
4390
- return cookie;
4391
- };
4392
- var setCookie = async ({
4393
- name,
4394
- value,
4395
- expires,
4396
- canTrack
4397
- }) => {
4398
- try {
4399
- if (!canTrack) {
4400
- return;
4401
- }
4402
- const cookie = createCookieString({
4403
- name,
4404
- value,
4405
- expires
4406
- });
4407
- document.cookie = cookie;
4408
- } catch (err) {
4409
- logger.warn("[COOKIE] SET error: ", err?.message || err);
4410
- }
4411
- };
4412
-
4413
- // src/helpers/uuid.ts
4414
- function uuidv4() {
4415
- return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
4416
- const r = Math.random() * 16 | 0, v2 = c == "x" ? r : r & 3 | 8;
4417
- return v2.toString(16);
4418
- });
4419
- }
4420
- function uuid() {
4421
- return uuidv4().replace(/-/g, "");
4422
- }
4423
-
4424
- // src/helpers/sessionId.ts
4425
- var SESSION_LOCAL_STORAGE_KEY = "builderSessionId";
4426
- var getSessionId = async ({
4427
- canTrack
4428
- }) => {
4429
- if (!canTrack) {
4430
- return void 0;
4431
- }
4432
- const sessionId = await getCookie({
4433
- name: SESSION_LOCAL_STORAGE_KEY,
4434
- canTrack
4521
+ }
4435
4522
  });
4436
- if (checkIsDefined(sessionId)) {
4437
- return sessionId;
4438
- } else {
4439
- const newSessionId = createSessionId();
4440
- setSessionId({
4441
- id: newSessionId,
4442
- canTrack
4443
- });
4444
- return newSessionId;
4445
- }
4446
- };
4447
- var createSessionId = () => uuid();
4448
- var setSessionId = ({
4449
- id: id2,
4450
- canTrack
4451
- }) => setCookie({
4452
- name: SESSION_LOCAL_STORAGE_KEY,
4453
- value: id2,
4454
- canTrack
4455
- });
4523
+ }
4524
+ var block_wrapper_default = BlockWrapper;
4456
4525
 
4457
- // src/helpers/localStorage.ts
4458
- var getLocalStorage = () => isBrowser() && typeof localStorage !== "undefined" ? localStorage : void 0;
4459
- var getLocalStorageItem = ({
4460
- key,
4461
- canTrack
4462
- }) => {
4463
- try {
4464
- if (canTrack) {
4465
- return getLocalStorage()?.getItem(key);
4466
- }
4467
- return void 0;
4468
- } catch (err) {
4469
- console.debug("[LocalStorage] GET error: ", err);
4470
- return void 0;
4526
+ // src/functions/is-previewing.ts
4527
+ function isPreviewing(search) {
4528
+ const searchToUse = search || (isBrowser() ? window.location.search : void 0);
4529
+ if (!searchToUse) {
4530
+ return false;
4471
4531
  }
4532
+ const normalizedSearch = getSearchString(searchToUse);
4533
+ return Boolean(normalizedSearch.indexOf("builder.preview=") !== -1);
4534
+ }
4535
+
4536
+ // src/functions/register-component.ts
4537
+ var createRegisterComponentMessage = (info) => ({
4538
+ type: "builder.registerComponent",
4539
+ data: serializeIncludingFunctions(info)
4540
+ });
4541
+ var serializeFn = (fnValue) => {
4542
+ const fnStr = fnValue.toString().trim();
4543
+ const isArrowWithoutParens = /^[a-zA-Z0-9_]+\s*=>/i.test(fnStr);
4544
+ const appendFunction = !fnStr.startsWith("function") && !fnStr.startsWith("async") && !fnStr.startsWith("(") && !isArrowWithoutParens;
4545
+ return `return (${appendFunction ? "function " : ""}${fnStr}).apply(this, arguments)`;
4472
4546
  };
4473
- var setLocalStorageItem = ({
4474
- key,
4475
- canTrack,
4476
- value
4477
- }) => {
4478
- try {
4479
- if (canTrack) {
4480
- getLocalStorage()?.setItem(key, value);
4547
+ function serializeIncludingFunctions(info) {
4548
+ return JSON.parse(JSON.stringify(info, (key, value) => {
4549
+ if (typeof value === "function") {
4550
+ return serializeFn(value);
4481
4551
  }
4482
- } catch (err) {
4483
- console.debug("[LocalStorage] SET error: ", err);
4484
- }
4485
- };
4552
+ return value;
4553
+ }));
4554
+ }
4486
4555
 
4487
- // src/helpers/visitorId.ts
4488
- var VISITOR_LOCAL_STORAGE_KEY = "builderVisitorId";
4489
- var getVisitorId = ({
4490
- canTrack
4491
- }) => {
4492
- if (!canTrack) {
4493
- return void 0;
4556
+ // src/functions/register.ts
4557
+ var registry = {};
4558
+ function register(type, info) {
4559
+ if (type === "plugin") {
4560
+ info = serializeIncludingFunctions(info);
4494
4561
  }
4495
- const visitorId = getLocalStorageItem({
4496
- key: VISITOR_LOCAL_STORAGE_KEY,
4497
- canTrack
4498
- });
4499
- if (checkIsDefined(visitorId)) {
4500
- return visitorId;
4501
- } else {
4502
- const newVisitorId = createVisitorId();
4503
- setVisitorId({
4504
- id: newVisitorId,
4505
- canTrack
4506
- });
4507
- return newVisitorId;
4562
+ let typeList = registry[type];
4563
+ if (!typeList) {
4564
+ typeList = registry[type] = [];
4508
4565
  }
4509
- };
4510
- var createVisitorId = () => uuid();
4511
- var setVisitorId = ({
4512
- id: id2,
4513
- canTrack
4514
- }) => setLocalStorageItem({
4515
- key: VISITOR_LOCAL_STORAGE_KEY,
4516
- value: id2,
4517
- canTrack
4518
- });
4519
-
4520
- // src/functions/log-fetch.ts
4521
- function logFetch(url) {
4522
- if (typeof process !== "undefined" && process.env?.DEBUG) {
4523
- if (String(process.env.DEBUG) == "true") {
4524
- logger.log(url);
4566
+ typeList.push(info);
4567
+ if (isBrowser()) {
4568
+ const message = {
4569
+ type: "builder.register",
4570
+ data: {
4571
+ type,
4572
+ info
4573
+ }
4574
+ };
4575
+ try {
4576
+ parent.postMessage(message, "*");
4577
+ if (parent !== window) {
4578
+ window.postMessage(message, "*");
4579
+ }
4580
+ } catch (err) {
4581
+ console.debug("Could not postmessage", err);
4582
+ }
4583
+ }
4584
+ }
4585
+ function registerAction(action) {
4586
+ if (isBrowser()) {
4587
+ const actionClone = JSON.parse(JSON.stringify(action));
4588
+ if (action.action) {
4589
+ actionClone.action = action.action.toString();
4525
4590
  }
4591
+ window.parent?.postMessage({
4592
+ type: "builder.registerAction",
4593
+ data: actionClone
4594
+ }, "*");
4526
4595
  }
4527
4596
  }
4528
4597
 
4529
- // src/functions/track/index.ts
4530
- var getTrackingEventData = async ({
4531
- canTrack
4532
- }) => {
4533
- if (!canTrack) {
4534
- return {
4535
- visitorId: void 0,
4536
- sessionId: void 0
4598
+ // src/functions/set-editor-settings.ts
4599
+ var settings = {};
4600
+ function setEditorSettings(newSettings) {
4601
+ if (isBrowser()) {
4602
+ Object.assign(settings, newSettings);
4603
+ const message = {
4604
+ type: "builder.settingsChange",
4605
+ data: settings
4537
4606
  };
4607
+ parent.postMessage(message, "*");
4538
4608
  }
4539
- const sessionId = await getSessionId({
4540
- canTrack
4541
- });
4542
- const visitorId = getVisitorId({
4543
- canTrack
4609
+ }
4610
+
4611
+ // src/functions/get-builder-search-params/index.ts
4612
+ var BUILDER_SEARCHPARAMS_PREFIX = "builder.";
4613
+ var BUILDER_OPTIONS_PREFIX = "options.";
4614
+ var getBuilderSearchParams = (_options) => {
4615
+ if (!_options) {
4616
+ return {};
4617
+ }
4618
+ const options = normalizeSearchParams(_options);
4619
+ const newOptions = {};
4620
+ Object.keys(options).forEach((key) => {
4621
+ if (key.startsWith(BUILDER_SEARCHPARAMS_PREFIX)) {
4622
+ const trimmedKey = key.replace(BUILDER_SEARCHPARAMS_PREFIX, "").replace(BUILDER_OPTIONS_PREFIX, "");
4623
+ newOptions[trimmedKey] = options[key];
4624
+ }
4544
4625
  });
4545
- return {
4546
- sessionId,
4547
- visitorId
4548
- };
4626
+ return newOptions;
4549
4627
  };
4550
- var createEvent = async ({
4551
- type: eventType,
4552
- canTrack,
4553
- apiKey,
4554
- metadata,
4555
- ...properties
4556
- }) => ({
4557
- type: eventType,
4558
- data: {
4559
- ...properties,
4560
- metadata: {
4561
- url: location.href,
4562
- ...metadata
4563
- },
4564
- ...await getTrackingEventData({
4565
- canTrack
4566
- }),
4567
- userAttributes: getUserAttributes(),
4568
- ownerId: apiKey
4569
- }
4570
- });
4571
- async function _track({
4572
- apiHost,
4573
- ...eventProps
4574
- }) {
4575
- if (!eventProps.apiKey) {
4576
- logger.error("Missing API key for track call. Please provide your API key.");
4577
- return;
4578
- }
4579
- if (!eventProps.canTrack) {
4580
- return;
4581
- }
4582
- if (isEditing()) {
4583
- return;
4584
- }
4585
- if (!(isBrowser() || TARGET === "reactNative")) {
4586
- return;
4628
+ var getBuilderSearchParamsFromWindow = () => {
4629
+ if (!isBrowser()) {
4630
+ return {};
4587
4631
  }
4588
- const baseUrl = apiHost || "https://cdn.builder.io";
4589
- const url = `${baseUrl}/api/v1/track`;
4590
- logFetch(url);
4591
- return fetch(url, {
4592
- method: "POST",
4593
- body: JSON.stringify({
4594
- events: [await createEvent(eventProps)]
4595
- }),
4596
- headers: {
4597
- "content-type": "application/json",
4598
- ...getSdkHeaders()
4599
- },
4600
- mode: "cors"
4601
- }).catch((err) => {
4602
- console.error("Failed to track: ", err);
4603
- });
4604
- }
4605
- var track = (args) => _track({
4606
- ...args,
4607
- canTrack: true
4608
- });
4632
+ const searchParams = new URLSearchParams(window.location.search);
4633
+ return getBuilderSearchParams(searchParams);
4634
+ };
4609
4635
 
4610
4636
  // src/functions/is-from-trusted-host.ts
4611
4637
  var DEFAULT_TRUSTED_HOSTS = ["*.beta.builder.io", "beta.builder.io", "builder.io", "localhost", "qa.builder.io"];
@@ -5348,7 +5374,13 @@ function InteractiveElement(props) {
5348
5374
  rootState: props.context.rootState,
5349
5375
  rootSetState: props.context.rootSetState,
5350
5376
  localState: props.context.localState,
5351
- context: props.context.context
5377
+ context: props.context.context,
5378
+ trackingContext: {
5379
+ apiKey: props.context.apiKey,
5380
+ canTrack: props.context.canTrack ?? true,
5381
+ contentId: props.context.content?.id,
5382
+ variationId: props.context.content?.testVariationId
5383
+ }
5352
5384
  })
5353
5385
  } : {};
5354
5386
  });