@livepreso/api 6.53.1 → 6.55.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.
Files changed (119) hide show
  1. package/.rush/temp/chunked-rush-logs/api.build.chunks.jsonl +2 -2
  2. package/.rush/temp/operation/build/all.log +2 -2
  3. package/.rush/temp/operation/build/error.log +1 -1
  4. package/.rush/temp/operation/build/log-chunks.jsonl +2 -2
  5. package/.rush/temp/operation/build/state.json +1 -1
  6. package/.rush/temp/shrinkwrap-deps.json +65 -15
  7. package/CHANGELOG.json +46 -0
  8. package/CHANGELOG.md +27 -1
  9. package/cjs/api.js +1 -1
  10. package/cjs/api.js.map +1 -1
  11. package/cjs/collections/auto-adjuncts.js +0 -22
  12. package/cjs/collections/auto-adjuncts.js.map +1 -1
  13. package/cjs/collections/cms-vals.js +25 -0
  14. package/cjs/collections/cms-vals.js.map +1 -1
  15. package/cjs/collections/cms-vals.spec.js +73 -0
  16. package/cjs/collections/cms-vals.spec.js.map +1 -0
  17. package/cjs/collections/deck-version-screenshots.js +0 -23
  18. package/cjs/collections/deck-version-screenshots.js.map +1 -1
  19. package/cjs/collections/scenarios.js +20 -0
  20. package/cjs/collections/scenarios.js.map +1 -0
  21. package/cjs/collections.js +11 -22
  22. package/cjs/collections.js.map +1 -1
  23. package/cjs/fixtures.js +18 -1
  24. package/cjs/fixtures.js.map +1 -1
  25. package/cjs/middlewares/base.js +1 -2
  26. package/cjs/middlewares/base.js.map +1 -1
  27. package/cjs/models/appointment.js +29 -8
  28. package/cjs/models/appointment.js.map +1 -1
  29. package/cjs/models/auto-adjunct.js +3 -2
  30. package/cjs/models/auto-adjunct.js.map +1 -1
  31. package/cjs/models/base.js +3 -1
  32. package/cjs/models/base.js.map +1 -1
  33. package/cjs/models/cms-val.js +3 -3
  34. package/cjs/models/cms-val.js.map +1 -1
  35. package/cjs/models/customer.js +2 -1
  36. package/cjs/models/customer.js.map +1 -1
  37. package/cjs/models/deck-layout.js +52 -0
  38. package/cjs/models/deck-layout.js.map +1 -0
  39. package/cjs/models/deck-version-screenshot.js +2 -2
  40. package/cjs/models/deck-version-screenshot.js.map +1 -1
  41. package/cjs/models/deck-version.js +43 -20
  42. package/cjs/models/deck-version.js.map +1 -1
  43. package/cjs/models/image.js +0 -2
  44. package/cjs/models/image.js.map +1 -1
  45. package/cjs/models/pack-diff.js +18 -9
  46. package/cjs/models/pack-diff.js.map +1 -1
  47. package/cjs/models/preset.js +8 -6
  48. package/cjs/models/preset.js.map +1 -1
  49. package/cjs/models/scenario.js +41 -0
  50. package/cjs/models/scenario.js.map +1 -0
  51. package/cjs/models/user.js +8 -3
  52. package/cjs/models/user.js.map +1 -1
  53. package/cjs/models.js +22 -0
  54. package/cjs/models.js.map +1 -1
  55. package/cjs/presentation/appointment-presentation.js +5 -3
  56. package/cjs/presentation/appointment-presentation.js.map +1 -1
  57. package/cjs/presentation/base-presentation-model.js +26 -23
  58. package/cjs/presentation/base-presentation-model.js.map +1 -1
  59. package/cjs/presentation/base-presentation-model.spec.js +21 -21
  60. package/cjs/presentation/base-presentation-model.spec.js.map +1 -1
  61. package/cjs/presentation/presentation-deck.js +6 -0
  62. package/cjs/presentation/presentation-deck.js.map +1 -1
  63. package/cjs/presentation/presentation-section.js +28 -3
  64. package/cjs/presentation/presentation-section.js.map +1 -1
  65. package/cjs/presentation/presentation-section.spec.js +16 -3
  66. package/cjs/presentation/presentation-section.spec.js.map +1 -1
  67. package/cjs/presentation/presentation-slide.js +25 -1
  68. package/cjs/presentation/presentation-slide.js.map +1 -1
  69. package/cjs/presentation/presentation-slide.spec.js +8 -1
  70. package/cjs/presentation/presentation-slide.spec.js.map +1 -1
  71. package/cjs/sync.js +17 -9
  72. package/cjs/sync.js.map +1 -1
  73. package/cjs/utils.js +12 -3
  74. package/cjs/utils.js.map +1 -1
  75. package/cjs/utils.spec.js +22 -0
  76. package/cjs/utils.spec.js.map +1 -1
  77. package/package.json +1 -1
  78. package/rush-logs/api.build.error.log +1 -1
  79. package/rush-logs/api.build.log +2 -2
  80. package/src/api.js +1 -1
  81. package/src/collections/auto-adjuncts.js +0 -22
  82. package/src/collections/cms-vals.js +28 -0
  83. package/src/collections/cms-vals.spec.js +66 -0
  84. package/src/collections/deck-version-screenshots.js +0 -22
  85. package/src/collections/scenarios.js +18 -0
  86. package/src/collections.js +1 -2
  87. package/src/fixtures.js +17 -1
  88. package/src/middlewares/base.js +1 -2
  89. package/src/models/appointment.js +32 -6
  90. package/src/models/auto-adjunct.js +3 -2
  91. package/src/models/base.js +3 -2
  92. package/src/models/cms-val.js +3 -3
  93. package/src/models/customer.js +1 -0
  94. package/src/models/deck-layout.js +54 -0
  95. package/src/models/deck-version-screenshot.js +2 -2
  96. package/src/models/deck-version.js +12 -14
  97. package/src/models/image.js +0 -3
  98. package/src/models/pack-diff.js +14 -9
  99. package/src/models/preset.js +8 -6
  100. package/src/models/scenario.js +39 -0
  101. package/src/models/user.js +8 -1
  102. package/src/models.js +2 -0
  103. package/src/presentation/appointment-presentation.js +7 -4
  104. package/src/presentation/base-presentation-model.js +29 -23
  105. package/src/presentation/base-presentation-model.spec.js +22 -22
  106. package/src/presentation/presentation-deck.js +6 -0
  107. package/src/presentation/presentation-section.js +26 -1
  108. package/src/presentation/presentation-section.spec.js +14 -1
  109. package/src/presentation/presentation-slide.js +24 -0
  110. package/src/presentation/presentation-slide.spec.js +7 -0
  111. package/src/sync.js +16 -12
  112. package/src/utils.js +13 -3
  113. package/src/utils.spec.js +27 -0
  114. package/cjs/collections/created-assets.js +0 -26
  115. package/cjs/collections/created-assets.js.map +0 -1
  116. package/cjs/collections/deleted-assets.js +0 -26
  117. package/cjs/collections/deleted-assets.js.map +0 -1
  118. package/src/collections/created-assets.js +0 -26
  119. package/src/collections/deleted-assets.js +0 -26
