@powersync/service-module-mongodb-storage 0.0.0-dev-20260225093637 → 0.0.0-dev-20260313100403

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 (70) hide show
  1. package/CHANGELOG.md +51 -7
  2. package/dist/storage/MongoBucketStorage.js +17 -3
  3. package/dist/storage/MongoBucketStorage.js.map +1 -1
  4. package/dist/storage/MongoReportStorage.d.ts +3 -3
  5. package/dist/storage/MongoReportStorage.js +5 -5
  6. package/dist/storage/MongoReportStorage.js.map +1 -1
  7. package/dist/storage/implementation/MongoBucketBatch.d.ts +13 -11
  8. package/dist/storage/implementation/MongoBucketBatch.js +208 -127
  9. package/dist/storage/implementation/MongoBucketBatch.js.map +1 -1
  10. package/dist/storage/implementation/MongoChecksums.d.ts +4 -4
  11. package/dist/storage/implementation/MongoChecksums.js +1 -0
  12. package/dist/storage/implementation/MongoChecksums.js.map +1 -1
  13. package/dist/storage/implementation/MongoCompactor.d.ts +2 -2
  14. package/dist/storage/implementation/MongoCompactor.js +52 -26
  15. package/dist/storage/implementation/MongoCompactor.js.map +1 -1
  16. package/dist/storage/implementation/MongoParameterCompactor.d.ts +2 -2
  17. package/dist/storage/implementation/MongoParameterCompactor.js.map +1 -1
  18. package/dist/storage/implementation/MongoPersistedSyncRulesContent.js +3 -7
  19. package/dist/storage/implementation/MongoPersistedSyncRulesContent.js.map +1 -1
  20. package/dist/storage/implementation/MongoSyncBucketStorage.d.ts +9 -4
  21. package/dist/storage/implementation/MongoSyncBucketStorage.js +35 -33
  22. package/dist/storage/implementation/MongoSyncBucketStorage.js.map +1 -1
  23. package/dist/storage/implementation/MongoSyncRulesLock.d.ts +3 -3
  24. package/dist/storage/implementation/MongoSyncRulesLock.js.map +1 -1
  25. package/dist/storage/implementation/MongoWriteCheckpointAPI.d.ts +4 -4
  26. package/dist/storage/implementation/MongoWriteCheckpointAPI.js.map +1 -1
  27. package/dist/storage/implementation/OperationBatch.js +3 -2
  28. package/dist/storage/implementation/OperationBatch.js.map +1 -1
  29. package/dist/storage/implementation/PersistedBatch.d.ts +11 -4
  30. package/dist/storage/implementation/PersistedBatch.js +42 -11
  31. package/dist/storage/implementation/PersistedBatch.js.map +1 -1
  32. package/dist/storage/implementation/db.d.ts +35 -1
  33. package/dist/storage/implementation/db.js +99 -0
  34. package/dist/storage/implementation/db.js.map +1 -1
  35. package/dist/storage/implementation/models.d.ts +15 -2
  36. package/dist/storage/implementation/models.js +2 -1
  37. package/dist/storage/implementation/models.js.map +1 -1
  38. package/dist/utils/test-utils.d.ts +4 -1
  39. package/dist/utils/test-utils.js +15 -12
  40. package/dist/utils/test-utils.js.map +1 -1
  41. package/dist/utils/util.d.ts +2 -1
  42. package/dist/utils/util.js +15 -1
  43. package/dist/utils/util.js.map +1 -1
  44. package/package.json +7 -7
  45. package/src/storage/MongoBucketStorage.ts +30 -8
  46. package/src/storage/MongoReportStorage.ts +5 -5
  47. package/src/storage/implementation/MongoBucketBatch.ts +263 -177
  48. package/src/storage/implementation/MongoChecksums.ts +5 -3
  49. package/src/storage/implementation/MongoCompactor.ts +62 -31
  50. package/src/storage/implementation/MongoParameterCompactor.ts +3 -3
  51. package/src/storage/implementation/MongoPersistedSyncRulesContent.ts +4 -11
  52. package/src/storage/implementation/MongoSyncBucketStorage.ts +33 -26
  53. package/src/storage/implementation/MongoSyncRulesLock.ts +3 -3
  54. package/src/storage/implementation/MongoWriteCheckpointAPI.ts +4 -4
  55. package/src/storage/implementation/OperationBatch.ts +3 -2
  56. package/src/storage/implementation/PersistedBatch.ts +42 -11
  57. package/src/storage/implementation/db.ts +129 -1
  58. package/src/storage/implementation/models.ts +18 -3
  59. package/src/utils/test-utils.ts +15 -12
  60. package/src/utils/util.ts +17 -2
  61. package/test/src/__snapshots__/{connection-report-storage.test.ts.snap → client-connections-storage.test.ts.snap} +68 -68
  62. package/test/src/__snapshots__/storage.test.ts.snap +201 -0
  63. package/test/src/__snapshots__/storage_compacting.test.ts.snap +17 -0
  64. package/test/src/__snapshots__/storage_sync.test.ts.snap +1111 -16
  65. package/test/src/{connection-report-storage.test.ts → client-connections-storage.test.ts} +1 -1
  66. package/test/src/storage.test.ts +9 -7
  67. package/test/src/storage_compacting.test.ts +54 -45
  68. package/test/src/storage_sync.test.ts +53 -51
  69. package/test/src/util.ts +3 -3
  70. package/tsconfig.tsbuildinfo +1 -1
