@powersync/service-module-mongodb-storage 0.0.0-dev-20250723130556 → 0.0.0-dev-20250723141836

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-20250723130556
3
+ ## 0.0.0-dev-20250723141836
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-20250723130556
14
- - @powersync/service-types@0.0.0-dev-20250723130556
15
- - @powersync/lib-services-framework@0.0.0-dev-20250723130556
16
- - @powersync/lib-service-mongodb@0.0.0-dev-20250723130556
13
+ - @powersync/service-core@0.0.0-dev-20250723141836
14
+ - @powersync/service-types@0.0.0-dev-20250723141836
15
+ - @powersync/lib-services-framework@0.0.0-dev-20250723141836
16
+ - @powersync/lib-service-mongodb@0.0.0-dev-20250723141836
17
17
 
18
18
  ## 0.10.4
19
19
 
@@ -7,6 +7,9 @@ export declare class MongoReportStorage implements storage.ReportStorageFactory
7
7
  constructor(db: PowerSyncMongo);
8
8
  private sdkFacetPipeline;
9
9
  private sdkProjectPipeline;
10
+ private updateDocFilter;
11
+ private dayDateRange;
12
+ private timeStampQuery;
10
13
  deleteOldSdkData(data: event_types.DeleteOldSdkData): Promise<void>;
11
14
  scrapeSdkData(data: event_types.ScrapeSdkDataRequest): Promise<event_types.ListCurrentConnections>;
12
15
  reportSdkConnect(data: event_types.SdkConnectBucketData): Promise<void>;
@@ -1,4 +1,5 @@
1
1
  import { logger } from '@powersync/lib-services-framework';
2
+ import { parseJsDate } from './implementation/util.js';
2
3
  function parseDate(date) {
3
4
  const year = date.getFullYear();
4
5
  const month = date.getMonth();
@@ -12,66 +13,6 @@ function parseDate(date) {
12
13
  parsedDate: date
13
14
  };
14
15
  }
15
- function updateDocFilter(userId, clientId) {
16
- const { year, month, today, parsedDate } = parseDate(new Date());
17
- const nextDay = today + 1;
18
- return {
19
- user_id: userId,
20
- client_id: clientId,
21
- connect_at: {
22
- $gte: parsedDate,
23
- $lt: new Date(year, month, nextDay)
24
- }
25
- };
26
- }
27
- function timeSpan(period, timeframe = 1) {
28
- const { year, month, today, parsedDate } = parseDate(new Date());
29
- switch (period) {
30
- case 'month': {
31
- return { $lte: parsedDate, $gt: new Date(year, parsedDate.getMonth() - timeframe) };
32
- }
33
- case 'week': {
34
- const weekStartDate = new Date(parsedDate);
35
- weekStartDate.setDate(weekStartDate.getDate() - 6 * timeframe);
36
- const weekStart = parseDate(weekStartDate);
37
- return {
38
- $lte: parsedDate,
39
- $gt: new Date(weekStart.year, weekStart.month, weekStart.today)
40
- };
41
- }
42
- case 'hour': {
43
- // Get the last hour from the current time
44
- const previousHour = parsedDate.getHours() - timeframe;
45
- return {
46
- $gte: new Date(year, month, today, previousHour),
47
- $lt: new Date(year, month, today, parsedDate.getHours())
48
- };
49
- }
50
- default: {
51
- return {
52
- $lte: parsedDate,
53
- $gt: new Date(year, month, today - timeframe)
54
- };
55
- }
56
- }
57
- }
58
- function dayDateRange(data) {
59
- const { range } = data;
60
- if (!range) {
61
- return undefined;
62
- }
63
- const date = new Date();
64
- const { day, parsedDate } = parseDate(new Date(range.start_date));
65
- if (day - date.getDay() > 2 || day - date.getDay() < -2) {
66
- throw new Error('Invalid start date for `day` period. Max period is withing 2 days');
67
- }
68
- return {
69
- connect_at: {
70
- $lte: date,
71
- $gt: parsedDate
72
- }
73
- };
74
- }
75
16
  export class MongoReportStorage {
76
17
  client;
77
18
  db;
@@ -121,10 +62,70 @@ export class MongoReportStorage {
121
62
  }
122
63
  };
123
64
  }
