@powersync/service-module-mongodb-storage 0.0.0-dev-20250812070033 → 0.0.0-dev-20250813080357

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,21 +1,23 @@
1
1
  # @powersync/service-module-mongodb-storage
2
2
 
3
- ## 0.0.0-dev-20250812070033
3
+ ## 0.0.0-dev-20250813080357
4
4
 
5
5
  ### Patch Changes
6
6
 
7
7
  - f1d187b: sdk reporting
8
+ - 0fad466: Added sdk reporting to storage
8
9
  - a700ec9: Reporting mongo storage added to storage engine.
9
10
  - 060b829: Update license abbreviation to FSL-1.1-ALv2.
10
11
  - Updated dependencies [f1d187b]
12
+ - Updated dependencies [0fad466]
11
13
  - Updated dependencies [a700ec9]
12
14
  - Updated dependencies [060b829]
13
- - @powersync/service-core@0.0.0-dev-20250812070033
14
- - @powersync/service-types@0.0.0-dev-20250812070033
15
- - @powersync/lib-services-framework@0.0.0-dev-20250812070033
16
- - @powersync/service-sync-rules@0.0.0-dev-20250812070033
17
- - @powersync/lib-service-mongodb@0.0.0-dev-20250812070033
18
- - @powersync/service-jsonbig@0.0.0-dev-20250812070033
15
+ - @powersync/service-core@0.0.0-dev-20250813080357
16
+ - @powersync/service-types@0.0.0-dev-20250813080357
17
+ - @powersync/lib-services-framework@0.0.0-dev-20250813080357
18
+ - @powersync/service-sync-rules@0.0.0-dev-20250813080357
19
+ - @powersync/lib-service-mongodb@0.0.0-dev-20250813080357
20
+ - @powersync/service-jsonbig@0.0.0-dev-20250813080357
19
21
 
20
22
  ## 0.11.0
21
23
 
@@ -10,8 +10,6 @@ export declare class MongoReportStorage implements storage.ReportStorageFactory
10
10
  private sdkProjectPipeline;
11
11
  private updateDocFilter;
12
12
  private listConnectionsDateRange;
13
- private timeFrameQuery;
14
- private timeFrameDeleteQuery;
15
13
  deleteOldSdkData(data: event_types.DeleteOldSdkData): Promise<void>;
16
14
  scrapeSdkData(data: event_types.ScrapeSdkDataRequest): Promise<event_types.ListCurrentConnections>;
17
15
  reportSdkConnect(data: event_types.SdkConnectBucketData): Promise<void>;
@@ -84,92 +84,32 @@ export class MongoReportStorage {
84
84
  if (!range) {
85
85
  return undefined;
86
86
  }
87
- const endDate = data.range?.end_date ? new Date(data.range.end_date) : new Date();
88
- const startDate = new Date(range.start_date);
87
+ const endDate = data.range?.end ? new Date(data.range.end) : new Date();
88
+ const startDate = new Date(range.start);
89
89
  return {
90
90
  connect_at: {
91
91
  $lte: endDate,
92
- $gt: startDate
92
+ $gte: startDate
93
93
  }
94
94
  };
95
95
  }
