@powersync/service-module-postgres-storage 0.15.0 → 0.16.1

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.
Files changed (83) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/{@types/storage → storage}/PostgresBucketStorageFactory.d.ts +12 -12
  3. package/dist/storage/PostgresBucketStorageFactory.js +57 -52
  4. package/dist/storage/PostgresBucketStorageFactory.js.map +1 -1
  5. package/dist/storage/PostgresReportStorage.js.map +1 -1
  6. package/dist/storage/PostgresStorageProvider.js +1 -1
  7. package/dist/storage/PostgresStorageProvider.js.map +1 -1
  8. package/dist/{@types/storage → storage}/PostgresSyncRulesStorage.d.ts +16 -7
  9. package/dist/storage/PostgresSyncRulesStorage.js +48 -45
  10. package/dist/storage/PostgresSyncRulesStorage.js.map +1 -1
  11. package/dist/{@types/storage → storage}/batch/PostgresBucketBatch.d.ts +2 -3
  12. package/dist/storage/batch/PostgresBucketBatch.js +26 -25
  13. package/dist/storage/batch/PostgresBucketBatch.js.map +1 -1
  14. package/dist/{@types/storage → storage}/storage-index.d.ts +1 -0
  15. package/dist/storage/storage-index.js +1 -0
  16. package/dist/storage/storage-index.js.map +1 -1
  17. package/dist/storage/sync-rules/PostgresPersistedSyncConfigContent.d.ts +17 -0
  18. package/dist/storage/sync-rules/PostgresPersistedSyncConfigContent.js +90 -0
  19. package/dist/storage/sync-rules/PostgresPersistedSyncConfigContent.js.map +1 -0
  20. package/dist/utils/test-utils.js +2 -2
  21. package/dist/utils/test-utils.js.map +1 -1
  22. package/package.json +10 -22
  23. package/src/storage/PostgresBucketStorageFactory.ts +64 -54
  24. package/src/storage/PostgresReportStorage.ts +1 -2
  25. package/src/storage/PostgresStorageProvider.ts +1 -1
  26. package/src/storage/PostgresSyncRulesStorage.ts +51 -52
  27. package/src/storage/batch/PostgresBucketBatch.ts +30 -32
  28. package/src/storage/storage-index.ts +1 -0
  29. package/src/storage/sync-rules/PostgresPersistedSyncConfigContent.ts +98 -0
  30. package/src/utils/test-utils.ts +2 -2
  31. package/test/src/migrations.test.ts +1 -1
  32. package/test/src/storage.test.ts +7 -2
  33. package/test/src/storage_compacting.test.ts +6 -4
  34. package/test/src/storage_sync.test.ts +2 -1
  35. package/test/tsconfig.json +0 -2
  36. package/tsconfig.json +1 -4
  37. package/tsconfig.tsbuildinfo +1 -0
  38. package/dist/.tsbuildinfo +0 -1
  39. package/dist/@types/storage/sync-rules/PostgresPersistedSyncRulesContent.d.ts +0 -9
  40. package/dist/storage/sync-rules/PostgresPersistedSyncRulesContent.js +0 -49
  41. package/dist/storage/sync-rules/PostgresPersistedSyncRulesContent.js.map +0 -1
  42. package/src/storage/sync-rules/PostgresPersistedSyncRulesContent.ts +0 -54
  43. /package/dist/{@types/index.d.ts → index.d.ts} +0 -0
  44. /package/dist/{@types/migrations → migrations}/PostgresMigrationAgent.d.ts +0 -0
  45. /package/dist/{@types/migrations → migrations}/PostgresMigrationStore.d.ts +0 -0
  46. /package/dist/{@types/migrations → migrations}/migration-utils.d.ts +0 -0
  47. /package/dist/{@types/migrations → migrations}/scripts/1684951997326-init.d.ts +0 -0
  48. /package/dist/{@types/migrations → migrations}/scripts/1749024804042-snapshot-progress.d.ts +0 -0
  49. /package/dist/{@types/migrations → migrations}/scripts/1756282360128-connection-reporting.d.ts +0 -0
  50. /package/dist/{@types/migrations → migrations}/scripts/1771232439485-storage-version.d.ts +0 -0
  51. /package/dist/{@types/migrations → migrations}/scripts/1771424826685-current-data-pending-deletes.d.ts +0 -0
  52. /package/dist/{@types/migrations → migrations}/scripts/1771491856000-sync-plan.d.ts +0 -0
  53. /package/dist/{@types/module → module}/PostgresStorageModule.d.ts +0 -0
  54. /package/dist/{@types/storage → storage}/PostgresCompactor.d.ts +0 -0
  55. /package/dist/{@types/storage → storage}/PostgresReportStorage.d.ts +0 -0
  56. /package/dist/{@types/storage → storage}/PostgresStorageProvider.d.ts +0 -0
  57. /package/dist/{@types/storage → storage}/batch/OperationBatch.d.ts +0 -0
  58. /package/dist/{@types/storage → storage}/batch/PostgresPersistedBatch.d.ts +0 -0
  59. /package/dist/{@types/storage → storage}/checkpoints/PostgresWriteCheckpointAPI.d.ts +0 -0
  60. /package/dist/{@types/storage → storage}/current-data-store.d.ts +0 -0
  61. /package/dist/{@types/storage → storage}/table-id.d.ts +0 -0
  62. /package/dist/{@types/types → types}/codecs.d.ts +0 -0
  63. /package/dist/{@types/types → types}/models/ActiveCheckpoint.d.ts +0 -0
  64. /package/dist/{@types/types → types}/models/ActiveCheckpointNotification.d.ts +0 -0
  65. /package/dist/{@types/types → types}/models/BucketData.d.ts +0 -0
  66. /package/dist/{@types/types → types}/models/BucketParameters.d.ts +0 -0
  67. /package/dist/{@types/types → types}/models/CurrentData.d.ts +0 -0
  68. /package/dist/{@types/types → types}/models/Instance.d.ts +0 -0
  69. /package/dist/{@types/types → types}/models/Migration.d.ts +0 -0
  70. /package/dist/{@types/types → types}/models/SdkReporting.d.ts +0 -0
  71. /package/dist/{@types/types → types}/models/SourceTable.d.ts +0 -0
  72. /package/dist/{@types/types → types}/models/SyncRules.d.ts +0 -0
  73. /package/dist/{@types/types → types}/models/WriteCheckpoint.d.ts +0 -0
  74. /package/dist/{@types/types → types}/models/json.d.ts +0 -0
  75. /package/dist/{@types/types → types}/models/models-index.d.ts +0 -0
  76. /package/dist/{@types/types → types}/types.d.ts +0 -0
  77. /package/dist/{@types/utils → utils}/application-name.d.ts +0 -0
  78. /package/dist/{@types/utils → utils}/bson.d.ts +0 -0
  79. /package/dist/{@types/utils → utils}/bucket-data.d.ts +0 -0
  80. /package/dist/{@types/utils → utils}/db.d.ts +0 -0
  81. /package/dist/{@types/utils → utils}/test-utils.d.ts +0 -0
  82. /package/dist/{@types/utils → utils}/ts-codec.d.ts +0 -0
  83. /package/dist/{@types/utils → utils}/utils-index.d.ts +0 -0
