@syncular/client 0.1.2 → 0.2.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 (233) hide show
  1. package/README.md +227 -709
  2. package/dist/apply.d.ts +80 -0
  3. package/dist/apply.js +301 -0
  4. package/dist/blob.d.ts +127 -0
  5. package/dist/blob.js +201 -0
  6. package/dist/bun-database.d.ts +22 -0
  7. package/dist/bun-database.js +61 -0
  8. package/dist/client.d.ts +320 -69
  9. package/dist/client.js +1627 -163
  10. package/dist/content-type.d.ts +2 -0
  11. package/dist/content-type.js +2 -0
  12. package/dist/database.d.ts +35 -80
  13. package/dist/database.js +32 -947
  14. package/dist/encryption.d.ts +47 -0
  15. package/dist/encryption.js +75 -0
  16. package/dist/errors.d.ts +8 -22
  17. package/dist/errors.js +10 -207
  18. package/dist/http.d.ts +32 -0
  19. package/dist/http.js +196 -0
  20. package/dist/index.d.ts +28 -16
  21. package/dist/index.js +25 -12
  22. package/dist/invalidation.d.ts +69 -0
  23. package/dist/invalidation.js +84 -0
  24. package/dist/leader-lock.d.ts +28 -0
  25. package/dist/leader-lock.js +38 -0
  26. package/dist/multi-tab.d.ts +134 -0
  27. package/dist/multi-tab.js +399 -0
  28. package/dist/node-database.d.ts +41 -0
  29. package/dist/node-database.js +133 -0
  30. package/dist/outbox.d.ts +56 -0
  31. package/dist/outbox.js +140 -0
  32. package/dist/schema.d.ts +107 -0
  33. package/dist/schema.js +267 -0
  34. package/dist/state.d.ts +40 -0
  35. package/dist/state.js +77 -0
  36. package/dist/transport.d.ts +44 -0
  37. package/dist/transport.js +7 -0
  38. package/dist/wasm-database.d.ts +30 -0
  39. package/dist/wasm-database.js +170 -0
  40. package/dist/window.d.ts +64 -0
  41. package/dist/window.js +0 -0
  42. package/dist/worker-entry.d.ts +16 -2
  43. package/dist/worker-entry.js +300 -456
  44. package/dist/worker-host.d.ts +174 -0
  45. package/dist/worker-host.js +536 -0
  46. package/dist/worker-protocol.d.ts +173 -61
  47. package/dist/worker-protocol.js +7 -16
  48. package/package.json +45 -112
  49. package/src/apply.ts +435 -0
  50. package/src/blob.ts +333 -0
  51. package/src/bun-database.ts +75 -0
  52. package/src/client.ts +2247 -277
  53. package/src/content-type.ts +2 -0
  54. package/src/database.ts +63 -1389
  55. package/src/encryption.ts +123 -0
  56. package/src/errors.ts +11 -265
  57. package/src/http.ts +254 -0
  58. package/src/index.ts +25 -20
  59. package/src/invalidation.ts +128 -0
  60. package/src/leader-lock.ts +68 -0
  61. package/src/multi-tab.ts +550 -0
  62. package/src/node-database.ts +180 -0
  63. package/src/outbox.ts +206 -0
  64. package/src/schema.ts +397 -0
  65. package/src/state.ts +126 -0
  66. package/src/transport.ts +52 -0
  67. package/src/wasm-database.ts +279 -0
  68. package/src/window.ts +0 -0
  69. package/src/worker-entry.ts +391 -545
  70. package/src/worker-host.ts +800 -0
  71. package/src/worker-protocol.ts +204 -99
  72. package/dist/auth-leases.d.ts +0 -11
  73. package/dist/auth-leases.d.ts.map +0 -1
  74. package/dist/auth-leases.js +0 -140
  75. package/dist/auth-leases.js.map +0 -1
  76. package/dist/blob-limits.d.ts +0 -15
  77. package/dist/blob-limits.d.ts.map +0 -1
  78. package/dist/blob-limits.js +0 -66
  79. package/dist/blob-limits.js.map +0 -1
  80. package/dist/bridge-client.d.ts +0 -69
  81. package/dist/bridge-client.d.ts.map +0 -1
  82. package/dist/bridge-client.js +0 -282
  83. package/dist/bridge-client.js.map +0 -1
  84. package/dist/client-config.d.ts +0 -6
  85. package/dist/client-config.d.ts.map +0 -1
  86. package/dist/client-config.js +0 -18
  87. package/dist/client-config.js.map +0 -1
  88. package/dist/client.d.ts.map +0 -1
  89. package/dist/client.js.map +0 -1
  90. package/dist/command-history.d.ts +0 -35
  91. package/dist/command-history.d.ts.map +0 -1
  92. package/dist/command-history.js +0 -378
  93. package/dist/command-history.js.map +0 -1
  94. package/dist/console-diagnostics.d.ts +0 -33
  95. package/dist/console-diagnostics.d.ts.map +0 -1
  96. package/dist/console-diagnostics.js +0 -496
  97. package/dist/console-diagnostics.js.map +0 -1
  98. package/dist/crdt-yjs/index.d.ts +0 -4
  99. package/dist/crdt-yjs/index.d.ts.map +0 -1
  100. package/dist/crdt-yjs/index.js +0 -4
  101. package/dist/crdt-yjs/index.js.map +0 -1
  102. package/dist/crdt-yjs/webview-host-facade.d.ts +0 -126
  103. package/dist/crdt-yjs/webview-host-facade.d.ts.map +0 -1
  104. package/dist/crdt-yjs/webview-host-facade.js +0 -284
  105. package/dist/crdt-yjs/webview-host-facade.js.map +0 -1
  106. package/dist/crdt-yjs/yjs-document-field-adapter.d.ts +0 -153
  107. package/dist/crdt-yjs/yjs-document-field-adapter.d.ts.map +0 -1
  108. package/dist/crdt-yjs/yjs-document-field-adapter.js +0 -406
  109. package/dist/crdt-yjs/yjs-document-field-adapter.js.map +0 -1
  110. package/dist/crdt-yjs/yjs-prosemirror-bridge.d.ts +0 -73
  111. package/dist/crdt-yjs/yjs-prosemirror-bridge.d.ts.map +0 -1
  112. package/dist/crdt-yjs/yjs-prosemirror-bridge.js +0 -169
  113. package/dist/crdt-yjs/yjs-prosemirror-bridge.js.map +0 -1
  114. package/dist/database.d.ts.map +0 -1
  115. package/dist/database.js.map +0 -1
  116. package/dist/diagnostics.d.ts +0 -10
  117. package/dist/diagnostics.d.ts.map +0 -1
  118. package/dist/diagnostics.js +0 -83
  119. package/dist/diagnostics.js.map +0 -1
  120. package/dist/errors.d.ts.map +0 -1
  121. package/dist/errors.js.map +0 -1
  122. package/dist/generated-bridge.d.ts +0 -365
  123. package/dist/generated-bridge.d.ts.map +0 -1
  124. package/dist/generated-bridge.js +0 -250
  125. package/dist/generated-bridge.js.map +0 -1
  126. package/dist/index.d.ts.map +0 -1
  127. package/dist/index.js.map +0 -1
  128. package/dist/mutations.d.ts +0 -72
  129. package/dist/mutations.d.ts.map +0 -1
  130. package/dist/mutations.js +0 -63
  131. package/dist/mutations.js.map +0 -1
  132. package/dist/network.d.ts +0 -3
  133. package/dist/network.d.ts.map +0 -1
  134. package/dist/network.js +0 -17
  135. package/dist/network.js.map +0 -1
  136. package/dist/react/index.d.ts +0 -169
  137. package/dist/react/index.d.ts.map +0 -1
  138. package/dist/react/index.js +0 -628
  139. package/dist/react/index.js.map +0 -1
  140. package/dist/react-native/index.d.ts +0 -35
  141. package/dist/react-native/index.d.ts.map +0 -1
  142. package/dist/react-native/index.js +0 -49
  143. package/dist/react-native/index.js.map +0 -1
  144. package/dist/runtime-contract.d.ts +0 -13
  145. package/dist/runtime-contract.d.ts.map +0 -1
  146. package/dist/runtime-contract.js +0 -24
  147. package/dist/runtime-contract.js.map +0 -1
  148. package/dist/rust-client.d.ts +0 -106
  149. package/dist/rust-client.d.ts.map +0 -1
  150. package/dist/rust-client.js +0 -938
  151. package/dist/rust-client.js.map +0 -1
  152. package/dist/sentry.d.ts +0 -35
  153. package/dist/sentry.d.ts.map +0 -1
  154. package/dist/sentry.js +0 -155
  155. package/dist/sentry.js.map +0 -1
  156. package/dist/sql-safety.d.ts +0 -3
  157. package/dist/sql-safety.d.ts.map +0 -1
  158. package/dist/sql-safety.js +0 -62
  159. package/dist/sql-safety.js.map +0 -1
  160. package/dist/syncular-runtime-artifacts.json +0 -61
  161. package/dist/tauri/index.d.ts +0 -35
  162. package/dist/tauri/index.d.ts.map +0 -1
  163. package/dist/tauri/index.js +0 -114
  164. package/dist/tauri/index.js.map +0 -1
  165. package/dist/types.d.ts +0 -1096
  166. package/dist/types.d.ts.map +0 -1
  167. package/dist/types.js +0 -2
  168. package/dist/types.js.map +0 -1
  169. package/dist/wasm/.syncular-wasm-profile +0 -1
  170. package/dist/wasm/syncular-runtime-artifact.json +0 -21
  171. package/dist/wasm/syncular.d.ts +0 -207
  172. package/dist/wasm/syncular.js +0 -2341
  173. package/dist/wasm/syncular_bg.wasm +0 -0
  174. package/dist/wasm/syncular_bg.wasm.d.ts +0 -97
  175. package/dist/wasm-bindings/runtime-contract.d.ts +0 -22
  176. package/dist/wasm-bindings/runtime-contract.d.ts.map +0 -1
  177. package/dist/wasm-bindings/runtime-contract.js +0 -112
  178. package/dist/wasm-bindings/runtime-contract.js.map +0 -1
  179. package/dist/wasm-core/.syncular-wasm-profile +0 -1
  180. package/dist/wasm-core/syncular-runtime-artifact.json +0 -17
  181. package/dist/wasm-core/syncular.d.ts +0 -162
  182. package/dist/wasm-core/syncular.js +0 -1847
  183. package/dist/wasm-core/syncular_bg.wasm +0 -0
  184. package/dist/wasm-core/syncular_bg.wasm.d.ts +0 -77
  185. package/dist/wasm-perf/.syncular-wasm-profile +0 -1
  186. package/dist/wasm-perf/syncular-runtime-artifact.json +0 -21
  187. package/dist/wasm-perf/syncular.d.ts +0 -207
  188. package/dist/wasm-perf/syncular.js +0 -2341
  189. package/dist/wasm-perf/syncular_bg.wasm +0 -0
  190. package/dist/wasm-perf/syncular_bg.wasm.d.ts +0 -97
  191. package/dist/wasm-runtime.d.ts +0 -23
  192. package/dist/wasm-runtime.d.ts.map +0 -1
  193. package/dist/wasm-runtime.js +0 -69
  194. package/dist/wasm-runtime.js.map +0 -1
  195. package/dist/worker-client.d.ts +0 -123
  196. package/dist/worker-client.d.ts.map +0 -1
  197. package/dist/worker-client.js +0 -1735
  198. package/dist/worker-client.js.map +0 -1
  199. package/dist/worker-entry.d.ts.map +0 -1
  200. package/dist/worker-entry.js.map +0 -1
  201. package/dist/worker-protocol.d.ts.map +0 -1
  202. package/dist/worker-protocol.js.map +0 -1
  203. package/dist/worker-realtime.d.ts +0 -39
  204. package/dist/worker-realtime.d.ts.map +0 -1
  205. package/dist/worker-realtime.js +0 -677
  206. package/dist/worker-realtime.js.map +0 -1
  207. package/src/auth-leases.ts +0 -251
  208. package/src/blob-limits.ts +0 -98
  209. package/src/bridge-client.ts +0 -512
  210. package/src/client-config.ts +0 -29
  211. package/src/command-history.ts +0 -623
  212. package/src/console-diagnostics.ts +0 -617
  213. package/src/crdt-yjs/index.ts +0 -3
  214. package/src/crdt-yjs/webview-host-facade.ts +0 -477
  215. package/src/crdt-yjs/yjs-document-field-adapter.ts +0 -733
  216. package/src/crdt-yjs/yjs-prosemirror-bridge.ts +0 -272
  217. package/src/diagnostics.ts +0 -116
  218. package/src/generated-bridge.ts +0 -741
  219. package/src/mutations.ts +0 -168
  220. package/src/network.ts +0 -32
  221. package/src/react/index.ts +0 -1036
  222. package/src/react-native/index.ts +0 -152
  223. package/src/runtime-contract.ts +0 -48
  224. package/src/rust-client.ts +0 -1491
  225. package/src/sentry.ts +0 -215
  226. package/src/sql-safety.ts +0 -61
  227. package/src/tauri/index.ts +0 -211
  228. package/src/types.ts +0 -1397
  229. package/src/wasm-bindings/generated-wasm-bindings.d.ts +0 -70
  230. package/src/wasm-bindings/runtime-contract.ts +0 -158
  231. package/src/wasm-runtime.ts +0 -145
  232. package/src/worker-client.ts +0 -2289
  233. package/src/worker-realtime.ts +0 -843
