@lix-js/sdk 0.16.0 → 0.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,7 +31,7 @@ await lix.close();
31
31
  | Neither | Fresh in-memory repository |
32
32
  | `storage` | Local repository, initialized if empty |
33
33
  | `server` | Execute against an existing hosted repository |
34
- | `storage` and `server` | Synchronized local reads; mutations execute on the server |
34
+ | `storage` and `server` | Local reads and writes with background synchronization |
35
35
 
36
36
  Creation and deletion are explicit server operations:
37
37
 
@@ -64,8 +64,8 @@ execution do not require streaming uploads.
64
64
 
65
65
  ## Synchronized local repositories
66
66
 
67
- Combine storage with a server to keep a synchronized local read replica.
68
- Certified current-state reads can execute locally; mutations execute on the
67
+ Combine storage with a server to keep a synchronized local replica. Reads and
68
+ writes execute locally; background synchronization exchanges changes with the
69
69
  server:
70
70
 
71
71
  ```ts
@@ -83,12 +83,59 @@ const lix = await openLix({
83
83
  });
84
84
  ```
85
85
 
86
- A successful mutation confirms server acceptance. The local replica receives
87
- the resulting certified state automatically; older history and binary content
88
- load when needed. Connected mutations require the server, and cached reads may
89
- also need fresh server certification.
86
+ A successful mutation confirms a local commit; it does not confirm server
87
+ acceptance. Pending commits upload in the background. Cached reads and local
88
+ writes work offline; older history and binary content load when needed.
90
89
  See [Collaboration and Sync](https://lix.dev/docs/collaboration-and-sync).
91
90
 
91
+ ### Upgrading a local replica
92
+
93
+ Keep the same storage name across SDK upgrades. For a supported older synchronized
94
+ replica, Lix preserves its existing storage generation and bootstraps a separate
95
+ generation from the same authoritative repository and account. The replacement
96
+ becomes active only after bootstrap and validation succeed. Pending work and
97
+ local-only rows remain in the preserved generation; they do not block opening the
98
+ current server state. An upgrade requires a server connection and enough local
99
+ storage for both generations.
100
+
101
+ Recovery is explicit and separate from opening:
102
+
103
+ ```ts
104
+ const sources = await lix.replicaRecoverySources();
105
+ for (const source of sources.filter((source) => source.recoveryRequired)) {
106
+ const exported = await lix.exportReplicaRecovery(source.id);
107
+ // Save exported as JSON when the user requests a portable recovery copy.
108
+ console.log(exported.unresolved);
109
+
110
+ const receipt = await lix.recoverReplica(source.id);
111
+ // Present these separate branches for review; the active branch is unchanged.
112
+ console.log(receipt.branchIds, receipt.restoredRows, receipt.unresolved);
113
+ }
114
+ ```
115
+
116
+ `exportReplicaRecovery()` captures available logical rows, blob contents, and
117
+ original branch/checkpoint coordinates. `recoverReplica()` restores supported
118
+ tracked rows into separate recovery branches. It does not automatically publish
119
+ local-only rows or merge recovered work into the active branch. Inspect
120
+ `unresolved`: original history and any unavailable content remain in the retained
121
+ source. A recovery receipt describes local restoration, not a server durability
122
+ acknowledgement. Neither operation deletes the retained generation, and retries
123
+ reuse recovery branch receipts rather than overwriting previously recovered work.
124
+
125
+ Recovery export currently allows up to 100,000 logical rows across all branches,
126
+ 64 MiB per blob, and 128 MiB of blob content in total. Unfinished upload parts
127
+ have a separate 128 MiB content budget. A row-limit or upload-limit error leaves
128
+ the source intact; omitted blob content is identified in `unresolved`. Exported
129
+ JSON can be larger than these content budgets because binary data uses base64.
130
+ This recovery file is not a complete repository backup.
131
+
132
+ These methods require a local storage-backed handle; remote-only handles reject
133
+ with `LIX_ERROR_LOCAL_STORAGE_REQUIRED`. Do not clear browser storage to resolve
134
+ upgrade or recovery errors. Browser storage eviction or an unsupported old format
135
+ can still require external recovery; retaining bytes alone is not proof that all
136
+ work has been recovered. Standalone and authoritative repositories continue to
137
+ use history-preserving format migrations.
138
+
92
139
  ## Remote repositories
93
140
 
94
141
  Use the same Lix client as a thin client against a hosted repository:
@@ -1,4 +1,4 @@
1
- import type { CreateBranchOptions, CreateBranchReceipt, UndoReceipt, RedoReceipt, ExecuteOptions, LixBatchOptions, MergeBranchOptions, MergeBranchPreview, MergeBranchReceipt, SwitchBranchOptions, SwitchBranchReceipt, LixTelemetrySpan, LixTelemetryParentContext, LixOpenProgress, LixOpenReport, OpenAnotherSessionOptions, ResultColumn } from "./types.js";
1
+ import type { CommitSpan, CreateBranchOptions, CreateBranchReceipt, UndoReceipt, RedoReceipt, ExecuteOptions, LixBatchOptions, MergeBranchOptions, MergeBranchPreview, MergeBranchReceipt, SwitchBranchOptions, SwitchBranchReceipt, LixTelemetrySpan, LixTelemetryParentContext, LixOpenProgress, LixOpenReport, ReplicaRecoverySource, ReplicaRecoveryExport, ReplicaRecoveryReceipt, OpenAnotherSessionOptions, ResultColumn } from "./types.js";
2
2
  import type { NativeLixValue } from "./value.js";
3
3
  import type { LixStorageProvider } from "./storage-adapter.js";
4
4
  export type SyncServerBindingOptions = {
@@ -18,6 +18,7 @@ export type BindingExecuteResult = {
18
18
  message: string;
19
19
  hint?: string;
20
20
  }>;
21
+ commit?: CommitSpan;
21
22
  };
22
23
  export type BindingObserveEvent = {
23
24
  sequence: number;
@@ -49,6 +50,9 @@ export type LixBinding = {
49
50
  executeBatch(statements: BindingBatchStatement[], options?: LixBatchOptions): Promise<BindingExecuteResult[]>;
50
51
  observe(sql: string, params: BindingParam[]): Promise<ObserveEventsBinding>;
51
52
  beginTransaction(): Promise<LixTransactionBinding>;
53
+ replicaRecoverySources(): Promise<ReplicaRecoverySource[]>;
54
+ exportReplicaRecovery(id: string): Promise<ReplicaRecoveryExport>;
55
+ recoverReplica(id: string): Promise<ReplicaRecoveryReceipt>;
52
56
  activeBranchId(): Promise<string>;
53
57
  activeAccountId(): Promise<string>;
54
58
  createBranch(options: CreateBranchOptions): Promise<CreateBranchReceipt>;
package/dist/index.d.ts CHANGED
@@ -3,5 +3,5 @@ export type { LixStorage, LixStorageBound, LixStorageChangeWatch, LixStorageComm
3
3
  export { LixStorageError } from "./storage-adapter.js";
4
4
  export { bundledPluginArchives, type BundledPluginArchive, } from "./bundled-plugins.js";
5
5
  export { Value } from "./value.js";
6
- export type { CreateBranchOptions, CreateBranchReceipt, RedoReceipt, ExecuteOptions, ExecuteResult, ExecuteBatchResult, LixBatchOptions, LixBatchStatement, JsonValue, LixValue, ResultArrayRow, ResultColumn, ResultColumnType, ResultObjectRow, ResultRow, MergeBranchOptions, MergeBranchOutcome, MergeBranchPreview, MergeBranchReceipt, MergeChangeStats, MergeConflict, MergeConflictSide, ObserveEvent, OpenLixOptions, OpenAnotherSessionOptions, LixTelemetryOptions, LixTelemetryParentContext, LixTelemetrySpan, LixTelemetrySpanLink, LixOpenMigrationReport, LixOpenPhase, LixOpenProgress, LixOpenProgressOptions, LixOpenReport, RemoteLixFetch, LixServerOptions, HostedLix, CreateLixOptions, DeleteLixOptions, UndoReceipt, SqlParam, SwitchBranchOptions, SwitchBranchReceipt, } from "./types.js";
6
+ export type { CreateBranchOptions, CreateBranchReceipt, RedoReceipt, CommitSpan, ExecuteOptions, ExecuteResult, ExecuteBatchResult, LixBatchOptions, LixBatchStatement, JsonValue, LixValue, ResultArrayRow, ResultColumn, ResultColumnType, ResultObjectRow, ResultRow, MergeBranchOptions, MergeBranchOutcome, MergeBranchPreview, MergeBranchReceipt, MergeChangeStats, MergeConflict, MergeConflictSide, ObserveEvent, OpenLixOptions, OpenAnotherSessionOptions, LixTelemetryOptions, LixTelemetryParentContext, LixTelemetrySpan, LixTelemetrySpanLink, LixOpenMigrationReport, LixOpenPhase, LixOpenProgress, LixOpenProgressOptions, LixOpenReport, ReplicaRecoverySource, ReplicaRecoveryRow, ReplicaRecoveryBranch, ReplicaRecoveryBlob, ReplicaRecoveryFile, ReplicaRecoveryExport, ReplicaRecoveryReceipt, RemoteLixFetch, LixServerOptions, HostedLix, CreateLixOptions, DeleteLixOptions, UndoReceipt, SqlParam, SwitchBranchOptions, SwitchBranchReceipt, } from "./types.js";
7
7
  export { createLix, deleteLix } from "./hosted-lix.js";
package/dist/lix.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { LixBinding, LixTransactionBinding, ObserveEventsBinding } from "./binding-types.js";
2
- import type { CreateBranchOptions, CreateBranchReceipt, RedoReceipt, ExecuteOptions, ExecuteResult, ExecuteBatchResult, LixBatchOptions, LixBatchStatement, MergeBranchOptions, MergeBranchPreview, MergeBranchReceipt, ObserveEvent, OpenAnotherSessionOptions, LixOpenReport, SqlParam, ResultArrayRow, ResultObjectRow, ResultRow, SwitchBranchOptions, SwitchBranchReceipt, UndoReceipt } from "./types.js";
2
+ import type { CreateBranchOptions, CreateBranchReceipt, RedoReceipt, ExecuteOptions, ExecuteResult, ExecuteBatchResult, LixBatchOptions, LixBatchStatement, MergeBranchOptions, MergeBranchPreview, MergeBranchReceipt, ObserveEvent, OpenAnotherSessionOptions, LixOpenReport, ReplicaRecoverySource, ReplicaRecoveryExport, ReplicaRecoveryReceipt, SqlParam, ResultArrayRow, ResultObjectRow, ResultRow, SwitchBranchOptions, SwitchBranchReceipt, UndoReceipt } from "./types.js";
3
3
  /** @internal Used by createLix without adding another method to Lix. */
4
4
  export declare function createHostedFromLix(lix: Lix, server: () => Promise<import("./binding-types.js").HostedServerBindingOptions>): Promise<import("./types.js").HostedLix>;
5
5
  export declare class Lix {
@@ -26,6 +26,12 @@ export declare class Lix {
26
26
  executeBatch(statements: readonly LixBatchStatement[], options?: LixBatchOptions): Promise<readonly ExecuteBatchResult<ResultRow>[]>;
27
27
  observe(sql: string, params?: SqlParam[]): ObserveEvents;
28
28
  beginTransaction(): Promise<LixTransaction>;
29
+ /** Lists preserved generations belonging to this local repository. */
30
+ replicaRecoverySources(): Promise<ReplicaRecoverySource[]>;
31
+ /** Exports retained work without deleting or changing its source. */
32
+ exportReplicaRecovery(id: string): Promise<ReplicaRecoveryExport>;
33
+ /** Restores supported rows onto separate recovery branches; preserves the source. */
34
+ recoverReplica(id: string): Promise<ReplicaRecoveryReceipt>;
29
35
  activeBranchId(): Promise<string>;
30
36
  activeAccountId(): Promise<string>;
31
37
  /** Subscribes to successful branch switches made through this Lix handle. */
@@ -52,7 +58,6 @@ export declare class ObserveEvents {
52
58
  export declare class LixTransaction {
53
59
  private readonly binding;
54
60
  private readonly onFinish;
55
- private finishPromise;
56
61
  private finished;
57
62
  constructor(binding: LixTransactionBinding, onFinish?: () => void);
58
63
  execute(sql: string, params: SqlParam[] | undefined, options: ExecuteOptions & {
package/dist/lix.js CHANGED
@@ -95,6 +95,18 @@ export class Lix {
95
95
  }
96
96
  });
97
97
  }
98
+ /** Lists preserved generations belonging to this local repository. */
99
+ async replicaRecoverySources() {
100
+ return this.#runOperation(() => this.binding.replicaRecoverySources());
101
+ }
102
+ /** Exports retained work without deleting or changing its source. */
103
+ async exportReplicaRecovery(id) {
104
+ return this.#runOperation(() => this.binding.exportReplicaRecovery(id));
105
+ }
106
+ /** Restores supported rows onto separate recovery branches; preserves the source. */
107
+ async recoverReplica(id) {
108
+ return this.#runOperation(() => this.binding.recoverReplica(id));
109
+ }
98
110
  async activeBranchId() {
99
111
  return this.#runOperation(() => this.binding.activeBranchId());
100
112
  }
@@ -330,7 +342,6 @@ export class ObserveEvents {
330
342
  export class LixTransaction {
331
343
  binding;
332
344
  onFinish;
333
- finishPromise;
334
345
  finished = false;
335
346
  constructor(binding, onFinish = () => undefined) {
336
347
  this.binding = binding;
@@ -338,6 +349,8 @@ export class LixTransaction {
338
349
  transactionFinalizer.register(this, { transaction: binding, onFinish: this.onFinish }, this);
339
350
  }
340
351
  async execute(sql, params = [], options) {
352
+ if (this.finished)
353
+ throw transactionClosedError();
341
354
  assertExecuteArgs("lixTransaction", sql, params, options);
342
355
  const { rowMode = "object", ...bindingOptions } = options ?? {};
343
356
  return wrapExecuteResult(await this.binding.execute(sql, params.map((param, index) => toNativeValue(normalizeParam(param, index))), bindingOptions), rowMode);
@@ -351,24 +364,21 @@ export class LixTransaction {
351
364
  async finish(kind) {
352
365
  if (this.finished)
353
366
  throw transactionClosedError();
354
- if (!this.finishPromise) {
355
- this.finishPromise = (async () => {
356
- try {
357
- if (kind === "transaction.commit")
358
- await this.binding.commit();
359
- else
360
- await this.binding.rollback();
361
- }
362
- finally {
363
- // A terminal binding call consumes the underlying transaction even
364
- // when its durable commit or rollback reports an error.
365
- this.finished = true;
366
- transactionFinalizer.unregister(this);
367
- this.onFinish();
368
- }
369
- })();
367
+ // The first terminal call owns the handle immediately. In particular,
368
+ // a concurrent rollback must never report a pending commit's success.
369
+ this.finished = true;
370
+ try {
371
+ if (kind === "transaction.commit")
372
+ await this.binding.commit();
373
+ else
374
+ await this.binding.rollback();
375
+ }
376
+ finally {
377
+ // Keep the parent transaction lease until the binding settles. A
378
+ // terminal call consumes the handle even when it reports an error.
379
+ transactionFinalizer.unregister(this);
380
+ this.onFinish();
370
381
  }
371
- await this.finishPromise;
372
382
  }
373
383
  }
374
384
  function transactionClosedError() {
@@ -98,10 +98,6 @@ export type LixStoragePrecondition = {
98
98
  kind: "rangeEmpty";
99
99
  space: LixStorageSpace;
100
100
  range: LixStorageKeyRange;
101
- } | {
102
- kind: "branchEquals";
103
- refKey: Uint8Array;
104
- expected: Uint8Array;
105
101
  };
106
102
  export type LixStorageGetManyRequest = {
107
103
  space: LixStorageSpace;
package/dist/types.d.ts CHANGED
@@ -75,6 +75,61 @@ export type LixOpenReport = {
75
75
  initialized: boolean;
76
76
  migration?: LixOpenMigrationReport;
77
77
  };
78
+ /** A retained local generation. Presence does not mean recovery is complete. */
79
+ export type ReplicaRecoverySource = {
80
+ id: string;
81
+ sourceFormat: number;
82
+ repositoryId: string;
83
+ accountId: string;
84
+ recoveryRequired: boolean;
85
+ };
86
+ export type ReplicaRecoveryRow = {
87
+ rowPk: JsonValue;
88
+ schemaKey: string;
89
+ fileId: string | null;
90
+ snapshot: JsonValue;
91
+ metadata: JsonValue;
92
+ deleted: boolean;
93
+ untracked: boolean;
94
+ global: boolean;
95
+ changeId: string | null;
96
+ commitId: string | null;
97
+ };
98
+ export type ReplicaRecoveryBranch = {
99
+ branchId: string;
100
+ headCommitId: string;
101
+ checkpointCommitId: string | null;
102
+ rows: ReplicaRecoveryRow[];
103
+ };
104
+ export type ReplicaRecoveryBlob = {
105
+ id: string;
106
+ contentBase64: string;
107
+ };
108
+ export type ReplicaRecoveryFile = {
109
+ branchId: string;
110
+ id: string;
111
+ path: string;
112
+ untracked: boolean;
113
+ blobId: string | null;
114
+ };
115
+ /** Portable recovery data; unresolved entries identify data not reconstructed. */
116
+ export type ReplicaRecoveryExport = {
117
+ version: number;
118
+ source: ReplicaRecoverySource;
119
+ branches: ReplicaRecoveryBranch[];
120
+ commits: JsonValue[];
121
+ uploads: JsonValue[];
122
+ blobs: ReplicaRecoveryBlob[];
123
+ files: ReplicaRecoveryFile[];
124
+ unresolved: string[];
125
+ };
126
+ /** Local recovery result. This does not acknowledge durable server storage. */
127
+ export type ReplicaRecoveryReceipt = {
128
+ branchIds: string[];
129
+ restoredFiles: number;
130
+ restoredRows: number;
131
+ unresolved: string[];
132
+ };
78
133
  export type LixOpenProgressOptions = {
79
134
  /** Observes local inspection, automatic migration, and opening. */
80
135
  onProgress?(progress: LixOpenProgress): void;
@@ -164,6 +219,18 @@ export type ResultColumn = {
164
219
  export type ResultObjectRow = Record<string, unknown>;
165
220
  export type ResultArrayRow = unknown[];
166
221
  export type ResultRow = ResultObjectRow | ResultArrayRow;
222
+ /**
223
+ * The active-branch commits a write moved between.
224
+ *
225
+ * `before` is the active branch's head before the write and `after` the head
226
+ * it published, so `lix_diff('lix_file', before, after)` is exactly what the
227
+ * write changed. A write that published no commit on the active branch
228
+ * reports both ids equal; a restore reports the commit it moved the head to.
229
+ */
230
+ export type CommitSpan = {
231
+ before: string;
232
+ after: string;
233
+ };
167
234
  export type ExecuteResult<TRow extends object = ResultObjectRow> = {
168
235
  statementIndex?: number;
169
236
  label?: string;
@@ -175,6 +242,15 @@ export type ExecuteResult<TRow extends object = ResultObjectRow> = {
175
242
  message: string;
176
243
  hint?: string;
177
244
  }>;
245
+ /**
246
+ * Present on every auto-committed write statement, including `RETURNING`
247
+ * writes, and on every statement of a written batch (all carry the
248
+ * batch's one span, read statements included). Absent for read
249
+ * statements outside a written batch, read-only batches, statements
250
+ * inside an explicit transaction (whose commit is the write), and the
251
+ * first commit on a branch that had no head yet.
252
+ */
253
+ commit?: CommitSpan;
178
254
  };
179
255
  export type ExecuteBatchResult<TRow extends object = ResultObjectRow> = ExecuteResult<TRow> & {
180
256
  statementIndex: number;
@@ -13,6 +13,7 @@ export class WasmLix {
13
13
  createHosted(server: any): Promise<any>;
14
14
  execute(sql: string, params: any, options?: any | null): Promise<any>;
15
15
  executeBatch(statements: any, options?: any | null): Promise<any>;
16
+ exportReplicaRecovery(id: string): Promise<any>;
16
17
  exportSnapshot(): WasmSnapshotExport;
17
18
  importFilesystemPaths(_paths: any): Promise<void>;
18
19
  mergeBranch(options: any): Promise<any>;
@@ -20,7 +21,9 @@ export class WasmLix {
20
21
  observe(sql: string, params: any): Promise<WasmObserveEvents>;
21
22
  openAnotherSession(options: any): Promise<WasmLix>;
22
23
  openReport(): any;
24
+ recoverReplica(id: string): Promise<any>;
23
25
  redo(): Promise<any>;
26
+ replicaRecoverySources(): Promise<any>;
24
27
  setTelemetryParent(parent?: any | null): void;
25
28
  switchBranch(options: any): Promise<any>;
26
29
  syncDiskToLix(): Promise<void>;
@@ -56,13 +59,16 @@ export class WasmRemoteLix {
56
59
  createBranch(options: any): Promise<any>;
57
60
  execute(sql: string, params: any, options?: any | null): Promise<any>;
58
61
  executeBatch(statements: any, options?: any | null): Promise<any>;
62
+ exportReplicaRecovery(_id: string): Promise<any>;
59
63
  exportSnapshot(): WasmSnapshotExport;
60
64
  importFilesystemPaths(_paths: any): Promise<void>;
61
65
  mergeBranch(options: any): Promise<any>;
62
66
  mergeBranchPreview(options: any): Promise<any>;
63
67
  observe(sql: string, params: any): Promise<WasmRemoteObserveEvents>;
64
68
  openAnotherSession(options: any): Promise<WasmRemoteLix>;
69
+ recoverReplica(_id: string): Promise<any>;
65
70
  redo(): Promise<any>;
71
+ replicaRecoverySources(): Promise<any>;
66
72
  setTelemetryParent(_parent?: any | null): void;
67
73
  switchBranch(options: any): Promise<any>;
68
74
  syncDiskToLix(): Promise<void>;
@@ -146,6 +152,7 @@ export interface InitOutput {
146
152
  readonly wasmlix_createHosted: (a: number, b: number) => number;
147
153
  readonly wasmlix_execute: (a: number, b: number, c: number, d: number, e: number) => number;
148
154
  readonly wasmlix_executeBatch: (a: number, b: number, c: number) => number;
155
+ readonly wasmlix_exportReplicaRecovery: (a: number, b: number, c: number) => number;
149
156
  readonly wasmlix_exportSnapshot: (a: number) => number;
150
157
  readonly wasmlix_importFilesystemPaths: (a: number, b: number) => number;
151
158
  readonly wasmlix_mergeBranch: (a: number, b: number) => number;
@@ -153,7 +160,9 @@ export interface InitOutput {
153
160
  readonly wasmlix_observe: (a: number, b: number, c: number, d: number) => number;
154
161
  readonly wasmlix_openAnotherSession: (a: number, b: number) => number;
155
162
  readonly wasmlix_openReport: (a: number, b: number) => void;
163
+ readonly wasmlix_recoverReplica: (a: number, b: number, c: number) => number;
156
164
  readonly wasmlix_redo: (a: number) => number;
165
+ readonly wasmlix_replicaRecoverySources: (a: number) => number;
157
166
  readonly wasmlix_setTelemetryParent: (a: number, b: number, c: number) => void;
158
167
  readonly wasmlix_switchBranch: (a: number, b: number) => number;
159
168
  readonly wasmlix_syncDiskToLix: (a: number) => number;
@@ -171,13 +180,16 @@ export interface InitOutput {
171
180
  readonly wasmremotelix_createBranch: (a: number, b: number) => number;
172
181
  readonly wasmremotelix_execute: (a: number, b: number, c: number, d: number, e: number) => number;
173
182
  readonly wasmremotelix_executeBatch: (a: number, b: number, c: number) => number;
183
+ readonly wasmremotelix_exportReplicaRecovery: (a: number, b: number, c: number) => number;
174
184
  readonly wasmremotelix_exportSnapshot: (a: number) => number;
175
185
  readonly wasmremotelix_importFilesystemPaths: (a: number, b: number) => number;
176
186
  readonly wasmremotelix_mergeBranch: (a: number, b: number) => number;
177
187
  readonly wasmremotelix_mergeBranchPreview: (a: number, b: number) => number;
178
188
  readonly wasmremotelix_observe: (a: number, b: number, c: number, d: number) => number;
179
189
  readonly wasmremotelix_openAnotherSession: (a: number, b: number) => number;
190
+ readonly wasmremotelix_recoverReplica: (a: number, b: number, c: number) => number;
180
191
  readonly wasmremotelix_redo: (a: number) => number;
192
+ readonly wasmremotelix_replicaRecoverySources: (a: number) => number;
181
193
  readonly wasmremotelix_setTelemetryParent: (a: number, b: number) => void;
182
194
  readonly wasmremotelix_switchBranch: (a: number, b: number) => number;
183
195
  readonly wasmremotelix_syncDiskToLix: (a: number) => number;
@@ -194,10 +206,10 @@ export interface InitOutput {
194
206
  readonly wasmsnapshotrestore_finish: (a: number) => number;
195
207
  readonly wasmsnapshotrestore_isComplete: (a: number) => number;
196
208
  readonly wasmsnapshotrestore_write: (a: number, b: number, c: number) => number;
197
- readonly __wasm_bindgen_func_elem_95597: (a: number, b: number, c: number, d: number) => void;
198
- readonly __wasm_bindgen_func_elem_95599: (a: number, b: number, c: number, d: number) => void;
199
- readonly __wasm_bindgen_func_elem_17533: (a: number, b: number, c: number) => number;
200
- readonly __wasm_bindgen_func_elem_17532: (a: number, b: number) => void;
209
+ readonly __wasm_bindgen_func_elem_95812: (a: number, b: number, c: number, d: number) => void;
210
+ readonly __wasm_bindgen_func_elem_95814: (a: number, b: number, c: number, d: number) => void;
211
+ readonly __wasm_bindgen_func_elem_17860: (a: number, b: number, c: number) => number;
212
+ readonly __wasm_bindgen_func_elem_17859: (a: number, b: number) => void;
201
213
  readonly __wbindgen_export: (a: number, b: number) => number;
202
214
  readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
203
215
  readonly __wbindgen_export3: (a: number) => void;