@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 @@
1
+ {"version":3,"file":"synced-offline-edge.js","sourceRoot":"","sources":["../../src/client/synced-offline-edge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ /**
2
+ * NatsTransport - NATS connection wrapper for sync operations
3
+ *
4
+ * Handles:
5
+ * - Connection lifecycle (connect, disconnect, reconnect)
6
+ * - Publishing sync deltas to center
7
+ * - Subscribing to sync updates from center
8
+ * - Request-reply for state vector exchange
9
+ */
10
+ /**
11
+ * Connection state for the transport
12
+ */
13
+ export type TransportState = 'disconnected' | 'connecting' | 'connected' | 'reconnecting';
14
+ /**
15
+ * Configuration for NatsTransport
16
+ */
17
+ export interface NatsTransportConfig {
18
+ /** NATS server URL (e.g., 'nats://localhost:4222') */
19
+ readonly serverUrl: string;
20
+ /** API key for authentication */
21
+ readonly apiKey: string;
22
+ /** Application ID (extracted from API key or provided) */
23
+ readonly appId?: string;
24
+ /** Edge ID (extracted from API key or provided) */
25
+ readonly edgeId?: string;
26
+ /** Reconnect wait time in ms (default: 2000) */
27
+ readonly reconnectWait?: number;
28
+ /** Max reconnect attempts (-1 for unlimited, default: -1) */
29
+ readonly maxReconnects?: number;
30
+ /** Request timeout in ms (default: 10000) */
31
+ readonly requestTimeout?: number;
32
+ }
33
+ /**
34
+ * Sync batch to send to center
35
+ */
36
+ export interface SyncBatch {
37
+ readonly edgeId: string;
38
+ readonly changes: SyncChange[];
39
+ }
40
+ /**
41
+ * Individual sync change
42
+ */
43
+ export interface SyncChange {
44
+ readonly collection: string;
45
+ readonly docId: string;
46
+ readonly data: Uint8Array;
47
+ readonly timestamp: number;
48
+ }
49
+ /**
50
+ * Sync update received from center
51
+ */
52
+ export interface SyncUpdate {
53
+ readonly collection: string;
54
+ readonly docId: string;
55
+ readonly data: Uint8Array;
56
+ readonly timestamp?: number;
57
+ }
58
+ /**
59
+ * Sync response from center (for request-reply)
60
+ */
61
+ export interface SyncResponse {
62
+ readonly success: boolean;
63
+ readonly docId?: string;
64
+ readonly collection?: string;
65
+ readonly error?: {
66
+ readonly code: string;
67
+ readonly field?: string;
68
+ readonly message: string;
69
+ };
70
+ }
71
+ /**
72
+ * State vector request/response
73
+ */
74
+ export interface StateVectorExchange {
75
+ readonly collection: string;
76
+ readonly docId: string;
77
+ readonly vector?: Uint8Array;
78
+ readonly delta?: Uint8Array;
79
+ readonly error?: string;
80
+ }
81
+ /**
82
+ * Callback types
83
+ */
84
+ export type StateChangeCallback = (state: TransportState) => void;
85
+ export type UpdateCallback = (update: SyncUpdate) => void;
86
+ export type ErrorCallback = (error: Error) => void;
87
+ /**
88
+ * NatsTransport handles NATS connection and messaging for sync operations
89
+ */
90
+ export declare class NatsTransport {
91
+ private readonly config;
92
+ private nc;
93
+ private updateSub;
94
+ private state;
95
+ private stateCallbacks;
96
+ private updateCallbacks;
97
+ private errorCallbacks;
98
+ constructor(config: NatsTransportConfig);
99
+ /**
100
+ * Get current transport state
101
+ */
102
+ getState(): TransportState;
103
+ /**
104
+ * Get app ID
105
+ */
106
+ getAppId(): string;
107
+ /**
108
+ * Get edge ID
109
+ */
110
+ getEdgeId(): string;
111
+ /**
112
+ * Subscribe to state changes
113
+ */
114
+ onStateChange(callback: StateChangeCallback): () => void;
115
+ /**
116
+ * Subscribe to sync updates from center
117
+ */
118
+ onUpdate(callback: UpdateCallback): () => void;
119
+ /**
120
+ * Subscribe to transport errors
121
+ */
122
+ onError(callback: ErrorCallback): () => void;
123
+ /**
124
+ * Connect to NATS server
125
+ */
126
+ connect(): Promise<void>;
127
+ /**
128
+ * Disconnect from NATS server
129
+ */
130
+ disconnect(): Promise<void>;
131
+ /**
132
+ * Send a batch of sync changes to center
133
+ * Returns responses for each change (success or rejection)
134
+ */
135
+ sendBatch(collection: string, changes: SyncChange[]): Promise<SyncResponse[]>;
136
+ /**
137
+ * Publish changes without waiting for response (fire-and-forget)
138
+ * Use this for lower latency when rejection handling is done separately
139
+ */
140
+ publish(collection: string, changes: SyncChange[]): void;
141
+ /**
142
+ * Exchange state vectors with center for a document
143
+ */
144
+ exchangeStateVector(collection: string, docId: string, localVector?: Uint8Array): Promise<StateVectorExchange>;
145
+ /**
146
+ * Request a snapshot for a document
147
+ */
148
+ requestSnapshot(collection: string, docId: string): Promise<Uint8Array | null>;
149
+ /**
150
+ * Force push local state to server, overriding server state entirely.
151
+ * This sends the full document state with a force flag.
152
+ */
153
+ forcePush(collection: string, docId: string, stateVector: Uint8Array, changes: Uint8Array[]): Promise<ForcePushResponse>;
154
+ private setState;
155
+ private emitError;
156
+ private emitUpdate;
157
+ private setupConnectionHandlers;
158
+ private subscribeToUpdates;
159
+ }
160
+ /**
161
+ * Force push request structure
162
+ */
163
+ export interface ForcePushRequest {
164
+ readonly collection: string;
165
+ readonly docId: string;
166
+ readonly stateVector: Uint8Array;
167
+ readonly changes: Uint8Array[];
168
+ readonly force: true;
169
+ }
170
+ /**
171
+ * Force push response structure
172
+ */
173
+ export interface ForcePushResponse {
174
+ readonly success: boolean;
175
+ readonly error?: {
176
+ readonly code: string;
177
+ readonly message: string;
178
+ };
179
+ }
180
+ /**
181
+ * Transport interface for dependency injection (allows mocking in tests)
182
+ */
183
+ export interface Transport {
184
+ getState(): TransportState;
185
+ getAppId(): string;
186
+ getEdgeId(): string;
187
+ onStateChange(callback: StateChangeCallback): () => void;
188
+ onUpdate(callback: UpdateCallback): () => void;
189
+ onError(callback: ErrorCallback): () => void;
190
+ connect(): Promise<void>;
191
+ disconnect(): Promise<void>;
192
+ sendBatch(collection: string, changes: SyncChange[]): Promise<SyncResponse[]>;
193
+ publish(collection: string, changes: SyncChange[]): void;
194
+ exchangeStateVector(collection: string, docId: string, localVector?: Uint8Array): Promise<StateVectorExchange>;
195
+ requestSnapshot(collection: string, docId: string): Promise<Uint8Array | null>;
196
+ forcePush(collection: string, docId: string, stateVector: Uint8Array, changes: Uint8Array[]): Promise<ForcePushResponse>;
197
+ }
198
+ /**
199
+ * Create a NatsTransport instance
200
+ */
201
+ export declare function createNatsTransport(config: NatsTransportConfig): Transport;
202
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/client/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,409 @@
1
+ /**
2
+ * NatsTransport - NATS connection wrapper for sync operations
3
+ *
4
+ * Handles:
5
+ * - Connection lifecycle (connect, disconnect, reconnect)
6
+ * - Publishing sync deltas to center
7
+ * - Subscribing to sync updates from center
8
+ * - Request-reply for state vector exchange
9
+ */
10
+ import { connect, StringCodec, NatsError, ErrorCode } from 'nats';
11
+ import { encodeBinaryForTransport, decodeBinaryFromTransport } from './binary-encoding.js';
12
+ const sc = StringCodec();
13
+ /**
14
+ * Extract app_id and edge_id from an edge API key.
15
+ * Format: dk_<env>_ed_<appID>_<edgeID>_<random>
16
+ */
17
+ function extractKeyInfo(key) {
18
+ if (!key || !key.includes('_ed_')) {
19
+ return null;
20
+ }
21
+ const parts = key.split('_');
22
+ if (parts.length < 6) {
23
+ return null;
24
+ }
25
+ return {
26
+ appId: parts[3],
27
+ edgeId: parts[4],
28
+ };
29
+ }
30
+ /**
31
+ * NatsTransport handles NATS connection and messaging for sync operations
32
+ */
33
+ export class NatsTransport {
34
+ config;
35
+ nc = null;
36
+ updateSub = null;
37
+ state = 'disconnected';
38
+ stateCallbacks = new Set();
39
+ updateCallbacks = new Set();
40
+ errorCallbacks = new Set();
41
+ constructor(config) {
42
+ // Extract app_id and edge_id from API key if not provided
43
+ const keyInfo = extractKeyInfo(config.apiKey);
44
+ const appId = config.appId ?? keyInfo?.appId;
45
+ const edgeId = config.edgeId ?? keyInfo?.edgeId;
46
+ if (!appId) {
47
+ throw new Error('appId is required (provide it directly or use an edge API key)');
48
+ }
49
+ if (!edgeId) {
50
+ throw new Error('edgeId is required (provide it directly or use an edge API key)');
51
+ }
52
+ this.config = {
53
+ serverUrl: config.serverUrl,
54
+ apiKey: config.apiKey,
55
+ appId,
56
+ edgeId,
57
+ reconnectWait: config.reconnectWait ?? 2000,
58
+ maxReconnects: config.maxReconnects ?? -1,
59
+ requestTimeout: config.requestTimeout ?? 10000,
60
+ };
61
+ }
62
+ /**
63
+ * Get current transport state
64
+ */
65
+ getState() {
66
+ return this.state;
67
+ }
68
+ /**
69
+ * Get app ID
70
+ */
71
+ getAppId() {
72
+ return this.config.appId;
73
+ }
74
+ /**
75
+ * Get edge ID
76
+ */
77
+ getEdgeId() {
78
+ return this.config.edgeId;
79
+ }
80
+ /**
81
+ * Subscribe to state changes
82
+ */
83
+ onStateChange(callback) {
84
+ this.stateCallbacks.add(callback);
85
+ callback(this.state);
86
+ return () => this.stateCallbacks.delete(callback);
87
+ }
88
+ /**
89
+ * Subscribe to sync updates from center
90
+ */
91
+ onUpdate(callback) {
92
+ this.updateCallbacks.add(callback);
93
+ return () => this.updateCallbacks.delete(callback);
94
+ }
95
+ /**
96
+ * Subscribe to transport errors
97
+ */
98
+ onError(callback) {
99
+ this.errorCallbacks.add(callback);
100
+ return () => this.errorCallbacks.delete(callback);
101
+ }
102
+ /**
103
+ * Connect to NATS server
104
+ */
105
+ async connect() {
106
+ if (this.state === 'connected') {
107
+ return;
108
+ }
109
+ this.setState('connecting');
110
+ try {
111
+ this.nc = await connect({
112
+ servers: this.config.serverUrl,
113
+ name: `sync-${this.config.edgeId}`,
114
+ token: this.config.apiKey,
115
+ reconnectTimeWait: this.config.reconnectWait,
116
+ maxReconnectAttempts: this.config.maxReconnects,
117
+ });
118
+ // Handle connection events
119
+ this.setupConnectionHandlers();
120
+ // Subscribe to sync updates
121
+ await this.subscribeToUpdates();
122
+ this.setState('connected');
123
+ }
124
+ catch (err) {
125
+ this.setState('disconnected');
126
+ throw err;
127
+ }
128
+ }
129
+ /**
130
+ * Disconnect from NATS server
131
+ */
132
+ async disconnect() {
133
+ if (!this.nc) {
134
+ this.setState('disconnected');
135
+ return;
136
+ }
137
+ // Unsubscribe from updates
138
+ if (this.updateSub) {
139
+ this.updateSub.unsubscribe();
140
+ this.updateSub = null;
141
+ }
142
+ // Drain and close connection
143
+ try {
144
+ await this.nc.drain();
145
+ }
146
+ catch {
147
+ // Ignore drain errors
148
+ }
149
+ this.nc = null;
150
+ this.setState('disconnected');
151
+ }
152
+ /**
153
+ * Send a batch of sync changes to center
154
+ * Returns responses for each change (success or rejection)
155
+ */
156
+ async sendBatch(collection, changes) {
157
+ if (!this.nc || this.state !== 'connected') {
158
+ throw new Error('Not connected to NATS');
159
+ }
160
+ const batch = {
161
+ edgeId: this.config.edgeId,
162
+ changes,
163
+ };
164
+ const subject = `$SYNC.${this.config.appId}.${collection}.delta`;
165
+ // Encode binary data fields as base64 for transport while keeping metadata as JSON
166
+ const batchWithEncodedData = {
167
+ edgeId: batch.edgeId,
168
+ changes: batch.changes.map(change => ({
169
+ collection: change.collection,
170
+ docId: change.docId,
171
+ data: encodeBinaryForTransport(change.data), // Binary -> base64
172
+ timestamp: change.timestamp,
173
+ })),
174
+ };
175
+ const data = sc.encode(JSON.stringify(batchWithEncodedData));
176
+ try {
177
+ // Use request-reply to get acknowledgment/rejection
178
+ const response = await this.nc.request(subject, data, {
179
+ timeout: this.config.requestTimeout,
180
+ });
181
+ const respData = JSON.parse(sc.decode(response.data));
182
+ // Handle batch response
183
+ if (Array.isArray(respData.results)) {
184
+ return respData.results;
185
+ }
186
+ // Single response for entire batch
187
+ if (respData.error) {
188
+ return changes.map(c => ({
189
+ success: false,
190
+ docId: c.docId,
191
+ collection: c.collection,
192
+ error: respData.error,
193
+ }));
194
+ }
195
+ return changes.map(c => ({
196
+ success: true,
197
+ docId: c.docId,
198
+ collection: c.collection,
199
+ }));
200
+ }
201
+ catch (err) {
202
+ // Check if it's a timeout - changes might still be applied
203
+ if (err instanceof NatsError && err.code === ErrorCode.Timeout) {
204
+ // For timeout, we return unknown status - caller should retry
205
+ throw new Error('Sync request timed out');
206
+ }
207
+ throw err;
208
+ }
209
+ }
210
+ /**
211
+ * Publish changes without waiting for response (fire-and-forget)
212
+ * Use this for lower latency when rejection handling is done separately
213
+ */
214
+ publish(collection, changes) {
215
+ if (!this.nc || this.state !== 'connected') {
216
+ throw new Error('Not connected to NATS');
217
+ }
218
+ const batch = {
219
+ edgeId: this.config.edgeId,
220
+ changes,
221
+ };
222
+ const subject = `$SYNC.${this.config.appId}.${collection}.delta`;
223
+ // Encode binary data fields as base64 for transport while keeping metadata as JSON
224
+ const batchWithEncodedData = {
225
+ edgeId: batch.edgeId,
226
+ changes: batch.changes.map(change => ({
227
+ collection: change.collection,
228
+ docId: change.docId,
229
+ data: encodeBinaryForTransport(change.data), // Binary -> base64
230
+ timestamp: change.timestamp,
231
+ })),
232
+ };
233
+ const data = sc.encode(JSON.stringify(batchWithEncodedData));
234
+ this.nc.publish(subject, data);
235
+ }
236
+ /**
237
+ * Exchange state vectors with center for a document
238
+ */
239
+ async exchangeStateVector(collection, docId, localVector) {
240
+ if (!this.nc || this.state !== 'connected') {
241
+ throw new Error('Not connected to NATS');
242
+ }
243
+ const subject = `$SYNC.${this.config.appId}.${collection}.vector`;
244
+ const request = {
245
+ doc_id: docId,
246
+ collection,
247
+ client_id: this.config.edgeId,
248
+ vector: localVector ? encodeBinaryForTransport(localVector) : undefined,
249
+ };
250
+ const response = await this.nc.request(subject, sc.encode(JSON.stringify(request)), { timeout: this.config.requestTimeout });
251
+ const respData = JSON.parse(sc.decode(response.data));
252
+ return {
253
+ collection: respData.collection ?? collection,
254
+ docId: respData.doc_id ?? docId,
255
+ vector: respData.vector ? decodeBinaryFromTransport(respData.vector) : undefined,
256
+ delta: respData.delta ? decodeBinaryFromTransport(respData.delta) : undefined,
257
+ error: respData.error,
258
+ };
259
+ }
260
+ /**
261
+ * Request a snapshot for a document
262
+ */
263
+ async requestSnapshot(collection, docId) {
264
+ if (!this.nc || this.state !== 'connected') {
265
+ throw new Error('Not connected to NATS');
266
+ }
267
+ const subject = `$SYNC.${this.config.appId}.${collection}.snapshot`;
268
+ const request = { doc_id: docId, collection };
269
+ const response = await this.nc.request(subject, sc.encode(JSON.stringify(request)), { timeout: this.config.requestTimeout });
270
+ const respData = JSON.parse(sc.decode(response.data));
271
+ if (respData.error) {
272
+ return null;
273
+ }
274
+ if (respData.data) {
275
+ // Decode base64 binary data from response
276
+ return decodeBinaryFromTransport(respData.data);
277
+ }
278
+ return null;
279
+ }
280
+ /**
281
+ * Force push local state to server, overriding server state entirely.
282
+ * This sends the full document state with a force flag.
283
+ */
284
+ async forcePush(collection, docId, stateVector, changes) {
285
+ if (!this.nc || this.state !== 'connected') {
286
+ throw new Error('Not connected to NATS');
287
+ }
288
+ const subject = `$SYNC.${this.config.appId}.${collection}.force`;
289
+ const request = {
290
+ doc_id: docId,
291
+ collection,
292
+ edge_id: this.config.edgeId,
293
+ state_vector: encodeBinaryForTransport(stateVector),
294
+ changes: changes.map(c => encodeBinaryForTransport(c)),
295
+ force: true,
296
+ };
297
+ try {
298
+ const response = await this.nc.request(subject, sc.encode(JSON.stringify(request)), { timeout: this.config.requestTimeout });
299
+ const respData = JSON.parse(sc.decode(response.data));
300
+ if (respData.error) {
301
+ return {
302
+ success: false,
303
+ error: {
304
+ code: respData.error.code ?? 'UNKNOWN',
305
+ message: respData.error.message ?? 'Force push failed',
306
+ },
307
+ };
308
+ }
309
+ return { success: true };
310
+ }
311
+ catch (err) {
312
+ return {
313
+ success: false,
314
+ error: {
315
+ code: 'TRANSPORT_ERROR',
316
+ message: err instanceof Error ? err.message : String(err),
317
+ },
318
+ };
319
+ }
320
+ }
321
+ setState(state) {
322
+ if (this.state !== state) {
323
+ this.state = state;
324
+ for (const callback of this.stateCallbacks) {
325
+ callback(state);
326
+ }
327
+ }
328
+ }
329
+ emitError(error) {
330
+ for (const callback of this.errorCallbacks) {
331
+ callback(error);
332
+ }
333
+ }
334
+ emitUpdate(update) {
335
+ for (const callback of this.updateCallbacks) {
336
+ callback(update);
337
+ }
338
+ }
339
+ setupConnectionHandlers() {
340
+ if (!this.nc)
341
+ return;
342
+ // Handle disconnection
343
+ (async () => {
344
+ for await (const status of this.nc.status()) {
345
+ switch (status.type) {
346
+ case 'disconnect':
347
+ this.setState('reconnecting');
348
+ break;
349
+ case 'reconnect':
350
+ this.setState('connected');
351
+ // Re-subscribe to updates after reconnect
352
+ this.subscribeToUpdates().catch(err => this.emitError(err));
353
+ break;
354
+ case 'error':
355
+ this.emitError(status.data instanceof Error ? status.data : new Error(String(status.data)));
356
+ break;
357
+ }
358
+ }
359
+ })().catch(() => {
360
+ // Status iterator ended - connection closed
361
+ });
362
+ }
363
+ async subscribeToUpdates() {
364
+ if (!this.nc)
365
+ return;
366
+ // Unsubscribe from previous subscription if any
367
+ if (this.updateSub) {
368
+ this.updateSub.unsubscribe();
369
+ }
370
+ // Subscribe to sync updates: $SYNC.{appId}.*.updates
371
+ const subject = `$SYNC.${this.config.appId}.*.updates`;
372
+ this.updateSub = this.nc.subscribe(subject, {
373
+ callback: (err, msg) => {
374
+ if (err) {
375
+ this.emitError(err);
376
+ return;
377
+ }
378
+ try {
379
+ const data = JSON.parse(sc.decode(msg.data));
380
+ // Extract collection from subject: $SYNC.{appId}.{collection}.updates
381
+ const parts = msg.subject.split('.');
382
+ const collection = parts.length >= 3 ? parts[2] : '';
383
+ const update = {
384
+ collection: data.collection ?? collection,
385
+ docId: data.docId ?? data.doc_id,
386
+ // Decode binary data from base64 if it's a string, otherwise handle array format
387
+ data: data.data
388
+ ? (typeof data.data === 'string'
389
+ ? decodeBinaryFromTransport(data.data)
390
+ : new Uint8Array(data.data))
391
+ : new Uint8Array(0),
392
+ timestamp: data.timestamp,
393
+ };
394
+ this.emitUpdate(update);
395
+ }
396
+ catch (parseErr) {
397
+ this.emitError(parseErr instanceof Error ? parseErr : new Error(String(parseErr)));
398
+ }
399
+ },
400
+ });
401
+ }
402
+ }
403
+ /**
404
+ * Create a NatsTransport instance
405
+ */
406
+ export function createNatsTransport(config) {
407
+ return new NatsTransport(config);
408
+ }
409
+ //# sourceMappingURL=transport.js.map