@powersync/service-core 0.0.0-dev-20241119082750 → 0.0.0-dev-20241219091224

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (201) hide show
  1. package/CHANGELOG.md +88 -18
  2. package/dist/auth/KeySpec.d.ts +1 -0
  3. package/dist/auth/KeySpec.js +10 -8
  4. package/dist/auth/KeySpec.js.map +1 -1
  5. package/dist/auth/RemoteJWKSCollector.js +2 -2
  6. package/dist/auth/RemoteJWKSCollector.js.map +1 -1
  7. package/dist/auth/StaticSupabaseKeyCollector.d.ts +19 -0
  8. package/dist/auth/StaticSupabaseKeyCollector.js +28 -0
  9. package/dist/auth/StaticSupabaseKeyCollector.js.map +1 -0
  10. package/dist/auth/auth-index.d.ts +1 -0
  11. package/dist/auth/auth-index.js +1 -0
  12. package/dist/auth/auth-index.js.map +1 -1
  13. package/dist/entry/commands/compact-action.js +15 -15
  14. package/dist/entry/commands/compact-action.js.map +1 -1
  15. package/dist/entry/commands/migrate-action.js +15 -4
  16. package/dist/entry/commands/migrate-action.js.map +1 -1
  17. package/dist/index.d.ts +1 -3
  18. package/dist/index.js +1 -3
  19. package/dist/index.js.map +1 -1
  20. package/dist/migrations/PowerSyncMigrationManager.d.ts +17 -0
  21. package/dist/migrations/PowerSyncMigrationManager.js +22 -0
  22. package/dist/migrations/PowerSyncMigrationManager.js.map +1 -0
  23. package/dist/migrations/ensure-automatic-migrations.d.ts +4 -0
  24. package/dist/migrations/ensure-automatic-migrations.js +14 -0
  25. package/dist/migrations/ensure-automatic-migrations.js.map +1 -0
  26. package/dist/migrations/migrations-index.d.ts +2 -3
  27. package/dist/migrations/migrations-index.js +2 -3
  28. package/dist/migrations/migrations-index.js.map +1 -1
  29. package/dist/routes/RouterEngine.js +2 -1
  30. package/dist/routes/RouterEngine.js.map +1 -1
  31. package/dist/routes/configure-fastify.d.ts +28 -28
  32. package/dist/routes/endpoints/admin.d.ts +24 -24
  33. package/dist/routes/endpoints/sync-rules.js.map +1 -1
  34. package/dist/storage/BucketStorage.d.ts +41 -1
  35. package/dist/storage/BucketStorage.js +26 -0
  36. package/dist/storage/BucketStorage.js.map +1 -1
  37. package/dist/storage/storage-index.d.ts +2 -14
  38. package/dist/storage/storage-index.js +2 -14
  39. package/dist/storage/storage-index.js.map +1 -1
  40. package/dist/sync/sync.js +12 -3
  41. package/dist/sync/sync.js.map +1 -1
  42. package/dist/system/ServiceContext.d.ts +3 -0
  43. package/dist/system/ServiceContext.js +11 -3
  44. package/dist/system/ServiceContext.js.map +1 -1
  45. package/dist/util/config/compound-config-collector.js +16 -0
  46. package/dist/util/config/compound-config-collector.js.map +1 -1
  47. package/dist/util/config/types.d.ts +2 -2
  48. package/dist/util/utils.d.ts +14 -1
  49. package/dist/util/utils.js +56 -0
  50. package/dist/util/utils.js.map +1 -1
  51. package/package.json +7 -11
  52. package/src/auth/KeySpec.ts +12 -9
  53. package/src/auth/RemoteJWKSCollector.ts +2 -2
  54. package/src/auth/StaticSupabaseKeyCollector.ts +31 -0
  55. package/src/auth/auth-index.ts +1 -0
  56. package/src/entry/commands/compact-action.ts +20 -15
  57. package/src/entry/commands/migrate-action.ts +17 -4
  58. package/src/index.ts +1 -4
  59. package/src/migrations/PowerSyncMigrationManager.ts +43 -0
  60. package/src/migrations/ensure-automatic-migrations.ts +15 -0
  61. package/src/migrations/migrations-index.ts +2 -3
  62. package/src/routes/RouterEngine.ts +2 -1
  63. package/src/routes/endpoints/sync-rules.ts +1 -2
  64. package/src/storage/BucketStorage.ts +44 -1
  65. package/src/storage/storage-index.ts +3 -15
  66. package/src/sync/sync.ts +12 -3
  67. package/src/system/ServiceContext.ts +17 -4
  68. package/src/util/config/compound-config-collector.ts +19 -1
  69. package/src/util/config/types.ts +2 -2
  70. package/src/util/utils.ts +59 -1
  71. package/test/src/auth.test.ts +54 -21
  72. package/test/src/env.ts +0 -1
  73. package/tsconfig.tsbuildinfo +1 -1
  74. package/dist/db/db-index.d.ts +0 -1
  75. package/dist/db/db-index.js +0 -2
  76. package/dist/db/db-index.js.map +0 -1
  77. package/dist/db/mongo.d.ts +0 -35
  78. package/dist/db/mongo.js +0 -73
  79. package/dist/db/mongo.js.map +0 -1
  80. package/dist/locks/LockManager.d.ts +0 -10
  81. package/dist/locks/LockManager.js +0 -7
  82. package/dist/locks/LockManager.js.map +0 -1
  83. package/dist/locks/MongoLocks.d.ts +0 -36
  84. package/dist/locks/MongoLocks.js +0 -81
  85. package/dist/locks/MongoLocks.js.map +0 -1
  86. package/dist/locks/locks-index.d.ts +0 -2
  87. package/dist/locks/locks-index.js +0 -3
  88. package/dist/locks/locks-index.js.map +0 -1
  89. package/dist/migrations/db/migrations/1684951997326-init.d.ts +0 -3
  90. package/dist/migrations/db/migrations/1684951997326-init.js +0 -33
  91. package/dist/migrations/db/migrations/1684951997326-init.js.map +0 -1
  92. package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.d.ts +0 -2
  93. package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.js +0 -5
  94. package/dist/migrations/db/migrations/1688556755264-initial-sync-rules.js.map +0 -1
  95. package/dist/migrations/db/migrations/1702295701188-sync-rule-state.d.ts +0 -3
  96. package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js +0 -56
  97. package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js.map +0 -1
  98. package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.d.ts +0 -3
  99. package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.js +0 -29
  100. package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.js.map +0 -1
  101. package/dist/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.d.ts +0 -3
  102. package/dist/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.js +0 -31
  103. package/dist/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.js.map +0 -1
  104. package/dist/migrations/definitions.d.ts +0 -18
  105. package/dist/migrations/definitions.js +0 -6
  106. package/dist/migrations/definitions.js.map +0 -1
  107. package/dist/migrations/executor.d.ts +0 -16
  108. package/dist/migrations/executor.js +0 -64
  109. package/dist/migrations/executor.js.map +0 -1
  110. package/dist/migrations/migrations.d.ts +0 -18
  111. package/dist/migrations/migrations.js +0 -110
  112. package/dist/migrations/migrations.js.map +0 -1
  113. package/dist/migrations/store/migration-store.d.ts +0 -11
  114. package/dist/migrations/store/migration-store.js +0 -46
  115. package/dist/migrations/store/migration-store.js.map +0 -1
  116. package/dist/storage/MongoBucketStorage.d.ts +0 -48
  117. package/dist/storage/MongoBucketStorage.js +0 -426
  118. package/dist/storage/MongoBucketStorage.js.map +0 -1
  119. package/dist/storage/mongo/MongoBucketBatch.d.ts +0 -67
  120. package/dist/storage/mongo/MongoBucketBatch.js +0 -643
  121. package/dist/storage/mongo/MongoBucketBatch.js.map +0 -1
  122. package/dist/storage/mongo/MongoCompactor.d.ts +0 -40
  123. package/dist/storage/mongo/MongoCompactor.js +0 -309
  124. package/dist/storage/mongo/MongoCompactor.js.map +0 -1
  125. package/dist/storage/mongo/MongoIdSequence.d.ts +0 -12
  126. package/dist/storage/mongo/MongoIdSequence.js +0 -21
  127. package/dist/storage/mongo/MongoIdSequence.js.map +0 -1
  128. package/dist/storage/mongo/MongoPersistedSyncRules.d.ts +0 -9
  129. package/dist/storage/mongo/MongoPersistedSyncRules.js +0 -9
  130. package/dist/storage/mongo/MongoPersistedSyncRules.js.map +0 -1
  131. package/dist/storage/mongo/MongoPersistedSyncRulesContent.d.ts +0 -20
  132. package/dist/storage/mongo/MongoPersistedSyncRulesContent.js +0 -26
  133. package/dist/storage/mongo/MongoPersistedSyncRulesContent.js.map +0 -1
  134. package/dist/storage/mongo/MongoStorageProvider.d.ts +0 -5
  135. package/dist/storage/mongo/MongoStorageProvider.js +0 -26
  136. package/dist/storage/mongo/MongoStorageProvider.js.map +0 -1
  137. package/dist/storage/mongo/MongoSyncBucketStorage.d.ts +0 -38
  138. package/dist/storage/mongo/MongoSyncBucketStorage.js +0 -531
  139. package/dist/storage/mongo/MongoSyncBucketStorage.js.map +0 -1
  140. package/dist/storage/mongo/MongoSyncRulesLock.d.ts +0 -16
  141. package/dist/storage/mongo/MongoSyncRulesLock.js +0 -65
  142. package/dist/storage/mongo/MongoSyncRulesLock.js.map +0 -1
  143. package/dist/storage/mongo/MongoWriteCheckpointAPI.d.ts +0 -20
  144. package/dist/storage/mongo/MongoWriteCheckpointAPI.js +0 -103
  145. package/dist/storage/mongo/MongoWriteCheckpointAPI.js.map +0 -1
  146. package/dist/storage/mongo/OperationBatch.d.ts +0 -35
  147. package/dist/storage/mongo/OperationBatch.js +0 -119
  148. package/dist/storage/mongo/OperationBatch.js.map +0 -1
  149. package/dist/storage/mongo/PersistedBatch.d.ts +0 -46
  150. package/dist/storage/mongo/PersistedBatch.js +0 -213
  151. package/dist/storage/mongo/PersistedBatch.js.map +0 -1
  152. package/dist/storage/mongo/config.d.ts +0 -19
  153. package/dist/storage/mongo/config.js +0 -26
  154. package/dist/storage/mongo/config.js.map +0 -1
  155. package/dist/storage/mongo/db.d.ts +0 -36
  156. package/dist/storage/mongo/db.js +0 -47
  157. package/dist/storage/mongo/db.js.map +0 -1
  158. package/dist/storage/mongo/models.d.ts +0 -156
  159. package/dist/storage/mongo/models.js +0 -27
  160. package/dist/storage/mongo/models.js.map +0 -1
  161. package/dist/storage/mongo/util.d.ts +0 -40
  162. package/dist/storage/mongo/util.js +0 -151
  163. package/dist/storage/mongo/util.js.map +0 -1
  164. package/src/db/db-index.ts +0 -1
  165. package/src/db/mongo.ts +0 -81
  166. package/src/locks/LockManager.ts +0 -16
  167. package/src/locks/MongoLocks.ts +0 -142
  168. package/src/locks/locks-index.ts +0 -2
  169. package/src/migrations/db/migrations/1684951997326-init.ts +0 -38
  170. package/src/migrations/db/migrations/1688556755264-initial-sync-rules.ts +0 -5
  171. package/src/migrations/db/migrations/1702295701188-sync-rule-state.ts +0 -102
  172. package/src/migrations/db/migrations/1711543888062-write-checkpoint-index.ts +0 -34
  173. package/src/migrations/db/migrations/1727099539247-custom-write-checkpoint-index.ts +0 -37
  174. package/src/migrations/definitions.ts +0 -21
  175. package/src/migrations/executor.ts +0 -87
  176. package/src/migrations/migrations.ts +0 -142
  177. package/src/migrations/store/migration-store.ts +0 -63
  178. package/src/storage/MongoBucketStorage.ts +0 -540
  179. package/src/storage/mongo/MongoBucketBatch.ts +0 -841
  180. package/src/storage/mongo/MongoCompactor.ts +0 -392
  181. package/src/storage/mongo/MongoIdSequence.ts +0 -24
  182. package/src/storage/mongo/MongoPersistedSyncRules.ts +0 -16
  183. package/src/storage/mongo/MongoPersistedSyncRulesContent.ts +0 -50
  184. package/src/storage/mongo/MongoStorageProvider.ts +0 -31
  185. package/src/storage/mongo/MongoSyncBucketStorage.ts +0 -636
  186. package/src/storage/mongo/MongoSyncRulesLock.ts +0 -85
  187. package/src/storage/mongo/MongoWriteCheckpointAPI.ts +0 -151
  188. package/src/storage/mongo/OperationBatch.ts +0 -131
  189. package/src/storage/mongo/PersistedBatch.ts +0 -272
  190. package/src/storage/mongo/config.ts +0 -40
  191. package/src/storage/mongo/db.ts +0 -88
  192. package/src/storage/mongo/models.ts +0 -179
  193. package/src/storage/mongo/util.ts +0 -158
  194. package/test/src/__snapshots__/sync.test.ts.snap +0 -332
  195. package/test/src/bucket_validation.test.ts +0 -142
  196. package/test/src/bucket_validation.ts +0 -116
  197. package/test/src/compacting.test.ts +0 -295
  198. package/test/src/data_storage.test.ts +0 -1499
  199. package/test/src/stream_utils.ts +0 -42
  200. package/test/src/sync.test.ts +0 -511
  201. package/test/src/util.ts +0 -148