@@ -0,0 +1,17 @@
1
+ import * as lib_postgres from '@powersync/lib-service-postgres';
2
+ import { storage } from '@powersync/service-core';
3
+ import { models } from '../../types/types.js';
4
+ export declare class PostgresPersistedSyncConfigContent extends storage.PersistedSyncConfigContent {
5
+ private db;
6
+ constructor(db: lib_postgres.DatabaseClient, row: models.SyncRulesDecoded);
7
+ getSyncConfigStatus(): Promise<storage.PersistedSyncConfigStatus | null>;
8
+ }
9
+ export declare class PostgresPersistedReplicationStream extends storage.PersistedReplicationStream {
10
+ private db;
11
+ private readonly row;
12
+ current_lock: storage.ReplicationLock | null;
13
+ readonly syncConfigContent: readonly PostgresPersistedSyncConfigContent[];
14
+ constructor(db: lib_postgres.DatabaseClient, row: models.SyncRulesDecoded);
15
+ parsed(options: storage.ParseSyncConfigOptions): storage.ParsedSyncConfigSet;
16
+ lock(): Promise<storage.ReplicationLock>;
17
+ }
@@ -0,0 +1,90 @@
1
+ import * as lib_postgres from '@powersync/lib-service-postgres';
2
+ import { ErrorCode, ServiceError } from '@powersync/lib-services-framework';
3
+ import { storage } from '@powersync/service-core';
4
+ import { models } from '../../types/types.js';
5
+ export class PostgresPersistedSyncConfigContent extends storage.PersistedSyncConfigContent {
6
+ db;
7
+ constructor(db, row) {
8
+ super({
9
+ replicationStreamId: Number(row.id),
10
+ sync_rules_content: row.content,
11
+ compiled_plan: row.sync_plan,
12
+ replicationStreamName: row.slot_name,
13
+ storageVersion: row.storage_version ?? storage.LEGACY_STORAGE_VERSION,
14
+ syncConfigState: row.state
15
+ });
16
+ this.db = db;
17
+ }
18
+ async getSyncConfigStatus() {
19
+ const row = await this.db.sql `
20
+ SELECT
21
+ *
22
+ FROM
23
+ sync_rules
24
+ WHERE
25
+ id = ${{ value: this.replicationStreamId, type: 'int4' }}
26
+ `
27
+ .decoded(models.SyncRules)
28
+ .first();
29
+ return row == null ? null : syncConfigStatusFromRow(row);
30
+ }
31
+ }
32
+ function syncConfigStatusFromRow(row) {
33
+ return {
34
+ id: String(row.id),
35
+ replicationStreamId: Number(row.id),
36
+ state: row.state,
37
+ snapshot_done: row.snapshot_done,
38
+ last_checkpoint_lsn: row.last_checkpoint_lsn,
39
+ last_fatal_error: row.last_fatal_error,
40
+ last_keepalive_ts: row.last_keepalive_ts ? new Date(row.last_keepalive_ts) : null,
41
+ last_checkpoint_ts: row.last_checkpoint_ts ? new Date(row.last_checkpoint_ts) : null
42
+ };
43
+ }
44
+ export class PostgresPersistedReplicationStream extends storage.PersistedReplicationStream {
45
+ db;
46
+ row;
47
+ current_lock = null;
48
+ syncConfigContent;
49
+ constructor(db, row) {
50
+ super({
51
+ replicationStreamId: Number(row.id),
52
+ replicationStreamName: row.slot_name,
53
+ state: row.state,
54
+ storageVersion: row.storage_version ?? storage.LEGACY_STORAGE_VERSION
55
+ });
56
+ this.db = db;
57
+ this.row = row;
58
+ this.syncConfigContent = [new PostgresPersistedSyncConfigContent(this.db, this.row)];
59
+ }
60
+ parsed(options) {
61
+ return this.syncConfigContent[0].parsed(options);
62
+ }
63
+ async lock() {
64
+ const manager = new lib_postgres.PostgresLockManager({
65
+ db: this.db,
66
+ name: `sync_rules_${this.replicationStreamId}_${this.replicationStreamName}`
67
+ });
68
+ const lockHandle = await manager.acquire();
69
+ if (!lockHandle) {
70
+ throw new ServiceError(ErrorCode.PSYNC_S1003, `Replication stream is locked by another process, standing by.`);
71
+ }
72
+ const interval = setInterval(async () => {
73
+ try {
74
+ await lockHandle.refresh();
75
+ }
76
+ catch (e) {
77
+ this.logger.error('Failed to refresh lock', e);
78
+ clearInterval(interval);
79
+ }
80
+ }, 30_130);
81
+ return (this.current_lock = {
82
+ sync_rules_id: this.replicationStreamId,
83
+ release: async () => {
84
+ clearInterval(interval);
85
+ return lockHandle.release();
86
+ }
87
+ });
88
+ }
89
+ }
90
+ //# sourceMappingURL=PostgresPersistedSyncConfigContent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresPersistedSyncConfigContent.js","sourceRoot":"","sources":["../../../src/storage/sync-rules/PostgresPersistedSyncConfigContent.ts"],"names":[],"mappings":"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"}
@@ -54,7 +54,7 @@ export function postgresTestSetup(factoryOptions) {
54
54
  await runMigrations({ down: false, up: true });
55
55
  await using storageFactory = new PostgresBucketStorageFactory({
56
56
  config: TEST_CONNECTION_OPTIONS,
57
- slot_name_prefix: 'test_'
57
+ replicationStreamNamePrefix: 'test_'
58
58
  });
59
59
  await truncateTables(storageFactory.db);
60
60
  };
