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

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 (45) hide show
  1. package/dist/modern/dexie-cloud-addon.js +41 -25
  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 +45 -26
  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 +598 -568
  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 +17 -3
  14. package/dist/types/DexieCloudEntity.d.ts +8 -0
  15. package/dist/types/DexieCloudOptions.d.ts +2 -1
  16. package/dist/types/Invite.d.ts +2 -0
  17. package/dist/types/WebSocketStatus.d.ts +1 -0
  18. package/dist/types/createMyMembersObservable.d.ts +14 -0
  19. package/dist/types/currentUserObservable.d.ts +3 -0
  20. package/dist/types/db/entities/UserLogin.d.ts +0 -2
  21. package/dist/types/default-ui/Dialog.d.ts +2 -1
  22. package/dist/types/getInvitesObservable.d.ts +1 -23
  23. package/dist/types/helpers/BroadcastedLocalEvent.d.ts +8 -0
  24. package/dist/types/helpers/visibleState.d.ts +1 -0
  25. package/dist/types/permissionsLookup.d.ts +9 -0
  26. package/dist/types/permissionsLookupObservable.d.ts +14 -0
  27. package/dist/types/sync/globalizePrivateIds.d.ts +4 -0
  28. package/dist/types/sync/syncServerToClientOnly.d.ts +3 -0
  29. package/dist/types/types/CloudConnectionStatus.d.ts +0 -0
  30. package/dist/types/types/ConnectionStatus.d.ts +0 -0
  31. package/dist/types/types/LoginState.d.ts +41 -0
  32. package/dist/types/types/SyncConnectionStatus.d.ts +1 -0
  33. package/dist/types/types/SyncFlowStatus.d.ts +6 -0
  34. package/dist/types/types/SyncStatus.d.ts +6 -0
  35. package/dist/umd/dexie-cloud-addon.js +598 -568
  36. package/dist/umd/dexie-cloud-addon.js.map +1 -1
  37. package/dist/umd/dexie-cloud-addon.min.js +1 -1
  38. package/dist/umd/dexie-cloud-addon.min.js.map +1 -1
  39. package/dist/umd/service-worker.js +45 -26
  40. package/dist/umd/service-worker.js.map +1 -1
  41. package/dist/umd/service-worker.min.js +1 -1
  42. package/dist/umd/service-worker.min.js.map +1 -1
  43. package/dist/umd-modern/dexie-cloud-addon.js +38 -22
  44. package/dist/umd-modern/dexie-cloud-addon.js.map +1 -1
  45. package/package.json +3 -3
