ciscollm-cli 1.3.3 → 1.3.4

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 (72) hide show
  1. package/README.md +19 -25
  2. package/dist/cli/commands/monitorCommand.js +17 -0
  3. package/dist/cli/commands/monitorCommand.js.map +1 -1
  4. package/dist/cli/commands/runCommand.d.ts +1 -3
  5. package/dist/cli/commands/runCommand.js +126 -452
  6. package/dist/cli/commands/runCommand.js.map +1 -1
  7. package/dist/cli/ui/interactiveWizard.d.ts +1 -0
  8. package/dist/cli/ui/interactiveWizard.js +429 -0
  9. package/dist/cli/ui/interactiveWizard.js.map +1 -0
  10. package/dist/cli/ui/ui.js +0 -5
  11. package/dist/cli/ui/ui.js.map +1 -1
  12. package/dist/core/agent/AgentLoop.d.ts +3 -0
  13. package/dist/core/agent/AgentLoop.js +69 -14
  14. package/dist/core/agent/AgentLoop.js.map +1 -1
  15. package/dist/core/agent/DigitalTwin.d.ts +10 -0
  16. package/dist/core/agent/DigitalTwin.js +40 -0
  17. package/dist/core/agent/DigitalTwin.js.map +1 -0
  18. package/dist/core/agent/IntentTranslator.d.ts +6 -0
  19. package/dist/core/agent/IntentTranslator.js +37 -0
  20. package/dist/core/agent/IntentTranslator.js.map +1 -0
  21. package/dist/core/agent/MemoryManager.d.ts +14 -0
  22. package/dist/core/agent/MemoryManager.js +89 -0
  23. package/dist/core/agent/MemoryManager.js.map +1 -0
  24. package/dist/core/agent/MultiAgentCoordinator.js +0 -2
  25. package/dist/core/agent/MultiAgentCoordinator.js.map +1 -1
  26. package/dist/core/agent/NetworkPlanner.d.ts +8 -0
  27. package/dist/core/agent/NetworkPlanner.js +78 -0
  28. package/dist/core/agent/NetworkPlanner.js.map +1 -0
  29. package/dist/core/agent/PromptEngine.d.ts +1 -1
  30. package/dist/core/agent/PromptEngine.js +10 -5
  31. package/dist/core/agent/PromptEngine.js.map +1 -1
  32. package/dist/core/plugins/PluginManager.d.ts +17 -0
  33. package/dist/core/plugins/PluginManager.js +106 -0
  34. package/dist/core/plugins/PluginManager.js.map +1 -0
  35. package/dist/core/rollback/TransactionManager.js +0 -5
  36. package/dist/core/rollback/TransactionManager.js.map +1 -1
  37. package/dist/index.js +26 -61
  38. package/dist/index.js.map +1 -1
  39. package/dist/infrastructure/llm/LLMClient.d.ts +1 -0
  40. package/dist/infrastructure/llm/LLMClient.js +32 -7
  41. package/dist/infrastructure/llm/LLMClient.js.map +1 -1
  42. package/dist/infrastructure/protocols/SshSession.d.ts +1 -0
  43. package/dist/infrastructure/protocols/SshSession.js +5 -4
  44. package/dist/infrastructure/protocols/SshSession.js.map +1 -1
  45. package/dist/infrastructure/protocols/TelnetSession.d.ts +1 -0
  46. package/dist/infrastructure/protocols/TelnetSession.js +5 -1
  47. package/dist/infrastructure/protocols/TelnetSession.js.map +1 -1
  48. package/dist/server/shell-simulator.js +1 -2
  49. package/dist/server/shell-simulator.js.map +1 -1
  50. package/dist/server/ssh.js +2 -2
  51. package/dist/server/ssh.js.map +1 -1
  52. package/dist/server/telnet.js +2 -2
  53. package/dist/server/telnet.js.map +1 -1
  54. package/dist/shared/bootBanner.d.ts +1 -0
  55. package/dist/shared/bootBanner.js +93 -0
  56. package/dist/shared/bootBanner.js.map +1 -0
  57. package/package.json +1 -1
  58. package/dist/cli/commands/dashboardCommand.d.ts +0 -1
  59. package/dist/cli/commands/dashboardCommand.js +0 -16
  60. package/dist/cli/commands/dashboardCommand.js.map +0 -1
  61. package/dist/cli/commands/shellCommand.d.ts +0 -1
  62. package/dist/cli/commands/shellCommand.js +0 -44
  63. package/dist/cli/commands/shellCommand.js.map +0 -1
  64. package/dist/infrastructure/protocols/CmlSession.d.ts +0 -26
  65. package/dist/infrastructure/protocols/CmlSession.js +0 -448
  66. package/dist/infrastructure/protocols/CmlSession.js.map +0 -1
  67. package/dist/infrastructure/protocols/NetconfSession.d.ts +0 -74
  68. package/dist/infrastructure/protocols/NetconfSession.js +0 -553
  69. package/dist/infrastructure/protocols/NetconfSession.js.map +0 -1
  70. package/dist/server/dashboard.d.ts +0 -3
  71. package/dist/server/dashboard.js +0 -1149
  72. package/dist/server/dashboard.js.map +0 -1
