@powersync/service-module-mongodb-storage 0.0.0-dev-20250108073049

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 (123) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +67 -0
  3. package/README.md +3 -0
  4. package/dist/index.d.ts +5 -0
  5. package/dist/index.js +6 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/migrations/MongoMigrationAgent.d.ts +12 -0
  8. package/dist/migrations/MongoMigrationAgent.js +25 -0
  9. package/dist/migrations/MongoMigrationAgent.js.map +1 -0
  10. package/dist/migrations/db/migrations/1684951997326-init.d.ts +3 -0
  11. package/dist/migrations/db/migrations/1684951997326-init.js +30 -0
  12. package/dist/migrations/db/migrations/1684951997326-init.js.map +1 -0
  13. package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.d.ts +2 -0
  14. package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.js +5 -0
  15. package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.js.map +1 -0
  16. package/dist/migrations/db/migrations/1702295701188-sync-rule-state.d.ts +3 -0
  17. package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js +54 -0
  18. package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js.map +1 -0
  19. package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.d.ts +3 -0
  20. package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.js +26 -0
  21. package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.js.map +1 -0
  22. package/dist/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.d.ts +3 -0
  23. package/dist/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.js +28 -0
  24. package/dist/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.js.map +1 -0
  25. package/dist/migrations/mongo-migration-store.d.ts +7 -0
  26. package/dist/migrations/mongo-migration-store.js +49 -0
  27. package/dist/migrations/mongo-migration-store.js.map +1 -0
  28. package/dist/module/MongoStorageModule.d.ts +10 -0
  29. package/dist/module/MongoStorageModule.js +31 -0
  30. package/dist/module/MongoStorageModule.js.map +1 -0
  31. package/dist/storage/MongoBucketStorage.d.ts +48 -0
  32. package/dist/storage/MongoBucketStorage.js +426 -0
  33. package/dist/storage/MongoBucketStorage.js.map +1 -0
  34. package/dist/storage/implementation/MongoBucketBatch.d.ts +72 -0
  35. package/dist/storage/implementation/MongoBucketBatch.js +681 -0
  36. package/dist/storage/implementation/MongoBucketBatch.js.map +1 -0
  37. package/dist/storage/implementation/MongoCompactor.d.ts +40 -0
  38. package/dist/storage/implementation/MongoCompactor.js +300 -0
  39. package/dist/storage/implementation/MongoCompactor.js.map +1 -0
  40. package/dist/storage/implementation/MongoIdSequence.d.ts +12 -0
  41. package/dist/storage/implementation/MongoIdSequence.js +21 -0
  42. package/dist/storage/implementation/MongoIdSequence.js.map +1 -0
  43. package/dist/storage/implementation/MongoPersistedSyncRules.d.ts +9 -0
  44. package/dist/storage/implementation/MongoPersistedSyncRules.js +9 -0
  45. package/dist/storage/implementation/MongoPersistedSyncRules.js.map +1 -0
  46. package/dist/storage/implementation/MongoPersistedSyncRulesContent.d.ts +20 -0
  47. package/dist/storage/implementation/MongoPersistedSyncRulesContent.js +26 -0
  48. package/dist/storage/implementation/MongoPersistedSyncRulesContent.js.map +1 -0
  49. package/dist/storage/implementation/MongoStorageProvider.d.ts +5 -0
  50. package/dist/storage/implementation/MongoStorageProvider.js +33 -0
  51. package/dist/storage/implementation/MongoStorageProvider.js.map +1 -0
  52. package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +36 -0
  53. package/dist/storage/implementation/MongoSyncBucketStorage.js +529 -0
  54. package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -0
  55. package/dist/storage/implementation/MongoSyncRulesLock.d.ts +16 -0
  56. package/dist/storage/implementation/MongoSyncRulesLock.js +65 -0
  57. package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -0
  58. package/dist/storage/implementation/MongoTestStorageFactoryGenerator.d.ts +7 -0
  59. package/dist/storage/implementation/MongoTestStorageFactoryGenerator.js +16 -0
  60. package/dist/storage/implementation/MongoTestStorageFactoryGenerator.js.map +1 -0
  61. package/dist/storage/implementation/MongoWriteCheckpointAPI.d.ts +20 -0
  62. package/dist/storage/implementation/MongoWriteCheckpointAPI.js +104 -0
  63. package/dist/storage/implementation/MongoWriteCheckpointAPI.js.map +1 -0
  64. package/dist/storage/implementation/OperationBatch.d.ts +34 -0
  65. package/dist/storage/implementation/OperationBatch.js +119 -0
  66. package/dist/storage/implementation/OperationBatch.js.map +1 -0
  67. package/dist/storage/implementation/PersistedBatch.d.ts +46 -0
  68. package/dist/storage/implementation/PersistedBatch.js +223 -0
  69. package/dist/storage/implementation/PersistedBatch.js.map +1 -0
  70. package/dist/storage/implementation/db.d.ts +36 -0
  71. package/dist/storage/implementation/db.js +47 -0
  72. package/dist/storage/implementation/db.js.map +1 -0
  73. package/dist/storage/implementation/models.d.ts +139 -0
  74. package/dist/storage/implementation/models.js +2 -0
  75. package/dist/storage/implementation/models.js.map +1 -0
  76. package/dist/storage/implementation/util.d.ts +46 -0
  77. package/dist/storage/implementation/util.js +155 -0
  78. package/dist/storage/implementation/util.js.map +1 -0
  79. package/dist/storage/storage-index.d.ts +14 -0
  80. package/dist/storage/storage-index.js +15 -0
  81. package/dist/storage/storage-index.js.map +1 -0
  82. package/dist/types/types.d.ts +18 -0
  83. package/dist/types/types.js +9 -0
  84. package/dist/types/types.js.map +1 -0
  85. package/package.json +48 -0
  86. package/src/index.ts +7 -0
  87. package/src/migrations/MongoMigrationAgent.ts +39 -0
  88. package/src/migrations/db/migrations/1684951997326-init.ts +39 -0
  89. package/src/migrations/db/migrations/1688556755264-initial-sync-rules.ts +5 -0
  90. package/src/migrations/db/migrations/1702295701188-sync-rule-state.ts +105 -0
  91. package/src/migrations/db/migrations/1711543888062-write-checkpoint-index.ts +38 -0
  92. package/src/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.ts +40 -0
  93. package/src/migrations/mongo-migration-store.ts +62 -0
  94. package/src/module/MongoStorageModule.ts +37 -0
  95. package/src/storage/MongoBucketStorage.ts +531 -0
  96. package/src/storage/implementation/MongoBucketBatch.ts +896 -0
  97. package/src/storage/implementation/MongoCompactor.ts +381 -0
  98. package/src/storage/implementation/MongoIdSequence.ts +24 -0
  99. package/src/storage/implementation/MongoPersistedSyncRules.ts +16 -0
  100. package/src/storage/implementation/MongoPersistedSyncRulesContent.ts +49 -0
  101. package/src/storage/implementation/MongoStorageProvider.ts +39 -0
  102. package/src/storage/implementation/MongoSyncBucketStorage.ts +612 -0
  103. package/src/storage/implementation/MongoSyncRulesLock.ts +88 -0
  104. package/src/storage/implementation/MongoTestStorageFactoryGenerator.ts +25 -0
  105. package/src/storage/implementation/MongoWriteCheckpointAPI.ts +146 -0
  106. package/src/storage/implementation/OperationBatch.ts +129 -0
  107. package/src/storage/implementation/PersistedBatch.ts +283 -0
  108. package/src/storage/implementation/db.ts +87 -0
  109. package/src/storage/implementation/models.ts +161 -0
  110. package/src/storage/implementation/util.ts +169 -0
  111. package/src/storage/storage-index.ts +14 -0
  112. package/src/types/types.ts +18 -0
  113. package/test/src/__snapshots__/storage_sync.test.ts.snap +332 -0
  114. package/test/src/env.ts +6 -0
  115. package/test/src/setup.ts +9 -0
  116. package/test/src/storage.test.ts +7 -0
  117. package/test/src/storage_compacting.test.ts +6 -0
  118. package/test/src/storage_sync.test.ts +113 -0
  119. package/test/src/util.ts +8 -0
  120. package/test/tsconfig.json +31 -0
  121. package/tsconfig.json +31 -0
  122. package/tsconfig.tsbuildinfo +1 -0
  123. package/vitest.config.ts +15 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoBucketBatch.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoBucketBatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { storage } from '@powersync/service-core';