package/dist/types.d.ts DELETED
@@ -1,1096 +0,0 @@
1
- import type { BlobRef, ColumnCodecSource, SyncularErrorCategory as CoreSyncularErrorCategory, SyncularErrorCode as CoreSyncularErrorCode, SyncularErrorRecommendedAction as CoreSyncularErrorRecommendedAction, SyncAuthLeaseIssueRequest, SyncAuthLifecycle, SyncOperation } from '@syncular/core';
2
- import type { CompiledQuery } from 'kysely';
3
- import type { SyncularWasmArtifactVariant } from './wasm-bindings/runtime-contract';
4
- export type SyncularClientMode = 'remote' | 'local-sync-compatible';
5
- export interface SyncularClientConfig {
6
- mode?: SyncularClientMode;
7
- baseUrl?: string;
8
- clientId: string;
9
- actorId: string;
10
- projectId?: string | null;
11
- pull?: SyncularPullOptions;
12
- push?: SyncularPushOptions;
13
- fileName?: string;
14
- storage?: SyncularStorage;
15
- clearOnInit?: boolean;
16
- stateId?: string;
17
- schemaVersion?: number;
18
- appSchema?: SyncularAppSchema;
19
- }
20
- export interface ResolvedSyncularClientConfig extends Omit<SyncularClientConfig, 'baseUrl' | 'mode'> {
21
- mode: SyncularClientMode;
22
- baseUrl: string;
23
- }
24
- export interface SyncularPullOptions {
25
- limitCommits?: number;
26
- limitSnapshotRows?: number;
27
- maxSnapshotPages?: number;
28
- dedupeRows?: boolean | null;
29
- /** Numeric bootstrap phase considered critical. Defaults to 0. */
30
- criticalBootstrapPhase?: number;
31
- /** Numeric bootstrap phase considered interactive. Defaults to 1. */
32
- interactiveBootstrapPhase?: number;
33
- /** Defaults to false; snapshot bootstrap rows hydrate local SQLite instead of being returned. */
34
- includeSnapshotRows?: boolean;
35
- collectChangedRows?: boolean;
36
- maxSnapshotChangedRows?: number | null;
37
- collectServerTimings?: boolean;
38
- }
39
- export interface SyncularPushOptions {
40
- /**
41
- * Fixed maximum pending outbox commits to send in one push request.
42
- * When omitted, Rust uses 20 for normal queues and adapts up to 1000 for
43
- * large due outboxes. Configured values disable that adaptive default and
44
- * must remain bounded.
45
- */
46
- outboxBatchLimit?: number;
47
- /**
48
- * Maximum adaptive outbox batch size used when outboxBatchLimit is omitted.
49
- * Defaults to 1000.
50
- */
51
- adaptiveOutboxBatchLimit?: number;
52
- /**
53
- * Due outbox size that must be exceeded before adaptive batching engages.
54
- * Defaults to 100.
55
- */
56
- adaptiveOutboxBatchThreshold?: number;
57
- }
58
- export interface SyncularTransportStats {
59
- requestCount: number;
60
- requestBytes: number;
61
- responseBytes: number;
62
- snapshotChunkCount: number;
63
- snapshotChunkBinaryCount: number;
64
- snapshotChunkRowCount: number;
65
- snapshotChunkFetchMs: number;
66
- snapshotChunkDecompressMs: number;
67
- snapshotChunkHashMs: number;
68
- snapshotChunkDecodeMs: number;
69
- snapshotArtifactCount: number;
70
- snapshotArtifactBytes: number;
71
- snapshotArtifactFetchMs: number;
72
- snapshotArtifactDecompressMs: number;
73
- snapshotArtifactHashMs: number;
74
- syncPackDecodeMs: number;
75
- serverBootstrapSnapshotQueryMs: number;
76
- serverBootstrapRowFrameEncodeMs: number;
77
- serverBootstrapSnapshotBinaryEncodeMs: number;
78
- serverBootstrapChunkCacheLookupMs: number;
79
- serverBootstrapArtifactCacheLookupMs: number;
80
- serverBootstrapChunkGzipMs: number;
81
- serverBootstrapChunkHashMs: number;
82
- serverBootstrapChunkPersistMs: number;
83
- }
84
- export type SyncularStorage = 'memory' | 'indexedDb' | 'opfsSahPool';
85
- export type SyncularAuthHeaders = Record<string, string>;
86
- export interface SyncularAuthLeaseRecord {
87
- leaseId: string;
88
- kid: string;
89
- actorId: string;
90
- issuedAtMs: number;
91
- notBeforeMs: number;
92
- expiresAtMs: number;
93
- schemaVersion: number;
94
- payloadJson: string;
95
- token: string;
96
- status: string;
97
- lastValidationError?: string | null;
98
- createdAtMs: number;
99
- updatedAtMs: number;
100
- }
101
- export interface SyncularFieldEncryptionRule {
102
- scope: string;
103
- table?: string;
104
- fields: string[];
105
- rowIdField?: string;
106
- }
107
- export interface SyncularFieldEncryptionConfig {
108
- rules: SyncularFieldEncryptionRule[];
109
- keys: Record<string, string | Uint8Array>;
110
- encryptionKid?: string;
111
- decryptionErrorMode?: 'throw' | 'keepCiphertext';
112
- envelopePrefix?: string;
113
- }
114
- export interface SyncularEncryptedCrdtConfig {
115
- keys: Record<string, string | Uint8Array>;
116
- encryptionKid?: string;
117
- partitionId?: string;
118
- }
119
- export interface SyncularBlobEncryptionConfig {
120
- keys: Record<string, string | Uint8Array>;
121
- encryptionKid?: string;
122
- }
123
- export type SyncularEncryptionHelperMethod = 'generateSymmetricKey' | 'keyToMnemonic' | 'mnemonicToKey' | 'generateKeypair' | 'wrapKeyForRecipient' | 'unwrapKey' | 'keyToShareUrl' | 'publicKeyToShareUrl' | 'parseShareUrl' | 'deriveScopedPassphraseKeyPbkdf2' | 'derivePassphraseKeyArgon2id';
124
- export type SyncularRealtimeConnectionState = 'disconnected' | 'connecting' | 'connected';
125
- export type SyncularDiagnosticLevel = 'debug' | 'info' | 'warn' | 'error';
126
- export type SyncularDiagnosticSource = 'client' | 'worker' | 'sync' | 'auth' | 'realtime' | 'storage' | 'blob';
127
- export interface SyncularDiagnosticEvent {
128
- at: number;
129
- level: SyncularDiagnosticLevel;
130
- source: SyncularDiagnosticSource;
131
- code: string;
132
- message: string;
133
- syncAttemptId?: string;
134
- traceId?: string;
135
- spanId?: string;
136
- clientId?: string;
137
- subscriptionId?: string;
138
- table?: string;
139
- rowId?: string;
140
- cursor?: number | string | null;
141
- details?: Record<string, unknown>;
142
- }
143
- export type SyncularDiagnosticSink = (event: SyncularDiagnosticEvent) => void;
144
- export interface SyncularSyncAttempt {
145
- syncAttemptId: string;
146
- traceId: string;
147
- spanId: string;
148
- traceparent: string;
149
- }
150
- export interface SyncularSyncRequestOptions {
151
- syncAttempt?: SyncularSyncAttempt;
152
- }
153
- export interface SyncularRealtimeOptions {
154
- enabled?: boolean;
155
- wsUrl?: string;
156
- params?: Record<string, string>;
157
- getParams?: (args: {
158
- clientId: string;
159
- }) => Record<string, string> | Promise<Record<string, string>>;
160
- initialReconnectDelayMs?: number;
161
- maxReconnectDelayMs?: number;
162
- reconnectBackoffFactor?: number;
163
- reconnectJitterRatio?: number;
164
- pullRecoveryJitterMs?: number;
165
- heartbeatTimeoutMs?: number;
166
- }
167
- export interface SyncularNetworkStatusSource {
168
- isOnline(): boolean | undefined;
169
- addEventListener?(type: 'online' | 'offline', listener: () => void): void;
170
- removeEventListener?(type: 'online' | 'offline', listener: () => void): void;
171
- }
172
- export interface SyncularDatabaseSyncOptions {
173
- autoSyncAfterMutation?: boolean;
174
- mutationSyncDebounceMs?: number | false;
175
- network?: SyncularNetworkStatusSource | false;
176
- rowsChangedDebounceMs?: number | false;
177
- autoProcessBlobUploadsAfterStore?: boolean;
178
- blobUploadDebounceMs?: number | false;
179
- }
180
- export interface SyncularBlobUploadQueueProcessOptions {
181
- retryNow?: boolean;
182
- }
183
- export interface SyncularConsoleDiagnosticsOptions {
184
- enabled?: boolean;
185
- endpoint?: string;
186
- baseUrl?: string;
187
- token?: string;
188
- getHeaders?: () => SyncularAuthHeaders | Promise<SyncularAuthHeaders>;
189
- clientId?: string;
190
- actorId?: string;
191
- partitionId?: string;
192
- debounceMs?: number | false;
193
- maxPayloadBytes?: number;
194
- network?: SyncularNetworkStatusSource | false;
195
- }
196
- /**
197
- * Advanced lifecycle controls for `createSyncularDatabase`. The common knobs
198
- * (`realtime`, `pollIntervalMs`, `subscriptions`) live on
199
- * {@link CreateSyncularDatabaseOptions} directly.
200
- */
201
- export interface SyncularDatabaseLifecycleOptions {
202
- /**
203
- * Start the sync lifecycle while opening the database. Defaults to `true`
204
- * for remote databases and `false` for local
205
- * (`mode: 'local-sync-compatible'`) databases. When disabled, call
206
- * `database.start()` yourself.
207
- */
208
- autoStart?: boolean;
209
- /** Run an initial sync when the lifecycle starts. Defaults to `true`. */
210
- initialSync?: boolean;
211
- /** Sync after realtime (re)connects. Defaults to `true`. */
212
- syncOnRealtimeConnect?: boolean;
213
- }
214
- export type SyncularWorkerRequestTimeoutMs = number | false;
215
- export interface SyncularWorkerRequestTimeouts {
216
- /**
217
- * Timeout for ordinary short worker requests. Defaults to 30 seconds.
218
- * Use `false` to disable the ordinary request timeout.
219
- */
220
- defaultMs?: SyncularWorkerRequestTimeoutMs;
221
- /**
222
- * Timeout for sync/bootstrap requests. Defaults to `false` because initial
223
- * browser bootstrap and large pull/apply cycles can be legitimately long.
224
- */
225
- syncMs?: SyncularWorkerRequestTimeoutMs;
226
- /**
227
- * Timeout for blob transfer/queue requests. Defaults to `false`; transport
228
- * and auth layers should own network abort policy.
229
- */
230
- blobMs?: SyncularWorkerRequestTimeoutMs;
231
- /**
232
- * Timeout for local maintenance requests such as compaction, repair, reset,
233
- * and support bundle import/export. Defaults to `false`.
234
- */
235
- storageMaintenanceMs?: SyncularWorkerRequestTimeoutMs;
236
- /** Per-request override keyed by worker request type. */
237
- byType?: Record<string, SyncularWorkerRequestTimeoutMs | undefined>;
238
- }
239
- export interface CreateSyncularDatabaseOptions {
240
- config: SyncularClientConfig;
241
- worker?: Worker | (() => Worker);
242
- /**
243
- * Worker request timeout policy. A number preserves the legacy behavior and
244
- * applies to every request type. An object uses request-class defaults so
245
- * long-running sync/bootstrap/maintenance operations are not capped by the
246
- * ordinary request timeout.
247
- */
248
- requestTimeoutMs?: SyncularWorkerRequestTimeoutMs | SyncularWorkerRequestTimeouts;
249
- /**
250
- * WASM runtime artifact to load. Defaults to the packaged 'full' artifact;
251
- * pass a variant name ('core', 'full-perf') or an explicit artifact.
252
- */
253
- runtime?: SyncularRuntimeArtifact | SyncularWasmArtifactVariant;
254
- runtimeArtifacts?: readonly SyncularRuntimeArtifactCandidate[];
255
- requiredRuntimeFeatures?: readonly string[];
256
- blobLimits?: SyncularBlobLimits;
257
- codecs?: ColumnCodecSource;
258
- appTables?: readonly string[];
259
- tableConfig?: SyncularTableConfigMap;
260
- getHeaders?: () => SyncularAuthHeaders | Promise<SyncularAuthHeaders>;
261
- authLifecycle?: SyncAuthLifecycle;
262
- diagnostics?: SyncularDiagnosticSink;
263
- consoleDiagnostics?: boolean | SyncularConsoleDiagnosticsOptions;
264
- /**
265
- * Realtime websocket options for the managed sync lifecycle. Defaults to
266
- * `true` (connect with default options) when the lifecycle starts.
267
- */
268
- realtime?: boolean | SyncularRealtimeOptions;
269
- /**
270
- * Interval polling fallback for the managed sync lifecycle. Off by default.
271
- */
272
- pollIntervalMs?: number | false;
273
- /** Sync subscriptions registered while opening the database. */
274
- subscriptions?: readonly SyncularSubscriptionSpec[];
275
- lifecycle?: SyncularDatabaseLifecycleOptions;
276
- sync?: SyncularDatabaseSyncOptions;
277
- }
278
- export interface SyncularRuntimeArtifact {
279
- wasmGlueUrl?: string | URL;
280
- wasmUrl?: string | URL | Request;
281
- }
282
- export interface SyncularRuntimeArtifactCandidate extends SyncularRuntimeArtifact {
283
- name?: string;
284
- features: readonly string[];
285
- }
286
- export interface SyncularRuntimeArtifactCatalog {
287
- catalogVersion: 1;
288
- packageName: string;
289
- packageVersion: string;
290
- generatedAt?: string;
291
- artifacts: readonly SyncularRuntimeArtifactCatalogEntry[];
292
- }
293
- export interface SyncularRuntimeArtifactCatalogEntry {
294
- name: string;
295
- variant?: string;
296
- profile?: string;
297
- features: readonly string[];
298
- rustFeatures?: readonly string[];
299
- wasmGlueUrl: string;
300
- wasmUrl: string;
301
- rawBytes?: number;
302
- gzipBytes?: number;
303
- }
304
- export type SyncularTableConfigMap = Record<string, SyncularTableConfig>;
305
- export interface SyncularTableConfig {
306
- primaryKeyColumn?: string;
307
- serverVersionColumn?: string | null;
308
- softDeleteColumn?: string | null;
309
- blobColumns?: readonly string[];
310
- crdtYjsFields?: readonly SyncularCrdtYjsFieldConfig[];
311
- encryptedFields?: readonly {
312
- field: string;
313
- scope?: string;
314
- rowIdField?: string;
315
- }[];
316
- }
317
- export interface SyncularAppSchema {
318
- schemaVersion: number;
319
- localBaseSchema?: SyncularLocalBaseSchema;
320
- tables: readonly SyncularAppTableMetadata[];
321
- migrations?: readonly SyncularEmbeddedMigration[];
322
- }
323
- export interface SyncularLocalBaseSchema {
324
- tableSetupSql: readonly string[];
325
- }
326
- export interface SyncularEmbeddedMigration {
327
- version: string;
328
- schemaVersion: number;
329
- name: string;
330
- upSql: string;
331
- }
332
- export interface SyncularAppTableMetadata {
333
- name: string;
334
- primaryKeyColumn: string;
335
- serverVersionColumn: string;
336
- softDeleteColumn?: string | null;
337
- subscriptionId: string;
338
- columns: readonly SyncularColumnMetadata[];
339
- blobColumns: readonly string[];
340
- crdtYjsFields: readonly SyncularCrdtYjsFieldMetadata[];
341
- encryptedFields: readonly SyncularEncryptedFieldMetadata[];
342
- scopes: readonly SyncularScopeMetadata[];
343
- }
344
- export interface SyncularColumnMetadata {
345
- name: string;
346
- typeFamily: string;
347
- notnullRequired: boolean;
348
- primaryKey: boolean;
349
- }
350
- export interface SyncularScopeMetadata {
351
- name: string;
352
- column: string;
353
- source: 'actorId' | 'projectId';
354
- required: boolean;
355
- }
356
- export interface SyncularCrdtYjsFieldMetadata {
357
- field: string;
358
- stateColumn: string;
359
- containerKey: string;
360
- rowIdField: string;
361
- kind: SyncularYjsFieldKind;
362
- syncMode: SyncularYjsSyncMode;
363
- }
364
- export interface SyncularEncryptedFieldMetadata {
365
- field: string;
366
- scope: string;
367
- rowIdField: string;
368
- }
369
- export type SyncularYjsFieldKind = 'text' | 'xml-fragment' | 'prosemirror';
370
- export type SyncularYjsSyncMode = 'server-merge' | 'encrypted-update-log';
371
- export interface SyncularCrdtYjsFieldConfig {
372
- field: string;
373
- stateColumn: string;
374
- containerKey?: string;
375
- rowIdField?: string;
376
- kind?: SyncularYjsFieldKind;
377
- syncMode?: SyncularYjsSyncMode;
378
- }
379
- export interface SyncularYjsUpdateEnvelope {
380
- updateId: string;
381
- updateBase64: string;
382
- }
383
- export type SyncularYjsUpdateInput = SyncularYjsUpdateEnvelope | readonly SyncularYjsUpdateEnvelope[];
384
- export type SyncularYjsPayloadEnvelope<Field extends string = string> = {
385
- __yjs?: Partial<Record<Field, SyncularYjsUpdateInput>>;
386
- };
387
- export interface SyncularCrdtFieldRequest {
388
- table: string;
389
- rowId: string;
390
- field: string;
391
- }
392
- export interface SyncularCrdtFieldDescriptor extends SyncularCrdtFieldRequest {
393
- stateColumn: string;
394
- containerKey: string;
395
- rowIdField: string;
396
- kind: SyncularYjsFieldKind;
397
- syncMode: SyncularYjsSyncMode;
398
- }
399
- export interface SyncularCrdtFieldTextRequest extends SyncularCrdtFieldRequest {
400
- nextText: string;
401
- }
402
- export interface SyncularCrdtFieldYjsUpdateRequest extends SyncularCrdtFieldRequest {
403
- update: SyncularYjsUpdateEnvelope;
404
- }
405
- export interface SyncularCrdtFieldCompactionRequest extends SyncularCrdtFieldRequest {
406
- minUncheckpointedUpdates?: number;
407
- }
408
- export interface SyncularCrdtFieldWriteReceipt {
409
- clientCommitId: string;
410
- syncMode: SyncularYjsSyncMode;
411
- }
412
- export interface SyncularCrdtFieldMaterialization {
413
- value: unknown;
414
- stateBase64?: string | null;
415
- stateVectorBase64: string;
416
- }
417
- export interface SyncularCrdtDocumentSnapshot extends SyncularCrdtFieldRequest {
418
- documentKey: string;
419
- stateColumn: string;
420
- syncMode: SyncularYjsSyncMode;
421
- stateBase64?: string | null;
422
- stateVectorBase64: string;
423
- pendingUpdates: number;
424
- flushedUpdates: number;
425
- ackedUpdates: number;
426
- logUpdates: number;
427
- updatedAt: number;
428
- compactedAt?: number | null;
429
- }
430
- export type SyncularCrdtUpdateOrigin = 'local' | 'remote' | 'compaction';
431
- export type SyncularCrdtUpdateStatus = 'pending' | 'flushed' | 'acked' | 'pruned';
432
- export interface SyncularCrdtUpdateLogEntry {
433
- id: number;
434
- documentKey: string;
435
- updateId: string;
436
- clientCommitId?: string | null;
437
- origin: SyncularCrdtUpdateOrigin;
438
- status: SyncularCrdtUpdateStatus;
439
- updateBase64: string;
440
- stateVectorBase64: string;
441
- createdAt: number;
442
- flushedAt?: number | null;
443
- ackedAt?: number | null;
444
- }
445
- export interface SyncularCrdtFieldCompactionStats {
446
- pendingUpdates: number;
447
- flushedUpdates: number;
448
- ackedUpdates: number;
449
- logUpdates: number;
450
- stateVectorBase64: string;
451
- updatedAt: number;
452
- compactedAt?: number | null;
453
- }
454
- export interface SyncularEncryptedCrdtStreamStats {
455
- updateCount: number;
456
- checkpointCount: number;
457
- checkpointableUpdateCount: number;
458
- maxServerSeq?: number | null;
459
- latestCheckpointCoversSeq?: number | null;
460
- }
461
- export interface SyncularCrdtFieldCompactionReceipt {
462
- checkpointCreated: boolean;
463
- clientCommitId?: string | null;
464
- before: SyncularCrdtFieldCompactionStats;
465
- after: SyncularCrdtFieldCompactionStats;
466
- encryptedStreamBefore?: SyncularEncryptedCrdtStreamStats | null;
467
- encryptedStreamAfter?: SyncularEncryptedCrdtStreamStats | null;
468
- }
469
- export interface SyncularBuildYjsTextUpdateArgs {
470
- previousStateBase64?: string | null;
471
- nextText: string;
472
- containerKey?: string;
473
- updateId?: string;
474
- }
475
- export interface SyncularBuildYjsTextUpdateResult {
476
- update: SyncularYjsUpdateEnvelope;
477
- nextStateBase64: string;
478
- nextText: string;
479
- }
480
- export interface SyncularApplyYjsTextUpdatesArgs {
481
- previousStateBase64?: string | null;
482
- updates: readonly SyncularYjsUpdateEnvelope[];
483
- containerKey?: string;
484
- }
485
- export interface SyncularApplyYjsTextUpdatesResult {
486
- nextStateBase64: string;
487
- text: string;
488
- }
489
- export interface SyncularApplyYjsEnvelopeToPayloadArgs {
490
- table: string;
491
- rowId?: string | null;
492
- payload: Record<string, unknown>;
493
- existingRow?: Record<string, unknown> | null;
494
- rules: readonly (SyncularCrdtYjsFieldConfig & {
495
- table: string;
496
- })[];
497
- envelopeKey?: string;
498
- strict?: boolean;
499
- stripEnvelope?: boolean;
500
- }
501
- export interface SyncularSubscriptionSpec {
502
- id: string;
503
- table: string;
504
- scopes: Record<string, string | string[]>;
505
- params?: Record<string, unknown>;
506
- /**
507
- * Local-only startup phase. Lower phases bootstrap first; ready or currently
508
- * bootstrapping higher phases continue to participate in pull requests.
509
- */
510
- bootstrapPhase?: number;
511
- }
512
- export interface SyncularChangedRow {
513
- table: string;
514
- rowId?: string | null;
515
- operation: 'insert' | 'update' | 'delete' | 'compact' | string;
516
- changedFields: string[];
517
- crdtFields: string[];
518
- crdtFieldChanges?: SyncularChangedCrdtField[];
519
- commitId?: string | null;
520
- commitSeq?: number | null;
521
- subscriptionId?: string | null;
522
- serverVersion?: number | null;
523
- }
524
- export interface SyncularChangedCrdtField {
525
- field: string;
526
- stateColumn: string;
527
- containerKey: string;
528
- rowIdField: string;
529
- kind: string;
530
- syncMode: string;
531
- }
532
- export interface SyncularRowsChangedEvent {
533
- source: 'localWrite' | 'remotePull' | string;
534
- changedTables: string[];
535
- changedRows: SyncularChangedRow[];
536
- changedRowsTruncated?: boolean;
537
- }
538
- export type SyncularRowsChangedSink = (event: SyncularRowsChangedEvent) => void;
539
- export interface SyncularOutboxStats {
540
- pending: number;
541
- sending: number;
542
- failed: number;
543
- acked: number;
544
- total: number;
545
- }
546
- export interface SyncularConflictStats {
547
- unresolved: number;
548
- resolved: number;
549
- total: number;
550
- }
551
- export interface SyncularPresenceEntry<TMetadata = Record<string, unknown>> {
552
- clientId: string;
553
- actorId: string;
554
- joinedAt: number;
555
- metadata?: TMetadata;
556
- }
557
- export interface SyncularPresenceChangeEvent<TMetadata = Record<string, unknown>> {
558
- scopeKey: string;
559
- presence: SyncularPresenceEntry<TMetadata>[];
560
- }
561
- export type SyncularPresenceSink<TMetadata = Record<string, unknown>> = (event: SyncularPresenceChangeEvent<TMetadata>) => void;
562
- export interface SyncularBlobUploadEvent {
563
- ref: BlobRef;
564
- }
565
- export interface SyncularBlobUploadErrorEvent {
566
- hash: string;
567
- error: string;
568
- ref?: BlobRef;
569
- }
570
- export type SyncularLifecyclePhase = 'closed' | 'offline' | 'connecting' | 'syncing' | 'recovering' | 'authRequired' | 'degraded' | 'complete';
571
- export interface SyncularLifecycleState {
572
- phase: SyncularLifecyclePhase;
573
- realtime: SyncularRealtimeConnectionState;
574
- online: boolean;
575
- requiresAction: boolean;
576
- pendingRequests: number;
577
- bootstrap?: Pick<SyncularBootstrapStatus, 'complete' | 'criticalReady' | 'interactiveReady' | 'isBootstrapping' | 'progressPercent'>;
578
- outbox?: SyncularOutboxStats;
579
- conflicts?: SyncularConflictStats;
580
- blobUploads?: SyncularBlobUploadQueueStats;
581
- lastDiagnostic?: SyncularDiagnosticEvent;
582
- lastError?: {
583
- message: string;
584
- code?: string;
585
- };
586
- }
587
- export interface SyncularClientEventMap {
588
- rowsChanged: SyncularRowsChangedEvent;
589
- lifecycleChanged: SyncularLifecycleState;
590
- bootstrapChanged: SyncularBootstrapStatus;
591
- outboxChanged: SyncularOutboxStats;
592
- conflictsChanged: SyncularConflictStats;
593
- blobUploadsChanged: SyncularBlobUploadQueueStats;
594
- blobUploadCompleted: SyncularBlobUploadEvent;
595
- blobUploadFailed: SyncularBlobUploadErrorEvent;
596
- presenceChanged: SyncularPresenceChangeEvent;
597
- }
598
- export type SyncularClientEventType = keyof SyncularClientEventMap;
599
- export type SyncularClientEventSink<T extends SyncularClientEventType> = (event: SyncularClientEventMap[T]) => void;
600
- export type SyncularErrorCode = CoreSyncularErrorCode;
601
- export type SyncularErrorCategory = CoreSyncularErrorCategory;
602
- export type SyncularErrorRecommendedAction = CoreSyncularErrorRecommendedAction;
603
- export interface SyncularSyncResult {
604
- changedTables: string[];
605
- changedRows: SyncularChangedRow[];
606
- changedRowsTruncated: boolean;
607
- subscriptions: SyncularSubscriptionResult[];
608
- bootstrap: SyncularBootstrapStatus;
609
- pushedCommits: number;
610
- timings: SyncularSyncTimings;
611
- }
612
- export interface SyncularSyncTimings {
613
- totalMs: number;
614
- pushMs: number;
615
- pullMs: number;
616
- pullRequestMs: number;
617
- syncPackDecodeMs: number;
618
- pullTransformMs: number;
619
- integrityVerifyMs: number;
620
- snapshotFetchMs: number;
621
- pullApplyMs: number;
622
- scopeClearMs: number;
623
- snapshotRowApplyMs: number;
624
- snapshotArtifactApplyMs: number;
625
- snapshotArtifactCheckpointMs: number;
626
- snapshotArtifactCheckpointCount: number;
627
- snapshotChunkApplyMs: number;
628
- snapshotChunkMaterializeMs: number;
629
- snapshotChunkResetMs: number;
630
- snapshotChunkBindMs: number;
631
- snapshotChunkStepMs: number;
632
- commitApplyMs: number;
633
- subscriptionStateMs: number;
634
- notifyMs: number;
635
- }
636
- export interface SyncularConflictSummary {
637
- id: string;
638
- clientCommitId: string;
639
- opIndex: number;
640
- resultStatus: string;
641
- message: string;
642
- code: string | null;
643
- serverVersion: number | null;
644
- resolvedAt: number | null;
645
- resolution: string | null;
646
- }
647
- export type SyncularConflictResolution = 'keep-local' | 'keep-server' | 'dismiss';
648
- export interface SyncularSubscriptionResult {
649
- id: string;
650
- table: string;
651
- status: string;
652
- scopes: Record<string, string | string[]>;
653
- nextCursor: number;
654
- bootstrapPhase: number;
655
- bootstrapState: SyncularBootstrapState | null;
656
- ready: boolean;
657
- phase: SyncularBootstrapSubscriptionPhase;
658
- progressPercent: number;
659
- snapshotRows: unknown[];
660
- commits: unknown[];
661
- }
662
- export interface SyncularBootstrapState {
663
- asOfCommitSeq: number;
664
- tables: string[];
665
- tableIndex: number;
666
- rowCursor: string | null;
667
- }
668
- export type SyncularBootstrapSubscriptionPhase = 'pending' | 'bootstrapping' | 'live' | 'error' | string;
669
- export type SyncularBootstrapChannelPhase = 'idle' | 'bootstrapping' | 'live' | 'error' | string;
670
- export interface SyncularBootstrapSubscriptionStatus {
671
- id: string;
672
- table: string;
673
- expected: boolean;
674
- ready: boolean;
675
- status: string | null;
676
- phase: SyncularBootstrapSubscriptionPhase;
677
- progressPercent: number;
678
- cursor: number | null;
679
- bootstrapState: SyncularBootstrapState | null;
680
- bootstrapPhase: number;
681
- }
682
- export interface SyncularBootstrapPhaseStatus {
683
- phase: number;
684
- expectedSubscriptionIds: string[];
685
- readySubscriptionIds: string[];
686
- pendingSubscriptionIds: string[];
687
- isReady: boolean;
688
- progressPercent: number;
689
- }
690
- export interface SyncularBootstrapStatus {
691
- channelPhase: SyncularBootstrapChannelPhase;
692
- progressPercent: number;
693
- isBootstrapping: boolean;
694
- criticalReady: boolean;
695
- interactiveReady: boolean;
696
- complete: boolean;
697
- activePhase: number | null;
698
- expectedSubscriptionIds: string[];
699
- readySubscriptionIds: string[];
700
- pendingSubscriptionIds: string[];
701
- subscriptions: SyncularBootstrapSubscriptionStatus[];
702
- phases: SyncularBootstrapPhaseStatus[];
703
- }
704
- export interface SyncularSchemaState {
705
- schemaId: string;
706
- schemaVersion: number | null;
707
- currentSchemaVersion: number;
708
- updatedAt: number | null;
709
- }
710
- export type SyncularLocalHealthSeverity = 'info' | 'warning' | 'error';
711
- export type SyncularLocalHealthRepairAction = 'forceRebootstrap' | 'clearOrphanedState' | 'clearOrphanedSyncedRows' | 'manualInspection';
712
- export interface SyncularLocalHealthFinding {
713
- severity: SyncularLocalHealthSeverity;
714
- code: string;
715
- component: string;
716
- message: string;
717
- subscriptionId?: string;
718
- table?: string;
719
- repairAction?: SyncularLocalHealthRepairAction;
720
- details?: Record<string, unknown>;
721
- }
722
- export interface SyncularLocalHealthReport {
723
- generatedAt: number;
724
- ok: boolean;
725
- checkedSubscriptions: number;
726
- checkedSubscriptionStates: number;
727
- checkedVerifiedRoots: number;
728
- checkedOutboxCommits: number;
729
- checkedConflicts: number;
730
- checkedSyncedRows: number;
731
- checkedBlobReferences: number;
732
- checkedCrdtDocuments: number;
733
- checkedCrdtUpdateLogEntries: number;
734
- findings: SyncularLocalHealthFinding[];
735
- }
736
- export interface SyncularLocalHealthRepairRequest {
737
- action: SyncularLocalHealthRepairAction;
738
- subscriptionIds?: readonly string[];
739
- tables?: readonly string[];
740
- }
741
- export interface SyncularLocalHealthRepairReport {
742
- action: SyncularLocalHealthRepairAction;
743
- deletedSubscriptionStates: number;
744
- deletedVerifiedRoots: number;
745
- forcedRebootstrapSubscriptions: number;
746
- clearedOrphanedSyncedRows: number;
747
- clearedTables: string[];
748
- }
749
- export interface SyncularLocalSyncResetRequest {
750
- subscriptionIds?: readonly string[];
751
- clearSyncedRows?: boolean;
752
- }
753
- export interface SyncularLocalSyncResetReport {
754
- resetSubscriptions: number;
755
- deletedSubscriptionStates: number;
756
- deletedVerifiedRoots: number;
757
- clearedSyncedRows: number;
758
- clearedTables: string[];
759
- }
760
- export interface SyncularLocalSupportSubscription {
761
- id: string;
762
- table: string;
763
- scopeKeys: string[];
764
- scopeValueCount: number;
765
- paramsKeys: string[];
766
- paramsValueCount: number;
767
- bootstrapPhase: number;
768
- }
769
- export interface SyncularLocalSupportSubscriptionState {
770
- stateId: string;
771
- subscriptionId: string;
772
- table: string;
773
- scopeKeys: string[];
774
- scopeValueCount: number;
775
- paramsKeys: string[];
776
- paramsValueCount: number;
777
- cursor: number;
778
- status: string;
779
- bootstrapStatePresent: boolean;
780
- bootstrapStateByteLen: number;
781
- }
782
- export interface SyncularLocalSupportVerifiedRoot {
783
- stateId: string;
784
- subscriptionId: string;
785
- partitionIdPresent: boolean;
786
- partitionIdByteLen: number;
787
- commitSeq: number;
788
- rootByteLen: number;
789
- rootIsCanonicalHex: boolean;
790
- }
791
- export interface SyncularLocalSupportOutboxSummary {
792
- total: number;
793
- byStatus: Record<string, number>;
794
- bySchemaVersion: Record<string, number>;
795
- }
796
- export interface SyncularLocalSupportConflictSummary {
797
- total: number;
798
- unresolved: number;
799
- resolved: number;
800
- byResultStatus: Record<string, number>;
801
- byCode: Record<string, number>;
802
- }
803
- export interface SyncularLocalSupportBundle {
804
- formatVersion: number;
805
- generatedAt: number;
806
- redacted: true;
807
- source: string;
808
- health: SyncularLocalHealthReport;
809
- appSchemaState: SyncularSchemaState;
810
- subscriptions: SyncularLocalSupportSubscription[];
811
- subscriptionStates: SyncularLocalSupportSubscriptionState[];
812
- verifiedRoots: SyncularLocalSupportVerifiedRoot[];
813
- outbox: SyncularLocalSupportOutboxSummary;
814
- conflicts: SyncularLocalSupportConflictSummary;
815
- blob?: Record<string, number>;
816
- crdt?: Record<string, number>;
817
- }
818
- export interface SyncularLocalSupportBundleImportReport {
819
- formatVersion: number;
820
- generatedAt: number;
821
- redacted: boolean;
822
- source: string;
823
- healthOk: boolean;
824
- findingCount: number;
825
- subscriptionCount: number;
826
- subscriptionStateCount: number;
827
- verifiedRootCount: number;
828
- checkedSubscriptionStates: number;
829
- checkedVerifiedRoots: number;
830
- checkedOutboxCommits: number;
831
- checkedConflicts: number;
832
- checkedSyncedRows: number;
833
- }
834
- export interface SyncularRustRuntimeInfo {
835
- crateName: string;
836
- crateVersion: string;
837
- schemaVersion: number;
838
- features: string[];
839
- }
840
- export interface SyncularRuntimeInfo {
841
- packageName: string;
842
- packageVersion: string;
843
- workerProtocolVersion: number;
844
- storage?: SyncularStorage;
845
- storageFallback?: SyncularStorageFallbackInfo;
846
- workerUrl?: string;
847
- wasmGlueUrl: string;
848
- wasmUrl: string;
849
- rust?: SyncularRustRuntimeInfo;
850
- }
851
- export interface SyncularStorageFallbackInfo {
852
- from: SyncularStorage;
853
- to: SyncularStorage;
854
- reason: string;
855
- }
856
- export interface SyncularConnectionState {
857
- closed: boolean;
858
- pendingRequests: number;
859
- realtime: SyncularRealtimeConnectionState;
860
- storageFallback?: SyncularStorageFallbackInfo;
861
- lastDiagnostic?: SyncularDiagnosticEvent;
862
- lastError?: {
863
- message: string;
864
- code?: string;
865
- };
866
- }
867
- export interface SyncularDiagnosticSubscriptionSnapshot {
868
- id: string;
869
- table: string;
870
- scopeKeys: string[];
871
- scopeValueCount: number;
872
- paramsKeys: string[];
873
- paramsValueCount: number;
874
- status: string | null;
875
- ready: boolean;
876
- phase: SyncularBootstrapSubscriptionPhase;
877
- progressPercent: number;
878
- cursor: number | null;
879
- bootstrapPhase: number;
880
- bootstrapState: SyncularBootstrapState | null;
881
- }
882
- export interface SyncularDiagnosticSnapshot {
883
- generatedAt: number;
884
- runtime: SyncularRuntimeInfo;
885
- connection: SyncularConnectionState;
886
- subscriptions: SyncularDiagnosticSubscriptionSnapshot[];
887
- recentDiagnostics: SyncularDiagnosticEvent[];
888
- recentSyncTimings: SyncularSyncTimings[];
889
- bootstrap?: SyncularBootstrapStatus;
890
- transportStats?: SyncularTransportStats;
891
- outboxStats?: SyncularOutboxStats;
892
- conflictStats?: SyncularConflictStats;
893
- blobUploadStats?: SyncularBlobUploadQueueStats;
894
- }
895
- export interface SyncularSqlResult<Row extends Record<string, unknown> = Record<string, unknown>> {
896
- rows: Row[];
897
- numAffectedRows?: number;
898
- insertId?: number;
899
- }
900
- export interface SyncularLiveQuerySnapshot<Row extends Record<string, unknown> = Record<string, unknown>> {
901
- id: string;
902
- rows: Row[];
903
- }
904
- export interface SyncularLiveQueryEvent<Row extends Record<string, unknown> = Record<string, unknown>> {
905
- queryId: string;
906
- version: number;
907
- changedRows: SyncularChangedRow[];
908
- rows: Row[];
909
- }
910
- export interface SyncularLiveQueryDependencyHint {
911
- table: string;
912
- rowIds?: readonly string[];
913
- fields?: readonly string[];
914
- }
915
- export interface SyncularLiveQueryDiagnostic {
916
- id: string;
917
- tables: string[];
918
- dependencyHintCount: number;
919
- rerunCount: number;
920
- skippedRerunCount: number;
921
- emittedEventCount: number;
922
- }
923
- export interface SyncularLiveQueryDiagnostics {
924
- queries: SyncularLiveQueryDiagnostic[];
925
- }
926
- export interface SyncularLiveQueries {
927
- live<Row extends Record<string, unknown>>(query: {
928
- compile(): CompiledQuery;
929
- }, options: SyncularLiveQueryOptions<Row>): Promise<SyncularLiveQuerySubscription>;
930
- }
931
- export interface SyncularLiveQueryOptions<Row extends Record<string, unknown>> {
932
- tables?: readonly string[];
933
- /**
934
- * Optional row/field dependency hints for queries whose dependencies cannot
935
- * be inferred safely from the query-builder AST, such as aliased or raw SQL.
936
- * Hints must reference one of the observed tables.
937
- */
938
- dependencyHints?: readonly SyncularLiveQueryDependencyHint[];
939
- onChange(rows: Row[], event: SyncularLiveQueryChange<Row>): void;
940
- }
941
- export interface SyncularLiveQueryChange<Row extends Record<string, unknown>> extends SyncularLiveQueryEvent<Row> {
942
- initial: boolean;
943
- }
944
- export interface SyncularLiveQuerySubscription {
945
- id: string;
946
- unsubscribe(): void;
947
- }
948
- export interface SyncularSqlClient {
949
- executeSql<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<SyncularSqlResult<Row>>;
950
- subscribeQuery<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params: readonly unknown[], tables: readonly string[], hints?: readonly SyncularLiveQueryDependencyHint[]): Promise<SyncularLiveQuerySnapshot<Row>>;
951
- unsubscribeQuery(id: string): Promise<void>;
952
- drainLiveQueryEvents<Row extends Record<string, unknown> = Record<string, unknown>>(): Promise<Array<SyncularLiveQueryEvent<Row>>>;
953
- close(): Promise<void>;
954
- }
955
- export interface SyncularUnsafeSqlClient extends SyncularSqlClient {
956
- executeUnsafeSql<Row extends Record<string, unknown> = Record<string, unknown>>(sql: string, params?: readonly unknown[]): Promise<SyncularSqlResult<Row>>;
957
- }
958
- export interface SyncularBlobStoreOptions {
959
- mimeType?: string;
960
- immediate?: boolean;
961
- }
962
- export interface SyncularBlobLimits {
963
- maxPayloadBytes?: number;
964
- }
965
- export interface SyncularBlobUploadQueueStats {
966
- pending: number;
967
- uploading: number;
968
- failed: number;
969
- }
970
- export interface SyncularBlobCacheStats {
971
- count: number;
972
- totalBytes: number;
973
- }
974
- export interface SyncularStorageCompactionOptions {
975
- olderThanMs?: number;
976
- maxBlobCacheBytes?: number;
977
- pruneAckedOutbox?: boolean;
978
- pruneResolvedConflicts?: boolean;
979
- pruneFailedBlobUploads?: boolean;
980
- pruneInactiveSubscriptionStates?: boolean;
981
- pruneTombstones?: boolean;
982
- maxTombstoneServerVersion?: number;
983
- pruneEncryptedCrdtUpdates?: boolean;
984
- maxEncryptedCrdtCheckpointsPerStream?: number;
985
- pruneCrdtUpdateLog?: boolean;
986
- }
987
- export interface SyncularStorageCompactionReport {
988
- ackedOutboxCommitsDeleted: number;
989
- resolvedConflictsDeleted: number;
990
- failedBlobUploadsDeleted: number;
991
- inactiveSubscriptionStatesDeleted: number;
992
- tombstoneRowsDeleted: number;
993
- blobCacheBytesPruned: number;
994
- encryptedCrdtUpdatesDeleted: number;
995
- encryptedCrdtCheckpointsDeleted: number;
996
- crdtUpdateLogDeleted: number;
997
- }
998
- export interface SyncularBlobs {
999
- store(data: Blob | File | Uint8Array, options?: SyncularBlobStoreOptions): Promise<BlobRef>;
1000
- retrieve(ref: BlobRef): Promise<Uint8Array>;
1001
- isLocal(hash: string): Promise<boolean>;
1002
- preload(refs: readonly BlobRef[]): Promise<void>;
1003
- processUploadQueue(options?: SyncularBlobUploadQueueProcessOptions): Promise<{
1004
- uploaded: number;
1005
- failed: number;
1006
- }>;
1007
- getUploadQueueStats(): Promise<SyncularBlobUploadQueueStats>;
1008
- getCacheStats(): Promise<SyncularBlobCacheStats>;
1009
- pruneCache(maxBytes?: number): Promise<number>;
1010
- clearCache(): Promise<void>;
1011
- }
1012
- export interface SyncularRuntimeClient extends SyncularSqlClient {
1013
- setAuthHeaders(headers: SyncularAuthHeaders): Promise<void>;
1014
- issueAuthLease(request: SyncAuthLeaseIssueRequest): Promise<SyncularAuthLeaseRecord>;
1015
- upsertAuthLease(lease: SyncularAuthLeaseRecord): Promise<void>;
1016
- authLease(leaseId: string): Promise<SyncularAuthLeaseRecord | null>;
1017
- activeAuthLeases(actorId?: string | null, nowMs?: number): Promise<SyncularAuthLeaseRecord[]>;
1018
- setFieldEncryption(config: SyncularFieldEncryptionConfig | null): Promise<void>;
1019
- setEncryptedCrdt(config: SyncularEncryptedCrdtConfig | null): Promise<void>;
1020
- setBlobEncryption(config: SyncularBlobEncryptionConfig | null): Promise<void>;
1021
- startRealtime(options?: boolean | SyncularRealtimeOptions): Promise<void>;
1022
- stopRealtime(): Promise<void>;
1023
- setSubscriptions(subscriptions: readonly SyncularSubscriptionSpec[]): Promise<void>;
1024
- forceSubscriptionsBootstrap(subscriptionIds?: readonly string[]): Promise<number>;
1025
- applyMutation(operation: SyncOperation, localRow?: unknown): Promise<string>;
1026
- applyLeasedMutation(operation: SyncOperation, localRow?: unknown): Promise<string>;
1027
- applyMutationsBatch(operations: Array<{
1028
- operation: SyncOperation;
1029
- localRow?: unknown | null;
1030
- }>): Promise<string[]>;
1031
- applyMutationsCommit(operations: Array<{
1032
- operation: SyncOperation;
1033
- localRow?: unknown | null;
1034
- }>): Promise<string>;
1035
- applyLeasedMutationsCommit(operations: Array<{
1036
- operation: SyncOperation;
1037
- localRow?: unknown | null;
1038
- }>): Promise<string>;
1039
- syncPull(options?: SyncularSyncRequestOptions): Promise<SyncularSyncResult>;
1040
- syncPush(options?: SyncularSyncRequestOptions): Promise<SyncularSyncResult>;
1041
- syncOnce(options?: SyncularSyncRequestOptions): Promise<SyncularSyncResult>;
1042
- resumeFromBackground(options?: SyncularSyncRequestOptions): Promise<SyncularSyncResult>;
1043
- conflictSummaries(): Promise<SyncularConflictSummary[]>;
1044
- retryConflictKeepLocal(id: string): Promise<string>;
1045
- resolveConflict(id: string, resolution: SyncularConflictResolution): Promise<void>;
1046
- listTable<Row extends Record<string, unknown> = Record<string, unknown>>(table: string): Promise<Row[]>;
1047
- storeBlob(data: Uint8Array, options?: SyncularBlobStoreOptions): Promise<BlobRef>;
1048
- retrieveBlob(ref: BlobRef): Promise<Uint8Array>;
1049
- isBlobLocal(hash: string): Promise<boolean>;
1050
- processBlobUploadQueue(options?: SyncularBlobUploadQueueProcessOptions): Promise<{
1051
- uploaded: number;
1052
- failed: number;
1053
- }>;
1054
- blobUploadQueueStats(): Promise<SyncularBlobUploadQueueStats>;
1055
- blobCacheStats(): Promise<SyncularBlobCacheStats>;
1056
- pruneBlobCache(maxBytes?: number): Promise<number>;
1057
- clearBlobCache(): Promise<void>;
1058
- compactStorage(options?: SyncularStorageCompactionOptions): Promise<SyncularStorageCompactionReport>;
1059
- generatedSchemaState(): Promise<SyncularSchemaState>;
1060
- localHealthCheck(): Promise<SyncularLocalHealthReport>;
1061
- repairLocalHealth(request: SyncularLocalHealthRepairRequest): Promise<SyncularLocalHealthRepairReport>;
1062
- resetLocalSyncState(request?: SyncularLocalSyncResetRequest): Promise<SyncularLocalSyncResetReport>;
1063
- exportLocalSupportBundle(): Promise<SyncularLocalSupportBundle>;
1064
- importLocalSupportBundle(bundle: SyncularLocalSupportBundle | string): Promise<SyncularLocalSupportBundleImportReport>;
1065
- buildYjsTextUpdate(args: SyncularBuildYjsTextUpdateArgs): Promise<SyncularBuildYjsTextUpdateResult>;
1066
- applyYjsTextUpdates(args: SyncularApplyYjsTextUpdatesArgs): Promise<SyncularApplyYjsTextUpdatesResult>;
1067
- applyYjsEnvelopeToPayload(args: SyncularApplyYjsEnvelopeToPayloadArgs): Promise<Record<string, unknown>>;
1068
- openCrdtField(request: SyncularCrdtFieldRequest): Promise<SyncularCrdtFieldDescriptor>;
1069
- applyCrdtFieldText(request: SyncularCrdtFieldTextRequest): Promise<SyncularCrdtFieldWriteReceipt>;
1070
- applyCrdtFieldYjsUpdate(request: SyncularCrdtFieldYjsUpdateRequest): Promise<SyncularCrdtFieldWriteReceipt>;
1071
- materializeCrdtField(request: SyncularCrdtFieldRequest): Promise<SyncularCrdtFieldMaterialization>;
1072
- crdtDocumentSnapshot(request: SyncularCrdtFieldRequest): Promise<SyncularCrdtDocumentSnapshot>;
1073
- crdtUpdateLog(request: SyncularCrdtFieldRequest & {
1074
- limit?: number;
1075
- }): Promise<SyncularCrdtUpdateLogEntry[]>;
1076
- snapshotCrdtFieldStateVector(request: SyncularCrdtFieldRequest): Promise<{
1077
- stateVectorBase64: string;
1078
- }>;
1079
- compactCrdtField(request: SyncularCrdtFieldCompactionRequest): Promise<SyncularCrdtFieldCompactionReceipt>;
1080
- encryptionHelper(method: SyncularEncryptionHelperMethod, args?: unknown): Promise<unknown>;
1081
- runtimeInfo(): Promise<SyncularRuntimeInfo>;
1082
- connectionState(): SyncularConnectionState;
1083
- lifecycleState(): SyncularLifecycleState;
1084
- diagnosticSnapshot(): Promise<SyncularDiagnosticSnapshot>;
1085
- addDiagnosticListener(listener: SyncularDiagnosticSink): () => void;
1086
- addEventListener<T extends SyncularClientEventType>(event: T, listener: SyncularClientEventSink<T>): () => void;
1087
- addRowsChangedListener(listener: SyncularRowsChangedSink): () => void;
1088
- getPresence<TMetadata = Record<string, unknown>>(scopeKey: string): SyncularPresenceEntry<TMetadata>[];
1089
- joinPresence(scopeKey: string, metadata?: Record<string, unknown>): void;
1090
- leavePresence(scopeKey: string): void;
1091
- updatePresenceMetadata(scopeKey: string, metadata: Record<string, unknown>): void;
1092
- addPresenceListener<TMetadata = Record<string, unknown>>(listener: SyncularPresenceSink<TMetadata>): () => void;
1093
- addLiveQueryListener(queryId: string, listener: (event: SyncularLiveQueryEvent<Record<string, unknown>>) => void): void;
1094
- removeLiveQueryListener(queryId: string): void;
1095
- }
1096
- //# sourceMappingURL=types.d.ts.map