@powersync/service-module-postgres-storage 0.0.0-dev-20250724111728 → 0.0.0-dev-20250729121434

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.
@@ -9,8 +9,12 @@ export type PostgresReportStorageOptions = {
9
9
  export declare class PostgresReportStorageFactory implements storage.ReportStorageFactory {
10
10
  protected options: PostgresReportStorageOptions;
11
11
  readonly db: lib_postgres.DatabaseClient;
12
- private activeStorage;
13
12
  constructor(options: PostgresReportStorageOptions);
13
+ private parseJsDate;
14
+ private timeFrameQuery;
15
+ private timeFrameDeleteQuery;
16
+ private listConnectionsDateRangeQuery;
17
+ private updateTableFilter;
14
18
  reportSdkConnect(data: SdkConnectBucketData): Promise<void>;
15
19
  reportSdkDisconnect(data: SdkDisconnectEventData): Promise<void>;
16
20
  listCurrentConnections(data: ListCurrentConnectionsRequest): Promise<ListCurrentConnections>;
@@ -164,6 +164,23 @@ 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
+ CONSTRAINT unique_user_client_connect UNIQUE (user_id, client_id, connect_at)
178
+ )
179
+ `.execute();
180
+ await db.sql ` CREATE INDEX sdk_list_index ON sdk_report_events (connect_at, jwt_exp, disconnect_at) `.execute();
181
+ await db.sql ` CREATE INDEX sdk_user_id_index ON sdk_report_events (user_id)`.execute();
182
+ await db.sql ` CREATE INDEX sdk_client_id_index ON sdk_report_events (client_id)`.execute();
183
+ await db.sql ` CREATE INDEX sdk_index ON sdk_report_events (sdk)`.execute();
167
184
  });
168
185
  }
169
186
  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;QACd,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
+ {"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;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA;;;;;;;;;;;;KAYX,CAAC,OAAO,EAAE,CAAC;YAEZ,MAAM,EAAE,CAAC,GAAG,CAAA,yFAAyF,CAAC,OAAO,EAAE,CAAC;YAEhH,MAAM,EAAE,CAAC,GAAG,CAAA,gEAAgE,CAAC,OAAO,EAAE,CAAC;YAEvF,MAAM,EAAE,CAAC,GAAG,CAAA,oEAAoE,CAAC,OAAO,EAAE,CAAC;YAE3F,MAAM,EAAE,CAAC,GAAG,CAAA,oDAAoD,CAAC,OAAO,EAAE,CAAC;QAC7E,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
+ import { v4 } from 'uuid';
1
2
  import * as lib_postgres from '@powersync/lib-service-postgres';
2
3
  import { STORAGE_SCHEMA_NAME } from '../utils/db.js';
3
4
  import { getStorageApplicationName } from '../utils/application-name.js';
4
5
  export class PostgresReportStorageFactory {
5
6
  options;
6
7
  db;
7
- activeStorage;
8
8
  constructor(options) {
9
9
  this.options = options;
10
10
  this.db = new lib_postgres.DatabaseClient({
@@ -16,20 +16,269 @@ export class PostgresReportStorageFactory {
16
16
  connectionCreated: async (connection) => this.prepareStatements(connection)
17
17
  });
18
18
  }
19
- reportSdkConnect(data) {
20
- throw new Error('Method not implemented.');
19
+ parseJsDate(date) {
20
+ const year = date.getFullYear();
21
+ const month = date.getMonth();
22
+ const today = date.getDate();
23
+ const day = date.getDay();
24
+ return {
25
+ year,
26
+ month,
27
+ today,
28
+ day,
29
+ parsedDate: date
30
+ };
21
31
  }
22
- reportSdkDisconnect(data) {
23
- throw new Error('Method not implemented.');
32
+ timeFrameQuery(timeframe, interval = 1) {
33
+ const { year, month, today, parsedDate } = this.parseJsDate(new Date());
34
+ switch (timeframe) {
35
+ case 'month': {
36
+ return { lt: parsedDate.toISOString(), gt: new Date(year, parsedDate.getMonth() - interval).toISOString() };
37
+ }
38
+ case 'week': {
39
+ const weekStartDate = new Date(parsedDate);
40
+ weekStartDate.setDate(weekStartDate.getDate() - 6 * interval);
41
+ const weekStart = this.parseJsDate(weekStartDate);
42
+ return {
43
+ lt: parsedDate.toISOString(),
44
+ gt: new Date(weekStart.year, weekStart.month, weekStart.today).toISOString()
45
+ };
46
+ }
47
+ case 'hour': {
48
+ // Get the last hour from the current time
49
+ const previousHour = parsedDate.getHours() - interval;
50
+ return {
51
+ lt: new Date(year, month, today, parsedDate.getHours()).toISOString(),
52
+ gt: new Date(year, month, today, previousHour).toISOString()
53
+ };
54
+ }
55
+ default: {
56
+ return {
57
+ lt: parsedDate.toISOString(),
58
+ gt: new Date(year, month, today - interval).toISOString()
59
+ };
60
+ }
61
+ }
24
62
  }
25
- listCurrentConnections(data) {
26
- throw new Error('Method not implemented.');
63
+ timeFrameDeleteQuery(timeframe, interval = 1) {
64
+ const { year, month, today, parsedDate } = this.parseJsDate(new Date());
65
+ switch (timeframe) {
66
+ case 'month': {
67
+ return { lt: new Date(year, parsedDate.getMonth() - interval).toISOString() };
68
+ }
69
+ case 'week': {
70
+ const weekStartDate = new Date(parsedDate);
71
+ weekStartDate.setDate(weekStartDate.getDate() - 6 * interval);
72
+ const { month, year, today } = this.parseJsDate(weekStartDate);
73
+ return {
74
+ lt: new Date(year, month, today).toISOString()
75
+ };
76
+ }
77
+ case 'hour': {
78
+ const previousHour = parsedDate.getHours() - interval;
79
+ return {
80
+ lt: new Date(year, month, today, previousHour).toISOString()
81
+ };
82
+ }
83
+ default: {
84
+ return {
85
+ $lt: new Date(year, month, today - interval).toISOString()
86
+ };
87
+ }
88
+ }
27
89
  }
28
- scrapeSdkData(data) {
29
- throw new Error('Method not implemented.');
90
+ listConnectionsDateRangeQuery(data) {
91
+ const { range } = data;
92
+ if (!range) {
93
+ const query = `
94
+ WITH filtered AS (
95
+ SELECT *
96
+ FROM sdk_report_events
97
+ WHERE disconnect_at IS NULL
98
+ AND jwt_exp > NOW()
99
+ ),
100
+ unique_users AS (
101
+ SELECT COUNT(DISTINCT user_id) AS count
102
+ FROM filtered
103
+ ),
104
+ sdk_versions_array AS (
105
+ SELECT sdk,
106
+ COUNT(*) AS total,
107
+ COUNT(DISTINCT client_id) AS clients,
108
+ COUNT(DISTINCT user_id) AS users
109
+ FROM filtered
110
+ GROUP BY sdk
111
+ )
112
+ SELECT
113
+ COALESCE(u.count, 0) AS users,
114
+ JSON_AGG(ROW_TO_JSON(s)) AS sdks
115
+ FROM unique_users u
116
+ JOIN sdk_versions_array s ON TRUE;
117
+ `;
118
+ return {
119
+ statement: query
120
+ };
121
+ }
122
+ const endDate = data.range?.end_date ? new Date(data.range.end_date) : new Date();
123
+ const startDate = new Date(range.start_date);
124
+ const query = `
125
+ WITH filtered AS (
126
+ SELECT *
127
+ FROM sdk_report_events
128
+ WHERE disconnect_at IS NULL
129
+ AND jwt_exp > NOW()
130
+ AND connect_at > $1
131
+ AND connect_at <= $2
132
+ ),
133
+ unique_users AS (
134
+ SELECT COUNT(DISTINCT user_id) AS count
135
+ FROM filtered
136
+ ),
137
+ sdk_versions_array AS (
138
+ SELECT sdk,
139
+ COUNT(*) AS total,
140
+ COUNT(DISTINCT client_id) AS clients,
141
+ COUNT(DISTINCT user_id) AS users
142
+ FROM filtered
143
+ GROUP BY sdk
144
+ )
145
+ SELECT COALESCE(u.count, 0) AS users, JSON_AGG(ROW_TO_JSON(s)) AS sdks
146
+ FROM unique_users u
147
+ JOIN sdk_versions_array s ON TRUE;
148
+ `;
149
+ const lt = endDate.toISOString();
150
+ const gt = startDate.toISOString();
151
+ return { statement: query, params: [{ value: gt }, { value: lt }] };
30
152
  }
31
- deleteOldSdkData(data) {
32
- throw new Error('Method not implemented.');
153
+ updateTableFilter() {
154
+ const { year, month, today } = this.parseJsDate(new Date());
155
+ const nextDay = today + 1;
156
+ return {
157
+ gte: new Date(year, month, today).toISOString(),
158
+ lt: new Date(year, month, nextDay).toISOString()
159
+ };
160
+ }
161
+ async reportSdkConnect(data) {
162
+ const { sdk, connect_at, user_id, user_agent, jwt_exp, client_id } = data;
163
+ 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 = $3,
170
+ sdk = $4,
171
+ user_agent = $5,
172
+ jwt_exp = $6,
173
+ disconnect_at = NULL
174
+ WHERE sdk_report_events.connect_at >= $8
175
+ AND sdk_report_events.connect_at < $9;`;
176
+ try {
177
+ const result = await this.db.query({
178
+ statement: query,
179
+ params: [
180
+ { type: 'varchar', value: user_id },
181
+ { type: 'varchar', value: client_id },
182
+ { type: 'varchar', value: connect_at },
183
+ { type: 'varchar', value: sdk },
184
+ { type: 'varchar', value: user_agent },
185
+ { type: 1184, value: jwt_exp?.toISOString() },
186
+ { type: 'varchar', value: v4() },
187
+ { type: 1184, value: gte },
188
+ { type: 1184, value: lt }
189
+ ]
190
+ });
191
+ console.log(result.rows);
192
+ }
193
+ catch (error) {
194
+ console.log(error);
195
+ }
196
+ }
197
+ async reportSdkDisconnect(data) {
198
+ const { user_id, client_id, disconnect_at } = data;
199
+ const { gte, lt } = this.updateTableFilter();
200
+ const query = `
201
+ UPDATE sdk_report_events
202
+ SET
203
+ disconnect_at = $1,
204
+ jwt_exp = NULL
205
+ WHERE user_id = $2
206
+ AND client_id = $3
207
+ AND connect_at >= $4
208
+ AND connect_at < $5;`;
209
+ try {
210
+ const result = await this.db.query({
211
+ statement: query,
212
+ params: [
213
+ { type: 1184, value: disconnect_at },
214
+ { type: 'varchar', value: user_id },
215
+ { type: 'varchar', value: client_id },
216
+ { type: 1184, value: gte },
217
+ { type: 1184, value: lt }
218
+ ]
219
+ });
220
+ console.log(result.rows);
221
+ }
222
+ catch (error) {
223
+ console.log(error);
224
+ }
225
+ }
226
+ async listCurrentConnections(data) {
227
+ const statement = this.listConnectionsDateRangeQuery(data);
228
+ const result = await this.db.query(statement);
229
+ console.log(result.rows);
230
+ return {
231
+ users: 0,
232
+ sdks: []
233
+ };
234
+ }
235
+ async scrapeSdkData(data) {
236
+ const { timeframe, interval } = data;
237
+ const { lt, gt } = this.timeFrameQuery(timeframe, interval);
238
+ const query = `
239
+ WITH filtered AS (
240
+ SELECT *
241
+ FROM sdk_report_events
242
+ WHERE connect_at > $1
243
+ AND connect_at <= $2
244
+ ),
245
+ unique_users AS (
246
+ SELECT COUNT(DISTINCT user_id) AS count
247
+ FROM filtered
248
+ ),
249
+ sdk_versions_array AS (
250
+ SELECT sdk,
251
+ COUNT(*) AS total,
252
+ COUNT(DISTINCT client_id) AS clients,
253
+ COUNT(DISTINCT user_id) AS users
254
+ FROM filtered
255
+ GROUP BY sdk
256
+ )
257
+ SELECT COALESCE(u.count, 0) AS users, JSON_AGG(ROW_TO_JSON(s)) AS sdks
258
+ FROM unique_users u
259
+ JOIN sdk_versions_array s ON TRUE;
260
+ `;
261
+ const result = await this.db.query({ statement: query, params: [{ value: gt }, { value: lt }] });
262
+ console.log(result.rows);
263
+ return {
264
+ users: 0,
265
+ sdks: []
266
+ };
267
+ }
268
+ async deleteOldSdkData(data) {
269
+ const { timeframe, interval } = data;
270
+ const { lt } = this.timeFrameDeleteQuery(timeframe, interval);
271
+ const query = `
272
+ DELETE FROM sdk_report_events
273
+ WHERE connect_at < $1
274
+ AND (
275
+ disconnect_at IS NOT NULL
276
+ OR (jwt_exp < NOW() AND disconnect_at IS NULL)
277
+ );
278
+ `;
279
+ const params = [{ value: lt }];
280
+ const result = await this.db.query({ statement: query, params });
281
+ console.log(result.rows);
33
282
  }
