@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.
Files changed (71) hide show
  1. package/README.md +2 -0
  2. package/dist/cli/commands/add.d.ts +1 -0
  3. package/dist/cli/commands/add.d.ts.map +1 -1
  4. package/dist/cli/commands/add.js +23 -5
  5. package/dist/cli/commands/add.js.map +1 -1
  6. package/dist/cli/commands/capability.d.ts +12 -10
  7. package/dist/cli/commands/capability.d.ts.map +1 -1
  8. package/dist/cli/commands/capability.js +77 -40
  9. package/dist/cli/commands/capability.js.map +1 -1
  10. package/dist/cli/commands/config.d.ts +7 -0
  11. package/dist/cli/commands/config.d.ts.map +1 -0
  12. package/dist/cli/commands/config.js +135 -0
  13. package/dist/cli/commands/config.js.map +1 -0
  14. package/dist/cli/commands/diagnose.d.ts +7 -0
  15. package/dist/cli/commands/diagnose.d.ts.map +1 -0
  16. package/dist/cli/commands/diagnose.js +133 -0
  17. package/dist/cli/commands/diagnose.js.map +1 -0
  18. package/dist/cli/commands/doctor-bundle.d.ts +6 -0
  19. package/dist/cli/commands/doctor-bundle.d.ts.map +1 -0
  20. package/dist/cli/commands/doctor-bundle.js +108 -0
  21. package/dist/cli/commands/doctor-bundle.js.map +1 -0
  22. package/dist/cli/commands/doctor.d.ts +6 -0
  23. package/dist/cli/commands/doctor.d.ts.map +1 -0
  24. package/dist/cli/commands/doctor.js +163 -0
  25. package/dist/cli/commands/doctor.js.map +1 -0
  26. package/dist/cli/commands/serve-mcp.d.ts.map +1 -1
  27. package/dist/cli/commands/serve-mcp.js +46 -97
  28. package/dist/cli/commands/serve-mcp.js.map +1 -1
  29. package/dist/cli/commands/service-edit.d.ts +16 -0
  30. package/dist/cli/commands/service-edit.d.ts.map +1 -0
  31. package/dist/cli/commands/service-edit.js +187 -0
  32. package/dist/cli/commands/service-edit.js.map +1 -0
  33. package/dist/cli/commands/test.d.ts +6 -0
  34. package/dist/cli/commands/test.d.ts.map +1 -0
  35. package/dist/cli/commands/test.js +101 -0
  36. package/dist/cli/commands/test.js.map +1 -0
  37. package/dist/cli/commands/whoami.d.ts +5 -0
  38. package/dist/cli/commands/whoami.d.ts.map +1 -0
  39. package/dist/cli/commands/whoami.js +91 -0
  40. package/dist/cli/commands/whoami.js.map +1 -0
  41. package/dist/cli/config-yaml.d.ts +15 -15
  42. package/dist/cli/config-yaml.d.ts.map +1 -1
  43. package/dist/cli/config-yaml.js +213 -90
  44. package/dist/cli/config-yaml.js.map +1 -1
  45. package/dist/cli/index.js +97 -8
  46. package/dist/cli/index.js.map +1 -1
  47. package/dist/core/auth.d.ts +25 -0
  48. package/dist/core/auth.d.ts.map +1 -0
  49. package/dist/core/auth.js +136 -0
  50. package/dist/core/auth.js.map +1 -0
  51. package/dist/core/authority.d.ts +5 -1
  52. package/dist/core/authority.d.ts.map +1 -1
  53. package/dist/core/authority.js +93 -38
  54. package/dist/core/authority.js.map +1 -1
  55. package/dist/core/directory.d.ts +2 -0
  56. package/dist/core/directory.d.ts.map +1 -1
  57. package/dist/core/directory.js +23 -0
  58. package/dist/core/directory.js.map +1 -1
  59. package/dist/core/health.d.ts +62 -1
  60. package/dist/core/health.d.ts.map +1 -1
  61. package/dist/core/health.js +242 -8
  62. package/dist/core/health.js.map +1 -1
  63. package/dist/core/mcp-server.d.ts +36 -12
  64. package/dist/core/mcp-server.d.ts.map +1 -1
  65. package/dist/core/mcp-server.js +635 -235
  66. package/dist/core/mcp-server.js.map +1 -1
  67. package/dist/index.d.ts +12 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +28 -0
  70. package/dist/index.js.map +1 -0
  71. 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 init_1 = require("./commands/init");
