@slimr/dbsync 0.0.3 → 0.0.6

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 (63) hide show
  1. package/README.md +9 -7
  2. package/cjs/DbSync.d.ts +47 -3
  3. package/cjs/DbSync.js +54 -18
  4. package/cjs/DbSync.js.map +1 -1
  5. package/cjs/adapters/LocalAdapter.d.ts +18 -0
  6. package/cjs/adapters/LocalAdapter.js +28 -0
  7. package/cjs/adapters/LocalAdapter.js.map +1 -0
  8. package/cjs/adapters/RestAdapter.d.ts +17 -0
  9. package/cjs/adapters/RestAdapter.js +13 -0
  10. package/cjs/adapters/RestAdapter.js.map +1 -1
  11. package/cjs/adapters/index.d.ts +1 -0
  12. package/cjs/adapters/index.js +1 -0
  13. package/cjs/adapters/index.js.map +1 -1
  14. package/cjs/adapters/types.d.ts +13 -0
  15. package/cjs/internal/AuthManager.d.ts +17 -2
  16. package/cjs/internal/AuthManager.js +19 -4
  17. package/cjs/internal/AuthManager.js.map +1 -1
  18. package/cjs/internal/EventBus.d.ts +12 -0
  19. package/cjs/internal/EventBus.js +12 -0
  20. package/cjs/internal/EventBus.js.map +1 -1
  21. package/cjs/internal/StorageManager.d.ts +21 -0
  22. package/cjs/internal/StorageManager.js +21 -0
  23. package/cjs/internal/StorageManager.js.map +1 -1
  24. package/cjs/internal/SyncEngine.d.ts +29 -3
  25. package/cjs/internal/SyncEngine.js +31 -5
  26. package/cjs/internal/SyncEngine.js.map +1 -1
  27. package/cjs/useDbQuery.js +2 -0
  28. package/cjs/useDbQuery.js.map +1 -1
  29. package/cjs/util/promiseWithResolvers.js +3 -0
  30. package/cjs/util/promiseWithResolvers.js.map +1 -1
  31. package/docs/Adapters.md +58 -0
  32. package/docs/LocalAdapter.md +7 -0
  33. package/docs/RestAdapter.md +69 -0
  34. package/esm/DbSync.d.ts +47 -3
  35. package/esm/DbSync.js +54 -18
  36. package/esm/DbSync.js.map +1 -1
  37. package/esm/adapters/LocalAdapter.d.ts +18 -0
  38. package/esm/adapters/LocalAdapter.js +24 -0
  39. package/esm/adapters/LocalAdapter.js.map +1 -0
  40. package/esm/adapters/RestAdapter.d.ts +17 -0
  41. package/esm/adapters/RestAdapter.js +13 -0
  42. package/esm/adapters/RestAdapter.js.map +1 -1
  43. package/esm/adapters/index.d.ts +1 -0
  44. package/esm/adapters/index.js +1 -0
  45. package/esm/adapters/index.js.map +1 -1
  46. package/esm/adapters/types.d.ts +13 -0
  47. package/esm/internal/AuthManager.d.ts +17 -2
  48. package/esm/internal/AuthManager.js +19 -4
  49. package/esm/internal/AuthManager.js.map +1 -1
  50. package/esm/internal/EventBus.d.ts +12 -0
  51. package/esm/internal/EventBus.js +12 -0
  52. package/esm/internal/EventBus.js.map +1 -1
  53. package/esm/internal/StorageManager.d.ts +21 -0
  54. package/esm/internal/StorageManager.js +21 -0
  55. package/esm/internal/StorageManager.js.map +1 -1
  56. package/esm/internal/SyncEngine.d.ts +29 -3
  57. package/esm/internal/SyncEngine.js +31 -5
  58. package/esm/internal/SyncEngine.js.map +1 -1
  59. package/esm/useDbQuery.js +2 -0
  60. package/esm/useDbQuery.js.map +1 -1
  61. package/esm/util/promiseWithResolvers.js +3 -0
  62. package/esm/util/promiseWithResolvers.js.map +1 -1
  63. package/package.json +2 -1
package/esm/DbSync.d.ts CHANGED
@@ -2,50 +2,94 @@ import type { BackendAdapter } from "./adapters/types.js";
2
2
  import { type SyncState } from "./internal/EventBus.js";
3
3
  import { StorageManager } from "./internal/StorageManager.js";
4
4
  export interface DbSyncConfig {
5
+ /** The backend adapter used for authentication and synchronization. */
5
6
  adapter: BackendAdapter;
7
+ /** Optional fixed IndexedDB version. */
6
8
  version?: number;
9
+ /** The object stores and their index definitions. */
7
10
  tables: Record<string, {
8
11
  indexes?: string[];
9
12
  }>;
10
13
  }
