@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.
- package/README.md +312 -0
- package/dist/client/attachment.d.ts +225 -0
- package/dist/client/attachment.d.ts.map +1 -0
- package/dist/client/attachment.js +402 -0
- package/dist/client/attachment.js.map +1 -0
- package/dist/client/binary-encoding.d.ts +45 -0
- package/dist/client/binary-encoding.d.ts.map +1 -0
- package/dist/client/binary-encoding.js +90 -0
- package/dist/client/binary-encoding.js.map +1 -0
- package/dist/client/collection.d.ts +10 -0
- package/dist/client/collection.d.ts.map +1 -0
- package/dist/client/collection.js +924 -0
- package/dist/client/collection.js.map +1 -0
- package/dist/client/compression.d.ts +56 -0
- package/dist/client/compression.d.ts.map +1 -0
- package/dist/client/compression.js +173 -0
- package/dist/client/compression.js.map +1 -0
- package/dist/client/crdt/index.d.ts +2 -0
- package/dist/client/crdt/index.d.ts.map +1 -0
- package/dist/client/crdt/index.js +2 -0
- package/dist/client/crdt/index.js.map +1 -0
- package/dist/client/crdt/yjs-doc.d.ts +88 -0
- package/dist/client/crdt/yjs-doc.d.ts.map +1 -0
- package/dist/client/crdt/yjs-doc.js +123 -0
- package/dist/client/crdt/yjs-doc.js.map +1 -0
- package/dist/client/index.d.ts +66 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +233 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/mock-transport.d.ts +155 -0
- package/dist/client/mock-transport.d.ts.map +1 -0
- package/dist/client/mock-transport.js +292 -0
- package/dist/client/mock-transport.js.map +1 -0
- package/dist/client/network-detector.d.ts +65 -0
- package/dist/client/network-detector.d.ts.map +1 -0
- package/dist/client/network-detector.js +147 -0
- package/dist/client/network-detector.js.map +1 -0
- package/dist/client/provisioning.d.ts +126 -0
- package/dist/client/provisioning.d.ts.map +1 -0
- package/dist/client/provisioning.js +125 -0
- package/dist/client/provisioning.js.map +1 -0
- package/dist/client/signal.d.ts +13 -0
- package/dist/client/signal.d.ts.map +1 -0
- package/dist/client/signal.js +27 -0
- package/dist/client/signal.js.map +1 -0
- package/dist/client/sync-engine.d.ts +298 -0
- package/dist/client/sync-engine.d.ts.map +1 -0
- package/dist/client/sync-engine.js +904 -0
- package/dist/client/sync-engine.js.map +1 -0
- package/dist/client/synced-edge.d.ts +109 -0
- package/dist/client/synced-edge.d.ts.map +1 -0
- package/dist/client/synced-edge.js +179 -0
- package/dist/client/synced-edge.js.map +1 -0
- package/dist/client/synced-offline-edge-types.d.ts +540 -0
- package/dist/client/synced-offline-edge-types.d.ts.map +1 -0
- package/dist/client/synced-offline-edge-types.js +10 -0
- package/dist/client/synced-offline-edge-types.js.map +1 -0
- package/dist/client/synced-offline-edge.d.ts +54 -0
- package/dist/client/synced-offline-edge.d.ts.map +1 -0
- package/dist/client/synced-offline-edge.js +731 -0
- package/dist/client/synced-offline-edge.js.map +1 -0
- package/dist/client/transport.d.ts +202 -0
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/client/transport.js +409 -0
- package/dist/client/transport.js.map +1 -0
- package/dist/client/types.d.ts +622 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +60 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/validation.d.ts +61 -0
- package/dist/client/validation.d.ts.map +1 -0
- package/dist/client/validation.js +57 -0
- package/dist/client/validation.js.map +1 -0
- package/dist/client/versioning.d.ts +134 -0
- package/dist/client/versioning.d.ts.map +1 -0
- package/dist/client/versioning.js +304 -0
- package/dist/client/versioning.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/persistence/encryption.d.ts +114 -0
- package/dist/persistence/encryption.d.ts.map +1 -0
- package/dist/persistence/encryption.js +286 -0
- package/dist/persistence/encryption.js.map +1 -0
- package/dist/persistence/index.d.ts +21 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +20 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/memory.d.ts +32 -0
- package/dist/persistence/memory.d.ts.map +1 -0
- package/dist/persistence/memory.js +57 -0
- package/dist/persistence/memory.js.map +1 -0
- package/dist/persistence/migrations.d.ts +106 -0
- package/dist/persistence/migrations.d.ts.map +1 -0
- package/dist/persistence/migrations.js +176 -0
- package/dist/persistence/migrations.js.map +1 -0
- package/dist/persistence/pending-queue.d.ts +109 -0
- package/dist/persistence/pending-queue.d.ts.map +1 -0
- package/dist/persistence/pending-queue.js +249 -0
- package/dist/persistence/pending-queue.js.map +1 -0
- package/dist/persistence/pglite.d.ts +72 -0
- package/dist/persistence/pglite.d.ts.map +1 -0
- package/dist/persistence/pglite.js +126 -0
- package/dist/persistence/pglite.js.map +1 -0
- package/dist/persistence/quota-manager.d.ts +134 -0
- package/dist/persistence/quota-manager.d.ts.map +1 -0
- package/dist/persistence/quota-manager.js +242 -0
- package/dist/persistence/quota-manager.js.map +1 -0
- package/dist/persistence/types.d.ts +54 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +2 -0
- package/dist/persistence/types.js.map +1 -0
- package/dist/react/OfflineEdgeProvider.d.ts +91 -0
- package/dist/react/OfflineEdgeProvider.d.ts.map +1 -0
- package/dist/react/OfflineEdgeProvider.js +127 -0
- package/dist/react/OfflineEdgeProvider.js.map +1 -0
- package/dist/react/SyncedOfflineEdgeProvider.d.ts +105 -0
- package/dist/react/SyncedOfflineEdgeProvider.d.ts.map +1 -0
- package/dist/react/SyncedOfflineEdgeProvider.js +138 -0
- package/dist/react/SyncedOfflineEdgeProvider.js.map +1 -0
- package/dist/react/index.d.ts +50 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +51 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/useCollection.d.ts +77 -0
- package/dist/react/useCollection.d.ts.map +1 -0
- package/dist/react/useCollection.js +113 -0
- package/dist/react/useCollection.js.map +1 -0
- package/dist/react/useCollectionSyncMode.d.ts +61 -0
- package/dist/react/useCollectionSyncMode.d.ts.map +1 -0
- package/dist/react/useCollectionSyncMode.js +93 -0
- package/dist/react/useCollectionSyncMode.js.map +1 -0
- package/dist/react/useConnectionState.d.ts +44 -0
- package/dist/react/useConnectionState.d.ts.map +1 -0
- package/dist/react/useConnectionState.js +46 -0
- package/dist/react/useConnectionState.js.map +1 -0
- package/dist/react/useDocumentSyncStatus.d.ts +72 -0
- package/dist/react/useDocumentSyncStatus.d.ts.map +1 -0
- package/dist/react/useDocumentSyncStatus.js +110 -0
- package/dist/react/useDocumentSyncStatus.js.map +1 -0
- package/dist/react/useOfflineEdge.d.ts +58 -0
- package/dist/react/useOfflineEdge.d.ts.map +1 -0
- package/dist/react/useOfflineEdge.js +54 -0
- package/dist/react/useOfflineEdge.js.map +1 -0
- package/dist/react/usePendingChanges.d.ts +67 -0
- package/dist/react/usePendingChanges.d.ts.map +1 -0
- package/dist/react/usePendingChanges.js +90 -0
- package/dist/react/usePendingChanges.js.map +1 -0
- package/dist/react/useRejectedDocuments.d.ts +112 -0
- package/dist/react/useRejectedDocuments.d.ts.map +1 -0
- package/dist/react/useRejectedDocuments.js +213 -0
- package/dist/react/useRejectedDocuments.js.map +1 -0
- package/dist/react/useSyncControls.d.ts +96 -0
- package/dist/react/useSyncControls.d.ts.map +1 -0
- package/dist/react/useSyncControls.js +112 -0
- package/dist/react/useSyncControls.js.map +1 -0
- package/dist/react/useSyncProgress.d.ts +78 -0
- package/dist/react/useSyncProgress.d.ts.map +1 -0
- package/dist/react/useSyncProgress.js +90 -0
- package/dist/react/useSyncProgress.js.map +1 -0
- package/dist/react/useSyncRejected.d.ts +47 -0
- package/dist/react/useSyncRejected.d.ts.map +1 -0
- package/dist/react/useSyncRejected.js +55 -0
- package/dist/react/useSyncRejected.js.map +1 -0
- package/dist/react/useSyncStatus.d.ts +56 -0
- package/dist/react/useSyncStatus.d.ts.map +1 -0
- package/dist/react/useSyncStatus.js +59 -0
- package/dist/react/useSyncStatus.js.map +1 -0
- package/dist/react/useSyncedOfflineEdge.d.ts +69 -0
- package/dist/react/useSyncedOfflineEdge.d.ts.map +1 -0
- package/dist/react/useSyncedOfflineEdge.js +65 -0
- package/dist/react/useSyncedOfflineEdge.js.map +1 -0
- package/dist/service-worker/index.d.ts +7 -0
- package/dist/service-worker/index.d.ts.map +1 -0
- package/dist/service-worker/index.js +7 -0
- package/dist/service-worker/index.js.map +1 -0
- package/dist/service-worker/sync-worker.d.ts +230 -0
- package/dist/service-worker/sync-worker.d.ts.map +1 -0
- package/dist/service-worker/sync-worker.js +471 -0
- package/dist/service-worker/sync-worker.js.map +1 -0
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- 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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"}
|