@@ -1,531 +0,0 @@
1
- var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
2
- if (value !== null && value !== void 0) {
3
- if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
4
- var dispose, inner;
5
- if (async) {
6
- if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
7
- dispose = value[Symbol.asyncDispose];
8
- }
9
- if (dispose === void 0) {
10
- if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
11
- dispose = value[Symbol.dispose];
12
- if (async) inner = dispose;
13
- }
14
- if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
15
- if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
16
- env.stack.push({ value: value, dispose: dispose, async: async });
17
- }
18
- else if (async) {
19
- env.stack.push({ async: true });
20
- }
21
- return value;
22
- };
23
- var __disposeResources = (this && this.__disposeResources) || (function (SuppressedError) {
24
- return function (env) {
25
- function fail(e) {
26
- env.error = env.hasError ? new SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
27
- env.hasError = true;
28
- }
29
- var r, s = 0;
30
- function next() {
31
- while (r = env.stack.pop()) {
32
- try {
33
- if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
34
- if (r.dispose) {
35
- var result = r.dispose.call(r.value);
36
- if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
37
- }
38
- else s |= 1;
39
- }
40
- catch (e) {
41
- fail(e);
42
- }
43
- }
44
- if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
45
- if (env.hasError) throw env.error;
46
- }
47
- return next();
48
- };
49
- })(typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
50
- var e = new Error(message);
51
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
52
- });
53
- import * as bson from 'bson';
54
- import * as mongo from 'mongodb';
55
- import { DisposableObserver, logger } from '@powersync/lib-services-framework';
56
- import * as timers from 'timers/promises';
57
- import * as db from '../../db/db-index.js';
58
- import * as util from '../../util/util-index.js';
59
- import { DEFAULT_DOCUMENT_BATCH_LIMIT, DEFAULT_DOCUMENT_CHUNK_LIMIT_BYTES } from '../BucketStorage.js';
60
- import { ChecksumCache } from '../ChecksumCache.js';
61
- import { SourceTable } from '../SourceTable.js';
62
- import { WriteCheckpointMode } from '../WriteCheckpointAPI.js';
63
- import { SyncRuleState } from './models.js';
64
- import { MongoBucketBatch } from './MongoBucketBatch.js';
65
- import { MongoCompactor } from './MongoCompactor.js';
66
- import { MongoWriteCheckpointAPI } from './MongoWriteCheckpointAPI.js';
67
- import { BSON_DESERIALIZE_OPTIONS, idPrefixFilter, mapOpEntry, readSingleBatch, serializeLookup } from './util.js';
68
- export class MongoSyncBucketStorage extends DisposableObserver {
69
- constructor(factory, group_id, sync_rules, slot_name, writeCheckpointMode = WriteCheckpointMode.MANAGED) {
70
- super();
71
- this.factory = factory;
72
- this.group_id = group_id;
73
- this.sync_rules = sync_rules;
74
- this.slot_name = slot_name;
75
- this.checksumCache = new ChecksumCache({
76
- fetchChecksums: (batch) => {
77
- return this.getChecksumsInternal(batch);
78
- }
79
- });
80
- this.db = factory.db;
81
- this.writeCheckpointAPI = new MongoWriteCheckpointAPI({
82
- db: this.db,
83
- mode: writeCheckpointMode
84
- });
85
- }
86
- get writeCheckpointMode() {
87
- return this.writeCheckpointAPI.writeCheckpointMode;
88
- }
89
- setWriteCheckpointMode(mode) {
90
- this.writeCheckpointAPI.setWriteCheckpointMode(mode);
91
- }
92
- batchCreateCustomWriteCheckpoints(checkpoints) {
93
- return this.writeCheckpointAPI.batchCreateCustomWriteCheckpoints(checkpoints.map((checkpoint) => ({ ...checkpoint, sync_rules_id: this.group_id })));
94
- }
95
- createCustomWriteCheckpoint(checkpoint) {
96
- return this.writeCheckpointAPI.createCustomWriteCheckpoint({
97
- ...checkpoint,
98
- sync_rules_id: this.group_id
99
- });
100
- }
101
- createManagedWriteCheckpoint(checkpoint) {
102
- return this.writeCheckpointAPI.createManagedWriteCheckpoint(checkpoint);
103
- }
104
- lastWriteCheckpoint(filters) {
105
- return this.writeCheckpointAPI.lastWriteCheckpoint({
106
- ...filters,
107
- sync_rules_id: this.group_id
108
- });
109
- }
110
- getParsedSyncRules(options) {
111
- const { parsed, options: cachedOptions } = this.parsedSyncRulesCache ?? {};
112
- /**
113
- * Check if the cached sync rules, if present, had the same options.
114
- * Parse sync rules if the options are different or if there is no cached value.
115
- */
116
- if (!parsed || options.defaultSchema != cachedOptions?.defaultSchema) {
117
- this.parsedSyncRulesCache = { parsed: this.sync_rules.parsed(options).sync_rules, options };
118
- }
119
- return this.parsedSyncRulesCache.parsed;
120
- }
121
- async getCheckpoint() {
122
- const doc = await this.db.sync_rules.findOne({ _id: this.group_id }, {
123
- projection: { last_checkpoint: 1, last_checkpoint_lsn: 1 }
124
- });
125
- return {
126
- checkpoint: util.timestampToOpId(doc?.last_checkpoint ?? 0n),
127
- lsn: doc?.last_checkpoint_lsn ?? null
128
- };
129
- }
130
- async startBatch(options, callback) {
131
- const env_1 = { stack: [], error: void 0, hasError: false };
132
- try {
133
- const doc = await this.db.sync_rules.findOne({
134
- _id: this.group_id
135
- }, { projection: { last_checkpoint_lsn: 1, no_checkpoint_before: 1 } });
136
- const checkpoint_lsn = doc?.last_checkpoint_lsn ?? null;
137
- const batch = __addDisposableResource(env_1, new MongoBucketBatch({
138
- db: this.db,
139
- syncRules: this.sync_rules.parsed(options).sync_rules,
140
- groupId: this.group_id,
141
- slotName: this.slot_name,
142
- lastCheckpointLsn: checkpoint_lsn,
143
- noCheckpointBeforeLsn: doc?.no_checkpoint_before ?? options.zeroLSN,
144
- storeCurrentData: options.storeCurrentData
145
- }), true);
146
- this.iterateListeners((cb) => cb.batchStarted?.(batch));
147
- await callback(batch);
148
- await batch.flush();
149
- if (batch.last_flushed_op) {
150
- return { flushed_op: String(batch.last_flushed_op) };
151
- }
152
- else {
153
- return null;
154
- }
155
- }
156
- catch (e_1) {
157
- env_1.error = e_1;
158
- env_1.hasError = true;
159
- }
160
- finally {
161
- const result_1 = __disposeResources(env_1);
162
- if (result_1)
163
- await result_1;
164
- }
165
- }
166
- async resolveTable(options) {
167
- const { group_id, connection_id, connection_tag, entity_descriptor } = options;
168
- const { schema, name: table, objectId, replicationColumns } = entity_descriptor;
169
- const columns = replicationColumns.map((column) => ({
170
- name: column.name,
171
- type: column.type,
172
- type_oid: column.typeId
173
- }));
174
- let result = null;
175
- await this.db.client.withSession(async (session) => {
176
- const col = this.db.source_tables;
177
- let doc = await col.findOne({
178
- group_id: group_id,
179
- connection_id: connection_id,
180
- relation_id: objectId,
181
- schema_name: schema,
182
- table_name: table,
183
- replica_id_columns2: columns
184
- }, { session });
185
- if (doc == null) {
186
- doc = {
187
- _id: new bson.ObjectId(),
188
- group_id: group_id,
189
- connection_id: connection_id,
190
- relation_id: objectId,
191
- schema_name: schema,
192
- table_name: table,
193
- replica_id_columns: null,
194
- replica_id_columns2: columns,
195
- snapshot_done: false
196
- };
197
- await col.insertOne(doc, { session });
198
- }
199
- const sourceTable = new SourceTable(doc._id, connection_tag, objectId, schema, table, replicationColumns, doc.snapshot_done ?? true);
200
- sourceTable.syncEvent = options.sync_rules.tableTriggersEvent(sourceTable);
201
- sourceTable.syncData = options.sync_rules.tableSyncsData(sourceTable);
202
- sourceTable.syncParameters = options.sync_rules.tableSyncsParameters(sourceTable);
203
- const truncate = await col
204
- .find({
205
- group_id: group_id,
206
- connection_id: connection_id,
207
- _id: { $ne: doc._id },
208
- $or: [{ relation_id: objectId }, { schema_name: schema, table_name: table }]
209
- }, { session })
210
- .toArray();
211
- result = {
212
- table: sourceTable,
213
- dropTables: truncate.map((doc) => new SourceTable(doc._id, connection_tag, doc.relation_id ?? 0, doc.schema_name, doc.table_name, doc.replica_id_columns2?.map((c) => ({ name: c.name, typeOid: c.type_oid, type: c.type })) ?? [], doc.snapshot_done ?? true))
214
- };
215
- });
216
- return result;
217
- }
218
- async getParameterSets(checkpoint, lookups) {
219
- const lookupFilter = lookups.map((lookup) => {
220
- return serializeLookup(lookup);
221
- });
222
- const rows = await this.db.bucket_parameters
223
- .aggregate([
224
- {
225
- $match: {
226
- 'key.g': this.group_id,
227
- lookup: { $in: lookupFilter },
228
- _id: { $lte: BigInt(checkpoint) }
229
- }
230
- },
231
- {
232
- $sort: {
233
- _id: -1
234
- }
235
- },
236
- {
237
- $group: {
238
- _id: '$key',
239
- bucket_parameters: {
240
- $first: '$bucket_parameters'
241
- }
242
- }
243
- }
244
- ])
245
- .toArray();
246
- const groupedParameters = rows.map((row) => {
247
- return row.bucket_parameters;
248
- });
249
- return groupedParameters.flat();
250
- }
251
- async *getBucketDataBatch(checkpoint, dataBuckets, options) {
252
- if (dataBuckets.size == 0) {
253
- return;
254
- }
255
- let filters = [];
256
- const end = checkpoint ? BigInt(checkpoint) : new bson.MaxKey();
257
- for (let [name, start] of dataBuckets.entries()) {
258
- filters.push({
259
- _id: {
260
- $gt: {
261
- g: this.group_id,
262
- b: name,
263
- o: BigInt(start)
264
- },
265
- $lte: {
266
- g: this.group_id,
267
- b: name,
268
- o: end
269
- }
270
- }
271
- });
272
- }
273
- const limit = options?.limit ?? DEFAULT_DOCUMENT_BATCH_LIMIT;
274
- const sizeLimit = options?.chunkLimitBytes ?? DEFAULT_DOCUMENT_CHUNK_LIMIT_BYTES;
275
- const cursor = this.db.bucket_data.find({
276
- $or: filters
277
- }, {
278
- session: undefined,
279
- sort: { _id: 1 },
280
- limit: limit,
281
- // Increase batch size above the default 101, so that we can fill an entire batch in
282
- // one go.
283
- batchSize: limit,
284
- // Raw mode is returns an array of Buffer instead of parsed documents.
285
- // We use it so that:
286
- // 1. We can calculate the document size accurately without serializing again.
287
- // 2. We can delay parsing the results until it's needed.
288
- // We manually use bson.deserialize below
289
- raw: true,
290
- // Since we're using raw: true and parsing ourselves later, we don't need bigint
291
- // support here.
292
- // Disabling due to https://jira.mongodb.org/browse/NODE-6165, and the fact that this
293
- // is one of our most common queries.
294
- useBigInt64: false
295
- });
296
- // We want to limit results to a single batch to avoid high memory usage.
297
- // This approach uses MongoDB's batch limits to limit the data here, which limits
298
- // to the lower of the batch count and size limits.
299
- // This is similar to using `singleBatch: true` in the find options, but allows
300
- // detecting "hasMore".
301
- let { data, hasMore } = await readSingleBatch(cursor);
302
- if (data.length == limit) {
303
- // Limit reached - could have more data, despite the cursor being drained.
304
- hasMore = true;
305
- }
306
- let batchSize = 0;
307
- let currentBatch = null;
308
- let targetOp = null;
309
- // Ordered by _id, meaning buckets are grouped together
310
- for (let rawData of data) {
311
- const row = bson.deserialize(rawData, BSON_DESERIALIZE_OPTIONS);
312
- const bucket = row._id.b;
313
- if (currentBatch == null || currentBatch.bucket != bucket || batchSize >= sizeLimit) {
314
- let start = undefined;
315
- if (currentBatch != null) {
316
- if (currentBatch.bucket == bucket) {
317
- currentBatch.has_more = true;
318
- }
319
- const yieldBatch = currentBatch;
320
- start = currentBatch.after;
321
- currentBatch = null;
322
- batchSize = 0;
323
- yield { batch: yieldBatch, targetOp: targetOp };
324
- targetOp = null;
325
- }
326
- start ?? (start = dataBuckets.get(bucket));
327
- if (start == null) {
328
- throw new Error(`data for unexpected bucket: ${bucket}`);
329
- }
330
- currentBatch = {
331
- bucket,
332
- after: start,
333
- has_more: hasMore,
334
- data: [],
335
- next_after: start
336
- };
337
- targetOp = null;
338
- }
339
- const entry = mapOpEntry(row);
340
- if (row.target_op != null) {
341
- // MOVE, CLEAR
342
- if (targetOp == null || row.target_op > targetOp) {
343
- targetOp = row.target_op;
344
- }
345
- }
346
- currentBatch.data.push(entry);
347
- currentBatch.next_after = entry.op_id;
348
- batchSize += rawData.byteLength;
349
- }
350
- if (currentBatch != null) {
351
- const yieldBatch = currentBatch;
352
- currentBatch = null;
353
- yield { batch: yieldBatch, targetOp: targetOp };
354
- targetOp = null;
355
- }
356
- }
357
- async getChecksums(checkpoint, buckets) {
358
- return this.checksumCache.getChecksumMap(checkpoint, buckets);
359
- }
360
- async getChecksumsInternal(batch) {
361
- if (batch.length == 0) {
362
- return new Map();
363
- }
364
- const filters = [];
365
- for (let request of batch) {
366
- filters.push({
367
- _id: {
368
- $gt: {
369
- g: this.group_id,
370
- b: request.bucket,
371
- o: request.start ? BigInt(request.start) : new bson.MinKey()
372
- },
373
- $lte: {
374
- g: this.group_id,
375
- b: request.bucket,
376
- o: BigInt(request.end)
377
- }
378
- }
379
- });
380
- }
381
- const aggregate = await this.db.bucket_data
382
- .aggregate([
383
- {
384
- $match: {
385
- $or: filters
386
- }
387
- },
388
- {
389
- $group: {
390
- _id: '$_id.b',
391
- checksum_total: { $sum: '$checksum' },
392
- count: { $sum: 1 },
393
- has_clear_op: {
394
- $max: {
395
- $cond: [{ $eq: ['$op', 'CLEAR'] }, 1, 0]
396
- }
397
- }
398
- }
399
- }
400
- ], { session: undefined, readConcern: 'snapshot' })
401
- .toArray();
402
- return new Map(aggregate.map((doc) => {
403
- return [
404
- doc._id,
405
- {
406
- bucket: doc._id,
407
- partialCount: doc.count,
408
- partialChecksum: Number(BigInt(doc.checksum_total) & 0xffffffffn) & 0xffffffff,
409
- isFullChecksum: doc.has_clear_op == 1
410
- }
411
- ];
412
- }));
413
- }
414
- async terminate(options) {
415
- // Default is to clear the storage except when explicitly requested not to.
416
- if (!options || options?.clearStorage) {
417
- await this.clear();
418
- }
419
- await this.db.sync_rules.updateOne({
420
- _id: this.group_id
421
- }, {
422
- $set: {
423
- state: SyncRuleState.TERMINATED,
424
- persisted_lsn: null,
425
- snapshot_done: false
426
- }
427
- });
428
- }
429
- async getStatus() {
430
- const doc = await this.db.sync_rules.findOne({
431
- _id: this.group_id
432
- }, {
433
- projection: {
434
- snapshot_done: 1,
435
- last_checkpoint_lsn: 1,
436
- state: 1
437
- }
438
- });
439
- if (doc == null) {
440
- throw new Error('Cannot find sync rules status');
441
- }
442
- return {
443
- snapshot_done: doc.snapshot_done,
444
- active: doc.state == 'ACTIVE',
445
- checkpoint_lsn: doc.last_checkpoint_lsn
446
- };
447
- }
448
- async clear() {
449
- while (true) {
450
- try {
451
- await this.clearIteration();
452
- return;
453
- }
454
- catch (e) {
455
- if (e instanceof mongo.MongoServerError && e.codeName == 'MaxTimeMSExpired') {
456
- logger.info(`Clearing took longer than ${db.mongo.MONGO_CLEAR_OPERATION_TIMEOUT_MS}ms, waiting and triggering another iteration.`);
457
- await timers.setTimeout(db.mongo.MONGO_CLEAR_OPERATION_TIMEOUT_MS / 5);
458
- continue;
459
- }
460
- else {
461
- throw e;
462
- }
463
- }
464
- }
465
- }
466
- async clearIteration() {
467
- // Individual operations here may time out with the maxTimeMS option.
468
- // It is expected to still make progress, and continue on the next try.
469
- await this.db.sync_rules.updateOne({
470
- _id: this.group_id
471
- }, {
472
- $set: {
473
- snapshot_done: false,
474
- persisted_lsn: null,
475
- last_checkpoint_lsn: null,
476
- last_checkpoint: null,
477
- no_checkpoint_before: null
478
- }
479
- }, { maxTimeMS: db.mongo.MONGO_CLEAR_OPERATION_TIMEOUT_MS });
480
- await this.db.bucket_data.deleteMany({
481
- _id: idPrefixFilter({ g: this.group_id }, ['b', 'o'])
482
- }, { maxTimeMS: db.mongo.MONGO_CLEAR_OPERATION_TIMEOUT_MS });
483
- await this.db.bucket_parameters.deleteMany({
484
- key: idPrefixFilter({ g: this.group_id }, ['t', 'k'])
485
- }, { maxTimeMS: db.mongo.MONGO_CLEAR_OPERATION_TIMEOUT_MS });
486
- await this.db.current_data.deleteMany({
487
- _id: idPrefixFilter({ g: this.group_id }, ['t', 'k'])
488
- }, { maxTimeMS: db.mongo.MONGO_CLEAR_OPERATION_TIMEOUT_MS });
489
- await this.db.source_tables.deleteMany({
490
- group_id: this.group_id
491
- }, { maxTimeMS: db.mongo.MONGO_CLEAR_OPERATION_TIMEOUT_MS });
492
- }
493
- async autoActivate() {
494
- await this.db.client.withSession(async (session) => {
495
- await session.withTransaction(async () => {
496
- const doc = await this.db.sync_rules.findOne({ _id: this.group_id }, { session });
497
- if (doc && doc.state == 'PROCESSING') {
498
- await this.db.sync_rules.updateOne({
499
- _id: this.group_id
500
- }, {
501
- $set: {
502
- state: SyncRuleState.ACTIVE
503
- }
504
- }, { session });
505
- await this.db.sync_rules.updateMany({
506
- _id: { $ne: this.group_id },
507
- state: SyncRuleState.ACTIVE
508
- }, {
509
- $set: {
510
- state: SyncRuleState.STOP
511
- }
512
- }, { session });
513
- }
514
- });
515
- });
516
- }
517
- async reportError(e) {
518
- const message = String(e.message ?? 'Replication failure');
519
- await this.db.sync_rules.updateOne({
520
- _id: this.group_id
521
- }, {
522
- $set: {
523
- last_fatal_error: message
524
- }
525
- });
526
- }
527
- async compact(options) {
528
- return new MongoCompactor(this.db, this.group_id, options).compact();
529
- }
530
- }
531
- //# sourceMappingURL=MongoSyncBucketStorage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MongoSyncBucketStorage.js","sourceRoot":"","sources":["../../../src/storage/mongo/MongoSyncBucketStorage.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- import { PersistedSyncRulesContent, ReplicationLock } from '../BucketStorage.js';
2
- import { PowerSyncMongo } from './db.js';
3
- /**
4
- * Manages a lock on a sync rules document, so that only one process
5
- * replicates those sync rules at a time.
6
- */
7
- export declare class MongoSyncRulesLock implements ReplicationLock {
8
- private db;
9
- sync_rules_id: number;
10
- private lock_id;
11
- private readonly refreshInterval;
12
- static createLock(db: PowerSyncMongo, sync_rules: PersistedSyncRulesContent): Promise<MongoSyncRulesLock>;
13
- constructor(db: PowerSyncMongo, sync_rules_id: number, lock_id: string);
14
- release(): Promise<void>;
15
- private refresh;
16
- }
@@ -1,65 +0,0 @@
1
- import crypto from 'crypto';
2
- import { logger } from '@powersync/lib-services-framework';
3
- /**
4
- * Manages a lock on a sync rules document, so that only one process
5
- * replicates those sync rules at a time.
6
- */
7
- export class MongoSyncRulesLock {
8
- static async createLock(db, sync_rules) {
9
- const lockId = crypto.randomBytes(8).toString('hex');
10
- const doc = await db.sync_rules.findOneAndUpdate({ _id: sync_rules.id, $or: [{ lock: null }, { 'lock.expires_at': { $lt: new Date() } }] }, {
11
- $set: {
12
- lock: {
13
- id: lockId,
14
- expires_at: new Date(Date.now() + 60 * 1000)
15
- }
16
- }
17
- }, {
18
- projection: { lock: 1 },
19
- returnDocument: 'before'
20
- });
21
- if (doc == null) {
22
- throw new Error(`Sync rules: ${sync_rules.id} have been locked by another process for replication.`);
23
- }
24
- return new MongoSyncRulesLock(db, sync_rules.id, lockId);
25
- }
26
- constructor(db, sync_rules_id, lock_id) {
27
- this.db = db;
28
- this.sync_rules_id = sync_rules_id;
29
- this.lock_id = lock_id;
30
- this.refreshInterval = setInterval(async () => {
31
- try {
32
- await this.refresh();
33
- }
34
- catch (e) {
35
- logger.error('Failed to refresh lock', e);
36
- clearInterval(this.refreshInterval);
37
- }
38
- }, 30130);
39
- }
40
- async release() {
41
- clearInterval(this.refreshInterval);
42
- const result = await this.db.sync_rules.updateOne({
43
- _id: this.sync_rules_id,
44
- 'lock.id': this.lock_id
45
- }, {
46
- $unset: { lock: 1 }
47
- });
48
- if (result.modifiedCount == 0) {
49
- // Log and ignore
50
- logger.warn(`Lock already released: ${this.sync_rules_id}/${this.lock_id}`);
51
- }
52
- }
53
- async refresh() {
54
- const result = await this.db.sync_rules.findOneAndUpdate({
55
- _id: this.sync_rules_id,
56
- 'lock.id': this.lock_id
57
- }, {
58
- $set: { 'lock.expires_at': new Date(Date.now() + 60 * 1000) }
59
- }, { returnDocument: 'after' });
60
- if (result == null) {
61
- throw new Error(`Lock not held anymore: ${this.sync_rules_id}/${this.lock_id}`);
62
- }
63
- }
64
- }
65
- //# sourceMappingURL=MongoSyncRulesLock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MongoSyncRulesLock.js","sourceRoot":"","sources":["../../../src/storage/mongo/MongoSyncRulesLock.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { CustomWriteCheckpointFilters, CustomWriteCheckpointOptions, LastWriteCheckpointFilters, ManagedWriteCheckpointFilters, ManagedWriteCheckpointOptions, WriteCheckpointAPI, WriteCheckpointMode } from '../WriteCheckpointAPI.js';
2
- import { PowerSyncMongo } from './db.js';
3
- export type MongoCheckpointAPIOptions = {
4
- db: PowerSyncMongo;
5
- mode: WriteCheckpointMode;
6
- };
7
- export declare class MongoWriteCheckpointAPI implements WriteCheckpointAPI {
8
- readonly db: PowerSyncMongo;
9
- private _mode;
10
- constructor(options: MongoCheckpointAPIOptions);
11
- get writeCheckpointMode(): WriteCheckpointMode;
12
- setWriteCheckpointMode(mode: WriteCheckpointMode): void;
13
- batchCreateCustomWriteCheckpoints(checkpoints: CustomWriteCheckpointOptions[]): Promise<void>;
14
- createCustomWriteCheckpoint(options: CustomWriteCheckpointOptions): Promise<bigint>;
15
- createManagedWriteCheckpoint(checkpoint: ManagedWriteCheckpointOptions): Promise<bigint>;
16
- lastWriteCheckpoint(filters: LastWriteCheckpointFilters): Promise<bigint | null>;
17
- protected lastCustomWriteCheckpoint(filters: CustomWriteCheckpointFilters): Promise<bigint | null>;
18
- protected lastManagedWriteCheckpoint(filters: ManagedWriteCheckpointFilters): Promise<bigint | null>;
19
- }
20
- export declare function batchCreateCustomWriteCheckpoints(db: PowerSyncMongo, checkpoints: CustomWriteCheckpointOptions[]): Promise<void>;