@quereus/sync-coordinator 0.3.4 → 0.3.6

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 (74) hide show
  1. package/README.md +7 -1
  2. package/package.json +3 -3
  3. package/dist/src/bin/sync-coordinator.d.ts +0 -6
  4. package/dist/src/bin/sync-coordinator.d.ts.map +0 -1
  5. package/dist/src/bin/sync-coordinator.js +0 -85
  6. package/dist/src/bin/sync-coordinator.js.map +0 -1
  7. package/dist/src/common/index.d.ts +0 -5
  8. package/dist/src/common/index.d.ts.map +0 -1
  9. package/dist/src/common/index.js +0 -5
  10. package/dist/src/common/index.js.map +0 -1
  11. package/dist/src/common/logger.d.ts +0 -20
  12. package/dist/src/common/logger.d.ts.map +0 -1
  13. package/dist/src/common/logger.js +0 -24
  14. package/dist/src/common/logger.js.map +0 -1
  15. package/dist/src/config/index.d.ts +0 -6
  16. package/dist/src/config/index.d.ts.map +0 -1
  17. package/dist/src/config/index.js +0 -6
  18. package/dist/src/config/index.js.map +0 -1
  19. package/dist/src/config/loader.d.ts +0 -27
  20. package/dist/src/config/loader.d.ts.map +0 -1
  21. package/dist/src/config/loader.js +0 -144
  22. package/dist/src/config/loader.js.map +0 -1
  23. package/dist/src/config/types.d.ts +0 -74
  24. package/dist/src/config/types.d.ts.map +0 -1
  25. package/dist/src/config/types.js +0 -27
  26. package/dist/src/config/types.js.map +0 -1
  27. package/dist/src/index.d.ts +0 -21
  28. package/dist/src/index.d.ts.map +0 -1
  29. package/dist/src/index.js +0 -26
  30. package/dist/src/index.js.map +0 -1
  31. package/dist/src/metrics/coordinator-metrics.d.ts +0 -27
  32. package/dist/src/metrics/coordinator-metrics.d.ts.map +0 -1
  33. package/dist/src/metrics/coordinator-metrics.js +0 -57
  34. package/dist/src/metrics/coordinator-metrics.js.map +0 -1
  35. package/dist/src/metrics/index.d.ts +0 -7
  36. package/dist/src/metrics/index.d.ts.map +0 -1
  37. package/dist/src/metrics/index.js +0 -7
  38. package/dist/src/metrics/index.js.map +0 -1
  39. package/dist/src/metrics/registry.d.ts +0 -53
  40. package/dist/src/metrics/registry.d.ts.map +0 -1
  41. package/dist/src/metrics/registry.js +0 -158
  42. package/dist/src/metrics/registry.js.map +0 -1
  43. package/dist/src/metrics/types.d.ts +0 -62
  44. package/dist/src/metrics/types.d.ts.map +0 -1
  45. package/dist/src/metrics/types.js +0 -16
  46. package/dist/src/metrics/types.js.map +0 -1
  47. package/dist/src/server/index.d.ts +0 -7
  48. package/dist/src/server/index.d.ts.map +0 -1
  49. package/dist/src/server/index.js +0 -7
  50. package/dist/src/server/index.js.map +0 -1
  51. package/dist/src/server/routes.d.ts +0 -10
  52. package/dist/src/server/routes.d.ts.map +0 -1
  53. package/dist/src/server/routes.js +0 -153
  54. package/dist/src/server/routes.js.map +0 -1
  55. package/dist/src/server/server.d.ts +0 -34
  56. package/dist/src/server/server.d.ts.map +0 -1
  57. package/dist/src/server/server.js +0 -57
  58. package/dist/src/server/server.js.map +0 -1
  59. package/dist/src/server/websocket.d.ts +0 -10
  60. package/dist/src/server/websocket.d.ts.map +0 -1
  61. package/dist/src/server/websocket.js +0 -159
  62. package/dist/src/server/websocket.js.map +0 -1
  63. package/dist/src/service/coordinator-service.d.ts +0 -114
  64. package/dist/src/service/coordinator-service.d.ts.map +0 -1
  65. package/dist/src/service/coordinator-service.js +0 -373
  66. package/dist/src/service/coordinator-service.js.map +0 -1
  67. package/dist/src/service/index.d.ts +0 -6
  68. package/dist/src/service/index.d.ts.map +0 -1
  69. package/dist/src/service/index.js +0 -5
  70. package/dist/src/service/index.js.map +0 -1
  71. package/dist/src/service/types.d.ts +0 -142
  72. package/dist/src/service/types.d.ts.map +0 -1
  73. package/dist/src/service/types.js +0 -5
  74. package/dist/src/service/types.js.map +0 -1