96
- timeFrameQuery(timeframe, interval = 1) {
97
- const { year, month, today, parsedDate } = this.parseJsDate(new Date());
98
- switch (timeframe) {
99
- case 'month': {
100
- return { $lte: parsedDate, $gt: new Date(year, parsedDate.getMonth() - interval) };
101
- }
102
- case 'week': {
103
- const weekStartDate = new Date(parsedDate);
104
- weekStartDate.setDate(weekStartDate.getDate() - 6 * interval);
105
- const weekStart = this.parseJsDate(weekStartDate);
106
- return {
107
- $lte: parsedDate,
108
- $gt: new Date(weekStart.year, weekStart.month, weekStart.today)
109
- };
110
- }
111
- case 'hour': {
112
- // Get the last hour from the current time
113
- const previousHour = parsedDate.getHours() - interval;
114
- return {
115
- $gt: new Date(year, month, today, previousHour),
116
- $lte: new Date(year, month, today, parsedDate.getHours())
117
- };
118
- }
119
- default: {
120
- return {
121
- $lte: parsedDate,
122
- $gt: new Date(year, month, today - interval)
123
- };
124
- }
125
- }
126
- }
127
- timeFrameDeleteQuery(timeframe, interval = 1) {
128
- const { year, month, today, parsedDate } = this.parseJsDate(new Date());
129
- switch (timeframe) {
130
- case 'month': {
131
- return { $lt: new Date(year, parsedDate.getMonth() - interval) };
132
- }
133
- case 'week': {
134
- const weekStartDate = new Date(parsedDate);
135
- weekStartDate.setDate(weekStartDate.getDate() - 6 * interval);
136
- const { month, year, today } = this.parseJsDate(weekStartDate);
137
- return {
138
- $lt: new Date(year, month, today)
139
- };
140
- }
141
- case 'hour': {
142
- const previousHour = parsedDate.getHours() - interval;
143
- return {
144
- $lt: new Date(year, month, today, previousHour)
145
- };
146
- }
147
- default: {
148
- return {
149
- $lt: new Date(year, month, today - interval)
150
- };
151
- }
152
- }
153
- }
154
96
  async deleteOldSdkData(data) {
155
- const { interval, timeframe } = data;
156
- const timeframeFilter = this.timeFrameDeleteQuery(timeframe, interval);
97
+ const { date } = data;
157
98
  const result = await this.db.sdk_report_events.deleteMany({
158
- connect_at: timeframeFilter,
99
+ connect_at: { $lt: date },
159
100
  $or: [{ disconnect_at: { $exists: true } }, { jwt_exp: { $lt: new Date() }, disconnect_at: { $exists: false } }]
160
101
  });
161
102
  if (result.deletedCount > 0) {
162
- logger.info(`TTL ${interval}/${timeframe}: ${result.deletedCount} MongoDB documents have been removed from sdk_report_events.`);
103
+ logger.info(`TTL from ${date.toISOString()}: ${result.deletedCount} MongoDB documents have been removed from sdk_report_events.`);
163
104
  }
164
105
  }