9
+ const fs_1 = require("fs");
10
+ const path_1 = require("path");
10
11
  const add_1 = require("./commands/add");
11
- const remove_1 = require("./commands/remove");
12
- const serve_1 = require("./commands/serve");
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 sessions_1 = require("./commands/sessions");
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 authority_1 = require("./commands/authority");
20
- const capability_1 = require("./commands/capability");
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
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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"}
@@ -1,4 +1,5 @@
1
- import express from 'express';
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":"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"}
1
+ {"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../../src/core/authority.ts"],"names":[],"mappings":"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"}
@@ -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: '512kb' }));
17
+ app.use(express_1.default.json({ limit: "512kb" }));
17
18
  app.use((req, res, next) => {
18
- if (req.path === '/v1/health') {
19
+ if (req.path === "/v1/health") {
19
20
  next();
20
21
  return;
21
22
  }
22
- const provided = req.header('x-janee-runner-key');
23
- if (!provided || provided.length !== apiKey.length ||
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: 'Unauthorized runner request' });
27
+ res.status(401).json({ error: "Unauthorized runner request" });
26
28
  return;
27
29
  }
28
30
  next();
29
31
  });
30
- app.get('/v1/health', (_req, res) => {
31
- res.status(200).json({ ok: true, mode: 'authority' });
32
+ app.get("/v1/health", (_req, res) => {
33
+ res.status(200).json({ ok: true, mode: "authority" });
32
34
  });
33
- app.post('/v1/exec/authorize', async (req, res) => {
35
+ app.post("/v1/exec/authorize", async (req, res) => {
34
36
  try {
35
37
  const body = req.body;
36
- if (!body?.runner?.runnerId || !Array.isArray(body?.command) || body.command.length === 0 || !body.capabilityId) {
37
- res.status(400).json({ error: 'Invalid authorize request' });
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.status(403).json({ error: error instanceof Error ? error.message : 'Authorization failed' });
49
+ res
50
+ .status(403)
51
+ .json({
52
+ error: error instanceof Error ? error.message : "Authorization failed",
53
+ });
45
54
  }
46
55
  });
47
- app.post('/v1/exec/complete', async (req, res) => {
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: 'grantId is required' });
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.status(500).json({ error: error instanceof Error ? error.message : 'completion failed' });
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 !== 'exec')
75
- throw new Error('Capability is not exec-mode');
76
- if (cap.allowedAgents && cap.allowedAgents.length > 0 && req.agentId && !cap.allowedAgents.includes(req.agentId)) {
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 || 'Command denied by policy');
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 === 'bearer') {
89
- credential = service.auth.key || '';
131
+ if (service.auth.type === "bearer") {
132
+ credential = service.auth.key || "";
90
133
  }
91
- else if (service.auth.type === 'github-app' && service.auth.appId && service.auth.privateKey && service.auth.installationId) {
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 === 'hmac-mexc' || service.auth.type === 'hmac-bybit' || service.auth.type === 'hmac-okx') {
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 = [credential, extraCredentials?.apiKey, extraCredentials?.apiSecret, extraCredentials?.passphrase]
108
- .filter((v) => Boolean(v));
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, { startedAt: Date.now(), capabilityId: cap.name });
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 || 'unknown',
131
- method: 'EXEC_COMPLETE',
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(/\/$/, '')}/v1/exec/authorize`, {
151
- method: 'POST',
205
+ const res = await fetch(`${authorityUrl.replace(/\/$/, "")}/v1/exec/authorize`, {
206
+ method: "POST",
152
207
  headers: {
153
- 'content-type': 'application/json',
154
- 'x-janee-runner-key': runnerKey,
155
- 'x-janee-request-id': request.requestId || (0, crypto_1.randomUUID)(),
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(/\/$/, '')}/v1/exec/complete`, {
167
- method: 'POST',
221
+ const res = await fetch(`${authorityUrl.replace(/\/$/, "")}/v1/exec/complete`, {
222
+ method: "POST",
168
223
  headers: {
169
- 'content-type': 'application/json',
170
- 'x-janee-runner-key': runnerKey,
224
+ "content-type": "application/json",
225
+ "x-janee-runner-key": runnerKey,
171
226
  },
172
227
  body: JSON.stringify(request),
173
228
  });