package/src/sync.js CHANGED
@@ -40,7 +40,7 @@ export const buildURL = function ({ method, model }) {
40
40
  return url;
41
41
  };
42
42
 
43
- export const sync = function (method) {
43
+ export const sync = function (method, model, defaultOpts) {
44
44
  const syncArguments = arguments;
45
45
 
46
46
  if (method === "read") {
@@ -52,18 +52,19 @@ export const sync = function (method) {
52
52
  }
53
53
  });
54
54
 
55
- return Promise.all(syncActions).then(() => {
56
- return ajaxSync.apply(this, syncArguments);
55
+ return Promise.all(syncActions).then((...newOpts) => {
56
+ const joinedOpts = _.merge({}, defaultOpts, ...newOpts.flat());
57
+ return ajaxSync.call(this, method, model, joinedOpts);
57
58
  });
58
59
  }
59
- return ajaxSync.apply(this, syncArguments);
60
+ return ajaxSync.call(this, method, model, defaultOpts);
60
61
  };
61
62
 
62
63
  export const ajaxSync = function (method, model, options) {
63
64
  const type = methodMap[method];
64
65
 
65
66
  // Default options, unless specified.
66
- defaults(options || (options = {}), {
67
+ defaults(options || {}, {
67
68
  emulateHTTP: false,
68
69
  emulateJSON: false,
69
70
  });
@@ -118,7 +119,7 @@ export const ajaxSync = function (method, model, options) {
118
119
 
119
120
  middlewares.forEach((middleware) => {
120
121
  if (middleware.preflight) {
121
- middleware.preflight(request);
122
+ middleware.preflight(request, model, options);
122
123
  }
123
124
  });
124
125
 
@@ -155,10 +156,10 @@ export const ajaxSync = function (method, model, options) {
155
156
 
156
157
  // TODO: Remove me when this can be moved... for now this removal is quite a complex
157
158
  // process.
158
- if (options.cached && !options.deleted) {
159
+ if (options.cachedResponse) {
159
160
  return Promise.resolve(options.cachedResponse)
160
161
  .then(getNextMiddleware(request))
161
- .then(function (response) {
162
+ .then((response) => {
162
163
  if (!response.data) {
163
164
  response.data = JSON.parse(response.text);
164
165
  }
@@ -173,7 +174,7 @@ export const ajaxSync = function (method, model, options) {
173
174
  return response.data;
174
175
  });
175
176
  })
176
- .catch(function (response) {
177
+ .catch((response) => {
177
178
  return Promise.each(middlewares, (middleware) => {
178
179
  return middleware.error(response, model);
179
180
  }).then(() => {
@@ -189,9 +190,12 @@ export const ajaxSync = function (method, model, options) {
189
190
  request
190
191
  // Force a timeout on every request. Intermittent connections
191
192
  // can have the request continue trying for minutes otherwise.
192
- .timeout(60 * 1000)
193
+ // 60 seconds is the timeout the server has, so we go for 65 seconds,
194
+ // so we give the chance to the server to time out first - helps with
195
+ // debugging.
196
+ .timeout(65 * 1000)
193
197
  .then(getNextMiddleware(request))
194
- .then(function (response) {
198
+ .then((response) => {
195
199
  let data;
196
200
  try {
197
201
  data = JSON.parse(response.text);
@@ -223,7 +227,7 @@ export const ajaxSync = function (method, model, options) {
223
227
  }
224
228
  throw e;
225
229
  })
226
- .catch(function (response) {
230
+ .catch((response) => {
227
231
  return Promise.each(middlewares, (middleware) => {
228
232
  return middleware.error(response);
229
233
  }).then(() => {
package/src/utils.js CHANGED
@@ -149,9 +149,19 @@ export function sanitizeBase64(obj, conditionFn = () => true) {
149
149
  return { ...acc, [key]: sanitizeBase64(obj[key], conditionFn) };
150
150
  }, {});
151
151
  } else if (typeof obj === "string") {
152
- const re = /^data:image\/[a-zA-Z]+;base64,[A-Za-z0-9+/=]+$/;
153
- if (re.test(obj) && conditionFn(obj)) {
154
- return "";
152
+ // Catch anything that looks like base64, or base64%2C (which is the encoded version)
153
+ // and strip it. This is a last resort, we'd prefer not to be in this position!
154
+ const re = /base64(,|(%2C))/;
155
+
156
+ if (re.test(obj)) {
157
+ // If you're a developer, let's throw an error.
158
+ if (process.env.NODE_ENV === "development" && !window.Cypress) {
159
+ throw new Error("Tried to save a base64 string. Figure out why!");
160
+ }
161
+
162
+ if (conditionFn?.(obj) ?? true) {
163
+ return "";
164
+ }
155
165
  }
156
166
  }
157
167
  return obj;
package/src/utils.spec.js CHANGED
@@ -3,6 +3,7 @@ import {
3
3
  getShortURL,
4
4
  removeMultiByteChars,
5
5
  replaceHostname,
6
+ sanitizeBase64,
6
7
  } from "./utils.js";
7
8
 
8
9
  describe("getShortURL()", () => {
@@ -160,3 +161,29 @@ describe("replaceHostname()", () => {
160
161
  expect(actual).toEqual(expected);
161
162
  });
162
163
  });
164
+
165
+ describe.only("sanitizeBase64()", () => {
166
+ ["data:image/webp;base64,", "data%3Aimage%2Fwebp%3Bbase64%2C"].forEach(
167
+ (base64) => {
168
+ it("should strip base64 from string", () => {
169
+ expect(sanitizeBase64(base64)).toEqual("");
170
+ });
171
+
172
+ it("should strip base64 from array", () => {
173
+ expect(sanitizeBase64([base64])).toEqual([""]);
174
+ });
175
+
176
+ it("should strip base64 from nested object", () => {
177
+ expect(
178
+ sanitizeBase64({
179
+ foo: [base64],
180
+ }),
181
+ ).toEqual({ foo: [""] });
182
+ });
183
+
184
+ it("should not strip if condition says not to", () => {
185
+ expect(sanitizeBase64(base64, () => false)).toEqual(base64);
186
+ });
187
+ },
188
+ );
189
+ });
@@ -1,26 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.CreatedAssetCollection = void 0;
7
- require("../models/asset.js");
8
- var _base = require("./base.js");
9
- var _stateRegister = require("../state-register.js");
10
- /**
11
- * @constructor
12
- * @alias collections.CreatedAssetCollection
13
- * @extends collections.BaseCollection
14
- * @see models.AssetModel
15
- */
16
- var CreatedAssetCollection = exports.CreatedAssetCollection = _base.BaseCollection.extend(/** @lends collections.CreatedAssetCollection# */{
17
- model: "AssetModel",
18
- url: function url() {
19
- if (!this._url && this.parent) {
20
- this._url = this.getFullURLPath("".concat(this.parent.getPlainURL(), "created/"));
21
- }
22
- return _base.BaseCollection.prototype.url.call(this);
23
- }
24
- });
25
- (0, _stateRegister.register)("CreatedAssetCollection", CreatedAssetCollection);
26
- //# sourceMappingURL=created-assets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"created-assets.js","names":["require","_base","_stateRegister","CreatedAssetCollection","exports","BaseCollection","extend","model","url","_url","parent","getFullURLPath","concat","getPlainURL","prototype","call","register"],"sources":["../../src/collections/created-assets.js"],"sourcesContent":["import \"../models/asset.js\";\n\nimport { BaseCollection } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias collections.CreatedAssetCollection\n * @extends collections.BaseCollection\n * @see models.AssetModel\n */\nexport const CreatedAssetCollection = BaseCollection.extend(\n\t/** @lends collections.CreatedAssetCollection# */ {\n\t\tmodel: \"AssetModel\",\n\n\t\turl() {\n\t\t\tif (!this._url && this.parent) {\n\t\t\t\tthis._url = this.getFullURLPath(`${this.parent.getPlainURL()}created/`);\n\t\t\t}\n\n\t\t\treturn BaseCollection.prototype.url.call(this);\n\t\t},\n\t},\n);\n\nregister(\"CreatedAssetCollection\", CreatedAssetCollection);\n"],"mappings":";;;;;;AAAAA,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,IAAMG,sBAAsB,GAAAC,OAAA,CAAAD,sBAAA,GAAGE,oBAAc,CAACC,MAAM,CAC1D,iDAAkD;EACjDC,KAAK,EAAE,YAAY;EAEnBC,GAAG,WAAHA,GAAGA,CAAA,EAAG;IACL,IAAI,CAAC,IAAI,CAACC,IAAI,IAAI,IAAI,CAACC,MAAM,EAAE;MAC9B,IAAI,CAACD,IAAI,GAAG,IAAI,CAACE,cAAc,IAAAC,MAAA,CAAI,IAAI,CAACF,MAAM,CAACG,WAAW,CAAC,CAAC,aAAU,CAAC;IACxE;IAEA,OAAOR,oBAAc,CAACS,SAAS,CAACN,GAAG,CAACO,IAAI,CAAC,IAAI,CAAC;EAC/C;AACD,CACD,CAAC;AAED,IAAAC,uBAAQ,EAAC,wBAAwB,EAAEb,sBAAsB,CAAC","ignoreList":[]}
@@ -1,26 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.DeletedAssetCollection = void 0;
7
- require("../models/asset.js");
8
- var _base = require("./base.js");
9
- var _stateRegister = require("../state-register.js");
10
- /**
11
- * @constructor
12
- * @alias collections.DeletedAssetCollection
13
- * @extends collections.BaseCollection
14
- * @see models.AssetModel
15
- */
16
- var DeletedAssetCollection = exports.DeletedAssetCollection = _base.BaseCollection.extend(/** @lends collections.DeletedAssetCollection# */{
17
- model: "AssetModel",
18
- url: function url() {
19
- if (!this._url && this.parent) {
20
- this._url = this.getFullURLPath("".concat(this.parent.getPlainURL(), "deleted/"));
21
- }
22
- return _base.BaseCollection.prototype.url.call(this);
23
- }
24
- });
25
- (0, _stateRegister.register)("DeletedAssetCollection", DeletedAssetCollection);
26
- //# sourceMappingURL=deleted-assets.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deleted-assets.js","names":["require","_base","_stateRegister","DeletedAssetCollection","exports","BaseCollection","extend","model","url","_url","parent","getFullURLPath","concat","getPlainURL","prototype","call","register"],"sources":["../../src/collections/deleted-assets.js"],"sourcesContent":["import \"../models/asset.js\";\n\nimport { BaseCollection } from \"./base.js\";\nimport { register } from \"../state-register.js\";\n\n/**\n * @constructor\n * @alias collections.DeletedAssetCollection\n * @extends collections.BaseCollection\n * @see models.AssetModel\n */\nexport const DeletedAssetCollection = BaseCollection.extend(\n\t/** @lends collections.DeletedAssetCollection# */ {\n\t\tmodel: \"AssetModel\",\n\n\t\turl() {\n\t\t\tif (!this._url && this.parent) {\n\t\t\t\tthis._url = this.getFullURLPath(`${this.parent.getPlainURL()}deleted/`);\n\t\t\t}\n\n\t\t\treturn BaseCollection.prototype.url.call(this);\n\t\t},\n\t},\n);\n\nregister(\"DeletedAssetCollection\", DeletedAssetCollection);\n"],"mappings":";;;;;;AAAAA,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,cAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,IAAMG,sBAAsB,GAAAC,OAAA,CAAAD,sBAAA,GAAGE,oBAAc,CAACC,MAAM,CAC1D,iDAAkD;EACjDC,KAAK,EAAE,YAAY;EAEnBC,GAAG,WAAHA,GAAGA,CAAA,EAAG;IACL,IAAI,CAAC,IAAI,CAACC,IAAI,IAAI,IAAI,CAACC,MAAM,EAAE;MAC9B,IAAI,CAACD,IAAI,GAAG,IAAI,CAACE,cAAc,IAAAC,MAAA,CAAI,IAAI,CAACF,MAAM,CAACG,WAAW,CAAC,CAAC,aAAU,CAAC;IACxE;IAEA,OAAOR,oBAAc,CAACS,SAAS,CAACN,GAAG,CAACO,IAAI,CAAC,IAAI,CAAC;EAC/C;AACD,CACD,CAAC;AAED,IAAAC,uBAAQ,EAAC,wBAAwB,EAAEb,sBAAsB,CAAC","ignoreList":[]}
@@ -1,26 +0,0 @@
1
- import "../models/asset.js";
2
-
3
- import { BaseCollection } from "./base.js";
4
- import { register } from "../state-register.js";
5
-
6
- /**
7
- * @constructor
8
- * @alias collections.CreatedAssetCollection
9
- * @extends collections.BaseCollection
10
- * @see models.AssetModel
11
- */
12
- export const CreatedAssetCollection = BaseCollection.extend(
13
- /** @lends collections.CreatedAssetCollection# */ {
14
- model: "AssetModel",
15
-
16
- url() {
17
- if (!this._url && this.parent) {
18
- this._url = this.getFullURLPath(`${this.parent.getPlainURL()}created/`);
19
- }
20
-
21
- return BaseCollection.prototype.url.call(this);
22
- },
23
- },
24
- );
25
-
26
- register("CreatedAssetCollection", CreatedAssetCollection);
@@ -1,26 +0,0 @@
1
- import "../models/asset.js";
2
-
3
- import { BaseCollection } from "./base.js";
4
- import { register } from "../state-register.js";
5
-
6
- /**
7
- * @constructor
8
- * @alias collections.DeletedAssetCollection
9
- * @extends collections.BaseCollection
10
- * @see models.AssetModel
11
- */
12
- export const DeletedAssetCollection = BaseCollection.extend(
13
- /** @lends collections.DeletedAssetCollection# */ {
14
- model: "AssetModel",
15
-
16
- url() {
17
- if (!this._url && this.parent) {
18
- this._url = this.getFullURLPath(`${this.parent.getPlainURL()}deleted/`);
19
- }
20
-
21
- return BaseCollection.prototype.url.call(this);
22
- },
23
- },
24
- );
25
-
26
- register("DeletedAssetCollection", DeletedAssetCollection);