@powersync/common 1.57.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/lib/attachments/AttachmentContext.d.ts +5 -5
  2. package/lib/attachments/AttachmentContext.js +6 -2
  3. package/lib/attachments/AttachmentContext.js.map +1 -1
  4. package/lib/attachments/AttachmentQueue.d.ts +6 -6
  5. package/lib/attachments/AttachmentQueue.js +9 -8
  6. package/lib/attachments/AttachmentQueue.js.map +1 -1
  7. package/lib/attachments/AttachmentService.d.ts +3 -3
  8. package/lib/attachments/AttachmentService.js +4 -3
  9. package/lib/attachments/AttachmentService.js.map +1 -1
  10. package/lib/attachments/Schema.d.ts +2 -2
  11. package/lib/attachments/SyncingService.d.ts +2 -2
  12. package/lib/attachments/SyncingService.js +21 -6
  13. package/lib/attachments/SyncingService.js.map +1 -1
  14. package/lib/client/{AbstractPowerSyncDatabase.d.ts → CommonPowerSyncDatabase.d.ts} +56 -232
  15. package/lib/client/CommonPowerSyncDatabase.js +2 -0
  16. package/lib/client/CommonPowerSyncDatabase.js.map +1 -0
  17. package/lib/client/SQLOpenFactory.d.ts +35 -13
  18. package/lib/client/SQLOpenFactory.js +1 -25
  19. package/lib/client/SQLOpenFactory.js.map +1 -1
  20. package/lib/client/compilableQueryWatch.d.ts +2 -2
  21. package/lib/client/compilableQueryWatch.js +1 -2
  22. package/lib/client/compilableQueryWatch.js.map +1 -1
  23. package/lib/client/connection/PowerSyncBackendConnector.d.ts +3 -3
  24. package/lib/client/runOnSchemaChange.d.ts +2 -2
  25. package/lib/client/runOnSchemaChange.js.map +1 -1
  26. package/lib/client/sync/bucket/CrudEntry.d.ts +3 -34
  27. package/lib/client/sync/bucket/CrudEntry.js +0 -99
  28. package/lib/client/sync/bucket/CrudEntry.js.map +1 -1
  29. package/lib/client/sync/options.d.ts +65 -0
  30. package/lib/client/sync/options.js +25 -0
  31. package/lib/client/sync/options.js.map +1 -0
  32. package/lib/client/sync/sync-streams.d.ts +1 -1
  33. package/lib/client/triggers/TriggerManager.d.ts +9 -38
  34. package/lib/client/watched/GetAllQuery.d.ts +3 -3
  35. package/lib/client/watched/GetAllQuery.js +1 -1
  36. package/lib/client/watched/GetAllQuery.js.map +1 -1
  37. package/lib/client/watched/WatchedQuery.d.ts +2 -10
  38. package/lib/client/watched/WatchedQuery.js +0 -11
  39. package/lib/client/watched/WatchedQuery.js.map +1 -1
  40. package/lib/client/watched/processors/DifferentialQueryProcessor.d.ts +0 -50
  41. package/lib/client/watched/processors/DifferentialQueryProcessor.js +1 -176
  42. package/lib/client/watched/processors/DifferentialQueryProcessor.js.map +1 -1
  43. package/lib/client/watched/processors/OnChangeQueryProcessor.d.ts +0 -22
  44. package/lib/client/watched/processors/OnChangeQueryProcessor.js +1 -82
  45. package/lib/client/watched/processors/OnChangeQueryProcessor.js.map +1 -1
  46. package/lib/db/DBAdapter.d.ts +72 -154
  47. package/lib/db/DBAdapter.js +70 -108
  48. package/lib/db/DBAdapter.js.map +1 -1
  49. package/lib/db/QueryResult.d.ts +104 -0
  50. package/lib/db/QueryResult.js +96 -0
  51. package/lib/db/QueryResult.js.map +1 -0
  52. package/lib/db/crud/SyncProgress.d.ts +1 -13
  53. package/lib/db/crud/SyncProgress.js +1 -62
  54. package/lib/db/crud/SyncProgress.js.map +1 -1
  55. package/lib/db/crud/SyncStatus.d.ts +32 -66
  56. package/lib/db/crud/SyncStatus.js +1 -253
  57. package/lib/db/crud/SyncStatus.js.map +1 -1
  58. package/lib/db/schema/Column.d.ts +0 -7
  59. package/lib/db/schema/Column.js +0 -7
  60. package/lib/db/schema/Column.js.map +1 -1
  61. package/lib/db/schema/Index.d.ts +2 -6
  62. package/lib/db/schema/Index.js +1 -4
  63. package/lib/db/schema/Index.js.map +1 -1
  64. package/lib/db/schema/IndexedColumn.d.ts +2 -6
  65. package/lib/db/schema/IndexedColumn.js +1 -4
  66. package/lib/db/schema/IndexedColumn.js.map +1 -1
  67. package/lib/db/schema/Schema.d.ts +4 -28
  68. package/lib/db/schema/Schema.js.map +1 -1
  69. package/lib/db/schema/Table.d.ts +50 -96
  70. package/lib/db/schema/Table.js +83 -91
  71. package/lib/db/schema/Table.js.map +1 -1
  72. package/lib/index.d.ts +5 -21
  73. package/lib/index.js +5 -22
  74. package/lib/index.js.map +1 -1
  75. package/lib/utils/BaseObserver.d.ts +1 -1
  76. package/lib/utils/BaseObserver.js +1 -1
  77. package/lib/utils/Logger.d.ts +52 -23
  78. package/lib/utils/Logger.js +35 -33
  79. package/lib/utils/Logger.js.map +1 -1
  80. package/lib/utils/MetaBaseObserver.d.ts +11 -11
  81. package/lib/utils/MetaBaseObserver.js +1 -50
  82. package/lib/utils/MetaBaseObserver.js.map +1 -1
  83. package/lib/utils/mutex.d.ts +3 -53
  84. package/lib/utils/mutex.js +1 -156
  85. package/lib/utils/mutex.js.map +1 -1
  86. package/package.json +8 -45
  87. package/src/attachments/AttachmentContext.ts +11 -10
  88. package/src/attachments/AttachmentQueue.ts +15 -14
  89. package/src/attachments/AttachmentService.ts +7 -6
  90. package/src/attachments/Schema.ts +2 -2
  91. package/src/attachments/SyncingService.ts +23 -9
  92. package/src/client/CommonPowerSyncDatabase.ts +540 -0
  93. package/src/client/SQLOpenFactory.ts +38 -22
  94. package/src/client/compilableQueryWatch.ts +3 -4
  95. package/src/client/connection/PowerSyncBackendConnector.ts +3 -3
  96. package/src/client/runOnSchemaChange.ts +2 -2
  97. package/src/client/sync/bucket/CrudEntry.ts +4 -104
  98. package/src/client/sync/options.ts +77 -0
  99. package/src/client/sync/sync-streams.ts +1 -1
  100. package/src/client/triggers/TriggerManager.ts +10 -41
  101. package/src/client/watched/GetAllQuery.ts +3 -3
  102. package/src/client/watched/WatchedQuery.ts +2 -15
  103. package/src/client/watched/processors/DifferentialQueryProcessor.ts +0 -223
  104. package/src/client/watched/processors/OnChangeQueryProcessor.ts +0 -111
  105. package/src/db/DBAdapter.ts +141 -226
  106. package/src/db/QueryResult.ts +195 -0
  107. package/src/db/crud/SyncProgress.ts +2 -42
  108. package/src/db/crud/SyncStatus.ts +45 -220
  109. package/src/db/schema/Column.ts +0 -8
  110. package/src/db/schema/Index.ts +3 -6
  111. package/src/db/schema/IndexedColumn.ts +3 -6
  112. package/src/db/schema/Schema.ts +4 -4
  113. package/src/db/schema/Table.ts +111 -186
  114. package/src/index.ts +5 -21
  115. package/src/utils/BaseObserver.ts +1 -1
  116. package/src/utils/Logger.ts +80 -34
  117. package/src/utils/MetaBaseObserver.ts +14 -60
  118. package/src/utils/mutex.ts +4 -201
  119. package/dist/bundle.cjs +0 -14390
  120. package/dist/bundle.cjs.map +0 -1
  121. package/dist/bundle.mjs +0 -14309
  122. package/dist/bundle.mjs.map +0 -1
  123. package/dist/bundle.node.cjs +0 -12021
  124. package/dist/bundle.node.cjs.map +0 -1
  125. package/dist/bundle.node.mjs +0 -11940
  126. package/dist/bundle.node.mjs.map +0 -1
  127. package/dist/index.d.cts +0 -4651
  128. package/legacy/sync_protocol.d.ts +0 -103
  129. package/lib/client/AbstractPowerSyncDatabase.js +0 -990
  130. package/lib/client/AbstractPowerSyncDatabase.js.map +0 -1
  131. package/lib/client/AbstractPowerSyncOpenFactory.d.ts +0 -28
  132. package/lib/client/AbstractPowerSyncOpenFactory.js +0 -28
  133. package/lib/client/AbstractPowerSyncOpenFactory.js.map +0 -1
  134. package/lib/client/ConnectionManager.d.ts +0 -115
  135. package/lib/client/ConnectionManager.js +0 -294
  136. package/lib/client/ConnectionManager.js.map +0 -1
  137. package/lib/client/CustomQuery.d.ts +0 -22
  138. package/lib/client/CustomQuery.js +0 -43
  139. package/lib/client/CustomQuery.js.map +0 -1
  140. package/lib/client/constants.d.ts +0 -4
  141. package/lib/client/constants.js +0 -5
  142. package/lib/client/constants.js.map +0 -1
  143. package/lib/client/sync/bucket/BucketStorageAdapter.d.ts +0 -56
  144. package/lib/client/sync/bucket/BucketStorageAdapter.js +0 -29
  145. package/lib/client/sync/bucket/BucketStorageAdapter.js.map +0 -1
  146. package/lib/client/sync/bucket/SqliteBucketStorage.d.ts +0 -37
  147. package/lib/client/sync/bucket/SqliteBucketStorage.js +0 -165
  148. package/lib/client/sync/bucket/SqliteBucketStorage.js.map +0 -1
  149. package/lib/client/sync/stream/AbstractRemote.d.ts +0 -180
  150. package/lib/client/sync/stream/AbstractRemote.js +0 -505
  151. package/lib/client/sync/stream/AbstractRemote.js.map +0 -1
  152. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.d.ts +0 -265
  153. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.js +0 -705
  154. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.js.map +0 -1
  155. package/lib/client/sync/stream/WebsocketClientTransport.d.ts +0 -15
  156. package/lib/client/sync/stream/WebsocketClientTransport.js +0 -62
  157. package/lib/client/sync/stream/WebsocketClientTransport.js.map +0 -1
  158. package/lib/client/sync/stream/core-instruction.d.ts +0 -77
  159. package/lib/client/sync/stream/core-instruction.js +0 -30
  160. package/lib/client/sync/stream/core-instruction.js.map +0 -1
  161. package/lib/client/triggers/MemoryTriggerClaimManager.d.ts +0 -6
  162. package/lib/client/triggers/MemoryTriggerClaimManager.js +0 -21
  163. package/lib/client/triggers/MemoryTriggerClaimManager.js.map +0 -1
  164. package/lib/client/triggers/TriggerManagerImpl.d.ts +0 -39
  165. package/lib/client/triggers/TriggerManagerImpl.js +0 -410
  166. package/lib/client/triggers/TriggerManagerImpl.js.map +0 -1
  167. package/lib/client/watched/processors/AbstractQueryProcessor.d.ts +0 -68
  168. package/lib/client/watched/processors/AbstractQueryProcessor.js +0 -151
  169. package/lib/client/watched/processors/AbstractQueryProcessor.js.map +0 -1
  170. package/lib/db/ConnectionClosedError.d.ts +0 -12
  171. package/lib/db/ConnectionClosedError.js +0 -23
  172. package/lib/db/ConnectionClosedError.js.map +0 -1
  173. package/lib/db/schema/TableV2.d.ts +0 -11
  174. package/lib/db/schema/TableV2.js +0 -11
  175. package/lib/db/schema/TableV2.js.map +0 -1
  176. package/lib/utils/AbortOperation.d.ts +0 -11
  177. package/lib/utils/AbortOperation.js +0 -21
  178. package/lib/utils/AbortOperation.js.map +0 -1
  179. package/lib/utils/ControlledExecutor.d.ts +0 -31
  180. package/lib/utils/ControlledExecutor.js +0 -54
  181. package/lib/utils/ControlledExecutor.js.map +0 -1
  182. package/lib/utils/async.d.ts +0 -46
  183. package/lib/utils/async.js +0 -147
  184. package/lib/utils/async.js.map +0 -1
  185. package/lib/utils/compatibility.d.ts +0 -8
  186. package/lib/utils/compatibility.js +0 -9
  187. package/lib/utils/compatibility.js.map +0 -1
  188. package/lib/utils/parseQuery.d.ts +0 -12
  189. package/lib/utils/parseQuery.js +0 -20
  190. package/lib/utils/parseQuery.js.map +0 -1
  191. package/lib/utils/queue.d.ts +0 -16
  192. package/lib/utils/queue.js +0 -42
  193. package/lib/utils/queue.js.map +0 -1
  194. package/lib/utils/stream_transform.d.ts +0 -41
  195. package/lib/utils/stream_transform.js +0 -211
  196. package/lib/utils/stream_transform.js.map +0 -1
  197. package/src/client/AbstractPowerSyncDatabase.ts +0 -1408
  198. package/src/client/AbstractPowerSyncOpenFactory.ts +0 -45
  199. package/src/client/ConnectionManager.ts +0 -405
  200. package/src/client/CustomQuery.ts +0 -56
  201. package/src/client/constants.ts +0 -4
  202. package/src/client/sync/bucket/BucketStorageAdapter.ts +0 -65
  203. package/src/client/sync/bucket/SqliteBucketStorage.ts +0 -202
  204. package/src/client/sync/stream/AbstractRemote.ts +0 -644
  205. package/src/client/sync/stream/AbstractStreamingSyncImplementation.ts +0 -970
  206. package/src/client/sync/stream/WebsocketClientTransport.ts +0 -82
  207. package/src/client/sync/stream/core-instruction.ts +0 -109
  208. package/src/client/triggers/MemoryTriggerClaimManager.ts +0 -25
  209. package/src/client/triggers/TriggerManagerImpl.ts +0 -501
  210. package/src/client/watched/processors/AbstractQueryProcessor.ts +0 -226
  211. package/src/db/ConnectionClosedError.ts +0 -25
  212. package/src/db/schema/TableV2.ts +0 -11
  213. package/src/utils/AbortOperation.ts +0 -19
  214. package/src/utils/ControlledExecutor.ts +0 -78
  215. package/src/utils/async.ts +0 -185
  216. package/src/utils/compatibility.ts +0 -9
  217. package/src/utils/parseQuery.ts +0 -31
  218. package/src/utils/queue.ts +0 -48
  219. package/src/utils/stream_transform.ts +0 -260