11
14
  export type { SyncState };
15
+ /**
16
+ * The public facade for the dbsync engine.
17
+ */
12
18
  export declare class DbSync {
19
+ /** The polling interval used by the sync engine in milliseconds. */
13
20
  syncInterval: number;
21
+ /** The active configuration passed by the consumer. */
14
22
  config: DbSyncConfig;
23
+ /** The event bus used for local and cross-tab notifications. */
15
24
  private events;
25
+ /** The storage manager handling IndexedDB state and transactions. */
16
26
  storage: StorageManager;
27
+ /** The engine responsible for network synchronization. */
17
28
  private syncEngine;
29
+ /** The manager handling authentication and logout/reset behavior. */
18
30
  private authManager;
31
+ /**
32
+ * Creates a new `DbSync` instance using the supplied configuration.
33
+ *
34
+ * @param config The backend adapter, schema version, and table definitions.
35
+ */
19
36
  constructor(config: DbSyncConfig);
37
+ /** Returns a fresh RFC-4122 UUID. */
20
38
  genUuid(): `${string}-${string}-${string}-${string}-${string}`;
39
+ /** Whether the storage layer has finished initializing. */
21
40
  get initted(): boolean;
41
+ /** Initializes the underlying IndexedDB stores. */
22
42
  init(): Promise<void>;
43
+ /** Returns a queued transaction object for batched writes. */
23
44
  getTransaction(): import("./internal/DbTransaction.js").DbTransaction;
45
+ /** Reads a typed record by primary key. */
24
46
  get<T>(storeName: string, id: string | number): Promise<T | undefined>;
47
+ /** Reads all records from the given object store. */
25
48
  findAll<T>(storeName: string): Promise<T[]>;
49
+ /** Inserts a new record into the given object store. */
26
50
  add<T>(storeName: string, value: any, key?: string | number): Promise<T>;
51
+ /** Upserts a record into the given object store. */
27
52
  put<T>(storeName: string, value: any, key?: string | number): Promise<T>;
53
+ /** Deletes a record from the given object store. */
28
54
  delete(storeName: string, key: string | number): Promise<void>;
55
+ /** Clears all records from the given object store. */
29
56
  clear(storeName: string): Promise<void>;
57
+ /** Subscribes to store update notifications. */
30
58
  subscribe(callback: (stores: string[]) => void): {
31
59
  close: () => boolean;
32
60
  };
61
+ /** Subscribes to sync state changes. */
33
62
  onSyncStateChange(callback: (state: SyncState) => void): {
34
63
  close: () => boolean;
35
64
  };
65
+ /** Whether the current backend session is authenticated. */
36
66
  get isAuth(): boolean;
67
+ /** Verifies authentication against the backend adapter. */
37
68
  checkAuth(): Promise<boolean>;
69
+ /** Logs in with the given credentials. */
38
70
  login(email: string, code: string): Promise<void>;
71
+ /** Logs out and clears auth state. */
39
72
  logout(): Promise<void>;
73
+ /** Logs out and clears the local database. */
40
74
  reset(): Promise<void>;
41
- get isEnabled(): boolean;
75
+ /** Whether background sync is currently enabled. */
76
+ get isStarted(): boolean;
77
+ /** Whether the sync engine has recently connected successfully. */
42
78
  get isLive(): boolean;
43
- enable(): void;
44
- disable(): void;
79
+ /** Starts periodic background synchronization. */
80
+ start(): Promise<void>;
81
+ /** Stops periodic background synchronization. */
82
+ stop(): Promise<void>;
83
+ /** Waits until the sync engine reports a live connection. */
45
84
  waitForLive(): Promise<void>;
85
+ /** Triggers a single sync cycle immediately. */
46
86
  triggerSync(): Promise<void>;
87
+ /** Legacy alias for `enable()`. */
47
88
  startSyncInterval(): void;
89
+ /** Legacy alias for `disable()`. */
48
90
  stopSyncInterval(): void;
91
+ /** Responds to schema changes by disposing state and reloading the page. */
49
92
  protected onSchemaChangeDetected(): void;
93
+ /** Disposes all background resources and event listeners. */
50
94
  dispose(): void;
51
95
  }
package/esm/DbSync.js CHANGED
@@ -3,115 +3,151 @@ import { EventBus } from "./internal/EventBus.js";
3
3
  import { StorageManager } from "./internal/StorageManager.js";
4
4
  import { SyncEngine } from "./internal/SyncEngine.js";
