@builder.io/sdk 3.0.6 → 3.0.8

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/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @builder.io/sdk
2
2
 
3
+ ## 3.0.8
4
+
5
+ ### Patch Changes
6
+
7
+ - af26e42: Fix: Restrict event listening to when `isEditing === true`
8
+ - 00d8154: Fix: increase coverage of `trustedHost` check to all messages.
9
+
10
+ ## 3.0.7
11
+
12
+ ### Patch Changes
13
+
14
+ - bfe9d7e: Misc: send SDK headers in API requests ( https://github.com/BuilderIO/builder/pull/3659 )
15
+
3
16
  ## 3.0.6
4
17
 
5
18
  ### Patch Changes
@@ -1052,7 +1052,7 @@
1052
1052
 
1053
1053
  var DEFAULT_API_VERSION = 'v3';
1054
1054
 
1055
- var SDK_VERSION = '3.0.6';
1055
+ var SDK_VERSION = 'UNKNOWN_VERSION_TO_REPLACE';
1056
1056
 
1057
1057
  function datePlusMinutes(minutes) {
1058
1058
  if (minutes === void 0) { minutes = 30; }
@@ -1247,8 +1247,8 @@
1247
1247
  this.authToken = authToken;
1248
1248
  }
1249
1249
  if (isBrowser) {
1250
- this.bindMessageListeners();
1251
1250
  if (Builder.isEditing) {
1251
+ this.bindMessageListeners();
1252
1252
  parent.postMessage({
1253
1253
  type: 'builder.animatorOptions',
1254
1254
  data: {
@@ -1379,11 +1379,16 @@
1379
1379
  this.serverContext = context;
1380
1380
  };
1381
1381
  Builder.isTrustedHost = function (hostname) {
1382
- return (this.trustedHosts.findIndex(function (trustedHost) {
1382
+ var isTrusted = this.trustedHosts.findIndex(function (trustedHost) {
1383
1383
  return trustedHost.startsWith('*.')
1384
1384
  ? hostname.endsWith(trustedHost.slice(1))
1385
1385
  : trustedHost === hostname;
1386
- }) > -1);
1386
+ }) > -1;
1387
+ return isTrusted;
1388
+ };
1389
+ Builder.isTrustedHostForEvent = function (event) {
1390
+ var url = parse(event.origin);
1391
+ return url.hostname && Builder.isTrustedHost(url.hostname);
1387
1392
  };
1388
1393
  Builder.runAction = function (action) {
1389
1394
  // TODO
@@ -1542,9 +1547,7 @@
1542
1547
  getFetch()("".concat(host, "/api/v1/track"), {
1543
1548
  method: 'POST',
1544
1549
  body: JSON.stringify({ events: events }),
1545
- headers: {
1546
- 'content-type': 'application/json',
1547
- },
1550
+ headers: __assign({ 'content-type': 'application/json' }, this.getSdkHeaders()),
1548
1551
  mode: 'cors',
1549
1552
  }).catch(function () {
1550
1553
  // Not the end of the world
@@ -1933,184 +1936,179 @@
1933
1936
  };
1934
1937
  Builder.prototype.bindMessageListeners = function () {
1935
1938
  var _this = this;
1936
- if (isBrowser) {
1937
- addEventListener('message', function (event) {
1938
- var _a, _b, _c, _d, _e;
1939
- var url = parse(event.origin);
1940
- var isRestricted = ['builder.register', 'builder.registerComponent'].indexOf((_a = event.data) === null || _a === void 0 ? void 0 : _a.type) === -1;
1941
- var isTrusted = url.hostname && Builder.isTrustedHost(url.hostname);
1942
- if (isRestricted && !isTrusted) {
1943
- return;
1944
- }
1945
- var data = event.data;
1946
- if (data) {
1947
- switch (data.type) {
1948
- case 'builder.ping': {
1949
- (_b = window.parent) === null || _b === void 0 ? void 0 : _b.postMessage({
1950
- type: 'builder.pong',
1951
- data: {},
1952
- }, '*');
1939
+ addEventListener('message', function (event) {
1940
+ var _a, _b, _c, _d;
1941
+ var isTrusted = Builder.isTrustedHostForEvent(event);
1942
+ if (!isTrusted)
1943
+ return;
1944
+ var data = event.data;
1945
+ if (data) {
1946
+ switch (data.type) {
1947
+ case 'builder.ping': {
1948
+ (_a = window.parent) === null || _a === void 0 ? void 0 : _a.postMessage({
1949
+ type: 'builder.pong',
1950
+ data: {},
1951
+ }, '*');
1952
+ break;
1953
+ }
1954
+ case 'builder.register': {
1955
+ // TODO: possibly do this for all...
1956
+ if (event.source === window) {
1953
1957
  break;
1954
1958
  }
1955
- case 'builder.register': {
1956
- // TODO: possibly do this for all...
1957
- if (event.source === window) {
1958
- break;
1959
- }
1960
- var options = data.data;
1961
- if (!options) {
1962
- break;
1963
- }
1964
- var type = options.type, info = options.info;
1965
- // TODO: all must have name and can't conflict?
1966
- var typeList = Builder.registry[type];
1967
- if (!typeList) {
1968
- typeList = Builder.registry[type] = [];
1969
- }
1970
- typeList.push(info);
1971
- Builder.registryChange.next(Builder.registry);
1959
+ var options = data.data;
1960
+ if (!options) {
1972
1961
  break;
1973
1962
  }
1974
- case 'builder.settingsChange': {
1975
- // TODO: possibly do this for all...
1976
- if (event.source === window) {
1977
- break;
1978
- }
1979
- var settings = data.data;
1980
- if (!settings) {
1981
- break;
1982
- }
1983
- Object.assign(Builder.settings, settings);
1984
- Builder.settingsChange.next(Builder.settings);
1963
+ var type = options.type, info = options.info;
1964
+ // TODO: all must have name and can't conflict?
1965
+ var typeList = Builder.registry[type];
1966
+ if (!typeList) {
1967
+ typeList = Builder.registry[type] = [];
1968
+ }
1969
+ typeList.push(info);
1970
+ Builder.registryChange.next(Builder.registry);
1971
+ break;
1972
+ }
1973
+ case 'builder.settingsChange': {
1974
+ // TODO: possibly do this for all...
1975
+ if (event.source === window) {
1985
1976
  break;
1986
1977
  }
1987
- case 'builder.registerEditor': {
1988
- // TODO: possibly do this for all...
1989
- if (event.source === window) {
1990
- break;
1991
- }
1992
- var info_1 = data.data;
1993
- if (!info_1) {
1994
- break;
1995
- }
1996
- var hasComponent_1 = !!info_1.component;
1997
- Builder.editors.every(function (thisInfo, index) {
1998
- if (info_1.name === thisInfo.name) {
1999
- if (thisInfo.component && !hasComponent_1) {
2000
- return false;
2001
- }
2002
- else {
2003
- Builder.editors[index] = thisInfo;
2004
- }
2005
- return false;
2006
- }
2007
- return true;
2008
- });
1978
+ var settings = data.data;
1979
+ if (!settings) {
2009
1980
  break;
2010
1981
  }
2011
- case 'builder.triggerAnimation': {
2012
- Builder.animator.triggerAnimation(data.data);
1982
+ Object.assign(Builder.settings, settings);
1983
+ Builder.settingsChange.next(Builder.settings);
1984
+ break;
1985
+ }
1986
+ case 'builder.registerEditor': {
1987
+ // TODO: possibly do this for all...
1988
+ if (event.source === window) {
2013
1989
  break;
2014
1990
  }
2015
- case 'builder.contentUpdate':
2016
- var key = data.data.key || data.data.alias || data.data.entry || data.data.modelName;
2017
- var contentData = data.data.data; // hmmm...
2018
- var observer = _this.observersByKey[key];
2019
- if (observer && !_this.noEditorUpdates[key]) {
2020
- observer.next([contentData]);
2021
- }
1991
+ var info_1 = data.data;
1992
+ if (!info_1) {
2022
1993
  break;
2023
- case 'builder.getComponents':
1994
+ }
1995
+ var hasComponent_1 = !!info_1.component;
1996
+ Builder.editors.every(function (thisInfo, index) {
1997
+ if (info_1.name === thisInfo.name) {
1998
+ if (thisInfo.component && !hasComponent_1) {
1999
+ return false;
2000
+ }
2001
+ else {
2002
+ Builder.editors[index] = thisInfo;
2003
+ }
2004
+ return false;
2005
+ }
2006
+ return true;
2007
+ });
2008
+ break;
2009
+ }
2010
+ case 'builder.triggerAnimation': {
2011
+ Builder.animator.triggerAnimation(data.data);
2012
+ break;
2013
+ }
2014
+ case 'builder.contentUpdate':
2015
+ var key = data.data.key || data.data.alias || data.data.entry || data.data.modelName;
2016
+ var contentData = data.data.data; // hmmm...
2017
+ var observer = _this.observersByKey[key];
2018
+ if (observer && !_this.noEditorUpdates[key]) {
2019
+ observer.next([contentData]);
2020
+ }
2021
+ break;
2022
+ case 'builder.getComponents':
2023
+ (_b = window.parent) === null || _b === void 0 ? void 0 : _b.postMessage({
2024
+ type: 'builder.components',
2025
+ data: Builder.components.map(function (item) { return Builder.prepareComponentSpecToSend(item); }),
2026
+ }, '*');
2027
+ break;
2028
+ case 'builder.editingModel':
2029
+ _this.editingModel = data.data.model;
2030
+ break;
2031
+ case 'builder.registerComponent':
2032
+ var componentData = data.data;
2033
+ Builder.addComponent(componentData);
2034
+ break;
2035
+ case 'builder.blockContentLoading':
2036
+ if (typeof data.data.model === 'string') {
2037
+ _this.blockContentLoading = data.data.model;
2038
+ }
2039
+ break;
2040
+ case 'builder.editingMode':
2041
+ var editingMode = data.data;
2042
+ if (editingMode) {
2043
+ _this.editingMode = true;
2044
+ document.body.classList.add('builder-editing');
2045
+ }
2046
+ else {
2047
+ _this.editingMode = false;
2048
+ document.body.classList.remove('builder-editing');
2049
+ }
2050
+ break;
2051
+ case 'builder.editingPageMode':
2052
+ var editingPageMode = data.data;
2053
+ Builder.editingPage = editingPageMode;
2054
+ break;
2055
+ case 'builder.overrideUserAttributes':
2056
+ var userAttributes = data.data;
2057
+ assign(Builder.overrideUserAttributes, userAttributes);
2058
+ _this.flushGetContentQueue(true);
2059
+ // TODO: refetch too
2060
+ break;
2061
+ case 'builder.overrideTestGroup':
2062
+ var _e = data.data, variationId = _e.variationId, contentId = _e.contentId;
2063
+ if (variationId && contentId) {
2064
+ _this.setTestCookie(contentId, variationId);
2065
+ _this.flushGetContentQueue(true);
2066
+ }
2067
+ break;
2068
+ case 'builder.evaluate': {
2069
+ var text = data.data.text;
2070
+ var args = data.data.arguments || [];
2071
+ var id_1 = data.data.id;
2072
+ // tslint:disable-next-line:no-function-constructor-with-string-args
2073
+ var fn = new Function(text);
2074
+ var result = void 0;
2075
+ var error = null;
2076
+ try {
2077
+ result = fn.apply(_this, args);
2078
+ }
2079
+ catch (err) {
2080
+ error = toError(err);
2081
+ }
2082
+ if (error) {
2024
2083
  (_c = window.parent) === null || _c === void 0 ? void 0 : _c.postMessage({
2025
- type: 'builder.components',
2026
- data: Builder.components.map(function (item) { return Builder.prepareComponentSpecToSend(item); }),
2084
+ type: 'builder.evaluateError',
2085
+ data: { id: id_1, error: error.message },
2027
2086
  }, '*');
2028
- break;
2029
- case 'builder.editingModel':
2030
- _this.editingModel = data.data.model;
2031
- break;
2032
- case 'builder.registerComponent':
2033
- var componentData = data.data;
2034
- Builder.addComponent(componentData);
2035
- break;
2036
- case 'builder.blockContentLoading':
2037
- if (typeof data.data.model === 'string') {
2038
- _this.blockContentLoading = data.data.model;
2039
- }
2040
- break;
2041
- case 'builder.editingMode':
2042
- var editingMode = data.data;
2043
- if (editingMode) {
2044
- _this.editingMode = true;
2045
- document.body.classList.add('builder-editing');
2087
+ }
2088
+ else {
2089
+ if (result && typeof result.then === 'function') {
2090
+ result
2091
+ .then(function (finalResult) {
2092
+ var _a;
2093
+ (_a = window.parent) === null || _a === void 0 ? void 0 : _a.postMessage({
2094
+ type: 'builder.evaluateResult',
2095
+ data: { id: id_1, result: finalResult },
2096
+ }, '*');
2097
+ })
2098
+ .catch(console.error);
2046
2099
  }
2047
2100
  else {
2048
- _this.editingMode = false;
2049
- document.body.classList.remove('builder-editing');
2050
- }
2051
- break;
2052
- case 'builder.editingPageMode':
2053
- var editingPageMode = data.data;
2054
- Builder.editingPage = editingPageMode;
2055
- break;
2056
- case 'builder.overrideUserAttributes':
2057
- var userAttributes = data.data;
2058
- assign(Builder.overrideUserAttributes, userAttributes);
2059
- _this.flushGetContentQueue(true);
2060
- // TODO: refetch too
2061
- break;
2062
- case 'builder.overrideTestGroup':
2063
- var _f = data.data, variationId = _f.variationId, contentId = _f.contentId;
2064
- if (variationId && contentId) {
2065
- _this.setTestCookie(contentId, variationId);
2066
- _this.flushGetContentQueue(true);
2067
- }
2068
- break;
2069
- case 'builder.evaluate': {
2070
- var text = data.data.text;
2071
- var args = data.data.arguments || [];
2072
- var id_1 = data.data.id;
2073
- // tslint:disable-next-line:no-function-constructor-with-string-args
2074
- var fn = new Function(text);
2075
- var result = void 0;
2076
- var error = null;
2077
- try {
2078
- result = fn.apply(_this, args);
2079
- }
2080
- catch (err) {
2081
- error = toError(err);
2082
- }
2083
- if (error) {
2084
2101
  (_d = window.parent) === null || _d === void 0 ? void 0 : _d.postMessage({
2085
- type: 'builder.evaluateError',
2086
- data: { id: id_1, error: error.message },
2102
+ type: 'builder.evaluateResult',
2103
+ data: { result: result, id: id_1 },
2087
2104
  }, '*');
2088
2105
  }
2089
- else {
2090
- if (result && typeof result.then === 'function') {
2091
- result
2092
- .then(function (finalResult) {
2093
- var _a;
2094
- (_a = window.parent) === null || _a === void 0 ? void 0 : _a.postMessage({
2095
- type: 'builder.evaluateResult',
2096
- data: { id: id_1, result: finalResult },
2097
- }, '*');
2098
- })
2099
- .catch(console.error);
2100
- }
2101
- else {
2102
- (_e = window.parent) === null || _e === void 0 ? void 0 : _e.postMessage({
2103
- type: 'builder.evaluateResult',
2104
- data: { result: result, id: id_1 },
2105
- }, '*');
2106
- }
2107
- }
2108
- break;
2109
2106
  }
2107
+ break;
2110
2108
  }
2111
2109
  }
2112
- });
2113
- }
2110
+ }
2111
+ });
2114
2112
  };
2115
2113
  Object.defineProperty(Builder.prototype, "defaultCanTrack", {
2116
2114
  get: function () {
@@ -2343,7 +2341,7 @@
2343
2341
  // even though we only use `fetch()` now, we prefer to keep the old behavior and use the `fetch` that comes from
2344
2342
  // the core SDK for consistency
2345
2343
  Builder.prototype.requestUrl = function (url, options) {
2346
- return getFetch()(url, options).then(function (res) { return res.json(); });
2344
+ return getFetch()(url, this.addSdkHeaders(options)).then(function (res) { return res.json(); });
2347
2345
  };
2348
2346
  Object.defineProperty(Builder.prototype, "host", {
2349
2347
  get: function () {
@@ -2372,8 +2370,21 @@
2372
2370
  enumerable: false,
2373
2371
  configurable: true
2374
2372
  });
2373
+ Builder.prototype.getSdkHeaders = function () {
2374
+ if (!Builder.sdkInfo) {
2375
+ return {};
2376
+ }
2377
+ return {
2378
+ 'X-Builder-SDK': Builder.sdkInfo.name,
2379
+ 'X-Builder-SDK-GEN': '1',
2380
+ 'X-Builder-SDK-Version': Builder.sdkInfo.version,
2381
+ };
2382
+ };
2383
+ Builder.prototype.addSdkHeaders = function (fetchOptions) {
2384
+ return __assign(__assign({}, fetchOptions), { headers: __assign(__assign({}, fetchOptions.headers), this.getSdkHeaders()) });
2385
+ };
2375
2386
  Builder.prototype.makeFetchApiCall = function (url, requestOptions) {
2376
- return getFetch()(url, requestOptions);
2387
+ return getFetch()(url, this.addSdkHeaders(requestOptions));
2377
2388
  };
2378
2389
  Builder.prototype.flattenMongoQuery = function (obj, _current, _res) {
2379
2390
  if (_res === void 0) { _res = {}; }
@@ -2772,6 +2783,7 @@
2772
2783
  (location.search.indexOf('builder.preview=') !== -1 ||
2773
2784
  location.search.indexOf('builder.frameEditing=') !== -1));
2774
2785
  Builder.isReact = false;
2786
+ Builder.sdkInfo = undefined;
2775
2787
  Builder.overrideUserAttributes = {};
2776
2788
  return Builder;
2777
2789
  }());