dexie-cloud-addon 4.0.8 → 4.1.0-alpha.3

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 (55) hide show
  1. package/dist/modern/DexieCloudOptions.d.ts +1 -0
  2. package/dist/modern/WSObservable.d.ts +9 -6
  3. package/dist/modern/db/DexieCloudDB.d.ts +2 -0
  4. package/dist/modern/db/entities/PersistedSyncState.d.ts +7 -0
  5. package/dist/modern/dexie-cloud-addon.js +1721 -61
  6. package/dist/modern/dexie-cloud-addon.js.map +1 -1
  7. package/dist/modern/dexie-cloud-addon.min.js +1 -1
  8. package/dist/modern/dexie-cloud-addon.min.js.map +1 -1
  9. package/dist/modern/service-worker.js +1721 -61
  10. package/dist/modern/service-worker.js.map +1 -1
  11. package/dist/modern/service-worker.min.js +1 -1
  12. package/dist/modern/service-worker.min.js.map +1 -1
  13. package/dist/modern/sync/DEXIE_CLOUD_SYNCER_ID.d.ts +1 -0
  14. package/dist/modern/sync/syncWithServer.d.ts +2 -2
  15. package/dist/modern/yjs/Y.d.ts +3 -0
  16. package/dist/modern/yjs/YDexieCloudSyncState.d.ts +4 -0
  17. package/dist/modern/yjs/YTable.d.ts +2 -0
  18. package/dist/modern/yjs/applyYMessages.d.ts +5 -0
  19. package/dist/modern/yjs/awareness.d.ts +4 -0
  20. package/dist/modern/yjs/createYClientUpdateObservable.d.ts +4 -0
  21. package/dist/modern/yjs/createYHandler.d.ts +5 -0
  22. package/dist/modern/yjs/downloadYDocsFromServer.d.ts +3 -0
  23. package/dist/modern/yjs/getUpdatesTable.d.ts +3 -0
  24. package/dist/modern/yjs/listUpdatesSince.d.ts +2 -0
  25. package/dist/modern/yjs/listYClientMessagesAndStateVector.d.ts +26 -0
  26. package/dist/modern/yjs/updateYSyncStates.d.ts +6 -0
  27. package/dist/umd/DexieCloudOptions.d.ts +1 -0
  28. package/dist/umd/WSObservable.d.ts +9 -6
  29. package/dist/umd/db/DexieCloudDB.d.ts +2 -0
  30. package/dist/umd/db/entities/PersistedSyncState.d.ts +7 -0
  31. package/dist/umd/dexie-cloud-addon.js +1719 -59
  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 +1719 -59
  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/sync/DEXIE_CLOUD_SYNCER_ID.d.ts +1 -0
  40. package/dist/umd/sync/syncWithServer.d.ts +2 -2
  41. package/dist/umd/yjs/Y.d.ts +3 -0
  42. package/dist/umd/yjs/YDexieCloudSyncState.d.ts +4 -0
  43. package/dist/umd/yjs/YTable.d.ts +2 -0
  44. package/dist/umd/yjs/applyYMessages.d.ts +5 -0
  45. package/dist/umd/yjs/awareness.d.ts +4 -0
  46. package/dist/umd/yjs/createYClientUpdateObservable.d.ts +4 -0
  47. package/dist/umd/yjs/createYHandler.d.ts +5 -0
  48. package/dist/umd/yjs/downloadYDocsFromServer.d.ts +3 -0
  49. package/dist/umd/yjs/getUpdatesTable.d.ts +3 -0
  50. package/dist/umd/yjs/listUpdatesSince.d.ts +2 -0
  51. package/dist/umd/yjs/listYClientMessagesAndStateVector.d.ts +26 -0
  52. package/dist/umd/yjs/updateYSyncStates.d.ts +6 -0
  53. package/package.json +5 -4
  54. package/dist/modern/helpers/dbOnClosed.d.ts +0 -2
  55. package/dist/umd/helpers/dbOnClosed.d.ts +0 -2
@@ -0,0 +1 @@
1
+ export declare const DEXIE_CLOUD_SYNCER_ID = "dexie-cloud-syncer";
@@ -1,6 +1,6 @@
1
1
  import { DexieCloudDB } from '../db/DexieCloudDB';
2
2
  import { PersistedSyncState } from '../db/entities/PersistedSyncState';
3
3
  import { BaseRevisionMapEntry } from '../db/entities/BaseRevisionMapEntry';
4
- import { DBOperationsSet, DexieCloudSchema, SyncResponse } from 'dexie-cloud-common';
4
+ import { DBOperationsSet, DexieCloudSchema, SyncResponse, YClientMessage } from 'dexie-cloud-common';
5
5
  import { UserLogin } from '../db/entities/UserLogin';
