@powersync/web 0.0.0-dev-20260503073249 → 0.0.0-dev-20260630141119

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 (201) hide show
  1. package/bin/powersync.cjs +1 -1
  2. package/dist/index.react_native_web.js +1879 -0
  3. package/dist/index.react_native_web.js.map +1 -0
  4. package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js +2 -0
  5. package/dist/worker/AccessHandlePoolVFS-BPUHfZME.js.map +1 -0
  6. package/dist/worker/FacadeVFS-d1ZDvud7.js +2 -0
  7. package/dist/worker/FacadeVFS-d1ZDvud7.js.map +1 -0
  8. package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js +2 -0
  9. package/dist/worker/IDBBatchAtomicVFS-DbkDb777.js.map +1 -0
  10. package/dist/worker/OPFSCoopSyncVFS-DRKedN0p.js +2 -0
  11. package/dist/worker/OPFSCoopSyncVFS-DRKedN0p.js.map +1 -0
  12. package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js +2 -0
  13. package/dist/worker/OPFSWriteAheadVFS-BzodSqNq.js.map +1 -0
  14. package/dist/worker/mc-wa-sqlite-DiBqIVE5.js +2 -0
  15. package/dist/worker/mc-wa-sqlite-DiBqIVE5.js.map +1 -0
  16. package/dist/worker/mc-wa-sqlite-async-DUEhO9ef.js +2 -0
  17. package/dist/worker/mc-wa-sqlite-async-DUEhO9ef.js.map +1 -0
  18. package/dist/worker/wa-sqlite-BlSx7-_P.js +2 -0
  19. package/dist/worker/wa-sqlite-BlSx7-_P.js.map +1 -0
  20. package/dist/worker/wa-sqlite-async-BdR24Ucf.js +2 -0
  21. package/dist/worker/wa-sqlite-async-BdR24Ucf.js.map +1 -0
  22. package/dist/worker/websockets-Q8W_lerF.js +9 -0
  23. package/dist/worker/websockets-Q8W_lerF.js.map +1 -0
  24. package/dist/worker/worker.js +7 -0
  25. package/dist/worker/worker.js.map +1 -0
  26. package/lib/{src/attachments → attachments}/IndexDBFileSystemAdapter.js +1 -0
  27. package/lib/attachments/IndexDBFileSystemAdapter.js.map +1 -0
  28. package/lib/{src/db → db}/NavigatorTriggerClaimManager.d.ts +1 -1
  29. package/lib/{src/db → db}/NavigatorTriggerClaimManager.js +1 -0
  30. package/lib/db/NavigatorTriggerClaimManager.js.map +1 -0
  31. package/lib/db/PowerSyncDatabase.d.ts +67 -0
  32. package/lib/{src/db → db}/PowerSyncDatabase.js +48 -61
  33. package/lib/db/PowerSyncDatabase.js.map +1 -0
  34. package/lib/db/adapters/AsyncWebAdapter.d.ts +32 -0
  35. package/lib/{src/db → db}/adapters/AsyncWebAdapter.js +15 -14
  36. package/lib/db/adapters/AsyncWebAdapter.js.map +1 -0
  37. package/lib/db/adapters/SSRDBAdapter.d.ts +17 -0
  38. package/lib/db/adapters/SSRDBAdapter.js +37 -0
  39. package/lib/db/adapters/SSRDBAdapter.js.map +1 -0
  40. package/lib/{src/db → db}/adapters/WebDBAdapter.d.ts +1 -1
  41. package/lib/db/adapters/WebDBAdapter.js +2 -0
  42. package/lib/db/adapters/WebDBAdapter.js.map +1 -0
  43. package/lib/db/adapters/options.d.ts +87 -0
  44. package/lib/db/adapters/options.js +6 -0
  45. package/lib/db/adapters/options.js.map +1 -0
  46. package/lib/db/adapters/resolveAndValidateOptions.d.ts +5 -0
  47. package/lib/db/adapters/resolveAndValidateOptions.js +33 -0
  48. package/lib/db/adapters/resolveAndValidateOptions.js.map +1 -0
  49. package/lib/{src/db → db}/adapters/wa-sqlite/ConcurrentConnection.d.ts +3 -4
  50. package/lib/{src/db → db}/adapters/wa-sqlite/ConcurrentConnection.js +3 -2
  51. package/lib/db/adapters/wa-sqlite/ConcurrentConnection.js.map +1 -0
  52. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseClient.d.ts +4 -4
  53. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseClient.js +12 -37
  54. package/lib/db/adapters/wa-sqlite/DatabaseClient.js.map +1 -0
  55. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseServer.d.ts +5 -5
  56. package/lib/{src/db → db}/adapters/wa-sqlite/DatabaseServer.js +12 -7
  57. package/lib/db/adapters/wa-sqlite/DatabaseServer.js.map +1 -0
  58. package/lib/{src/db → db}/adapters/wa-sqlite/RawSqliteConnection.d.ts +22 -12
  59. package/lib/{src/db → db}/adapters/wa-sqlite/RawSqliteConnection.js +12 -10
  60. package/lib/db/adapters/wa-sqlite/RawSqliteConnection.js.map +1 -0
  61. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +18 -0
  62. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +131 -0
  63. package/lib/db/adapters/wa-sqlite/WASQLiteOpenFactory.js.map +1 -0
  64. package/lib/{src/db → db}/adapters/wa-sqlite/vfs.js +1 -0
  65. package/lib/db/adapters/wa-sqlite/vfs.js.map +1 -0
  66. package/lib/{src/db → db}/sync/SSRWebStreamingSyncImplementation.d.ts +4 -8
  67. package/lib/{src/db → db}/sync/SSRWebStreamingSyncImplementation.js +5 -11
  68. package/lib/db/sync/SSRWebStreamingSyncImplementation.js.map +1 -0
  69. package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.d.ts +13 -15
  70. package/lib/{src/db → db}/sync/SharedWebStreamingSyncImplementation.js +32 -69
  71. package/lib/db/sync/SharedWebStreamingSyncImplementation.js.map +1 -0
  72. package/lib/db/sync/WebRemote.d.ts +10 -0
  73. package/lib/db/sync/WebRemote.js +33 -0
  74. package/lib/db/sync/WebRemote.js.map +1 -0
  75. package/lib/{src/db → db}/sync/WebStreamingSyncImplementation.d.ts +2 -4
  76. package/lib/{src/db → db}/sync/WebStreamingSyncImplementation.js +4 -2
  77. package/lib/db/sync/WebStreamingSyncImplementation.js.map +1 -0
  78. package/lib/{src/db → db}/sync/userAgent.js +1 -0
  79. package/lib/db/sync/userAgent.js.map +1 -0
  80. package/lib/{src/index.d.ts → index.d.ts} +1 -3
  81. package/lib/{src/index.js → index.js} +2 -3
  82. package/lib/index.js.map +1 -0
  83. package/lib/{src/shared → shared}/navigator.js +1 -0
  84. package/lib/shared/navigator.js.map +1 -0
  85. package/lib/{src/shared → shared}/tab_close_signal.js +1 -0
  86. package/lib/shared/tab_close_signal.js.map +1 -0
  87. package/lib/worker/SharedWorkerConnectionRequest.d.ts +5 -0
  88. package/lib/worker/SharedWorkerConnectionRequest.js +2 -0
  89. package/lib/worker/SharedWorkerConnectionRequest.js.map +1 -0
  90. package/lib/worker/client.d.ts +15 -0
  91. package/lib/worker/client.js +77 -0
  92. package/lib/worker/client.js.map +1 -0
  93. package/lib/worker/db/MultiDatabaseServer.d.ts +22 -0
  94. package/lib/{src/worker → worker}/db/MultiDatabaseServer.js +26 -15
  95. package/lib/worker/db/MultiDatabaseServer.js.map +1 -0
  96. package/lib/worker/sync/AbstractSharedSyncClientProvider.d.ts +13 -0
  97. package/lib/{src/worker → worker}/sync/AbstractSharedSyncClientProvider.js +1 -0
  98. package/lib/worker/sync/AbstractSharedSyncClientProvider.js.map +1 -0
  99. package/lib/worker/sync/BroadcastLogger.d.ts +27 -0
  100. package/lib/worker/sync/BroadcastLogger.js +65 -0
  101. package/lib/worker/sync/BroadcastLogger.js.map +1 -0
  102. package/lib/{src/worker → worker}/sync/SharedSyncImplementation.d.ts +11 -17
  103. package/lib/{src/worker → worker}/sync/SharedSyncImplementation.js +43 -51
  104. package/lib/worker/sync/SharedSyncImplementation.js.map +1 -0
  105. package/lib/{src/worker → worker}/sync/WorkerClient.d.ts +3 -4
  106. package/lib/{src/worker → worker}/sync/WorkerClient.js +3 -5
  107. package/lib/worker/sync/WorkerClient.js.map +1 -0
  108. package/lib/worker/worker.js +34 -0
  109. package/lib/worker/worker.js.map +1 -0
  110. package/package.json +23 -33
  111. package/src/db/NavigatorTriggerClaimManager.ts +1 -1
  112. package/src/db/PowerSyncDatabase.ts +80 -122
  113. package/src/db/adapters/AsyncWebAdapter.ts +17 -26
  114. package/src/db/adapters/SSRDBAdapter.ts +14 -64
  115. package/src/db/adapters/WebDBAdapter.ts +1 -1
  116. package/src/db/adapters/options.ts +100 -0
  117. package/src/db/adapters/resolveAndValidateOptions.ts +40 -0
  118. package/src/db/adapters/wa-sqlite/ConcurrentConnection.ts +4 -5
  119. package/src/db/adapters/wa-sqlite/DatabaseClient.ts +20 -56
  120. package/src/db/adapters/wa-sqlite/DatabaseServer.ts +15 -12
  121. package/src/db/adapters/wa-sqlite/RawSqliteConnection.ts +35 -24
  122. package/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.ts +63 -126
  123. package/src/db/sync/SSRWebStreamingSyncImplementation.ts +4 -22
  124. package/src/db/sync/SharedWebStreamingSyncImplementation.ts +38 -81
  125. package/src/db/sync/WebRemote.ts +23 -42
  126. package/src/db/sync/WebStreamingSyncImplementation.ts +4 -5
  127. package/src/index.ts +1 -3
  128. package/src/worker/SharedWorkerConnectionRequest.ts +6 -0
  129. package/src/worker/client.ts +100 -0
  130. package/src/worker/db/MultiDatabaseServer.ts +40 -22
  131. package/src/worker/sync/AbstractSharedSyncClientProvider.ts +4 -10
  132. package/src/worker/sync/BroadcastLogger.ts +35 -103
  133. package/src/worker/sync/SharedSyncImplementation.ts +62 -73
  134. package/src/worker/sync/WorkerClient.ts +4 -8
  135. package/src/worker/worker.ts +38 -0
  136. package/dist/index.umd.js +0 -12277
  137. package/dist/index.umd.js.map +0 -1
  138. package/dist/worker/SharedSyncImplementation.umd.js +0 -16655
  139. package/dist/worker/SharedSyncImplementation.umd.js.map +0 -1
  140. package/dist/worker/WASQLiteDB.umd.js +0 -17810
  141. package/dist/worker/WASQLiteDB.umd.js.map +0 -1
  142. package/dist/worker/node_modules_pnpm_bson_6_10_4_node_modules_bson_lib_bson_mjs.umd.js +0 -4646
  143. package/dist/worker/node_modules_pnpm_bson_6_10_4_node_modules_bson_lib_bson_mjs.umd.js.map +0 -1
  144. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-9af0a7.umd.js +0 -31
  145. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-9af0a7.umd.js.map +0 -1
  146. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-bbf5a9.umd.js +0 -31
  147. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_mc-wa-s-bbf5a9.umd.js.map +0 -1
  148. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqli-c26e0f.umd.js +0 -31
  149. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqli-c26e0f.umd.js.map +0 -1
  150. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqlite_mjs.umd.js +0 -31
  151. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_dist_wa-sqlite_mjs.umd.js.map +0 -1
  152. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js +0 -3562
  153. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-2fb422.umd.js.map +0 -1
  154. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js +0 -2478
  155. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-96fb23.umd.js.map +0 -1
  156. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js +0 -1681
  157. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-c89911.umd.js.map +0 -1
  158. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js +0 -1820
  159. package/dist/worker/node_modules_pnpm_journeyapps_wa-sqlite_1_7_0_node_modules_journeyapps_wa-sqlite_src_examples-ec4eb1.umd.js.map +0 -1
  160. package/lib/package.json +0 -94
  161. package/lib/src/db/PowerSyncDatabase.d.ts +0 -78
  162. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.d.ts +0 -23
  163. package/lib/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.js +0 -26
  164. package/lib/src/db/adapters/AsyncWebAdapter.d.ts +0 -50
  165. package/lib/src/db/adapters/SSRDBAdapter.d.ts +0 -30
  166. package/lib/src/db/adapters/SSRDBAdapter.js +0 -68
  167. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.d.ts +0 -45
  168. package/lib/src/db/adapters/wa-sqlite/WASQLiteOpenFactory.js +0 -145
  169. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.d.ts +0 -15
  170. package/lib/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.js +0 -21
  171. package/lib/src/db/adapters/web-sql-flags.d.ts +0 -92
  172. package/lib/src/db/adapters/web-sql-flags.js +0 -36
  173. package/lib/src/db/sync/WebRemote.d.ts +0 -9
  174. package/lib/src/db/sync/WebRemote.js +0 -44
  175. package/lib/src/worker/db/MultiDatabaseServer.d.ts +0 -17
  176. package/lib/src/worker/db/WASQLiteDB.worker.d.ts +0 -4
  177. package/lib/src/worker/db/WASQLiteDB.worker.js +0 -30
  178. package/lib/src/worker/db/open-worker-database.d.ts +0 -14
  179. package/lib/src/worker/db/open-worker-database.js +0 -52
  180. package/lib/src/worker/sync/AbstractSharedSyncClientProvider.d.ts +0 -19
  181. package/lib/src/worker/sync/BroadcastLogger.d.ts +0 -47
  182. package/lib/src/worker/sync/BroadcastLogger.js +0 -128
  183. package/lib/src/worker/sync/SharedSyncImplementation.worker.d.ts +0 -1
  184. package/lib/src/worker/sync/SharedSyncImplementation.worker.js +0 -11
  185. package/lib/tsconfig.tsbuildinfo +0 -1
  186. package/src/db/adapters/AbstractWebPowerSyncDatabaseOpenFactory.ts +0 -47
  187. package/src/db/adapters/wa-sqlite/WASQLitePowerSyncDatabaseOpenFactory.ts +0 -24
  188. package/src/db/adapters/web-sql-flags.ts +0 -141
  189. package/src/worker/db/WASQLiteDB.worker.ts +0 -35
  190. package/src/worker/db/open-worker-database.ts +0 -62
  191. package/src/worker/sync/SharedSyncImplementation.worker.ts +0 -14
  192. /package/dist/{8e97452e297be23b5e50.wasm → worker/assets/mc-wa-sqlite-CnHbhWvs.wasm} +0 -0
  193. /package/dist/{2075a31bb151adbb9767.wasm → worker/assets/mc-wa-sqlite-async-D6idQS2r.wasm} +0 -0
  194. /package/dist/{3322bc84de986b63c2cd.wasm → worker/assets/wa-sqlite-XZW__iJk.wasm} +0 -0
  195. /package/dist/{fbc178b70d530e8ce02b.wasm → worker/assets/wa-sqlite-async-rHzzC98y.wasm} +0 -0
  196. /package/lib/{src/attachments → attachments}/IndexDBFileSystemAdapter.d.ts +0 -0
  197. /package/lib/{src/db → db}/adapters/wa-sqlite/vfs.d.ts +0 -0
  198. /package/lib/{src/db → db}/sync/userAgent.d.ts +0 -0
  199. /package/lib/{src/shared → shared}/navigator.d.ts +0 -0
  200. /package/lib/{src/shared → shared}/tab_close_signal.d.ts +0 -0
  201. /package/lib/{src/db/adapters/WebDBAdapter.js → worker/worker.d.ts} +0 -0