@@ -5186,16 +5186,19 @@
5186
5186
  function _syncIfPossible() {
5187
5187
  return __awaiter$1(this, void 0, void 0, function* () {
5188
5188
  try {
5189
- if (db.cloud.usingServiceWorker) {
5190
- if (IS_SERVICE_WORKER) {
5191
- yield sync(db, cloudOptions, cloudSchema, options);
5192
- }
5189
+ if (db.cloud.isServiceWorkerDB) {
5190
+ // We are the dedicated sync SW:
5191
+ yield sync(db, cloudOptions, cloudSchema, options);
5193
5192
  }
5194
- else {
5193
+ else if (!db.cloud.usingServiceWorker) {
5195
5194
  // We use a flow that is better suited for the case when multiple workers want to
5196
5195
  // do the same thing.
5197
5196
  yield performGuardedJob(db, CURRENT_SYNC_WORKER, '$jobs', () => sync(db, cloudOptions, cloudSchema, options));
5198
5197
  }
5198
+ else {
5199
+ assert(false);
5200
+ throw new Error('Internal _syncIfPossible() - invalid precondition - should not have been called.');
5201
+ }
5199
5202
  ongoingSyncs.delete(db);
5200
5203
  console.debug('Done sync');
5201
5204
  }
@@ -5357,8 +5360,8 @@
5357
5360
  }
5358
5361
  };
5359
5362
 
5360
- function Dialog({ children }) {
5361
- return (a$1("div", null,
5363
+ function Dialog({ children, className }) {
5364
+ return (a$1("div", { className: className },
5362
5365
  a$1("div", { style: Styles.Darken }),
5363
5366
  a$1("div", { style: Styles.DialogOuter },
5364
5367
  a$1("div", { style: Styles.DialogInner }, children))));
@@ -5374,7 +5377,7 @@
5374
5377
  const [params, setParams] = l({});
5375
5378
  const firstFieldRef = s();
5376
5379
  h(() => { var _a; return (_a = firstFieldRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, []);
5377
- return (a$1(Dialog, null,
5380
+ return (a$1(Dialog, { className: "dxc-login-dlg" },
5378
5381
  a$1(y, null,
5379
5382
  a$1("h3", { style: Styles.WindowHeader }, title),
5380
5383
  alerts.map((alert) => (a$1("p", { style: Styles.Alert[alert.type] }, resolveText(alert)))),
@@ -5788,7 +5791,18 @@
5788
5791
  const reducer = (result, m) => (Object.assign(Object.assign({}, result), { [m.id]: Object.assign(Object.assign({}, m), { realm: realmLookup[m.realmId] }) }));
5789
5792
  const emailMembersById = membersByEmail.reduce(reducer, {});
5790
5793
  const membersById = accessControl.selfMembers.reduce(reducer, emailMembersById);
5791
- return Object.values(membersById).filter(m => !m.accepted);
5794
+ return Object.values(membersById)
5795
+ .filter((invite) => !invite.accepted && !invite.rejected)
5796
+ .map((invite) => (Object.assign(Object.assign({}, invite), { accept() {
5797
+ return __awaiter$1(this, void 0, void 0, function* () {
5798
+ yield db.members.update(invite.id, { accepted: new Date() });
5799
+ });
5800
+ },
5801
+ reject() {
5802
+ return __awaiter$1(this, void 0, void 0, function* () {
5803
+ yield db.members.update(invite.id, { rejected: new Date() });
5804
+ });
5805
+ } })));
5792
5806
  })), []);
5793
5807
  });
5794
5808
 
@@ -5829,10 +5843,9 @@
5829
5843
  currentUserEmitter.next(UNAUTHORIZED_USER);
5830
5844
  });
5831
5845
  dexie.cloud = {
5832
- version: '4.0.0-beta.18',
5846
+ version: '4.0.0-beta.21',
5833
5847
  options: Object.assign({}, DEFAULT_OPTIONS),
5834
5848
  schema: null,
5835
- serverState: null,
5836
5849
  get currentUserId() {
5837
5850
  return currentUserEmitter.value.userId || UNAUTHORIZED_USER.userId;
5838
5851
  },
@@ -5921,15 +5934,17 @@
5921
5934
  dexie.use(createImplicitPropSetterMiddleware(DexieCloudDB(dexie)));
5922
5935
  dexie.use(createIdGenerationMiddleware(DexieCloudDB(dexie)));
5923
5936
  function onDbReady(dexie) {
5924
- var _a, _b, _c, _d, _e, _f;
5937
+ var _a, _b, _c, _d, _e, _f, _g;
5925
5938
  return __awaiter$1(this, void 0, void 0, function* () {
5926
5939
  closed = false; // As Dexie calls us, we are not closed anymore. Maybe reopened? Remember db.ready event is registered with sticky flag!
5927
5940
  const db = DexieCloudDB(dexie);
5928
5941
  // Setup default GUI:
5929
- if (!IS_SERVICE_WORKER) {
5942
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
5930
5943
  if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.customLoginGui)) {
5931
5944
  subscriptions.push(setupDefaultGUI(dexie));
5932
5945
  }
5946
+ }
5947
+ if (!db.cloud.isServiceWorkerDB) {
5933
5948
  subscriptions.push(computeSyncState(db).subscribe(dexie.cloud.syncState));
5934
5949
  }
5935
5950
  //verifyConfig(db.cloud.options); Not needed (yet at least!)
@@ -5941,7 +5956,7 @@
5941
5956
  ? yield navigator.serviceWorker.getRegistrations()
5942
5957
  : [];
5943
5958
  const initiallySynced = yield db.transaction('rw', db.$syncState, () => __awaiter$1(this, void 0, void 0, function* () {
5944
- var _g, _h;
5959
+ var _h, _j;
5945
5960
  const { options, schema } = db.cloud;
5946
5961
  const [persistedOptions, persistedSchema, persistedSyncState] = yield Promise.all([
5947
5962
  db.getOptions(),
@@ -5960,7 +5975,7 @@
5960
5975
  throw new Error(`Internal error`); // options cannot be null if configuredProgramatically is set.
5961
5976
  yield db.$syncState.put(options, 'options');
5962
5977
  }
5963
- if (((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.tryUseServiceWorker) &&
5978
+ if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) &&
5964
5979
  'serviceWorker' in navigator &&
5965
5980
  swRegistrations.length > 0 &&
5966
5981
  !DISABLE_SERVICEWORKER_STRATEGY) {
@@ -5974,7 +5989,8 @@
5974
5989
  // Not configured for using service worker or no service worker
5975
5990
  // registration exists. Don't rely on service worker to do any job.
5976
5991
  // Use LocalSyncWorker instead.
5977
- if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) && !IS_SERVICE_WORKER) {
5992
+ if (((_j = db.cloud.options) === null || _j === void 0 ? void 0 : _j.tryUseServiceWorker) &&
5993
+ !db.cloud.isServiceWorkerDB) {
5978
5994
  console.debug('dexie-cloud-addon: Not using service worker.', swRegistrations.length === 0
5979
5995
  ? 'No SW registrations found.'
5980
5996
  : 'serviceWorker' in navigator && DISABLE_SERVICEWORKER_STRATEGY
@@ -6022,7 +6038,7 @@
6022
6038
  }
6023
6039
  // Manage CurrentUser observable:
6024
6040
  throwIfClosed();
6025
- if (!IS_SERVICE_WORKER) {
6041
+ if (!db.cloud.isServiceWorkerDB) {
6026
6042
  subscriptions.push(Dexie.liveQuery(() => db.getCurrentUser()).subscribe(currentUserEmitter));
6027
6043
  // Manage PersistendSyncState observable:
6028
6044
  subscriptions.push(Dexie.liveQuery(() => db.getPersistedSyncState()).subscribe(db.cloud.persistedSyncState));
@@ -6049,7 +6065,7 @@
6049
6065
  }
6050
6066
  else if (((_e = db.cloud.options) === null || _e === void 0 ? void 0 : _e.databaseUrl) &&
6051
6067
  db.cloud.schema &&
6052
- !IS_SERVICE_WORKER) {
6068
+ !db.cloud.isServiceWorkerDB) {
6053
6069
  // There's no SW. Start SyncWorker instead.
6054
6070
  localSyncWorker = LocalSyncWorker(db, db.cloud.options, db.cloud.schema);
6055
6071
  localSyncWorker.start();
@@ -6057,7 +6073,7 @@
6057
6073
  }
6058
6074
  // Listen to online event and do sync.
6059
6075
  throwIfClosed();
6060
- if (!IS_SERVICE_WORKER) {
6076
+ if (!db.cloud.isServiceWorkerDB) {
6061
6077
  subscriptions.push(rxjs.fromEvent(self, 'online').subscribe(() => {
6062
6078
  console.debug('online!');
6063
6079
  db.syncStateChangedEvent.next({
@@ -6071,16 +6087,16 @@
6071
6087
  });
6072
6088
  }));
6073
6089
  }
6074
- // Connect WebSocket only if we're a browser window
6075
- if (typeof window !== 'undefined' &&
6076
- !IS_SERVICE_WORKER &&
6077
- ((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl)) {
6090
+ // Connect WebSocket unless we
6091
+ if (((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl) &&
6092
+ !((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.disableWebSocket) &&
6093
+ !IS_SERVICE_WORKER) {
6078
6094
  subscriptions.push(connectWebSocket(db));
6079
6095
  }
6080
6096
  });
6081
6097
  }
6082
6098
  }
6083
- dexieCloud.version = '4.0.0-beta.18';
6099
+ dexieCloud.version = '4.0.0-beta.21';
6084
6100
  Dexie__default["default"].Cloud = dexieCloud;
6085
6101
 
6086
6102
  // In case the SW lives for a while, let it reuse already opened connections:
@@ -6117,12 +6133,15 @@
6117
6133
  console.debug('Dexie Cloud SW: Creating new Dexie instance for', dbName);
6118
6134
  const dexie = new Dexie__default["default"](dbName, { addons: [dexieCloud] });
6119
6135
  db = DexieCloudDB(dexie);
6136
+ db.cloud.isServiceWorkerDB = true;
6120
6137
  dexie.on('versionchange', stopManagingDB);
6121
6138
  yield db.dx.open(); // Makes sure db.cloud.options and db.cloud.schema are read from db,
6122
- if (!managedDBs.get(dbName)) {
6139
+ if (managedDBs.get(dbName)) {
6123
6140
  // Avoid race conditions.
6124
- managedDBs.set(dbName, db);
6141
+ db.close();
6142
+ return yield _syncDB(dbName, purpose);
6125
6143
  }
6144
+ managedDBs.set(dbName, db);
6126
6145
  }
6127
6146
  if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.databaseUrl)) {
6128
6147
  console.error(`Dexie Cloud: No databaseUrl configured`);