@coffeerunhobby/mcp-ha-connect 2.5.0 → 2.5.2
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/.env.example +9 -1
- package/README.md +41 -16
- package/dist/config.d.ts +6 -0
- package/dist/config.js +16 -0
- package/dist/config.js.map +1 -1
- package/dist/net/adapters/omada.d.ts +3 -1
- package/dist/net/adapters/omada.js +18 -0
- package/dist/net/adapters/omada.js.map +1 -1
- package/dist/net/adapters/ruijie.d.ts +30 -5
- package/dist/net/adapters/ruijie.js +150 -13
- package/dist/net/adapters/ruijie.js.map +1 -1
- package/dist/net/model.d.ts +29 -1
- package/dist/net/model.js.map +1 -1
- package/dist/ruijieClient/index.d.ts +23 -1
- package/dist/ruijieClient/index.js +73 -14
- package/dist/ruijieClient/index.js.map +1 -1
- package/dist/server/http.d.ts +9 -0
- package/dist/server/http.js +23 -8
- package/dist/server/http.js.map +1 -1
- package/dist/tools/net/index.d.ts +6 -0
- package/dist/tools/net/index.js +26 -1
- package/dist/tools/net/index.js.map +1 -1
- package/dist/upstreams.js +3 -0
- package/dist/upstreams.js.map +1 -1
- package/dist/utils/tlsDispatcher.d.ts +12 -0
- package/dist/utils/tlsDispatcher.js +34 -1
- package/dist/utils/tlsDispatcher.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Ruijie / Reyee adapter for the vendor-neutral network model (src/net/model.ts), through the
|
|
3
3
|
* router's local eWeb API (src/ruijieClient). Mapped on a RG-EG105G-V3, ReyeeOS 2.324
|
|
4
|
-
* (2026-10-24).
|
|
5
|
-
*
|
|
4
|
+
* (2026-10-24). It reads; the one change it makes (2.5.1) is a firmware upgrade to the version
|
|
5
|
+
* the router itself is offered (system getVersion / upgradeConfirm, the page's "Online Upgrade").
|
|
6
|
+
* Other changes are refused (UNSUPPORTED) until their write phases are built and live-tested.
|
|
6
7
|
*
|
|
7
8
|
* What is read, and how it maps:
|
|
8
9
|
* - networks: devConfig.get network, `lan[]` (one entry per LAN interface: address, netmask,
|
|
@@ -21,12 +22,49 @@
|
|
|
21
22
|
* No Wi-Fi radio on this model, no switch port profiles, no mDNS repeater; groups (Ruijie's
|
|
22
23
|
* user groups are address ranges and users, not the model's address groups) come later.
|
|
23
24
|
*/
|
|
25
|
+
import { createHash } from 'node:crypto';
|
|
24
26
|
import { formatMac, normalizeMac } from '../../omadaClient/client.js';
|
|
27
|
+
import { RuijieError } from '../../ruijieClient/index.js';
|
|
25
28
|
import { inSubnet, ipToNumber, parseCidr, subnetsOverlap } from '../../utils/ipv4.js';
|
|
26
29
|
import { NetError, } from '../model.js';
|
|
27
30
|
/** Ruijie's name for "all the time" in a rule's time setting (the default time group). */
|
|
28
31
|
const ALL_TIME = new Set(['所有时段', 'everytime', 'All Time', '']);
|
|
29
|
-
const READ_ONLY = 'The Ruijie adapter
|
|
32
|
+
const READ_ONLY = 'The Ruijie adapter makes no changes but firmware upgrades in this version; reservations and rules come next, then networks.';
|
|
33
|
+
/**
|
|
34
|
+
* Firmware is only installed from Ruijie's own download servers (e.g. devicecdn-eu.ruijienetworks.com),
|
|
35
|
+
* at the address the router itself was offered. The router fetches it and checks it itself; the
|
|
36
|
+
* address Ruijie hands out is plain http (live, 2026-10-24), exactly what the page's Online Upgrade uses.
|
|
37
|
+
*/
|
|
38
|
+
const RUIJIE_DOWNLOADS = /(^|\.)ruijienetworks\.com$/i;
|
|
39
|
+
/** The getVersion answer as an offer: only a version other than the running one counts as new. */
|
|
40
|
+
export function toOffer(answer) {
|
|
41
|
+
const current = text(answer.cur).trim();
|
|
42
|
+
const offered = list(answer.new?.firmwareList)[0];
|
|
43
|
+
const version = offered ? text(offered.versionCode).trim() : '';
|
|
44
|
+
if (!offered || !version || version === current)
|
|
45
|
+
return { current };
|
|
46
|
+
const size = Number(text(offered.fileSize));
|
|
47
|
+
return {
|
|
48
|
+
current,
|
|
49
|
+
version,
|
|
50
|
+
...(text(offered.releaseNotes).trim() ? { notes: text(offered.releaseNotes).trim() } : {}),
|
|
51
|
+
...(size > 0 ? { sizeBytes: size } : {}),
|
|
52
|
+
url: text(offered.downloadUrlTar),
|
|
53
|
+
...(text(offered.md5) ? { md5: text(offered.md5) } : {}),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** Whether a download address is on Ruijie's own servers (nothing else is ever handed to the router). */
|
|
57
|
+
export function isRuijieDownload(url) {
|
|
58
|
+
if (!url)
|
|
59
|
+
return false;
|
|
60
|
+
try {
|
|
61
|
+
const parsed = new URL(url);
|
|
62
|
+
return (parsed.protocol === 'https:' || parsed.protocol === 'http:') && !parsed.username && !parsed.password && RUIJIE_DOWNLOADS.test(parsed.hostname);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
30
68
|
const text = (value) => (typeof value === 'string' ? value : value === undefined || value === null ? '' : String(value));
|
|
31
69
|
const list = (value) => (Array.isArray(value) ? value.filter((v) => v && typeof v === 'object') : []);
|
|
32
70
|
/** "255.255.255.0" -> 24; undefined for a mask that isn't contiguous ones. */
|
|
@@ -285,6 +323,9 @@ export class RuijieNetworkController {
|
|
|
285
323
|
client;
|
|
286
324
|
vendor = 'ruijie';
|
|
287
325
|
id;
|
|
326
|
+
executors = new WeakMap();
|
|
327
|
+
/** One change at a time. */
|
|
328
|
+
queue = Promise.resolve();
|
|
288
329
|
constructor(client, options = {}) {
|
|
289
330
|
this.client = client;
|
|
290
331
|
this.id = options.id ?? `ruijie:${client.host}`;
|
|
@@ -299,6 +340,7 @@ export class RuijieNetworkController {
|
|
|
299
340
|
groups: { address: 'unsupported', mac: 'unsupported' },
|
|
300
341
|
reservations: 'unsupported',
|
|
301
342
|
mdnsRepeater: 'unsupported',
|
|
343
|
+
firmware: this.firmwareAllowed() ? 'native' : 'unsupported',
|
|
302
344
|
};
|
|
303
345
|
}
|
|
304
346
|
async protectedResources() {
|
|
@@ -318,18 +360,39 @@ export class RuijieNetworkController {
|
|
|
318
360
|
async listPortProfiles() {
|
|
319
361
|
return [];
|
|
320
362
|
}
|
|
321
|
-
|
|
363
|
+
/** The router's identity; a device given must be the router (by MAC, model or "router"). */
|
|
364
|
+
async router(device) {
|
|
322
365
|
const info = await this.client.status('sysinfo');
|
|
323
|
-
const
|
|
366
|
+
const mac = macOrUndefined(info.sys_mac) ?? 'unknown';
|
|
324
367
|
if (device) {
|
|
325
368
|
const wanted = 'mac' in device ? device.mac : 'id' in device ? device.id : device.name;
|
|
326
|
-
const names = [
|
|
327
|
-
if (normalizeMac(wanted) !== normalizeMac(
|
|
328
|
-
throw new NetError('NOT_FOUND', `This Ruijie router (${text(info.model) || 'router'}, ${
|
|
369
|
+
const names = [mac, text(info.model), text(info.product_class), 'router'].map((v) => v.toLowerCase());
|
|
370
|
+
if (normalizeMac(wanted) !== normalizeMac(mac) && !names.includes(wanted.trim().toLowerCase())) {
|
|
371
|
+
throw new NetError('NOT_FOUND', `This Ruijie router (${text(info.model) || 'router'}, ${mac}) is the only device here; '${wanted}' is not it`);
|
|
329
372
|
}
|
|
330
373
|
}
|
|
374
|
+
return { info, mac };
|
|
375
|
+
}
|
|
376
|
+
async listPorts(device) {
|
|
377
|
+
const { mac } = await this.router(device);
|
|
331
378
|
const status = await this.client.status('port_status');
|
|
332
|
-
return toPorts(list(status.List),
|
|
379
|
+
return toPorts(list(status.List), mac);
|
|
380
|
+
}
|
|
381
|
+
async offer() {
|
|
382
|
+
return toOffer(await this.client.system('getVersion', { deviceType: 'self' }));
|
|
383
|
+
}
|
|
384
|
+
async listFirmware() {
|
|
385
|
+
const { info, mac } = await this.router();
|
|
386
|
+
const offer = await this.offer();
|
|
387
|
+
return [
|
|
388
|
+
{
|
|
389
|
+
device: { mac },
|
|
390
|
+
...(text(info.model) ? { model: text(info.product_class) || text(info.model) } : {}),
|
|
391
|
+
current: offer.current || text(info.software_version) || 'unknown',
|
|
392
|
+
...(offer.version ? { available: { version: offer.version, ...(offer.notes ? { notes: offer.notes } : {}), ...(offer.sizeBytes ? { sizeBytes: offer.sizeBytes } : {}) } } : {}),
|
|
393
|
+
upgradable: this.firmwareAllowed() && offer.version !== undefined && isRuijieDownload(offer.url),
|
|
394
|
+
},
|
|
395
|
+
];
|
|
333
396
|
}
|
|
334
397
|
async listRules() {
|
|
335
398
|
const networks = await this.listNetworks();
|
|
@@ -353,11 +416,85 @@ export class RuijieNetworkController {
|
|
|
353
416
|
async getMdnsRepeater() {
|
|
354
417
|
return { enabled: false, networks: [], foreign: { reason: 'This Ruijie router has no mDNS repeater the tools manage.' } };
|
|
355
418
|
}
|
|
356
|
-
|
|
357
|
-
|
|
419
|
+
/** Firmware upgrades are on unless this server switched changes or upgrades off. */
|
|
420
|
+
firmwareAllowed() {
|
|
421
|
+
return !this.client.readOnly && this.client.firmwareUpgrade !== false;
|
|
358
422
|
}
|
|
359
|
-
async
|
|
360
|
-
|
|
423
|
+
async plan(change) {
|
|
424
|
+
if (this.client.readOnly)
|
|
425
|
+
throw new NetError('UNSUPPORTED', 'Changes to the Ruijie router are switched off on this server (RUIJIE_READ_ONLY=true)', { capability: change.kind });
|
|
426
|
+
if (change.kind !== 'firmware')
|
|
427
|
+
throw new NetError('UNSUPPORTED', READ_ONLY, { capability: change.kind });
|
|
428
|
+
if (this.client.firmwareUpgrade === false) {
|
|
429
|
+
throw new NetError('UNSUPPORTED', 'Firmware upgrades on the Ruijie router are switched off on this server (RUIJIE_FIRMWARE_UPGRADE=false)', { capability: 'firmware' });
|
|
430
|
+
}
|
|
431
|
+
const { info, mac } = await this.router(change.device);
|
|
432
|
+
// The basis names the router; without its MAC a dry run could vouch for another one.
|
|
433
|
+
if (mac === 'unknown')
|
|
434
|
+
throw new NetError('INVALID', "The router doesn't report its MAC address, so it can't be told which router a dry run was for; not upgraded");
|
|
435
|
+
const offer = await this.offer();
|
|
436
|
+
if (!offer.version)
|
|
437
|
+
throw new NetError('INVALID', `The router already runs the newest firmware it is offered (${offer.current || 'unknown'})`);
|
|
438
|
+
if (!isRuijieDownload(offer.url)) {
|
|
439
|
+
throw new NetError('UNSUPPORTED', "The offered firmware doesn't come from Ruijie's download server; it is not installed through the tools", { capability: 'firmware' });
|
|
440
|
+
}
|
|
441
|
+
// Every device on the router's LAN loses its connection while it restarts.
|
|
442
|
+
const clients = await this.listClients();
|
|
443
|
+
const model = text(info.product_class) || text(info.model) || 'router';
|
|
444
|
+
const size = offer.sizeBytes ? ` (${Math.round(offer.sizeBytes / 1e6)} MB)` : '';
|
|
445
|
+
const url = offer.url;
|
|
446
|
+
const plan = {
|
|
447
|
+
change,
|
|
448
|
+
vendor: 'ruijie',
|
|
449
|
+
steps: [{ action: 'update', object: 'ruijie.firmware', name: `${model} ${mac}`, detail: `${offer.current} → ${offer.version}` }],
|
|
450
|
+
effects: [
|
|
451
|
+
`The router downloads ${offer.version} from Ruijie${size} and installs it, keeping its settings.`,
|
|
452
|
+
'It restarts: for several minutes every device on its LAN is offline and the router can\'t be reached.',
|
|
453
|
+
...(offer.notes ? [`Release notes: ${offer.notes.slice(0, 600)}`] : []),
|
|
454
|
+
],
|
|
455
|
+
wouldLockOut: clients,
|
|
456
|
+
basis: createHash('sha256')
|
|
457
|
+
.update(JSON.stringify({ change, controller: this.id, router: mac, current: offer.current, version: offer.version, url, md5: offer.md5 ?? null, lockOut: clients.map((c) => c.mac).sort() }))
|
|
458
|
+
.digest('hex')
|
|
459
|
+
.slice(0, 16),
|
|
460
|
+
};
|
|
461
|
+
this.executors.set(plan, async () => {
|
|
462
|
+
try {
|
|
463
|
+
await this.client.system('upgradeConfirm', { path: url, isPersist: true });
|
|
464
|
+
}
|
|
465
|
+
catch (error) {
|
|
466
|
+
// Sent but unanswered: it may be restarting into the upgrade, or the request may not have arrived.
|
|
467
|
+
if (error instanceof RuijieError && error.kind === 'unreachable' && !error.notSent) {
|
|
468
|
+
throw new RuijieError('The router stopped answering while the upgrade request was being sent: it may be restarting into the upgrade, or the request may not have arrived. Check net_listFirmware in about five minutes before trying again.', 'unreachable');
|
|
469
|
+
}
|
|
470
|
+
throw error;
|
|
471
|
+
}
|
|
472
|
+
return {
|
|
473
|
+
applied: true,
|
|
474
|
+
object: { device: { mac }, model, current: offer.current, available: { version: offer.version }, upgradable: true },
|
|
475
|
+
owned: [],
|
|
476
|
+
warnings: ['The router is downloading and installing the firmware and will restart; check net_listFirmware in about five minutes.'],
|
|
477
|
+
};
|
|
478
|
+
});
|
|
479
|
+
return plan;
|
|
480
|
+
}
|
|
481
|
+
async apply(plan, options = {}) {
|
|
482
|
+
const run = this.queue.then(async () => {
|
|
483
|
+
// Planned again right before writing: anything changed since is a CONFLICT.
|
|
484
|
+
const fresh = await this.plan(plan.change);
|
|
485
|
+
if (fresh.basis !== plan.basis)
|
|
486
|
+
throw new NetError('CONFLICT', 'The router changed after this change was planned; nothing was written. Plan it again.');
|
|
487
|
+
// The router restarts whoever is online, so an upgrade always needs allowLockout (and so the dry run's basis).
|
|
488
|
+
if (!options.allowLockout) {
|
|
489
|
+
const who = fresh.wouldLockOut.length ? `cut off ${fresh.wouldLockOut.length} online device(s) and ` : '';
|
|
490
|
+
throw new NetError('LOCKOUT', `The upgrade would ${who}make the router unreachable while it restarts. Nothing was changed; repeat with allowLockout and the dry run's basis if that is intended.`, {
|
|
491
|
+
clients: fresh.wouldLockOut,
|
|
492
|
+
});
|
|
493
|
+
}
|
|
494
|
+
return await this.executors.get(fresh)();
|
|
495
|
+
});
|
|
496
|
+
this.queue = run.catch(() => undefined);
|
|
497
|
+
return await run;
|
|
361
498
|
}
|
|
362
499
|
}
|
|
363
500
|
//# sourceMappingURL=ruijie.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruijie.js","sourceRoot":"","sources":["../../../src/net/adapters/ruijie.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ruijie.js","sourceRoot":"","sources":["../../../src/net/adapters/ruijie.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,WAAW,EAAqB,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EACH,QAAQ,GAmBX,MAAM,aAAa,CAAC;AAIrB,0FAA0F;AAC1F,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;AAChE,MAAM,SAAS,GAAG,6HAA6H,CAAC;AAChJ;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AAYvD,kGAAkG;AAClG,MAAM,UAAU,OAAO,CAAC,MAAW;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAE,MAAM,CAAC,GAAuB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IACpE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5C,OAAO;QACH,OAAO;QACP,OAAO;QACP,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QACjC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3D,CAAC;AACN,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,gBAAgB,CAAC,GAAuB;IACpD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3J,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC1I,MAAM,IAAI,GAAG,CAAC,KAAc,EAAS,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEjI,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,IAAY;IACrC,IAAI,CAAS,CAAC;IACd,IAAI,CAAC;QACD,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,GAAG,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,MAAM,EAAE,CAAC;;YAC5C,MAAM;IACf,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEpG,+FAA+F;AAC/F,MAAM,UAAU,SAAS,CAAC,GAAQ,EAAE,KAAa,EAAE,UAAkB;IACjE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC;QACD,UAAU,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACtC,IAAI,KAA+C,CAAC;IACpD,IAAI,CAAC;QACD,IAAI,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC;YAAE,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;IAC9H,CAAC;IAAC,MAAM,CAAC;QACL,KAAK,GAAG,SAAS,CAAC;IACtB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1C,IAAI,aAAiC,CAAC;IACtC,IAAI,CAAC;QACD,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACL,aAAa,GAAG,SAAS,CAAC;IAC9B,CAAC;IACD,OAAO;QACH,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC7B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5F,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO;QACP,IAAI,EAAE;YACF,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG;YACjC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3E;QACD,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,KAAK;QACf,oFAAoF;QACpF,qDAAqD;QACrD,SAAS,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;KAC9F,CAAC;AACN,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,EAAU,EAAE,QAAmB,EAAuB,EAAE;IACvE,IAAI,CAAS,CAAC;IACd,IAAI,CAAC;QACD,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3E,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAc,EAAsB,EAAE;IAC1D,IAAI,CAAC;QACD,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC,CAAC;AAEF,+HAA+H;AAC/H,MAAM,UAAU,SAAS,CAAC,MAAa,EAAE,GAAU,EAAE,QAAmB;IACpE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACnC,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS;QACjD,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACvC,sDAAsD;QACtD,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,mBAAmB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QACnE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/I,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAc,EAAE,QAAmB;IAC9D,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE;YAAE,SAAS;QAC1B,MAAM,OAAO,GAAG,SAAS,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACxC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gCAAgC,EAAE,EAAE,CAAC,CAAC;IAC9G,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAc,EAAE,SAAiB;IACrD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;QACjD,OAAO;YACH,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE;YAC1B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3D,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,GAAG;YACX,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,wCAAwC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;GAKG;AACH,SAAS,IAAI,CAAC,KAAa,EAAE,SAAiB,EAAE,QAAmB,EAAE,QAAiB;IAClF,IAAI,SAAS,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,qBAAqB,SAAS,GAAG,CAAC;QACjF,IAAI,MAAqD,CAAC;QAC1D,IAAI,CAAC;YACD,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,6BAA6B,SAAS,GAAG,CAAC;QACrD,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACnL,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,OAAO,GACT,KAAK,KAAK,KAAK;YACf,CAAC,KAAK,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,OAAQ,CAAC,CAAC,CAAC,CAAC;YACzF,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,OAAO;YAAE,OAAO,cAAc,SAAS,+BAA+B,KAAK,GAAG,CAAC;QACpF,OAAO,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7E,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,qBAAqB,CAAC;IAC9G,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IACrD,IAAI,OAAO;QAAE,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtD,OAAO,kBAAkB,KAAK,GAAG,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAQ,EAAE,KAAa,EAAE,QAAmB;IAC/D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9C,MAAM,MAAM,GAAmB,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACvE,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5G,IAAI,IAAI,GAAe,EAAE,CAAC;IAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,GAAG;YAAE,IAAI,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;;YAC7B,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC3D,wFAAwF;QACxF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,4CAA4C,KAAK,GAAG,CAAC,CAAC;IACxH,CAAC;SAAM,CAAC;QACJ,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YACtC,IAAI,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,EAAE,GAAe,EAAE,CAAC;IACxB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClE,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;QACtC,EAAE,GAAG,CAAC,CAAC;IACZ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,IAAI,QAAQ,GAAqB,KAAK,CAAC;IACvC,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM;QAAE,QAAQ,GAAG,KAAK,CAAC;SACxE,IAAI,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;SAClG,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClH,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,gGAAgG;QAChG,IAAI,KAAK,KAAK,QAAQ;YAAE,QAAQ,GAAG,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;aAClE,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,yBAAyB,KAAK,4CAA4C,CAAC,CAAC;;YACjI,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACpD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACvG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC7J,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9F,6EAA6E;IAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;IACrC,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,CAAC,IAAI,CAAC,gCAAgC,KAAK,GAAG,CAAC,CAAC;IAC1E,OAAO;QACH,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,QAAQ,KAAK,GAAG,CAAC,EAAE;QAC7D,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,KAAK,GAAG,CAAC,EAAE;QAC/C,MAAM;QACN,IAAI;QACJ,EAAE;QACF,QAAQ;QACR,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG;QACjC,QAAQ,EAAE,KAAK,GAAG,CAAC;QACnB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,2BAA2B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvG,CAAC;AACN,CAAC;AAOD,MAAM,OAAO,uBAAuB;IAQX;IAPZ,MAAM,GAAG,QAAiB,CAAC;IAC3B,EAAE,CAAS;IACH,SAAS,GAAG,IAAI,OAAO,EAAoC,CAAC;IAC7E,4BAA4B;IACpB,KAAK,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEpD,YACqB,MAAoB,EACrC,UAAgC,EAAE;QADjB,WAAM,GAAN,MAAM,CAAc;QAGrC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,IAAI,UAAU,MAAM,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,YAAY;QACd,OAAO;YACH,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE;YAC/G,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE;YACrI,KAAK,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE;YACzD,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE;YACpK,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE;YACtD,YAAY,EAAE,aAAa;YAC3B,YAAY,EAAE,aAAa;YAC3B,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa;SAC9D,CAAC;IACN,CAAC;IAED,KAAK,CAAC,kBAAkB;QACpB,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACxE,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAClE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACzI,CAAC;IAED,KAAK,CAAC,YAAY;QACd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAM,SAAS,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;aAClB,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aACpD,MAAM,CAAC,CAAC,CAAC,EAAgB,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,QAAQ;QACV,OAAO,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,gBAAgB;QAClB,OAAO,EAAE,CAAC;IACd,CAAC;IAED,4FAA4F;IACpF,KAAK,CAAC,MAAM,CAAC,MAA0B;QAC3C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAM,SAAS,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC;QACtD,IAAI,MAAM,EAAE,CAAC;YACT,MAAM,MAAM,GAAG,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;YACvF,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACtG,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC7F,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,uBAAuB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,KAAK,GAAG,+BAA+B,MAAM,aAAa,CAAC,CAAC;YACnJ,CAAC;QACL,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAA0B;QACtC,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAM,aAAa,CAAC,CAAC;QAC5D,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,KAAK;QACf,OAAO,OAAO,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAM,YAAY,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,YAAY;QACd,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,OAAO;YACH;gBACI,MAAM,EAAE,EAAE,GAAG,EAAE;gBACf,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpF,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,SAAS;gBAClE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/K,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC;aACnG;SACJ,CAAC;IACN,CAAC;IAED,KAAK,CAAC,SAAS;QACX,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAM,aAAa,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,UAAU;QACZ,OAAO,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,gBAAgB;QAClB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAM,aAAa,CAAC,CAAC;QAC5D,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,WAAW;QACb,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAM,YAAY,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAM,KAAK,CAAC,CAAC;QACjD,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,CAAC,eAAe;QACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,2DAA2D,EAAE,EAAE,CAAC;IAC9H,CAAC;IAED,oFAAoF;IAC5E,eAAe;QACnB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,KAAK,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAc;QACrB,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,sFAAsF,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACjL,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1G,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,KAAK,KAAK,EAAE,CAAC;YACxC,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,wGAAwG,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5K,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvD,qFAAqF;QACrF,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,6GAA6G,CAAC,CAAC;QACpK,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,8DAA8D,KAAK,CAAC,OAAO,IAAI,SAAS,GAAG,CAAC,CAAC;QAC/I,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,QAAQ,CAAC,aAAa,EAAE,wGAAwG,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5K,CAAC;QACD,2EAA2E;QAC3E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC;QACvE,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,MAAM,GAAG,GAAG,KAAK,CAAC,GAAI,CAAC;QACvB,MAAM,IAAI,GAAS;YACf,MAAM;YACN,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAChI,OAAO,EAAE;gBACL,wBAAwB,KAAK,CAAC,OAAO,eAAe,IAAI,yCAAyC;gBACjG,uGAAuG;gBACvG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1E;YACD,YAAY,EAAE,OAAO;YACrB,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC;iBACtB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;iBAC5L,MAAM,CAAC,KAAK,CAAC;iBACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACpB,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YAChC,IAAI,CAAC;gBACD,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/E,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,mGAAmG;gBACnG,IAAI,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oBACjF,MAAM,IAAI,WAAW,CACjB,sNAAsN,EACtN,aAAa,CAChB,CAAC;gBACN,CAAC;gBACD,MAAM,KAAK,CAAC;YAChB,CAAC;YACD,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;gBACpH,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,CAAC,uHAAuH,CAAC;aACtI,CAAC;QACN,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAU,EAAE,UAAsC,EAAE;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACnC,4EAA4E;YAC5E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,uFAAuF,CAAC,CAAC;YACxJ,+GAA+G;YAC/G,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,YAAY,CAAC,MAAM,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1G,MAAM,IAAI,QAAQ,CAAC,SAAS,EAAE,qBAAqB,GAAG,2IAA2I,EAAE;oBAC/L,OAAO,EAAE,KAAK,CAAC,YAAY;iBAC9B,CAAC,CAAC;YACP,CAAC;YACD,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAE,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,MAAM,GAAG,CAAC;IACrB,CAAC;CACJ"}
|
package/dist/net/model.d.ts
CHANGED
|
@@ -177,6 +177,23 @@ export interface MdnsRepeater {
|
|
|
177
177
|
reason: string;
|
|
178
178
|
};
|
|
179
179
|
}
|
|
180
|
+
/** A network device's firmware: what runs now and, when the vendor tells, what is offered. */
|
|
181
|
+
export interface Firmware {
|
|
182
|
+
device: Ref | {
|
|
183
|
+
mac: Mac;
|
|
184
|
+
};
|
|
185
|
+
name?: string;
|
|
186
|
+
model?: string;
|
|
187
|
+
current: string;
|
|
188
|
+
/** A newer version the vendor offers; absent when there is none or the vendor doesn't say. */
|
|
189
|
+
available?: {
|
|
190
|
+
version: string;
|
|
191
|
+
notes?: string;
|
|
192
|
+
sizeBytes?: number;
|
|
193
|
+
};
|
|
194
|
+
/** Whether `available` can be installed through the tools (net_upgradeFirmware). */
|
|
195
|
+
upgradable: boolean;
|
|
196
|
+
}
|
|
180
197
|
export interface Group {
|
|
181
198
|
id: string;
|
|
182
199
|
name: string;
|
|
@@ -269,6 +286,8 @@ export interface Capabilities {
|
|
|
269
286
|
};
|
|
270
287
|
reservations: Support;
|
|
271
288
|
mdnsRepeater: Support;
|
|
289
|
+
/** Installing the firmware the vendor offers (net_upgradeFirmware). */
|
|
290
|
+
firmware: Support;
|
|
272
291
|
}
|
|
273
292
|
/** Things no change may cut off: where the controller, this server and their uplinks live. */
|
|
274
293
|
export interface ProtectedResources {
|
|
@@ -360,6 +379,14 @@ export type Change = {
|
|
|
360
379
|
kind: 'mdnsRepeater';
|
|
361
380
|
enabled: boolean;
|
|
362
381
|
networks?: Ref[];
|
|
382
|
+
}
|
|
383
|
+
/** Installs the version the vendor offers for one device (it restarts). */
|
|
384
|
+
| {
|
|
385
|
+
op: 'upgrade';
|
|
386
|
+
kind: 'firmware';
|
|
387
|
+
device?: Ref | {
|
|
388
|
+
mac: Mac;
|
|
389
|
+
};
|
|
363
390
|
};
|
|
364
391
|
/** One vendor-level step of a plan, in the order it will run. Never contains secrets. */
|
|
365
392
|
export interface Step {
|
|
@@ -383,7 +410,7 @@ export interface Plan {
|
|
|
383
410
|
export interface ApplyResult {
|
|
384
411
|
applied: true;
|
|
385
412
|
/** The neutral object after the change (redacted), when there is one. */
|
|
386
|
-
object?: Network | Wifi | PortProfile | Port | Rule | Group | Reservation | MdnsRepeater;
|
|
413
|
+
object?: Network | Wifi | PortProfile | Port | Rule | Group | Reservation | MdnsRepeater | Firmware;
|
|
387
414
|
/** Vendor objects created for this change; tagged so delete() removes them all again. */
|
|
388
415
|
owned: Array<{
|
|
389
416
|
object: string;
|
|
@@ -432,6 +459,7 @@ export interface NetworkController {
|
|
|
432
459
|
listReservations(): Promise<Reservation[]>;
|
|
433
460
|
listClients(): Promise<Client[]>;
|
|
434
461
|
getMdnsRepeater(): Promise<MdnsRepeater>;
|
|
462
|
+
listFirmware(): Promise<Firmware[]>;
|
|
435
463
|
/** Read-only: validates, resolves refs, checks protection, in-use and lock-out. Throws NetError. */
|
|
436
464
|
plan(change: Change): Promise<Plan>;
|
|
437
465
|
/** Runs a plan; re-checks `basis` first (CONFLICT) and lock-out (LOCKOUT unless allowLockout). */
|
package/dist/net/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/net/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAcH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/net/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAcH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AA0T/E,MAAM,OAAO,QAAS,SAAQ,KAAK;IAElB;IAEA;IAHb,YACa,IAAkB,EAC3B,OAAe,EACN,UAAyE,EAAE;QAEpF,KAAK,CAAC,OAAO,CAAC,CAAC;QAJN,SAAI,GAAJ,IAAI,CAAc;QAElB,YAAO,GAAP,OAAO,CAAoE;QAGpF,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IAC3B,CAAC;CACJ"}
|
|
@@ -23,13 +23,23 @@ export interface RuijieClientConfig {
|
|
|
23
23
|
password: string;
|
|
24
24
|
/** false: accept the router's self-signed certificate (this client only). */
|
|
25
25
|
strictSsl?: boolean;
|
|
26
|
+
/** The router certificate's SHA-256 fingerprint: exactly that certificate is trusted (https only; replaces strictSsl). */
|
|
27
|
+
certSha256?: string;
|
|
28
|
+
/** true: every change through the tools is refused (RUIJIE_READ_ONLY). */
|
|
29
|
+
readOnly?: boolean;
|
|
30
|
+
/** false: firmware upgrades are refused (RUIJIE_FIRMWARE_UPGRADE). */
|
|
31
|
+
firmwareUpgrade?: boolean;
|
|
26
32
|
/** Milliseconds per request (default 15000). */
|
|
27
33
|
timeout?: number;
|
|
28
34
|
}
|
|
29
35
|
/** A Ruijie call that failed: `refused` = the login was refused, `unknownModule` = the router has no such module. */
|
|
30
36
|
export declare class RuijieError extends Error {
|
|
31
37
|
readonly kind: 'refused' | 'unreachable' | 'router' | 'unknownModule' | 'disabled';
|
|
32
|
-
|
|
38
|
+
/** For an unreachable router: true when the request certainly never reached it (no connection, or no session). */
|
|
39
|
+
readonly notSent: boolean;
|
|
40
|
+
constructor(message: string, kind?: 'refused' | 'unreachable' | 'router' | 'unknownModule' | 'disabled',
|
|
41
|
+
/** For an unreachable router: true when the request certainly never reached it (no connection, or no session). */
|
|
42
|
+
notSent?: boolean);
|
|
33
43
|
}
|
|
34
44
|
export declare class RuijieClient {
|
|
35
45
|
/** Host of the router's base URL (the router's own address, kept out of harm's way). */
|
|
@@ -38,6 +48,10 @@ export declare class RuijieClient {
|
|
|
38
48
|
private readonly password;
|
|
39
49
|
private readonly timeout;
|
|
40
50
|
private readonly dispatcher?;
|
|
51
|
+
/** Changes through the tools switched off (RUIJIE_READ_ONLY). */
|
|
52
|
+
readonly readOnly: boolean;
|
|
53
|
+
/** Firmware upgrades allowed (RUIJIE_FIRMWARE_UPGRADE). */
|
|
54
|
+
readonly firmwareUpgrade: boolean;
|
|
41
55
|
private session?;
|
|
42
56
|
private loggingIn?;
|
|
43
57
|
private disabledMessage?;
|
|
@@ -54,7 +68,15 @@ export declare class RuijieClient {
|
|
|
54
68
|
/** Turns every call into a refusal with this message (e.g. after a refused login). */
|
|
55
69
|
disable(message: string): void;
|
|
56
70
|
get disabled(): string | undefined;
|
|
71
|
+
/** A module call on /api/cmd: devConfig.* (settings and changes) or devSta.* (live state). */
|
|
57
72
|
call<T>(method: string, module: string, data?: unknown): Promise<T>;
|
|
73
|
+
/**
|
|
74
|
+
* A system call on /api/system, e.g. getVersion (the running and the offered firmware) or
|
|
75
|
+
* upgradeConfirm (install a firmware and restart).
|
|
76
|
+
*/
|
|
77
|
+
system<T>(method: string, params?: Record<string, unknown>): Promise<T>;
|
|
78
|
+
/** One call with the session; a session the router no longer accepts is renewed once. */
|
|
79
|
+
private request;
|
|
58
80
|
private ensureSession;
|
|
59
81
|
private login;
|
|
60
82
|
private post;
|
|
@@ -17,17 +17,27 @@
|
|
|
17
17
|
* again. The session id is never logged or put in an error message.
|
|
18
18
|
*/
|
|
19
19
|
import { logger } from '../utils/logger.js';
|
|
20
|
-
import { createTlsDispatcher, tlsAwareFetch } from '../utils/tlsDispatcher.js';
|
|
20
|
+
import { createPinnedDispatcher, createTlsDispatcher, PIN_MISMATCH, tlsAwareFetch } from '../utils/tlsDispatcher.js';
|
|
21
21
|
import { checksumHeaders, encryptPassword } from './crypto.js';
|
|
22
22
|
/** A Ruijie call that failed: `refused` = the login was refused, `unknownModule` = the router has no such module. */
|
|
23
23
|
export class RuijieError extends Error {
|
|
24
24
|
kind;
|
|
25
|
-
|
|
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) {
|
|
26
29
|
super(message);
|
|
27
30
|
this.kind = kind;
|
|
31
|
+
this.notSent = notSent;
|
|
28
32
|
this.name = 'RuijieError';
|
|
29
33
|
}
|
|
30
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
|
+
}
|
|
31
41
|
/** Answer of a call whose session was not accepted. */
|
|
32
42
|
const AUTH_NOT_PASSED = 2;
|
|
33
43
|
export class RuijieClient {
|
|
@@ -37,6 +47,10 @@ export class RuijieClient {
|
|
|
37
47
|
password;
|
|
38
48
|
timeout;
|
|
39
49
|
dispatcher;
|
|
50
|
+
/** Changes through the tools switched off (RUIJIE_READ_ONLY). */
|
|
51
|
+
readOnly;
|
|
52
|
+
/** Firmware upgrades allowed (RUIJIE_FIRMWARE_UPGRADE). */
|
|
53
|
+
firmwareUpgrade;
|
|
40
54
|
session;
|
|
41
55
|
loggingIn;
|
|
42
56
|
disabledMessage;
|
|
@@ -46,11 +60,20 @@ export class RuijieClient {
|
|
|
46
60
|
this.host = url.hostname;
|
|
47
61
|
this.password = config.password;
|
|
48
62
|
this.timeout = config.timeout ?? 15_000;
|
|
49
|
-
this.
|
|
63
|
+
this.readOnly = config.readOnly ?? false;
|
|
64
|
+
this.firmwareUpgrade = config.firmwareUpgrade ?? true;
|
|
65
|
+
if (config.certSha256 !== undefined) {
|
|
66
|
+
if (url.protocol !== 'https:')
|
|
67
|
+
throw new Error('A certificate pin (RUIJIE_CERT_SHA256) needs an https:// router address');
|
|
68
|
+
this.dispatcher = createPinnedDispatcher(config.certSha256);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.dispatcher = createTlsDispatcher(config.strictSsl, config.baseUrl);
|
|
72
|
+
}
|
|
50
73
|
if (url.protocol === 'http:') {
|
|
51
74
|
// The login page's password encryption uses a key shipped in the page itself: over plain
|
|
52
75
|
// HTTP anyone watching the traffic can read the password. Only HTTPS protects it.
|
|
53
|
-
logger.warn('RUIJIE_BASE_URL uses plain http: the router password can be read by anyone watching the traffic. Use https://
|
|
76
|
+
logger.warn('RUIJIE_BASE_URL uses plain http: the router password can be read by anyone watching the traffic. Use https:// with RUIJIE_CERT_SHA256 (the self-signed certificate of the router, pinned) unless the connection already runs inside an encrypted tunnel.');
|
|
54
77
|
}
|
|
55
78
|
}
|
|
56
79
|
/** Settings: devConfig.get. */
|
|
@@ -73,11 +96,32 @@ export class RuijieClient {
|
|
|
73
96
|
get disabled() {
|
|
74
97
|
return this.disabledMessage;
|
|
75
98
|
}
|
|
99
|
+
/** A module call on /api/cmd: devConfig.* (settings and changes) or devSta.* (live state). */
|
|
76
100
|
async call(method, module, data) {
|
|
101
|
+
return await this.request('cmd', { method, params: data === undefined ? { module } : { module, data } }, `${method} ${module}`, !method.endsWith('.get'));
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* A system call on /api/system, e.g. getVersion (the running and the offered firmware) or
|
|
105
|
+
* upgradeConfirm (install a firmware and restart).
|
|
106
|
+
*/
|
|
107
|
+
async system(method, params) {
|
|
108
|
+
return await this.request('system', { method, params: params ?? {} }, `system ${method}`, method !== 'getVersion');
|
|
109
|
+
}
|
|
110
|
+
/** One call with the session; a session the router no longer accepts is renewed once. */
|
|
111
|
+
async request(endpoint, payload, label, isChange) {
|
|
77
112
|
for (let attempt = 0;; attempt++) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
113
|
+
let session;
|
|
114
|
+
try {
|
|
115
|
+
session = await this.ensureSession();
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
// No session, so this request was never sent (after a code 2 the router refused the first try).
|
|
119
|
+
if (error instanceof RuijieError && error.kind === 'unreachable')
|
|
120
|
+
throw new RuijieError(error.message, 'unreachable', true);
|
|
121
|
+
throw error;
|
|
122
|
+
}
|
|
123
|
+
const body = JSON.stringify(payload);
|
|
124
|
+
const answer = await this.post(`/cgi-bin/luci/api/${endpoint}?auth=${encodeURIComponent(session.sid)}`, body, session.cookie);
|
|
81
125
|
if (answer.code === AUTH_NOT_PASSED && attempt === 0) {
|
|
82
126
|
// The session expired (or the router restarted): log in once more, repeat once.
|
|
83
127
|
if (this.session === session)
|
|
@@ -85,22 +129,22 @@ export class RuijieClient {
|
|
|
85
129
|
continue;
|
|
86
130
|
}
|
|
87
131
|
if (answer.code !== 0)
|
|
88
|
-
throw new RuijieError(`The Ruijie router refused ${
|
|
132
|
+
throw new RuijieError(`The Ruijie router refused ${label} (${codeOf(answer.code)})`);
|
|
89
133
|
let result = parseData(answer.data);
|
|
90
134
|
// Some modules answer with a second envelope inside data.
|
|
91
135
|
if (isEnvelope(result)) {
|
|
92
136
|
if (result.code !== 0 && result.code !== '0')
|
|
93
|
-
throw new RuijieError(`The Ruijie router refused ${
|
|
137
|
+
throw new RuijieError(`The Ruijie router refused ${label} (${codeOf(result.code)})`);
|
|
94
138
|
result = parseData(result.data);
|
|
95
139
|
}
|
|
96
140
|
if (result && typeof result === 'object' && 'rcode' in result && 'rmsg' in result && 'modelNam' in result) {
|
|
97
|
-
throw new RuijieError(`The Ruijie router has no
|
|
141
|
+
throw new RuijieError(`The Ruijie router has no ${label}`, 'unknownModule');
|
|
98
142
|
}
|
|
99
143
|
const rcode = result && typeof result === 'object' ? result.rcode : undefined;
|
|
100
|
-
if (
|
|
101
|
-
throw new RuijieError(`The Ruijie router refused ${
|
|
144
|
+
if (isChange && rcode !== undefined && rcode !== '00000000') {
|
|
145
|
+
throw new RuijieError(`The Ruijie router refused ${label} (r${codeOf(rcode)})`);
|
|
102
146
|
}
|
|
103
|
-
logger.debug('Ruijie call', {
|
|
147
|
+
logger.debug('Ruijie call', { call: label });
|
|
104
148
|
return result;
|
|
105
149
|
}
|
|
106
150
|
}
|
|
@@ -155,14 +199,29 @@ export class RuijieClient {
|
|
|
155
199
|
}
|
|
156
200
|
catch (error) {
|
|
157
201
|
// Never the URL: it carries the session id.
|
|
202
|
+
if ((error instanceof Error ? error.cause?.code : undefined) === PIN_MISMATCH) {
|
|
203
|
+
throw new RuijieError("The Ruijie router's certificate doesn't match RUIJIE_CERT_SHA256; nothing was sent to it", 'unreachable', true);
|
|
204
|
+
}
|
|
205
|
+
const reason = error instanceof Error && error.name === 'TimeoutError' ? 'timed out' : 'not reachable';
|
|
206
|
+
throw new RuijieError(`The Ruijie router is ${reason}`, 'unreachable', failedBeforeSending(error));
|
|
207
|
+
}
|
|
208
|
+
let raw;
|
|
209
|
+
try {
|
|
210
|
+
raw = await response.text();
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
// The answer broke off (e.g. the router restarted while sending it): the request did arrive.
|
|
158
214
|
const reason = error instanceof Error && error.name === 'TimeoutError' ? 'timed out' : 'not reachable';
|
|
159
215
|
throw new RuijieError(`The Ruijie router is ${reason}`, 'unreachable');
|
|
160
216
|
}
|
|
161
217
|
let answer;
|
|
162
218
|
try {
|
|
163
|
-
answer =
|
|
219
|
+
answer = JSON.parse(raw);
|
|
164
220
|
}
|
|
165
221
|
catch {
|
|
222
|
+
// A success status with a broken body is a cut-off answer, not a refusal.
|
|
223
|
+
if (response.ok)
|
|
224
|
+
throw new RuijieError('The Ruijie router\'s answer was cut off', 'unreachable');
|
|
166
225
|
throw new RuijieError(`The Ruijie router answered HTTP ${response.status} without JSON`);
|
|
167
226
|
}
|
|
168
227
|
const cookies = (response.headers.getSetCookie?.() ?? []).map((c) => c.split(';')[0]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ruijieClient/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAgC,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ruijieClient/index.ts"],"names":[],"mappings":"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"}
|