@true-and-useful/janee 0.12.0 → 0.13.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.
- package/README.md +2 -0
- package/dist/cli/commands/capability.d.ts +12 -10
- package/dist/cli/commands/capability.d.ts.map +1 -1
- package/dist/cli/commands/capability.js +77 -40
- package/dist/cli/commands/capability.js.map +1 -1
- package/dist/cli/commands/config.d.ts +7 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +135 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/diagnose.d.ts +7 -0
- package/dist/cli/commands/diagnose.d.ts.map +1 -0
- package/dist/cli/commands/diagnose.js +133 -0
- package/dist/cli/commands/diagnose.js.map +1 -0
- package/dist/cli/commands/doctor-bundle.d.ts +6 -0
- package/dist/cli/commands/doctor-bundle.d.ts.map +1 -0
- package/dist/cli/commands/doctor-bundle.js +108 -0
- package/dist/cli/commands/doctor-bundle.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +6 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +163 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/service-edit.d.ts +16 -0
- package/dist/cli/commands/service-edit.d.ts.map +1 -0
- package/dist/cli/commands/service-edit.js +187 -0
- package/dist/cli/commands/service-edit.js.map +1 -0
- package/dist/cli/commands/whoami.d.ts +5 -0
- package/dist/cli/commands/whoami.d.ts.map +1 -0
- package/dist/cli/commands/whoami.js +91 -0
- package/dist/cli/commands/whoami.js.map +1 -0
- package/dist/cli/config-yaml.d.ts +12 -14
- package/dist/cli/config-yaml.d.ts.map +1 -1
- package/dist/cli/config-yaml.js +209 -86
- package/dist/cli/config-yaml.js.map +1 -1
- package/dist/cli/index.js +81 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/authority.d.ts +5 -3
- package/dist/core/authority.d.ts.map +1 -1
- package/dist/core/authority.js +76 -43
- package/dist/core/authority.js.map +1 -1
- package/dist/core/health.d.ts +24 -1
- package/dist/core/health.d.ts.map +1 -1
- package/dist/core/health.js +138 -26
- package/dist/core/health.js.map +1 -1
- package/dist/core/mcp-server.d.ts +31 -11
- package/dist/core/mcp-server.d.ts.map +1 -1
- package/dist/core/mcp-server.js +580 -238
- package/dist/core/mcp-server.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.whoamiCommand = whoamiCommand;
|
|
4
|
+
const agent_scope_1 = require("../../core/agent-scope");
|
|
5
|
+
const config_yaml_1 = require("../config-yaml");
|
|
6
|
+
function canAccessCapability(agentId, cap, services, defaultAccess) {
|
|
7
|
+
if (!agentId)
|
|
8
|
+
return true;
|
|
9
|
+
if (cap.allowedAgents && cap.allowedAgents.length > 0) {
|
|
10
|
+
return cap.allowedAgents.includes(agentId);
|
|
11
|
+
}
|
|
12
|
+
if (defaultAccess === 'restricted')
|
|
13
|
+
return false;
|
|
14
|
+
return (0, agent_scope_1.canAgentAccess)(agentId, services[cap.service]?.ownership);
|
|
15
|
+
}
|
|
16
|
+
async function whoamiCommand(options = {}) {
|
|
17
|
+
try {
|
|
18
|
+
if (!(0, config_yaml_1.hasYAMLConfig)()) {
|
|
19
|
+
if (options.json) {
|
|
20
|
+
console.log(JSON.stringify({ ok: false, error: 'No config found. Run `janee init` first.' }));
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
console.error('❌ No config found. Run `janee init` first.');
|
|
24
|
+
}
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
const config = (0, config_yaml_1.loadYAMLConfig)();
|
|
28
|
+
const agentId = options.agent || undefined;
|
|
29
|
+
const defaultAccess = config.server?.defaultAccess;
|
|
30
|
+
const capNames = Object.keys(config.capabilities);
|
|
31
|
+
const accessible = [];
|
|
32
|
+
const denied = [];
|
|
33
|
+
for (const name of capNames) {
|
|
34
|
+
const cap = config.capabilities[name];
|
|
35
|
+
if (canAccessCapability(agentId, cap, config.services, defaultAccess)) {
|
|
36
|
+
accessible.push(name);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
denied.push(name);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (options.json) {
|
|
43
|
+
console.log(JSON.stringify({
|
|
44
|
+
agentId: agentId ?? null,
|
|
45
|
+
role: agentId ? 'agent' : 'admin (CLI)',
|
|
46
|
+
defaultAccessPolicy: defaultAccess ?? 'open',
|
|
47
|
+
capabilities: { accessible, denied },
|
|
48
|
+
}, null, 2));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (!agentId) {
|
|
52
|
+
console.log('');
|
|
53
|
+
console.log(' Identity: CLI admin (no agent identity)');
|
|
54
|
+
console.log(' Access: all capabilities');
|
|
55
|
+
console.log(` Default policy: ${defaultAccess ?? 'open'}`);
|
|
56
|
+
console.log(` Capabilities: ${capNames.length} total`);
|
|
57
|
+
console.log('');
|
|
58
|
+
console.log(' Tip: use --agent <name> to preview what a specific agent can access.');
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log(` Agent: ${agentId}`);
|
|
63
|
+
console.log(` Default policy: ${defaultAccess ?? 'open'}`);
|
|
64
|
+
console.log('');
|
|
65
|
+
if (accessible.length > 0) {
|
|
66
|
+
console.log(` Accessible (${accessible.length}):`);
|
|
67
|
+
for (const c of accessible)
|
|
68
|
+
console.log(` ✅ ${c}`);
|
|
69
|
+
}
|
|
70
|
+
if (denied.length > 0) {
|
|
71
|
+
console.log(` Denied (${denied.length}):`);
|
|
72
|
+
for (const c of denied)
|
|
73
|
+
console.log(` ❌ ${c}`);
|
|
74
|
+
}
|
|
75
|
+
if (accessible.length === 0 && denied.length === 0) {
|
|
76
|
+
console.log(' No capabilities configured.');
|
|
77
|
+
}
|
|
78
|
+
console.log('');
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
const msg = error instanceof Error ? error.message : 'Unknown error';
|
|
82
|
+
if (options.json) {
|
|
83
|
+
console.log(JSON.stringify({ ok: false, error: msg }));
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.error('❌ Error:', msg);
|
|
87
|
+
}
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=whoami.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/cli/commands/whoami.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* YAML configuration for Janee
|
|
3
|
-
*
|
|
2
|
+
* YAML configuration for Janee
|
|
3
|
+
*
|
|
4
|
+
* Config is split across two files:
|
|
5
|
+
* config.yaml — human-readable policy (services metadata, capabilities, server settings)
|
|
6
|
+
* credentials.json — encrypted secrets + master key (never hand-edited)
|
|
7
|
+
*
|
|
8
|
+
* Old v0.2.0 configs with inline masterKey + encrypted blobs are auto-migrated on first load.
|
|
4
9
|
*/
|
|
5
10
|
import { CredentialOwnership } from '../core/agent-scope';
|
|
6
11
|
export interface AuthConfig {
|
|
@@ -33,7 +38,6 @@ export interface CapabilityConfig {
|
|
|
33
38
|
allow?: string[];
|
|
34
39
|
deny?: string[];
|
|
35
40
|
};
|
|
36
|
-
/** Restrict this capability to specific agent IDs (e.g. ["myapp:worker-1"]) */
|
|
37
41
|
allowedAgents?: string[];
|
|
38
42
|
mode?: 'proxy' | 'exec';
|
|
39
43
|
allowCommands?: string[];
|
|
@@ -51,7 +55,6 @@ export interface ServerConfig {
|
|
|
51
55
|
host: string;
|
|
52
56
|
logBodies?: boolean;
|
|
53
57
|
strictDecryption?: boolean;
|
|
54
|
-
/** Default access policy for capabilities without allowedAgents: "open" (any agent) or "restricted" (admin-only) */
|
|
55
58
|
defaultAccess?: 'open' | 'restricted';
|
|
56
59
|
}
|
|
57
60
|
export interface JaneeYAMLConfig {
|
|
@@ -62,24 +65,19 @@ export interface JaneeYAMLConfig {
|
|
|
62
65
|
services: Record<string, ServiceConfig>;
|
|
63
66
|
capabilities: Record<string, CapabilityConfig>;
|
|
64
67
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Get config directory path (dynamically computed for testability)
|
|
67
|
-
*/
|
|
68
68
|
export declare function getConfigDir(): string;
|
|
69
|
-
/**
|
|
70
|
-
* Get audit directory path
|
|
71
|
-
*/
|
|
72
69
|
export declare function getAuditDir(): string;
|
|
73
|
-
/**
|
|
74
|
-
* Check if using YAML config
|
|
75
|
-
*/
|
|
76
70
|
export declare function hasYAMLConfig(): boolean;
|
|
77
71
|
/**
|
|
78
|
-
* Load
|
|
72
|
+
* Load config from disk. Automatically migrates v0.2.0 legacy format on first load.
|
|
73
|
+
* Returns the full config with secrets decrypted in memory.
|
|
79
74
|
*/
|
|
80
75
|
export declare function loadYAMLConfig(): JaneeYAMLConfig;
|
|
81
76
|
/**
|
|
82
77
|
* Save config to disk. Send SIGHUP to a running Janee process to reload.
|
|
78
|
+
*
|
|
79
|
+
* Splits the config: secrets go to credentials.json (encrypted, atomic write),
|
|
80
|
+
* everything else goes to config.yaml (human-readable).
|
|
83
81
|
*/
|
|
84
82
|
export declare function saveYAMLConfig(config: JaneeYAMLConfig): void;
|
|
85
83
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-yaml.d.ts","sourceRoot":"","sources":["../../src/cli/config-yaml.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config-yaml.d.ts","sourceRoot":"","sources":["../../src/cli/config-yaml.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/config-yaml.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* YAML configuration for Janee
|
|
4
|
-
*
|
|
3
|
+
* YAML configuration for Janee
|
|
4
|
+
*
|
|
5
|
+
* Config is split across two files:
|
|
6
|
+
* config.yaml — human-readable policy (services metadata, capabilities, server settings)
|
|
7
|
+
* credentials.json — encrypted secrets + master key (never hand-edited)
|
|
8
|
+
*
|
|
9
|
+
* Old v0.2.0 configs with inline masterKey + encrypted blobs are auto-migrated on first load.
|
|
5
10
|
*/
|
|
6
11
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -24,39 +29,112 @@ const os_1 = __importDefault(require("os"));
|
|
|
24
29
|
const path_1 = __importDefault(require("path"));
|
|
25
30
|
const agent_scope_1 = require("../core/agent-scope");
|
|
26
31
|
const crypto_1 = require("../core/crypto");
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Paths
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
30
35
|
function getConfigDir() {
|
|
31
36
|
return process.env.JANEE_HOME || path_1.default.join(os_1.default.homedir(), '.janee');
|
|
32
37
|
}
|
|
33
|
-
/**
|
|
34
|
-
* Get YAML config file path
|
|
35
|
-
*/
|
|
36
38
|
function getConfigFileYAML() {
|
|
37
39
|
return path_1.default.join(getConfigDir(), 'config.yaml');
|
|
38
40
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
function getCredentialsFile() {
|
|
42
|
+
return path_1.default.join(getConfigDir(), 'credentials.json');
|
|
43
|
+
}
|
|
42
44
|
function getConfigFileJSON() {
|
|
43
45
|
return path_1.default.join(getConfigDir(), 'config.json');
|
|
44
46
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Get audit directory path
|
|
47
|
-
*/
|
|
48
47
|
function getAuditDir() {
|
|
49
48
|
return path_1.default.join(getConfigDir(), 'logs');
|
|
50
49
|
}
|
|
51
|
-
/**
|
|
52
|
-
* Check if using YAML config
|
|
53
|
-
*/
|
|
54
50
|
function hasYAMLConfig() {
|
|
55
51
|
return fs_1.default.existsSync(getConfigFileYAML());
|
|
56
52
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Credentials file I/O (atomic writes)
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
function loadCredentials() {
|
|
57
|
+
const credPath = getCredentialsFile();
|
|
58
|
+
if (!fs_1.default.existsSync(credPath)) {
|
|
59
|
+
throw new Error('No credentials file found. Run `janee init` to create one.');
|
|
60
|
+
}
|
|
61
|
+
return JSON.parse(fs_1.default.readFileSync(credPath, 'utf8'));
|
|
62
|
+
}
|
|
63
|
+
function saveCredentials(creds) {
|
|
64
|
+
const credPath = getCredentialsFile();
|
|
65
|
+
const tmpPath = credPath + '.tmp.' + process.pid;
|
|
66
|
+
fs_1.default.writeFileSync(tmpPath, JSON.stringify(creds, null, 2), { mode: 0o600 });
|
|
67
|
+
fs_1.default.renameSync(tmpPath, credPath);
|
|
68
|
+
}
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
// Secret extraction / injection
|
|
71
|
+
//
|
|
72
|
+
// These functions move secret fields between ServiceConfig.auth and the
|
|
73
|
+
// credentials.json secrets map, so the YAML file stays human-readable.
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
/** Extract secret fields from a service's auth config, returning them separately. */
|
|
76
|
+
function extractSecrets(auth) {
|
|
77
|
+
const secrets = {};
|
|
78
|
+
if (auth.type === 'bearer' && auth.key) {
|
|
79
|
+
secrets.key = auth.key;
|
|
80
|
+
}
|
|
81
|
+
else if (auth.type === 'hmac-mexc' || auth.type === 'hmac-bybit' || auth.type === 'hmac-okx') {
|
|
82
|
+
if (auth.apiKey)
|
|
83
|
+
secrets.apiKey = auth.apiKey;
|
|
84
|
+
if (auth.apiSecret)
|
|
85
|
+
secrets.apiSecret = auth.apiSecret;
|
|
86
|
+
if (auth.passphrase)
|
|
87
|
+
secrets.passphrase = auth.passphrase;
|
|
88
|
+
}
|
|
89
|
+
else if (auth.type === 'headers' && auth.headers) {
|
|
90
|
+
secrets.headers = { ...auth.headers };
|
|
91
|
+
}
|
|
92
|
+
else if (auth.type === 'service-account' && auth.credentials) {
|
|
93
|
+
secrets.credentials = auth.credentials;
|
|
94
|
+
}
|
|
95
|
+
else if (auth.type === 'github-app' && auth.privateKey) {
|
|
96
|
+
secrets.privateKey = auth.privateKey;
|
|
97
|
+
}
|
|
98
|
+
return secrets;
|
|
99
|
+
}
|
|
100
|
+
/** Remove secret fields from an auth config (for writing clean YAML). */
|
|
101
|
+
function stripSecrets(auth) {
|
|
102
|
+
const clean = { ...auth };
|
|
103
|
+
delete clean.key;
|
|
104
|
+
delete clean.apiKey;
|
|
105
|
+
delete clean.apiSecret;
|
|
106
|
+
delete clean.passphrase;
|
|
107
|
+
delete clean.privateKey;
|
|
108
|
+
delete clean.credentials;
|
|
109
|
+
delete clean.headers;
|
|
110
|
+
return clean;
|
|
111
|
+
}
|
|
112
|
+
/** Merge secrets back into a service's auth config. */
|
|
113
|
+
function injectSecrets(auth, secrets) {
|
|
114
|
+
if (auth.type === 'bearer' && typeof secrets.key === 'string') {
|
|
115
|
+
auth.key = secrets.key;
|
|
116
|
+
}
|
|
117
|
+
else if (auth.type === 'hmac-mexc' || auth.type === 'hmac-bybit' || auth.type === 'hmac-okx') {
|
|
118
|
+
if (typeof secrets.apiKey === 'string')
|
|
119
|
+
auth.apiKey = secrets.apiKey;
|
|
120
|
+
if (typeof secrets.apiSecret === 'string')
|
|
121
|
+
auth.apiSecret = secrets.apiSecret;
|
|
122
|
+
if (typeof secrets.passphrase === 'string')
|
|
123
|
+
auth.passphrase = secrets.passphrase;
|
|
124
|
+
}
|
|
125
|
+
else if (auth.type === 'headers' && typeof secrets.headers === 'object') {
|
|
126
|
+
auth.headers = secrets.headers;
|
|
127
|
+
}
|
|
128
|
+
else if (auth.type === 'service-account' && typeof secrets.credentials === 'string') {
|
|
129
|
+
auth.credentials = secrets.credentials;
|
|
130
|
+
}
|
|
131
|
+
else if (auth.type === 'github-app' && typeof secrets.privateKey === 'string') {
|
|
132
|
+
auth.privateKey = secrets.privateKey;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
// Encrypt / decrypt helpers
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
60
138
|
function tryDecrypt(encrypted, masterKey, strictMode, fieldDescription) {
|
|
61
139
|
try {
|
|
62
140
|
return (0, crypto_1.decryptSecret)(encrypted, masterKey);
|
|
@@ -67,95 +145,140 @@ function tryDecrypt(encrypted, masterKey, strictMode, fieldDescription) {
|
|
|
67
145
|
`This usually means the value is corrupted or the master key is wrong. ` +
|
|
68
146
|
`To allow plaintext values (not recommended), set server.strictDecryption: false in config.yaml`);
|
|
69
147
|
}
|
|
70
|
-
// Lenient mode: assume plaintext
|
|
71
148
|
return encrypted;
|
|
72
149
|
}
|
|
73
150
|
}
|
|
151
|
+
function decryptServiceSecrets(name, secrets, masterKey, strict) {
|
|
152
|
+
const decrypted = {};
|
|
153
|
+
for (const [field, value] of Object.entries(secrets)) {
|
|
154
|
+
if (field === 'headers' && typeof value === 'object') {
|
|
155
|
+
const hdrs = {};
|
|
156
|
+
for (const [hdr, enc] of Object.entries(value)) {
|
|
157
|
+
hdrs[hdr] = tryDecrypt(enc, masterKey, strict, `header "${hdr}" for service "${name}"`);
|
|
158
|
+
}
|
|
159
|
+
decrypted.headers = hdrs;
|
|
160
|
+
}
|
|
161
|
+
else if (typeof value === 'string') {
|
|
162
|
+
decrypted[field] = tryDecrypt(value, masterKey, strict, `${field} for service "${name}"`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return decrypted;
|
|
166
|
+
}
|
|
167
|
+
function encryptServiceSecrets(secrets, masterKey) {
|
|
168
|
+
const encrypted = {};
|
|
169
|
+
for (const [field, value] of Object.entries(secrets)) {
|
|
170
|
+
if (field === 'headers' && typeof value === 'object') {
|
|
171
|
+
const hdrs = {};
|
|
172
|
+
for (const [hdr, plain] of Object.entries(value)) {
|
|
173
|
+
hdrs[hdr] = (0, crypto_1.encryptSecret)(plain, masterKey);
|
|
174
|
+
}
|
|
175
|
+
encrypted.headers = hdrs;
|
|
176
|
+
}
|
|
177
|
+
else if (typeof value === 'string') {
|
|
178
|
+
encrypted[field] = (0, crypto_1.encryptSecret)(value, masterKey);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return encrypted;
|
|
182
|
+
}
|
|
183
|
+
// ---------------------------------------------------------------------------
|
|
184
|
+
// Migration: v0.2.0 (inline secrets) → v0.3.0 (split credentials.json)
|
|
185
|
+
// ---------------------------------------------------------------------------
|
|
186
|
+
function isLegacyFormat(rawConfig) {
|
|
187
|
+
return typeof rawConfig.masterKey === 'string' && rawConfig.masterKey.length > 0;
|
|
188
|
+
}
|
|
189
|
+
function migrateLegacyConfig() {
|
|
190
|
+
const yamlPath = getConfigFileYAML();
|
|
191
|
+
const content = fs_1.default.readFileSync(yamlPath, 'utf8');
|
|
192
|
+
const raw = js_yaml_1.default.load(content);
|
|
193
|
+
if (!isLegacyFormat(raw))
|
|
194
|
+
return;
|
|
195
|
+
const masterKey = raw.masterKey;
|
|
196
|
+
const services = raw.services || {};
|
|
197
|
+
// Build credentials file from inline encrypted values
|
|
198
|
+
const creds = { masterKey, secrets: {} };
|
|
199
|
+
for (const [name, svc] of Object.entries(services)) {
|
|
200
|
+
const auth = svc.auth;
|
|
201
|
+
if (!auth)
|
|
202
|
+
continue;
|
|
203
|
+
const secrets = extractSecrets(auth);
|
|
204
|
+
if (Object.keys(secrets).length > 0) {
|
|
205
|
+
creds.secrets[name] = secrets;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Write credentials.json atomically
|
|
209
|
+
saveCredentials(creds);
|
|
210
|
+
// Rewrite config.yaml without masterKey and without secret fields
|
|
211
|
+
delete raw.masterKey;
|
|
212
|
+
raw.version = '0.3.0';
|
|
213
|
+
for (const [name, svc] of Object.entries(services)) {
|
|
214
|
+
const auth = svc.auth;
|
|
215
|
+
if (!auth)
|
|
216
|
+
continue;
|
|
217
|
+
svc.auth = stripSecrets(auth);
|
|
218
|
+
}
|
|
219
|
+
const cleanYaml = js_yaml_1.default.dump(raw, { indent: 2, lineWidth: 120 });
|
|
220
|
+
fs_1.default.writeFileSync(yamlPath, cleanYaml, { mode: 0o600 });
|
|
221
|
+
}
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// Public API
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
74
225
|
/**
|
|
75
|
-
* Load
|
|
226
|
+
* Load config from disk. Automatically migrates v0.2.0 legacy format on first load.
|
|
227
|
+
* Returns the full config with secrets decrypted in memory.
|
|
76
228
|
*/
|
|
77
229
|
function loadYAMLConfig() {
|
|
78
230
|
if (!fs_1.default.existsSync(getConfigFileYAML())) {
|
|
79
231
|
throw new Error('No YAML config found. Run migration or init.');
|
|
80
232
|
}
|
|
233
|
+
// Auto-migrate legacy inline-secrets format
|
|
234
|
+
const rawContent = fs_1.default.readFileSync(getConfigFileYAML(), 'utf8');
|
|
235
|
+
const rawConfig = js_yaml_1.default.load(rawContent);
|
|
236
|
+
if (isLegacyFormat(rawConfig)) {
|
|
237
|
+
migrateLegacyConfig();
|
|
238
|
+
}
|
|
239
|
+
// Read the (possibly freshly migrated) YAML
|
|
81
240
|
const content = fs_1.default.readFileSync(getConfigFileYAML(), 'utf8');
|
|
82
241
|
const config = js_yaml_1.default.load(content);
|
|
83
|
-
// Ensure services and capabilities are objects (YAML parses empty sections as null)
|
|
84
242
|
config.services = config.services || {};
|
|
85
243
|
config.capabilities = config.capabilities || {};
|
|
86
|
-
//
|
|
244
|
+
// Load credentials
|
|
245
|
+
const creds = loadCredentials();
|
|
246
|
+
config.masterKey = creds.masterKey;
|
|
87
247
|
const strictDecryption = config.server?.strictDecryption ?? true;
|
|
88
|
-
// Decrypt
|
|
89
|
-
for (const [name,
|
|
90
|
-
const
|
|
91
|
-
if (
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
else if (svc.auth.type === 'hmac-mexc' || svc.auth.type === 'hmac-bybit' || svc.auth.type === 'hmac-okx') {
|
|
95
|
-
if (svc.auth.apiKey) {
|
|
96
|
-
svc.auth.apiKey = tryDecrypt(svc.auth.apiKey, config.masterKey, strictDecryption, `API key for service "${name}"`);
|
|
97
|
-
}
|
|
98
|
-
if (svc.auth.apiSecret) {
|
|
99
|
-
svc.auth.apiSecret = tryDecrypt(svc.auth.apiSecret, config.masterKey, strictDecryption, `API secret for service "${name}"`);
|
|
100
|
-
}
|
|
101
|
-
if (svc.auth.passphrase) {
|
|
102
|
-
svc.auth.passphrase = tryDecrypt(svc.auth.passphrase, config.masterKey, strictDecryption, `passphrase for service "${name}"`);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
else if (svc.auth.type === 'headers' && svc.auth.headers) {
|
|
106
|
-
// Decrypt each header value
|
|
107
|
-
for (const [headerName, headerValue] of Object.entries(svc.auth.headers)) {
|
|
108
|
-
svc.auth.headers[headerName] = tryDecrypt(headerValue, config.masterKey, strictDecryption, `header "${headerName}" for service "${name}"`);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
else if (svc.auth.type === 'service-account' && svc.auth.credentials) {
|
|
112
|
-
svc.auth.credentials = tryDecrypt(svc.auth.credentials, config.masterKey, strictDecryption, `service account credentials for service "${name}"`);
|
|
113
|
-
}
|
|
114
|
-
else if (svc.auth.type === 'github-app' && svc.auth.privateKey) {
|
|
115
|
-
svc.auth.privateKey = tryDecrypt(svc.auth.privateKey, config.masterKey, strictDecryption, `GitHub App private key for service "${name}"`);
|
|
248
|
+
// Decrypt and inject secrets into each service
|
|
249
|
+
for (const [name, svc] of Object.entries(config.services)) {
|
|
250
|
+
const encSecrets = creds.secrets[name];
|
|
251
|
+
if (encSecrets) {
|
|
252
|
+
const decSecrets = decryptServiceSecrets(name, encSecrets, creds.masterKey, strictDecryption);
|
|
253
|
+
injectSecrets(svc.auth, decSecrets);
|
|
116
254
|
}
|
|
117
255
|
}
|
|
118
256
|
return config;
|
|
119
257
|
}
|
|
120
258
|
/**
|
|
121
259
|
* Save config to disk. Send SIGHUP to a running Janee process to reload.
|
|
260
|
+
*
|
|
261
|
+
* Splits the config: secrets go to credentials.json (encrypted, atomic write),
|
|
262
|
+
* everything else goes to config.yaml (human-readable).
|
|
122
263
|
*/
|
|
123
264
|
function saveYAMLConfig(config) {
|
|
124
|
-
// Encrypt service auth keys before saving
|
|
125
265
|
const configCopy = JSON.parse(JSON.stringify(config));
|
|
266
|
+
// Build credentials from the decrypted in-memory config
|
|
267
|
+
const creds = { masterKey: config.masterKey, secrets: {} };
|
|
126
268
|
for (const [name, service] of Object.entries(configCopy.services)) {
|
|
127
|
-
const
|
|
128
|
-
if (
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
else if (svc.auth.type === 'hmac-mexc' || svc.auth.type === 'hmac-bybit' || svc.auth.type === 'hmac-okx') {
|
|
132
|
-
if (svc.auth.apiKey) {
|
|
133
|
-
svc.auth.apiKey = (0, crypto_1.encryptSecret)(svc.auth.apiKey, config.masterKey);
|
|
134
|
-
}
|
|
135
|
-
if (svc.auth.apiSecret) {
|
|
136
|
-
svc.auth.apiSecret = (0, crypto_1.encryptSecret)(svc.auth.apiSecret, config.masterKey);
|
|
137
|
-
}
|
|
138
|
-
if (svc.auth.passphrase) {
|
|
139
|
-
svc.auth.passphrase = (0, crypto_1.encryptSecret)(svc.auth.passphrase, config.masterKey);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
else if (svc.auth.type === 'headers' && svc.auth.headers) {
|
|
143
|
-
// Encrypt each header value
|
|
144
|
-
for (const headerName of Object.keys(svc.auth.headers)) {
|
|
145
|
-
svc.auth.headers[headerName] = (0, crypto_1.encryptSecret)(svc.auth.headers[headerName], config.masterKey);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
else if (svc.auth.type === 'service-account' && svc.auth.credentials) {
|
|
149
|
-
svc.auth.credentials = (0, crypto_1.encryptSecret)(svc.auth.credentials, config.masterKey);
|
|
150
|
-
}
|
|
151
|
-
else if (svc.auth.type === 'github-app' && svc.auth.privateKey) {
|
|
152
|
-
svc.auth.privateKey = (0, crypto_1.encryptSecret)(svc.auth.privateKey, config.masterKey);
|
|
269
|
+
const plainSecrets = extractSecrets(service.auth);
|
|
270
|
+
if (Object.keys(plainSecrets).length > 0) {
|
|
271
|
+
creds.secrets[name] = encryptServiceSecrets(plainSecrets, config.masterKey);
|
|
153
272
|
}
|
|
273
|
+
// Strip secrets from YAML copy
|
|
274
|
+
configCopy.services[name].auth = stripSecrets(service.auth);
|
|
154
275
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
276
|
+
// Remove masterKey from YAML (lives in credentials.json now)
|
|
277
|
+
delete configCopy.masterKey;
|
|
278
|
+
configCopy.version = '0.3.0';
|
|
279
|
+
// Write credentials atomically, then YAML
|
|
280
|
+
saveCredentials(creds);
|
|
281
|
+
const yamlContent = js_yaml_1.default.dump(configCopy, { indent: 2, lineWidth: 120 });
|
|
159
282
|
fs_1.default.writeFileSync(getConfigFileYAML(), yamlContent, { mode: 0o600 });
|
|
160
283
|
}
|
|
161
284
|
/**
|
|
@@ -192,15 +315,15 @@ function initYAMLConfig() {
|
|
|
192
315
|
throw new Error('Config already exists');
|
|
193
316
|
}
|
|
194
317
|
const config = {
|
|
195
|
-
version: '0.
|
|
318
|
+
version: '0.3.0',
|
|
196
319
|
masterKey: (0, crypto_1.generateMasterKey)(),
|
|
197
320
|
server: {
|
|
198
321
|
port: 9119,
|
|
199
322
|
host: 'localhost',
|
|
200
|
-
strictDecryption: true
|
|
323
|
+
strictDecryption: true,
|
|
201
324
|
},
|
|
202
325
|
services: {},
|
|
203
|
-
capabilities: {}
|
|
326
|
+
capabilities: {},
|
|
204
327
|
};
|
|
205
328
|
saveYAMLConfig(config);
|
|
206
329
|
return config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-yaml.js","sourceRoot":"","sources":["../../src/cli/config-yaml.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-yaml.js","sourceRoot":"","sources":["../../src/cli/config-yaml.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;AA6FH,oCAEC;AAcD,kCAEC;AAED,sCAEC;AA+LD,wCAkCC;AAQD,wCAwBC;AAMD,0DAOC;AAMD,gEAWC;AAKD,wCAuBC;AAKD,wCAkBC;AAKD,8CAgBC;AAKD,sCAyDC;AAthBD,4CAAoB;AACpB,sDAA2B;AAC3B,4CAAoB;AACpB,gDAAwB;AAExB,qDAI6B;AAC7B,2CAIwB;AAyExB,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,SAAgB,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;AAClD,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,SAAgB,aAAa;IAC3B,OAAO,YAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,SAAS,eAAe;IACtB,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,eAAe,CAAC,KAAsB;IAC7C,MAAM,QAAQ,GAAG,kBAAkB,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IACjD,YAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3E,YAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,8EAA8E;AAC9E,gCAAgC;AAChC,EAAE;AACF,wEAAwE;AACxE,uEAAuE;AACvE,8EAA8E;AAE9E,qFAAqF;AACrF,SAAS,cAAc,CAAC,IAAgB;IACtC,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACzB,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/F,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9C,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACvD,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IAC5D,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnD,OAAO,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/D,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACzC,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACzD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACvC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yEAAyE;AACzE,SAAS,YAAY,CAAC,IAAgB;IACpC,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;IAC1B,OAAO,KAAK,CAAC,GAAG,CAAC;IACjB,OAAO,KAAK,CAAC,MAAM,CAAC;IACpB,OAAO,KAAK,CAAC,SAAS,CAAC;IACvB,OAAO,KAAK,CAAC,UAAU,CAAC;IACxB,OAAO,KAAK,CAAC,UAAU,CAAC;IACxB,OAAO,KAAK,CAAC,WAAW,CAAC;IACzB,OAAO,KAAK,CAAC,OAAO,CAAC;IACrB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uDAAuD;AACvD,SAAS,aAAa,CAAC,IAAgB,EAAE,OAAuB;IAC9D,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC9D,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACzB,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/F,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;YAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QACrE,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ;YAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QAC9E,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ;YAAE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACnF,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC1E,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAiC,CAAC;IAC3D,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACtF,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAChF,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACvC,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,SAAS,UAAU,CACjB,SAAiB,EACjB,SAAiB,EACjB,UAAmB,EACnB,gBAAwB;IAExB,IAAI,CAAC;QACH,OAAO,IAAA,sBAAa,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,qBAAqB,gBAAgB,IAAI;gBACzC,wEAAwE;gBACxE,gGAAgG,CACjG,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAY,EACZ,OAAuB,EACvB,SAAiB,EACjB,MAAe;IAEf,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,IAAI,GAA2B,EAAE,CAAC;YACxC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,kBAAkB,IAAI,GAAG,CAAC,CAAC;YAC1F,CAAC;YACD,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,SAAS,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,iBAAiB,IAAI,GAAG,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAuB,EAAE,SAAiB;IACvE,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,IAAI,GAA2B,EAAE,CAAC;YACxC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,IAAI,CAAC,GAAG,CAAC,GAAG,IAAA,sBAAa,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC9C,CAAC;YACD,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3B,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACrC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAA,sBAAa,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,8EAA8E;AAC9E,uEAAuE;AACvE,8EAA8E;AAE9E,SAAS,cAAc,CAAC,SAAc;IACpC,OAAO,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,iBAAI,CAAC,IAAI,CAAC,OAAO,CAAQ,CAAC;IAEtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QAAE,OAAO;IAEjC,MAAM,SAAS,GAAW,GAAG,CAAC,SAAS,CAAC;IACxC,MAAM,QAAQ,GAAwB,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAEzD,sDAAsD;IACtD,MAAM,KAAK,GAAoB,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAI,GAAW,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,MAAM,OAAO,GAAG,cAAc,CAAC,IAAkB,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;QAChC,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvB,kEAAkE;IAClE,OAAO,GAAG,CAAC,SAAS,CAAC;IACrB,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;IACtB,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,GAAI,GAAW,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,IAAI;YAAE,SAAS;QACnB,GAAW,CAAC,IAAI,GAAG,YAAY,CAAC,IAAkB,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,SAAS,GAAG,iBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAChE,YAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;GAGG;AACH,SAAgB,cAAc;IAC5B,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,4CAA4C;IAC5C,MAAM,UAAU,GAAG,YAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,EAAE,MAAM,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,iBAAI,CAAC,IAAI,CAAC,UAAU,CAAQ,CAAC;IAC/C,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,mBAAmB,EAAE,CAAC;IACxB,CAAC;IAED,4CAA4C;IAC5C,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,iBAAI,CAAC,IAAI,CAAC,OAAO,CAAoB,CAAC;IACrD,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;IAEhD,mBAAmB;IACnB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAEnC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,IAAI,IAAI,CAAC;IAEjE,+CAA+C;IAC/C,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,UAAU,GAAG,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;YAC9F,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,MAAuB;IACpD,MAAM,UAAU,GAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3D,wDAAwD;IACxD,MAAM,KAAK,GAAoB,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAE5E,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAyC,CAAC,EAAE,CAAC;QACnG,MAAM,YAAY,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9E,CAAC;QACD,+BAA+B;QAC/B,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,6DAA6D;IAC7D,OAAO,UAAU,CAAC,SAAS,CAAC;IAC5B,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,0CAA0C;IAC1C,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvB,MAAM,WAAW,GAAG,iBAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACzE,YAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACtE,CAAC;AAED;;;GAGG;AACH,SAAgB,uBAAuB,CAAC,WAAmB,EAAE,SAA8B;IACzF,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,YAAY,WAAW,uBAAuB,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC;IACnD,cAAc,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,SAAgB,0BAA0B,CACxC,MAAuB,EACvB,WAAmB,EACnB,OAAsB,EACtB,eAAwB;IAExB,IAAI,eAAe,EAAE,CAAC;QACpB,OAAO,CAAC,SAAS,GAAG,IAAA,mCAAqB,EAAC,eAAe,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc;IAC5B,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;QACnC,YAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,YAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,MAAM,GAAoB;QAC9B,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAA,0BAAiB,GAAE;QAC9B,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,WAAW;YACjB,gBAAgB,EAAE,IAAI;SACvB;QACD,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,EAAE;KACjB,CAAC;IAEF,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAC5B,IAAY,EACZ,OAAe,EACf,IAAgB;IAEhB,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAEhC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,kBAAkB,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;QACtB,OAAO;QACP,IAAI;QACJ,SAAS,EAAE,IAAA,iCAAmB,GAAE;KACjC,CAAC;IAEF,cAAc,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,IAAY,EACZ,SAA2B;IAE3B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAEhC,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,kBAAkB,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,YAAY,SAAS,CAAC,OAAO,aAAa,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IACtC,cAAc,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAgB,aAAa;IAC3B,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,YAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,CAAC;IAED,uBAAuB;IACvB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAE3E,yBAAyB;IACzB,MAAM,SAAS,GAAoB;QACjC,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,SAAS,CAAC,SAAS;QAC9B,MAAM,EAAE;YACN,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI;YACtC,IAAI,EAAE,WAAW;SAClB;QACD,QAAQ,EAAE,EAAE;QACZ,YAAY,EAAE,EAAE;KACjB,CAAC;IAEF,mBAAmB;IACnB,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACzC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;gBACjC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,GAAG,EAAE,OAAO,CAAC,YAAY,CAAE,oBAAoB;iBAChD;aACF,CAAC;YAEF,6CAA6C;YAC7C,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;gBACrC,OAAO,EAAE,OAAO,CAAC,IAAI;gBACrB,GAAG,EAAE,IAAI;gBACT,WAAW,EAAE,IAAI;aAClB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,WAAW,GAAG,iBAAI,CAAC,IAAI,CAAC,SAAS,EAAE;QACvC,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,GAAG;KACf,CAAC,CAAC;IAEH,YAAE,CAAC,aAAa,CAAC,iBAAiB,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEpE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,4BAA4B,iBAAiB,EAAE,MAAM,CAAC,CAAC;IAEnE,oBAAoB;IACpB,YAAE,CAAC,UAAU,CAAC,iBAAiB,EAAE,EAAE,GAAG,iBAAiB,EAAE,MAAM,CAAC,CAAC;AACnE,CAAC"}
|