@quereus/sync-coordinator 0.3.6 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/bin/sync-coordinator.d.ts +6 -0
- package/dist/src/bin/sync-coordinator.d.ts.map +1 -0
- package/dist/src/bin/sync-coordinator.js +85 -0
- package/dist/src/bin/sync-coordinator.js.map +1 -0
- package/dist/src/common/index.d.ts +5 -0
- package/dist/src/common/index.d.ts.map +1 -0
- package/dist/src/common/index.js +5 -0
- package/dist/src/common/index.js.map +1 -0
- package/dist/src/common/logger.d.ts +20 -0
- package/dist/src/common/logger.d.ts.map +1 -0
- package/dist/src/common/logger.js +24 -0
- package/dist/src/common/logger.js.map +1 -0
- package/dist/src/config/index.d.ts +6 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +6 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/config/loader.d.ts +27 -0
- package/dist/src/config/loader.d.ts.map +1 -0
- package/dist/src/config/loader.js +144 -0
- package/dist/src/config/loader.js.map +1 -0
- package/dist/src/config/types.d.ts +74 -0
- package/dist/src/config/types.d.ts.map +1 -0
- package/dist/src/config/types.js +27 -0
- package/dist/src/config/types.js.map +1 -0
- package/dist/src/index.d.ts +21 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +26 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/metrics/coordinator-metrics.d.ts +27 -0
- package/dist/src/metrics/coordinator-metrics.d.ts.map +1 -0
- package/dist/src/metrics/coordinator-metrics.js +57 -0
- package/dist/src/metrics/coordinator-metrics.js.map +1 -0
- package/dist/src/metrics/index.d.ts +7 -0
- package/dist/src/metrics/index.d.ts.map +1 -0
- package/dist/src/metrics/index.js +7 -0
- package/dist/src/metrics/index.js.map +1 -0
- package/dist/src/metrics/registry.d.ts +53 -0
- package/dist/src/metrics/registry.d.ts.map +1 -0
- package/dist/src/metrics/registry.js +158 -0
- package/dist/src/metrics/registry.js.map +1 -0
- package/dist/src/metrics/types.d.ts +62 -0
- package/dist/src/metrics/types.d.ts.map +1 -0
- package/dist/src/metrics/types.js +16 -0
- package/dist/src/metrics/types.js.map +1 -0
- package/dist/src/server/index.d.ts +7 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +7 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/server/routes.d.ts +10 -0
- package/dist/src/server/routes.d.ts.map +1 -0
- package/dist/src/server/routes.js +174 -0
- package/dist/src/server/routes.js.map +1 -0
- package/dist/src/server/server.d.ts +34 -0
- package/dist/src/server/server.d.ts.map +1 -0
- package/dist/src/server/server.js +57 -0
- package/dist/src/server/server.js.map +1 -0
- package/dist/src/server/websocket.d.ts +10 -0
- package/dist/src/server/websocket.d.ts.map +1 -0
- package/dist/src/server/websocket.js +167 -0
- package/dist/src/server/websocket.js.map +1 -0
- package/dist/src/service/coordinator-service.d.ts +122 -0
- package/dist/src/service/coordinator-service.d.ts.map +1 -0
- package/dist/src/service/coordinator-service.js +436 -0
- package/dist/src/service/coordinator-service.js.map +1 -0
- package/dist/src/service/database-ids.d.ts +58 -0
- package/dist/src/service/database-ids.d.ts.map +1 -0
- package/dist/src/service/database-ids.js +128 -0
- package/dist/src/service/database-ids.js.map +1 -0
- package/dist/src/service/index.d.ts +8 -0
- package/dist/src/service/index.d.ts.map +1 -0
- package/dist/src/service/index.js +7 -0
- package/dist/src/service/index.js.map +1 -0
- package/dist/src/service/store-manager.d.ts +85 -0
- package/dist/src/service/store-manager.d.ts.map +1 -0
- package/dist/src/service/store-manager.js +194 -0
- package/dist/src/service/store-manager.js.map +1 -0
- package/dist/src/service/types.d.ts +146 -0
- package/dist/src/service/types.d.ts.map +1 -0
- package/dist/src/service/types.js +5 -0
- package/dist/src/service/types.js.map +1 -0
- package/package.json +68 -67
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-coordinator.d.ts","sourceRoot":"","sources":["../../../src/bin/sync-coordinator.ts"],"names":[],"mappings":";AACA;;GAEG"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI entry point for sync-coordinator.
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import debug from 'debug';
|
|
7
|
+
import { loadConfig } from '../config/index.js';
|
|
8
|
+
import { createCoordinatorServer } from '../server/server.js';
|
|
9
|
+
const program = new Command();
|
|
10
|
+
program
|
|
11
|
+
.name('sync-coordinator')
|
|
12
|
+
.description('Standalone coordinator backend for Quereus Sync')
|
|
13
|
+
.version('0.1.0')
|
|
14
|
+
.option('-c, --config <path>', 'Path to config file (JSON)')
|
|
15
|
+
.option('-h, --host <host>', 'Host to bind to')
|
|
16
|
+
.option('-p, --port <port>', 'Port to listen on', parseInt)
|
|
17
|
+
.option('-b, --base-path <path>', 'Base path for all routes')
|
|
18
|
+
.option('-d, --data-dir <dir>', 'Directory for LevelDB data')
|
|
19
|
+
.option('--cors-origin <origins>', 'CORS allowed origins (comma-separated, or "true"/"false")')
|
|
20
|
+
.option('--auth-mode <mode>', 'Authentication mode: none, token-whitelist, custom')
|
|
21
|
+
.option('--auth-tokens <tokens>', 'Comma-separated list of allowed tokens')
|
|
22
|
+
.option('--debug <namespaces>', 'Debug namespaces (e.g., "sync-coordinator:*")')
|
|
23
|
+
.action(async (options) => {
|
|
24
|
+
// Enable debug logging if specified
|
|
25
|
+
if (options.debug) {
|
|
26
|
+
debug.enable(options.debug);
|
|
27
|
+
}
|
|
28
|
+
// Build overrides from CLI options
|
|
29
|
+
const overrides = {};
|
|
30
|
+
if (options.host)
|
|
31
|
+
overrides.host = options.host;
|
|
32
|
+
if (options.port)
|
|
33
|
+
overrides.port = options.port;
|
|
34
|
+
if (options.basePath)
|
|
35
|
+
overrides.basePath = options.basePath;
|
|
36
|
+
if (options.dataDir)
|
|
37
|
+
overrides.dataDir = options.dataDir;
|
|
38
|
+
if (options.corsOrigin) {
|
|
39
|
+
if (options.corsOrigin === 'true') {
|
|
40
|
+
overrides.cors = { origin: true };
|
|
41
|
+
}
|
|
42
|
+
else if (options.corsOrigin === 'false') {
|
|
43
|
+
overrides.cors = { origin: false };
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
overrides.cors = { origin: options.corsOrigin.split(',').map((o) => o.trim()) };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (options.authMode) {
|
|
50
|
+
overrides.auth = { mode: options.authMode };
|
|
51
|
+
}
|
|
52
|
+
if (options.authTokens) {
|
|
53
|
+
overrides.auth = overrides.auth || { mode: 'token-whitelist' };
|
|
54
|
+
overrides.auth.tokens = options.authTokens.split(',').map((t) => t.trim());
|
|
55
|
+
}
|
|
56
|
+
// Load configuration
|
|
57
|
+
const config = loadConfig({
|
|
58
|
+
configPath: options.config,
|
|
59
|
+
overrides,
|
|
60
|
+
});
|
|
61
|
+
console.log('Starting sync-coordinator...');
|
|
62
|
+
console.log(` Host: ${config.host}`);
|
|
63
|
+
console.log(` Port: ${config.port}`);
|
|
64
|
+
console.log(` Base path: ${config.basePath}`);
|
|
65
|
+
console.log(` Data dir: ${config.dataDir}`);
|
|
66
|
+
console.log(` Auth mode: ${config.auth.mode}`);
|
|
67
|
+
try {
|
|
68
|
+
const server = await createCoordinatorServer({ config });
|
|
69
|
+
// Handle shutdown signals
|
|
70
|
+
const shutdown = async () => {
|
|
71
|
+
console.log('\nShutting down...');
|
|
72
|
+
await server.stop();
|
|
73
|
+
process.exit(0);
|
|
74
|
+
};
|
|
75
|
+
process.on('SIGINT', shutdown);
|
|
76
|
+
process.on('SIGTERM', shutdown);
|
|
77
|
+
await server.start();
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
console.error('Failed to start server:', err);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
program.parse();
|
|
85
|
+
//# sourceMappingURL=sync-coordinator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-coordinator.js","sourceRoot":"","sources":["../../../src/bin/sync-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,YAAY,EACZ,SAAS,EACT,OAAO,EACP,KAAK,EACL,UAAU,EACV,OAAO,EACP,SAAS,GACV,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,YAAY,EACZ,SAAS,EACT,OAAO,EACP,KAAK,EACL,UAAU,EACV,OAAO,EACP,SAAS,GACV,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug logger setup for sync-coordinator.
|
|
3
|
+
*
|
|
4
|
+
* Uses the 'debug' library for configurable, namespace-based logging.
|
|
5
|
+
*/
|
|
6
|
+
import debug from 'debug';
|
|
7
|
+
/**
|
|
8
|
+
* Create a namespaced logger.
|
|
9
|
+
*
|
|
10
|
+
* @param namespace - Sub-namespace (e.g., 'server', 'ws', 'service')
|
|
11
|
+
* @returns A debug logger function
|
|
12
|
+
*/
|
|
13
|
+
export declare function createLogger(namespace: string): debug.Debugger;
|
|
14
|
+
export declare const serverLog: debug.Debugger;
|
|
15
|
+
export declare const httpLog: debug.Debugger;
|
|
16
|
+
export declare const wsLog: debug.Debugger;
|
|
17
|
+
export declare const serviceLog: debug.Debugger;
|
|
18
|
+
export declare const authLog: debug.Debugger;
|
|
19
|
+
export declare const configLog: debug.Debugger;
|
|
20
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/common/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,QAAQ,CAE9D;AAGD,eAAO,MAAM,SAAS,gBAAyB,CAAC;AAChD,eAAO,MAAM,OAAO,gBAAuB,CAAC;AAC5C,eAAO,MAAM,KAAK,gBAAqB,CAAC;AACxC,eAAO,MAAM,UAAU,gBAA0B,CAAC;AAClD,eAAO,MAAM,OAAO,gBAAuB,CAAC;AAC5C,eAAO,MAAM,SAAS,gBAAyB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug logger setup for sync-coordinator.
|
|
3
|
+
*
|
|
4
|
+
* Uses the 'debug' library for configurable, namespace-based logging.
|
|
5
|
+
*/
|
|
6
|
+
import debug from 'debug';
|
|
7
|
+
const ROOT_NAMESPACE = 'sync-coordinator';
|
|
8
|
+
/**
|
|
9
|
+
* Create a namespaced logger.
|
|
10
|
+
*
|
|
11
|
+
* @param namespace - Sub-namespace (e.g., 'server', 'ws', 'service')
|
|
12
|
+
* @returns A debug logger function
|
|
13
|
+
*/
|
|
14
|
+
export function createLogger(namespace) {
|
|
15
|
+
return debug(`${ROOT_NAMESPACE}:${namespace}`);
|
|
16
|
+
}
|
|
17
|
+
// Pre-created loggers for common namespaces
|
|
18
|
+
export const serverLog = createLogger('server');
|
|
19
|
+
export const httpLog = createLogger('http');
|
|
20
|
+
export const wsLog = createLogger('ws');
|
|
21
|
+
export const serviceLog = createLogger('service');
|
|
22
|
+
export const authLog = createLogger('auth');
|
|
23
|
+
export const configLog = createLogger('config');
|
|
24
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/common/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,OAAO,KAAK,CAAC,GAAG,cAAc,IAAI,SAAS,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,4CAA4C;AAC5C,MAAM,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChD,MAAM,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAClD,MAAM,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAC5C,MAAM,CAAC,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration module exports.
|
|
3
|
+
*/
|
|
4
|
+
export { type CoordinatorConfig, type PartialCoordinatorConfig, type CorsConfig, type AuthConfig, type SyncSettings, type LoggingConfig, DEFAULT_CONFIG, } from './types.js';
|
|
5
|
+
export { loadConfig, loadConfigFile, loadEnvConfig, } from './loader.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAOL,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loading from multiple sources.
|
|
3
|
+
*
|
|
4
|
+
* Priority (highest to lowest):
|
|
5
|
+
* 1. Programmatic options
|
|
6
|
+
* 2. CLI arguments
|
|
7
|
+
* 3. Environment variables
|
|
8
|
+
* 4. Config file
|
|
9
|
+
* 5. Defaults
|
|
10
|
+
*/
|
|
11
|
+
import { type CoordinatorConfig, type PartialCoordinatorConfig } from './types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Load configuration from a JSON file.
|
|
14
|
+
*/
|
|
15
|
+
export declare function loadConfigFile(configPath: string): PartialCoordinatorConfig;
|
|
16
|
+
/**
|
|
17
|
+
* Load configuration from environment variables.
|
|
18
|
+
*/
|
|
19
|
+
export declare function loadEnvConfig(): PartialCoordinatorConfig;
|
|
20
|
+
/**
|
|
21
|
+
* Load full configuration from all sources.
|
|
22
|
+
*/
|
|
23
|
+
export declare function loadConfig(options?: {
|
|
24
|
+
configPath?: string;
|
|
25
|
+
overrides?: PartialCoordinatorConfig;
|
|
26
|
+
}): CoordinatorConfig;
|
|
27
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAE9B,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,wBAAwB,CAgB3E;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,wBAAwB,CA4DxD;AAkCD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,wBAAwB,CAAC;CACjC,GAAG,iBAAiB,CAqBzB"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration loading from multiple sources.
|
|
3
|
+
*
|
|
4
|
+
* Priority (highest to lowest):
|
|
5
|
+
* 1. Programmatic options
|
|
6
|
+
* 2. CLI arguments
|
|
7
|
+
* 3. Environment variables
|
|
8
|
+
* 4. Config file
|
|
9
|
+
* 5. Defaults
|
|
10
|
+
*/
|
|
11
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
12
|
+
import { resolve } from 'node:path';
|
|
13
|
+
import { configLog } from '../common/logger.js';
|
|
14
|
+
import { DEFAULT_CONFIG, } from './types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Load configuration from a JSON file.
|
|
17
|
+
*/
|
|
18
|
+
export function loadConfigFile(configPath) {
|
|
19
|
+
const resolved = resolve(configPath);
|
|
20
|
+
if (!existsSync(resolved)) {
|
|
21
|
+
configLog('Config file not found: %s', resolved);
|
|
22
|
+
return {};
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const content = readFileSync(resolved, 'utf-8');
|
|
26
|
+
const parsed = JSON.parse(content);
|
|
27
|
+
configLog('Loaded config from %s', resolved);
|
|
28
|
+
return parsed;
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
configLog('Failed to parse config file %s: %O', resolved, err);
|
|
32
|
+
throw new Error(`Failed to parse config file: ${resolved}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Load configuration from environment variables.
|
|
37
|
+
*/
|
|
38
|
+
export function loadEnvConfig() {
|
|
39
|
+
const config = {};
|
|
40
|
+
if (process.env.SYNC_HOST) {
|
|
41
|
+
config.host = process.env.SYNC_HOST;
|
|
42
|
+
}
|
|
43
|
+
if (process.env.SYNC_PORT) {
|
|
44
|
+
config.port = parseInt(process.env.SYNC_PORT, 10);
|
|
45
|
+
}
|
|
46
|
+
if (process.env.SYNC_BASE_PATH) {
|
|
47
|
+
config.basePath = process.env.SYNC_BASE_PATH;
|
|
48
|
+
}
|
|
49
|
+
if (process.env.SYNC_DATA_DIR) {
|
|
50
|
+
config.dataDir = process.env.SYNC_DATA_DIR;
|
|
51
|
+
}
|
|
52
|
+
// CORS
|
|
53
|
+
if (process.env.SYNC_CORS_ORIGIN) {
|
|
54
|
+
const origins = process.env.SYNC_CORS_ORIGIN;
|
|
55
|
+
if (origins === 'true') {
|
|
56
|
+
config.cors = { origin: true };
|
|
57
|
+
}
|
|
58
|
+
else if (origins === 'false') {
|
|
59
|
+
config.cors = { origin: false };
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
config.cors = { origin: origins.split(',').map(o => o.trim()) };
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (process.env.SYNC_CORS_CREDENTIALS) {
|
|
66
|
+
config.cors = config.cors || {};
|
|
67
|
+
config.cors.credentials = process.env.SYNC_CORS_CREDENTIALS === 'true';
|
|
68
|
+
}
|
|
69
|
+
// Auth
|
|
70
|
+
if (process.env.SYNC_AUTH_MODE) {
|
|
71
|
+
const mode = process.env.SYNC_AUTH_MODE;
|
|
72
|
+
config.auth = { mode };
|
|
73
|
+
}
|
|
74
|
+
if (process.env.SYNC_AUTH_TOKENS) {
|
|
75
|
+
config.auth = config.auth || { mode: 'token-whitelist' };
|
|
76
|
+
config.auth.tokens = process.env.SYNC_AUTH_TOKENS.split(',').map(t => t.trim());
|
|
77
|
+
}
|
|
78
|
+
// Sync settings
|
|
79
|
+
if (process.env.SYNC_TOMBSTONE_TTL) {
|
|
80
|
+
config.sync = config.sync || {};
|
|
81
|
+
config.sync.tombstoneTTL = parseInt(process.env.SYNC_TOMBSTONE_TTL, 10);
|
|
82
|
+
}
|
|
83
|
+
if (process.env.SYNC_BATCH_SIZE) {
|
|
84
|
+
config.sync = config.sync || {};
|
|
85
|
+
config.sync.batchSize = parseInt(process.env.SYNC_BATCH_SIZE, 10);
|
|
86
|
+
}
|
|
87
|
+
// Logging
|
|
88
|
+
if (process.env.SYNC_LOG_LEVEL) {
|
|
89
|
+
config.logging = {
|
|
90
|
+
level: process.env.SYNC_LOG_LEVEL,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
return config;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Deep merge configuration objects.
|
|
97
|
+
*/
|
|
98
|
+
function mergeConfig(base, ...overrides) {
|
|
99
|
+
const result = { ...base };
|
|
100
|
+
for (const override of overrides) {
|
|
101
|
+
if (override.host !== undefined)
|
|
102
|
+
result.host = override.host;
|
|
103
|
+
if (override.port !== undefined)
|
|
104
|
+
result.port = override.port;
|
|
105
|
+
if (override.basePath !== undefined)
|
|
106
|
+
result.basePath = override.basePath;
|
|
107
|
+
if (override.dataDir !== undefined)
|
|
108
|
+
result.dataDir = override.dataDir;
|
|
109
|
+
if (override.cors) {
|
|
110
|
+
result.cors = { ...result.cors, ...override.cors };
|
|
111
|
+
}
|
|
112
|
+
if (override.auth) {
|
|
113
|
+
result.auth = { ...result.auth, ...override.auth };
|
|
114
|
+
}
|
|
115
|
+
if (override.sync) {
|
|
116
|
+
result.sync = { ...result.sync, ...override.sync };
|
|
117
|
+
}
|
|
118
|
+
if (override.logging) {
|
|
119
|
+
result.logging = { ...result.logging, ...override.logging };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Load full configuration from all sources.
|
|
126
|
+
*/
|
|
127
|
+
export function loadConfig(options = {}) {
|
|
128
|
+
const sources = [];
|
|
129
|
+
// Load from file if specified or default exists
|
|
130
|
+
const configPath = options.configPath || 'sync-coordinator.json';
|
|
131
|
+
if (options.configPath || existsSync(configPath)) {
|
|
132
|
+
sources.push(loadConfigFile(configPath));
|
|
133
|
+
}
|
|
134
|
+
// Load from environment
|
|
135
|
+
sources.push(loadEnvConfig());
|
|
136
|
+
// Apply programmatic overrides
|
|
137
|
+
if (options.overrides) {
|
|
138
|
+
sources.push(options.overrides);
|
|
139
|
+
}
|
|
140
|
+
const config = mergeConfig(DEFAULT_CONFIG, ...sources);
|
|
141
|
+
configLog('Final config: %O', config);
|
|
142
|
+
return config;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAGL,cAAc,GACf,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB;IAC/C,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;QACjD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA6B,CAAC;QAC/D,SAAS,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,SAAS,CAAC,oCAAoC,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,MAAM,GAA6B,EAAE,CAAC;IAE5C,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IACtC,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC/C,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAC7C,CAAC;IAED,OAAO;IACP,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAC7C,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,CAAC;aAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAClE,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM,CAAC;IACzE,CAAC;IAED,OAAO;IACP,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAuD,CAAC;QACjF,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,gBAAgB;IAChB,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,UAAU;IACV,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,GAAG;YACf,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,cAAqD;SACzE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAClB,IAAuB,EACvB,GAAG,SAAqC;IAExC,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAE3B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC7D,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC7D,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;YAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACzE,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS;YAAE,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAEtE,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrD,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrD,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrD,CAAC;QACD,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,UAGvB,EAAE;IACJ,MAAM,OAAO,GAA+B,EAAE,CAAC;IAE/C,gDAAgD;IAChD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,uBAAuB,CAAC;IACjE,IAAI,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAE9B,+BAA+B;IAC/B,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,EAAE,GAAG,OAAO,CAAC,CAAC;IACvD,SAAS,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;IAEtC,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types for sync-coordinator.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* CORS configuration.
|
|
6
|
+
*/
|
|
7
|
+
export interface CorsConfig {
|
|
8
|
+
/** Allowed origins. true = all, false = none, string/array = specific origins */
|
|
9
|
+
origin: boolean | string | string[];
|
|
10
|
+
/** Whether to allow credentials (cookies, auth headers) */
|
|
11
|
+
credentials: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Authentication configuration.
|
|
15
|
+
*/
|
|
16
|
+
export interface AuthConfig {
|
|
17
|
+
/** Authentication mode */
|
|
18
|
+
mode: 'none' | 'token-whitelist' | 'custom';
|
|
19
|
+
/** Allowed tokens for token-whitelist mode */
|
|
20
|
+
tokens?: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Sync-specific settings (passed to SyncManager).
|
|
24
|
+
*/
|
|
25
|
+
export interface SyncSettings {
|
|
26
|
+
/** Tombstone retention period in milliseconds */
|
|
27
|
+
tombstoneTTL: number;
|
|
28
|
+
/** Maximum changes per sync batch */
|
|
29
|
+
batchSize: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Logging configuration.
|
|
33
|
+
*/
|
|
34
|
+
export interface LoggingConfig {
|
|
35
|
+
/** Log level */
|
|
36
|
+
level: 'debug' | 'info' | 'warn' | 'error';
|
|
37
|
+
/** Debug namespace filter (e.g., 'sync-coordinator:*') */
|
|
38
|
+
namespaces?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Full coordinator configuration.
|
|
42
|
+
*/
|
|
43
|
+
export interface CoordinatorConfig {
|
|
44
|
+
/** Host to bind to */
|
|
45
|
+
host: string;
|
|
46
|
+
/** Port to listen on */
|
|
47
|
+
port: number;
|
|
48
|
+
/** Base path for all routes */
|
|
49
|
+
basePath: string;
|
|
50
|
+
/** Directory for LevelDB data */
|
|
51
|
+
dataDir: string;
|
|
52
|
+
cors: CorsConfig;
|
|
53
|
+
auth: AuthConfig;
|
|
54
|
+
sync: SyncSettings;
|
|
55
|
+
logging: LoggingConfig;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Default configuration values.
|
|
59
|
+
*/
|
|
60
|
+
export declare const DEFAULT_CONFIG: CoordinatorConfig;
|
|
61
|
+
/**
|
|
62
|
+
* Partial configuration for merging.
|
|
63
|
+
*/
|
|
64
|
+
export type PartialCoordinatorConfig = {
|
|
65
|
+
host?: string;
|
|
66
|
+
port?: number;
|
|
67
|
+
basePath?: string;
|
|
68
|
+
dataDir?: string;
|
|
69
|
+
cors?: Partial<CorsConfig>;
|
|
70
|
+
auth?: Partial<AuthConfig>;
|
|
71
|
+
sync?: Partial<SyncSettings>;
|
|
72
|
+
logging?: Partial<LoggingConfig>;
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iFAAiF;IACjF,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;IACpC,2DAA2D;IAC3D,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IAC5C,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gBAAgB;IAChB,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC3C,0DAA0D;IAC1D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAEhC,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IAGjB,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAGhB,IAAI,EAAE,UAAU,CAAC;IAGjB,IAAI,EAAE,UAAU,CAAC;IAGjB,IAAI,EAAE,YAAY,CAAC;IAGnB,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,iBAmB5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;CAClC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types for sync-coordinator.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Default configuration values.
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_CONFIG = {
|
|
8
|
+
host: '0.0.0.0',
|
|
9
|
+
port: 3000,
|
|
10
|
+
basePath: '/sync',
|
|
11
|
+
dataDir: './.data',
|
|
12
|
+
cors: {
|
|
13
|
+
origin: true,
|
|
14
|
+
credentials: true,
|
|
15
|
+
},
|
|
16
|
+
auth: {
|
|
17
|
+
mode: 'none',
|
|
18
|
+
},
|
|
19
|
+
sync: {
|
|
20
|
+
tombstoneTTL: 30 * 24 * 60 * 60 * 1000, // 30 days
|
|
21
|
+
batchSize: 1000,
|
|
22
|
+
},
|
|
23
|
+
logging: {
|
|
24
|
+
level: 'info',
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAuEH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAsB;IAC/C,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE;QACJ,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,IAAI;KAClB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM;KACb;IACD,IAAI,EAAE;QACJ,YAAY,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,UAAU;QAClD,SAAS,EAAE,IAAI;KAChB;IACD,OAAO,EAAE;QACP,KAAK,EAAE,MAAM;KACd;CACF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sync-coordinator - Standalone coordinator backend for Quereus Sync.
|
|
3
|
+
*
|
|
4
|
+
* This package provides a production-ready sync server that can be deployed
|
|
5
|
+
* independently or embedded in existing applications.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createCoordinatorServer, loadConfig } from '@quereus/sync-coordinator';
|
|
10
|
+
*
|
|
11
|
+
* const config = loadConfig({ overrides: { port: 8080 } });
|
|
12
|
+
* const server = await createCoordinatorServer({ config });
|
|
13
|
+
* await server.start();
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export { type CoordinatorConfig, type PartialCoordinatorConfig, type CorsConfig, type AuthConfig, type SyncSettings, type LoggingConfig, DEFAULT_CONFIG, loadConfig, loadConfigFile, loadEnvConfig, } from './config/index.js';
|
|
17
|
+
export { type ClientIdentity, type ClientSession, type AuthContext, type SyncOperation, type RejectedChange, type ValidationResult, type CoordinatorHooks, CoordinatorService, type CoordinatorServiceOptions, } from './service/index.js';
|
|
18
|
+
export { createCoordinatorServer, type CoordinatorServer, type CoordinatorServerOptions, registerRoutes, registerWebSocket, } from './server/index.js';
|
|
19
|
+
export { type CoordinatorMetrics, type CounterMetric, type GaugeMetric, type HistogramMetric, MetricsRegistry, globalRegistry, createCoordinatorMetrics, } from './metrics/index.js';
|
|
20
|
+
export { createLogger } from './common/index.js';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,cAAc,EACd,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,kBAAkB,EAClB,KAAK,yBAAyB,GAC/B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,cAAc,EACd,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,eAAe,EACf,cAAc,EACd,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sync-coordinator - Standalone coordinator backend for Quereus Sync.
|
|
3
|
+
*
|
|
4
|
+
* This package provides a production-ready sync server that can be deployed
|
|
5
|
+
* independently or embedded in existing applications.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { createCoordinatorServer, loadConfig } from '@quereus/sync-coordinator';
|
|
10
|
+
*
|
|
11
|
+
* const config = loadConfig({ overrides: { port: 8080 } });
|
|
12
|
+
* const server = await createCoordinatorServer({ config });
|
|
13
|
+
* await server.start();
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
// Configuration
|
|
17
|
+
export { DEFAULT_CONFIG, loadConfig, loadConfigFile, loadEnvConfig, } from './config/index.js';
|
|
18
|
+
// Service layer
|
|
19
|
+
export { CoordinatorService, } from './service/index.js';
|
|
20
|
+
// Server
|
|
21
|
+
export { createCoordinatorServer, registerRoutes, registerWebSocket, } from './server/index.js';
|
|
22
|
+
// Metrics
|
|
23
|
+
export { MetricsRegistry, globalRegistry, createCoordinatorMetrics, } from './metrics/index.js';
|
|
24
|
+
// Common utilities
|
|
25
|
+
export { createLogger } from './common/index.js';
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,gBAAgB;AAChB,OAAO,EAOL,cAAc,EACd,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,gBAAgB;AAChB,OAAO,EAQL,kBAAkB,GAEnB,MAAM,oBAAoB,CAAC;AAE5B,SAAS;AACT,OAAO,EACL,uBAAuB,EAGvB,cAAc,EACd,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,UAAU;AACV,OAAO,EAKL,eAAe,EACf,cAAc,EACd,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Coordinator-specific metrics definitions.
|
|
3
|
+
*/
|
|
4
|
+
import { type MetricsRegistry } from './registry.js';
|
|
5
|
+
/**
|
|
6
|
+
* Create coordinator metrics on a registry.
|
|
7
|
+
*/
|
|
8
|
+
export declare function createCoordinatorMetrics(registry?: MetricsRegistry): {
|
|
9
|
+
wsConnectionsActive: import("./types.js").GaugeMetric;
|
|
10
|
+
wsConnectionsTotal: import("./types.js").CounterMetric;
|
|
11
|
+
httpRequestsTotal: import("./types.js").CounterMetric;
|
|
12
|
+
httpRequestDuration: import("./types.js").HistogramMetric;
|
|
13
|
+
changesAppliedTotal: import("./types.js").CounterMetric;
|
|
14
|
+
changesReceivedTotal: import("./types.js").CounterMetric;
|
|
15
|
+
changesRejectedTotal: import("./types.js").CounterMetric;
|
|
16
|
+
changesBroadcastTotal: import("./types.js").CounterMetric;
|
|
17
|
+
snapshotRequestsTotal: import("./types.js").CounterMetric;
|
|
18
|
+
snapshotChunksTotal: import("./types.js").CounterMetric;
|
|
19
|
+
applyChangesDuration: import("./types.js").HistogramMetric;
|
|
20
|
+
getChangesDuration: import("./types.js").HistogramMetric;
|
|
21
|
+
changeBatchSize: import("./types.js").HistogramMetric;
|
|
22
|
+
authAttemptsTotal: import("./types.js").CounterMetric;
|
|
23
|
+
authFailuresTotal: import("./types.js").CounterMetric;
|
|
24
|
+
registry: MetricsRegistry;
|
|
25
|
+
};
|
|
26
|
+
export type CoordinatorMetrics = ReturnType<typeof createCoordinatorMetrics>;
|
|
27
|
+
//# sourceMappingURL=coordinator-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinator-metrics.d.ts","sourceRoot":"","sources":["../../../src/metrics/coordinator-metrics.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrE;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,GAAE,eAAgC;;;;;;;;;;;;;;;;;EAkHlF;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
|