@powersync/service-core 0.0.0-dev-20241021151922 → 0.0.0-dev-20241021185145

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 (81) hide show
  1. package/CHANGELOG.md +5 -5
  2. package/dist/api/RouteAPI.d.ts +6 -4
  3. package/dist/api/diagnostics.js +3 -1
  4. package/dist/api/diagnostics.js.map +1 -1
  5. package/dist/api/schema.js +2 -2
  6. package/dist/api/schema.js.map +1 -1
  7. package/dist/replication/AbstractReplicationJob.js +2 -2
  8. package/dist/replication/AbstractReplicationJob.js.map +1 -1
  9. package/dist/replication/ReplicationModule.js +3 -0
  10. package/dist/replication/ReplicationModule.js.map +1 -1
  11. package/dist/routes/configure-fastify.js +12 -12
  12. package/dist/routes/configure-fastify.js.map +1 -1
  13. package/dist/routes/configure-rsocket.js +4 -1
  14. package/dist/routes/configure-rsocket.js.map +1 -1
  15. package/dist/routes/endpoints/admin.js.map +1 -1
  16. package/dist/routes/endpoints/checkpointing.js +14 -82
  17. package/dist/routes/endpoints/checkpointing.js.map +1 -1
  18. package/dist/routes/endpoints/sync-rules.js.map +1 -1
  19. package/dist/routes/router.d.ts +8 -1
  20. package/dist/routes/router.js.map +1 -1
  21. package/dist/storage/BucketStorage.d.ts +19 -15
  22. package/dist/storage/BucketStorage.js +6 -0
  23. package/dist/storage/BucketStorage.js.map +1 -1
  24. package/dist/storage/MongoBucketStorage.d.ts +9 -3
  25. package/dist/storage/MongoBucketStorage.js +21 -4
  26. package/dist/storage/MongoBucketStorage.js.map +1 -1
  27. package/dist/storage/StorageEngine.d.ts +5 -1
  28. package/dist/storage/StorageEngine.js +19 -1
  29. package/dist/storage/StorageEngine.js.map +1 -1
  30. package/dist/storage/StorageProvider.d.ts +8 -1
  31. package/dist/storage/mongo/MongoBucketBatch.d.ts +2 -2
  32. package/dist/storage/mongo/MongoBucketBatch.js +1 -0
  33. package/dist/storage/mongo/MongoBucketBatch.js.map +1 -1
  34. package/dist/storage/mongo/MongoStorageProvider.js +2 -1
  35. package/dist/storage/mongo/MongoStorageProvider.js.map +1 -1
  36. package/dist/storage/mongo/MongoSyncBucketStorage.d.ts +3 -13
  37. package/dist/storage/mongo/MongoSyncBucketStorage.js +7 -35
  38. package/dist/storage/mongo/MongoSyncBucketStorage.js.map +1 -1
  39. package/dist/storage/mongo/MongoWriteCheckpointAPI.d.ts +2 -4
  40. package/dist/storage/mongo/MongoWriteCheckpointAPI.js +7 -13
  41. package/dist/storage/mongo/MongoWriteCheckpointAPI.js.map +1 -1
  42. package/dist/storage/storage-index.d.ts +2 -2
  43. package/dist/storage/storage-index.js +2 -2
  44. package/dist/storage/storage-index.js.map +1 -1
  45. package/dist/storage/{WriteCheckpointAPI.d.ts → write-checkpoint.d.ts} +9 -28
  46. package/dist/storage/{WriteCheckpointAPI.js → write-checkpoint.js} +1 -1
  47. package/dist/storage/write-checkpoint.js.map +1 -0
  48. package/dist/util/config/compound-config-collector.js +1 -2
  49. package/dist/util/config/compound-config-collector.js.map +1 -1
  50. package/dist/util/config/types.d.ts +0 -1
  51. package/dist/util/protocol-types.d.ts +2 -1
  52. package/package.json +5 -5
  53. package/src/api/RouteAPI.ts +7 -4
  54. package/src/api/diagnostics.ts +3 -1
  55. package/src/api/schema.ts +3 -3
  56. package/src/replication/AbstractReplicationJob.ts +2 -2
  57. package/src/replication/ReplicationModule.ts +4 -0
  58. package/src/routes/configure-fastify.ts +16 -17
  59. package/src/routes/configure-rsocket.ts +7 -2
  60. package/src/routes/endpoints/admin.ts +2 -2
  61. package/src/routes/endpoints/checkpointing.ts +1 -8
  62. package/src/routes/endpoints/sync-rules.ts +1 -0
  63. package/src/routes/router.ts +7 -1
  64. package/src/storage/BucketStorage.ts +23 -16
  65. package/src/storage/MongoBucketStorage.ts +39 -9
  66. package/src/storage/StorageEngine.ts +24 -2
  67. package/src/storage/StorageProvider.ts +9 -1
  68. package/src/storage/mongo/MongoBucketBatch.ts +3 -2
  69. package/src/storage/mongo/MongoStorageProvider.ts +2 -1
  70. package/src/storage/mongo/MongoSyncBucketStorage.ts +9 -52
  71. package/src/storage/mongo/MongoWriteCheckpointAPI.ts +8 -16
  72. package/src/storage/storage-index.ts +2 -2
  73. package/src/storage/{WriteCheckpointAPI.ts → write-checkpoint.ts} +12 -30
  74. package/src/util/config/compound-config-collector.ts +1 -2
  75. package/src/util/config/types.ts +0 -1
  76. package/src/util/protocol-types.ts +1 -1
  77. package/test/src/compacting.test.ts +13 -15
  78. package/test/src/data_storage.test.ts +56 -56
  79. package/test/src/sync.test.ts +10 -9
  80. package/tsconfig.tsbuildinfo +1 -1
  81. package/dist/storage/WriteCheckpointAPI.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MongoWriteCheckpointAPI.js","sourceRoot":"","sources":["../../../src/storage/mongo/MongoWriteCheckpointAPI.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MongoWriteCheckpointAPI.js","sourceRoot":"","sources":["../../../src/storage/mongo/MongoWriteCheckpointAPI.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,6 @@ export * from './ReplicationEventPayload.js';
