@bytescale/sdk 3.19.0 → 3.20.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.
@@ -2419,6 +2419,13 @@ function ServiceWorkerUtils_catch(body, recover) {
2419
2419
  }
2420
2420
  return result;
2421
2421
  }
2422
+ function ServiceWorkerUtils_invoke(body, then) {
2423
+ var result = body();
2424
+ if (result && result.then) {
2425
+ return result.then(then);
2426
+ }
2427
+ return then(result);
2428
+ }
2422
2429
  function ServiceWorkerUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2423
2430
  function ServiceWorkerUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, ServiceWorkerUtils_toPropertyKey(descriptor.key), descriptor); } }
2424
2431
  function ServiceWorkerUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) ServiceWorkerUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) ServiceWorkerUtils_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
@@ -2439,7 +2446,7 @@ var ServiceWorkerUtils = /*#__PURE__*/function () {
2439
2446
  value: function sendMessage(message, config, serviceWorkerScriptFieldName) {
2440
2447
  try {
2441
2448
  var _this2 = this;
2442
- return ServiceWorkerUtils_await(config.serviceWorkerScope !== undefined ? _this2.getActiveServiceWorkerElseRegister(config, message) : _this2.registerServiceWorkerIfSupported(config.serviceWorkerScript, message, serviceWorkerScriptFieldName), function (result) {
2449
+ return ServiceWorkerUtils_await(config.serviceWorkerScope !== undefined ? _this2.getActiveServiceWorkerElseRegister(config, message) : _this2.registerServiceWorkerValidated(config.serviceWorkerScript, message, serviceWorkerScriptFieldName), function (result) {
2443
2450
  if (!result.messageSent) {
2444
2451
  result.serviceWorker.postMessage(message);
2445
2452
  }
@@ -2450,8 +2457,8 @@ var ServiceWorkerUtils = /*#__PURE__*/function () {
2450
2457
  }
2451
2458
  }
2452
2459
  }, {
2453
- key: "registerServiceWorkerIfSupported",
2454
- value: function registerServiceWorkerIfSupported(serviceWorkerScript, init, serviceWorkerScriptFieldName) {
2460
+ key: "registerServiceWorkerValidated",
2461
+ value: function registerServiceWorkerValidated(serviceWorkerScript, init, serviceWorkerScriptFieldName) {
2455
2462
  try {
2456
2463
  var _this4 = this;
2457
2464
  if (!serviceWorkerScript.startsWith("/")) {
@@ -2461,7 +2468,7 @@ var ServiceWorkerUtils = /*#__PURE__*/function () {
2461
2468
  if (forwardSlashCount > 1) {
2462
2469
  ConsoleUtils.warn("The '".concat(serviceWorkerScriptFieldName, "' field should be a root script (e.g. '/script.js'). The Bytescale SDK can only authorize requests originating from webpages that are at the same level as the script or below."));
2463
2470
  }
2464
- return ServiceWorkerUtils_await(_this4.registerAuthServiceWorker(serviceWorkerScript, init));
2471
+ return ServiceWorkerUtils_await(_this4.registerServiceWorker(serviceWorkerScript, init));
2465
2472
  } catch (e) {
2466
2473
  return Promise.reject(e);
2467
2474
  }
@@ -2476,7 +2483,7 @@ var ServiceWorkerUtils = /*#__PURE__*/function () {
2476
2483
  serviceWorker: serviceWorker,
2477
2484
  messageSent: false,
2478
2485
  config: config
2479
- } : ServiceWorkerUtils_await(_this6.registerAuthServiceWorker(config.serviceWorkerScript, init));
2486
+ } : ServiceWorkerUtils_await(_this6.registerServiceWorker(config.serviceWorkerScript, init));
2480
2487
  });
2481
2488
  } catch (e) {
2482
2489
  return Promise.reject(e);
@@ -2490,8 +2497,8 @@ var ServiceWorkerUtils = /*#__PURE__*/function () {
2490
2497
  * We don't need to unregister it: we just need to clear the config when auth ends.
2491
2498
  */
2492
2499
  }, {
2493
- key: "registerAuthServiceWorker",
2494
- value: function registerAuthServiceWorker(serviceWorkerScript, init) {
2500
+ key: "registerServiceWorker",
2501
+ value: function registerServiceWorker(serviceWorkerScript, init) {
2495
2502
  try {
2496
2503
  var _this8 = this;
2497
2504
  return ServiceWorkerUtils_catch(function () {
@@ -2520,43 +2527,44 @@ var ServiceWorkerUtils = /*#__PURE__*/function () {
2520
2527
  key: "waitForActiveServiceWorker",
2521
2528
  value: function waitForActiveServiceWorker(registration, init) {
2522
2529
  try {
2523
- // If the service worker is already active, return it.
2524
- if (registration.active !== null) {
2525
- return {
2526
- serviceWorker: registration.active,
2527
- messageSent: false
2528
- };
2529
- }
2530
- // Service worker has not finished installing, which means we've just started installing a new one, so send the INIT
2531
- // message to it, as it will be waiting for it to complete its install phase.
2532
- var messageSent;
2533
- if (registration.installing !== null) {
2534
- messageSent = true;
2535
- registration.installing.postMessage(init);
2536
- } else {
2537
- messageSent = false;
2538
- }
2539
- // Wait for the service worker to become active.
2540
- return ServiceWorkerUtils_await(new Promise(function (resolve, reject) {
2541
- var _a, _b;
2542
- var serviceWorker = (_b = (_a = registration.installing) !== null && _a !== void 0 ? _a : registration.waiting) !== null && _b !== void 0 ? _b : undefined;
2543
- if (serviceWorker !== undefined) {
2544
- var stateChangeHandler = function stateChangeHandler(e) {
2545
- var sw = e.target;
2546
- if (sw.state === "activated") {
2547
- serviceWorker.removeEventListener("statechange", stateChangeHandler);
2548
- resolve({
2549
- messageSent: messageSent,
2550
- serviceWorker: sw
2551
- });
2552
- }
2530
+ var _exit2 = false;
2531
+ // We must check the 'installing' state before the 'active' state (see comment below).
2532
+ // The state will be 'installing' when the service worker is installed for the first time, or if there have been
2533
+ // code changes to the service worker, else the state will be 'active'.
2534
+ var installing = registration.installing;
2535
+ return ServiceWorkerUtils_invoke(function () {
2536
+ if (installing !== null) {
2537
+ installing.postMessage(init);
2538
+ _exit2 = true;
2539
+ return ServiceWorkerUtils_await(new Promise(function (resolve) {
2540
+ var stateChangeHandler = function stateChangeHandler(e) {
2541
+ var sw = e.target;
2542
+ if (sw.state === "activated") {
2543
+ installing.removeEventListener("statechange", stateChangeHandler);
2544
+ resolve({
2545
+ messageSent: true,
2546
+ serviceWorker: sw
2547
+ });
2548
+ }
2549
+ };
2550
+ installing.addEventListener("statechange", stateChangeHandler);
2551
+ }));
2552
+ }
2553
+ }, function (_result) {
2554
+ if (_exit2) return _result;
2555
+ // We must check the 'installing' state before the 'active' state, because if we've just installed a new service
2556
+ // worker, then the new service worker will be in the 'installing' slot whereas the old service worker will be in
2557
+ // the 'active' slot. So, if we checked this first, we would always return the old service worker, and therefore the
2558
+ // new service worker would never be initialized.
2559
+ if (registration.active !== null) {
2560
+ return {
2561
+ serviceWorker: registration.active,
2562
+ messageSent: false
2553
2563
  };
2554
- serviceWorker.addEventListener("statechange", stateChangeHandler);
2555
- } else {
2556
- // If there's no installing or waiting service worker, reject.
2557
- reject(new Error("No service worker is installing or waiting."));
2558
2564
  }
2559
- }));
2565
+ // We expect the service worker to use 'skipWaiting', so we don't expect 'waiting' service workers.
2566
+ throw new Error("Service worker was neither 'installing' or 'active'.");
2567
+ });
2560
2568
  } catch (e) {
2561
2569
  return Promise.reject(e);
2562
2570
  }
@@ -2404,6 +2404,13 @@ function ServiceWorkerUtils_catch(body, recover) {
2404
2404
  }
2405
2405
  return result;
2406
2406
  }
2407
+ function ServiceWorkerUtils_invoke(body, then) {
2408
+ var result = body();
2409
+ if (result && result.then) {
2410
+ return result.then(then);
2411
+ }
2412
+ return then(result);
2413
+ }
2407
2414
  function ServiceWorkerUtils_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
2408
2415
  function ServiceWorkerUtils_defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, ServiceWorkerUtils_toPropertyKey(descriptor.key), descriptor); } }
2409
2416
  function ServiceWorkerUtils_createClass(Constructor, protoProps, staticProps) { if (protoProps) ServiceWorkerUtils_defineProperties(Constructor.prototype, protoProps); if (staticProps) ServiceWorkerUtils_defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
@@ -2424,7 +2431,7 @@ var ServiceWorkerUtils = /*#__PURE__*/function () {
2424
2431
  value: function sendMessage(message, config, serviceWorkerScriptFieldName) {
2425
2432
  try {
2426
2433
  var _this2 = this;
2427
- return ServiceWorkerUtils_await(config.serviceWorkerScope !== undefined ? _this2.getActiveServiceWorkerElseRegister(config, message) : _this2.registerServiceWorkerIfSupported(config.serviceWorkerScript, message, serviceWorkerScriptFieldName), function (result) {
2434
+ return ServiceWorkerUtils_await(config.serviceWorkerScope !== undefined ? _this2.getActiveServiceWorkerElseRegister(config, message) : _this2.registerServiceWorkerValidated(config.serviceWorkerScript, message, serviceWorkerScriptFieldName), function (result) {
2428
2435
  if (!result.messageSent) {
2429
2436
  result.serviceWorker.postMessage(message);
2430
2437
  }
@@ -2435,8 +2442,8 @@ var ServiceWorkerUtils = /*#__PURE__*/function () {
2435
2442
  }
2436
2443
  }
2437
2444
  }, {
2438
- key: "registerServiceWorkerIfSupported",
2439
- value: function registerServiceWorkerIfSupported(serviceWorkerScript, init, serviceWorkerScriptFieldName) {
2445
+ key: "registerServiceWorkerValidated",
2446
+ value: function registerServiceWorkerValidated(serviceWorkerScript, init, serviceWorkerScriptFieldName) {
2440
2447
  try {
2441
2448
  var _this4 = this;
2442
2449
  if (!serviceWorkerScript.startsWith("/")) {
@@ -2446,7 +2453,7 @@ var ServiceWorkerUtils = /*#__PURE__*/function () {
2446
2453
  if (forwardSlashCount > 1) {
2447
2454
  ConsoleUtils.warn("The '".concat(serviceWorkerScriptFieldName, "' field should be a root script (e.g. '/script.js'). The Bytescale SDK can only authorize requests originating from webpages that are at the same level as the script or below."));
2448
2455
  }
2449
- return ServiceWorkerUtils_await(_this4.registerAuthServiceWorker(serviceWorkerScript, init));
2456
+ return ServiceWorkerUtils_await(_this4.registerServiceWorker(serviceWorkerScript, init));
2450
2457
  } catch (e) {
2451
2458
  return Promise.reject(e);
2452
2459
  }
@@ -2461,7 +2468,7 @@ var ServiceWorkerUtils = /*#__PURE__*/function () {
2461
2468
  serviceWorker: serviceWorker,
2462
2469
  messageSent: false,
2463
2470
  config: config
2464
- } : ServiceWorkerUtils_await(_this6.registerAuthServiceWorker(config.serviceWorkerScript, init));
2471
+ } : ServiceWorkerUtils_await(_this6.registerServiceWorker(config.serviceWorkerScript, init));
2465
2472
  });
2466
2473
  } catch (e) {
2467
2474
  return Promise.reject(e);
@@ -2475,8 +2482,8 @@ var ServiceWorkerUtils = /*#__PURE__*/function () {
2475
2482
  * We don't need to unregister it: we just need to clear the config when auth ends.
2476
2483
  */
2477
2484
  }, {
2478
- key: "registerAuthServiceWorker",
2479
- value: function registerAuthServiceWorker(serviceWorkerScript, init) {
2485
+ key: "registerServiceWorker",
2486
+ value: function registerServiceWorker(serviceWorkerScript, init) {
2480
2487
  try {
2481
2488
  var _this8 = this;
2482
2489
  return ServiceWorkerUtils_catch(function () {
@@ -2505,43 +2512,44 @@ var ServiceWorkerUtils = /*#__PURE__*/function () {
2505
2512
  key: "waitForActiveServiceWorker",
2506
2513
  value: function waitForActiveServiceWorker(registration, init) {
2507
2514
  try {
2508
- // If the service worker is already active, return it.
2509
- if (registration.active !== null) {
2510
- return {
2511
- serviceWorker: registration.active,
2512
- messageSent: false
2513
- };
2514
- }
2515
- // Service worker has not finished installing, which means we've just started installing a new one, so send the INIT
2516
- // message to it, as it will be waiting for it to complete its install phase.
2517
- var messageSent;
2518
- if (registration.installing !== null) {
2519
- messageSent = true;
2520
- registration.installing.postMessage(init);
2521
- } else {
2522
- messageSent = false;
2523
- }
2524
- // Wait for the service worker to become active.
2525
- return ServiceWorkerUtils_await(new Promise(function (resolve, reject) {
2526
- var _a, _b;
2527
- var serviceWorker = (_b = (_a = registration.installing) !== null && _a !== void 0 ? _a : registration.waiting) !== null && _b !== void 0 ? _b : undefined;
2528
- if (serviceWorker !== undefined) {
2529
- var stateChangeHandler = function stateChangeHandler(e) {
2530
- var sw = e.target;
2531
- if (sw.state === "activated") {
2532
- serviceWorker.removeEventListener("statechange", stateChangeHandler);
2533
- resolve({
2534
- messageSent: messageSent,
2535
- serviceWorker: sw
2536
- });
2537
- }
2515
+ var _exit2 = false;
2516
+ // We must check the 'installing' state before the 'active' state (see comment below).
2517
+ // The state will be 'installing' when the service worker is installed for the first time, or if there have been
2518
+ // code changes to the service worker, else the state will be 'active'.
2519
+ var installing = registration.installing;
2520
+ return ServiceWorkerUtils_invoke(function () {
2521
+ if (installing !== null) {
2522
+ installing.postMessage(init);
2523
+ _exit2 = true;
2524
+ return ServiceWorkerUtils_await(new Promise(function (resolve) {
2525
+ var stateChangeHandler = function stateChangeHandler(e) {
2526
+ var sw = e.target;
2527
+ if (sw.state === "activated") {
2528
+ installing.removeEventListener("statechange", stateChangeHandler);
2529
+ resolve({
2530
+ messageSent: true,
2531
+ serviceWorker: sw
2532
+ });
2533
+ }
2534
+ };
2535
+ installing.addEventListener("statechange", stateChangeHandler);
2536
+ }));
2537
+ }
2538
+ }, function (_result) {
2539
+ if (_exit2) return _result;
2540
+ // We must check the 'installing' state before the 'active' state, because if we've just installed a new service
2541
+ // worker, then the new service worker will be in the 'installing' slot whereas the old service worker will be in
2542
+ // the 'active' slot. So, if we checked this first, we would always return the old service worker, and therefore the
2543
+ // new service worker would never be initialized.
2544
+ if (registration.active !== null) {
2545
+ return {
2546
+ serviceWorker: registration.active,
2547
+ messageSent: false
2538
2548
  };
2539
- serviceWorker.addEventListener("statechange", stateChangeHandler);
2540
- } else {
2541
- // If there's no installing or waiting service worker, reject.
2542
- reject(new Error("No service worker is installing or waiting."));
2543
2549
  }
2544
- }));
2550
+ // We expect the service worker to use 'skipWaiting', so we don't expect 'waiting' service workers.
2551
+ throw new Error("Service worker was neither 'installing' or 'active'.");
2552
+ });
2545
2553
  } catch (e) {
2546
2554
  return Promise.reject(e);
2547
2555
  }
@@ -2,7 +2,7 @@ import { ServiceWorkerConfig, ServiceWorkerConfigInitialized } from "./model/Ser
2
2
  export declare class ServiceWorkerUtils<TMessage> {
3
3
  canUseServiceWorkers(): boolean;
4
4
  sendMessage(message: TMessage, config: ServiceWorkerConfig, serviceWorkerScriptFieldName: string): Promise<ServiceWorkerConfigInitialized>;
5
- private registerServiceWorkerIfSupported;
5
+ private registerServiceWorkerValidated;
6
6
  private getActiveServiceWorkerElseRegister;
7
7
  /**
8
8
  * Idempotent.
@@ -11,7 +11,7 @@ export declare class ServiceWorkerUtils<TMessage> {
11
11
  *
12
12
  * We don't need to unregister it: we just need to clear the config when auth ends.
13
13
  */
14
- private registerAuthServiceWorker;
14
+ private registerServiceWorker;
15
15
  private waitForActiveServiceWorker;
16
16
  private getActiveServiceWorker;
17
17
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytescale/sdk",
3
- "version": "3.19.0",
3
+ "version": "3.20.0",
4
4
  "description": "Bytescale JavaScript SDK",
5
5
  "author": "Bytescale <hello@bytescale.com> (https://www.bytescale.com)",
6
6
  "license": "MIT",