34
283
  async [Symbol.asyncDispose]() {
35
284
  await this.db[Symbol.asyncDispose]();
@@ -1 +1 @@
1
- {"version":3,"file":"PostgresReportStorageFactory.js","sourceRoot":"","sources":["../../src/storage/PostgresReportStorageFactory.ts"],"names":[],"mappings":"AAGA,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;IAIjB;IAHb,EAAE,CAA8B;IACjC,aAAa,CAA6C;IAElE,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;IACD,gBAAgB,CAAC,IAA0B;QACzC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,mBAAmB,CAAC,IAA4B;QAC9C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,sBAAsB,CAAC,IAAmC;QACxD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,aAAa,CAAC,IAA0B;QACtC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IACD,gBAAgB,CAAC,IAAsB;QACrC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,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"}
1
+ {"version":3,"file":"PostgresReportStorageFactory.js","sourceRoot":"","sources":["../../src/storage/PostgresReportStorageFactory.ts"],"names":[],"mappings":"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"}
@@ -25,14 +25,17 @@ export class PostgresStorageProvider {
25
25
  config: normalizedConfig
26
26
  });
27
27
  return {
28
- // TODO: IMPLEMENT REPORT STORAGE
29
28
  reportStorage: reportStorageFactory,
30
29
  storage: storageFactory,
31
- shutDown: async () => storageFactory.db[Symbol.asyncDispose](),
30
+ shutDown: async () => {
31
+ await storageFactory.db[Symbol.asyncDispose]();
32
+ await reportStorageFactory.db[Symbol.asyncDispose]();
33
+ },
32
34
  tearDown: async () => {
33
35
  logger.info(`Tearing down Postgres storage: ${normalizedConfig.database}...`);
34
36
  await dropTables(storageFactory.db);
35
37
  await storageFactory.db[Symbol.asyncDispose]();
38
+ await reportStorageFactory.db[Symbol.asyncDispose]();
36
39
  return true;
37
40
  }
38
41
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PostgresStorageProvider.js","sourceRoot":"","sources":["../../src/storage/PostgresStorageProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAG3D,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACnH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAEjF,MAAM,OAAO,uBAAuB;IAClC,IAAI,IAAI;QACN,OAAO,YAAY,CAAC,wBAAwB,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAkC;QACjD,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QAEnC,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC;QACnC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,gFAAgF;YAChF,MAAM,IAAI,KAAK,CACb,8DAA8D,OAAO,CAAC,IAAI,QAAQ,YAAY,CAAC,wBAAwB,EAAE,CAC1H,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,gBAAgB,GAAG,8BAA8B,CAAC,aAAa,CAAC,CAAC;QACvE,MAAM,cAAc,GAAG,IAAI,4BAA4B,CAAC;YACtD,MAAM,EAAE,gBAAgB;YACxB,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC,gBAAgB;SAC1D,CAAC,CAAC;QAEH,MAAM,oBAAoB,GAAG,IAAI,4BAA4B,CAAC;YAC5D,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAC;QAEH,OAAO;YACL,iCAAiC;YACjC,aAAa,EAAE,oBAAoB;YACnC,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;YAC9D,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,MAAM,CAAC,IAAI,CAAC,kCAAkC,gBAAgB,CAAC,QAAQ,KAAK,CAAC,CAAC;gBAC9E,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBACpC,MAAM,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC;YACd,CAAC;SAC8B,CAAC;IACpC,CAAC;CACF"}
1
+ {"version":3,"file":"PostgresStorageProvider.js","sourceRoot":"","sources":["../../src/storage/PostgresStorageProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAG3D,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACnH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAEjF,MAAM,OAAO,uBAAuB;IAClC,IAAI,IAAI;QACN,OAAO,YAAY,CAAC,wBAAwB,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAkC;QACjD,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QAEnC,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC;QACnC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,gFAAgF;YAChF,MAAM,IAAI,KAAK,CACb,8DAA8D,OAAO,CAAC,IAAI,QAAQ,YAAY,CAAC,wBAAwB,EAAE,CAC1H,CAAC;QACJ,CAAC;QAED,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5D,MAAM,gBAAgB,GAAG,8BAA8B,CAAC,aAAa,CAAC,CAAC;QACvE,MAAM,cAAc,GAAG,IAAI,4BAA4B,CAAC;YACtD,MAAM,EAAE,gBAAgB;YACxB,gBAAgB,EAAE,OAAO,CAAC,cAAc,CAAC,gBAAgB;SAC1D,CAAC,CAAC;QAEH,MAAM,oBAAoB,GAAG,IAAI,4BAA4B,CAAC;YAC5D,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAC;QAEH,OAAO;YACL,aAAa,EAAE,oBAAoB;YACnC,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,MAAM,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/C,MAAM,oBAAoB,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YACvD,CAAC;YACD,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,MAAM,CAAC,IAAI,CAAC,kCAAkC,gBAAgB,CAAC,QAAQ,KAAK,CAAC,CAAC;gBAC9E,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBACpC,MAAM,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC/C,MAAM,oBAAoB,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC;SAC8B,CAAC;IACpC,CAAC;CACF"}
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-20250724111728",
5
+ "version": "0.0.0-dev-20250729121434",
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-20250724111728",
33
- "@powersync/lib-services-framework": "0.0.0-dev-20250724111728",
34
- "@powersync/service-core": "0.0.0-dev-20250724111728",
35
- "@powersync/service-types": "0.0.0-dev-20250724111728",
36
- "@powersync/service-core-tests": "0.0.0-dev-20250724111728",
37
- "@powersync/service-jpgwire": "0.0.0-dev-20250724111728",
32
+ "@powersync/lib-service-postgres": "0.0.0-dev-20250729121434",
33
+ "@powersync/lib-services-framework": "0.0.0-dev-20250729121434",
34
+ "@powersync/service-core": "0.0.0-dev-20250729121434",
35
+ "@powersync/service-types": "0.0.0-dev-20250729121434",
36
+ "@powersync/service-core-tests": "0.0.0-dev-20250729121434",
37
+ "@powersync/service-jpgwire": "0.0.0-dev-20250729121434",
38
38
  "@powersync/service-sync-rules": "0.27.0"
39
39
  },
40
40
  "devDependencies": {
@@ -128,6 +128,28 @@ 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
+
132
+ await db.sql`
133
+ CREATE TABLE sdk_report_events (
134
+ id TEXT PRIMARY KEY,
135
+ user_agent TEXT NOT NULL,
136
+ client_id TEXT NOT NULL,
137
+ user_id TEXT NOT NULL,
138
+ sdk TEXT NOT NULL,
139
+ jwt_exp TIMESTAMP WITH TIME ZONE,
140
+ connect_at TIMESTAMP WITH TIME ZONE NOT NULL,
141
+ disconnect_at TIMESTAMP WITH TIME ZONE,
142
+ CONSTRAINT unique_user_client_connect UNIQUE (user_id, client_id, connect_at)
143
+ )
144
+ `.execute();
145
+
146
+ await db.sql` CREATE INDEX sdk_list_index ON sdk_report_events (connect_at, jwt_exp, disconnect_at) `.execute();
147
+
148
+ await db.sql` CREATE INDEX sdk_user_id_index ON sdk_report_events (user_id)`.execute();
149
+
150
+ await db.sql` CREATE INDEX sdk_client_id_index ON sdk_report_events (client_id)`.execute();
151
+
152
+ await db.sql` CREATE INDEX sdk_index ON sdk_report_events (sdk)`.execute();
131
153
  });
132
154
  };
133
155