@@ -1,3 +1,4 @@
1
+ import { LogLevels } from '@powersync/common';
1
2
  import * as Comlink from 'comlink';
2
3
  import { DatabaseServer } from '../../db/adapters/wa-sqlite/DatabaseServer.js';
3
4
  import { getNavigatorLocks } from '../../shared/navigator.js';
@@ -13,9 +14,14 @@ export class MultiDatabaseServer {
13
14
  constructor(logger) {
14
15
  this.logger = logger;
15
16
  }
16
- async handleConnection(options) {
17
- this.logger.setLevel(options.logLevel);
18
- return Comlink.proxy(await this.openConnectionLocally(options, options.lockName));
17
+ async handleConnection({ logLevel, database, lockName }) {
18
+ const logger = {
19
+ log: (record) => {
20
+ if (record.level >= logLevel)
21
+ this.logger.log(record);
22
+ }
23
+ };
24
+ return Comlink.proxy(await this.openConnectionLocally(logger, database, lockName));
19
25
  }
20
26
  async connectToExisting(name, lockName) {
21
27
  return getNavigatorLocks().request(OPEN_DB_LOCK, async () => {
@@ -26,33 +32,37 @@ export class MultiDatabaseServer {
26
32
  return Comlink.proxy(await server.connect(lockName));
27
33
  });
28
34
  }
29
- async openConnectionLocally(options, lockName) {
35
+ async openConnectionLocally(logger, options, lockName) {
30
36
  // Especially on Firefox, we're sometimes seeing "NoModificationAllowedError"s when opening OPFS databases we can
31
37
  // work around by retrying.
32
38
  const maxAttempts = 3;
33
39
  let server;
34
40
  for (let count = 0; count < maxAttempts - 1; count++) {
35
41
  try {
36
- server = await this.databaseOpenAttempt(options);
42
+ server = await this.databaseOpenAttempt(logger, options);
37
43
  }
38
- catch (ex) {
39
- this.logger.warn(`Attempt ${count + 1} of ${maxAttempts} to open database failed, retrying in 1 second...`, ex);
44
+ catch (error) {
45
+ this.logger.log({
46
+ level: LogLevels.warn,
47
+ message: `Attempt ${count + 1} of ${maxAttempts} to open database failed, retrying in 1 second...`,
48
+ error
49
+ });
40
50
  await new Promise((resolve) => setTimeout(resolve, 1000));
41
51
  }
42
52
  }
43
53
  // Final attempt if we haven't been able to open the server - rethrow errors if we still can't open.
44
- server ??= await this.databaseOpenAttempt(options);
54
+ server ??= await this.databaseOpenAttempt(logger, options);
45
55
  return server.connect(lockName);
46
56
  }
47
- async databaseOpenAttempt(options) {
57
+ async databaseOpenAttempt(logger, options) {
48
58
  return getNavigatorLocks().request(OPEN_DB_LOCK, async () => {
49
- const { dbFilename } = options;
50
- let server = this.activeDatabases.get(dbFilename);
59
+ const { filename } = options;
60
+ let server = this.activeDatabases.get(filename);
51
61
  if (server == null) {
52
62
  // We don't need navigator locks for shared workers because all queries run in this shared worker exclusively.
53
63
  // For read-only connections, we use a VFS that supports concurrent reads (so a single lock on the connection is
54
64
  // fine).
55
- const needsNavigatorLocks = !(isSharedWorker || options.isReadOnly);
65
+ const needsNavigatorLocks = !(isSharedWorker || options.readonly);
56
66
  const connection = new RawSqliteConnection(options);
57
67
  const withSafeConcurrency = new ConcurrentSqliteConnection(connection, needsNavigatorLocks);
58
68
  // Initializing the RawSqliteConnection will run some pragmas that might write to the database file, so we want
@@ -68,13 +78,13 @@ export class MultiDatabaseServer {
68
78
  throw e;
69
79
  }
70
80
  returnLease();
71
- const onClose = () => this.activeDatabases.delete(dbFilename);
81
+ const onClose = () => this.activeDatabases.delete(filename);
72
82
  server = new DatabaseServer({
73
83
  inner: withSafeConcurrency,
74
- logger: this.logger,
84
+ logger,
75
85
  onClose
76
86
  });
77
- this.activeDatabases.set(dbFilename, server);
87
+ this.activeDatabases.set(filename, server);
78
88
  }
79
89
  return server;
80
90
  });
@@ -87,3 +97,4 @@ export class MultiDatabaseServer {
87
97
  }
88
98
  }
89
99
  export const isSharedWorker = 'SharedWorkerGlobalScope' in globalThis;
100
+ //# sourceMappingURL=MultiDatabaseServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiDatabaseServer.js","sourceRoot":"","sources":["../../../src/worker/db/MultiDatabaseServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { LogRecord, PowerSyncCredentials } from '@powersync/common';
2
+ import { SyncStatusJson } from '@powersync/shared-internals';
3
+ /**
4
+ * The client side port should provide these methods.
5
+ */
6
+ export declare abstract class AbstractSharedSyncClientProvider {
7
+ abstract fetchCredentials(): Promise<PowerSyncCredentials | null>;
8
+ abstract invalidateCredentials(): void;
9
+ abstract uploadCrud(): Promise<void>;
10
+ abstract statusChanged(status: SyncStatusJson): void;
11
+ abstract getDBWorkerPort(): Promise<MessagePort>;
12
+ abstract log(record: LogRecord): void;
13
+ }
@@ -3,3 +3,4 @@
3
3
  */
4
4
  export class AbstractSharedSyncClientProvider {
5
5
  }
6
+ //# sourceMappingURL=AbstractSharedSyncClientProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractSharedSyncClientProvider.js","sourceRoot":"","sources":["../../../src/worker/sync/AbstractSharedSyncClientProvider.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,OAAgB,gCAAgC;CAQrD"}
@@ -0,0 +1,27 @@
1
+ import { PowerSyncLogger, LogRecord } from '@powersync/common';
2
+ import { type WrappedSyncPort } from './SharedSyncImplementation.js';
3
+ /**
4
+ * Broadcasts logs to all clients
5
+ */
6
+ export declare class BroadcastLogger implements PowerSyncLogger {
7
+ private clients;
8
+ private readonly inner;
9
+ private currentLevel;
10
+ sendBroadcasts: boolean;
11
+ constructor(prefix: string, clients: WrappedSyncPort[]);
12
+ log(record: LogRecord): void;
13
+ /**
14
+ * Set the global log level.
15
+ */
16
+ setLevel(level: number): void;
17
+ /**
18
+ * Iterates all clients, catches individual client exceptions
19
+ * and proceeds to execute for all clients.
20
+ */
21
+ protected iterateClients(callback: (client: WrappedSyncPort) => Promise<void>): Promise<void>;
22
+ /**
23
+ * Guards against any logging errors.
24
+ * We don't want a logging exception to cause further issues upstream
25
+ */
26
+ protected sanitizeRecord(record: LogRecord): LogRecord;
27
+ }
@@ -0,0 +1,65 @@
1
+ import { LogLevels, createConsoleLogger } from '@powersync/common';
2
+ /**
3
+ * Broadcasts logs to all clients
4
+ */
5
+ export class BroadcastLogger {
6
+ clients;
7
+ inner;
8
+ currentLevel = LogLevels.info;
9
+ sendBroadcasts = true;
10
+ constructor(prefix, clients) {
11
+ this.clients = clients;
12
+ this.inner = createConsoleLogger({ prefix: prefix });
13
+ }
14
+ log(record) {
15
+ this.inner.log(record);
16
+ if (this.sendBroadcasts && record.level >= this.currentLevel) {
17
+ const sanitized = this.sanitizeRecord(record);
18
+ this.iterateClients((client) => client.clientProvider.log(sanitized));
19
+ }
20
+ }
21
+ /**
22
+ * Set the global log level.
23
+ */
24
+ setLevel(level) {
25
+ this.inner.minLevel = level;
26
+ this.currentLevel = level;
27
+ }
28
+ /**
29
+ * Iterates all clients, catches individual client exceptions
30
+ * and proceeds to execute for all clients.
31
+ */
32
+ async iterateClients(callback) {
33
+ for (const client of this.clients) {
34
+ try {
35
+ await callback(client);
36
+ }
37
+ catch (ex) {
38
+ console.error('Caught exception when iterating client', ex);
39
+ }
40
+ }
41
+ }
42
+ /**
43
+ * Guards against any logging errors.
44
+ * We don't want a logging exception to cause further issues upstream
45
+ */
46
+ sanitizeRecord(record) {
47
+ if (!record.error) {
48
+ return record;
49
+ }
50
+ let error;
51
+ try {
52
+ // Try and clone here first. If it fails it won't be passable over a MessagePort
53
+ error = structuredClone(record.error);
54
+ }
55
+ catch (ex) {
56
+ console.error(ex);
57
+ error = 'Could not serialize log params. Check shared worker logs for more details.';
58
+ }
59
+ return {
60
+ ...record,
61
+ error
62
+ };
63
+ }
64
+ }
65
+ //# sourceMappingURL=BroadcastLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BroadcastLogger.js","sourceRoot":"","sources":["../../../src/worker/sync/BroadcastLogger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,SAAS,EAAuB,mBAAmB,EAAa,MAAM,mBAAmB,CAAC;AAGpH;;GAEG;AACH,MAAM,OAAO,eAAe;IAQhB;IAPO,KAAK,CAAwC;IACtD,YAAY,GAAW,SAAS,CAAC,IAAI,CAAC;IAE9C,cAAc,GAAG,IAAI,CAAC;IAEtB,YACE,MAAc,EACN,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;QAElC,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,GAAG,CAAC,MAAiB;QACnB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,cAAc,CAAC,QAAoD;QACjF,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACO,cAAc,CAAC,MAAiB;QACxC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,KAAK,CAAC;QACV,IAAI,CAAC;YACH,gFAAgF;YAChF,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,KAAK,GAAG,4EAA4E,CAAC;QACvF,CAAC;QAED,OAAO;YACL,GAAG,MAAM;YACT,KAAK;SACN,CAAC;IACJ,CAAC;CACF"}
@@ -1,8 +1,10 @@
1
- import { BaseObserver, ConnectionManager, DBAdapter, SubscribedStream, SyncStatus, Mutex, type ILogLevel, type ILogger, type PowerSyncConnectionOptions, type StreamingSyncImplementation, type StreamingSyncImplementationListener, type SyncStatusOptions } from '@powersync/common';
1
+ import { BaseObserver, DBAdapter, SyncStatus } from '@powersync/common';
2
+ import { ConnectionManager, SubscribedStream, type StreamingSyncImplementation, type StreamingSyncImplementationListener, Mutex, ResolvedSyncOptions } from '@powersync/shared-internals';
2
3
  import * as Comlink from 'comlink';
3
4
  import { WebStreamingSyncImplementation, WebStreamingSyncImplementationOptions } from '../../db/sync/WebStreamingSyncImplementation.js';
4
- import { ResolvedWebSQLOpenOptions } from '../../db/adapters/web-sql-flags.js';
5
5
  import { AbstractSharedSyncClientProvider } from './AbstractSharedSyncClientProvider.js';
6
+ import { BroadcastLogger } from './BroadcastLogger.js';
7
+ import { ResolvedWebSQLOpenOptions } from '../../db/adapters/options.js';
6
8
  /**
7
9
  * @internal
8
10
  * Manual message events for shared sync clients
@@ -26,8 +28,9 @@ export type ManualSharedSyncPayload = {
26
28
  * @internal
27
29
  */
28
30
  export type SharedSyncInitOptions = {
29
- streamOptions: Omit<WebStreamingSyncImplementationOptions, 'adapter' | 'uploadCrud' | 'remote' | 'subscriptions'>;
31
+ streamOptions: Omit<WebStreamingSyncImplementationOptions, 'adapter' | 'uploadCrud' | 'remote' | 'subscriptions' | 'logger'>;
30
32
  dbParams: ResolvedWebSQLOpenOptions;
33
+ enableBroadcastLogs: boolean;
31
34
  };
32
35
  /**
33
36
  * @internal
@@ -64,16 +67,14 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
64
67
  protected fetchCredentialsController?: RemoteOperationAbortController;
65
68
  protected uploadDataController?: RemoteOperationAbortController;
66
69
  protected syncParams: SharedSyncInitOptions | null;
67
- protected logger: ILogger;
68
- protected lastConnectOptions: PowerSyncConnectionOptions | undefined;
70
+ protected lastConnectOptions: ResolvedSyncOptions | undefined;
69
71
  protected portMutex: Mutex;
70
72
  private subscriptions;
71
73
  protected connectionManager: ConnectionManager;
72
- syncStatus: SyncStatus;
73
- broadCastLogger: ILogger;
74
+ private syncStatus?;
75
+ logger: BroadcastLogger;
74
76
  protected readonly database: DBAdapter;
75
77
  constructor();
76
- get lastSyncedAt(): Date | undefined;
77
78
  get isConnected(): boolean;
78
79
  /**
79
80
  * Gets the last client port which we know is safe from unexpected closes.
@@ -84,12 +85,11 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
84
85
  * This returns a random port which is not closing.
85
86
  */
86
87
  protected getRandomWrappedPort(): Promise<WrappedSyncPort | undefined>;
87
- waitForStatus(status: SyncStatusOptions): Promise<void>;
88
88
  waitUntilStatusMatches(predicate: (status: SyncStatus) => boolean): Promise<void>;
89
89
  waitForReady(): Promise<void>;
90
90
  private collectActiveSubscriptions;
91
91
  updateSubscriptions(port: WrappedSyncPort, subscriptions: SubscribedStream[]): void;
92
- setLogLevel(level: ILogLevel): void;
92
+ setLogLevel(level: number): void;
93
93
  /**
94
94
  * Configures the DBAdapter connection and a streaming sync client.
95
95
  */
@@ -101,7 +101,7 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
101
101
  * The connection will simply be reconnected whenever a new tab
102
102
  * connects.
103
103
  */
104
- connect(options?: PowerSyncConnectionOptions): Promise<void>;
104
+ connect(options: ResolvedSyncOptions, serializedSchema: any): Promise<void>;
105
105
  disconnect(): Promise<void>;
106
106
  /**
107
107
  * Adds a new client tab's message port to the list of connected ports
@@ -119,7 +119,6 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
119
119
  */
120
120
  removePort(port: WrappedSyncPort): Promise<() => void>;
121
121
  triggerCrudUpload(): void;
122
- hasCompletedSync(): Promise<boolean>;
123
122
  getWriteCheckpoint(): Promise<string>;
124
123
  protected withSyncImplementation<T>(callback: (sync: StreamingSyncImplementation) => Promise<T>): Promise<T>;
125
124
  protected generateStreamingImplementation(): WebStreamingSyncImplementation;
@@ -128,9 +127,4 @@ export declare class SharedSyncImplementation extends BaseObserver<SharedSyncImp
128
127
  */
129
128
  private openInternalDB;
130
129
  private generateReconnectableDatabase;
131
- /**
132
- * A method to update the all shared statuses for each
133
- * client.
134
- */
135
- private updateAllStatuses;
136
130
  }
@@ -1,4 +1,5 @@
1
- import { AbortOperation, BaseObserver, ConnectionManager, DBAdapterDefaultMixin, SqliteBucketStorage, SyncStatus, createLogger, Mutex } from '@powersync/common';
1
+ import { BaseObserver, DBAdapter, LogLevels, SyncStreamConnectionMethod } from '@powersync/common';
2
+ import { AbortOperation, ConnectionManager, SqliteBucketStorage, Mutex } from '@powersync/shared-internals';
2
3
  import * as Comlink from 'comlink';
3
4
  import { WebRemote } from '../../db/sync/WebRemote.js';
4
5
  import { WebStreamingSyncImplementation } from '../../db/sync/WebStreamingSyncImplementation.js';
@@ -35,19 +36,17 @@ export class SharedSyncImplementation extends BaseObserver {
35
36
  fetchCredentialsController;
36
37
  uploadDataController;
37
38
  syncParams;
38
- logger;
39
39
  lastConnectOptions;
40
40
  portMutex;
41
41
  subscriptions = [];
42
42
  connectionManager;
43
43
  syncStatus;
44
- broadCastLogger;
44
+ logger;
45
45
  database = this.generateReconnectableDatabase();
46
46
  constructor() {
47
47
  super();
48
48
  this.ports = [];
49
49
  this.syncParams = null;
50
- this.logger = createLogger('shared-sync');
51
50
  this.lastConnectOptions = undefined;
52
51
  this.portMutex = new Mutex();
53
52
  this.isInitialized = new Promise((resolve) => {
@@ -58,15 +57,16 @@ export class SharedSyncImplementation extends BaseObserver {
58
57
  }
59
58
  });
60
59
  });
61
- this.syncStatus = new SyncStatus({});
62
- this.broadCastLogger = new BroadcastLogger(this.ports);
60
+ this.logger = new BroadcastLogger('shared-sync', this.ports);
63
61
  this.connectionManager = new ConnectionManager({
64
62
  createSyncImplementation: async () => {
65
63
  await this.waitForReady();
66
64
  const sync = this.generateStreamingImplementation();
67
65
  const onDispose = sync.registerListener({
68
- statusChanged: (status) => {
69
- this.updateAllStatuses(status.toJSON());
66
+ statusChanged: (snapshot) => {
67
+ this.syncStatus = snapshot;
68
+ const json = snapshot.toJSON();
69
+ this.ports.forEach((p) => p.clientProvider.statusChanged(json));
70
70
  }
71
71
  });
72
72
  return {
@@ -74,12 +74,10 @@ export class SharedSyncImplementation extends BaseObserver {
74
74
  onDispose
75
75
  };
76
76
  },
77
- logger: this.logger
77
+ logger: this.logger,
78
+ defaultConnectionMethod: SyncStreamConnectionMethod.HTTP
78
79
  });
79
80
  }
80
- get lastSyncedAt() {
81
- return this.connectionManager.syncStreamImplementation?.lastSyncedAt;
82
- }
83
81
  get isConnected() {
84
82
  return this.connectionManager.syncStreamImplementation?.isConnected ?? false;
85
83
  }
@@ -107,11 +105,6 @@ export class SharedSyncImplementation extends BaseObserver {
107
105
  return nonClosingPorts[Math.floor(Math.random() * nonClosingPorts.length)];
108
106
  });
109
107
  }
110
- async waitForStatus(status) {
111
- return this.withSyncImplementation(async (sync) => {
112
- return sync.waitForStatus(status);
113
- });
114
- }
115
108
  async waitUntilStatusMatches(predicate) {
116
109
  return this.withSyncImplementation(async (sync) => {
117
110
  return sync.waitUntilStatusMatches(predicate);
@@ -121,7 +114,7 @@ export class SharedSyncImplementation extends BaseObserver {
121
114
  return this.isInitialized;
122
115
  }
123
116
  collectActiveSubscriptions() {
124
- this.logger.debug('Collecting active stream subscriptions across tabs');
117
+ this.logger.log({ level: LogLevels.debug, message: 'Collecting active stream subscriptions across tabs' });
125
118
  const active = new Map();
126
119
  for (const port of this.ports) {
127
120
  for (const stream of port.currentSubscriptions) {
@@ -130,7 +123,10 @@ export class SharedSyncImplementation extends BaseObserver {
130
123
  }
131
124
  }
132
125
  this.subscriptions = [...active.values()];
133
- this.logger.debug('Collected stream subscriptions', this.subscriptions);
126
+ this.logger.log({
127
+ level: LogLevels.debug,
128
+ message: `Collected stream subscriptions, ${JSON.stringify(this.subscriptions)}`
129
+ });
134
130
  this.connectionManager.syncStreamImplementation?.updateSubscriptions(this.subscriptions);
135
131
  }
136
132
  updateSubscriptions(port, subscriptions) {
@@ -139,7 +135,6 @@ export class SharedSyncImplementation extends BaseObserver {
139
135
  }
140
136
  setLogLevel(level) {
141
137
  this.logger.setLevel(level);
142
- this.broadCastLogger.setLevel(level);
143
138
  }
144
139
  /**
145
140
  * Configures the DBAdapter connection and a streaming sync client.
@@ -154,14 +149,16 @@ export class SharedSyncImplementation extends BaseObserver {
154
149
  }
155
150
  // First time setting params
156
151
  this.syncParams = params;
157
- if (params.streamOptions?.flags?.broadcastLogs) {
158
- this.logger = this.broadCastLogger;
159
- }
152
+ this.logger.sendBroadcasts = params.enableBroadcastLogs;
160
153
  // Ensure we have a usable database connection, the reconnectable database will connect lazily on first use.
161
154
  await this.database.readLock(async () => { });
162
155
  self.onerror = (event) => {
163
156
  // Share any uncaught events on the broadcast logger
164
- this.logger.error('Uncaught exception in PowerSync shared sync worker', event);
157
+ this.logger.log({
158
+ level: LogLevels.error,
159
+ message: 'Uncaught exception in PowerSync shared sync worker',
160
+ error: event
161
+ });
165
162
  };
166
163
  this.iterateListeners((l) => l.initialized?.());
167
164
  }
@@ -176,9 +173,9 @@ export class SharedSyncImplementation extends BaseObserver {
176
173
  * The connection will simply be reconnected whenever a new tab
177
174
  * connects.
178
175
  */
179
- async connect(options) {
176
+ async connect(options, serializedSchema) {
180
177
  this.lastConnectOptions = options;
181
- return this.connectionManager.connect(CONNECTOR_PLACEHOLDER, options ?? {});
178
+ return this.connectionManager.connect(CONNECTOR_PLACEHOLDER, options ?? {}, serializedSchema);
182
179
  }
183
180
  async disconnect() {
184
181
  return this.connectionManager.disconnect();
@@ -197,7 +194,7 @@ export class SharedSyncImplementation extends BaseObserver {
197
194
  };
198
195
  this.ports.push(portProvider);
199
196
  // Give the newly connected client the latest status
200
- const status = this.connectionManager.syncStreamImplementation?.syncStatus;
197
+ const status = this.syncStatus;
201
198
  if (status) {
202
199
  portProvider.clientProvider.statusChanged(status.toJSON());
203
200
  }
@@ -217,7 +214,10 @@ export class SharedSyncImplementation extends BaseObserver {
217
214
  return await this.portMutex.runExclusive(async () => {
218
215
  const index = this.ports.findIndex((p) => p == port);
219
216
  if (index < 0) {
220
- this.logger.warn(`Could not remove port ${port} since it is not present in active ports.`);
217
+ this.logger.log({
218
+ level: LogLevels.warn,
219
+ message: `Could not remove port ${port} since it is not present in active ports.`
220
+ });
221
221
  return () => { };
222
222
  }
223
223
  const trackedPort = this.ports[index];
@@ -245,11 +245,6 @@ export class SharedSyncImplementation extends BaseObserver {
245
245
  sync.triggerCrudUpload();
246
246
  });
247
247
  }
248
- async hasCompletedSync() {
249
- return this.withSyncImplementation(async (sync) => {
250
- return sync.hasCompletedSync();
251
- });
252
- }
253
248
  async getWriteCheckpoint() {
254
249
  return this.withSyncImplementation(async (sync) => {
255
250
  return sync.getWriteCheckpoint();
@@ -283,11 +278,14 @@ export class SharedSyncImplementation extends BaseObserver {
283
278
  throw new Error('No client port found to invalidate credentials');
284
279
  }
285
280
  try {
286
- this.logger.log('calling the last port client provider to invalidate credentials');
281
+ this.logger.log({
282
+ level: LogLevels.info,
283
+ message: 'calling the last port client provider to invalidate credentials'
284
+ });
287
285
  lastPort.clientProvider.invalidateCredentials();
288
286
  }
289
- catch (ex) {
290
- this.logger.error('error invalidating credentials', ex);
287
+ catch (error) {
288
+ this.logger.log({ level: LogLevels.error, message: 'error invalidating credentials', error });
291
289
  }
292
290
  },
293
291
  fetchCredentials: async () => {
@@ -303,7 +301,10 @@ export class SharedSyncImplementation extends BaseObserver {
303
301
  };
304
302
  abortController.signal.onabort = reject;
305
303
  try {
306
- this.logger.log('calling the last port client provider for credentials');
304
+ this.logger.log({
305
+ level: LogLevels.info,
306
+ message: 'calling the last port client provider for credentials'
307
+ });
307
308
  resolve(await lastPort.clientProvider.fetchCredentials());
308
309
  }
309
310
  catch (ex) {
@@ -412,7 +413,7 @@ export class SharedSyncImplementation extends BaseObserver {
412
413
  });
413
414
  clearTimeout(timeout);
414
415
  client.closeListeners.push(async () => {
415
- this.logger.info('Aborting open connection because associated tab closed.');
416
+ this.logger.log({ level: LogLevels.info, message: 'Aborting open connection because associated tab closed.' });
416
417
  handleClosed(db);
417
418
  /**
418
419
  * Don't await this close operation. It might never resolve if the tab is closed.
@@ -420,14 +421,14 @@ export class SharedSyncImplementation extends BaseObserver {
420
421
  * We then call close. The close operation is configured to fire-and-forget, the main promise will reject immediately.
421
422
  */
422
423
  db.markRemoteClosed();
423
- db.close().catch((ex) => this.logger.warn('error closing database connection', ex));
424
+ db.close().catch((error) => this.logger.log({ level: LogLevels.warn, message: 'error closing database connection', error }));
424
425
  });
425
426
  return db;
426
427
  }
427
428
  generateReconnectableDatabase() {
428
429
  const syncParams = this.syncParams;
429
430
  const sharedSync = this;
430
- class ReconnectPool extends BaseObserver {
431
+ return new (class extends DBAdapter {
431
432
  connectionState = null;
432
433
  get name() {
433
434
  return syncParams?.dbParams.dbFilename;
@@ -484,17 +485,7 @@ export class SharedSyncImplementation extends BaseObserver {
484
485
  async refreshSchema() {
485
486
  // Not used by sync client.
486
487
  }
487
- }
488
- const Adapter = DBAdapterDefaultMixin(ReconnectPool);
489
- return new Adapter();
490
- }
491
- /**
492
- * A method to update the all shared statuses for each
493
- * client.
494
- */
495
- updateAllStatuses(status) {
496
- this.syncStatus = new SyncStatus(status);
497
- this.ports.forEach((p) => p.clientProvider.statusChanged(status));
488
+ })();
498
489
  }
499
490
  }
500
491
  /**
@@ -527,3 +518,4 @@ function withAbort(options) {
527
518
  .catch((e) => completePromise(() => reject(e)));
528
519
  });
529
520
  }
521
+ //# sourceMappingURL=SharedSyncImplementation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SharedSyncImplementation.js","sourceRoot":"","sources":["../../../src/worker/sync/SharedSyncImplementation.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { ILogLevel, PowerSyncConnectionOptions, SubscribedStream } from '@powersync/common';
2
1
  import { SharedSyncImplementation, SharedSyncInitOptions, WrappedSyncPort } from './SharedSyncImplementation.js';
2
+ import { SubscribedStream, ResolvedSyncOptions } from '@powersync/shared-internals';
3
3
  /**
4
4
  * A client to the shared sync worker.
5
5
  *
@@ -20,12 +20,11 @@ export declare class WorkerClient {
20
20
  * it can consider the connection to be closed.
21
21
  */
22
22
  addLockBasedCloseSignal(name: string): Promise<void>;
23
- setLogLevel(level: ILogLevel): void;
23
+ setLogLevel(level: number): void;
24
24
  triggerCrudUpload(): void;
25
25
  setParams(params: SharedSyncInitOptions, subscriptions: SubscribedStream[]): Promise<void>;
26
26
  getWriteCheckpoint(): Promise<string>;
27
- hasCompletedSync(): Promise<boolean>;
28
- connect(options?: PowerSyncConnectionOptions): Promise<void>;
27
+ connect(options: ResolvedSyncOptions, schema: any): Promise<void>;
29
28
  updateSubscriptions(subscriptions: SubscribedStream[]): void;
30
29
  disconnect(): Promise<void>;
31
30
  }
@@ -67,11 +67,8 @@ export class WorkerClient {
67
67
  getWriteCheckpoint() {
68
68
  return this.sync.getWriteCheckpoint();
69
69
  }
70
- hasCompletedSync() {
71
- return this.sync.hasCompletedSync();
72
- }
73
- connect(options) {
74
- return this.sync.connect(options);
70
+ connect(options, schema) {
71
+ return this.sync.connect(options, schema);
75
72
  }
76
73
  updateSubscriptions(subscriptions) {
77
74
  if (this.resolvedPort) {
@@ -82,3 +79,4 @@ export class WorkerClient {
82
79
  return this.sync.disconnect();
83
80
  }
84
81
  }
82
+ //# sourceMappingURL=WorkerClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkerClient.js","sourceRoot":"","sources":["../../../src/worker/sync/WorkerClient.ts"],"names":[],"mappings":"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"}