@@ -1,56 +0,0 @@
1
- import { BaseListener, BaseObserverInterface, Disposable } from '../../../utils/BaseObserver.js';
2
- import { CrudBatch } from './CrudBatch.js';
3
- import { CrudEntry } from './CrudEntry.js';
4
- /**
5
- * @internal
6
- */
7
- export declare enum PSInternalTable {
8
- DATA = "ps_data",
9
- CRUD = "ps_crud",
10
- BUCKETS = "ps_buckets",
11
- OPLOG = "ps_oplog",
12
- UNTYPED = "ps_untyped"
13
- }
14
- /**
15
- * @internal
16
- */
17
- export declare enum PowerSyncControlCommand {
18
- PROCESS_TEXT_LINE = "line_text",
19
- PROCESS_BSON_LINE = "line_binary",
20
- STOP = "stop",
21
- START = "start",
22
- NOTIFY_TOKEN_REFRESHED = "refreshed_token",
23
- NOTIFY_CRUD_UPLOAD_COMPLETED = "completed_upload",
24
- UPDATE_SUBSCRIPTIONS = "update_subscriptions",
25
- /**
26
- * An `established` or `end` event for response streams.
27
- */
28
- CONNECTION_STATE = "connection"
29
- }
30
- /**
31
- * @internal
32
- */
33
- export interface BucketStorageListener extends BaseListener {
34
- crudUpdate: () => void;
35
- }
36
- /**
37
- * @internal
38
- */
39
- export interface BucketStorageAdapter extends BaseObserverInterface<BucketStorageListener>, Disposable {
40
- init(): Promise<void>;
41
- hasMigratedSubkeys(): Promise<boolean>;
42
- migrateToFixedSubkeys(): Promise<void>;
43
- nextCrudItem(): Promise<CrudEntry | undefined>;
44
- hasCrud(): Promise<boolean>;
45
- getCrudBatch(limit?: number): Promise<CrudBatch | null>;
46
- updateLocalTarget(cb: () => Promise<string>): Promise<boolean>;
47
- getMaxOpId(): string;
48
- /**
49
- * Get an unique client id.
50
- */
51
- getClientId(): Promise<string>;
52
- /**
53
- * Invokes the `powersync_control` function for the sync client.
54
- */
55
- control(op: PowerSyncControlCommand, payload: string | Uint8Array | null): Promise<string>;
56
- }
@@ -1,29 +0,0 @@
1
- /**
2
- * @internal
3
- */
4
- export var PSInternalTable;
5
- (function (PSInternalTable) {
6
- PSInternalTable["DATA"] = "ps_data";
7
- PSInternalTable["CRUD"] = "ps_crud";
8
- PSInternalTable["BUCKETS"] = "ps_buckets";
9
- PSInternalTable["OPLOG"] = "ps_oplog";
10
- PSInternalTable["UNTYPED"] = "ps_untyped";
11
- })(PSInternalTable || (PSInternalTable = {}));
12
- /**
13
- * @internal
14
- */
15
- export var PowerSyncControlCommand;
16
- (function (PowerSyncControlCommand) {
17
- PowerSyncControlCommand["PROCESS_TEXT_LINE"] = "line_text";
18
- PowerSyncControlCommand["PROCESS_BSON_LINE"] = "line_binary";
19
- PowerSyncControlCommand["STOP"] = "stop";
20
- PowerSyncControlCommand["START"] = "start";
21
- PowerSyncControlCommand["NOTIFY_TOKEN_REFRESHED"] = "refreshed_token";
22
- PowerSyncControlCommand["NOTIFY_CRUD_UPLOAD_COMPLETED"] = "completed_upload";
23
- PowerSyncControlCommand["UPDATE_SUBSCRIPTIONS"] = "update_subscriptions";
24
- /**
25
- * An `established` or `end` event for response streams.
26
- */
27
- PowerSyncControlCommand["CONNECTION_STATE"] = "connection";
28
- })(PowerSyncControlCommand || (PowerSyncControlCommand = {}));
29
- //# sourceMappingURL=BucketStorageAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BucketStorageAdapter.js","sourceRoot":"","sources":["../../../../src/client/sync/bucket/BucketStorageAdapter.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,mCAAgB,CAAA;IAChB,mCAAgB,CAAA;IAChB,yCAAsB,CAAA;IACtB,qCAAkB,CAAA;IAClB,yCAAsB,CAAA;AACxB,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,uBAYX;AAZD,WAAY,uBAAuB;IACjC,0DAA+B,CAAA;IAC/B,4DAAiC,CAAA;IACjC,wCAAa,CAAA;IACb,0CAAe,CAAA;IACf,qEAA0C,CAAA;IAC1C,4EAAiD,CAAA;IACjD,wEAA6C,CAAA;IAC7C;;OAEG;IACH,0DAA+B,CAAA;AACjC,CAAC,EAZW,uBAAuB,KAAvB,uBAAuB,QAYlC"}
@@ -1,37 +0,0 @@
1
- import { ILogger } from 'js-logger';
2
- import { DBAdapter, Transaction } from '../../../db/DBAdapter.js';
3
- import { BaseObserver } from '../../../utils/BaseObserver.js';
4
- import { BucketStorageAdapter, BucketStorageListener, PowerSyncControlCommand } from './BucketStorageAdapter.js';
5
- import { CrudBatch } from './CrudBatch.js';
6
- import { CrudEntry } from './CrudEntry.js';
7
- /**
8
- * @internal
9
- */
10
- export declare class SqliteBucketStorage extends BaseObserver<BucketStorageListener> implements BucketStorageAdapter {
11
- private db;
12
- private logger;
13
- tableNames: Set<string>;
14
- private updateListener;
15
- private _clientId?;
16
- constructor(db: DBAdapter, logger?: ILogger);
17
- init(): Promise<void>;
18
- dispose(): Promise<void>;
19
- _getClientId(): Promise<string>;
20
- getClientId(): Promise<string>;
21
- getMaxOpId(): string;
22
- updateLocalTarget(cb: () => Promise<string>): Promise<boolean>;
23
- nextCrudItem(): Promise<CrudEntry | undefined>;
24
- hasCrud(): Promise<boolean>;
25
- /**
26
- * Get a batch of objects to send to the server.
27
- * When the objects are successfully sent to the server, call .complete()
28
- */
29
- getCrudBatch(limit?: number): Promise<CrudBatch | null>;
30
- writeTransaction<T>(callback: (tx: Transaction) => Promise<T>, options?: {
31
- timeoutMs: number;
32
- }): Promise<T>;
33
- control(op: PowerSyncControlCommand, payload: string | Uint8Array | ArrayBuffer | null): Promise<string>;
34
- hasMigratedSubkeys(): Promise<boolean>;
35
- migrateToFixedSubkeys(): Promise<void>;
36
- static _subkeyMigrationKey: string;
37
- }
@@ -1,165 +0,0 @@
1
- import Logger from 'js-logger';
2
- import { extractTableUpdates } from '../../../db/DBAdapter.js';
3
- import { BaseObserver } from '../../../utils/BaseObserver.js';
4
- import { MAX_OP_ID } from '../../constants.js';
5
- import { PSInternalTable } from './BucketStorageAdapter.js';
6
- import { CrudEntry } from './CrudEntry.js';
7
- /**
8
- * @internal
9
- */
10
- export class SqliteBucketStorage extends BaseObserver {
11
- db;
12
- logger;
13
- tableNames;
14
- updateListener;
15
- _clientId;
16
- constructor(db, logger = Logger.get('SqliteBucketStorage')) {
17
- super();
18
- this.db = db;
19
- this.logger = logger;
20
- this.tableNames = new Set();
21
- this.updateListener = db.registerListener({
22
- tablesUpdated: (update) => {
23
- const tables = extractTableUpdates(update);
24
- if (tables.includes(PSInternalTable.CRUD)) {
25
- this.iterateListeners((l) => l.crudUpdate?.());
26
- }
27
- }
28
- });
29
- }
30
- async init() {
31
- const existingTableRows = await this.db.getAll(`SELECT name FROM sqlite_master WHERE type='table' AND name GLOB 'ps_data_*'`);
32
- for (const row of existingTableRows ?? []) {
33
- this.tableNames.add(row.name);
34
- }
35
- }
36
- async dispose() {
37
- this.updateListener?.();
38
- }
39
- async _getClientId() {
40
- const row = await this.db.get('SELECT powersync_client_id() as client_id');
41
- return row['client_id'];
42
- }
43
- getClientId() {
44
- if (this._clientId == null) {
45
- this._clientId = this._getClientId();
46
- }
47
- return this._clientId;
48
- }
49
- getMaxOpId() {
50
- return MAX_OP_ID;
51
- }
52
- async updateLocalTarget(cb) {
53
- const rs1 = await this.db.getAll("SELECT target_op FROM ps_buckets WHERE name = '$local' AND target_op = CAST(? as INTEGER)", [MAX_OP_ID]);
54
- if (!rs1.length) {
55
- // Nothing to update
56
- return false;
57
- }
58
- const rs = await this.db.getAll("SELECT seq FROM main.sqlite_sequence WHERE name = 'ps_crud'");
59
- if (!rs.length) {
60
- // Nothing to update
61
- return false;
62
- }
63
- const seqBefore = rs[0]['seq'];
64
- const opId = await cb();
65
- return this.writeTransaction(async (tx) => {
66
- const anyData = await tx.execute('SELECT 1 FROM ps_crud LIMIT 1');
67
- if (anyData.rows?.length) {
68
- // if isNotEmpty
69
- this.logger.debug(`New data uploaded since write checkpoint ${opId} - need new write checkpoint`);
70
- return false;
71
- }
72
- const rs = await tx.execute("SELECT seq FROM main.sqlite_sequence WHERE name = 'ps_crud'");
73
- if (!rs.rows?.length) {
74
- // assert isNotEmpty
75
- throw new Error('SQLite Sequence should not be empty');
76
- }
77
- const seqAfter = rs.rows?.item(0)['seq'];
78
- if (seqAfter != seqBefore) {
79
- this.logger.debug(`New data uploaded since write checpoint ${opId} - need new write checkpoint (sequence updated)`);
80
- // New crud data may have been uploaded since we got the checkpoint. Abort.
81
- return false;
82
- }
83
- this.logger.debug(`Updating target write checkpoint to ${opId}`);
84
- await tx.execute("UPDATE ps_buckets SET target_op = CAST(? as INTEGER) WHERE name='$local'", [opId]);
85
- return true;
86
- });
87
- }
88
- async nextCrudItem() {
89
- const next = await this.db.getOptional('SELECT * FROM ps_crud ORDER BY id ASC LIMIT 1');
90
- if (!next) {
91
- return;
92
- }
93
- return CrudEntry.fromRow(next);
94
- }
95
- async hasCrud() {
96
- const anyData = await this.db.getOptional('SELECT 1 FROM ps_crud LIMIT 1');
97
- return !!anyData;
98
- }
99
- /**
100
- * Get a batch of objects to send to the server.
101
- * When the objects are successfully sent to the server, call .complete()
102
- */
103
- async getCrudBatch(limit = 100) {
104
- if (!(await this.hasCrud())) {
105
- return null;
106
- }
107
- const crudResult = await this.db.getAll('SELECT * FROM ps_crud ORDER BY id ASC LIMIT ?', [limit]);
108
- const all = [];
109
- for (const row of crudResult) {
110
- all.push(CrudEntry.fromRow(row));
111
- }
112
- if (all.length === 0) {
113
- return null;
114
- }
115
- const last = all[all.length - 1];
116
- return {
117
- crud: all,
118
- haveMore: true,
119
- complete: async (writeCheckpoint) => {
120
- return this.writeTransaction(async (tx) => {
121
- await tx.execute('DELETE FROM ps_crud WHERE id <= ?', [last.clientId]);
122
- if (writeCheckpoint) {
123
- const crudResult = await tx.execute('SELECT 1 FROM ps_crud LIMIT 1');
124
- if (crudResult.rows?.length) {
125
- await tx.execute("UPDATE ps_buckets SET target_op = CAST(? as INTEGER) WHERE name='$local'", [
126
- writeCheckpoint
127
- ]);
128
- }
129
- }
130
- else {
131
- await tx.execute("UPDATE ps_buckets SET target_op = CAST(? as INTEGER) WHERE name='$local'", [
132
- this.getMaxOpId()
133
- ]);
134
- }
135
- });
136
- }
137
- };
138
- }
139
- async writeTransaction(callback, options) {
140
- return this.db.writeTransaction(callback, options);
141
- }
142
- async control(op, payload) {
143
- return await this.writeTransaction(async (tx) => {
144
- const [[raw]] = await tx.executeRaw('SELECT powersync_control(?, ?)', [op, payload]);
145
- return raw;
146
- });
147
- }
148
- async hasMigratedSubkeys() {
149
- const { r } = await this.db.get('SELECT EXISTS(SELECT * FROM ps_kv WHERE key = ?) as r', [
150
- SqliteBucketStorage._subkeyMigrationKey
151
- ]);
152
- return r != 0;
153
- }
154
- async migrateToFixedSubkeys() {
155
- await this.writeTransaction(async (tx) => {
156
- await tx.execute('UPDATE ps_oplog SET key = powersync_remove_duplicate_key_encoding(key);');
157
- await tx.execute('INSERT OR REPLACE INTO ps_kv (key, value) VALUES (?, ?);', [
158
- SqliteBucketStorage._subkeyMigrationKey,
159
- '1'
160
- ]);
161
- });
162
- }
163
- static _subkeyMigrationKey = 'powersync_js_migrated_subkeys';
164
- }
165
- //# sourceMappingURL=SqliteBucketStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SqliteBucketStorage.js","sourceRoot":"","sources":["../../../../src/client/sync/bucket/SqliteBucketStorage.ts"],"names":[],"mappings":"AAAA,OAAO,MAAmB,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAa,mBAAmB,EAAe,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAIL,eAAe,EAChB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAiB,MAAM,gBAAgB,CAAC;AAE1D;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,YAAmC;IAMhE;IACA;IANH,UAAU,CAAc;IACvB,cAAc,CAAa;IAC3B,SAAS,CAAmB;IAEpC,YACU,EAAa,EACb,SAAkB,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC;QAE3D,KAAK,EAAE,CAAC;QAHA,OAAE,GAAF,EAAE,CAAW;QACb,WAAM,GAAN,MAAM,CAA6C;QAG3D,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,gBAAgB,CAAC;YACxC,aAAa,EAAE,CAAC,MAAM,EAAE,EAAE;gBACxB,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBAC3C,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1C,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAC5C,6EAA6E,CAC9E,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,iBAAiB,IAAI,EAAE,EAAE,CAAC;YAC1C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAwB,2CAA2C,CAAC,CAAC;QAClG,OAAO,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACvC,CAAC;QACD,OAAO,IAAI,CAAC,SAAU,CAAC;IACzB,CAAC;IAED,UAAU;QACR,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,EAAyB;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAC9B,2FAA2F,EAC3F,CAAC,SAAS,CAAC,CACZ,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YAChB,oBAAoB;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAkB,6DAA6D,CAAC,CAAC;QAChH,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YACf,oBAAoB;YACpB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,SAAS,GAAW,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEvC,MAAM,IAAI,GAAG,MAAM,EAAE,EAAE,CAAC;QAExB,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACxC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;YAClE,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBACzB,gBAAgB;gBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,IAAI,8BAA8B,CAAC,CAAC;gBAClG,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,6DAA6D,CAAC,CAAC;YAC3F,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBACrB,oBAAoB;gBACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YAED,MAAM,QAAQ,GAAW,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,2CAA2C,IAAI,iDAAiD,CACjG,CAAC;gBAEF,2EAA2E;gBAC3E,OAAO,KAAK,CAAC;YACf,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAC;YACjE,MAAM,EAAE,CAAC,OAAO,CAAC,0EAA0E,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YACrG,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAgB,+CAA+C,CAAC,CAAC;QACvG,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC;QAC3E,OAAO,CAAC,CAAC,OAAO,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,YAAY,CAAC,QAAgB,GAAG;QACpC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAgB,+CAA+C,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAEjH,MAAM,GAAG,GAAgB,EAAE,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,OAAO;YACL,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,KAAK,EAAE,eAAwB,EAAE,EAAE;gBAC3C,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;oBACxC,MAAM,EAAE,CAAC,OAAO,CAAC,mCAAmC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACvE,IAAI,eAAe,EAAE,CAAC;wBACpB,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;wBACrE,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;4BAC5B,MAAM,EAAE,CAAC,OAAO,CAAC,0EAA0E,EAAE;gCAC3F,eAAe;6BAChB,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,MAAM,EAAE,CAAC,OAAO,CAAC,0EAA0E,EAAE;4BAC3F,IAAI,CAAC,UAAU,EAAE;yBAClB,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAI,QAAyC,EAAE,OAA+B;QAClG,OAAO,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAA2B,EAAE,OAAiD;QAC1F,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC9C,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,gCAAgC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;YACrF,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAgB,uDAAuD,EAAE;YACtG,mBAAmB,CAAC,mBAAmB;SACxC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACvC,MAAM,EAAE,CAAC,OAAO,CAAC,yEAAyE,CAAC,CAAC;YAC5F,MAAM,EAAE,CAAC,OAAO,CAAC,0DAA0D,EAAE;gBAC3E,mBAAmB,CAAC,mBAAmB;gBACvC,GAAG;aACJ,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,mBAAmB,GAAG,+BAA+B,CAAC"}
@@ -1,180 +0,0 @@
1
- import { type fetch } from 'cross-fetch';
2
- import Logger, { ILogger } from 'js-logger';
3
- import { PowerSyncCredentials } from '../../connection/PowerSyncCredentials.js';
4
- import { SimpleAsyncIterator } from '../../../utils/stream_transform.js';
5
- /**
6
- * @internal
7
- */
8
- export type RemoteConnector = {
9
- fetchCredentials: () => Promise<PowerSyncCredentials | null>;
10
- invalidateCredentials?: () => void;
11
- };
12
- /**
13
- * @internal
14
- */
15
- export declare const DEFAULT_REMOTE_LOGGER: Logger.ILogger;
16
- /**
17
- * @internal
18
- */
19
- export type SyncStreamOptions = {
20
- path: string;
21
- data: unknown;
22
- headers?: Record<string, string>;
23
- abortSignal: AbortSignal;
24
- fetchOptions?: Request;
25
- };
26
- /**
27
- * @public
28
- */
29
- export declare enum FetchStrategy {
30
- /**
31
- * Queues multiple sync events before processing, reducing round-trips.
32
- * This comes at the cost of more processing overhead, which may cause ACK timeouts on older/weaker devices for big enough datasets.
33
- */
34
- Buffered = "buffered",
35
- /**
36
- * Processes each sync event immediately before requesting the next.
37
- * This reduces processing overhead and improves real-time responsiveness.
38
- */
39
- Sequential = "sequential"
40
- }
41
- /**
42
- * @internal
43
- */
44
- export type SocketSyncStreamOptions = SyncStreamOptions & {
45
- fetchStrategy: FetchStrategy;
46
- };
47
- /**
48
- * @internal
49
- */
50
- export type FetchImplementation = typeof fetch;
51
- /**
52
- * Class wrapper for providing a fetch implementation.
53
- * The class wrapper is used to distinguish the fetchImplementation
54
- * option in [AbstractRemoteOptions] from the general fetch method
55
- * which is typeof "function"
56
- *
57
- * @internal
58
- */
59
- export declare class FetchImplementationProvider {
60
- getFetch(): FetchImplementation;
61
- }
62
- /**
63
- * @internal
64
- */
65
- export type AbstractRemoteOptions = {
66
- /**
67
- * Transforms the PowerSync base URL which might contain
68
- * `http(s)://` to the corresponding WebSocket variant
69
- * e.g. `ws(s)://`
70
- */
71
- socketUrlTransformer: (url: string) => string;
72
- /**
73
- * Optionally provide the fetch implementation to use.
74
- * Note that this usually needs to be bound to the global scope.
75
- * Binding should be done before passing here.
76
- */
77
- fetchImplementation: FetchImplementation | FetchImplementationProvider;
78
- /**
79
- * Optional options to pass directly to all `fetch` calls.
80
- *
81
- * This can include fields such as `dispatcher` (e.g. for proxy support),
82
- * `cache`, or any other fetch-compatible options.
83
- */
84
- fetchOptions?: {};
85
- };
86
- /**
87
- * @internal
88
- */
89
- export declare const DEFAULT_REMOTE_OPTIONS: AbstractRemoteOptions;
90
- /**
91
- * @internal
92
- */
93
- export declare abstract class AbstractRemote {
94
- protected connector: RemoteConnector;
95
- protected logger: ILogger;
96
- protected credentials: PowerSyncCredentials | null;
97
- protected options: AbstractRemoteOptions;
98
- constructor(connector: RemoteConnector, logger?: ILogger, options?: Partial<AbstractRemoteOptions>);
99
- /**
100
- * @returns a fetch implementation (function)
101
- * which can be called to perform fetch requests
102
- */
103
- get fetch(): FetchImplementation;
104
- /**
105
- * Get credentials currently cached, or fetch new credentials if none are
106
- * available.
107
- *
108
- * These credentials may have expired already.
109
- */
110
- getCredentials(): Promise<PowerSyncCredentials | null>;
111
- /**
112
- * Fetch a new set of credentials and cache it.
113
- *
114
- * Until this call succeeds, `getCredentials` will still return the
115
- * old credentials.
116
- *
117
- * This may be called before the current credentials have expired.
118
- */
119
- prefetchCredentials(): Promise<PowerSyncCredentials | null>;
120
- /**
121
- * Get credentials for PowerSync.
122
- *
123
- * This should always fetch a fresh set of credentials - don't use cached
124
- * values.
125
- */
126
- fetchCredentials(): Promise<PowerSyncCredentials | null>;
127
- /***
128
- * Immediately invalidate credentials.
129
- *
130
- * This may be called when the current credentials have expired.
131
- */
132
- invalidateCredentials(): void;
133
- getUserAgent(): string;
134
- protected buildRequest(path: string): Promise<{
135
- url: string;
136
- headers: {
137
- 'content-type': string;
138
- Authorization: string;
139
- 'x-user-agent': string;
140
- };
141
- }>;
142
- post(path: string, data: any, headers?: Record<string, string>): Promise<any>;
143
- get(path: string, headers?: Record<string, string>): Promise<any>;
144
- /**
145
- * @returns A text decoder decoding UTF-8. This is a method to allow patching it for Hermes which doesn't support the
146
- * builtin, without forcing us to bundle a polyfill with `@powersync/common`.
147
- */
148
- createTextDecoder(): TextDecoder;
149
- protected createSocket(url: string): WebSocket;
150
- /**
151
- * Returns a data stream of sync line data, fetched via RSocket-over-WebSocket.
152
- *
153
- * The only mechanism to abort the returned stream is to use the abort signal in {@link SocketSyncStreamOptions}.
154
- */
155
- socketStreamRaw(options: SocketSyncStreamOptions): Promise<SimpleAsyncIterator<Uint8Array>>;
156
- /**
157
- * @returns Whether the HTTP implementation on this platform can receive streamed binary responses. This is true on
158
- * all platforms except React Native (who would have guessed...), where we must not request BSON responses.
159
- *
160
- * @see https://github.com/react-native-community/fetch?tab=readme-ov-file#motivation
161
- */
162
- protected get supportsStreamingBinaryResponses(): boolean;
163
- /**
164
- * Posts a `/sync/stream` request, asserts that it completes successfully and returns the streaming response as an
165
- * async iterator of byte blobs.
166
- *
167
- * To cancel the async iterator, use the abort signal from {@link SyncStreamOptions} passed to this method.
168
- */
169
- protected fetchStreamRaw(options: SyncStreamOptions): Promise<{
170
- isBson: boolean;
171
- stream: SimpleAsyncIterator<Uint8Array>;
172
- }>;
173
- /**
174
- * Posts a `/sync/stream` request.
175
- *
176
- * Depending on the `Content-Type` of the response, this returns strings for sync lines or encoded BSON documents as
177
- * `Uint8Array`s.
178
- */
179
- fetchStream(options: SyncStreamOptions): Promise<SimpleAsyncIterator<Uint8Array | string>>;
180
- }