2
+ import { PowerSyncMongo } from './db.js';
3
+ /**
4
+ * Additional options, primarily for testing.
5
+ */
6
+ export interface MongoCompactOptions extends storage.CompactOptions {
7
+ /** Minimum of 2 */
8
+ clearBatchLimit?: number;
9
+ /** Minimum of 1 */
10
+ moveBatchLimit?: number;
11
+ /** Minimum of 1 */
12
+ moveBatchQueryLimit?: number;
13
+ }
14
+ export declare class MongoCompactor {
15
+ private db;
16
+ private group_id;
17
+ private updates;
18
+ private idLimitBytes;
19
+ private moveBatchLimit;
20
+ private moveBatchQueryLimit;
21
+ private clearBatchLimit;
22
+ private maxOpId;
23
+ private buckets;
24
+ constructor(db: PowerSyncMongo, group_id: number, options?: MongoCompactOptions);
25
+ /**
26
+ * Compact buckets by converting operations into MOVE and/or CLEAR operations.
27
+ *
28
+ * See /docs/compacting-operations.md for details.
29
+ */
30
+ compact(): Promise<void>;
31
+ compactInternal(bucket: string | undefined): Promise<void>;
32
+ private flush;
33
+ /**
34
+ * Perform a CLEAR compact for a bucket.
35
+ *
36
+ * @param bucket bucket name
37
+ * @param op op_id of the last non-PUT operation, which will be converted to CLEAR.
38
+ */
39
+ private clearBucket;
40
+ }
@@ -0,0 +1,300 @@
1
+ import { logger } from '@powersync/lib-services-framework';
2
+ import { utils } from '@powersync/service-core';
3
+ import { MaxKey, MinKey } from 'mongodb';
4
+ import { cacheKey } from './OperationBatch.js';
5
+ import { safeBulkWrite } from './util.js';
6
+ const DEFAULT_CLEAR_BATCH_LIMIT = 5000;
7
+ const DEFAULT_MOVE_BATCH_LIMIT = 2000;
8
+ const DEFAULT_MOVE_BATCH_QUERY_LIMIT = 10000;
9
+ /** This default is primarily for tests. */
10
+ const DEFAULT_MEMORY_LIMIT_MB = 64;
11
+ export class MongoCompactor {
12
+ constructor(db, group_id, options) {
13
+ this.db = db;
14
+ this.group_id = group_id;
15
+ this.updates = [];
16
+ this.idLimitBytes = (options?.memoryLimitMB ?? DEFAULT_MEMORY_LIMIT_MB) * 1024 * 1024;
17
+ this.moveBatchLimit = options?.moveBatchLimit ?? DEFAULT_MOVE_BATCH_LIMIT;
18
+ this.moveBatchQueryLimit = options?.moveBatchQueryLimit ?? DEFAULT_MOVE_BATCH_QUERY_LIMIT;
19
+ this.clearBatchLimit = options?.clearBatchLimit ?? DEFAULT_CLEAR_BATCH_LIMIT;
20
+ this.maxOpId = options?.maxOpId;
21
+ this.buckets = options?.compactBuckets;
22
+ }
23
+ /**
24
+ * Compact buckets by converting operations into MOVE and/or CLEAR operations.
25
+ *
26
+ * See /docs/compacting-operations.md for details.
27
+ */
28
+ async compact() {
29
+ if (this.buckets) {
30
+ for (let bucket of this.buckets) {
31
+ // We can make this more efficient later on by iterating
32
+ // through the buckets in a single query.
33
+ // That makes batching more tricky, so we leave for later.
34
+ await this.compactInternal(bucket);
35
+ }
36
+ }
37
+ else {
38
+ await this.compactInternal(undefined);
39
+ }
40
+ }
41
+ async compactInternal(bucket) {
42
+ const idLimitBytes = this.idLimitBytes;
43
+ let currentState = null;
44
+ let bucketLower;
45
+ let bucketUpper;
46
+ if (bucket == null) {
47
+ bucketLower = new MinKey();
48
+ bucketUpper = new MaxKey();
49
+ }
50
+ else if (bucket.includes('[')) {
51
+ // Exact bucket name
52
+ bucketLower = bucket;
53
+ bucketUpper = bucket;
54
+ }
55
+ else {
56
+ // Bucket definition name
57
+ bucketLower = `${bucket}[`;
58
+ bucketUpper = `${bucket}[\uFFFF`;
59
+ }
60
+ // Constant lower bound
61
+ const lowerBound = {
62
+ g: this.group_id,
63
+ b: bucketLower,
64
+ o: new MinKey()
65
+ };
66
+ // Upper bound is adjusted for each batch
67
+ let upperBound = {
68
+ g: this.group_id,
69
+ b: bucketUpper,
70
+ o: new MaxKey()
71
+ };
72
+ while (true) {
73
+ // Query one batch at a time, to avoid cursor timeouts
74
+ const batch = await this.db.bucket_data
75
+ .find({
76
+ _id: {
77
+ $gte: lowerBound,
78
+ $lt: upperBound
79
+ }
80
+ }, {
81
+ projection: {
82
+ _id: 1,
83
+ op: 1,
84
+ table: 1,
85
+ row_id: 1,
86
+ source_table: 1,
87
+ source_key: 1
88
+ },
89
+ limit: this.moveBatchQueryLimit,
90
+ sort: { _id: -1 },
91
+ singleBatch: true
92
+ })
93
+ .toArray();
94
+ if (batch.length == 0) {
95
+ // We've reached the end
96
+ break;
97
+ }
98
+ // Set upperBound for the next batch
99
+ upperBound = batch[batch.length - 1]._id;
100
+ for (let doc of batch) {
101
+ if (currentState == null || doc._id.b != currentState.bucket) {
102
+ if (currentState != null && currentState.lastNotPut != null && currentState.opsSincePut >= 1) {
103
+ // Important to flush before clearBucket()
104
+ await this.flush();
105
+ logger.info(`Inserting CLEAR at ${this.group_id}:${currentState.bucket}:${currentState.lastNotPut} to remove ${currentState.opsSincePut} operations`);
106
+ const bucket = currentState.bucket;
107
+ const clearOp = currentState.lastNotPut;
108
+ // Free memory before clearing bucket
109
+ currentState = null;
110
+ await this.clearBucket(bucket, clearOp);
111
+ }
112
+ currentState = {
113
+ bucket: doc._id.b,
114
+ seen: new Map(),
115
+ trackingSize: 0,
116
+ lastNotPut: null,
117
+ opsSincePut: 0
118
+ };
119
+ }
120
+ if (this.maxOpId != null && doc._id.o > this.maxOpId) {
121
+ continue;
122
+ }
123
+ let isPersistentPut = doc.op == 'PUT';
124
+ if (doc.op == 'REMOVE' || doc.op == 'PUT') {
125
+ const key = `${doc.table}/${doc.row_id}/${cacheKey(doc.source_table, doc.source_key)}`;
126
+ const targetOp = currentState.seen.get(key);
127
+ if (targetOp) {
128
+ // Will convert to MOVE, so don't count as PUT
129
+ isPersistentPut = false;
130
+ this.updates.push({
131
+ updateOne: {
132
+ filter: {
133
+ _id: doc._id
134
+ },
135
+ update: {
136
+ $set: {
137
+ op: 'MOVE',
138
+ target_op: targetOp
139
+ },
140
+ $unset: {
141
+ source_table: 1,
142
+ source_key: 1,
143
+ table: 1,
144
+ row_id: 1,
145
+ data: 1
146
+ }
147
+ }
148
+ }
149
+ });
150
+ }
151
+ else {
152
+ if (currentState.trackingSize >= idLimitBytes) {
153
+ // Reached memory limit.
154
+ // Keep the highest seen values in this case.
155
+ }
156
+ else {
157
+ // flatstr reduces the memory usage by flattening the string
158
+ currentState.seen.set(utils.flatstr(key), doc._id.o);
159
+ // length + 16 for the string
160
+ // 24 for the bigint
161
+ // 50 for map overhead
162
+ // 50 for additional overhead
163
+ currentState.trackingSize += key.length + 140;
164
+ }
165
+ }
166
+ }
167
+ if (isPersistentPut) {
168
+ currentState.lastNotPut = null;
169
+ currentState.opsSincePut = 0;
170
+ }
171
+ else if (doc.op != 'CLEAR') {
172
+ if (currentState.lastNotPut == null) {
173
+ currentState.lastNotPut = doc._id.o;
174
+ }
175
+ currentState.opsSincePut += 1;
176
+ }
177
+ if (this.updates.length >= this.moveBatchLimit) {
178
+ await this.flush();
179
+ }
180
+ }
181
+ }
182
+ await this.flush();
183
+ currentState?.seen.clear();
184
+ if (currentState?.lastNotPut != null && currentState?.opsSincePut > 1) {
185
+ logger.info(`Inserting CLEAR at ${this.group_id}:${currentState.bucket}:${currentState.lastNotPut} to remove ${currentState.opsSincePut} operations`);
186
+ const bucket = currentState.bucket;
187
+ const clearOp = currentState.lastNotPut;
188
+ // Free memory before clearing bucket
189
+ currentState = null;
190
+ await this.clearBucket(bucket, clearOp);
191
+ }
192
+ }
193
+ async flush() {
194
+ if (this.updates.length > 0) {
195
+ logger.info(`Compacting ${this.updates.length} ops`);
196
+ await safeBulkWrite(this.db.bucket_data, this.updates, {
197
+ // Order is not important.
198
+ // Since checksums are not affected, these operations can happen in any order,
199
+ // and it's fine if the operations are partially applied.
200
+ // Each individual operation is atomic.
201
+ ordered: false
202
+ });
203
+ this.updates = [];
204
+ }
205
+ }
206
+ /**
207
+ * Perform a CLEAR compact for a bucket.
208
+ *
209
+ * @param bucket bucket name
210
+ * @param op op_id of the last non-PUT operation, which will be converted to CLEAR.
211
+ */
212
+ async clearBucket(bucket, op) {
213
+ const opFilter = {
214
+ _id: {
215
+ $gte: {
216
+ g: this.group_id,
217
+ b: bucket,
218
+ o: new MinKey()
219
+ },
220
+ $lte: {
221
+ g: this.group_id,
222
+ b: bucket,
223
+ o: op
224
+ }
225
+ }
226
+ };
227
+ const session = this.db.client.startSession();
228
+ try {
229
+ let done = false;
230
+ while (!done) {
231
+ // Do the CLEAR operation in batches, with each batch a separate transaction.
232
+ // The state after each batch is fully consistent.
233
+ // We need a transaction per batch to make sure checksums stay consistent.
234
+ await session.withTransaction(async () => {
235
+ const query = this.db.bucket_data.find(opFilter, {
236
+ session,
237
+ sort: { _id: 1 },
238
+ projection: {
239
+ _id: 1,
240
+ op: 1,
241
+ checksum: 1,
242
+ target_op: 1
243
+ },
244
+ limit: this.clearBatchLimit
245
+ });
246
+ let checksum = 0;
247
+ let lastOpId = null;
248
+ let targetOp = null;
249
+ let gotAnOp = false;
250
+ for await (let op of query.stream()) {
251
+ if (op.op == 'MOVE' || op.op == 'REMOVE' || op.op == 'CLEAR') {
252
+ checksum = utils.addChecksums(checksum, op.checksum);
253
+ lastOpId = op._id;
254
+ if (op.op != 'CLEAR') {
255
+ gotAnOp = true;
256
+ }
257
+ if (op.target_op != null) {
258
+ if (targetOp == null || op.target_op > targetOp) {
259
+ targetOp = op.target_op;
260
+ }
261
+ }
262
+ }
263
+ else {
264
+ throw new Error(`Unexpected ${op.op} operation at ${op._id.g}:${op._id.b}:${op._id.o}`);
265
+ }
266
+ }
267
+ if (!gotAnOp) {
268
+ done = true;
269
+ return;
270
+ }
271
+ logger.info(`Flushing CLEAR at ${lastOpId?.o}`);
272
+ await this.db.bucket_data.deleteMany({
273
+ _id: {
274
+ $gte: {
275
+ g: this.group_id,
276
+ b: bucket,
277
+ o: new MinKey()
278
+ },
279
+ $lte: lastOpId
280
+ }
281
+ }, { session });
282
+ await this.db.bucket_data.insertOne({
283
+ _id: lastOpId,
284
+ op: 'CLEAR',
285
+ checksum: checksum,
286
+ data: null,
287
+ target_op: targetOp
288
+ }, { session });
289
+ }, {
290
+ writeConcern: { w: 'majority' },
291
+ readConcern: { level: 'snapshot' }
292
+ });
293
+ }
294
+ }
295
+ finally {
296
+ await session.endSession();
297
+ }
298
+ }
299
+ }
300
+ //# sourceMappingURL=MongoCompactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoCompactor.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoCompactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Manages op_id or similar sequence in memory.
3
+ *
4
+ * This is typically used within a transaction, with the last value persisted
5
+ * at the end of the transaction.
6
+ */
7
+ export declare class MongoIdSequence {
8
+ private _last;
9
+ constructor(last: bigint);
10
+ next(): bigint;
11
+ last(): bigint;
12
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Manages op_id or similar sequence in memory.
3
+ *
4
+ * This is typically used within a transaction, with the last value persisted
5
+ * at the end of the transaction.
6
+ */
7
+ export class MongoIdSequence {
8
+ constructor(last) {
9
+ if (typeof last != 'bigint') {
10
+ throw new Error(`BigInt required, got ${last} ${typeof last}`);
11
+ }
12
+ this._last = last;
13
+ }
14
+ next() {
15
+ return ++this._last;
16
+ }
17
+ last() {
18
+ return this._last;
19
+ }
20
+ }
21
+ //# sourceMappingURL=MongoIdSequence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoIdSequence.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoIdSequence.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAG1B,YAAY,IAAY;QACtB,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,IAAI,OAAO,IAAI,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,IAAI;QACF,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { SqlSyncRules } from '@powersync/service-sync-rules';
2
+ import { storage } from '@powersync/service-core';
3
+ export declare class MongoPersistedSyncRules implements storage.PersistedSyncRules {
4
+ readonly id: number;
5
+ readonly sync_rules: SqlSyncRules;
6
+ readonly checkpoint_lsn: string | null;
7
+ readonly slot_name: string;
8
+ constructor(id: number, sync_rules: SqlSyncRules, checkpoint_lsn: string | null, slot_name: string | null);
9
+ }
@@ -0,0 +1,9 @@
1
+ export class MongoPersistedSyncRules {
2
+ constructor(id, sync_rules, checkpoint_lsn, slot_name) {
3
+ this.id = id;
4
+ this.sync_rules = sync_rules;
5
+ this.checkpoint_lsn = checkpoint_lsn;
6
+ this.slot_name = slot_name ?? `powersync_${id}`;
7
+ }
8
+ }
9
+ //# sourceMappingURL=MongoPersistedSyncRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoPersistedSyncRules.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoPersistedSyncRules.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,uBAAuB;IAGlC,YACkB,EAAU,EACV,UAAwB,EACxB,cAA6B,EAC7C,SAAwB;QAHR,OAAE,GAAF,EAAE,CAAQ;QACV,eAAU,GAAV,UAAU,CAAc;QACxB,mBAAc,GAAd,cAAc,CAAe;QAG7C,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,aAAa,EAAE,EAAE,CAAC;IAClD,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import { storage } from '@powersync/service-core';
2
+ import * as mongo from 'mongodb';
3
+ import { MongoPersistedSyncRules } from './MongoPersistedSyncRules.js';
4
+ import { MongoSyncRulesLock } from './MongoSyncRulesLock.js';
5
+ import { PowerSyncMongo } from './db.js';
6
+ import { SyncRuleDocument } from './models.js';
7
+ export declare class MongoPersistedSyncRulesContent implements storage.PersistedSyncRulesContent {
8
+ private db;
9
+ readonly slot_name: string;
10
+ readonly id: number;
11
+ readonly sync_rules_content: string;
12
+ readonly last_checkpoint_lsn: string | null;
13
+ readonly last_fatal_error: string | null;
14
+ readonly last_keepalive_ts: Date | null;
15
+ readonly last_checkpoint_ts: Date | null;
16
+ current_lock: MongoSyncRulesLock | null;
17
+ constructor(db: PowerSyncMongo, doc: mongo.WithId<SyncRuleDocument>);
18
+ parsed(options: storage.ParseSyncRulesOptions): MongoPersistedSyncRules;
19
+ lock(): Promise<MongoSyncRulesLock>;
20
+ }
@@ -0,0 +1,26 @@
1
+ import { SqlSyncRules } from '@powersync/service-sync-rules';
2
+ import { MongoPersistedSyncRules } from './MongoPersistedSyncRules.js';
3
+ import { MongoSyncRulesLock } from './MongoSyncRulesLock.js';
4
+ export class MongoPersistedSyncRulesContent {
5
+ constructor(db, doc) {
6
+ this.db = db;
7
+ this.current_lock = null;
8
+ this.id = doc._id;
9
+ this.sync_rules_content = doc.content;
10
+ this.last_checkpoint_lsn = doc.last_checkpoint_lsn;
11
+ // Handle legacy values
12
+ this.slot_name = doc.slot_name ?? `powersync_${this.id}`;
13
+ this.last_fatal_error = doc.last_fatal_error;
14
+ this.last_checkpoint_ts = doc.last_checkpoint_ts;
15
+ this.last_keepalive_ts = doc.last_keepalive_ts;
16
+ }
17
+ parsed(options) {
18
+ return new MongoPersistedSyncRules(this.id, SqlSyncRules.fromYaml(this.sync_rules_content, options), this.last_checkpoint_lsn, this.slot_name);
19
+ }
20
+ async lock() {
21
+ const lock = await MongoSyncRulesLock.createLock(this.db, this);
22
+ this.current_lock = lock;
23
+ return lock;
24
+ }
25
+ }
26
+ //# sourceMappingURL=MongoPersistedSyncRulesContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoPersistedSyncRulesContent.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoPersistedSyncRulesContent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAI7D,MAAM,OAAO,8BAA8B;IAYzC,YACU,EAAkB,EAC1B,GAAmC;QAD3B,OAAE,GAAF,EAAE,CAAgB;QAHrB,iBAAY,GAA8B,IAAI,CAAC;QAMpD,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;QAClB,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC,mBAAmB,CAAC;QACnD,uBAAuB;QACvB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,aAAa,IAAI,CAAC,EAAE,EAAE,CAAC;QACzD,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,CAAC;QAC7C,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,kBAAkB,CAAC;QACjD,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,OAAsC;QAC3C,OAAO,IAAI,uBAAuB,CAChC,IAAI,CAAC,EAAE,EACP,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,EACvD,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ import { storage } from '@powersync/service-core';
2
+ export declare class MongoStorageProvider implements storage.BucketStorageProvider {
3
+ get type(): "mongodb";
4
+ getStorage(options: storage.GetStorageOptions): Promise<storage.ActiveStorage>;
5
+ }
@@ -0,0 +1,33 @@
1
+ import * as lib_mongo from '@powersync/lib-service-mongodb';
2
+ import { logger } from '@powersync/lib-services-framework';
3
+ import { MongoStorageConfig } from '../../types/types.js';
4
+ import { MongoBucketStorage } from '../MongoBucketStorage.js';
5
+ import { PowerSyncMongo } from './db.js';
6
+ export class MongoStorageProvider {
7
+ get type() {
8
+ return lib_mongo.MONGO_CONNECTION_TYPE;
9
+ }
10
+ async getStorage(options) {
11
+ const { resolvedConfig } = options;
12
+ const { storage } = resolvedConfig;
13
+ if (storage.type != this.type) {
14
+ // This should not be reached since the generation should be managed externally.
15
+ throw new Error(`Cannot create MongoDB bucket storage with provided config ${storage.type} !== ${this.type}`);
16
+ }
17
+ const decodedConfig = MongoStorageConfig.decode(storage);
18
+ const client = lib_mongo.db.createMongoClient(decodedConfig);
19
+ const database = new PowerSyncMongo(client, { database: resolvedConfig.storage.database });
20
+ return {
21
+ storage: new MongoBucketStorage(database, {
22
+ // TODO currently need the entire resolved config due to this
23
+ slot_name_prefix: resolvedConfig.slot_name_prefix
24
+ }),
25
+ shutDown: () => client.close(),
26
+ tearDown: () => {
27
+ logger.info(`Tearing down storage: ${database.db.namespace}...`);
28
+ return database.db.dropDatabase();
29
+ }
30
+ };
31
+ }
32
+ }
33
+ //# sourceMappingURL=MongoStorageProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoStorageProvider.js","sourceRoot":"","sources":["../../../src/storage/implementation/MongoStorageProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,OAAO,oBAAoB;IAC/B,IAAI,IAAI;QACN,OAAO,SAAS,CAAC,qBAAqB,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAkC;QACjD,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QAEnC,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC;QACnC,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC9B,gFAAgF;YAChF,MAAM,IAAI,KAAK,CAAC,6DAA6D,OAAO,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAChH,CAAC;QAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,OAAc,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAE7D,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE3F,OAAO;YACL,OAAO,EAAE,IAAI,kBAAkB,CAAC,QAAQ,EAAE;gBACxC,6DAA6D;gBAC7D,gBAAgB,EAAE,cAAc,CAAC,gBAAgB;aAClD,CAAC;YACF,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE;YAC9B,QAAQ,EAAE,GAAG,EAAE;gBACb,MAAM,CAAC,IAAI,CAAC,yBAAyB,QAAQ,CAAC,EAAE,CAAC,SAAS,KAAK,CAAC,CAAC;gBACjE,OAAO,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;YACpC,CAAC;SAC8B,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ import { SqliteJsonRow, SqliteJsonValue, SqlSyncRules } from '@powersync/service-sync-rules';
2
+ import { DisposableObserver } from '@powersync/lib-services-framework';
3
+ import { storage, utils } from '@powersync/service-core';
4
+ import { MongoBucketStorage } from '../MongoBucketStorage.js';
5
+ export declare class MongoSyncBucketStorage extends DisposableObserver<storage.SyncRulesBucketStorageListener> implements storage.SyncRulesBucketStorage {
6
+ readonly factory: MongoBucketStorage;
7
+ readonly group_id: number;
8
+ private readonly sync_rules;
9
+ readonly slot_name: string;
10
+ private readonly db;
11
+ private checksumCache;
12
+ private parsedSyncRulesCache;
13
+ private writeCheckpointAPI;
14
+ constructor(factory: MongoBucketStorage, group_id: number, sync_rules: storage.PersistedSyncRulesContent, slot_name: string, writeCheckpointMode?: storage.WriteCheckpointMode);
15
+ get writeCheckpointMode(): storage.WriteCheckpointMode;
16
+ setWriteCheckpointMode(mode: storage.WriteCheckpointMode): void;
17
+ batchCreateCustomWriteCheckpoints(checkpoints: storage.BatchedCustomWriteCheckpointOptions[]): Promise<void>;
18
+ createCustomWriteCheckpoint(checkpoint: storage.BatchedCustomWriteCheckpointOptions): Promise<bigint>;
19
+ createManagedWriteCheckpoint(checkpoint: storage.ManagedWriteCheckpointOptions): Promise<bigint>;
20
+ lastWriteCheckpoint(filters: storage.SyncStorageLastWriteCheckpointFilters): Promise<bigint | null>;
21
+ getParsedSyncRules(options: storage.ParseSyncRulesOptions): SqlSyncRules;
22
+ getCheckpoint(): Promise<storage.ReplicationCheckpoint>;
23
+ startBatch(options: storage.StartBatchOptions, callback: (batch: storage.BucketStorageBatch) => Promise<void>): Promise<storage.FlushedResult | null>;
24
+ resolveTable(options: storage.ResolveTableOptions): Promise<storage.ResolveTableResult>;
25
+ getParameterSets(checkpoint: utils.OpId, lookups: SqliteJsonValue[][]): Promise<SqliteJsonRow[]>;
26
+ getBucketDataBatch(checkpoint: utils.OpId, dataBuckets: Map<string, string>, options?: storage.BucketDataBatchOptions): AsyncIterable<storage.SyncBucketDataBatch>;
27
+ getChecksums(checkpoint: utils.OpId, buckets: string[]): Promise<utils.ChecksumMap>;
28
+ private getChecksumsInternal;
29
+ terminate(options?: storage.TerminateOptions): Promise<void>;
30
+ getStatus(): Promise<storage.SyncRuleStatus>;
31
+ clear(): Promise<void>;
32
+ private clearIteration;
33
+ autoActivate(): Promise<void>;
34
+ reportError(e: any): Promise<void>;
35
+ compact(options?: storage.CompactOptions): Promise<void>;
36
+ }