@powersync/service-module-postgres-storage 0.0.0-dev-20250730153301 → 0.0.0-dev-20250804094552
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 +9 -8
- package/dist/.tsbuildinfo +1 -1
- package/dist/migrations/scripts/1684951997326-init.js +16 -0
- package/dist/migrations/scripts/1684951997326-init.js.map +1 -1
- package/dist/storage/PostgresReportStorageFactory.js +8 -9
- package/dist/storage/PostgresReportStorageFactory.js.map +1 -1
- package/dist/utils/db.js +1 -0
- package/dist/utils/db.js.map +1 -1
- package/package.json +8 -8
- package/src/migrations/scripts/1684951997326-init.ts +20 -0
- package/src/storage/PostgresReportStorageFactory.ts +8 -10
- package/src/utils/db.ts +1 -0
- package/test/src/__snapshots__/sdk-report-storage.test.ts.snap +188 -0
- package/test/src/sdk-report-storage.test.ts +333 -5
- package/test/src/util.ts +1 -3
- package/dist/@types/migrations/scripts/1753871047719-sdk_report.d.ts +0 -3
- package/dist/migrations/scripts/1753871047719-sdk_report.js +0 -109
- package/dist/migrations/scripts/1753871047719-sdk_report.js.map +0 -1
- package/src/migrations/scripts/1753871047719-sdk_report.ts +0 -45
|
@@ -164,6 +164,22 @@ export const up = async (context) => {
|
|
|
164
164
|
CONSTRAINT unique_user_sync PRIMARY KEY (user_id, sync_rules_id)
|
|
165
165
|
);
|
|
166
166
|
`.execute();
|
|
167
|
+
await db.sql `
|
|
168
|
+
CREATE TABLE sdk_report_events (
|
|
169
|
+
id TEXT PRIMARY KEY,
|
|
170
|
+
user_agent TEXT NOT NULL,
|
|
171
|
+
client_id TEXT NOT NULL,
|
|
172
|
+
user_id TEXT NOT NULL,
|
|
173
|
+
sdk TEXT NOT NULL,
|
|
174
|
+
jwt_exp TIMESTAMP WITH TIME ZONE,
|
|
175
|
+
connect_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
|
176
|
+
disconnect_at TIMESTAMP WITH TIME ZONE
|
|
177
|
+
)
|
|
178
|
+
`.execute();
|
|
179
|
+
await db.sql ` CREATE INDEX sdk_list_index ON sdk_report_events (connect_at, jwt_exp, disconnect_at) `.execute();
|
|
180
|
+
await db.sql `CREATE INDEX sdk_user_id_index ON sdk_report_events (user_id)`.execute();
|
|
181
|
+
await db.sql `CREATE INDEX sdk_client_id_index ON sdk_report_events (client_id)`.execute();
|
|
182
|
+
await db.sql `CREATE INDEX sdk_index ON sdk_report_events (sdk)`.execute();
|
|
167
183
|
});
|
|
168
184
|
}
|
|
169
185
|
catch (e_1) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"1684951997326-init.js","sourceRoot":"","sources":["../../../src/migrations/scripts/1684951997326-init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,EAAE,GAA0C,KAAK,EAAE,OAAO,EAAE,EAAE;;;QACzE,MAAM,EACJ,eAAe,EAAE,EAAE,aAAa,EAAE,EACnC,GAAG,OAAO,CAAC;QACZ,MAAY,MAAM,kCAAG,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,OAAA,CAAC;QAE5D;;;WAGG;QACH,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACpC,MAAM,EAAE,CAAC,GAAG,CAAA;;;;KAIX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;KAIX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;KAeX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA,8CAA8C,CAAC,OAAO,EAAE,CAAC;YAErE,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;KAeX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;KAWX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;KAEX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;KAEX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;KAUX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;;;KAaX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA,0EAA0E,CAAC,OAAO,EAAE,CAAC;YAEjG,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;KAMX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;KAOX,CAAC,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"1684951997326-init.js","sourceRoot":"","sources":["../../../src/migrations/scripts/1684951997326-init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,MAAM,EAAE,GAA0C,KAAK,EAAE,OAAO,EAAE,EAAE;;;QACzE,MAAM,EACJ,eAAe,EAAE,EAAE,aAAa,EAAE,EACnC,GAAG,OAAO,CAAC;QACZ,MAAY,MAAM,kCAAG,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,OAAA,CAAC;QAE5D;;;WAGG;QACH,MAAM,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YACpC,MAAM,EAAE,CAAC,GAAG,CAAA;;;;KAIX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;KAIX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;KAeX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA,8CAA8C,CAAC,OAAO,EAAE,CAAC;YAErE,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;KAeX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;KAWX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;KAEX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;KAEX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;KAUX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;;;KAaX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA,0EAA0E,CAAC,OAAO,EAAE,CAAC;YAEjG,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;KAMX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;KAOX,CAAC,OAAO,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;KAWX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA,yFAAyF,CAAC,OAAO,EAAE,CAAC;YAEhH,MAAM,EAAE,CAAC,GAAG,CAAA,+DAA+D,CAAC,OAAO,EAAE,CAAC;YAEtF,MAAM,EAAE,CAAC,GAAG,CAAA,mEAAmE,CAAC,OAAO,EAAE,CAAC;YAE1F,MAAM,EAAE,CAAC,GAAG,CAAA,mDAAmD,CAAC,OAAO,EAAE,CAAC;QAC5E,CAAC,CAAC,CAAC;;;;;;;;;;;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAA0C,KAAK,EAAE,OAAO,EAAE,EAAE;;;QAC3E,MAAM,EACJ,eAAe,EAAE,EAAE,aAAa,EAAE,EACnC,GAAG,OAAO,CAAC;QACZ,MAAY,MAAM,kCAAG,eAAe,CAAC,aAAa,CAAC,OAAO,CAAC,OAAA,CAAC;QAC5D,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;;;;;;;;;;;CAC1B,CAAC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { v4 } from 'uuid';
|
|
2
2
|
import * as lib_postgres from '@powersync/lib-service-postgres';
|
|
3
|
-
import { STORAGE_SCHEMA_NAME } from '../utils/db.js';
|
|
4
|
-
import { getStorageApplicationName } from '../utils/application-name.js';
|
|
5
3
|
import { SdkReporting } from '../types/models/SdkReporting.js';
|
|
6
4
|
import { toInteger } from 'ix/util/tointeger.js';
|
|
7
5
|
import { logger } from '@powersync/lib-services-framework';
|
|
6
|
+
import { getStorageApplicationName } from '../utils/application-name.js';
|
|
7
|
+
import { STORAGE_SCHEMA_NAME } from '../utils/db.js';
|
|
8
8
|
export class PostgresReportStorageFactory {
|
|
9
9
|
options;
|
|
10
10
|
db;
|
|
@@ -37,7 +37,7 @@ export class PostgresReportStorageFactory {
|
|
|
37
37
|
const parsedIsoString = parsedDate.toISOString();
|
|
38
38
|
switch (timeframe) {
|
|
39
39
|
case 'month': {
|
|
40
|
-
return { lt: parsedIsoString, gt: new Date(year, parsedDate.getMonth() - interval).toISOString() };
|
|
40
|
+
return { lt: parsedIsoString, gt: new Date(year, parsedDate.getMonth() - interval - 1).toISOString() };
|
|
41
41
|
}
|
|
42
42
|
case 'week': {
|
|
43
43
|
const weekStartDate = new Date(parsedDate);
|
|
@@ -64,8 +64,8 @@ export class PostgresReportStorageFactory {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
|
-
timeFrameDeleteQuery(timeframe, interval = 1) {
|
|
68
|
-
const { year, month, today, parsedDate } = this.parseJsDate(new Date());
|
|
67
|
+
timeFrameDeleteQuery(timeframe, interval = 1, test_date) {
|
|
68
|
+
const { year, month, today, parsedDate } = test_date ? this.parseJsDate(test_date) : this.parseJsDate(new Date());
|
|
69
69
|
switch (timeframe) {
|
|
70
70
|
case 'month': {
|
|
71
71
|
return { lt: new Date(year, parsedDate.getMonth() - interval).toISOString() };
|
|
@@ -254,9 +254,9 @@ export class PostgresReportStorageFactory {
|
|
|
254
254
|
}
|
|
255
255
|
}
|
|
256
256
|
async reportSdkDisconnect(data) {
|
|
257
|
-
const { user_id, client_id, disconnect_at } = data;
|
|
257
|
+
const { user_id, client_id, disconnect_at, connect_at } = data;
|
|
258
258
|
const disconnectIsoString = disconnect_at.toISOString();
|
|
259
|
-
const
|
|
259
|
+
const connectIsoString = connect_at.toISOString();
|
|
260
260
|
await this.db.sql `
|
|
261
261
|
UPDATE sdk_report_events
|
|
262
262
|
SET
|
|
@@ -265,8 +265,7 @@ export class PostgresReportStorageFactory {
|
|
|
265
265
|
WHERE
|
|
266
266
|
user_id = ${{ type: 'varchar', value: user_id }}
|
|
267
267
|
AND client_id = ${{ type: 'varchar', value: client_id }}
|
|
268
|
-
AND connect_at
|
|
269
|
-
AND connect_at < ${{ type: 1184, value: lt }};
|
|
268
|
+
AND connect_at = ${{ type: 1184, value: connectIsoString }}
|
|
270
269
|
`.execute();
|
|
271
270
|
}
|
|
272
271
|
async listCurrentConnections(data) {
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"PostgresReportStorageFactory.js","sourceRoot":"","sources":["../../src/storage/PostgresReportStorageFactory.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/db.js
CHANGED
|
@@ -19,6 +19,7 @@ export const dropTables = async (client) => {
|
|
|
19
19
|
await db.sql `DROP TABLE IF EXISTS custom_write_checkpoints`.execute();
|
|
20
20
|
await db.sql `DROP SEQUENCE IF EXISTS op_id_sequence`.execute();
|
|
21
21
|
await db.sql `DROP SEQUENCE IF EXISTS sync_rules_id_sequence`.execute();
|
|
22
|
+
await db.sql `DROP TABLE IF EXISTS sdk_report_events`.execute();
|
|
22
23
|
});
|
|
23
24
|
};
|
|
24
25
|
//# sourceMappingURL=db.js.map
|
package/dist/utils/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/utils/db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAEhE,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,MAAmC,EAAE,EAAE;IACtE,sDAAsD;IACtD,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACvC,MAAM,EAAE,CAAC,GAAG,CAAA,kCAAkC,CAAC,OAAO,EAAE,CAAC;QACzD,MAAM,EAAE,CAAC,GAAG,CAAA,wCAAwC,CAAC,OAAO,EAAE,CAAC;QAC/D,MAAM,EAAE,CAAC,GAAG,CAAA,iCAAiC,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,EAAE,CAAC,GAAG,CAAA,+BAA+B,CAAC,OAAO,EAAE,CAAC;QACtD,MAAM,EAAE,CAAC,GAAG,CAAA,kCAAkC,CAAC,OAAO,EAAE,CAAC;QACzD,MAAM,EAAE,CAAC,GAAG,CAAA,mCAAmC,CAAC,OAAO,EAAE,CAAC;QAC1D,MAAM,EAAE,CAAC,GAAG,CAAA,oCAAoC,CAAC,OAAO,EAAE,CAAC;QAC3D,MAAM,EAAE,CAAC,GAAG,CAAA,wCAAwC,CAAC,OAAO,EAAE,CAAC;QAC/D,MAAM,EAAE,CAAC,GAAG,CAAA,+CAA+C,CAAC,OAAO,EAAE,CAAC;QACtE,MAAM,EAAE,CAAC,GAAG,CAAA,wCAAwC,CAAC,OAAO,EAAE,CAAC;QAC/D,MAAM,EAAE,CAAC,GAAG,CAAA,gDAAgD,CAAC,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/utils/db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAEhE,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAE/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC;AAEpC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,MAAmC,EAAE,EAAE;IACtE,sDAAsD;IACtD,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACvC,MAAM,EAAE,CAAC,GAAG,CAAA,kCAAkC,CAAC,OAAO,EAAE,CAAC;QACzD,MAAM,EAAE,CAAC,GAAG,CAAA,wCAAwC,CAAC,OAAO,EAAE,CAAC;QAC/D,MAAM,EAAE,CAAC,GAAG,CAAA,iCAAiC,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,EAAE,CAAC,GAAG,CAAA,+BAA+B,CAAC,OAAO,EAAE,CAAC;QACtD,MAAM,EAAE,CAAC,GAAG,CAAA,kCAAkC,CAAC,OAAO,EAAE,CAAC;QACzD,MAAM,EAAE,CAAC,GAAG,CAAA,mCAAmC,CAAC,OAAO,EAAE,CAAC;QAC1D,MAAM,EAAE,CAAC,GAAG,CAAA,oCAAoC,CAAC,OAAO,EAAE,CAAC;QAC3D,MAAM,EAAE,CAAC,GAAG,CAAA,wCAAwC,CAAC,OAAO,EAAE,CAAC;QAC/D,MAAM,EAAE,CAAC,GAAG,CAAA,+CAA+C,CAAC,OAAO,EAAE,CAAC;QACtE,MAAM,EAAE,CAAC,GAAG,CAAA,wCAAwC,CAAC,OAAO,EAAE,CAAC;QAC/D,MAAM,EAAE,CAAC,GAAG,CAAA,gDAAgD,CAAC,OAAO,EAAE,CAAC;QACvE,MAAM,EAAE,CAAC,GAAG,CAAA,wCAAwC,CAAC,OAAO,EAAE,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
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-20250804094552",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"publishConfig": {
|
|
@@ -29,13 +29,13 @@
|
|
|
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-
|
|
38
|
-
"@powersync/service-sync-rules": "0.0.0-dev-
|
|
32
|
+
"@powersync/lib-service-postgres": "0.0.0-dev-20250804094552",
|
|
33
|
+
"@powersync/lib-services-framework": "0.0.0-dev-20250804094552",
|
|
34
|
+
"@powersync/service-core": "0.0.0-dev-20250804094552",
|
|
35
|
+
"@powersync/service-types": "0.0.0-dev-20250804094552",
|
|
36
|
+
"@powersync/service-core-tests": "0.0.0-dev-20250804094552",
|
|
37
|
+
"@powersync/service-jpgwire": "0.0.0-dev-20250804094552",
|
|
38
|
+
"@powersync/service-sync-rules": "0.0.0-dev-20250804094552"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"typescript": "^5.7.3"
|
|
@@ -128,6 +128,26 @@ export const up: migrations.PowerSyncMigrationFunction = async (context) => {
|
|
|
128
128
|
CONSTRAINT unique_user_sync PRIMARY KEY (user_id, sync_rules_id)
|
|
129
129
|
);
|
|
130
130
|
`.execute();
|
|
131
|
+
await db.sql`
|
|
132
|
+
CREATE TABLE sdk_report_events (
|
|
133
|
+
id TEXT PRIMARY KEY,
|
|
134
|
+
user_agent TEXT NOT NULL,
|
|
135
|
+
client_id TEXT NOT NULL,
|
|
136
|
+
user_id TEXT NOT NULL,
|
|
137
|
+
sdk TEXT NOT NULL,
|
|
138
|
+
jwt_exp TIMESTAMP WITH TIME ZONE,
|
|
139
|
+
connect_at TIMESTAMP WITH TIME ZONE NOT NULL,
|
|
140
|
+
disconnect_at TIMESTAMP WITH TIME ZONE
|
|
141
|
+
)
|
|
142
|
+
`.execute();
|
|
143
|
+
|
|
144
|
+
await db.sql` CREATE INDEX sdk_list_index ON sdk_report_events (connect_at, jwt_exp, disconnect_at) `.execute();
|
|
145
|
+
|
|
146
|
+
await db.sql`CREATE INDEX sdk_user_id_index ON sdk_report_events (user_id)`.execute();
|
|
147
|
+
|
|
148
|
+
await db.sql`CREATE INDEX sdk_client_id_index ON sdk_report_events (client_id)`.execute();
|
|
149
|
+
|
|
150
|
+
await db.sql`CREATE INDEX sdk_index ON sdk_report_events (sdk)`.execute();
|
|
131
151
|
});
|
|
132
152
|
};
|
|
133
153
|
|
|
@@ -4,9 +4,6 @@ import { event_types } from '@powersync/service-types';
|
|
|
4
4
|
import { v4 } from 'uuid';
|
|
5
5
|
import * as lib_postgres from '@powersync/lib-service-postgres';
|
|
6
6
|
import { NormalizedPostgresStorageConfig } from '../types/types.js';
|
|
7
|
-
|
|
8
|
-
import { STORAGE_SCHEMA_NAME } from '../utils/db.js';
|
|
9
|
-
import { getStorageApplicationName } from '../utils/application-name.js';
|
|
10
7
|
import {
|
|
11
8
|
DeleteOldSdkData,
|
|
12
9
|
ListCurrentConnections,
|
|
@@ -18,6 +15,8 @@ import {
|
|
|
18
15
|
import { SdkReporting, SdkReportingDecoded } from '../types/models/SdkReporting.js';
|
|
19
16
|
import { toInteger } from 'ix/util/tointeger.js';
|
|
20
17
|
import { logger } from '@powersync/lib-services-framework';
|
|
18
|
+
import { getStorageApplicationName } from '../utils/application-name.js';
|
|
19
|
+
import { STORAGE_SCHEMA_NAME } from '../utils/db.js';
|
|
21
20
|
|
|
22
21
|
export type PostgresReportStorageOptions = {
|
|
23
22
|
config: NormalizedPostgresStorageConfig;
|
|
@@ -55,7 +54,7 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
|
|
|
55
54
|
const parsedIsoString = parsedDate.toISOString();
|
|
56
55
|
switch (timeframe) {
|
|
57
56
|
case 'month': {
|
|
58
|
-
return { lt: parsedIsoString, gt: new Date(year, parsedDate.getMonth() - interval).toISOString() };
|
|
57
|
+
return { lt: parsedIsoString, gt: new Date(year, parsedDate.getMonth() - interval - 1).toISOString() };
|
|
59
58
|
}
|
|
60
59
|
case 'week': {
|
|
61
60
|
const weekStartDate = new Date(parsedDate);
|
|
@@ -83,8 +82,8 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
|
|
|
83
82
|
}
|
|
84
83
|
}
|
|
85
84
|
|
|
86
|
-
private timeFrameDeleteQuery(timeframe: event_types.TimeFrames, interval: number = 1) {
|
|
87
|
-
const { year, month, today, parsedDate } = this.parseJsDate(new Date());
|
|
85
|
+
private timeFrameDeleteQuery(timeframe: event_types.TimeFrames, interval: number = 1, test_date?: Date) {
|
|
86
|
+
const { year, month, today, parsedDate } = test_date ? this.parseJsDate(test_date) : this.parseJsDate(new Date());
|
|
88
87
|
switch (timeframe) {
|
|
89
88
|
case 'month': {
|
|
90
89
|
return { lt: new Date(year, parsedDate.getMonth() - interval).toISOString() };
|
|
@@ -276,9 +275,9 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
|
|
|
276
275
|
}
|
|
277
276
|
}
|
|
278
277
|
async reportSdkDisconnect(data: SdkDisconnectEventData): Promise<void> {
|
|
279
|
-
const { user_id, client_id, disconnect_at } = data;
|
|
278
|
+
const { user_id, client_id, disconnect_at, connect_at } = data;
|
|
280
279
|
const disconnectIsoString = disconnect_at.toISOString();
|
|
281
|
-
const
|
|
280
|
+
const connectIsoString = connect_at.toISOString();
|
|
282
281
|
await this.db.sql`
|
|
283
282
|
UPDATE sdk_report_events
|
|
284
283
|
SET
|
|
@@ -287,8 +286,7 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
|
|
|
287
286
|
WHERE
|
|
288
287
|
user_id = ${{ type: 'varchar', value: user_id }}
|
|
289
288
|
AND client_id = ${{ type: 'varchar', value: client_id }}
|
|
290
|
-
AND connect_at
|
|
291
|
-
AND connect_at < ${{ type: 1184, value: lt }};
|
|
289
|
+
AND connect_at = ${{ type: 1184, value: connectIsoString }}
|
|
292
290
|
`.execute();
|
|
293
291
|
}
|
|
294
292
|
async listCurrentConnections(data: ListCurrentConnectionsRequest): Promise<ListCurrentConnections> {
|
package/src/utils/db.ts
CHANGED
|
@@ -23,5 +23,6 @@ export const dropTables = async (client: lib_postgres.DatabaseClient) => {
|
|
|
23
23
|
await db.sql`DROP TABLE IF EXISTS custom_write_checkpoints`.execute();
|
|
24
24
|
await db.sql`DROP SEQUENCE IF EXISTS op_id_sequence`.execute();
|
|
25
25
|
await db.sql`DROP SEQUENCE IF EXISTS sync_rules_id_sequence`.execute();
|
|
26
|
+
await db.sql`DROP TABLE IF EXISTS sdk_report_events`.execute();
|
|
26
27
|
});
|
|
27
28
|
};
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`SDK reporting storage > Should create a sdk event if its after a day 1`] = `
|
|
4
|
+
[
|
|
5
|
+
{
|
|
6
|
+
"client_id": "client_week",
|
|
7
|
+
"sdk": "powersync-js/1.24.5",
|
|
8
|
+
"user_agent": "powersync-js/1.21.0 powersync-web Firefox/141 linux",
|
|
9
|
+
"user_id": "user_week",
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"client_id": "client_week",
|
|
13
|
+
"sdk": "powersync-js/1.24.5",
|
|
14
|
+
"user_agent": "powersync-js/1.21.0 powersync-web Firefox/141 linux",
|
|
15
|
+
"user_id": "user_week",
|
|
16
|
+
},
|
|
17
|
+
]
|
|
18
|
+
`;
|
|
19
|
+
|
|
20
|
+
exports[`SDK reporting storage > Should delete rows older than specified range 1`] = `
|
|
21
|
+
{
|
|
22
|
+
"sdks": [
|
|
23
|
+
{
|
|
24
|
+
"clients": 1,
|
|
25
|
+
"sdk": "powersync-dart/1.6.4",
|
|
26
|
+
"users": 1,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"clients": 1,
|
|
30
|
+
"sdk": "powersync-js/1.21.1",
|
|
31
|
+
"users": 1,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"clients": 1,
|
|
35
|
+
"sdk": "powersync-js/1.21.2",
|
|
36
|
+
"users": 1,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"clients": 1,
|
|
40
|
+
"sdk": "powersync-js/1.21.4",
|
|
41
|
+
"users": 1,
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
"users": 4,
|
|
45
|
+
}
|
|
46
|
+
`;
|
|
47
|
+
|
|
48
|
+
exports[`SDK reporting storage > Should show SDK scrape data for user over the past day 1`] = `
|
|
49
|
+
{
|
|
50
|
+
"sdks": [
|
|
51
|
+
{
|
|
52
|
+
"clients": 1,
|
|
53
|
+
"sdk": "powersync-dart/1.6.4",
|
|
54
|
+
"users": 1,
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"clients": 1,
|
|
58
|
+
"sdk": "powersync-js/1.21.1",
|
|
59
|
+
"users": 1,
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"clients": 1,
|
|
63
|
+
"sdk": "powersync-js/1.21.4",
|
|
64
|
+
"users": 1,
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
"users": 3,
|
|
68
|
+
}
|
|
69
|
+
`;
|
|
70
|
+
|
|
71
|
+
exports[`SDK reporting storage > Should show SDK scrape data for user over the past month 1`] = `
|
|
72
|
+
{
|
|
73
|
+
"sdks": [
|
|
74
|
+
{
|
|
75
|
+
"clients": 1,
|
|
76
|
+
"sdk": "powersync-dart/1.6.4",
|
|
77
|
+
"users": 1,
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"clients": 1,
|
|
81
|
+
"sdk": "powersync-js/1.21.1",
|
|
82
|
+
"users": 1,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"clients": 1,
|
|
86
|
+
"sdk": "powersync-js/1.21.2",
|
|
87
|
+
"users": 1,
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"clients": 1,
|
|
91
|
+
"sdk": "powersync-js/1.21.4",
|
|
92
|
+
"users": 1,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"clients": 1,
|
|
96
|
+
"sdk": "powersync-js/1.23.6",
|
|
97
|
+
"users": 1,
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"clients": 1,
|
|
101
|
+
"sdk": "powersync-js/1.23.7",
|
|
102
|
+
"users": 1,
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"clients": 1,
|
|
106
|
+
"sdk": "powersync-js/1.24.5",
|
|
107
|
+
"users": 1,
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
"users": 7,
|
|
111
|
+
}
|
|
112
|
+
`;
|
|
113
|
+
|
|
114
|
+
exports[`SDK reporting storage > Should show SDK scrape data for user over the past week 1`] = `
|
|
115
|
+
{
|
|
116
|
+
"sdks": [
|
|
117
|
+
{
|
|
118
|
+
"clients": 1,
|
|
119
|
+
"sdk": "powersync-dart/1.6.4",
|
|
120
|
+
"users": 1,
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"clients": 1,
|
|
124
|
+
"sdk": "powersync-js/1.21.1",
|
|
125
|
+
"users": 1,
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"clients": 1,
|
|
129
|
+
"sdk": "powersync-js/1.21.2",
|
|
130
|
+
"users": 1,
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"clients": 1,
|
|
134
|
+
"sdk": "powersync-js/1.21.4",
|
|
135
|
+
"users": 1,
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
"users": 4,
|
|
139
|
+
}
|
|
140
|
+
`;
|
|
141
|
+
|
|
142
|
+
exports[`SDK reporting storage > Should show connected users with start range 1`] = `
|
|
143
|
+
{
|
|
144
|
+
"sdks": [
|
|
145
|
+
{
|
|
146
|
+
"clients": 1,
|
|
147
|
+
"sdk": "powersync-dart/1.6.4",
|
|
148
|
+
"users": 1,
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
"users": 1,
|
|
152
|
+
}
|
|
153
|
+
`;
|
|
154
|
+
|
|
155
|
+
exports[`SDK reporting storage > Should show connected users with start range and end range 1`] = `
|
|
156
|
+
{
|
|
157
|
+
"sdks": [
|
|
158
|
+
{
|
|
159
|
+
"clients": 1,
|
|
160
|
+
"sdk": "powersync-js/1.21.1",
|
|
161
|
+
"users": 1,
|
|
162
|
+
},
|
|
163
|
+
],
|
|
164
|
+
"users": 1,
|
|
165
|
+
}
|
|
166
|
+
`;
|
|
167
|
+
|
|
168
|
+
exports[`SDK reporting storage > Should update a connected sdk event and make it disconnected 1`] = `
|
|
169
|
+
[
|
|
170
|
+
{
|
|
171
|
+
"client_id": "client_three",
|
|
172
|
+
"sdk": "powersync-js/1.21.2",
|
|
173
|
+
"user_agent": "powersync-js/1.21.0 powersync-web Firefox/141 linux",
|
|
174
|
+
"user_id": "user_three",
|
|
175
|
+
},
|
|
176
|
+
]
|
|
177
|
+
`;
|
|
178
|
+
|
|
179
|
+
exports[`SDK reporting storage > Should update a sdk event if its within a day 1`] = `
|
|
180
|
+
[
|
|
181
|
+
{
|
|
182
|
+
"client_id": "client_one",
|
|
183
|
+
"sdk": "powersync-dart/1.6.4",
|
|
184
|
+
"user_agent": "powersync-dart/1.6.4 Dart (flutter-web) Chrome/128 android",
|
|
185
|
+
"user_id": "user_one",
|
|
186
|
+
},
|
|
187
|
+
]
|
|
188
|
+
`;
|