@@ -1,7 +1,7 @@
1
1
  import * as lib_mongo from '@powersync/lib-service-mongodb';
2
2
  import { mongo } from '@powersync/lib-service-mongodb';
3
3
  import { MongoStorageConfig } from '../../types/types.js';
4
- import { BucketDataDocument, BucketParameterDocument, BucketStateDocument, CheckpointEventDocument, ClientConnectionDocument, CurrentDataDocument, CustomWriteCheckpointDocument, IdSequenceDocument, InstanceDocument, SourceTableDocument, SyncRuleDocument, WriteCheckpointDocument } from './models.js';
4
+ import { BucketDataDocument, BucketParameterDocument, BucketStateDocument, CheckpointEventDocument, ClientConnectionDocument, CurrentDataDocument, CurrentDataDocumentV3, CustomWriteCheckpointDocument, IdSequenceDocument, InstanceDocument, SourceTableDocument, StorageConfig, SyncRuleDocument, WriteCheckpointDocument } from './models.js';
5
5
  export interface PowerSyncMongoOptions {
6
6
  /**
7
7
  * Optional - uses the database from the MongoClient connection URI if not specified.
@@ -10,6 +10,7 @@ export interface PowerSyncMongoOptions {
10
10
  }
11
11
  export declare class PowerSyncMongo {
12
12
  readonly current_data: mongo.Collection<CurrentDataDocument>;
13
+ readonly v3_current_data: mongo.Collection<CurrentDataDocumentV3>;
13
14
  readonly bucket_data: mongo.Collection<BucketDataDocument>;
14
15
  readonly bucket_parameters: mongo.Collection<BucketParameterDocument>;
15
16
  readonly op_id_sequence: mongo.Collection<IdSequenceDocument>;
@@ -25,6 +26,7 @@ export declare class PowerSyncMongo {
25
26
  readonly client: mongo.MongoClient;
26
27
  readonly db: mongo.Db;
27
28
  constructor(client: mongo.MongoClient, options?: PowerSyncMongoOptions);
29
+ versioned(storageConfig: StorageConfig): VersionedPowerSyncMongo;
28
30
  /**
29
31
  * Clear all collections.
30
32
  */
@@ -57,5 +59,37 @@ export declare class PowerSyncMongo {
57
59
  * Only use in migrations and tests.
58
60
  */
59
61
  createBucketStateIndex2(): Promise<void>;
62
+ initializeStorageVersion(storageConfig: StorageConfig): Promise<void>;
63
+ }
64
+ /**
65
+ * This is similar to PowerSyncMongo, but blocks access to certain collections based on the storage version.
66
+ */
67
+ export declare class VersionedPowerSyncMongo {
68
+ #private;
69
+ readonly client: mongo.MongoClient;
70
+ readonly db: mongo.Db;
71
+ readonly storageConfig: StorageConfig;
72
+ constructor(upstream: PowerSyncMongo, storageConfig: StorageConfig);
73
+ /**
74
+ * Uses either `current_data` or `v3_current_data` collection based on the storage version.
75
+ *
76
+ * Use in places where it does not matter which version is used.
77
+ */
78
+ get common_current_data(): mongo.Collection<CurrentDataDocument>;
79
+ get v1_current_data(): lib_mongo.mongo.Collection<CurrentDataDocument>;
80
+ get v3_current_data(): lib_mongo.mongo.Collection<CurrentDataDocumentV3>;
81
+ get bucket_data(): lib_mongo.mongo.Collection<BucketDataDocument>;
82
+ get bucket_parameters(): lib_mongo.mongo.Collection<BucketParameterDocument>;
83
+ get op_id_sequence(): lib_mongo.mongo.Collection<IdSequenceDocument>;
84
+ get sync_rules(): lib_mongo.mongo.Collection<SyncRuleDocument>;
85
+ get source_tables(): lib_mongo.mongo.Collection<SourceTableDocument>;
86
+ get custom_write_checkpoints(): lib_mongo.mongo.Collection<CustomWriteCheckpointDocument>;
87
+ get write_checkpoints(): lib_mongo.mongo.Collection<WriteCheckpointDocument>;
88
+ get instance(): lib_mongo.mongo.Collection<InstanceDocument>;
89
+ get locks(): lib_mongo.mongo.Collection<lib_mongo.Lock>;
90
+ get bucket_state(): lib_mongo.mongo.Collection<BucketStateDocument>;
91
+ get checkpoint_events(): lib_mongo.mongo.Collection<CheckpointEventDocument>;
92
+ get connection_report_events(): lib_mongo.mongo.Collection<ClientConnectionDocument>;
93
+ notifyCheckpoint(): Promise<void>;
60
94
  }
61
95
  export declare function createPowerSyncMongo(config: MongoStorageConfig, options?: lib_mongo.MongoConnectionOptions): PowerSyncMongo;
@@ -1,7 +1,9 @@
1
1
  import * as lib_mongo from '@powersync/lib-service-mongodb';
2
2
  import { POWERSYNC_VERSION, storage } from '@powersync/service-core';
3
+ import { ServiceAssertionError } from '@powersync/lib-services-framework';
3
4
  export class PowerSyncMongo {
4
5
  current_data;
6
+ v3_current_data;
5
7
  bucket_data;
6
8
  bucket_parameters;
7
9
  op_id_sequence;
@@ -23,6 +25,7 @@ export class PowerSyncMongo {
23
25
  });
24
26
  this.db = db;
25
27
  this.current_data = db.collection('current_data');
28
+ this.v3_current_data = db.collection('v3_current_data');
26
29
  this.bucket_data = db.collection('bucket_data');
27
30
  this.bucket_parameters = db.collection('bucket_parameters');
28
31
  this.op_id_sequence = db.collection('op_id_sequence');
@@ -36,11 +39,15 @@ export class PowerSyncMongo {
36
39
  this.checkpoint_events = this.db.collection('checkpoint_events');
37
40
  this.connection_report_events = this.db.collection('connection_report_events');
38
41
  }
42
+ versioned(storageConfig) {
43
+ return new VersionedPowerSyncMongo(this, storageConfig);
44
+ }
39
45
  /**
40
46
  * Clear all collections.
41
47
  */
42
48
  async clear() {
43
49
  await this.current_data.deleteMany({});
50
+ await this.v3_current_data.deleteMany({});
44
51
  await this.bucket_data.deleteMany({});
45
52
  await this.bucket_parameters.deleteMany({});
46
53
  await this.op_id_sequence.deleteMany({});
@@ -130,6 +137,98 @@ export class PowerSyncMongo {
130
137
  'estimate_since_compact.count': -1
131
138
  }, { name: 'dirty_count' });
132
139
  }