4
4
  export * from './SourceEntity.js';
5
5
  export * from './SourceTable.js';
6
6
  export * from './StorageEngine.js';
7
- export * from './mongo/config.js';
8
7
  export * from './mongo/db.js';
9
8
  export * from './mongo/models.js';
10
9
  export * from './mongo/MongoBucketBatch.js';
@@ -17,4 +16,5 @@ export * from './mongo/MongoSyncRulesLock.js';
17
16
  export * from './mongo/OperationBatch.js';
18
17
  export * from './mongo/PersistedBatch.js';
19
18
  export * from './mongo/util.js';
20
- export * from './WriteCheckpointAPI.js';
19
+ export * from './mongo/config.js';
20
+ export * from './write-checkpoint.js';
@@ -4,7 +4,6 @@ export * from './ReplicationEventPayload.js';
4
4
  export * from './SourceEntity.js';
5
5
  export * from './SourceTable.js';
6
6
  export * from './StorageEngine.js';
7
- export * from './mongo/config.js';
8
7
  export * from './mongo/db.js';
9
8
  export * from './mongo/models.js';
10
9
  export * from './mongo/MongoBucketBatch.js';
@@ -17,5 +16,6 @@ export * from './mongo/MongoSyncRulesLock.js';
17
16
  export * from './mongo/OperationBatch.js';
18
17
  export * from './mongo/PersistedBatch.js';
19
18
  export * from './mongo/util.js';
20
- export * from './WriteCheckpointAPI.js';
19
+ export * from './mongo/config.js';
20
+ export * from './write-checkpoint.js';
21
21
  //# sourceMappingURL=storage-index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage-index.js","sourceRoot":"","sources":["../../src/storage/storage-index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"storage-index.js","sourceRoot":"","sources":["../../src/storage/storage-index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,2CAA2C,CAAC;AAC1D,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC"}
@@ -23,18 +23,18 @@ export interface CustomWriteCheckpointFilters extends BaseWriteCheckpointIdentif
23
23
  */
24
24
  sync_rules_id: number;
25
25
  }
26
- export interface BatchedCustomWriteCheckpointOptions extends BaseWriteCheckpointIdentifier {
26
+ export interface CustomWriteCheckpointOptions extends CustomWriteCheckpointFilters {
27
27
  /**
28
28
  * A supplied incrementing Write Checkpoint number
29
29
  */
30
30
  checkpoint: bigint;
31
31
  }
32
- export interface CustomWriteCheckpointOptions extends BatchedCustomWriteCheckpointOptions {
33
- /**
34
- * Sync rules which were active when this checkpoint was created.
35
- */
36
- sync_rules_id: number;
37
- }
32
+ /**
33
+ * Options for creating a custom Write Checkpoint in a batch.
34
+ * A {@link BucketStorageBatch} is already associated with a Sync Rules instance.
35
+ * The `sync_rules_id` is not required here.
36
+ */
37
+ export type BatchedCustomWriteCheckpointOptions = Omit<CustomWriteCheckpointOptions, 'sync_rules_id'>;
38
38
  /**
39
39
  * Managed Write Checkpoints are a mapping of User ID to replication HEAD
40
40
  */
@@ -45,30 +45,11 @@ export interface ManagedWriteCheckpointFilters extends BaseWriteCheckpointIdenti
45
45
  heads: Record<string, string>;
46
46
  }
