@powersync/service-core 1.20.5 → 1.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/dist/api/RouteAPI.d.ts +3 -3
  3. package/dist/api/diagnostics.d.ts +1 -1
  4. package/dist/api/diagnostics.js +18 -2
  5. package/dist/api/diagnostics.js.map +1 -1
  6. package/dist/entry/commands/teardown-action.js +1 -1
  7. package/dist/entry/commands/teardown-action.js.map +1 -1
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.js +1 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/modules/AbstractModule.d.ts +1 -1
  12. package/dist/replication/AbstractReplicationJob.js +1 -1
  13. package/dist/replication/AbstractReplicationJob.js.map +1 -1
  14. package/dist/replication/AbstractReplicator.d.ts +6 -6
  15. package/dist/replication/AbstractReplicator.js +21 -21
  16. package/dist/replication/AbstractReplicator.js.map +1 -1
  17. package/dist/routes/endpoints/admin.js +7 -3
  18. package/dist/routes/endpoints/admin.js.map +1 -1
  19. package/dist/routes/endpoints/checkpointing.js +1 -1
  20. package/dist/routes/endpoints/checkpointing.js.map +1 -1
  21. package/dist/routes/endpoints/socket-route.js +1 -1
  22. package/dist/routes/endpoints/socket-route.js.map +1 -1
  23. package/dist/routes/endpoints/sync-rules.js +7 -7
  24. package/dist/routes/endpoints/sync-rules.js.map +1 -1
  25. package/dist/routes/endpoints/sync-stream.js +2 -2
  26. package/dist/routes/endpoints/sync-stream.js.map +1 -1
  27. package/dist/runner/teardown.js +4 -4
  28. package/dist/runner/teardown.js.map +1 -1
  29. package/dist/storage/BucketStorage.d.ts +9 -9
  30. package/dist/storage/BucketStorage.js +9 -9
  31. package/dist/storage/BucketStorageFactory.d.ts +23 -18
  32. package/dist/storage/BucketStorageFactory.js +12 -11
  33. package/dist/storage/BucketStorageFactory.js.map +1 -1
  34. package/dist/storage/PersistedSyncRulesContent.d.ts +3 -1
  35. package/dist/storage/PersistedSyncRulesContent.js +10 -3
  36. package/dist/storage/PersistedSyncRulesContent.js.map +1 -1
  37. package/dist/storage/SourceTable.d.ts +3 -3
  38. package/dist/storage/SourceTable.js +3 -3
  39. package/dist/storage/StorageVersionConfig.d.ts +1 -1
  40. package/dist/storage/StorageVersionConfig.js +1 -1
  41. package/dist/storage/SyncRulesBucketStorage.d.ts +38 -6
  42. package/dist/storage/SyncRulesBucketStorage.js +14 -0
  43. package/dist/storage/SyncRulesBucketStorage.js.map +1 -1
  44. package/dist/storage/WriteCheckpointAPI.d.ts +6 -6
  45. package/dist/storage/WriteCheckpointAPI.js +1 -1
  46. package/dist/storage/bson.d.ts +0 -1
  47. package/dist/storage/bson.js +0 -4
  48. package/dist/storage/bson.js.map +1 -1
  49. package/dist/sync/BucketChecksumState.d.ts +2 -5
  50. package/dist/sync/BucketChecksumState.js +116 -57
  51. package/dist/sync/BucketChecksumState.js.map +1 -1
  52. package/dist/tracing/PerformanceTracer.d.ts +44 -0
  53. package/dist/tracing/PerformanceTracer.js +102 -0
  54. package/dist/tracing/PerformanceTracer.js.map +1 -0
  55. package/dist/tracing/TraceWriter.d.ts +22 -0
  56. package/dist/tracing/TraceWriter.js +63 -0
  57. package/dist/tracing/TraceWriter.js.map +1 -0
  58. package/dist/util/checkpointing.js +1 -1
  59. package/dist/util/config/compound-config-collector.d.ts +1 -1
  60. package/dist/util/config/compound-config-collector.js +2 -2
  61. package/dist/util/config/compound-config-collector.js.map +1 -1
  62. package/dist/util/config/sync-rules/impl/filesystem-sync-rules-collector.js +1 -1
  63. package/dist/util/config/sync-rules/impl/filesystem-sync-rules-collector.js.map +1 -1
  64. package/dist/util/env.js +1 -1
  65. package/dist/util/protocol-types.d.ts +1 -1
  66. package/dist/util/protocol-types.js +1 -1
  67. package/package.json +11 -11
  68. package/src/api/RouteAPI.ts +3 -3
  69. package/src/api/diagnostics.ts +26 -3
  70. package/src/entry/commands/teardown-action.ts +1 -1
  71. package/src/index.ts +2 -0
  72. package/src/modules/AbstractModule.ts +1 -1
  73. package/src/replication/AbstractReplicationJob.ts +1 -1
  74. package/src/replication/AbstractReplicator.ts +23 -23
  75. package/src/routes/endpoints/admin.ts +7 -3
  76. package/src/routes/endpoints/checkpointing.ts +1 -1
  77. package/src/routes/endpoints/socket-route.ts +1 -1
  78. package/src/routes/endpoints/sync-rules.ts +7 -7
  79. package/src/routes/endpoints/sync-stream.ts +2 -2
  80. package/src/runner/teardown.ts +4 -4
  81. package/src/storage/BucketStorage.ts +9 -9
  82. package/src/storage/BucketStorageFactory.ts +29 -22
  83. package/src/storage/PersistedSyncRulesContent.ts +12 -4
  84. package/src/storage/SourceTable.ts +3 -3
  85. package/src/storage/StorageVersionConfig.ts +1 -1
  86. package/src/storage/SyncRulesBucketStorage.ts +46 -7
  87. package/src/storage/WriteCheckpointAPI.ts +6 -6
  88. package/src/storage/bson.ts +0 -5
  89. package/src/sync/BucketChecksumState.ts +137 -73
  90. package/src/sync/sync.ts +1 -1
  91. package/src/tracing/PerformanceTracer.ts +126 -0
  92. package/src/tracing/TraceWriter.ts +67 -0
  93. package/src/util/checkpointing.ts +1 -1
  94. package/src/util/config/compound-config-collector.ts +3 -3
  95. package/src/util/config/sync-rules/impl/filesystem-sync-rules-collector.ts +1 -1
  96. package/src/util/env.ts +1 -1
  97. package/src/util/protocol-types.ts +1 -1
  98. package/test/src/auth.test.ts +109 -1
  99. package/test/src/diagnostics.test.ts +151 -0
  100. package/test/src/sync/BucketChecksumState.test.ts +221 -65
  101. package/test/tsconfig.json +0 -1
  102. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,44 @@
