dexie-cloud-addon 4.0.0-beta.18 → 4.0.0-beta.19

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 (41) hide show
  1. package/dist/modern/dexie-cloud-addon.js +26 -20
  2. package/dist/modern/dexie-cloud-addon.js.map +1 -1
  3. package/dist/modern/dexie-cloud-addon.min.js +1 -1
  4. package/dist/modern/dexie-cloud-addon.min.js.map +1 -1
  5. package/dist/modern/service-worker.js +30 -21
  6. package/dist/modern/service-worker.js.map +1 -1
  7. package/dist/modern/service-worker.min.js +1 -1
  8. package/dist/modern/service-worker.min.js.map +1 -1
  9. package/dist/module-es5/dexie-cloud-addon.js +571 -564
  10. package/dist/module-es5/dexie-cloud-addon.js.map +1 -1
  11. package/dist/module-es5/dexie-cloud-addon.min.js +1 -1
  12. package/dist/module-es5/dexie-cloud-addon.min.js.map +1 -1
  13. package/dist/types/DexieCloudAPI.d.ts +1 -0
  14. package/dist/types/DexieCloudEntity.d.ts +8 -0
  15. package/dist/types/DexieCloudOptions.d.ts +1 -0
  16. package/dist/types/WebSocketStatus.d.ts +1 -0
  17. package/dist/types/createMyMembersObservable.d.ts +14 -0
  18. package/dist/types/currentUserObservable.d.ts +3 -0
  19. package/dist/types/helpers/BroadcastedLocalEvent.d.ts +8 -0
  20. package/dist/types/helpers/visibleState.d.ts +1 -0
  21. package/dist/types/permissionsLookup.d.ts +9 -0
  22. package/dist/types/permissionsLookupObservable.d.ts +14 -0
  23. package/dist/types/sync/globalizePrivateIds.d.ts +4 -0
  24. package/dist/types/sync/syncServerToClientOnly.d.ts +3 -0
  25. package/dist/types/types/CloudConnectionStatus.d.ts +0 -0
  26. package/dist/types/types/ConnectionStatus.d.ts +0 -0
  27. package/dist/types/types/LoginState.d.ts +41 -0
  28. package/dist/types/types/SyncConnectionStatus.d.ts +1 -0
  29. package/dist/types/types/SyncFlowStatus.d.ts +6 -0
  30. package/dist/types/types/SyncStatus.d.ts +6 -0
  31. package/dist/umd/dexie-cloud-addon.js +571 -564
  32. package/dist/umd/dexie-cloud-addon.js.map +1 -1
  33. package/dist/umd/dexie-cloud-addon.min.js +1 -1
  34. package/dist/umd/dexie-cloud-addon.min.js.map +1 -1
  35. package/dist/umd/service-worker.js +30 -21
  36. package/dist/umd/service-worker.js.map +1 -1
  37. package/dist/umd/service-worker.min.js +1 -1
  38. package/dist/umd/service-worker.min.js.map +1 -1
  39. package/dist/umd-modern/dexie-cloud-addon.js +23 -17
  40. package/dist/umd-modern/dexie-cloud-addon.js.map +1 -1
  41. package/package.json +1 -1
@@ -108,7 +108,7 @@
108
108
  *
109
109
  * ==========================================================================
110
110
  *
111
- * Version 4.0.0-beta.18, Sun Apr 10 2022
111
+ * Version 4.0.0-beta.19, Fri May 20 2022
112
112
  *
113
113
  * https://dexie.org
114
114
  *