47
47
  export type ManagedWriteCheckpointOptions = ManagedWriteCheckpointFilters;
48
- export type SyncStorageLastWriteCheckpointFilters = BaseWriteCheckpointIdentifier | ManagedWriteCheckpointFilters;
49
48
  export type LastWriteCheckpointFilters = CustomWriteCheckpointFilters | ManagedWriteCheckpointFilters;
50
- export interface BaseWriteCheckpointAPI {
51
- readonly writeCheckpointMode: WriteCheckpointMode;
52
- setWriteCheckpointMode(mode: WriteCheckpointMode): void;
53
- createManagedWriteCheckpoint(checkpoint: ManagedWriteCheckpointOptions): Promise<bigint>;
54
- }
55
- /**
56
- * Write Checkpoint API to be used in conjunction with a {@link SyncRulesBucketStorage}.
57
- * This storage corresponds with a set of sync rules. These APIs don't require specifying a
58
- * sync rules id.
59
- */
60
- export interface SyncStorageWriteCheckpointAPI extends BaseWriteCheckpointAPI {
61
- batchCreateCustomWriteCheckpoints(checkpoints: BatchedCustomWriteCheckpointOptions[]): Promise<void>;
62
- createCustomWriteCheckpoint(checkpoint: BatchedCustomWriteCheckpointOptions): Promise<bigint>;
63
- lastWriteCheckpoint(filters: SyncStorageLastWriteCheckpointFilters): Promise<bigint | null>;
64
- }
65
- /**
66
- * Write Checkpoint API which is interfaced directly with the storage layer. This requires
67
- * sync rules identifiers for custom write checkpoints.
68
- */
69
- export interface WriteCheckpointAPI extends BaseWriteCheckpointAPI {
49
+ export interface WriteCheckpointAPI {
70
50
  batchCreateCustomWriteCheckpoints(checkpoints: CustomWriteCheckpointOptions[]): Promise<void>;
71
51
  createCustomWriteCheckpoint(checkpoint: CustomWriteCheckpointOptions): Promise<bigint>;
52
+ createManagedWriteCheckpoint(checkpoint: ManagedWriteCheckpointOptions): Promise<bigint>;
72
53
  lastWriteCheckpoint(filters: LastWriteCheckpointFilters): Promise<bigint | null>;
73
54
  }
74
55
  export declare const DEFAULT_WRITE_CHECKPOINT_MODE = WriteCheckpointMode.MANAGED;
@@ -13,4 +13,4 @@ export var WriteCheckpointMode;
13
13
  WriteCheckpointMode["MANAGED"] = "managed";
14
14
  })(WriteCheckpointMode || (WriteCheckpointMode = {}));
15
15
  export const DEFAULT_WRITE_CHECKPOINT_MODE = WriteCheckpointMode.MANAGED;
16
- //# sourceMappingURL=WriteCheckpointAPI.js.map
16
+ //# sourceMappingURL=write-checkpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-checkpoint.js","sourceRoot":"","sources":["../../src/storage/write-checkpoint.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,mBAYX;AAZD,WAAY,mBAAmB;IAC7B;;;OAGG;IACH,wCAAiB,CAAA;IACjB;;;;OAIG;IACH,0CAAmB,CAAA;AACrB,CAAC,EAZW,mBAAmB,KAAnB,mBAAmB,QAY9B;AAsDD,MAAM,CAAC,MAAM,6BAA6B,GAAG,mBAAmB,CAAC,OAAO,CAAC"}
@@ -75,8 +75,7 @@ export class CompoundConfigCollector {
75
75
  },
76
76
  // TODO maybe move this out of the connection or something
77
77
  // slot_name_prefix: connections[0]?.slot_name_prefix ?? 'powersync_'
78
- slot_name_prefix: 'powersync_',
79
- parameters: baseConfig.parameters ?? {}
78
+ slot_name_prefix: 'powersync_'
80
79
  };
81
80
  return config;