165
106
  async scrapeSdkData(data) {
166
- const { interval, timeframe } = data;
167
- const timeframeFilter = this.timeFrameQuery(timeframe, interval);
107
+ const { start, end } = data;
168
108
  const result = await this.db.sdk_report_events
169
109
  .aggregate([
170
110
  {
171
111
  $match: {
172
- connect_at: timeframeFilter
112
+ connect_at: { $lte: end, $gte: start }
173
113
  }
174
114
  },
175
115
  this.sdkFacetPipeline(),
@@ -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-20250812070033",
5
+ "version": "0.0.0-dev-20250813080357",
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-20250812070033",
31
- "@powersync/lib-services-framework": "0.0.0-dev-20250812070033",
32
- "@powersync/service-core": "0.0.0-dev-20250812070033",
33
- "@powersync/service-types": "0.0.0-dev-20250812070033",
34
- "@powersync/service-jsonbig": "0.0.0-dev-20250812070033",
35
- "@powersync/service-sync-rules": "0.0.0-dev-20250812070033"
30
+ "@powersync/lib-service-mongodb": "0.0.0-dev-20250813080357",
31
+ "@powersync/lib-services-framework": "0.0.0-dev-20250813080357",
32
+ "@powersync/service-core": "0.0.0-dev-20250813080357",
33
+ "@powersync/service-types": "0.0.0-dev-20250813080357",
34
+ "@powersync/service-jsonbig": "0.0.0-dev-20250813080357",
35
+ "@powersync/service-sync-rules": "0.0.0-dev-20250813080357"
36
36
  },
37
37
  "devDependencies": {
38
- "@powersync/service-core-tests": "0.0.0-dev-20250812070033"
38
+ "@powersync/service-core-tests": "0.0.0-dev-20250813080357"
39
39
  },
40
40
  "scripts": {
41
41
  "build": "tsc -b",
@@ -95,98 +95,36 @@ export class MongoReportStorage implements storage.ReportStorageFactory {
95
95
  if (!range) {
96
96
  return undefined;
97
97
  }
98
- const endDate = data.range?.end_date ? new Date(data.range.end_date) : new Date();
99
- const startDate = new Date(range.start_date);
98
+ const endDate = data.range?.end ? new Date(data.range.end) : new Date();
99
+ const startDate = new Date(range.start);
100
100
  return {
101
101
  connect_at: {
102
102
  $lte: endDate,
103
- $gt: startDate
103
+ $gte: startDate
104
104
  }
105
105
  };
106
106
  }
107
107
 
108
- private timeFrameQuery(timeframe: event_types.TimeFrames, interval: number = 1): mongo.Filter<mongo.Document> {
109
- const { year, month, today, parsedDate } = this.parseJsDate(new Date());
110
- switch (timeframe) {
111
- case 'month': {
112
- return { $lte: parsedDate, $gt: new Date(year, parsedDate.getMonth() - interval) };
113
- }
114
- case 'week': {
115
- const weekStartDate = new Date(parsedDate);
116
- weekStartDate.setDate(weekStartDate.getDate() - 6 * interval);
117
- const weekStart = this.parseJsDate(weekStartDate);
118
- return {
119
- $lte: parsedDate,
120
- $gt: new Date(weekStart.year, weekStart.month, weekStart.today)
121
- };
122
- }
123
- case 'hour': {
124
- // Get the last hour from the current time
125
- const previousHour = parsedDate.getHours() - interval;
126
- return {
127
- $gt: new Date(year, month, today, previousHour),
128
- $lte: new Date(year, month, today, parsedDate.getHours())
129
- };
130
- }
131
- default: {
132
- return {
133
- $lte: parsedDate,
134
- $gt: new Date(year, month, today - interval)
135
- };
136
- }
137
- }
138
- }
139
-
140
- private timeFrameDeleteQuery(timeframe: event_types.TimeFrames, interval: number = 1): mongo.Filter<mongo.Document> {
141
- const { year, month, today, parsedDate } = this.parseJsDate(new Date());
142
- switch (timeframe) {
143
- case 'month': {
144
- return { $lt: new Date(year, parsedDate.getMonth() - interval) };
145
- }
146
- case 'week': {
147
- const weekStartDate = new Date(parsedDate);
148
- weekStartDate.setDate(weekStartDate.getDate() - 6 * interval);
149
- const { month, year, today } = this.parseJsDate(weekStartDate);
150
- return {
151
- $lt: new Date(year, month, today)
152
- };
153
- }
154
- case 'hour': {
155
- const previousHour = parsedDate.getHours() - interval;
156
- return {
157
- $lt: new Date(year, month, today, previousHour)
158
- };
159
- }
160
- default: {
161
- return {
162
- $lt: new Date(year, month, today - interval)
163
- };
164
- }
165
- }
166
- }
167
-
168
108
  async deleteOldSdkData(data: event_types.DeleteOldSdkData): Promise<void> {
169
- const { interval, timeframe } = data;
170
- const timeframeFilter = this.timeFrameDeleteQuery(timeframe, interval);
109
+ const { date } = data;
171
110
  const result = await this.db.sdk_report_events.deleteMany({
172
- connect_at: timeframeFilter,
111
+ connect_at: { $lt: date },
173
112
  $or: [{ disconnect_at: { $exists: true } }, { jwt_exp: { $lt: new Date() }, disconnect_at: { $exists: false } }]
174
113
  });
175
114
  if (result.deletedCount > 0) {
176
115
  logger.info(
177
- `TTL ${interval}/${timeframe}: ${result.deletedCount} MongoDB documents have been removed from sdk_report_events.`
116
+ `TTL from ${date.toISOString()}: ${result.deletedCount} MongoDB documents have been removed from sdk_report_events.`
178
117
  );
179
118
  }
180
119
  }
181
120
 
182
121
  async scrapeSdkData(data: event_types.ScrapeSdkDataRequest): Promise<event_types.ListCurrentConnections> {
183
- const { interval, timeframe } = data;
184
- const timeframeFilter = this.timeFrameQuery(timeframe, interval);
122
+ const { start, end } = data;
185
123
  const result = await this.db.sdk_report_events
186
124
  .aggregate<event_types.ListCurrentConnections>([
187
125
  {
188
126
  $match: {
189
- connect_at: timeframeFilter
127
+ connect_at: { $lte: end, $gte: start }
190
128
  }
191
129
  },
192
130
  this.sdkFacetPipeline(),
@@ -40,8 +40,13 @@ exports[`SDK reporting storage > Should delete rows older than specified range 1
40
40
  "sdk": "powersync-js/1.21.4",
41
41
  "users": 1,
42
42
  },
43
+ {
44
+ "clients": 1,
45
+ "sdk": "powersync-js/1.24.5",
46
+ "users": 1,
47
+ },
43
48
  ],
44
- "users": 4,
49
+ "users": 5,
45
50
  }
46
51
  `;
47
52
 
@@ -134,8 +139,13 @@ exports[`SDK reporting storage > Should show SDK scrape data for user over the p
134
139
  "sdk": "powersync-js/1.21.4",
135
140
  "users": 1,
136
141
  },
142
+ {
143
+ "clients": 1,
144
+ "sdk": "powersync-js/1.24.5",
145
+ "users": 1,
146
+ },
137
147
  ],
138
- "users": 4,
148
+ "users": 5,
139
149
  }
140
150
  `;
141
151
 
@@ -30,6 +30,7 @@ describe('SDK reporting storage', async () => {
30
30
  now.getHours(),
31
31
  now.getMinutes() - 5
32
32
  );
33
+ const dayAgo = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1, now.getHours());
33
34
  const yesterday = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1);
34
35
  const weekAgo = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 7);
35
36
  const monthAgo = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate());
@@ -120,7 +121,7 @@ describe('SDK reporting storage', async () => {
120
121
  it('Should show connected users with start range', async () => {
121
122
  const current = await factory.listCurrentConnections({
122
123
  range: {
123
- start_date: new Date(
124
+ start: new Date(
124
125
  now.getFullYear(),
125
126
  now.getMonth(),
126
127
  now.getDate(),
@@ -134,8 +135,8 @@ describe('SDK reporting storage', async () => {
134
135
  it('Should show connected users with start range and end range', async () => {
135
136
  const current = await factory.listCurrentConnections({
136
137
  range: {
137
- end_date: nowLess5minutes.toISOString(),
138
- start_date: new Date(
138
+ end: nowLess5minutes.toISOString(),
139
+ start: new Date(
139
140
  now.getFullYear(),
140
141
  now.getMonth(),
141
142
  now.getDate(),
@@ -148,22 +149,22 @@ describe('SDK reporting storage', async () => {
148
149
  });
149
150
  it('Should show SDK scrape data for user over the past month', async () => {
150
151
  const sdk = await factory.scrapeSdkData({
151
- interval: 1,
152
- timeframe: 'month'
152
+ start: monthAgo,
153
+ end: now
153
154
  });
154
155
  expect(sdk).toMatchSnapshot();
155
156
  });
156
157
  it('Should show SDK scrape data for user over the past week', async () => {
157
158
  const sdk = await factory.scrapeSdkData({
158
- interval: 1,
159
- timeframe: 'week'
159
+ start: weekAgo,
160
+ end: now
160
161
  });
161
162
  expect(sdk).toMatchSnapshot();
162
163
  });
163
164
  it('Should show SDK scrape data for user over the past day', async () => {
164
165
  const sdk = await factory.scrapeSdkData({
165
- interval: 1,
166
- timeframe: 'day'
166
+ start: dayAgo,
167
+ end: now
167
168
  });
168
169
  expect(sdk).toMatchSnapshot();
169
170
  });
@@ -244,12 +245,11 @@ describe('SDK reporting storage', async () => {
244
245
  await deleteData();
245
246
  await loadData();
246
247
  await factory.deleteOldSdkData({
247
- interval: 1,
248
- timeframe: 'week'
248
+ date: weekAgo
249
249
  });
250
250
  const sdk = await factory.scrapeSdkData({
251
- interval: 1,
252
- timeframe: 'month'
251
+ start: monthAgo,
252
+ end: now
253
253
  });
254
254
  expect(sdk).toMatchSnapshot();
255
255
  });