@powersync/service-module-postgres-storage 0.0.0-dev-20250730084703 → 0.0.0-dev-20250730092013

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.
@@ -90,6 +90,12 @@ export class PostgresReportStorageFactory {
90
90
  }
91
91
  }
92
92
  mapListCurrentConnectionsResponse(result) {
93
+ if (!result) {
94
+ return {
95
+ users: 0,
96
+ sdks: []
97
+ };
98
+ }
93
99
  return {
94
100
  users: Number(result.users),
95
101
  sdks: result.sdks?.data || []
@@ -206,138 +212,138 @@ export class PostgresReportStorageFactory {
206
212
  const jwtExpIsoString = jwt_exp.toISOString();
207
213
  const { gte, lt } = this.updateTableFilter();
208
214
  const uuid = v4();
209
- const result = await this.db.query({
210
- statement: `
211
- UPDATE sdk_report_events
212
- SET connect_at = $1::timestamptz,
213
- sdk = $2,
214
- user_agent = $3,
215
- jwt_exp = $4::timestamptz,
216
- disconnect_at = NULL
217
- WHERE user_id = $5
218
- AND client_id = $6
219
- AND connect_at >= $7::timestamptz
220
- AND connect_at < $8::timestamptz;
221
- `,
222
- params: [
223
- { type: 1184, value: connectIsoString },
224
- { type: 'varchar', value: sdk },
225
- { type: 'varchar', value: user_agent },
226
- { type: 1184, value: jwtExpIsoString },
227
- { type: 'varchar', value: user_id },
228
- { type: 'varchar', value: client_id },
229
- { type: 1184, value: gte },
230
- { type: 1184, value: lt }
231
- ]
232
- });
233
- if (result.rows.length === 0) {
234
- await this.db.query({
235
- statement: `
236
- INSERT INTO sdk_report_events (
237
- user_id, client_id, connect_at, sdk, user_agent, jwt_exp, id
238
- )
239
- SELECT $1, $2, $3::timestamptz, $4, $5, $6::timestamptz, $7
240
- WHERE NOT EXISTS (
241
- SELECT 1 FROM sdk_report_events
242
- WHERE user_id = $1
243
- AND client_id = $2
244
- AND connect_at >= $8::timestamptz
245
- AND connect_at < $9::timestamptz
246
- );`,
247
- params: [
248
- { type: 'varchar', value: user_id },
249
- { type: 'varchar', value: client_id },
250
- { type: 1184, value: connectIsoString },
251
- { type: 'varchar', value: sdk },
252
- { type: 'varchar', value: user_agent },
253
- { type: 1184, value: jwtExpIsoString },
254
- { type: 'varchar', value: uuid },
255
- { type: 1184, value: gte },
256
- { type: 1184, value: lt }
257
- ]
258
- });
215
+ const result = await this.db.sql `
216
+ UPDATE sdk_report_events
217
+ SET
218
+ connect_at = ${{ type: 1184, value: connectIsoString }},
219
+ sdk = ${{ type: 'varchar', value: sdk }},
220
+ user_agent = ${{ type: 'varchar', value: user_agent }},
221
+ jwt_exp = ${{ type: 1184, value: jwtExpIsoString }},
222
+ disconnect_at = NULL
223
+ WHERE
224
+ user_id = ${{ type: 'varchar', value: user_id }}
225
+ AND client_id = ${{ type: 'varchar', value: client_id }}
226
+ AND connect_at >= ${{ type: 1184, value: gte }}
227
+ AND connect_at < ${{ type: 1184, value: lt }};
228
+ `.rows();
229
+ if (result.length === 0) {
230
+ await this.db.sql `
231
+ INSERT INTO
232
+ sdk_report_events (
233
+ user_id,
234
+ client_id,
235
+ connect_at,
236
+ sdk,
237
+ user_agent,
238
+ jwt_exp,
239
+ id
240
+ )
241
+ SELECT
242
+ ${{ type: 'varchar', value: user_id }},
243
+ ${{ type: 'varchar', value: client_id }},
244
+ ${{ type: 1184, value: connectIsoString }},
245
+ ${{ type: 'varchar', value: sdk }},
246
+ ${{ type: 'varchar', value: user_agent }},
247
+ ${{ type: 1184, value: jwtExpIsoString }},
248
+ ${{ type: 'varchar', value: uuid }}
249
+ WHERE
250
+ NOT EXISTS (
251
+ SELECT
252
+ 1
253
+ FROM
254
+ sdk_report_events
255
+ WHERE
256
+ user_id = ${{ type: 'varchar', value: user_id }}
257
+ AND client_id = ${{ type: 'varchar', value: client_id }}
258
+ AND connect_at >= ${{ type: 1184, value: gte }}
259
+ AND connect_at < ${{ type: 1184, value: lt }}
260
+ );
261
+ `.execute();
259
262
  }
260
263
  }
261
264
  async reportSdkDisconnect(data) {
262
265
  const { user_id, client_id, disconnect_at } = data;
263
266
  const disconnectIsoString = disconnect_at.toISOString();
264
267
  const { gte, lt } = this.updateTableFilter();
265
- const query = `
268
+ await this.db.sql `
266
269
  UPDATE sdk_report_events
267
270
  SET
268
- disconnect_at = CAST($1 AS TIMESTAMP WITH TIME ZONE),
271
+ disconnect_at = ${{ type: 1184, value: disconnectIsoString }},
269
272
  jwt_exp = NULL
270
- WHERE user_id = $2
271
- AND client_id = $3
272
- AND connect_at >= CAST($4 AS TIMESTAMP WITH TIME ZONE)
273
- AND connect_at < CAST($5 AS TIMESTAMP WITH TIME ZONE);`;
274
- const result = await this.db.query({
275
- statement: query,
276
- params: [
277
- { type: 1184, value: disconnectIsoString },
278
- { type: 'varchar', value: user_id },
279
- { type: 'varchar', value: client_id },
280
- { type: 1184, value: gte },
281
- { type: 1184, value: lt }
282
- ]
283
- });
273
+ WHERE
274
+ user_id = ${{ type: 'varchar', value: user_id }}
275
+ AND client_id = ${{ type: 'varchar', value: client_id }}
276
+ AND connect_at >= ${{ type: 1184, value: gte }}
277
+ AND connect_at < ${{ type: 1184, value: lt }};
278
+ `.execute();
284
279
  }
285
280
  async listCurrentConnections(data) {
286
281
  const result = await this.listConnectionsQuery(data);
287
- if (!result) {
288
- return {
289
- users: 0,
290
- sdks: []
291
- };
292
- }
293
282
  return this.mapListCurrentConnectionsResponse(result);
294
283
  }
295
284
  async scrapeSdkData(data) {
296
285
  const { timeframe, interval } = data;
297
286
  const { lt, gt } = this.timeFrameQuery(timeframe, interval);
298
- const query = `
299
- WITH filtered AS (
300
- SELECT *
301
- FROM sdk_report_events
302
- WHERE connect_at > CAST($1 AS TIMESTAMP WITH TIME ZONE)
303
- AND connect_at <= CAST($2 AS TIMESTAMP WITH TIME ZONE)
304
- ),
305
- unique_users AS (
306
- SELECT COUNT(DISTINCT user_id) AS count
307
- FROM filtered
308
- ),
309
- sdk_versions_array AS (
310
- SELECT sdk,
311
- COUNT(*) AS total,
287
+ const result = await this.db.sql `
288
+ WITH
289
+ filtered AS (
290
+ SELECT
291
+ *
292
+ FROM
293
+ sdk_report_events
294
+ WHERE
295
+ connect_at > ${{ type: 1184, value: gt }}
296
+ AND connect_at <= ${{ type: 1184, value: lt }}
297
+ ),
298
+ unique_users AS (
299
+ SELECT
300
+ COUNT(DISTINCT user_id) AS count
301
+ FROM
302
+ filtered
303
+ ),
304
+ sdk_versions_array AS (
305
+ SELECT
306
+ sdk,
312
307
  COUNT(DISTINCT client_id) AS clients,
313
308
  COUNT(DISTINCT user_id) AS users
314
- FROM filtered
315
- GROUP BY sdk
316
- )
317
- SELECT COALESCE(u.count, 0) AS users, JSON_AGG(ROW_TO_JSON(s)) AS sdks
318
- FROM unique_users u
319
- JOIN sdk_versions_array s ON TRUE;
320
- `;
321
- const result = await this.db.query({ statement: query, params: [{ value: gt }, { value: lt }] });
322
- console.log(result.rows);
323
- return {
324
- users: 0,
325
- sdks: []
326
- };
309
+ FROM
310
+ filtered
311
+ GROUP BY
312
+ sdk
313
+ )
314
+ SELECT
315
+ (
316
+ SELECT
317
+ COALESCE(count, 0)
318
+ FROM
319
+ unique_users
320
+ ) AS users,
321
+ (
322
+ SELECT
323
+ JSON_AGG(ROW_TO_JSON(s))
324
+ FROM
325
+ sdk_versions_array s
326
+ ) AS sdks;
327
+ `
328
+ .decoded(SdkReporting)
329
+ .first();
330
+ return this.mapListCurrentConnectionsResponse(result);
327
331
  }
328
332
  async deleteOldSdkData(data) {
329
333
  const { timeframe, interval } = data;
330
334
  const { lt } = this.timeFrameDeleteQuery(timeframe, interval);
331
- const query = `
332
- DELETE FROM sdk_report_events
333
- WHERE connect_at < CAST($1 AS TIMESTAMP WITH TIME ZONE)
334
- AND (
335
- disconnect_at IS NOT NULL
336
- OR (jwt_exp < NOW() AND disconnect_at IS NULL)
337
- );
338
- `;
339
- const params = [{ value: lt }];
340
- await this.db.query({ statement: query, params });
335
+ await this.db.sql `
336
+ DELETE FROM sdk_report_events
337
+ WHERE
338
+ connect_at < ${{ type: 1184, value: lt }}
339
+ AND (
340
+ disconnect_at IS NOT NULL
341
+ OR (
342
+ jwt_exp < NOW()
343
+ AND disconnect_at IS NULL
344
+ )
345
+ );
346
+ `.execute();
341
347
  }
342
348
  async [Symbol.asyncDispose]() {
343
349
  await this.db[Symbol.asyncDispose]();
@@ -1 +1 @@
1
- {"version":3,"file":"PostgresReportStorageFactory.js","sourceRoot":"","sources":["../../src/storage/PostgresReportStorageFactory.ts"],"names":[],"mappings":"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"}
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-20250730084703",
5
+ "version": "0.0.0-dev-20250730092013",
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-20250730084703",
33
- "@powersync/lib-services-framework": "0.0.0-dev-20250730084703",
34
- "@powersync/service-core": "0.0.0-dev-20250730084703",
35
- "@powersync/service-types": "0.0.0-dev-20250730084703",
36
- "@powersync/service-core-tests": "0.0.0-dev-20250730084703",
37
- "@powersync/service-sync-rules": "0.27.0",
38
- "@powersync/service-jpgwire": "0.0.0-dev-20250730084703"
32
+ "@powersync/lib-service-postgres": "0.0.0-dev-20250730092013",
33
+ "@powersync/lib-services-framework": "0.0.0-dev-20250730092013",
34
+ "@powersync/service-core": "0.0.0-dev-20250730092013",
35
+ "@powersync/service-types": "0.0.0-dev-20250730092013",
36
+ "@powersync/service-core-tests": "0.0.0-dev-20250730092013",
37
+ "@powersync/service-jpgwire": "0.0.0-dev-20250730092013",
38
+ "@powersync/service-sync-rules": "0.27.0"
39
39
  },
40
40
  "devDependencies": {
41
41
  "typescript": "^5.7.3"
@@ -109,7 +109,13 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
109
109
  }
110
110
  }
111
111
 
112
- private mapListCurrentConnectionsResponse(result: SdkReportingDecoded): ListCurrentConnections {
112
+ private mapListCurrentConnectionsResponse(result: SdkReportingDecoded | null): ListCurrentConnections {
113
+ if (!result) {
114
+ return {
115
+ users: 0,
116
+ sdks: []
117
+ };
118
+ }
113
119
  return {
114
120
  users: Number(result.users),
115
121
  sdks: result.sdks?.data || []
@@ -228,140 +234,139 @@ export class PostgresReportStorageFactory implements storage.ReportStorageFactor
228
234
  const jwtExpIsoString = jwt_exp!.toISOString();
229
235
  const { gte, lt } = this.updateTableFilter();
230
236
  const uuid = v4();
231
- const result = await this.db.query({
232
- statement: `
233
- UPDATE sdk_report_events
234
- SET connect_at = $1::timestamptz,
235
- sdk = $2,
236
- user_agent = $3,
237
- jwt_exp = $4::timestamptz,
238
- disconnect_at = NULL
239
- WHERE user_id = $5
240
- AND client_id = $6
241
- AND connect_at >= $7::timestamptz
242
- AND connect_at < $8::timestamptz;
243
- `,
244
- params: [
245
- { type: 1184, value: connectIsoString },
246
- { type: 'varchar', value: sdk },
247
- { type: 'varchar', value: user_agent },
248
- { type: 1184, value: jwtExpIsoString },
249
- { type: 'varchar', value: user_id },
250
- { type: 'varchar', value: client_id },
251
- { type: 1184, value: gte },
252
- { type: 1184, value: lt }
253
- ]
254
- });
255
- if (result.rows.length === 0) {
256
- await this.db.query({
257
- statement: `
258
- INSERT INTO sdk_report_events (
259
- user_id, client_id, connect_at, sdk, user_agent, jwt_exp, id
260
- )
261
- SELECT $1, $2, $3::timestamptz, $4, $5, $6::timestamptz, $7
262
- WHERE NOT EXISTS (
263
- SELECT 1 FROM sdk_report_events
264
- WHERE user_id = $1
265
- AND client_id = $2
266
- AND connect_at >= $8::timestamptz
267
- AND connect_at < $9::timestamptz
268
- );`,
269
- params: [
270
- { type: 'varchar', value: user_id },
271
- { type: 'varchar', value: client_id },
272
- { type: 1184, value: connectIsoString },
273
- { type: 'varchar', value: sdk },
274
- { type: 'varchar', value: user_agent },
275
- { type: 1184, value: jwtExpIsoString },
276
- { type: 'varchar', value: uuid },
277
- { type: 1184, value: gte },
278
- { type: 1184, value: lt }
279
- ]
280
- });
237
+ const result = await this.db.sql`
238
+ UPDATE sdk_report_events
239
+ SET
240
+ connect_at = ${{ type: 1184, value: connectIsoString }},
241
+ sdk = ${{ type: 'varchar', value: sdk }},
242
+ user_agent = ${{ type: 'varchar', value: user_agent }},
243
+ jwt_exp = ${{ type: 1184, value: jwtExpIsoString }},
244
+ disconnect_at = NULL
245
+ WHERE
246
+ user_id = ${{ type: 'varchar', value: user_id }}
247
+ AND client_id = ${{ type: 'varchar', value: client_id }}
248
+ AND connect_at >= ${{ type: 1184, value: gte }}
249
+ AND connect_at < ${{ type: 1184, value: lt }};
250
+ `.rows();
251
+ if (result.length === 0) {
252
+ await this.db.sql`
253
+ INSERT INTO
254
+ sdk_report_events (
255
+ user_id,
256
+ client_id,
257
+ connect_at,
258
+ sdk,
259
+ user_agent,
260
+ jwt_exp,
261
+ id
262
+ )
263
+ SELECT
264
+ ${{ type: 'varchar', value: user_id }},
265
+ ${{ type: 'varchar', value: client_id }},
266
+ ${{ type: 1184, value: connectIsoString }},
267
+ ${{ type: 'varchar', value: sdk }},
268
+ ${{ type: 'varchar', value: user_agent }},
269
+ ${{ type: 1184, value: jwtExpIsoString }},
270
+ ${{ type: 'varchar', value: uuid }}
271
+ WHERE
272
+ NOT EXISTS (
273
+ SELECT
274
+ 1
275
+ FROM
276
+ sdk_report_events
277
+ WHERE
278
+ user_id = ${{ type: 'varchar', value: user_id }}
279
+ AND client_id = ${{ type: 'varchar', value: client_id }}
280
+ AND connect_at >= ${{ type: 1184, value: gte }}
281
+ AND connect_at < ${{ type: 1184, value: lt }}
282
+ );
283
+ `.execute();
281
284
  }
282
285
  }
283
286
  async reportSdkDisconnect(data: SdkDisconnectEventData): Promise<void> {
284
287
  const { user_id, client_id, disconnect_at } = data;
285
288
  const disconnectIsoString = disconnect_at.toISOString();
286
289
  const { gte, lt } = this.updateTableFilter();
287
- const query = `
290
+ await this.db.sql`
288
291
  UPDATE sdk_report_events
289
292
  SET
290
- disconnect_at = CAST($1 AS TIMESTAMP WITH TIME ZONE),
293
+ disconnect_at = ${{ type: 1184, value: disconnectIsoString }},
291
294
  jwt_exp = NULL
292
- WHERE user_id = $2
293
- AND client_id = $3
294
- AND connect_at >= CAST($4 AS TIMESTAMP WITH TIME ZONE)
295
- AND connect_at < CAST($5 AS TIMESTAMP WITH TIME ZONE);`;
296
-
297
- const result = await this.db.query({
298
- statement: query,
299
- params: [
300
- { type: 1184, value: disconnectIsoString },
301
- { type: 'varchar', value: user_id },
302
- { type: 'varchar', value: client_id },
303
- { type: 1184, value: gte },
304
- { type: 1184, value: lt }
305
- ]
306
- });
295
+ WHERE
296
+ user_id = ${{ type: 'varchar', value: user_id }}
297
+ AND client_id = ${{ type: 'varchar', value: client_id }}
298
+ AND connect_at >= ${{ type: 1184, value: gte }}
299
+ AND connect_at < ${{ type: 1184, value: lt }};
300
+ `.execute();
307
301
  }
308
302
  async listCurrentConnections(data: ListCurrentConnectionsRequest): Promise<ListCurrentConnections> {
309
303
  const result = await this.listConnectionsQuery(data);
310
- if (!result) {
311
- return {
312
- users: 0,
313
- sdks: []
314
- };
315
- }
316
304
  return this.mapListCurrentConnectionsResponse(result);
317
305
  }
318
306
 
319
307
  async scrapeSdkData(data: ScrapeSdkDataRequest): Promise<ListCurrentConnections> {
320
308
  const { timeframe, interval } = data;
321
309
  const { lt, gt } = this.timeFrameQuery(timeframe, interval);
322
- const query = `
323
- WITH filtered AS (
324
- SELECT *
325
- FROM sdk_report_events
326
- WHERE connect_at > CAST($1 AS TIMESTAMP WITH TIME ZONE)
327
- AND connect_at <= CAST($2 AS TIMESTAMP WITH TIME ZONE)
328
- ),
329
- unique_users AS (
330
- SELECT COUNT(DISTINCT user_id) AS count
331
- FROM filtered
332
- ),
333
- sdk_versions_array AS (
334
- SELECT sdk,
335
- COUNT(*) AS total,
310
+ const result = await this.db.sql`
311
+ WITH
312
+ filtered AS (
313
+ SELECT
314
+ *
315
+ FROM
316
+ sdk_report_events
317
+ WHERE
318
+ connect_at > ${{ type: 1184, value: gt }}
319
+ AND connect_at <= ${{ type: 1184, value: lt }}
320
+ ),
321
+ unique_users AS (
322
+ SELECT
323
+ COUNT(DISTINCT user_id) AS count
324
+ FROM
325
+ filtered
326
+ ),
327
+ sdk_versions_array AS (
328
+ SELECT
329
+ sdk,
336
330
  COUNT(DISTINCT client_id) AS clients,
337
331
  COUNT(DISTINCT user_id) AS users
338
- FROM filtered
339
- GROUP BY sdk
340
- )
341
- SELECT COALESCE(u.count, 0) AS users, JSON_AGG(ROW_TO_JSON(s)) AS sdks
342
- FROM unique_users u
343
- JOIN sdk_versions_array s ON TRUE;
344
- `;
345
- const result = await this.db.query({ statement: query, params: [{ value: gt }, { value: lt }] });
346
- console.log(result.rows);
347
- return {
348
- users: 0,
349
- sdks: []
350
- };
332
+ FROM
333
+ filtered
334
+ GROUP BY
335
+ sdk
336
+ )
337
+ SELECT
338
+ (
339
+ SELECT
340
+ COALESCE(count, 0)
341
+ FROM
342
+ unique_users
343
+ ) AS users,
344
+ (
345
+ SELECT
346
+ JSON_AGG(ROW_TO_JSON(s))
347
+ FROM
348
+ sdk_versions_array s
349
+ ) AS sdks;
350
+ `
351
+ .decoded(SdkReporting)
352
+ .first();
353
+ return this.mapListCurrentConnectionsResponse(result);
351
354
  }
352
355
  async deleteOldSdkData(data: DeleteOldSdkData): Promise<void> {
353
356
  const { timeframe, interval } = data;
354
357
  const { lt } = this.timeFrameDeleteQuery(timeframe, interval);
355
- const query = `
356
- DELETE FROM sdk_report_events
357
- WHERE connect_at < CAST($1 AS TIMESTAMP WITH TIME ZONE)
358
- AND (
359
- disconnect_at IS NOT NULL
360
- OR (jwt_exp < NOW() AND disconnect_at IS NULL)
361
- );
362
- `;
363
- const params = [{ value: lt }];
364
- await this.db.query({ statement: query, params });
358
+ await this.db.sql`
359
+ DELETE FROM sdk_report_events
360
+ WHERE
361
+ connect_at < ${{ type: 1184, value: lt }}
362
+ AND (
363
+ disconnect_at IS NOT NULL
364
+ OR (
365
+ jwt_exp < NOW()
366
+ AND disconnect_at IS NULL
367
+ )
368
+ );
369
+ `.execute();
365
370
  }
366
371
 
367
372
  async [Symbol.asyncDispose]() {