@coffeerunhobby/mcp-ha-connect 2.4.8 → 2.5.1

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 (46) hide show
  1. package/.env.example +16 -1
  2. package/README.md +31 -5
  3. package/dist/config.d.ts +5 -0
  4. package/dist/config.js +18 -0
  5. package/dist/config.js.map +1 -1
  6. package/dist/index.js +3 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/net/adapters/omada.d.ts +10 -1
  9. package/dist/net/adapters/omada.js +40 -2
  10. package/dist/net/adapters/omada.js.map +1 -1
  11. package/dist/net/adapters/ruijie.d.ts +82 -0
  12. package/dist/net/adapters/ruijie.js +491 -0
  13. package/dist/net/adapters/ruijie.js.map +1 -0
  14. package/dist/net/model.d.ts +30 -2
  15. package/dist/net/model.js.map +1 -1
  16. package/dist/ruijieClient/crypto.d.ts +20 -0
  17. package/dist/ruijieClient/crypto.js +57 -0
  18. package/dist/ruijieClient/crypto.js.map +1 -0
  19. package/dist/ruijieClient/index.d.ts +74 -0
  20. package/dist/ruijieClient/index.js +240 -0
  21. package/dist/ruijieClient/index.js.map +1 -0
  22. package/dist/server/common.d.ts +2 -0
  23. package/dist/server/common.js +2 -1
  24. package/dist/server/common.js.map +1 -1
  25. package/dist/server/http.d.ts +11 -0
  26. package/dist/server/http.js +25 -10
  27. package/dist/server/http.js.map +1 -1
  28. package/dist/server/stdio.d.ts +2 -0
  29. package/dist/server/stdio.js.map +1 -1
  30. package/dist/server/stream.d.ts +2 -0
  31. package/dist/server/stream.js +2 -1
  32. package/dist/server/stream.js.map +1 -1
  33. package/dist/tools/index.d.ts +3 -0
  34. package/dist/tools/index.js +9 -3
  35. package/dist/tools/index.js.map +1 -1
  36. package/dist/tools/net/index.d.ts +14 -2
  37. package/dist/tools/net/index.js +84 -3
  38. package/dist/tools/net/index.js.map +1 -1
  39. package/dist/upstreams.d.ts +7 -2
  40. package/dist/upstreams.js +54 -2
  41. package/dist/upstreams.js.map +1 -1
  42. package/dist/utils/redact.js +1 -1
  43. package/dist/utils/redact.js.map +1 -1
  44. package/dist/version.d.ts +1 -1
  45. package/dist/version.js +1 -1
  46. package/package.json +3 -3