82
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"compound-config-collector.js","sourceRoot":"","sources":["../../../src/util/config/compound-config-collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compound-config-collector.js","sourceRoot":"","sources":["../../../src/util/config/compound-config-collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,KAAK,IAAI,MAAM,0BAA0B,CAAC;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kDAAkD,CAAC;AAC7F,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,sDAAsD,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AA4B5F,MAAM,iBAAiB,GAAG,eAAe,CAAC;AAE1C,MAAM,yBAAyB,GAAmC;IAChE,gBAAgB,EAAE,CAAC,IAAI,qBAAqB,EAAE,EAAE,IAAI,yBAAyB,EAAE,EAAE,IAAI,uBAAuB,EAAE,CAAC;IAC/G,mBAAmB,EAAE;QACnB,IAAI,wBAAwB,EAAE;QAC9B,IAAI,4BAA4B,EAAE;QAClC,IAAI,wBAAwB,EAAE;KAC/B;CACF,CAAC;AAEF,MAAM,OAAO,uBAAuB;IAClC,YAAsB,UAA0C,yBAAyB;QAAnE,YAAO,GAAP,OAAO,CAA4D;IAAG,CAAC;IAE7F;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,eAA6B,EAAE;QACjD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAE9D,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,WAAW,IAAI,EAAE,CAAC;QAC9D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;QAC3D,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE5E,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAEhC,IAAI,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC;QACvD,IAAI,OAAO,SAAS,IAAI,QAAQ,EAAE,CAAC;YACjC,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC;QAED,KAAK,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;YAC1B,UAAU,CAAC,GAAG,CACZ,IAAI,IAAI,CAAC,kBAAkB,CACzB,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAClG,CACF,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,iBAAiB,CAAC,CAAC;QAE1G,IAAI,MAAgC,CAAC;QACrC,IAAI,UAAU,CAAC,GAAG,EAAE,SAAS,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC;YAC/E,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAEzE,IAAI,aAAa,GAAa,UAAU,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC;QAErE,IAAI,MAAM,GAA4B;YACpC,WAAW,EAAE,UAAU;YACvB,WAAW,EAAE,UAAU,CAAC,WAAW,EAAE,WAAW,IAAI,EAAE;YACtD,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,eAAe,EAAE,QAAQ;YACzB,+DAA+D;YAC/D,mEAAmE;YACnE,mBAAmB,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;YACvD,UAAU,EAAE,UAAU,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE;YACxC,GAAG,EAAE;gBACH,SAAS,EAAE,UAAU,CAAC,GAAG,EAAE,SAAS,IAAI,KAAK;gBAC7C,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,WAAW,IAAI,KAAK;gBACjD,aAAa,EAAE,UAAU,CAAC,GAAG,EAAE,aAAa;gBAC5C,QAAQ,EAAE,UAAU,CAAC,GAAG,EAAE,QAAQ,IAAI,KAAK;gBAC3C,OAAO,EAAE,MAAM;aAChB;YACD,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,IAAI;YAC7B,UAAU;YACV,aAAa;YAEb,oBAAoB,EAAE,IAAI,EAAE,QAAQ;YACpC,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,EAAE;YACnC,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,SAAS,EAAE;gBACT,yBAAyB,EAAE,UAAU,CAAC,SAAS,EAAE,yBAAyB,IAAI,KAAK;gBACnF,yBAAyB,EACvB,UAAU,CAAC,SAAS,EAAE,yBAAyB,IAAI,0CAA0C;aAChG;YACD,0DAA0D;YAC1D,qEAAqE;YACrE,gBAAgB,EAAE,YAAY;SAC/B,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,iBAAiB,CAAC,aAA2B;QAC3D,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBAC1D,IAAI,UAAU,EAAE,CAAC;oBACf,OAAO,UAAU,CAAC;gBACpB,CAAC;gBACD,MAAM,CAAC,KAAK,CACV,2CAA2C,SAAS,CAAC,IAAI,iDAAiD,CAC3G,CAAC;YACJ,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACZ,yCAAyC;gBACzC,MAAM,IAAI,KAAK,CAAC,kCAAkC,SAAS,CAAC,IAAI,8BAA8B,EAAE,EAAE,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,uFAAuF,CAAC,CAAC;IAC3G,CAAC;IAES,KAAK,CAAC,gBAAgB,CAC9B,UAAsC,EACtC,YAA0B;QAE1B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACzD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;gBACjE,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,MAAM,CAAC,KAAK,CACV,qCAAqC,SAAS,CAAC,IAAI,iDAAiD,CACrG,CAAC;YACJ,CAAC;YAAC,OAAO,EAAE,EAAE,CAAC;gBACZ,yCAAyC;gBACzC,MAAM,IAAI,KAAK,CAAC,sCAAsC,SAAS,CAAC,IAAI,8BAA8B,EAAE,EAAE,CAAC,CAAC;YAC1G,CAAC;QACH,CAAC;QACD,OAAO;YACL,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;CACF"}
@@ -56,5 +56,4 @@ export type ResolvedPowerSyncConfig = {
56
56
  };
57
57
  /** Prefix for postgres replication slot names. May eventually be connection-specific. */
58
58
  slot_name_prefix: string;
59
- parameters: Record<string, number | string | boolean | null>;
60
59
  };
