@fatagnus/dink-sync 1.0.0

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 (186) hide show
  1. package/README.md +312 -0
  2. package/dist/client/attachment.d.ts +225 -0
  3. package/dist/client/attachment.d.ts.map +1 -0
  4. package/dist/client/attachment.js +402 -0
  5. package/dist/client/attachment.js.map +1 -0
  6. package/dist/client/binary-encoding.d.ts +45 -0
  7. package/dist/client/binary-encoding.d.ts.map +1 -0
  8. package/dist/client/binary-encoding.js +90 -0
  9. package/dist/client/binary-encoding.js.map +1 -0
  10. package/dist/client/collection.d.ts +10 -0
  11. package/dist/client/collection.d.ts.map +1 -0
  12. package/dist/client/collection.js +924 -0
  13. package/dist/client/collection.js.map +1 -0
  14. package/dist/client/compression.d.ts +56 -0
  15. package/dist/client/compression.d.ts.map +1 -0
  16. package/dist/client/compression.js +173 -0
  17. package/dist/client/compression.js.map +1 -0
  18. package/dist/client/crdt/index.d.ts +2 -0
  19. package/dist/client/crdt/index.d.ts.map +1 -0
  20. package/dist/client/crdt/index.js +2 -0
  21. package/dist/client/crdt/index.js.map +1 -0
  22. package/dist/client/crdt/yjs-doc.d.ts +88 -0
  23. package/dist/client/crdt/yjs-doc.d.ts.map +1 -0
  24. package/dist/client/crdt/yjs-doc.js +123 -0
  25. package/dist/client/crdt/yjs-doc.js.map +1 -0
  26. package/dist/client/index.d.ts +66 -0
  27. package/dist/client/index.d.ts.map +1 -0
  28. package/dist/client/index.js +233 -0
  29. package/dist/client/index.js.map +1 -0
  30. package/dist/client/mock-transport.d.ts +155 -0
  31. package/dist/client/mock-transport.d.ts.map +1 -0
  32. package/dist/client/mock-transport.js +292 -0
  33. package/dist/client/mock-transport.js.map +1 -0
  34. package/dist/client/network-detector.d.ts +65 -0
  35. package/dist/client/network-detector.d.ts.map +1 -0
  36. package/dist/client/network-detector.js +147 -0
  37. package/dist/client/network-detector.js.map +1 -0
  38. package/dist/client/provisioning.d.ts +126 -0
  39. package/dist/client/provisioning.d.ts.map +1 -0
  40. package/dist/client/provisioning.js +125 -0
  41. package/dist/client/provisioning.js.map +1 -0
  42. package/dist/client/signal.d.ts +13 -0
  43. package/dist/client/signal.d.ts.map +1 -0
  44. package/dist/client/signal.js +27 -0
  45. package/dist/client/signal.js.map +1 -0
  46. package/dist/client/sync-engine.d.ts +298 -0
  47. package/dist/client/sync-engine.d.ts.map +1 -0
  48. package/dist/client/sync-engine.js +904 -0
  49. package/dist/client/sync-engine.js.map +1 -0
  50. package/dist/client/synced-edge.d.ts +109 -0
  51. package/dist/client/synced-edge.d.ts.map +1 -0
  52. package/dist/client/synced-edge.js +179 -0
  53. package/dist/client/synced-edge.js.map +1 -0
  54. package/dist/client/synced-offline-edge-types.d.ts +540 -0
  55. package/dist/client/synced-offline-edge-types.d.ts.map +1 -0
  56. package/dist/client/synced-offline-edge-types.js +10 -0
  57. package/dist/client/synced-offline-edge-types.js.map +1 -0
  58. package/dist/client/synced-offline-edge.d.ts +54 -0
  59. package/dist/client/synced-offline-edge.d.ts.map +1 -0
  60. package/dist/client/synced-offline-edge.js +731 -0
  61. package/dist/client/synced-offline-edge.js.map +1 -0
  62. package/dist/client/transport.d.ts +202 -0
  63. package/dist/client/transport.d.ts.map +1 -0
  64. package/dist/client/transport.js +409 -0
  65. package/dist/client/transport.js.map +1 -0
  66. package/dist/client/types.d.ts +622 -0
  67. package/dist/client/types.d.ts.map +1 -0
  68. package/dist/client/types.js +60 -0
  69. package/dist/client/types.js.map +1 -0
  70. package/dist/client/validation.d.ts +61 -0
  71. package/dist/client/validation.d.ts.map +1 -0
  72. package/dist/client/validation.js +57 -0
  73. package/dist/client/validation.js.map +1 -0
  74. package/dist/client/versioning.d.ts +134 -0
  75. package/dist/client/versioning.d.ts.map +1 -0
  76. package/dist/client/versioning.js +304 -0
  77. package/dist/client/versioning.js.map +1 -0
  78. package/dist/index.d.ts +40 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +51 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/persistence/encryption.d.ts +114 -0
  83. package/dist/persistence/encryption.d.ts.map +1 -0
  84. package/dist/persistence/encryption.js +286 -0
  85. package/dist/persistence/encryption.js.map +1 -0
  86. package/dist/persistence/index.d.ts +21 -0
  87. package/dist/persistence/index.d.ts.map +1 -0
  88. package/dist/persistence/index.js +20 -0
  89. package/dist/persistence/index.js.map +1 -0
  90. package/dist/persistence/memory.d.ts +32 -0
  91. package/dist/persistence/memory.d.ts.map +1 -0
  92. package/dist/persistence/memory.js +57 -0
  93. package/dist/persistence/memory.js.map +1 -0
  94. package/dist/persistence/migrations.d.ts +106 -0
  95. package/dist/persistence/migrations.d.ts.map +1 -0
  96. package/dist/persistence/migrations.js +176 -0
  97. package/dist/persistence/migrations.js.map +1 -0
  98. package/dist/persistence/pending-queue.d.ts +109 -0
  99. package/dist/persistence/pending-queue.d.ts.map +1 -0
  100. package/dist/persistence/pending-queue.js +249 -0
  101. package/dist/persistence/pending-queue.js.map +1 -0
  102. package/dist/persistence/pglite.d.ts +72 -0
  103. package/dist/persistence/pglite.d.ts.map +1 -0
  104. package/dist/persistence/pglite.js +126 -0
  105. package/dist/persistence/pglite.js.map +1 -0
  106. package/dist/persistence/quota-manager.d.ts +134 -0
  107. package/dist/persistence/quota-manager.d.ts.map +1 -0
  108. package/dist/persistence/quota-manager.js +242 -0
  109. package/dist/persistence/quota-manager.js.map +1 -0
  110. package/dist/persistence/types.d.ts +54 -0
  111. package/dist/persistence/types.d.ts.map +1 -0
  112. package/dist/persistence/types.js +2 -0
  113. package/dist/persistence/types.js.map +1 -0
  114. package/dist/react/OfflineEdgeProvider.d.ts +91 -0
  115. package/dist/react/OfflineEdgeProvider.d.ts.map +1 -0
  116. package/dist/react/OfflineEdgeProvider.js +127 -0
  117. package/dist/react/OfflineEdgeProvider.js.map +1 -0
  118. package/dist/react/SyncedOfflineEdgeProvider.d.ts +105 -0
  119. package/dist/react/SyncedOfflineEdgeProvider.d.ts.map +1 -0
  120. package/dist/react/SyncedOfflineEdgeProvider.js +138 -0
  121. package/dist/react/SyncedOfflineEdgeProvider.js.map +1 -0
  122. package/dist/react/index.d.ts +50 -0
  123. package/dist/react/index.d.ts.map +1 -0
  124. package/dist/react/index.js +51 -0
  125. package/dist/react/index.js.map +1 -0
  126. package/dist/react/useCollection.d.ts +77 -0
  127. package/dist/react/useCollection.d.ts.map +1 -0
  128. package/dist/react/useCollection.js +113 -0
  129. package/dist/react/useCollection.js.map +1 -0
  130. package/dist/react/useCollectionSyncMode.d.ts +61 -0
  131. package/dist/react/useCollectionSyncMode.d.ts.map +1 -0
  132. package/dist/react/useCollectionSyncMode.js +93 -0
  133. package/dist/react/useCollectionSyncMode.js.map +1 -0
  134. package/dist/react/useConnectionState.d.ts +44 -0
  135. package/dist/react/useConnectionState.d.ts.map +1 -0
  136. package/dist/react/useConnectionState.js +46 -0
  137. package/dist/react/useConnectionState.js.map +1 -0
  138. package/dist/react/useDocumentSyncStatus.d.ts +72 -0
  139. package/dist/react/useDocumentSyncStatus.d.ts.map +1 -0
  140. package/dist/react/useDocumentSyncStatus.js +110 -0
  141. package/dist/react/useDocumentSyncStatus.js.map +1 -0
  142. package/dist/react/useOfflineEdge.d.ts +58 -0
  143. package/dist/react/useOfflineEdge.d.ts.map +1 -0
  144. package/dist/react/useOfflineEdge.js +54 -0
  145. package/dist/react/useOfflineEdge.js.map +1 -0
  146. package/dist/react/usePendingChanges.d.ts +67 -0
  147. package/dist/react/usePendingChanges.d.ts.map +1 -0
  148. package/dist/react/usePendingChanges.js +90 -0
  149. package/dist/react/usePendingChanges.js.map +1 -0
  150. package/dist/react/useRejectedDocuments.d.ts +112 -0
  151. package/dist/react/useRejectedDocuments.d.ts.map +1 -0
  152. package/dist/react/useRejectedDocuments.js +213 -0
  153. package/dist/react/useRejectedDocuments.js.map +1 -0
  154. package/dist/react/useSyncControls.d.ts +96 -0
  155. package/dist/react/useSyncControls.d.ts.map +1 -0
  156. package/dist/react/useSyncControls.js +112 -0
  157. package/dist/react/useSyncControls.js.map +1 -0
  158. package/dist/react/useSyncProgress.d.ts +78 -0
  159. package/dist/react/useSyncProgress.d.ts.map +1 -0
  160. package/dist/react/useSyncProgress.js +90 -0
  161. package/dist/react/useSyncProgress.js.map +1 -0
  162. package/dist/react/useSyncRejected.d.ts +47 -0
  163. package/dist/react/useSyncRejected.d.ts.map +1 -0
  164. package/dist/react/useSyncRejected.js +55 -0
  165. package/dist/react/useSyncRejected.js.map +1 -0
  166. package/dist/react/useSyncStatus.d.ts +56 -0
  167. package/dist/react/useSyncStatus.d.ts.map +1 -0
  168. package/dist/react/useSyncStatus.js +59 -0
  169. package/dist/react/useSyncStatus.js.map +1 -0
  170. package/dist/react/useSyncedOfflineEdge.d.ts +69 -0
  171. package/dist/react/useSyncedOfflineEdge.d.ts.map +1 -0
  172. package/dist/react/useSyncedOfflineEdge.js +65 -0
  173. package/dist/react/useSyncedOfflineEdge.js.map +1 -0
  174. package/dist/service-worker/index.d.ts +7 -0
  175. package/dist/service-worker/index.d.ts.map +1 -0
  176. package/dist/service-worker/index.js +7 -0
  177. package/dist/service-worker/index.js.map +1 -0
  178. package/dist/service-worker/sync-worker.d.ts +230 -0
  179. package/dist/service-worker/sync-worker.d.ts.map +1 -0
  180. package/dist/service-worker/sync-worker.js +471 -0
  181. package/dist/service-worker/sync-worker.js.map +1 -0
  182. package/dist/types.d.ts +6 -0
  183. package/dist/types.d.ts.map +1 -0
  184. package/dist/types.js +3 -0
  185. package/dist/types.js.map +1 -0
  186. package/package.json +95 -0
