@korajs/sync 1.0.0-beta.10 → 1.0.0-beta.12

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.
@@ -1,4 +1,4 @@
1
- import { c as SyncTransport, T as TransportOptions, a as SyncMessage, d as TransportMessageHandler, e as TransportCloseHandler, f as TransportErrorHandler, Q as QueueStorage } from './transport-B2GQerqJ.cjs';
1
+ import { c as SyncTransport, T as TransportOptions, a as SyncMessage, d as TransportMessageHandler, e as TransportCloseHandler, f as TransportErrorHandler, Q as QueueStorage } from './transport-CJvRO5ix.cjs';
2
2
  import { Operation } from '@korajs/core';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { c as SyncTransport, T as TransportOptions, a as SyncMessage, d as TransportMessageHandler, e as TransportCloseHandler, f as TransportErrorHandler, Q as QueueStorage } from './transport-B2GQerqJ.js';
1
+ import { c as SyncTransport, T as TransportOptions, a as SyncMessage, d as TransportMessageHandler, e as TransportCloseHandler, f as TransportErrorHandler, Q as QueueStorage } from './transport-CJvRO5ix.js';
2
2
  import { Operation } from '@korajs/core';
3
3
 
4
4
  /**
@@ -93,14 +93,27 @@ type SyncState = (typeof SYNC_STATES)[number];
93
93
  /**
94
94
  * Developer-facing sync status. Simplified view of the internal state.
95
95
  */
96
- declare const SYNC_STATUSES: readonly ["connected", "reconnecting", "syncing", "synced", "offline", "clock-error", "error", "schema-mismatch"];
96
+ declare const SYNC_STATUSES: readonly ["connected", "reconnecting", "syncing", "synced", "offline", "clock-error", "error", "schema-mismatch", "auth-required"];
97
97
  type SyncStatus = (typeof SYNC_STATUSES)[number];
98
+ type SyncPhase = 'suspended' | 'offline' | 'connecting' | 'authenticating' | 'handshaking' | 'uploading' | 'receiving' | 'applying' | 'streaming' | 'blocked';
99
+ interface ActiveApplyFailure {
100
+ operationId: string;
101
+ collection: string;
102
+ recordId: string;
103
+ code: string;
104
+ message: string;
105
+ retriable: boolean;
106
+ firstSeenAt: number;
107
+ retryCount: number;
108
+ }
98
109
  /**
99
110
  * Sync status information exposed to developers.
100
111
  */