@@ -71,7 +71,7 @@ export type StreamingSyncLine = StreamingSyncData | StreamingSyncCheckpoint | St
71
71
  * 64-bit unsigned number, as a base-10 string.
72
72
  */
73
73
  export type OpId = string;
74
- export interface Checkpoint {
74
+ interface Checkpoint {
75
75
  last_op_id: OpId;
76
76
  write_checkpoint?: OpId;
77
77
  buckets: BucketChecksum[];
@@ -119,3 +119,4 @@ export interface BucketChecksum {
119
119
  */
120
120
  count: number;
121
121
  }
122
+ export {};
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "0.0.0-dev-20241021151922",
8
+ "version": "0.0.0-dev-20241021185145",
9
9
  "main": "dist/index.js",
10
10
  "license": "FSL-1.1-Apache-2.0",
11
11
  "type": "module",
@@ -33,11 +33,11 @@
33
33
  "uuid": "^9.0.1",
34
34
  "winston": "^3.13.0",
35
35
  "yaml": "^2.3.2",
36
- "@powersync/lib-services-framework": "0.0.0-dev-20241021151922",
36
+ "@powersync/lib-services-framework": "0.0.0-dev-20241021185145",
37
37
  "@powersync/service-jsonbig": "0.17.10",
38
- "@powersync/service-rsocket-router": "0.0.0-dev-20241021151922",
39
- "@powersync/service-sync-rules": "0.0.0-dev-20241021151922",
40
- "@powersync/service-types": "0.0.0-dev-20241021151922"
38
+ "@powersync/service-rsocket-router": "0.0.0-dev-20241021185145",
39
+ "@powersync/service-sync-rules": "0.0.0-dev-20241021185145",
40
+ "@powersync/service-types": "0.0.0-dev-20241021185145"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/async": "^3.2.24",
@@ -1,6 +1,6 @@
1
1
  import { SqlSyncRules, TablePattern } from '@powersync/service-sync-rules';
2
2
  import * as types from '@powersync/service-types';
3
- import { ParseSyncRulesOptions } from '../storage/BucketStorage.js';
3
+ import { ParseSyncRulesOptions, SyncRulesBucketStorage } from '../storage/BucketStorage.js';
4
4
 
5
5
  export interface PatternResult {
6
6
  schema: string;
@@ -10,6 +10,10 @@ export interface PatternResult {
10
10
  table?: types.TableInfo;
11
11
  }
12
12
 
13
+ export interface ReplicationLagOptions {
14
+ bucketStorage: SyncRulesBucketStorage;
15
+ }
16
+
13
17
  /**
14
18
  * Describes all the methods currently required to service the sync API endpoints.
15
19
  */
@@ -17,7 +21,7 @@ export interface RouteAPI {
17
21
  /**
18
22
  * @returns basic identification of the connection
19
23
  */
20
- getSourceConfig(): Promise<types.configFile.DataSourceConfig>;
24
+ getSourceConfig(): Promise<types.configFile.ResolvedDataSourceConfig>;
21
25
 
22
26
  /**
23
27
  * Checks the current connection status of the data source.
@@ -42,9 +46,8 @@ export interface RouteAPI {
42
46
  /**
43
47
  * @returns The replication lag: that is the amount of data which has not been
44
48
  * replicated yet, in bytes.
45
- * @param {string} syncRulesId An identifier representing which set of sync rules the lag is required for.
46
49
  */
47
- getReplicationLag(syncRulesId: string): Promise<number | undefined>;
50
+ getReplicationLag(options: ReplicationLagOptions): Promise<number | undefined>;
48
51
 
49
52
  /**
50
53
  * Get the current LSN or equivalent replication HEAD position identifier
@@ -78,7 +78,9 @@ export async function getSyncRulesStatus(
78
78
 
79
79
  if (systemStorage) {
80
80
  try {
81
- replication_lag_bytes = await apiHandler.getReplicationLag(systemStorage.slot_name);
81
+ replication_lag_bytes = await apiHandler.getReplicationLag({
82
+ bucketStorage: systemStorage
83
+ });
82
84
  } catch (e) {
83
85
  // Ignore
84
86
  logger.warn(`Unable to get replication lag`, e);
package/src/api/schema.ts CHANGED
@@ -16,9 +16,9 @@ export async function getConnectionsSchema(api: api.RouteAPI): Promise<internal_
16
16
  return {
17
17
  connections: [
18
18
  {
19
- schemas: await api.getConnectionSchema(),
20
- tag: baseConfig.tag!,
21
- id: baseConfig.id
19
+ id: baseConfig.id,
20
+ tag: baseConfig.tag,
21
+ schemas: await api.getConnectionSchema()
22
22
  }
23
23
  ],
24
24
  defaultConnectionTag: baseConfig.tag!,
@@ -16,7 +16,7 @@ export abstract class AbstractReplicationJob {
16
16
  protected isReplicatingPromise: Promise<void> | null = null;
17
17
 
18
18
  protected constructor(protected options: AbstractReplicationJobOptions) {
19
- this.logger = logger.child({ name: `ReplicationJob: ${options.id}` });
19
+ this.logger = logger.child({ name: `ReplicationJob: ${this.id}` });
20
20
  }
21
21
 
22
22
  /**
@@ -52,7 +52,7 @@ export abstract class AbstractReplicationJob {
52
52
  * Safely stop the replication process
53
53
  */
54
54
  public async stop(): Promise<void> {
55
- this.logger.info(`Stopping ${this.id} replication job for sync rule iteration: ${this.storage.group_id}`);
55
+ this.logger.info(`Stopping replication job for sync rule iteration: ${this.storage.group_id}`);
56
56
  this.abortController.abort();
57
57
  await this.isReplicatingPromise;
58
58
  }
@@ -58,6 +58,10 @@ export abstract class ReplicationModule<TConfig extends DataSourceConfig> extend
58
58
  return;
59
59
  }
60
60
 
61
+ if (!matchingConfig.length) {
62
+ return;
63
+ }
64
+
61
65
  if (matchingConfig.length > 1) {
62
66
  this.logger.warning(
63
67
  `Multiple data sources of type ${this.type} found in the configuration. Only the first will be used.`
@@ -8,7 +8,7 @@ import { CHECKPOINT_ROUTES } from './endpoints/checkpointing.js';
8
8
  import { SYNC_RULES_ROUTES } from './endpoints/sync-rules.js';
9
9
  import { SYNC_STREAM_ROUTES } from './endpoints/sync-stream.js';
10
10
  import { createRequestQueueHook, CreateRequestQueueParams } from './hooks.js';
11
- import { RouteDefinition } from './router.js';
11
+ import { RouteDefinition, RouterServiceContext } from './router.js';
12
12
 
13
13
  /**
14
14
  * A list of route definitions to be registered as endpoints.
@@ -56,6 +56,19 @@ export const DEFAULT_ROUTE_OPTIONS = {
56
56
  */
57
57
  export function configureFastifyServer(server: fastify.FastifyInstance, options: FastifyServerConfig) {
58
58
  const { service_context, routes = DEFAULT_ROUTE_OPTIONS } = options;
59
+
60
+ const generateContext = async () => {
61
+ const { routerEngine } = service_context;
62
+ if (!routerEngine) {
63
+ throw new Error(`RouterEngine has not been registered`);
64
+ }
65
+
66
+ return {
67
+ user_id: undefined,
68
+ service_context: service_context as RouterServiceContext
69
+ };
70
+ };
71
+
59
72
  /**
60
73
  * Fastify creates an encapsulated context for each `.register` call.
61
74
  * Creating a separate context here to separate the concurrency limits for Admin APIs
@@ -63,16 +76,7 @@ export function configureFastifyServer(server: fastify.FastifyInstance, options:
63
76
  * https://github.com/fastify/fastify/blob/main/docs/Reference/Encapsulation.md
64
77
  */
65
78
  server.register(async function (childContext) {
66
- registerFastifyRoutes(
67
- childContext,
68
- async () => {
69
- return {
70
- user_id: undefined,
71
- service_context
72
- };
73
- },
74
- routes.api?.routes ?? DEFAULT_ROUTE_OPTIONS.api.routes
75
- );
79
+ registerFastifyRoutes(childContext, generateContext, routes.api?.routes ?? DEFAULT_ROUTE_OPTIONS.api.routes);
76
80
  // Limit the active concurrent requests
77
81
  childContext.addHook(
78
82
  'onRequest',
@@ -84,12 +88,7 @@ export function configureFastifyServer(server: fastify.FastifyInstance, options:
84
88
  server.register(async function (childContext) {
85
89
  registerFastifyRoutes(
86
90
  childContext,
87
- async () => {
88
- return {
89
- user_id: undefined,
90
- service_context
91
- };
92
- },
91
+ generateContext,
93
92
  routes.sync_stream?.routes ?? DEFAULT_ROUTE_OPTIONS.sync_stream.routes
94
93
  );
95
94
  // Limit the active concurrent requests
@@ -8,7 +8,7 @@ import { ServiceContext } from '../system/ServiceContext.js';
8
8
  import { generateContext, getTokenFromHeader } from './auth.js';
9
9
  import { syncStreamReactive } from './endpoints/socket-route.js';
10
10
  import { RSocketContextMeta, SocketRouteGenerator } from './router-socket.js';
11
- import { Context } from './router.js';
11
+ import { Context, RouterServiceContext } from './router.js';
12
12
 
13
13
  export type RSockerRouterConfig = {
14
14
  service_context: ServiceContext;
@@ -36,12 +36,17 @@ export function configureRSocket(router: ReactiveSocketRouter<Context>, options:
36
36
  if (context?.token_payload == null) {
37
37
  throw new errors.AuthorizationError(token_errors ?? 'Authentication required');
38
38
  }
39
+
40
+ if (!service_context.routerEngine) {
41
+ throw new Error(`RouterEngine has not been registered`);
42
+ }
43
+
39
44
  return {
40
45
  token,
41
46
  user_agent,
42
47
  ...context,
43
48
  token_errors: token_errors,
44
- service_context
49
+ service_context: service_context as RouterServiceContext
45
50
  };
46
51
  } else {
47
52
  throw new errors.AuthorizationError('No token provided');
@@ -137,8 +137,8 @@ export const reprocess = routeDefinition({
137
137
  connections: [
138
138
  {
139
139
  // Previously the connection was asserted with `!`
140
- tag: baseConfig!.tag!,
141
- id: baseConfig!.id,
140
+ tag: baseConfig.tag,
141
+ id: baseConfig.id,
142
142
  slot_name: new_rules.slot_name
143
143
  }
144
144
  ]
@@ -1,7 +1,6 @@
1
1
  import { logger, router, schema } from '@powersync/lib-services-framework';
2
2
  import * as t from 'ts-codec';
3
3
 
4
- import * as framework from '@powersync/lib-services-framework';
5
4
  import * as util from '../../util/util-index.js';
6
5
  import { authUser } from '../auth.js';
7
6
  import { routeDefinition } from '../router.js';
@@ -64,13 +63,7 @@ export const writeCheckpoint2 = routeDefinition({
64
63
  storageEngine: { activeBucketStorage }
65
64
  } = service_context;
66
65
 
67
- const activeSyncRules = await activeBucketStorage.getActiveSyncRulesContent();
68
- if (!activeSyncRules) {
69
- throw new framework.errors.ValidationError(`Cannot create Write Checkpoint since no sync rules are active.`);
70
- }
71
-
72
- using syncBucketStorage = activeBucketStorage.getInstance(activeSyncRules);
73
- const writeCheckpoint = await syncBucketStorage.createManagedWriteCheckpoint({
66
+ const writeCheckpoint = await activeBucketStorage.createManagedWriteCheckpoint({
74
67
  user_id: full_user_id,
75
68
  heads: { '1': currentCheckpoint }
76
69
  });
@@ -3,6 +3,7 @@ import { SqlSyncRules, SyncRulesErrors } from '@powersync/service-sync-rules';
3
3
  import type { FastifyPluginAsync } from 'fastify';
4
4
  import * as t from 'ts-codec';
5
5
 
6
+ import * as system from '../../system/system-index.js';
6
7
  import { authApi } from '../auth.js';
7
8
  import { routeDefinition } from '../router.js';
8
9
  import { RouteAPI } from '../../api/RouteAPI.js';
@@ -1,13 +1,19 @@
1
1
  import { router } from '@powersync/lib-services-framework';
2
2
  import * as auth from '../auth/auth-index.js';
3
3
  import { ServiceContext } from '../system/ServiceContext.js';
4
+ import { RouterEngine } from './RouterEngine.js';
4
5
 
6
+ /**
7
+ * The {@link RouterEngine} must be provided for these routes
8
+ */
9
+ export type RouterServiceContext = ServiceContext & { routerEngine: RouterEngine };
5
10
  /**
6
11
  * Common context for routes
7
12
  */
8
13
  export type Context = {
9
14
  user_id?: string;
10
- service_context: ServiceContext;
15
+
16
+ service_context: RouterServiceContext;
11
17
 
12
18
  token_payload?: auth.JwtPayload;
13
19
  token_errors?: string[];
@@ -12,15 +12,16 @@ import * as util from '../util/util-index.js';
12
12
  import { ReplicationEventPayload } from './ReplicationEventPayload.js';
13
13
  import { SourceEntityDescriptor } from './SourceEntity.js';
14
14
  import { SourceTable } from './SourceTable.js';
15
- import { BatchedCustomWriteCheckpointOptions, ReplicaId } from './storage-index.js';
16
- import { SyncStorageWriteCheckpointAPI } from './WriteCheckpointAPI.js';
15
+ import { BatchedCustomWriteCheckpointOptions, ReplicaId, WriteCheckpointAPI } from './storage-index.js';
17
16
 
18
17
  export interface BucketStorageFactoryListener extends DisposableListener {
19
18
  syncStorageCreated: (storage: SyncRulesBucketStorage) => void;
20
19
  replicationEvent: (event: ReplicationEventPayload) => void;
21
20
  }
22
21
 
23
- export interface BucketStorageFactory extends DisposableObserverClient<BucketStorageFactoryListener> {
22
+ export interface BucketStorageFactory
23
+ extends DisposableObserverClient<BucketStorageFactoryListener>,
24
+ WriteCheckpointAPI {
24
25
  /**
25
26
  * Update sync rules from configuration, if changed.
26
27
  */
@@ -105,20 +106,22 @@ export interface BucketStorageFactory extends DisposableObserverClient<BucketSto
105
106
  getPowerSyncInstanceId(): Promise<string>;
106
107
  }
107
108
 
108
- export interface WriteCheckpoint {
109
- base: ActiveCheckpoint;
110
- writeCheckpoint: bigint | null;
111
- }
112
-
113
- export interface ActiveCheckpoint {
109
+ export interface Checkpoint {
114
110
  readonly checkpoint: util.OpId;
115
111
  readonly lsn: string | null;
112
+ }
116
113
 
114
+ export interface ActiveCheckpoint extends Checkpoint {
117
115
  hasSyncRules(): boolean;
118
116
 
119
117
  getBucketStorage(): Promise<SyncRulesBucketStorage | null>;
120
118
  }
121
119
 
120
+ export interface WriteCheckpoint {
121
+ base: ActiveCheckpoint;
122
+ writeCheckpoint: bigint | null;
123
+ }
124
+
122
125
  export interface StorageMetrics {
123
126
  /**
124
127
  * Size of operations (bucket_data)
@@ -205,9 +208,7 @@ export interface SyncRulesBucketStorageListener extends DisposableListener {
205
208
  batchStarted: (batch: BucketStorageBatch) => void;
206
209
  }
207
210
 
208
- export interface SyncRulesBucketStorage
209
- extends DisposableObserverClient<SyncRulesBucketStorageListener>,
210
- SyncStorageWriteCheckpointAPI {
211
+ export interface SyncRulesBucketStorage extends DisposableObserverClient<SyncRulesBucketStorageListener> {
211
212
  readonly group_id: number;
212
213
  readonly slot_name: string;
213
214
 
@@ -220,7 +221,7 @@ export interface SyncRulesBucketStorage
220
221
  callback: (batch: BucketStorageBatch) => Promise<void>
221
222
  ): Promise<FlushedResult | null>;
222
223
 
223
- getCheckpoint(): Promise<{ checkpoint: util.OpId }>;
224
+ getCheckpoint(): Promise<Checkpoint>;
224
225
 
225
226
  getParsedSyncRules(options: ParseSyncRulesOptions): SqlSyncRules;
226
227
 
@@ -386,8 +387,14 @@ export type SaveOp = 'insert' | 'update' | 'delete';
386
387
 
387
388
  export type SaveOptions = SaveInsert | SaveUpdate | SaveDelete;
388
389
 
390
+ export enum SaveOperationTag {
391
+ INSERT = 'insert',
392
+ UPDATE = 'update',
393
+ DELETE = 'delete'
394
+ }
395
+
389
396
  export interface SaveInsert {
390
- tag: 'insert';
397
+ tag: SaveOperationTag.INSERT;
391
398
  sourceTable: SourceTable;
392
399
  before?: undefined;
393
400
  beforeReplicaId?: undefined;
@@ -396,7 +403,7 @@ export interface SaveInsert {
396
403
  }
397
404
 
398
405
  export interface SaveUpdate {
399
- tag: 'update';
406
+ tag: SaveOperationTag.UPDATE;
400
407
  sourceTable: SourceTable;
401
408
 
402
409
  /**
@@ -415,7 +422,7 @@ export interface SaveUpdate {
415
422
  }
416
423
 
417
424
  export interface SaveDelete {
418
- tag: 'delete';
425
+ tag: SaveOperationTag.DELETE;
419
426
  sourceTable: SourceTable;
420
427
  before?: SqliteRow;
421
428
  beforeReplicaId: ReplicaId;