140
+ async initializeStorageVersion(storageConfig) {
141
+ if (storageConfig.softDeleteCurrentData) {
142
+ // Initialize the v3_current_data collection, which is used for the new storage version.
143
+ // No-op if this already exists
144
+ await this.v3_current_data.createIndex({
145
+ '_id.g': 1,
146
+ pending_delete: 1
147
+ }, {
148
+ partialFilterExpression: { pending_delete: { $exists: true } },
149
+ name: 'pending_delete'
150
+ });
151
+ }
152
+ }
153
+ }
154
+ /**
155
+ * This is similar to PowerSyncMongo, but blocks access to certain collections based on the storage version.
156
+ */
157
+ export class VersionedPowerSyncMongo {
158
+ client;
159
+ db;
160
+ storageConfig;
161
+ #upstream;
162
+ constructor(upstream, storageConfig) {
163
+ this.#upstream = upstream;
164
+ this.client = upstream.client;
165
+ this.db = upstream.db;
166
+ this.storageConfig = storageConfig;
167
+ }
168
+ /**
169
+ * Uses either `current_data` or `v3_current_data` collection based on the storage version.
170
+ *
171
+ * Use in places where it does not matter which version is used.
172
+ */
173
+ get common_current_data() {
174
+ if (this.storageConfig.softDeleteCurrentData) {
175
+ return this.#upstream.v3_current_data;
176
+ }
177
+ else {
178
+ return this.#upstream.current_data;
179
+ }
180
+ }
181
+ get v1_current_data() {
182
+ if (this.storageConfig.softDeleteCurrentData) {
183
+ throw new ServiceAssertionError('current_data collection should not be used when softDeleteCurrentData is enabled');
184
+ }
185
+ return this.#upstream.current_data;
186
+ }
187
+ get v3_current_data() {
188
+ if (!this.storageConfig.softDeleteCurrentData) {
189
+ throw new ServiceAssertionError('v3_current_data collection should not be used when softDeleteCurrentData is disabled');
190
+ }
191
+ return this.#upstream.v3_current_data;
192
+ }
193
+ get bucket_data() {
194
+ return this.#upstream.bucket_data;
195
+ }
196
+ get bucket_parameters() {
197
+ return this.#upstream.bucket_parameters;
198
+ }
199
+ get op_id_sequence() {
200
+ return this.#upstream.op_id_sequence;
201
+ }
202
+ get sync_rules() {
203
+ return this.#upstream.sync_rules;
204
+ }
205
+ get source_tables() {
206
+ return this.#upstream.source_tables;
207
+ }
208
+ get custom_write_checkpoints() {
209
+ return this.#upstream.custom_write_checkpoints;
210
+ }
211
+ get write_checkpoints() {
212
+ return this.#upstream.write_checkpoints;
213
+ }
214
+ get instance() {
215
+ return this.#upstream.instance;
216
+ }
217
+ get locks() {
218
+ return this.#upstream.locks;
219
+ }
220
+ get bucket_state() {
221
+ return this.#upstream.bucket_state;
222
+ }
223
+ get checkpoint_events() {
224
+ return this.#upstream.checkpoint_events;
225
+ }
226
+ get connection_report_events() {
227
+ return this.#upstream.connection_report_events;
228
+ }
229
+ notifyCheckpoint() {
230
+ return this.#upstream.notifyCheckpoint();
231
+ }
133
232
  }
