@framers/sql-storage-adapter 0.7.1 → 0.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +43 -0
  2. package/dist/adapters/electron/preload.cjs +289 -0
  3. package/dist/adapters/electron/renderer.d.ts +9 -0
  4. package/dist/adapters/electron/renderer.d.ts.map +1 -0
  5. package/dist/adapters/electron/renderer.js +8 -0
  6. package/dist/adapters/electron/renderer.js.map +1 -0
  7. package/dist/cjs/adapters/__tests__/indexedDbAdapter.spec.d.ts +2 -0
  8. package/dist/cjs/adapters/__tests__/indexedDbAdapter.spec.js +133 -0
  9. package/dist/cjs/adapters/baseStorageAdapter.d.ts +368 -0
  10. package/dist/cjs/adapters/baseStorageAdapter.js +744 -0
  11. package/dist/cjs/adapters/betterSqliteAdapter.d.ts +124 -0
  12. package/dist/cjs/adapters/betterSqliteAdapter.js +334 -0
  13. package/dist/cjs/adapters/capacitorSqliteAdapter.d.ts +83 -0
  14. package/dist/cjs/adapters/capacitorSqliteAdapter.js +250 -0
  15. package/dist/cjs/adapters/electron/electronMainAdapter.d.ts +251 -0
  16. package/dist/cjs/adapters/electron/electronMainAdapter.js +392 -0
  17. package/dist/cjs/adapters/electron/electronRendererAdapter.d.ts +177 -0
  18. package/dist/cjs/adapters/electron/electronRendererAdapter.js +283 -0
  19. package/dist/cjs/adapters/electron/index.d.ts +74 -0
  20. package/dist/cjs/adapters/electron/index.js +86 -0
  21. package/dist/cjs/adapters/electron/ipc/channels.d.ts +196 -0
  22. package/dist/cjs/adapters/electron/ipc/channels.js +127 -0
  23. package/dist/cjs/adapters/electron/ipc/index.d.ts +11 -0
  24. package/dist/cjs/adapters/electron/ipc/index.js +38 -0
  25. package/dist/cjs/adapters/electron/ipc/protocol.d.ts +78 -0
  26. package/dist/cjs/adapters/electron/ipc/protocol.js +341 -0
  27. package/dist/cjs/adapters/electron/ipc/types.d.ts +248 -0
  28. package/dist/cjs/adapters/electron/ipc/types.js +15 -0
  29. package/dist/cjs/adapters/electron/migration/autoMigrator.d.ts +184 -0
  30. package/dist/cjs/adapters/electron/migration/autoMigrator.js +441 -0
  31. package/dist/cjs/adapters/electron/migration/index.d.ts +9 -0
  32. package/dist/cjs/adapters/electron/migration/index.js +29 -0
  33. package/dist/cjs/adapters/electron/preload.d.ts +126 -0
  34. package/dist/cjs/adapters/electron/preload.js +233 -0
  35. package/dist/cjs/adapters/electron/recovery/corruptionDetector.d.ts +214 -0
  36. package/dist/cjs/adapters/electron/recovery/corruptionDetector.js +359 -0
  37. package/dist/cjs/adapters/electron/recovery/index.d.ts +11 -0
  38. package/dist/cjs/adapters/electron/recovery/index.js +34 -0
  39. package/dist/cjs/adapters/electron/recovery/walCheckpoint.d.ts +186 -0
  40. package/dist/cjs/adapters/electron/recovery/walCheckpoint.js +263 -0
  41. package/dist/cjs/adapters/electron/renderer.d.ts +9 -0
  42. package/dist/cjs/adapters/electron/renderer.js +33 -0
  43. package/dist/cjs/adapters/electron/window/index.d.ts +9 -0
  44. package/dist/cjs/adapters/electron/window/index.js +29 -0
  45. package/dist/cjs/adapters/electron/window/windowManager.d.ts +190 -0
  46. package/dist/cjs/adapters/electron/window/windowManager.js +321 -0
  47. package/dist/cjs/adapters/indexedDbAdapter.d.ts +490 -0
  48. package/dist/cjs/adapters/indexedDbAdapter.js +993 -0
  49. package/dist/cjs/adapters/postgresAdapter.d.ts +424 -0
  50. package/dist/cjs/adapters/postgresAdapter.js +889 -0
  51. package/dist/cjs/adapters/sqlJsAdapter.d.ts +64 -0
  52. package/dist/cjs/adapters/sqlJsAdapter.js +268 -0
  53. package/dist/cjs/adapters/supabase.d.ts +58 -0
  54. package/dist/cjs/adapters/supabase.js +401 -0
  55. package/dist/cjs/codecs/BrowserBlobCodec.d.ts +14 -0
  56. package/dist/cjs/codecs/BrowserBlobCodec.js +57 -0
  57. package/dist/cjs/codecs/NodeBlobCodec.d.ts +14 -0
  58. package/dist/cjs/codecs/NodeBlobCodec.js +59 -0
  59. package/dist/cjs/core/contracts/blobCodec.d.ts +15 -0
  60. package/dist/cjs/core/contracts/blobCodec.js +15 -0
  61. package/dist/cjs/core/contracts/context.d.ts +221 -0
  62. package/dist/cjs/core/contracts/context.js +15 -0
  63. package/dist/cjs/core/contracts/dialect.d.ts +154 -0
  64. package/dist/cjs/core/contracts/dialect.js +15 -0
  65. package/dist/cjs/core/contracts/events.d.ts +225 -0
  66. package/dist/cjs/core/contracts/events.js +15 -0
  67. package/dist/cjs/core/contracts/exporter.d.ts +13 -0
  68. package/dist/cjs/core/contracts/exporter.js +15 -0
  69. package/dist/cjs/core/contracts/extensions.d.ts +73 -0
  70. package/dist/cjs/core/contracts/extensions.js +15 -0
  71. package/dist/cjs/core/contracts/features.d.ts +25 -0
  72. package/dist/cjs/core/contracts/features.js +61 -0
  73. package/dist/cjs/core/contracts/fts.d.ts +66 -0
  74. package/dist/cjs/core/contracts/fts.js +15 -0
  75. package/dist/cjs/core/contracts/hooks.d.ts +481 -0
  76. package/dist/cjs/core/contracts/hooks.js +140 -0
  77. package/dist/cjs/core/contracts/index.d.ts +260 -0
  78. package/dist/cjs/core/contracts/index.js +41 -0
  79. package/dist/cjs/core/contracts/limitations.d.ts +46 -0
  80. package/dist/cjs/core/contracts/limitations.js +218 -0
  81. package/dist/cjs/core/contracts/performance.d.ts +308 -0
  82. package/dist/cjs/core/contracts/performance.js +144 -0
  83. package/dist/cjs/core/database.d.ts +220 -0
  84. package/dist/cjs/core/database.js +136 -0
  85. package/dist/cjs/core/portable.d.ts +23 -0
  86. package/dist/cjs/core/portable.js +66 -0
  87. package/dist/cjs/core/resolver.d.ts +77 -0
  88. package/dist/cjs/core/resolver.js +235 -0
  89. package/dist/cjs/dialects/PostgresDialect.d.ts +35 -0
  90. package/dist/cjs/dialects/PostgresDialect.js +143 -0
  91. package/dist/cjs/dialects/SqliteDialect.d.ts +35 -0
  92. package/dist/cjs/dialects/SqliteDialect.js +142 -0
  93. package/dist/cjs/dialects/shared.d.ts +17 -0
  94. package/dist/cjs/dialects/shared.js +90 -0
  95. package/dist/cjs/exporters/PostgresExporter.d.ts +14 -0
  96. package/dist/cjs/exporters/PostgresExporter.js +61 -0
  97. package/dist/cjs/exporters/SqliteFileExporter.d.ts +16 -0
  98. package/dist/cjs/exporters/SqliteFileExporter.js +43 -0
  99. package/dist/cjs/features/backup/cloudBackup.d.ts +219 -0
  100. package/dist/cjs/features/backup/cloudBackup.js +209 -0
  101. package/dist/cjs/features/kv/idb.d.ts +79 -0
  102. package/dist/cjs/features/kv/idb.js +32 -0
  103. package/dist/cjs/features/kv/index.d.ts +14 -0
  104. package/dist/cjs/features/kv/index.js +40 -0
  105. package/dist/cjs/features/kv/indexedDbKeyValueStore.d.ts +77 -0
  106. package/dist/cjs/features/kv/indexedDbKeyValueStore.js +116 -0
  107. package/dist/cjs/features/kv/keyValueStore.d.ts +48 -0
  108. package/dist/cjs/features/kv/keyValueStore.js +67 -0
  109. package/dist/cjs/features/kv/sqlKeyValueStore.d.ts +34 -0
  110. package/dist/cjs/features/kv/sqlKeyValueStore.js +81 -0
  111. package/dist/cjs/features/kv/valueCodec.d.ts +35 -0
  112. package/dist/cjs/features/kv/valueCodec.js +426 -0
  113. package/dist/cjs/features/migrations/dataExport.d.ts +77 -0
  114. package/dist/cjs/features/migrations/dataExport.js +194 -0
  115. package/dist/cjs/features/migrations/dataImport.d.ts +54 -0
  116. package/dist/cjs/features/migrations/dataImport.js +300 -0
  117. package/dist/cjs/features/migrations/migration.d.ts +89 -0
  118. package/dist/cjs/features/migrations/migration.js +187 -0
  119. package/dist/cjs/features/migrations/schemaMigrations.d.ts +93 -0
  120. package/dist/cjs/features/migrations/schemaMigrations.js +220 -0
  121. package/dist/cjs/features/sync/conflicts/conflictResolver.d.ts +222 -0
  122. package/dist/cjs/features/sync/conflicts/conflictResolver.js +366 -0
  123. package/dist/cjs/features/sync/conflicts/index.d.ts +9 -0
  124. package/dist/cjs/features/sync/conflicts/index.js +21 -0
  125. package/dist/cjs/features/sync/crossPlatformSync.d.ts +281 -0
  126. package/dist/cjs/features/sync/crossPlatformSync.js +551 -0
  127. package/dist/cjs/features/sync/devices/deviceManager.d.ts +243 -0
  128. package/dist/cjs/features/sync/devices/deviceManager.js +450 -0
  129. package/dist/cjs/features/sync/devices/index.d.ts +10 -0
  130. package/dist/cjs/features/sync/devices/index.js +21 -0
  131. package/dist/cjs/features/sync/index.d.ts +37 -0
  132. package/dist/cjs/features/sync/index.js +111 -0
  133. package/dist/cjs/features/sync/protocol/index.d.ts +11 -0
  134. package/dist/cjs/features/sync/protocol/index.js +23 -0
  135. package/dist/cjs/features/sync/protocol/messages.d.ts +348 -0
  136. package/dist/cjs/features/sync/protocol/messages.js +215 -0
  137. package/dist/cjs/features/sync/protocol/vectorClock.d.ts +164 -0
  138. package/dist/cjs/features/sync/protocol/vectorClock.js +256 -0
  139. package/dist/cjs/features/sync/syncManager.d.ts +348 -0
  140. package/dist/cjs/features/sync/syncManager.js +455 -0
  141. package/dist/cjs/features/sync/tables/index.d.ts +10 -0
  142. package/dist/cjs/features/sync/tables/index.js +21 -0
  143. package/dist/cjs/features/sync/tables/syncLogManager.d.ts +216 -0
  144. package/dist/cjs/features/sync/tables/syncLogManager.js +423 -0
  145. package/dist/cjs/features/sync/transport/httpTransport.d.ts +123 -0
  146. package/dist/cjs/features/sync/transport/httpTransport.js +346 -0
  147. package/dist/cjs/features/sync/transport/index.d.ts +12 -0
  148. package/dist/cjs/features/sync/transport/index.js +25 -0
  149. package/dist/cjs/features/sync/transport/transport.d.ts +259 -0
  150. package/dist/cjs/features/sync/transport/transport.js +163 -0
  151. package/dist/cjs/features/sync/transport/websocketTransport.d.ts +126 -0
  152. package/dist/cjs/features/sync/transport/websocketTransport.js +342 -0
  153. package/dist/cjs/fts/PostgresFts.d.ts +29 -0
  154. package/dist/cjs/fts/PostgresFts.js +77 -0
  155. package/dist/cjs/fts/SqliteFts5.d.ts +22 -0
  156. package/dist/cjs/fts/SqliteFts5.js +58 -0
  157. package/dist/cjs/index.d.ts +30 -0
  158. package/dist/cjs/index.js +101 -0
  159. package/dist/cjs/package.json +3 -0
  160. package/dist/cjs/shared/connectionGate.d.ts +94 -0
  161. package/dist/cjs/shared/connectionGate.js +77 -0
  162. package/dist/cjs/shared/errors.d.ts +23 -0
  163. package/dist/cjs/shared/errors.js +45 -0
  164. package/dist/cjs/shared/logger.d.ts +26 -0
  165. package/dist/cjs/shared/logger.js +40 -0
  166. package/dist/cjs/shared/parameterUtils.d.ts +16 -0
  167. package/dist/cjs/shared/parameterUtils.js +59 -0
  168. package/dist/cjs/shared/postgresTarget.d.ts +11 -0
  169. package/dist/cjs/shared/postgresTarget.js +30 -0
  170. package/dist/cjs/shared/segment.d.ts +43 -0
  171. package/dist/cjs/shared/segment.js +63 -0
  172. package/dist/cjs/shared/serializedTransaction.d.ts +14 -0
  173. package/dist/cjs/shared/serializedTransaction.js +74 -0
  174. package/dist/cjs/shared/splitSqlStatements.d.ts +27 -0
  175. package/dist/cjs/shared/splitSqlStatements.js +163 -0
  176. package/dist/cjs/shared/sqlPlaceholders.d.ts +48 -0
  177. package/dist/cjs/shared/sqlPlaceholders.js +263 -0
  178. package/dist/cjs/types/index.d.ts +29 -0
  179. package/dist/cjs/types/index.js +33 -0
  180. package/dist/core/portable.d.ts +23 -0
  181. package/dist/core/portable.d.ts.map +1 -0
  182. package/dist/core/portable.js +23 -0
  183. package/dist/core/portable.js.map +1 -0
  184. package/dist/features/migrations/schemaMigrations.d.ts +93 -0
  185. package/dist/features/migrations/schemaMigrations.d.ts.map +1 -0
  186. package/dist/features/migrations/schemaMigrations.js +216 -0
  187. package/dist/features/migrations/schemaMigrations.js.map +1 -0
  188. package/dist/index.d.ts +1 -0
  189. package/dist/index.d.ts.map +1 -1
  190. package/dist/index.js +1 -0
  191. package/dist/index.js.map +1 -1
  192. package/package.json +139 -24
