dexie-cloud-addon 4.0.1-beta.26 → 4.0.1-beta.28

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 (58) hide show
  1. package/dist/modern/dexie-cloud-addon.js +24 -8
  2. package/dist/modern/dexie-cloud-addon.js.map +1 -1
  3. package/dist/modern/dexie-cloud-addon.min.js +2 -1
  4. package/dist/modern/dexie-cloud-addon.min.js.map +1 -1
  5. package/dist/modern/service-worker.js +23 -7
  6. package/dist/modern/service-worker.js.map +1 -1
  7. package/dist/modern/service-worker.min.js +2 -1
  8. package/dist/modern/service-worker.min.js.map +1 -1
  9. package/dist/module-es5/dexie-cloud-addon.js +23 -6
  10. package/dist/module-es5/dexie-cloud-addon.js.map +1 -1
  11. package/dist/module-es5/dexie-cloud-addon.min.js +2 -1
  12. package/dist/module-es5/dexie-cloud-addon.min.js.map +1 -1
  13. package/dist/types/DXCWebSocketStatus.d.ts +1 -1
  14. package/dist/types/DexieCloudEntity.d.ts +8 -0
  15. package/dist/types/DexieCloudServerState.d.ts +5 -0
  16. package/dist/types/DexieCloudTable.d.ts +2 -2
  17. package/dist/types/PermissionChecker.d.ts +1 -1
  18. package/dist/types/TSON.d.ts +1 -1
  19. package/dist/types/WSObservable.d.ts +2 -2
  20. package/dist/types/WebSocketStatus.d.ts +1 -0
  21. package/dist/types/authentication/authenticate.d.ts +1 -1
  22. package/dist/types/createMyMembersObservable.d.ts +14 -0
  23. package/dist/types/currentUserObservable.d.ts +3 -0
  24. package/dist/types/db/DexieCloudDB.d.ts +1 -1
  25. package/dist/types/extend-dexie-interface.d.ts +1 -1
  26. package/dist/types/getInternalAccessControlObservable.d.ts +1 -1
  27. package/dist/types/getPermissionsLookupObservable.d.ts +2 -2
  28. package/dist/types/helpers/BroadcastedLocalEvent.d.ts +8 -0
  29. package/dist/types/helpers/visibleState.d.ts +1 -0
  30. package/dist/types/permissionsLookup.d.ts +9 -0
  31. package/dist/types/permissionsLookupObservable.d.ts +14 -0
  32. package/dist/types/sync/globalizePrivateIds.d.ts +4 -0
  33. package/dist/types/sync/messagesFromServerQueue.d.ts +1 -1
  34. package/dist/types/sync/syncServerToClientOnly.d.ts +3 -0
  35. package/dist/types/types/CloudConnectionStatus.d.ts +0 -0
  36. package/dist/types/types/ConnectionStatus.d.ts +0 -0
  37. package/dist/types/types/DXCAlert.d.ts +1 -1
  38. package/dist/types/types/DXCInputField.d.ts +1 -1
  39. package/dist/types/types/DXCUserInteraction.d.ts +1 -1
  40. package/dist/types/types/LoginState.d.ts +41 -0
  41. package/dist/types/types/SWSyncEvent.d.ts +1 -1
  42. package/dist/types/types/SyncConnectionStatus.d.ts +1 -0
  43. package/dist/types/types/SyncFlowStatus.d.ts +6 -0
  44. package/dist/types/types/SyncState.d.ts +2 -2
  45. package/dist/types/types/SyncStatus.d.ts +6 -0
  46. package/dist/umd/dexie-cloud-addon.js +23 -6
  47. package/dist/umd/dexie-cloud-addon.js.map +1 -1
  48. package/dist/umd/dexie-cloud-addon.min.js +1 -1
  49. package/dist/umd/dexie-cloud-addon.min.js.map +1 -1
  50. package/dist/umd/service-worker.js +23 -7
  51. package/dist/umd/service-worker.js.map +1 -1
  52. package/dist/umd/service-worker.min.js +2 -1
  53. package/dist/umd/service-worker.min.js.map +1 -1
  54. package/dist/umd-modern/dexie-cloud-addon.js +21 -5
  55. package/dist/umd-modern/dexie-cloud-addon.js.map +1 -1
  56. package/dist/umd-modern/dexie-cloud-addon.min.js +2 -0
  57. package/dist/umd-modern/dexie-cloud-addon.min.js.map +1 -0
  58. package/package.json +41 -12