@@ -81,7 +81,7 @@ export function postgresTestSetup(factoryOptions) {
81
81
  }
82
82
  return new PostgresBucketStorageFactory({
83
83
  config: TEST_CONNECTION_OPTIONS,
84
- slot_name_prefix: 'test_'
84
+ replicationStreamNamePrefix: 'test_'
85
85
  });
86
86
  }
87
87
  catch (ex) {
@@ -1 +1 @@
1
- {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/utils/test-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/utils/test-utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,44 +1,32 @@
1
1
  {
2
2
  "name": "@powersync/service-module-postgres-storage",
3
3
  "repository": "https://github.com/powersync-ja/powersync-service",
4
- "types": "dist/@types/index.d.ts",
5
- "version": "0.15.0",
6
- "main": "dist/index.js",
4
+ "version": "0.16.1",
7
5
  "license": "FSL-1.1-ALv2",
8
6
  "type": "module",
9
7
  "publishConfig": {
10
8
  "access": "public"
11
9
  },
12
10
  "exports": {
13
- ".": {
14
- "types": "./dist/@types/index.d.ts",
15
- "import": "./dist/index.js",
16
- "require": "./dist/index.js",
17
- "default": "./dist/index.js"
18
- },
19
- "./types": {
20
- "types": "./dist/@types/index.d.ts",
21
- "import": "./dist/types/types.js",
22
- "require": "./dist/types/types.js",
23
- "default": "./dist/types/types.js"
24
- }
11
+ ".": "./dist/index.js",
12
+ "./types": "./dist/types/types.js"
25
13
  },
26
14
  "dependencies": {
27
15
  "ix": "^5.0.0",
28
16
  "lru-cache": "^10.2.2",
29
17
  "ts-codec": "^1.3.0",
30
18
  "uuid": "^14.0.0",
31
- "@powersync/lib-service-postgres": "0.4.28",
32
- "@powersync/service-core": "1.22.0",
33
- "@powersync/lib-services-framework": "0.9.5",
34
- "@powersync/service-types": "0.15.2",
35
- "@powersync/service-jpgwire": "0.21.19",
19
+ "@powersync/lib-service-postgres": "0.5.0",
20
+ "@powersync/lib-services-framework": "0.9.6",
21
+ "@powersync/service-core": "1.23.1",
22
+ "@powersync/service-types": "0.16.0",
23
+ "@powersync/service-jpgwire": "0.21.20",
36
24
  "@powersync/service-jsonbig": "0.17.13",
37
- "@powersync/service-sync-rules": "0.37.0"
25
+ "@powersync/service-sync-rules": "0.38.0"
38
26
  },
39
27
  "devDependencies": {
40
28
  "typescript": "~6.0.3",
41
- "@powersync/service-core-tests": "0.16.0"
29
+ "@powersync/service-core-tests": "0.17.0"
42
30
  },
43
31
  "scripts": {
44
32
  "build": "tsc -b",
@@ -1,4 +1,4 @@
1
- import { framework, GetIntanceOptions, storage, SyncRulesBucketStorage } from '@powersync/service-core';
1
+ import { framework, GetIntanceOptions, storage } from '@powersync/service-core';
2
2
  import * as pg_wire from '@powersync/service-jpgwire';
3
3
  import crypto from 'crypto';
4
4
  import * as uuid from 'uuid';
@@ -10,17 +10,17 @@ import { getStorageApplicationName } from '../utils/application-name.js';
10
10
  import { NOTIFICATION_CHANNEL, STORAGE_SCHEMA_NAME } from '../utils/db.js';
11
11
  import { notifySyncRulesUpdate } from './batch/PostgresBucketBatch.js';
12
12
  import { PostgresSyncRulesStorage } from './PostgresSyncRulesStorage.js';
13
- import { PostgresPersistedSyncRulesContent } from './sync-rules/PostgresPersistedSyncRulesContent.js';
13
+ import { PostgresPersistedReplicationStream } from './sync-rules/PostgresPersistedSyncConfigContent.js';
14
14
 
15
15
  export type PostgresBucketStorageOptions = {
16
16
  config: NormalizedPostgresStorageConfig;
17
- slot_name_prefix: string;
17
+ replicationStreamNamePrefix: string;
18
18
  };
19
19
 
20
20
  export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
21
21
  [framework.DO_NOT_LOG] = true;
22
22
  readonly db: lib_postgres.DatabaseClient;
23
- public readonly slot_name_prefix: string;
23
+ public readonly replicationStreamNamePrefix: string;
24
24
 
25
25
  private activeStorageCache: storage.SyncRulesBucketStorage | undefined;
26
26
 
@@ -32,7 +32,7 @@ export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
32
32
  notificationChannels: [NOTIFICATION_CHANNEL],
33
33
  applicationName: getStorageApplicationName()
34
34
  });
35
- this.slot_name_prefix = options.slot_name_prefix;
35
+ this.replicationStreamNamePrefix = options.replicationStreamNamePrefix;
36
36
 
37
37
  this.db.registerListener({
38
38
  connectionCreated: async (connection) => this.prepareStatements(connection)
@@ -49,31 +49,31 @@ export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
49
49
  }
50
50
 
51
51
  getInstance(
52
- syncRules: storage.PersistedSyncRulesContent,
52
+ replicationStream: storage.PersistedReplicationStream,
53
53
  options?: GetIntanceOptions
54
54
  ): storage.SyncRulesBucketStorage {
55
- const storage = new PostgresSyncRulesStorage({
55
+ const syncRuleStorage = new PostgresSyncRulesStorage({
56
56
  factory: this,
57
57
  db: this.db,
58
- sync_rules: syncRules,
58
+ replicationStream,
59
59
  batchLimits: this.options.config.batch_limits
60
60
  });
61
61
  if (!options?.skipLifecycleHooks) {
62
- this.iterateListeners((cb) => cb.syncStorageCreated?.(storage));
62
+ this.iterateListeners((cb) => cb.syncStorageCreated?.(syncRuleStorage));
63
63
  }
64
- storage.registerListener({
64
+ syncRuleStorage.registerListener({
65
65
  batchStarted: (batch) => {
66
66
  batch.registerListener({
67
67
  replicationEvent: (payload) => this.iterateListeners((cb) => cb.replicationEvent?.(payload))
68
68
  });
69
69
  }
70
70
  });
71
- return storage;
71
+ return syncRuleStorage;
72
72
  }
73
73
 
74
74
  async getStorageMetrics(): Promise<storage.StorageMetrics> {
75
- const active_sync_rules = await this.getActiveSyncRules({ defaultSchema: 'public' });
76
- if (active_sync_rules == null) {
75
+ const activeSyncConfig = await this.getActiveSyncConfig();
76
+ if (activeSyncConfig == null) {
77
77
  return {
78
78
  operations_size_bytes: 0,
79
79
  parameters_size_bytes: 0,
@@ -153,7 +153,7 @@ export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
153
153
  };
154
154
  }
155
155
 
156
- async updateSyncRules(options: storage.UpdateSyncRulesOptions): Promise<PostgresPersistedSyncRulesContent> {
156
+ async updateSyncRules(options: storage.UpdateSyncRulesOptions): Promise<PostgresPersistedReplicationStream> {
157
157
  const storageVersion =
158
158
  options.storageVersion ?? options.config.parsed.config.storageVersion ?? storage.CURRENT_STORAGE_VERSION;
159
159
  const storageConfig = storage.STORAGE_VERSION_CONFIG[storageVersion];
@@ -200,7 +200,7 @@ export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
200
200
  ${{ type: 'json', value: options.config.plan }},
201
201
  ${{ type: 'varchar', value: storage.SyncRuleState.PROCESSING }},
202
202
  CONCAT(
203
- ${{ type: 'varchar', value: this.slot_name_prefix }},
203
+ ${{ type: 'varchar', value: this.replicationStreamNamePrefix }},
204
204
  (
205
205
  SELECT
206
206
  id
@@ -220,7 +220,7 @@ export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
220
220
 
221
221
  await notifySyncRulesUpdate(this.db, newSyncRulesRow!);
222
222
 
223
- return new PostgresPersistedSyncRulesContent(this.db, newSyncRulesRow!);
223
+ return new PostgresPersistedReplicationStream(this.db, newSyncRulesRow!);
224
224
  });
225
225
  }
226
226
 
@@ -252,28 +252,28 @@ export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
252
252
  `.execute();
253
253
  }
254
254
 
255
- async restartReplication(sync_rules_group_id: number): Promise<void> {
256
- const next = await this.getNextSyncRulesContent();
257
- const active = await this.getActiveSyncRulesContent();
255
+ async restartReplication(replicationStreamId: number): Promise<void> {
256
+ const next = await this.getDeployingSyncConfig();
257
+ const active = await this.getActiveSyncConfig();
258
258
 
259
259
  // In both the below cases, we create a new replication stream.
260
260
  // The current one will continue serving sync requests until the next one has finished processing.
261
- if (next != null && next.id == sync_rules_group_id) {
261
+ if (next != null && next.content.replicationStreamId == replicationStreamId) {
262
262
  // We need to redo the "next" replication stream
263
263
 
264
- await this.updateSyncRules(next.asUpdateOptions());
264
+ await this.updateSyncRules(next.content.asUpdateOptions());
265
265
  // Pro-actively stop replicating
266
266
  await this.db.sql`
267
267
  UPDATE sync_rules
268
268
  SET
269
269
  state = ${{ value: storage.SyncRuleState.STOP, type: 'varchar' }}
270
270
  WHERE
271
- id = ${{ value: next.id, type: 'int4' }}
271
+ id = ${{ value: next.content.replicationStreamId, type: 'int4' }}
272
272
  AND state = ${{ value: storage.SyncRuleState.PROCESSING, type: 'varchar' }}
273
273
  `.execute();
274
- } else if (next == null && active?.id == sync_rules_group_id) {
274
+ } else if (next == null && active?.content.replicationStreamId == replicationStreamId) {
275
275
  // Slot removed for "active" replication stream, while there is no "next" one.
276
- await this.updateSyncRules(active.asUpdateOptions());
276
+ await this.updateSyncRules(active.content.asUpdateOptions());
277
277
 
278
278
  // Pro-actively stop replicating, but still serve clients with existing data
279
279
  await this.db.sql`
@@ -281,10 +281,10 @@ export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
281
281
  SET
282
282
  state = ${{ value: storage.SyncRuleState.ERRORED, type: 'varchar' }}
283
283
  WHERE
284
- id = ${{ value: active.id, type: 'int4' }}
284
+ id = ${{ value: active.content.replicationStreamId, type: 'int4' }}
285
285
  AND state = ${{ value: storage.SyncRuleState.ACTIVE, type: 'varchar' }}
286
286
  `.execute();
287
- } else if (next != null && active?.id == sync_rules_group_id) {
287
+ } else if (next != null && active?.content.replicationStreamId == replicationStreamId) {
288
288
  // Already have "next" replication stream - don't update any.
289
289
 
290
290
  // Pro-actively stop replicating, but still serve clients with existing data
@@ -293,13 +293,13 @@ export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
293
293
  SET
294
294
  state = ${{ value: storage.SyncRuleState.ERRORED, type: 'varchar' }}
295
295
  WHERE
296
- id = ${{ value: active.id, type: 'int4' }}
296
+ id = ${{ value: active.content.replicationStreamId, type: 'int4' }}
297
297
  AND state = ${{ value: storage.SyncRuleState.ACTIVE, type: 'varchar' }}
298
298
  `.execute();
299
299
  }
300
300
  }
301
301
 
302
- async getActiveSyncRulesContent(): Promise<storage.PersistedSyncRulesContent | null> {
302
+ async getActiveSyncConfig(): Promise<storage.ResolvedSyncConfig | null> {
303
303
  const activeRow = await this.db.sql`
304
304
  SELECT
305
305
  *
@@ -319,11 +319,11 @@ export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
319
319
  return null;
320
320
  }
321
321
 
322
- return new PostgresPersistedSyncRulesContent(this.db, activeRow);
322
+ return this.resolvedSyncConfigFromRow(activeRow, { cacheActiveStorage: true });
323
323
  }
324
324
 
325
- async getNextSyncRulesContent(): Promise<storage.PersistedSyncRulesContent | null> {
326
- const nextRow = await this.db.sql`
325
+ async getDeployingSyncConfig(): Promise<storage.ResolvedSyncConfig | null> {
326
+ const row = await this.db.sql`
327
327
  SELECT
328
328
  *
329
329
  FROM
@@ -337,14 +337,11 @@ export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
337
337
  `
338
338
  .decoded(models.SyncRules)
339
339
  .first();
340
- if (!nextRow) {
341
- return null;
342
- }
343
340
 
344
- return new PostgresPersistedSyncRulesContent(this.db, nextRow);
341
+ return row == null ? null : this.resolvedSyncConfigFromRow(row);
345
342
  }
346
343
 
347
- async getReplicatingSyncRules(): Promise<storage.PersistedSyncRulesContent[]> {
344
+ async getReplicatingReplicationStreams(): Promise<storage.PersistedReplicationStream[]> {
348
345
  const rows = await this.db.sql`
349
346
  SELECT
350
347
  *
@@ -357,10 +354,10 @@ export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
357
354
  .decoded(models.SyncRules)
358
355
  .rows();
359
356
 
360
- return rows.map((row) => new PostgresPersistedSyncRulesContent(this.db, row));
357
+ return rows.map((row) => new PostgresPersistedReplicationStream(this.db, row));
361
358
  }
362
359
 
363
- async getStoppedSyncRules(): Promise<storage.PersistedSyncRulesContent[]> {
360
+ async getStoppedReplicationStreams(): Promise<storage.PersistedReplicationStream[]> {
364
361
  const rows = await this.db.sql`
365
362
  SELECT
366
363
  *
@@ -372,24 +369,37 @@ export class PostgresBucketStorageFactory extends storage.BucketStorageFactory {
372
369
  .decoded(models.SyncRules)
373
370
  .rows();
374
371
 
375
- return rows.map((row) => new PostgresPersistedSyncRulesContent(this.db, row));
372
+ return rows.map((row) => new PostgresPersistedReplicationStream(this.db, row));
376
373
  }
377
374
 
378
- async getActiveStorage(): Promise<SyncRulesBucketStorage | null> {
379
- const content = await this.getActiveSyncRulesContent();
380
- if (content == null) {
381
- return null;
382
- }
375
+ private resolvedSyncConfigFromRow(
376
+ row: models.SyncRulesDecoded,
377
+ options: { cacheActiveStorage?: boolean } = {}
378
+ ): storage.ResolvedSyncConfig {
379
+ const stream = new PostgresPersistedReplicationStream(this.db, row);
380
+ const content = stream.syncConfigContent[0];
381
+ const thisFactory = this;
383
382
 
384
- // It is important that this instance is cached.
385
- // Not for the instance construction itself, but to ensure that internal caches on the instance
386
- // are re-used properly.
387
- if (this.activeStorageCache?.group_id == content.id) {
388
- return this.activeStorageCache;
389
- } else {
390
- const instance = this.getInstance(content);
391
- this.activeStorageCache = instance;
392
- return instance;
393
- }
383
+ return {
384
+ content,
385
+ replicationStream: stream,
386
+ get storage() {
387
+ // It is important that this instance is cached.
388
+ // Not for the instance construction itself, but to ensure that internal caches on the instance
389
+ // are re-used properly.
390
+ if (options.cacheActiveStorage) {
391
+ const activeStorageCache = thisFactory.activeStorageCache;
392
+ if (activeStorageCache?.replicationStreamId == stream.replicationStreamId) {
393
+ return activeStorageCache;
394
+ }
395
+ }
396
+
397
+ const instance = thisFactory.getInstance(stream);
398
+ if (options.cacheActiveStorage) {
399
+ thisFactory.activeStorageCache = instance;
400
+ }
401
+ return instance;
402
+ }
403
+ };
394
404
  }
395
405
  }
@@ -3,7 +3,6 @@ import { logger } from '@powersync/lib-services-framework';
3
3
  import { storage } from '@powersync/service-core';
4
4
  import * as pg_wire from '@powersync/service-jpgwire';
5
5
  import { event_types } from '@powersync/service-types';
6
- import { ClientConnectionResponse } from '@powersync/service-types/dist/reports.js';
7
6
  import { toInteger } from 'ix/util/tointeger.js';
8
7
  import { v4 } from 'uuid';
9
8
  import { SdkReporting, SdkReportingDecoded } from '../types/models/SdkReporting.js';
@@ -295,7 +294,7 @@ export class PostgresReportStorage implements storage.ReportStorage {
295
294
  const limit = data.limit || 100;
296
295
  const statement = this.clientsConnectionPagination(data);
297
296
 
298
- const result = await this.db.queryRows<ClientConnectionResponse>(statement.mainQuery);
297
+ const result = await this.db.queryRows<event_types.ClientConnectionResponse>(statement.mainQuery);
299
298
  const items = result.map((item) => ({
300
299
  ...item,
301
300
  /** JS Date conversion to match document schema used for Mongo storage */
@@ -27,7 +27,7 @@ export class PostgresStorageProvider implements storage.StorageProvider {
27
27
  const normalizedConfig = normalizePostgresStorageConfig(decodedConfig);
28
28
  const storageFactory = new PostgresBucketStorageFactory({
29
29
  config: normalizedConfig,
30
- slot_name_prefix: options.resolvedConfig.slot_name_prefix
30
+ replicationStreamNamePrefix: options.resolvedConfig.slot_name_prefix
31
31
  });
32
32
 
33
33
  const reportStorageFactory = new PostgresReportStorage({