101
112
  interface SyncStatusInfo {
102
113
  /** Current developer-facing status */
103
114
  status: SyncStatus;
115
+ phase?: SyncPhase;
116
+ reason?: string;
104
117
  /** True when the engine is actively trying to re-establish a transport session. */
105
118
  reconnecting: boolean;
106
119
  /** Number of operations waiting to be sent */
@@ -115,7 +128,47 @@ interface SyncStatusInfo {
115
128
  conflicts: number;
116
129
  /** serverTime - localTime in ms measured at the last handshake, or null before first connect. Negative = this device's clock is fast. */
117
130
  clockSkewMs: number | null;
131
+ inFlightUploadOperations?: number;
132
+ hasInFlightDeliveryBatch?: boolean;
133
+ activeViewId?: string;
134
+ activeViewComplete?: boolean;
135
+ initialSync?: {
136
+ complete: boolean;
137
+ receivedBatches: number;
138
+ totalBatches: number | null;
139
+ progress: number | null;
140
+ };
141
+ deliveryWatermark?: number;
142
+ serverFrontier?: number | null;
143
+ blockedFailure?: ActiveApplyFailure | null;
118
144
  }
145
+ interface SyncSettlementOptions {
146
+ upload?: boolean;
147
+ download?: 'active-view' | false;
148
+ timeoutMs?: number;
149
+ signal?: AbortSignal;
150
+ }
151
+ type SyncSettlementResult = {
152
+ outcome: 'settled';
153
+ status: SyncStatusInfo;
154
+ } | {
155
+ outcome: 'offline';
156
+ status: SyncStatusInfo;
157
+ } | {
158
+ outcome: 'suspended';
159
+ reason: string;
160
+ status: SyncStatusInfo;
161
+ } | {
162
+ outcome: 'blocked';
163
+ failure: ActiveApplyFailure;
164
+ status: SyncStatusInfo;
165
+ } | {
166
+ outcome: 'timeout';
167
+ status: SyncStatusInfo;
168
+ } | {
169
+ outcome: 'aborted';
170
+ status: SyncStatusInfo;
171
+ };
119
172
  /**
120
173
  * Per-collection sync scope map. Maps collection names to field-value filters.
121
174
  * Empty filter `{}` means no restriction (all records visible).
@@ -134,6 +187,16 @@ interface SyncConfig {
134
187
  auth?: () => Promise<{
135
188
  token: string;
136
189
  }>;
190
+ /** Auth readiness gate. A suspended result prevents transport creation and retries. */
191
+ authState?: () => Promise<{
192
+ state: 'loading' | 'signed-out' | 'anonymous' | 'authenticated';
193
+ mayConnectAnonymously?: boolean;
194
+ }>;
195
+ querySubsets?: {
196
+ mode?: 'reactive' | 'static' | 'disabled';
197
+ };
198
+ /** Client-local behavior for records leaving the accepted downlink scope. Defaults to `retain`. */
199
+ scopeExit?: 'retain' | 'retract';
137
200
  /** Sync scopes per collection. Limits which records sync to this client. */
138
201
  scopes?: Record<string, (ctx: SyncScopeContext) => Record<string, unknown>>;
139
202
  /**
@@ -150,6 +213,10 @@ interface SyncConfig {
150
213
  * Defaults to 30000ms. Set to 0 to disable the watchdog.
151
214
  */
152
215
  outboundAckTimeoutMs?: number;
216
+ /** Initial delay before resending a transiently rejected outbound operation. Defaults to 250ms. */
217
+ outboundRetryBaseDelayMs?: number;
218
+ /** Maximum transient-operation retry delay. Defaults to 30000ms. */
219
+ outboundRetryMaxDelayMs?: number;
153
220
  /** Initial reconnection delay in ms. Defaults to 1000. */
154
221
  reconnectInterval?: number;
155
222
  /** Maximum reconnection delay in ms. Defaults to 30000. */
@@ -307,10 +374,10 @@ interface SyncQuerySubset {
307
374
  * for its collection. Collections without query subsets pass through.
308
375
  */
309
376
  declare function operationMatchesQuerySubsets(op: Operation, subsets: SyncQuerySubset[] | undefined, fullRecord?: Record<string, unknown> | null): boolean;
310
- /**
311
- * Deduplicate query subsets by collection + where JSON key.
312
- */
377
+ /** Canonicalize equality subsets and remove subsets already covered by a broader one. */
313
378
  declare function dedupeQuerySubsets(subsets: SyncQuerySubset[]): SyncQuerySubset[];
379
+ /** True when every record selected by `narrow` is also selected by `broad`. */
380
+ declare function querySubsetContains(broad: SyncQuerySubset[], narrow: SyncQuerySubset[]): boolean;
314
381
 
315
382
  type WireFormat = 'json' | 'protobuf';
316
383
  /**
@@ -362,6 +429,8 @@ interface HandshakeMessage {
362
429
  * cursor for the server->client direction. Optional, so old servers ignore it.
363
430
  */
364
431
  lastDeliverySequence?: number;
432
+ /** Opt in to client-local removal when records leave the accepted downlink view. */
433
+ scopeExitPolicy?: 'retain' | 'retract';
365
434
  }
366
435
  /**
367
436
  * Server response to a handshake.
@@ -381,6 +450,10 @@ interface HandshakeResponseMessage {
381
450
  selectedWireFormat?: WireFormat;
382
451
  /** The server-accepted per-collection sync scope. Confirms what data will be synced. */
383
452
  acceptedScope?: Record<string, Record<string, unknown>>;
453
+ /** Server-authoritative scope for records delivered to this client. */
454
+ acceptedDownlinkScopes?: Record<string, Record<string, unknown>>;
455
+ /** Server-authoritative scope for operations uploaded by this client. */
456
+ acceptedUplinkScopes?: Record<string, Record<string, unknown>>;
384
457
  /** Server wall-clock time (ms since epoch) at response creation. Lets clients measure their own clock skew. */
385
458
  serverTime?: number;
386
459
  /**
@@ -404,6 +477,8 @@ interface OperationBatchMessage {
404
477
  type: 'operation-batch';
405
478
  messageId: string;
406
479
  operations: SerializedOperation[];
480
+ /** Client-local authorization removals; these are never domain delete operations. */
481
+ retractions?: ScopeRetraction[];
407
482
  /** True if this is the last batch in the delta exchange phase */
408
483
  isFinal: boolean;
409
484
  /** Index of this batch (0-based) for ordering */
@@ -427,6 +502,10 @@ interface OperationBatchMessage {
427
502
  baseDeliverySequence?: number;
428
503
  maxDeliverySequence?: number;
429
504
  }
505
+ interface ScopeRetraction {
506
+ collection: string;
507
+ recordId: string;
508
+ }
430
509
  /**
431
510
  * Acknowledgment of a received message.
432
511
  */
@@ -663,4 +742,4 @@ interface SyncTransport {
663
742
  isConnected(): boolean;
664
743
  }
665
744
 
666
- export { isYjsDocUpdateMessage as $, type AcknowledgmentMessage as A, type BlobChunkRequestMessage as B, dedupeQuerySubsets as C, type DeltaCursor as D, type EncryptedPayload as E, isAcknowledgmentMessage as F, isAwarenessUpdateMessage as G, type HandshakeMessage as H, InvalidScopeError as I, isBlobChunkPushMessage as J, isBlobChunkRequestMessage as K, isBlobChunkResponseMessage as L, MemoryRejectedOperationStorage as M, isErrorMessage as N, type OperationBatchMessage as O, isHandshakeMessage as P, type QueueStorage as Q, type RejectedOperationStorage as R, type SyncScopeMap as S, type TransportOptions as T, isHandshakeResponseMessage as U, type VersionedKey as V, type WireFormat as W, isOperationBatchMessage as X, type YjsDocUpdateMessage as Y, isOperationRejectedMessage as Z, isSyncMessage as _, type SyncMessage as a, operationMatchesQuerySubsets as a0, type SerializedOperation as b, type SyncTransport as c, type TransportMessageHandler as d, type TransportCloseHandler as e, type TransportErrorHandler as f, type BlobChunkResponseMessage as g, type BlobChunkPushMessage as h, type SyncEncryptionConfig as i, type SyncState as j, type SyncStatusInfo as k, type SyncConfig as l, type SyncStatePersistence as m, type SyncQuerySubset as n, type RejectedOperation as o, type AwarenessStateWire as p, type AwarenessUpdateMessage as q, type ErrorMessage as r, type HandshakeResponseMessage as s, type OperationRejectedMessage as t, SYNC_STATES as u, SYNC_STATUSES as v, ScopeViolationError as w, type SyncEncryptionAlgorithm as x, type SyncScopeContext as y, type SyncStatus as z };
745
+ export { isHandshakeResponseMessage as $, type AcknowledgmentMessage as A, type BlobChunkRequestMessage as B, type SyncScopeContext as C, type DeltaCursor as D, type EncryptedPayload as E, type SyncSettlementOptions as F, type SyncSettlementResult as G, type HandshakeMessage as H, InvalidScopeError as I, type SyncStatus as J, dedupeQuerySubsets as K, isAcknowledgmentMessage as L, MemoryRejectedOperationStorage as M, isAwarenessUpdateMessage as N, type OperationBatchMessage as O, isBlobChunkPushMessage as P, type QueueStorage as Q, type RejectedOperationStorage as R, type SyncScopeMap as S, type TransportOptions as T, isBlobChunkRequestMessage as U, type VersionedKey as V, type WireFormat as W, isBlobChunkResponseMessage as X, type YjsDocUpdateMessage as Y, isErrorMessage as Z, isHandshakeMessage as _, type SyncMessage as a, isOperationBatchMessage as a0, isOperationRejectedMessage as a1, isSyncMessage as a2, isYjsDocUpdateMessage as a3, operationMatchesQuerySubsets as a4, querySubsetContains as a5, type SerializedOperation as b, type SyncTransport as c, type TransportMessageHandler as d, type TransportCloseHandler as e, type TransportErrorHandler as f, type BlobChunkResponseMessage as g, type BlobChunkPushMessage as h, type SyncEncryptionConfig as i, type SyncState as j, type SyncStatusInfo as k, type SyncConfig as l, type SyncStatePersistence as m, type SyncQuerySubset as n, type RejectedOperation as o, type ActiveApplyFailure as p, type AwarenessStateWire as q, type AwarenessUpdateMessage as r, type ErrorMessage as s, type HandshakeResponseMessage as t, type OperationRejectedMessage as u, SYNC_STATES as v, SYNC_STATUSES as w, ScopeViolationError as x, type SyncEncryptionAlgorithm as y, type SyncPhase as z };
@@ -93,14 +93,27 @@ type SyncState = (typeof SYNC_STATES)[number];
93
93
  /**
94
94
  * Developer-facing sync status. Simplified view of the internal state.
95
95
  */
96
- declare const SYNC_STATUSES: readonly ["connected", "reconnecting", "syncing", "synced", "offline", "clock-error", "error", "schema-mismatch"];
96
+ declare const SYNC_STATUSES: readonly ["connected", "reconnecting", "syncing", "synced", "offline", "clock-error", "error", "schema-mismatch", "auth-required"];
97
97
  type SyncStatus = (typeof SYNC_STATUSES)[number];
98
+ type SyncPhase = 'suspended' | 'offline' | 'connecting' | 'authenticating' | 'handshaking' | 'uploading' | 'receiving' | 'applying' | 'streaming' | 'blocked';
99
+ interface ActiveApplyFailure {
100
+ operationId: string;
101
+ collection: string;
102
+ recordId: string;
103
+ code: string;
104
+ message: string;
105
+ retriable: boolean;
106
+ firstSeenAt: number;
107
+ retryCount: number;
108
+ }
98
109
  /**
99
110
  * Sync status information exposed to developers.
100
111
  */
101
112
  interface SyncStatusInfo {
102
113
  /** Current developer-facing status */
103
114
  status: SyncStatus;
115
+ phase?: SyncPhase;
116
+ reason?: string;
104
117
  /** True when the engine is actively trying to re-establish a transport session. */
105
118
  reconnecting: boolean;
106
119
  /** Number of operations waiting to be sent */
@@ -115,7 +128,47 @@ interface SyncStatusInfo {
115
128
  conflicts: number;
116
129
  /** serverTime - localTime in ms measured at the last handshake, or null before first connect. Negative = this device's clock is fast. */
117
130
  clockSkewMs: number | null;
131
+ inFlightUploadOperations?: number;
132
+ hasInFlightDeliveryBatch?: boolean;
133
+ activeViewId?: string;
134
+ activeViewComplete?: boolean;
135
+ initialSync?: {
136
+ complete: boolean;
137
+ receivedBatches: number;
138
+ totalBatches: number | null;
139
+ progress: number | null;
140
+ };
141
+ deliveryWatermark?: number;
142
+ serverFrontier?: number | null;
143
+ blockedFailure?: ActiveApplyFailure | null;
118
144
  }
145
+ interface SyncSettlementOptions {
146
+ upload?: boolean;
147
+ download?: 'active-view' | false;
148
+ timeoutMs?: number;
149
+ signal?: AbortSignal;
150
+ }
151
+ type SyncSettlementResult = {
152
+ outcome: 'settled';
153
+ status: SyncStatusInfo;
154
+ } | {
155
+ outcome: 'offline';
156
+ status: SyncStatusInfo;
157
+ } | {
158
+ outcome: 'suspended';
159
+ reason: string;
160
+ status: SyncStatusInfo;
161
+ } | {
162
+ outcome: 'blocked';
163
+ failure: ActiveApplyFailure;
164
+ status: SyncStatusInfo;
165
+ } | {
166
+ outcome: 'timeout';
167
+ status: SyncStatusInfo;
168
+ } | {
169
+ outcome: 'aborted';
170
+ status: SyncStatusInfo;
171
+ };
119
172
  /**
120
173
  * Per-collection sync scope map. Maps collection names to field-value filters.
121
174
  * Empty filter `{}` means no restriction (all records visible).
@@ -134,6 +187,16 @@ interface SyncConfig {
134
187
  auth?: () => Promise<{
135
188
  token: string;
136
189
  }>;
190
+ /** Auth readiness gate. A suspended result prevents transport creation and retries. */
191
+ authState?: () => Promise<{
192
+ state: 'loading' | 'signed-out' | 'anonymous' | 'authenticated';
193
+ mayConnectAnonymously?: boolean;
194
+ }>;
195
+ querySubsets?: {
196
+ mode?: 'reactive' | 'static' | 'disabled';
197
+ };
198
+ /** Client-local behavior for records leaving the accepted downlink scope. Defaults to `retain`. */
199
+ scopeExit?: 'retain' | 'retract';
137
200
  /** Sync scopes per collection. Limits which records sync to this client. */
138
201
  scopes?: Record<string, (ctx: SyncScopeContext) => Record<string, unknown>>;
139
202
  /**
@@ -150,6 +213,10 @@ interface SyncConfig {
150
213
  * Defaults to 30000ms. Set to 0 to disable the watchdog.
151
214
  */
152
215
  outboundAckTimeoutMs?: number;
216
+ /** Initial delay before resending a transiently rejected outbound operation. Defaults to 250ms. */
217
+ outboundRetryBaseDelayMs?: number;
218
+ /** Maximum transient-operation retry delay. Defaults to 30000ms. */
219
+ outboundRetryMaxDelayMs?: number;
153
220
  /** Initial reconnection delay in ms. Defaults to 1000. */
154
221
  reconnectInterval?: number;
155
222
  /** Maximum reconnection delay in ms. Defaults to 30000. */
@@ -307,10 +374,10 @@ interface SyncQuerySubset {
307
374
  * for its collection. Collections without query subsets pass through.
308
375
  */
309
376
  declare function operationMatchesQuerySubsets(op: Operation, subsets: SyncQuerySubset[] | undefined, fullRecord?: Record<string, unknown> | null): boolean;
310
- /**
311
- * Deduplicate query subsets by collection + where JSON key.
312
- */
377
+ /** Canonicalize equality subsets and remove subsets already covered by a broader one. */
313
378
  declare function dedupeQuerySubsets(subsets: SyncQuerySubset[]): SyncQuerySubset[];
379
+ /** True when every record selected by `narrow` is also selected by `broad`. */
380
+ declare function querySubsetContains(broad: SyncQuerySubset[], narrow: SyncQuerySubset[]): boolean;
314
381
 
315
382
  type WireFormat = 'json' | 'protobuf';
316
383
  /**
@@ -362,6 +429,8 @@ interface HandshakeMessage {
362
429
  * cursor for the server->client direction. Optional, so old servers ignore it.
363
430
  */
364
431
  lastDeliverySequence?: number;
432
+ /** Opt in to client-local removal when records leave the accepted downlink view. */
433
+ scopeExitPolicy?: 'retain' | 'retract';
365
434
  }
366
435
  /**
367
436
  * Server response to a handshake.
@@ -381,6 +450,10 @@ interface HandshakeResponseMessage {
381
450
  selectedWireFormat?: WireFormat;
382
451
  /** The server-accepted per-collection sync scope. Confirms what data will be synced. */
383
452
  acceptedScope?: Record<string, Record<string, unknown>>;
453
+ /** Server-authoritative scope for records delivered to this client. */
454
+ acceptedDownlinkScopes?: Record<string, Record<string, unknown>>;
455
+ /** Server-authoritative scope for operations uploaded by this client. */
456
+ acceptedUplinkScopes?: Record<string, Record<string, unknown>>;
384
457
  /** Server wall-clock time (ms since epoch) at response creation. Lets clients measure their own clock skew. */
385
458
  serverTime?: number;
386
459
  /**
@@ -404,6 +477,8 @@ interface OperationBatchMessage {
404
477
  type: 'operation-batch';
405
478
  messageId: string;
406
479
  operations: SerializedOperation[];
480
+ /** Client-local authorization removals; these are never domain delete operations. */
481
+ retractions?: ScopeRetraction[];
407
482
  /** True if this is the last batch in the delta exchange phase */
408
483
  isFinal: boolean;
409
484
  /** Index of this batch (0-based) for ordering */
@@ -427,6 +502,10 @@ interface OperationBatchMessage {
427
502
  baseDeliverySequence?: number;
428
503
  maxDeliverySequence?: number;
429
504
  }
505
+ interface ScopeRetraction {
506
+ collection: string;
507
+ recordId: string;
508
+ }
430
509
  /**
431
510
  * Acknowledgment of a received message.
432
511
  */
@@ -663,4 +742,4 @@ interface SyncTransport {
663
742
  isConnected(): boolean;
664
743
  }
665
744
 
666
- export { isYjsDocUpdateMessage as $, type AcknowledgmentMessage as A, type BlobChunkRequestMessage as B, dedupeQuerySubsets as C, type DeltaCursor as D, type EncryptedPayload as E, isAcknowledgmentMessage as F, isAwarenessUpdateMessage as G, type HandshakeMessage as H, InvalidScopeError as I, isBlobChunkPushMessage as J, isBlobChunkRequestMessage as K, isBlobChunkResponseMessage as L, MemoryRejectedOperationStorage as M, isErrorMessage as N, type OperationBatchMessage as O, isHandshakeMessage as P, type QueueStorage as Q, type RejectedOperationStorage as R, type SyncScopeMap as S, type TransportOptions as T, isHandshakeResponseMessage as U, type VersionedKey as V, type WireFormat as W, isOperationBatchMessage as X, type YjsDocUpdateMessage as Y, isOperationRejectedMessage as Z, isSyncMessage as _, type SyncMessage as a, operationMatchesQuerySubsets as a0, type SerializedOperation as b, type SyncTransport as c, type TransportMessageHandler as d, type TransportCloseHandler as e, type TransportErrorHandler as f, type BlobChunkResponseMessage as g, type BlobChunkPushMessage as h, type SyncEncryptionConfig as i, type SyncState as j, type SyncStatusInfo as k, type SyncConfig as l, type SyncStatePersistence as m, type SyncQuerySubset as n, type RejectedOperation as o, type AwarenessStateWire as p, type AwarenessUpdateMessage as q, type ErrorMessage as r, type HandshakeResponseMessage as s, type OperationRejectedMessage as t, SYNC_STATES as u, SYNC_STATUSES as v, ScopeViolationError as w, type SyncEncryptionAlgorithm as x, type SyncScopeContext as y, type SyncStatus as z };
745
+ export { isHandshakeResponseMessage as $, type AcknowledgmentMessage as A, type BlobChunkRequestMessage as B, type SyncScopeContext as C, type DeltaCursor as D, type EncryptedPayload as E, type SyncSettlementOptions as F, type SyncSettlementResult as G, type HandshakeMessage as H, InvalidScopeError as I, type SyncStatus as J, dedupeQuerySubsets as K, isAcknowledgmentMessage as L, MemoryRejectedOperationStorage as M, isAwarenessUpdateMessage as N, type OperationBatchMessage as O, isBlobChunkPushMessage as P, type QueueStorage as Q, type RejectedOperationStorage as R, type SyncScopeMap as S, type TransportOptions as T, isBlobChunkRequestMessage as U, type VersionedKey as V, type WireFormat as W, isBlobChunkResponseMessage as X, type YjsDocUpdateMessage as Y, isErrorMessage as Z, isHandshakeMessage as _, type SyncMessage as a, isOperationBatchMessage as a0, isOperationRejectedMessage as a1, isSyncMessage as a2, isYjsDocUpdateMessage as a3, operationMatchesQuerySubsets as a4, querySubsetContains as a5, type SerializedOperation as b, type SyncTransport as c, type TransportMessageHandler as d, type TransportCloseHandler as e, type TransportErrorHandler as f, type BlobChunkResponseMessage as g, type BlobChunkPushMessage as h, type SyncEncryptionConfig as i, type SyncState as j, type SyncStatusInfo as k, type SyncConfig as l, type SyncStatePersistence as m, type SyncQuerySubset as n, type RejectedOperation as o, type ActiveApplyFailure as p, type AwarenessStateWire as q, type AwarenessUpdateMessage as r, type ErrorMessage as s, type HandshakeResponseMessage as t, type OperationRejectedMessage as u, SYNC_STATES as v, SYNC_STATUSES as w, ScopeViolationError as x, type SyncEncryptionAlgorithm as y, type SyncPhase as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@korajs/sync",
3
- "version": "1.0.0-beta.10",
3
+ "version": "1.0.0-beta.12",
4
4
  "description": "Sync protocol and transports for Kora.js with delta sync, causal ordering, and automatic reconnection",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -34,8 +34,8 @@
34
34
  ],
35
35
  "dependencies": {
36
36
  "protobufjs": "^8.0.1",
37
- "@korajs/core": "1.0.0-beta.10",
38
- "@korajs/merge": "1.0.0-beta.10"
37
+ "@korajs/core": "1.0.0-beta.12",
38
+ "@korajs/merge": "1.0.0-beta.12"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@fast-check/vitest": "0.2.0",