@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authority.js","sourceRoot":"","sources":["../../src/core/authority.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"authority.js","sourceRoot":"","sources":["../../src/core/authority.ts"],"names":[],"mappings":"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"}
|
package/dist/core/directory.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export interface ServiceTemplate {
|
|
|
11
11
|
type: 'bearer' | 'basic' | 'hmac-mexc' | 'hmac-bybit' | 'hmac-okx' | 'headers' | 'service-account' | 'github-app';
|
|
12
12
|
fields: string[];
|
|
13
13
|
};
|
|
14
|
+
/** Lightweight GET path that requires auth — used by `janee test` to verify credentials */
|
|
15
|
+
testPath?: string;
|
|
14
16
|
docs?: string;
|
|
15
17
|
tags: string[];
|
|
16
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../../src/core/directory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,iBAAiB,GAAG,YAAY,CAAC;QAClH,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAQD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"directory.d.ts","sourceRoot":"","sources":["../../src/core/directory.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,iBAAiB,GAAG,YAAY,CAAC;QAClH,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAQD;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,eAAe,EAuP7C,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,EAAE,CAYhE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEpE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAY/D"}
|
package/dist/core/directory.js
CHANGED
|
@@ -24,6 +24,7 @@ exports.serviceDirectory = [
|
|
|
24
24
|
description: 'Payment processing platform',
|
|
25
25
|
baseUrl: 'https://api.stripe.com',
|
|
26
26
|
auth: { type: 'bearer', fields: ['key'] },
|
|
27
|
+
testPath: '/v1/balance',
|
|
27
28
|
docs: 'https://stripe.com/docs/api',
|
|
28
29
|
tags: ['payment', 'finance']
|
|
29
30
|
},
|
|
@@ -33,6 +34,7 @@ exports.serviceDirectory = [
|
|
|
33
34
|
description: 'Code hosting and collaboration',
|
|
34
35
|
baseUrl: 'https://api.github.com',
|
|
35
36
|
auth: { type: 'bearer', fields: ['key'] },
|
|
37
|
+
testPath: '/user',
|
|
36
38
|
docs: 'https://docs.github.com/en/rest',
|
|
37
39
|
tags: ['developer', 'git', 'code']
|
|
38
40
|
},
|
|
@@ -41,6 +43,7 @@ exports.serviceDirectory = [
|
|
|
41
43
|
description: 'GitHub App with installation tokens (for autonomous agents)',
|
|
42
44
|
baseUrl: 'https://api.github.com',
|
|
43
45
|
auth: { type: 'github-app', fields: ['appId', 'pemFile', 'installationId'] },
|
|
46
|
+
testPath: '/app',
|
|
44
47
|
docs: 'https://docs.github.com/en/apps',
|
|
45
48
|
tags: ['developer', 'git', 'code']
|
|
46
49
|
},
|
|
@@ -49,6 +52,7 @@ exports.serviceDirectory = [
|
|
|
49
52
|
description: 'Issue tracking for software teams',
|
|
50
53
|
baseUrl: 'https://api.linear.app',
|
|
51
54
|
auth: { type: 'bearer', fields: ['key'] },
|
|
55
|
+
testPath: '/graphql',
|
|
52
56
|
docs: 'https://developers.linear.app/docs',
|
|
53
57
|
tags: ['developer', 'project-management', 'issues']
|
|
54
58
|
},
|
|
@@ -57,6 +61,7 @@ exports.serviceDirectory = [
|
|
|
57
61
|
description: 'Frontend deployment platform',
|
|
58
62
|
baseUrl: 'https://api.vercel.com',
|
|
59
63
|
auth: { type: 'bearer', fields: ['key'] },
|
|
64
|
+
testPath: '/v9/projects',
|
|
60
65
|
docs: 'https://vercel.com/docs/rest-api',
|
|
61
66
|
tags: ['developer', 'deployment', 'hosting']
|
|
62
67
|
},
|
|
@@ -65,6 +70,7 @@ exports.serviceDirectory = [
|
|
|
65
70
|
description: 'CDN and edge computing platform',
|
|
66
71
|
baseUrl: 'https://api.cloudflare.com/client/v4',
|
|
67
72
|
auth: { type: 'bearer', fields: ['key'] },
|
|
73
|
+
testPath: '/zones',
|
|
68
74
|
docs: 'https://developers.cloudflare.com/api',
|
|
69
75
|
tags: ['developer', 'cdn', 'dns']
|
|
70
76
|
},
|
|
@@ -74,6 +80,7 @@ exports.serviceDirectory = [
|
|
|
74
80
|
description: 'OpenAI API for GPT and DALL-E',
|
|
75
81
|
baseUrl: 'https://api.openai.com/v1',
|
|
76
82
|
auth: { type: 'bearer', fields: ['key'] },
|
|
83
|
+
testPath: '/models',
|
|
77
84
|
docs: 'https://platform.openai.com/docs/api-reference',
|
|
78
85
|
tags: ['ai', 'llm', 'ml']
|
|
79
86
|
},
|
|
@@ -82,6 +89,7 @@ exports.serviceDirectory = [
|
|
|
82
89
|
description: 'Anthropic Claude API',
|
|
83
90
|
baseUrl: 'https://api.anthropic.com',
|
|
84
91
|
auth: { type: 'headers', fields: ['x-api-key'] },
|
|
92
|
+
testPath: '/v1/models',
|
|
85
93
|
docs: 'https://docs.anthropic.com/en/api',
|
|
86
94
|
tags: ['ai', 'llm', 'ml']
|
|
87
95
|
},
|
|
@@ -90,6 +98,7 @@ exports.serviceDirectory = [
|
|
|
90
98
|
description: 'Run ML models in the cloud',
|
|
91
99
|
baseUrl: 'https://api.replicate.com/v1',
|
|
92
100
|
auth: { type: 'bearer', fields: ['key'] },
|
|
101
|
+
testPath: '/models',
|
|
93
102
|
docs: 'https://replicate.com/docs/reference/http',
|
|
94
103
|
tags: ['ai', 'ml', 'models']
|
|
95
104
|
},
|
|
@@ -99,6 +108,7 @@ exports.serviceDirectory = [
|
|
|
99
108
|
description: 'Cryptocurrency derivatives exchange',
|
|
100
109
|
baseUrl: 'https://api.bybit.com',
|
|
101
110
|
auth: { type: 'hmac-bybit', fields: ['apiKey', 'apiSecret'] },
|
|
111
|
+
testPath: '/v5/account/wallet-balance?accountType=UNIFIED',
|
|
102
112
|
docs: 'https://bybit-exchange.github.io/docs',
|
|
103
113
|
tags: ['crypto', 'exchange', 'trading']
|
|
104
114
|
},
|
|
@@ -107,6 +117,7 @@ exports.serviceDirectory = [
|
|
|
107
117
|
description: 'Cryptocurrency exchange',
|
|
108
118
|
baseUrl: 'https://www.okx.com',
|
|
109
119
|
auth: { type: 'hmac-okx', fields: ['apiKey', 'apiSecret', 'passphrase'] },
|
|
120
|
+
testPath: '/api/v5/account/balance',
|
|
110
121
|
docs: 'https://www.okx.com/docs-v5',
|
|
111
122
|
tags: ['crypto', 'exchange', 'trading']
|
|
112
123
|
},
|
|
@@ -115,6 +126,7 @@ exports.serviceDirectory = [
|
|
|
115
126
|
description: 'Cryptocurrency exchange',
|
|
116
127
|
baseUrl: 'https://api.mexc.com',
|
|
117
128
|
auth: { type: 'hmac-mexc', fields: ['apiKey', 'apiSecret'] },
|
|
129
|
+
testPath: '/api/v3/account',
|
|
118
130
|
docs: 'https://mexcdevelop.github.io/apidocs',
|
|
119
131
|
tags: ['crypto', 'exchange', 'trading']
|
|
120
132
|
},
|
|
@@ -123,6 +135,7 @@ exports.serviceDirectory = [
|
|
|
123
135
|
description: 'Cryptocurrency exchange (Advanced Trade API)',
|
|
124
136
|
baseUrl: 'https://api.coinbase.com',
|
|
125
137
|
auth: { type: 'bearer', fields: ['key'] },
|
|
138
|
+
testPath: '/api/v3/brokerage/accounts',
|
|
126
139
|
docs: 'https://docs.cloud.coinbase.com/advanced-trade-api',
|
|
127
140
|
tags: ['crypto', 'exchange', 'trading']
|
|
128
141
|
},
|
|
@@ -132,6 +145,7 @@ exports.serviceDirectory = [
|
|
|
132
145
|
description: 'Team communication platform',
|
|
133
146
|
baseUrl: 'https://slack.com/api',
|
|
134
147
|
auth: { type: 'bearer', fields: ['key'] },
|
|
148
|
+
testPath: '/auth.test',
|
|
135
149
|
docs: 'https://api.slack.com/methods',
|
|
136
150
|
tags: ['communication', 'messaging', 'team']
|
|
137
151
|
},
|
|
@@ -140,6 +154,7 @@ exports.serviceDirectory = [
|
|
|
140
154
|
description: 'Chat platform for communities',
|
|
141
155
|
baseUrl: 'https://discord.com/api/v10',
|
|
142
156
|
auth: { type: 'bearer', fields: ['key'] },
|
|
157
|
+
testPath: '/users/@me',
|
|
143
158
|
docs: 'https://discord.com/developers/docs',
|
|
144
159
|
tags: ['communication', 'messaging', 'community']
|
|
145
160
|
},
|
|
@@ -148,6 +163,7 @@ exports.serviceDirectory = [
|
|
|
148
163
|
description: 'Email delivery service',
|
|
149
164
|
baseUrl: 'https://api.sendgrid.com/v3',
|
|
150
165
|
auth: { type: 'bearer', fields: ['key'] },
|
|
166
|
+
testPath: '/scopes',
|
|
151
167
|
docs: 'https://docs.sendgrid.com/api-reference',
|
|
152
168
|
tags: ['email', 'communication']
|
|
153
169
|
},
|
|
@@ -156,6 +172,7 @@ exports.serviceDirectory = [
|
|
|
156
172
|
description: 'Communication APIs (SMS, Voice)',
|
|
157
173
|
baseUrl: 'https://api.twilio.com/2010-04-01',
|
|
158
174
|
auth: { type: 'basic', fields: ['accountSid', 'authToken'] },
|
|
175
|
+
testPath: '/Accounts.json',
|
|
159
176
|
docs: 'https://www.twilio.com/docs/usage/api',
|
|
160
177
|
tags: ['sms', 'voice', 'communication']
|
|
161
178
|
},
|
|
@@ -164,6 +181,7 @@ exports.serviceDirectory = [
|
|
|
164
181
|
description: 'Modern email API',
|
|
165
182
|
baseUrl: 'https://api.resend.com',
|
|
166
183
|
auth: { type: 'bearer', fields: ['key'] },
|
|
184
|
+
testPath: '/domains',
|
|
167
185
|
docs: 'https://resend.com/docs/api-reference',
|
|
168
186
|
tags: ['email', 'communication']
|
|
169
187
|
},
|
|
@@ -181,6 +199,7 @@ exports.serviceDirectory = [
|
|
|
181
199
|
description: 'Product analytics platform',
|
|
182
200
|
baseUrl: 'https://app.posthog.com/api',
|
|
183
201
|
auth: { type: 'bearer', fields: ['key'] },
|
|
202
|
+
testPath: '/projects/',
|
|
184
203
|
docs: 'https://posthog.com/docs/api',
|
|
185
204
|
tags: ['analytics', 'data']
|
|
186
205
|
},
|
|
@@ -206,6 +225,7 @@ exports.serviceDirectory = [
|
|
|
206
225
|
description: 'Serverless MySQL platform',
|
|
207
226
|
baseUrl: 'https://api.planetscale.com/v1',
|
|
208
227
|
auth: { type: 'bearer', fields: ['key'] },
|
|
228
|
+
testPath: '/organizations',
|
|
209
229
|
docs: 'https://api-docs.planetscale.com',
|
|
210
230
|
tags: ['database', 'mysql']
|
|
211
231
|
},
|
|
@@ -215,6 +235,7 @@ exports.serviceDirectory = [
|
|
|
215
235
|
description: 'All-in-one workspace',
|
|
216
236
|
baseUrl: 'https://api.notion.com/v1',
|
|
217
237
|
auth: { type: 'bearer', fields: ['key'] },
|
|
238
|
+
testPath: '/users/me',
|
|
218
239
|
docs: 'https://developers.notion.com/reference',
|
|
219
240
|
tags: ['productivity', 'notes', 'wiki']
|
|
220
241
|
},
|
|
@@ -223,6 +244,7 @@ exports.serviceDirectory = [
|
|
|
223
244
|
description: 'Spreadsheet-database hybrid',
|
|
224
245
|
baseUrl: 'https://api.airtable.com/v0',
|
|
225
246
|
auth: { type: 'bearer', fields: ['key'] },
|
|
247
|
+
testPath: '/meta/bases',
|
|
226
248
|
docs: 'https://airtable.com/developers/web/api',
|
|
227
249
|
tags: ['database', 'spreadsheet', 'productivity']
|
|
228
250
|
},
|
|
@@ -231,6 +253,7 @@ exports.serviceDirectory = [
|
|
|
231
253
|
description: 'Cal.com scheduling API',
|
|
232
254
|
baseUrl: 'https://api.cal.com/v1',
|
|
233
255
|
auth: { type: 'bearer', fields: ['key'] },
|
|
256
|
+
testPath: '/event-types',
|
|
234
257
|
docs: 'https://cal.com/docs/enterprise-features/api',
|
|
235
258
|
tags: ['calendar', 'scheduling']
|
|
236
259
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../../src/core/directory.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;
|
|
1
|
+
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../../src/core/directory.ts"],"names":[],"mappings":"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"}
|
package/dist/core/health.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Health check module for Janee services
|
|
3
3
|
* Provides connectivity and latency checks for configured API backends
|
|
4
4
|
*/
|
|
5
|
+
import { ServiceConfig } from "./mcp-server.js";
|
|
5
6
|
export interface HealthCheckResult {
|
|
6
7
|
service: string;
|
|
7
8
|
healthy: boolean;
|
|
@@ -15,7 +16,11 @@ export interface HealthCheckOptions {
|
|
|
15
16
|
fetchFn?: typeof fetch;
|
|
16
17
|
}
|
|
17
18
|
/**
|
|
18
|
-
*
|
|
19
|
+
* Quick reachability check — unauthenticated HEAD against the base URL.
|
|
20
|
+
* Use for uptime monitoring where you just care "is the endpoint up?"
|
|
21
|
+
* Considers 401/403 as reachable (the server answered, auth is just expected).
|
|
22
|
+
*
|
|
23
|
+
* For verifying credentials actually work, use testServiceConnection() instead.
|
|
19
24
|
*/
|
|
20
25
|
export declare function checkServiceHealth(serviceName: string, baseUrl: string, options?: HealthCheckOptions): Promise<HealthCheckResult>;
|
|
21
26
|
/**
|
|
@@ -24,4 +29,60 @@ export declare function checkServiceHealth(serviceName: string, baseUrl: string,
|
|
|
24
29
|
export declare function checkAllServicesHealth(services: Map<string, {
|
|
25
30
|
baseUrl: string;
|
|
26
31
|
}>, options?: HealthCheckOptions): Promise<HealthCheckResult[]>;
|
|
32
|
+
export interface ServiceTestResult {
|
|
33
|
+
service: string;
|
|
34
|
+
baseUrl: string;
|
|
35
|
+
testUrl: string;
|
|
36
|
+
reachable: boolean;
|
|
37
|
+
authOk: boolean;
|
|
38
|
+
statusCode?: number;
|
|
39
|
+
latencyMs: number;
|
|
40
|
+
authType: string;
|
|
41
|
+
error?: string;
|
|
42
|
+
/** Truncated upstream response body on failure — helps agents diagnose issues */
|
|
43
|
+
responseBody?: string;
|
|
44
|
+
checkedAt: string;
|
|
45
|
+
}
|
|
46
|
+
export interface ServiceTestOptions {
|
|
47
|
+
/** Auth-required endpoint path to test (e.g. "/v1/balance" for Stripe). Falls back to "/" */
|
|
48
|
+
testPath?: string;
|
|
49
|
+
timeout?: number;
|
|
50
|
+
fetchFn?: typeof fetch;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolve the best testPath for a service by matching against the template directory.
|
|
54
|
+
* Returns undefined if no template match is found.
|
|
55
|
+
*/
|
|
56
|
+
export declare function resolveTestPath(serviceName: string, baseUrl: string): string | undefined;
|
|
57
|
+
/**
|
|
58
|
+
* Full credential test — authenticated GET against an auth-required endpoint.
|
|
59
|
+
* Use when you need to verify that stored credentials are actually valid.
|
|
60
|
+
* Injects auth headers via buildAuthHeaders() (same path as the proxy).
|
|
61
|
+
*
|
|
62
|
+
* For simple reachability without auth, use checkServiceHealth() instead.
|
|
63
|
+
*/
|
|
64
|
+
export declare function testServiceConnection(serviceName: string, serviceConfig: ServiceConfig, options?: ServiceTestOptions): Promise<ServiceTestResult>;
|
|
65
|
+
export interface ExecHealthCheckResult {
|
|
66
|
+
service: string;
|
|
67
|
+
capability: string;
|
|
68
|
+
healthy: boolean;
|
|
69
|
+
checks: {
|
|
70
|
+
binaryExists: boolean;
|
|
71
|
+
binaryPath?: string;
|
|
72
|
+
envResolvable: boolean;
|
|
73
|
+
unresolvedVars?: string[];
|
|
74
|
+
};
|
|
75
|
+
latencyMs: number;
|
|
76
|
+
error?: string;
|
|
77
|
+
checkedAt: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if an exec-mode capability is functional:
|
|
81
|
+
* - Binary specified in allowCommands exists and is executable
|
|
82
|
+
* - Credential env vars can be resolved (without leaking values)
|
|
83
|
+
*/
|
|
84
|
+
export declare function checkExecHealth(serviceName: string, capabilityName: string, capability: {
|
|
85
|
+
allowCommands?: string[];
|
|
86
|
+
env?: Record<string, string>;
|
|
87
|
+
}, credentialAvailable: boolean): Promise<ExecHealthCheckResult>;
|
|
27
88
|
//# sourceMappingURL=health.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/core/health.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/core/health.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CA8D5B;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAC1C,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAK9B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,SAAS,CASpB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,aAAa,EAC5B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CA4G5B;AAID,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE;QACN,YAAY,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,OAAO,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE;IACV,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B,EACD,mBAAmB,EAAE,OAAO,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CA2EhC"}
|
package/dist/core/health.js
CHANGED
|
@@ -3,11 +3,54 @@
|
|
|
3
3
|
* Health check module for Janee services
|
|
4
4
|
* Provides connectivity and latency checks for configured API backends
|
|
5
5
|
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
6
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
40
|
exports.checkServiceHealth = checkServiceHealth;
|
|
8
41
|
exports.checkAllServicesHealth = checkAllServicesHealth;
|
|
42
|
+
exports.resolveTestPath = resolveTestPath;
|
|
43
|
+
exports.testServiceConnection = testServiceConnection;
|
|
44
|
+
exports.checkExecHealth = checkExecHealth;
|
|
45
|
+
const url_1 = require("url");
|
|
46
|
+
const auth_js_1 = require("./auth.js");
|
|
47
|
+
const directory_js_1 = require("./directory.js");
|
|
9
48
|
/**
|
|
10
|
-
*
|
|
49
|
+
* Quick reachability check — unauthenticated HEAD against the base URL.
|
|
50
|
+
* Use for uptime monitoring where you just care "is the endpoint up?"
|
|
51
|
+
* Considers 401/403 as reachable (the server answered, auth is just expected).
|
|
52
|
+
*
|
|
53
|
+
* For verifying credentials actually work, use testServiceConnection() instead.
|
|
11
54
|
*/
|
|
12
55
|
async function checkServiceHealth(serviceName, baseUrl, options = {}) {
|
|
13
56
|
const { timeout = 5000, fetchFn = fetch } = options;
|
|
@@ -17,8 +60,8 @@ async function checkServiceHealth(serviceName, baseUrl, options = {}) {
|
|
|
17
60
|
service: serviceName,
|
|
18
61
|
healthy: false,
|
|
19
62
|
latencyMs: 0,
|
|
20
|
-
error:
|
|
21
|
-
checkedAt
|
|
63
|
+
error: "No base URL configured",
|
|
64
|
+
checkedAt,
|
|
22
65
|
};
|
|
23
66
|
}
|
|
24
67
|
const start = Date.now();
|
|
@@ -26,8 +69,8 @@ async function checkServiceHealth(serviceName, baseUrl, options = {}) {
|
|
|
26
69
|
const controller = new AbortController();
|
|
27
70
|
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
28
71
|
const response = await fetchFn(baseUrl, {
|
|
29
|
-
method:
|
|
30
|
-
signal: controller.signal
|
|
72
|
+
method: "HEAD",
|
|
73
|
+
signal: controller.signal,
|
|
31
74
|
});
|
|
32
75
|
clearTimeout(timeoutId);
|
|
33
76
|
const latencyMs = Date.now() - start;
|
|
@@ -39,7 +82,7 @@ async function checkServiceHealth(serviceName, baseUrl, options = {}) {
|
|
|
39
82
|
healthy: true,
|
|
40
83
|
statusCode: response.status,
|
|
41
84
|
latencyMs,
|
|
42
|
-
checkedAt
|
|
85
|
+
checkedAt,
|
|
43
86
|
};
|
|
44
87
|
}
|
|
45
88
|
return {
|
|
@@ -48,7 +91,7 @@ async function checkServiceHealth(serviceName, baseUrl, options = {}) {
|
|
|
48
91
|
statusCode: response.status,
|
|
49
92
|
latencyMs,
|
|
50
93
|
error: `HTTP ${response.status} ${response.statusText}`,
|
|
51
|
-
checkedAt
|
|
94
|
+
checkedAt,
|
|
52
95
|
};
|
|
53
96
|
}
|
|
54
97
|
catch (err) {
|
|
@@ -59,7 +102,7 @@ async function checkServiceHealth(serviceName, baseUrl, options = {}) {
|
|
|
59
102
|
healthy: false,
|
|
60
103
|
latencyMs,
|
|
61
104
|
error: message,
|
|
62
|
-
checkedAt
|
|
105
|
+
checkedAt,
|
|
63
106
|
};
|
|
64
107
|
}
|
|
65
108
|
}
|
|
@@ -70,4 +113,195 @@ async function checkAllServicesHealth(services, options = {}) {
|
|
|
70
113
|
const checks = Array.from(services.entries()).map(([name, config]) => checkServiceHealth(name, config.baseUrl, options));
|
|
71
114
|
return Promise.all(checks);
|
|
72
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Resolve the best testPath for a service by matching against the template directory.
|
|
118
|
+
* Returns undefined if no template match is found.
|
|
119
|
+
*/
|
|
120
|
+
function resolveTestPath(serviceName, baseUrl) {
|
|
121
|
+
const byName = (0, directory_js_1.getService)(serviceName);
|
|
122
|
+
if (byName?.testPath)
|
|
123
|
+
return byName.testPath;
|
|
124
|
+
// Fall back to matching by baseUrl
|
|
125
|
+
const byUrl = directory_js_1.serviceDirectory.find((t) => t.testPath && baseUrl.startsWith(t.baseUrl));
|
|
126
|
+
return byUrl?.testPath;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Full credential test — authenticated GET against an auth-required endpoint.
|
|
130
|
+
* Use when you need to verify that stored credentials are actually valid.
|
|
131
|
+
* Injects auth headers via buildAuthHeaders() (same path as the proxy).
|
|
132
|
+
*
|
|
133
|
+
* For simple reachability without auth, use checkServiceHealth() instead.
|
|
134
|
+
*/
|
|
135
|
+
async function testServiceConnection(serviceName, serviceConfig, options = {}) {
|
|
136
|
+
const { timeout = 10000, fetchFn = fetch } = options;
|
|
137
|
+
const checkedAt = new Date().toISOString();
|
|
138
|
+
const authType = serviceConfig.auth.type;
|
|
139
|
+
if (!serviceConfig.baseUrl) {
|
|
140
|
+
return {
|
|
141
|
+
service: serviceName,
|
|
142
|
+
baseUrl: "",
|
|
143
|
+
testUrl: "",
|
|
144
|
+
reachable: false,
|
|
145
|
+
authOk: false,
|
|
146
|
+
latencyMs: 0,
|
|
147
|
+
authType,
|
|
148
|
+
error: "No base URL configured",
|
|
149
|
+
checkedAt,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const testPath = options.testPath ||
|
|
153
|
+
serviceConfig.testPath ||
|
|
154
|
+
resolveTestPath(serviceName, serviceConfig.baseUrl);
|
|
155
|
+
const start = Date.now();
|
|
156
|
+
try {
|
|
157
|
+
let baseUrl = serviceConfig.baseUrl;
|
|
158
|
+
if (!baseUrl.endsWith("/"))
|
|
159
|
+
baseUrl += "/";
|
|
160
|
+
let reqPath = testPath || "";
|
|
161
|
+
if (reqPath.startsWith("/"))
|
|
162
|
+
reqPath = reqPath.slice(1);
|
|
163
|
+
const targetUrl = new url_1.URL(reqPath, baseUrl);
|
|
164
|
+
const authResult = await (0, auth_js_1.buildAuthHeaders)(serviceName, serviceConfig, {
|
|
165
|
+
method: "GET",
|
|
166
|
+
targetUrl,
|
|
167
|
+
body: undefined,
|
|
168
|
+
});
|
|
169
|
+
if (authResult.urlParams) {
|
|
170
|
+
for (const [key, value] of Object.entries(authResult.urlParams)) {
|
|
171
|
+
targetUrl.searchParams.set(key, value);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
const controller = new AbortController();
|
|
175
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
176
|
+
const response = await fetchFn(targetUrl.toString(), {
|
|
177
|
+
method: "GET",
|
|
178
|
+
headers: authResult.headers,
|
|
179
|
+
signal: controller.signal,
|
|
180
|
+
});
|
|
181
|
+
clearTimeout(timeoutId);
|
|
182
|
+
const latencyMs = Date.now() - start;
|
|
183
|
+
const reachable = true;
|
|
184
|
+
const authOk = response.ok;
|
|
185
|
+
// On failure, capture upstream response body so agents can diagnose
|
|
186
|
+
let responseBody;
|
|
187
|
+
if (!authOk) {
|
|
188
|
+
try {
|
|
189
|
+
const raw = await response.text();
|
|
190
|
+
responseBody = raw.length > 512 ? raw.slice(0, 512) + "…" : raw;
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// best-effort
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
service: serviceName,
|
|
198
|
+
baseUrl: serviceConfig.baseUrl,
|
|
199
|
+
testUrl: targetUrl.toString(),
|
|
200
|
+
reachable,
|
|
201
|
+
authOk,
|
|
202
|
+
statusCode: response.status,
|
|
203
|
+
latencyMs,
|
|
204
|
+
authType,
|
|
205
|
+
...(response.status === 401 && { error: "Authentication failed (401)" }),
|
|
206
|
+
...(response.status === 403 && {
|
|
207
|
+
error: "Forbidden (403) — credentials may lack required permissions",
|
|
208
|
+
}),
|
|
209
|
+
...(!response.ok &&
|
|
210
|
+
response.status !== 401 &&
|
|
211
|
+
response.status !== 403 && {
|
|
212
|
+
error: `HTTP ${response.status} ${response.statusText}`,
|
|
213
|
+
}),
|
|
214
|
+
responseBody,
|
|
215
|
+
checkedAt,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
const latencyMs = Date.now() - start;
|
|
220
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
221
|
+
const isTimeout = message.includes("abort");
|
|
222
|
+
return {
|
|
223
|
+
service: serviceName,
|
|
224
|
+
baseUrl: serviceConfig.baseUrl,
|
|
225
|
+
testUrl: serviceConfig.baseUrl + (testPath || ""),
|
|
226
|
+
reachable: false,
|
|
227
|
+
authOk: false,
|
|
228
|
+
latencyMs,
|
|
229
|
+
authType,
|
|
230
|
+
error: isTimeout ? `Timeout after ${timeout}ms` : message,
|
|
231
|
+
checkedAt,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Check if an exec-mode capability is functional:
|
|
237
|
+
* - Binary specified in allowCommands exists and is executable
|
|
238
|
+
* - Credential env vars can be resolved (without leaking values)
|
|
239
|
+
*/
|
|
240
|
+
async function checkExecHealth(serviceName, capabilityName, capability, credentialAvailable) {
|
|
241
|
+
const checkedAt = new Date().toISOString();
|
|
242
|
+
const start = Date.now();
|
|
243
|
+
const checks = {
|
|
244
|
+
binaryExists: false,
|
|
245
|
+
binaryPath: undefined,
|
|
246
|
+
envResolvable: false,
|
|
247
|
+
unresolvedVars: undefined,
|
|
248
|
+
};
|
|
249
|
+
// Check binary existence for first allowed command
|
|
250
|
+
if (capability.allowCommands && capability.allowCommands.length > 0) {
|
|
251
|
+
const binary = capability.allowCommands[0];
|
|
252
|
+
try {
|
|
253
|
+
const { execSync } = await Promise.resolve().then(() => __importStar(require("child_process")));
|
|
254
|
+
const whichResult = execSync(`command -v ${binary} 2>/dev/null`, {
|
|
255
|
+
encoding: "utf-8",
|
|
256
|
+
timeout: 5000,
|
|
257
|
+
}).trim();
|
|
258
|
+
checks.binaryExists = true;
|
|
259
|
+
checks.binaryPath = whichResult;
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
checks.binaryExists = false;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Check env var template resolution
|
|
266
|
+
if (capability.env) {
|
|
267
|
+
const templateVars = Object.values(capability.env)
|
|
268
|
+
.flatMap((v) => [...v.matchAll(/\{\{(\w+)\}\}/g)])
|
|
269
|
+
.map((m) => m[1]);
|
|
270
|
+
const unresolved = [];
|
|
271
|
+
for (const varName of templateVars) {
|
|
272
|
+
if (varName === "credential" && !credentialAvailable) {
|
|
273
|
+
unresolved.push("credential");
|
|
274
|
+
}
|
|
275
|
+
if (["apiKey", "apiSecret", "passphrase"].includes(varName) &&
|
|
276
|
+
!credentialAvailable) {
|
|
277
|
+
unresolved.push(varName);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
checks.envResolvable = unresolved.length === 0;
|
|
281
|
+
if (unresolved.length > 0)
|
|
282
|
+
checks.unresolvedVars = unresolved;
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
checks.envResolvable = true;
|
|
286
|
+
}
|
|
287
|
+
const latencyMs = Date.now() - start;
|
|
288
|
+
const healthy = checks.binaryExists && checks.envResolvable;
|
|
289
|
+
const errors = [];
|
|
290
|
+
if (!checks.binaryExists) {
|
|
291
|
+
const binary = capability.allowCommands?.[0] || "unknown";
|
|
292
|
+
errors.push(`Binary '${binary}' not found in PATH`);
|
|
293
|
+
}
|
|
294
|
+
if (!checks.envResolvable && checks.unresolvedVars?.length) {
|
|
295
|
+
errors.push(`Unresolved template vars: ${checks.unresolvedVars.join(", ")}`);
|
|
296
|
+
}
|
|
297
|
+
return {
|
|
298
|
+
service: serviceName,
|
|
299
|
+
capability: capabilityName,
|
|
300
|
+
healthy,
|
|
301
|
+
checks,
|
|
302
|
+
latencyMs,
|
|
303
|
+
error: errors.length > 0 ? errors.join("; ") : undefined,
|
|
304
|
+
checkedAt,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
73
307
|
//# sourceMappingURL=health.js.map
|