@powersync/service-core 0.0.0-dev-20240718134716 → 0.0.0-dev-20240918082156
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.
- package/CHANGELOG.md +89 -6
- package/dist/api/RouteAPI.d.ts +68 -0
- package/dist/api/RouteAPI.js +2 -0
- package/dist/api/RouteAPI.js.map +1 -0
- package/dist/api/api-index.d.ts +1 -0
- package/dist/api/api-index.js +1 -0
- package/dist/api/api-index.js.map +1 -1
- package/dist/api/diagnostics.d.ts +4 -4
- package/dist/api/diagnostics.js +11 -65
- package/dist/api/diagnostics.js.map +1 -1
- package/dist/api/schema.d.ts +3 -5
- package/dist/api/schema.js +9 -79
- package/dist/api/schema.js.map +1 -1
- package/dist/auth/KeyStore.d.ts +7 -4
- package/dist/auth/KeyStore.js +1 -1
- package/dist/auth/KeyStore.js.map +1 -1
- package/dist/auth/auth-index.d.ts +0 -1
- package/dist/auth/auth-index.js +0 -1
- package/dist/auth/auth-index.js.map +1 -1
- package/dist/entry/cli-entry.js +4 -2
- package/dist/entry/cli-entry.js.map +1 -1
- package/dist/entry/commands/compact-action.d.ts +2 -0
- package/dist/entry/commands/compact-action.js +52 -0
- package/dist/entry/commands/compact-action.js.map +1 -0
- package/dist/entry/commands/migrate-action.js +4 -5
- package/dist/entry/commands/migrate-action.js.map +1 -1
- package/dist/entry/commands/teardown-action.js +2 -2
- package/dist/entry/commands/teardown-action.js.map +1 -1
- package/dist/entry/entry-index.d.ts +1 -0
- package/dist/entry/entry-index.js +1 -0
- package/dist/entry/entry-index.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/metrics/Metrics.d.ts +6 -5
- package/dist/metrics/Metrics.js +53 -10
- package/dist/metrics/Metrics.js.map +1 -1
- package/dist/migrations/db/migrations/1684951997326-init.d.ts +2 -2
- package/dist/migrations/db/migrations/1684951997326-init.js +4 -2
- package/dist/migrations/db/migrations/1684951997326-init.js.map +1 -1
- package/dist/migrations/db/migrations/1702295701188-sync-rule-state.d.ts +2 -2
- package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js +4 -2
- package/dist/migrations/db/migrations/1702295701188-sync-rule-state.js.map +1 -1
- package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.d.ts +2 -2
- package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.js +4 -2
- package/dist/migrations/db/migrations/1711543888062-write-checkpoint-index.js.map +1 -1
- package/dist/migrations/migrations.d.ts +8 -0
- package/dist/migrations/migrations.js +19 -7
- package/dist/migrations/migrations.js.map +1 -1
- package/dist/modules/AbstractModule.d.ts +26 -0
- package/dist/modules/AbstractModule.js +11 -0
- package/dist/modules/AbstractModule.js.map +1 -0
- package/dist/modules/ModuleManager.d.ts +11 -0
- package/dist/modules/ModuleManager.js +32 -0
- package/dist/modules/ModuleManager.js.map +1 -0
- package/dist/modules/modules-index.d.ts +2 -0
- package/dist/modules/modules-index.js +3 -0
- package/dist/modules/modules-index.js.map +1 -0
- package/dist/replication/AbstractReplicationJob.d.ts +38 -0
- package/dist/replication/AbstractReplicationJob.js +51 -0
- package/dist/replication/AbstractReplicationJob.js.map +1 -0
- package/dist/replication/AbstractReplicator.d.ts +53 -0
- package/dist/replication/AbstractReplicator.js +187 -0
- package/dist/replication/AbstractReplicator.js.map +1 -0
- package/dist/replication/ErrorRateLimiter.d.ts +0 -9
- package/dist/replication/ErrorRateLimiter.js +1 -42
- package/dist/replication/ErrorRateLimiter.js.map +1 -1
- package/dist/replication/ReplicationEngine.d.ts +18 -0
- package/dist/replication/ReplicationEngine.js +41 -0
- package/dist/replication/ReplicationEngine.js.map +1 -0
- package/dist/replication/ReplicationModule.d.ts +39 -0
- package/dist/replication/ReplicationModule.js +65 -0
- package/dist/replication/ReplicationModule.js.map +1 -0
- package/dist/replication/replication-index.d.ts +4 -6
- package/dist/replication/replication-index.js +4 -6
- package/dist/replication/replication-index.js.map +1 -1
- package/dist/routes/RouterEngine.d.ts +42 -0
- package/dist/routes/RouterEngine.js +80 -0
- package/dist/routes/RouterEngine.js.map +1 -0
- package/dist/routes/auth.d.ts +2 -2
- package/dist/routes/auth.js +11 -11
- package/dist/routes/auth.js.map +1 -1
- package/dist/routes/configure-fastify.d.ts +737 -0
- package/dist/routes/configure-fastify.js +57 -0
- package/dist/routes/configure-fastify.js.map +1 -0
- package/dist/routes/configure-rsocket.d.ts +13 -0
- package/dist/routes/configure-rsocket.js +47 -0
- package/dist/routes/configure-rsocket.js.map +1 -0
- package/dist/routes/endpoints/admin.d.ts +0 -34
- package/dist/routes/endpoints/admin.js +48 -89
- package/dist/routes/endpoints/admin.js.map +1 -1
- package/dist/routes/endpoints/checkpointing.d.ts +56 -16
- package/dist/routes/endpoints/checkpointing.js +33 -12
- package/dist/routes/endpoints/checkpointing.js.map +1 -1
- package/dist/routes/endpoints/route-endpoints-index.d.ts +0 -1
- package/dist/routes/endpoints/route-endpoints-index.js +0 -1
- package/dist/routes/endpoints/route-endpoints-index.js.map +1 -1
- package/dist/routes/endpoints/socket-route.js +46 -39
- package/dist/routes/endpoints/socket-route.js.map +1 -1
- package/dist/routes/endpoints/sync-rules.d.ts +1 -1
- package/dist/routes/endpoints/sync-rules.js +32 -23
- package/dist/routes/endpoints/sync-rules.js.map +1 -1
- package/dist/routes/endpoints/sync-stream.d.ts +10 -0
- package/dist/routes/endpoints/sync-stream.js +17 -13
- package/dist/routes/endpoints/sync-stream.js.map +1 -1
- package/dist/routes/route-register.d.ts +1 -1
- package/dist/routes/route-register.js +1 -1
- package/dist/routes/route-register.js.map +1 -1
- package/dist/routes/router-socket.d.ts +5 -4
- package/dist/routes/router-socket.js +2 -1
- package/dist/routes/router-socket.js.map +1 -1
- package/dist/routes/router.d.ts +7 -2
- package/dist/routes/router.js.map +1 -1
- package/dist/routes/routes-index.d.ts +3 -0
- package/dist/routes/routes-index.js +3 -0
- package/dist/routes/routes-index.js.map +1 -1
- package/dist/runner/teardown.js +47 -76
- package/dist/runner/teardown.js.map +1 -1
- package/dist/storage/BucketStorage.d.ts +61 -20
- package/dist/storage/BucketStorage.js +0 -10
- package/dist/storage/BucketStorage.js.map +1 -1
- package/dist/storage/MongoBucketStorage.d.ts +4 -4
- package/dist/storage/MongoBucketStorage.js +19 -24
- package/dist/storage/MongoBucketStorage.js.map +1 -1
- package/dist/storage/SourceEntity.d.ts +20 -0
- package/dist/storage/SourceEntity.js +2 -0
- package/dist/storage/SourceEntity.js.map +1 -0
- package/dist/storage/SourceTable.d.ts +4 -5
- package/dist/storage/SourceTable.js +3 -4
- package/dist/storage/SourceTable.js.map +1 -1
- package/dist/storage/StorageEngine.d.ts +24 -0
- package/dist/storage/StorageEngine.js +43 -0
- package/dist/storage/StorageEngine.js.map +1 -0
- package/dist/storage/StorageProvider.d.ts +21 -0
- package/dist/storage/StorageProvider.js +2 -0
- package/dist/storage/StorageProvider.js.map +1 -0
- package/dist/storage/mongo/MongoBucketBatch.d.ts +1 -1
- package/dist/storage/mongo/MongoBucketBatch.js +6 -7
- package/dist/storage/mongo/MongoBucketBatch.js.map +1 -1
- package/dist/storage/mongo/MongoCompactor.d.ts +40 -0
- package/dist/storage/mongo/MongoCompactor.js +293 -0
- package/dist/storage/mongo/MongoCompactor.js.map +1 -0
- package/dist/storage/mongo/MongoPersistedSyncRulesContent.d.ts +2 -2
- package/dist/storage/mongo/MongoPersistedSyncRulesContent.js +2 -2
- package/dist/storage/mongo/MongoPersistedSyncRulesContent.js.map +1 -1
- package/dist/storage/mongo/MongoStorageProvider.d.ts +5 -0
- package/dist/storage/mongo/MongoStorageProvider.js +26 -0
- package/dist/storage/mongo/MongoStorageProvider.js.map +1 -0
- package/dist/storage/mongo/MongoSyncBucketStorage.d.ts +9 -7
- package/dist/storage/mongo/MongoSyncBucketStorage.js +43 -28
- package/dist/storage/mongo/MongoSyncBucketStorage.js.map +1 -1
- package/dist/storage/mongo/MongoSyncRulesLock.js +1 -1
- package/dist/storage/mongo/MongoSyncRulesLock.js.map +1 -1
- package/dist/storage/mongo/OperationBatch.d.ts +7 -3
- package/dist/storage/mongo/OperationBatch.js +16 -7
- package/dist/storage/mongo/OperationBatch.js.map +1 -1
- package/dist/storage/mongo/PersistedBatch.d.ts +3 -3
- package/dist/storage/mongo/PersistedBatch.js +2 -2
- package/dist/storage/mongo/PersistedBatch.js.map +1 -1
- package/dist/storage/mongo/models.d.ts +17 -7
- package/dist/storage/mongo/models.js.map +1 -1
- package/dist/storage/mongo/util.d.ts +14 -0
- package/dist/storage/mongo/util.js +70 -0
- package/dist/storage/mongo/util.js.map +1 -1
- package/dist/storage/storage-index.d.ts +5 -2
- package/dist/storage/storage-index.js +5 -2
- package/dist/storage/storage-index.js.map +1 -1
- package/dist/sync/RequestTracker.js +2 -3
- package/dist/sync/RequestTracker.js.map +1 -1
- package/dist/sync/sync-index.d.ts +1 -0
- package/dist/sync/sync-index.js +1 -0
- package/dist/sync/sync-index.js.map +1 -1
- package/dist/sync/sync.d.ts +2 -1
- package/dist/sync/sync.js +56 -17
- package/dist/sync/sync.js.map +1 -1
- package/dist/system/ServiceContext.d.ts +37 -0
- package/dist/system/ServiceContext.js +48 -0
- package/dist/system/ServiceContext.js.map +1 -0
- package/dist/system/system-index.d.ts +1 -1
- package/dist/system/system-index.js +1 -1
- package/dist/system/system-index.js.map +1 -1
- package/dist/util/config/collectors/config-collector.d.ts +12 -0
- package/dist/util/config/collectors/config-collector.js +43 -0
- package/dist/util/config/collectors/config-collector.js.map +1 -1
- package/dist/util/config/compound-config-collector.d.ts +10 -29
- package/dist/util/config/compound-config-collector.js +28 -84
- package/dist/util/config/compound-config-collector.js.map +1 -1
- package/dist/util/config/sync-rules/sync-rules-provider.d.ts +9 -0
- package/dist/util/config/sync-rules/sync-rules-provider.js +15 -0
- package/dist/util/config/sync-rules/sync-rules-provider.js.map +1 -0
- package/dist/util/config/types.d.ts +6 -4
- package/dist/util/config/types.js.map +1 -1
- package/dist/util/config.d.ts +3 -4
- package/dist/util/config.js +5 -20
- package/dist/util/config.js.map +1 -1
- package/dist/util/protocol-types.d.ts +4 -0
- package/dist/util/protocol-types.js +5 -1
- package/dist/util/protocol-types.js.map +1 -1
- package/dist/util/util-index.d.ts +3 -6
- package/dist/util/util-index.js +3 -6
- package/dist/util/util-index.js.map +1 -1
- package/dist/util/utils.d.ts +10 -6
- package/dist/util/utils.js +45 -25
- package/dist/util/utils.js.map +1 -1
- package/package.json +7 -7
- package/src/api/RouteAPI.ts +78 -0
- package/src/api/api-index.ts +1 -0
- package/src/api/diagnostics.ts +16 -71
- package/src/api/schema.ts +13 -89
- package/src/auth/KeyStore.ts +9 -6
- package/src/auth/auth-index.ts +0 -1
- package/src/entry/cli-entry.ts +4 -2
- package/src/entry/commands/compact-action.ts +57 -0
- package/src/entry/commands/migrate-action.ts +5 -8
- package/src/entry/commands/teardown-action.ts +2 -2
- package/src/entry/entry-index.ts +1 -0
- package/src/index.ts +5 -2
- package/src/metrics/Metrics.ts +70 -15
- package/src/migrations/db/migrations/1684951997326-init.ts +9 -4
- package/src/migrations/db/migrations/1702295701188-sync-rule-state.ts +7 -4
- package/src/migrations/db/migrations/1711543888062-write-checkpoint-index.ts +6 -4
- package/src/migrations/migrations.ts +24 -8
- package/src/modules/AbstractModule.ts +37 -0
- package/src/modules/ModuleManager.ts +34 -0
- package/src/modules/modules-index.ts +2 -0
- package/src/replication/AbstractReplicationJob.ts +79 -0
- package/src/replication/AbstractReplicator.ts +227 -0
- package/src/replication/ErrorRateLimiter.ts +0 -44
- package/src/replication/ReplicationEngine.ts +43 -0
- package/src/replication/ReplicationModule.ts +101 -0
- package/src/replication/replication-index.ts +4 -6
- package/src/routes/RouterEngine.ts +120 -0
- package/src/routes/auth.ts +21 -12
- package/src/routes/configure-fastify.ts +101 -0
- package/src/routes/configure-rsocket.ts +60 -0
- package/src/routes/endpoints/admin.ts +74 -100
- package/src/routes/endpoints/checkpointing.ts +46 -12
- package/src/routes/endpoints/route-endpoints-index.ts +0 -1
- package/src/routes/endpoints/socket-route.ts +50 -42
- package/src/routes/endpoints/sync-rules.ts +41 -25
- package/src/routes/endpoints/sync-stream.ts +17 -13
- package/src/routes/route-register.ts +2 -2
- package/src/routes/router-socket.ts +6 -5
- package/src/routes/router.ts +7 -2
- package/src/routes/routes-index.ts +3 -0
- package/src/runner/teardown.ts +50 -88
- package/src/storage/BucketStorage.ts +74 -26
- package/src/storage/MongoBucketStorage.ts +23 -26
- package/src/storage/SourceEntity.ts +22 -0
- package/src/storage/SourceTable.ts +4 -6
- package/src/storage/StorageEngine.ts +55 -0
- package/src/storage/StorageProvider.ts +27 -0
- package/src/storage/mongo/MongoBucketBatch.ts +8 -8
- package/src/storage/mongo/MongoCompactor.ts +372 -0
- package/src/storage/mongo/MongoPersistedSyncRulesContent.ts +3 -3
- package/src/storage/mongo/MongoStorageProvider.ts +31 -0
- package/src/storage/mongo/MongoSyncBucketStorage.ts +64 -34
- package/src/storage/mongo/MongoSyncRulesLock.ts +1 -1
- package/src/storage/mongo/OperationBatch.ts +18 -11
- package/src/storage/mongo/PersistedBatch.ts +6 -5
- package/src/storage/mongo/models.ts +17 -7
- package/src/storage/mongo/util.ts +71 -1
- package/src/storage/storage-index.ts +5 -2
- package/src/sync/RequestTracker.ts +3 -3
- package/src/sync/sync-index.ts +1 -0
- package/src/sync/sync.ts +66 -17
- package/src/system/ServiceContext.ts +68 -0
- package/src/system/system-index.ts +1 -1
- package/src/util/config/collectors/config-collector.ts +48 -0
- package/src/util/config/compound-config-collector.ts +45 -110
- package/src/util/config/sync-rules/sync-rules-provider.ts +18 -0
- package/src/util/config/types.ts +6 -5
- package/src/util/config.ts +6 -23
- package/src/util/protocol-types.ts +6 -1
- package/src/util/util-index.ts +3 -6
- package/src/util/utils.ts +55 -39
- package/test/src/__snapshots__/sync.test.ts.snap +90 -5
- package/test/src/auth.test.ts +7 -7
- package/test/src/broadcast_iterable.test.ts +1 -1
- package/test/src/bucket_validation.test.ts +142 -0
- package/test/src/bucket_validation.ts +116 -0
- package/test/src/checksum_cache.test.ts +3 -3
- package/test/src/compacting.test.ts +216 -0
- package/test/src/data_storage.test.ts +275 -204
- package/test/src/env.ts +1 -3
- package/test/src/merge_iterable.test.ts +1 -6
- package/test/src/setup.ts +1 -1
- package/test/src/stream_utils.ts +42 -0
- package/test/src/sync.test.ts +209 -48
- package/test/src/util.ts +110 -55
- package/test/tsconfig.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/auth/SupabaseKeyCollector.d.ts +0 -22
- package/dist/auth/SupabaseKeyCollector.js +0 -61
- package/dist/auth/SupabaseKeyCollector.js.map +0 -1
- package/dist/replication/PgRelation.d.ts +0 -16
- package/dist/replication/PgRelation.js +0 -26
- package/dist/replication/PgRelation.js.map +0 -1
- package/dist/replication/WalConnection.d.ts +0 -34
- package/dist/replication/WalConnection.js +0 -190
- package/dist/replication/WalConnection.js.map +0 -1
- package/dist/replication/WalStream.d.ts +0 -57
- package/dist/replication/WalStream.js +0 -517
- package/dist/replication/WalStream.js.map +0 -1
- package/dist/replication/WalStreamManager.d.ts +0 -30
- package/dist/replication/WalStreamManager.js +0 -198
- package/dist/replication/WalStreamManager.js.map +0 -1
- package/dist/replication/WalStreamRunner.d.ts +0 -38
- package/dist/replication/WalStreamRunner.js +0 -155
- package/dist/replication/WalStreamRunner.js.map +0 -1
- package/dist/replication/util.d.ts +0 -9
- package/dist/replication/util.js +0 -62
- package/dist/replication/util.js.map +0 -1
- package/dist/routes/endpoints/dev.d.ts +0 -312
- package/dist/routes/endpoints/dev.js +0 -172
- package/dist/routes/endpoints/dev.js.map +0 -1
- package/dist/system/CorePowerSyncSystem.d.ts +0 -23
- package/dist/system/CorePowerSyncSystem.js +0 -52
- package/dist/system/CorePowerSyncSystem.js.map +0 -1
- package/dist/util/PgManager.d.ts +0 -24
- package/dist/util/PgManager.js +0 -55
- package/dist/util/PgManager.js.map +0 -1
- package/dist/util/migration_lib.d.ts +0 -11
- package/dist/util/migration_lib.js +0 -64
- package/dist/util/migration_lib.js.map +0 -1
- package/dist/util/pgwire_utils.d.ts +0 -24
- package/dist/util/pgwire_utils.js +0 -117
- package/dist/util/pgwire_utils.js.map +0 -1
- package/dist/util/populate_test_data.d.ts +0 -8
- package/dist/util/populate_test_data.js +0 -65
- package/dist/util/populate_test_data.js.map +0 -1
- package/src/auth/SupabaseKeyCollector.ts +0 -67
- package/src/replication/PgRelation.ts +0 -42
- package/src/replication/WalConnection.ts +0 -227
- package/src/replication/WalStream.ts +0 -628
- package/src/replication/WalStreamManager.ts +0 -213
- package/src/replication/WalStreamRunner.ts +0 -180
- package/src/replication/util.ts +0 -76
- package/src/routes/endpoints/dev.ts +0 -199
- package/src/system/CorePowerSyncSystem.ts +0 -64
- package/src/util/PgManager.ts +0 -64
- package/src/util/migration_lib.ts +0 -79
- package/src/util/pgwire_utils.ts +0 -139
- package/src/util/populate_test_data.ts +0 -78
- package/test/src/__snapshots__/pg_test.test.ts.snap +0 -256
- package/test/src/large_batch.test.ts +0 -194
- package/test/src/pg_test.test.ts +0 -450
- package/test/src/schema_changes.test.ts +0 -545
- package/test/src/slow_tests.test.ts +0 -296
- package/test/src/validation.test.ts +0 -63
- package/test/src/wal_stream.test.ts +0 -314
- package/test/src/wal_stream_utils.ts +0 -147
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { registerFastifyRoutes } from './route-register.js';
|
|
2
|
+
import { ADMIN_ROUTES } from './endpoints/admin.js';
|
|
3
|
+
import { CHECKPOINT_ROUTES } from './endpoints/checkpointing.js';
|
|
4
|
+
import { SYNC_RULES_ROUTES } from './endpoints/sync-rules.js';
|
|
5
|
+
import { SYNC_STREAM_ROUTES } from './endpoints/sync-stream.js';
|
|
6
|
+
import { createRequestQueueHook } from './hooks.js';
|
|
7
|
+
export const DEFAULT_ROUTE_OPTIONS = {
|
|
8
|
+
api: {
|
|
9
|
+
routes: [...ADMIN_ROUTES, ...CHECKPOINT_ROUTES, ...SYNC_RULES_ROUTES],
|
|
10
|
+
queue_options: {
|
|
11
|
+
concurrency: 10,
|
|
12
|
+
max_queue_depth: 20
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
sync_stream: {
|
|
16
|
+
routes: [...SYNC_STREAM_ROUTES],
|
|
17
|
+
queue_options: {
|
|
18
|
+
concurrency: 200,
|
|
19
|
+
max_queue_depth: 0
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Registers default routes on a Fastify server. Consumers can optionally configure
|
|
25
|
+
* concurrency queue limits or override routes.
|
|
26
|
+
*/
|
|
27
|
+
export function configureFastifyServer(server, options) {
|
|
28
|
+
const { service_context, routes = DEFAULT_ROUTE_OPTIONS } = options;
|
|
29
|
+
/**
|
|
30
|
+
* Fastify creates an encapsulated context for each `.register` call.
|
|
31
|
+
* Creating a separate context here to separate the concurrency limits for Admin APIs
|
|
32
|
+
* and Sync Streaming routes.
|
|
33
|
+
* https://github.com/fastify/fastify/blob/main/docs/Reference/Encapsulation.md
|
|
34
|
+
*/
|
|
35
|
+
server.register(async function (childContext) {
|
|
36
|
+
registerFastifyRoutes(childContext, async () => {
|
|
37
|
+
return {
|
|
38
|
+
user_id: undefined,
|
|
39
|
+
service_context
|
|
40
|
+
};
|
|
41
|
+
}, routes.api?.routes ?? DEFAULT_ROUTE_OPTIONS.api.routes);
|
|
42
|
+
// Limit the active concurrent requests
|
|
43
|
+
childContext.addHook('onRequest', createRequestQueueHook(routes.api?.queue_options ?? DEFAULT_ROUTE_OPTIONS.api.queue_options));
|
|
44
|
+
});
|
|
45
|
+
// Create a separate context for concurrency queueing
|
|
46
|
+
server.register(async function (childContext) {
|
|
47
|
+
registerFastifyRoutes(childContext, async () => {
|
|
48
|
+
return {
|
|
49
|
+
user_id: undefined,
|
|
50
|
+
service_context
|
|
51
|
+
};
|
|
52
|
+
}, routes.sync_stream?.routes ?? DEFAULT_ROUTE_OPTIONS.sync_stream.routes);
|
|
53
|
+
// Limit the active concurrent requests
|
|
54
|
+
childContext.addHook('onRequest', createRequestQueueHook(routes.sync_stream?.queue_options ?? DEFAULT_ROUTE_OPTIONS.sync_stream.queue_options));
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=configure-fastify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure-fastify.js","sourceRoot":"","sources":["../../src/routes/configure-fastify.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAI5D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAA4B,MAAM,YAAY,CAAC;AA0B9E,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE;QACH,MAAM,EAAE,CAAC,GAAG,YAAY,EAAE,GAAG,iBAAiB,EAAE,GAAG,iBAAiB,CAAC;QACrE,aAAa,EAAE;YACb,WAAW,EAAE,EAAE;YACf,eAAe,EAAE,EAAE;SACpB;KACF;IACD,WAAW,EAAE;QACX,MAAM,EAAE,CAAC,GAAG,kBAAkB,CAAC;QAC/B,aAAa,EAAE;YACb,WAAW,EAAE,GAAG;YAChB,eAAe,EAAE,CAAC;SACnB;KACF;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA+B,EAAE,OAA4B;IAClG,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,qBAAqB,EAAE,GAAG,OAAO,CAAC;IACpE;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW,YAAY;QAC1C,qBAAqB,CACnB,YAAY,EACZ,KAAK,IAAI,EAAE;YACT,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,eAAe;aAChB,CAAC;QACJ,CAAC,EACD,MAAM,CAAC,GAAG,EAAE,MAAM,IAAI,qBAAqB,CAAC,GAAG,CAAC,MAAM,CACvD,CAAC;QACF,uCAAuC;QACvC,YAAY,CAAC,OAAO,CAClB,WAAW,EACX,sBAAsB,CAAC,MAAM,CAAC,GAAG,EAAE,aAAa,IAAI,qBAAqB,CAAC,GAAG,CAAC,aAAa,CAAC,CAC7F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,qDAAqD;IACrD,MAAM,CAAC,QAAQ,CAAC,KAAK,WAAW,YAAY;QAC1C,qBAAqB,CACnB,YAAY,EACZ,KAAK,IAAI,EAAE;YACT,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,eAAe;aAChB,CAAC;QACJ,CAAC,EACD,MAAM,CAAC,WAAW,EAAE,MAAM,IAAI,qBAAqB,CAAC,WAAW,CAAC,MAAM,CACvE,CAAC;QACF,uCAAuC;QACvC,YAAY,CAAC,OAAO,CAClB,WAAW,EACX,sBAAsB,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,IAAI,qBAAqB,CAAC,WAAW,CAAC,aAAa,CAAC,CAC7G,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import * as http from 'http';
|
|
3
|
+
import { ReactiveSocketRouter } from '@powersync/service-rsocket-router';
|
|
4
|
+
import { ServiceContext } from '../system/ServiceContext.js';
|
|
5
|
+
import { SocketRouteGenerator } from './router-socket.js';
|
|
6
|
+
import { Context } from './router.js';
|
|
7
|
+
export type RSockerRouterConfig = {
|
|
8
|
+
service_context: ServiceContext;
|
|
9
|
+
server: http.Server;
|
|
10
|
+
route_generators?: SocketRouteGenerator[];
|
|
11
|
+
};
|
|
12
|
+
export declare const DEFAULT_SOCKET_ROUTES: SocketRouteGenerator[];
|
|
13
|
+
export declare function configureRSocket(router: ReactiveSocketRouter<Context>, options: RSockerRouterConfig): void;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { deserialize } from 'bson';
|
|
2
|
+
import { errors, logger } from '@powersync/lib-services-framework';
|
|
3
|
+
import { RSocketRequestMeta } from '@powersync/service-rsocket-router';
|
|
4
|
+
import { generateContext, getTokenFromHeader } from './auth.js';
|
|
5
|
+
import { syncStreamReactive } from './endpoints/socket-route.js';
|
|
6
|
+
import { RSocketContextMeta } from './router-socket.js';
|
|
7
|
+
export const DEFAULT_SOCKET_ROUTES = [syncStreamReactive];
|
|
8
|
+
export function configureRSocket(router, options) {
|
|
9
|
+
const { route_generators = DEFAULT_SOCKET_ROUTES, server, service_context } = options;
|
|
10
|
+
router.applyWebSocketEndpoints(server, {
|
|
11
|
+
contextProvider: async (data) => {
|
|
12
|
+
const { token, user_agent } = RSocketContextMeta.decode(deserialize(data));
|
|
13
|
+
if (!token) {
|
|
14
|
+
throw new errors.AuthorizationError('No token provided');
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const extracted_token = getTokenFromHeader(token);
|
|
18
|
+
if (extracted_token != null) {
|
|
19
|
+
const { context, errors: token_errors } = await generateContext(options.service_context, extracted_token);
|
|
20
|
+
if (context?.token_payload == null) {
|
|
21
|
+
throw new errors.AuthorizationError(token_errors ?? 'Authentication required');
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
token,
|
|
25
|
+
user_agent,
|
|
26
|
+
...context,
|
|
27
|
+
token_errors: token_errors,
|
|
28
|
+
service_context
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
throw new errors.AuthorizationError('No token provided');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (ex) {
|
|
36
|
+
logger.error(ex);
|
|
37
|
+
throw ex;
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
endpoints: route_generators.map((generator) => generator(router)),
|
|
41
|
+
metaDecoder: async (meta) => {
|
|
42
|
+
return RSocketRequestMeta.decode(deserialize(meta));
|
|
43
|
+
},
|
|
44
|
+
payloadDecoder: async (rawData) => rawData && deserialize(rawData)
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=configure-rsocket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure-rsocket.js","sourceRoot":"","sources":["../../src/routes/configure-rsocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAGnC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAwB,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAG7F,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAwB,MAAM,oBAAoB,CAAC;AAS9E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAE1D,MAAM,UAAU,gBAAgB,CAAC,MAAqC,EAAE,OAA4B;IAClG,MAAM,EAAE,gBAAgB,GAAG,qBAAqB,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAEtF,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE;QACrC,eAAe,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;YACtC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAQ,CAAC,CAAC;YAElF,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,IAAI,MAAM,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;aAC1D;YAED,IAAI;gBACF,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,eAAe,IAAI,IAAI,EAAE;oBAC3B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;oBAC1G,IAAI,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE;wBAClC,MAAM,IAAI,MAAM,CAAC,kBAAkB,CAAC,YAAY,IAAI,yBAAyB,CAAC,CAAC;qBAChF;oBACD,OAAO;wBACL,KAAK;wBACL,UAAU;wBACV,GAAG,OAAO;wBACV,YAAY,EAAE,YAAY;wBAC1B,eAAe;qBAChB,CAAC;iBACH;qBAAM;oBACL,MAAM,IAAI,MAAM,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;iBAC1D;aACF;YAAC,OAAO,EAAE,EAAE;gBACX,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACjB,MAAM,EAAE,CAAC;aACV;QACH,CAAC;QACD,SAAS,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjE,WAAW,EAAE,KAAK,EAAE,IAAY,EAAE,EAAE;YAClC,OAAO,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAQ,CAAC,CAAC;QAC7D,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,OAAgB,EAAE,EAAE,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC;KAC5E,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -490,40 +490,6 @@ export declare const validate: router.Endpoint<{
|
|
|
490
490
|
}>;
|
|
491
491
|
};
|
|
492
492
|
export declare const ADMIN_ROUTES: ((router.Endpoint<{
|
|
493
|
-
connection_id?: string | undefined;
|
|
494
|
-
}, {
|
|
495
|
-
credentials?: {
|
|
496
|
-
postgres_uri: string;
|
|
497
|
-
} | undefined;
|
|
498
|
-
}, import("../router.js").Context, import("../router.js").RequestEndpointHandlerPayload<{
|
|
499
|
-
connection_id?: string | undefined;
|
|
500
|
-
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, router.EndpointHandler<import("../router.js").RequestEndpointHandlerPayload<{
|
|
501
|
-
connection_id?: string | undefined;
|
|
502
|
-
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, {
|
|
503
|
-
credentials?: {
|
|
504
|
-
postgres_uri: string;
|
|
505
|
-
} | undefined;
|
|
506
|
-
}>> & {
|
|
507
|
-
path: string;
|
|
508
|
-
method: router.HTTPMethod.POST;
|
|
509
|
-
authorize: (payload: import("../router.js").RequestEndpointHandlerPayload) => {
|
|
510
|
-
authorized: boolean;
|
|
511
|
-
errors: string[];
|
|
512
|
-
} | {
|
|
513
|
-
authorized: boolean;
|
|
514
|
-
errors?: undefined;
|
|
515
|
-
};
|
|
516
|
-
validator: schema.MicroValidator<{
|
|
517
|
-
connection_id?: string | undefined;
|
|
518
|
-
}, string[]>;
|
|
519
|
-
handler: (payload: import("../router.js").RequestEndpointHandlerPayload<{
|
|
520
|
-
connection_id?: string | undefined;
|
|
521
|
-
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>) => Promise<{
|
|
522
|
-
credentials?: {
|
|
523
|
-
postgres_uri: string;
|
|
524
|
-
} | undefined;
|
|
525
|
-
}>;
|
|
526
|
-
}) | (router.Endpoint<{
|
|
527
493
|
sql: {
|
|
528
494
|
query: string;
|
|
529
495
|
args: (string | number | boolean)[];
|
|
@@ -1,38 +1,19 @@
|
|
|
1
1
|
import { errors, router, schema } from '@powersync/lib-services-framework';
|
|
2
|
-
import { SqlSyncRules, StaticSchema
|
|
2
|
+
import { SqlSyncRules, StaticSchema } from '@powersync/service-sync-rules';
|
|
3
3
|
import { internal_routes } from '@powersync/service-types';
|
|
4
4
|
import * as api from '../../api/api-index.js';
|
|
5
|
-
import * as util from '../../util/util-index.js';
|
|
6
|
-
import { routeDefinition } from '../router.js';
|
|
7
5
|
import { authApi } from '../auth.js';
|
|
8
|
-
|
|
9
|
-
path: '/api/admin/v1/demo-credentials',
|
|
10
|
-
method: router.HTTPMethod.POST,
|
|
11
|
-
authorize: authApi,
|
|
12
|
-
validator: schema.createTsCodecValidator(internal_routes.DemoCredentialsRequest, {
|
|
13
|
-
allowAdditional: true
|
|
14
|
-
}),
|
|
15
|
-
handler: async (payload) => {
|
|
16
|
-
const connection = payload.context.system.config.connection;
|
|
17
|
-
if (connection == null || !connection.demo_database) {
|
|
18
|
-
return internal_routes.DemoCredentialsResponse.encode({});
|
|
19
|
-
}
|
|
20
|
-
const uri = util.buildDemoPgUri(connection);
|
|
21
|
-
return internal_routes.DemoCredentialsResponse.encode({
|
|
22
|
-
credentials: {
|
|
23
|
-
postgres_uri: uri
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
});
|
|
6
|
+
import { routeDefinition } from '../router.js';
|
|
28
7
|
export const executeSql = routeDefinition({
|
|
29
8
|
path: '/api/admin/v1/execute-sql',
|
|
30
9
|
method: router.HTTPMethod.POST,
|
|
31
10
|
authorize: authApi,
|
|
32
11
|
validator: schema.createTsCodecValidator(internal_routes.ExecuteSqlRequest, { allowAdditional: true }),
|
|
33
12
|
handler: async (payload) => {
|
|
34
|
-
const
|
|
35
|
-
|
|
13
|
+
const { params: { sql: { query, args } } } = payload;
|
|
14
|
+
const apiHandler = payload.context.service_context.routerEngine.getAPI();
|
|
15
|
+
const sourceConfig = await apiHandler.getSourceConfig();
|
|
16
|
+
if (!sourceConfig.debug_api) {
|
|
36
17
|
return internal_routes.ExecuteSqlResponse.encode({
|
|
37
18
|
results: {
|
|
38
19
|
columns: [],
|
|
@@ -42,33 +23,7 @@ export const executeSql = routeDefinition({
|
|
|
42
23
|
error: 'SQL querying is not enabled'
|
|
43
24
|
});
|
|
44
25
|
}
|
|
45
|
-
|
|
46
|
-
const { query, args } = payload.params.sql;
|
|
47
|
-
try {
|
|
48
|
-
const result = await pool.query({
|
|
49
|
-
statement: query,
|
|
50
|
-
params: args.map(util.autoParameter)
|
|
51
|
-
});
|
|
52
|
-
return internal_routes.ExecuteSqlResponse.encode({
|
|
53
|
-
success: true,
|
|
54
|
-
results: {
|
|
55
|
-
columns: result.columns.map((c) => c.name),
|
|
56
|
-
rows: result.rows.map((row) => {
|
|
57
|
-
return row.map((value) => mapColumnValue(toSyncRulesValue(value)));
|
|
58
|
-
})
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
catch (e) {
|
|
63
|
-
return internal_routes.ExecuteSqlResponse.encode({
|
|
64
|
-
results: {
|
|
65
|
-
columns: [],
|
|
66
|
-
rows: []
|
|
67
|
-
},
|
|
68
|
-
success: false,
|
|
69
|
-
error: e.message
|
|
70
|
-
});
|
|
71
|
-
}
|
|
26
|
+
return internal_routes.ExecuteSqlResponse.encode(await apiHandler.executeQuery(query, args));
|
|
72
27
|
}
|
|
73
28
|
});
|
|
74
29
|
export const diagnostics = routeDefinition({
|
|
@@ -77,29 +32,37 @@ export const diagnostics = routeDefinition({
|
|
|
77
32
|
authorize: authApi,
|
|
78
33
|
validator: schema.createTsCodecValidator(internal_routes.DiagnosticsRequest, { allowAdditional: true }),
|
|
79
34
|
handler: async (payload) => {
|
|
35
|
+
const { context } = payload;
|
|
36
|
+
const { service_context } = context;
|
|
80
37
|
const include_content = payload.params.sync_rules_content ?? false;
|
|
81
|
-
const
|
|
82
|
-
const status = await
|
|
83
|
-
if (status
|
|
38
|
+
const apiHandler = service_context.routerEngine.getAPI();
|
|
39
|
+
const status = await apiHandler.getConnectionStatus();
|
|
40
|
+
if (!status) {
|
|
84
41
|
return internal_routes.DiagnosticsResponse.encode({
|
|
85
42
|
connections: []
|
|
86
43
|
});
|
|
87
44
|
}
|
|
88
|
-
const {
|
|
89
|
-
const active = await
|
|
90
|
-
const next = await
|
|
91
|
-
const active_status = await api.getSyncRulesStatus(
|
|
45
|
+
const { storageEngine: { activeBucketStorage } } = service_context;
|
|
46
|
+
const active = await activeBucketStorage.getActiveSyncRulesContent();
|
|
47
|
+
const next = await activeBucketStorage.getNextSyncRulesContent();
|
|
48
|
+
const active_status = await api.getSyncRulesStatus(activeBucketStorage, apiHandler, active, {
|
|
92
49
|
include_content,
|
|
93
50
|
check_connection: status.connected,
|
|
94
51
|
live_status: true
|
|
95
52
|
});
|
|
96
|
-
const next_status = await api.getSyncRulesStatus(
|
|
53
|
+
const next_status = await api.getSyncRulesStatus(activeBucketStorage, apiHandler, next, {
|
|
97
54
|
include_content,
|
|
98
55
|
check_connection: status.connected,
|
|
99
56
|
live_status: true
|
|
100
57
|
});
|
|
101
58
|
return internal_routes.DiagnosticsResponse.encode({
|
|
102
|
-
connections: [
|
|
59
|
+
connections: [
|
|
60
|
+
{
|
|
61
|
+
...status,
|
|
62
|
+
// TODO update this in future
|
|
63
|
+
postgres_uri: status.uri
|
|
64
|
+
}
|
|
65
|
+
],
|
|
103
66
|
active_sync_rules: active_status,
|
|
104
67
|
deploying_sync_rules: next_status
|
|
105
68
|
});
|
|
@@ -111,8 +74,8 @@ export const getSchema = routeDefinition({
|
|
|
111
74
|
authorize: authApi,
|
|
112
75
|
validator: schema.createTsCodecValidator(internal_routes.GetSchemaRequest, { allowAdditional: true }),
|
|
113
76
|
handler: async (payload) => {
|
|
114
|
-
const
|
|
115
|
-
return internal_routes.GetSchemaResponse.encode(await api.getConnectionsSchema(
|
|
77
|
+
const apiHandler = payload.context.service_context.routerEngine.getAPI();
|
|
78
|
+
return internal_routes.GetSchemaResponse.encode(await api.getConnectionsSchema(apiHandler));
|
|
116
79
|
}
|
|
117
80
|
});
|
|
118
81
|
export const reprocess = routeDefinition({
|
|
@@ -121,13 +84,14 @@ export const reprocess = routeDefinition({
|
|
|
121
84
|
authorize: authApi,
|
|
122
85
|
validator: schema.createTsCodecValidator(internal_routes.ReprocessRequest, { allowAdditional: true }),
|
|
123
86
|
handler: async (payload) => {
|
|
124
|
-
const
|
|
125
|
-
const
|
|
126
|
-
const
|
|
87
|
+
const { context: { service_context } } = payload;
|
|
88
|
+
const { storageEngine: { activeBucketStorage } } = service_context;
|
|
89
|
+
const apiHandler = service_context.routerEngine.getAPI();
|
|
90
|
+
const next = await activeBucketStorage.getNextSyncRules(apiHandler.getParseSyncRulesOptions());
|
|
127
91
|
if (next != null) {
|
|
128
92
|
throw new Error(`Busy processing sync rules - cannot reprocess`);
|
|
129
93
|
}
|
|
130
|
-
const active = await
|
|
94
|
+
const active = await activeBucketStorage.getActiveSyncRules(apiHandler.getParseSyncRulesOptions());
|
|
131
95
|
if (active == null) {
|
|
132
96
|
throw new errors.JourneyError({
|
|
133
97
|
status: 422,
|
|
@@ -135,14 +99,16 @@ export const reprocess = routeDefinition({
|
|
|
135
99
|
description: 'No active sync rules'
|
|
136
100
|
});
|
|
137
101
|
}
|
|
138
|
-
const new_rules = await
|
|
102
|
+
const new_rules = await activeBucketStorage.updateSyncRules({
|
|
139
103
|
content: active.sync_rules.content
|
|
140
104
|
});
|
|
105
|
+
const baseConfig = await apiHandler.getSourceConfig();
|
|
141
106
|
return internal_routes.ReprocessResponse.encode({
|
|
142
107
|
connections: [
|
|
143
108
|
{
|
|
144
|
-
|
|
145
|
-
|
|
109
|
+
// Previously the connection was asserted with `!`
|
|
110
|
+
tag: baseConfig.tag,
|
|
111
|
+
id: baseConfig.id,
|
|
146
112
|
slot_name: new_rules.slot_name
|
|
147
113
|
}
|
|
148
114
|
]
|
|
@@ -155,9 +121,10 @@ export const validate = routeDefinition({
|
|
|
155
121
|
authorize: authApi,
|
|
156
122
|
validator: schema.createTsCodecValidator(internal_routes.ValidateRequest, { allowAdditional: true }),
|
|
157
123
|
handler: async (payload) => {
|
|
158
|
-
const
|
|
124
|
+
const { context: { service_context } } = payload;
|
|
159
125
|
const content = payload.params.sync_rules;
|
|
160
|
-
const
|
|
126
|
+
const apiHandler = service_context.routerEngine.getAPI();
|
|
127
|
+
const schemaData = await api.getConnectionsSchema(apiHandler);
|
|
161
128
|
const schema = new StaticSchema(schemaData.connections);
|
|
162
129
|
const sync_rules = {
|
|
163
130
|
// Dummy values
|
|
@@ -166,7 +133,10 @@ export const validate = routeDefinition({
|
|
|
166
133
|
parsed() {
|
|
167
134
|
return {
|
|
168
135
|
...this,
|
|
169
|
-
sync_rules: SqlSyncRules.fromYaml(content, {
|
|
136
|
+
sync_rules: SqlSyncRules.fromYaml(content, {
|
|
137
|
+
...apiHandler.getParseSyncRulesOptions(),
|
|
138
|
+
schema
|
|
139
|
+
})
|
|
170
140
|
};
|
|
171
141
|
},
|
|
172
142
|
sync_rules_content: content,
|
|
@@ -174,16 +144,16 @@ export const validate = routeDefinition({
|
|
|
174
144
|
throw new Error('Lock not implemented');
|
|
175
145
|
}
|
|
176
146
|
};
|
|
177
|
-
const connectionStatus = await
|
|
178
|
-
if (connectionStatus
|
|
147
|
+
const connectionStatus = await apiHandler.getConnectionStatus();
|
|
148
|
+
if (!connectionStatus) {
|
|
179
149
|
return internal_routes.ValidateResponse.encode({
|
|
180
150
|
errors: [{ level: 'fatal', message: 'No connection configured' }],
|
|
181
151
|
connections: []
|
|
182
152
|
});
|
|
183
153
|
}
|
|
184
|
-
const status = (await api.getSyncRulesStatus(
|
|
154
|
+
const status = (await api.getSyncRulesStatus(service_context.storageEngine.activeBucketStorage, apiHandler, sync_rules, {
|
|
185
155
|
include_content: false,
|
|
186
|
-
check_connection: connectionStatus
|
|
156
|
+
check_connection: connectionStatus.connected,
|
|
187
157
|
live_status: false
|
|
188
158
|
}));
|
|
189
159
|
if (connectionStatus == null) {
|
|
@@ -192,16 +162,5 @@ export const validate = routeDefinition({
|
|
|
192
162
|
return internal_routes.ValidateResponse.encode(status);
|
|
193
163
|
}
|
|
194
164
|
});
|
|
195
|
-
|
|
196
|
-
if (typeof value == 'bigint') {
|
|
197
|
-
return Number(value);
|
|
198
|
-
}
|
|
199
|
-
else if (isJsonValue(value)) {
|
|
200
|
-
return value;
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
return null;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
export const ADMIN_ROUTES = [demoCredentials, executeSql, diagnostics, getSchema, reprocess, validate];
|
|
165
|
+
export const ADMIN_ROUTES = [executeSql, diagnostics, getSchema, reprocess, validate];
|
|
207
166
|
//# sourceMappingURL=admin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../src/routes/endpoints/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../../src/routes/endpoints/admin.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { router, schema } from '@powersync/lib-services-framework';
|
|
2
|
-
export declare const writeCheckpoint: router.Endpoint<{
|
|
2
|
+
export declare const writeCheckpoint: router.Endpoint<{
|
|
3
|
+
client_id?: string | undefined;
|
|
4
|
+
}, {
|
|
3
5
|
checkpoint: string;
|
|
4
|
-
}, import("../router.js").Context, import("../router.js").RequestEndpointHandlerPayload<{
|
|
6
|
+
}, import("../router.js").Context, import("../router.js").RequestEndpointHandlerPayload<{
|
|
7
|
+
client_id?: string | undefined;
|
|
8
|
+
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, router.EndpointHandler<import("../router.js").RequestEndpointHandlerPayload<{
|
|
9
|
+
client_id?: string | undefined;
|
|
10
|
+
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, {
|
|
5
11
|
checkpoint: string;
|
|
6
12
|
}>> & {
|
|
7
13
|
path: string;
|
|
@@ -13,14 +19,24 @@ export declare const writeCheckpoint: router.Endpoint<{}, {
|
|
|
13
19
|
authorized: boolean;
|
|
14
20
|
errors?: undefined;
|
|
15
21
|
}>;
|
|
16
|
-
validator: schema.MicroValidator<{
|
|
17
|
-
|
|
22
|
+
validator: schema.MicroValidator<{
|
|
23
|
+
client_id?: string | undefined;
|
|
24
|
+
}, string[]>;
|
|
25
|
+
handler: (payload: import("../router.js").RequestEndpointHandlerPayload<{
|
|
26
|
+
client_id?: string | undefined;
|
|
27
|
+
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>) => Promise<{
|
|
18
28
|
checkpoint: string;
|
|
19
29
|
}>;
|
|
20
30
|
};
|
|
21
|
-
export declare const writeCheckpoint2: router.Endpoint<{
|
|
31
|
+
export declare const writeCheckpoint2: router.Endpoint<{
|
|
32
|
+
client_id?: string | undefined;
|
|
33
|
+
}, {
|
|
22
34
|
write_checkpoint: string;
|
|
23
|
-
}, import("../router.js").Context, import("../router.js").RequestEndpointHandlerPayload<{
|
|
35
|
+
}, import("../router.js").Context, import("../router.js").RequestEndpointHandlerPayload<{
|
|
36
|
+
client_id?: string | undefined;
|
|
37
|
+
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, router.EndpointHandler<import("../router.js").RequestEndpointHandlerPayload<{
|
|
38
|
+
client_id?: string | undefined;
|
|
39
|
+
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, {
|
|
24
40
|
write_checkpoint: string;
|
|
25
41
|
}>> & {
|
|
26
42
|
path: string;
|
|
@@ -32,14 +48,24 @@ export declare const writeCheckpoint2: router.Endpoint<{}, {
|
|
|
32
48
|
authorized: boolean;
|
|
33
49
|
errors?: undefined;
|
|
34
50
|
}>;
|
|
35
|
-
validator: schema.MicroValidator<{
|
|
36
|
-
|
|
51
|
+
validator: schema.MicroValidator<{
|
|
52
|
+
client_id?: string | undefined;
|
|
53
|
+
}, string[]>;
|
|
54
|
+
handler: (payload: import("../router.js").RequestEndpointHandlerPayload<{
|
|
55
|
+
client_id?: string | undefined;
|
|
56
|
+
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>) => Promise<{
|
|
37
57
|
write_checkpoint: string;
|
|
38
58
|
}>;
|
|
39
59
|
};
|
|
40
|
-
export declare const CHECKPOINT_ROUTES: ((router.Endpoint<{
|
|
60
|
+
export declare const CHECKPOINT_ROUTES: ((router.Endpoint<{
|
|
61
|
+
client_id?: string | undefined;
|
|
62
|
+
}, {
|
|
41
63
|
checkpoint: string;
|
|
42
|
-
}, import("../router.js").Context, import("../router.js").RequestEndpointHandlerPayload<{
|
|
64
|
+
}, import("../router.js").Context, import("../router.js").RequestEndpointHandlerPayload<{
|
|
65
|
+
client_id?: string | undefined;
|
|
66
|
+
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, router.EndpointHandler<import("../router.js").RequestEndpointHandlerPayload<{
|
|
67
|
+
client_id?: string | undefined;
|
|
68
|
+
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, {
|
|
43
69
|
checkpoint: string;
|
|
44
70
|
}>> & {
|
|
45
71
|
path: string;
|
|
@@ -51,13 +77,23 @@ export declare const CHECKPOINT_ROUTES: ((router.Endpoint<{}, {
|
|
|
51
77
|
authorized: boolean;
|
|
52
78
|
errors?: undefined;
|
|
53
79
|
}>;
|
|
54
|
-
validator: schema.MicroValidator<{
|
|
55
|
-
|
|
80
|
+
validator: schema.MicroValidator<{
|
|
81
|
+
client_id?: string | undefined;
|
|
82
|
+
}, string[]>;
|
|
83
|
+
handler: (payload: import("../router.js").RequestEndpointHandlerPayload<{
|
|
84
|
+
client_id?: string | undefined;
|
|
85
|
+
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>) => Promise<{
|
|
56
86
|
checkpoint: string;
|
|
57
87
|
}>;
|
|
58
|
-
}) | (router.Endpoint<{
|
|
88
|
+
}) | (router.Endpoint<{
|
|
89
|
+
client_id?: string | undefined;
|
|
90
|
+
}, {
|
|
59
91
|
write_checkpoint: string;
|
|
60
|
-
}, import("../router.js").Context, import("../router.js").RequestEndpointHandlerPayload<{
|
|
92
|
+
}, import("../router.js").Context, import("../router.js").RequestEndpointHandlerPayload<{
|
|
93
|
+
client_id?: string | undefined;
|
|
94
|
+
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, router.EndpointHandler<import("../router.js").RequestEndpointHandlerPayload<{
|
|
95
|
+
client_id?: string | undefined;
|
|
96
|
+
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>, {
|
|
61
97
|
write_checkpoint: string;
|
|
62
98
|
}>> & {
|
|
63
99
|
path: string;
|
|
@@ -69,8 +105,12 @@ export declare const CHECKPOINT_ROUTES: ((router.Endpoint<{}, {
|
|
|
69
105
|
authorized: boolean;
|
|
70
106
|
errors?: undefined;
|
|
71
107
|
}>;
|
|
72
|
-
validator: schema.MicroValidator<{
|
|
73
|
-
|
|
108
|
+
validator: schema.MicroValidator<{
|
|
109
|
+
client_id?: string | undefined;
|
|
110
|
+
}, string[]>;
|
|
111
|
+
handler: (payload: import("../router.js").RequestEndpointHandlerPayload<{
|
|
112
|
+
client_id?: string | undefined;
|
|
113
|
+
}, import("../router.js").Context, import("../router.js").BasicRouterRequest>) => Promise<{
|
|
74
114
|
write_checkpoint: string;
|
|
75
115
|
}>;
|
|
76
116
|
}))[];
|
|
@@ -1,21 +1,37 @@
|
|
|
1
1
|
import * as t from 'ts-codec';
|
|
2
|
-
import { router, schema } from '@powersync/lib-services-framework';
|
|
2
|
+
import { logger, router, schema } from '@powersync/lib-services-framework';
|
|
3
3
|
import * as util from '../../util/util-index.js';
|
|
4
4
|
import { authUser } from '../auth.js';
|
|
5
5
|
import { routeDefinition } from '../router.js';
|
|
6
|
-
const WriteCheckpointRequest = t.object({
|
|
6
|
+
const WriteCheckpointRequest = t.object({
|
|
7
|
+
client_id: t.string.optional()
|
|
8
|
+
});
|
|
7
9
|
export const writeCheckpoint = routeDefinition({
|
|
8
10
|
path: '/write-checkpoint.json',
|
|
9
11
|
method: router.HTTPMethod.GET,
|
|
10
12
|
authorize: authUser,
|
|
11
13
|
validator: schema.createTsCodecValidator(WriteCheckpointRequest, { allowAdditional: true }),
|
|
12
14
|
handler: async (payload) => {
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
const { context: { service_context } } = payload;
|
|
16
|
+
const apiHandler = service_context.routerEngine.getAPI();
|
|
17
|
+
// This old API needs a persisted checkpoint id.
|
|
18
|
+
// Since we don't use LSNs anymore, the only way to get that is to wait.
|
|
19
|
+
const start = Date.now();
|
|
20
|
+
const head = await apiHandler.getReplicationHead();
|
|
21
|
+
const timeout = 50000;
|
|
22
|
+
logger.info(`Waiting for LSN checkpoint: ${head}`);
|
|
23
|
+
while (Date.now() - start < timeout) {
|
|
24
|
+
const cp = await service_context.storageEngine.activeBucketStorage.getActiveCheckpoint();
|
|
25
|
+
if (!cp.hasSyncRules()) {
|
|
26
|
+
throw new Error('No sync rules available');
|
|
27
|
+
}
|
|
28
|
+
if (cp.lsn && cp.lsn >= head) {
|
|
29
|
+
logger.info(`Got write checkpoint: ${head} : ${cp.checkpoint}`);
|
|
30
|
+
return { checkpoint: cp.checkpoint };
|
|
31
|
+
}
|
|
32
|
+
await new Promise((resolve) => setTimeout(resolve, 30));
|
|
33
|
+
}
|
|
34
|
+
throw new Error('Timeout while waiting for checkpoint');
|
|
19
35
|
}
|
|
20
36
|
});
|
|
21
37
|
export const writeCheckpoint2 = routeDefinition({
|
|
@@ -24,11 +40,16 @@ export const writeCheckpoint2 = routeDefinition({
|
|
|
24
40
|
authorize: authUser,
|
|
25
41
|
validator: schema.createTsCodecValidator(WriteCheckpointRequest, { allowAdditional: true }),
|
|
26
42
|
handler: async (payload) => {
|
|
27
|
-
const { user_id,
|
|
28
|
-
const
|
|
29
|
-
const
|
|
43
|
+
const { user_id, service_context } = payload.context;
|
|
44
|
+
const apiHandler = service_context.routerEngine.getAPI();
|
|
45
|
+
const client_id = payload.params.client_id;
|
|
46
|
+
const full_user_id = util.checkpointUserId(user_id, client_id);
|
|
47
|
+
const currentCheckpoint = await apiHandler.getReplicationHead();
|
|
48
|
+
const { storageEngine: { activeBucketStorage } } = service_context;
|
|
49
|
+
const writeCheckpoint = await activeBucketStorage.createWriteCheckpoint(full_user_id, { '1': currentCheckpoint });
|
|
50
|
+
logger.info(`Write checkpoint 2: ${JSON.stringify({ currentCheckpoint, id: String(full_user_id) })}`);
|
|
30
51
|
return {
|
|
31
|
-
write_checkpoint: String(
|
|
52
|
+
write_checkpoint: String(writeCheckpoint)
|
|
32
53
|
};
|
|
33
54
|
}
|
|
34
55
|
});
|