@powersync/service-module-postgres-storage 0.0.0-dev-20250730152539 → 0.0.0-dev-20250804065653
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 +8 -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 +29 -30
- 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 +29 -31
- 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 +332 -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() };
|
|
@@ -228,31 +228,30 @@ export class PostgresReportStorageFactory {
|
|
|
228
228
|
AND connect_at >= ${{ type: 1184, value: gte }}
|
|
229
229
|
AND connect_at < ${{ type: 1184, value: lt }};
|
|
230
230
|
`.execute();
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
// }
|
|
231
|
+
if (result.results[1].status === 'UPDATE 0') {
|
|
232
|
+
await this.db.sql `
|
|
233
|
+
INSERT INTO
|
|
234
|
+
sdk_report_events (
|
|
235
|
+
user_id,
|
|
236
|
+
client_id,
|
|
237
|
+
connect_at,
|
|
238
|
+
sdk,
|
|
239
|
+
user_agent,
|
|
240
|
+
jwt_exp,
|
|
241
|
+
id
|
|
242
|
+
)
|
|
243
|
+
VALUES
|
|
244
|
+
(
|
|
245
|
+
${{ type: 'varchar', value: user_id }},
|
|
246
|
+
${{ type: 'varchar', value: client_id }},
|
|
247
|
+
${{ type: 1184, value: connectIsoString }},
|
|
248
|
+
${{ type: 'varchar', value: sdk }},
|
|
249
|
+
${{ type: 'varchar', value: user_agent }},
|
|
250
|
+
${{ type: 1184, value: jwtExpIsoString }},
|
|
251
|
+
${{ type: 'varchar', value: uuid }}
|
|
252
|
+
)
|
|
253
|
+
`.execute();
|
|
254
|
+
}
|
|
256
255
|
}
|
|
257
256
|
async reportSdkDisconnect(data) {
|
|
258
257
|
const { user_id, client_id, disconnect_at } = 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":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAUhE,OAAO,EAAE,YAAY,EAAuB,MAAM,iCAAiC,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAMrD,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,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QACjD,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,OAAO,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACzG,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC3C,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAC9D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBAClD,OAAO;oBACL,EAAE,EAAE,eAAe;oBACnB,EAAE,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;iBAC7E,CAAC;YACJ,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,0CAA0C;gBAC1C,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC;gBACtD,OAAO;oBACL,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,WAAW,EAAE;oBACrE,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,WAAW,EAAE;iBAC7D,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO;oBACL,EAAE,EAAE,eAAe;oBACnB,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE;iBAC1D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,SAAiC,EAAE,WAAmB,CAAC,EAAE,SAAgB;QACpG,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAClH,QAAQ,SAAS,EAAE,CAAC;YAClB,KAAK,OAAO,CAAC,CAAC,CAAC;gBACb,OAAO,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAChF,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC3C,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;gBAC9D,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;gBAC/D,OAAO;oBACL,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE;iBAC/C,CAAC;YACJ,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACZ,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,QAAQ,CAAC;gBACtD,OAAO;oBACL,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,WAAW,EAAE;iBAC7D,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,OAAO;oBACL,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE;iBAC1D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,iCAAiC,CAAC,MAAkC;QAC1E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,EAAE;aACT,CAAC;QACJ,CAAC;QACD,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAC3B,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE;SAC9B,CAAC;IACJ,CAAC;IACO,KAAK,CAAC,oBAAoB,CAAC,IAA+C;QAChF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCjB;iBACE,OAAO,CAAC,YAAY,CAAC;iBACrB,KAAK,EAAE,CAAC;QACb,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAClF,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QACnC,OAAO,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;+BAUG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;gCACxB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+BpD;aACE,OAAO,CAAC,YAAY,CAAC;aACrB,KAAK,EAAE,CAAC;IACb,CAAC;IAEO,iBAAiB;QACvB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;QAC1B,OAAO;YACL,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE;YAC/C,EAAE,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE;SACjD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,IAA0B;QAC/C,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAC1E,MAAM,gBAAgB,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAClD,MAAM,eAAe,GAAG,OAAQ,CAAC,WAAW,EAAE,CAAC;QAC/C,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,EAAE,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;uBAGb,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE;gBAC9C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;uBACxB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;oBACzC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE;;;oBAGtC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;0BAC7B,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;4BACnC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;2BAC3B,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;KAC/C,CAAC,OAAO,EAAE,CAAC;QACZ,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;;;cAaT,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;cACnC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;cACrC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE;cACvC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;cAC/B,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE;cACtC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE;cACtC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;;OAEvC,CAAC,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IACD,KAAK,CAAC,mBAAmB,CAAC,IAA4B;QACpD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;QACnD,MAAM,mBAAmB,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;QACxD,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;0BAGK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE;;;oBAGhD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE;0BAC7B,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;4BACnC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;2BAC3B,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;KAC/C,CAAC,OAAO,EAAE,CAAC;IACd,CAAC;IACD,KAAK,CAAC,sBAAsB,CAAC,IAAmC;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAA0B;QAC5C,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QACrC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;;;;;;2BAQT,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;gCACpB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA+BpD;aACE,OAAO,CAAC,YAAY,CAAC;aACrB,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC,CAAC;IACxD,CAAC;IACD,KAAK,CAAC,gBAAgB,CAAC,IAAsB;QAC3C,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QACrC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,GAAG,CAAA;;;uBAGb,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE;;;;;;;;KAQ3C,CAAC,OAAO,EAAE,CAAC;QACZ,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7E,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CACT,OAAO,QAAQ,IAAI,SAAS,KAAK,WAAW,6DAA6D,CAC1G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;QACzB,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,UAAgC;QACtD,+EAA+E;QAC/E,qCAAqC;IACvC,CAAC;CACF"}
|
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-20250804065653",
|
|
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-20250804065653",
|
|
33
|
+
"@powersync/lib-services-framework": "0.0.0-dev-20250804065653",
|
|
34
|
+
"@powersync/service-core": "0.0.0-dev-20250804065653",
|
|
35
|
+
"@powersync/service-types": "0.0.0-dev-20250804065653",
|
|
36
|
+
"@powersync/service-core-tests": "0.0.0-dev-20250804065653",
|
|
37
|
+
"@powersync/service-jpgwire": "0.0.0-dev-20250804065653",
|
|
38
|
+
"@powersync/service-sync-rules": "0.0.0-dev-20250804065653"
|
|
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() };
|
|
@@ -250,31 +249,30 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
|
|
|
250
249
|
AND connect_at >= ${{ type: 1184, value: gte }}
|
|
251
250
|
AND connect_at < ${{ type: 1184, value: lt }};
|
|
252
251
|
`.execute();
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
// }
|
|
252
|
+
if (result.results[1].status === 'UPDATE 0') {
|
|
253
|
+
await this.db.sql`
|
|
254
|
+
INSERT INTO
|
|
255
|
+
sdk_report_events (
|
|
256
|
+
user_id,
|
|
257
|
+
client_id,
|
|
258
|
+
connect_at,
|
|
259
|
+
sdk,
|
|
260
|
+
user_agent,
|
|
261
|
+
jwt_exp,
|
|
262
|
+
id
|
|
263
|
+
)
|
|
264
|
+
VALUES
|
|
265
|
+
(
|
|
266
|
+
${{ type: 'varchar', value: user_id }},
|
|
267
|
+
${{ type: 'varchar', value: client_id }},
|
|
268
|
+
${{ type: 1184, value: connectIsoString }},
|
|
269
|
+
${{ type: 'varchar', value: sdk }},
|
|
270
|
+
${{ type: 'varchar', value: user_agent }},
|
|
271
|
+
${{ type: 1184, value: jwtExpIsoString }},
|
|
272
|
+
${{ type: 'varchar', value: uuid }}
|
|
273
|
+
)
|
|
274
|
+
`.execute();
|
|
275
|
+
}
|
|
278
276
|
}
|
|
279
277
|
async reportSdkDisconnect(data: SdkDisconnectEventData): Promise<void> {
|
|
280
278
|
const { user_id, client_id, disconnect_at } = data;
|
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_one",
|
|
172
|
+
"sdk": "powersync-dart/1.6.4",
|
|
173
|
+
"user_agent": "powersync-dart/1.6.4 Dart (flutter-web) Chrome/128 android",
|
|
174
|
+
"user_id": "user_one",
|
|
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
|
+
`;
|