65
+ updateDocFilter(userId, clientId) {
66
+ const { year, month, today, parsedDate } = parseDate(new Date());
67
+ const nextDay = today + 1;
68
+ return {
69
+ user_id: userId,
70
+ client_id: clientId,
71
+ connect_at: {
72
+ $gte: parsedDate,
73
+ $lt: new Date(year, month, nextDay)
74
+ }
75
+ };
76
+ }
77
+ dayDateRange(data) {
78
+ const { range } = data;
79
+ if (!range) {
80
+ return undefined;
81
+ }
82
+ const date = new Date();
83
+ const { day, parsedDate } = parseJsDate(new Date(range.start_date));
84
+ if (day - date.getDay() > 2 || day - date.getDay() < -2) {
85
+ throw new Error('Invalid start date for `day` period. Max period is withing 2 days');
86
+ }
87
+ return {
88
+ connect_at: {
89
+ $lte: date,
90
+ $gt: parsedDate
91
+ }
92
+ };
93
+ }
94
+ timeStampQuery(period, timeframe = 1) {
95
+ const { year, month, today, parsedDate } = parseJsDate(new Date());
96
+ switch (period) {
97
+ case 'month': {
98
+ return { $lte: parsedDate, $gt: new Date(year, parsedDate.getMonth() - timeframe) };
99
+ }
100
+ case 'week': {
101
+ const weekStartDate = new Date(parsedDate);
102
+ weekStartDate.setDate(weekStartDate.getDate() - 6 * timeframe);
103
+ const weekStart = parseJsDate(weekStartDate);
104
+ return {
105
+ $lte: parsedDate,
106
+ $gt: new Date(weekStart.year, weekStart.month, weekStart.today)
107
+ };
108
+ }
109
+ case 'hour': {
110
+ // Get the last hour from the current time
111
+ const previousHour = parsedDate.getHours() - timeframe;
112
+ return {
113
+ $gte: new Date(year, month, today, previousHour),
114
+ $lt: new Date(year, month, today, parsedDate.getHours())
115
+ };
116
+ }
117
+ default: {
118
+ return {
119
+ $lte: parsedDate,
120
+ $gt: new Date(year, month, today - timeframe)
121
+ };
122
+ }
123
+ }
124
+ }
124
125
  async deleteOldSdkData(data) {
125
126
  const { period, timeframe } = data;
126
127
  const result = await this.db.sdk_report_events.deleteMany({
127
- connect_at: timeSpan(period, timeframe),
128
+ connect_at: this.timeStampQuery(period, timeframe),
128
129
  $or: [{ disconnect_at: { $exists: true } }, { jwt_exp: { $lt: new Date() }, disconnect_at: { $exists: false } }]
129
130
  });
130
131
  if (result.deletedCount > 0) {
@@ -132,7 +133,7 @@ export class MongoReportStorage {
132
133
  }
133
134
  }
134
135
  async scrapeSdkData(data) {
135
- const timespanFilter = timeSpan(data.period, data.interval);
136
+ const timespanFilter = this.timeStampQuery(data.period, data.interval);
136
137
  const result = await this.db.sdk_report_events
137
138
  .aggregate([
138
139
  {
@@ -147,7 +148,7 @@ export class MongoReportStorage {
147
148
  return result[0];
148
149
  }
149
150
  async reportSdkConnect(data) {
150
- await this.db.sdk_report_events.findOneAndUpdate(updateDocFilter(data.user_id, data.client_id), {
151
+ await this.db.sdk_report_events.findOneAndUpdate(this.updateDocFilter(data.user_id, data.client_id), {
151
152
  $set: data,
152
153
  $unset: {
153
154
  disconnect_at: ''
@@ -157,7 +158,7 @@ export class MongoReportStorage {
157
158
  });
158
159
  }
159
160
  async reportSdkDisconnect(data) {
160
- await this.db.sdk_report_events.findOneAndUpdate(updateDocFilter(data.user_id, data.client_id), {
161
+ await this.db.sdk_report_events.findOneAndUpdate(this.updateDocFilter(data.user_id, data.client_id), {
161
162
  $set: {
162
163
  disconnect_at: data.disconnect_at
163
164
  },
@@ -173,7 +174,7 @@ export class MongoReportStorage {
173
174
  $match: {
174
175
  disconnect_at: { $exists: false },
175
176
  jwt_exp: { $gt: new Date() },
176
- ...dayDateRange(data)
177
+ ...this.dayDateRange(data)
177
178
  }
178
179
  },
179
180
  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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"}
@@ -26,3 +26,10 @@ export declare function replicaIdToSubkey(table: bson.ObjectId, id: storage.Repl
26
26
  * Helper for unit tests
27
27
  */
28
28
  export declare const connectMongoForTests: (url: string, isCI: boolean) => PowerSyncMongo;
29
+ export declare function parseJsDate(date: Date): {
30
+ year: number;
31
+ month: number;
32
+ today: number;
33
+ day: number;
34
+ parsedDate: Date;
35
+ };
@@ -108,4 +108,17 @@ export const connectMongoForTests = (url, isCI) => {
108
108
  });
109
109
  return new PowerSyncMongo(client);
110
110
  };
111
+ export function parseJsDate(date) {
112
+ const year = date.getFullYear();
113
+ const month = date.getMonth();
114
+ const today = date.getDate();
115
+ const day = date.getDay();
116
+ return {
117
+ year,
118
+ month,
119
+ today,
120
+ day,
121
+ parsedDate: date
122
+ };
123
+ }
111
124
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/storage/implementation/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/storage/implementation/util.ts"],"names":[],"mappings":"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"}
@@ -12,3 +12,4 @@ export * from './implementation/OperationBatch.js';
12
12
  export * from './implementation/PersistedBatch.js';
13
13
  export * from './implementation/util.js';
14
14
  export * from './MongoBucketStorage.js';
15
+ export * from './MongoReportStorage.js';
@@ -12,4 +12,5 @@ export * from './implementation/OperationBatch.js';
12
12
  export * from './implementation/PersistedBatch.js';
13
13
  export * from './implementation/util.js';
14
14
  export * from './MongoBucketStorage.js';
15
+ export * from './MongoReportStorage.js';
15
16
  //# sourceMappingURL=storage-index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage-index.js","sourceRoot":"","sources":["../../src/storage/storage-index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oDAAoD,CAAC;AACnE,cAAc,0CAA0C,CAAC;AACzD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sDAAsD,CAAC;AACrE,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"storage-index.js","sourceRoot":"","sources":["../../src/storage/storage-index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,qCAAqC,CAAC;AACpD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,oDAAoD,CAAC;AACnE,cAAc,0CAA0C,CAAC;AACzD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,wCAAwC,CAAC;AACvD,cAAc,sDAAsD,CAAC;AACrE,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
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-20250723130556",
5
+ "version": "0.0.0-dev-20250723141836",
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-20250723130556",
31
- "@powersync/lib-services-framework": "0.0.0-dev-20250723130556",
32
- "@powersync/service-core": "0.0.0-dev-20250723130556",
33
- "@powersync/service-types": "0.0.0-dev-20250723130556",
30
+ "@powersync/lib-service-mongodb": "0.0.0-dev-20250723141836",
31
+ "@powersync/lib-services-framework": "0.0.0-dev-20250723141836",
32
+ "@powersync/service-core": "0.0.0-dev-20250723141836",
33
+ "@powersync/service-types": "0.0.0-dev-20250723141836",
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-20250723130556"
38
+ "@powersync/service-core-tests": "0.0.0-dev-20250723141836"
39
39
  },
40
40
  "scripts": {
41
41
  "build": "tsc -b",
@@ -3,6 +3,7 @@ import { storage } from '@powersync/service-core';
3
3
  import { event_types } from '@powersync/service-types';
4
4
  import { PowerSyncMongo } from './implementation/db.js';
5
5
  import { logger } from '@powersync/lib-services-framework';
6
+ import { parseJsDate } from './implementation/util.js';
6
7
 
7
8
  function parseDate(date: Date) {
8
9
  const year = date.getFullYear();
@@ -17,68 +18,6 @@ function parseDate(date: Date) {
17
18
  parsedDate: date
18
19
  };
19
20
  }
20
- function updateDocFilter(userId: string, clientId: string) {
21
- const { year, month, today, parsedDate } = parseDate(new Date());
22
- const nextDay = today + 1;
23
- return {
24
- user_id: userId,
25
- client_id: clientId,
26
- connect_at: {
27
- $gte: parsedDate,
28
- $lt: new Date(year, month, nextDay)
29
- }
30
- };
31
- }
32
-
33
- function timeSpan(period: event_types.TimeFrames, timeframe: number = 1): mongo.Filter<mongo.Document> {
34
- const { year, month, today, parsedDate } = parseDate(new Date());
35
- switch (period) {
36
- case 'month': {
37
- return { $lte: parsedDate, $gt: new Date(year, parsedDate.getMonth() - timeframe) };
38
- }
39
- case 'week': {
40
- const weekStartDate = new Date(parsedDate);
41
- weekStartDate.setDate(weekStartDate.getDate() - 6 * timeframe);
42
- const weekStart = parseDate(weekStartDate);
43
- return {
44
- $lte: parsedDate,
45
- $gt: new Date(weekStart.year, weekStart.month, weekStart.today)
46
- };
47
- }
48
- case 'hour': {
49
- // Get the last hour from the current time
50
- const previousHour = parsedDate.getHours() - timeframe;
51
- return {
52
- $gte: new Date(year, month, today, previousHour),
53
- $lt: new Date(year, month, today, parsedDate.getHours())
54
- };
55
- }
56
- default: {
57
- return {
58
- $lte: parsedDate,
59
- $gt: new Date(year, month, today - timeframe)
60
- };
61
- }
62
- }
63
- }
64
-
65
- function dayDateRange(data: event_types.ListCurrentConnectionsRequest) {
66
- const { range } = data;
67
- if (!range) {
68
- return undefined;
69
- }
70
- const date = new Date();
71
- const { day, parsedDate } = parseDate(new Date(range.start_date));
72
- if (day - date.getDay() > 2 || day - date.getDay() < -2) {
73
- throw new Error('Invalid start date for `day` period. Max period is withing 2 days');
74
- }
75
- return {
76
- connect_at: {
77
- $lte: date,
78
- $gt: parsedDate
79
- }
80
- };
81
- }
82
21
 
83
22
  export class MongoReportStorage implements storage.ReportStorageFactory {
84
23
  private readonly client: mongo.MongoClient;
@@ -133,10 +72,73 @@ export class MongoReportStorage implements storage.ReportStorageFactory {
133
72
  };
134
73
  }
135
74
 
75
+ private updateDocFilter(userId: string, clientId: string) {
76
+ const { year, month, today, parsedDate } = parseDate(new Date());
77
+ const nextDay = today + 1;
78
+ return {
79
+ user_id: userId,
80
+ client_id: clientId,
81
+ connect_at: {
82
+ $gte: parsedDate,
83
+ $lt: new Date(year, month, nextDay)
84
+ }
85
+ };
86
+ }
87
+
88
+ private dayDateRange(data: event_types.ListCurrentConnectionsRequest) {
89
+ const { range } = data;
90
+ if (!range) {
91
+ return undefined;
92
+ }
93
+ const date = new Date();
94
+ const { day, parsedDate } = parseJsDate(new Date(range.start_date));
95
+ if (day - date.getDay() > 2 || day - date.getDay() < -2) {
96
+ throw new Error('Invalid start date for `day` period. Max period is withing 2 days');
97
+ }
98
+ return {
99
+ connect_at: {
100
+ $lte: date,
101
+ $gt: parsedDate
102
+ }
103
+ };
104
+ }
105
+
106
+ private timeStampQuery(period: event_types.TimeFrames, timeframe: number = 1): mongo.Filter<mongo.Document> {
107
+ const { year, month, today, parsedDate } = parseJsDate(new Date());
108
+ switch (period) {
109
+ case 'month': {
110
+ return { $lte: parsedDate, $gt: new Date(year, parsedDate.getMonth() - timeframe) };
111
+ }
112
+ case 'week': {
113
+ const weekStartDate = new Date(parsedDate);
114
+ weekStartDate.setDate(weekStartDate.getDate() - 6 * timeframe);
115
+ const weekStart = parseJsDate(weekStartDate);
116
+ return {
117
+ $lte: parsedDate,
118
+ $gt: new Date(weekStart.year, weekStart.month, weekStart.today)
119
+ };
120
+ }
121
+ case 'hour': {
122
+ // Get the last hour from the current time
123
+ const previousHour = parsedDate.getHours() - timeframe;
124
+ return {
125
+ $gte: new Date(year, month, today, previousHour),
126
+ $lt: new Date(year, month, today, parsedDate.getHours())
127
+ };
128
+ }
129
+ default: {
130
+ return {
131
+ $lte: parsedDate,
132
+ $gt: new Date(year, month, today - timeframe)
133
+ };
134
+ }
135
+ }
136
+ }
137
+
136
138
  async deleteOldSdkData(data: event_types.DeleteOldSdkData): Promise<void> {
137
139
  const { period, timeframe } = data;
138
140
  const result = await this.db.sdk_report_events.deleteMany({
139
- connect_at: timeSpan(period, timeframe),
141
+ connect_at: this.timeStampQuery(period, timeframe),
140
142
  $or: [{ disconnect_at: { $exists: true } }, { jwt_exp: { $lt: new Date() }, disconnect_at: { $exists: false } }]
141
143
  });
142
144
  if (result.deletedCount > 0) {
@@ -145,7 +147,7 @@ export class MongoReportStorage implements storage.ReportStorageFactory {
145
147
  }
146
148
 
147
149
  async scrapeSdkData(data: event_types.ScrapeSdkDataRequest): Promise<event_types.ListCurrentConnections> {
148
- const timespanFilter = timeSpan(data.period, data.interval);
150
+ const timespanFilter = this.timeStampQuery(data.period, data.interval);
149
151
  const result = await this.db.sdk_report_events
150
152
  .aggregate([
151
153
  {
@@ -162,7 +164,7 @@ export class MongoReportStorage implements storage.ReportStorageFactory {
162
164
 
163
165
  async reportSdkConnect(data: event_types.SdkConnectBucketData): Promise<void> {
164
166
  await this.db.sdk_report_events.findOneAndUpdate(
165
- updateDocFilter(data.user_id, data.client_id!),
167
+ this.updateDocFilter(data.user_id, data.client_id!),
166
168
  {
167
169
  $set: data,
168
170
  $unset: {
@@ -175,7 +177,7 @@ export class MongoReportStorage implements storage.ReportStorageFactory {
175
177
  );
176
178
  }
177
179
  async reportSdkDisconnect(data: event_types.SdkDisconnectEventData): Promise<void> {
178
- await this.db.sdk_report_events.findOneAndUpdate(updateDocFilter(data.user_id, data.client_id!), {
180
+ await this.db.sdk_report_events.findOneAndUpdate(this.updateDocFilter(data.user_id, data.client_id!), {
179
181
  $set: {
180
182
  disconnect_at: data.disconnect_at
181
183
  },
@@ -193,7 +195,7 @@ export class MongoReportStorage implements storage.ReportStorageFactory {
193
195
  $match: {
194
196
  disconnect_at: { $exists: false },
195
197
  jwt_exp: { $gt: new Date() },
196
- ...dayDateRange(data)
198
+ ...this.dayDateRange(data)
197
199
  }
198
200
  },
199
201
  this.sdkFacetPipeline(),
@@ -1,7 +1,6 @@
1
1
  import * as bson from 'bson';
2
2
  import * as crypto from 'crypto';
3
3
  import * as uuid from 'uuid';
4
-
5
4
  import { mongo } from '@powersync/lib-service-mongodb';
6
5
  import { storage, utils } from '@powersync/service-core';
7
6
 
@@ -117,3 +116,17 @@ export const connectMongoForTests = (url: string, isCI: boolean) => {
117
116
  });
118
117
  return new PowerSyncMongo(client);
119
118
  };
119
+
120
+ export function parseJsDate(date: Date) {
121
+ const year = date.getFullYear();
122
+ const month = date.getMonth();
123
+ const today = date.getDate();
124
+ const day = date.getDay();
125
+ return {
126
+ year,
127
+ month,
128
+ today,
129
+ day,
130
+ parsedDate: date
131
+ };
132
+ }
@@ -12,3 +12,4 @@ export * from './implementation/OperationBatch.js';
12
12
  export * from './implementation/PersistedBatch.js';
13
13
  export * from './implementation/util.js';
14
14
  export * from './MongoBucketStorage.js';
15
+ export * from './MongoReportStorage.js';