@powersync/service-module-postgres 0.0.4 → 0.2.0

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.
@@ -118,75 +118,100 @@ export class WalStream {
118
118
  await checkSourceConfiguration(this.connections.pool, PUBLICATION_NAME);
119
119
  const slotName = this.slot_name;
120
120
  const status = await this.storage.getStatus();
121
- if (status.snapshot_done && status.checkpoint_lsn) {
121
+ const snapshotDone = status.snapshot_done && status.checkpoint_lsn != null;
122
+ if (snapshotDone) {
123
+ // Snapshot is done, but we still need to check the replication slot status
122
124
  logger.info(`${slotName} Initial replication already done`);
123
- let last_error = null;
124
- // Check that replication slot exists
125
- for (let i = 120; i >= 0; i--) {
126
- await touch();
127
- if (i == 0) {
128
- container.reporter.captureException(last_error, {
129
- level: errors.ErrorSeverity.ERROR,
125
+ }
126
+ // Check if replication slot exists
127
+ const rs = await this.connections.pool.query({
128
+ statement: 'SELECT 1 FROM pg_replication_slots WHERE slot_name = $1',
129
+ params: [{ type: 'varchar', value: slotName }]
130
+ });
131
+ const slotExists = rs.rows.length > 0;
132
+ if (slotExists) {
133
+ // This checks that the slot is still valid
134
+ const r = await this.checkReplicationSlot();
135
+ return {
136
+ needsInitialSync: !snapshotDone,
137
+ needsNewSlot: r.needsNewSlot
138
+ };
139
+ }
140
+ else {
141
+ return { needsInitialSync: true, needsNewSlot: true };
142
+ }
143
+ }
144
+ /**
145
+ * If a replication slot exists, check that it is healthy.
146
+ */
147
+ async checkReplicationSlot() {
148
+ let last_error = null;
149
+ const slotName = this.slot_name;
150
+ // Check that replication slot exists
151
+ for (let i = 120; i >= 0; i--) {
152
+ await touch();
153
+ if (i == 0) {
154
+ container.reporter.captureException(last_error, {
155
+ level: errors.ErrorSeverity.ERROR,
156
+ metadata: {
157
+ replication_slot: slotName
158
+ }
159
+ });
160
+ throw last_error;
161
+ }
162
+ try {
163
+ // We peek a large number of changes here, to make it more likely to pick up replication slot errors.
164
+ // For example, "publication does not exist" only occurs here if the peek actually includes changes related
165
+ // to the slot.
166
+ logger.info(`Checking ${slotName}`);
167
+ // The actual results can be quite large, so we don't actually return everything
168
+ // due to memory and processing overhead that would create.
169
+ const cursor = await this.connections.pool.stream({
170
+ statement: `SELECT 1 FROM pg_catalog.pg_logical_slot_peek_binary_changes($1, NULL, 1000, 'proto_version', '1', 'publication_names', $2)`,
171
+ params: [
172
+ { type: 'varchar', value: slotName },
173
+ { type: 'varchar', value: PUBLICATION_NAME }
174
+ ]
175
+ });
176
+ for await (let _chunk of cursor) {
177
+ // No-op, just exhaust the cursor
178
+ }
179
+ // Success
180
+ logger.info(`Slot ${slotName} appears healthy`);
181
+ return { needsInitialSync: false, needsNewSlot: false };
182
+ }
183
+ catch (e) {
184
+ last_error = e;
185
+ logger.warn(`${slotName} Replication slot error`, e);
186
+ if (this.stopped) {
187
+ throw e;
188
+ }
189
+ // Could also be `publication "powersync" does not exist`, although this error may show up much later
190
+ // in some cases.
191
+ if (/incorrect prev-link/.test(e.message) ||
192
+ /replication slot.*does not exist/.test(e.message) ||
193
+ /publication.*does not exist/.test(e.message)) {
194
+ container.reporter.captureException(e, {
195
+ level: errors.ErrorSeverity.WARNING,
130
196
  metadata: {
197
+ try_index: i,
131
198
  replication_slot: slotName
132
199
  }
133
200
  });
134
- throw last_error;
135
- }
136
- try {
137
- // We peek a large number of changes here, to make it more likely to pick up replication slot errors.
138
- // For example, "publication does not exist" only occurs here if the peek actually includes changes related
139
- // to the slot.
140
- logger.info(`Checking ${slotName}`);
141
- // The actual results can be quite large, so we don't actually return everything
142
- // due to memory and processing overhead that would create.
143
- const cursor = await this.connections.pool.stream({
144
- statement: `SELECT 1 FROM pg_catalog.pg_logical_slot_peek_binary_changes($1, NULL, 1000, 'proto_version', '1', 'publication_names', $2)`,
145
- params: [
146
- { type: 'varchar', value: slotName },
147
- { type: 'varchar', value: PUBLICATION_NAME }
148
- ]
149
- });
150
- for await (let _chunk of cursor) {
151
- // No-op, just exhaust the cursor
152
- }
153
- // Success
154
- logger.info(`Slot ${slotName} appears healthy`);
155
- return { needsInitialSync: false };
156
- }
157
- catch (e) {
158
- last_error = e;
159
- logger.warn(`${slotName} Replication slot error`, e);
160
- if (this.stopped) {
161
- throw e;
162
- }
163
- // Could also be `publication "powersync" does not exist`, although this error may show up much later
164
- // in some cases.
165
- if (/incorrect prev-link/.test(e.message) ||
166
- /replication slot.*does not exist/.test(e.message) ||
167
- /publication.*does not exist/.test(e.message)) {
168
- container.reporter.captureException(e, {
169
- level: errors.ErrorSeverity.WARNING,
170
- metadata: {
171
- try_index: i,
172
- replication_slot: slotName
173
- }
174
- });
175
- // Sample: record with incorrect prev-link 10000/10000 at 0/18AB778
176
- // Seen during development. Some internal error, fixed by re-creating slot.
177
- //
178
- // Sample: publication "powersync" does not exist
179
- // Happens when publication deleted or never created.
180
- // Slot must be re-created in this case.
181
- logger.info(`${slotName} does not exist anymore, will create new slot`);
182
- throw new MissingReplicationSlotError(`Replication slot ${slotName} does not exist anymore`);
183
- }
184
- // Try again after a pause
185
- await new Promise((resolve) => setTimeout(resolve, 1000));
201
+ // Sample: record with incorrect prev-link 10000/10000 at 0/18AB778
202
+ // Seen during development. Some internal error, fixed by re-creating slot.
203
+ //
204
+ // Sample: publication "powersync" does not exist
205
+ // Happens when publication deleted or never created.
206
+ // Slot must be re-created in this case.
207
+ logger.info(`${slotName} does not exist anymore, will create new slot`);
208
+ return { needsInitialSync: true, needsNewSlot: true };
186
209
  }
210
+ // Try again after a pause
211
+ await new Promise((resolve) => setTimeout(resolve, 1000));
187
212
  }
188
213
  }
189
- return { needsInitialSync: true };
214
+ throw new Error('Unreachable');
190
215
  }
191
216
  async estimatedCount(db, table) {
192
217
  const results = await db.query({
@@ -209,69 +234,59 @@ WHERE oid = $1::regclass`,
209
234
  * If (partial) replication was done before on this slot, this clears the state
210
235
  * and starts again from scratch.
211
236
  */
212
- async startInitialReplication(replicationConnection) {
237
+ async startInitialReplication(replicationConnection, status) {
213
238
  // If anything here errors, the entire replication process is aborted,
214
- // and all connections closed, including this one.
239
+ // and all connections are closed, including this one.
215
240
  const db = await this.connections.snapshotConnection();
216
241
  const slotName = this.slot_name;
217
- await this.storage.clear();
218
- await db.query({
219
- statement: 'SELECT pg_drop_replication_slot(slot_name) FROM pg_replication_slots WHERE slot_name = $1',
220
- params: [{ type: 'varchar', value: slotName }]
221
- });
222
- // We use the replication connection here, not a pool.
223
- // This connection needs to stay open at least until the snapshot is used below.
224
- const result = await replicationConnection.query(`CREATE_REPLICATION_SLOT ${slotName} LOGICAL pgoutput EXPORT_SNAPSHOT`);
225
- const columns = result.columns;
226
- const row = result.rows[0];
227
- if (columns[1]?.name != 'consistent_point' || columns[2]?.name != 'snapshot_name' || row == null) {
228
- throw new Error(`Invalid CREATE_REPLICATION_SLOT output: ${JSON.stringify(columns)}`);
229
- }
230
- // This LSN could be used in initialReplication below.
231
- // But it's also safe to just use ZERO_LSN - we won't get any changes older than this lsn
232
- // with streaming replication.
233
- const lsn = pgwire.lsnMakeComparable(row[1]);
234
- const snapshot = row[2];
235
- logger.info(`Created replication slot ${slotName} at ${lsn} with snapshot ${snapshot}`);
236
- // https://stackoverflow.com/questions/70160769/postgres-logical-replication-starting-from-given-lsn
237
- await db.query('BEGIN');
238
- // Use the snapshot exported above.
239
- // Using SERIALIZABLE isolation level may give stronger guarantees, but that complicates
240
- // the replication slot + snapshot above. And we still won't have SERIALIZABLE
241
- // guarantees with streaming replication.
242
- // See: ./docs/serializability.md for details.
243
- //
244
- // Another alternative here is to use the same pgwire connection for initial replication as well,
245
- // instead of synchronizing a separate transaction to the snapshot.
246
- try {
247
- await db.query(`SET TRANSACTION ISOLATION LEVEL REPEATABLE READ`);
248
- await db.query(`SET TRANSACTION READ ONLY`);
249
- await db.query(`SET TRANSACTION SNAPSHOT '${snapshot}'`);
250
- // Disable statement timeout for the duration of this transaction.
251
- // On Supabase, the default is 2 minutes.
252
- await db.query(`set local statement_timeout = 0`);
253
- logger.info(`${slotName} Starting initial replication`);
254
- await this.initialReplication(db, lsn);
255
- logger.info(`${slotName} Initial replication done`);
256
- await db.query('COMMIT');
257
- }
258
- catch (e) {
259
- await db.query('ROLLBACK');
260
- throw e;
242
+ if (status.needsNewSlot) {
243
+ // This happens when there is no existing replication slot, or if the
244
+ // existing one is unhealthy.
245
+ // In those cases, we have to start replication from scratch.
246
+ // If there is an existing healthy slot, we can skip this and continue
247
+ // initial replication where we left off.
248
+ await this.storage.clear();
249
+ await db.query({
250
+ statement: 'SELECT pg_drop_replication_slot(slot_name) FROM pg_replication_slots WHERE slot_name = $1',
251
+ params: [{ type: 'varchar', value: slotName }]
252
+ });
253
+ // We use the replication connection here, not a pool.
254
+ // The replication slot must be created before we start snapshotting tables.
255
+ await replicationConnection.query(`CREATE_REPLICATION_SLOT ${slotName} LOGICAL pgoutput`);
256
+ logger.info(`Created replication slot ${slotName}`);
261
257
  }
258
+ await this.initialReplication(db);
262
259
  }
263
- async initialReplication(db, lsn) {
260
+ async initialReplication(db) {
264
261
  const sourceTables = this.sync_rules.getSourceTables();
265
- await this.storage.startBatch({ zeroLSN: ZERO_LSN, defaultSchema: POSTGRES_DEFAULT_SCHEMA, storeCurrentData: true }, async (batch) => {
262
+ await this.storage.startBatch({ zeroLSN: ZERO_LSN, defaultSchema: POSTGRES_DEFAULT_SCHEMA, storeCurrentData: true, skipExistingRows: true }, async (batch) => {
266
263
  for (let tablePattern of sourceTables) {
267
264
  const tables = await this.getQualifiedTableNames(batch, db, tablePattern);
268
265
  for (let table of tables) {
269
- await this.snapshotTable(batch, db, table);
270
- await batch.markSnapshotDone([table], lsn);
266
+ if (table.snapshotComplete) {
267
+ logger.info(`${this.slot_name} Skipping ${table.qualifiedName} - snapshot already done`);
268
+ continue;
269
+ }
270
+ let tableLsnNotBefore;
271
+ await db.query('BEGIN');
272
+ try {
273
+ await this.snapshotTable(batch, db, table);
274
+ const rs = await db.query(`select pg_current_wal_lsn() as lsn`);
275
+ tableLsnNotBefore = rs.rows[0][0];
276
+ }
277
+ finally {
278
+ // Read-only transaction, commit does not actually do anything.
279
+ await db.query('COMMIT');
280
+ }
281
+ await batch.markSnapshotDone([table], tableLsnNotBefore);
271
282
  await touch();
272
283
  }
273
284
  }
274
- await batch.commit(lsn);
285
+ // Always commit the initial snapshot at zero.
286
+ // This makes sure we don't skip any changes applied before starting this snapshot,
287
+ // in the case of snapshot retries.
288
+ // We could alternatively commit at the replication slot LSN.
289
+ await batch.commit(ZERO_LSN);
275
290
  });
276
291
  }
277
292
  static *getQueryData(results) {
@@ -284,46 +299,64 @@ WHERE oid = $1::regclass`,
284
299
  const estimatedCount = await this.estimatedCount(db, table);
285
300
  let at = 0;
286
301
  let lastLogIndex = 0;
287
- const cursor = db.stream({ statement: `SELECT * FROM ${table.escapedIdentifier}` });
302
+ // We do streaming on two levels:
303
+ // 1. Coarse level: DELCARE CURSOR, FETCH 10000 at a time.
304
+ // 2. Fine level: Stream chunks from each fetch call.
305
+ await db.query(`DECLARE powersync_cursor CURSOR FOR SELECT * FROM ${table.escapedIdentifier}`);
288
306
  let columns = [];
289
- // pgwire streams rows in chunks.
290
- // These chunks can be quite small (as little as 16KB), so we don't flush chunks automatically.
291
- for await (let chunk of cursor) {
292
- if (chunk.tag == 'RowDescription') {
293
- let i = 0;
294
- columns = chunk.payload.map((c) => {
295
- return { i: i++, name: c.name };
296
- });
297
- continue;
298
- }
299
- const rows = chunk.rows.map((row) => {
300
- let q = {};
301
- for (let c of columns) {
302
- q[c.name] = row[c.i];
303
- }
304
- return q;
307
+ let hasRemainingData = true;
308
+ while (hasRemainingData) {
309
+ // Fetch 10k at a time.
310
+ // The balance here is between latency overhead per FETCH call,
311
+ // and not spending too much time on each FETCH call.
312
+ // We aim for a couple of seconds on each FETCH call.
313
+ const cursor = db.stream({
314
+ statement: `FETCH 10000 FROM powersync_cursor`
305
315
  });
306
- if (rows.length > 0 && at - lastLogIndex >= 5000) {
307
- logger.info(`${this.slot_name} Replicating ${table.qualifiedName} ${at}/${estimatedCount}`);
308
- lastLogIndex = at;
309
- }
310
- if (this.abort_signal.aborted) {
311
- throw new Error(`Aborted initial replication of ${this.slot_name}`);
312
- }
313
- for (const record of WalStream.getQueryData(rows)) {
314
- // This auto-flushes when the batch reaches its size limit
315
- await batch.save({
316
- tag: storage.SaveOperationTag.INSERT,
317
- sourceTable: table,
318
- before: undefined,
319
- beforeReplicaId: undefined,
320
- after: record,
321
- afterReplicaId: getUuidReplicaIdentityBson(record, table.replicaIdColumns)
316
+ hasRemainingData = false;
317
+ // pgwire streams rows in chunks.
318
+ // These chunks can be quite small (as little as 16KB), so we don't flush chunks automatically.
319
+ // There are typically 100-200 rows per chunk.
320
+ for await (let chunk of cursor) {
321
+ if (chunk.tag == 'RowDescription') {
322
+ // We get a RowDescription for each FETCH call, but they should
323
+ // all be the same.
324
+ let i = 0;
325
+ columns = chunk.payload.map((c) => {
326
+ return { i: i++, name: c.name };
327
+ });
328
+ continue;
329
+ }
330
+ const rows = chunk.rows.map((row) => {
331
+ let q = {};
332
+ for (let c of columns) {
333
+ q[c.name] = row[c.i];
334
+ }
335
+ return q;
322
336
  });
337
+ if (rows.length > 0 && at - lastLogIndex >= 5000) {
338
+ logger.info(`${this.slot_name} Replicating ${table.qualifiedName} ${at}/${estimatedCount}`);
339
+ lastLogIndex = at;
340
+ hasRemainingData = true;
341
+ }
342
+ if (this.abort_signal.aborted) {
343
+ throw new Error(`Aborted initial replication of ${this.slot_name}`);
344
+ }
345
+ for (const record of WalStream.getQueryData(rows)) {
346
+ // This auto-flushes when the batch reaches its size limit
347
+ await batch.save({
348
+ tag: storage.SaveOperationTag.INSERT,
349
+ sourceTable: table,
350
+ before: undefined,
351
+ beforeReplicaId: undefined,
352
+ after: record,
353
+ afterReplicaId: getUuidReplicaIdentityBson(record, table.replicaIdColumns)
354
+ });
355
+ }
356
+ at += rows.length;
357
+ Metrics.getInstance().rows_replicated_total.add(rows.length);
358
+ await touch();
323
359
  }
324
- at += rows.length;
325
- Metrics.getInstance().rows_replicated_total.add(rows.length);
326
- await touch();
327
360
  }
328
361
  await batch.flush();
329
362
  }
@@ -356,12 +389,13 @@ WHERE oid = $1::regclass`,
356
389
  try {
357
390
  await db.query('BEGIN');
358
391
  try {
392
+ await this.snapshotTable(batch, db, result.table);
359
393
  // Get the current LSN.
360
394
  // The data will only be consistent once incremental replication
361
395
  // has passed that point.
396
+ // We have to get this LSN _after_ we have started the snapshot query.
362
397
  const rs = await db.query(`select pg_current_wal_lsn() as lsn`);
363
398
  lsn = rs.rows[0][0];
364
- await this.snapshotTable(batch, db, result.table);
365
399
  await db.query('COMMIT');
366
400
  }
367
401
  catch (e) {
@@ -462,7 +496,7 @@ WHERE oid = $1::regclass`,
462
496
  async initReplication(replicationConnection) {
463
497
  const result = await this.initSlot();
464
498
  if (result.needsInitialSync) {
465
- await this.startInitialReplication(replicationConnection);
499
+ await this.startInitialReplication(replicationConnection, result);
466
500
  }
467
501
  }
468
502
  async streamChanges(replicationConnection) {
@@ -477,7 +511,7 @@ WHERE oid = $1::regclass`,
477
511
  this.startedStreaming = true;
478
512
  // Auto-activate as soon as initial replication is done
479
513
  await this.storage.autoActivate();
480
- await this.storage.startBatch({ zeroLSN: ZERO_LSN, defaultSchema: POSTGRES_DEFAULT_SCHEMA, storeCurrentData: true }, async (batch) => {
514
+ await this.storage.startBatch({ zeroLSN: ZERO_LSN, defaultSchema: POSTGRES_DEFAULT_SCHEMA, storeCurrentData: true, skipExistingRows: false }, async (batch) => {
481
515
  // Replication never starts in the middle of a transaction
482
516
  let inTx = false;
483
517
  let count = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"WalStream.js","sourceRoot":"","sources":["../../src/replication/WalStream.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WalStream.js","sourceRoot":"","sources":["../../src/replication/WalStream.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "0.0.4",
8
+ "version": "0.2.0",
9
9
  "main": "dist/index.js",
10
10
  "license": "FSL-1.1-Apache-2.0",
11
11
  "type": "module",
@@ -28,11 +28,11 @@
28
28
  "uuid": "^9.0.1",
29
29
  "uri-js": "^4.4.1",
30
30
  "@powersync/lib-services-framework": "0.2.0",
31
- "@powersync/service-core": "0.10.1",
32
- "@powersync/service-jpgwire": "0.18.1",
31
+ "@powersync/service-core": "0.12.0",
32
+ "@powersync/service-jpgwire": "0.18.3",
33
33
  "@powersync/service-jsonbig": "0.17.10",
34
- "@powersync/service-sync-rules": "0.21.0",
35
- "@powersync/service-types": "0.4.0"
34
+ "@powersync/service-sync-rules": "0.22.0",
35
+ "@powersync/service-types": "0.5.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/uuid": "^9.0.4"
@@ -10,17 +10,26 @@ import { getDebugTableInfo } from '../replication/replication-utils.js';
10
10
  import { PUBLICATION_NAME } from '../replication/WalStream.js';
11
11
 
12
12
  export class PostgresRouteAPIAdapter implements api.RouteAPI {
13
- protected pool: pgwire.PgClient;
14
-
15
13
  connectionTag: string;
16
14
  // TODO this should probably be configurable one day
17
15
  publicationName = PUBLICATION_NAME;
18
16
 
19
- constructor(protected config: types.ResolvedConnectionConfig) {
20
- this.pool = pgwire.connectPgWirePool(config, {
17
+ static withConfig(config: types.ResolvedConnectionConfig) {
18
+ const pool = pgwire.connectPgWirePool(config, {
21
19
  idleTimeout: 30_000
22
20
  });
23
- this.connectionTag = config.tag ?? sync_rules.DEFAULT_TAG;
21
+ return new PostgresRouteAPIAdapter(pool, config.tag, config);
22
+ }
23
+
24
+ /**
25
+ * @param config - Required for the service; optional for tests.
26
+ */
27
+ constructor(
28
+ protected pool: pgwire.PgClient,
29
+ connectionTag?: string,
30
+ private config?: types.ResolvedConnectionConfig
31
+ ) {
32
+ this.connectionTag = connectionTag ?? sync_rules.DEFAULT_TAG;
24
33
  }
25
34
 
26
35
  getParseSyncRulesOptions(): ParseSyncRulesOptions {
@@ -34,13 +43,13 @@ export class PostgresRouteAPIAdapter implements api.RouteAPI {
34
43
  }
35
44
 
36
45
  async getSourceConfig(): Promise<service_types.configFile.ResolvedDataSourceConfig> {
37
- return this.config;
46
+ return this.config!;
38
47
  }
39
48
 
40
49
  async getConnectionStatus(): Promise<service_types.ConnectionStatusV2> {
41
50
  const base = {
42
- id: this.config.id,
43
- uri: types.baseUri(this.config)
51
+ id: this.config?.id ?? '',
52
+ uri: this.config == null ? '' : types.baseUri(this.config)
44
53
  };
45
54
 
46
55
  try {
@@ -71,7 +80,7 @@ export class PostgresRouteAPIAdapter implements api.RouteAPI {
71
80
  }
72
81
 
73
82
  async executeQuery(query: string, params: any[]): Promise<service_types.internal_routes.ExecuteSqlResponse> {
74
- if (!this.config.debug_api) {
83
+ if (!this.config?.debug_api) {
75
84
  return service_types.internal_routes.ExecuteSqlResponse.encode({
76
85
  results: {
77
86
  columns: [],
@@ -204,7 +213,8 @@ export class PostgresRouteAPIAdapter implements api.RouteAPI {
204
213
  }
205
214
 
206
215
  async getReplicationLag(options: api.ReplicationLagOptions): Promise<number | undefined> {
207
- const { bucketStorage: slotName } = options;
216
+ const { bucketStorage } = options;
217
+ const slotName = bucketStorage.slot_name;
208
218
  const results = await pg_utils.retriedQuery(this.pool, {
209
219
  statement: `SELECT
210
220
  slot_name,
@@ -223,9 +233,18 @@ FROM pg_replication_slots WHERE slot_name = $1 LIMIT 1;`,
223
233
  }
224
234
 
225
235
  async getReplicationHead(): Promise<string> {
226
- const [{ lsn }] = pgwire.pgwireRows(
227
- await pg_utils.retriedQuery(this.pool, `SELECT pg_logical_emit_message(false, 'powersync', 'ping') as lsn`)
236
+ // On most Postgres versions, pg_logical_emit_message() returns the correct LSN.
237
+ // However, on Aurora (Postgres compatible), it can return an entirely different LSN,
238
+ // causing the write checkpoints to never be replicated back to the client.
239
+ // For those, we need to use pg_current_wal_lsn() instead.
240
+ const { results } = await pg_utils.retriedQuery(
241
+ this.pool,
242
+ { statement: `SELECT pg_current_wal_lsn() as lsn` },
243
+ { statement: `SELECT pg_logical_emit_message(false, 'powersync', 'ping')` }
228
244
  );
245
+
246
+ // Specifically use the lsn from the first statement, not the second one.
247
+ const lsn = results[0].rows[0][0];
229
248
  return String(lsn);
230
249
  }
231
250
 
@@ -23,7 +23,16 @@ export class PostgresModule extends replication.ReplicationModule<types.Postgres
23
23
  async initialize(context: system.ServiceContextContainer): Promise<void> {
24
24
  await super.initialize(context);
25
25
 
26
- if (context.configuration.base_config.client_auth?.supabase) {
26
+ const client_auth = context.configuration.base_config.client_auth;
27
+
28
+ if (client_auth?.supabase && client_auth?.supabase_jwt_secret == null) {
29
+ // Only use the deprecated SupabaseKeyCollector when there is no
30
+ // secret hardcoded. Hardcoded secrets are handled elsewhere, using
31
+ // StaticSupabaseKeyCollector.
32
+
33
+ // Support for SupabaseKeyCollector is deprecated and support will be
34
+ // completely removed by Supabase soon. We can keep support a while
35
+ // longer for self-hosted setups, before also removing that on our side.
27
36
  this.registerSupabaseAuth(context);
28
37
  }
29
38
 
@@ -38,7 +47,7 @@ export class PostgresModule extends replication.ReplicationModule<types.Postgres
38
47
  }
39
48
 
40
49
  protected createRouteAPIAdapter(): api.RouteAPI {
41
- return new PostgresRouteAPIAdapter(this.resolveConfig(this.decodedConfig!));
50
+ return PostgresRouteAPIAdapter.withConfig(this.resolveConfig(this.decodedConfig!));
42
51
  }
43
52
 
44
53
  protected createReplicator(context: system.ServiceContext): replication.AbstractReplicator {