@powersync/service-module-mongodb-storage 0.0.0-dev-20250723143431 → 0.0.0-dev-20250724064948
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
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @powersync/service-module-mongodb-storage
|
|
2
2
|
|
|
3
|
-
## 0.0.0-dev-
|
|
3
|
+
## 0.0.0-dev-20250724064948
|
|
4
4
|
|
|
5
5
|
### Patch Changes
|
|
6
6
|
|
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
- Updated dependencies [4ebc3bf]
|
|
11
11
|
- Updated dependencies [1aafdaf]
|
|
12
12
|
- Updated dependencies [a700ec9]
|
|
13
|
-
- @powersync/service-core@0.0.0-dev-
|
|
14
|
-
- @powersync/service-types@0.0.0-dev-
|
|
15
|
-
- @powersync/lib-services-framework@0.0.0-dev-
|
|
16
|
-
- @powersync/lib-service-mongodb@0.0.0-dev-
|
|
13
|
+
- @powersync/service-core@0.0.0-dev-20250724064948
|
|
14
|
+
- @powersync/service-types@0.0.0-dev-20250724064948
|
|
15
|
+
- @powersync/lib-services-framework@0.0.0-dev-20250724064948
|
|
16
|
+
- @powersync/lib-service-mongodb@0.0.0-dev-20250724064948
|
|
17
17
|
|
|
18
18
|
## 0.10.4
|
|
19
19
|
|
|
@@ -9,7 +9,8 @@ export declare class MongoReportStorage implements storage.ReportStorageFactory
|
|
|
9
9
|
private sdkProjectPipeline;
|
|
10
10
|
private updateDocFilter;
|
|
11
11
|
private dayDateRange;
|
|
12
|
-
private
|
|
12
|
+
private timeFrameQuery;
|
|
13
|
+
private timeFrameDeleteQuery;
|
|
13
14
|
deleteOldSdkData(data: event_types.DeleteOldSdkData): Promise<void>;
|
|
14
15
|
scrapeSdkData(data: event_types.ScrapeSdkDataRequest): Promise<event_types.ListCurrentConnections>;
|
|
15
16
|
reportSdkConnect(data: event_types.SdkConnectBucketData): Promise<void>;
|
|
@@ -63,13 +63,14 @@ export class MongoReportStorage {
|
|
|
63
63
|
};
|
|
64
64
|
}
|
|
65
65
|
updateDocFilter(userId, clientId) {
|
|
66
|
-
const { year, month, today
|
|
66
|
+
const { year, month, today } = parseDate(new Date());
|
|
67
67
|
const nextDay = today + 1;
|
|
68
68
|
return {
|
|
69
69
|
user_id: userId,
|
|
70
70
|
client_id: clientId,
|
|
71
71
|
connect_at: {
|
|
72
|
-
|
|
72
|
+
// Need to create a new date here to sett the time to 00:00:00
|
|
73
|
+
$gte: new Date(year, month, today),
|
|
73
74
|
$lt: new Date(year, month, nextDay)
|
|
74
75
|
}
|
|
75
76
|
};
|
|
@@ -91,15 +92,15 @@ export class MongoReportStorage {
|
|
|
91
92
|
}
|
|
92
93
|
};
|
|
93
94
|
}
|
|
94
|
-
|
|
95
|
+
timeFrameQuery(timeframe, interval = 1) {
|
|
95
96
|
const { year, month, today, parsedDate } = parseJsDate(new Date());
|
|
96
|
-
switch (
|
|
97
|
+
switch (timeframe) {
|
|
97
98
|
case 'month': {
|
|
98
|
-
return { $lte: parsedDate, $gt: new Date(year, parsedDate.getMonth() -
|
|
99
|
+
return { $lte: parsedDate, $gt: new Date(year, parsedDate.getMonth() - interval) };
|
|
99
100
|
}
|
|
100
101
|
case 'week': {
|
|
101
102
|
const weekStartDate = new Date(parsedDate);
|
|
102
|
-
weekStartDate.setDate(weekStartDate.getDate() - 6 *
|
|
103
|
+
weekStartDate.setDate(weekStartDate.getDate() - 6 * interval);
|
|
103
104
|
const weekStart = parseJsDate(weekStartDate);
|
|
104
105
|
return {
|
|
105
106
|
$lte: parsedDate,
|
|
@@ -108,24 +109,53 @@ export class MongoReportStorage {
|
|
|
108
109
|
}
|
|
109
110
|
case 'hour': {
|
|
110
111
|
// Get the last hour from the current time
|
|
111
|
-
const previousHour = parsedDate.getHours() -
|
|
112
|
+
const previousHour = parsedDate.getHours() - interval;
|
|
112
113
|
return {
|
|
113
|
-
$
|
|
114
|
-
$
|
|
114
|
+
$gt: new Date(year, month, today, previousHour),
|
|
115
|
+
$lte: new Date(year, month, today, parsedDate.getHours())
|
|
115
116
|
};
|
|
116
117
|
}
|
|
117
118
|
default: {
|
|
118
119
|
return {
|
|
119
120
|
$lte: parsedDate,
|
|
120
|
-
$gt: new Date(year, month, today -
|
|
121
|
+
$gt: new Date(year, month, today - interval)
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
timeFrameDeleteQuery(timeframe, interval = 1) {
|
|
127
|
+
const { year, month, today, parsedDate } = parseJsDate(new Date());
|
|
128
|
+
switch (timeframe) {
|
|
129
|
+
case 'month': {
|
|
130
|
+
return { $lt: new Date(year, parsedDate.getMonth() - interval) };
|
|
131
|
+
}
|
|
132
|
+
case 'week': {
|
|
133
|
+
const weekStartDate = new Date(parsedDate);
|
|
134
|
+
weekStartDate.setDate(weekStartDate.getDate() - 6 * interval);
|
|
135
|
+
const { month, year, today } = parseJsDate(weekStartDate);
|
|
136
|
+
return {
|
|
137
|
+
$lt: new Date(year, month, today)
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
case 'hour': {
|
|
141
|
+
const previousHour = parsedDate.getHours() - interval;
|
|
142
|
+
return {
|
|
143
|
+
$lt: new Date(year, month, today, previousHour)
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
default: {
|
|
147
|
+
return {
|
|
148
|
+
$lt: new Date(year, month, today - interval)
|
|
121
149
|
};
|
|
122
150
|
}
|
|
123
151
|
}
|
|
124
152
|
}
|
|
125
153
|
async deleteOldSdkData(data) {
|
|
126
|
-
const {
|
|
154
|
+
const { interval, timeframe } = data;
|
|
155
|
+
const timeframeFilter = this.timeFrameDeleteQuery(timeframe, interval);
|
|
156
|
+
console.log(timeframeFilter);
|
|
127
157
|
const result = await this.db.sdk_report_events.deleteMany({
|
|
128
|
-
connect_at:
|
|
158
|
+
connect_at: timeframeFilter,
|
|
129
159
|
$or: [{ disconnect_at: { $exists: true } }, { jwt_exp: { $lt: new Date() }, disconnect_at: { $exists: false } }]
|
|
130
160
|
});
|
|
131
161
|
if (result.deletedCount > 0) {
|
|
@@ -133,12 +163,13 @@ export class MongoReportStorage {
|
|
|
133
163
|
}
|
|
134
164
|
}
|
|
135
165
|
async scrapeSdkData(data) {
|
|
136
|
-
const
|
|
166
|
+
const { interval, timeframe } = data;
|
|
167
|
+
const timeframeFilter = this.timeFrameQuery(timeframe, interval);
|
|
137
168
|
const result = await this.db.sdk_report_events
|
|
138
169
|
.aggregate([
|
|
139
170
|
{
|
|
140
171
|
$match: {
|
|
141
|
-
connect_at:
|
|
172
|
+
connect_at: timeframeFilter
|
|
142
173
|
}
|
|
143
174
|
},
|
|
144
175
|
this.sdkFacetPipeline(),
|
|
@@ -149,7 +180,6 @@ export class MongoReportStorage {
|
|
|
149
180
|
}
|
|
150
181
|
async reportSdkConnect(data) {
|
|
151
182
|
const updateFilter = this.updateDocFilter(data.user_id, data.client_id);
|
|
152
|
-
console.log(updateFilter);
|
|
153
183
|
await this.db.sdk_report_events.findOneAndUpdate(updateFilter, {
|
|
154
184
|
$set: data,
|
|
155
185
|
$unset: {
|
|
@@ -161,7 +191,6 @@ export class MongoReportStorage {
|
|
|
161
191
|
}
|
|
162
192
|
async reportSdkDisconnect(data) {
|
|
163
193
|
const updateFilter = this.updateDocFilter(data.user_id, data.client_id);
|
|
164
|
-
console.log(updateFilter);
|
|
165
194
|
await this.db.sdk_report_events.findOneAndUpdate(updateFilter, {
|
|
166
195
|
$set: {
|
|
167
196
|
disconnect_at: data.disconnect_at
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoReportStorage.js","sourceRoot":"","sources":["../../src/storage/MongoReportStorage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,SAAS,SAAS,CAAC,IAAU;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1B,OAAO;QACL,IAAI;QACJ,KAAK;QACL,KAAK;QACL,GAAG;QACH,UAAU,EAAE,IAAI;KACjB,CAAC;AACJ,CAAC;AAED,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;IAEO,gBAAgB;QACtB,OAAO;YACL,MAAM,EAAE;gBACN,YAAY,EAAE;oBACZ;wBACE,MAAM,EAAE;4BACN,GAAG,EAAE,UAAU;yBAChB;qBACF;oBACD;wBACE,MAAM,EAAE,OAAO;qBAChB;iBACF;gBACD,kBAAkB,EAAE;oBAClB;wBACE,MAAM,EAAE;4BACN,GAAG,EAAE,MAAM;4BACX,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;4BAClB,UAAU,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE;4BACvC,QAAQ,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE;yBACpC;qBACF;oBACD;wBACE,QAAQ,EAAE;4BACR,GAAG,EAAE,CAAC;4BACN,GAAG,EAAE,MAAM;4BACX,KAAK,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;4BAC7B,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;yBAClC;qBACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;IAEO,kBAAkB;QACxB,OAAO;YACL,QAAQ,EAAE;gBACR,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACrE,IAAI,EAAE,qBAAqB;aAC5B;SACF,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,MAAc,EAAE,QAAgB;QACtD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"MongoReportStorage.js","sourceRoot":"","sources":["../../src/storage/MongoReportStorage.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-
|
|
5
|
+
"version": "0.0.0-dev-20250724064948",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"license": "FSL-1.1-Apache-2.0",
|
|
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-
|
|
30
|
+
"@powersync/lib-service-mongodb": "0.0.0-dev-20250724064948",
|
|
31
|
+
"@powersync/lib-services-framework": "0.0.0-dev-20250724064948",
|
|
32
|
+
"@powersync/service-core": "0.0.0-dev-20250724064948",
|
|
33
|
+
"@powersync/service-types": "0.0.0-dev-20250724064948",
|
|
34
34
|
"@powersync/service-jsonbig": "0.17.10",
|
|
35
35
|
"@powersync/service-sync-rules": "0.27.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@powersync/service-core-tests": "0.0.0-dev-
|
|
38
|
+
"@powersync/service-core-tests": "0.0.0-dev-20250724064948"
|
|
39
39
|
},
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build": "tsc -b",
|
|
@@ -73,13 +73,14 @@ export class MongoReportStorage implements storage.ReportStorageFactory {
|
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
private updateDocFilter(userId: string, clientId: string) {
|
|
76
|
-
const { year, month, today
|
|
76
|
+
const { year, month, today } = parseDate(new Date());
|
|
77
77
|
const nextDay = today + 1;
|
|
78
78
|
return {
|
|
79
79
|
user_id: userId,
|
|
80
80
|
client_id: clientId,
|
|
81
81
|
connect_at: {
|
|
82
|
-
|
|
82
|
+
// Need to create a new date here to sett the time to 00:00:00
|
|
83
|
+
$gte: new Date(year, month, today),
|
|
83
84
|
$lt: new Date(year, month, nextDay)
|
|
84
85
|
}
|
|
85
86
|
};
|
|
@@ -103,15 +104,15 @@ export class MongoReportStorage implements storage.ReportStorageFactory {
|
|
|
103
104
|
};
|
|
104
105
|
}
|
|
105
106
|
|
|
106
|
-
private
|
|
107
|
+
private timeFrameQuery(timeframe: event_types.TimeFrames, interval: number = 1): mongo.Filter<mongo.Document> {
|
|
107
108
|
const { year, month, today, parsedDate } = parseJsDate(new Date());
|
|
108
|
-
switch (
|
|
109
|
+
switch (timeframe) {
|
|
109
110
|
case 'month': {
|
|
110
|
-
return { $lte: parsedDate, $gt: new Date(year, parsedDate.getMonth() -
|
|
111
|
+
return { $lte: parsedDate, $gt: new Date(year, parsedDate.getMonth() - interval) };
|
|
111
112
|
}
|
|
112
113
|
case 'week': {
|
|
113
114
|
const weekStartDate = new Date(parsedDate);
|
|
114
|
-
weekStartDate.setDate(weekStartDate.getDate() - 6 *
|
|
115
|
+
weekStartDate.setDate(weekStartDate.getDate() - 6 * interval);
|
|
115
116
|
const weekStart = parseJsDate(weekStartDate);
|
|
116
117
|
return {
|
|
117
118
|
$lte: parsedDate,
|
|
@@ -120,25 +121,55 @@ export class MongoReportStorage implements storage.ReportStorageFactory {
|
|
|
120
121
|
}
|
|
121
122
|
case 'hour': {
|
|
122
123
|
// Get the last hour from the current time
|
|
123
|
-
const previousHour = parsedDate.getHours() -
|
|
124
|
+
const previousHour = parsedDate.getHours() - interval;
|
|
124
125
|
return {
|
|
125
|
-
$
|
|
126
|
-
$
|
|
126
|
+
$gt: new Date(year, month, today, previousHour),
|
|
127
|
+
$lte: new Date(year, month, today, parsedDate.getHours())
|
|
127
128
|
};
|
|
128
129
|
}
|
|
129
130
|
default: {
|
|
130
131
|
return {
|
|
131
132
|
$lte: parsedDate,
|
|
132
|
-
$gt: new Date(year, month, today -
|
|
133
|
+
$gt: new Date(year, month, today - interval)
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
private timeFrameDeleteQuery(timeframe: event_types.TimeFrames, interval: number = 1): mongo.Filter<mongo.Document> {
|
|
140
|
+
const { year, month, today, parsedDate } = parseJsDate(new Date());
|
|
141
|
+
switch (timeframe) {
|
|
142
|
+
case 'month': {
|
|
143
|
+
return { $lt: new Date(year, parsedDate.getMonth() - interval) };
|
|
144
|
+
}
|
|
145
|
+
case 'week': {
|
|
146
|
+
const weekStartDate = new Date(parsedDate);
|
|
147
|
+
weekStartDate.setDate(weekStartDate.getDate() - 6 * interval);
|
|
148
|
+
const { month, year, today } = parseJsDate(weekStartDate);
|
|
149
|
+
return {
|
|
150
|
+
$lt: new Date(year, month, today)
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
case 'hour': {
|
|
154
|
+
const previousHour = parsedDate.getHours() - interval;
|
|
155
|
+
return {
|
|
156
|
+
$lt: new Date(year, month, today, previousHour)
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
default: {
|
|
160
|
+
return {
|
|
161
|
+
$lt: new Date(year, month, today - interval)
|
|
133
162
|
};
|
|
134
163
|
}
|
|
135
164
|
}
|
|
136
165
|
}
|
|
137
166
|
|
|
138
167
|
async deleteOldSdkData(data: event_types.DeleteOldSdkData): Promise<void> {
|
|
139
|
-
const {
|
|
168
|
+
const { interval, timeframe } = data;
|
|
169
|
+
const timeframeFilter = this.timeFrameDeleteQuery(timeframe, interval);
|
|
170
|
+
console.log(timeframeFilter);
|
|
140
171
|
const result = await this.db.sdk_report_events.deleteMany({
|
|
141
|
-
connect_at:
|
|
172
|
+
connect_at: timeframeFilter,
|
|
142
173
|
$or: [{ disconnect_at: { $exists: true } }, { jwt_exp: { $lt: new Date() }, disconnect_at: { $exists: false } }]
|
|
143
174
|
});
|
|
144
175
|
if (result.deletedCount > 0) {
|
|
@@ -147,12 +178,13 @@ export class MongoReportStorage implements storage.ReportStorageFactory {
|
|
|
147
178
|
}
|
|
148
179
|
|
|
149
180
|
async scrapeSdkData(data: event_types.ScrapeSdkDataRequest): Promise<event_types.ListCurrentConnections> {
|
|
150
|
-
const
|
|
181
|
+
const { interval, timeframe } = data;
|
|
182
|
+
const timeframeFilter = this.timeFrameQuery(timeframe, interval);
|
|
151
183
|
const result = await this.db.sdk_report_events
|
|
152
184
|
.aggregate([
|
|
153
185
|
{
|
|
154
186
|
$match: {
|
|
155
|
-
connect_at:
|
|
187
|
+
connect_at: timeframeFilter
|
|
156
188
|
}
|
|
157
189
|
},
|
|
158
190
|
this.sdkFacetPipeline(),
|
|
@@ -164,7 +196,6 @@ export class MongoReportStorage implements storage.ReportStorageFactory {
|
|
|
164
196
|
|
|
165
197
|
async reportSdkConnect(data: event_types.SdkConnectBucketData): Promise<void> {
|
|
166
198
|
const updateFilter = this.updateDocFilter(data.user_id, data.client_id!);
|
|
167
|
-
console.log(updateFilter);
|
|
168
199
|
await this.db.sdk_report_events.findOneAndUpdate(
|
|
169
200
|
updateFilter,
|
|
170
201
|
{
|
|
@@ -180,7 +211,6 @@ export class MongoReportStorage implements storage.ReportStorageFactory {
|
|
|
180
211
|
}
|
|
181
212
|
async reportSdkDisconnect(data: event_types.SdkDisconnectEventData): Promise<void> {
|
|
182
213
|
const updateFilter = this.updateDocFilter(data.user_id, data.client_id!);
|
|
183
|
-
console.log(updateFilter);
|
|
184
214
|
await this.db.sdk_report_events.findOneAndUpdate(updateFilter, {
|
|
185
215
|
$set: {
|
|
186
216
|
disconnect_at: data.disconnect_at
|