@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-20250723143431
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-20250723143431
14
- - @powersync/service-types@0.0.0-dev-20250723143431
15
- - @powersync/lib-services-framework@0.0.0-dev-20250723143431
16
- - @powersync/lib-service-mongodb@0.0.0-dev-20250723143431
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 timeStampQuery;
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, parsedDate } = parseDate(new Date());
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
- $gte: parsedDate,
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
- timeStampQuery(period, timeframe = 1) {
95
+ timeFrameQuery(timeframe, interval = 1) {
95
96
  const { year, month, today, parsedDate } = parseJsDate(new Date());
96
- switch (period) {
97
+ switch (timeframe) {
97
98
  case 'month': {
98
- return { $lte: parsedDate, $gt: new Date(year, parsedDate.getMonth() - timeframe) };
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 * timeframe);
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() - timeframe;
112
+ const previousHour = parsedDate.getHours() - interval;
112
113
  return {
113
- $gte: new Date(year, month, today, previousHour),
114
- $lt: new Date(year, month, today, parsedDate.getHours())
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 - timeframe)
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 { period, timeframe } = data;
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: this.timeStampQuery(period, timeframe),
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 timespanFilter = this.timeStampQuery(data.period, data.interval);
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: timespanFilter
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":"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"}
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-20250723143431",
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-20250723143431",
31
- "@powersync/lib-services-framework": "0.0.0-dev-20250723143431",
32
- "@powersync/service-core": "0.0.0-dev-20250723143431",
33
- "@powersync/service-types": "0.0.0-dev-20250723143431",
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-20250723143431"
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, parsedDate } = parseDate(new Date());
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
- $gte: parsedDate,
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 timeStampQuery(period: event_types.TimeFrames, timeframe: number = 1): mongo.Filter<mongo.Document> {
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 (period) {
109
+ switch (timeframe) {
109
110
  case 'month': {
110
- return { $lte: parsedDate, $gt: new Date(year, parsedDate.getMonth() - timeframe) };
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 * timeframe);
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() - timeframe;
124
+ const previousHour = parsedDate.getHours() - interval;
124
125
  return {
125
- $gte: new Date(year, month, today, previousHour),
126
- $lt: new Date(year, month, today, parsedDate.getHours())
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 - timeframe)
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 { period, timeframe } = data;
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: this.timeStampQuery(period, timeframe),
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 timespanFilter = this.timeStampQuery(data.period, data.interval);
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: timespanFilter
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