5
5
  import { genUuid } from "./internal/utils.js";
6
+ /**
7
+ * The public facade for the dbsync engine.
8
+ */
6
9
  export class DbSync {
10
+ /** The polling interval used by the sync engine in milliseconds. */
7
11
  syncInterval = 5000;
12
+ /** The active configuration passed by the consumer. */
8
13
  config;
9
- // Internal managers
14
+ /** The event bus used for local and cross-tab notifications. */
10
15
  events;
16
+ /** The storage manager handling IndexedDB state and transactions. */
11
17
  storage; // Public for tests currently (we can wrap it later)
18
+ /** The engine responsible for network synchronization. */
12
19
  syncEngine;
20
+ /** The manager handling authentication and logout/reset behavior. */
13
21
  authManager;
22
+ /**
23
+ * Creates a new `DbSync` instance using the supplied configuration.
24
+ *
25
+ * @param config The backend adapter, schema version, and table definitions.
26
+ */
14
27
  constructor(config) {
15
28
  this.config = config;
16
29
  this.events = new EventBus();
17
30
  const adapter = config.adapter;
18
31
  const onSchemaChange = () => this.onSchemaChangeDetected();
19
32
  this.storage = new StorageManager(config, this.events, onSchemaChange);
20
- this.authManager = new AuthManager(adapter, this.storage, () => this.disable());
33
+ this.authManager = new AuthManager(adapter, this.storage, () => { void this.stop(); });
21
34
  this.syncEngine = new SyncEngine(config, this.syncInterval, this.events, this.storage, this.authManager, adapter, onSchemaChange);
22
35
  }
23
- // Facade to Utils
36
+ /** Returns a fresh RFC-4122 UUID. */
24
37
  genUuid() {
25
38
  return genUuid();
26
39
  }
27
- // Facade to StorageManager
40
+ /** Whether the storage layer has finished initializing. */
28
41
  get initted() {
29
42
  return this.storage.initted;
30
43
  }
44
+ /** Initializes the underlying IndexedDB stores. */
31
45
  async init() {
32
46
  return this.storage.init();
33
47
  }
48
+ /** Returns a queued transaction object for batched writes. */
34
49
  getTransaction() {
35
50
  return this.storage.getTransaction();
36
51
  } // Exported temporarily for tests
52
+ /** Reads a typed record by primary key. */
37
53
  async get(storeName, id) {
38
54
  return this.storage.get(storeName, id);
39
55
  }
56
+ /** Reads all records from the given object store. */
40
57
  async findAll(storeName) {
41
58
  return this.storage.findAll(storeName);
42
59
  }
60
+ /** Inserts a new record into the given object store. */
43
61
  async add(storeName, value, key) {
44
62
  await this.storage.executeTransaction([{ type: "add", storeName, value, key }]);
45
63
  return value;
46
64
  }
65
+ /** Upserts a record into the given object store. */
47
66
  async put(storeName, value, key) {
48
67
  await this.storage.executeTransaction([{ type: "put", storeName, value, key }]);
49
68
  return value;
50
69
  }
70
+ /** Deletes a record from the given object store. */
51
71
  async delete(storeName, key) {
52
72
  await this.storage.executeTransaction([{ type: "delete", storeName, key }]);
53
73
  }
74
+ /** Clears all records from the given object store. */
54
75
  async clear(storeName) {
55
76
  await this.storage.executeTransaction([{ type: "clear", storeName }]);
56
77
  }
57
- // Facade to EventBus
78
+ /** Subscribes to store update notifications. */
58
79
  subscribe(callback) {
59
80
  return this.events.subscribe(callback);
60
81
  }
82
+ /** Subscribes to sync state changes. */
61
83
  onSyncStateChange(callback) {
62
84
  return this.events.onSyncStateChange(callback);
63
85
  }
64
- // Facade to AuthManager
86
+ /** Whether the current backend session is authenticated. */
65
87
  get isAuth() {
66
88
  return this.authManager.isAuth;
67
89
  }
90
+ /** Verifies authentication against the backend adapter. */
68
91
  async checkAuth() {
69
92
  return this.authManager.checkAuth();
70
93
  }
94
+ /** Logs in with the given credentials. */
71
95
  async login(email, code) {
72
96
  return this.authManager.login(email, code);
73
97
  }
98
+ /** Logs out and clears auth state. */
74
99
  async logout() {
75
100
  return this.authManager.logout();
76
101
  }
102
+ /** Logs out and clears the local database. */
77
103
  async reset() {
78
104
  return this.authManager.reset();
79
105
  }
80
- // Facade to SyncEngine
81
- get isEnabled() {
82
- return this.syncEngine.isEnabled;
106
+ /** Whether background sync is currently enabled. */
107
+ get isStarted() {
108
+ return this.syncEngine.isStarted;
83
109
  }
110
+ /** Whether the sync engine has recently connected successfully. */
84
111
  get isLive() {
85
112
  return this.syncEngine.isLive;
86
113
  }
87
- enable() {
88
- this.syncEngine.enable();
114
+ /** Starts periodic background synchronization. */
115
+ async start() {
116
+ if (!this.initted)
117
+ await this.init();
118
+ this.syncEngine.start();
89
119
  }
90
- disable() {
91
- this.syncEngine.disable();
120
+ /** Stops periodic background synchronization. */
121
+ async stop() {
122
+ this.syncEngine.stop();
92
123
  }
124
+ /** Waits until the sync engine reports a live connection. */
93
125
  async waitForLive() {
94
126
  return this.syncEngine.waitForLive();
95
127
  }
128
+ /** Triggers a single sync cycle immediately. */
96
129
  async triggerSync() {
97
130
  return this.syncEngine.triggerSync();
98
131
  }
99
- // Legacy aliases
132
+ /** Legacy alias for `enable()`. */
100
133
  startSyncInterval() {
101
- this.enable();
134
+ this.start();
102
135
  }
136
+ /** Legacy alias for `disable()`. */
103
137
  stopSyncInterval() {
104
- this.disable();
138
+ this.stop();
105
139
  }
140
+ /** Responds to schema changes by disposing state and reloading the page. */
106
141
  onSchemaChangeDetected() {
107
142
  this.storage.dispose();
108
- this.disable();
143
+ this.stop();
109
144
  if (typeof window !== "undefined") {
110
145
  window.location.reload();
111
146
  }
112
147
  }
148
+ /** Disposes all background resources and event listeners. */
113
149
  dispose() {
114
- this.disable();
150
+ this.stop();
115
151
  this.events.dispose();
116
152
  this.storage.dispose();
117
153
  }
package/esm/DbSync.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"DbSync.js","sourceRoot":"","sources":["../src/DbSync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DbSync.js","sourceRoot":"","sources":["../src/DbSync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { BackendAdapter, SyncPullResult } from "./types.js";
2
+ /**
3
+ * A no-op network adapter for pure local-only usage.
4
+ * Satisfies the DbSync adapter requirement and silently discards sync operations
5
+ * so your local `dirtyQueue` doesn't grow infinitely if synchronization is enabled.
6
+ */
7
+ export declare class LocalAdapter implements BackendAdapter {
8
+ /** Always returns true so session checks pass locally. */
9
+ checkAuth(): Promise<boolean>;
10
+ /** Always resolves true to mimic successful mock logins. */
11
+ login(): Promise<boolean>;
12
+ /** Does nothing natively. */
13
+ logout(): Promise<void>;
14
+ /** Returns an empty payload because there is no remote source of truth. */
15
+ pull(): Promise<SyncPullResult>;
16
+ /** Silently drops write payloads into the void. */
17
+ push(): Promise<void>;
18
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * A no-op network adapter for pure local-only usage.
3
+ * Satisfies the DbSync adapter requirement and silently discards sync operations
4
+ * so your local `dirtyQueue` doesn't grow infinitely if synchronization is enabled.
5
+ */
6
+ export class LocalAdapter {
7
+ /** Always returns true so session checks pass locally. */
8
+ async checkAuth() {
9
+ return true;
10
+ }
11
+ /** Always resolves true to mimic successful mock logins. */
12
+ async login() {
13
+ return true;
14
+ }
15
+ /** Does nothing natively. */
16
+ async logout() { }
17
+ /** Returns an empty payload because there is no remote source of truth. */
18
+ async pull() {
19
+ return { items: [], hasMore: false };
20
+ }
21
+ /** Silently drops write payloads into the void. */
22
+ async push() { }
23
+ }
24
+ //# sourceMappingURL=LocalAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalAdapter.js","sourceRoot":"","sources":["../../src/adapters/LocalAdapter.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACxB,0DAA0D;IAC1D,KAAK,CAAC,SAAS;QACd,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,KAAK;QACV,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,6BAA6B;IAC7B,KAAK,CAAC,MAAM,KAAmB,CAAC;IAEhC,2EAA2E;IAC3E,KAAK,CAAC,IAAI;QACT,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IACrC,CAAC;IAED,mDAAmD;IACnD,KAAK,CAAC,IAAI,KAAmB,CAAC;CAC9B"}
@@ -1,13 +1,30 @@
1
1
  import type { BackendAdapter, SyncPullResult } from "./types.js";
2
+ /**
3
+ * Configuration for the built-in REST adapter.
4
+ */
2
5
  export interface RestAdapterConfig {
6
+ /** The base URL of the remote API. */
3
7
  url: string;
4
8
  }
9
+ /**
10
+ * A REST-backed implementation of the backend adapter contract.
11
+ */
5
12
  export declare class RestAdapter implements BackendAdapter {
6
13
  private config;
14
+ /**
15
+ * Stores the adapter configuration, including the API base URL.
16
+ *
17
+ * @param config The REST adapter configuration.
18
+ */
7
19
  constructor(config: RestAdapterConfig);
20
+ /** Checks whether the server session cookie is currently authenticated. */
8
21
  checkAuth(): Promise<boolean>;
22
+ /** Logs the user in using an email/code pair. */
9
23
  login(email: string, code: string): Promise<boolean>;
24
+ /** Logs the current user out of the remote session. */
10
25
  logout(): Promise<void>;
26
+ /** Pulls remote records from the REST backend using the provided cursor. */
11
27
  pull(cursor: string): Promise<SyncPullResult>;
28
+ /** Pushes queued local mutations to the REST backend. */
12
29
  push(payload: any[]): Promise<void>;
13
30
  }
@@ -1,12 +1,22 @@
1
+ /**
2
+ * A REST-backed implementation of the backend adapter contract.
3
+ */
1
4
  export class RestAdapter {
2
5
  config;
6
+ /**
7
+ * Stores the adapter configuration, including the API base URL.
8
+ *
9
+ * @param config The REST adapter configuration.
10
+ */
3
11
  constructor(config) {
4
12
  this.config = config;
5
13
  }
14
+ /** Checks whether the server session cookie is currently authenticated. */
6
15
  async checkAuth() {
7
16
  const res = await fetch(`${this.config.url}/api/session`, { credentials: "include" });
8
17
  return res.ok;
9
18
  }
19
+ /** Logs the user in using an email/code pair. */
10
20
  async login(email, code) {
11
21
  const res = await fetch(`${this.config.url}/api/session/login`, {
12
22
  method: "POST",
@@ -18,9 +28,11 @@ export class RestAdapter {
18
28
  throw new Error("Login failed");
19
29
  return true;
20
30
  }
31
+ /** Logs the current user out of the remote session. */
21
32
  async logout() {
22
33
  await fetch(`${this.config.url}/api/session/logout`, { method: "POST", credentials: "include" });
23
34
  }
35
+ /** Pulls remote records from the REST backend using the provided cursor. */
24
36
  async pull(cursor) {
25
37
  const res = await fetch(`${this.config.url}/api/posts?after=${cursor}&limit=40`, {
26
38
  credentials: "include",
@@ -29,6 +41,7 @@ export class RestAdapter {
29
41
  throw { status: res.status };
30
42
  return await res.json();
31
43
  }
44
+ /** Pushes queued local mutations to the REST backend. */
32
45
  async push(payload) {
33
46
  const res = await fetch(`${this.config.url}/api/posts/upsert-many`, {
34
47
  method: "POST",
@@ -1 +1 @@
1
- {"version":3,"file":"RestAdapter.js","sourceRoot":"","sources":["../../src/adapters/RestAdapter.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,WAAW;IACH;IAApB,YAAoB,MAAyB;QAAzB,WAAM,GAAN,MAAM,CAAmB;IAAG,CAAC;IAE1C,KAAK,CAAC,SAAS;QACrB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,cAAc,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;QACrF,OAAO,GAAG,CAAC,EAAE,CAAA;IACd,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,IAAY;QAC7C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,oBAAoB,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SACrC,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAA;IACZ,CAAC;IAEM,KAAK,CAAC,MAAM;QAClB,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;IACjG,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,MAAc;QAC/B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,oBAAoB,MAAM,WAAW,EAAE;YAChF,WAAW,EAAE,SAAS;SACtB,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAA;QACzC,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,OAAc;QAC/B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,wBAAwB,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC7B,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAA;IAC1C,CAAC;CACD"}
1
+ {"version":3,"file":"RestAdapter.js","sourceRoot":"","sources":["../../src/adapters/RestAdapter.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,OAAO,WAAW;IAMH;IALpB;;;;OAIG;IACH,YAAoB,MAAyB;QAAzB,WAAM,GAAN,MAAM,CAAmB;IAAG,CAAC;IAEjD,2EAA2E;IACpE,KAAK,CAAC,SAAS;QACrB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,cAAc,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;QACrF,OAAO,GAAG,CAAC,EAAE,CAAA;IACd,CAAC;IAED,iDAAiD;IAC1C,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,IAAY;QAC7C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,oBAAoB,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SACrC,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,uDAAuD;IAChD,KAAK,CAAC,MAAM;QAClB,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,qBAAqB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;IACjG,CAAC;IAED,4EAA4E;IACrE,KAAK,CAAC,IAAI,CAAC,MAAc;QAC/B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,oBAAoB,MAAM,WAAW,EAAE;YAChF,WAAW,EAAE,SAAS;SACtB,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAA;QACzC,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;IACxB,CAAC;IAED,yDAAyD;IAClD,KAAK,CAAC,IAAI,CAAC,OAAc;QAC/B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,wBAAwB,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,WAAW,EAAE,SAAS;YACtB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC7B,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAA;IAC1C,CAAC;CACD"}
@@ -1,2 +1,3 @@
1
+ export * from "./LocalAdapter.js";
1
2
  export * from "./RestAdapter.js";
2
3
  export * from "./types.js";
@@ -1,3 +1,4 @@
1
+ export * from "./LocalAdapter.js";
1
2
  export * from "./RestAdapter.js";
2
3
  export * from "./types.js";
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA"}
@@ -1,11 +1,24 @@
1
+ /**
2
+ * The standard response shape returned by a backend pull request.
3
+ */
1
4
  export interface SyncPullResult {
5
+ /** The records fetched from the remote backend. */
2
6
  items: any[];
7
+ /** Whether more results remain to be fetched for the current cursor. */
3
8
  hasMore: boolean;
4
9
  }
10
+ /**
11
+ * The contract implemented by all sync backends.
12
+ */
5
13
  export interface BackendAdapter {
14
+ /** Checks whether the current session is authenticated. */
6
15
  checkAuth(): Promise<boolean>;
16
+ /** Logs the current user in against the backend. */
7
17
  login(email: string, code: string): Promise<boolean>;
18
+ /** Logs the current user out of the backend. */
8
19
  logout(): Promise<void>;
20
+ /** Pulls remote changes since the provided cursor. */
9
21
  pull(cursor: string): Promise<SyncPullResult>;
22
+ /** Pushes queued local mutations to the backend. */
10
23
  push(payload: any[]): Promise<void>;
11
24
  }
@@ -1,13 +1,28 @@
1
1
  import type { BackendAdapter } from "../adapters/types.js";
2
2
  import type { StorageManager } from "./StorageManager.js";
3
+ /**
4
+ * Coordinates authentication state and logout/reset behavior for `DbSync`.
5
+ */
3
6
  export declare class AuthManager {
4
7
  private adapter;
5
8
  private storage;
6
- private disableSync;
9
+ private stopSync;
10
+ /** Tracks whether the current backend session is authenticated. */
7
11
  isAuth: boolean;
8
- constructor(adapter: BackendAdapter, storage: StorageManager, disableSync: () => void);
12
+ /**
13
+ * Creates a new auth manager for the provided backend adapter and storage layer.
14
+ *
15
+ * @param adapter The backend adapter used for auth requests.
16
+ * @param storage The storage manager used for reset operations.
17
+ * @param stopSync The callback used to stop background sync.
18
+ */
19
+ constructor(adapter: BackendAdapter, storage: StorageManager, stopSync: () => Promise<void> | void);
20
+ /** Checks authentication against the backend adapter and stores the result. */
9
21
  checkAuth(): Promise<boolean>;
22
+ /** Logs in through the backend adapter and updates auth state. */
10
23
  login(email: string, code: string): Promise<void>;
24
+ /** Logs out, stops sync, and clears auth state. */
11
25
  logout(): Promise<void>;
26
+ /** Logs out and clears all local IndexedDB stores and auth markers. */
12
27
  reset(): Promise<void>;
13
28
  }
@@ -1,25 +1,40 @@
1
+ /**
2
+ * Coordinates authentication state and logout/reset behavior for `DbSync`.
3
+ */
1
4
  export class AuthManager {
2
5
  adapter;
3
6
  storage;
4
- disableSync;
7
+ stopSync;
8
+ /** Tracks whether the current backend session is authenticated. */
5
9
  isAuth = false;
6
- constructor(adapter, storage, disableSync) {
10
+ /**
11
+ * Creates a new auth manager for the provided backend adapter and storage layer.
12
+ *
13
+ * @param adapter The backend adapter used for auth requests.
14
+ * @param storage The storage manager used for reset operations.
15
+ * @param stopSync The callback used to stop background sync.
16
+ */
17
+ constructor(adapter, storage, stopSync) {
7
18
  this.adapter = adapter;
8
19
  this.storage = storage;
9
- this.disableSync = disableSync;
20
+ this.stopSync = stopSync;
10
21
  }
22
+ /** Checks authentication against the backend adapter and stores the result. */
11
23
  async checkAuth() {
12
24
  this.isAuth = await this.adapter.checkAuth();
13
25
  return this.isAuth;
14
26
  }
27
+ /** Logs in through the backend adapter and updates auth state. */
15
28
  async login(email, code) {
16
29
  this.isAuth = await this.adapter.login(email, code);
17
30
  }
31
+ /** Logs out, stops sync, and clears auth state. */
18
32
  async logout() {
19
- this.disableSync();
33
+ await this.stopSync();
20
34
  this.isAuth = false;
21
35
  await this.adapter.logout();
22
36
  }
37
+ /** Logs out and clears all local IndexedDB stores and auth markers. */
23
38
  async reset() {
24
39
  await this.logout();
25
40
  await this.storage.clearAllStores();
@@ -1 +1 @@
1
- {"version":3,"file":"AuthManager.js","sourceRoot":"","sources":["../../src/internal/AuthManager.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,WAAW;IAId;IACA;IACA;IALF,MAAM,GAAG,KAAK,CAAA;IAErB,YACS,OAAuB,EACvB,OAAuB,EACvB,WAAuB;QAFvB,YAAO,GAAP,OAAO,CAAgB;QACvB,YAAO,GAAP,OAAO,CAAgB;QACvB,gBAAW,GAAX,WAAW,CAAY;IAC7B,CAAC;IAEG,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAA;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAA;IACnB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,IAAY;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACpD,CAAC;IAEM,KAAK,CAAC,MAAM;QAClB,IAAI,CAAC,WAAW,EAAE,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;IAC5B,CAAC;IAEM,KAAK,CAAC,KAAK;QACjB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACnB,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA;QACnC,YAAY,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAA;QAC/C,YAAY,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAA;IACjD,CAAC;CACD"}
1
+ {"version":3,"file":"AuthManager.js","sourceRoot":"","sources":["../../src/internal/AuthManager.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAO,WAAW;IAYd;IACA;IACA;IAbT,mEAAmE;IAC5D,MAAM,GAAG,KAAK,CAAA;IAErB;;;;;;OAMG;IACH,YACS,OAAuB,EACvB,OAAuB,EACvB,QAAoC;QAFpC,YAAO,GAAP,OAAO,CAAgB;QACvB,YAAO,GAAP,OAAO,CAAgB;QACvB,aAAQ,GAAR,QAAQ,CAA4B;IAC1C,CAAC;IAEJ,+EAA+E;IACxE,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAA;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAA;IACnB,CAAC;IAED,kEAAkE;IAC3D,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,IAAY;QAC7C,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACpD,CAAC;IAED,mDAAmD;IAC5C,KAAK,CAAC,MAAM;QAClB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;QACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;IAC5B,CAAC;IAED,uEAAuE;IAChE,KAAK,CAAC,KAAK;QACjB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACnB,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAA;QACnC,YAAY,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAA;QAC/C,YAAY,CAAC,UAAU,CAAC,uBAAuB,CAAC,CAAA;IACjD,CAAC;CACD"}
@@ -1,16 +1,28 @@
1
1
  export type SyncState = "idle" | "syncing" | "offline" | "error";
2
+ /**
3
+ * Broadcasts store updates and sync state changes to local subscribers.
4
+ */
2
5
  export declare class EventBus {
6
+ /** Subscribers that listen for store updates. */
3
7
  private subscribers;
8
+ /** Subscribers that listen for sync state transitions. */
4
9
  private stateListeners;
10
+ /** Broadcast channel used to mirror updates across tabs. */
5
11
  private bc;
12
+ /** Initializes the broadcast listener for cross-tab update propagation. */
6
13
  constructor();
14
+ /** Adds a store-update subscriber and returns a handle for removing it. */
7
15
  subscribe(callback: (stores: string[]) => void): {
8
16
  close: () => boolean;
9
17
  };
18
+ /** Notifies all store subscribers and mirrors the update to other tabs. */
10
19
  notifySubscribers(stores: string[]): void;
20
+ /** Adds a sync-state subscriber and returns a handle for removing it. */
11
21
  onSyncStateChange(callback: (state: SyncState) => void): {
12
22
  close: () => boolean;
13
23
  };
24
+ /** Broadcasts a sync-state transition to all subscribers. */
14
25
  setState(state: SyncState): void;
26
+ /** Tears down the broadcast channel and stops cross-tab propagation. */
15
27
  dispose(): void;
16
28
  }
@@ -1,7 +1,14 @@
1
+ /**
2
+ * Broadcasts store updates and sync state changes to local subscribers.
3
+ */
1
4
  export class EventBus {
5
+ /** Subscribers that listen for store updates. */
2
6
  subscribers = new Set();
7
+ /** Subscribers that listen for sync state transitions. */
3
8
  stateListeners = new Set();
9
+ /** Broadcast channel used to mirror updates across tabs. */
4
10
  bc = typeof BroadcastChannel !== "undefined" ? new BroadcastChannel("dbsync_events") : null;
11
+ /** Initializes the broadcast listener for cross-tab update propagation. */
5
12
  constructor() {
6
13
  if (this.bc) {
7
14
  this.bc.onmessage = (e) => {
@@ -11,22 +18,27 @@ export class EventBus {
11
18
  };
12
19
  }
13
20
  }
21
+ /** Adds a store-update subscriber and returns a handle for removing it. */
14
22
  subscribe(callback) {
15
23
  this.subscribers.add(callback);
16
24
  return { close: () => this.subscribers.delete(callback) };
17
25
  }
26
+ /** Notifies all store subscribers and mirrors the update to other tabs. */
18
27
  notifySubscribers(stores) {
19
28
  this.subscribers.forEach((cb) => cb(stores));
20
29
  if (this.bc)
21
30
  this.bc.postMessage({ type: "DATA_UPDATED", stores });
22
31
  }
32
+ /** Adds a sync-state subscriber and returns a handle for removing it. */
23
33
  onSyncStateChange(callback) {
24
34
  this.stateListeners.add(callback);
25
35
  return { close: () => this.stateListeners.delete(callback) };
26
36
  }
37
+ /** Broadcasts a sync-state transition to all subscribers. */
27
38
  setState(state) {
28
39
  this.stateListeners.forEach((cb) => cb(state));
29
40
  }
41
+ /** Tears down the broadcast channel and stops cross-tab propagation. */
30
42
  dispose() {
31
43
  if (this.bc) {
32
44
  this.bc.close();
@@ -1 +1 @@
1
- {"version":3,"file":"EventBus.js","sourceRoot":"","sources":["../../src/internal/EventBus.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,QAAQ;IACZ,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAA;IACnD,cAAc,GAAG,IAAI,GAAG,EAA8B,CAAA;IACtD,EAAE,GACT,OAAO,gBAAgB,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEvF;QACC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE;gBACzB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACpC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACtC,CAAC;YACF,CAAC,CAAA;QACF,CAAC;IACF,CAAC;IAEM,SAAS,CAAC,QAAoC;QACpD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC9B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC1D,CAAC;IAEM,iBAAiB,CAAC,MAAgB;QACxC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;QAC5C,IAAI,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAA;IACnE,CAAC;IAEM,iBAAiB,CAAC,QAAoC;QAC5D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACjC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC7D,CAAC;IAEM,QAAQ,CAAC,KAAgB;QAC/B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAC/C,CAAC;IAEM,OAAO;QACb,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YACf,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;QACf,CAAC;IACF,CAAC;CACD"}
1
+ {"version":3,"file":"EventBus.js","sourceRoot":"","sources":["../../src/internal/EventBus.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,QAAQ;IACpB,iDAAiD;IACzC,WAAW,GAAG,IAAI,GAAG,EAA8B,CAAA;IAC3D,0DAA0D;IAClD,cAAc,GAAG,IAAI,GAAG,EAA8B,CAAA;IAC9D,4DAA4D;IACpD,EAAE,GACT,OAAO,gBAAgB,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAEvF,2EAA2E;IAC3E;QACC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,EAAE;gBACzB,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACpC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACtC,CAAC;YACF,CAAC,CAAA;QACF,CAAC;IACF,CAAC;IAED,2EAA2E;IACpE,SAAS,CAAC,QAAoC;QACpD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC9B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC1D,CAAC;IAED,2EAA2E;IACpE,iBAAiB,CAAC,MAAgB;QACxC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;QAC5C,IAAI,IAAI,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,CAAA;IACnE,CAAC;IAED,yEAAyE;IAClE,iBAAiB,CAAC,QAAoC;QAC5D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QACjC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;IAC7D,CAAC;IAED,6DAA6D;IACtD,QAAQ,CAAC,KAAgB;QAC/B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,wEAAwE;IACjE,OAAO;QACb,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;YACf,IAAI,CAAC,EAAE,GAAG,IAAI,CAAA;QACf,CAAC;IACF,CAAC;CACD"}