6
- export declare function syncWithServer(changes: DBOperationsSet, syncState: PersistedSyncState | undefined, baseRevs: BaseRevisionMapEntry[], db: DexieCloudDB, databaseUrl: string, schema: DexieCloudSchema | null, clientIdentity: string, currentUser: UserLogin): Promise<SyncResponse>;
6
+ export declare function syncWithServer(changes: DBOperationsSet, y: YClientMessage[], syncState: PersistedSyncState | undefined, baseRevs: BaseRevisionMapEntry[], db: DexieCloudDB, databaseUrl: string, schema: DexieCloudSchema | null, clientIdentity: string, currentUser: UserLogin): Promise<SyncResponse>;
@@ -0,0 +1,3 @@
1
+ import type * as Y from 'yjs';
2
+ import type { DexieCloudDB } from '../db/DexieCloudDB';
3
+ export declare function $Y(db: DexieCloudDB): typeof Y;
@@ -0,0 +1,4 @@
1
+ import { YSyncState } from "dexie";
2
+ export interface YDexieCloudSyncState extends YSyncState {
3
+ serverRev: string;
4
+ }
@@ -0,0 +1,2 @@
1
+ import { EntityTable, YUpdateRow } from "dexie";
2
+ export type YTable = EntityTable<YUpdateRow, "i">;
@@ -0,0 +1,5 @@
1
+ import { DexieCloudDB } from '../db/DexieCloudDB';
2
+ import { YServerMessage } from 'dexie-cloud-common';
3
+ export declare function applyYServerMessages(yMessages: YServerMessage[], db: DexieCloudDB): Promise<{
4
+ [yTable: string]: number;
5
+ }>;
@@ -0,0 +1,4 @@
1
+ import { type DexieCloudDB } from "../db/DexieCloudDB";
2
+ export declare function getAwarenessLibrary(db: DexieCloudDB): typeof import('y-protocols/awareness');
3
+ export declare const awarenessWeakMap: WeakMap<any, import("y-protocols/awareness").Awareness>;
4
+ export declare const getDocAwareness: (doc: any) => import("y-protocols/awareness").Awareness | undefined;
@@ -0,0 +1,4 @@
1
+ import { Observable } from 'rxjs';
2
+ import { YClientMessage } from 'dexie-cloud-common';
3
+ import { DexieCloudDB } from '../db/DexieCloudDB';
4
+ export declare function createYClientUpdateObservable(db: DexieCloudDB): Observable<YClientMessage>;
@@ -0,0 +1,5 @@
1
+ import { DexieYProvider } from 'dexie';
2
+ import type { DexieCloudDB } from '../db/DexieCloudDB';
3
+ type YDoc = import('yjs').Doc;
4
+ export declare function createYHandler(db: DexieCloudDB): (provider: DexieYProvider<YDoc>) => void;
5
+ export {};
@@ -0,0 +1,3 @@
1
+ import { DexieCloudDB } from '../db/DexieCloudDB';
2
+ import { PersistedSyncState } from '../db/entities/PersistedSyncState';
3
+ export declare function downloadYDocsFromServer(db: DexieCloudDB, databaseUrl: string, { yDownloadedRealms, realms }: PersistedSyncState): Promise<void>;
@@ -0,0 +1,3 @@
1
+ import { DexieCloudDB } from "../db/DexieCloudDB";
2
+ import { YTable } from "./YTable";
3
+ export declare function getUpdatesTable(db: DexieCloudDB, table: string, ydocProp: string): YTable;
@@ -0,0 +1,2 @@
1
+ import type { Table, YUpdateRow } from 'dexie';
2
+ export declare function listUpdatesSince(yTable: Table, sinceIncluding: number): Promise<YUpdateRow[]>;
@@ -0,0 +1,26 @@
1
+ import type { Table } from 'dexie';
2
+ import type { YClientMessage } from 'dexie-cloud-common';
3
+ import { DexieCloudDB } from '../db/DexieCloudDB';
4
+ import { EntityCommon } from '../db/entities/EntityCommon';
5
+ /** Queries the local database for YMessages to send to server.
6
+ *
7
+ * There are 2 messages that this function can provide:
8
+ * YUpdateFromClientRequest ( for local updates )
9
+ * YStateVector ( for state vector of foreign updates so that server can reduce the number of udpates to send back )
10
+ *
11
+ * Notice that we do not do a step 1 sync phase here to get a state vector from the server. Reason we can avoid
12
+ * the 2-step sync is that we are client-server and not client-client here and we keep track of the client changes
13
+ * sent to server by letting server acknowledge them. There is always a chance that some client update has already
14
+ * been sent and that the client failed to receive the ack. However, if this happens it does not matter - the change
15
+ * would be sent again and Yjs handles duplicate changes anyway. And it's rare so we earn the cost of roundtrips by
16
+ * avoiding the step1 sync and instead keep track of this in the `unsentFrom` property of the SyncState.
17
+ *
18
+ * @param db
19
+ * @returns
20
+ */
21
+ export declare function listYClientMessagesAndStateVector(db: DexieCloudDB, tablesToSync: Table<EntityCommon>[]): Promise<{
22
+ yMessages: YClientMessage[];
23
+ lastUpdateIds: {
24
+ [yTable: string]: number;
25
+ };
26
+ }>;
@@ -0,0 +1,6 @@
1
+ import { DexieCloudDB } from '../db/DexieCloudDB';
2
+ export declare function updateYSyncStates(lastUpdateIdsBeforeSync: {
3
+ [yTable: string]: number;
4
+ }, receivedUntilsAfterSync: {
5
+ [yTable: string]: number;
6
+ }, db: DexieCloudDB, serverRevision: string): Promise<void>;
@@ -20,4 +20,5 @@ export interface DexieCloudOptions {
20
20
  email?: string;
21
21
  };
