@powersync/service-module-mongodb-storage 0.0.0-dev-20250818104041 → 0.0.0-dev-20250819134004
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.
- package/CHANGELOG.md +8 -7
- package/dist/storage/MongoReportStorage.d.ts +7 -7
- package/dist/storage/MongoReportStorage.js +11 -11
- package/dist/storage/MongoReportStorage.js.map +1 -1
- package/dist/storage/implementation/db.d.ts +2 -2
- package/dist/storage/implementation/db.js.map +1 -1
- package/dist/storage/implementation/models.d.ts +1 -1
- package/package.json +8 -8
- package/src/storage/MongoReportStorage.ts +16 -14
- package/src/storage/implementation/db.ts +2 -2
- package/src/storage/implementation/models.ts +1 -1
- package/test/src/__snapshots__/storage_sync.test.ts.snap +197 -0
- package/test/src/sdk-report-storage.test.ts +13 -13
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @powersync/service-module-mongodb-storage
|
|
2
2
|
|
|
3
|
-
## 0.0.0-dev-
|
|
3
|
+
## 0.0.0-dev-20250819134004
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
@@ -10,17 +10,18 @@
|
|
|
10
10
|
- 060b829: Update license abbreviation to FSL-1.1-ALv2.
|
|
11
11
|
- d49bebe: - Hooked up the MySQL binlog heartbeat events with the bucket batch keepalive mechanism.
|
|
12
12
|
Heartbeat events will now update the latest keepalive timestamp in the sync rules.
|
|
13
|
+
- Updated dependencies [d2be184]
|
|
13
14
|
- Updated dependencies [f1d187b]
|
|
14
15
|
- Updated dependencies [0fad466]
|
|
15
16
|
- Updated dependencies [a700ec9]
|
|
16
17
|
- Updated dependencies [060b829]
|
|
17
18
|
- Updated dependencies [d49bebe]
|
|
18
|
-
- @powersync/service-
|
|
19
|
-
- @powersync/service-
|
|
20
|
-
- @powersync/
|
|
21
|
-
- @powersync/
|
|
22
|
-
- @powersync/lib-service-mongodb@0.0.0-dev-
|
|
23
|
-
- @powersync/service-jsonbig@0.0.0-dev-
|
|
19
|
+
- @powersync/service-sync-rules@0.0.0-dev-20250819134004
|
|
20
|
+
- @powersync/service-core@0.0.0-dev-20250819134004
|
|
21
|
+
- @powersync/service-types@0.0.0-dev-20250819134004
|
|
22
|
+
- @powersync/lib-services-framework@0.0.0-dev-20250819134004
|
|
23
|
+
- @powersync/lib-service-mongodb@0.0.0-dev-20250819134004
|
|
24
|
+
- @powersync/service-jsonbig@0.0.0-dev-20250819134004
|
|
24
25
|
|
|
25
26
|
## 0.11.0
|
|
26
27
|
|
|
@@ -5,15 +5,15 @@ export declare class MongoReportStorage implements storage.ReportStorage {
|
|
|
5
5
|
private readonly client;
|
|
6
6
|
readonly db: PowerSyncMongo;
|
|
7
7
|
constructor(db: PowerSyncMongo);
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
deleteOldConnectionData(data: event_types.DeleteOldConnectionData): Promise<void>;
|
|
9
|
+
getClientConnectionReports(data: event_types.ClientConnectionReportRequest): Promise<event_types.ClientConnectionReport>;
|
|
10
|
+
reportClientConnection(data: event_types.ClientConnectionBucketData): Promise<void>;
|
|
11
|
+
reportClientDisconnection(data: event_types.ClientDisconnectionEventData): Promise<void>;
|
|
12
|
+
getConnectedClients(data: event_types.ClientConnectionsRequest): Promise<event_types.ClientConnectionReport>;
|
|
13
13
|
[Symbol.asyncDispose](): Promise<void>;
|
|
14
14
|
private parseJsDate;
|
|
15
|
-
private
|
|
16
|
-
private
|
|
15
|
+
private connectionsFacetPipeline;
|
|
16
|
+
private connectionsProjectPipeline;
|
|
17
17
|
private updateDocFilter;
|
|
18
18
|
private listConnectionsDateRange;
|
|
19
19
|
}
|
|
@@ -6,7 +6,7 @@ export class MongoReportStorage {
|
|
|
6
6
|
this.client = db.client;
|
|
7
7
|
this.db = db;
|
|
8
8
|
}
|
|
9
|
-
async
|
|
9
|
+
async deleteOldConnectionData(data) {
|
|
10
10
|
const { date } = data;
|
|
11
11
|
const result = await this.db.sdk_report_events.deleteMany({
|
|
12
12
|
connected_at: { $lt: date },
|
|
@@ -19,7 +19,7 @@ export class MongoReportStorage {
|
|
|
19
19
|
logger.info(`TTL from ${date.toISOString()}: ${result.deletedCount} MongoDB documents have been removed from sdk_report_events.`);
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
async
|
|
22
|
+
async getClientConnectionReports(data) {
|
|
23
23
|
const { start, end } = data;
|
|
24
24
|
const result = await this.db.sdk_report_events
|
|
25
25
|
.aggregate([
|
|
@@ -28,13 +28,13 @@ export class MongoReportStorage {
|
|
|
28
28
|
connected_at: { $lte: end, $gte: start }
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
|
-
this.
|
|
32
|
-
this.
|
|
31
|
+
this.connectionsFacetPipeline(),
|
|
32
|
+
this.connectionsProjectPipeline()
|
|
33
33
|
])
|
|
34
34
|
.toArray();
|
|
35
35
|
return result[0];
|
|
36
36
|
}
|
|
37
|
-
async
|
|
37
|
+
async reportClientConnection(data) {
|
|
38
38
|
const updateFilter = this.updateDocFilter(data.user_id, data.client_id);
|
|
39
39
|
await this.db.sdk_report_events.findOneAndUpdate(updateFilter, {
|
|
40
40
|
$set: data,
|
|
@@ -45,7 +45,7 @@ export class MongoReportStorage {
|
|
|
45
45
|
upsert: true
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
-
async
|
|
48
|
+
async reportClientDisconnection(data) {
|
|
49
49
|
const { connected_at, user_id, client_id } = data;
|
|
50
50
|
await this.db.sdk_report_events.findOneAndUpdate({
|
|
51
51
|
client_id,
|
|
@@ -60,7 +60,7 @@ export class MongoReportStorage {
|
|
|
60
60
|
}
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
|
-
async
|
|
63
|
+
async getConnectedClients(data) {
|
|
64
64
|
const timeframeFilter = this.listConnectionsDateRange(data);
|
|
65
65
|
const result = await this.db.sdk_report_events
|
|
66
66
|
.aggregate([
|
|
@@ -71,8 +71,8 @@ export class MongoReportStorage {
|
|
|
71
71
|
...timeframeFilter
|
|
72
72
|
}
|
|
73
73
|
},
|
|
74
|
-
this.
|
|
75
|
-
this.
|
|
74
|
+
this.connectionsFacetPipeline(),
|
|
75
|
+
this.connectionsProjectPipeline()
|
|
76
76
|
])
|
|
77
77
|
.toArray();
|
|
78
78
|
return result[0];
|
|
@@ -93,7 +93,7 @@ export class MongoReportStorage {
|
|
|
93
93
|
parsedDate: date
|
|
94
94
|
};
|
|
95
95
|
}
|
|
96
|
-
|
|
96
|
+
connectionsFacetPipeline() {
|
|
97
97
|
return {
|
|
98
98
|
$facet: {
|
|
99
99
|
unique_users: [
|
|
@@ -132,7 +132,7 @@ export class MongoReportStorage {
|
|
|
132
132
|
}
|
|
133
133
|
};
|
|
134
134
|
}
|
|
135
|
-
|
|
135
|
+
connectionsProjectPipeline() {
|
|
136
136
|
return {
|
|
137
137
|
$project: {
|
|
138
138
|
users: { $ifNull: [{ $arrayElemAt: ['$unique_users.count', 0] }, 0] },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoReportStorage.js","sourceRoot":"","sources":["../../src/storage/MongoReportStorage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,MAAM,OAAO,kBAAkB;IACZ,MAAM,CAAoB;IAC3B,EAAE,CAAiB;IAEnC,YAAY,EAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IACD,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"MongoReportStorage.js","sourceRoot":"","sources":["../../src/storage/MongoReportStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -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, CurrentDataDocument, CustomWriteCheckpointDocument, IdSequenceDocument, InstanceDocument,
|
|
4
|
+
import { BucketDataDocument, BucketParameterDocument, BucketStateDocument, CheckpointEventDocument, ClientConnectionDocument, CurrentDataDocument, CustomWriteCheckpointDocument, IdSequenceDocument, InstanceDocument, SourceTableDocument, 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.
|
|
@@ -21,7 +21,7 @@ export declare class PowerSyncMongo {
|
|
|
21
21
|
readonly locks: mongo.Collection<lib_mongo.locks.Lock>;
|
|
22
22
|
readonly bucket_state: mongo.Collection<BucketStateDocument>;
|
|
23
23
|
readonly checkpoint_events: mongo.Collection<CheckpointEventDocument>;
|
|
24
|
-
readonly sdk_report_events: mongo.Collection<
|
|
24
|
+
readonly sdk_report_events: mongo.Collection<ClientConnectionDocument>;
|
|
25
25
|
readonly client: mongo.MongoClient;
|
|
26
26
|
readonly db: mongo.Db;
|
|
27
27
|
constructor(client: mongo.MongoClient, options?: PowerSyncMongoOptions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/storage/implementation/db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAyBrE,MAAM,OAAO,cAAc;IAChB,YAAY,CAAwC;IACpD,WAAW,CAAuC;IAClD,iBAAiB,CAA4C;IAC7D,cAAc,CAAuC;IACrD,UAAU,CAAqC;IAC/C,aAAa,CAAwC;IACrD,wBAAwB,CAAkD;IAC1E,iBAAiB,CAA4C;IAC7D,QAAQ,CAAqC;IAC7C,KAAK,CAAyC;IAC9C,YAAY,CAAwC;IACpD,iBAAiB,CAA4C;IAC7D,iBAAiB,
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/storage/implementation/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -190,5 +190,5 @@ export interface WriteCheckpointDocument {
|
|
|
190
190
|
export interface InstanceDocument {
|
|
191
191
|
_id: string;
|
|
192
192
|
}
|
|
193
|
-
export interface
|
|
193
|
+
export interface ClientConnectionDocument extends event_types.ClientConnection {
|
|
194
194
|
}
|
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-
|
|
5
|
+
"version": "0.0.0-dev-20250819134004",
|
|
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-
|
|
31
|
-
"@powersync/lib-services-framework": "0.0.0-dev-
|
|
32
|
-
"@powersync/service-core": "0.0.0-dev-
|
|
33
|
-
"@powersync/service-types": "0.0.0-dev-
|
|
34
|
-
"@powersync/service-jsonbig": "0.0.0-dev-
|
|
35
|
-
"@powersync/service-sync-rules": "0.0.0-dev-
|
|
30
|
+
"@powersync/lib-service-mongodb": "0.0.0-dev-20250819134004",
|
|
31
|
+
"@powersync/lib-services-framework": "0.0.0-dev-20250819134004",
|
|
32
|
+
"@powersync/service-core": "0.0.0-dev-20250819134004",
|
|
33
|
+
"@powersync/service-types": "0.0.0-dev-20250819134004",
|
|
34
|
+
"@powersync/service-jsonbig": "0.0.0-dev-20250819134004",
|
|
35
|
+
"@powersync/service-sync-rules": "0.0.0-dev-20250819134004"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@powersync/service-core-tests": "0.0.0-dev-
|
|
38
|
+
"@powersync/service-core-tests": "0.0.0-dev-20250819134004"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build": "tsc -b",
|
|
@@ -12,7 +12,7 @@ export class MongoReportStorage implements storage.ReportStorage {
|
|
|
12
12
|
this.client = db.client;
|
|
13
13
|
this.db = db;
|
|
14
14
|
}
|
|
15
|
-
async
|
|
15
|
+
async deleteOldConnectionData(data: event_types.DeleteOldConnectionData): Promise<void> {
|
|
16
16
|
const { date } = data;
|
|
17
17
|
const result = await this.db.sdk_report_events.deleteMany({
|
|
18
18
|
connected_at: { $lt: date },
|
|
@@ -28,23 +28,25 @@ export class MongoReportStorage implements storage.ReportStorage {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
async
|
|
31
|
+
async getClientConnectionReports(
|
|
32
|
+
data: event_types.ClientConnectionReportRequest
|
|
33
|
+
): Promise<event_types.ClientConnectionReport> {
|
|
32
34
|
const { start, end } = data;
|
|
33
35
|
const result = await this.db.sdk_report_events
|
|
34
|
-
.aggregate<event_types.
|
|
36
|
+
.aggregate<event_types.ClientConnectionReport>([
|
|
35
37
|
{
|
|
36
38
|
$match: {
|
|
37
39
|
connected_at: { $lte: end, $gte: start }
|
|
38
40
|
}
|
|
39
41
|
},
|
|
40
|
-
this.
|
|
41
|
-
this.
|
|
42
|
+
this.connectionsFacetPipeline(),
|
|
43
|
+
this.connectionsProjectPipeline()
|
|
42
44
|
])
|
|
43
45
|
.toArray();
|
|
44
46
|
return result[0];
|
|
45
47
|
}
|
|
46
48
|
|
|
47
|
-
async
|
|
49
|
+
async reportClientConnection(data: event_types.ClientConnectionBucketData): Promise<void> {
|
|
48
50
|
const updateFilter = this.updateDocFilter(data.user_id, data.client_id!);
|
|
49
51
|
await this.db.sdk_report_events.findOneAndUpdate(
|
|
50
52
|
updateFilter,
|
|
@@ -59,7 +61,7 @@ export class MongoReportStorage implements storage.ReportStorage {
|
|
|
59
61
|
}
|
|
60
62
|
);
|
|
61
63
|
}
|
|
62
|
-
async
|
|
64
|
+
async reportClientDisconnection(data: event_types.ClientDisconnectionEventData): Promise<void> {
|
|
63
65
|
const { connected_at, user_id, client_id } = data;
|
|
64
66
|
await this.db.sdk_report_events.findOneAndUpdate(
|
|
65
67
|
{
|
|
@@ -77,10 +79,10 @@ export class MongoReportStorage implements storage.ReportStorage {
|
|
|
77
79
|
}
|
|
78
80
|
);
|
|
79
81
|
}
|
|
80
|
-
async
|
|
82
|
+
async getConnectedClients(data: event_types.ClientConnectionsRequest): Promise<event_types.ClientConnectionReport> {
|
|
81
83
|
const timeframeFilter = this.listConnectionsDateRange(data);
|
|
82
84
|
const result = await this.db.sdk_report_events
|
|
83
|
-
.aggregate<event_types.
|
|
85
|
+
.aggregate<event_types.ClientConnectionReport>([
|
|
84
86
|
{
|
|
85
87
|
$match: {
|
|
86
88
|
disconnected_at: { $exists: false },
|
|
@@ -88,8 +90,8 @@ export class MongoReportStorage implements storage.ReportStorage {
|
|
|
88
90
|
...timeframeFilter
|
|
89
91
|
}
|
|
90
92
|
},
|
|
91
|
-
this.
|
|
92
|
-
this.
|
|
93
|
+
this.connectionsFacetPipeline(),
|
|
94
|
+
this.connectionsProjectPipeline()
|
|
93
95
|
])
|
|
94
96
|
.toArray();
|
|
95
97
|
return result[0];
|
|
@@ -113,7 +115,7 @@ export class MongoReportStorage implements storage.ReportStorage {
|
|
|
113
115
|
};
|
|
114
116
|
}
|
|
115
117
|
|
|
116
|
-
private
|
|
118
|
+
private connectionsFacetPipeline() {
|
|
117
119
|
return {
|
|
118
120
|
$facet: {
|
|
119
121
|
unique_users: [
|
|
@@ -153,7 +155,7 @@ export class MongoReportStorage implements storage.ReportStorage {
|
|
|
153
155
|
};
|
|
154
156
|
}
|
|
155
157
|
|
|
156
|
-
private
|
|
158
|
+
private connectionsProjectPipeline() {
|
|
157
159
|
return {
|
|
158
160
|
$project: {
|
|
159
161
|
users: { $ifNull: [{ $arrayElemAt: ['$unique_users.count', 0] }, 0] },
|
|
@@ -176,7 +178,7 @@ export class MongoReportStorage implements storage.ReportStorage {
|
|
|
176
178
|
};
|
|
177
179
|
}
|
|
178
180
|
|
|
179
|
-
private listConnectionsDateRange(data: event_types.
|
|
181
|
+
private listConnectionsDateRange(data: event_types.ClientConnectionsRequest) {
|
|
180
182
|
const { range } = data;
|
|
181
183
|
if (!range) {
|
|
182
184
|
return undefined;
|
|
@@ -8,11 +8,11 @@ import {
|
|
|
8
8
|
BucketParameterDocument,
|
|
9
9
|
BucketStateDocument,
|
|
10
10
|
CheckpointEventDocument,
|
|
11
|
+
ClientConnectionDocument,
|
|
11
12
|
CurrentDataDocument,
|
|
12
13
|
CustomWriteCheckpointDocument,
|
|
13
14
|
IdSequenceDocument,
|
|
14
15
|
InstanceDocument,
|
|
15
|
-
SdkConnectEventDocument,
|
|
16
16
|
SourceTableDocument,
|
|
17
17
|
SyncRuleDocument,
|
|
18
18
|
WriteCheckpointDocument
|
|
@@ -38,7 +38,7 @@ export class PowerSyncMongo {
|
|
|
38
38
|
readonly locks: mongo.Collection<lib_mongo.locks.Lock>;
|
|
39
39
|
readonly bucket_state: mongo.Collection<BucketStateDocument>;
|
|
40
40
|
readonly checkpoint_events: mongo.Collection<CheckpointEventDocument>;
|
|
41
|
-
readonly sdk_report_events: mongo.Collection<
|
|
41
|
+
readonly sdk_report_events: mongo.Collection<ClientConnectionDocument>;
|
|
42
42
|
|
|
43
43
|
readonly client: mongo.MongoClient;
|
|
44
44
|
readonly db: mongo.Db;
|