@@ -0,0 +1,21 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var devices_exports = {};
16
+ module.exports = __toCommonJS(devices_exports);
17
+ __reExport(devices_exports, require("./deviceManager.js"), module.exports);
18
+ // Annotate the CommonJS export names for ESM import in node:
19
+ 0 && (module.exports = {
20
+ ...require("./deviceManager.js")
21
+ });
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Cross-Platform Sync Module.
3
+ *
4
+ * Provides real-time delta synchronization across Electron, Capacitor,
5
+ * browser, and server platforms with conflict resolution and device management.
6
+ *
7
+ * @packageDocumentation
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { createCrossPlatformSync } from '@framers/sql-storage-adapter/sync';
12
+ *
13
+ * const sync = await createCrossPlatformSync({
14
+ * localAdapter: db,
15
+ * endpoint: 'wss://sync.example.com',
16
+ * tables: {
17
+ * notes: { priority: 'high', conflictStrategy: 'merge' },
18
+ * settings: { priority: 'critical', conflictStrategy: 'local-wins' },
19
+ * },
20
+ * hooks: {
21
+ * onConflictNeedsResolution: (conflict) => showConflictDialog(conflict),
22
+ * },
23
+ * });
24
+ *
25
+ * await sync.sync();
26
+ * ```
27
+ */
28
+ export { CrossPlatformSync, createCrossPlatformSync, type CrossPlatformSyncOptions, type CrossPlatformSyncHooks, type TableSyncConfig, type SyncResult, type SyncStatus as CrossPlatformSyncStatus, } from './crossPlatformSync.js';
29
+ export { VectorClock, createVectorClock, compareClocks, mergeClocks, generateDeviceId, dominates, type VectorClockData, type CausalRelation, type SerializedVectorClock, } from './protocol/vectorClock.js';
30
+ export { type ChangeOperation, type ChangeRecord, type ChangeBatch, type SyncProgress, type SyncStatus as ProtocolSyncStatus, type BaseMessage, type HandshakeRequest, type HandshakeResponse, type DeltaPush, type DeltaPullRequest, type DeltaPullResponse, type AckMessage, type ConflictMessage, type PresenceMessage, type HeartbeatMessage, type HeartbeatAck, type ErrorMessage, type SyncMessage, type SyncMessageType, type DeviceType as ProtocolDeviceType, type DeviceInfo as ProtocolDeviceInfo, type ConflictResolution as ProtocolConflictResolution, generateMessageId, createBaseMessage, createHandshakeRequest, createAck, createHeartbeat, createError, createDeltaPushMessage, createDeltaPullRequest, createPresenceMessage, createHeartbeatMessage, createAckMessage, generateChangeId, createChangeRecord, isHandshakeRequest, isDeltaPush, isConflict, isError, isSyncMessage, } from './protocol/messages.js';
31
+ export { BaseTransport, TransportError, TransportErrorCodes, type SyncTransport, type TransportOptions, type TransportState, type TransportStats, type TransportEventType, type TransportEvents, type TransportEventListener, } from './transport/transport.js';
32
+ export { WebSocketTransport, createWebSocketTransport, type WebSocketTransportOptions, } from './transport/websocketTransport.js';
33
+ export { HttpTransport, createHttpTransport, type HttpTransportOptions, } from './transport/httpTransport.js';
34
+ export { ConflictResolver, createConflictResolver, FieldMergers, type ConflictStrategy, type ResolutionDecision, type SyncConflict, type ConflictResolution, type ConflictUIHooks, type ConflictResolverOptions, type FieldMerger, } from './conflicts/conflictResolver.js';
35
+ export { DeviceManager, createDeviceManager, type DeviceType, type PresenceStatus, type DeviceInfo, type DeviceCapabilities, type DeviceRegistrationOptions, type PresenceEvent, type DeviceManagerEventType, type DeviceManagerEvents, type DeviceManagerOptions, } from './devices/deviceManager.js';
36
+ export { SyncLogManager, type ChangeLogEntry as SyncLogChange, type ConflictEntry as SyncLogConflict, } from './tables/syncLogManager.js';
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,111 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var sync_exports = {};
19
+ __export(sync_exports, {
20
+ BaseTransport: () => import_transport.BaseTransport,
21
+ ConflictResolver: () => import_conflictResolver.ConflictResolver,
22
+ CrossPlatformSync: () => import_crossPlatformSync.CrossPlatformSync,
23
+ DeviceManager: () => import_deviceManager.DeviceManager,
24
+ FieldMergers: () => import_conflictResolver.FieldMergers,
25
+ HttpTransport: () => import_httpTransport.HttpTransport,
26
+ SyncLogManager: () => import_syncLogManager.SyncLogManager,
27
+ TransportError: () => import_transport.TransportError,
28
+ TransportErrorCodes: () => import_transport.TransportErrorCodes,
29
+ VectorClock: () => import_vectorClock.VectorClock,
30
+ WebSocketTransport: () => import_websocketTransport.WebSocketTransport,
31
+ compareClocks: () => import_vectorClock.compareClocks,
32
+ createAck: () => import_messages.createAck,
33
+ createAckMessage: () => import_messages.createAckMessage,
34
+ createBaseMessage: () => import_messages.createBaseMessage,
35
+ createChangeRecord: () => import_messages.createChangeRecord,
36
+ createConflictResolver: () => import_conflictResolver.createConflictResolver,
37
+ createCrossPlatformSync: () => import_crossPlatformSync.createCrossPlatformSync,
38
+ createDeltaPullRequest: () => import_messages.createDeltaPullRequest,
39
+ createDeltaPushMessage: () => import_messages.createDeltaPushMessage,
40
+ createDeviceManager: () => import_deviceManager.createDeviceManager,
41
+ createError: () => import_messages.createError,
42
+ createHandshakeRequest: () => import_messages.createHandshakeRequest,
43
+ createHeartbeat: () => import_messages.createHeartbeat,
44
+ createHeartbeatMessage: () => import_messages.createHeartbeatMessage,
45
+ createHttpTransport: () => import_httpTransport.createHttpTransport,
46
+ createPresenceMessage: () => import_messages.createPresenceMessage,
47
+ createVectorClock: () => import_vectorClock.createVectorClock,
48
+ createWebSocketTransport: () => import_websocketTransport.createWebSocketTransport,
49
+ dominates: () => import_vectorClock.dominates,
50
+ generateChangeId: () => import_messages.generateChangeId,
51
+ generateDeviceId: () => import_vectorClock.generateDeviceId,
52
+ generateMessageId: () => import_messages.generateMessageId,
53
+ isConflict: () => import_messages.isConflict,
54
+ isDeltaPush: () => import_messages.isDeltaPush,
55
+ isError: () => import_messages.isError,
56
+ isHandshakeRequest: () => import_messages.isHandshakeRequest,
57
+ isSyncMessage: () => import_messages.isSyncMessage,
58
+ mergeClocks: () => import_vectorClock.mergeClocks
59
+ });
60
+ module.exports = __toCommonJS(sync_exports);
61
+ var import_crossPlatformSync = require("./crossPlatformSync.js");
62
+ var import_vectorClock = require("./protocol/vectorClock.js");
63
+ var import_messages = require("./protocol/messages.js");
64
+ var import_transport = require("./transport/transport.js");
65
+ var import_websocketTransport = require("./transport/websocketTransport.js");
66
+ var import_httpTransport = require("./transport/httpTransport.js");
67
+ var import_conflictResolver = require("./conflicts/conflictResolver.js");
68
+ var import_deviceManager = require("./devices/deviceManager.js");
69
+ var import_syncLogManager = require("./tables/syncLogManager.js");
70
+ // Annotate the CommonJS export names for ESM import in node:
71
+ 0 && (module.exports = {
72
+ BaseTransport,
73
+ ConflictResolver,
74
+ CrossPlatformSync,
75
+ DeviceManager,
76
+ FieldMergers,
77
+ HttpTransport,
78
+ SyncLogManager,
79
+ TransportError,
80
+ TransportErrorCodes,
81
+ VectorClock,
82
+ WebSocketTransport,
83
+ compareClocks,
84
+ createAck,
85
+ createAckMessage,
86
+ createBaseMessage,
87
+ createChangeRecord,
88
+ createConflictResolver,
89
+ createCrossPlatformSync,
90
+ createDeltaPullRequest,
91
+ createDeltaPushMessage,
92
+ createDeviceManager,
93
+ createError,
94
+ createHandshakeRequest,
95
+ createHeartbeat,
96
+ createHeartbeatMessage,
97
+ createHttpTransport,
98
+ createPresenceMessage,
99
+ createVectorClock,
100
+ createWebSocketTransport,
101
+ dominates,
102
+ generateChangeId,
103
+ generateDeviceId,
104
+ generateMessageId,
105
+ isConflict,
106
+ isDeltaPush,
107
+ isError,
108
+ isHandshakeRequest,
109
+ isSyncMessage,
110
+ mergeClocks
111
+ });
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Sync Protocol Module.
3
+ *
4
+ * Provides message types, vector clocks, and protocol utilities
5
+ * for cross-platform synchronization.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ export * from './vectorClock.js';
10
+ export * from './messages.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,23 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var protocol_exports = {};
16
+ module.exports = __toCommonJS(protocol_exports);
17
+ __reExport(protocol_exports, require("./vectorClock.js"), module.exports);
18
+ __reExport(protocol_exports, require("./messages.js"), module.exports);
19
+ // Annotate the CommonJS export names for ESM import in node:
20
+ 0 && (module.exports = {
21
+ ...require("./vectorClock.js"),
22
+ ...require("./messages.js")
23
+ });
@@ -0,0 +1,348 @@
1
+ /**
2
+ * Cross-Platform Sync Protocol Messages.
3
+ *
4
+ * Defines the message format for device-to-device synchronization.
5
+ * Messages are exchanged over WebSocket or HTTP transport.
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ import type { VectorClockData } from './vectorClock.js';
10
+ /**
11
+ * Type of device in the sync network.
12
+ */
13
+ export type DeviceType = 'electron' | 'capacitor' | 'browser' | 'server';
14
+ /**
15
+ * Device information.
16
+ */
17
+ export interface DeviceInfo {
18
+ /** Unique device identifier */
19
+ deviceId: string;
20
+ /** Device type */
21
+ deviceType: DeviceType;
22
+ /** Human-readable device name */
23
+ deviceName?: string;
24
+ /** App version running on device */
25
+ appVersion?: string;
26
+ /** Platform info (e.g., "macOS 14.0", "iOS 17.0") */
27
+ platform?: string;
28
+ /** When device was first seen */
29
+ firstSeen?: number;
30
+ /** When device was last active */
31
+ lastSeen?: number;
32
+ }
33
+ /**
34
+ * Type of database operation.
35
+ */
36
+ export type ChangeOperation = 'INSERT' | 'UPDATE' | 'DELETE';
37
+ /**
38
+ * A single database change record.
39
+ */
40
+ export interface ChangeRecord {
41
+ /** Unique change ID (UUID) */
42
+ changeId: string;
43
+ /** Table name */
44
+ table: string;
45
+ /** Record primary key */
46
+ recordId: string;
47
+ /** Type of operation */
48
+ operation: ChangeOperation;
49
+ /** Vector clock at time of change */
50
+ vectorClock: VectorClockData;
51
+ /** Device that made the change */
52
+ deviceId: string;
53
+ /** Record data before change (for UPDATE/DELETE) */
54
+ oldData?: Record<string, unknown>;
55
+ /** Record data after change (for INSERT/UPDATE) */
56
+ newData?: Record<string, unknown>;
57
+ /** When change was made (local timestamp) */
58
+ timestamp: number;
59
+ /** Whether change has been synced */
60
+ synced?: boolean;
61
+ }
62
+ /**
63
+ * Batch of changes for efficient transfer.
64
+ */
65
+ export interface ChangeBatch {
66
+ /** Changes in this batch */
67
+ changes: ChangeRecord[];
68
+ /** Batch sequence number */
69
+ sequence: number;
70
+ /** Total batches in this sync */
71
+ totalBatches: number;
72
+ /** Compressed (gzip/brotli) if true */
73
+ compressed?: boolean;
74
+ }
75
+ /**
76
+ * Current sync status.
77
+ */
78
+ export type SyncStatus = 'idle' | 'connecting' | 'handshaking' | 'syncing' | 'resolving' | 'error' | 'disconnected';
79
+ /**
80
+ * Sync progress information.
81
+ */
82
+ export interface SyncProgress {
83
+ status: SyncStatus;
84
+ /** Records pushed to remote */
85
+ pushed: number;
86
+ /** Records pulled from remote */
87
+ pulled: number;
88
+ /** Conflicts detected */
89
+ conflicts: number;
90
+ /** Current table being synced */
91
+ currentTable?: string;
92
+ /** Progress percentage (0-100) */
93
+ percent: number;
94
+ }
95
+ /**
96
+ * Base message structure.
97
+ */
98
+ export interface BaseMessage {
99
+ /** Message type discriminator */
100
+ type: string;
101
+ /** Unique message ID for acknowledgment */
102
+ messageId: string;
103
+ /** Sender device ID */
104
+ deviceId: string;
105
+ /** Message timestamp */
106
+ timestamp: number;
107
+ }
108
+ /**
109
+ * Handshake request - initiates connection.
110
+ */
111
+ export interface HandshakeRequest extends BaseMessage {
112
+ type: 'handshake_request';
113
+ /** Sender device info */
114
+ device: DeviceInfo;
115
+ /** Current vector clock */
116
+ vectorClock: VectorClockData;
117
+ /** Supported protocol version */
118
+ protocolVersion: number;
119
+ /** Capabilities (e.g., compression, encryption) */
120
+ capabilities: string[];
121
+ /** Tables to sync */
122
+ tables: string[];
123
+ }
124
+ /**
125
+ * Handshake response - confirms connection.
126
+ */
127
+ export interface HandshakeResponse extends BaseMessage {
128
+ type: 'handshake_response';
129
+ /** Whether handshake accepted */
130
+ accepted: boolean;
131
+ /** Rejection reason if not accepted */
132
+ rejectionReason?: string;
133
+ /** Server device info */
134
+ device: DeviceInfo;
135
+ /** Server's vector clock */
136
+ vectorClock: VectorClockData;
137
+ /** Negotiated protocol version */
138
+ protocolVersion: number;
139
+ /** Negotiated capabilities */
140
+ capabilities: string[];
141
+ /** Session ID for this connection */
142
+ sessionId: string;
143
+ }
144
+ /**
145
+ * Delta push - send local changes to remote.
146
+ */
147
+ export interface DeltaPush extends BaseMessage {
148
+ type: 'delta_push';
149
+ /** Batch of changes */
150
+ batch: ChangeBatch;
151
+ /** Current vector clock after changes */
152
+ vectorClock: VectorClockData;
153
+ }
154
+ /**
155
+ * Delta pull request - request changes since clock.
156
+ */
157
+ export interface DeltaPullRequest extends BaseMessage {
158
+ type: 'delta_pull_request';
159
+ /** Vector clock to sync from */
160
+ sinceVectorClock: VectorClockData;
161
+ /** Tables to pull */
162
+ tables?: string[];
163
+ /** Maximum records to return */
164
+ limit?: number;
165
+ }
166
+ /**
167
+ * Delta pull response - changes from remote.
168
+ */
169
+ export interface DeltaPullResponse extends BaseMessage {
170
+ type: 'delta_pull_response';
171
+ /** Batch of changes */
172
+ batch: ChangeBatch;
173
+ /** Server's current vector clock */
174
+ vectorClock: VectorClockData;
175
+ /** Whether more changes available */
176
+ hasMore: boolean;
177
+ }
178
+ /**
179
+ * Acknowledgment message.
180
+ */
181
+ export interface AckMessage extends BaseMessage {
182
+ type: 'ack';
183
+ /** ID of message being acknowledged */
184
+ ackMessageId: string;
185
+ /** Success status */
186
+ success: boolean;
187
+ /** Error message if failed */
188
+ error?: string;
189
+ }
190
+ /**
191
+ * Conflict notification.
192
+ */
193
+ export interface ConflictMessage extends BaseMessage {
194
+ type: 'conflict';
195
+ /** Table with conflict */
196
+ table: string;
197
+ /** Record ID with conflict */
198
+ recordId: string;
199
+ /** Local version */
200
+ localData: Record<string, unknown>;
201
+ /** Remote version */
202
+ remoteData: Record<string, unknown>;
203
+ /** Local vector clock */
204
+ localClock: VectorClockData;
205
+ /** Remote vector clock */
206
+ remoteClock: VectorClockData;
207
+ /** Suggested resolution */
208
+ suggestedResolution?: 'use_local' | 'use_remote' | 'merge';
209
+ }
210
+ /**
211
+ * Conflict resolution.
212
+ */
213
+ export interface ConflictResolution extends BaseMessage {
214
+ type: 'conflict_resolution';
215
+ /** Original conflict message ID */
216
+ conflictMessageId: string;
217
+ /** Resolution strategy */
218
+ resolution: 'use_local' | 'use_remote' | 'use_merged' | 'keep_both' | 'defer';
219
+ /** Merged data if using 'use_merged' */
220
+ mergedData?: Record<string, unknown>;
221
+ }
222
+ /**
223
+ * Device presence update.
224
+ */
225
+ export interface PresenceMessage extends BaseMessage {
226
+ type: 'presence';
227
+ /** Presence status */
228
+ status: 'online' | 'offline' | 'away' | 'syncing';
229
+ /** Device info */
230
+ device: DeviceInfo;
231
+ /** Current vector clock */
232
+ vectorClock?: VectorClockData;
233
+ }
234
+ /**
235
+ * Heartbeat for connection keep-alive.
236
+ */
237
+ export interface HeartbeatMessage extends BaseMessage {
238
+ type: 'heartbeat';
239
+ /** Sequence number */
240
+ sequence: number;
241
+ }
242
+ /**
243
+ * Heartbeat acknowledgment.
244
+ */
245
+ export interface HeartbeatAck extends BaseMessage {
246
+ type: 'heartbeat_ack';
247
+ /** Echo sequence number */
248
+ sequence: number;
249
+ /** Round-trip time if measurable */
250
+ rtt?: number;
251
+ }
252
+ /**
253
+ * Error message.
254
+ */
255
+ export interface ErrorMessage extends BaseMessage {
256
+ type: 'error';
257
+ /** Error code */
258
+ code: string;
259
+ /** Human-readable message */
260
+ message: string;
261
+ /** Whether error is recoverable */
262
+ recoverable: boolean;
263
+ /** Related message ID if applicable */
264
+ relatedMessageId?: string;
265
+ }
266
+ /**
267
+ * All possible sync messages.
268
+ */
269
+ export type SyncMessage = HandshakeRequest | HandshakeResponse | DeltaPush | DeltaPullRequest | DeltaPullResponse | AckMessage | ConflictMessage | ConflictResolution | PresenceMessage | HeartbeatMessage | HeartbeatAck | ErrorMessage;
270
+ /**
271
+ * Message type discriminator values.
272
+ */
273
+ export type SyncMessageType = SyncMessage['type'];
274
+ /**
275
+ * Generate a unique message ID.
276
+ */
277
+ export declare function generateMessageId(): string;
278
+ /**
279
+ * Create a base message with common fields.
280
+ */
281
+ export declare function createBaseMessage(type: string, deviceId: string): Omit<BaseMessage, 'type'> & {
282
+ type: string;
283
+ };
284
+ /**
285
+ * Create a handshake request message.
286
+ */
287
+ export declare function createHandshakeRequest(device: DeviceInfo, vectorClock: VectorClockData, tables: string[], capabilities?: string[]): HandshakeRequest;
288
+ /**
289
+ * Create an acknowledgment message.
290
+ */
291
+ export declare function createAck(deviceId: string, ackMessageId: string, success: boolean, error?: string): AckMessage;
292
+ /**
293
+ * Create a heartbeat message.
294
+ */
295
+ export declare function createHeartbeat(deviceId: string, sequence: number): HeartbeatMessage;
296
+ /**
297
+ * Create an error message.
298
+ */
299
+ export declare function createError(deviceId: string, code: string, message: string, recoverable?: boolean, relatedMessageId?: string): ErrorMessage;
300
+ /**
301
+ * Check if message is a handshake request.
302
+ */
303
+ export declare function isHandshakeRequest(msg: SyncMessage): msg is HandshakeRequest;
304
+ /**
305
+ * Check if message is a delta push.
306
+ */
307
+ export declare function isDeltaPush(msg: SyncMessage): msg is DeltaPush;
308
+ /**
309
+ * Check if message is a conflict.
310
+ */
311
+ export declare function isConflict(msg: SyncMessage): msg is ConflictMessage;
312
+ /**
313
+ * Check if message is an error.
314
+ */
315
+ export declare function isError(msg: SyncMessage): msg is ErrorMessage;
316
+ /**
317
+ * Type guard to check if an unknown value is a valid SyncMessage.
318
+ */
319
+ export declare function isSyncMessage(value: unknown): value is SyncMessage;
320
+ /**
321
+ * Create a delta push message.
322
+ */
323
+ export declare function createDeltaPushMessage(deviceId: string, changes: ChangeRecord[], vectorClock: VectorClockData, sequence?: number, totalBatches?: number): DeltaPush;
324
+ /**
325
+ * Create a delta pull request message.
326
+ */
327
+ export declare function createDeltaPullRequest(deviceId: string, sinceVectorClock: VectorClockData, tables?: string[], limit?: number): DeltaPullRequest;
328
+ /**
329
+ * Create a presence message.
330
+ */
331
+ export declare function createPresenceMessage(device: DeviceInfo, status: 'online' | 'offline' | 'away' | 'syncing', vectorClock?: VectorClockData): PresenceMessage;
332
+ /**
333
+ * Create a heartbeat message.
334
+ */
335
+ export declare function createHeartbeatMessage(deviceId: string, sequence?: number): HeartbeatMessage;
336
+ /**
337
+ * Create an ack message.
338
+ */
339
+ export declare function createAckMessage(deviceId: string, ackMessageId: string, success?: boolean, error?: string): AckMessage;
340
+ /**
341
+ * Generate a unique change ID.
342
+ */
343
+ export declare function generateChangeId(): string;
344
+ /**
345
+ * Create a change record.
346
+ */
347
+ export declare function createChangeRecord(table: string, recordId: string, operation: ChangeOperation, deviceId: string, vectorClock: VectorClockData, newData?: Record<string, unknown>, oldData?: Record<string, unknown>): ChangeRecord;
348
+ //# sourceMappingURL=messages.d.ts.map