1
+ export interface Span extends Disposable {
2
+ name: string;
3
+ startAt: number;
4
+ endAt: number;
5
+ selfDuration: number;
6
+ nestedSince: number | undefined;
7
+ subtrackFromSelf: number;
8
+ nestedDurations: Record<string, number>;
9
+ /**
10
+ * End the span - same as [Symbol.dispose]().
11
+ *
12
+ * Safe to call multiple times. Any nested spans will automatically end as well.
13
+ *
14
+ * Returns an aggregate record of category -> "selfDuration".
15
+ */
16
+ end(): Record<string, number>;
17
+ }
18
+ /**
19
+ * Lightweight tracing helper, with two main goals:
20
+ * 1. Generate aggregate timing info with low overhead.
21
+ * 2. Optional support for generating trace files during development.
22
+ *
23
+ * This is only intended for a single "thread" - concurrent operations on the same instance have undefined behavior.
24
+ * To trace concurrent operations, use separate instances of PerformanceTracer.
25
+ *
26
+ * Spans cannot be overlapping: If a parent span is ended, all nested spans are automatically ended.
27
+ */
28
+ export declare class PerformanceTracer<K extends string> {
29
+ stack: Span[];
30
+ threadId: number;
31
+ constructor(traceName: string);
32
+ /**
33
+ * Recommended usage:
34
+ *
35
+ * using _ = tracer.span('cat', 'details');
36
+ *
37
+ * The above automatically ends the span when it goes out of scope. Alternatively, call
38
+ * .end() on the span to end it earlier.
39
+ *
40
+ * @param category one of the defined categories
41
+ * @param subcat optional subcategory. Not used for calculating "self" durations in the aggregate API.
42
+ */
43
+ span(category: K, subcat?: string): Span;
44
+ }
@@ -0,0 +1,102 @@
1
+ import { traceWriter } from './TraceWriter.js';
2
+ function now() {
3
+ return Number(process.hrtime.bigint() / 1000n);
4
+ }
5
+ let nextThreadId = 1;
6
+ /**
7
+ * Lightweight tracing helper, with two main goals:
8
+ * 1. Generate aggregate timing info with low overhead.
9
+ * 2. Optional support for generating trace files during development.
10
+ *
11
+ * This is only intended for a single "thread" - concurrent operations on the same instance have undefined behavior.
12
+ * To trace concurrent operations, use separate instances of PerformanceTracer.
13
+ *
14
+ * Spans cannot be overlapping: If a parent span is ended, all nested spans are automatically ended.
15
+ */
16
+ export class PerformanceTracer {
17
+ stack = [];
18
+ threadId;
19
+ constructor(traceName) {
20
+ this.threadId = nextThreadId;
21
+ nextThreadId += 1;
22
+ traceWriter?.write({
23
+ ph: 'M',
24
+ cat: '__metadata',
25
+ name: 'thread_name',
26
+ pid: process.pid,
27
+ tid: this.threadId,
28
+ args: { name: `PowerSync ${traceName}` }
29
+ });
30
+ }
31
+ /**
32
+ * Recommended usage:
33
+ *
34
+ * using _ = tracer.span('cat', 'details');
35
+ *
36
+ * The above automatically ends the span when it goes out of scope. Alternatively, call
37
+ * .end() on the span to end it earlier.
38
+ *
39
+ * @param category one of the defined categories
40
+ * @param subcat optional subcategory. Not used for calculating "self" durations in the aggregate API.
41
+ */
42
+ span(category, subcat) {
43
+ const stack = this.stack;
44
+ const index = this.stack.length;
45
+ const parent = this.stack[this.stack.length - 1];
46
+ const threadId = this.threadId;
47
+ const startAt = now();
48
+ if (parent != null) {
49
+ parent.nestedSince ??= startAt;
50
+ }
51
+ let name = category;
52
+ if (subcat) {
53
+ name += ':' + subcat;
54
+ }
55
+ const s = {
56
+ name,
57
+ startAt: now(),
58
+ selfDuration: 0,
59
+ endAt: 0,
60
+ nestedSince: undefined,
61
+ subtrackFromSelf: 0,
62
+ nestedDurations: {},
63
+ end() {
64
+ if (this.endAt != 0) {
65
+ return this.nestedDurations;
66
+ }
67
+ while (stack.length - 1 > index) {
68
+ stack[stack.length - 1].end();
69
+ }
70
+ const endAt = now();
71
+ this.endAt = endAt;
72
+ const endTime = this.nestedSince ?? endAt;
73
+ this.selfDuration = endTime - startAt - this.subtrackFromSelf;
74
+ traceWriter?.write({
75
+ name,
76
+ cat: 'powersync',
77
+ ph: 'X',
78
+ ts: this.startAt,
79
+ dur: endAt - startAt,
80
+ pid: process.pid,
81
+ tid: threadId
82
+ });
83
+ stack.pop();
84
+ if (parent != null) {
85
+ parent.subtrackFromSelf += endAt - parent.nestedSince;
86
+ for (let key in this.nestedDurations) {
87
+ parent.nestedDurations[key] = (parent.nestedDurations[key] ?? 0) + this.nestedDurations[key];
88
+ }
89
+ parent.nestedDurations[category] = (parent.nestedDurations[category] ?? 0) + this.selfDuration;
90
+ parent.nestedSince = undefined;
91
+ }
92
+ return this.nestedDurations;
93
+ },
94
+ [Symbol.dispose]() {
95
+ this.end();
96
+ }
97
+ };
98
+ this.stack.push(s);
99
+ return s;
100
+ }
101
+ }
102
+ //# sourceMappingURL=PerformanceTracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PerformanceTracer.js","sourceRoot":"","sources":["../../src/tracing/PerformanceTracer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import * as fs from 'node:fs/promises';
2
+ /**
3
+ * Write traces in the Chrome JSON Trace Format.
4
+ *
5
+ * View at https://ui.perfetto.dev/
6
+ */
7
+ declare class TraceWriter {
8
+ readonly path: string;
9
+ handle: fs.FileHandle | null;
10
+ length: number;
11
+ queue: any[];
12
+ private mutex;
13
+ constructor(path: string);
14
+ open(): Promise<void>;
15
+ write(...traceEvents: any[]): void;
16
+ writeAsync(...traceEvents: any[]): Promise<void>;
17
+ }
18
+ /**
19
+ * traceWriter, only present if POWERSYNC_TRACE_FILE env var is configured.
20
+ */
21
+ export declare const traceWriter: TraceWriter | null;
22
+ export {};
@@ -0,0 +1,63 @@
1
+ import { Mutex } from 'async-mutex';
2
+ import * as fs from 'node:fs/promises';
3
+ /**
4
+ * Write traces in the Chrome JSON Trace Format.
5
+ *
6
+ * View at https://ui.perfetto.dev/
7
+ */
8
+ class TraceWriter {
9
+ path;
10
+ handle = null;
11
+ length = 0;
12
+ queue = [];
13
+ mutex = new Mutex();
14
+ constructor(path) {
15
+ this.path = path;
16
+ this.open().catch((e) => {
17
+ console.error(`Failed to open trace file at ${path}`, e);
18
+ });
19
+ }
20
+ async open() {
21
+ await this.mutex.runExclusive(async () => {
22
+ this.handle = await fs.open(this.path, 'w+');
23
+ this.handle.truncate(0);
24
+ await this.handle.write('[]');
25
+ this.length = 2;
26
+ });
27
+ }
28
+ write(...traceEvents) {
29
+ this.writeAsync(...traceEvents).catch((e) => {
30
+ console.error(`Failed to write trace file`, e);
31
+ });
32
+ }
33
+ async writeAsync(...traceEvents) {
34
+ this.queue.push(...traceEvents);
35
+ await this.mutex.runExclusive(async () => {
36
+ if (this.queue.length > 0) {
37
+ // Write queued events.
38
+ // After each write, we end the file as a valid JSON array.
39
+ // On the next write, we overwrite the last character to extend the array.
40
+ const buffer = Buffer.from(JSON.stringify(this.queue));
41
+ await this.handle?.write(buffer, 1, buffer.length - 1, this.length - 1);
42
+ this.queue = [];
43
+ this.length += buffer.length - 2;
44
+ }
45
+ });
46
+ }
47
+ }
48
+ const traceFile = process.env.POWERSYNC_TRACE_FILE;
49
+ /**
50
+ * traceWriter, only present if POWERSYNC_TRACE_FILE env var is configured.
51
+ */
52
+ export const traceWriter = traceFile ? new TraceWriter(traceFile) : null;
53
+ if (traceWriter) {
54
+ traceWriter.write({
55
+ ph: 'M',
56
+ cat: '__metadata',
57
+ name: 'process_name',
58
+ pid: process.pid,
59
+ tid: 1000,
60
+ args: { name: 'powersync' }
61
+ });
62
+ }
63
+ //# sourceMappingURL=TraceWriter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TraceWriter.js","sourceRoot":"","sources":["../../src/tracing/TraceWriter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEvC;;;;GAIG;AACH,MAAM,WAAW;IAMa;IAL5B,MAAM,GAAyB,IAAI,CAAC;IACpC,MAAM,GAAG,CAAC,CAAC;IACX,KAAK,GAAU,EAAE,CAAC;IACV,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAE5B,YAA4B,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,OAAO,CAAC,KAAK,CAAC,gCAAgC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACvC,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,WAAkB;QACzB,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1C,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,GAAG,WAAkB;QACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,EAAE;YACvC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,uBAAuB;gBACvB,2DAA2D;gBAC3D,0EAA0E;gBAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvD,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACxE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAChB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;AACnD;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAEzE,IAAI,WAAW,EAAE,CAAC;IAChB,WAAW,CAAC,KAAK,CAAC;QAChB,EAAE,EAAE,GAAG;QACP,GAAG,EAAE,YAAY;QACjB,IAAI,EAAE,cAAc;QACpB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,IAAI;QACT,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;KAC5B,CAAC,CAAC;AACL,CAAC"}
@@ -3,7 +3,7 @@ export async function createWriteCheckpoint(options) {
3
3
  const full_user_id = checkpointUserId(options.userId, options.clientId);
4
4
  const syncBucketStorage = await options.storage.getActiveStorage();
5
5
  if (!syncBucketStorage) {
6
- throw new ServiceError(ErrorCode.PSYNC_S2302, `Cannot create Write Checkpoint since no sync rules are active.`);
6
+ throw new ServiceError(ErrorCode.PSYNC_S2302, `Cannot create Write Checkpoint since no sync config is active.`);
7
7
  }
8
8
  const { writeCheckpoint, currentCheckpoint } = await options.api.createReplicationHead(async (currentCheckpoint) => {
9
9
  const writeCheckpoint = await syncBucketStorage.createManagedWriteCheckpoint({
@@ -10,7 +10,7 @@ export type CompoundConfigCollectorOptions = {
10
10
  */
11
11
  configCollectors: ConfigCollector[];
12
12
  /**
13
- * Collectors for PowerSync sync rules content.
13
+ * Collectors for PowerSync sync config content.
14
14
  * The configuration from first collector to provide a configuration
15
15
  * is used. The order of the collectors specifies precedence
16
16
  */
@@ -173,11 +173,11 @@ export class CompoundConfigCollector {
173
173
  if (config) {
174
174
  return config;
175
175
  }
176
- logger.debug(`Could not collect sync rules with ${collector.name} method. Moving on to next method if available.`);
176
+ logger.debug(`Could not collect sync config with ${collector.name} method. Moving on to next method if available.`);
177
177
  }
178
178
  catch (ex) {
179
179
  // An error in a collector is a hard stop
180
- throw new Error(`Could not collect sync rules using ${collector.name} method. Caught exception: ${ex}`);
180
+ throw new Error(`Could not collect sync config using ${collector.name} method. Caught exception: ${ex}`);
181
181
  }
182
182
  }
183
183
  return {
@@ -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":"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"}
@@ -10,7 +10,7 @@ export class FileSystemSyncRulesCollector extends SyncRulesCollector {
10
10
  return null;
11
11
  }
12
12
  const { config_path } = runnerConfig;
13
- // Depending on the container, the sync rules may not actually be present.
13
+ // Depending on the container, the sync config may not actually be present.
14
14
  // Only persist the path here, and load on demand using `loadSyncRules()`.
15
15
  return {
16
16
  present: true,
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem-sync-rules-collector.js","sourceRoot":"","sources":["../../../../../src/util/config/sync-rules/impl/filesystem-sync-rules-collector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,OAAO,4BAA6B,SAAQ,kBAAkB;IAClE,IAAI,IAAI;QACN,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAsC,EAAE,YAA0B;QAC9E,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;QAErC,0EAA0E;QAC1E,0EAA0E;QAC1E,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,aAAa,IAAI,IAAI;YAC5D,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;SACnF,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"filesystem-sync-rules-collector.js","sourceRoot":"","sources":["../../../../../src/util/config/sync-rules/impl/filesystem-sync-rules-collector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,OAAO,4BAA6B,SAAQ,kBAAkB;IAClE,IAAI,IAAI;QACN,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAsC,EAAE,YAA0B;QAC9E,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC;QAC/C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;QAErC,2EAA2E;QAC3E,0EAA0E;QAC1E,OAAO;YACL,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,UAAU,CAAC,WAAW,EAAE,aAAa,IAAI,IAAI;YAC5D,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS;SACnF,CAAC;IACJ,CAAC;CACF"}
package/dist/util/env.js CHANGED
@@ -11,7 +11,7 @@ export const env = utils.collectEnvironmentVariables({
11
11
  POWERSYNC_CONFIG_B64: utils.type.string.optional(),
12
12
  /**
13
13
  * @deprecated use POWERSYNC_SYNC_CONFIG_B64 instead.
14
- * Base64 encoded contents of sync rules YAML
14
+ * Base64 encoded contents of sync config YAML
15
15
  */
16
16
  POWERSYNC_SYNC_RULES_B64: utils.type.string.optional(),
17
17
  /**
@@ -86,7 +86,7 @@ export declare const StreamingSyncRequest: t.ObjectCodec<{
86
86
  */
87
87
  raw_data: t.OptionalCodec<t.Codec<boolean, boolean, string, t.CodecProps>>;
88
88
  /**
89
- * Client parameters to be passed to the sync rules.
89
+ * Client parameters to be passed to the sync config.
90
90
  */
91
91
  parameters: t.OptionalCodec<t.Codec<Record<string, any>, Record<string, any>, string, t.CodecProps>>;
92
92
  /**
@@ -59,7 +59,7 @@ export const StreamingSyncRequest = t.object({
59
59
  */
60
60
  raw_data: t.boolean.optional(),
61
61
  /**
62
- * Client parameters to be passed to the sync rules.
62
+ * Client parameters to be passed to the sync config.
63
63
  */
64
64
  parameters: t.record(t.any).optional(),
65
65
  /**
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "1.20.5",
8
+ "version": "1.21.0",
9
9
  "main": "dist/index.js",
10
10
  "license": "FSL-1.1-ALv2",
11
11
  "type": "module",
@@ -24,26 +24,26 @@
24
24
  "ipaddr.js": "^2.1.0",
25
25
  "ix": "^5.0.0",
26
26
  "jose": "^4.15.1",
27
- "lodash": "^4.17.21",
27
+ "lodash": "^4.18.1",
28
28
  "lru-cache": "^10.2.2",
29
29
  "negotiator": "^1.0.0",
30
30
  "node-fetch": "^3.3.2",
31
31
  "ts-codec": "^1.3.0",
32
32
  "uri-js": "^4.4.1",
33
- "uuid": "^11.1.0",
33
+ "uuid": "^14.0.0",
34
34
  "winston": "^3.13.0",
35
- "yaml": "^2.3.2",
36
- "@powersync/lib-services-framework": "0.9.3",
37
- "@powersync/service-rsocket-router": "0.2.19",
38
- "@powersync/service-jsonbig": "0.17.12",
39
- "@powersync/service-sync-rules": "0.35.0",
40
- "@powersync/service-types": "0.15.1"
35
+ "yaml": "^2.8.3",
36
+ "@powersync/lib-services-framework": "0.9.4",
37
+ "@powersync/service-jsonbig": "0.17.13",
38
+ "@powersync/service-rsocket-router": "0.2.20",
39
+ "@powersync/service-sync-rules": "0.36.0",
40
+ "@powersync/service-types": "0.15.2"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@types/async": "^3.2.24",
44
- "@types/negotiator": "^0.6.4",
45
44
  "@types/lodash": "^4.17.5",
46
- "fastify": "^5.8.2",
45
+ "@types/negotiator": "^0.6.4",
46
+ "fastify": "^5.8.5",
47
47
  "fastify-plugin": "^5.0.1"
48
48
  },
49
49
  "scripts": {
@@ -43,7 +43,7 @@ export interface RouteAPI {
43
43
  * Generates replication table information from a given pattern of tables.
44
44
  *
45
45
  * @param tablePatterns A set of table patterns which typically come from
46
- * the tables listed in sync rules definitions.
46
+ * the tables listed in sync config definitions.
47
47
  *
48
48
  * @param sqlSyncRules
49
49
  * @returns A result of all the tables and columns which should be replicated
@@ -76,7 +76,7 @@ export interface RouteAPI {
76
76
 
77
77
  /**
78
78
  * @returns The schema for tables inside the connected database. This is typically
79
- * used to validate sync rules.
79
+ * used to validate sync config.
80
80
  */
81
81
  getConnectionSchema(): Promise<types.DatabaseSchema[]>;
82
82
 
@@ -92,7 +92,7 @@ export interface RouteAPI {
92
92
  shutdown(): Promise<void>;
93
93
 
94
94
  /**
95
- * Get the default schema (or database) when only a table name is specified in sync rules.
95
+ * Get the default schema (or database) when only a table name is specified in sync config.
96
96
  */
97
97
  getParseSyncRulesOptions(): ParseSyncRulesOptions;
98
98
  }
@@ -8,7 +8,7 @@ import { RouteAPI, SlotWalBudgetInfo } from './RouteAPI.js';
8
8
 
9
9
  export interface DiagnosticsOptions {
10
10
  /**
11
- * Include sync rules content in response.
11
+ * Include sync config content in response.
12
12
  */
13
13
  include_content?: boolean;
14
14
 
@@ -90,7 +90,7 @@ export async function getSyncRulesStatus(
90
90
  logger.warn(`Unable to get replication lag`, e);
91
91
  }
92
92
 
93
- if (apiHandler.getSlotWalBudget) {
93
+ if (apiHandler.getSlotWalBudget && sync_rules.slot_name) {
94
94
  try {
95
95
  slot_wal_budget = await apiHandler.getSlotWalBudget({
96
96
  slotName: sync_rules.slot_name
@@ -145,8 +145,31 @@ export async function getSyncRulesStatus(
145
145
  }
146
146
  errors.push(...syncRuleErrors.map((error) => syncConfigYamlErrorToReplicationError(error, now)));
147
147
 
148
+ if (
149
+ slot_wal_budget &&
150
+ slot_wal_budget.wal_status !== 'lost' &&
151
+ slot_wal_budget.safe_wal_size != null &&
152
+ slot_wal_budget.max_slot_wal_keep_size != null &&
153
+ slot_wal_budget.max_slot_wal_keep_size > 0
154
+ ) {
155
+ const budgetPct = Math.max(
156
+ 0,
157
+ Math.round((slot_wal_budget.safe_wal_size / slot_wal_budget.max_slot_wal_keep_size) * 100)
158
+ );
159
+ if (budgetPct <= 50) {
160
+ errors.push({
161
+ level: 'warning',
162
+ message:
163
+ `WAL budget is low: ${budgetPct}% remaining. ` +
164
+ `The replication slot may be invalidated if WAL consumption ` +
165
+ `continues at this rate. Consider increasing max_slot_wal_keep_size.`,
166
+ ts: now
167
+ });
168
+ }
169
+ }
170
+
148
171
  if (live_status && status?.active) {
149
- // Check replication lag for active sync rules.
172
+ // Check replication lag for active replication stream.
150
173
  // Right now we exclude mysql, since it we don't have consistent keepalives for it.
151
174
  if (sync_rules.last_checkpoint_ts == null && sync_rules.last_keepalive_ts == null) {
152
175
  errors.push({
@@ -13,7 +13,7 @@ export function registerTearDownAction(program: Command) {
13
13
 
14
14
  return teardownCommand
15
15
  .argument('[ack]', 'Type `TEARDOWN` to confirm teardown should occur')
16
- .description('Terminate all replicating sync rules, clear remote configuration and remove all data')
16
+ .description('Terminate all replicating replication streams, clear remote configuration and remove all data')
17
17
  .action(async (ack, options) => {
18
18
  if (ack !== 'TEARDOWN') {
19
19
  throw new ServiceError(ErrorCode.PSYNC_S0102, 'TEARDOWN was not acknowledged.');
package/src/index.ts CHANGED
@@ -42,4 +42,6 @@ export * as utils from './util/util-index.js';
42
42
  export * from './streams/streams-index.js';
43
43
  export * as streams from './streams/streams-index.js';
44
44
 
45
+ export * from './tracing/PerformanceTracer.js';
46
+
45
47
  export * as bson from 'bson';
@@ -5,7 +5,7 @@ import { ServiceContextContainer } from '../system/ServiceContext.js';
5
5
 
6
6
  export interface TearDownOptions {
7
7
  /**
8
- * If required, tear down any configuration/state for the specific sync rules
8
+ * If required, tear down any configuration/state for the specific replication stream
9
9
  */
10
10
  syncRules?: PersistedSyncRulesContent[];
11
11
  }
@@ -54,7 +54,7 @@ export abstract class AbstractReplicationJob {
54
54
  * Safely stop the replication process
55
55
  */
56
56
  public async stop(): Promise<void> {
57
- this.logger.info(`Stopping replication job for sync rule iteration: ${this.storage.group_id}`);
57
+ this.logger.info(`Stopping replication job`);
58
58
  this.abortController.abort();
59
59
  await this.isReplicatingPromise;
60
60
  }