@@ -1,448 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.CmlSession = void 0;
40
- const BaseSession_1 = require("./BaseSession");
41
- const chalk_1 = __importDefault(require("chalk"));
42
- const https = __importStar(require("https"));
43
- const net = __importStar(require("net"));
44
- const PREFERRED_NODE_DEFS = ['iosv', 'iol-xe', 'csr1000v', 'cat8000v', 'iosxrv9000'];
45
- const NODE_BOOT_TIMEOUT_MS = 5 * 60 * 1000;
46
- const NODE_BOOT_POLL_MS = 8000;
47
- class CmlSession extends BaseSession_1.BaseSession {
48
- apiUrl;
49
- username;
50
- password;
51
- token = null;
52
- activeLabId = null;
53
- ownedLab = false;
54
- activeNode = null;
55
- sshClient = null;
56
- sshStream = null;
57
- constructor(apiUrl, username, password) {
58
- super();
59
- this.apiUrl = apiUrl;
60
- this.username = username;
61
- this.password = password;
62
- this.state = {
63
- currentMode: 'PRIVILEGED_EXEC',
64
- hostname: 'cml-sandbox',
65
- prompt: 'cml-sandbox#'
66
- };
67
- }
68
- async request(method, path, body) {
69
- const base = this.apiUrl.replace(/\/$/, '');
70
- const url = new URL(`${base}/api/v0${path}`);
71
- return new Promise((resolve, reject) => {
72
- const payload = body ? JSON.stringify(body) : undefined;
73
- const headers = {
74
- 'Content-Type': 'application/json',
75
- 'Accept': 'application/json'
76
- };
77
- if (this.token)
78
- headers['Authorization'] = `Bearer ${this.token}`;
79
- if (payload)
80
- headers['Content-Length'] = Buffer.byteLength(payload).toString();
81
- const opts = {
82
- hostname: url.hostname,
83
- port: Number(url.port) || 443,
84
- path: url.pathname + url.search,
85
- method,
86
- headers,
87
- rejectUnauthorized: true
88
- };
89
- const req = https.request(opts, (res) => {
90
- let data = '';
91
- res.on('data', (c) => (data += c));
92
- res.on('end', () => {
93
- if (res.statusCode && res.statusCode >= 400) {
94
- return reject(new Error(`CML API Error ${res.statusCode} on ${method} ${path}: ${data}`));
95
- }
96
- try {
97
- resolve(data ? JSON.parse(data) : {});
98
- }
99
- catch {
100
- resolve(data);
101
- }
102
- });
103
- });
104
- req.on('error', (e) => reject(e));
105
- if (payload)
106
- req.write(payload);
107
- req.end();
108
- });
109
- }
110
- async connect() {
111
- const base = this.apiUrl.replace(/\/$/, '');
112
- console.log(chalk_1.default.cyan(`❯ Connecting to Cisco Modeling Labs at ${chalk_1.default.bold(base)}...`));
113
- const raw = await this.request('POST', '/authenticate', {
114
- username: this.username || 'admin',
115
- password: this.password || ''
116
- });
117
- this.token = typeof raw === 'string' ? raw : raw.token || String(raw);
118
- console.log(chalk_1.default.green(`[+] Authenticated as ${chalk_1.default.bold(this.username || 'admin')}`));
119
- console.log(chalk_1.default.cyan(`❯ Scanning CML for running labs and nodes...`));
120
- const labIds = await this.request('GET', '/labs');
121
- const runningNode = await this.findBestRunningNode(labIds || []);
122
- if (runningNode) {
123
- this.activeNode = runningNode;
124
- this.activeLabId = runningNode.labId;
125
- this.ownedLab = false;
126
- this.state.hostname = runningNode.label;
127
- this.state.prompt = `${runningNode.label}#`;
128
- console.log(chalk_1.default.green(`[+] Found running node: ${chalk_1.default.bold(runningNode.label)} ` +
129
- `[${runningNode.nodeDefinition}] in lab "${runningNode.labTitle}"`));
130
- if (runningNode.mgmtIp) {
131
- try {
132
- await this.openSsh(runningNode.mgmtIp, runningNode.mgmtPort || 22);
133
- console.log(chalk_1.default.green(`[+] SSH reachable at ${runningNode.label} (${runningNode.mgmtIp})`));
134
- }
135
- catch {
136
- this.sshStream = null;
137
- }
138
- }
139
- }
140
- else {
141
- const node = await this.provisionNode();
142
- this.activeNode = node;
143
- }
144
- }
145
- async provisionNode() {
146
- console.log(chalk_1.default.cyan(`❯ No running nodes found — provisioning a new Cisco node on CML...`));
147
- const availDefs = await this.request('GET', '/simplified_node_definitions').catch(() => []);
148
- const defIds = (availDefs || []).map((d) => d.id);
149
- const chosenDef = PREFERRED_NODE_DEFS.find(d => defIds.includes(d)) || defIds[0];
150
- if (!chosenDef) {
151
- throw new Error('No node definitions available on this CML server.');
152
- }
153
- console.log(chalk_1.default.cyan(`❯ Creating sandbox lab with node type: ${chalk_1.default.bold(chosenDef)}...`));
154
- const labRes = await this.request('POST', '/labs', {
155
- title: `ciscollm-${chosenDef}-${Date.now()}`,
156
- description: 'Auto-provisioned by ciscollm-cli.'
157
- });
158
- this.activeLabId = labRes.id;
159
- this.ownedLab = true;
160
- const nodeRes = await this.request('POST', `/labs/${this.activeLabId}/nodes`, {
161
- label: `${chosenDef}-0`,
162
- node_definition: chosenDef,
163
- x: 0,
164
- y: 0
165
- });
166
- const nodeId = nodeRes.id;
167
- console.log(chalk_1.default.cyan(`❯ Starting lab ${this.activeLabId}...`));
168
- await this.request('PUT', `/labs/${this.activeLabId}/start`);
169
- const node = await this.waitForNodeBoot(this.activeLabId, nodeId, chosenDef);
170
- console.log(chalk_1.default.green(`[+] Node ${chalk_1.default.bold(node.label)} is ${chalk_1.default.bold(node.state)} and ready.`));
171
- return node;
172
- }
173
- async waitForNodeBoot(labId, nodeId, defId) {
174
- const deadline = Date.now() + NODE_BOOT_TIMEOUT_MS;
175
- let dots = 0;
176
- process.stdout.write(chalk_1.default.cyan(`❯ Waiting for node to boot`));
177
- while (Date.now() < deadline) {
178
- const node = await this.request('GET', `/labs/${labId}/nodes/${nodeId}`);
179
- const state = node.state || '';
180
- if (state === 'BOOTED') {
181
- process.stdout.write(`\n`);
182
- const lab = await this.request('GET', `/labs/${labId}`);
183
- const cmlNode = {
184
- id: nodeId,
185
- label: node.label || defId,
186
- state,
187
- nodeDefinition: defId,
188
- labId,
189
- labTitle: lab.title || labId
190
- };
191
- this.state.hostname = cmlNode.label;
192
- this.state.prompt = `${cmlNode.label}#`;
193
- return cmlNode;
194
- }
195
- dots++;
196
- process.stdout.write(chalk_1.default.dim('.'));
197
- await new Promise(r => setTimeout(r, NODE_BOOT_POLL_MS));
198
- }
199
- process.stdout.write(`\n`);
200
- throw new Error(`Node did not reach BOOTED state within ${NODE_BOOT_TIMEOUT_MS / 60000} minutes.`);
201
- }
202
- async findBestRunningNode(labIds) {
203
- const candidates = [];
204
- for (const labId of labIds) {
205
- try {
206
- const lab = await this.request('GET', `/labs/${labId}`);
207
- if (!lab || lab.state === 'STOPPED')
208
- continue;
209
- const nodeIds = await this.request('GET', `/labs/${labId}/nodes`);
210
- if (!nodeIds || nodeIds.length === 0)
211
- continue;
212
- for (const nodeId of nodeIds) {
213
- try {
214
- const node = await this.request('GET', `/labs/${labId}/nodes/${nodeId}`);
215
- if (!node || node.state === 'STOPPED' || node.state === 'DEFINED_ON_CORE') {
216
- continue;
217
- }
218
- const candidate = {
219
- id: nodeId,
220
- label: node.label || nodeId,
221
- state: node.state || 'UNKNOWN',
222
- nodeDefinition: node.node_definition || 'unknown',
223
- labId,
224
- labTitle: lab.title || labId
225
- };
226
- try {
227
- const l3 = await this.request('GET', `/labs/${labId}/nodes/${nodeId}/layer3_addresses`);
228
- if (l3 && typeof l3 === 'object') {
229
- const addresses = Object.values(l3);
230
- for (const iface of addresses) {
231
- if (iface?.ip4 && iface.ip4.length > 0) {
232
- const ip = iface.ip4[0].split('/')[0];
233
- candidate.mgmtIp = ip;
234
- break;
235
- }
236
- }
237
- }
238
- }
239
- catch { }
240
- candidates.push(candidate);
241
- }
242
- catch { }
243
- }
244
- }
245
- catch { }
246
- }
247
- if (candidates.length === 0)
248
- return null;
249
- const sorted = candidates.sort((a, b) => {
250
- const stateScore = (s) => s === 'BOOTED' ? 3 : s === 'STARTED' ? 2 : s === 'DEFINED_ON_CORE' ? 1 : 0;
251
- const sd = stateScore(b.state) - stateScore(a.state);
252
- if (sd !== 0)
253
- return sd;
254
- return (b.mgmtIp ? 1 : 0) - (a.mgmtIp ? 1 : 0);
255
- });
256
- return sorted[0];
257
- }
258
- openSsh(host, port) {
259
- return new Promise((resolve, reject) => {
260
- const socket = new net.Socket();
261
- const timeout = setTimeout(() => {
262
- socket.destroy();
263
- reject(new Error(`TCP connection to ${host}:${port} timed out`));
264
- }, 4000);
265
- socket.connect(port, host, () => {
266
- clearTimeout(timeout);
267
- socket.destroy();
268
- resolve();
269
- });
270
- socket.on('error', (e) => {
271
- clearTimeout(timeout);
272
- reject(e);
273
- });
274
- });
275
- }
276
- async execute(command, timeoutMs = 8000) {
277
- const lower = command.toLowerCase().trim();
278
- if (lower === 'cml-status' || lower === 'cml status') {
279
- return this.getCmlStatus();
280
- }
281
- if (lower === 'cml-labs' || lower === 'cml labs') {
282
- return this.listLabs();
283
- }
284
- if (lower.startsWith('cml-node ') || lower.startsWith('cml node ')) {
285
- const nodeLabel = command.split(' ').slice(1).join(' ');
286
- return this.switchNode(nodeLabel);
287
- }
288
- if (lower === 'cml-topology' || lower === 'cml topology') {
289
- return this.getTopology();
290
- }
291
- const prompt = this.state.prompt || `${this.state.hostname}#`;
292
- console.log(`${chalk_1.default.blue('❯')} ${chalk_1.default.bold.yellow(prompt)} ${chalk_1.default.white(command)}`);
293
- if (this.activeNode?.mgmtIp && this.sshStream === null) {
294
- try {
295
- const output = await this.execViaSsh(this.activeNode.mgmtIp, this.activeNode.mgmtPort || 22, command, timeoutMs);
296
- if (output)
297
- return output;
298
- }
299
- catch (e) {
300
- console.log(chalk_1.default.dim(` [SSH fallback: ${e.message}]`));
301
- }
302
- }
303
- if (this.activeLabId && this.activeNode) {
304
- try {
305
- const log = await this.request('GET', `/labs/${this.activeLabId}/nodes/${this.activeNode.id}/consoles/0/log`);
306
- const lines = (log || '').trim().split('\n');
307
- return lines.slice(-30).join('\n') || '';
308
- }
309
- catch {
310
- return '';
311
- }
312
- }
313
- return '';
314
- }
315
- execViaSsh(host, port, command, timeoutMs) {
316
- return new Promise((resolve, reject) => {
317
- const { spawn } = require('child_process');
318
- const args = [
319
- '-o', 'StrictHostKeyChecking=no',
320
- '-o', 'UserKnownHostsFile=/dev/null',
321
- '-o', `ConnectTimeout=${Math.ceil(timeoutMs / 1000)}`,
322
- '-p', String(port),
323
- `${this.username || 'admin'}@${host}`,
324
- command
325
- ];
326
- const proc = spawn('ssh', args, { env: process.env });
327
- let out = '';
328
- let err = '';
329
- proc.stdout.on('data', (d) => { out += d.toString(); });
330
- proc.stderr.on('data', (d) => { err += d.toString(); });
331
- const timer = setTimeout(() => {
332
- proc.kill();
333
- resolve(out || '');
334
- }, timeoutMs);
335
- proc.on('close', () => {
336
- clearTimeout(timer);
337
- if (out)
338
- resolve(out);
339
- else if (err && !err.includes('Warning:'))
340
- reject(new Error(err.trim()));
341
- else
342
- resolve('');
343
- });
344
- });
345
- }
346
- async getCmlStatus() {
347
- if (!this.activeLabId) {
348
- return JSON.stringify({ status: 'not_connected', mode: 'config-only' });
349
- }
350
- try {
351
- const lab = await this.request('GET', `/labs/${this.activeLabId}`);
352
- const stats = await this.request('GET', `/labs/${this.activeLabId}/simulation_stats`).catch(() => null);
353
- return JSON.stringify({
354
- status: lab.state,
355
- lab_id: this.activeLabId,
356
- title: lab.title,
357
- node: this.activeNode
358
- ? { id: this.activeNode.id, label: this.activeNode.label, state: this.activeNode.state }
359
- : null,
360
- stats
361
- }, null, 2);
362
- }
363
- catch (e) {
364
- return JSON.stringify({ error: e.message });
365
- }
366
- }
367
- async listLabs() {
368
- try {
369
- const labIds = await this.request('GET', '/labs');
370
- const details = await Promise.all((labIds || []).map(async (id) => {
371
- try {
372
- const lab = await this.request('GET', `/labs/${id}`);
373
- const nodes = await this.request('GET', `/labs/${id}/nodes`);
374
- return { id, title: lab.title, state: lab.state, nodeCount: (nodes || []).length };
375
- }
376
- catch {
377
- return { id, error: 'fetch_failed' };
378
- }
379
- }));
380
- return JSON.stringify(details, null, 2);
381
- }
382
- catch (e) {
383
- return JSON.stringify({ error: e.message });
384
- }
385
- }
386
- async switchNode(label) {
387
- if (!this.activeLabId)
388
- return JSON.stringify({ error: 'no_lab_connected' });
389
- try {
390
- const result = await this.request('GET', `/labs/${this.activeLabId}/find/node/label/${encodeURIComponent(label)}`);
391
- if (result && result.node_id) {
392
- const node = await this.request('GET', `/labs/${this.activeLabId}/nodes/${result.node_id}`);
393
- this.activeNode = {
394
- id: result.node_id,
395
- label: node.label,
396
- state: node.state,
397
- nodeDefinition: node.node_definition,
398
- labId: this.activeLabId,
399
- labTitle: ''
400
- };
401
- this.state.hostname = node.label;
402
- this.state.prompt = `${node.label}#`;
403
- return JSON.stringify({ switched_to: node.label, node_id: result.node_id });
404
- }
405
- return JSON.stringify({ error: `Node "${label}" not found` });
406
- }
407
- catch (e) {
408
- return JSON.stringify({ error: e.message });
409
- }
410
- }
411
- async getTopology() {
412
- if (!this.activeLabId)
413
- return JSON.stringify({ error: 'no_lab_connected' });
414
- try {
415
- const topology = await this.request('GET', `/labs/${this.activeLabId}/topology`);
416
- return JSON.stringify(topology, null, 2);
417
- }
418
- catch (e) {
419
- return JSON.stringify({ error: e.message });
420
- }
421
- }
422
- async disconnect() {
423
- if (this.activeLabId && this.ownedLab) {
424
- try {
425
- console.log(chalk_1.default.cyan(`❯ Deleting sandbox lab ${this.activeLabId}...`));
426
- await this.request('DELETE', `/labs/${this.activeLabId}`);
427
- console.log(chalk_1.default.green(`[+] Sandbox lab deleted cleanly.`));
428
- }
429
- catch (e) {
430
- console.warn(chalk_1.default.yellow(`[!] Could not delete lab: ${e.message}`));
431
- }
432
- }
433
- else if (this.activeLabId && !this.ownedLab) {
434
- console.log(chalk_1.default.dim(` Leaving external lab ${this.activeLabId} intact (not owned by this session).`));
435
- }
436
- this.activeLabId = null;
437
- if (this.token) {
438
- try {
439
- await this.request('DELETE', '/logout');
440
- console.log(chalk_1.default.green(`[+] Logged out from CML successfully.`));
441
- }
442
- catch { }
443
- this.token = null;
444
- }
445
- }
446
- }
447
- exports.CmlSession = CmlSession;
448
- //# sourceMappingURL=CmlSession.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CmlSession.js","sourceRoot":"","sources":["../../../src/infrastructure/protocols/CmlSession.ts"],"names":[],"mappings":"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"}
@@ -1,74 +0,0 @@
1
- import { BaseSession } from './BaseSession';
2
- export type NetconfFramingVersion = '1.0' | '1.1';
3
- export interface NetconfCredentials {
4
- username?: string;
5
- password?: string;
6
- privateKey?: string | Buffer;
7
- passphrase?: string;
8
- helloTimeoutMs?: number;
9
- rpcTimeoutMs?: number;
10
- readyTimeoutMs?: number;
11
- keepaliveInterval?: number;
12
- }
13
- export interface NetconfEditConfigObject {
14
- target?: 'candidate' | 'running' | 'startup';
15
- config: Record<string, any>;
16
- defaultOperation?: 'merge' | 'replace' | 'none' | 'remove';
17
- testOption?: 'test-then-set' | 'set' | 'test-only';
18
- errorOption?: 'stop-on-error' | 'continue-on-error' | 'rollback-on-error';
19
- messageId?: number | string;
20
- }
21
- export interface NetconfGetConfigObject {
22
- source?: 'candidate' | 'running' | 'startup';
23
- filter?: Record<string, any>;
24
- messageId?: number | string;
25
- }
26
- export interface NetconfRpcEnvelope {
27
- xml: string;
28
- parsed: Record<string, any>;
29
- }
30
- export declare class NetconfSession extends BaseSession {
31
- private host;
32
- private port;
33
- private credentials;
34
- private sshClient;
35
- private netconfStream;
36
- private connected;
37
- private connectionPromise;
38
- private negotiatedFraming;
39
- private negotiatedCapabilities;
40
- private incomingBuffer;
41
- private bufferedMessages;
42
- private pendingMessageWaiters;
43
- private helloMessageWaiter;
44
- private nextMessageId;
45
- private readonly parser;
46
- private readonly builder;
47
- constructor(host: string, port?: number, credentials?: NetconfCredentials);
48
- connect(): Promise<void>;
49
- execute(xmlPayload: string, timeoutMs?: number): Promise<string>;
50
- executeParsed(xmlPayload: string, timeoutMs?: number): Promise<NetconfRpcEnvelope>;
51
- buildRpcRequest(request: NetconfEditConfigObject | NetconfGetConfigObject): string;
52
- buildEditConfigRpc(request: NetconfEditConfigObject): string;
53
- buildGetConfigRpc(request?: NetconfGetConfigObject): string;
54
- parseRpcReply(xml: string): Promise<Record<string, any>>;
55
- frameMessage(xmlPayload: string, framing?: NetconfFramingVersion): string;
56
- disconnect(): Promise<void>;
57
- private buildConnectOptions;
58
- private performHelloExchange;
59
- private buildHelloMessage;
60
- private buildErrorMessage;
61
- private throwIfRpcError;
62
- private extractCapabilities;
63
- private wrapTargetNode;
64
- private toXmlNode;
65
- private findFirstText;
66
- private writeFrame;
67
- private bindStream;
68
- private handleIncomingData;
69
- private extractNextMessage;
70
- private waitForHelloMessage;
71
- private waitForMessageForId;
72
- private rejectPending;
73
- private cleanupConnection;
74
- }