@@ -280,8 +280,8 @@
280
280
  switch (entry.type) {
281
281
  case "ups":
282
282
  // Adjust the existing upsert with additional updates
283
- for (var _j = 0, _k = Object.entries(changeSpec); _j < _k.length; _j++) {
284
- var _l = _k[_j], propPath = _l[0], value = _l[1];
283
+ for (var _k = 0, _l = Object.entries(changeSpec); _k < _l.length; _k++) {
284
+ var _m = _l[_k], propPath = _m[0], value = _m[1];
285
285
  setByKeyPath(entry.val, propPath, value);
286
286
  }
287
287
  break;
@@ -308,10 +308,10 @@
308
308
  return target;
309
309
  }
310
310
  function applyOperations(target, ops) {
311
- for (var _j = 0, ops_1 = ops; _j < ops_1.length; _j++) {
312
- var _k = ops_1[_j], table = _k.table, muts = _k.muts;
313
- for (var _l = 0, muts_1 = muts; _l < muts_1.length; _l++) {
314
- var mut = muts_1[_l];
311
+ for (var _k = 0, ops_1 = ops; _k < ops_1.length; _k++) {
312
+ var _l = ops_1[_k], table = _l.table, muts = _l.muts;
313
+ for (var _m = 0, muts_1 = muts; _m < muts_1.length; _m++) {
314
+ var mut = muts_1[_m];
315
315
  applyOperation(target, table, mut);
316
316
  }
317
317
  }
@@ -320,10 +320,10 @@
320
320
  changesToSubtract // additional mutations on client during syncWithServer()
321
321
  ) {
322
322
  var _a, _b, _c;
323
- for (var _j = 0, _k = Object.entries(changesToSubtract); _j < _k.length; _j++) {
324
- var _l = _k[_j], table = _l[0], mutationSet = _l[1];
325
- for (var _m = 0, _o = Object.entries(mutationSet); _m < _o.length; _m++) {
326
- var _p = _o[_m], key = _p[0], mut = _p[1];
323
+ for (var _k = 0, _l = Object.entries(changesToSubtract); _k < _l.length; _k++) {
324
+ var _m = _l[_k], table = _m[0], mutationSet = _m[1];
325
+ for (var _o = 0, _p = Object.entries(mutationSet); _o < _p.length; _o++) {
326
+ var _q = _p[_o], key = _q[0], mut = _q[1];
327
327
  switch (mut.type) {
328
328
  case 'ups':
329
329
  {
@@ -353,8 +353,8 @@
353
353
  switch (targetMut.type) {
354
354
  case 'ups':
355
355
  // Adjust the server upsert with locally updated values.
356
- for (var _q = 0, _r = Object.entries(mut.mod); _q < _r.length; _q++) {
357
- var _s = _r[_q], propPath = _s[0], value = _s[1];
356
+ for (var _r = 0, _s = Object.entries(mut.mod); _r < _s.length; _r++) {
357
+ var _t = _s[_r], propPath = _t[0], value = _t[1];
358
358
  setByKeyPath(targetMut.val, propPath, value);
359
359
  }
360
360
  break;
@@ -363,8 +363,8 @@
363
363
  break;
364
364
  case 'upd':
365
365
  // Remove the local update props from the server update mutation.
366
- for (var _t = 0, _u = Object.keys(mut.mod); _t < _u.length; _t++) {
367
- var propPath = _u[_t];
366
+ for (var _u = 0, _v = Object.keys(mut.mod); _u < _v.length; _u++) {
367
+ var propPath = _v[_u];
368
368
  delete targetMut.mod[propPath];
369
369
  }
370
370
  break;
@@ -387,10 +387,10 @@
387
387
  var txid = randomString$1(16);
388
388
  // Convert data into a temporary map to collect mutations of same table and type
389
389
  var map = {};
390
- for (var _j = 0, _k = Object.entries(inSet); _j < _k.length; _j++) {
391
- var _l = _k[_j], table = _l[0], ops = _l[1];
392
- for (var _m = 0, _o = Object.entries(ops); _m < _o.length; _m++) {
393
- var _p = _o[_m], key = _p[0], op = _p[1];
390
+ for (var _k = 0, _l = Object.entries(inSet); _k < _l.length; _k++) {
391
+ var _m = _l[_k], table = _m[0], ops = _m[1];
392
+ for (var _o = 0, _p = Object.entries(ops); _o < _p.length; _o++) {
393
+ var _q = _p[_o], key = _q[0], op = _q[1];
394
394
  var mapEntry = map[table] || (map[table] = {});
395
395
  var ops_2 = mapEntry[op.type] || (mapEntry[op.type] = []);
396
396
  ops_2.push(Object.assign({ key: key }, op)); // DBKeyMutation doesn't contain key, so we need to bring it in.
@@ -398,14 +398,14 @@
398
398
  }
399
399
  // Start computing the resulting format:
400
400
  var result = [];
401
- for (var _q = 0, _r = Object.entries(map); _q < _r.length; _q++) {
402
- var _s = _r[_q], table = _s[0], ops = _s[1];
401
+ for (var _r = 0, _s = Object.entries(map); _r < _s.length; _r++) {
402
+ var _t = _s[_r], table = _t[0], ops = _t[1];
403
403
  var resultEntry = {
404
404
  table: table,
405
405
  muts: [],
406
406
  };
407
- for (var _t = 0, _u = Object.entries(ops); _t < _u.length; _t++) {
408
- var _v = _u[_t], optype = _v[0], muts = _v[1];
407
+ for (var _u = 0, _v = Object.entries(ops); _u < _v.length; _u++) {
408
+ var _w = _v[_u], optype = _w[0], muts = _w[1];
409
409
  switch (optype) {
410
410
  case "ups": {
411
411
  var op = {
@@ -2052,18 +2052,18 @@
2052
2052
  function registerSyncEvent(db, purpose) {
2053
2053
  return __awaiter$1(this, void 0, void 0, function () {
2054
2054
  var sw, e_3;
2055
- return __generator$1(this, function (_j) {
2056
- switch (_j.label) {
2055
+ return __generator$1(this, function (_k) {
2056
+ switch (_k.label) {
2057
2057
  case 0:
2058
- _j.trys.push([0, 4, , 5]);
2058
+ _k.trys.push([0, 4, , 5]);
2059
2059
  return [4 /*yield*/, navigator.serviceWorker.ready];
2060
2060
  case 1:
2061
- sw = _j.sent();
2061
+ sw = _k.sent();
2062
2062
  if (!(purpose === "push" && sw.sync)) return [3 /*break*/, 3];
2063
2063
  return [4 /*yield*/, sw.sync.register("dexie-cloud:".concat(db.name))];
2064
2064
  case 2:
2065
- _j.sent();
2066
- _j.label = 3;
2065
+ _k.sent();
2066
+ _k.label = 3;
2067
2067
  case 3:
2068
2068
  if (sw.active) {
2069
2069
  // Use postMessage for pull syncs and for browsers not supporting sync event (Firefox, Safari).
@@ -2079,7 +2079,7 @@
2079
2079
  }
2080
2080
  return [2 /*return*/];
2081
2081
  case 4:
2082
- e_3 = _j.sent();
2082
+ e_3 = _k.sent();
2083
2083
  if (!hasComplainedAboutSyncEvent) {
2084
2084
  console.debug("Dexie Cloud: Could not register sync event", e_3);
2085
2085
  hasComplainedAboutSyncEvent = true;
@@ -2094,33 +2094,33 @@
2094
2094
  var _a;
2095
2095
  return __awaiter$1(this, void 0, void 0, function () {
2096
2096
  var periodicSync, e_4, e_5;
2097
- return __generator$1(this, function (_j) {
2098
- switch (_j.label) {
2097
+ return __generator$1(this, function (_k) {
2098
+ switch (_k.label) {
2099
2099
  case 0:
2100
- _j.trys.push([0, 8, , 9]);
2100
+ _k.trys.push([0, 8, , 9]);
2101
2101
  return [4 /*yield*/, navigator.serviceWorker.ready];
2102
2102
  case 1:
2103
- periodicSync = (_j.sent()).periodicSync;
2103
+ periodicSync = (_k.sent()).periodicSync;
2104
2104
  if (!periodicSync) return [3 /*break*/, 6];
2105
- _j.label = 2;
2105
+ _k.label = 2;
2106
2106
  case 2:
2107
- _j.trys.push([2, 4, , 5]);
2107
+ _k.trys.push([2, 4, , 5]);
2108
2108
  return [4 /*yield*/, periodicSync.register("dexie-cloud:".concat(db.name), (_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.periodicSync)];
2109
2109
  case 3:
2110
- _j.sent();
2110
+ _k.sent();
2111
2111
  console.debug("Dexie Cloud: Successfully registered periodicsync event for ".concat(db.name));
2112
2112
  return [3 /*break*/, 5];
2113
2113
  case 4:
2114
- e_4 = _j.sent();
2114
+ e_4 = _k.sent();
2115
2115
  console.debug("Dexie Cloud: Failed to register periodic sync. Your PWA must be installed to allow background sync.", e_4);
2116
2116
  return [3 /*break*/, 5];
2117
2117
  case 5: return [3 /*break*/, 7];
2118
2118
  case 6:
2119
2119
  console.debug("Dexie Cloud: periodicSync not supported.");
2120
- _j.label = 7;
2120
+ _k.label = 7;
2121
2121
  case 7: return [3 /*break*/, 9];
2122
2122
  case 8:
2123
- e_5 = _j.sent();
2123
+ e_5 = _k.sent();
2124
2124
  console.debug("Dexie Cloud: Could not register periodicSync for ".concat(db.name), e_5);
2125
2125
  return [3 /*break*/, 9];
2126
2126
  case 9: return [2 /*return*/];
@@ -2175,8 +2175,8 @@
2175
2175
  }
2176
2176
  function alertUser(userInteraction, title) {
2177
2177
  var alerts = [];
2178
- for (var _j = 2; _j < arguments.length; _j++) {
2179
- alerts[_j - 2] = arguments[_j];
2178
+ for (var _k = 2; _k < arguments.length; _k++) {
2179
+ alerts[_k - 2] = arguments[_k];
2180
2180
  }
2181
2181
  return interactWithUser(userInteraction, {
2182
2182
  type: 'message-alert',
@@ -2188,11 +2188,11 @@
2188
2188
  function promptForEmail(userInteraction, title, emailHint) {
2189
2189
  return __awaiter$1(this, void 0, void 0, function () {
2190
2190
  var email;
2191
- return __generator$1(this, function (_j) {
2192
- switch (_j.label) {
2191
+ return __generator$1(this, function (_k) {
2192
+ switch (_k.label) {
2193
2193
  case 0:
2194
2194
  email = emailHint || '';
2195
- _j.label = 1;
2195
+ _k.label = 1;
2196
2196
  case 1:
2197
2197
  if (!(!email || !/^[\w-\.]+@([\w-]+\.)+[\w-]{2,10}$/.test(email))) return [3 /*break*/, 3];
2198
2198
  return [4 /*yield*/, interactWithUser(userInteraction, {
@@ -2216,7 +2216,7 @@
2216
2216
  },
2217
2217
  })];
2218
2218
  case 2:
2219
- email = (_j.sent()).email;
2219
+ email = (_k.sent()).email;
2220
2220
  return [3 /*break*/, 1];
2221
2221
  case 3: return [2 /*return*/, email];
2222
2222
  }
@@ -2226,8 +2226,8 @@
2226
2226
  function promptForOTP(userInteraction, email, alert) {
2227
2227
  return __awaiter$1(this, void 0, void 0, function () {
2228
2228
  var alerts, otp;
2229
- return __generator$1(this, function (_j) {
2230
- switch (_j.label) {
2229
+ return __generator$1(this, function (_k) {
2230
+ switch (_k.label) {
2231
2231
  case 0:
2232
2232
  alerts = [
2233
2233
  {
@@ -2253,7 +2253,7 @@
2253
2253
  },
2254
2254
  })];
2255
2255
  case 1:
2256
- otp = (_j.sent()).otp;
2256
+ otp = (_k.sent()).otp;
2257
2257
  return [2 /*return*/, otp];
2258
2258
  }
2259
2259
  });
@@ -2263,11 +2263,11 @@
2263
2263
  var _a, _b;
2264
2264
  return __awaiter$1(this, void 0, void 0, function () {
2265
2265
  var currentUser, accessToken, accessTokenExpiration, refreshToken, refreshTokenExpiration, claims, expTime, refreshExpTime, refreshedLogin;
2266
- return __generator$1(this, function (_j) {
2267
- switch (_j.label) {
2266
+ return __generator$1(this, function (_k) {
2267
+ switch (_k.label) {
2268
2268
  case 0: return [4 /*yield*/, db.getCurrentUser()];
2269
2269
  case 1:
2270
- currentUser = _j.sent();
2270
+ currentUser = _k.sent();
2271
2271
  accessToken = currentUser.accessToken, accessTokenExpiration = currentUser.accessTokenExpiration, refreshToken = currentUser.refreshToken, refreshTokenExpiration = currentUser.refreshTokenExpiration, claims = currentUser.claims;
2272
2272
  if (!accessToken)
2273
2273
  return [2 /*return*/];
@@ -2284,13 +2284,13 @@
2284
2284
  }
2285
2285
  return [4 /*yield*/, refreshAccessToken(db.cloud.options.databaseUrl, currentUser)];
2286
2286
  case 2:
2287
- refreshedLogin = _j.sent();
2287
+ refreshedLogin = _k.sent();
2288
2288
  return [4 /*yield*/, db.table('$logins').update(claims.sub, {
2289
2289
  accessToken: refreshedLogin.accessToken,
2290
2290
  accessTokenExpiration: refreshedLogin.accessTokenExpiration,
2291
2291
  })];
2292
2292
  case 3:
2293
- _j.sent();
2293
+ _k.sent();
2294
2294
  return [2 /*return*/, refreshedLogin.accessToken];
2295
2295
  }
2296
2296
  });
@@ -2298,8 +2298,8 @@
2298
2298
  }
2299
2299
  function authenticate(url, context, fetchToken, userInteraction, hints) {
2300
2300
  return __awaiter$1(this, void 0, void 0, function () {
2301
- return __generator$1(this, function (_j) {
2302
- switch (_j.label) {
2301
+ return __generator$1(this, function (_k) {
2302
+ switch (_k.label) {
2303
2303
  case 0:
2304
2304
  if (!(context.accessToken &&
2305
2305
  context.accessTokenExpiration.getTime() > Date.now())) return [3 /*break*/, 1];
@@ -2309,9 +2309,9 @@
2309
2309
  (!context.refreshTokenExpiration ||
2310
2310
  context.refreshTokenExpiration.getTime() > Date.now()))) return [3 /*break*/, 3];
2311
2311
  return [4 /*yield*/, refreshAccessToken(url, context)];
2312
- case 2: return [2 /*return*/, _j.sent()];
2312
+ case 2: return [2 /*return*/, _k.sent()];
2313
2313
  case 3: return [4 /*yield*/, userAuthenticate(context, fetchToken, userInteraction, hints)];
2314
- case 4: return [2 /*return*/, _j.sent()];
2314
+ case 4: return [2 /*return*/, _k.sent()];
2315
2315
  }
2316
2316
  });
2317
2317
  });
@@ -2319,8 +2319,8 @@
2319
2319
  function refreshAccessToken(url, login) {
2320
2320
  return __awaiter$1(this, void 0, void 0, function () {
2321
2321
  var time_stamp, signing_algorithm, textEncoder, data, binarySignature, signature, tokenRequest, res, response;
2322
- return __generator$1(this, function (_j) {
2323
- switch (_j.label) {
2322
+ return __generator$1(this, function (_k) {
2323
+ switch (_k.label) {
2324
2324
  case 0:
2325
2325
  if (!login.refreshToken)
2326
2326
  throw new Error("Cannot refresh token - refresh token is missing.");
@@ -2332,7 +2332,7 @@
2332
2332
  data = textEncoder.encode(login.refreshToken + time_stamp);
2333
2333
  return [4 /*yield*/, crypto.subtle.sign(signing_algorithm, login.nonExportablePrivateKey, data)];
2334
2334
  case 1:
2335
- binarySignature = _j.sent();
2335
+ binarySignature = _k.sent();
2336
2336
  signature = b64encode(binarySignature);
2337
2337
  tokenRequest = {
2338
2338
  grant_type: 'refresh_token',
@@ -2349,12 +2349,12 @@
2349
2349
  mode: 'cors',
2350
2350
  })];
2351
2351
  case 2:
2352
- res = _j.sent();
2352
+ res = _k.sent();
2353
2353
  if (res.status !== 200)
2354
2354
  throw new Error("RefreshToken: Status ".concat(res.status, " from ").concat(url, "/token"));
2355
2355
  return [4 /*yield*/, res.json()];
2356
2356
  case 3:
2357
- response = _j.sent();
2357
+ response = _k.sent();
2358
2358
  login.accessToken = response.accessToken;
2359
2359
  login.accessTokenExpiration = response.accessTokenExpiration
2360
2360
  ? new Date(response.accessTokenExpiration)
@@ -2366,9 +2366,9 @@
2366
2366
  }
2367
2367
  function userAuthenticate(context, fetchToken, userInteraction, hints) {
2368
2368
  return __awaiter$1(this, void 0, void 0, function () {
2369
- var _j, privateKey, publicKey, publicKeySPKI, publicKeyPEM, response2, error_1;
2370
- return __generator$1(this, function (_k) {
2371
- switch (_k.label) {
2369
+ var _k, privateKey, publicKey, publicKeySPKI, publicKeyPEM, response2, error_1;
2370
+ return __generator$1(this, function (_l) {
2371
+ switch (_l.label) {
2372
2372
  case 0: return [4 /*yield*/, crypto.subtle.generateKey({
2373
2373
  name: 'RSASSA-PKCS1-v1_5',
2374
2374
  modulusLength: 2048,
@@ -2377,24 +2377,24 @@
2377
2377
  }, false, // Non-exportable...
2378
2378
  ['sign', 'verify'])];
2379
2379
  case 1:
2380
- _j = _k.sent(), privateKey = _j.privateKey, publicKey = _j.publicKey;
2380
+ _k = _l.sent(), privateKey = _k.privateKey, publicKey = _k.publicKey;
2381
2381
  if (!privateKey || !publicKey)
2382
2382
  throw new Error("Could not generate RSA keypair"); // Typings suggest these can be undefined...
2383
2383
  context.nonExportablePrivateKey = privateKey; //...but storable!
2384
2384
  return [4 /*yield*/, crypto.subtle.exportKey('spki', publicKey)];
2385
2385
  case 2:
2386
- publicKeySPKI = _k.sent();
2386
+ publicKeySPKI = _l.sent();
2387
2387
  publicKeyPEM = spkiToPEM(publicKeySPKI);
2388
2388
  context.publicKey = publicKey;
2389
- _k.label = 3;
2389
+ _l.label = 3;
2390
2390
  case 3:
2391
- _k.trys.push([3, 7, , 9]);
2391
+ _l.trys.push([3, 7, , 9]);
2392
2392
  return [4 /*yield*/, fetchToken({
2393
2393
  public_key: publicKeyPEM,
2394
2394
  hints: hints,
2395
2395
  })];
2396
2396
  case 4:
2397
- response2 = _k.sent();
2397
+ response2 = _l.sent();
2398
2398
  if (response2.type !== 'tokens')
2399
2399
  throw new Error("Unexpected response type from token endpoint: ".concat(response2.type));
2400
2400
  context.accessToken = response2.accessToken;
@@ -2415,11 +2415,11 @@
2415
2415
  alerts: response2.alerts,
2416
2416
  })];
2417
2417
  case 5:
2418
- _k.sent();
2419
- _k.label = 6;
2418
+ _l.sent();
2419
+ _l.label = 6;
2420
2420
  case 6: return [2 /*return*/, context];
2421
2421
  case 7:
2422
- error_1 = _k.sent();
2422
+ error_1 = _l.sent();
2423
2423
  return [4 /*yield*/, alertUser(userInteraction, 'Authentication Failed', {
2424
2424
  type: 'error',
2425
2425
  messageCode: 'GENERIC_ERROR',
@@ -2427,7 +2427,7 @@
2427
2427
  messageParams: {}
2428
2428
  }).catch(function () { })];
2429
2429
  case 8:
2430
- _k.sent();
2430
+ _l.sent();
2431
2431
  throw error_1;
2432
2432
  case 9: return [2 /*return*/];
2433
2433
  }
@@ -2470,7 +2470,7 @@
2470
2470
  AuthPersistedContext.prototype.save = function () {
2471
2471
  return __awaiter$1(this, void 0, void 0, function () {
2472
2472
  var db;
2473
- return __generator$1(this, function (_j) {
2473
+ return __generator$1(this, function (_k) {
2474
2474
  db = wm$1.get(this);
2475
2475
  db.table("$logins").put(this);
2476
2476
  return [2 /*return*/];
@@ -2497,13 +2497,13 @@
2497
2497
  }(Error));
2498
2498
  function otpFetchTokenCallback(db) {
2499
2499
  var userInteraction = db.cloud.userInteraction;
2500
- return function otpAuthenticate(_j) {
2501
- var public_key = _j.public_key, hints = _j.hints;
2500
+ return function otpAuthenticate(_k) {
2501
+ var public_key = _k.public_key, hints = _k.hints;
2502
2502
  var _a;
2503
2503
  return __awaiter$1(this, void 0, void 0, function () {
2504
- var tokenRequest, url, demo_user, email, res1, errMsg, response, otp, res2, errorText, _j, errMsg, response2;
2505
- return __generator$1(this, function (_k) {
2506
- switch (_k.label) {
2504
+ var tokenRequest, url, demo_user, email, res1, errMsg, response, otp, res2, errorText, _k, errMsg, response2;
2505
+ return __generator$1(this, function (_l) {
2506
+ switch (_l.label) {
2507
2507
  case 0:
2508
2508
  url = (_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.databaseUrl;
2509
2509
  if (!url)
@@ -2511,7 +2511,7 @@
2511
2511
  if (!((hints === null || hints === void 0 ? void 0 : hints.grant_type) === 'demo')) return [3 /*break*/, 2];
2512
2512
  return [4 /*yield*/, promptForEmail(userInteraction, 'Enter a demo user email', (hints === null || hints === void 0 ? void 0 : hints.email) || (hints === null || hints === void 0 ? void 0 : hints.userId))];
2513
2513
  case 1:
2514
- demo_user = _k.sent();
2514
+ demo_user = _l.sent();
2515
2515
  tokenRequest = {
2516
2516
  demo_user: demo_user,
2517
2517
  grant_type: 'demo',
@@ -2521,25 +2521,25 @@
2521
2521
  return [3 /*break*/, 4];
2522
2522
  case 2: return [4 /*yield*/, promptForEmail(userInteraction, 'Enter email address', hints === null || hints === void 0 ? void 0 : hints.email)];
2523
2523
  case 3:
2524
- email = _k.sent();
2524
+ email = _l.sent();
2525
2525
  tokenRequest = {
2526
2526
  email: email,
2527
2527
  grant_type: 'otp',
2528
2528
  scopes: ['ACCESS_DB'],
2529
2529
  public_key: public_key,
2530
2530
  };
2531
- _k.label = 4;
2531
+ _l.label = 4;
2532
2532
  case 4: return [4 /*yield*/, fetch("".concat(url, "/token"), {
2533
2533
  body: JSON.stringify(tokenRequest),
2534
2534
  method: 'post',
2535
2535
  headers: { 'Content-Type': 'application/json', mode: 'cors' },
2536
2536
  })];
2537
2537
  case 5:
2538
- res1 = _k.sent();
2538
+ res1 = _l.sent();
2539
2539
  if (!(res1.status !== 200)) return [3 /*break*/, 8];
2540
2540
  return [4 /*yield*/, res1.text()];
2541
2541
  case 6:
2542
- errMsg = _k.sent();
2542
+ errMsg = _l.sent();
2543
2543
  return [4 /*yield*/, alertUser(userInteraction, "Token request failed", {
2544
2544
  type: 'error',
2545
2545
  messageCode: 'GENERIC_ERROR',
@@ -2547,11 +2547,11 @@
2547
2547
  messageParams: {}
2548
2548
  }).catch(function () { })];
2549
2549
  case 7:
2550
- _k.sent();
2550
+ _l.sent();
2551
2551
  throw new HttpError(res1, errMsg);
2552
2552
  case 8: return [4 /*yield*/, res1.json()];
2553
2553
  case 9:
2554
- response = _k.sent();
2554
+ response = _l.sent();
2555
2555
  if (!(response.type === 'tokens')) return [3 /*break*/, 10];
2556
2556
  // Demo user request can get a "tokens" response right away
2557
2557
  return [2 /*return*/, response];
@@ -2561,7 +2561,7 @@
2561
2561
  throw new Error("Unexpected response from ".concat(url, "/token"));
2562
2562
  return [4 /*yield*/, promptForOTP(userInteraction, tokenRequest.email)];
2563
2563
  case 11:
2564
- otp = _k.sent();
2564
+ otp = _l.sent();
2565
2565
  tokenRequest.otp = otp || '';
2566
2566
  tokenRequest.otp_id = response.otp_id;
2567
2567
  return [4 /*yield*/, fetch("".concat(url, "/token"), {
@@ -2571,14 +2571,14 @@
2571
2571
  mode: 'cors',
2572
2572
  })];
2573
2573
  case 12:
2574
- res2 = _k.sent();
2575
- _k.label = 13;
2574
+ res2 = _l.sent();
2575
+ _l.label = 13;
2576
2576
  case 13:
2577
2577
  if (!(res2.status === 401)) return [3 /*break*/, 17];
2578
2578
  return [4 /*yield*/, res2.text()];
2579
2579
  case 14:
2580
- errorText = _k.sent();
2581
- _j = tokenRequest;
2580
+ errorText = _l.sent();
2581
+ _k = tokenRequest;
2582
2582
  return [4 /*yield*/, promptForOTP(userInteraction, tokenRequest.email, {
2583
2583
  type: 'error',
2584
2584
  messageCode: 'INVALID_OTP',
@@ -2586,7 +2586,7 @@
2586
2586
  messageParams: {}
2587
2587
  })];
2588
2588
  case 15:
2589
- _j.otp = _k.sent();
2589
+ _k.otp = _l.sent();
2590
2590
  return [4 /*yield*/, fetch("".concat(url, "/token"), {
2591
2591
  body: JSON.stringify(tokenRequest),
2592
2592
  method: 'post',
@@ -2594,13 +2594,13 @@
2594
2594
  mode: 'cors',
2595
2595
  })];
2596
2596
  case 16:
2597
- res2 = _k.sent();
2597
+ res2 = _l.sent();
2598
2598
  return [3 /*break*/, 13];
2599
2599
  case 17:
2600
2600
  if (!(res2.status !== 200)) return [3 /*break*/, 20];
2601
2601
  return [4 /*yield*/, res2.text()];
2602
2602
  case 18:
2603
- errMsg = _k.sent();
2603
+ errMsg = _l.sent();
2604
2604
  return [4 /*yield*/, alertUser(userInteraction, "OTP Authentication Failed", {
2605
2605
  type: 'error',
2606
2606
  messageCode: 'GENERIC_ERROR',
@@ -2608,11 +2608,11 @@
2608
2608
  messageParams: {}
2609
2609
  }).catch(function () { })];
2610
2610
  case 19:
2611
- _k.sent();
2611
+ _l.sent();
2612
2612
  throw new HttpError(res2, errMsg);
2613
2613
  case 20: return [4 /*yield*/, res2.json()];
2614
2614
  case 21:
2615
- response2 = _k.sent();
2615
+ response2 = _l.sent();
2616
2616
  return [2 /*return*/, response2];
2617
2617
  case 22: throw new Error("Unexpected response from ".concat(url, "/token"));
2618
2618
  }
@@ -2635,19 +2635,19 @@
2635
2635
  return __awaiter$1(this, void 0, void 0, function () {
2636
2636
  var $logins;
2637
2637
  var _this_1 = this;
2638
- return __generator$1(this, function (_j) {
2639
- switch (_j.label) {
2638
+ return __generator$1(this, function (_k) {
2639
+ switch (_k.label) {
2640
2640
  case 0:
2641
2641
  if (user.userId === db.cloud.currentUserId)
2642
2642
  return [2 /*return*/]; // Already this user.
2643
2643
  $logins = db.table('$logins');
2644
2644
  return [4 /*yield*/, db.transaction('rw', $logins, function (tx) { return __awaiter$1(_this_1, void 0, void 0, function () {
2645
2645
  var existingLogins;
2646
- return __generator$1(this, function (_j) {
2647
- switch (_j.label) {
2646
+ return __generator$1(this, function (_k) {
2647
+ switch (_k.label) {
2648
2648
  case 0: return [4 /*yield*/, $logins.toArray()];
2649
2649
  case 1:
2650
- existingLogins = _j.sent();
2650
+ existingLogins = _k.sent();
2651
2651
  return [4 /*yield*/, Promise.all(existingLogins
2652
2652
  .filter(function (login) { return login.userId !== user.userId && login.isLoggedIn; })
2653
2653
  .map(function (login) {
@@ -2655,19 +2655,19 @@
2655
2655
  return $logins.put(login);
2656
2656
  }))];
2657
2657
  case 2:
2658
- _j.sent();
2658
+ _k.sent();
2659
2659
  user.isLoggedIn = true;
2660
2660
  user.lastLogin = new Date();
2661
2661
  return [4 /*yield*/, user.save()];
2662
2662
  case 3:
2663
- _j.sent();
2663
+ _k.sent();
2664
2664
  console.debug('Saved new user', user.email);
2665
2665
  return [2 /*return*/];
2666
2666
  }
2667
2667
  });
2668
2668
  }); })];
2669
2669
  case 1:
2670
- _j.sent();
2670
+ _k.sent();
2671
2671
  return [4 /*yield*/, new Promise(function (resolve) {
2672
2672
  if (db.cloud.currentUserId === user.userId) {
2673
2673
  resolve(null);
@@ -2682,7 +2682,7 @@
2682
2682
  }
2683
2683
  })];
2684
2684
  case 2:
2685
- _j.sent();
2685
+ _k.sent();
2686
2686
  return [2 /*return*/];
2687
2687
  }
2688
2688
  });
@@ -2691,11 +2691,11 @@
2691
2691
  function login(db, hints) {
2692
2692
  return __awaiter$1(this, void 0, void 0, function () {
2693
2693
  var currentUser, context;
2694
- return __generator$1(this, function (_j) {
2695
- switch (_j.label) {
2694
+ return __generator$1(this, function (_k) {
2695
+ switch (_k.label) {
2696
2696
  case 0: return [4 /*yield*/, db.getCurrentUser()];
2697
2697
  case 1:
2698
- currentUser = _j.sent();
2698
+ currentUser = _k.sent();
2699
2699
  if (currentUser.isLoggedIn) {
2700
2700
  if (hints) {
2701
2701
  if (hints.email && db.cloud.currentUser.value.email !== hints.email) {
@@ -2714,13 +2714,13 @@
2714
2714
  });
2715
2715
  return [4 /*yield*/, authenticate(db.cloud.options.databaseUrl, context, db.cloud.options.fetchTokens || otpFetchTokenCallback(db), db.cloud.userInteraction, hints)];
2716
2716
  case 2:
2717
- _j.sent();
2717
+ _k.sent();
2718
2718
  return [4 /*yield*/, context.save()];
2719
2719
  case 3:
2720
- _j.sent();
2720
+ _k.sent();
2721
2721
  return [4 /*yield*/, setCurrentUser(db, context)];
2722
2722
  case 4:
2723
- _j.sent();
2723
+ _k.sent();
2724
2724
  // Make sure to resync as the new login will be authorized
2725
2725
  // for new realms.
2726
2726
  triggerSync(db, "pull");
@@ -2838,18 +2838,18 @@
2838
2838
  };
2839
2839
  return BroadcastedAndLocalEvent;
2840
2840
  }(rxjs.Observable));
2841
- function computeRealmSetHash(_j) {
2842
- var realms = _j.realms, inviteRealms = _j.inviteRealms;
2841
+ function computeRealmSetHash(_k) {
2842
+ var realms = _k.realms, inviteRealms = _k.inviteRealms;
2843
2843
  return __awaiter$1(this, void 0, void 0, function () {
2844
2844
  var data, byteArray, digestBytes, base64;
2845
- return __generator$1(this, function (_j) {
2846
- switch (_j.label) {
2845
+ return __generator$1(this, function (_k) {
2846
+ switch (_k.label) {
2847
2847
  case 0:
2848
2848
  data = JSON.stringify(__spreadArray$1(__spreadArray$1([], realms.map(function (realmId) { return ({ realmId: realmId, accepted: true }); }), true), inviteRealms.map(function (realmId) { return ({ realmId: realmId, accepted: false }); }), true).sort(function (a, b) { return a.realmId < b.realmId ? -1 : a.realmId > b.realmId ? 1 : 0; }));
2849
2849
  byteArray = new TextEncoder().encode(data);
2850
2850
  return [4 /*yield*/, crypto.subtle.digest('SHA-1', byteArray)];
2851
2851
  case 1:
2852
- digestBytes = _j.sent();
2852
+ digestBytes = _k.sent();
2853
2853
  base64 = b64encode(digestBytes);
2854
2854
  return [2 /*return*/, base64];
2855
2855
  }
@@ -2858,14 +2858,14 @@
2858
2858
  }
2859
2859
  function getSyncableTables(db) {
2860
2860
  return Object.entries(db.cloud.schema || {})
2861
- .filter(function (_j) {
2862
- var markedForSync = _j[1].markedForSync;
2861
+ .filter(function (_k) {
2862
+ var markedForSync = _k[1].markedForSync;
2863
2863
  return markedForSync;
2864
2864
  })
2865
- .map(function (_j) {
2866
- var tbl = _j[0];
2867
- return db.tables.filter(function (_j) {
2868
- var name = _j.name;
2865
+ .map(function (_k) {
2866
+ var tbl = _k[0];
2867
+ return db.tables.filter(function (_k) {
2868
+ var name = _k.name;
2869
2869
  return name === tbl;
2870
2870
  })[0];
2871
2871
  })
@@ -2885,17 +2885,17 @@
2885
2885
  function flatten(a) {
2886
2886
  return concat.apply([], a);
2887
2887
  }
2888
- function listClientChanges(mutationTables, db, _j) {
2889
- var _k = _j === void 0 ? {} : _j, _l = _k.since, since = _l === void 0 ? {} : _l, _m = _k.limit, limit = _m === void 0 ? Infinity : _m;
2888
+ function listClientChanges(mutationTables, db, _k) {
2889
+ var _l = _k === void 0 ? {} : _k, _m = _l.since, since = _m === void 0 ? {} : _m, _o = _l.limit, limit = _o === void 0 ? Infinity : _o;
2890
2890
  return __awaiter$1(this, void 0, void 0, function () {
2891
- var allMutsOnTables, sorted, result, currentEntry, currentTxid, _j, sorted_1, _k, table, mut;
2891
+ var allMutsOnTables, sorted, result, currentEntry, currentTxid, _k, sorted_1, _l, table, mut;
2892
2892
  var _this_1 = this;
2893
- return __generator$1(this, function (_l) {
2894
- switch (_l.label) {
2893
+ return __generator$1(this, function (_m) {
2894
+ switch (_m.label) {
2895
2895
  case 0: return [4 /*yield*/, Promise.all(mutationTables.map(function (mutationTable) { return __awaiter$1(_this_1, void 0, void 0, function () {
2896
2896
  var tableName, lastRevision, query, muts;
2897
- return __generator$1(this, function (_j) {
2898
- switch (_j.label) {
2897
+ return __generator$1(this, function (_k) {
2898
+ switch (_k.label) {
2899
2899
  case 0:
2900
2900
  tableName = getTableFromMutationTable(mutationTable.name);
2901
2901
  lastRevision = since[tableName];
@@ -2906,7 +2906,7 @@
2906
2906
  query = query.limit(limit);
2907
2907
  return [4 /*yield*/, query.toArray()];
2908
2908
  case 1:
2909
- muts = _j.sent();
2909
+ muts = _k.sent();
2910
2910
  //const objTable = db.table(tableName);
2911
2911
  /*for (const mut of muts) {
2912
2912
  if (mut.type === "insert" || mut.type === "upsert") {
@@ -2921,13 +2921,13 @@
2921
2921
  });
2922
2922
  }); }))];
2923
2923
  case 1:
2924
- allMutsOnTables = _l.sent();
2924
+ allMutsOnTables = _m.sent();
2925
2925
  sorted = flatten(allMutsOnTables).sort(function (a, b) { return a.mut.ts - b.mut.ts; });
2926
2926
  result = [];
2927
2927
  currentEntry = null;
2928
2928
  currentTxid = null;
2929
- for (_j = 0, sorted_1 = sorted; _j < sorted_1.length; _j++) {
2930
- _k = sorted_1[_j], table = _k.table, mut = _k.mut;
2929
+ for (_k = 0, sorted_1 = sorted; _k < sorted_1.length; _k++) {
2930
+ _l = sorted_1[_k], table = _l.table, mut = _l.mut;
2931
2931
  if (currentEntry &&
2932
2932
  currentEntry.table === table &&
2933
2933
  currentTxid === mut.txid) {
@@ -2957,8 +2957,8 @@
2957
2957
  return __awaiter$1(this, void 0, void 0, function () {
2958
2958
  var txid, ignoredRealms_1, upserts;
2959
2959
  var _this_1 = this;
2960
- return __generator$1(this, function (_j) {
2961
- switch (_j.label) {
2960
+ return __generator$1(this, function (_k) {
2961
+ switch (_k.label) {
2962
2962
  case 0:
2963
2963
  txid = "upload-".concat(randomString(8));
2964
2964
  if (!currentUser.isLoggedIn) return [3 /*break*/, 2];
@@ -2966,8 +2966,8 @@
2966
2966
  ignoredRealms_1 = new Set(alreadySyncedRealms || []);
2967
2967
  return [4 /*yield*/, Promise.all(tablesToSyncify.map(function (table) { return __awaiter$1(_this_1, void 0, void 0, function () {
2968
2968
  var extractKey, dexieCloudTableSchema, query, unsyncedObjects, mut;
2969
- return __generator$1(this, function (_j) {
2970
- switch (_j.label) {
2969
+ return __generator$1(this, function (_k) {
2970
+ switch (_k.label) {
2971
2971
  case 0:
2972
2972
  extractKey = table.core.schema.primaryKey.extractKey;
2973
2973
  if (!extractKey)
@@ -2988,7 +2988,7 @@
2988
2988
  });
2989
2989
  return [4 /*yield*/, query.toArray()];
2990
2990
  case 1:
2991
- unsyncedObjects = _j.sent();
2991
+ unsyncedObjects = _k.sent();
2992
2992
  if (unsyncedObjects.length > 0) {
2993
2993
  mut = {
2994
2994
  type: 'upsert',
@@ -3012,7 +3012,7 @@
3012
3012
  });
3013
3013
  }); }))];
3014
3014
  case 1:
3015
- upserts = _j.sent();
3015
+ upserts = _k.sent();
3016
3016
  return [2 /*return*/, upserts.filter(function (op) { return op.muts.length > 0; })];
3017
3017
  case 2: return [2 /*return*/, []];
3018
3018
  }
@@ -3041,12 +3041,12 @@
3041
3041
  if (!dollarKeys)
3042
3042
  return value;
3043
3043
  var clone = __assign({}, value);
3044
- for (var _j = 0, dollarKeys_1 = dollarKeys; _j < dollarKeys_1.length; _j++) {
3045
- var k_1 = dollarKeys_1[_j];
3044
+ for (var _k = 0, dollarKeys_1 = dollarKeys; _k < dollarKeys_1.length; _k++) {
3045
+ var k_1 = dollarKeys_1[_k];
3046
3046
  delete clone[k_1];
3047
3047
  }
3048
- for (var _k = 0, dollarKeys_2 = dollarKeys; _k < dollarKeys_2.length; _k++) {
3049
- var k_2 = dollarKeys_2[_k];
3048
+ for (var _l = 0, dollarKeys_2 = dollarKeys; _l < dollarKeys_2.length; _l++) {
3049
+ var k_2 = dollarKeys_2[_l];
3050
3050
  clone["$" + k_2] = value[k_2];
3051
3051
  }
3052
3052
  return clone;
@@ -3056,8 +3056,8 @@
3056
3056
  };
3057
3057
  function TypesonSimplified() {
3058
3058
  var typeDefsInputs = [];
3059
- for (var _j = 0; _j < arguments.length; _j++) {
3060
- typeDefsInputs[_j] = arguments[_j];
3059
+ for (var _k = 0; _k < arguments.length; _k++) {
3060
+ typeDefsInputs[_k] = arguments[_k];
3061
3061
  }
3062
3062
  var typeDefs = typeDefsInputs.reduce(function (p, c) { return (__assign(__assign({}, p), c)); }, typeDefsInputs.reduce(function (p, c) { return (__assign(__assign({}, c), p)); }, {}));
3063
3063
  var protoMap = new WeakMap();
@@ -3091,13 +3091,13 @@
3091
3091
  // Unescape dollar props
3092
3092
  value = __assign({}, value);
3093
3093
  // Delete keys that children wanted us to delete
3094
- for (var _j = 0, _k = top[1]; _j < _k.length; _j++) {
3095
- var k_3 = _k[_j];
3094
+ for (var _k = 0, _l = top[1]; _k < _l.length; _k++) {
3095
+ var k_3 = _l[_k];
3096
3096
  delete value[k_3];
3097
3097
  }
3098
3098
  // Set keys that children wanted us to set
3099
- for (var _l = 0, _m = Object.entries(top[2]); _l < _m.length; _l++) {
3100
- var _o = _m[_l], k_4 = _o[0], v_1 = _o[1];
3099
+ for (var _m = 0, _o = Object.entries(top[2]); _m < _o.length; _m++) {
3100
+ var _p = _o[_m], k_4 = _p[0], v_1 = _p[1];
3101
3101
  value[k_4] = v_1;
3102
3102
  }
3103
3103
  stack.pop();
@@ -3145,8 +3145,8 @@
3145
3145
  if (typeDef !== undefined)
3146
3146
  return typeDef; // Null counts to! So the caching of Array.prototype also counts.
3147
3147
  var toStringTag_1 = getToStringTag(realVal);
3148
- var entry = Object.entries(typeDefs).find(function (_j) {
3149
- var typeName = _j[0], typeDef = _j[1];
3148
+ var entry = Object.entries(typeDefs).find(function (_k) {
3149
+ var typeName = _k[0], typeDef = _k[1];
3150
3150
  var _a, _b;
3151
3151
  return (_b = (_a = typeDef === null || typeDef === void 0 ? void 0 : typeDef.test) === null || _a === void 0 ? void 0 : _a.call(typeDef, realVal, toStringTag_1)) !== null && _b !== void 0 ? _b : typeName === toStringTag_1;
3152
3152
  });
@@ -3178,8 +3178,8 @@
3178
3178
  i: i,
3179
3179
  };
3180
3180
  },
3181
- revive: function (_j, altChannel) {
3182
- var i = _j.i, mimeType = _j.mimeType;
3181
+ revive: function (_k, altChannel) {
3182
+ var i = _k.i, mimeType = _k.mimeType;
3183
3183
  return new Blob([altChannel[i]], { type: mimeType });
3184
3184
  },
3185
3185
  },
@@ -3198,8 +3198,8 @@
3198
3198
  return num;
3199
3199
  }
3200
3200
  },
3201
- revive: function (_j) {
3202
- var v = _j.v;
3201
+ revive: function (_k) {
3202
+ var v = _k.v;
3203
3203
  return Number(v);
3204
3204
  },
3205
3205
  },
@@ -3218,8 +3218,8 @@
3218
3218
  $t: "Date",
3219
3219
  v: isNaN(date.getTime()) ? "NaN" : date.toISOString(),
3220
3220
  }); },
3221
- revive: function (_j) {
3222
- var v = _j.v;
3221
+ revive: function (_k) {
3222
+ var v = _k.v;
3223
3223
  return new Date(v === "NaN" ? NaN : Date.parse(v));
3224
3224
  },
3225
3225
  },
@@ -3230,8 +3230,8 @@
3230
3230
  $t: "Set",
3231
3231
  v: Array.from(set.entries()),
3232
3232
  }); },
3233
- revive: function (_j) {
3234
- var v = _j.v;
3233
+ revive: function (_k) {
3234
+ var v = _k.v;
3235
3235
  return new Set(v);
3236
3236
  },
3237
3237
  },
@@ -3242,8 +3242,8 @@
3242
3242
  $t: "Map",
3243
3243
  v: Array.from(map.entries()),
3244
3244
  }); },
3245
- revive: function (_j) {
3246
- var v = _j.v;
3245
+ revive: function (_k) {
3246
+ var v = _k.v;
3247
3247
  return new Map(v);
3248
3248
  },
3249
3249
  },
@@ -3269,8 +3269,8 @@
3269
3269
  "BigInt64Array",
3270
3270
  "BigUint64Array",
3271
3271
  ].reduce(function (specs, typeName) {
3272
- var _j;
3273
- return (__assign(__assign({}, specs), (_j = {}, _j[typeName] = {
3272
+ var _k;
3273
+ return (__assign(__assign({}, specs), (_k = {}, _k[typeName] = {
3274
3274
  // Replace passes the the typed array into $t, buffer so that
3275
3275
  // the ArrayBuffer typedef takes care of further handling of the buffer:
3276
3276
  // {$t:"Uint8Array",buffer:{$t:"ArrayBuffer",idx:0}}
@@ -3285,13 +3285,13 @@
3285
3285
  };
3286
3286
  return result;
3287
3287
  },
3288
- revive: function (_j, _, typeDefs) {
3289
- var v = _j.v;
3288
+ revive: function (_k, _, typeDefs) {
3289
+ var v = _k.v;
3290
3290
  var TypedArray = _global[typeName];
3291
3291
  return (TypedArray &&
3292
3292
  new TypedArray(typeDefs.ArrayBuffer.revive({ v: v }, _, typeDefs)));
3293
3293
  },
3294
- }, _j)));
3294
+ }, _k)));
3295
3295
  }, {});
3296
3296
  function b64LexEncode(b) {
3297
3297
  return b64ToLex(b64encode(b));
@@ -3385,8 +3385,8 @@
3385
3385
  "|": "/",
3386
3386
  };
3387
3387
  var ENCODE_TABLE = {};
3388
- for (var _j = 0, _k = Object.keys(DECODE_TABLE); _j < _k.length; _j++) {
3389
- var c_1 = _k[_j];
3388
+ for (var _k = 0, _l = Object.keys(DECODE_TABLE); _k < _l.length; _k++) {
3389
+ var c_1 = _l[_k];
3390
3390
  ENCODE_TABLE[DECODE_TABLE[c_1]] = c_1;
3391
3391
  }
3392
3392
  var ArrayBufferDef = {
@@ -3395,8 +3395,8 @@
3395
3395
  $t: "ArrayBuffer",
3396
3396
  v: b64LexEncode(ab),
3397
3397
  }); },
3398
- revive: function (_j) {
3399
- var v = _j.v;
3398
+ revive: function (_k) {
3399
+ var v = _k.v;
3400
3400
  var ba = b64LexDecode(v);
3401
3401
  return ba.buffer.byteLength === ba.byteLength
3402
3402
  ? ba.buffer
@@ -3438,8 +3438,8 @@
3438
3438
  : b64encode(string2ArrayBuffer(readBlobSync(blob))),
3439
3439
  type: blob.type,
3440
3440
  }); },
3441
- revive: function (_j) {
3442
- var type = _j.type, v = _j.v;
3441
+ revive: function (_k) {
3442
+ var type = _k.type, v = _k.v;
3443
3443
  var ab = b64decode(v);
3444
3444
  return typeof Blob !== undefined
3445
3445
  ? new Blob([ab])
@@ -3450,13 +3450,13 @@
3450
3450
  var builtin = __assign(__assign(__assign(__assign(__assign(__assign(__assign(__assign({}, numberDef), bigIntDef), DateDef), SetDef), MapDef), TypedArraysDefs), ArrayBufferDef), BlobDef);
3451
3451
  function Bison() {
3452
3452
  var typeDefsInputs = [];
3453
- for (var _j = 0; _j < arguments.length; _j++) {
3454
- typeDefsInputs[_j] = arguments[_j];
3453
+ for (var _k = 0; _k < arguments.length; _k++) {
3454
+ typeDefsInputs[_k] = arguments[_k];
3455
3455
  }
3456
3456
  var tson = TypesonSimplified.apply(void 0, __spreadArray$1([builtin, BisonBinaryTypes], typeDefsInputs, false));
3457
3457
  return {
3458
3458
  toBinary: function (value) {
3459
- var _j = this.stringify(value), blob = _j[0], json = _j[1];
3459
+ var _k = this.stringify(value), blob = _k[0], json = _k[1];
3460
3460
  var lenBuf = new ArrayBuffer(4);
3461
3461
  new DataView(lenBuf).setUint32(0, blob.size);
3462
3462
  return new Blob([lenBuf, blob, json]);
@@ -3474,14 +3474,14 @@
3474
3474
  parse: function (json, binData) {
3475
3475
  return __awaiter$2(this, void 0, void 0, function () {
3476
3476
  var pos, arrayBuffers, buf, view, len, ab;
3477
- return __generator$1(this, function (_j) {
3478
- switch (_j.label) {
3477
+ return __generator$1(this, function (_k) {
3478
+ switch (_k.label) {
3479
3479
  case 0:
3480
3480
  pos = 0;
3481
3481
  arrayBuffers = [];
3482
3482
  return [4 /*yield*/, readBlobBinary(binData)];
3483
3483
  case 1:
3484
- buf = _j.sent();
3484
+ buf = _k.sent();
3485
3485
  view = new DataView(buf);
3486
3486
  while (pos < buf.byteLength) {
3487
3487
  len = view.getUint32(pos);
@@ -3497,20 +3497,20 @@
3497
3497
  },
3498
3498
  fromBinary: function (blob) {
3499
3499
  return __awaiter$2(this, void 0, void 0, function () {
3500
- var len, _j, binData, json;
3501
- return __generator$1(this, function (_k) {
3502
- switch (_k.label) {
3500
+ var len, _k, binData, json;
3501
+ return __generator$1(this, function (_l) {
3502
+ switch (_l.label) {
3503
3503
  case 0:
3504
- _j = DataView.bind;
3504
+ _k = DataView.bind;
3505
3505
  return [4 /*yield*/, readBlobBinary(blob.slice(0, 4))];
3506
3506
  case 1:
3507
- len = new (_j.apply(DataView, [void 0, _k.sent()]))().getUint32(0);
3507
+ len = new (_k.apply(DataView, [void 0, _l.sent()]))().getUint32(0);
3508
3508
  binData = blob.slice(4, len + 4);
3509
3509
  return [4 /*yield*/, readBlob(blob.slice(len + 4))];
3510
3510
  case 2:
3511
- json = _k.sent();
3511
+ json = _l.sent();
3512
3512
  return [4 /*yield*/, this.parse(json, binData)];
3513
- case 3: return [2 /*return*/, _k.sent()];
3513
+ case 3: return [2 /*return*/, _l.sent()];
3514
3514
  }
3515
3515
  });
3516
3516
  });
@@ -3584,8 +3584,8 @@
3584
3584
  replace: function (fakeBigInt) {
3585
3585
  return Object.assign({ $t: 'bigint' }, fakeBigInt);
3586
3586
  },
3587
- revive: function (_j) {
3588
- var v = _j.v;
3587
+ revive: function (_k) {
3588
+ var v = _k.v;
3589
3589
  return new FakeBigInt(v);
3590
3590
  }
3591
3591
  }
@@ -3633,8 +3633,8 @@
3633
3633
  });
3634
3634
  rv.push(changeClone);
3635
3635
  };
3636
- for (var _j = 0, changes_1 = changes; _j < changes_1.length; _j++) {
3637
- var change = changes_1[_j];
3636
+ for (var _k = 0, changes_1 = changes; _k < changes_1.length; _k++) {
3637
+ var change = changes_1[_k];
3638
3638
  _loop_2(change);
3639
3639
  }
3640
3640
  return rv;
@@ -3648,9 +3648,9 @@
3648
3648
  //import {BisonWebStreamReader} from "dreambase-library/dist/typeson-simplified/BisonWebStreamReader";
3649
3649
  function syncWithServer(changes, syncState, baseRevs, db, databaseUrl, schema, clientIdentity, currentUser) {
3650
3650
  return __awaiter$1(this, void 0, void 0, function () {
3651
- var headers, accessToken, syncRequest, res, _j, _k, _l, text, syncRes;
3652
- return __generator$1(this, function (_m) {
3653
- switch (_m.label) {
3651
+ var headers, accessToken, syncRequest, res, _k, _l, _m, text, syncRes;
3652
+ return __generator$1(this, function (_o) {
3653
+ switch (_o.label) {
3654
3654
  case 0:
3655
3655
  headers = {
3656
3656
  Accept: 'application/json, application/x-bison, application/x-bison-stream',
@@ -3658,7 +3658,7 @@
3658
3658
  };
3659
3659
  return [4 /*yield*/, loadAccessToken(db)];
3660
3660
  case 1:
3661
- accessToken = _m.sent();
3661
+ accessToken = _o.sent();
3662
3662
  if (accessToken) {
3663
3663
  headers.Authorization = "Bearer ".concat(accessToken);
3664
3664
  }
@@ -3685,7 +3685,7 @@
3685
3685
  body: TSON.stringify(syncRequest)
3686
3686
  })];
3687
3687
  case 2:
3688
- res = _m.sent();
3688
+ res = _o.sent();
3689
3689
  //const contentLength = Number(res.headers.get('content-length'));
3690
3690
  db.syncStateChangedEvent.next({
3691
3691
  phase: 'pulling'
@@ -3693,20 +3693,20 @@
3693
3693
  if (!res.ok) {
3694
3694
  throw new HttpError(res);
3695
3695
  }
3696
- _j = res.headers.get('content-type');
3697
- switch (_j) {
3696
+ _k = res.headers.get('content-type');
3697
+ switch (_k) {
3698
3698
  case 'application/x-bison': return [3 /*break*/, 3];
3699
3699
  case 'application/x-bison-stream': return [3 /*break*/, 5];
3700
3700
  case 'application/json': return [3 /*break*/, 5];
3701
3701
  }
3702
3702
  return [3 /*break*/, 5];
3703
3703
  case 3:
3704
- _l = (_k = BISON).fromBinary;
3704
+ _m = (_l = BISON).fromBinary;
3705
3705
  return [4 /*yield*/, res.blob()];
3706
- case 4: return [2 /*return*/, _l.apply(_k, [_m.sent()])];
3706
+ case 4: return [2 /*return*/, _m.apply(_l, [_o.sent()])];
3707
3707
  case 5: return [4 /*yield*/, res.text()];
3708
3708
  case 6:
3709
- text = _m.sent();
3709
+ text = _o.sent();
3710
3710
  syncRes = TSON.parse(text);
3711
3711
  return [2 /*return*/, syncRes];
3712
3712
  }
@@ -3715,16 +3715,16 @@
3715
3715
  }
3716
3716
  function modifyLocalObjectsWithNewUserId(syncifiedTables, currentUser, alreadySyncedRealms) {
3717
3717
  return __awaiter$1(this, void 0, void 0, function () {
3718
- var ignoredRealms, _j, syncifiedTables_1, table;
3719
- return __generator$1(this, function (_k) {
3720
- switch (_k.label) {
3718
+ var ignoredRealms, _k, syncifiedTables_1, table;
3719
+ return __generator$1(this, function (_l) {
3720
+ switch (_l.label) {
3721
3721
  case 0:
3722
3722
  ignoredRealms = new Set(alreadySyncedRealms || []);
3723
- _j = 0, syncifiedTables_1 = syncifiedTables;
3724
- _k.label = 1;
3723
+ _k = 0, syncifiedTables_1 = syncifiedTables;
3724
+ _l.label = 1;
3725
3725
  case 1:
3726
- if (!(_j < syncifiedTables_1.length)) return [3 /*break*/, 9];
3727
- table = syncifiedTables_1[_j];
3726
+ if (!(_k < syncifiedTables_1.length)) return [3 /*break*/, 9];
3727
+ table = syncifiedTables_1[_k];
3728
3728
  if (!(table.name === "members")) return [3 /*break*/, 3];
3729
3729
  // members
3730
3730
  return [4 /*yield*/, table.toCollection().modify(function (member) {
@@ -3734,7 +3734,7 @@
3734
3734
  })];
3735
3735
  case 2:
3736
3736
  // members
3737
- _k.sent();
3737
+ _l.sent();
3738
3738
  return [3 /*break*/, 8];
3739
3739
  case 3:
3740
3740
  if (!(table.name === "roles")) return [3 /*break*/, 4];
@@ -3749,7 +3749,7 @@
3749
3749
  })];
3750
3750
  case 5:
3751
3751
  // realms
3752
- _k.sent();
3752
+ _l.sent();
3753
3753
  return [3 /*break*/, 8];
3754
3754
  case 6:
3755
3755
  // application entities
@@ -3764,10 +3764,10 @@
3764
3764
  })];
3765
3765
  case 7:
3766
3766
  // application entities
3767
- _k.sent();
3768
- _k.label = 8;
3767
+ _l.sent();
3768
+ _l.label = 8;
3769
3769
  case 8:
3770
- _j++;
3770
+ _k++;
3771
3771
  return [3 /*break*/, 1];
3772
3772
  case 9: return [2 /*return*/];
3773
3773
  }
@@ -3787,8 +3787,8 @@
3787
3787
  self.addEventListener('offline', function () { return isOnline = false; });
3788
3788
  function updateBaseRevs(db, schema, latestRevisions, serverRev) {
3789
3789
  return __awaiter$1(this, void 0, void 0, function () {
3790
- return __generator$1(this, function (_j) {
3791
- switch (_j.label) {
3790
+ return __generator$1(this, function (_k) {
3791
+ switch (_k.label) {
3792
3792
  case 0: return [4 /*yield*/, db.$baseRevs.bulkPut(Object.keys(schema)
3793
3793
  .filter(function (table) { return schema[table].markedForSync; })
3794
3794
  .map(function (tableName) {
@@ -3800,7 +3800,7 @@
3800
3800
  };
3801
3801
  }))];
3802
3802
  case 1:
3803
- _j.sent();
3803
+ _k.sent();
3804
3804
  return [2 /*return*/];
3805
3805
  }
3806
3806
  });
@@ -3808,8 +3808,8 @@
3808
3808
  }
3809
3809
  function getLatestRevisionsPerTable(clientChangeSet, lastRevisions) {
3810
3810
  if (lastRevisions === void 0) { lastRevisions = {}; }
3811
- for (var _j = 0, clientChangeSet_1 = clientChangeSet; _j < clientChangeSet_1.length; _j++) {
3812
- var _k = clientChangeSet_1[_j], table = _k.table, muts = _k.muts;
3811
+ for (var _k = 0, clientChangeSet_1 = clientChangeSet; _k < clientChangeSet_1.length; _k++) {
3812
+ var _l = clientChangeSet_1[_k], table = _l.table, muts = _l.muts;
3813
3813
  var lastRev = muts.length > 0 ? muts[muts.length - 1].rev : null;
3814
3814
  lastRevisions[table] = lastRev || lastRevisions[table] || 0;
3815
3815
  }
@@ -3818,18 +3818,18 @@
3818
3818
  function bulkUpdate(table, keys, changeSpecs) {
3819
3819
  return __awaiter$1(this, void 0, void 0, function () {
3820
3820
  var objs, resultKeys, resultObjs;
3821
- return __generator$1(this, function (_j) {
3822
- switch (_j.label) {
3821
+ return __generator$1(this, function (_k) {
3822
+ switch (_k.label) {
3823
3823
  case 0: return [4 /*yield*/, table.bulkGet(keys)];
3824
3824
  case 1:
3825
- objs = _j.sent();
3825
+ objs = _k.sent();
3826
3826
  resultKeys = [];
3827
3827
  resultObjs = [];
3828
3828
  keys.forEach(function (key, idx) {
3829
3829
  var obj = objs[idx];
3830
3830
  if (obj) {
3831
- for (var _j = 0, _k = Object.entries(changeSpecs[idx]); _j < _k.length; _j++) {
3832
- var _l = _k[_j], keyPath = _l[0], value = _l[1];
3831
+ for (var _k = 0, _l = Object.entries(changeSpecs[idx]); _k < _l.length; _k++) {
3832
+ var _m = _l[_k], keyPath = _m[0], value = _m[1];
3833
3833
  if (keyPath === table.schema.primKey.keyPath) {
3834
3834
  if (Dexie.cmp(value, key) !== 0) {
3835
3835
  throw new Error("Cannot change primary key");
@@ -3847,7 +3847,7 @@
3847
3847
  ? table.bulkPut(resultObjs, resultKeys)
3848
3848
  : table.bulkPut(resultObjs))];
3849
3849
  case 2:
3850
- _j.sent();
3850
+ _k.sent();
3851
3851
  return [2 /*return*/];
3852
3852
  }
3853
3853
  });
@@ -3855,15 +3855,15 @@
3855
3855
  }
3856
3856
  function applyServerChanges(changes, db) {
3857
3857
  return __awaiter$1(this, void 0, void 0, function () {
3858
- var _loop_3, _j, changes_2, _k, tableName, muts;
3859
- return __generator$1(this, function (_l) {
3860
- switch (_l.label) {
3858
+ var _loop_3, _k, changes_2, _l, tableName, muts;
3859
+ return __generator$1(this, function (_m) {
3860
+ switch (_m.label) {
3861
3861
  case 0:
3862
3862
  console.debug('Applying server changes', changes, Dexie__default["default"].currentTransaction);
3863
3863
  _loop_3 = function (tableName, muts) {
3864
- var table, primaryKey, keyDecoder, _loop_4, _m, muts_2, mut;
3865
- return __generator$1(this, function (_o) {
3866
- switch (_o.label) {
3864
+ var table, primaryKey, keyDecoder, _loop_4, _o, muts_2, mut;
3865
+ return __generator$1(this, function (_p) {
3866
+ switch (_p.label) {
3867
3867
  case 0:
3868
3868
  table = db.table(tableName);
3869
3869
  if (!table)
@@ -3891,13 +3891,13 @@
3891
3891
  }
3892
3892
  };
3893
3893
  _loop_4 = function (mut) {
3894
- var keys, _p;
3895
- return __generator$1(this, function (_q) {
3896
- switch (_q.label) {
3894
+ var keys, _q;
3895
+ return __generator$1(this, function (_r) {
3896
+ switch (_r.label) {
3897
3897
  case 0:
3898
3898
  keys = mut.keys.map(keyDecoder);
3899
- _p = mut.type;
3900
- switch (_p) {
3899
+ _q = mut.type;
3900
+ switch (_q) {
3901
3901
  case 'insert': return [3 /*break*/, 1];
3902
3902
  case 'upsert': return [3 /*break*/, 6];
3903
3903
  case 'modify': return [3 /*break*/, 11];
@@ -3909,7 +3909,7 @@
3909
3909
  if (!primaryKey.outbound) return [3 /*break*/, 3];
3910
3910
  return [4 /*yield*/, table.bulkAdd(mut.values, keys)];
3911
3911
  case 2:
3912
- _q.sent();
3912
+ _r.sent();
3913
3913
  return [3 /*break*/, 5];
3914
3914
  case 3:
3915
3915
  keys.forEach(function (key, i) {
@@ -3918,14 +3918,14 @@
3918
3918
  });
3919
3919
  return [4 /*yield*/, table.bulkAdd(mut.values)];
3920
3920
  case 4:
3921
- _q.sent();
3922
- _q.label = 5;
3921
+ _r.sent();
3922
+ _r.label = 5;
3923
3923
  case 5: return [3 /*break*/, 20];
3924
3924
  case 6:
3925
3925
  if (!primaryKey.outbound) return [3 /*break*/, 8];
3926
3926
  return [4 /*yield*/, table.bulkPut(mut.values, keys)];
3927
3927
  case 7:
3928
- _q.sent();
3928
+ _r.sent();
3929
3929
  return [3 /*break*/, 10];
3930
3930
  case 8:
3931
3931
  keys.forEach(function (key, i) {
@@ -3934,59 +3934,59 @@
3934
3934
  });
3935
3935
  return [4 /*yield*/, table.bulkPut(mut.values)];
3936
3936
  case 9:
3937
- _q.sent();
3938
- _q.label = 10;
3937
+ _r.sent();
3938
+ _r.label = 10;
3939
3939
  case 10: return [3 /*break*/, 20];
3940
3940
  case 11:
3941
3941
  if (!(keys.length === 1)) return [3 /*break*/, 13];
3942
3942
  return [4 /*yield*/, table.update(keys[0], mut.changeSpec)];
3943
3943
  case 12:
3944
- _q.sent();
3944
+ _r.sent();
3945
3945
  return [3 /*break*/, 15];
3946
3946
  case 13: return [4 /*yield*/, table.where(':id').anyOf(keys).modify(mut.changeSpec)];
3947
3947
  case 14:
3948
- _q.sent();
3949
- _q.label = 15;
3948
+ _r.sent();
3949
+ _r.label = 15;
3950
3950
  case 15: return [3 /*break*/, 20];
3951
3951
  case 16: return [4 /*yield*/, bulkUpdate(table, keys, mut.changeSpecs)];
3952
3952
  case 17:
3953
- _q.sent();
3953
+ _r.sent();
3954
3954
  return [3 /*break*/, 20];
3955
3955
  case 18: return [4 /*yield*/, table.bulkDelete(keys)];
3956
3956
  case 19:
3957
- _q.sent();
3957
+ _r.sent();
3958
3958
  return [3 /*break*/, 20];
3959
3959
  case 20: return [2 /*return*/];
3960
3960
  }
3961
3961
  });
3962
3962
  };
3963
- _m = 0, muts_2 = muts;
3964
- _o.label = 1;
3963
+ _o = 0, muts_2 = muts;
3964
+ _p.label = 1;
3965
3965
  case 1:
3966
- if (!(_m < muts_2.length)) return [3 /*break*/, 4];
3967
- mut = muts_2[_m];
3966
+ if (!(_o < muts_2.length)) return [3 /*break*/, 4];
3967
+ mut = muts_2[_o];
3968
3968
  return [5 /*yield**/, _loop_4(mut)];
3969
3969
  case 2:
3970
- _o.sent();
3971
- _o.label = 3;
3970
+ _p.sent();
3971
+ _p.label = 3;
3972
3972
  case 3:
3973
- _m++;
3973
+ _o++;
3974
3974
  return [3 /*break*/, 1];
3975
3975
  case 4: return [2 /*return*/];
3976
3976
  }
3977
3977
  });
3978
3978
  };
3979
- _j = 0, changes_2 = changes;
3980
- _l.label = 1;
3979
+ _k = 0, changes_2 = changes;
3980
+ _m.label = 1;
3981
3981
  case 1:
3982
- if (!(_j < changes_2.length)) return [3 /*break*/, 4];
3983
- _k = changes_2[_j], tableName = _k.table, muts = _k.muts;
3982
+ if (!(_k < changes_2.length)) return [3 /*break*/, 4];
3983
+ _l = changes_2[_k], tableName = _l.table, muts = _l.muts;
3984
3984
  return [5 /*yield**/, _loop_3(tableName, muts)];
3985
3985
  case 2:
3986
- _l.sent();
3987
- _l.label = 3;
3986
+ _m.sent();
3987
+ _m.label = 3;
3988
3988
  case 3:
3989
- _j++;
3989
+ _k++;
3990
3990
  return [3 /*break*/, 1];
3991
3991
  case 4: return [2 /*return*/];
3992
3992
  }
@@ -4006,8 +4006,8 @@
4006
4006
  }
4007
4007
  })
4008
4008
  .catch(function (error) { return __awaiter$1(_this_1, void 0, void 0, function () {
4009
- return __generator$1(this, function (_j) {
4010
- switch (_j.label) {
4009
+ return __generator$1(this, function (_k) {
4010
+ switch (_k.label) {
4011
4011
  case 0:
4012
4012
  if (syncOptions === null || syncOptions === void 0 ? void 0 : syncOptions.justCheckIfNeeded)
4013
4013
  return [2 /*return*/, Promise.reject(error)]; // Just rethrow.
@@ -4028,9 +4028,9 @@
4028
4028
  return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 500); })];
4029
4029
  case 1:
4030
4030
  // Retry again in 500 ms but if it fails again, don't retry.
4031
- _j.sent();
4031
+ _k.sent();
4032
4032
  return [4 /*yield*/, sync(db, options, schema, Object.assign(Object.assign({}, syncOptions), { retryImmediatelyOnFetchError: false }))];
4033
- case 2: return [2 /*return*/, _j.sent()];
4033
+ case 2: return [2 /*return*/, _k.sent()];
4034
4034
  case 3:
4035
4035
  // Make sure that no matter whether sync() explodes or not,
4036
4036
  // always update the timestamp. Also store the error.
@@ -4041,7 +4041,7 @@
4041
4041
  case 4:
4042
4042
  // Make sure that no matter whether sync() explodes or not,
4043
4043
  // always update the timestamp. Also store the error.
4044
- _j.sent();
4044
+ _k.sent();
4045
4045
  db.syncStateChangedEvent.next({
4046
4046
  phase: isOnline ? 'error' : 'offline',
4047
4047
  error: error,
@@ -4051,16 +4051,16 @@
4051
4051
  });
4052
4052
  }); });
4053
4053
  }
4054
- function _sync(db, options, schema, _j) {
4055
- var _k = _j === void 0 ? {
4054
+ function _sync(db, options, schema, _k) {
4055
+ var _l = _k === void 0 ? {
4056
4056
  isInitialSync: false,
4057
- } : _j, isInitialSync = _k.isInitialSync, cancelToken = _k.cancelToken, justCheckIfNeeded = _k.justCheckIfNeeded, purpose = _k.purpose;
4057
+ } : _k, isInitialSync = _l.isInitialSync, cancelToken = _l.cancelToken, justCheckIfNeeded = _l.justCheckIfNeeded, purpose = _l.purpose;
4058
4058
  var _a;
4059
4059
  return __awaiter$1(this, void 0, void 0, function () {
4060
- var databaseUrl, currentUser, tablesToSync, mutationTables, persistedSyncState, tablesToSyncify, doSyncify, _j, clientChangeSet, syncState, baseRevs, syncIsNeeded, latestRevisions, clientIdentity, res, done;
4060
+ var databaseUrl, currentUser, tablesToSync, mutationTables, persistedSyncState, tablesToSyncify, doSyncify, _k, clientChangeSet, syncState, baseRevs, syncIsNeeded, latestRevisions, clientIdentity, res, done;
4061
4061
  var _this_1 = this;
4062
- return __generator$1(this, function (_k) {
4063
- switch (_k.label) {
4062
+ return __generator$1(this, function (_l) {
4063
+ switch (_l.label) {
4064
4064
  case 0:
4065
4065
  if (!justCheckIfNeeded) {
4066
4066
  console.debug('SYNC STARTED', { isInitialSync: isInitialSync, purpose: purpose });
@@ -4070,12 +4070,12 @@
4070
4070
  databaseUrl = options.databaseUrl;
4071
4071
  return [4 /*yield*/, db.getCurrentUser()];
4072
4072
  case 1:
4073
- currentUser = _k.sent();
4073
+ currentUser = _l.sent();
4074
4074
  tablesToSync = currentUser.isLoggedIn ? getSyncableTables(db) : [];
4075
4075
  mutationTables = tablesToSync.map(function (tbl) { return db.table(getMutationTable(tbl.name)); });
4076
4076
  return [4 /*yield*/, db.getPersistedSyncState()];
4077
4077
  case 2:
4078
- persistedSyncState = _k.sent();
4078
+ persistedSyncState = _l.sent();
4079
4079
  tablesToSyncify = !isInitialSync && currentUser.isLoggedIn
4080
4080
  ? getTablesToSyncify(db, persistedSyncState)
4081
4081
  : [];
@@ -4086,8 +4086,8 @@
4086
4086
  return [2 /*return*/, true];
4087
4087
  //console.debug('sync doSyncify is true');
4088
4088
  return [4 /*yield*/, db.transaction('rw', tablesToSyncify, function (tx) { return __awaiter$1(_this_1, void 0, void 0, function () {
4089
- return __generator$1(this, function (_j) {
4090
- switch (_j.label) {
4089
+ return __generator$1(this, function (_k) {
4090
+ switch (_k.label) {
4091
4091
  case 0:
4092
4092
  // @ts-ignore
4093
4093
  tx.idbtrans.disableChangeTracking = true;
@@ -4095,35 +4095,35 @@
4095
4095
  tx.idbtrans.disableAccessControl = true; // TODO: Take care of this flag in access control middleware!
4096
4096
  return [4 /*yield*/, modifyLocalObjectsWithNewUserId(tablesToSyncify, currentUser, persistedSyncState === null || persistedSyncState === void 0 ? void 0 : persistedSyncState.realms)];
4097
4097
  case 1:
4098
- _j.sent();
4098
+ _k.sent();
4099
4099
  return [2 /*return*/];
4100
4100
  }
4101
4101
  });
4102
4102
  }); })];
4103
4103
  case 3:
4104
4104
  //console.debug('sync doSyncify is true');
4105
- _k.sent();
4105
+ _l.sent();
4106
4106
  throwIfCancelled(cancelToken);
4107
- _k.label = 4;
4107
+ _l.label = 4;
4108
4108
  case 4: return [4 /*yield*/, db.transaction('r', db.tables, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
4109
4109
  var syncState, baseRevs, clientChanges, alreadySyncedRealms, syncificationInserts;
4110
- return __generator$1(this, function (_j) {
4111
- switch (_j.label) {
4110
+ return __generator$1(this, function (_k) {
4111
+ switch (_k.label) {
4112
4112
  case 0: return [4 /*yield*/, db.getPersistedSyncState()];
4113
4113
  case 1:
4114
- syncState = _j.sent();
4114
+ syncState = _k.sent();
4115
4115
  return [4 /*yield*/, db.$baseRevs.toArray()];
4116
4116
  case 2:
4117
- baseRevs = _j.sent();
4117
+ baseRevs = _k.sent();
4118
4118
  return [4 /*yield*/, listClientChanges(mutationTables)];
4119
4119
  case 3:
4120
- clientChanges = _j.sent();
4120
+ clientChanges = _k.sent();
4121
4121
  throwIfCancelled(cancelToken);
4122
4122
  if (!doSyncify) return [3 /*break*/, 5];
4123
4123
  alreadySyncedRealms = __spreadArray$1(__spreadArray$1([], ((persistedSyncState === null || persistedSyncState === void 0 ? void 0 : persistedSyncState.realms) || []), true), ((persistedSyncState === null || persistedSyncState === void 0 ? void 0 : persistedSyncState.inviteRealms) || []), true);
4124
4124
  return [4 /*yield*/, listSyncifiedChanges(tablesToSyncify, currentUser, schema, alreadySyncedRealms)];
4125
4125
  case 4:
4126
- syncificationInserts = _j.sent();
4126
+ syncificationInserts = _k.sent();
4127
4127
  throwIfCancelled(cancelToken);
4128
4128
  clientChanges = clientChanges.concat(syncificationInserts);
4129
4129
  return [2 /*return*/, [clientChanges, syncState, baseRevs]];
@@ -4132,7 +4132,7 @@
4132
4132
  });
4133
4133
  }); })];
4134
4134
  case 5:
4135
- _j = _k.sent(), clientChangeSet = _j[0], syncState = _j[1], baseRevs = _j[2];
4135
+ _k = _l.sent(), clientChangeSet = _k[0], syncState = _k[1], baseRevs = _k[2];
4136
4136
  syncIsNeeded = clientChangeSet.some(function (set) { return set.muts.some(function (mut) { return mut.keys.length > 0; }); });
4137
4137
  if (justCheckIfNeeded) {
4138
4138
  console.debug('Sync is needed:', syncIsNeeded);
@@ -4150,12 +4150,12 @@
4150
4150
  throwIfCancelled(cancelToken);
4151
4151
  return [4 /*yield*/, syncWithServer(clientChangeSet, syncState, baseRevs, db, databaseUrl, schema, clientIdentity, currentUser)];
4152
4152
  case 6:
4153
- res = _k.sent();
4153
+ res = _l.sent();
4154
4154
  console.debug('Sync response', res);
4155
4155
  return [4 /*yield*/, db.transaction('rw', db.tables, function (tx) { return __awaiter$1(_this_1, void 0, void 0, function () {
4156
- var _j, _k, tableName, addedClientChanges, _loop_5, _l, mutationTables_1, mutTable, syncState, newSyncState, filteredChanges;
4157
- return __generator$1(this, function (_m) {
4158
- switch (_m.label) {
4156
+ var _k, _l, tableName, addedClientChanges, _loop_5, _m, mutationTables_1, mutTable, syncState, newSyncState, filteredChanges;
4157
+ return __generator$1(this, function (_o) {
4158
+ switch (_o.label) {
4159
4159
  case 0:
4160
4160
  // @ts-ignore
4161
4161
  tx.idbtrans.disableChangeTracking = true;
@@ -4163,8 +4163,8 @@
4163
4163
  tx.idbtrans.disableAccessControl = true; // TODO: Take care of this flag in access control middleware!
4164
4164
  // Update db.cloud.schema from server response.
4165
4165
  // Local schema MAY include a subset of tables, so do not force all tables into local schema.
4166
- for (_j = 0, _k = Object.keys(schema); _j < _k.length; _j++) {
4167
- tableName = _k[_j];
4166
+ for (_k = 0, _l = Object.keys(schema); _k < _l.length; _k++) {
4167
+ tableName = _l[_k];
4168
4168
  if (res.schema[tableName]) {
4169
4169
  // Write directly into configured schema. This code can only be executed alone.
4170
4170
  schema[tableName] = res.schema[tableName];
@@ -4172,16 +4172,16 @@
4172
4172
  }
4173
4173
  return [4 /*yield*/, db.$syncState.put(schema, 'schema')];
4174
4174
  case 1:
4175
- _m.sent();
4175
+ _o.sent();
4176
4176
  return [4 /*yield*/, listClientChanges(mutationTables, db, {
4177
4177
  since: latestRevisions,
4178
4178
  })];
4179
4179
  case 2:
4180
- addedClientChanges = _m.sent();
4180
+ addedClientChanges = _o.sent();
4181
4181
  _loop_5 = function (mutTable) {
4182
4182
  var tableName, latestRev;
4183
- return __generator$1(this, function (_o) {
4184
- switch (_o.label) {
4183
+ return __generator$1(this, function (_p) {
4184
+ switch (_p.label) {
4185
4185
  case 0:
4186
4186
  tableName = getTableFromMutationTable(mutTable.name);
4187
4187
  if (!!addedClientChanges.some(function (ch) { return ch.table === tableName && ch.muts.length > 0; })) return [3 /*break*/, 2];
@@ -4198,7 +4198,7 @@
4198
4198
  // to the server.
4199
4199
  // It is therefore safe to clear all changes (which is faster than
4200
4200
  // deleting a range)
4201
- _o.sent();
4201
+ _p.sent();
4202
4202
  return [3 /*break*/, 5];
4203
4203
  case 2:
4204
4204
  if (!latestRevisions[tableName]) return [3 /*break*/, 4];
@@ -4213,25 +4213,25 @@
4213
4213
  .delete(),
4214
4214
  ])];
4215
4215
  case 3:
4216
- _o.sent();
4216
+ _p.sent();
4217
4217
  return [3 /*break*/, 5];
4218
4218
  case 4:
4219
- _o.label = 5;
4219
+ _p.label = 5;
4220
4220
  case 5: return [2 /*return*/];
4221
4221
  }
4222
4222
  });
4223
4223
  };
4224
- _l = 0, mutationTables_1 = mutationTables;
4225
- _m.label = 3;
4224
+ _m = 0, mutationTables_1 = mutationTables;
4225
+ _o.label = 3;
4226
4226
  case 3:
4227
- if (!(_l < mutationTables_1.length)) return [3 /*break*/, 6];
4228
- mutTable = mutationTables_1[_l];
4227
+ if (!(_m < mutationTables_1.length)) return [3 /*break*/, 6];
4228
+ mutTable = mutationTables_1[_m];
4229
4229
  return [5 /*yield**/, _loop_5(mutTable)];
4230
4230
  case 4:
4231
- _m.sent();
4232
- _m.label = 5;
4231
+ _o.sent();
4232
+ _o.label = 5;
4233
4233
  case 5:
4234
- _l++;
4234
+ _m++;
4235
4235
  return [3 /*break*/, 3];
4236
4236
  case 6:
4237
4237
  // Update latestRevisions object according to additional changes:
@@ -4254,10 +4254,10 @@
4254
4254
  // The purpose of this operation is to mark a start revision (per table)
4255
4255
  // so that all client-mutations that come after this, will be mapped to current
4256
4256
  // server revision.
4257
- _m.sent();
4257
+ _o.sent();
4258
4258
  return [4 /*yield*/, db.getPersistedSyncState()];
4259
4259
  case 8:
4260
- syncState = _m.sent();
4260
+ syncState = _o.sent();
4261
4261
  //
4262
4262
  // Delete objects from removed realms
4263
4263
  //
@@ -4266,7 +4266,7 @@
4266
4266
  //
4267
4267
  // Delete objects from removed realms
4268
4268
  //
4269
- _m.sent();
4269
+ _o.sent();
4270
4270
  newSyncState = syncState || {
4271
4271
  syncedTables: [],
4272
4272
  latestRevisions: {},
@@ -4294,7 +4294,7 @@
4294
4294
  //
4295
4295
  // apply server changes
4296
4296
  //
4297
- _m.sent();
4297
+ _o.sent();
4298
4298
  //
4299
4299
  // Update syncState
4300
4300
  //
@@ -4304,11 +4304,11 @@
4304
4304
  });
4305
4305
  }); })];
4306
4306
  case 7:
4307
- done = _k.sent();
4307
+ done = _l.sent();
4308
4308
  if (!!done) return [3 /*break*/, 9];
4309
4309
  console.debug('MORE SYNC NEEDED. Go for it again!');
4310
4310
  return [4 /*yield*/, _sync(db, options, schema, { isInitialSync: isInitialSync, cancelToken: cancelToken })];
4311
- case 8: return [2 /*return*/, _k.sent()];
4311
+ case 8: return [2 /*return*/, _l.sent()];
4312
4312
  case 9:
4313
4313
  console.debug('SYNC DONE', { isInitialSync: isInitialSync });
4314
4314
  return [2 /*return*/, false]; // Not needed anymore
@@ -4318,9 +4318,9 @@
4318
4318
  }
4319
4319
  function deleteObjectsFromRemovedRealms(db, res, prevState) {
4320
4320
  return __awaiter$1(this, void 0, void 0, function () {
4321
- var deletedRealms, rejectedRealms, previousRealmSet, previousInviteRealmSet, updatedRealmSet, updatedTotalRealmSet, _j, previousRealmSet_1, realmId, _k, _l, realmId, tables, _loop_6, _m, tables_1, table;
4322
- return __generator$1(this, function (_o) {
4323
- switch (_o.label) {
4321
+ var deletedRealms, rejectedRealms, previousRealmSet, previousInviteRealmSet, updatedRealmSet, updatedTotalRealmSet, _k, previousRealmSet_1, realmId, _l, _m, realmId, tables, _loop_6, _o, tables_1, table;
4322
+ return __generator$1(this, function (_p) {
4323
+ switch (_p.label) {
4324
4324
  case 0:
4325
4325
  deletedRealms = new Set();
4326
4326
  rejectedRealms = new Set();
@@ -4328,8 +4328,8 @@
4328
4328
  previousInviteRealmSet = prevState ? prevState.inviteRealms : [];
4329
4329
  updatedRealmSet = new Set(res.realms);
4330
4330
  updatedTotalRealmSet = new Set(res.realms.concat(res.inviteRealms));
4331
- for (_j = 0, previousRealmSet_1 = previousRealmSet; _j < previousRealmSet_1.length; _j++) {
4332
- realmId = previousRealmSet_1[_j];
4331
+ for (_k = 0, previousRealmSet_1 = previousRealmSet; _k < previousRealmSet_1.length; _k++) {
4332
+ realmId = previousRealmSet_1[_k];
4333
4333
  if (!updatedRealmSet.has(realmId)) {
4334
4334
  rejectedRealms.add(realmId);
4335
4335
  if (!updatedTotalRealmSet.has(realmId)) {
@@ -4337,8 +4337,8 @@
4337
4337
  }
4338
4338
  }
4339
4339
  }
4340
- for (_k = 0, _l = previousInviteRealmSet.concat(previousRealmSet); _k < _l.length; _k++) {
4341
- realmId = _l[_k];
4340
+ for (_l = 0, _m = previousInviteRealmSet.concat(previousRealmSet); _l < _m.length; _l++) {
4341
+ realmId = _m[_l];
4342
4342
  if (!updatedTotalRealmSet.has(realmId)) {
4343
4343
  deletedRealms.add(realmId);
4344
4344
  }
@@ -4347,8 +4347,8 @@
4347
4347
  tables = getSyncableTables(db);
4348
4348
  _loop_6 = function (table) {
4349
4349
  var realmsToDelete;
4350
- return __generator$1(this, function (_p) {
4351
- switch (_p.label) {
4350
+ return __generator$1(this, function (_q) {
4351
+ switch (_q.label) {
4352
4352
  case 0:
4353
4353
  realmsToDelete = ['realms', 'members', 'roles'].includes(table.name)
4354
4354
  ? deletedRealms // These tables should spare rejected ones.
@@ -4366,7 +4366,7 @@
4366
4366
  case 1:
4367
4367
  // There's an index to use:
4368
4368
  //console.debug(`REMOVAL: deleting all ${table.name} where realmId anyOf `, JSON.stringify([...realmsToDelete]));
4369
- _p.sent();
4369
+ _q.sent();
4370
4370
  return [3 /*break*/, 4];
4371
4371
  case 2:
4372
4372
  // No index to use:
@@ -4377,23 +4377,23 @@
4377
4377
  case 3:
4378
4378
  // No index to use:
4379
4379
  //console.debug(`REMOVAL: deleting all ${table.name} where realmId is any of `, JSON.stringify([...realmsToDelete]), realmsToDelete.size);
4380
- _p.sent();
4381
- _p.label = 4;
4380
+ _q.sent();
4381
+ _q.label = 4;
4382
4382
  case 4: return [2 /*return*/];
4383
4383
  }
4384
4384
  });
4385
4385
  };
4386
- _m = 0, tables_1 = tables;
4387
- _o.label = 1;
4386
+ _o = 0, tables_1 = tables;
4387
+ _p.label = 1;
4388
4388
  case 1:
4389
- if (!(_m < tables_1.length)) return [3 /*break*/, 4];
4390
- table = tables_1[_m];
4389
+ if (!(_o < tables_1.length)) return [3 /*break*/, 4];
4390
+ table = tables_1[_o];
4391
4391
  return [5 /*yield**/, _loop_6(table)];
4392
4392
  case 2:
4393
- _o.sent();
4394
- _o.label = 3;
4393
+ _p.sent();
4394
+ _p.label = 3;
4395
4395
  case 3:
4396
- _m++;
4396
+ _o++;
4397
4397
  return [3 /*break*/, 1];
4398
4398
  case 4: return [2 /*return*/];
4399
4399
  }
@@ -4417,8 +4417,8 @@
4417
4417
  var loopWarning = 0;
4418
4418
  var loopDetection = [0, 0, 0, 0, 0, 0, 0, 0, 0, Date.now()];
4419
4419
  event.subscribe(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
4420
- return __generator$1(this, function (_j) {
4421
- switch (_j.label) {
4420
+ return __generator$1(this, function (_k) {
4421
+ switch (_k.label) {
4422
4422
  case 0:
4423
4423
  if (isWorking)
4424
4424
  return [2 /*return*/];
@@ -4427,12 +4427,12 @@
4427
4427
  loopDetection.shift();
4428
4428
  loopDetection.push(Date.now());
4429
4429
  readyToServe.next(false);
4430
- _j.label = 1;
4430
+ _k.label = 1;
4431
4431
  case 1:
4432
- _j.trys.push([1, , 3, 8]);
4432
+ _k.trys.push([1, , 3, 8]);
4433
4433
  return [4 /*yield*/, consumeQueue()];
4434
4434
  case 2:
4435
- _j.sent();
4435
+ _k.sent();
4436
4436
  return [3 /*break*/, 8];
4437
4437
  case 3:
4438
4438
  if (!(loopDetection[loopDetection.length - 1] - loopDetection[0] <
@@ -4443,7 +4443,7 @@
4443
4443
  loopWarning = Date.now() + 60000;
4444
4444
  return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 60000); })];
4445
4445
  case 4:
4446
- _j.sent();
4446
+ _k.sent();
4447
4447
  return [3 /*break*/, 7];
4448
4448
  case 5:
4449
4449
  // This is a one-time event. Just pause 10 seconds.
@@ -4451,8 +4451,8 @@
4451
4451
  loopWarning = Date.now() + 10000;
4452
4452
  return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 10000); })];
4453
4453
  case 6:
4454
- _j.sent();
4455
- _j.label = 7;
4454
+ _k.sent();
4455
+ _k.label = 7;
4456
4456
  case 7:
4457
4457
  isWorking = false;
4458
4458
  readyToServe.next(true);
@@ -4470,24 +4470,24 @@
4470
4470
  return __awaiter$1(this, void 0, void 0, function () {
4471
4471
  var _loop_7;
4472
4472
  var _this_1 = this;
4473
- return __generator$1(this, function (_j) {
4474
- switch (_j.label) {
4473
+ return __generator$1(this, function (_k) {
4474
+ switch (_k.label) {
4475
4475
  case 0:
4476
4476
  _loop_7 = function () {
4477
- var msg, persistedSyncState, _k, user, refreshedLogin, error_2;
4478
- return __generator$1(this, function (_l) {
4479
- switch (_l.label) {
4477
+ var msg, persistedSyncState, _l, user, refreshedLogin, error_2;
4478
+ return __generator$1(this, function (_m) {
4479
+ switch (_m.label) {
4480
4480
  case 0:
4481
4481
  msg = queue.shift();
4482
- _l.label = 1;
4482
+ _m.label = 1;
4483
4483
  case 1:
4484
- _l.trys.push([1, 13, , 14]);
4484
+ _m.trys.push([1, 13, , 14]);
4485
4485
  // If the sync worker or service worker is syncing, wait 'til thei're done.
4486
4486
  // It's no need to have two channels at the same time - even though it wouldnt
4487
4487
  // be a problem - this is an optimization.
4488
4488
  return [4 /*yield*/, db.cloud.syncState
4489
- .pipe(filter(function (_j) {
4490
- var phase = _j.phase;
4489
+ .pipe(filter(function (_k) {
4490
+ var phase = _k.phase;
4491
4491
  return phase === 'in-sync' || phase === 'error';
4492
4492
  }), take(1))
4493
4493
  .toPromise()];
@@ -4495,14 +4495,14 @@
4495
4495
  // If the sync worker or service worker is syncing, wait 'til thei're done.
4496
4496
  // It's no need to have two channels at the same time - even though it wouldnt
4497
4497
  // be a problem - this is an optimization.
4498
- _l.sent();
4498
+ _m.sent();
4499
4499
  console.debug('processing msg', msg);
4500
4500
  persistedSyncState = db.cloud.persistedSyncState.value;
4501
4501
  //syncState.
4502
4502
  if (!msg)
4503
4503
  return [2 /*return*/, "continue"];
4504
- _k = msg.type;
4505
- switch (_k) {
4504
+ _l = msg.type;
4505
+ switch (_l) {
4506
4506
  case 'token-expired': return [3 /*break*/, 3];
4507
4507
  case 'realm-added': return [3 /*break*/, 6];
4508
4508
  case 'realm-accepted': return [3 /*break*/, 7];
@@ -4516,7 +4516,7 @@
4516
4516
  user = db.cloud.currentUser.value;
4517
4517
  return [4 /*yield*/, refreshAccessToken(db.cloud.options.databaseUrl, user)];
4518
4518
  case 4:
4519
- refreshedLogin = _l.sent();
4519
+ refreshedLogin = _m.sent();
4520
4520
  // Persist updated access token
4521
4521
  return [4 /*yield*/, db.table('$logins').update(user.userId, {
4522
4522
  accessToken: refreshedLogin.accessToken,
@@ -4524,7 +4524,7 @@
4524
4524
  })];
4525
4525
  case 5:
4526
4526
  // Persist updated access token
4527
- _l.sent();
4527
+ _m.sent();
4528
4528
  // Updating $logins will trigger emission of db.cloud.currentUser observable, which
4529
4529
  // in turn will lead to that connectWebSocket.ts will reconnect the socket with the
4530
4530
  // new token. So we don't need to do anything more here.
@@ -4557,9 +4557,9 @@
4557
4557
  return [3 /*break*/, 12];
4558
4558
  }
4559
4559
  return [4 /*yield*/, db.transaction('rw', db.dx.tables, function (tx) { return __awaiter$1(_this_1, void 0, void 0, function () {
4560
- var _j, schema, syncState, currentUser, ourRealmSetHash, clientChanges, mutationTables, filteredChanges;
4561
- return __generator$1(this, function (_k) {
4562
- switch (_k.label) {
4560
+ var _k, schema, syncState, currentUser, ourRealmSetHash, clientChanges, mutationTables, filteredChanges;
4561
+ return __generator$1(this, function (_l) {
4562
+ switch (_l.label) {
4563
4563
  case 0:
4564
4564
  // @ts-ignore
4565
4565
  tx.idbtrans.disableChangeTracking = true;
@@ -4571,7 +4571,7 @@
4571
4571
  db.getCurrentUser(),
4572
4572
  ])];
4573
4573
  case 1:
4574
- _j = _k.sent(), schema = _j[0], syncState = _j[1], currentUser = _j[2];
4574
+ _k = _l.sent(), schema = _k[0], syncState = _k[1], currentUser = _k[2];
4575
4575
  console.debug('ws message queue: in transaction');
4576
4576
  if (!syncState || !schema || !currentUser) {
4577
4577
  console.debug('required vars not present', {
@@ -4606,7 +4606,7 @@
4606
4606
  // Keep TX in non-IDB work
4607
4607
  computeRealmSetHash(syncState))];
4608
4608
  case 2:
4609
- ourRealmSetHash = _k.sent();
4609
+ ourRealmSetHash = _l.sent();
4610
4610
  console.debug('ourRealmSetHash', ourRealmSetHash);
4611
4611
  if (ourRealmSetHash !== msg.realmSetHash) {
4612
4612
  console.debug('not same realmSetHash', msg.realmSetHash);
@@ -4620,9 +4620,9 @@
4620
4620
  mutationTables = getSyncableTables(db).map(function (tbl) { return db.table(getMutationTable(tbl.name)); });
4621
4621
  return [4 /*yield*/, listClientChanges(mutationTables)];
4622
4622
  case 3:
4623
- clientChanges = _k.sent();
4623
+ clientChanges = _l.sent();
4624
4624
  console.debug('msg queue: client changes', clientChanges);
4625
- _k.label = 4;
4625
+ _l.label = 4;
4626
4626
  case 4:
4627
4627
  if (!(msg.changes.length > 0)) return [3 /*break*/, 6];
4628
4628
  filteredChanges = filterServerChangesThroughAddedClientChanges(msg.changes, clientChanges);
@@ -4632,8 +4632,8 @@
4632
4632
  console.debug('applying filtered server changes', filteredChanges);
4633
4633
  return [4 /*yield*/, applyServerChanges(filteredChanges, db)];
4634
4634
  case 5:
4635
- _k.sent();
4636
- _k.label = 6;
4635
+ _l.sent();
4636
+ _l.label = 6;
4637
4637
  case 6:
4638
4638
  // Update latest revisions per table in case there are unsynced changes
4639
4639
  // This can be a real case in future when we allow non-eagery sync.
@@ -4644,37 +4644,37 @@
4644
4644
  console.debug('Updating baseRefs', syncState.latestRevisions);
4645
4645
  return [4 /*yield*/, updateBaseRevs(db, schema, syncState.latestRevisions, msg.newRev)];
4646
4646
  case 7:
4647
- _k.sent();
4647
+ _l.sent();
4648
4648
  //
4649
4649
  // Update syncState
4650
4650
  //
4651
4651
  console.debug('Updating syncState', syncState);
4652
4652
  return [4 /*yield*/, db.$syncState.put(syncState, 'syncState')];
4653
4653
  case 8:
4654
- _k.sent();
4654
+ _l.sent();
4655
4655
  return [2 /*return*/];
4656
4656
  }
4657
4657
  });
4658
4658
  }); })];
4659
4659
  case 11:
4660
- _l.sent();
4660
+ _m.sent();
4661
4661
  console.debug('msg queue: done with rw transaction');
4662
4662
  return [3 /*break*/, 12];
4663
4663
  case 12: return [3 /*break*/, 14];
4664
4664
  case 13:
4665
- error_2 = _l.sent();
4665
+ error_2 = _m.sent();
4666
4666
  console.error("Error in msg queue", error_2);
4667
4667
  return [3 /*break*/, 14];
4668
4668
  case 14: return [2 /*return*/];
4669
4669
  }
4670
4670
  });
4671
4671
  };
4672
- _j.label = 1;
4672
+ _k.label = 1;
4673
4673
  case 1:
4674
4674
  if (!(queue.length > 0)) return [3 /*break*/, 3];
4675
4675
  return [5 /*yield**/, _loop_7()];
4676
4676
  case 2:
4677
- _j.sent();
4677
+ _k.sent();
4678
4678
  return [3 /*break*/, 1];
4679
4679
  case 3: return [2 /*return*/];
4680
4680
  }
@@ -5009,8 +5009,8 @@
5009
5009
  // however, application code will work better if we can always rely on that the properties realmId
5010
5010
  // and owner are set. Application code may index them and query them based on db.cloud.currentUserId,
5011
5011
  // and expect them to be returned. That scenario must work also when db.cloud.currentUserId === 'unauthorized'.
5012
- for (var _j = 0, _k = req.values; _j < _k.length; _j++) {
5013
- var obj = _k[_j];
5012
+ for (var _k = 0, _l = req.values; _k < _l.length; _k++) {
5013
+ var obj = _l[_k];
5014
5014
  if (!obj.owner) {
5015
5015
  obj.owner = trans.currentUser.userId;
5016
5016
  }
@@ -5066,7 +5066,7 @@
5066
5066
  }
5067
5067
  function readLock(fn, prop) {
5068
5068
  return function readLocker(req) {
5069
- var _j = req.trans[prop] || (req.trans[prop] = { writers: [], readers: [] }), readers = _j.readers, writers = _j.writers;
5069
+ var _k = req.trans[prop] || (req.trans[prop] = { writers: [], readers: [] }), readers = _k.readers, writers = _k.writers;
5070
5070
  var numWriters = writers.length;
5071
5071
  var promise = (numWriters > 0
5072
5072
  ? writers[numWriters - 1].then(function () { return fn(req); }, function () { return fn(req); })
@@ -5077,7 +5077,7 @@
5077
5077
  }
5078
5078
  function writeLock(fn, prop) {
5079
5079
  return function writeLocker(req) {
5080
- var _j = req.trans[prop] || (req.trans[prop] = { writers: [], readers: [] }), readers = _j.readers, writers = _j.writers;
5080
+ var _k = req.trans[prop] || (req.trans[prop] = { writers: [], readers: [] }), readers = _k.readers, writers = _k.writers;
5081
5081
  var promise = (writers.length > 0
5082
5082
  ? writers[writers.length - 1].then(function () { return fn(req); }, function () { return fn(req); })
5083
5083
  : readers.length > 0
@@ -5096,8 +5096,8 @@
5096
5096
  * changes to server and cleanup the tracked mutations once the server has
5097
5097
  * ackowledged that it got them.
5098
5098
  */
5099
- function createMutationTrackingMiddleware(_j) {
5100
- var currentUserObservable = _j.currentUserObservable, db = _j.db;
5099
+ function createMutationTrackingMiddleware(_k) {
5100
+ var currentUserObservable = _k.currentUserObservable, db = _k.db;
5101
5101
  return {
5102
5102
  stack: 'dbcore',
5103
5103
  name: 'MutationTrackingMiddleware',
@@ -5338,13 +5338,13 @@
5338
5338
  }
5339
5339
  function performInitialSync(db, cloudOptions, cloudSchema) {
5340
5340
  return __awaiter$1(this, void 0, void 0, function () {
5341
- return __generator$1(this, function (_j) {
5342
- switch (_j.label) {
5341
+ return __generator$1(this, function (_k) {
5342
+ switch (_k.label) {
5343
5343
  case 0:
5344
5344
  console.debug('Performing initial sync');
5345
5345
  return [4 /*yield*/, sync(db, cloudOptions, cloudSchema, { isInitialSync: true })];
5346
5346
  case 1:
5347
- _j.sent();
5347
+ _k.sent();
5348
5348
  console.debug('Done initial sync');
5349
5349
  return [2 /*return*/];
5350
5350
  }
@@ -5495,8 +5495,8 @@
5495
5495
  return __awaiter$1(this, void 0, void 0, function () {
5496
5496
  var wsUrl, searchParams, ws, everConnected_1;
5497
5497
  var _this_1 = this;
5498
- return __generator$1(this, function (_j) {
5499
- switch (_j.label) {
5498
+ return __generator$1(this, function (_k) {
5499
+ switch (_k.label) {
5500
5500
  case 0:
5501
5501
  this.lastServerActivity = new Date();
5502
5502
  if (this.pauseUntil && this.pauseUntil > new Date()) {
@@ -5522,7 +5522,7 @@
5522
5522
  this.webSocketStatus.next('connecting');
5523
5523
  this.pinger = setInterval(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
5524
5524
  var _this_1 = this;
5525
- return __generator$1(this, function (_j) {
5525
+ return __generator$1(this, function (_k) {
5526
5526
  if (this.closed) {
5527
5527
  console.debug('pinger check', this.id, 'CLOSED.');
5528
5528
  this.teardown();
@@ -5607,9 +5607,9 @@
5607
5607
  _this_1.subscriber.error(e);
5608
5608
  }
5609
5609
  };
5610
- _j.label = 1;
5610
+ _k.label = 1;
5611
5611
  case 1:
5612
- _j.trys.push([1, 3, , 4]);
5612
+ _k.trys.push([1, 3, , 4]);
5613
5613
  everConnected_1 = false;
5614
5614
  return [4 /*yield*/, new Promise(function (resolve, reject) {
5615
5615
  ws.onopen = function (event) {
@@ -5630,7 +5630,7 @@
5630
5630
  };
5631
5631
  })];
5632
5632
  case 2:
5633
- _j.sent();
5633
+ _k.sent();
5634
5634
  this.messageProducerSubscription = this.messageProducer.subscribe(function (msg) {
5635
5635
  var _a;
5636
5636
  if (!_this_1.closed) {
@@ -5643,7 +5643,7 @@
5643
5643
  });
5644
5644
  return [3 /*break*/, 4];
5645
5645
  case 3:
5646
- _j.sent();
5646
+ _k.sent();
5647
5647
  this.pauseUntil = new Date(Date.now() + FAIL_RETRY_WAIT_TIME);
5648
5648
  return [3 /*break*/, 4];
5649
5649
  case 4: return [2 /*return*/];
@@ -5658,20 +5658,20 @@
5658
5658
  }
5659
5659
  function waitAndReconnectWhenUserDoesSomething(error) {
5660
5660
  return __awaiter$1(this, void 0, void 0, function () {
5661
- return __generator$1(this, function (_j) {
5662
- switch (_j.label) {
5661
+ return __generator$1(this, function (_k) {
5662
+ switch (_k.label) {
5663
5663
  case 0:
5664
5664
  console.error("WebSocket observable: error but revive when user does some active thing...", error);
5665
5665
  // Sleep some seconds...
5666
5666
  return [4 /*yield*/, sleep(3000)];
5667
5667
  case 1:
5668
5668
  // Sleep some seconds...
5669
- _j.sent();
5669
+ _k.sent();
5670
5670
  // Wait til user does something (move mouse, tap, scroll, click etc)
5671
5671
  console.debug('waiting for someone to do something');
5672
5672
  return [4 /*yield*/, userDoesSomething.pipe(take(1)).toPromise()];
5673
5673
  case 2:
5674
- _j.sent();
5674
+ _k.sent();
5675
5675
  console.debug('someone did something!');
5676
5676
  return [2 /*return*/];
5677
5677
  }
@@ -5695,21 +5695,21 @@
5695
5695
  var _this_1 = this;
5696
5696
  return db.cloud.persistedSyncState.pipe(filter(function (syncState) { return syncState === null || syncState === void 0 ? void 0 : syncState.serverRevision; }), // Don't connect before there's no initial sync performed.
5697
5697
  take(1), // Don't continue waking up whenever syncState change
5698
- switchMap(function (syncState) { return db.cloud.currentUser.pipe(map(function (userLogin) { return [userLogin, syncState]; })); }), switchMap(function (_j) {
5699
- var userLogin = _j[0], syncState = _j[1];
5698
+ switchMap(function (syncState) { return db.cloud.currentUser.pipe(map(function (userLogin) { return [userLogin, syncState]; })); }), switchMap(function (_k) {
5699
+ var userLogin = _k[0], syncState = _k[1];
5700
5700
  return userIsReallyActive.pipe(map(function (isActive) { return [isActive ? userLogin : null, syncState]; }));
5701
- }), switchMap(function (_j) {
5702
- var userLogin = _j[0], syncState = _j[1];
5703
- return __awaiter$1(_this_1, void 0, void 0, function () { var _j; return __generator$1(this, function (_k) {
5704
- switch (_k.label) {
5701
+ }), switchMap(function (_k) {
5702
+ var userLogin = _k[0], syncState = _k[1];
5703
+ return __awaiter$1(_this_1, void 0, void 0, function () { var _k; return __generator$1(this, function (_l) {
5704
+ switch (_l.label) {
5705
5705
  case 0:
5706
- _j = [userLogin];
5706
+ _k = [userLogin];
5707
5707
  return [4 /*yield*/, computeRealmSetHash(syncState)];
5708
- case 1: return [2 /*return*/, _j.concat([_k.sent()])];
5708
+ case 1: return [2 /*return*/, _k.concat([_l.sent()])];
5709
5709
  }
5710
5710
  }); });
5711
- }), switchMap(function (_j) {
5712
- var userLogin = _j[0], realmSetHash = _j[1];
5711
+ }), switchMap(function (_k) {
5712
+ var userLogin = _k[0], realmSetHash = _k[1];
5713
5713
  // Let server end query changes from last entry of same client-ID and forward.
5714
5714
  // If no new entries, server won't bother the client. If new entries, server sends only those
5715
5715
  // and the baseRev of the last from same client-ID.
@@ -5721,14 +5721,14 @@
5721
5721
  console.debug('WebSocket observable: Token expired. Refreshing token...');
5722
5722
  return rxjs.of(true).pipe(switchMap(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
5723
5723
  var user, refreshedLogin;
5724
- return __generator$1(this, function (_j) {
5725
- switch (_j.label) {
5724
+ return __generator$1(this, function (_k) {
5725
+ switch (_k.label) {
5726
5726
  case 0: return [4 /*yield*/, db.getCurrentUser()];
5727
5727
  case 1:
5728
- user = _j.sent();
5728
+ user = _k.sent();
5729
5729
  return [4 /*yield*/, refreshAccessToken(db.cloud.options.databaseUrl, user)];
5730
5730
  case 2:
5731
- refreshedLogin = _j.sent();
5731
+ refreshedLogin = _k.sent();
5732
5732
  // Persist updated access token
5733
5733
  return [4 /*yield*/, db.table('$logins').update(user.userId, {
5734
5734
  accessToken: refreshedLogin.accessToken,
@@ -5736,7 +5736,7 @@
5736
5736
  })];
5737
5737
  case 3:
5738
5738
  // Persist updated access token
5739
- _j.sent();
5739
+ _k.sent();
5740
5740
  return [2 /*return*/];
5741
5741
  }
5742
5742
  });
@@ -5764,19 +5764,19 @@
5764
5764
  function isSyncNeeded(db) {
5765
5765
  var _a;
5766
5766
  return __awaiter$1(this, void 0, void 0, function () {
5767
- var _j;
5768
- return __generator$1(this, function (_k) {
5769
- switch (_k.label) {
5767
+ var _k;
5768
+ return __generator$1(this, function (_l) {
5769
+ switch (_l.label) {
5770
5770
  case 0:
5771
5771
  if (!(((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.databaseUrl) && db.cloud.schema)) return [3 /*break*/, 2];
5772
5772
  return [4 /*yield*/, sync(db, db.cloud.options, db.cloud.schema, { justCheckIfNeeded: true })];
5773
5773
  case 1:
5774
- _j = _k.sent();
5774
+ _k = _l.sent();
5775
5775
  return [3 /*break*/, 3];
5776
5776
  case 2:
5777
- _j = false;
5778
- _k.label = 3;
5779
- case 3: return [2 /*return*/, _j];
5777
+ _k = false;
5778
+ _l.label = 3;
5779
+ case 3: return [2 /*return*/, _k];
5780
5780
  }
5781
5781
  });
5782
5782
  });
@@ -5786,22 +5786,22 @@
5786
5786
  var myId = randomString(16);
5787
5787
  var GUARDED_JOB_HEARTBEAT = 1 * SECONDS;
5788
5788
  var GUARDED_JOB_TIMEOUT = 1 * MINUTES;
5789
- function performGuardedJob(db, jobName, jobsTableName, job, _j) {
5790
- var _k = _j === void 0 ? {} : _j, awaitRemoteJob = _k.awaitRemoteJob;
5789
+ function performGuardedJob(db, jobName, jobsTableName, job, _k) {
5790
+ var _l = _k === void 0 ? {} : _k, awaitRemoteJob = _l.awaitRemoteJob;
5791
5791
  return __awaiter$1(this, void 0, void 0, function () {
5792
5792
  function aquireLock() {
5793
5793
  return __awaiter$1(this, void 0, void 0, function () {
5794
5794
  var gotTheLock, jobDoneObservable, err_1;
5795
5795
  var _this_1 = this;
5796
- return __generator$1(this, function (_j) {
5797
- switch (_j.label) {
5796
+ return __generator$1(this, function (_k) {
5797
+ switch (_k.label) {
5798
5798
  case 0: return [4 /*yield*/, db.transaction('rw!', jobsTableName, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
5799
5799
  var currentWork;
5800
- return __generator$1(this, function (_j) {
5801
- switch (_j.label) {
5800
+ return __generator$1(this, function (_k) {
5801
+ switch (_k.label) {
5802
5802
  case 0: return [4 /*yield*/, jobsTable.get(jobName)];
5803
5803
  case 1:
5804
- currentWork = _j.sent();
5804
+ currentWork = _k.sent();
5805
5805
  if (!!currentWork) return [3 /*break*/, 3];
5806
5806
  // No one else is working. Let's record that we are.
5807
5807
  return [4 /*yield*/, jobsTable.add({
@@ -5811,7 +5811,7 @@
5811
5811
  }, jobName)];
5812
5812
  case 2:
5813
5813
  // No one else is working. Let's record that we are.
5814
- _j.sent();
5814
+ _k.sent();
5815
5815
  return [2 /*return*/, true];
5816
5816
  case 3:
5817
5817
  if (!(currentWork.heartbeat.getTime() <
@@ -5825,27 +5825,27 @@
5825
5825
  }, jobName)];
5826
5826
  case 4:
5827
5827
  // Now, take over!
5828
- _j.sent();
5828
+ _k.sent();
5829
5829
  return [2 /*return*/, true];
5830
5830
  case 5: return [2 /*return*/, false];
5831
5831
  }
5832
5832
  });
5833
5833
  }); })];
5834
5834
  case 1:
5835
- gotTheLock = _j.sent();
5835
+ gotTheLock = _k.sent();
5836
5836
  if (gotTheLock)
5837
5837
  return [2 /*return*/, true];
5838
5838
  if (!awaitRemoteJob) return [3 /*break*/, 6];
5839
- _j.label = 2;
5839
+ _k.label = 2;
5840
5840
  case 2:
5841
- _j.trys.push([2, 4, , 6]);
5841
+ _k.trys.push([2, 4, , 6]);
5842
5842
  jobDoneObservable = rxjs.from(Dexie.liveQuery(function () { return jobsTable.get(jobName); })).pipe(timeout(GUARDED_JOB_TIMEOUT), filter(function (job) { return !job; }));
5843
5843
  return [4 /*yield*/, jobDoneObservable.toPromise()];
5844
5844
  case 3:
5845
- _j.sent();
5845
+ _k.sent();
5846
5846
  return [2 /*return*/, false];
5847
5847
  case 4:
5848
- err_1 = _j.sent();
5848
+ err_1 = _k.sent();
5849
5849
  if (err_1.name !== 'TimeoutError') {
5850
5850
  throw err_1;
5851
5851
  }
@@ -5854,7 +5854,7 @@
5854
5854
  // Timeout stopped us! Try aquire the lock now.
5855
5855
  // It will likely succeed this time unless
5856
5856
  // another client took it.
5857
- return [2 /*return*/, _j.sent()];
5857
+ return [2 /*return*/, _k.sent()];
5858
5858
  case 6: return [2 /*return*/, false];
5859
5859
  }
5860
5860
  });
@@ -5862,13 +5862,13 @@
5862
5862
  }
5863
5863
  var jobsTable, heartbeat;
5864
5864
  var _this_1 = this;
5865
- return __generator$1(this, function (_j) {
5866
- switch (_j.label) {
5865
+ return __generator$1(this, function (_k) {
5866
+ switch (_k.label) {
5867
5867
  case 0:
5868
5868
  jobsTable = db.table(jobsTableName);
5869
5869
  return [4 /*yield*/, aquireLock()];
5870
5870
  case 1:
5871
- if (!_j.sent()) return [3 /*break*/, 6];
5871
+ if (!_k.sent()) return [3 /*break*/, 6];
5872
5872
  heartbeat = setInterval(function () {
5873
5873
  jobsTable.update(jobName, function (job) {
5874
5874
  if (job.nodeId === myId) {
@@ -5876,34 +5876,34 @@
5876
5876
  }
5877
5877
  });
5878
5878
  }, GUARDED_JOB_HEARTBEAT);
5879
- _j.label = 2;
5879
+ _k.label = 2;
5880
5880
  case 2:
5881
- _j.trys.push([2, , 4, 6]);
5881
+ _k.trys.push([2, , 4, 6]);
5882
5882
  return [4 /*yield*/, job()];
5883
- case 3: return [2 /*return*/, _j.sent()];
5883
+ case 3: return [2 /*return*/, _k.sent()];
5884
5884
  case 4:
5885
5885
  // Stop heartbeat
5886
5886
  clearInterval(heartbeat);
5887
5887
  // Remove the persisted job state:
5888
5888
  return [4 /*yield*/, db.transaction('rw!', jobsTableName, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
5889
5889
  var currentWork;
5890
- return __generator$1(this, function (_j) {
5891
- switch (_j.label) {
5890
+ return __generator$1(this, function (_k) {
5891
+ switch (_k.label) {
5892
5892
  case 0: return [4 /*yield*/, jobsTable.get(jobName)];
5893
5893
  case 1:
5894
- currentWork = _j.sent();
5894
+ currentWork = _k.sent();
5895
5895
  if (!(currentWork && currentWork.nodeId === myId)) return [3 /*break*/, 3];
5896
5896
  return [4 /*yield*/, jobsTable.delete(jobName)];
5897
5897
  case 2:
5898
- _j.sent();
5899
- _j.label = 3;
5898
+ _k.sent();
5899
+ _k.label = 3;
5900
5900
  case 3: return [2 /*return*/];
5901
5901
  }
5902
5902
  });
5903
5903
  }); })];
5904
5904
  case 5:
5905
5905
  // Remove the persisted job state:
5906
- _j.sent();
5906
+ _k.sent();
5907
5907
  return [7 /*endfinally*/];
5908
5908
  case 6: return [2 /*return*/];
5909
5909
  }
@@ -5961,32 +5961,36 @@
5961
5961
  function _syncIfPossible() {
5962
5962
  return __awaiter$1(this, void 0, void 0, function () {
5963
5963
  var error_4;
5964
- return __generator$1(this, function (_j) {
5965
- switch (_j.label) {
5964
+ return __generator$1(this, function (_k) {
5965
+ switch (_k.label) {
5966
5966
  case 0:
5967
- _j.trys.push([0, 6, , 7]);
5968
- if (!db.cloud.usingServiceWorker) return [3 /*break*/, 3];
5969
- if (!IS_SERVICE_WORKER) return [3 /*break*/, 2];
5967
+ _k.trys.push([0, 6, , 7]);
5968
+ if (!db.cloud.isServiceWorkerDB) return [3 /*break*/, 2];
5969
+ // We are the dedicated sync SW:
5970
5970
  return [4 /*yield*/, sync(db, cloudOptions, cloudSchema, options)];
5971
5971
  case 1:
5972
- _j.sent();
5973
- _j.label = 2;
5974
- case 2: return [3 /*break*/, 5];
5975
- case 3:
5976
- // We use a flow that is better suited for the case when multiple workers want to
5977
- // do the same thing.
5978
- return [4 /*yield*/, performGuardedJob(db, CURRENT_SYNC_WORKER, '$jobs', function () { return sync(db, cloudOptions, cloudSchema, options); })];
5979
- case 4:
5972
+ // We are the dedicated sync SW:
5973
+ _k.sent();
5974
+ return [3 /*break*/, 5];
5975
+ case 2:
5976
+ if (!!db.cloud.usingServiceWorker) return [3 /*break*/, 4];
5977
+ // We use a flow that is better suited for the case when multiple workers want to
5978
+ // do the same thing.
5979
+ return [4 /*yield*/, performGuardedJob(db, CURRENT_SYNC_WORKER, '$jobs', function () { return sync(db, cloudOptions, cloudSchema, options); })];
5980
+ case 3:
5980
5981
  // We use a flow that is better suited for the case when multiple workers want to
5981
5982
  // do the same thing.
5982
- _j.sent();
5983
- _j.label = 5;
5983
+ _k.sent();
5984
+ return [3 /*break*/, 5];
5985
+ case 4:
5986
+ assert(false);
5987
+ throw new Error('Internal _syncIfPossible() - invalid precondition - should not have been called.');
5984
5988
  case 5:
5985
5989
  ongoingSyncs.delete(db);
5986
5990
  console.debug('Done sync');
5987
5991
  return [3 /*break*/, 7];
5988
5992
  case 6:
5989
- error_4 = _j.sent();
5993
+ error_4 = _k.sent();
5990
5994
  ongoingSyncs.delete(db);
5991
5995
  console.error("Failed to sync client changes", error_4);
5992
5996
  throw error_4; // Make sure we rethrow error so that sync event is retried.
@@ -6028,8 +6032,8 @@
6028
6032
  // Sync eagerly whenever a change has happened (+ initially when there's no syncState yet)
6029
6033
  // This initial subscribe will also trigger an sync also now.
6030
6034
  console.debug('Starting LocalSyncWorker', db.localSyncEvent['id']);
6031
- localSyncEventSubscription = db.localSyncEvent.subscribe(function (_j) {
6032
- var purpose = _j.purpose;
6035
+ localSyncEventSubscription = db.localSyncEvent.subscribe(function (_k) {
6036
+ var purpose = _k.purpose;
6033
6037
  try {
6034
6038
  syncAndRetry(purpose || 'pull');
6035
6039
  }
@@ -6053,8 +6057,8 @@
6053
6057
  function updateSchemaFromOptions(schema, options) {
6054
6058
  if (schema && options) {
6055
6059
  if (options.unsyncedTables) {
6056
- for (var _j = 0, _k = options.unsyncedTables; _j < _k.length; _j++) {
6057
- var tableName = _k[_j];
6060
+ for (var _k = 0, _l = options.unsyncedTables; _k < _l.length; _k++) {
6061
+ var tableName = _l[_k];
6058
6062
  if (schema[tableName]) {
6059
6063
  schema[tableName].markedForSync = false;
6060
6064
  }
@@ -6064,8 +6068,8 @@
6064
6068
  }
6065
6069
  function verifySchema(db) {
6066
6070
  var _a, _b;
6067
- for (var _j = 0, _k = db.tables; _j < _k.length; _j++) {
6068
- var table = _k[_j];
6071
+ for (var _k = 0, _l = db.tables; _k < _l.length; _k++) {
6072
+ var table = _l[_k];
6069
6073
  if ((_b = (_a = db.cloud.schema) === null || _a === void 0 ? void 0 : _a[table.name]) === null || _b === void 0 ? void 0 : _b.markedForSync) {
6070
6074
  if (table.schema.primKey.auto) {
6071
6075
  throw new Dexie__default["default"].SchemaError("Table ".concat(table.name, " is both autoIncremented and synced. ") +
@@ -6308,8 +6312,8 @@
6308
6312
  padding: "8px"
6309
6313
  }
6310
6314
  };
6311
- function Dialog(_j) {
6312
- var children = _j.children;
6315
+ function Dialog(_k) {
6316
+ var children = _k.children;
6313
6317
  return (a$1("div", null, a$1("div", { style: Styles.Darken }), a$1("div", { style: Styles.DialogOuter }, a$1("div", { style: Styles.DialogInner }, children))));
6314
6318
  }
6315
6319
  var t, u, r, o = 0, i = [], c = n.__b, f = n.__r, e = n.diffed, a = n.__c, v = n.unmount;
@@ -6343,24 +6347,24 @@
6343
6347
  function j(n) { var t = u; n.__c = n.__(), u = t; }
6344
6348
  function k(n, t) { return !n || n.length !== t.length || t.some(function (t, u) { return t !== n[u]; }); }
6345
6349
  function w(n, t) { return "function" == typeof t ? t(n) : t; }
6346
- function resolveText(_j) {
6347
- var message = _j.message; _j.messageCode; var messageParams = _j.messageParams;
6350
+ function resolveText(_k) {
6351
+ var message = _k.message; _k.messageCode; var messageParams = _k.messageParams;
6348
6352
  return message.replace(/\{\w+\}/ig, function (n) { return messageParams[n.substr(1, n.length - 2)]; });
6349
6353
  }
6350
- function LoginDialog(_j) {
6351
- var title = _j.title, alerts = _j.alerts, fields = _j.fields, onCancel = _j.onCancel, onSubmit = _j.onSubmit;
6352
- var _k = l({}), params = _k[0], setParams = _k[1];
6354
+ function LoginDialog(_k) {
6355
+ var title = _k.title, alerts = _k.alerts, fields = _k.fields, onCancel = _k.onCancel, onSubmit = _k.onSubmit;
6356
+ var _l = l({}), params = _l[0], setParams = _l[1];
6353
6357
  var firstFieldRef = s();
6354
6358
  h(function () { var _a; return (_a = firstFieldRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, []);
6355
6359
  return (a$1(Dialog, null, a$1(y, null, a$1("h3", { style: Styles.WindowHeader }, title), alerts.map(function (alert) { return (a$1("p", { style: Styles.Alert[alert.type] }, resolveText(alert))); }), a$1("form", { onSubmit: function (ev) {
6356
6360
  ev.preventDefault();
6357
6361
  onSubmit(params);
6358
- } }, Object.entries(fields).map(function (_j, idx) {
6359
- var fieldName = _j[0], _k = _j[1], type = _k.type, label = _k.label, placeholder = _k.placeholder;
6362
+ } }, Object.entries(fields).map(function (_k, idx) {
6363
+ var fieldName = _k[0], _l = _k[1], type = _l.type, label = _l.label, placeholder = _l.placeholder;
6360
6364
  return (a$1("label", { style: Styles.Label }, label ? "".concat(label, ": ") : '', a$1("input", { ref: idx === 0 ? firstFieldRef : undefined, type: type, name: fieldName, autoComplete: "on", style: Styles.Input, autoFocus: true, placeholder: placeholder, value: params[fieldName] || '', onInput: function (ev) {
6361
- var _j;
6365
+ var _k;
6362
6366
  var _a;
6363
- return setParams(Object.assign(Object.assign({}, params), (_j = {}, _j[fieldName] = valueTransformer(type, (_a = ev.target) === null || _a === void 0 ? void 0 : _a['value']), _j)));
6367
+ return setParams(Object.assign(Object.assign({}, params), (_k = {}, _k[fieldName] = valueTransformer(type, (_a = ev.target) === null || _a === void 0 ? void 0 : _a['value']), _k)));
6364
6368
  } })));
6365
6369
  }))), a$1("div", { style: Styles.ButtonsDiv }, a$1("button", { type: "submit", style: Styles.Button, onClick: function () { return onSubmit(params); } }, "Submit"), a$1("button", { style: Styles.Button, onClick: onCancel }, "Cancel"))));
6366
6370
  }
@@ -6388,8 +6392,8 @@
6388
6392
  delete this.subscription;
6389
6393
  }
6390
6394
  };
6391
- LoginGui.prototype.render = function (props, _j) {
6392
- var userInteraction = _j.userInteraction;
6395
+ LoginGui.prototype.render = function (props, _k) {
6396
+ var userInteraction = _k.userInteraction;
6393
6397
  if (!userInteraction)
6394
6398
  return null;
6395
6399
  //if (props.db.cloud.userInteraction.observers.length > 1) return null; // Someone else subscribes.
@@ -6444,8 +6448,8 @@
6444
6448
  lazyWebSocketStatus,
6445
6449
  db.syncStateChangedEvent.pipe(startWith({ phase: 'initial' })),
6446
6450
  userIsReallyActive
6447
- ]).pipe(map(function (_j) {
6448
- var status = _j[0], syncState = _j[1], userIsActive = _j[2];
6451
+ ]).pipe(map(function (_k) {
6452
+ var status = _k[0], syncState = _k[1], userIsActive = _k[2];
6449
6453
  var phase = syncState.phase, error = syncState.error, progress = syncState.progress;
6450
6454
  var adjustedStatus = status;
6451
6455
  if (phase === 'error') {
@@ -6524,10 +6528,10 @@
6524
6528
  .toArray()
6525
6529
  .then(function (roles) {
6526
6530
  var rv = {};
6527
- for (var _j = 0, _k = roles
6531
+ for (var _k = 0, _l = roles
6528
6532
  .slice()
6529
- .sort(function (a, b) { return (a.sortOrder || 0) - (b.sortOrder || 0); }); _j < _k.length; _j++) {
6530
- var role = _k[_j];
6533
+ .sort(function (a, b) { return (a.sortOrder || 0) - (b.sortOrder || 0); }); _k < _l.length; _k++) {
6534
+ var role = _l[_k];
6531
6535
  rv[role.name] = role;
6532
6536
  }
6533
6537
  return rv;
@@ -6539,8 +6543,8 @@
6539
6543
  db.members.where({ userId: currentUser.userId }).toArray(),
6540
6544
  db.realms.toArray(),
6541
6545
  currentUser.userId,
6542
- ]).then(function (_j) {
6543
- var selfMembers = _j[0], realms = _j[1], userId = _j[2];
6546
+ ]).then(function (_k) {
6547
+ var selfMembers = _k[0], realms = _k[1], userId = _k[2];
6544
6548
  //console.debug(`PERMS: Result from liveQUery():`, JSON.stringify({selfMembers, realms, userId}, null, 2))
6545
6549
  return { selfMembers: selfMembers, realms: realms, userId: userId };
6546
6550
  }); }); }); })), {
@@ -6573,15 +6577,15 @@
6573
6577
  // TODO: Move to dexie-cloud-common
6574
6578
  function mergePermissions() {
6575
6579
  var permissions = [];
6576
- for (var _j = 0; _j < arguments.length; _j++) {
6577
- permissions[_j] = arguments[_j];
6580
+ for (var _k = 0; _k < arguments.length; _k++) {
6581
+ permissions[_k] = arguments[_k];
6578
6582
  }
6579
6583
  if (permissions.length === 0)
6580
6584
  return {};
6581
6585
  var reduced = permissions.reduce(function (result, next) {
6582
6586
  var ret = Object.assign({}, result);
6583
- for (var _j = 0, _k = Object.entries(next); _j < _k.length; _j++) {
6584
- var _l = _k[_j], verb = _l[0], rights = _l[1];
6587
+ for (var _k = 0, _l = Object.entries(next); _k < _l.length; _k++) {
6588
+ var _m = _l[_k], verb = _m[0], rights = _m[1];
6585
6589
  if (verb in ret && ret[verb]) {
6586
6590
  if (ret[verb] === '*')
6587
6591
  continue;
@@ -6599,8 +6603,8 @@
6599
6603
  typeof ret[verb] === 'object') {
6600
6604
  // Both are objects (verb is 'update')
6601
6605
  var mergedRights = ret[verb]; // because we've checked that typeof ret[verb] === 'object' and earlier that not ret[verb] === '*'.
6602
- for (var _m = 0, _o = Object.entries(rights); _m < _o.length; _m++) {
6603
- var _p = _o[_m], tableName = _p[0], tableRights = _p[1];
6606
+ for (var _o = 0, _p = Object.entries(rights); _o < _p.length; _o++) {
6607
+ var _q = _p[_o], tableName = _q[0], tableRights = _q[1];
6604
6608
  if (mergedRights[tableName] === '*')
6605
6609
  continue;
6606
6610
  if (tableRights === '*') {
@@ -6638,8 +6642,8 @@
6638
6642
  var o = createSharedValueObservable(rxjs.combineLatest([
6639
6643
  getInternalAccessControlObservable(db._novip),
6640
6644
  getGlobalRolesObservable(db._novip),
6641
- ]).pipe(map(function (_j) {
6642
- var _k = _j[0], selfMembers = _k.selfMembers, realms = _k.realms, userId = _k.userId, globalRoles = _j[1];
6645
+ ]).pipe(map(function (_k) {
6646
+ var _l = _k[0], selfMembers = _l.selfMembers, realms = _l.realms, userId = _l.userId, globalRoles = _k[1];
6643
6647
  return ({
6644
6648
  selfMembers: selfMembers,
6645
6649
  realms: realms,
@@ -6652,9 +6656,9 @@
6652
6656
  userId: UNAUTHORIZED_USER.userId,
6653
6657
  globalRoles: {},
6654
6658
  });
6655
- return mapValueObservable(o, function (_j) {
6656
- var _k;
6657
- var selfMembers = _j.selfMembers, realms = _j.realms, userId = _j.userId, globalRoles = _j.globalRoles;
6659
+ return mapValueObservable(o, function (_k) {
6660
+ var _l;
6661
+ var selfMembers = _k.selfMembers, realms = _k.realms, userId = _k.userId, globalRoles = _k.globalRoles;
6658
6662
  var rv = realms
6659
6663
  .map(function (realm) {
6660
6664
  var selfRealmMembers = selfMembers.filter(function (m) { return m.realmId === realm.realmId; });
@@ -6670,16 +6674,16 @@
6670
6674
  : mergePermissions.apply(void 0, __spreadArray$1(__spreadArray$1([], directPermissionSets, false), rolePermissionSets, false)) });
6671
6675
  })
6672
6676
  .reduce(function (p, c) {
6673
- var _j;
6674
- return (Object.assign(Object.assign({}, p), (_j = {}, _j[c.realmId] = c, _j)));
6675
- }, (_k = {},
6676
- _k[userId] = {
6677
+ var _k;
6678
+ return (Object.assign(Object.assign({}, p), (_k = {}, _k[c.realmId] = c, _k)));
6679
+ }, (_l = {},
6680
+ _l[userId] = {
6677
6681
  realmId: userId,
6678
6682
  owner: userId,
6679
6683
  name: userId,
6680
6684
  permissions: { manage: '*' },
6681
6685
  },
6682
- _k));
6686
+ _l));
6683
6687
  return rv;
6684
6688
  });
6685
6689
  });
@@ -6692,8 +6696,8 @@
6692
6696
  PermissionChecker.prototype.add = function () {
6693
6697
  var _this_1 = this;
6694
6698
  var tableNames = [];
6695
- for (var _j = 0; _j < arguments.length; _j++) {
6696
- tableNames[_j] = arguments[_j];
6699
+ for (var _k = 0; _k < arguments.length; _k++) {
6700
+ tableNames[_k] = arguments[_k];
6697
6701
  }
6698
6702
  var _a;
6699
6703
  // If user can manage the whole realm, return true.
@@ -6713,8 +6717,8 @@
6713
6717
  };
6714
6718
  PermissionChecker.prototype.update = function () {
6715
6719
  var props = [];
6716
- for (var _j = 0; _j < arguments.length; _j++) {
6717
- props[_j] = arguments[_j];
6720
+ for (var _k = 0; _k < arguments.length; _k++) {
6721
+ props[_k] = arguments[_k];
6718
6722
  }
6719
6723
  var _a, _b;
6720
6724
  // If user is owner of this object, or if user can manage the whole realm, return true.
@@ -6776,11 +6780,11 @@
6776
6780
  var membersByEmail = getCurrentUserEmitter(db._novip).pipe(rxjs.switchMap(function (currentUser) { return Dexie.liveQuery(function () { return db.members.where({ email: currentUser.email || '' }).toArray(); }); }));
6777
6781
  var permissions = getPermissionsLookupObservable(db._novip);
6778
6782
  var accessControl = getInternalAccessControlObservable(db._novip);
6779
- return createSharedValueObservable(rxjs.combineLatest([membersByEmail, accessControl, permissions]).pipe(rxjs.map(function (_j) {
6780
- var membersByEmail = _j[0], accessControl = _j[1], realmLookup = _j[2];
6783
+ return createSharedValueObservable(rxjs.combineLatest([membersByEmail, accessControl, permissions]).pipe(rxjs.map(function (_k) {
6784
+ var membersByEmail = _k[0], accessControl = _k[1], realmLookup = _k[2];
6781
6785
  var reducer = function (result, m) {
6782
- var _j;
6783
- return (Object.assign(Object.assign({}, result), (_j = {}, _j[m.id] = Object.assign(Object.assign({}, m), { realm: realmLookup[m.realmId] }), _j)));
6786
+ var _k;
6787
+ return (Object.assign(Object.assign({}, result), (_k = {}, _k[m.id] = Object.assign(Object.assign({}, m), { realm: realmLookup[m.realmId] }), _k)));
6784
6788
  };
6785
6789
  var emailMembersById = membersByEmail.reduce(reducer, {});
6786
6790
  var membersById = accessControl.selfMembers.reduce(reducer, emailMembersById);
@@ -6809,16 +6813,16 @@
6809
6813
  var localSyncWorker = null;
6810
6814
  dexie.on('ready', function (dexie) { return __awaiter$1(_this_1, void 0, void 0, function () {
6811
6815
  var error_5;
6812
- return __generator$1(this, function (_j) {
6813
- switch (_j.label) {
6816
+ return __generator$1(this, function (_k) {
6817
+ switch (_k.label) {
6814
6818
  case 0:
6815
- _j.trys.push([0, 2, , 3]);
6819
+ _k.trys.push([0, 2, , 3]);
6816
6820
  return [4 /*yield*/, onDbReady(dexie)];
6817
6821
  case 1:
6818
- _j.sent();
6822
+ _k.sent();
6819
6823
  return [3 /*break*/, 3];
6820
6824
  case 2:
6821
- error_5 = _j.sent();
6825
+ error_5 = _k.sent();
6822
6826
  console.error(error_5);
6823
6827
  return [3 /*break*/, 3];
6824
6828
  case 3: return [2 /*return*/];
@@ -6840,7 +6844,7 @@
6840
6844
  currentUserEmitter.next(UNAUTHORIZED_USER);
6841
6845
  });
6842
6846
  dexie.cloud = {
6843
- version: '4.0.0-beta.18',
6847
+ version: '4.0.0-beta.19',
6844
6848
  options: Object.assign({}, DEFAULT_OPTIONS),
6845
6849
  schema: null,
6846
6850
  serverState: null,
@@ -6858,16 +6862,16 @@
6858
6862
  login: function (hint) {
6859
6863
  return __awaiter$1(this, void 0, void 0, function () {
6860
6864
  var db;
6861
- return __generator$1(this, function (_j) {
6862
- switch (_j.label) {
6865
+ return __generator$1(this, function (_k) {
6866
+ switch (_k.label) {
6863
6867
  case 0:
6864
6868
  db = DexieCloudDB(dexie);
6865
6869
  return [4 /*yield*/, db.cloud.sync()];
6866
6870
  case 1:
6867
- _j.sent();
6871
+ _k.sent();
6868
6872
  return [4 /*yield*/, login(db, hint)];
6869
6873
  case 2:
6870
- _j.sent();
6874
+ _k.sent();
6871
6875
  return [2 /*return*/];
6872
6876
  }
6873
6877
  });
@@ -6885,13 +6889,13 @@
6885
6889
  }
6886
6890
  updateSchemaFromOptions(dexie.cloud.schema, dexie.cloud.options);
6887
6891
  },
6888
- sync: function (_j) {
6889
- var _k = _j === void 0 ? { wait: true, purpose: 'push' } : _j, wait = _k.wait, purpose = _k.purpose;
6892
+ sync: function (_k) {
6893
+ var _l = _k === void 0 ? { wait: true, purpose: 'push' } : _k, wait = _l.wait, purpose = _l.purpose;
6890
6894
  return __awaiter$1(this, void 0, void 0, function () {
6891
6895
  var db, syncState_1, newSyncState, syncState_2;
6892
6896
  var _this_1 = this;
6893
- return __generator$1(this, function (_j) {
6894
- switch (_j.label) {
6897
+ return __generator$1(this, function (_k) {
6898
+ switch (_k.label) {
6895
6899
  case 0:
6896
6900
  if (wait === undefined)
6897
6901
  wait = true;
@@ -6905,29 +6909,29 @@
6905
6909
  (!syncState_1 || newSyncState.timestamp > syncState_1.timestamp); }), take(1))
6906
6910
  .toPromise()];
6907
6911
  case 1:
6908
- newSyncState = _j.sent();
6912
+ newSyncState = _k.sent();
6909
6913
  if (newSyncState === null || newSyncState === void 0 ? void 0 : newSyncState.error) {
6910
6914
  throw new Error("Sync error: " + newSyncState.error);
6911
6915
  }
6912
- _j.label = 2;
6916
+ _k.label = 2;
6913
6917
  case 2: return [3 /*break*/, 6];
6914
6918
  case 3: return [4 /*yield*/, isSyncNeeded(db)];
6915
6919
  case 4:
6916
- if (!_j.sent()) return [3 /*break*/, 6];
6920
+ if (!_k.sent()) return [3 /*break*/, 6];
6917
6921
  syncState_2 = db.cloud.persistedSyncState.value;
6918
6922
  triggerSync(db, purpose);
6919
6923
  if (!wait) return [3 /*break*/, 6];
6920
6924
  console.debug('db.cloud.login() is waiting for sync completion...');
6921
6925
  return [4 /*yield*/, rxjs.from(Dexie.liveQuery(function () { return __awaiter$1(_this_1, void 0, void 0, function () {
6922
6926
  var syncNeeded, newSyncState;
6923
- return __generator$1(this, function (_j) {
6924
- switch (_j.label) {
6927
+ return __generator$1(this, function (_k) {
6928
+ switch (_k.label) {
6925
6929
  case 0: return [4 /*yield*/, isSyncNeeded(db)];
6926
6930
  case 1:
6927
- syncNeeded = _j.sent();
6931
+ syncNeeded = _k.sent();
6928
6932
  return [4 /*yield*/, db.getPersistedSyncState()];
6929
6933
  case 2:
6930
- newSyncState = _j.sent();
6934
+ newSyncState = _k.sent();
6931
6935
  if ((newSyncState === null || newSyncState === void 0 ? void 0 : newSyncState.timestamp) !== (syncState_2 === null || syncState_2 === void 0 ? void 0 : syncState_2.timestamp) &&
6932
6936
  (newSyncState === null || newSyncState === void 0 ? void 0 : newSyncState.error))
6933
6937
  throw new Error("Sync error: " + newSyncState.error);
@@ -6938,9 +6942,9 @@
6938
6942
  .pipe(filter(function (isNeeded) { return !isNeeded; }), take(1))
6939
6943
  .toPromise()];
6940
6944
  case 5:
6941
- _j.sent();
6945
+ _k.sent();
6942
6946
  console.debug('Done waiting for sync completion because we have nothing to push anymore');
6943
- _j.label = 6;
6947
+ _k.label = 6;
6944
6948
  case 6: return [2 /*return*/];
6945
6949
  }
6946
6950
  });
@@ -6951,8 +6955,8 @@
6951
6955
  },
6952
6956
  };
6953
6957
  dexie.Version.prototype['_parseStoresSpec'] = Dexie__default["default"].override(dexie.Version.prototype['_parseStoresSpec'], function (origFunc) { return overrideParseStoresSpec(origFunc, dexie); });
6954
- dexie.Table.prototype.newId = function (_j) {
6955
- var _k = _j === void 0 ? {} : _j, colocateWith = _k.colocateWith;
6958
+ dexie.Table.prototype.newId = function (_k) {
6959
+ var _l = _k === void 0 ? {} : _k, colocateWith = _l.colocateWith;
6956
6960
  var shardKey = colocateWith && colocateWith.substr(colocateWith.length - 3);
6957
6961
  return generateKey(dexie.cloud.schema[this.name].idPrefix || '', shardKey);
6958
6962
  };
@@ -6967,20 +6971,22 @@
6967
6971
  dexie.use(createImplicitPropSetterMiddleware(DexieCloudDB(dexie)));
6968
6972
  dexie.use(createIdGenerationMiddleware(DexieCloudDB(dexie)));
6969
6973
  function onDbReady(dexie) {
6970
- var _a, _b, _c, _d, _e, _f;
6974
+ var _a, _b, _c, _d, _e, _f, _g;
6971
6975
  return __awaiter$1(this, void 0, void 0, function () {
6972
- var db, swRegistrations, _j, initiallySynced;
6976
+ var db, swRegistrations, _k, initiallySynced;
6973
6977
  var _this_1 = this;
6974
- return __generator$1(this, function (_k) {
6975
- switch (_k.label) {
6978
+ return __generator$1(this, function (_l) {
6979
+ switch (_l.label) {
6976
6980
  case 0:
6977
6981
  closed = false; // As Dexie calls us, we are not closed anymore. Maybe reopened? Remember db.ready event is registered with sticky flag!
6978
6982
  db = DexieCloudDB(dexie);
6979
6983
  // Setup default GUI:
6980
- if (!IS_SERVICE_WORKER) {
6984
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
6981
6985
  if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.customLoginGui)) {
6982
6986
  subscriptions.push(setupDefaultGUI(dexie));
6983
6987
  }
6988
+ }
6989
+ if (!db.cloud.isServiceWorkerDB) {
6984
6990
  subscriptions.push(computeSyncState(db).subscribe(dexie.cloud.syncState));
6985
6991
  }
6986
6992
  //verifyConfig(db.cloud.options); Not needed (yet at least!)
@@ -6991,26 +6997,26 @@
6991
6997
  if (!('serviceWorker' in navigator)) return [3 /*break*/, 2];
6992
6998
  return [4 /*yield*/, navigator.serviceWorker.getRegistrations()];
6993
6999
  case 1:
6994
- _j = _k.sent();
7000
+ _k = _l.sent();
6995
7001
  return [3 /*break*/, 3];
6996
7002
  case 2:
6997
- _j = [];
6998
- _k.label = 3;
7003
+ _k = [];
7004
+ _l.label = 3;
6999
7005
  case 3:
7000
- swRegistrations = _j;
7006
+ swRegistrations = _k;
7001
7007
  return [4 /*yield*/, db.transaction('rw', db.$syncState, function () { return __awaiter$1(_this_1, void 0, void 0, function () {
7002
- var _g, _h, _j, options, schema, _k, persistedOptions, persistedSchema, persistedSyncState, newPersistedSchema, _l, _m, _o, table, tblSchema, newTblSchema;
7003
- return __generator$1(this, function (_p) {
7004
- switch (_p.label) {
7008
+ var _h, _j, _k, options, schema, _l, persistedOptions, persistedSchema, persistedSyncState, newPersistedSchema, _m, _o, _p, table, tblSchema, newTblSchema;
7009
+ return __generator$1(this, function (_q) {
7010
+ switch (_q.label) {
7005
7011
  case 0:
7006
- _j = db.cloud, options = _j.options, schema = _j.schema;
7012
+ _k = db.cloud, options = _k.options, schema = _k.schema;
7007
7013
  return [4 /*yield*/, Promise.all([
7008
7014
  db.getOptions(),
7009
7015
  db.getSchema(),
7010
7016
  db.getPersistedSyncState(),
7011
7017
  ])];
7012
7018
  case 1:
7013
- _k = _p.sent(), persistedOptions = _k[0], persistedSchema = _k[1], persistedSyncState = _k[2];
7019
+ _l = _q.sent(), persistedOptions = _l[0], persistedSchema = _l[1], persistedSyncState = _l[2];
7014
7020
  if (!!configuredProgramatically) return [3 /*break*/, 2];
7015
7021
  // Options not specified programatically (use case for SW!)
7016
7022
  // Take persisted options:
@@ -7024,10 +7030,10 @@
7024
7030
  throw new Error("Internal error"); // options cannot be null if configuredProgramatically is set.
7025
7031
  return [4 /*yield*/, db.$syncState.put(options, 'options')];
7026
7032
  case 3:
7027
- _p.sent();
7028
- _p.label = 4;
7033
+ _q.sent();
7034
+ _q.label = 4;
7029
7035
  case 4:
7030
- if (((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.tryUseServiceWorker) &&
7036
+ if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) &&
7031
7037
  'serviceWorker' in navigator &&
7032
7038
  swRegistrations.length > 0 &&
7033
7039
  !DISABLE_SERVICEWORKER_STRATEGY) {
@@ -7041,7 +7047,8 @@
7041
7047
  // Not configured for using service worker or no service worker
7042
7048
  // registration exists. Don't rely on service worker to do any job.
7043
7049
  // Use LocalSyncWorker instead.
7044
- if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) && !IS_SERVICE_WORKER) {
7050
+ if (((_j = db.cloud.options) === null || _j === void 0 ? void 0 : _j.tryUseServiceWorker) &&
7051
+ !db.cloud.isServiceWorkerDB) {
7045
7052
  console.debug('dexie-cloud-addon: Not using service worker.', swRegistrations.length === 0
7046
7053
  ? 'No SW registrations found.'
7047
7054
  : 'serviceWorker' in navigator && DISABLE_SERVICEWORKER_STRATEGY
@@ -7061,8 +7068,8 @@
7061
7068
  if (!(!persistedSchema ||
7062
7069
  JSON.stringify(persistedSchema) !== JSON.stringify(schema))) return [3 /*break*/, 7];
7063
7070
  newPersistedSchema = persistedSchema || {};
7064
- for (_l = 0, _m = Object.entries(schema); _l < _m.length; _l++) {
7065
- _o = _m[_l], table = _o[0], tblSchema = _o[1];
7071
+ for (_m = 0, _o = Object.entries(schema); _m < _o.length; _m++) {
7072
+ _p = _o[_m], table = _p[0], tblSchema = _p[1];
7066
7073
  newTblSchema = newPersistedSchema[table];
7067
7074
  if (!newTblSchema) {
7068
7075
  newPersistedSchema[table] = Object.assign({}, tblSchema);
@@ -7075,17 +7082,17 @@
7075
7082
  }
7076
7083
  return [4 /*yield*/, db.$syncState.put(newPersistedSchema, 'schema')];
7077
7084
  case 6:
7078
- _p.sent();
7085
+ _q.sent();
7079
7086
  // Make sure persisted table prefixes are being used instead of computed ones:
7080
7087
  // Let's assign all props as the newPersistedSchems should be what we should be working with.
7081
7088
  Object.assign(schema, newPersistedSchema);
7082
- _p.label = 7;
7089
+ _q.label = 7;
7083
7090
  case 7: return [2 /*return*/, persistedSyncState === null || persistedSyncState === void 0 ? void 0 : persistedSyncState.initiallySynced];
7084
7091
  }
7085
7092
  });
7086
7093
  }); })];
7087
7094
  case 4:
7088
- initiallySynced = _k.sent();
7095
+ initiallySynced = _l.sent();
7089
7096
  if (initiallySynced) {
7090
7097
  db.setInitiallySynced(true);
7091
7098
  }
@@ -7093,13 +7100,13 @@
7093
7100
  if (!(((_b = db.cloud.options) === null || _b === void 0 ? void 0 : _b.databaseUrl) && !initiallySynced)) return [3 /*break*/, 6];
7094
7101
  return [4 /*yield*/, performInitialSync(db, db.cloud.options, db.cloud.schema)];
7095
7102
  case 5:
7096
- _k.sent();
7103
+ _l.sent();
7097
7104
  db.setInitiallySynced(true);
7098
- _k.label = 6;
7105
+ _l.label = 6;
7099
7106
  case 6:
7100
7107
  // Manage CurrentUser observable:
7101
7108
  throwIfClosed();
7102
- if (!!IS_SERVICE_WORKER) return [3 /*break*/, 8];
7109
+ if (!!db.cloud.isServiceWorkerDB) return [3 /*break*/, 8];
7103
7110
  subscriptions.push(Dexie.liveQuery(function () { return db.getCurrentUser(); }).subscribe(currentUserEmitter));
7104
7111
  // Manage PersistendSyncState observable:
7105
7112
  subscriptions.push(Dexie.liveQuery(function () { return db.getPersistedSyncState(); }).subscribe(db.cloud.persistedSyncState));
@@ -7116,14 +7123,14 @@
7116
7123
  // with things from the database and not just the default values.
7117
7124
  // This is so that when db.open() completes, user should be safe
7118
7125
  // to subscribe to these observables and get actual data.
7119
- _k.sent();
7120
- _k.label = 8;
7126
+ _l.sent();
7127
+ _l.label = 8;
7121
7128
  case 8:
7122
7129
  if (!((_c = db.cloud.options) === null || _c === void 0 ? void 0 : _c.requireAuth)) return [3 /*break*/, 10];
7123
7130
  return [4 /*yield*/, login(db)];
7124
7131
  case 9:
7125
- _k.sent();
7126
- _k.label = 10;
7132
+ _l.sent();
7133
+ _l.label = 10;
7127
7134
  case 10:
7128
7135
  if (localSyncWorker)
7129
7136
  localSyncWorker.stop();
@@ -7135,7 +7142,7 @@
7135
7142
  }
7136
7143
  else if (((_e = db.cloud.options) === null || _e === void 0 ? void 0 : _e.databaseUrl) &&
7137
7144
  db.cloud.schema &&
7138
- !IS_SERVICE_WORKER) {
7145
+ !db.cloud.isServiceWorkerDB) {
7139
7146
  // There's no SW. Start SyncWorker instead.
7140
7147
  localSyncWorker = LocalSyncWorker(db, db.cloud.options, db.cloud.schema);
7141
7148
  localSyncWorker.start();
@@ -7143,7 +7150,7 @@
7143
7150
  }
7144
7151
  // Listen to online event and do sync.
7145
7152
  throwIfClosed();
7146
- if (!IS_SERVICE_WORKER) {
7153
+ if (!db.cloud.isServiceWorkerDB) {
7147
7154
  subscriptions.push(rxjs.fromEvent(self, 'online').subscribe(function () {
7148
7155
  console.debug('online!');
7149
7156
  db.syncStateChangedEvent.next({
@@ -7157,10 +7164,10 @@
7157
7164
  });
7158
7165
  }));
7159
7166
  }
7160
- // Connect WebSocket only if we're a browser window
7161
- if (typeof window !== 'undefined' &&
7162
- !IS_SERVICE_WORKER &&
7163
- ((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl)) {
7167
+ // Connect WebSocket unless we
7168
+ if (((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl) &&
7169
+ !((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.disableWebSocket) &&
7170
+ !IS_SERVICE_WORKER) {
7164
7171
  subscriptions.push(connectWebSocket(db));
7165
7172
  }
7166
7173
  return [2 /*return*/];
@@ -7169,7 +7176,7 @@
7169
7176
  });
7170
7177
  }
7171
7178
  }
7172
- dexieCloud.version = '4.0.0-beta.18';
7179
+ dexieCloud.version = '4.0.0-beta.19';
7173
7180
  Dexie__default["default"].Cloud = dexieCloud;
7174
7181
 
7175
7182
  exports["default"] = dexieCloud;