@@ -0,0 +1,57 @@
1
+ /**
2
+ * The small amount of crypto Ruijie's eWeb login and API calls need, done the way the
3
+ * router's own web page does it (verified against a RG-EG105G-V3, ReyeeOS 2.324, 2026-10-24):
4
+ *
5
+ * - The page encrypts the login password with GibberishAES: OpenSSL's "Salted__" format,
6
+ * AES-256-CBC with key and IV from EVP_BytesToKey (MD5). Its key is itself shipped in the
7
+ * page, encrypted with the passphrase "eweb". This hides the password from a casual look at
8
+ * the traffic; it is not a secret, so the transport should still be HTTPS.
9
+ * - Every API request carries two checksum headers, MD5 of a fixed string plus the body's
10
+ * byte length (Content-Accept) and plus the body itself (Contents-Accept).
11
+ */
12
+ import { createCipheriv, createDecipheriv, createHash, randomBytes } from 'node:crypto';
13
+ /** The login-page key blob (GibberishAES of the key, passphrase "eweb"), as the page ships it. */
14
+ const PAGE_KEY_BLOB = 'U2FsdGVkX19ecPYL/ZAlcSG29wb6ivqD9YjEM30k1h8=';
15
+ const PAGE_KEY_PASSPHRASE = 'eweb';
16
+ const CHECKSUM_PREFIX = 'Web@Rj$2020!';
17
+ const SALTED = Buffer.from('Salted__');
18
+ function evpBytesToKey(passphrase, salt) {
19
+ let previous = Buffer.alloc(0);
20
+ let derived = Buffer.alloc(0);
21
+ while (derived.length < 48) {
22
+ previous = createHash('md5').update(Buffer.concat([previous, passphrase, salt])).digest();
23
+ derived = Buffer.concat([derived, previous]);
24
+ }
25
+ return { key: derived.subarray(0, 32), iv: derived.subarray(32, 48) };
26
+ }
27
+ /** GibberishAES / `openssl enc -aes-256-cbc -md md5` encryption, base64 with the "Salted__" header. */
28
+ export function gibberishEncrypt(text, passphrase, salt = randomBytes(8)) {
29
+ const { key, iv } = evpBytesToKey(Buffer.from(passphrase), salt);
30
+ const cipher = createCipheriv('aes-256-cbc', key, iv);
31
+ return Buffer.concat([SALTED, salt, cipher.update(text, 'utf8'), cipher.final()]).toString('base64');
32
+ }
33
+ export function gibberishDecrypt(blob, passphrase) {
34
+ const raw = Buffer.from(blob, 'base64');
35
+ if (raw.length < 32 || !raw.subarray(0, 8).equals(SALTED))
36
+ throw new Error('Not an OpenSSL salted AES blob');
37
+ const { key, iv } = evpBytesToKey(Buffer.from(passphrase), raw.subarray(8, 16));
38
+ const decipher = createDecipheriv('aes-256-cbc', key, iv);
39
+ return Buffer.concat([decipher.update(raw.subarray(16)), decipher.final()]).toString('utf8');
40
+ }
41
+ /** The key the login page encrypts the password with. */
42
+ export function pageKey() {
43
+ return gibberishDecrypt(PAGE_KEY_BLOB, PAGE_KEY_PASSPHRASE);
44
+ }
45
+ /** The password as the login page sends it. */
46
+ export function encryptPassword(password) {
47
+ return gibberishEncrypt(password, pageKey());
48
+ }
49
+ /** The two checksum headers the web page sends with every API request. */
50
+ export function checksumHeaders(body) {
51
+ const md5 = (value) => createHash('md5').update(value).digest('hex');
52
+ return {
53
+ 'Content-Accept': md5(CHECKSUM_PREFIX + Buffer.byteLength(body, 'utf8')),
54
+ 'Contents-Accept': md5(CHECKSUM_PREFIX + body),
55
+ };
56
+ }
57
+ //# sourceMappingURL=crypto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/ruijieClient/crypto.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Client for a Ruijie / Reyee router's local eWeb API (the JSON API its own web page uses),
3
+ * mapped on a RG-EG105G-V3 with ReyeeOS 2.324 (2026-10-24):
4
+ *
5
+ * - Login: POST /cgi-bin/luci/api/auth {method: "login", params: {username: "admin",
6
+ * password: <GibberishAES>, time, encry: true}} answers {data: {sid, token, sn}} and sets a
7
+ * session cookie. The username is always "admin". The session lasts about an hour.
8
+ * - Calls: POST /cgi-bin/luci/api/cmd?auth=<sid> {method, params: {module, data}} with the
9
+ * cookie and the page's checksum headers. Methods: devConfig.get (settings), devSta.get
10
+ * (live state), and devConfig.add / update / del / set for changes.
11
+ * - An expired or unknown session answers {code: 2, msg: "403 Forbidden, auth is not passed"}:
12
+ * the client logs in again once and repeats the call once.
13
+ *
14
+ * Wrong passwords lock the router's login (five in a row lock it for a minute), so a refused
15
+ * login is never retried: the client switches itself off with a clear message until the
16
+ * setting is fixed and the server restarted. Only a network failure lets the next call try
17
+ * again. The session id is never logged or put in an error message.
18
+ */
19
+ export interface RuijieClientConfig {
20
+ /** e.g. https://192.168.110.1 (the router's management address). */
21
+ baseUrl: string;
22
+ /** The router's admin password (RUIJIE_PASSWORD). */
23
+ password: string;
24
+ /** false: accept the router's self-signed certificate (this client only). */
25
+ strictSsl?: boolean;
26
+ /** Milliseconds per request (default 15000). */
27
+ timeout?: number;
28
+ }
29
+ /** A Ruijie call that failed: `refused` = the login was refused, `unknownModule` = the router has no such module. */
30
+ export declare class RuijieError extends Error {
31
+ readonly kind: 'refused' | 'unreachable' | 'router' | 'unknownModule' | 'disabled';
32
+ /** For an unreachable router: true when the request certainly never reached it (no connection, or no session). */
33
+ readonly notSent: boolean;
34
+ constructor(message: string, kind?: 'refused' | 'unreachable' | 'router' | 'unknownModule' | 'disabled',
35
+ /** For an unreachable router: true when the request certainly never reached it (no connection, or no session). */
36
+ notSent?: boolean);
37
+ }
38
+ export declare class RuijieClient {
39
+ /** Host of the router's base URL (the router's own address, kept out of harm's way). */
40
+ readonly host: string;
41
+ private readonly baseUrl;
42
+ private readonly password;
43
+ private readonly timeout;
44
+ private readonly dispatcher?;
45
+ private session?;
46
+ private loggingIn?;
47
+ private disabledMessage?;
48
+ constructor(config: RuijieClientConfig);
49
+ /** Settings: devConfig.get. */
50
+ config<T = Record<string, unknown>>(module: string, data?: unknown): Promise<T>;
51
+ /** Live state: devSta.get. */
52
+ status<T = Record<string, unknown>>(module: string, data?: unknown): Promise<T>;
53
+ /** The router's identity (model and firmware); logs in when needed. Used as the reachability check. */
54
+ check(): Promise<{
55
+ model: string;
56
+ version: string;
57
+ }>;
58
+ /** Turns every call into a refusal with this message (e.g. after a refused login). */
59
+ disable(message: string): void;
60
+ get disabled(): string | undefined;
61
+ /** A module call on /api/cmd: devConfig.* (settings and changes) or devSta.* (live state). */
62
+ call<T>(method: string, module: string, data?: unknown): Promise<T>;
63
+ /**
64
+ * A system call on /api/system, e.g. getVersion (the running and the offered firmware) or
65
+ * upgradeConfirm (install a firmware and restart).
66
+ */
67
+ system<T>(method: string, params?: Record<string, unknown>): Promise<T>;
68
+ /** One call with the session; a session the router no longer accepts is renewed once. */
69
+ private request;
70
+ private ensureSession;
71
+ private login;
72
+ private post;
73
+ private postWithCookies;
74
+ }
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Client for a Ruijie / Reyee router's local eWeb API (the JSON API its own web page uses),
3
+ * mapped on a RG-EG105G-V3 with ReyeeOS 2.324 (2026-10-24):
4
+ *
5
+ * - Login: POST /cgi-bin/luci/api/auth {method: "login", params: {username: "admin",
6
+ * password: <GibberishAES>, time, encry: true}} answers {data: {sid, token, sn}} and sets a
7
+ * session cookie. The username is always "admin". The session lasts about an hour.
8
+ * - Calls: POST /cgi-bin/luci/api/cmd?auth=<sid> {method, params: {module, data}} with the
9
+ * cookie and the page's checksum headers. Methods: devConfig.get (settings), devSta.get
10
+ * (live state), and devConfig.add / update / del / set for changes.
11
+ * - An expired or unknown session answers {code: 2, msg: "403 Forbidden, auth is not passed"}:
12
+ * the client logs in again once and repeats the call once.
13
+ *
14
+ * Wrong passwords lock the router's login (five in a row lock it for a minute), so a refused
15
+ * login is never retried: the client switches itself off with a clear message until the
16
+ * setting is fixed and the server restarted. Only a network failure lets the next call try
17
+ * again. The session id is never logged or put in an error message.
18
+ */
19
+ import { logger } from '../utils/logger.js';
20
+ import { createTlsDispatcher, tlsAwareFetch } from '../utils/tlsDispatcher.js';
21
+ import { checksumHeaders, encryptPassword } from './crypto.js';
22
+ /** A Ruijie call that failed: `refused` = the login was refused, `unknownModule` = the router has no such module. */
23
+ export class RuijieError extends Error {
24
+ kind;
25
+ notSent;
26
+ constructor(message, kind = 'router',
27
+ /** For an unreachable router: true when the request certainly never reached it (no connection, or no session). */
28
+ notSent = false) {
29
+ super(message);
30
+ this.kind = kind;
31
+ this.notSent = notSent;
32
+ this.name = 'RuijieError';
33
+ }
34
+ }
35
+ /** Connection failures that happen before a request is sent: refused, no route, no name, TLS rejected. */
36
+ const NOT_SENT = /^(ECONNREFUSED|ENOTFOUND|EAI_AGAIN|EHOSTUNREACH|ENETUNREACH|UND_ERR_CONNECT_TIMEOUT|ERR_TLS_|ERR_SSL_|CERT_|UNABLE_TO_|DEPTH_ZERO_SELF_SIGNED_CERT|SELF_SIGNED_CERT_IN_CHAIN)/;
37
+ function failedBeforeSending(error) {
38
+ const cause = error instanceof Error ? error.cause : undefined;
39
+ return typeof cause?.code === 'string' && NOT_SENT.test(cause.code);
40
+ }
41
+ /** Answer of a call whose session was not accepted. */
42
+ const AUTH_NOT_PASSED = 2;
43
+ export class RuijieClient {
44
+ /** Host of the router's base URL (the router's own address, kept out of harm's way). */
45
+ host;
46
+ baseUrl;
47
+ password;
48
+ timeout;
49
+ dispatcher;
50
+ session;
51
+ loggingIn;
52
+ disabledMessage;
53
+ constructor(config) {
54
+ const url = new URL(config.baseUrl);
55
+ this.baseUrl = url.origin;
56
+ this.host = url.hostname;
57
+ this.password = config.password;
58
+ this.timeout = config.timeout ?? 15_000;
59
+ this.dispatcher = createTlsDispatcher(config.strictSsl, config.baseUrl);
60
+ if (url.protocol === 'http:') {
61
+ // The login page's password encryption uses a key shipped in the page itself: over plain
62
+ // HTTP anyone watching the traffic can read the password. Only HTTPS protects it.
63
+ logger.warn('RUIJIE_BASE_URL uses plain http: the router password can be read by anyone watching the traffic. Use https:// (RUIJIE_STRICT_SSL=false for its self-signed certificate) unless the connection already runs inside an encrypted tunnel.');
64
+ }
65
+ }
66
+ /** Settings: devConfig.get. */
67
+ async config(module, data) {
68
+ return await this.call('devConfig.get', module, data);
69
+ }
70
+ /** Live state: devSta.get. */
71
+ async status(module, data) {
72
+ return await this.call('devSta.get', module, data);
73
+ }
74
+ /** The router's identity (model and firmware); logs in when needed. Used as the reachability check. */
75
+ async check() {
76
+ const info = await this.status('sysinfo');
77
+ return { model: String(info.product_class ?? info.model ?? 'unknown'), version: String(info.software_version ?? 'unknown') };
78
+ }
79
+ /** Turns every call into a refusal with this message (e.g. after a refused login). */
80
+ disable(message) {
81
+ this.disabledMessage = message;
82
+ }
83
+ get disabled() {
84
+ return this.disabledMessage;
85
+ }
86
+ /** A module call on /api/cmd: devConfig.* (settings and changes) or devSta.* (live state). */
87
+ async call(method, module, data) {
88
+ return await this.request('cmd', { method, params: data === undefined ? { module } : { module, data } }, `${method} ${module}`, !method.endsWith('.get'));
89
+ }
90
+ /**
91
+ * A system call on /api/system, e.g. getVersion (the running and the offered firmware) or
92
+ * upgradeConfirm (install a firmware and restart).
93
+ */
94
+ async system(method, params) {
95
+ return await this.request('system', { method, params: params ?? {} }, `system ${method}`, method !== 'getVersion');
96
+ }
97
+ /** One call with the session; a session the router no longer accepts is renewed once. */
98
+ async request(endpoint, payload, label, isChange) {
99
+ for (let attempt = 0;; attempt++) {
100
+ let session;
101
+ try {
102
+ session = await this.ensureSession();
103
+ }
104
+ catch (error) {
105
+ // No session, so this request was never sent (after a code 2 the router refused the first try).
106
+ if (error instanceof RuijieError && error.kind === 'unreachable')
107
+ throw new RuijieError(error.message, 'unreachable', true);
108
+ throw error;
109
+ }
110
+ const body = JSON.stringify(payload);
111
+ const answer = await this.post(`/cgi-bin/luci/api/${endpoint}?auth=${encodeURIComponent(session.sid)}`, body, session.cookie);
112
+ if (answer.code === AUTH_NOT_PASSED && attempt === 0) {
113
+ // The session expired (or the router restarted): log in once more, repeat once.
114
+ if (this.session === session)
115
+ this.session = undefined;
116
+ continue;
117
+ }
118
+ if (answer.code !== 0)
119
+ throw new RuijieError(`The Ruijie router refused ${label} (${codeOf(answer.code)})`);
120
+ let result = parseData(answer.data);
121
+ // Some modules answer with a second envelope inside data.
122
+ if (isEnvelope(result)) {
123
+ if (result.code !== 0 && result.code !== '0')
124
+ throw new RuijieError(`The Ruijie router refused ${label} (${codeOf(result.code)})`);
125
+ result = parseData(result.data);
126
+ }
127
+ if (result && typeof result === 'object' && 'rcode' in result && 'rmsg' in result && 'modelNam' in result) {
128
+ throw new RuijieError(`The Ruijie router has no ${label}`, 'unknownModule');
129
+ }
130
+ const rcode = result && typeof result === 'object' ? result.rcode : undefined;
131
+ if (isChange && rcode !== undefined && rcode !== '00000000') {
132
+ throw new RuijieError(`The Ruijie router refused ${label} (r${codeOf(rcode)})`);
133
+ }
134
+ logger.debug('Ruijie call', { call: label });
135
+ return result;
136
+ }
137
+ }
138
+ async ensureSession() {
139
+ if (this.disabledMessage)
140
+ throw new RuijieError(this.disabledMessage, 'disabled');
141
+ if (this.session)
142
+ return this.session;
143
+ // One login at a time: parallel calls wait for the same one.
144
+ this.loggingIn ??= this.login().finally(() => {
145
+ this.loggingIn = undefined;
146
+ });
147
+ return await this.loggingIn;
148
+ }
149
+ async login() {
150
+ const body = JSON.stringify({
151
+ method: 'login',
152
+ params: { password: encryptPassword(this.password), username: 'admin', time: Math.floor(Date.now() / 1000).toString(), encry: true },
153
+ });
154
+ const { answer, cookies } = await this.postWithCookies('/cgi-bin/luci/api/auth', body);
155
+ const data = parseData(answer.data);
156
+ const sid = data && typeof data === 'object' ? data.sid : undefined;
157
+ if (typeof sid !== 'string' || sid === '') {
158
+ const locked = data && typeof data === 'object' && data.lockTime !== undefined;
159
+ // Never retried: wrong passwords lock the router's login.
160
+ const message = locked
161
+ ? 'The Ruijie router has locked its login after failed attempts. The Ruijie tools stay off; check RUIJIE_PASSWORD, wait for the lock to pass and restart the server.'
162
+ : 'The Ruijie router refused the login (wrong RUIJIE_PASSWORD?). The Ruijie tools stay off until the setting is fixed and the server restarted; they never retry, because wrong passwords lock the router.';
163
+ this.disable(message);
164
+ logger.error(message);
165
+ throw new RuijieError(message, 'refused');
166
+ }
167
+ this.session = { sid, cookie: cookies.join('; ') };
168
+ logger.info('Logged in to the Ruijie router');
169
+ return this.session;
170
+ }
171
+ async post(path, body, cookie) {
172
+ return (await this.postWithCookies(path, body, cookie)).answer;
173
+ }
174
+ async postWithCookies(path, body, cookie) {
175
+ const init = {
176
+ method: 'POST',
177
+ headers: { 'Content-Type': 'application/json', ...(cookie ? { Cookie: cookie } : {}), ...checksumHeaders(body) },
178
+ body,
179
+ signal: AbortSignal.timeout(this.timeout),
180
+ };
181
+ if (this.dispatcher)
182
+ init.dispatcher = this.dispatcher;
183
+ let response;
184
+ try {
185
+ response = await tlsAwareFetch(this.baseUrl + path, init);
186
+ }
187
+ catch (error) {
188
+ // Never the URL: it carries the session id.
189
+ const reason = error instanceof Error && error.name === 'TimeoutError' ? 'timed out' : 'not reachable';
190
+ throw new RuijieError(`The Ruijie router is ${reason}`, 'unreachable', failedBeforeSending(error));
191
+ }
192
+ let raw;
193
+ try {
194
+ raw = await response.text();
195
+ }
196
+ catch (error) {
197
+ // The answer broke off (e.g. the router restarted while sending it): the request did arrive.
198
+ const reason = error instanceof Error && error.name === 'TimeoutError' ? 'timed out' : 'not reachable';
199
+ throw new RuijieError(`The Ruijie router is ${reason}`, 'unreachable');
200
+ }
201
+ let answer;
202
+ try {
203
+ answer = JSON.parse(raw);
204
+ }
205
+ catch {
206
+ // A success status with a broken body is a cut-off answer, not a refusal.
207
+ if (response.ok)
208
+ throw new RuijieError('The Ruijie router\'s answer was cut off', 'unreachable');
209
+ throw new RuijieError(`The Ruijie router answered HTTP ${response.status} without JSON`);
210
+ }
211
+ const cookies = (response.headers.getSetCookie?.() ?? []).map((c) => c.split(';')[0]);
212
+ return { answer: answer ?? {}, cookies };
213
+ }
214
+ }
215
+ function isEnvelope(value) {
216
+ if (!value || typeof value !== 'object' || Array.isArray(value))
217
+ return false;
218
+ const keys = Object.keys(value).sort().join(',');
219
+ return keys === 'code,data,error,id' || keys === 'code,data,error';
220
+ }
221
+ /** The router sometimes sends `data` as a JSON string. */
222
+ function parseData(data) {
223
+ if (typeof data !== 'string')
224
+ return data;
225
+ try {
226
+ return JSON.parse(data.trim());
227
+ }
228
+ catch {
229
+ return data;
230
+ }
231
+ }
232
+ /**
233
+ * Only the router's numeric code goes into an error, never its own text: that could carry a URL,
234
+ * the session id or a password, and errors reach tool output.
235
+ */
236
+ function codeOf(code) {
237
+ const value = typeof code === 'number' ? String(code) : typeof code === 'string' ? code : '';
238
+ return `code ${/^\d{1,10}$/.test(value) ? value : 'unknown'}`;
239
+ }
240
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ruijieClient/index.ts"],"names":[],"mappings":"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"}
@@ -7,12 +7,14 @@ import type { RegisteredTool } from '@modelcontextprotocol/server';
7
7
  import type { HaClient } from '../haClient/index.js';