134
233
  export function createPowerSyncMongo(config, options) {
135
234
  return new PowerSyncMongo(lib_mongo.createMongoClient(config, {
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/storage/implementation/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/storage/implementation/db.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { InternalOpId, storage } from '@powersync/service-core';
1
+ import { InternalOpId, SerializedSyncPlan, storage } from '@powersync/service-core';
2
2
  import { SqliteJsonValue } from '@powersync/service-sync-rules';
3
3
  import * as bson from 'bson';
4
4
  import { event_types } from '@powersync/service-types';
@@ -32,6 +32,18 @@ export interface CurrentDataDocument {
32
32
  buckets: CurrentBucket[];
33
33
  lookups: bson.Binary[];
34
34
  }
35
+ export interface CurrentDataDocumentV3 {
36
+ _id: SourceKey;
37
+ data: bson.Binary;
38
+ buckets: CurrentBucket[];
39
+ lookups: bson.Binary[];
40
+ /**
41
+ * If set, this can be deleted, once there is a consistent checkpoint >= pending_delete.
42
+ *
43
+ * This must only be set if buckets = [], lookups = [].
44
+ */
45
+ pending_delete?: bigint;
46
+ }
35
47
  export interface CurrentBucket {
36
48
  bucket: string;
37
49
  table: string;
@@ -176,6 +188,7 @@ export interface SyncRuleDocument {
176
188
  last_fatal_error: string | null;
177
189
  last_fatal_error_ts: Date | null;
178
190
  content: string;
191
+ serialized_plan?: SerializedSyncPlan | null;
179
192
  lock?: {
180
193
  id: string;
181
194
  expires_at: Date;
@@ -191,7 +204,7 @@ export interface StorageConfig extends storage.StorageVersionConfig {
191
204
  */
192
205
  longChecksums: boolean;
193
206
  }
194
- export declare function getMongoStorageConfig(storageVersion: number): StorageConfig | undefined;
207
+ export declare function getMongoStorageConfig(storageVersion: number): StorageConfig;
195
208
  export interface CheckpointEventDocument {
196
209
  _id: bson.ObjectId;
197
210
  }
@@ -1,9 +1,10 @@
1
1
  import { storage } from '@powersync/service-core';
2
+ import { ErrorCode, ServiceError } from '@powersync/lib-services-framework';
2
3
  const LONG_CHECKSUMS_STORAGE_VERSION = 2;
3
4
  export function getMongoStorageConfig(storageVersion) {
4
5
  const baseConfig = storage.STORAGE_VERSION_CONFIG[storageVersion];
5
6
  if (baseConfig == null) {
6
- return undefined;
7
+ throw new ServiceError(ErrorCode.PSYNC_S1005, `Unsupported storage version ${storageVersion}`);
7
8
  }
8
9
  return { ...baseConfig, longChecksums: storageVersion >= LONG_CHECKSUMS_STORAGE_VERSION };
9
10
  }
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/storage/implementation/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,OAAO,EAAE,MAAM,yBAAyB,CAAC;AA4NhE,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEzC,MAAM,UAAU,qBAAqB,CAAC,cAAsB;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;IAClE,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,GAAG,UAAU,EAAE,aAAa,EAAE,cAAc,IAAI,8BAA8B,EAAE,CAAC;AAC5F,CAAC"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/storage/implementation/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAIpF,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAuO5E,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEzC,MAAM,UAAU,qBAAqB,CAAC,cAAsB;IAC1D,MAAM,UAAU,GAAG,OAAO,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;IAClE,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CAAC,SAAS,CAAC,WAAW,EAAE,+BAA+B,cAAc,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,OAAO,EAAE,GAAG,UAAU,EAAE,aAAa,EAAE,cAAc,IAAI,8BAA8B,EAAE,CAAC;AAC5F,CAAC"}
@@ -7,6 +7,9 @@ export type MongoTestStorageOptions = {
7
7
  isCI: boolean;
8
8
  internalOptions?: MongoBucketStorageOptions;
9
9
  };
10
- export declare function mongoTestStorageFactoryGenerator(factoryOptions: MongoTestStorageOptions): (options?: TestStorageOptions) => Promise<MongoBucketStorage>;
10
+ export declare function mongoTestStorageFactoryGenerator(factoryOptions: MongoTestStorageOptions): {
11
+ factory: (options?: TestStorageOptions) => Promise<MongoBucketStorage>;
12
+ tableIdStrings: boolean;
13
+ };
11
14
  export declare function mongoTestReportStorageFactoryGenerator(factoryOptions: MongoTestStorageOptions): (options?: TestStorageOptions) => Promise<MongoReportStorage>;
12
15
  export declare const connectMongoForTests: (url: string, isCI: boolean) => PowerSyncMongo;
@@ -3,18 +3,21 @@ import { MongoBucketStorage } from '../storage/MongoBucketStorage.js';
3
3
  import { MongoReportStorage } from '../storage/MongoReportStorage.js';
4
4
  import { PowerSyncMongo } from '../storage/implementation/db.js';
5
5
  export function mongoTestStorageFactoryGenerator(factoryOptions) {
6
- return async (options) => {
7
- const db = connectMongoForTests(factoryOptions.url, factoryOptions.isCI);
8
- // None of the tests insert data into this collection, so it was never created
9
- if (!(await db.db.listCollections({ name: db.bucket_parameters.collectionName }).hasNext())) {
10
- await db.db.createCollection('bucket_parameters');
11
- }
12
- // Full migrations are not currently run for tests, so we manually create this
13
- await db.createCheckpointEventsCollection();
14
- if (!options?.doNotClear) {
15
- await db.clear();
16
- }
17
- return new MongoBucketStorage(db, { slot_name_prefix: 'test_' }, factoryOptions.internalOptions);
6
+ return {
7
+ factory: async (options) => {
8
+ const db = connectMongoForTests(factoryOptions.url, factoryOptions.isCI);
9
+ // None of the tests insert data into this collection, so it was never created
10
+ if (!(await db.db.listCollections({ name: db.bucket_parameters.collectionName }).hasNext())) {
11
+ await db.db.createCollection('bucket_parameters');
12
+ }
13
+ // Full migrations are not currently run for tests, so we manually create this
14
+ await db.createCheckpointEventsCollection();
15
+ if (!options?.doNotClear) {
16
+ await db.clear();
17
+ }
18
+ return new MongoBucketStorage(db, { slot_name_prefix: 'test_' }, factoryOptions.internalOptions);
19
+ },
20
+ tableIdStrings: false
18
21
  };
19
22
  }
20
23
  export function mongoTestReportStorageFactoryGenerator(factoryOptions) {
@@ -1 +1 @@
1
- {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/utils/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAA6B,MAAM,kCAAkC,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAQjE,MAAM,UAAU,gCAAgC,CAAC,cAAuC;IACtF,OAAO,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC5C,MAAM,EAAE,GAAG,oBAAoB,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzE,8EAA8E;QAC9E,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YAC5F,MAAM,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QACpD,CAAC;QAED,8EAA8E;QAC9E,MAAM,EAAE,CAAC,gCAAgC,EAAE,CAAC;QAE5C,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;YACzB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,kBAAkB,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;IACnG,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,cAAuC;IAC5F,OAAO,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC5C,MAAM,EAAE,GAAG,oBAAoB,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzE,MAAM,EAAE,CAAC,mCAAmC,EAAE,CAAC;QAE/C,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;YACzB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAE,IAAa,EAAE,EAAE;IACjE,0EAA0E;IAC1E,oEAAoE;IACpE,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACxC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QACvC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QACtC,wBAAwB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;KAChD,CAAC,CAAC;IACH,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC,CAAC"}
1
+ {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/utils/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAA6B,MAAM,kCAAkC,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAQjE,MAAM,UAAU,gCAAgC,CAAC,cAAuC;IACtF,OAAO;QACL,OAAO,EAAE,KAAK,EAAE,OAA4B,EAAE,EAAE;YAC9C,MAAM,EAAE,GAAG,oBAAoB,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;YAEzE,8EAA8E;YAC9E,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC5F,MAAM,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;YACpD,CAAC;YAED,8EAA8E;YAC9E,MAAM,EAAE,CAAC,gCAAgC,EAAE,CAAC;YAE5C,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;gBACzB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC;YAED,OAAO,IAAI,kBAAkB,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,cAAc,CAAC,eAAe,CAAC,CAAC;QACnG,CAAC;QACD,cAAc,EAAE,KAAK;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sCAAsC,CAAC,cAAuC;IAC5F,OAAO,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC5C,MAAM,EAAE,GAAG,oBAAoB,CAAC,cAAc,CAAC,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC;QAEzE,MAAM,EAAE,CAAC,mCAAmC,EAAE,CAAC;QAE/C,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;YACzB,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAW,EAAE,IAAa,EAAE,EAAE;IACjE,0EAA0E;IAC1E,oEAAoE;IACpE,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACxC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QACvC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QACtC,wBAAwB,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;KAChD,CAAC,CAAC;IACH,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC,CAAC"}
@@ -20,7 +20,8 @@ export declare function readSingleBatch<T>(cursor: mongo.AbstractCursor<T>): Pro
20
20
  hasMore: boolean;
21
21
  }>;
22
22
  export declare function mapOpEntry(row: BucketDataDocument): utils.OplogEntry;
23
- export declare function replicaIdToSubkey(table: bson.ObjectId, id: storage.ReplicaId): string;
23
+ export declare function replicaIdToSubkey(table: storage.SourceTableId, id: storage.ReplicaId): string;
24
+ export declare function mongoTableId(table: storage.SourceTableId): bson.ObjectId;
24
25
  export declare function setSessionSnapshotTime(session: mongo.ClientSession, time: bson.Timestamp): void;
25
26
  export declare const createPaginatedConnectionQuery: <T extends mongo.Document>(query: mongo.Filter<T>, collection: mongo.Collection<T>, limit: number, cursor?: string) => Promise<{
26
27
  items: mongo.WithId<T>[];
@@ -86,7 +86,7 @@ export function mapOpEntry(row) {
86
86
  export function replicaIdToSubkey(table, id) {
87
87
  if (storage.isUUID(id)) {
88
88
  // Special case for UUID for backwards-compatiblity
89
- return `${table.toHexString()}/${id.toHexString()}`;
89
+ return `${tableIdString(table)}/${id.toHexString()}`;
90
90
  }
91
91
  else {
92
92
  // Hashed UUID from the table and id
@@ -94,6 +94,20 @@ export function replicaIdToSubkey(table, id) {
94
94
  return uuid.v5(repr, utils.ID_NAMESPACE);
95
95
  }
96
96
  }
97
+ export function mongoTableId(table) {
98
+ if (typeof table == 'string') {
99
+ throw new ServiceAssertionError(`Got string table id, expected ObjectId`);
100
+ }
101
+ return table;
102
+ }
103
+ function tableIdString(table) {
104
+ if (typeof table == 'string') {
105
+ return table;
106
+ }
107
+ else {
108
+ return table.toHexString();
109
+ }
110
+ }
97
111
  export function setSessionSnapshotTime(session, time) {
98
112
  // This is a workaround for the lack of direct support for snapshot reads in the MongoDB driver.
99
113
  if (!session.snapshotEnabled) {
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/utils/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/utils/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@powersync/service-module-mongodb-storage",
3
3
  "repository": "https://github.com/powersync-ja/powersync-service",
4
4
  "types": "dist/index.d.ts",
5
- "version": "0.0.0-dev-20260225093637",
5
+ "version": "0.0.0-dev-20260313100403",
6
6
  "main": "dist/index.js",
7
7
  "license": "FSL-1.1-ALv2",
8
8
  "type": "module",
@@ -27,15 +27,15 @@
27
27
  "lru-cache": "^10.2.2",
28
28
  "ts-codec": "^1.3.0",
29
29
  "uuid": "^11.1.0",
30
- "@powersync/lib-service-mongodb": "0.0.0-dev-20260225093637",
31
- "@powersync/lib-services-framework": "0.0.0-dev-20260225093637",
32
- "@powersync/service-core": "0.0.0-dev-20260225093637",
30
+ "@powersync/lib-service-mongodb": "0.0.0-dev-20260313100403",
31
+ "@powersync/lib-services-framework": "0.0.0-dev-20260313100403",
32
+ "@powersync/service-core": "0.0.0-dev-20260313100403",
33
33
  "@powersync/service-jsonbig": "0.17.12",
34
- "@powersync/service-sync-rules": "0.0.0-dev-20260225093637",
35
- "@powersync/service-types": "0.0.0-dev-20260225093637"
34
+ "@powersync/service-sync-rules": "0.0.0-dev-20260313100403",
35
+ "@powersync/service-types": "0.0.0-dev-20260313100403"
36
36
  },
37
37
  "devDependencies": {
38
- "@powersync/service-core-tests": "0.0.0-dev-20260225093637"
38
+ "@powersync/service-core-tests": "0.0.0-dev-20260313100403"
39
39
  },
40
40
  "scripts": {
41
41
  "build": "tsc -b",
@@ -7,7 +7,7 @@ import * as lib_mongo from '@powersync/lib-service-mongodb';
7
7
  import { mongo } from '@powersync/lib-service-mongodb';
8
8
 
9
9
  import { PowerSyncMongo } from './implementation/db.js';
10
- import { SyncRuleDocument } from './implementation/models.js';
10
+ import { getMongoStorageConfig, SyncRuleDocument } from './implementation/models.js';
11
11
  import { MongoPersistedSyncRulesContent } from './implementation/MongoPersistedSyncRulesContent.js';
12
12
  import { MongoSyncBucketStorage } from './implementation/MongoSyncBucketStorage.js';
13
13
  import { generateSlotName } from '../utils/util.js';
@@ -51,10 +51,17 @@ export class MongoBucketStorage extends storage.BucketStorageFactory {
51
51
  id = Number(id);
52
52
  }
53
53
  const storageConfig = (syncRules as MongoPersistedSyncRulesContent).getStorageConfig();
54
- const storage = new MongoSyncBucketStorage(this, id, syncRules, slot_name, undefined, {
55
- ...this.internalOptions,
56
- storageConfig
57
- });
54
+ const storage = new MongoSyncBucketStorage(
55
+ this,
56
+ id,
57
+ syncRules as MongoPersistedSyncRulesContent,
58
+ slot_name,
59
+ undefined,
60
+ {
61
+ ...this.internalOptions,
62
+ storageConfig
63
+ }
64
+ );
58
65
  if (!options?.skipLifecycleHooks) {
59
66
  this.iterateListeners((cb) => cb.syncStorageCreated?.(storage));
60
67
  }
@@ -145,6 +152,10 @@ export class MongoBucketStorage extends storage.BucketStorageFactory {
145
152
  }
146
153
 
147
154
  async updateSyncRules(options: storage.UpdateSyncRulesOptions): Promise<MongoPersistedSyncRulesContent> {
155
+ const storageVersion = options.storageVersion ?? storage.CURRENT_STORAGE_VERSION;
156
+ const storageConfig = getMongoStorageConfig(storageVersion);
157
+ await this.db.initializeStorageVersion(storageConfig);
158
+
148
159
  let rules: MongoPersistedSyncRulesContent | undefined = undefined;
149
160
 
150
161
  await this.session.withTransaction(async () => {
@@ -174,11 +185,11 @@ export class MongoBucketStorage extends storage.BucketStorageFactory {
174
185
  const id = Number(id_doc!.op_id);
175
186
  const slot_name = generateSlotName(this.slot_name_prefix, id);
176
187
 
177
- const storageVersion = options.storageVersion ?? storage.CURRENT_STORAGE_VERSION;
178
188
  const doc: SyncRuleDocument = {
179
189
  _id: id,
180
190
  storage_version: storageVersion,
181
191
  content: options.config.yaml,
192
+ serialized_plan: options.config.plan,
182
193
  last_checkpoint: null,
183
194
  last_checkpoint_lsn: null,
184
195
  no_checkpoint_before: null,
@@ -314,7 +325,7 @@ export class MongoBucketStorage extends storage.BucketStorageFactory {
314
325
  .toArray()
315
326
  .catch(ignoreNotExisting);
316
327
 
317
- const replication_aggregate = await this.db.current_data
328
+ const v1_replication_aggregate = await this.db.current_data
318
329
  .aggregate([
319
330
  {
320
331
  $collStats: {
@@ -325,10 +336,21 @@ export class MongoBucketStorage extends storage.BucketStorageFactory {
325
336
  .toArray()
326
337
  .catch(ignoreNotExisting);
327
338
 
339
+ const v3_replication_aggregate = await this.db.v3_current_data
340
+ .aggregate([
341
+ {
342
+ $collStats: {
343
+ storageStats: {}
344
+ }
345
+ }
346
+ ])
347
+ .toArray()
348
+ .catch(ignoreNotExisting);
328
349
  return {
329
350
  operations_size_bytes: Number(operations_aggregate[0].storageStats.size),
330
351
  parameters_size_bytes: Number(parameters_aggregate[0].storageStats.size),
331
- replication_size_bytes: Number(replication_aggregate[0].storageStats.size)
352
+ replication_size_bytes:
353
+ Number(v1_replication_aggregate[0].storageStats.size) + Number(v3_replication_aggregate[0].storageStats.size)
332
354
  };
333
355
  }
334
356
 
@@ -26,7 +26,7 @@ export class MongoReportStorage implements storage.ReportStorage {
26
26
  }
27
27
  }
28
28
 
29
- async getClientConnectionReports(
29
+ async getClientConnectionsSummary(
30
30
  data: event_types.ClientConnectionReportRequest
31
31
  ): Promise<event_types.ClientConnectionReportResponse> {
32
32
  const { start, end } = data;
@@ -44,7 +44,7 @@ export class MongoReportStorage implements storage.ReportStorage {
44
44
  return result[0];
45
45
  }
46
46
 
47
- async getGeneralClientConnectionAnalytics(
47
+ async getClientSessions(
48
48
  data: event_types.ClientConnectionAnalyticsRequest
49
49
  ): Promise<event_types.PaginatedResponse<event_types.ClientConnection>> {
50
50
  const { cursor, date_range } = data;
@@ -98,7 +98,7 @@ export class MongoReportStorage implements storage.ReportStorage {
98
98
  }
99
99
  );
100
100
  }
101
- async getConnectedClients(): Promise<event_types.ClientConnectionReportResponse> {
101
+ async getCurrentConnections(): Promise<event_types.ClientConnectionReportResponse> {
102
102
  const result = await this.db.connection_report_events
103
103
  .aggregate<event_types.ClientConnectionReportResponse>([
104
104
  {
@@ -175,8 +175,8 @@ export class MongoReportStorage implements storage.ReportStorage {
175
175
  private connectionsProjectPipeline() {
176
176
  return {
177
177
  $project: {
178
- users: { $ifNull: [{ $arrayElemAt: ['$unique_users.count', 0] }, 0] },
179
- sdks: '$sdk_versions_array'
178
+ total_users: { $ifNull: [{ $arrayElemAt: ['$unique_users.count', 0] }, 0] },
179
+ sdk_breakdown: '$sdk_versions_array'
180
180
  }
181
181
  };
182
182
  }