@powersync/service-module-postgres-storage 0.0.0-dev-20250729131216 → 0.0.0-dev-20250729140021
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.
|
@@ -31,16 +31,17 @@ export class PostgresReportStorageFactory {
|
|
|
31
31
|
}
|
|
32
32
|
timeFrameQuery(timeframe, interval = 1) {
|
|
33
33
|
const { year, month, today, parsedDate } = this.parseJsDate(new Date());
|
|
34
|
+
const parsedIsoString = parsedDate.toISOString();
|
|
34
35
|
switch (timeframe) {
|
|
35
36
|
case 'month': {
|
|
36
|
-
return { lt:
|
|
37
|
+
return { lt: parsedIsoString, gt: new Date(year, parsedDate.getMonth() - interval).toISOString() };
|
|
37
38
|
}
|
|
38
39
|
case 'week': {
|
|
39
40
|
const weekStartDate = new Date(parsedDate);
|
|
40
41
|
weekStartDate.setDate(weekStartDate.getDate() - 6 * interval);
|
|
41
42
|
const weekStart = this.parseJsDate(weekStartDate);
|
|
42
43
|
return {
|
|
43
|
-
lt:
|
|
44
|
+
lt: parsedIsoString,
|
|
44
45
|
gt: new Date(weekStart.year, weekStart.month, weekStart.today).toISOString()
|
|
45
46
|
};
|
|
46
47
|
}
|
|
@@ -54,7 +55,7 @@ export class PostgresReportStorageFactory {
|
|
|
54
55
|
}
|
|
55
56
|
default: {
|
|
56
57
|
return {
|
|
57
|
-
lt:
|
|
58
|
+
lt: parsedIsoString,
|
|
58
59
|
gt: new Date(year, month, today - interval).toISOString()
|
|
59
60
|
};
|
|
60
61
|
}
|
|
@@ -82,7 +83,7 @@ export class PostgresReportStorageFactory {
|
|
|
82
83
|
}
|
|
83
84
|
default: {
|
|
84
85
|
return {
|
|
85
|
-
|
|
86
|
+
lt: new Date(year, month, today - interval).toISOString()
|
|
86
87
|
};
|
|
87
88
|
}
|
|
88
89
|
}
|
|
@@ -160,42 +161,62 @@ export class PostgresReportStorageFactory {
|
|
|
160
161
|
}
|
|
161
162
|
async reportSdkConnect(data) {
|
|
162
163
|
const { sdk, connect_at, user_id, user_agent, jwt_exp, client_id } = data;
|
|
164
|
+
const connectIsoString = connect_at.toISOString();
|
|
165
|
+
const jwtExpIsoString = jwt_exp.toISOString();
|
|
163
166
|
const { gte, lt } = this.updateTableFilter();
|
|
164
|
-
const query = `
|
|
165
|
-
INSERT INTO sdk_report_events (user_id, client_id, connect_at, sdk, user_agent, jwt_exp, id)
|
|
166
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
|
167
|
-
ON CONFLICT (user_id, client_id, connect_at)
|
|
168
|
-
DO UPDATE SET
|
|
169
|
-
connect_at = CAST($3 AS TIMESTAMP WITH TIME ZONE),
|
|
170
|
-
sdk = $4,
|
|
171
|
-
user_agent = $5,
|
|
172
|
-
jwt_exp = CAST($6 AS TIMESTAMP WITH TIME ZONE),
|
|
173
|
-
disconnect_at = NULL
|
|
174
|
-
WHERE sdk_report_events.connect_at >= CAST($8 AS TIMESTAMP WITH TIME ZONE)
|
|
175
|
-
AND sdk_report_events.connect_at < CAST($9 AS TIMESTAMP WITH TIME ZONE);`;
|
|
176
167
|
try {
|
|
177
|
-
const
|
|
168
|
+
const query = `
|
|
169
|
+
BEGIN;
|
|
170
|
+
UPDATE sdk_report_events
|
|
171
|
+
SET
|
|
172
|
+
connect_at = $3::timestamptz,
|
|
173
|
+
sdk = $4,
|
|
174
|
+
user_agent = $5,
|
|
175
|
+
jwt_exp = $6::timestamptz,
|
|
176
|
+
disconnect_at = NULL
|
|
177
|
+
WHERE user_id = $1
|
|
178
|
+
AND client_id = $2
|
|
179
|
+
AND connect_at = $3::timestamptz
|
|
180
|
+
AND connect_at >= $8::timestamptz
|
|
181
|
+
AND connect_at < $9::timestamptz;
|
|
182
|
+
|
|
183
|
+
INSERT INTO sdk_report_events (
|
|
184
|
+
user_id, client_id, connect_at, sdk, user_agent, jwt_exp, id
|
|
185
|
+
)
|
|
186
|
+
SELECT $1, $2, $3::timestamptz, $4, $5, $6::timestamptz, $7
|
|
187
|
+
WHERE NOT EXISTS (
|
|
188
|
+
SELECT 1 FROM sdk_report_events
|
|
189
|
+
WHERE user_id = $1
|
|
190
|
+
AND client_id = $2
|
|
191
|
+
AND connect_at = $3::timestamptz
|
|
192
|
+
AND connect_at >= $8::timestamptz
|
|
193
|
+
AND connect_at < $9::timestamptz
|
|
194
|
+
);
|
|
195
|
+
|
|
196
|
+
COMMIT;`;
|
|
197
|
+
await this.db.query({
|
|
178
198
|
statement: query,
|
|
179
199
|
params: [
|
|
180
200
|
{ type: 'varchar', value: user_id },
|
|
181
201
|
{ type: 'varchar', value: client_id },
|
|
182
|
-
{ type: 1184, value:
|
|
202
|
+
{ type: 1184, value: connectIsoString },
|
|
183
203
|
{ type: 'varchar', value: sdk },
|
|
184
204
|
{ type: 'varchar', value: user_agent },
|
|
185
|
-
{ type: 1184, value:
|
|
205
|
+
{ type: 1184, value: jwtExpIsoString },
|
|
186
206
|
{ type: 'varchar', value: v4() },
|
|
187
207
|
{ type: 1184, value: gte },
|
|
188
208
|
{ type: 1184, value: lt }
|
|
189
209
|
]
|
|
190
210
|
});
|
|
191
|
-
console.log(result.rows);
|
|
192
211
|
}
|
|
193
212
|
catch (error) {
|
|
194
213
|
console.log(error);
|
|
214
|
+
await this.db.query('ROLLBACK');
|
|
195
215
|
}
|
|
196
216
|
}
|
|
197
217
|
async reportSdkDisconnect(data) {
|
|
198
218
|
const { user_id, client_id, disconnect_at } = data;
|
|
219
|
+
const disconnectIsoString = disconnect_at.toISOString();
|
|
199
220
|
const { gte, lt } = this.updateTableFilter();
|
|
200
221
|
const query = `
|
|
201
222
|
UPDATE sdk_report_events
|
|
@@ -210,7 +231,7 @@ export class PostgresReportStorageFactory {
|
|
|
210
231
|
const result = await this.db.query({
|
|
211
232
|
statement: query,
|
|
212
233
|
params: [
|
|
213
|
-
{ type: 1184, value:
|
|
234
|
+
{ type: 1184, value: disconnectIsoString },
|
|
214
235
|
{ type: 'varchar', value: user_id },
|
|
215
236
|
{ type: 'varchar', value: client_id },
|
|
216
237
|
{ type: 1184, value: gte },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresReportStorageFactory.js","sourceRoot":"","sources":["../../src/storage/PostgresReportStorageFactory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAGhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAczE,MAAM,OAAO,4BAA4B;IAEjB;IADb,EAAE,CAA8B;IACzC,YAAsB,OAAqC;QAArC,YAAO,GAAP,OAAO,CAA8B;QACzD,IAAI,CAAC,EAAE,GAAG,IAAI,YAAY,CAAC,cAAc,CAAC;YACxC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,mBAAmB;YAC3B,eAAe,EAAE,yBAAyB,EAAE;SAC7C,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC;YACvB,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC;SAC5E,CAAC,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,IAAU;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI;YACJ,KAAK;YACL,KAAK;YACL,GAAG;YACH,UAAU,EAAE,IAAI;SACjB,CAAC;IACJ,CAAC;IACO,cAAc,CAAC,SAAiC,EAAE,WAAmB,CAAC;QAC5E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACxE,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,OAAO,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"PostgresReportStorageFactory.js","sourceRoot":"","sources":["../../src/storage/PostgresReportStorageFactory.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@powersync/service-module-postgres-storage",
|
|
3
3
|
"repository": "https://github.com/powersync-ja/powersync-service",
|
|
4
4
|
"types": "dist/@types/index.d.ts",
|
|
5
|
-
"version": "0.0.0-dev-
|
|
5
|
+
"version": "0.0.0-dev-20250729140021",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"publishConfig": {
|
|
@@ -29,12 +29,12 @@
|
|
|
29
29
|
"p-defer": "^4.0.1",
|
|
30
30
|
"ts-codec": "^1.3.0",
|
|
31
31
|
"uuid": "^11.1.0",
|
|
32
|
-
"@powersync/lib-service-postgres": "0.0.0-dev-
|
|
33
|
-
"@powersync/lib-services-framework": "0.0.0-dev-
|
|
34
|
-
"@powersync/service-core": "0.0.0-dev-
|
|
35
|
-
"@powersync/service-types": "0.0.0-dev-
|
|
36
|
-
"@powersync/service-core-tests": "0.0.0-dev-
|
|
37
|
-
"@powersync/service-jpgwire": "0.0.0-dev-
|
|
32
|
+
"@powersync/lib-service-postgres": "0.0.0-dev-20250729140021",
|
|
33
|
+
"@powersync/lib-services-framework": "0.0.0-dev-20250729140021",
|
|
34
|
+
"@powersync/service-core": "0.0.0-dev-20250729140021",
|
|
35
|
+
"@powersync/service-types": "0.0.0-dev-20250729140021",
|
|
36
|
+
"@powersync/service-core-tests": "0.0.0-dev-20250729140021",
|
|
37
|
+
"@powersync/service-jpgwire": "0.0.0-dev-20250729140021",
|
|
38
38
|
"@powersync/service-sync-rules": "0.27.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
@@ -49,16 +49,17 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
|
|
|
49
49
|
}
|
|
50
50
|
private timeFrameQuery(timeframe: event_types.TimeFrames, interval: number = 1) {
|
|
51
51
|
const { year, month, today, parsedDate } = this.parseJsDate(new Date());
|
|
52
|
+
const parsedIsoString = parsedDate.toISOString();
|
|
52
53
|
switch (timeframe) {
|
|
53
54
|
case 'month': {
|
|
54
|
-
return { lt:
|
|
55
|
+
return { lt: parsedIsoString, gt: new Date(year, parsedDate.getMonth() - interval).toISOString() };
|
|
55
56
|
}
|
|
56
57
|
case 'week': {
|
|
57
58
|
const weekStartDate = new Date(parsedDate);
|
|
58
59
|
weekStartDate.setDate(weekStartDate.getDate() - 6 * interval);
|
|
59
60
|
const weekStart = this.parseJsDate(weekStartDate);
|
|
60
61
|
return {
|
|
61
|
-
lt:
|
|
62
|
+
lt: parsedIsoString,
|
|
62
63
|
gt: new Date(weekStart.year, weekStart.month, weekStart.today).toISOString()
|
|
63
64
|
};
|
|
64
65
|
}
|
|
@@ -72,7 +73,7 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
|
|
|
72
73
|
}
|
|
73
74
|
default: {
|
|
74
75
|
return {
|
|
75
|
-
lt:
|
|
76
|
+
lt: parsedIsoString,
|
|
76
77
|
gt: new Date(year, month, today - interval).toISOString()
|
|
77
78
|
};
|
|
78
79
|
}
|
|
@@ -101,7 +102,7 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
|
|
|
101
102
|
}
|
|
102
103
|
default: {
|
|
103
104
|
return {
|
|
104
|
-
|
|
105
|
+
lt: new Date(year, month, today - interval).toISOString()
|
|
105
106
|
};
|
|
106
107
|
}
|
|
107
108
|
}
|
|
@@ -182,41 +183,62 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
|
|
|
182
183
|
|
|
183
184
|
async reportSdkConnect(data: SdkConnectBucketData): Promise<void> {
|
|
184
185
|
const { sdk, connect_at, user_id, user_agent, jwt_exp, client_id } = data;
|
|
186
|
+
const connectIsoString = connect_at.toISOString();
|
|
187
|
+
const jwtExpIsoString = jwt_exp!.toISOString();
|
|
185
188
|
const { gte, lt } = this.updateTableFilter();
|
|
186
|
-
const query = `
|
|
187
|
-
INSERT INTO sdk_report_events (user_id, client_id, connect_at, sdk, user_agent, jwt_exp, id)
|
|
188
|
-
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
|
189
|
-
ON CONFLICT (user_id, client_id, connect_at)
|
|
190
|
-
DO UPDATE SET
|
|
191
|
-
connect_at = CAST($3 AS TIMESTAMP WITH TIME ZONE),
|
|
192
|
-
sdk = $4,
|
|
193
|
-
user_agent = $5,
|
|
194
|
-
jwt_exp = CAST($6 AS TIMESTAMP WITH TIME ZONE),
|
|
195
|
-
disconnect_at = NULL
|
|
196
|
-
WHERE sdk_report_events.connect_at >= CAST($8 AS TIMESTAMP WITH TIME ZONE)
|
|
197
|
-
AND sdk_report_events.connect_at < CAST($9 AS TIMESTAMP WITH TIME ZONE);`;
|
|
198
189
|
try {
|
|
199
|
-
const
|
|
190
|
+
const query = `
|
|
191
|
+
BEGIN;
|
|
192
|
+
UPDATE sdk_report_events
|
|
193
|
+
SET
|
|
194
|
+
connect_at = $3::timestamptz,
|
|
195
|
+
sdk = $4,
|
|
196
|
+
user_agent = $5,
|
|
197
|
+
jwt_exp = $6::timestamptz,
|
|
198
|
+
disconnect_at = NULL
|
|
199
|
+
WHERE user_id = $1
|
|
200
|
+
AND client_id = $2
|
|
201
|
+
AND connect_at = $3::timestamptz
|
|
202
|
+
AND connect_at >= $8::timestamptz
|
|
203
|
+
AND connect_at < $9::timestamptz;
|
|
204
|
+
|
|
205
|
+
INSERT INTO sdk_report_events (
|
|
206
|
+
user_id, client_id, connect_at, sdk, user_agent, jwt_exp, id
|
|
207
|
+
)
|
|
208
|
+
SELECT $1, $2, $3::timestamptz, $4, $5, $6::timestamptz, $7
|
|
209
|
+
WHERE NOT EXISTS (
|
|
210
|
+
SELECT 1 FROM sdk_report_events
|
|
211
|
+
WHERE user_id = $1
|
|
212
|
+
AND client_id = $2
|
|
213
|
+
AND connect_at = $3::timestamptz
|
|
214
|
+
AND connect_at >= $8::timestamptz
|
|
215
|
+
AND connect_at < $9::timestamptz
|
|
216
|
+
);
|
|
217
|
+
|
|
218
|
+
COMMIT;`;
|
|
219
|
+
|
|
220
|
+
await this.db.query({
|
|
200
221
|
statement: query,
|
|
201
222
|
params: [
|
|
202
223
|
{ type: 'varchar', value: user_id },
|
|
203
224
|
{ type: 'varchar', value: client_id },
|
|
204
|
-
{ type: 1184, value:
|
|
225
|
+
{ type: 1184, value: connectIsoString },
|
|
205
226
|
{ type: 'varchar', value: sdk },
|
|
206
227
|
{ type: 'varchar', value: user_agent },
|
|
207
|
-
{ type: 1184, value:
|
|
228
|
+
{ type: 1184, value: jwtExpIsoString },
|
|
208
229
|
{ type: 'varchar', value: v4() },
|
|
209
230
|
{ type: 1184, value: gte },
|
|
210
231
|
{ type: 1184, value: lt }
|
|
211
232
|
]
|
|
212
233
|
});
|
|
213
|
-
console.log(result.rows);
|
|
214
234
|
} catch (error) {
|
|
215
235
|
console.log(error);
|
|
236
|
+
await this.db.query('ROLLBACK');
|
|
216
237
|
}
|
|
217
238
|
}
|
|
218
239
|
async reportSdkDisconnect(data: SdkDisconnectEventData): Promise<void> {
|
|
219
240
|
const { user_id, client_id, disconnect_at } = data;
|
|
241
|
+
const disconnectIsoString = disconnect_at.toISOString();
|
|
220
242
|
const { gte, lt } = this.updateTableFilter();
|
|
221
243
|
const query = `
|
|
222
244
|
UPDATE sdk_report_events
|
|
@@ -232,7 +254,7 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
|
|
|
232
254
|
const result = await this.db.query({
|
|
233
255
|
statement: query,
|
|
234
256
|
params: [
|
|
235
|
-
{ type: 1184, value:
|
|
257
|
+
{ type: 1184, value: disconnectIsoString },
|
|
236
258
|
{ type: 'varchar', value: user_id },
|
|
237
259
|
{ type: 'varchar', value: client_id },
|
|
238
260
|
{ type: 1184, value: gte },
|