@@ -1,57 +0,0 @@
1
- /**
2
- * Coordinator-specific metrics definitions.
3
- */
4
- import { globalRegistry } from './registry.js';
5
- import { DEFAULT_SIZE_BUCKETS } from './types.js';
6
- /**
7
- * Create coordinator metrics on a registry.
8
- */
9
- export function createCoordinatorMetrics(registry = globalRegistry) {
10
- // Connection metrics
11
- const wsConnectionsActive = registry.registerGauge('sync_websocket_connections_active', 'Current number of active WebSocket connections');
12
- const wsConnectionsTotal = registry.registerCounter('sync_websocket_connections_total', 'Total WebSocket connections since startup');
13
- // HTTP request metrics
14
- const httpRequestsTotal = registry.registerCounter('sync_http_requests_total', 'Total HTTP requests by endpoint and status');
15
- const httpRequestDuration = registry.registerHistogram('sync_http_request_duration_seconds', 'HTTP request duration in seconds');
16
- // Sync operation metrics
17
- const changesAppliedTotal = registry.registerCounter('sync_changes_applied_total', 'Total number of changes applied');
18
- const changesReceivedTotal = registry.registerCounter('sync_changes_received_total', 'Total number of changes received from clients');
19
- const changesRejectedTotal = registry.registerCounter('sync_changes_rejected_total', 'Total number of changes rejected during validation');
20
- const changesBroadcastTotal = registry.registerCounter('sync_changes_broadcast_total', 'Total number of changes broadcast to clients');
21
- // Snapshot metrics
22
- const snapshotRequestsTotal = registry.registerCounter('sync_snapshot_requests_total', 'Total snapshot requests');
23
- const snapshotChunksTotal = registry.registerCounter('sync_snapshot_chunks_total', 'Total snapshot chunks sent');
24
- // Performance metrics
25
- const applyChangesDuration = registry.registerHistogram('sync_apply_changes_duration_seconds', 'Time to apply a batch of changes');
26
- const getChangesDuration = registry.registerHistogram('sync_get_changes_duration_seconds', 'Time to retrieve changes for a client');
27
- const changeBatchSize = registry.registerHistogram('sync_change_batch_size', 'Number of changes in a batch', DEFAULT_SIZE_BUCKETS);
28
- // Auth metrics
29
- const authAttemptsTotal = registry.registerCounter('sync_auth_attempts_total', 'Total authentication attempts');
30
- const authFailuresTotal = registry.registerCounter('sync_auth_failures_total', 'Total authentication failures');
31
- return {
32
- // Connection
33
- wsConnectionsActive,
34
- wsConnectionsTotal,
35
- // HTTP
36
- httpRequestsTotal,
37
- httpRequestDuration,
38
- // Sync operations
39
- changesAppliedTotal,
40
- changesReceivedTotal,
41
- changesRejectedTotal,
42
- changesBroadcastTotal,
43
- // Snapshots
44
- snapshotRequestsTotal,
45
- snapshotChunksTotal,
46
- // Performance
47
- applyChangesDuration,
48
- getChangesDuration,
49
- changeBatchSize,
50
- // Auth
51
- authAttemptsTotal,
52
- authFailuresTotal,
53
- // Registry reference
54
- registry,
55
- };
56
- }
57
- //# sourceMappingURL=coordinator-metrics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"coordinator-metrics.js","sourceRoot":"","sources":["../../../src/metrics/coordinator-metrics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAwB,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,WAA4B,cAAc;IACjF,qBAAqB;IACrB,MAAM,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAChD,mCAAmC,EACnC,gDAAgD,CACjD,CAAC;IAEF,MAAM,kBAAkB,GAAG,QAAQ,CAAC,eAAe,CACjD,kCAAkC,EAClC,2CAA2C,CAC5C,CAAC;IAEF,uBAAuB;IACvB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,eAAe,CAChD,0BAA0B,EAC1B,4CAA4C,CAC7C,CAAC;IAEF,MAAM,mBAAmB,GAAG,QAAQ,CAAC,iBAAiB,CACpD,oCAAoC,EACpC,kCAAkC,CACnC,CAAC;IAEF,yBAAyB;IACzB,MAAM,mBAAmB,GAAG,QAAQ,CAAC,eAAe,CAClD,4BAA4B,EAC5B,iCAAiC,CAClC,CAAC;IAEF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,eAAe,CACnD,6BAA6B,EAC7B,+CAA+C,CAChD,CAAC;IAEF,MAAM,oBAAoB,GAAG,QAAQ,CAAC,eAAe,CACnD,6BAA6B,EAC7B,oDAAoD,CACrD,CAAC;IAEF,MAAM,qBAAqB,GAAG,QAAQ,CAAC,eAAe,CACpD,8BAA8B,EAC9B,8CAA8C,CAC/C,CAAC;IAEF,mBAAmB;IACnB,MAAM,qBAAqB,GAAG,QAAQ,CAAC,eAAe,CACpD,8BAA8B,EAC9B,yBAAyB,CAC1B,CAAC;IAEF,MAAM,mBAAmB,GAAG,QAAQ,CAAC,eAAe,CAClD,4BAA4B,EAC5B,4BAA4B,CAC7B,CAAC;IAEF,sBAAsB;IACtB,MAAM,oBAAoB,GAAG,QAAQ,CAAC,iBAAiB,CACrD,qCAAqC,EACrC,kCAAkC,CACnC,CAAC;IAEF,MAAM,kBAAkB,GAAG,QAAQ,CAAC,iBAAiB,CACnD,mCAAmC,EACnC,uCAAuC,CACxC,CAAC;IAEF,MAAM,eAAe,GAAG,QAAQ,CAAC,iBAAiB,CAChD,wBAAwB,EACxB,8BAA8B,EAC9B,oBAAoB,CACrB,CAAC;IAEF,eAAe;IACf,MAAM,iBAAiB,GAAG,QAAQ,CAAC,eAAe,CAChD,0BAA0B,EAC1B,+BAA+B,CAChC,CAAC;IAEF,MAAM,iBAAiB,GAAG,QAAQ,CAAC,eAAe,CAChD,0BAA0B,EAC1B,+BAA+B,CAChC,CAAC;IAEF,OAAO;QACL,aAAa;QACb,mBAAmB;QACnB,kBAAkB;QAElB,OAAO;QACP,iBAAiB;QACjB,mBAAmB;QAEnB,kBAAkB;QAClB,mBAAmB;QACnB,oBAAoB;QACpB,oBAAoB;QACpB,qBAAqB;QAErB,YAAY;QACZ,qBAAqB;QACrB,mBAAmB;QAEnB,cAAc;QACd,oBAAoB;QACpB,kBAAkB;QAClB,eAAe;QAEf,OAAO;QACP,iBAAiB;QACjB,iBAAiB;QAEjB,qBAAqB;QACrB,QAAQ;KACT,CAAC;AACJ,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Metrics module exports.
3
- */
4
- export { type Histogram, type HistogramBucket, type MetricLabels, type CounterMetric, type GaugeMetric, type HistogramMetric, type Metric, DEFAULT_DURATION_BUCKETS, DEFAULT_SIZE_BUCKETS, } from './types.js';
5
- export { MetricsRegistry, globalRegistry, } from './registry.js';
6
- export { createCoordinatorMetrics, type CoordinatorMetrics, } from './coordinator-metrics.js';
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/metrics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,MAAM,EACX,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,GACxB,MAAM,0BAA0B,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Metrics module exports.
3
- */
4
- export { DEFAULT_DURATION_BUCKETS, DEFAULT_SIZE_BUCKETS, } from './types.js';
5
- export { MetricsRegistry, globalRegistry, } from './registry.js';
6
- export { createCoordinatorMetrics, } from './coordinator-metrics.js';
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/metrics/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAQL,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,eAAe,EACf,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,wBAAwB,GAEzB,MAAM,0BAA0B,CAAC"}
@@ -1,53 +0,0 @@
1
- /**
2
- * Metrics registry - collects and formats Prometheus metrics.
3
- */
4
- import { type CounterMetric, type GaugeMetric, type HistogramMetric } from './types.js';
5
- /**
6
- * Metrics registry for collecting and exporting metrics.
7
- */
8
- export declare class MetricsRegistry {
9
- private metrics;
10
- /**
11
- * Register a counter metric.
12
- */
13
- registerCounter(name: string, help: string): CounterMetric;
14
- /**
15
- * Register a gauge metric.
16
- */
17
- registerGauge(name: string, help: string): GaugeMetric;
18
- /**
19
- * Register a histogram metric.
20
- */
21
- registerHistogram(name: string, help: string, buckets?: number[]): HistogramMetric;
22
- /**
23
- * Increment a counter.
24
- */
25
- incCounter(metric: CounterMetric, labels?: Record<string, string>, value?: number): void;
26
- /**
27
- * Set a gauge value.
28
- */
29
- setGauge(metric: GaugeMetric, value: number, labels?: Record<string, string>): void;
30
- /**
31
- * Increment a gauge.
32
- */
33
- incGauge(metric: GaugeMetric, labels?: Record<string, string>, value?: number): void;
34
- /**
35
- * Decrement a gauge.
36
- */
37
- decGauge(metric: GaugeMetric, labels?: Record<string, string>, value?: number): void;
38
- /**
39
- * Observe a value in a histogram.
40
- */
41
- observeHistogram(metric: HistogramMetric, value: number, labels?: Record<string, string>): void;
42
- /**
43
- * Start a timer for a histogram observation.
44
- */
45
- startTimer(metric: HistogramMetric, labels?: Record<string, string>): () => void;
46
- /**
47
- * Format all metrics as Prometheus text format.
48
- */
49
- format(): string;
50
- }
51
- /** Global metrics registry instance. */
52
- export declare const globalRegistry: MetricsRegistry;
53
- //# sourceMappingURL=registry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/metrics/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EAErB,MAAM,YAAY,CAAC;AAoBpB;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAA6B;IAE5C;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa;IAW1D;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW;IAWtD;;OAEG;IACH,iBAAiB,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,MAAM,EAA6B,GAC3C,eAAe;IAYlB;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAAE,KAAK,SAAI,GAAG,IAAI;IAKvF;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,IAAI;IAKvF;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAAE,KAAK,SAAI,GAAG,IAAI;IAKnF;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAAE,KAAK,SAAI,GAAG,IAAI;IAKnF;;OAEG;IACH,gBAAgB,CACd,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAClC,IAAI;IAuBP;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM,IAAI;IAQpF;;OAEG;IACH,MAAM,IAAI,MAAM;CA4BjB;AAED,wCAAwC;AACxC,eAAO,MAAM,cAAc,iBAAwB,CAAC"}
@@ -1,158 +0,0 @@
1
- /**
2
- * Metrics registry - collects and formats Prometheus metrics.
3
- */
4
- import { DEFAULT_DURATION_BUCKETS, } from './types.js';
5
- /**
6
- * Serialize labels to a string key.
7
- */
8
- function labelsToKey(labels) {
9
- if (Object.keys(labels).length === 0)
10
- return '';
11
- return Object.entries(labels)
12
- .sort(([a], [b]) => a.localeCompare(b))
13
- .map(([k, v]) => `${k}="${v}"`)
14
- .join(',');
15
- }
16
- /**
17
- * Format labels for Prometheus output.
18
- */
19
- function formatLabels(labelKey) {
20
- return labelKey ? `{${labelKey}}` : '';
21
- }
22
- /**
23
- * Metrics registry for collecting and exporting metrics.
24
- */
25
- export class MetricsRegistry {
26
- metrics = new Map();
27
- /**
28
- * Register a counter metric.
29
- */
30
- registerCounter(name, help) {
31
- const metric = {
32
- name,
33
- help,
34
- type: 'counter',
35
- values: new Map(),
36
- };
37
- this.metrics.set(name, metric);
38
- return metric;
39
- }
40
- /**
41
- * Register a gauge metric.
42
- */
43
- registerGauge(name, help) {
44
- const metric = {
45
- name,
46
- help,
47
- type: 'gauge',
48
- values: new Map(),
49
- };
50
- this.metrics.set(name, metric);
51
- return metric;
52
- }
53
- /**
54
- * Register a histogram metric.
55
- */
56
- registerHistogram(name, help, buckets = DEFAULT_DURATION_BUCKETS) {
57
- const metric = {
58
- name,
59
- help,
60
- type: 'histogram',
61
- values: new Map(),
62
- bucketBoundaries: [...buckets].sort((a, b) => a - b),
63
- };
64
- this.metrics.set(name, metric);
65
- return metric;
66
- }
67
- /**
68
- * Increment a counter.
69
- */
70
- incCounter(metric, labels = {}, value = 1) {
71
- const key = labelsToKey(labels);
72
- metric.values.set(key, (metric.values.get(key) || 0) + value);
73
- }
74
- /**
75
- * Set a gauge value.
76
- */
77
- setGauge(metric, value, labels = {}) {
78
- const key = labelsToKey(labels);
79
- metric.values.set(key, value);
80
- }
81
- /**
82
- * Increment a gauge.
83
- */
84
- incGauge(metric, labels = {}, value = 1) {
85
- const key = labelsToKey(labels);
86
- metric.values.set(key, (metric.values.get(key) || 0) + value);
87
- }
88
- /**
89
- * Decrement a gauge.
90
- */
91
- decGauge(metric, labels = {}, value = 1) {
92
- const key = labelsToKey(labels);
93
- metric.values.set(key, (metric.values.get(key) || 0) - value);
94
- }
95
- /**
96
- * Observe a value in a histogram.
97
- */
98
- observeHistogram(metric, value, labels = {}) {
99
- const key = labelsToKey(labels);
100
- let hist = metric.values.get(key);
101
- if (!hist) {
102
- hist = {
103
- buckets: metric.bucketBoundaries.map(le => ({ le, count: 0 })),
104
- sum: 0,
105
- count: 0,
106
- };
107
- metric.values.set(key, hist);
108
- }
109
- hist.sum += value;
110
- hist.count += 1;
111
- for (const bucket of hist.buckets) {
112
- if (value <= bucket.le) {
113
- bucket.count += 1;
114
- }
115
- }
116
- }
117
- /**
118
- * Start a timer for a histogram observation.
119
- */
120
- startTimer(metric, labels = {}) {
121
- const start = performance.now();
122
- return () => {
123
- const duration = (performance.now() - start) / 1000; // Convert to seconds
124
- this.observeHistogram(metric, duration, labels);
125
- };
126
- }
127
- /**
128
- * Format all metrics as Prometheus text format.
129
- */
130
- format() {
131
- const lines = [];
132
- for (const metric of this.metrics.values()) {
133
- lines.push(`# HELP ${metric.name} ${metric.help}`);
134
- lines.push(`# TYPE ${metric.name} ${metric.type}`);
135
- if (metric.type === 'counter' || metric.type === 'gauge') {
136
- for (const [labelKey, value] of metric.values) {
137
- lines.push(`${metric.name}${formatLabels(labelKey)} ${value}`);
138
- }
139
- }
140
- else if (metric.type === 'histogram') {
141
- for (const [labelKey, hist] of metric.values) {
142
- const labelPrefix = labelKey ? `${labelKey},` : '';
143
- for (const bucket of hist.buckets) {
144
- lines.push(`${metric.name}_bucket{${labelPrefix}le="${bucket.le}"} ${bucket.count}`);
145
- }
146
- lines.push(`${metric.name}_bucket{${labelPrefix}le="+Inf"} ${hist.count}`);
147
- lines.push(`${metric.name}_sum${formatLabels(labelKey)} ${hist.sum}`);
148
- lines.push(`${metric.name}_count${formatLabels(labelKey)} ${hist.count}`);
149
- }
150
- }
151
- lines.push('');
152
- }
153
- return lines.join('\n');
154
- }
155
- }
156
- /** Global metrics registry instance. */
157
- export const globalRegistry = new MetricsRegistry();
158
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/metrics/registry.ts"],"names":[],"mappings":"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"}
@@ -1,62 +0,0 @@
1
- /**
2
- * Metrics types and interfaces.
3
- */
4
- /**
5
- * Histogram bucket for timing metrics.
6
- */
7
- export interface HistogramBucket {
8
- le: number;
9
- count: number;
10
- }
11
- /**
12
- * A histogram metric with buckets.
13
- */
14
- export interface Histogram {
15
- buckets: HistogramBucket[];
16
- sum: number;
17
- count: number;
18
- }
19
- /**
20
- * Labels for categorizing metrics.
21
- */
22
- export interface MetricLabels {
23
- [key: string]: string;
24
- }
25
- /**
26
- * Counter metric - monotonically increasing value.
27
- */
28
- export interface CounterMetric {
29
- name: string;
30
- help: string;
31
- type: 'counter';
32
- values: Map<string, number>;
33
- }
34
- /**
35
- * Gauge metric - value that can go up and down.
36
- */
37
- export interface GaugeMetric {
38
- name: string;
39
- help: string;
40
- type: 'gauge';
41
- values: Map<string, number>;
42
- }
43
- /**
44
- * Histogram metric - distribution of values.
45
- */
46
- export interface HistogramMetric {
47
- name: string;
48
- help: string;
49
- type: 'histogram';
50
- values: Map<string, Histogram>;
51
- bucketBoundaries: number[];
52
- }
53
- export type Metric = CounterMetric | GaugeMetric | HistogramMetric;
54
- /**
55
- * Default histogram buckets for timing (in seconds).
56
- */
57
- export declare const DEFAULT_DURATION_BUCKETS: number[];
58
- /**
59
- * Default histogram buckets for sizes (in bytes/items).
60
- */
61
- export declare const DEFAULT_SIZE_BUCKETS: number[];
62
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/metrics/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,MAAM,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,eAAe,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,wBAAwB,UAEpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,UAEhC,CAAC"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Metrics types and interfaces.
3
- */
4
- /**
5
- * Default histogram buckets for timing (in seconds).
6
- */
7
- export const DEFAULT_DURATION_BUCKETS = [
8
- 0.001, 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10
9
- ];
10
- /**
11
- * Default histogram buckets for sizes (in bytes/items).
12
- */
13
- export const DEFAULT_SIZE_BUCKETS = [
14
- 1, 10, 50, 100, 500, 1000, 5000, 10000, 50000, 100000
15
- ];
16
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/metrics/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2DH;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;CAC/D,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;CACtD,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Server module exports.
3
- */
4
- export { createCoordinatorServer, type CoordinatorServer, type CoordinatorServerOptions, } from './server.js';
5
- export { registerRoutes } from './routes.js';
6
- export { registerWebSocket } from './websocket.js';
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,GAC9B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Server module exports.
3
- */
4
- export { createCoordinatorServer, } from './server.js';
5
- export { registerRoutes } from './routes.js';
6
- export { registerWebSocket } from './websocket.js';
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,uBAAuB,GAGxB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * HTTP routes for sync operations.
3
- */
4
- import type { FastifyInstance } from 'fastify';
5
- import type { CoordinatorService } from '../service/coordinator-service.js';
6
- /**
7
- * Register sync HTTP routes.
8
- */
9
- export declare function registerRoutes(app: FastifyInstance, service: CoordinatorService, basePath: string): void;
10
- //# sourceMappingURL=routes.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/server/routes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAI5E;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,eAAe,EACpB,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,MAAM,GACf,IAAI,CA+JN"}
@@ -1,153 +0,0 @@
1
- /**
2
- * HTTP routes for sync operations.
3
- */
4
- import { siteIdFromBase64, siteIdToBase64, deserializeHLC, serializeHLC } from '@quereus/plugin-sync';
5
- import { httpLog } from '../common/logger.js';
6
- /**
7
- * Register sync HTTP routes.
8
- */
9
- export function registerRoutes(app, service, basePath) {
10
- // Helper to extract auth context from request
11
- const getAuthContext = (request) => {
12
- const authHeader = request.headers.authorization;
13
- const token = authHeader?.startsWith('Bearer ')
14
- ? authHeader.slice(7)
15
- : authHeader;
16
- const siteIdRaw = request.headers['x-site-id'];
17
- return {
18
- token,
19
- siteIdRaw,
20
- siteId: siteIdRaw ? siteIdFromBase64(siteIdRaw) : undefined,
21
- request,
22
- };
23
- };
24
- // Helper for error responses
25
- const errorResponse = (reply, code, message, status = 400) => {
26
- return reply.status(status).send({
27
- ok: false,
28
- error: { code, message },
29
- });
30
- };
31
- // Authenticate and get client identity
32
- const authenticate = async (request, reply) => {
33
- try {
34
- const context = getAuthContext(request);
35
- return await service.authenticate(context);
36
- }
37
- catch (err) {
38
- const message = err instanceof Error ? err.message : 'Authentication failed';
39
- errorResponse(reply, 'AUTH_FAILED', message, 401);
40
- return null;
41
- }
42
- };
43
- // GET /status - Health check and stats
44
- app.get(`${basePath}/status`, async (_request, reply) => {
45
- httpLog('GET %s/status', basePath);
46
- const status = service.getStatus();
47
- return reply.send({ ok: true, data: status });
48
- });
49
- // GET /metrics - Prometheus metrics
50
- app.get(`${basePath}/metrics`, async (_request, reply) => {
51
- httpLog('GET %s/metrics', basePath);
52
- const metrics = service.getMetrics();
53
- const output = metrics.registry.format();
54
- return reply
55
- .header('Content-Type', 'text/plain; version=0.0.4; charset=utf-8')
56
- .send(output);
57
- });
58
- // GET /changes - Get changes since HLC
59
- app.get(`${basePath}/changes`, async (request, reply) => {
60
- httpLog('GET %s/changes', basePath);
61
- const client = await authenticate(request, reply);
62
- if (!client)
63
- return;
64
- try {
65
- const query = request.query;
66
- let sinceHLC;
67
- if (query.sinceHLC) {
68
- // HLC is passed as base64-encoded serialized form
69
- const hlcBytes = Buffer.from(query.sinceHLC, 'base64');
70
- sinceHLC = deserializeHLC(hlcBytes);
71
- }
72
- const changes = await service.getChangesSince(client, sinceHLC);
73
- // Serialize HLCs in response for JSON transport
74
- const serializedChanges = changes.map(cs => ({
75
- ...cs,
76
- siteId: siteIdToBase64(cs.siteId),
77
- hlc: Buffer.from(serializeHLC(cs.hlc)).toString('base64'),
78
- changes: cs.changes.map(c => ({
79
- ...c,
80
- hlc: Buffer.from(serializeHLC(c.hlc)).toString('base64'),
81
- })),
82
- schemaMigrations: cs.schemaMigrations.map(m => ({
83
- ...m,
84
- hlc: Buffer.from(serializeHLC(m.hlc)).toString('base64'),
85
- })),
86
- }));
87
- return reply.send({ ok: true, data: { changes: serializedChanges } });
88
- }
89
- catch (err) {
90
- const message = err instanceof Error ? err.message : 'Failed to get changes';
91
- httpLog('GET /changes error: %s', message);
92
- return errorResponse(reply, 'GET_CHANGES_FAILED', message, 500);
93
- }
94
- });
95
- // POST /changes - Apply changes from client
96
- app.post(`${basePath}/changes`, async (request, reply) => {
97
- httpLog('POST %s/changes', basePath);
98
- const client = await authenticate(request, reply);
99
- if (!client)
100
- return;
101
- try {
102
- const body = request.body;
103
- if (!body.changes || !Array.isArray(body.changes)) {
104
- return errorResponse(reply, 'INVALID_BODY', 'Request body must contain changes array');
105
- }
106
- // Deserialize HLCs from JSON transport format
107
- const changes = body.changes.map((cs) => ({
108
- siteId: siteIdFromBase64(cs.siteId),
109
- transactionId: cs.transactionId,
110
- hlc: deserializeHLC(Buffer.from(cs.hlc, 'base64')),
111
- changes: cs.changes.map(c => ({
112
- ...c,
113
- hlc: deserializeHLC(Buffer.from(c.hlc, 'base64')),
114
- })),
115
- schemaMigrations: (cs.schemaMigrations || []).map(m => ({
116
- ...m,
117
- hlc: deserializeHLC(Buffer.from(m.hlc, 'base64')),
118
- })),
119
- }));
120
- const result = await service.applyChanges(client, changes);
121
- return reply.send({ ok: true, data: result });
122
- }
123
- catch (err) {
124
- const message = err instanceof Error ? err.message : 'Failed to apply changes';
125
- httpLog('POST /changes error: %s', message);
126
- return errorResponse(reply, 'APPLY_CHANGES_FAILED', message, 500);
127
- }
128
- });
129
- // GET /snapshot - Stream full snapshot
130
- app.get(`${basePath}/snapshot`, async (request, reply) => {
131
- httpLog('GET %s/snapshot', basePath);
132
- const client = await authenticate(request, reply);
133
- if (!client)
134
- return;
135
- try {
136
- // Stream snapshot as newline-delimited JSON
137
- reply.raw.setHeader('Content-Type', 'application/x-ndjson');
138
- reply.raw.setHeader('Transfer-Encoding', 'chunked');
139
- for await (const chunk of service.getSnapshotStream(client)) {
140
- const serialized = JSON.stringify(chunk) + '\n';
141
- reply.raw.write(serialized);
142
- }
143
- reply.raw.end();
144
- }
145
- catch (err) {
146
- const message = err instanceof Error ? err.message : 'Failed to get snapshot';
147
- httpLog('GET /snapshot error: %s', message);
148
- // Can't send error response if we've started streaming
149
- reply.raw.end();
150
- }
151
- });
152
- }
153
- //# sourceMappingURL=routes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../../src/server/routes.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- /**
2
- * Fastify server setup for sync-coordinator.
3
- */
4
- import { type FastifyInstance } from 'fastify';
5
- import type { CoordinatorConfig } from '../config/types.js';
6
- import { CoordinatorService } from '../service/coordinator-service.js';
7
- import type { CoordinatorHooks } from '../service/types.js';
8
- /**
9
- * Options for creating a coordinator server.
10
- */
11
- export interface CoordinatorServerOptions {
12
- /** Full configuration */
13
- config: CoordinatorConfig;
14
- /** Custom hooks for validation/auth */
15
- hooks?: CoordinatorHooks;
16
- }
17
- /**
18
- * Coordinator server instance.
19
- */
20
- export interface CoordinatorServer {
21
- /** The Fastify instance */
22
- app: FastifyInstance;
23
- /** The coordinator service */
24
- service: CoordinatorService;
25
- /** Start the server */
26
- start(): Promise<void>;
27
- /** Stop the server */
28
- stop(): Promise<void>;
29
- }
30
- /**
31
- * Create a coordinator server.
32
- */
33
- export declare function createCoordinatorServer(options: CoordinatorServerOptions): Promise<CoordinatorServer>;
34
- //# sourceMappingURL=server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/server/server.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAGxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAkC,MAAM,mCAAmC,CAAC;AACvG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,yBAAyB;IACzB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,uCAAuC;IACvC,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,GAAG,EAAE,eAAe,CAAC;IACrB,8BAA8B;IAC9B,OAAO,EAAE,kBAAkB,CAAC;IAC5B,uBAAuB;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,sBAAsB;IACtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAqD5B"}