8
8
  import type { LocalAIClient } from '../localAI/index.js';
9
9
  import type { OmadaClient } from '../omadaClient/index.js';
10
+ import type { RuijieClient } from '../ruijieClient/index.js';
10
11
  import type { OmadaRegistrationMode } from '../tools/omada/index.js';
11
12
  import type { RestAction } from '../tools/infra/index.js';
12
13
  import type { OwnerQuestionService } from '../ownerQuestions/service.js';
13
14
  export interface CreateServerOptions {
14
15
  haClient?: HaClient;
15
16
  omadaClient?: OmadaClient;
17
+ ruijieClient?: RuijieClient;
16
18
  aiClient?: LocalAIClient;
17
19
  /** Pre-registered REST actions for invokeAction (empty/undefined = tool not registered). */
18
20
  restActions?: Record<string, RestAction>;
@@ -10,7 +10,7 @@ import { generateInstructions } from './instructions.js';
10
10
  import { logger } from '../utils/logger.js';
11
11
  import { VERSION } from '../version.js';
12
12
  export function createServer(options) {
13
- const { haClient, omadaClient, aiClient, restActions, toolRegistrationMode, callerPermissions, ownerQuestions } = options;
13
+ const { haClient, omadaClient, ruijieClient, aiClient, restActions, toolRegistrationMode, callerPermissions, ownerQuestions } = options;
14
14
  logger.debug('Creating MCP server instance');
15
15
  // Generate instructions based on enabled plugins
16
16
  const instructions = generateInstructions({
@@ -42,6 +42,7 @@ export function createServer(options) {
42
42
  server,
43
43
  haClient,
44
44
  omadaClient,
45
+ ruijieClient,
45
46
  aiClient,
46
47
  restActions,
47
48
  toolRegistrationMode,
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/server/common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/server/common.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,8 @@ import type { EnvironmentConfig } from '../config.js';
7
7
  import type { HaClient } from '../haClient/index.js';
8
8
  import type { LocalAIClient } from '../localAI/index.js';
9
9
  import type { OmadaClient } from '../omadaClient/index.js';
10
+ import type { RuijieClient } from '../ruijieClient/index.js';
11
+ import { type ChatBinding } from './chatFace.js';
10
12
  /**
11
13
  * Maximum accepted request body size, in bytes (M5 / OWASP API4:2023).
12
14
  * 1 MB is comfortably above any legitimate MCP/JSON-RPC or REST payload.
@@ -89,6 +91,14 @@ export declare function isStatelessMcpGet(stateful: boolean, method: string | un
89
91
  * the first hop.
90
92
  */
91
93
  export declare function resolveForwardedProto(headerValue: string | string[] | undefined): 'http' | 'https';
94
+ /** Whether Cloudflare forwarded the request (it adds these to every request it passes on). */
95
+ export declare function isTunnelledRequest(req: IncomingMessage): boolean;
96
+ /**
97
+ * `/openapi.json` is unauthenticated (Open WebUI fetches it on the LAN), so it is served on
98
+ * the LAN only: through the public Cloudflare hostname it would hand anyone the version and
99
+ * the chat-face tool map. A tunnelled request gets a plain 404, as for an unknown path.
100
+ */
101
+ export declare function handleOpenApiRequest(req: IncomingMessage, res: ServerResponse, fallbackHost: string, bindings: ChatBinding[]): void;
92
102
  /**
93
103
  * Generate OpenAPI spec for Open WebUI compatibility (legacy entry point).
94
104
  *
@@ -103,6 +113,7 @@ export declare function getOpenApiSpec(baseUrl: string): object;
103
113
  export interface HttpServerOptions {
104
114
  haClient?: HaClient;
105
115
  omadaClient?: OmadaClient;
116
+ ruijieClient?: RuijieClient;
106
117
  config: EnvironmentConfig;
107
118
  aiClient?: LocalAIClient;
108
119
  }
@@ -215,6 +215,28 @@ export function resolveForwardedProto(headerValue) {
215
215
  .toLowerCase();
216
216
  return proto === 'https' ? 'https' : 'http';
217
217
  }
218
+ /** Whether Cloudflare forwarded the request (it adds these to every request it passes on). */
219
+ export function isTunnelledRequest(req) {
220
+ return req.headers['cf-connecting-ip'] !== undefined || req.headers['cf-ray'] !== undefined;
221
+ }
222
+ /**
223
+ * `/openapi.json` is unauthenticated (Open WebUI fetches it on the LAN), so it is served on
224
+ * the LAN only: through the public Cloudflare hostname it would hand anyone the version and
225
+ * the chat-face tool map. A tunnelled request gets a plain 404, as for an unknown path.
226
+ */
227
+ export function handleOpenApiRequest(req, res, fallbackHost, bindings) {
228
+ if (isTunnelledRequest(req)) {
229
+ sendJson(res, 404, { error: 'Not found' });
230
+ return;
231
+ }
232
+ addRestApiCors(req, res);
233
+ // Honor X-Forwarded-Proto (set by reverse proxies) so the advertised server URL is https
234
+ // when the endpoint is TLS-terminated upstream. Without this, an https Open WebUI page is
235
+ // handed an http:// server URL and the browser blocks tool calls as mixed content
236
+ // ("NetworkError when attempting to fetch resource").
237
+ const scheme = resolveForwardedProto(req.headers['x-forwarded-proto']);
238
+ sendJson(res, 200, buildOpenApiSpec(`${scheme}://${req.headers.host ?? fallbackHost}`, bindings));
239
+ }
218
240
  /**
219
241
  * Generate OpenAPI spec for Open WebUI compatibility (legacy entry point).
220
242
  *
@@ -243,7 +265,7 @@ function handleCors(req, res, config) {
243
265
  }
244
266
  }
245
267
  export async function startHttpServer(options) {
246
- const { haClient: client, omadaClient, config, aiClient } = options;
268
+ const { haClient: client, omadaClient, ruijieClient, config, aiClient } = options;
247
269
  // v1.7: resolve the ACTIVE chat-face bindings once at startup — the operator's
248
270
  // MCP_CHAT_TOOLS slice ∩ code-side chat-eligible bindings (unset = legacy 8).
249
271
  const chatBindings = resolveChatBindings(config.chatTools, {
@@ -389,14 +411,7 @@ export async function startHttpServer(options) {
389
411
  }
390
412
  // OpenAPI spec endpoint for Open WebUI compatibility
391
413
  if (req.method === 'GET' && url === '/openapi.json') {
392
- addRestApiCors(req, res);
393
- // Honor X-Forwarded-Proto (set by Cloudflare / reverse proxies) so the advertised
394
- // server URL is https when the public endpoint is TLS-terminated upstream. Without
395
- // this, an https Open WebUI page is handed an http:// server URL and the browser
396
- // blocks tool calls as mixed content ("NetworkError when attempting to fetch resource").
397
- const scheme = resolveForwardedProto(req.headers['x-forwarded-proto']);
398
- const baseUrl = `${scheme}://${req.headers.host ?? `${bindAddr}:${port}`}`;
399
- sendJson(res, 200, buildOpenApiSpec(baseUrl, chatBindings));
414
+ handleOpenApiRequest(req, res, `${bindAddr}:${port}`, chatBindings);
400
415
  return;
401
416
  }
402
417
  // REST API endpoints for Open WebUI compatibility (chat face). Per-binding
@@ -425,7 +440,7 @@ export async function startHttpServer(options) {
425
440
  const sessionId = req.headers['mcp-session-id'];
426
441
  const existingState = sessionId ? sessions.get(sessionId) : undefined;
427
442
  const body = req.method !== 'GET' ? await parseBody(req) : undefined;
428
- const streamOptions = { haClient: client, omadaClient, aiClient, config, ownerQuestions };
443
+ const streamOptions = { haClient: client, omadaClient, ruijieClient, aiClient, config, ownerQuestions };
429
444
  const state = await handleStreamRequest(streamOptions, req, res, body, existingState);
430
445
  if (state && config.stateful && sessionId) {
431
446
  sessions.set(sessionId, state);
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}
@@ -5,11 +5,13 @@
5
5
  import type { HaClient } from '../haClient/index.js';
6
6
  import type { LocalAIClient } from '../localAI/index.js';
7
7
  import type { OmadaClient } from '../omadaClient/index.js';
8
+ import type { RuijieClient } from '../ruijieClient/index.js';
8
9
  import type { OmadaRegistrationMode } from '../tools/omada/index.js';
9
10
  import type { RestAction } from '../tools/infra/index.js';
10
11
  export interface StdioServerOptions {
11
12
  haClient?: HaClient;
12
13
  omadaClient?: OmadaClient;
14
+ ruijieClient?: RuijieClient;
13
15
  aiClient?: LocalAIClient;
14
16
  /** Pre-registered REST actions for invokeAction (empty/undefined = tool not registered). */
15
17
  restActions?: Record<string, RestAction>;