@framers/sql-storage-adapter 0.4.2 → 0.5.1
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 +94 -2
- package/dist/adapters/electron/electronMainAdapter.d.ts +241 -0
- package/dist/adapters/electron/electronMainAdapter.d.ts.map +1 -0
- package/dist/adapters/electron/electronMainAdapter.js +442 -0
- package/dist/adapters/electron/electronMainAdapter.js.map +1 -0
- package/dist/adapters/electron/electronRendererAdapter.d.ts +177 -0
- package/dist/adapters/electron/electronRendererAdapter.d.ts.map +1 -0
- package/dist/adapters/electron/electronRendererAdapter.js +339 -0
- package/dist/adapters/electron/electronRendererAdapter.js.map +1 -0
- package/dist/adapters/electron/index.d.ts +74 -0
- package/dist/adapters/electron/index.d.ts.map +1 -0
- package/dist/adapters/electron/index.js +96 -0
- package/dist/adapters/electron/index.js.map +1 -0
- package/dist/adapters/electron/ipc/channels.d.ts +196 -0
- package/dist/adapters/electron/ipc/channels.d.ts.map +1 -0
- package/dist/adapters/electron/ipc/channels.js +121 -0
- package/dist/adapters/electron/ipc/channels.js.map +1 -0
- package/dist/adapters/electron/ipc/index.d.ts +11 -0
- package/dist/adapters/electron/ipc/index.d.ts.map +1 -0
- package/dist/adapters/electron/ipc/index.js +11 -0
- package/dist/adapters/electron/ipc/index.js.map +1 -0
- package/dist/adapters/electron/ipc/protocol.d.ts +78 -0
- package/dist/adapters/electron/ipc/protocol.d.ts.map +1 -0
- package/dist/adapters/electron/ipc/protocol.js +347 -0
- package/dist/adapters/electron/ipc/protocol.js.map +1 -0
- package/dist/adapters/electron/ipc/types.d.ts +248 -0
- package/dist/adapters/electron/ipc/types.d.ts.map +1 -0
- package/dist/adapters/electron/ipc/types.js +8 -0
- package/dist/adapters/electron/ipc/types.js.map +1 -0
- package/dist/adapters/electron/migration/autoMigrator.d.ts +184 -0
- package/dist/adapters/electron/migration/autoMigrator.d.ts.map +1 -0
- package/dist/adapters/electron/migration/autoMigrator.js +478 -0
- package/dist/adapters/electron/migration/autoMigrator.js.map +1 -0
- package/dist/adapters/electron/migration/index.d.ts +9 -0
- package/dist/adapters/electron/migration/index.d.ts.map +1 -0
- package/dist/adapters/electron/migration/index.js +9 -0
- package/dist/adapters/electron/migration/index.js.map +1 -0
- package/dist/adapters/electron/preload.d.ts +126 -0
- package/dist/adapters/electron/preload.d.ts.map +1 -0
- package/dist/adapters/electron/preload.js +254 -0
- package/dist/adapters/electron/preload.js.map +1 -0
- package/dist/adapters/electron/recovery/corruptionDetector.d.ts +214 -0
- package/dist/adapters/electron/recovery/corruptionDetector.d.ts.map +1 -0
- package/dist/adapters/electron/recovery/corruptionDetector.js +410 -0
- package/dist/adapters/electron/recovery/corruptionDetector.js.map +1 -0
- package/dist/adapters/electron/recovery/index.d.ts +11 -0
- package/dist/adapters/electron/recovery/index.d.ts.map +1 -0
- package/dist/adapters/electron/recovery/index.js +11 -0
- package/dist/adapters/electron/recovery/index.js.map +1 -0
- package/dist/adapters/electron/recovery/walCheckpoint.d.ts +186 -0
- package/dist/adapters/electron/recovery/walCheckpoint.d.ts.map +1 -0
- package/dist/adapters/electron/recovery/walCheckpoint.js +302 -0
- package/dist/adapters/electron/recovery/walCheckpoint.js.map +1 -0
- package/dist/adapters/electron/window/index.d.ts +9 -0
- package/dist/adapters/electron/window/index.d.ts.map +1 -0
- package/dist/adapters/electron/window/index.js +9 -0
- package/dist/adapters/electron/window/index.js.map +1 -0
- package/dist/adapters/electron/window/windowManager.d.ts +190 -0
- package/dist/adapters/electron/window/windowManager.d.ts.map +1 -0
- package/dist/adapters/electron/window/windowManager.js +358 -0
- package/dist/adapters/electron/window/windowManager.js.map +1 -0
- package/dist/core/contracts/context.d.ts +2 -2
- package/dist/core/contracts/context.d.ts.map +1 -1
- package/dist/core/database.d.ts +19 -0
- package/dist/core/database.d.ts.map +1 -1
- package/dist/core/database.js +4 -0
- package/dist/core/database.js.map +1 -1
- package/dist/core/resolver.d.ts +3 -0
- package/dist/core/resolver.d.ts.map +1 -1
- package/dist/core/resolver.js +39 -3
- package/dist/core/resolver.js.map +1 -1
- package/dist/features/sync/conflicts/conflictResolver.d.ts +222 -0
- package/dist/features/sync/conflicts/conflictResolver.d.ts.map +1 -0
- package/dist/features/sync/conflicts/conflictResolver.js +396 -0
- package/dist/features/sync/conflicts/conflictResolver.js.map +1 -0
- package/dist/features/sync/conflicts/index.d.ts +9 -0
- package/dist/features/sync/conflicts/index.d.ts.map +1 -0
- package/dist/features/sync/conflicts/index.js +9 -0
- package/dist/features/sync/conflicts/index.js.map +1 -0
- package/dist/features/sync/crossPlatformSync.d.ts +281 -0
- package/dist/features/sync/crossPlatformSync.d.ts.map +1 -0
- package/dist/features/sync/crossPlatformSync.js +623 -0
- package/dist/features/sync/crossPlatformSync.js.map +1 -0
- package/dist/features/sync/devices/deviceManager.d.ts +243 -0
- package/dist/features/sync/devices/deviceManager.d.ts.map +1 -0
- package/dist/features/sync/devices/deviceManager.js +494 -0
- package/dist/features/sync/devices/deviceManager.js.map +1 -0
- package/dist/features/sync/devices/index.d.ts +10 -0
- package/dist/features/sync/devices/index.d.ts.map +1 -0
- package/dist/features/sync/devices/index.js +10 -0
- package/dist/features/sync/devices/index.js.map +1 -0
- package/dist/features/sync/index.d.ts +37 -0
- package/dist/features/sync/index.d.ts.map +1 -0
- package/dist/features/sync/index.js +47 -0
- package/dist/features/sync/index.js.map +1 -0
- package/dist/features/sync/protocol/index.d.ts +11 -0
- package/dist/features/sync/protocol/index.d.ts.map +1 -0
- package/dist/features/sync/protocol/index.js +11 -0
- package/dist/features/sync/protocol/index.js.map +1 -0
- package/dist/features/sync/protocol/messages.d.ts +348 -0
- package/dist/features/sync/protocol/messages.d.ts.map +1 -0
- package/dist/features/sync/protocol/messages.js +216 -0
- package/dist/features/sync/protocol/messages.js.map +1 -0
- package/dist/features/sync/protocol/vectorClock.d.ts +164 -0
- package/dist/features/sync/protocol/vectorClock.d.ts.map +1 -0
- package/dist/features/sync/protocol/vectorClock.js +286 -0
- package/dist/features/sync/protocol/vectorClock.js.map +1 -0
- package/dist/features/sync/tables/index.d.ts +10 -0
- package/dist/features/sync/tables/index.d.ts.map +1 -0
- package/dist/features/sync/tables/index.js +10 -0
- package/dist/features/sync/tables/index.js.map +1 -0
- package/dist/features/sync/tables/syncLogManager.d.ts +216 -0
- package/dist/features/sync/tables/syncLogManager.d.ts.map +1 -0
- package/dist/features/sync/tables/syncLogManager.js +456 -0
- package/dist/features/sync/tables/syncLogManager.js.map +1 -0
- package/dist/features/sync/transport/httpTransport.d.ts +123 -0
- package/dist/features/sync/transport/httpTransport.d.ts.map +1 -0
- package/dist/features/sync/transport/httpTransport.js +380 -0
- package/dist/features/sync/transport/httpTransport.js.map +1 -0
- package/dist/features/sync/transport/index.d.ts +12 -0
- package/dist/features/sync/transport/index.d.ts.map +1 -0
- package/dist/features/sync/transport/index.js +12 -0
- package/dist/features/sync/transport/index.js.map +1 -0
- package/dist/features/sync/transport/transport.d.ts +259 -0
- package/dist/features/sync/transport/transport.d.ts.map +1 -0
- package/dist/features/sync/transport/transport.js +153 -0
- package/dist/features/sync/transport/transport.js.map +1 -0
- package/dist/features/sync/transport/websocketTransport.d.ts +126 -0
- package/dist/features/sync/transport/websocketTransport.d.ts.map +1 -0
- package/dist/features/sync/transport/websocketTransport.js +374 -0
- package/dist/features/sync/transport/websocketTransport.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/package.json +21 -1
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Platform Sync Entry Point.
|
|
3
|
+
*
|
|
4
|
+
* Main API for synchronizing data across Electron, Capacitor,
|
|
5
|
+
* browser, and server platforms.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import type { StorageAdapter } from '../../core/contracts';
|
|
10
|
+
import type { VectorClockData } from './protocol/vectorClock';
|
|
11
|
+
import type { ChangeRecord } from './protocol/messages';
|
|
12
|
+
import type { TransportOptions } from './transport/transport';
|
|
13
|
+
import type { SyncConflict, ConflictResolution, ConflictStrategy, ConflictUIHooks, FieldMerger } from './conflicts/conflictResolver';
|
|
14
|
+
import type { DeviceInfo, DeviceType } from './devices/deviceManager';
|
|
15
|
+
/**
|
|
16
|
+
* Table sync configuration.
|
|
17
|
+
*/
|
|
18
|
+
export interface TableSyncConfig {
|
|
19
|
+
/** Sync priority (higher = synced first) */
|
|
20
|
+
priority?: 'critical' | 'high' | 'normal' | 'low';
|
|
21
|
+
/** Conflict resolution strategy for this table */
|
|
22
|
+
conflictStrategy?: ConflictStrategy;
|
|
23
|
+
/** Maximum records to sync per batch */
|
|
24
|
+
maxRecords?: number;
|
|
25
|
+
/** Custom field mergers for merge strategy */
|
|
26
|
+
fieldMergers?: Record<string, FieldMerger>;
|
|
27
|
+
/** Whether to track deletes */
|
|
28
|
+
trackDeletes?: boolean;
|
|
29
|
+
/** Primary key column (default: 'id') */
|
|
30
|
+
primaryKey?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Cross-platform sync options.
|
|
34
|
+
*/
|
|
35
|
+
export interface CrossPlatformSyncOptions {
|
|
36
|
+
/** Local storage adapter */
|
|
37
|
+
localAdapter: StorageAdapter;
|
|
38
|
+
/** Sync server endpoint */
|
|
39
|
+
endpoint: string;
|
|
40
|
+
/** Authentication token */
|
|
41
|
+
authToken?: string;
|
|
42
|
+
/** Device information */
|
|
43
|
+
device?: {
|
|
44
|
+
name?: string;
|
|
45
|
+
type?: DeviceType;
|
|
46
|
+
};
|
|
47
|
+
/** Tables to sync with their configuration */
|
|
48
|
+
tables: Record<string, TableSyncConfig>;
|
|
49
|
+
/** Transport type preference */
|
|
50
|
+
transport?: 'websocket' | 'http' | 'auto';
|
|
51
|
+
/** Transport options */
|
|
52
|
+
transportOptions?: Partial<TransportOptions>;
|
|
53
|
+
/** Default conflict strategy */
|
|
54
|
+
defaultConflictStrategy?: ConflictStrategy;
|
|
55
|
+
/** Conflict resolution UI hooks */
|
|
56
|
+
hooks?: CrossPlatformSyncHooks;
|
|
57
|
+
/** Sync interval in milliseconds (0 = manual only) */
|
|
58
|
+
syncInterval?: number;
|
|
59
|
+
/** Enable real-time sync (push changes immediately) */
|
|
60
|
+
realTime?: boolean;
|
|
61
|
+
/** Batch size for sync operations */
|
|
62
|
+
batchSize?: number;
|
|
63
|
+
/** Enable compression for sync payloads */
|
|
64
|
+
compression?: boolean;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Hooks for sync events and conflict resolution.
|
|
68
|
+
*/
|
|
69
|
+
export interface CrossPlatformSyncHooks extends ConflictUIHooks {
|
|
70
|
+
/** Called before sync starts */
|
|
71
|
+
onSyncStart?: () => void;
|
|
72
|
+
/** Called after sync completes */
|
|
73
|
+
onSyncComplete?: (result: SyncResult) => void;
|
|
74
|
+
/** Called when sync fails */
|
|
75
|
+
onSyncError?: (error: Error) => void;
|
|
76
|
+
/** Called when a change is pushed */
|
|
77
|
+
onChangePushed?: (change: ChangeRecord) => void;
|
|
78
|
+
/** Called when a change is pulled */
|
|
79
|
+
onChangePulled?: (change: ChangeRecord) => void;
|
|
80
|
+
/** Called when connection state changes */
|
|
81
|
+
onConnectionStateChange?: (connected: boolean) => void;
|
|
82
|
+
/** Called when a peer device is discovered */
|
|
83
|
+
onPeerDiscovered?: (peer: DeviceInfo) => void;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Sync operation result.
|
|
87
|
+
*/
|
|
88
|
+
export interface SyncResult {
|
|
89
|
+
/** Whether sync was successful */
|
|
90
|
+
success: boolean;
|
|
91
|
+
/** Number of records pushed */
|
|
92
|
+
pushed: number;
|
|
93
|
+
/** Number of records pulled */
|
|
94
|
+
pulled: number;
|
|
95
|
+
/** Number of conflicts detected */
|
|
96
|
+
conflicts: number;
|
|
97
|
+
/** Number of conflicts resolved */
|
|
98
|
+
conflictsResolved: number;
|
|
99
|
+
/** Duration in milliseconds */
|
|
100
|
+
duration: number;
|
|
101
|
+
/** Errors encountered */
|
|
102
|
+
errors: Error[];
|
|
103
|
+
/** Resulting vector clock */
|
|
104
|
+
vectorClock: VectorClockData;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Sync status information.
|
|
108
|
+
*/
|
|
109
|
+
export interface SyncStatus {
|
|
110
|
+
/** Current sync state */
|
|
111
|
+
state: 'idle' | 'syncing' | 'error' | 'offline';
|
|
112
|
+
/** Whether connected to sync server */
|
|
113
|
+
connected: boolean;
|
|
114
|
+
/** Last successful sync time */
|
|
115
|
+
lastSyncAt?: number;
|
|
116
|
+
/** Last sync result */
|
|
117
|
+
lastResult?: SyncResult;
|
|
118
|
+
/** Pending changes count */
|
|
119
|
+
pendingChanges: number;
|
|
120
|
+
/** Pending conflicts count */
|
|
121
|
+
pendingConflicts: number;
|
|
122
|
+
/** Current device info */
|
|
123
|
+
device?: DeviceInfo;
|
|
124
|
+
/** Known peer devices */
|
|
125
|
+
peers: DeviceInfo[];
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Cross-platform sync manager.
|
|
129
|
+
*
|
|
130
|
+
* Orchestrates synchronization between local database and remote
|
|
131
|
+
* sync server across all platforms.
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```typescript
|
|
135
|
+
* const sync = await createCrossPlatformSync({
|
|
136
|
+
* localAdapter: db,
|
|
137
|
+
* endpoint: 'wss://sync.example.com',
|
|
138
|
+
* authToken: 'token',
|
|
139
|
+
* device: { name: 'MacBook Pro', type: 'electron' },
|
|
140
|
+
* tables: {
|
|
141
|
+
* notes: { priority: 'high', conflictStrategy: 'merge' },
|
|
142
|
+
* settings: { priority: 'critical', conflictStrategy: 'local-wins' },
|
|
143
|
+
* },
|
|
144
|
+
* hooks: {
|
|
145
|
+
* onConflictNeedsResolution: (conflict) => showConflictDialog(conflict),
|
|
146
|
+
* onSyncComplete: (result) => console.log('Synced:', result),
|
|
147
|
+
* },
|
|
148
|
+
* });
|
|
149
|
+
*
|
|
150
|
+
* await sync.sync();
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
export declare class CrossPlatformSync {
|
|
154
|
+
private _adapter;
|
|
155
|
+
private _transport;
|
|
156
|
+
private _conflictResolver;
|
|
157
|
+
private _deviceManager;
|
|
158
|
+
private _syncLogManager;
|
|
159
|
+
private _options;
|
|
160
|
+
private _syncTimer;
|
|
161
|
+
private _status;
|
|
162
|
+
private _isSyncing;
|
|
163
|
+
private _disposed;
|
|
164
|
+
private _deviceId;
|
|
165
|
+
constructor(options: CrossPlatformSyncOptions);
|
|
166
|
+
/**
|
|
167
|
+
* Initialize the sync manager.
|
|
168
|
+
*/
|
|
169
|
+
initialize(): Promise<void>;
|
|
170
|
+
/**
|
|
171
|
+
* Perform a sync operation.
|
|
172
|
+
*/
|
|
173
|
+
sync(): Promise<SyncResult>;
|
|
174
|
+
/**
|
|
175
|
+
* Push a single change immediately (for real-time sync).
|
|
176
|
+
*/
|
|
177
|
+
pushChange(tableName: string, recordId: string, operation: 'INSERT' | 'UPDATE' | 'DELETE', data: Record<string, unknown>): Promise<void>;
|
|
178
|
+
/**
|
|
179
|
+
* Get current sync status.
|
|
180
|
+
*/
|
|
181
|
+
getStatus(): SyncStatus;
|
|
182
|
+
/**
|
|
183
|
+
* Get pending conflicts.
|
|
184
|
+
*/
|
|
185
|
+
getPendingConflicts(): SyncConflict[];
|
|
186
|
+
/**
|
|
187
|
+
* Resolve a conflict manually.
|
|
188
|
+
*/
|
|
189
|
+
resolveConflict(conflictId: string, decision: 'use_local' | 'use_remote' | 'use_merged' | 'keep_both' | 'defer', mergedData?: Record<string, unknown>): Promise<ConflictResolution>;
|
|
190
|
+
/**
|
|
191
|
+
* Connect to sync server.
|
|
192
|
+
*/
|
|
193
|
+
connect(): Promise<void>;
|
|
194
|
+
/**
|
|
195
|
+
* Disconnect from sync server.
|
|
196
|
+
*/
|
|
197
|
+
disconnect(): Promise<void>;
|
|
198
|
+
/**
|
|
199
|
+
* Dispose of the sync manager.
|
|
200
|
+
*/
|
|
201
|
+
dispose(): Promise<void>;
|
|
202
|
+
/**
|
|
203
|
+
* Initialize the transport layer.
|
|
204
|
+
*/
|
|
205
|
+
private _initializeTransport;
|
|
206
|
+
/**
|
|
207
|
+
* Set up transport event listeners.
|
|
208
|
+
*/
|
|
209
|
+
private _setupTransportListeners;
|
|
210
|
+
/**
|
|
211
|
+
* Set up device manager listeners.
|
|
212
|
+
*/
|
|
213
|
+
private _setupDeviceManagerListeners;
|
|
214
|
+
/**
|
|
215
|
+
* Send handshake to server.
|
|
216
|
+
*/
|
|
217
|
+
private _sendHandshake;
|
|
218
|
+
/**
|
|
219
|
+
* Handle incoming sync message.
|
|
220
|
+
*/
|
|
221
|
+
private _handleIncomingMessage;
|
|
222
|
+
/**
|
|
223
|
+
* Push local changes to server.
|
|
224
|
+
*/
|
|
225
|
+
private _pushChanges;
|
|
226
|
+
/**
|
|
227
|
+
* Pull remote changes from server.
|
|
228
|
+
*/
|
|
229
|
+
private _pullChanges;
|
|
230
|
+
/**
|
|
231
|
+
* Apply remote changes to local database.
|
|
232
|
+
*/
|
|
233
|
+
private _applyRemoteChanges;
|
|
234
|
+
/**
|
|
235
|
+
* Apply a single change to local database.
|
|
236
|
+
*/
|
|
237
|
+
private _applyChange;
|
|
238
|
+
/**
|
|
239
|
+
* Get a local record by table and ID.
|
|
240
|
+
*/
|
|
241
|
+
private _getLocalRecord;
|
|
242
|
+
/**
|
|
243
|
+
* Resolve pending conflicts.
|
|
244
|
+
*/
|
|
245
|
+
private _resolveConflicts;
|
|
246
|
+
/**
|
|
247
|
+
* Get count of pending changes.
|
|
248
|
+
*/
|
|
249
|
+
private _getPendingChangesCount;
|
|
250
|
+
/**
|
|
251
|
+
* Start sync timer.
|
|
252
|
+
*/
|
|
253
|
+
private _startSyncTimer;
|
|
254
|
+
/**
|
|
255
|
+
* Build table strategies map.
|
|
256
|
+
*/
|
|
257
|
+
private _buildTableStrategies;
|
|
258
|
+
/**
|
|
259
|
+
* Build field mergers map.
|
|
260
|
+
*/
|
|
261
|
+
private _buildFieldMergers;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Create a cross-platform sync instance.
|
|
265
|
+
*
|
|
266
|
+
* @example
|
|
267
|
+
* ```typescript
|
|
268
|
+
* const sync = await createCrossPlatformSync({
|
|
269
|
+
* localAdapter: db,
|
|
270
|
+
* endpoint: 'wss://sync.example.com',
|
|
271
|
+
* tables: {
|
|
272
|
+
* notes: { priority: 'high', conflictStrategy: 'merge' },
|
|
273
|
+
* settings: { priority: 'critical', conflictStrategy: 'local-wins' },
|
|
274
|
+
* },
|
|
275
|
+
* });
|
|
276
|
+
*
|
|
277
|
+
* await sync.sync();
|
|
278
|
+
* ```
|
|
279
|
+
*/
|
|
280
|
+
export declare const createCrossPlatformSync: (options: CrossPlatformSyncOptions) => Promise<CrossPlatformSync>;
|
|
281
|
+
//# sourceMappingURL=crossPlatformSync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crossPlatformSync.d.ts","sourceRoot":"","sources":["../../../src/features/sync/crossPlatformSync.ts"],"names":[],"mappings":"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"}
|