@true-and-useful/janee 0.11.3 → 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/add.d.ts +1 -0
- package/dist/cli/commands/add.d.ts.map +1 -1
- package/dist/cli/commands/add.js +23 -5
- package/dist/cli/commands/add.js.map +1 -1
- 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/serve-mcp.d.ts.map +1 -1
- package/dist/cli/commands/serve-mcp.js +46 -97
- package/dist/cli/commands/serve-mcp.js.map +1 -1
- 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/test.d.ts +6 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +101 -0
- package/dist/cli/commands/test.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 +15 -15
- package/dist/cli/config-yaml.d.ts.map +1 -1
- package/dist/cli/config-yaml.js +213 -90
- package/dist/cli/config-yaml.js.map +1 -1
- package/dist/cli/index.js +97 -8
- package/dist/cli/index.js.map +1 -1
- package/dist/core/auth.d.ts +25 -0
- package/dist/core/auth.d.ts.map +1 -0
- package/dist/core/auth.js +136 -0
- package/dist/core/auth.js.map +1 -0
- package/dist/core/authority.d.ts +5 -1
- package/dist/core/authority.d.ts.map +1 -1
- package/dist/core/authority.js +93 -38
- package/dist/core/authority.js.map +1 -1
- package/dist/core/directory.d.ts +2 -0
- package/dist/core/directory.d.ts.map +1 -1
- package/dist/core/directory.js +23 -0
- package/dist/core/directory.js.map +1 -1
- package/dist/core/health.d.ts +62 -1
- package/dist/core/health.d.ts.map +1 -1
- package/dist/core/health.js +242 -8
- package/dist/core/health.js.map +1 -1
- package/dist/core/mcp-server.d.ts +36 -12
- package/dist/core/mcp-server.d.ts.map +1 -1
- package/dist/core/mcp-server.js +635 -235
- package/dist/core/mcp-server.js.map +1 -1
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/package.json +8 -1
package/dist/cli/index.js
CHANGED
|
@@ -6,20 +6,27 @@
|
|
|
6
6
|
*/
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
8
|
const commander_1 = require("commander");
|
|
9
|
-
const
|
|
9
|
+
const fs_1 = require("fs");
|
|
10
|
+
const path_1 = require("path");
|
|
10
11
|
const add_1 = require("./commands/add");
|
|
11
|
-
const
|
|
12
|
-
const
|
|
12
|
+
const authority_1 = require("./commands/authority");
|
|
13
|
+
const capability_1 = require("./commands/capability");
|
|
14
|
+
const config_1 = require("./commands/config");
|
|
15
|
+
const diagnose_1 = require("./commands/diagnose");
|
|
16
|
+
const doctor_1 = require("./commands/doctor");
|
|
17
|
+
const doctor_bundle_1 = require("./commands/doctor-bundle");
|
|
18
|
+
const init_1 = require("./commands/init");
|
|
13
19
|
const list_1 = require("./commands/list");
|
|
14
20
|
const logs_1 = require("./commands/logs");
|
|
15
|
-
const
|
|
21
|
+
const remove_1 = require("./commands/remove");
|
|
16
22
|
const revoke_1 = require("./commands/revoke");
|
|
17
23
|
const search_1 = require("./commands/search");
|
|
24
|
+
const serve_1 = require("./commands/serve");
|
|
25
|
+
const service_edit_1 = require("./commands/service-edit");
|
|
26
|
+
const sessions_1 = require("./commands/sessions");
|
|
18
27
|
const status_1 = require("./commands/status");
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const fs_1 = require("fs");
|
|
22
|
-
const path_1 = require("path");
|
|
28
|
+
const test_1 = require("./commands/test");
|
|
29
|
+
const whoami_1 = require("./commands/whoami");
|
|
23
30
|
// Read version from package.json
|
|
24
31
|
const packageJsonPath = (0, path_1.join)(__dirname, '../../package.json');
|
|
25
32
|
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf8'));
|
|
@@ -51,6 +58,7 @@ program
|
|
|
51
58
|
.option('--pem-file <path>', 'Path to private key PEM file (for github-app auth type)')
|
|
52
59
|
.option('--app-id <id>', 'GitHub App ID (for github-app auth type)')
|
|
53
60
|
.option('--installation-id <id>', 'GitHub App installation ID (for github-app auth type)')
|
|
61
|
+
.option('--test-path <path>', 'Auth-required GET endpoint for testing credentials (e.g. /v1/balance)')
|
|
54
62
|
.option('--exec', 'Add as exec-mode service (CLI tool wrapper, RFC 0001)')
|
|
55
63
|
.option('--allow-commands <cmds...>', 'Allowed executables for exec mode (e.g., bird gh)')
|
|
56
64
|
.option('--env-map <mappings...>', 'Env var mappings (KEY=value or KEY={{credential}})')
|
|
@@ -64,6 +72,36 @@ program
|
|
|
64
72
|
.option('-y, --yes', 'Skip confirmation prompt')
|
|
65
73
|
.option('--json', 'Output as JSON')
|
|
66
74
|
.action(remove_1.removeCommand);
|
|
75
|
+
// Service management subcommands
|
|
76
|
+
const service = program.command('service').description('Manage services');
|
|
77
|
+
service
|
|
78
|
+
.command('edit <name>')
|
|
79
|
+
.description('Edit an existing service (update URL, test path, or rotate secrets)')
|
|
80
|
+
.option('-u, --url <url>', 'Update base URL')
|
|
81
|
+
.option('--test-path <path>', 'Update test path')
|
|
82
|
+
.option('-k, --key <key>', 'Rotate bearer key or HMAC apiKey')
|
|
83
|
+
.option('--api-secret <secret>', 'Rotate HMAC secret')
|
|
84
|
+
.option('--passphrase <passphrase>', 'Rotate OKX passphrase')
|
|
85
|
+
.option('--pem-file <path>', 'Rotate GitHub App private key from PEM file')
|
|
86
|
+
.option('--credentials-file <path>', 'Rotate service account credentials from JSON file')
|
|
87
|
+
.option('--key-from-env <var>', 'Read key from environment variable')
|
|
88
|
+
.option('--secret-from-env <var>', 'Read secret from environment variable')
|
|
89
|
+
.option('--passphrase-from-env <var>', 'Read passphrase from environment variable')
|
|
90
|
+
.option('--header <pairs...>', 'Update custom auth headers (name=value)')
|
|
91
|
+
.option('--json', 'Output as JSON')
|
|
92
|
+
.action(service_edit_1.serviceEditCommand);
|
|
93
|
+
// Config get/set
|
|
94
|
+
const configCmd = program.command('config').description('View or update server settings');
|
|
95
|
+
configCmd
|
|
96
|
+
.command('get [key]')
|
|
97
|
+
.description('Show config value(s)')
|
|
98
|
+
.option('--json', 'Output as JSON')
|
|
99
|
+
.action(config_1.configGetCommand);
|
|
100
|
+
configCmd
|
|
101
|
+
.command('set <key> <value>')
|
|
102
|
+
.description('Set a config value (e.g. server.port 9200)')
|
|
103
|
+
.option('--json', 'Output as JSON')
|
|
104
|
+
.action(config_1.configSetCommand);
|
|
67
105
|
program
|
|
68
106
|
.command('serve')
|
|
69
107
|
.description('Start Janee MCP server')
|
|
@@ -110,6 +148,44 @@ program
|
|
|
110
148
|
.description('Show Janee configuration and health status')
|
|
111
149
|
.option('--json', 'Output as JSON')
|
|
112
150
|
.action(status_1.statusCommand);
|
|
151
|
+
program
|
|
152
|
+
.command('whoami')
|
|
153
|
+
.description('Show your agent identity and accessible capabilities')
|
|
154
|
+
.option('--agent <name>', 'Preview access for a specific agent identity')
|
|
155
|
+
.option('--json', 'Output as JSON')
|
|
156
|
+
.action(whoami_1.whoamiCommand);
|
|
157
|
+
// Diagnostics
|
|
158
|
+
const diagnose = program.command('diagnose').description('Debug access and configuration issues');
|
|
159
|
+
diagnose
|
|
160
|
+
.command('access <capability>')
|
|
161
|
+
.description('Trace why an agent can or cannot access a capability')
|
|
162
|
+
.option('--agent <name>', 'Agent ID to evaluate (default: admin/CLI)')
|
|
163
|
+
.option('--method <method>', 'HTTP method for rules evaluation (e.g., GET, POST)')
|
|
164
|
+
.option('--path <path>', 'Request path for rules evaluation')
|
|
165
|
+
.option('--json', 'Output as JSON')
|
|
166
|
+
.action((capability, options) => (0, diagnose_1.diagnoseAccessCommand)(capability, options));
|
|
167
|
+
// Doctor
|
|
168
|
+
const doctor = program.command('doctor').description('System health checks');
|
|
169
|
+
doctor
|
|
170
|
+
.command('runner <authority-url>')
|
|
171
|
+
.description('Check runner-to-authority connectivity, auth, and tool forwarding')
|
|
172
|
+
.option('--runner-key <key>', 'Runner key (or set JANEE_RUNNER_KEY)')
|
|
173
|
+
.option('--agent <name>', 'Agent identity to test with (default: doctor-probe)')
|
|
174
|
+
.option('--json', 'Output as JSON')
|
|
175
|
+
.action((authorityUrl, options) => (0, doctor_1.doctorRunnerCommand)(authorityUrl, options));
|
|
176
|
+
doctor
|
|
177
|
+
.command('bundle')
|
|
178
|
+
.description('Export a redacted diagnostics bundle for incident debugging')
|
|
179
|
+
.option('-o, --output <file>', 'Write bundle to file instead of stdout')
|
|
180
|
+
.option('--agent <name>', 'Include access summary for this agent')
|
|
181
|
+
.option('--lines <n>', 'Number of recent denials to include (default: 50)')
|
|
182
|
+
.action((options) => (0, doctor_bundle_1.doctorBundleCommand)(options));
|
|
183
|
+
program
|
|
184
|
+
.command('test [service]')
|
|
185
|
+
.description('Test service connectivity and authentication')
|
|
186
|
+
.option('--timeout <ms>', 'Request timeout in ms (default: 10000)')
|
|
187
|
+
.option('--json', 'Output as JSON')
|
|
188
|
+
.action((service, options) => (0, test_1.testCommand)(service, options));
|
|
113
189
|
program
|
|
114
190
|
.command('search [query]')
|
|
115
191
|
.description('Search the service directory')
|
|
@@ -134,6 +210,12 @@ cap
|
|
|
134
210
|
.option('--no-requires-reason', 'Do not require reason')
|
|
135
211
|
.option('--allow <pattern...>', 'Allow rules (e.g., "GET /v1/*")')
|
|
136
212
|
.option('--deny <pattern...>', 'Deny rules (e.g., "DELETE *")')
|
|
213
|
+
.option('--allowed-agents <agents...>', 'Restrict to specific agent IDs')
|
|
214
|
+
.option('--mode <mode>', 'Execution mode: proxy or exec')
|
|
215
|
+
.option('--allow-commands <cmds...>', 'Allowed executables for exec mode')
|
|
216
|
+
.option('--env-map <mappings...>', 'Env var mappings (KEY=value or KEY={{credential}})')
|
|
217
|
+
.option('--work-dir <dir>', 'Working directory for exec mode')
|
|
218
|
+
.option('--timeout <ms>', 'Execution timeout in ms')
|
|
137
219
|
.option('--json', 'Output as JSON')
|
|
138
220
|
.action(capability_1.capabilityAddCommand);
|
|
139
221
|
cap
|
|
@@ -147,6 +229,13 @@ cap
|
|
|
147
229
|
.option('--allow <pattern...>', 'Replace allow rules')
|
|
148
230
|
.option('--deny <pattern...>', 'Replace deny rules')
|
|
149
231
|
.option('--clear-rules', 'Clear all rules')
|
|
232
|
+
.option('--allowed-agents <agents...>', 'Restrict to specific agent IDs')
|
|
233
|
+
.option('--clear-agents', 'Remove all agent restrictions')
|
|
234
|
+
.option('--mode <mode>', 'Execution mode: proxy or exec')
|
|
235
|
+
.option('--allow-commands <cmds...>', 'Allowed executables for exec mode')
|
|
236
|
+
.option('--env-map <mappings...>', 'Env var mappings (KEY=value or KEY={{credential}})')
|
|
237
|
+
.option('--work-dir <dir>', 'Working directory for exec mode')
|
|
238
|
+
.option('--timeout <ms>', 'Execution timeout in ms')
|
|
150
239
|
.option('--json', 'Output as JSON')
|
|
151
240
|
.action(capability_1.capabilityEditCommand);
|
|
152
241
|
cap
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAEA;;;GAGG;;AAEH,yCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared auth header injection for all Janee interfaces.
|
|
3
|
+
* Extracted from serve-mcp.ts so CLI test, MCP tools, and REST endpoints
|
|
4
|
+
* all build auth headers the same way.
|
|
5
|
+
*/
|
|
6
|
+
import { URL } from 'url';
|
|
7
|
+
import { ServiceConfig } from './mcp-server.js';
|
|
8
|
+
export interface AuthHeadersContext {
|
|
9
|
+
method: string;
|
|
10
|
+
targetUrl: URL;
|
|
11
|
+
body?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface AuthHeadersResult {
|
|
14
|
+
headers: Record<string, string>;
|
|
15
|
+
/** HMAC-MEXC appends signature params to the URL */
|
|
16
|
+
urlParams?: Record<string, string>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Build auth headers for a service request.
|
|
20
|
+
* Handles all auth types: bearer, headers, hmac-*, service-account, github-app.
|
|
21
|
+
*
|
|
22
|
+
* Async because service-account and github-app need to fetch tokens.
|
|
23
|
+
*/
|
|
24
|
+
export declare function buildAuthHeaders(serviceName: string, serviceConfig: ServiceConfig, ctx: AuthHeadersContext): Promise<AuthHeadersResult>;
|
|
25
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,GAAG,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,aAAa,EAC5B,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,iBAAiB,CAAC,CAsF5B"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared auth header injection for all Janee interfaces.
|
|
4
|
+
* Extracted from serve-mcp.ts so CLI test, MCP tools, and REST endpoints
|
|
5
|
+
* all build auth headers the same way.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.buildAuthHeaders = buildAuthHeaders;
|
|
42
|
+
/**
|
|
43
|
+
* Build auth headers for a service request.
|
|
44
|
+
* Handles all auth types: bearer, headers, hmac-*, service-account, github-app.
|
|
45
|
+
*
|
|
46
|
+
* Async because service-account and github-app need to fetch tokens.
|
|
47
|
+
*/
|
|
48
|
+
async function buildAuthHeaders(serviceName, serviceConfig, ctx) {
|
|
49
|
+
const headers = {};
|
|
50
|
+
let urlParams;
|
|
51
|
+
if (serviceConfig.auth.type === 'bearer' && serviceConfig.auth.key) {
|
|
52
|
+
headers['Authorization'] = `Bearer ${serviceConfig.auth.key}`;
|
|
53
|
+
}
|
|
54
|
+
else if (serviceConfig.auth.type === 'headers' && serviceConfig.auth.headers) {
|
|
55
|
+
Object.assign(headers, serviceConfig.auth.headers);
|
|
56
|
+
}
|
|
57
|
+
else if (serviceConfig.auth.type === 'hmac-mexc' && serviceConfig.auth.apiKey && serviceConfig.auth.apiSecret) {
|
|
58
|
+
const { signMEXC } = await Promise.resolve().then(() => __importStar(require('./signing.js')));
|
|
59
|
+
const result = signMEXC({
|
|
60
|
+
apiKey: serviceConfig.auth.apiKey,
|
|
61
|
+
apiSecret: serviceConfig.auth.apiSecret,
|
|
62
|
+
queryString: ctx.targetUrl.searchParams.toString()
|
|
63
|
+
});
|
|
64
|
+
Object.assign(headers, result.headers);
|
|
65
|
+
if (result.urlParams)
|
|
66
|
+
urlParams = result.urlParams;
|
|
67
|
+
}
|
|
68
|
+
else if (serviceConfig.auth.type === 'hmac-bybit' && serviceConfig.auth.apiKey && serviceConfig.auth.apiSecret) {
|
|
69
|
+
const { signBybit } = await Promise.resolve().then(() => __importStar(require('./signing.js')));
|
|
70
|
+
const result = signBybit({
|
|
71
|
+
apiKey: serviceConfig.auth.apiKey,
|
|
72
|
+
apiSecret: serviceConfig.auth.apiSecret,
|
|
73
|
+
method: ctx.method,
|
|
74
|
+
queryString: ctx.targetUrl.searchParams.toString(),
|
|
75
|
+
body: ctx.body
|
|
76
|
+
});
|
|
77
|
+
Object.assign(headers, result.headers);
|
|
78
|
+
}
|
|
79
|
+
else if (serviceConfig.auth.type === 'hmac-okx' && serviceConfig.auth.apiKey && serviceConfig.auth.apiSecret && serviceConfig.auth.passphrase) {
|
|
80
|
+
const { signOKX } = await Promise.resolve().then(() => __importStar(require('./signing.js')));
|
|
81
|
+
const reqPath = ctx.targetUrl.pathname + (ctx.targetUrl.search || '');
|
|
82
|
+
const result = signOKX({
|
|
83
|
+
apiKey: serviceConfig.auth.apiKey,
|
|
84
|
+
apiSecret: serviceConfig.auth.apiSecret,
|
|
85
|
+
passphrase: serviceConfig.auth.passphrase,
|
|
86
|
+
method: ctx.method,
|
|
87
|
+
requestPath: reqPath,
|
|
88
|
+
body: ctx.body
|
|
89
|
+
});
|
|
90
|
+
Object.assign(headers, result.headers);
|
|
91
|
+
}
|
|
92
|
+
else if (serviceConfig.auth.type === 'service-account' && serviceConfig.auth.credentials && serviceConfig.auth.scopes) {
|
|
93
|
+
const { getAccessToken, validateServiceAccountCredentials, clearCachedToken } = await Promise.resolve().then(() => __importStar(require('./service-account.js')));
|
|
94
|
+
try {
|
|
95
|
+
const credentials = JSON.parse(serviceConfig.auth.credentials);
|
|
96
|
+
validateServiceAccountCredentials(credentials);
|
|
97
|
+
const accessToken = await getAccessToken(serviceName, credentials, serviceConfig.auth.scopes);
|
|
98
|
+
headers['Authorization'] = `Bearer ${accessToken}`;
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
if (error instanceof Error && error.message.includes('401')) {
|
|
102
|
+
clearCachedToken(serviceName, serviceConfig.auth.scopes);
|
|
103
|
+
const credentials = JSON.parse(serviceConfig.auth.credentials);
|
|
104
|
+
const accessToken = await getAccessToken(serviceName, credentials, serviceConfig.auth.scopes);
|
|
105
|
+
headers['Authorization'] = `Bearer ${accessToken}`;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else if (serviceConfig.auth.type === 'github-app' && serviceConfig.auth.appId && serviceConfig.auth.privateKey && serviceConfig.auth.installationId) {
|
|
113
|
+
const { getInstallationToken, clearCachedInstallationToken } = await Promise.resolve().then(() => __importStar(require('./github-app.js')));
|
|
114
|
+
const ghCreds = {
|
|
115
|
+
appId: serviceConfig.auth.appId,
|
|
116
|
+
privateKey: serviceConfig.auth.privateKey,
|
|
117
|
+
installationId: serviceConfig.auth.installationId,
|
|
118
|
+
};
|
|
119
|
+
try {
|
|
120
|
+
const installationToken = await getInstallationToken(serviceName, ghCreds);
|
|
121
|
+
headers['Authorization'] = `Bearer ${installationToken}`;
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
if (error instanceof Error && error.message.includes('401')) {
|
|
125
|
+
clearCachedInstallationToken(serviceName);
|
|
126
|
+
const installationToken = await getInstallationToken(serviceName, ghCreds);
|
|
127
|
+
headers['Authorization'] = `Bearer ${installationToken}`;
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return { headers, urlParams };
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/core/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/core/authority.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import express from
|
|
1
|
+
import express from "express";
|
|
2
|
+
import { ServiceTestResult } from "./health.js";
|
|
2
3
|
export interface RunnerIdentity {
|
|
3
4
|
runnerId: string;
|
|
4
5
|
environment?: string;
|
|
@@ -40,6 +41,9 @@ export interface ExecCompleteRequest {
|
|
|
40
41
|
export interface AuthorityExecHooks {
|
|
41
42
|
authorizeExec: (req: ExecAuthorizeRequest) => Promise<ExecAuthorizeResponse>;
|
|
42
43
|
completeExec: (req: ExecCompleteRequest) => Promise<void>;
|
|
44
|
+
testService?: (serviceName?: string, options?: {
|
|
45
|
+
timeout?: number;
|
|
46
|
+
}) => Promise<ServiceTestResult | ServiceTestResult[]>;
|
|
43
47
|
}
|
|
44
48
|
export declare function createAuthorityApp(apiKey: string, hooks: AuthorityExecHooks): express.Express;
|
|
45
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../../src/core/authority.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../../src/core/authority.ts"],"names":[],"mappings":"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"}
|
package/dist/core/authority.js
CHANGED
|
@@ -7,57 +7,87 @@ exports.createAuthorityApp = createAuthorityApp;
|
|
|
7
7
|
exports.buildAuthorityHooks = buildAuthorityHooks;
|
|
8
8
|
exports.authorityAuthorizeExec = authorityAuthorizeExec;
|
|
9
9
|
exports.authorityCompleteExec = authorityCompleteExec;
|
|
10
|
-
const express_1 = __importDefault(require("express"));
|
|
11
10
|
const crypto_1 = require("crypto");
|
|
11
|
+
const express_1 = __importDefault(require("express"));
|
|
12
12
|
const exec_js_1 = require("./exec.js");
|
|
13
13
|
const github_app_js_1 = require("./github-app.js");
|
|
14
|
+
const health_js_1 = require("./health.js");
|
|
14
15
|
function createAuthorityApp(apiKey, hooks) {
|
|
15
16
|
const app = (0, express_1.default)();
|
|
16
|
-
app.use(express_1.default.json({ limit:
|
|
17
|
+
app.use(express_1.default.json({ limit: "512kb" }));
|
|
17
18
|
app.use((req, res, next) => {
|
|
18
|
-
if (req.path ===
|
|
19
|
+
if (req.path === "/v1/health") {
|
|
19
20
|
next();
|
|
20
21
|
return;
|
|
21
22
|
}
|
|
22
|
-
const provided = req.header(
|
|
23
|
-
if (!provided ||
|
|
23
|
+
const provided = req.header("x-janee-runner-key");
|
|
24
|
+
if (!provided ||
|
|
25
|
+
provided.length !== apiKey.length ||
|
|
24
26
|
!(0, crypto_1.timingSafeEqual)(Buffer.from(provided), Buffer.from(apiKey))) {
|
|
25
|
-
res.status(401).json({ error:
|
|
27
|
+
res.status(401).json({ error: "Unauthorized runner request" });
|
|
26
28
|
return;
|
|
27
29
|
}
|
|
28
30
|
next();
|
|
29
31
|
});
|
|
30
|
-
app.get(
|
|
31
|
-
res.status(200).json({ ok: true, mode:
|
|
32
|
+
app.get("/v1/health", (_req, res) => {
|
|
33
|
+
res.status(200).json({ ok: true, mode: "authority" });
|
|
32
34
|
});
|
|
33
|
-
app.post(
|
|
35
|
+
app.post("/v1/exec/authorize", async (req, res) => {
|
|
34
36
|
try {
|
|
35
37
|
const body = req.body;
|
|
36
|
-
if (!body?.runner?.runnerId ||
|
|
37
|
-
|
|
38
|
+
if (!body?.runner?.runnerId ||
|
|
39
|
+
!Array.isArray(body?.command) ||
|
|
40
|
+
body.command.length === 0 ||
|
|
41
|
+
!body.capabilityId) {
|
|
42
|
+
res.status(400).json({ error: "Invalid authorize request" });
|
|
38
43
|
return;
|
|
39
44
|
}
|
|
40
45
|
const response = await hooks.authorizeExec(body);
|
|
41
46
|
res.status(200).json(response);
|
|
42
47
|
}
|
|
43
48
|
catch (error) {
|
|
44
|
-
res
|
|
49
|
+
res
|
|
50
|
+
.status(403)
|
|
51
|
+
.json({
|
|
52
|
+
error: error instanceof Error ? error.message : "Authorization failed",
|
|
53
|
+
});
|
|
45
54
|
}
|
|
46
55
|
});
|
|
47
|
-
app.post(
|
|
56
|
+
app.post("/v1/exec/complete", async (req, res) => {
|
|
48
57
|
try {
|
|
49
58
|
const body = req.body;
|
|
50
59
|
if (!body?.grantId) {
|
|
51
|
-
res.status(400).json({ error:
|
|
60
|
+
res.status(400).json({ error: "grantId is required" });
|
|
52
61
|
return;
|
|
53
62
|
}
|
|
54
63
|
await hooks.completeExec(body);
|
|
55
64
|
res.status(200).json({ ok: true });
|
|
56
65
|
}
|
|
57
66
|
catch (error) {
|
|
58
|
-
res
|
|
67
|
+
res
|
|
68
|
+
.status(500)
|
|
69
|
+
.json({
|
|
70
|
+
error: error instanceof Error ? error.message : "completion failed",
|
|
71
|
+
});
|
|
59
72
|
}
|
|
60
73
|
});
|
|
74
|
+
if (hooks.testService) {
|
|
75
|
+
app.post("/v1/test", async (req, res) => {
|
|
76
|
+
try {
|
|
77
|
+
const result = await hooks.testService(req.body?.service, {
|
|
78
|
+
timeout: req.body?.timeout,
|
|
79
|
+
});
|
|
80
|
+
res.status(200).json(result);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
res
|
|
84
|
+
.status(500)
|
|
85
|
+
.json({
|
|
86
|
+
error: error instanceof Error ? error.message : "Test failed",
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
61
91
|
return app;
|
|
62
92
|
}
|
|
63
93
|
/**
|
|
@@ -67,28 +97,44 @@ function createAuthorityApp(apiKey, hooks) {
|
|
|
67
97
|
function buildAuthorityHooks(config, auditLogger) {
|
|
68
98
|
const grantCache = new Map();
|
|
69
99
|
return {
|
|
100
|
+
testService: async (serviceName, options) => {
|
|
101
|
+
if (serviceName) {
|
|
102
|
+
const svc = config.services[serviceName];
|
|
103
|
+
if (!svc)
|
|
104
|
+
throw new Error(`Unknown service: ${serviceName}`);
|
|
105
|
+
return (0, health_js_1.testServiceConnection)(serviceName, svc, options || {});
|
|
106
|
+
}
|
|
107
|
+
const results = await Promise.all(Object.entries(config.services).map(([name, svc]) => (0, health_js_1.testServiceConnection)(name, svc, options || {})));
|
|
108
|
+
return results;
|
|
109
|
+
},
|
|
70
110
|
authorizeExec: async (req) => {
|
|
71
111
|
const cap = config.capabilities.find((c) => c.name === req.capabilityId);
|
|
72
112
|
if (!cap)
|
|
73
113
|
throw new Error(`Unknown capability: ${req.capabilityId}`);
|
|
74
|
-
if (cap.mode !==
|
|
75
|
-
throw new Error(
|
|
76
|
-
if (cap.allowedAgents &&
|
|
114
|
+
if (cap.mode !== "exec")
|
|
115
|
+
throw new Error("Capability is not exec-mode");
|
|
116
|
+
if (cap.allowedAgents &&
|
|
117
|
+
cap.allowedAgents.length > 0 &&
|
|
118
|
+
req.agentId &&
|
|
119
|
+
!cap.allowedAgents.includes(req.agentId)) {
|
|
77
120
|
throw new Error(`Agent ${req.agentId} is not allowed for capability ${cap.name}`);
|
|
78
121
|
}
|
|
79
122
|
const cmdCheck = (0, exec_js_1.validateCommand)(req.command, cap.allowCommands || []);
|
|
80
123
|
if (!cmdCheck.allowed) {
|
|
81
|
-
throw new Error(cmdCheck.reason ||
|
|
124
|
+
throw new Error(cmdCheck.reason || "Command denied by policy");
|
|
82
125
|
}
|
|
83
126
|
const service = config.services[cap.service];
|
|
84
127
|
if (!service)
|
|
85
128
|
throw new Error(`Service not found: ${cap.service}`);
|
|
86
|
-
let credential =
|
|
129
|
+
let credential = "";
|
|
87
130
|
let extraCredentials;
|
|
88
|
-
if (service.auth.type ===
|
|
89
|
-
credential = service.auth.key ||
|
|
131
|
+
if (service.auth.type === "bearer") {
|
|
132
|
+
credential = service.auth.key || "";
|
|
90
133
|
}
|
|
91
|
-
else if (service.auth.type ===
|
|
134
|
+
else if (service.auth.type === "github-app" &&
|
|
135
|
+
service.auth.appId &&
|
|
136
|
+
service.auth.privateKey &&
|
|
137
|
+
service.auth.installationId) {
|
|
92
138
|
const ghCreds = {
|
|
93
139
|
appId: service.auth.appId,
|
|
94
140
|
privateKey: service.auth.privateKey,
|
|
@@ -96,7 +142,9 @@ function buildAuthorityHooks(config, auditLogger) {
|
|
|
96
142
|
};
|
|
97
143
|
credential = await (0, github_app_js_1.getInstallationToken)(cap.service, ghCreds);
|
|
98
144
|
}
|
|
99
|
-
else if (service.auth.type ===
|
|
145
|
+
else if (service.auth.type === "hmac-mexc" ||
|
|
146
|
+
service.auth.type === "hmac-bybit" ||
|
|
147
|
+
service.auth.type === "hmac-okx") {
|
|
100
148
|
extraCredentials = {
|
|
101
149
|
apiKey: service.auth.apiKey,
|
|
102
150
|
apiSecret: service.auth.apiSecret,
|
|
@@ -104,10 +152,17 @@ function buildAuthorityHooks(config, auditLogger) {
|
|
|
104
152
|
};
|
|
105
153
|
}
|
|
106
154
|
const envInjections = (0, exec_js_1.buildExecEnv)(cap.env || {}, credential, extraCredentials);
|
|
107
|
-
const scrubValues = [
|
|
108
|
-
|
|
155
|
+
const scrubValues = [
|
|
156
|
+
credential,
|
|
157
|
+
extraCredentials?.apiKey,
|
|
158
|
+
extraCredentials?.apiSecret,
|
|
159
|
+
extraCredentials?.passphrase,
|
|
160
|
+
].filter((v) => Boolean(v));
|
|
109
161
|
const grantId = (0, crypto_1.randomUUID)();
|
|
110
|
-
grantCache.set(grantId, {
|
|
162
|
+
grantCache.set(grantId, {
|
|
163
|
+
startedAt: Date.now(),
|
|
164
|
+
capabilityId: cap.name,
|
|
165
|
+
});
|
|
111
166
|
const effectiveTimeoutMs = Math.min(req.timeoutMs || cap.timeout || 30000, cap.timeout || 30000);
|
|
112
167
|
return {
|
|
113
168
|
grantId,
|
|
@@ -127,8 +182,8 @@ function buildAuthorityHooks(config, auditLogger) {
|
|
|
127
182
|
const grant = grantCache.get(req.grantId);
|
|
128
183
|
grantCache.delete(req.grantId);
|
|
129
184
|
auditLogger.log({
|
|
130
|
-
service: grant?.capabilityId ||
|
|
131
|
-
method:
|
|
185
|
+
service: grant?.capabilityId || "unknown",
|
|
186
|
+
method: "EXEC_COMPLETE",
|
|
132
187
|
path: req.grantId,
|
|
133
188
|
headers: {},
|
|
134
189
|
body: undefined,
|
|
@@ -147,12 +202,12 @@ function buildAuthorityHooks(config, auditLogger) {
|
|
|
147
202
|
};
|
|
148
203
|
}
|
|
149
204
|
async function authorityAuthorizeExec(authorityUrl, runnerKey, request) {
|
|
150
|
-
const res = await fetch(`${authorityUrl.replace(/\/$/,
|
|
151
|
-
method:
|
|
205
|
+
const res = await fetch(`${authorityUrl.replace(/\/$/, "")}/v1/exec/authorize`, {
|
|
206
|
+
method: "POST",
|
|
152
207
|
headers: {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
208
|
+
"content-type": "application/json",
|
|
209
|
+
"x-janee-runner-key": runnerKey,
|
|
210
|
+
"x-janee-request-id": request.requestId || (0, crypto_1.randomUUID)(),
|
|
156
211
|
},
|
|
157
212
|
body: JSON.stringify(request),
|
|
158
213
|
});
|
|
@@ -163,11 +218,11 @@ async function authorityAuthorizeExec(authorityUrl, runnerKey, request) {
|
|
|
163
218
|
return res.json();
|
|
164
219
|
}
|
|
165
220
|
async function authorityCompleteExec(authorityUrl, runnerKey, request) {
|
|
166
|
-
const res = await fetch(`${authorityUrl.replace(/\/$/,
|
|
167
|
-
method:
|
|
221
|
+
const res = await fetch(`${authorityUrl.replace(/\/$/, "")}/v1/exec/complete`, {
|
|
222
|
+
method: "POST",
|
|
168
223
|
headers: {
|
|
169
|
-
|
|
170
|
-
|
|
224
|
+
"content-type": "application/json",
|
|
225
|
+
"x-janee-runner-key": runnerKey,
|
|
171
226
|
},
|
|
172
227
|
body: JSON.stringify(request),
|
|
173
228
|
});
|