@@ -0,0 +1,298 @@
1
+ /**
2
+ * SyncEngine - NATS-based sync engine for offline-first document synchronization
3
+ *
4
+ * Implements per-document actors with:
5
+ * - Connection state tracking (online/offline/reconnecting)
6
+ * - Local change queuing with debounced batch sending
7
+ * - State vector exchange for CRDT convergence
8
+ * - Event emission for UI binding
9
+ * - Actual NATS transport for sync communication
10
+ */
11
+ import { type Transport } from './transport.js';
12
+ import { type CompressionConfig } from './compression.js';
13
+ import { PendingQueue } from '../persistence/pending-queue.js';
14
+ import type { PersistenceProvider } from '../persistence/types.js';
15
+ import type { NetworkDetector } from './network-detector.js';
16
+ export declare const ConnectionState: {
17
+ readonly Offline: "offline";
18
+ readonly Connecting: "connecting";
19
+ readonly Online: "online";
20
+ readonly Reconnecting: "reconnecting";
21
+ };
22
+ export type ConnectionState = typeof ConnectionState[keyof typeof ConnectionState];
23
+ export declare const DEFAULT_DEBOUNCE_MS = 200;
24
+ export declare const DEFAULT_MAX_RETRIES = 5;
25
+ export declare const DEFAULT_MAX_BACKOFF_DELAY = 30000;
26
+ export declare const DEFAULT_BATCH_SIZE = 50;
27
+ /**
28
+ * Configuration for SyncEngine
29
+ */
30
+ export interface SyncEngineConfig {
31
+ /** NATS server URL (e.g., 'nats://localhost:4222') */
32
+ readonly serverUrl: string;
33
+ /** API key for authentication */
34
+ readonly apiKey: string;
35
+ /** Application ID (optional, extracted from API key if not provided) */
36
+ readonly appId?: string;
37
+ /** Edge ID (optional, extracted from API key if not provided) */
38
+ readonly edgeId?: string;
39
+ /** Debounce time in ms before sending changes (default: 200) */
40
+ readonly debounceMs?: number;
41
+ /** Max retries for failed sync operations (default: 3) */
42
+ readonly maxRetries?: number;
43
+ /** Max batch size for sync operations (default: 50) */
44
+ readonly batchSize?: number;
45
+ /** Request timeout in ms (default: 10000) */
46
+ readonly requestTimeout?: number;
47
+ /** Custom transport (for testing or alternative implementations) */
48
+ readonly transport?: Transport;
49
+ /** Optional PendingQueue for persisting pending changes across crashes */
50
+ readonly pendingQueue?: PendingQueue;
51
+ /** Optional PersistenceProvider for storing state vectors */
52
+ readonly persistence?: PersistenceProvider;
53
+ /** Optional NetworkDetector for automatic network state detection */
54
+ readonly networkDetector?: NetworkDetector;
55
+ /** Optional compression configuration for large binary payloads */
56
+ readonly compression?: CompressionConfig;
57
+ }
58
+ /**
59
+ * Unsubscribe function type
60
+ */
61
+ export type Unsubscribe = () => void;
62
+ /**
63
+ * Document actor interface for per-document sync management
64
+ */
65
+ export interface DocumentActor {
66
+ readonly documentId: string;
67
+ readonly collection: string;
68
+ queueChange(delta: Uint8Array): void;
69
+ hasPendingChanges(): boolean;
70
+ onPendingChange(callback: (pending: boolean) => void): Unsubscribe;
71
+ getStateVector(): Uint8Array;
72
+ setStateVector(vector: Uint8Array): void;
73
+ applyExternalUpdate(update: Uint8Array): void;
74
+ onExternalUpdate(callback: (update: Uint8Array) => void): Unsubscribe;
75
+ }
76
+ /**
77
+ * Sync event types
78
+ */
79
+ export interface SyncStartedEvent {
80
+ readonly collection: string;
81
+ readonly documentId: string;
82
+ }
83
+ export interface SyncCompleteEvent {
84
+ readonly collection: string;
85
+ readonly documentId: string;
86
+ }
87
+ export interface SyncErrorEvent {
88
+ readonly collection: string;
89
+ readonly documentId: string;
90
+ readonly error: Error;
91
+ }
92
+ /**
93
+ * Event emitted when a retry is scheduled for a failed sync.
94
+ */
95
+ export interface RetryScheduledEvent {
96
+ readonly collection: string;
97
+ readonly documentId: string;
98
+ /** The retry attempt number (1-based) */
99
+ readonly attempt: number;
100
+ /** The delay in milliseconds before the retry */
101
+ readonly delay: number;
102
+ }
103
+ /**
104
+ * Event emitted when sync has permanently failed after all retries.
105
+ */
106
+ export interface SyncFailedEvent {
107
+ readonly collection: string;
108
+ readonly documentId: string;
109
+ readonly error: Error;
110
+ /** Total number of attempts made (initial + retries) */
111
+ readonly totalAttempts: number;
112
+ }
113
+ /**
114
+ * Error codes for sync rejection (server-side failures).
115
+ */
116
+ export declare const SyncRejectionCode: {
117
+ readonly UniqueViolation: "UNIQUE_VIOLATION";
118
+ readonly ValidationError: "VALIDATION_ERROR";
119
+ readonly PermissionDenied: "PERMISSION_DENIED";
120
+ readonly NotFound: "NOT_FOUND";
121
+ readonly ServerError: "SERVER_ERROR";
122
+ readonly Unknown: "UNKNOWN";
123
+ };
124
+ export type SyncRejectionCode = typeof SyncRejectionCode[keyof typeof SyncRejectionCode];
125
+ /**
126
+ * Detailed rejection information from server.
127
+ */
128
+ export interface SyncRejectionError {
129
+ readonly code: SyncRejectionCode;
130
+ readonly field?: string;
131
+ readonly message: string;
132
+ readonly originalError?: unknown;
133
+ }
134
+ /**
135
+ * Event emitted when a sync is rejected by the server.
136
+ */
137
+ export interface SyncRejectedEvent {
138
+ readonly collection: string;
139
+ readonly documentId: string;
140
+ readonly error: SyncRejectionError;
141
+ }
142
+ /**
143
+ * Event emitted when local changes are discarded.
144
+ */
145
+ export interface LocalChangesDiscardedEvent {
146
+ readonly collection: string;
147
+ readonly documentId: string;
148
+ /** Number of changes that were discarded */
149
+ readonly discardedCount: number;
150
+ }
151
+ /**
152
+ * Event emitted when a force push operation is performed.
153
+ * Used for audit logging of force push operations.
154
+ */
155
+ export interface ForcePushEvent {
156
+ readonly collection: string;
157
+ readonly documentId: string;
158
+ /** Timestamp when the force push was performed */
159
+ readonly timestamp: number;
160
+ /** Whether the force push succeeded */
161
+ readonly success: boolean;
162
+ /** Error details if force push failed */
163
+ readonly error?: {
164
+ readonly code: string;
165
+ readonly message: string;
166
+ };
167
+ }
168
+ /**
169
+ * Result of a force push operation.
170
+ */
171
+ export interface ForcePushResult {
172
+ readonly success: boolean;
173
+ readonly error?: {
174
+ readonly code: string;
175
+ readonly message: string;
176
+ };
177
+ }
178
+ /**
179
+ * SyncEngine interface
180
+ */
181
+ export interface SyncEngine {
182
+ getConnectionState(): ConnectionState;
183
+ onStateChange(callback: (state: ConnectionState) => void): Unsubscribe;
184
+ connect(): Promise<void>;
185
+ disconnect(): Promise<void>;
186
+ destroy(): Promise<void>;
187
+ registerDocument(collection: string, documentId: string): Promise<DocumentActor>;
188
+ unregisterDocument(collection: string, documentId: string): Promise<void>;
189
+ onSyncStarted(callback: (event: SyncStartedEvent) => void): Unsubscribe;
190
+ onSyncComplete(callback: (event: SyncCompleteEvent) => void): Unsubscribe;
191
+ onSyncError(callback: (event: SyncErrorEvent) => void): Unsubscribe;
192
+ /**
193
+ * Subscribe to sync rejection events.
194
+ * Called when server rejects a sync due to validation errors, constraint violations, etc.
195
+ * @param callback - Function called with rejection details
196
+ * @returns Unsubscribe function
197
+ */
198
+ onSyncRejected(callback: (event: SyncRejectedEvent) => void): Unsubscribe;
199
+ /**
200
+ * Manually mark a document as rejected (for testing or external rejection handling).
201
+ * @param collection - Collection name
202
+ * @param documentId - Document ID
203
+ * @param error - Rejection error details
204
+ */
205
+ rejectDocument(collection: string, documentId: string, error: SyncRejectionError): void;
206
+ /**
207
+ * Subscribe to retry scheduled events.
208
+ * Called when a sync retry is scheduled after a retryable failure.
209
+ * @param callback - Function called with retry details
210
+ * @returns Unsubscribe function
211
+ */
212
+ onRetryScheduled(callback: (event: RetryScheduledEvent) => void): Unsubscribe;
213
+ /**
214
+ * Subscribe to sync failed events.
215
+ * Called when sync has permanently failed after all retries are exhausted.
216
+ * @param callback - Function called with failure details
217
+ * @returns Unsubscribe function
218
+ */
219
+ onSyncFailed(callback: (event: SyncFailedEvent) => void): Unsubscribe;
220
+ /**
221
+ * Reset retry count for a document and trigger a new sync attempt.
222
+ * Useful for manually retrying failed syncs after fixing the issue.
223
+ * @param collection - Collection name
224
+ * @param documentId - Document ID
225
+ */
226
+ resetRetries(collection: string, documentId: string): void;
227
+ /**
228
+ * Manually force offline mode.
229
+ * Prevents sync operations even when network is available.
230
+ * Useful for testing offline behavior or saving battery.
231
+ */
232
+ goOffline(): void;
233
+ /**
234
+ * Exit manual offline mode.
235
+ * Flushes any pending changes if transport and network are available.
236
+ */
237
+ goOnline(): void;
238
+ /**
239
+ * Check if the engine is in manual offline mode.
240
+ * @returns true if manually offline, false otherwise
241
+ */
242
+ isManuallyOffline(): boolean;
243
+ /**
244
+ * Discard local changes for a specific document.
245
+ * Removes pending changes from the queue and reverts to last synced state.
246
+ * @param collection - Collection name
247
+ * @param documentId - Document ID
248
+ */
249
+ discardLocalChanges(collection: string, documentId: string): Promise<void>;
250
+ /**
251
+ * Discard all local changes, optionally filtered by collection.
252
+ * @param collection - Optional collection name to filter by
253
+ */
254
+ discardAllLocalChanges(collection?: string): Promise<void>;
255
+ /**
256
+ * Subscribe to local changes discarded events.
257
+ * Called when local changes are discarded via discardLocalChanges or discardAllLocalChanges.
258
+ * @param callback - Function called with discard details
259
+ * @returns Unsubscribe function
260
+ */
261
+ onLocalChangesDiscarded(callback: (event: LocalChangesDiscardedEvent) => void): Unsubscribe;
262
+ /**
263
+ * Force push local state to server, overriding server state entirely.
264
+ * This is a last resort for conflict resolution and requires explicit user confirmation.
265
+ * @param collection - Collection name
266
+ * @param documentId - Document ID
267
+ * @returns Result of the force push operation
268
+ */
269
+ forcePush(collection: string, documentId: string): Promise<ForcePushResult>;
270
+ /**
271
+ * Subscribe to force push events for audit logging.
272
+ * Called when a force push operation is performed (success or failure).
273
+ * @param callback - Function called with force push details
274
+ * @returns Unsubscribe function
275
+ */
276
+ onForcePush(callback: (event: ForcePushEvent) => void): Unsubscribe;
277
+ }
278
+ /**
279
+ * Calculate exponential backoff delay.
280
+ * Delays: 1s, 2s, 4s, 8s, 16s, capped at maxDelay (default 30s).
281
+ * @param retryCount - The current retry attempt (0-indexed)
282
+ * @param maxDelay - Maximum delay in ms (default: 30000)
283
+ * @returns Delay in milliseconds
284
+ */
285
+ export declare function calculateBackoffDelay(retryCount: number, maxDelay?: number): number;
286
+ /**
287
+ * Determine if an error is retryable.
288
+ * Network errors, timeouts, and server errors are retryable.
289
+ * Validation, auth, and unique constraint errors are not.
290
+ * @param error - The error to check
291
+ * @returns true if the error is retryable, false otherwise
292
+ */
293
+ export declare function isRetryableError(error: Error): boolean;
294
+ /**
295
+ * Creates a SyncEngine instance
296
+ */
297
+ export declare function createSyncEngine(config: SyncEngineConfig): SyncEngine;
298
+ //# sourceMappingURL=sync-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-engine.d.ts","sourceRoot":"","sources":["../../src/client/sync-engine.ts"],"names":[],"mappings":"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"}