22
22
  }) => Promise<TokenFinalResponse>;
23
+ awarenessProtocol?: typeof import('y-protocols/awareness');
23
24
  }
@@ -1,7 +1,10 @@
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 type WSClientToServerMsg = ReadyForChangesMessage;
4
+ import type { YClientMessage } from 'dexie-cloud-common';
5
+ import { DexieCloudDB } from './db/DexieCloudDB';
6
+ import { UserLogin } from './dexie-cloud-client';
7
+ export type WSClientToServerMsg = ReadyForChangesMessage | YClientMessage;
5
8
  export interface ReadyForChangesMessage {
6
9
  type: 'ready';
7
10
  realmSetHash: string;
@@ -39,9 +42,10 @@ export interface TokenExpiredMessage {
39
42
  type: 'token-expired';
40
43
  }
41
44
  export declare class WSObservable extends Observable<WSConnectionMsg> {
42
- constructor(databaseUrl: string, rev: string, realmSetHash: string, clientIdentity: string, messageProducer: Observable<WSClientToServerMsg>, webSocketStatus: BehaviorSubject<DXCWebSocketStatus>, token?: string, tokenExpiration?: Date);
45
+ constructor(db: DexieCloudDB, rev: string, realmSetHash: string, clientIdentity: string, messageProducer: Observable<WSClientToServerMsg>, webSocketStatus: BehaviorSubject<DXCWebSocketStatus>, user: UserLogin);
43
46
  }
44
47
  export declare class WSConnection extends Subscription {
48
+ db: DexieCloudDB;
45
49
  ws: WebSocket | null;
46
50
  lastServerActivity: Date;
47
51
  lastUserActivity: Date;
@@ -50,16 +54,15 @@ export declare class WSConnection extends Subscription {
50
54
  rev: string;
51
55
  realmSetHash: string;
52
56
  clientIdentity: string;
53
- token: string | undefined;
54
- tokenExpiration: Date | undefined;
57
+ user: UserLogin;
55
58
  subscriber: Subscriber<WSConnectionMsg>;
56
59
  pauseUntil?: Date;
57
60
  messageProducer: Observable<WSClientToServerMsg>;
58
61
  webSocketStatus: BehaviorSubject<DXCWebSocketStatus>;
59
62
  id: number;
60
63
  private pinger;
61
- private messageProducerSubscription;
62
- constructor(databaseUrl: string, rev: string, realmSetHash: string, clientIdentity: string, token: string | undefined, tokenExpiration: Date | undefined, subscriber: Subscriber<WSConnectionMsg>, messageProducer: Observable<WSClientToServerMsg>, webSocketStatus: BehaviorSubject<DXCWebSocketStatus>);
64
+ private subscriptions;
65
+ constructor(db: DexieCloudDB, rev: string, realmSetHash: string, clientIdentity: string, user: UserLogin, subscriber: Subscriber<WSConnectionMsg>, messageProducer: Observable<WSClientToServerMsg>, webSocketStatus: BehaviorSubject<DXCWebSocketStatus>);
63
66
  private teardown;
64
67
  private disconnect;
65
68
  reconnecting: boolean;
@@ -9,6 +9,7 @@ import { DBRealm, DBRealmMember, DBRealmRole, DexieCloudSchema } from 'dexie-clo
9
9
  import { BroadcastedAndLocalEvent } from '../helpers/BroadcastedAndLocalEvent';
10
10
  import { SyncStatePhase } from '../types/SyncState';
11
11
  import { MessagesFromServerConsumer } from '../sync/messagesFromServerQueue';
12
+ import { YClientMessage } from 'dexie-cloud-common';
12
13
  export interface SyncStateChangedEventData {
13
14
  phase: SyncStatePhase;
14
15
  error?: Error;
@@ -45,6 +46,7 @@ export interface DexieCloudDB extends DexieCloudDBBase {
45
46
  setInitiallySynced(initiallySynced: boolean): void;
46
47
  reconfigure(): void;
47
48
  messageConsumer: MessagesFromServerConsumer;
49
+ messageProducer: Subject<YClientMessage>;
48
50
  }
49
51
  export declare const DEXIE_CLOUD_SCHEMA: {
50
52
  members: string;
@@ -11,4 +11,11 @@ export interface PersistedSyncState {
11
11
  syncedTables: string[];
12
12
  timestamp?: Date;
13
13
  error?: string;
14
+ yDownloadedRealms?: {
15
+ [realmId: string]: "*" | {
16
+ tbl: string;
17
+ prop: string;
18
+ key: any;
19
+ };
20
+ };
14
21
  }