@powersync/service-core 0.0.0-dev-20250507132759 → 0.0.0-dev-20250507151436

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 (59) hide show
  1. package/CHANGELOG.md +24 -4
  2. package/dist/entry/commands/compact-action.js +4 -1
  3. package/dist/entry/commands/compact-action.js.map +1 -1
  4. package/dist/entry/commands/migrate-action.js +4 -1
  5. package/dist/entry/commands/migrate-action.js.map +1 -1
  6. package/dist/entry/commands/test-connection-action.js +4 -1
  7. package/dist/entry/commands/test-connection-action.js.map +1 -1
  8. package/dist/routes/RouterEngine.d.ts +2 -0
  9. package/dist/routes/RouterEngine.js +15 -10
  10. package/dist/routes/RouterEngine.js.map +1 -1
  11. package/dist/routes/configure-fastify.js +0 -4
  12. package/dist/routes/configure-fastify.js.map +1 -1
  13. package/dist/routes/configure-rsocket.js +0 -3
  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.map +1 -1
  17. package/dist/routes/endpoints/route-endpoints-index.d.ts +1 -0
  18. package/dist/routes/endpoints/route-endpoints-index.js +1 -0
  19. package/dist/routes/endpoints/route-endpoints-index.js.map +1 -1
  20. package/dist/routes/endpoints/socket-route.js.map +1 -1
  21. package/dist/routes/endpoints/sync-rules.js.map +1 -1
  22. package/dist/routes/endpoints/sync-stream.js.map +1 -1
  23. package/dist/routes/router.d.ts +1 -4
  24. package/dist/routes/router.js.map +1 -1
  25. package/dist/runner/teardown.js +4 -1
  26. package/dist/runner/teardown.js.map +1 -1
  27. package/dist/system/ServiceContext.d.ts +19 -4
  28. package/dist/system/ServiceContext.js +20 -8
  29. package/dist/system/ServiceContext.js.map +1 -1
  30. package/dist/util/config/collectors/config-collector.js +7 -30
  31. package/dist/util/config/collectors/config-collector.js.map +1 -1
  32. package/dist/util/config/collectors/impl/yaml-env.d.ts +7 -0
  33. package/dist/util/config/collectors/impl/yaml-env.js +59 -0
  34. package/dist/util/config/collectors/impl/yaml-env.js.map +1 -0
  35. package/dist/util/config/compound-config-collector.js +18 -1
  36. package/dist/util/config/compound-config-collector.js.map +1 -1
  37. package/dist/util/config/types.d.ts +11 -0
  38. package/package.json +4 -4
  39. package/src/entry/commands/compact-action.ts +4 -1
  40. package/src/entry/commands/migrate-action.ts +4 -1
  41. package/src/entry/commands/test-connection-action.ts +4 -1
  42. package/src/routes/RouterEngine.ts +21 -11
  43. package/src/routes/configure-fastify.ts +2 -7
  44. package/src/routes/configure-rsocket.ts +0 -4
  45. package/src/routes/endpoints/admin.ts +5 -5
  46. package/src/routes/endpoints/checkpointing.ts +2 -2
  47. package/src/routes/endpoints/route-endpoints-index.ts +1 -0
  48. package/src/routes/endpoints/socket-route.ts +3 -3
  49. package/src/routes/endpoints/sync-rules.ts +4 -4
  50. package/src/routes/endpoints/sync-stream.ts +3 -3
  51. package/src/routes/router.ts +2 -1
  52. package/src/runner/teardown.ts +5 -1
  53. package/src/system/ServiceContext.ts +31 -12
  54. package/src/util/config/collectors/config-collector.ts +9 -36
  55. package/src/util/config/collectors/impl/yaml-env.ts +67 -0
  56. package/src/util/config/compound-config-collector.ts +22 -5
  57. package/src/util/config/types.ts +13 -0
  58. package/test/src/config.test.ts +72 -0
  59. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"config-collector.js","sourceRoot":"","sources":["../../../../src/util/config/collectors/config-collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-collector.js","sourceRoot":"","sources":["../../../../src/util/config/collectors/config-collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAN,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IAC1B,iCAAa,CAAA;IACb,iCAAa,CAAA;AACf,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,QAG3B;AAED,uFAAuF;AACvF,MAAM,qBAAqB,GAAG,MAAM;KACjC,eAAe,CACd,CAAC,CAAC,kBAAkB,CAAC,UAAU,CAAC,eAAe,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAC9G;KACA,SAAS,EAAE,CAAC;AAEf,MAAM,OAAgB,eAAe;IASnC;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,aAA2B;QACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAC/D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACd,CAAC;QAED;;;WAGG;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,MAAkC;QACzC,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,wCAAwC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,MAAM,CAAC,OAA6C;QAClD,IAAI,CAAC;YACH,OAAO,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAES,YAAY,CAAC,OAAe,EAAE,WAA8B;QACpE,QAAQ,WAAW,EAAE,CAAC;YACpB,KAAK,gBAAgB,CAAC,IAAI;gBACxB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACjC,KAAK,gBAAgB,CAAC,IAAI;gBACxB,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,CAAC,CAAC,CAAC;gBACR,6CAA6C;gBAC7C,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,EAAE,EAAE,CAAC,CAAA,CAAC;gBACf,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACjC,CAAC;gBAAC,OAAO,EAAE,EAAE,CAAC;oBACZ,MAAM,IAAI,KAAK,CAAC,kEAAkE,EAAE,EAAE,CAAC,CAAC;gBAC1F,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAES,SAAS,CAAC,OAAe;QACjC,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;YACzC,MAAM,EAAE,MAAM;YACd,gBAAgB,EAAE,IAAI;YACtB,WAAW;YACX,UAAU,EAAE,CAAC,UAAU,CAAC;SACzB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,gEAAgE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjH,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAES,SAAS,CAAC,OAAe;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import * as yaml from 'yaml';
2
+ /**
3
+ * Custom YAML tag which performs string environment variable substitution
4
+ * Allows for type casting string environment variables to boolean or number
5
+ * by using the syntax !env PS_MONGO_PORT::number or !env PS_USE_SUPABASE::boolean
6
+ */
7
+ export declare const YamlEnvTag: yaml.ScalarTag;
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Environment variables can be substituted into the YAML config
3
+ * when parsing if the environment variable name starts with this prefix.
4
+ * Attempting to substitute any other environment variable will throw an exception.
5
+ *
6
+ * Example of substitution:
7
+ * storage:
8
+ * type: mongodb
9
+ * uri: !env PS_MONGO_URI
10
+ */
11
+ const YAML_ENV_PREFIX = 'PS_';
12
+ /**
13
+ * Custom YAML tag which performs string environment variable substitution
14
+ * Allows for type casting string environment variables to boolean or number
15
+ * by using the syntax !env PS_MONGO_PORT::number or !env PS_USE_SUPABASE::boolean
16
+ */
17
+ export const YamlEnvTag = {
18
+ tag: '!env',
19
+ resolve(envName, onError) {
20
+ if (!envName.startsWith(YAML_ENV_PREFIX)) {
21
+ onError(`Attempting to substitute environment variable ${envName} is not allowed. Variables must start with "${YAML_ENV_PREFIX}"`);
22
+ return envName;
23
+ }
24
+ // allow type casting if the envName contains a type suffix
25
+ // e.g. PS_MONGO_PORT::number or PS_USE_SUPABASE::boolean
26
+ const [name, type = 'string'] = envName.split('::');
27
+ let value = process.env[name];
28
+ if (typeof value == 'undefined') {
29
+ onError(`Attempted to substitute environment variable "${envName}" which is undefined. Set this variable on the environment.`);
30
+ return envName;
31
+ }
32
+ switch (type) {
33
+ case 'string':
34
+ return value;
35
+ case 'number':
36
+ const numberValue = Number(value);
37
+ if (Number.isNaN(numberValue)) {
38
+ onError(`Environment variable "${envName}" is not a valid number. Got: "${value}".`);
39
+ return envName;
40
+ }
41
+ return numberValue;
42
+ case 'boolean':
43
+ if (value?.toLowerCase() == 'true') {
44
+ return true;
45
+ }
46
+ else if (value?.toLowerCase() == 'false') {
47
+ return false;
48
+ }
49
+ else {
50
+ onError(`Environment variable "${envName}" is not a boolean. Expected "true" or "false", got "${value}".`);
51
+ return envName;
52
+ }
53
+ default:
54
+ onError(`Environment variable "${envName}" has an invalid type suffix "${type}".`);
55
+ return envName;
56
+ }
57
+ }
58
+ };
59
+ //# sourceMappingURL=yaml-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-env.js","sourceRoot":"","sources":["../../../../../src/util/config/collectors/impl/yaml-env.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,GAAG,EAAE,MAAM;IACX,OAAO,CAAC,OAAe,EAAE,OAAgC;QACvD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACzC,OAAO,CACL,iDAAiD,OAAO,+CAA+C,eAAe,GAAG,CAC1H,CAAC;YACF,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,2DAA2D;QAC3D,yDAAyD;QACzD,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEpD,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,OAAO,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,OAAO,CACL,iDAAiD,OAAO,6DAA6D,CACtH,CAAC;YACF,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ;gBACX,OAAO,KAAK,CAAC;YACf,KAAK,QAAQ;gBACX,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;oBAC9B,OAAO,CAAC,yBAAyB,OAAO,kCAAkC,KAAK,IAAI,CAAC,CAAC;oBACrF,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,OAAO,WAAW,CAAC;YACrB,KAAK,SAAS;gBACZ,IAAI,KAAK,EAAE,WAAW,EAAE,IAAI,MAAM,EAAE,CAAC;oBACnC,OAAO,IAAI,CAAC;gBACd,CAAC;qBAAM,IAAI,KAAK,EAAE,WAAW,EAAE,IAAI,OAAO,EAAE,CAAC;oBAC3C,OAAO,KAAK,CAAC;gBACf,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,yBAAyB,OAAO,wDAAwD,KAAK,IAAI,CAAC,CAAC;oBAC3G,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH;gBACE,OAAO,CAAC,yBAAyB,OAAO,iCAAiC,IAAI,IAAI,CAAC,CAAC;gBACnF,OAAO,OAAO,CAAC;QACnB,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -3,10 +3,10 @@ import * as auth from '../../auth/auth-index.js';
3
3
  import { Base64ConfigCollector } from './collectors/impl/base64-config-collector.js';
4
4
  import { FallbackConfigCollector } from './collectors/impl/fallback-config-collector.js';
5
5
  import { FileSystemConfigCollector } from './collectors/impl/filesystem-config-collector.js';
6
+ import { DEFAULT_MAX_BUCKETS_PER_CONNECTION, DEFAULT_MAX_CONCURRENT_CONNECTIONS, DEFAULT_MAX_DATA_FETCH_CONCURRENCY, DEFAULT_MAX_PARAMETER_QUERY_RESULTS, DEFAULT_MAX_POOL_SIZE } from './defaults.js';
6
7
  import { Base64SyncRulesCollector } from './sync-rules/impl/base64-sync-rules-collector.js';
7
8
  import { FileSystemSyncRulesCollector } from './sync-rules/impl/filesystem-sync-rules-collector.js';
8
9
  import { InlineSyncRulesCollector } from './sync-rules/impl/inline-sync-rules-collector.js';
9
- import { DEFAULT_MAX_BUCKETS_PER_CONNECTION, DEFAULT_MAX_CONCURRENT_CONNECTIONS, DEFAULT_MAX_DATA_FETCH_CONCURRENCY, DEFAULT_MAX_PARAMETER_QUERY_RESULTS, DEFAULT_MAX_POOL_SIZE } from './defaults.js';
10
10
  const POWERSYNC_DEV_KID = 'powersync-dev';
11
11
  const DEFAULT_COLLECTOR_OPTIONS = {
12
12
  configCollectors: [new Base64ConfigCollector(), new FileSystemConfigCollector(), new FallbackConfigCollector()],
@@ -107,6 +107,23 @@ export class CompoundConfigCollector {
107
107
  disable_telemetry_sharing: baseConfig.telemetry?.disable_telemetry_sharing ?? false,
108
108
  internal_service_endpoint: baseConfig.telemetry?.internal_service_endpoint ?? 'https://pulse.journeyapps.com/v1/metrics'
109
109
  },
110
+ healthcheck: {
111
+ /**
112
+ * Default to legacy mode if no probes config is provided.
113
+ * If users provide a config, all options require explicit opt-in.
114
+ */
115
+ probes: baseConfig.healthcheck?.probes
116
+ ? {
117
+ use_filesystem: baseConfig.healthcheck.probes.use_filesystem ?? false,
118
+ use_http: baseConfig.healthcheck.probes.use_http ?? false,
119
+ use_legacy: baseConfig.healthcheck.probes.use_legacy ?? false
120
+ }
121
+ : {
122
+ use_filesystem: false,
123
+ use_http: false,
124
+ use_legacy: true
125
+ }
126
+ },
110
127
  api_parameters: {
111
128
  max_buckets_per_connection: baseConfig.api?.parameters?.max_buckets_per_connection ?? DEFAULT_MAX_BUCKETS_PER_CONNECTION,
112
129
  max_parameter_query_results: baseConfig.api?.parameters?.max_parameter_query_results ?? DEFAULT_MAX_PARAMETER_QUERY_RESULTS,
@@ -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,EAAiB,MAAM,mCAAmC,CAAC;AAE1E,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,EACL,kCAAkC,EAClC,kCAAkC,EAClC,kCAAkC,EAClC,mCAAmC,EACnC,qBAAqB,EACtB,MAAM,eAAe,CAAC;AACvB,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;IACZ;IAAtB,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;QAC5E,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAEhC,IAAI,UAAU,CAAC,WAAW,EAAE,QAAQ,IAAI,UAAU,CAAC,WAAW,EAAE,mBAAmB,IAAI,IAAI,EAAE,CAAC;YAC5F,gFAAgF;YAChF,4EAA4E;YAC5E,4BAA4B;YAC5B,gFAAgF;YAChF,sCAAsC;YACtC,UAAU,CAAC,GAAG,CACZ,MAAM,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC;gBAC/C;oBACE,GAAG,EAAE,KAAK;oBACV,GAAG,EAAE,OAAO;oBACZ,mDAAmD;oBACnD,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;oBACxF,GAAG,EAAE,SAAS,CAAC,mCAAmC;iBACnD;aACF,CAAC,CACH,CAAC;QACJ,CAAC;QAED,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,IAAI,UAAU,GAAkB;YAC9B,gBAAgB,EAAE,EAAE;SACrB,CAAC;QAEF,IAAI,UAAU,CAAC,WAAW,EAAE,qBAAqB,IAAI,IAAI,EAAE,CAAC;YAC1D,UAAU,GAAG;gBACX,gBAAgB,EAAE,UAAU,CAAC,WAAW,EAAE,qBAAqB;aAChE,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,CAAC,WAAW,EAAE,gBAAgB,EAAE,CAAC;YAC7C,gEAAgE;YAChE,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC;QAChC,CAAC;QAED,KAAK,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;YAC1B,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;QAChH,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;gBACP,GAAG,UAAU,CAAC,OAAO;gBACrB,UAAU,EAAE;oBACV,aAAa,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,IAAI,qBAAqB;iBACtF;aACF;YACD,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,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,eAAe,EAAE,UAAU,CAAC,SAAS,EAAE,eAAe;gBACtD,yBAAyB,EAAE,UAAU,CAAC,SAAS,EAAE,yBAAyB,IAAI,KAAK;gBACnF,yBAAyB,EACvB,UAAU,CAAC,SAAS,EAAE,yBAAyB,IAAI,0CAA0C;aAChG;YACD,WAAW,EAAE;gBACX;;;mBAGG;gBACH,MAAM,EAAE,UAAU,CAAC,WAAW,EAAE,MAAM;oBACpC,CAAC,CAAC;wBACE,cAAc,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,cAAc,IAAI,KAAK;wBACrE,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK;wBACzD,UAAU,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,IAAI,KAAK;qBAC9D;oBACH,CAAC,CAAC;wBACE,cAAc,EAAE,KAAK;wBACrB,QAAQ,EAAE,KAAK;wBACf,UAAU,EAAE,IAAI;qBACjB;aACN;YACD,cAAc,EAAE;gBACd,0BAA0B,EACxB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,0BAA0B,IAAI,kCAAkC;gBAE9F,2BAA2B,EACzB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,2BAA2B,IAAI,mCAAmC;gBAChG,0BAA0B,EACxB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,0BAA0B,IAAI,kCAAkC;gBAC9F,0BAA0B,EACxB,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,0BAA0B,IAAI,kCAAkC;aAC/F;YACD,0DAA0D;YAC1D,gBAAgB,EAAE,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,IAAI,YAAY;YAC5F,UAAU,EAAE,UAAU,CAAC,UAAU,IAAI,EAAE;SACxC,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;YACd,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;CACF"}
@@ -60,5 +60,16 @@ export type ResolvedPowerSyncConfig = {
60
60
  };
61
61
  /** Prefix for postgres replication slot names. May eventually be connection-specific. */
62
62
  slot_name_prefix: string;
63
+ healthcheck: {
64
+ probes: {
65
+ use_filesystem: boolean;
66
+ use_http: boolean;
67
+ /**
68
+ * @deprecated This maintains backwards compatibility with the legacy default.
69
+ * Explicit probe configuration should be used instead.
70
+ */
71
+ use_legacy: boolean;
72
+ };
73
+ };
63
74
  parameters: Record<string, number | string | boolean | null>;
64
75
  };
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "0.0.0-dev-20250507132759",
8
+ "version": "0.0.0-dev-20250507151436",
9
9
  "main": "dist/index.js",
10
10
  "license": "FSL-1.1-Apache-2.0",
11
11
  "type": "module",
@@ -32,11 +32,11 @@
32
32
  "uuid": "^9.0.1",
33
33
  "winston": "^3.13.0",
34
34
  "yaml": "^2.3.2",
35
- "@powersync/lib-services-framework": "0.5.4",
35
+ "@powersync/lib-services-framework": "0.0.0-dev-20250507151436",
36
36
  "@powersync/service-jsonbig": "0.17.10",
37
- "@powersync/service-rsocket-router": "0.0.21",
37
+ "@powersync/service-rsocket-router": "0.0.0-dev-20250507151436",
38
38
  "@powersync/service-sync-rules": "0.26.0",
39
- "@powersync/service-types": "0.0.0-dev-20250507132759"
39
+ "@powersync/service-types": "0.10.0"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/async": "^3.2.24",
@@ -37,7 +37,10 @@ export function registerCompactAction(program: Command) {
37
37
  logger.info(`Compacting storage for ${buckets?.join(', ')}...`);
38
38
  }
39
39
  const config = await utils.loadConfig(extractRunnerOptions(options));
40
- const serviceContext = new system.ServiceContextContainer(config);
40
+ const serviceContext = new system.ServiceContextContainer({
41
+ serviceMode: system.ServiceContextMode.COMPACT,
42
+ configuration: config
43
+ });
41
44
 
42
45
  // Register modules in order to allow custom module compacting
43
46
  const moduleManager = container.getImplementation(modules.ModuleManager);
@@ -18,7 +18,10 @@ export function registerMigrationAction(program: Command) {
18
18
  .argument('<direction>', 'Migration direction. `up` or `down`')
19
19
  .action(async (direction: migrations.Direction, options) => {
20
20
  const config = await utils.loadConfig(extractRunnerOptions(options));
21
- const serviceContext = new system.ServiceContextContainer(config);
21
+ const serviceContext = new system.ServiceContextContainer({
22
+ serviceMode: system.ServiceContextMode.MIGRATION,
23
+ configuration: config
24
+ });
22
25
 
23
26
  // Register modules in order to allow custom module migrations
24
27
  const moduleManager = container.getImplementation(modules.ModuleManager);
@@ -17,7 +17,10 @@ export function registerTestConnectionAction(program: Command) {
17
17
  return testConnectionCommand.description('Test connection').action(async (options) => {
18
18
  try {
19
19
  const config = await utils.loadConfig(extractRunnerOptions(options));
20
- const serviceContext = new system.ServiceContextContainer(config);
20
+ const serviceContext = new system.ServiceContextContainer({
21
+ serviceMode: system.ServiceContextMode.TEST_CONNECTION,
22
+ configuration: config
23
+ });
21
24
 
22
25
  const replication = new ReplicationEngine();
23
26
  serviceContext.register(ReplicationEngine, replication);
@@ -2,15 +2,8 @@ import { logger } from '@powersync/lib-services-framework';
2
2
 
3
3
  import * as api from '../api/api-index.js';
4
4
 
5
- import { ADMIN_ROUTES } from './endpoints/admin.js';
6
- import { CHECKPOINT_ROUTES } from './endpoints/checkpointing.js';
7
- import { PROBES_ROUTES } from './endpoints/probes.js';
8
- import { syncStreamReactive } from './endpoints/socket-route.js';
9
- import { SYNC_RULES_ROUTES } from './endpoints/sync-rules.js';
10
- import { SYNC_STREAM_ROUTES } from './endpoints/sync-stream.js';
11
5
  import { SocketRouteGenerator } from './router-socket.js';
12
6
  import { RouteDefinition } from './router.js';
13
- import { SyncContext } from '../sync/SyncContext.js';
14
7
 
15
8
  export type RouterSetupResponse = {
16
9
  onShutdown: () => Promise<void>;
@@ -47,14 +40,25 @@ export class RouterEngine {
47
40
  this.cleanupHandler = null;
48
41
  this.closed = false;
49
42
 
50
- // Default routes
51
43
  this.routes = {
52
- api_routes: [...ADMIN_ROUTES, ...CHECKPOINT_ROUTES, ...SYNC_RULES_ROUTES, ...PROBES_ROUTES],
53
- stream_routes: [...SYNC_STREAM_ROUTES],
54
- socket_routes: [syncStreamReactive]
44
+ api_routes: [],
45
+ stream_routes: [],
46
+ socket_routes: []
55
47
  };
56
48
  }
57
49
 
50
+ public registerRoutes(routes: Partial<RouterEngineRoutes>) {
51
+ this.routes.api_routes.push(...(routes.api_routes ?? []));
52
+ this.routes.stream_routes.push(...(routes.stream_routes ?? []));
53
+ this.routes.socket_routes.push(...(routes.socket_routes ?? []));
54
+ }
55
+
56
+ public get hasRoutes() {
57
+ return (
58
+ this.routes.api_routes.length > 0 || this.routes.stream_routes.length > 0 || this.routes.socket_routes.length > 0
59
+ );
60
+ }
61
+
58
62
  public registerAPI(api: api.RouteAPI) {
59
63
  if (this.api) {
60
64
  logger.warn('A RouteAPI has already been registered. Overriding existing implementation');
@@ -75,6 +79,12 @@ export class RouterEngine {
75
79
  */
76
80
  async start(setup: RouterSetup) {
77
81
  logger.info('Starting Router Engine...');
82
+
83
+ if (!this.hasRoutes) {
84
+ logger.warn('No routes have been registered. Router Engine will not continue.');
85
+ return;
86
+ }
87
+
78
88
  const { onShutdown } = await setup(this.routes);
79
89
  this.cleanupHandler = onShutdown;
80
90
  logger.info('Successfully started Router Engine.');
@@ -9,7 +9,7 @@ import { PROBES_ROUTES } from './endpoints/probes.js';
9
9
  import { SYNC_RULES_ROUTES } from './endpoints/sync-rules.js';
10
10
  import { SYNC_STREAM_ROUTES } from './endpoints/sync-stream.js';
11
11
  import { createRequestQueueHook, CreateRequestQueueParams } from './hooks.js';
12
- import { RouteDefinition, RouterServiceContext } from './router.js';
12
+ import { RouteDefinition } from './router.js';
13
13
 
14
14
  /**
15
15
  * A list of route definitions to be registered as endpoints.
@@ -59,14 +59,9 @@ export function configureFastifyServer(server: fastify.FastifyInstance, options:
59
59
  const { service_context, routes = DEFAULT_ROUTE_OPTIONS } = options;
60
60
 
61
61
  const generateContext = async () => {
62
- const { routerEngine } = service_context;
63
- if (!routerEngine) {
64
- throw new Error(`RouterEngine has not been registered`);
65
- }
66
-
67
62
  return {
68
63
  user_id: undefined,
69
- service_context: service_context as RouterServiceContext
64
+ service_context: service_context
70
65
  };
71
66
  };
72
67
 
@@ -37,10 +37,6 @@ export function configureRSocket(router: ReactiveSocketRouter<Context>, options:
37
37
  throw new errors.AuthorizationError(token_errors ?? 'Authentication required');
38
38
  }
39
39
 
40
- if (!service_context.routerEngine) {
41
- throw new Error(`RouterEngine has not been registered`);
42
- }
43
-
44
40
  return {
45
41
  token,
46
42
  user_agent,
@@ -19,7 +19,7 @@ export const executeSql = routeDefinition({
19
19
  }
20
20
  } = payload;
21
21
 
22
- const apiHandler = payload.context.service_context.routerEngine!.getAPI();
22
+ const apiHandler = payload.context.service_context.routerEngine.getAPI();
23
23
 
24
24
  const sourceConfig = await apiHandler.getSourceConfig();
25
25
  if (!sourceConfig.debug_api) {
@@ -47,7 +47,7 @@ export const diagnostics = routeDefinition({
47
47
  const { service_context } = context;
48
48
  const include_content = payload.params.sync_rules_content ?? false;
49
49
 
50
- const apiHandler = service_context.routerEngine!.getAPI();
50
+ const apiHandler = service_context.routerEngine.getAPI();
51
51
 
52
52
  const status = await apiHandler.getConnectionStatus();
53
53
  if (!status) {
@@ -94,7 +94,7 @@ export const getSchema = routeDefinition({
94
94
  authorize: authApi,
95
95
  validator: schema.createTsCodecValidator(internal_routes.GetSchemaRequest, { allowAdditional: true }),
96
96
  handler: async (payload) => {
97
- const apiHandler = payload.context.service_context.routerEngine!.getAPI();
97
+ const apiHandler = payload.context.service_context.routerEngine.getAPI();
98
98
 
99
99
  return internal_routes.GetSchemaResponse.encode(await api.getConnectionsSchema(apiHandler));
100
100
  }
@@ -112,7 +112,7 @@ export const reprocess = routeDefinition({
112
112
  const {
113
113
  storageEngine: { activeBucketStorage }
114
114
  } = service_context;
115
- const apiHandler = service_context.routerEngine!.getAPI();
115
+ const apiHandler = service_context.routerEngine.getAPI();
116
116
  const next = await activeBucketStorage.getNextSyncRules(apiHandler.getParseSyncRulesOptions());
117
117
  if (next != null) {
118
118
  throw new Error(`Busy processing sync rules - cannot reprocess`);
@@ -159,7 +159,7 @@ export const validate = routeDefinition({
159
159
  context: { service_context }
160
160
  } = payload;
161
161
  const content = payload.params.sync_rules;
162
- const apiHandler = service_context.routerEngine!.getAPI();
162
+ const apiHandler = service_context.routerEngine.getAPI();
163
163
 
164
164
  const schemaData = await api.getConnectionsSchema(apiHandler);
165
165
  const schema = new StaticSchema(schemaData.connections);
@@ -18,7 +18,7 @@ export const writeCheckpoint = routeDefinition({
18
18
  const {
19
19
  context: { service_context }
20
20
  } = payload;
21
- const apiHandler = service_context.routerEngine!.getAPI();
21
+ const apiHandler = service_context.routerEngine.getAPI();
22
22
 
23
23
  // This old API needs a persisted checkpoint id.
24
24
  // Since we don't use LSNs anymore, the only way to get that is to wait.
@@ -54,7 +54,7 @@ export const writeCheckpoint2 = routeDefinition({
54
54
  handler: async (payload) => {
55
55
  const { user_id, service_context } = payload.context;
56
56
 
57
- const apiHandler = service_context.routerEngine!.getAPI();
57
+ const apiHandler = service_context.routerEngine.getAPI();
58
58
 
59
59
  const { replicationHead, writeCheckpoint } = await util.createWriteCheckpoint({
60
60
  userId: user_id,
@@ -1,5 +1,6 @@
1
1
  export * from './admin.js';
2
2
  export * from './checkpointing.js';
3
+ export * from './probes.js';
3
4
  export * from './socket-route.js';
4
5
  export * from './sync-rules.js';
5
6
  export * from './sync-stream.js';
@@ -33,7 +33,7 @@ export const syncStreamReactive: SocketRouteGenerator = (router) =>
33
33
  }
34
34
  });
35
35
 
36
- if (routerEngine!.closed) {
36
+ if (routerEngine.closed) {
37
37
  responder.onError(
38
38
  new errors.ServiceError({
39
39
  status: 503,
@@ -64,9 +64,9 @@ export const syncStreamReactive: SocketRouteGenerator = (router) =>
64
64
  return;
65
65
  }
66
66
 
67
- const syncRules = bucketStorage.getParsedSyncRules(routerEngine!.getAPI().getParseSyncRulesOptions());
67
+ const syncRules = bucketStorage.getParsedSyncRules(routerEngine.getAPI().getParseSyncRulesOptions());
68
68
 
69
- const removeStopHandler = routerEngine!.addStopHandler(() => {
69
+ const removeStopHandler = routerEngine.addStopHandler(() => {
70
70
  controller.abort();
71
71
  });
72
72
 
@@ -53,7 +53,7 @@ export const deploySyncRules = routeDefinition({
53
53
  const content = payload.params.content;
54
54
 
55
55
  try {
56
- const apiHandler = service_context.routerEngine!.getAPI();
56
+ const apiHandler = service_context.routerEngine.getAPI();
57
57
  SqlSyncRules.fromYaml(payload.params.content, {
58
58
  ...apiHandler.getParseSyncRulesOptions(),
59
59
  // We don't do any schema-level validation at this point
@@ -94,7 +94,7 @@ export const validateSyncRules = routeDefinition({
94
94
  handler: async (payload) => {
95
95
  const content = payload.params.content;
96
96
  const { service_context } = payload.context;
97
- const apiHandler = service_context.routerEngine!.getAPI();
97
+ const apiHandler = service_context.routerEngine.getAPI();
98
98
 
99
99
  const info = await debugSyncRules(apiHandler, content);
100
100
 
@@ -121,7 +121,7 @@ export const currentSyncRules = routeDefinition({
121
121
  });
122
122
  }
123
123
 
124
- const apiHandler = service_context.routerEngine!.getAPI();
124
+ const apiHandler = service_context.routerEngine.getAPI();
125
125
  const info = await debugSyncRules(apiHandler, sync_rules.sync_rules_content);
126
126
  const next = await activeBucketStorage.getNextSyncRulesContent();
127
127
 
@@ -158,7 +158,7 @@ export const reprocessSyncRules = routeDefinition({
158
158
  const {
159
159
  storageEngine: { activeBucketStorage }
160
160
  } = payload.context.service_context;
161
- const apiHandler = payload.context.service_context.routerEngine!.getAPI();
161
+ const apiHandler = payload.context.service_context.routerEngine.getAPI();
162
162
  const sync_rules = await activeBucketStorage.getActiveSyncRules(apiHandler.getParseSyncRulesOptions());
163
163
  if (sync_rules == null) {
164
164
  throw new errors.ServiceError({
@@ -26,7 +26,7 @@ export const syncStreamed = routeDefinition({
26
26
  const userAgent = headers['x-user-agent'] ?? headers['user-agent'];
27
27
  const clientId = payload.params.client_id;
28
28
 
29
- if (routerEngine!.closed) {
29
+ if (routerEngine.closed) {
30
30
  throw new errors.ServiceError({
31
31
  status: 503,
32
32
  code: ErrorCode.PSYNC_S2003,
@@ -47,7 +47,7 @@ export const syncStreamed = routeDefinition({
47
47
  });
48
48
  }
49
49
 
50
- const syncRules = bucketStorage.getParsedSyncRules(routerEngine!.getAPI().getParseSyncRulesOptions());
50
+ const syncRules = bucketStorage.getParsedSyncRules(routerEngine.getAPI().getParseSyncRulesOptions());
51
51
 
52
52
  const controller = new AbortController();
53
53
  const tracker = new sync.RequestTracker(metricsEngine);
@@ -72,7 +72,7 @@ export const syncStreamed = routeDefinition({
72
72
  { objectMode: false, highWaterMark: 16 * 1024 }
73
73
  );
74
74
 
75
- const deregister = routerEngine!.addStopHandler(() => {
75
+ const deregister = routerEngine.addStopHandler(() => {
76
76
  // This error is not currently propagated to the client
77
77
  controller.abort();
78
78
  stream.destroy(new Error('Shutting down system'));
@@ -6,7 +6,8 @@ import { RouterEngine } from './RouterEngine.js';
6
6
  /**
7
7
  * The {@link RouterEngine} must be provided for these routes
8
8
  */
9
- export type RouterServiceContext = ServiceContext & { routerEngine: RouterEngine };
9
+ export type RouterServiceContext = ServiceContext;
10
+
10
11
  /**
11
12
  * Common context for routes
12
13
  */
@@ -14,7 +14,11 @@ export async function teardown(runnerConfig: utils.RunnerConfig) {
14
14
  try {
15
15
  logger.info(`Tearing down PowerSync instance...`);
16
16
  const config = await utils.loadConfig(runnerConfig);
17
- const serviceContext = new system.ServiceContextContainer(config);
17
+ const serviceContext = new system.ServiceContextContainer({
18
+ serviceMode: system.ServiceContextMode.TEARDOWN,
19
+ configuration: config
20
+ });
21
+
18
22
  const moduleManager = container.getImplementation(modules.ModuleManager);
19
23
  await moduleManager.initialize(serviceContext);
20
24
  // This is mostly done to ensure that the storage is ready
@@ -6,18 +6,34 @@ import { PowerSyncMigrationManager } from '../migrations/PowerSyncMigrationManag
6
6
  import * as replication from '../replication/replication-index.js';
7
7
  import * as routes from '../routes/routes-index.js';
8
8
  import * as storage from '../storage/storage-index.js';
9
- import * as utils from '../util/util-index.js';
10
9
  import { SyncContext } from '../sync/SyncContext.js';
10
+ import * as utils from '../util/util-index.js';
11
11
 
12
12
  export interface ServiceContext {
13
13
  configuration: utils.ResolvedPowerSyncConfig;
14
14
  lifeCycleEngine: LifeCycledSystem;
15
15
  metricsEngine: metrics.MetricsEngine;
16
16
  replicationEngine: replication.ReplicationEngine | null;
17
- routerEngine: routes.RouterEngine | null;
17
+ routerEngine: routes.RouterEngine;
18
18
  storageEngine: storage.StorageEngine;
19
19
  migrations: PowerSyncMigrationManager;
20
20
  syncContext: SyncContext;
21
+ serviceMode: ServiceContextMode;
22
+ }
23
+
24
+ export enum ServiceContextMode {
25
+ API = utils.ServiceRunner.API,
26
+ SYNC = utils.ServiceRunner.SYNC,
27
+ UNIFIED = utils.ServiceRunner.UNIFIED,
28
+ COMPACT = 'compact',
29
+ MIGRATION = 'migration',
30
+ TEARDOWN = 'teardown',
31
+ TEST_CONNECTION = 'test-connection'
32
+ }
33
+
34
+ export interface ServiceContextOptions {
35
+ serviceMode: ServiceContextMode;
36
+ configuration: utils.ResolvedPowerSyncConfig;
21
37
  }
22
38
 
23
39
  /**
@@ -26,11 +42,18 @@ export interface ServiceContext {
26
42
  * This controls registering, initializing and the lifecycle of various services.
27
43
  */
28
44
  export class ServiceContextContainer implements ServiceContext {
45
+ configuration: utils.ResolvedPowerSyncConfig;
29
46
  lifeCycleEngine: LifeCycledSystem;
30
47
  storageEngine: storage.StorageEngine;
31
48
  syncContext: SyncContext;
49
+ routerEngine: routes.RouterEngine;
50
+ serviceMode: ServiceContextMode;
51
+
52
+ constructor(options: ServiceContextOptions) {
53
+ this.serviceMode = options.serviceMode;
54
+ const { configuration } = options;
55
+ this.configuration = configuration;
32
56
 
33
- constructor(public configuration: utils.ResolvedPowerSyncConfig) {
34
57
  this.lifeCycleEngine = new LifeCycledSystem();
35
58
 
36
59
  this.storageEngine = new storage.StorageEngine({
@@ -42,6 +65,11 @@ export class ServiceContextContainer implements ServiceContext {
42
65
  stop: (storageEngine) => storageEngine.shutDown()
43
66
  });
44
67
 
68
+ this.routerEngine = new routes.RouterEngine();
69
+ this.lifeCycleEngine.withLifecycle(this.routerEngine, {
70
+ stop: (routerEngine) => routerEngine.shutDown()
71
+ });
72
+
45
73
  this.syncContext = new SyncContext({
46
74
  maxDataFetchConcurrency: configuration.api_parameters.max_data_fetch_concurrency,
47
75
  maxBuckets: configuration.api_parameters.max_buckets_per_connection,
@@ -55,21 +83,12 @@ export class ServiceContextContainer implements ServiceContext {
55
83
  // Migrations should be executed before the system starts
56
84
  start: () => migrationManager[Symbol.asyncDispose]()
57
85
  });
58
-
59
- this.lifeCycleEngine.withLifecycle(this.storageEngine, {
60
- start: (storageEngine) => storageEngine.start(),
61
- stop: (storageEngine) => storageEngine.shutDown()
62
- });
63
86
  }
64
87
 
65
88
  get replicationEngine(): replication.ReplicationEngine | null {
66
89
  return container.getOptional(replication.ReplicationEngine);
67
90
  }
68
91
 
69
- get routerEngine(): routes.RouterEngine | null {
70
- return container.getOptional(routes.RouterEngine);
71
- }
72
-
73
92
  get metricsEngine(): metrics.MetricsEngine {
74
93
  return container.getImplementation(metrics.MetricsEngine);
75
94
  }