@@ -1 +1 @@
1
- export declare type DXCWebSocketStatus = "not-started" | "connecting" | "connected" | "disconnected" | "error";
1
+ export type DXCWebSocketStatus = "not-started" | "connecting" | "connected" | "disconnected" | "error";
@@ -0,0 +1,8 @@
1
+ import Dexie, { Entity, IndexableType, OwnClonableProperties, TableProp } from 'dexie';
2
+ export declare class DexieCloudEntity<DexieSubClass extends Dexie = Dexie> extends Entity<DexieSubClass> {
3
+ realmId: string;
4
+ owner: string;
5
+ can(...args: [verb: 'add', table: TableProp<DexieSubClass> | string] | [verb: 'update', ...fields: (keyof OwnClonableProperties<this>)[]] | [verb: 'delete']): boolean;
6
+ $id(): IndexableType;
7
+ isRealm(): boolean;
8
+ }
@@ -0,0 +1,5 @@
1
+ export interface DexieCloudServerState {
2
+ idPrefixes: {
3
+ [tableName: string]: string;
4
+ };
5
+ }
@@ -10,9 +10,9 @@ export interface DexieCloudEntity {
10
10
  * User may also explicitely declare these props in order to manually set them when
11
11
  * they are interested of taking control over access.
12
12
  */
13
- declare type WithDexieCloudProps<T> = T extends DexieCloudEntity ? T : T & DexieCloudEntity;
13
+ type WithDexieCloudProps<T> = T extends DexieCloudEntity ? T : T & DexieCloudEntity;
14
14
  /** Syntactic sugar for declaring a synced table of arbritary entity.
15
15
  *
16
16
  */
17
- export declare type DexieCloudTable<T = any, TKeyPropName extends keyof T = never> = EntityTable<WithDexieCloudProps<T>, TKeyPropName, InsertType<WithDexieCloudProps<T>, TKeyPropName | 'owner' | 'realmId'>>;
17
+ export type DexieCloudTable<T = any, TKeyPropName extends keyof T = never> = EntityTable<WithDexieCloudProps<T>, TKeyPropName, InsertType<WithDexieCloudProps<T>, TKeyPropName | 'owner' | 'realmId'>>;
18
18
  export {};
@@ -1,6 +1,6 @@
1
1
  import { KeyPaths } from 'dexie';
2
2
  import { DBPermissionSet } from 'dexie-cloud-common';
3
- declare type TableName<T> = T extends {
3
+ type TableName<T> = T extends {
4
4
  table: () => infer TABLE;
5
5
  } ? TABLE extends string ? TABLE : string : string;
6
6
  export declare class PermissionChecker<T, TableNames extends string = TableName<T>> {
@@ -1,5 +1,5 @@
1
1
  export declare const hasBigIntSupport: boolean;
2
- export declare function compareBigInts(a: bigint | FakeBigInt | string, b: bigint | FakeBigInt | string): 1 | 0 | -1;
2
+ export declare function compareBigInts(a: bigint | FakeBigInt | string, b: bigint | FakeBigInt | string): 0 | 1 | -1;
3
3
  export declare class FakeBigInt {
4
4
  v: string;
5
5
  toString(): string;
@@ -1,12 +1,12 @@
1
1
  import { DBOperationsSet } from 'dexie-cloud-common';
2
2
  import { BehaviorSubject, Observable, Subscriber, Subscription } from 'rxjs';
3
3
  import { DXCWebSocketStatus } from './DXCWebSocketStatus';
4
- export declare type WSClientToServerMsg = ReadyForChangesMessage;
4
+ export type WSClientToServerMsg = ReadyForChangesMessage;
5
5
  export interface ReadyForChangesMessage {
6
6
  type: 'ready';
7
7
  rev: string;
8
8
  }
9
- export declare type WSConnectionMsg = RevisionChangedMessage | RealmAddedMessage | RealmAcceptedMessage | RealmRemovedMessage | RealmsChangedMessage | ChangesFromServerMessage | TokenExpiredMessage;
9
+ export type WSConnectionMsg = RevisionChangedMessage | RealmAddedMessage | RealmAcceptedMessage | RealmRemovedMessage | RealmsChangedMessage | ChangesFromServerMessage | TokenExpiredMessage;
10
10
  export interface ChangesFromServerMessage {
11
11
  type: 'changes';
12
12
  baseRev: string;
@@ -0,0 +1 @@
1
+ export declare type WebSocketStatus = "not-started" | "connecting" | "connected" | "error" | "asleep";
@@ -3,7 +3,7 @@ import { BehaviorSubject } from 'rxjs';
3
3
  import { DexieCloudDB } from '../db/DexieCloudDB';
4
4
  import { UserLogin } from '../db/entities/UserLogin';
5
5
  import { DXCUserInteraction } from '../types/DXCUserInteraction';
6
- export declare type FetchTokenCallback = (tokenParams: {
6
+ export type FetchTokenCallback = (tokenParams: {
7
7
  public_key: string;
8
8
  hints?: {
9
9
  userId?: string;
@@ -0,0 +1,14 @@
1
+ import Dexie from 'dexie';
2
+ import { DBPermissionSet, DBRealm, DBRealmMember } from 'dexie-cloud-common';
3
+ import { Observable } from 'rxjs';
4
+ import { UserLogin } from './db/entities/UserLogin';
5
+ export declare function createMyMembersObservable(db: Dexie, currentUserObservable: Observable<UserLogin>): Observable<{
6
+ invites: Array<DBRealmMember & {
7
+ realm: DBRealm;
8
+ }>;
9
+ permissions: {
10
+ [realmId: string]: DBRealm & {
11
+ permissions: DBPermissionSet;
12
+ };
13
+ };
14
+ }>;
@@ -0,0 +1,3 @@
1
+ import Dexie from "dexie";
2
+ import { BehaviorSubject } from "rxjs";
3
+ export declare const currentUserEmitter: (x: Dexie) => BehaviorSubject<import("./db/entities/UserLogin").UserLogin>;
@@ -14,7 +14,7 @@ export interface SyncStateChangedEventData {
14
14
  error?: Error;
15
15
  progress?: number;
16
16
  }
17
- declare type SyncStateTable = Table<PersistedSyncState | DexieCloudSchema | DexieCloudOptions, 'syncState' | 'options' | 'schema'>;
17
+ type SyncStateTable = Table<PersistedSyncState | DexieCloudSchema | DexieCloudOptions, 'syncState' | 'options' | 'schema'>;
18
18
  export interface DexieCloudDBBase {
19
19
  readonly name: Dexie['name'];
20
20
  readonly close: Dexie['close'];
@@ -1,7 +1,7 @@
1
1
  import { DBRealm, DBRealmMember, DBRealmRole } from 'dexie-cloud-common';
2
2
  import { DexieCloudAPI } from './DexieCloudAPI';
3
3
  import { NewIdOptions } from './types/NewIdOptions';
4
- declare type Optional<T, Props extends keyof T> = Omit<T, Props> & Partial<T>;
4
+ type Optional<T, Props extends keyof T> = Omit<T, Props> & Partial<T>;
5
5
  declare module 'dexie' {
6
6
  interface Dexie {
7
7
  cloud: DexieCloudAPI;
@@ -1,6 +1,6 @@
1
1
  import Dexie from 'dexie';
2
2
  import { DBRealm, DBRealmMember } from 'dexie-cloud-common';
3
- export declare type InternalAccessControlData = {
3
+ export type InternalAccessControlData = {
4
4
  readonly selfMembers: DBRealmMember[];
5
5
  readonly realms: DBRealm[];
6
6
  readonly userId: string;
@@ -1,12 +1,12 @@
1
1
  import Dexie from 'dexie';
2
2
  import { DBPermissionSet, DBRealm } from 'dexie-cloud-common';
3
3
  import { Observable } from 'rxjs';
4
- export declare type PermissionsLookup = {
4
+ export type PermissionsLookup = {
5
5
  [realmId: string]: DBRealm & {
6
6
  permissions: DBPermissionSet;
7
7
  };
8
8
  };
9
- export declare type PermissionsLookupObservable = Observable<PermissionsLookup> & {
9
+ export type PermissionsLookupObservable = Observable<PermissionsLookup> & {
10
10
  getValue(): PermissionsLookup;
11
11
  };
12
12
  export declare const getPermissionsLookupObservable: (x: Dexie) => import("./mapValueObservable").ObservableWithCurrentValue<{
@@ -0,0 +1,8 @@
1
+ import { Observable } from "rxjs";
2
+ import { SWBroadcastChannel } from "./SWBroadcastChannel";
3
+ export declare class BroadcastedAndLocalEvent<T> extends Observable<T> {
4
+ name: string;
5
+ bc: BroadcastChannel | SWBroadcastChannel;
6
+ constructor(name: string);
7
+ next(message: T): void;
8
+ }
@@ -0,0 +1 @@
1
+ export declare function getVisibilityStateObservable(): import("rxjs").Observable<VisibilityState>;
@@ -0,0 +1,9 @@
1
+ import Dexie from 'dexie';
2
+ import { DBPermissionSet, DBRealm } from 'dexie-cloud-common';
3
+ import { Observable } from 'rxjs';
4
+ export declare type PermissionsLookupObservable = Observable<{
5
+ [realmId: string]: DBRealm & {
6
+ permissions: DBPermissionSet;
7
+ };
8
+ }>;
9
+ export declare const getPermissionsLookupObservable: (x: Dexie) => PermissionsLookupObservable;
@@ -0,0 +1,14 @@
1
+ import Dexie from 'dexie';
2
+ import { DBPermissionSet, DBRealm, DBRealmMember } from 'dexie-cloud-common';
3
+ import { Observable } from 'rxjs';
4
+ import { UserLogin } from './db/entities/UserLogin';
5
+ export declare function createMyMembersObservable(db: Dexie, currentUserObservable: Observable<UserLogin>): Observable<{
6
+ invites: Array<DBRealmMember & {
7
+ realm: DBRealm;
8
+ }>;
9
+ permissions: {
10
+ [realmId: string]: DBRealm & {
11
+ permissions: DBPermissionSet;
12
+ };
13
+ };
14
+ }>;
@@ -0,0 +1,4 @@
1
+ import { DBCoreSchema } from 'dexie';
2
+ import { DBOperationsSet } from 'dexie-cloud-common';
3
+ import { UserLogin } from '../db/entities/UserLogin';
4
+ export declare function encodePrimaryKeys(schema: DBCoreSchema, currentUser: UserLogin, changes: DBOperationsSet): DBOperationsSet;
@@ -1,7 +1,7 @@
1
1
  import { BehaviorSubject } from 'rxjs';
2
2
  import { DexieCloudDB } from '../db/DexieCloudDB';
3
3
  import { WSConnectionMsg } from '../WSObservable';
4
- export declare type MessagesFromServerConsumer = ReturnType<typeof MessagesFromServerConsumer>;
4
+ export type MessagesFromServerConsumer = ReturnType<typeof MessagesFromServerConsumer>;
5
5
  export declare function MessagesFromServerConsumer(db: DexieCloudDB): {
6
6
  enqueue: (msg: WSConnectionMsg) => void;
7
7
  readyToServe: BehaviorSubject<boolean>;
@@ -0,0 +1,3 @@
1
+ import { DexieCloudDB } from '../db/DexieCloudDB';
2
+ import { ChangesFromServerMessage } from '../WSObservable';
3
+ export declare function syncServerToClientOnly(db: DexieCloudDB, { baseRev, newRev, changes, realmSetHash }: ChangesFromServerMessage): import("rxjs").Observable<void>;
File without changes
File without changes
@@ -1,4 +1,4 @@
1
- export declare type DXCAlert = DXCErrorAlert | DXCWarningAlert | DXCInfoAlert;
1
+ export type DXCAlert = DXCErrorAlert | DXCWarningAlert | DXCInfoAlert;
2
2
  export interface DXCErrorAlert {
3
3
  type: 'error';
4
4
  messageCode: 'INVALID_OTP' | 'INVALID_EMAIL' | 'LICENSE_LIMIT_REACHED' | 'GENERIC_ERROR';
@@ -1,4 +1,4 @@
1
- export declare type DXCInputField = DXCTextField | DXCPasswordField;
1
+ export type DXCInputField = DXCTextField | DXCPasswordField;
2
2
  export interface DXCTextField {
3
3
  type: 'text' | 'email' | 'otp';
4
4
  label?: string;
@@ -1,6 +1,6 @@
1
1
  import { DXCAlert } from './DXCAlert';
2
2
  import { DXCInputField } from './DXCInputField';
3
- export declare type DXCUserInteraction = DXCGenericUserInteraction | DXCEmailPrompt | DXCOTPPrompt | DXCMessageAlert;
3
+ export type DXCUserInteraction = DXCGenericUserInteraction | DXCEmailPrompt | DXCOTPPrompt | DXCMessageAlert;
4
4
  export interface DXCGenericUserInteraction<Type extends string = "generic", TFields extends {
5
5
  [name: string]: DXCInputField;
6
6
  } = any> {
@@ -0,0 +1,41 @@
1
+ export declare type LoginState = LoginStateSilent | LoginStateInteraction | LoginStateError;
2
+ export interface LoginStateSilent {
3
+ type: 'silent';
4
+ }
5
+ export declare type LoginStateInteraction = (Alert | EmailRequested | OTPRequested) & {
6
+ type: 'interaction';
7
+ alerts?: {
8
+ type: 'error' | 'warning' | 'info';
9
+ message: string;
10
+ }[];
11
+ isWorking?: boolean;
12
+ onSubmit: (params: LoginPromptReply) => void;
13
+ onCancel: () => void;
14
+ };
15
+ export declare type LoginPromptReply = {
16
+ email?: string;
17
+ otp?: string;
18
+ name?: string;
19
+ };
20
+ export interface LoginStateError {
21
+ type: 'error';
22
+ message: string;
23
+ }
24
+ interface Alert {
25
+ interactionType: 'alert';
26
+ alerts: {
27
+ type: 'error' | 'warning' | 'info';
28
+ message: string;
29
+ }[];
30
+ submitText: 'OK';
31
+ }
32
+ interface EmailRequested {
33
+ interactionType: 'emailRequested';
34
+ submitText: 'Send OTP';
35
+ }
36
+ interface OTPRequested {
37
+ interactionType: 'otpRequested';
38
+ isWorking: boolean;
39
+ submitText: 'Login';
40
+ }
41
+ export {};
@@ -1,4 +1,4 @@
1
- export declare type SyncEvent = Event & {
1
+ export type SyncEvent = Event & {
2
2
  tag: string;
3
3
  waitUntil(promise: Promise<any>): void;
4
4
  };
@@ -0,0 +1 @@
1
+ export declare type SyncConnectionStatus = "not-started" | "connecting" | "connected" | "disconnected" | "error" | "offline";
@@ -0,0 +1,6 @@
1
+ export declare type SyncPhase = "initial" | "not-in-sync" | "pushing" | "pulling" | "in-sync" | 'error' | 'offline';
2
+ export interface SyncFlowStatus {
3
+ phase: SyncPhase;
4
+ progress?: number;
5
+ error?: Error;
6
+ }
@@ -1,5 +1,5 @@
1
- export declare type SyncStatePhase = "initial" | "not-in-sync" | "pushing" | "pulling" | "in-sync" | 'error' | 'offline';
2
- export declare type SyncStatus = "not-started" | "connecting" | "connected" | "disconnected" | "error" | "offline";
1
+ export type SyncStatePhase = "initial" | "not-in-sync" | "pushing" | "pulling" | "in-sync" | 'error' | 'offline';
2
+ export type SyncStatus = "not-started" | "connecting" | "connected" | "disconnected" | "error" | "offline";
3
3
  export interface SyncState {
4
4
  status: SyncStatus;
5
5
  phase: SyncStatePhase;
@@ -0,0 +1,6 @@
1
+ export declare type SyncPhase = "initial" | "not-in-sync" | "pushing" | "pulling" | "in-sync" | 'error' | 'offline';
2
+ export interface SyncStatus {
3
+ phase: SyncPhase;
4
+ progress?: number;
5
+ error?: Error;
6
+ }
@@ -108,7 +108,7 @@
108
108
  *
109
109
  * ==========================================================================
110
110
  *
111
- * Version 4.0.1-beta.26, Tue Jan 17 2023
111
+ * Version 4.0.1-beta.28, Mon Mar 06 2023
112
112
  *
113
113
  * https://dexie.org
114
114
  *
@@ -4787,7 +4787,17 @@
4787
4787
  return db.$syncState.get('syncState');
4788
4788
  },
4789
4789
  getSchema: function () {
4790
- return db.$syncState.get('schema');
4790
+ return db.$syncState.get('schema').then(function (schema) {
4791
+ if (schema) {
4792
+ for (var _k = 0, _l = db.tables; _k < _l.length; _k++) {
4793
+ var table = _l[_k];
4794
+ if (table.schema.primKey && table.schema.primKey.keyPath && schema[table.name]) {
4795
+ schema[table.name].primaryKey = nameFromKeyPath(table.schema.primKey.keyPath);
4796
+ }
4797
+ }
4798
+ }
4799
+ return schema;
4800
+ });
4791
4801
  },
4792
4802
  getOptions: function () {
4793
4803
  return db.$syncState.get('options');
@@ -4805,6 +4815,11 @@
4805
4815
  }
4806
4816
  return db;
4807
4817
  }
4818
+ function nameFromKeyPath(keyPath) {
4819
+ return typeof keyPath === 'string' ?
4820
+ keyPath :
4821
+ keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : "";
4822
+ }
4808
4823
  // @ts-ignore
4809
4824
  var isFirefox = typeof InstallTrigger !== 'undefined';
4810
4825
  var isSafari = typeof navigator !== 'undefined' &&
@@ -6921,7 +6936,7 @@
6921
6936
  currentUserEmitter.next(UNAUTHORIZED_USER);
6922
6937
  });
6923
6938
  dexie.cloud = {
6924
- version: '4.0.1-beta.26',
6939
+ version: '4.0.1-beta.28',
6925
6940
  options: Object.assign({}, DEFAULT_OPTIONS),
6926
6941
  schema: null,
6927
6942
  get currentUserId() {
@@ -7081,7 +7096,7 @@
7081
7096
  case 3:
7082
7097
  swRegistrations = _k;
7083
7098
  return [4 /*yield*/, db.transaction('rw', db.$syncState, function () { return __awaiter(_this_1, void 0, void 0, function () {
7084
- var _h, _j, _k, options, schema, _l, persistedOptions, persistedSchema, persistedSyncState, newPersistedSchema, _m, _o, _p, table, tblSchema, newTblSchema;
7099
+ var _h, _j, _k, options, schema, _l, persistedOptions, persistedSchema, persistedSyncState, newPersistedOptions, newPersistedSchema, _m, _o, _p, table, tblSchema, newTblSchema;
7085
7100
  return __generator$1(this, function (_q) {
7086
7101
  switch (_q.label) {
7087
7102
  case 0:
@@ -7104,7 +7119,9 @@
7104
7119
  // Update persisted options:
7105
7120
  if (!options)
7106
7121
  throw new Error("Internal error"); // options cannot be null if configuredProgramatically is set.
7107
- return [4 /*yield*/, db.$syncState.put(options, 'options')];
7122
+ newPersistedOptions = Object.assign({}, options);
7123
+ delete newPersistedOptions.fetchTokens;
7124
+ return [4 /*yield*/, db.$syncState.put(newPersistedOptions, 'options')];
7108
7125
  case 3:
7109
7126
  _q.sent();
7110
7127
  _q.label = 4;
@@ -7252,7 +7269,7 @@
7252
7269
  });
7253
7270
  }
7254
7271
  }
7255
- dexieCloud.version = '4.0.1-beta.26';
7272
+ dexieCloud.version = '4.0.1-beta.28';
7256
7273
  Dexie__default["default"].Cloud = dexieCloud;
7257
7274
 
7258
7275
  exports["default"] = dexieCloud;