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
@@ -5179,16 +5179,19 @@ function syncIfPossible(db, cloudOptions, cloudSchema, options) {
5179
5179
  function _syncIfPossible() {
5180
5180
  return __awaiter$1(this, void 0, void 0, function* () {
5181
5181
  try {
5182
- if (db.cloud.usingServiceWorker) {
5183
- if (IS_SERVICE_WORKER) {
5184
- yield sync(db, cloudOptions, cloudSchema, options);
5185
- }
5182
+ if (db.cloud.isServiceWorkerDB) {
5183
+ // We are the dedicated sync SW:
5184
+ yield sync(db, cloudOptions, cloudSchema, options);
5186
5185
  }
5187
- else {
5186
+ else if (!db.cloud.usingServiceWorker) {
5188
5187
  // We use a flow that is better suited for the case when multiple workers want to
5189
5188
  // do the same thing.
5190
5189
  yield performGuardedJob(db, CURRENT_SYNC_WORKER, '$jobs', () => sync(db, cloudOptions, cloudSchema, options));
5191
5190
  }
5191
+ else {
5192
+ assert(false);
5193
+ throw new Error('Internal _syncIfPossible() - invalid precondition - should not have been called.');
5194
+ }
5192
5195
  ongoingSyncs.delete(db);
5193
5196
  console.debug('Done sync');
5194
5197
  }
@@ -5350,8 +5353,8 @@ const Styles = {
5350
5353
  }
5351
5354
  };
5352
5355
 
5353
- function Dialog({ children }) {
5354
- return (a$1("div", null,
5356
+ function Dialog({ children, className }) {
5357
+ return (a$1("div", { className: className },
5355
5358
  a$1("div", { style: Styles.Darken }),
5356
5359
  a$1("div", { style: Styles.DialogOuter },
5357
5360
  a$1("div", { style: Styles.DialogInner }, children))));
@@ -5367,7 +5370,7 @@ function LoginDialog({ title, alerts, fields, onCancel, onSubmit, }) {
5367
5370
  const [params, setParams] = l({});
5368
5371
  const firstFieldRef = s();
5369
5372
  h(() => { var _a; return (_a = firstFieldRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, []);
5370
- return (a$1(Dialog, null,
5373
+ return (a$1(Dialog, { className: "dxc-login-dlg" },
5371
5374
  a$1(y, null,
5372
5375
  a$1("h3", { style: Styles.WindowHeader }, title),
5373
5376
  alerts.map((alert) => (a$1("p", { style: Styles.Alert[alert.type] }, resolveText(alert)))),
@@ -5781,7 +5784,18 @@ const getInvitesObservable = associate((db) => {
5781
5784
  const reducer = (result, m) => (Object.assign(Object.assign({}, result), { [m.id]: Object.assign(Object.assign({}, m), { realm: realmLookup[m.realmId] }) }));
5782
5785
  const emailMembersById = membersByEmail.reduce(reducer, {});
5783
5786
  const membersById = accessControl.selfMembers.reduce(reducer, emailMembersById);
5784
- return Object.values(membersById).filter(m => !m.accepted);
5787
+ return Object.values(membersById)
5788
+ .filter((invite) => !invite.accepted && !invite.rejected)
5789
+ .map((invite) => (Object.assign(Object.assign({}, invite), { accept() {
5790
+ return __awaiter$1(this, void 0, void 0, function* () {
5791
+ yield db.members.update(invite.id, { accepted: new Date() });
5792
+ });
5793
+ },
5794
+ reject() {
5795
+ return __awaiter$1(this, void 0, void 0, function* () {
5796
+ yield db.members.update(invite.id, { rejected: new Date() });
5797
+ });
5798
+ } })));
5785
5799
  })), []);
5786
5800
  });
5787
5801
 
@@ -5822,10 +5836,9 @@ function dexieCloud(dexie) {
5822
5836
  currentUserEmitter.next(UNAUTHORIZED_USER);
5823
5837
  });
5824
5838
  dexie.cloud = {
5825
- version: '4.0.0-beta.18',
5839
+ version: '4.0.0-beta.21',
5826
5840
  options: Object.assign({}, DEFAULT_OPTIONS),
5827
5841
  schema: null,
5828
- serverState: null,
5829
5842
  get currentUserId() {
5830
5843
  return currentUserEmitter.value.userId || UNAUTHORIZED_USER.userId;
5831
5844
  },
@@ -5914,15 +5927,17 @@ function dexieCloud(dexie) {
5914
5927
  dexie.use(createImplicitPropSetterMiddleware(DexieCloudDB(dexie)));
5915
5928
  dexie.use(createIdGenerationMiddleware(DexieCloudDB(dexie)));
5916
5929
  function onDbReady(dexie) {
5917
- var _a, _b, _c, _d, _e, _f;
5930
+ var _a, _b, _c, _d, _e, _f, _g;
5918
5931
  return __awaiter$1(this, void 0, void 0, function* () {
5919
5932
  closed = false; // As Dexie calls us, we are not closed anymore. Maybe reopened? Remember db.ready event is registered with sticky flag!
5920
5933
  const db = DexieCloudDB(dexie);
5921
5934
  // Setup default GUI:
5922
- if (!IS_SERVICE_WORKER) {
5935
+ if (typeof window !== 'undefined' && typeof document !== 'undefined') {
5923
5936
  if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.customLoginGui)) {
5924
5937
  subscriptions.push(setupDefaultGUI(dexie));
5925
5938
  }
5939
+ }
5940
+ if (!db.cloud.isServiceWorkerDB) {
5926
5941
  subscriptions.push(computeSyncState(db).subscribe(dexie.cloud.syncState));
5927
5942
  }
5928
5943
  //verifyConfig(db.cloud.options); Not needed (yet at least!)
@@ -5934,7 +5949,7 @@ function dexieCloud(dexie) {
5934
5949
  ? yield navigator.serviceWorker.getRegistrations()
5935
5950
  : [];
5936
5951
  const initiallySynced = yield db.transaction('rw', db.$syncState, () => __awaiter$1(this, void 0, void 0, function* () {
5937
- var _g, _h;
5952
+ var _h, _j;
5938
5953
  const { options, schema } = db.cloud;
5939
5954
  const [persistedOptions, persistedSchema, persistedSyncState] = yield Promise.all([
5940
5955
  db.getOptions(),
@@ -5953,7 +5968,7 @@ function dexieCloud(dexie) {
5953
5968
  throw new Error(`Internal error`); // options cannot be null if configuredProgramatically is set.
5954
5969
  yield db.$syncState.put(options, 'options');
5955
5970
  }
5956
- if (((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.tryUseServiceWorker) &&
5971
+ if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) &&
5957
5972
  'serviceWorker' in navigator &&
5958
5973
  swRegistrations.length > 0 &&
5959
5974
  !DISABLE_SERVICEWORKER_STRATEGY) {
@@ -5967,7 +5982,8 @@ function dexieCloud(dexie) {
5967
5982
  // Not configured for using service worker or no service worker
5968
5983
  // registration exists. Don't rely on service worker to do any job.
5969
5984
  // Use LocalSyncWorker instead.
5970
- if (((_h = db.cloud.options) === null || _h === void 0 ? void 0 : _h.tryUseServiceWorker) && !IS_SERVICE_WORKER) {
5985
+ if (((_j = db.cloud.options) === null || _j === void 0 ? void 0 : _j.tryUseServiceWorker) &&
5986
+ !db.cloud.isServiceWorkerDB) {
5971
5987
  console.debug('dexie-cloud-addon: Not using service worker.', swRegistrations.length === 0
5972
5988
  ? 'No SW registrations found.'
5973
5989
  : 'serviceWorker' in navigator && DISABLE_SERVICEWORKER_STRATEGY
@@ -6015,7 +6031,7 @@ function dexieCloud(dexie) {
6015
6031
  }
6016
6032
  // Manage CurrentUser observable:
6017
6033
  throwIfClosed();
6018
- if (!IS_SERVICE_WORKER) {
6034
+ if (!db.cloud.isServiceWorkerDB) {
6019
6035
  subscriptions.push(liveQuery(() => db.getCurrentUser()).subscribe(currentUserEmitter));
6020
6036
  // Manage PersistendSyncState observable:
6021
6037
  subscriptions.push(liveQuery(() => db.getPersistedSyncState()).subscribe(db.cloud.persistedSyncState));
@@ -6042,7 +6058,7 @@ function dexieCloud(dexie) {
6042
6058
  }
6043
6059
  else if (((_e = db.cloud.options) === null || _e === void 0 ? void 0 : _e.databaseUrl) &&
6044
6060
  db.cloud.schema &&
6045
- !IS_SERVICE_WORKER) {
6061
+ !db.cloud.isServiceWorkerDB) {
6046
6062
  // There's no SW. Start SyncWorker instead.
6047
6063
  localSyncWorker = LocalSyncWorker(db, db.cloud.options, db.cloud.schema);
6048
6064
  localSyncWorker.start();
@@ -6050,7 +6066,7 @@ function dexieCloud(dexie) {
6050
6066
  }
6051
6067
  // Listen to online event and do sync.
6052
6068
  throwIfClosed();
6053
- if (!IS_SERVICE_WORKER) {
6069
+ if (!db.cloud.isServiceWorkerDB) {
6054
6070
  subscriptions.push(fromEvent(self, 'online').subscribe(() => {
6055
6071
  console.debug('online!');
6056
6072
  db.syncStateChangedEvent.next({
@@ -6064,16 +6080,16 @@ function dexieCloud(dexie) {
6064
6080
  });
6065
6081
  }));
6066
6082
  }
6067
- // Connect WebSocket only if we're a browser window
6068
- if (typeof window !== 'undefined' &&
6069
- !IS_SERVICE_WORKER &&
6070
- ((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl)) {
6083
+ // Connect WebSocket unless we
6084
+ if (((_f = db.cloud.options) === null || _f === void 0 ? void 0 : _f.databaseUrl) &&
6085
+ !((_g = db.cloud.options) === null || _g === void 0 ? void 0 : _g.disableWebSocket) &&
6086
+ !IS_SERVICE_WORKER) {
6071
6087
  subscriptions.push(connectWebSocket(db));
6072
6088
  }
6073
6089
  });
6074
6090
  }
6075
6091
  }
6076
- dexieCloud.version = '4.0.0-beta.18';
6092
+ dexieCloud.version = '4.0.0-beta.21';
6077
6093
  Dexie.Cloud = dexieCloud;
6078
6094
 
6079
6095
  // In case the SW lives for a while, let it reuse already opened connections:
@@ -6110,12 +6126,15 @@ function syncDB(dbName, purpose) {
6110
6126
  console.debug('Dexie Cloud SW: Creating new Dexie instance for', dbName);
6111
6127
  const dexie = new Dexie(dbName, { addons: [dexieCloud] });
6112
6128
  db = DexieCloudDB(dexie);
6129
+ db.cloud.isServiceWorkerDB = true;
6113
6130
  dexie.on('versionchange', stopManagingDB);
6114
6131
  yield db.dx.open(); // Makes sure db.cloud.options and db.cloud.schema are read from db,
6115
- if (!managedDBs.get(dbName)) {
6132
+ if (managedDBs.get(dbName)) {
6116
6133
  // Avoid race conditions.
6117
- managedDBs.set(dbName, db);
6134
+ db.close();
6135
+ return yield _syncDB(dbName, purpose);
6118
6136
  }
6137
+ managedDBs.set(dbName, db);
6119
6138
  }
6120
6139
  if (!((_a = db.cloud.options) === null || _a === void 0 ? void 0 : _a.databaseUrl)) {
6121
6140
  console.error(`Dexie Cloud: No databaseUrl configured`);