rosinterface 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/client/CommandBuilder.d.ts +32 -0
  2. package/dist/client/CommandBuilder.js +168 -0
  3. package/dist/client/CommandBuilder.js.map +1 -0
  4. package/dist/client/MikrotikClient.d.ts +43 -0
  5. package/dist/client/MikrotikClient.js +276 -0
  6. package/dist/client/MikrotikClient.js.map +1 -0
  7. package/dist/client/MikrotikPool.d.ts +18 -0
  8. package/dist/client/MikrotikPool.js +55 -0
  9. package/dist/client/MikrotikPool.js.map +1 -0
  10. package/dist/client/ResultParser.d.ts +5 -0
  11. package/dist/client/ResultParser.js +30 -0
  12. package/dist/client/ResultParser.js.map +1 -0
  13. package/dist/core/Auth.d.ts +5 -0
  14. package/dist/core/Auth.js +87 -0
  15. package/dist/core/Auth.js.map +1 -0
  16. package/dist/core/CircuitBreaker.d.ts +23 -0
  17. package/dist/core/CircuitBreaker.js +64 -0
  18. package/dist/core/CircuitBreaker.js.map +1 -0
  19. package/dist/core/OfflineQueue.d.ts +13 -0
  20. package/dist/core/OfflineQueue.js +25 -0
  21. package/dist/core/OfflineQueue.js.map +1 -0
  22. package/dist/core/RateLimiter.d.ts +17 -0
  23. package/dist/core/RateLimiter.js +65 -0
  24. package/dist/core/RateLimiter.js.map +1 -0
  25. package/dist/core/RosProtocol.d.ts +7 -0
  26. package/dist/core/RosProtocol.js +80 -0
  27. package/dist/core/RosProtocol.js.map +1 -0
  28. package/dist/core/SchemaMapper.d.ts +14 -0
  29. package/dist/core/SchemaMapper.js +65 -0
  30. package/dist/core/SchemaMapper.js.map +1 -0
  31. package/dist/core/SocketClient.d.ts +22 -0
  32. package/dist/core/SocketClient.js +160 -0
  33. package/dist/core/SocketClient.js.map +1 -0
  34. package/dist/features/FileManager.d.ts +8 -0
  35. package/dist/features/FileManager.js +41 -0
  36. package/dist/features/FileManager.js.map +1 -0
  37. package/dist/features/PrometheusExporter.d.ts +15 -0
  38. package/dist/features/PrometheusExporter.js +38 -0
  39. package/dist/features/PrometheusExporter.js.map +1 -0
  40. package/dist/index.d.ts +11 -0
  41. package/dist/index.js +41 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/types/index.d.ts +14 -0
  44. package/dist/types/index.js +47 -0
  45. package/dist/types/index.js.map +1 -0
  46. package/dist/utils/Helpers.d.ts +4 -0
  47. package/dist/utils/Helpers.js +25 -0
  48. package/dist/utils/Helpers.js.map +1 -0
  49. package/dist/utils/MikrotikCollection.d.ts +14 -0
  50. package/dist/utils/MikrotikCollection.js +79 -0
  51. package/dist/utils/MikrotikCollection.js.map +1 -0
  52. package/package.json +42 -0
@@ -0,0 +1,160 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.SocketClient = void 0;
37
+ const net = __importStar(require("net"));
38
+ const tls = __importStar(require("tls"));
39
+ const events_1 = require("events");
40
+ const buffer_1 = require("buffer");
41
+ const RosProtocol_1 = require("./RosProtocol");
42
+ class SocketClient extends events_1.EventEmitter {
43
+ constructor(options) {
44
+ super();
45
+ this.socket = null;
46
+ this.connected = false;
47
+ this.receiveBuffer = buffer_1.Buffer.alloc(0);
48
+ this.options = {
49
+ timeout: 10,
50
+ rejectUnauthorized: false,
51
+ keepAlive: true,
52
+ useTLS: false,
53
+ ...options
54
+ };
55
+ }
56
+ connect() {
57
+ return new Promise((resolve, reject) => {
58
+ if (this.connected)
59
+ return resolve();
60
+ if (this.socket) {
61
+ this.socket.removeAllListeners();
62
+ this.socket.destroy();
63
+ this.socket = null;
64
+ }
65
+ const timeoutMs = (this.options.timeout || 10) * 1000;
66
+ try {
67
+ if (this.options.useTLS) {
68
+ const tlsOptions = {
69
+ host: this.options.host,
70
+ port: this.options.port,
71
+ rejectUnauthorized: this.options.rejectUnauthorized,
72
+ timeout: timeoutMs
73
+ };
74
+ this.socket = tls.connect(tlsOptions);
75
+ }
76
+ else {
77
+ this.socket = new net.Socket();
78
+ this.socket.setTimeout(timeoutMs);
79
+ this.socket.connect(this.options.port, this.options.host);
80
+ }
81
+ }
82
+ catch (err) {
83
+ return reject(err);
84
+ }
85
+ this.socket.once('timeout', () => {
86
+ const err = new Error(`Connection timed out after ${this.options.timeout} seconds`);
87
+ this.destroy();
88
+ reject(err);
89
+ });
90
+ this.socket.setNoDelay(true);
91
+ if (this.options.keepAlive && this.socket instanceof net.Socket) {
92
+ this.socket.setKeepAlive(true, 10000);
93
+ }
94
+ const connectEvent = this.options.useTLS ? 'secureConnect' : 'connect';
95
+ this.socket.once(connectEvent, () => {
96
+ this.connected = true;
97
+ if (this.socket)
98
+ this.socket.setTimeout(0);
99
+ resolve();
100
+ this.emit('connect');
101
+ });
102
+ this.socket.on('error', (err) => {
103
+ if (!this.connected) {
104
+ reject(err);
105
+ }
106
+ else {
107
+ this.emit('error', err);
108
+ }
109
+ });
110
+ this.socket.on('close', (hadError) => {
111
+ this.connected = false;
112
+ this.emit('close', hadError);
113
+ });
114
+ this.socket.on('data', (chunk) => {
115
+ const bufferChunk = buffer_1.Buffer.isBuffer(chunk)
116
+ ? chunk
117
+ : buffer_1.Buffer.from(chunk, 'utf8');
118
+ this.handleDataChunk(bufferChunk);
119
+ });
120
+ });
121
+ }
122
+ write(data) {
123
+ if (!this.connected || !this.socket) {
124
+ throw new Error('Socket is not connected. Call connect() first.');
125
+ }
126
+ this.socket.write(data);
127
+ }
128
+ close() {
129
+ if (this.socket && !this.socket.destroyed) {
130
+ this.socket.end();
131
+ this.connected = false;
132
+ }
133
+ }
134
+ destroy() {
135
+ if (this.socket && !this.socket.destroyed) {
136
+ this.socket.destroy();
137
+ this.connected = false;
138
+ }
139
+ }
140
+ handleDataChunk(chunk) {
141
+ this.receiveBuffer = buffer_1.Buffer.concat([this.receiveBuffer, chunk]);
142
+ while (this.receiveBuffer.length > 0) {
143
+ const lengthInfo = RosProtocol_1.RosProtocol.decodeLength(this.receiveBuffer);
144
+ if (!lengthInfo) {
145
+ break;
146
+ }
147
+ const { length, byteLength } = lengthInfo;
148
+ const totalPacketSize = byteLength + length;
149
+ if (this.receiveBuffer.length < totalPacketSize) {
150
+ break;
151
+ }
152
+ const payload = this.receiveBuffer.slice(byteLength, totalPacketSize);
153
+ this.receiveBuffer = this.receiveBuffer.slice(totalPacketSize);
154
+ const sentence = payload.toString('utf8');
155
+ this.emit('data', sentence);
156
+ }
157
+ }
158
+ }
159
+ exports.SocketClient = SocketClient;
160
+ //# sourceMappingURL=SocketClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SocketClient.js","sourceRoot":"","sources":["../../src/core/SocketClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { MikrotikClient } from '../client/MikrotikClient';
2
+ export declare class FileManager {
3
+ private client;
4
+ constructor(client: MikrotikClient);
5
+ upload(fileName: string, content: string): Promise<void>;
6
+ download(fileName: string): Promise<string | null>;
7
+ delete(fileName: string): Promise<void>;
8
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileManager = void 0;
4
+ class FileManager {
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ async upload(fileName, content) {
9
+ if (content.length > 1024 * 1024) {
10
+ console.warn('[FileManager] Warning: Uploading large files via API is risky. Content > 1MB.');
11
+ }
12
+ const exists = await this.client.command('/file')
13
+ .where('name', fileName)
14
+ .first();
15
+ if (!exists) {
16
+ await this.client.write('/file/print', {
17
+ file: fileName,
18
+ where: 'false'
19
+ }).catch(() => { });
20
+ }
21
+ await this.client.write('/file/set', {
22
+ 'numbers': fileName,
23
+ 'contents': content
24
+ });
25
+ console.log(`[FileManager] Successfully uploaded: ${fileName} (${content.length} bytes)`);
26
+ }
27
+ async download(fileName) {
28
+ const file = await this.client.command('/file')
29
+ .where('name', fileName)
30
+ .first();
31
+ if (!file)
32
+ return null;
33
+ return file.contents || '(Binary or Empty)';
34
+ }
35
+ async delete(fileName) {
36
+ await this.client.command('/file').remove(fileName);
37
+ console.log(`[FileManager] Deleted: ${fileName}`);
38
+ }
39
+ }
40
+ exports.FileManager = FileManager;
41
+ //# sourceMappingURL=FileManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileManager.js","sourceRoot":"","sources":["../../src/features/FileManager.ts"],"names":[],"mappings":";;;AAOA,MAAa,WAAW;IAGpB,YAAY,MAAsB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAQM,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,OAAe;QAIjD,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;QAClG,CAAC;QAGD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;aAC5C,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;aACvB,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC,MAAM,EAAE,CAAC;YAEV,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE;gBACnC,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,OAAO;aACjB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEvB,CAAC;QAID,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE;YACjC,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,OAAO;SACtB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,wCAAwC,QAAQ,KAAK,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC;IAC9F,CAAC;IAOM,KAAK,CAAC,QAAQ,CAAC,QAAgB;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;aAC1C,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;aACvB,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAIvB,OAAO,IAAI,CAAC,QAAQ,IAAI,mBAAmB,CAAC;IAChD,CAAC;IAKM,KAAK,CAAC,MAAM,CAAC,QAAgB;QAChC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;CACJ;AArED,kCAqEC"}
@@ -0,0 +1,15 @@
1
+ import { MikrotikCollection } from '../utils/MikrotikCollection';
2
+ export declare enum MetricType {
3
+ GAUGE = "gauge",
4
+ COUNTER = "counter"
5
+ }
6
+ export interface MetricDefinition {
7
+ sourceField: string;
8
+ metricName: string;
9
+ help: string;
10
+ type: MetricType;
11
+ labels?: string[];
12
+ }
13
+ export declare class PrometheusExporter {
14
+ static export(collection: MikrotikCollection<any>, definitions: MetricDefinition[]): string;
15
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PrometheusExporter = exports.MetricType = void 0;
4
+ var MetricType;
5
+ (function (MetricType) {
6
+ MetricType["GAUGE"] = "gauge";
7
+ MetricType["COUNTER"] = "counter";
8
+ })(MetricType || (exports.MetricType = MetricType = {}));
9
+ class PrometheusExporter {
10
+ static export(collection, definitions) {
11
+ let output = '';
12
+ const items = collection.all();
13
+ for (const def of definitions) {
14
+ output += `# HELP ${def.metricName} ${def.help}\n`;
15
+ output += `# TYPE ${def.metricName} ${def.type}\n`;
16
+ for (const item of items) {
17
+ const value = item[def.sourceField];
18
+ if (value === undefined || value === null)
19
+ continue;
20
+ let labelString = '';
21
+ if (def.labels && def.labels.length > 0) {
22
+ const labelParts = def.labels.map(labelField => {
23
+ const rawLabelVal = String(item[labelField] || 'unknown');
24
+ const cleanLabelVal = rawLabelVal.replace(/"/g, '\\"');
25
+ const cleanLabelName = labelField.replace(/-/g, '_');
26
+ return `${cleanLabelName}="${cleanLabelVal}"`;
27
+ });
28
+ labelString = `{${labelParts.join(',')}}`;
29
+ }
30
+ output += `${def.metricName}${labelString} ${value}\n`;
31
+ }
32
+ output += '\n';
33
+ }
34
+ return output;
35
+ }
36
+ }
37
+ exports.PrometheusExporter = PrometheusExporter;
38
+ //# sourceMappingURL=PrometheusExporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrometheusExporter.js","sourceRoot":"","sources":["../../src/features/PrometheusExporter.ts"],"names":[],"mappings":";;;AAEA,IAAY,UAGX;AAHD,WAAY,UAAU;IAClB,6BAAe,CAAA;IACf,iCAAmB,CAAA;AACvB,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAoBD,MAAa,kBAAkB;IAQpB,MAAM,CAAC,MAAM,CAAC,UAAmC,EAAE,WAA+B;QACrF,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;QAE/B,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAE5B,MAAM,IAAI,UAAU,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC;YACnD,MAAM,IAAI,UAAU,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC;YAGnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAGpC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;oBAAE,SAAS;gBAGpD,IAAI,WAAW,GAAG,EAAE,CAAC;gBACrB,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtC,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;wBAE3C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,SAAS,CAAC,CAAC;wBAC1D,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;wBAEvD,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;wBACrD,OAAO,GAAG,cAAc,KAAK,aAAa,GAAG,CAAC;oBAClD,CAAC,CAAC,CAAC;oBACH,WAAW,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC9C,CAAC;gBAID,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,GAAG,WAAW,IAAI,KAAK,IAAI,CAAC;YAC3D,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;QACnB,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AA/CD,gDA+CC"}
@@ -0,0 +1,11 @@
1
+ export { MikrotikClient, MikrotikOptions, Subscription } from './client/MikrotikClient';
2
+ export { MikrotikPool, PoolOptions } from './client/MikrotikPool';
3
+ export { CommandBuilder } from './client/CommandBuilder';
4
+ export { PrometheusExporter, MetricDefinition, MetricType } from './features/PrometheusExporter';
5
+ export { FileManager } from './features/FileManager';
6
+ export { CircuitBreaker, CircuitBreakerOptions, CircuitBreakerState } from './core/CircuitBreaker';
7
+ export { RateLimiter } from './core/RateLimiter';
8
+ export { SchemaMapper } from './core/SchemaMapper';
9
+ export { ResultParser } from './client/ResultParser';
10
+ export { MikrotikCollection } from './utils/MikrotikCollection';
11
+ export * from './utils/Helpers';
package/dist/index.js ADDED
@@ -0,0 +1,41 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.MikrotikCollection = exports.ResultParser = exports.SchemaMapper = exports.RateLimiter = exports.CircuitBreakerState = exports.CircuitBreaker = exports.FileManager = exports.MetricType = exports.PrometheusExporter = exports.CommandBuilder = exports.MikrotikPool = exports.MikrotikClient = void 0;
18
+ var MikrotikClient_1 = require("./client/MikrotikClient");
19
+ Object.defineProperty(exports, "MikrotikClient", { enumerable: true, get: function () { return MikrotikClient_1.MikrotikClient; } });
20
+ var MikrotikPool_1 = require("./client/MikrotikPool");
21
+ Object.defineProperty(exports, "MikrotikPool", { enumerable: true, get: function () { return MikrotikPool_1.MikrotikPool; } });
22
+ var CommandBuilder_1 = require("./client/CommandBuilder");
23
+ Object.defineProperty(exports, "CommandBuilder", { enumerable: true, get: function () { return CommandBuilder_1.CommandBuilder; } });
24
+ var PrometheusExporter_1 = require("./features/PrometheusExporter");
25
+ Object.defineProperty(exports, "PrometheusExporter", { enumerable: true, get: function () { return PrometheusExporter_1.PrometheusExporter; } });
26
+ Object.defineProperty(exports, "MetricType", { enumerable: true, get: function () { return PrometheusExporter_1.MetricType; } });
27
+ var FileManager_1 = require("./features/FileManager");
28
+ Object.defineProperty(exports, "FileManager", { enumerable: true, get: function () { return FileManager_1.FileManager; } });
29
+ var CircuitBreaker_1 = require("./core/CircuitBreaker");
30
+ Object.defineProperty(exports, "CircuitBreaker", { enumerable: true, get: function () { return CircuitBreaker_1.CircuitBreaker; } });
31
+ Object.defineProperty(exports, "CircuitBreakerState", { enumerable: true, get: function () { return CircuitBreaker_1.CircuitBreakerState; } });
32
+ var RateLimiter_1 = require("./core/RateLimiter");
33
+ Object.defineProperty(exports, "RateLimiter", { enumerable: true, get: function () { return RateLimiter_1.RateLimiter; } });
34
+ var SchemaMapper_1 = require("./core/SchemaMapper");
35
+ Object.defineProperty(exports, "SchemaMapper", { enumerable: true, get: function () { return SchemaMapper_1.SchemaMapper; } });
36
+ var ResultParser_1 = require("./client/ResultParser");
37
+ Object.defineProperty(exports, "ResultParser", { enumerable: true, get: function () { return ResultParser_1.ResultParser; } });
38
+ var MikrotikCollection_1 = require("./utils/MikrotikCollection");
39
+ Object.defineProperty(exports, "MikrotikCollection", { enumerable: true, get: function () { return MikrotikCollection_1.MikrotikCollection; } });
40
+ __exportStar(require("./utils/Helpers"), exports);
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAsBA,0DAAwF;AAA/E,gHAAA,cAAc,OAAA;AAOvB,sDAAkE;AAAzD,4GAAA,YAAY,OAAA;AAOrB,0DAAyD;AAAhD,gHAAA,cAAc,OAAA;AAWvB,oEAAiG;AAAxF,wHAAA,kBAAkB,OAAA;AAAoB,gHAAA,UAAU,OAAA;AAOzD,sDAAqD;AAA5C,0GAAA,WAAW,OAAA;AAWpB,wDAAmG;AAA1F,gHAAA,cAAc,OAAA;AAAyB,qHAAA,mBAAmB,OAAA;AAOnE,kDAAiD;AAAxC,0GAAA,WAAW,OAAA;AAOpB,oDAAmD;AAA1C,4GAAA,YAAY,OAAA;AAWrB,sDAAqD;AAA5C,4GAAA,YAAY,OAAA;AAOrB,iEAAgE;AAAvD,wHAAA,kBAAkB,OAAA;AAM3B,kDAAgC"}
@@ -0,0 +1,14 @@
1
+ export { MikrotikClient, MikrotikOptions, Subscription } from '../client/MikrotikClient';
2
+ export { MikrotikPool, PoolOptions } from '../client/MikrotikPool';
3
+ export { CommandBuilder } from '../client/CommandBuilder';
4
+ export { PrometheusExporter, MetricDefinition, MetricType } from '../features/PrometheusExporter';
5
+ export { FileManager } from '../features/FileManager';
6
+ export { CircuitBreaker, CircuitBreakerOptions, CircuitBreakerState } from '../core/CircuitBreaker';
7
+ export { RateLimiter } from '../core/RateLimiter';
8
+ export { SchemaMapper } from '../core/SchemaMapper';
9
+ export { ResultParser } from '../client/ResultParser';
10
+ export { MikrotikCollection } from '../utils/MikrotikCollection';
11
+ export * from '../utils/Helpers';
12
+ export { SocketClient, SocketClientOptions } from '../core/SocketClient';
13
+ export { RosProtocol } from '../core/RosProtocol';
14
+ export { Auth } from '../core/Auth';
@@ -0,0 +1,47 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.Auth = exports.RosProtocol = exports.SocketClient = exports.MikrotikCollection = exports.ResultParser = exports.SchemaMapper = exports.RateLimiter = exports.CircuitBreakerState = exports.CircuitBreaker = exports.FileManager = exports.MetricType = exports.PrometheusExporter = exports.CommandBuilder = exports.MikrotikPool = exports.MikrotikClient = void 0;
18
+ var MikrotikClient_1 = require("../client/MikrotikClient");
19
+ Object.defineProperty(exports, "MikrotikClient", { enumerable: true, get: function () { return MikrotikClient_1.MikrotikClient; } });
20
+ var MikrotikPool_1 = require("../client/MikrotikPool");
21
+ Object.defineProperty(exports, "MikrotikPool", { enumerable: true, get: function () { return MikrotikPool_1.MikrotikPool; } });
22
+ var CommandBuilder_1 = require("../client/CommandBuilder");
23
+ Object.defineProperty(exports, "CommandBuilder", { enumerable: true, get: function () { return CommandBuilder_1.CommandBuilder; } });
24
+ var PrometheusExporter_1 = require("../features/PrometheusExporter");
25
+ Object.defineProperty(exports, "PrometheusExporter", { enumerable: true, get: function () { return PrometheusExporter_1.PrometheusExporter; } });
26
+ Object.defineProperty(exports, "MetricType", { enumerable: true, get: function () { return PrometheusExporter_1.MetricType; } });
27
+ var FileManager_1 = require("../features/FileManager");
28
+ Object.defineProperty(exports, "FileManager", { enumerable: true, get: function () { return FileManager_1.FileManager; } });
29
+ var CircuitBreaker_1 = require("../core/CircuitBreaker");
30
+ Object.defineProperty(exports, "CircuitBreaker", { enumerable: true, get: function () { return CircuitBreaker_1.CircuitBreaker; } });
31
+ Object.defineProperty(exports, "CircuitBreakerState", { enumerable: true, get: function () { return CircuitBreaker_1.CircuitBreakerState; } });
32
+ var RateLimiter_1 = require("../core/RateLimiter");
33
+ Object.defineProperty(exports, "RateLimiter", { enumerable: true, get: function () { return RateLimiter_1.RateLimiter; } });
34
+ var SchemaMapper_1 = require("../core/SchemaMapper");
35
+ Object.defineProperty(exports, "SchemaMapper", { enumerable: true, get: function () { return SchemaMapper_1.SchemaMapper; } });
36
+ var ResultParser_1 = require("../client/ResultParser");
37
+ Object.defineProperty(exports, "ResultParser", { enumerable: true, get: function () { return ResultParser_1.ResultParser; } });
38
+ var MikrotikCollection_1 = require("../utils/MikrotikCollection");
39
+ Object.defineProperty(exports, "MikrotikCollection", { enumerable: true, get: function () { return MikrotikCollection_1.MikrotikCollection; } });
40
+ __exportStar(require("../utils/Helpers"), exports);
41
+ var SocketClient_1 = require("../core/SocketClient");
42
+ Object.defineProperty(exports, "SocketClient", { enumerable: true, get: function () { return SocketClient_1.SocketClient; } });
43
+ var RosProtocol_1 = require("../core/RosProtocol");
44
+ Object.defineProperty(exports, "RosProtocol", { enumerable: true, get: function () { return RosProtocol_1.RosProtocol; } });
45
+ var Auth_1 = require("../core/Auth");
46
+ Object.defineProperty(exports, "Auth", { enumerable: true, get: function () { return Auth_1.Auth; } });
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAQA,2DAAyF;AAAhF,gHAAA,cAAc,OAAA;AACvB,uDAAmE;AAA1D,4GAAA,YAAY,OAAA;AACrB,2DAA0D;AAAjD,gHAAA,cAAc,OAAA;AAMvB,qEAAkG;AAAzF,wHAAA,kBAAkB,OAAA;AAAoB,gHAAA,UAAU,OAAA;AAGzD,uDAAsD;AAA7C,0GAAA,WAAW,OAAA;AAMpB,yDAAoG;AAA3F,gHAAA,cAAc,OAAA;AAAyB,qHAAA,mBAAmB,OAAA;AAGnE,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AAGpB,qDAAoD;AAA3C,4GAAA,YAAY,OAAA;AAKrB,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,kEAAiE;AAAxD,wHAAA,kBAAkB,OAAA;AAC3B,mDAAiC;AAKjC,qDAAyE;AAAhE,4GAAA,YAAY,OAAA;AACrB,mDAAkD;AAAzC,0GAAA,WAAW,OAAA;AACpB,qCAAoC;AAA3B,4FAAA,IAAI,OAAA"}
@@ -0,0 +1,4 @@
1
+ export declare function kebabToCamel(str: string): string;
2
+ export declare function camelToKebab(str: string): string;
3
+ export declare function isNumeric(str: string): boolean;
4
+ export declare function parseBoolean(value: string): boolean | null;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.kebabToCamel = kebabToCamel;
4
+ exports.camelToKebab = camelToKebab;
5
+ exports.isNumeric = isNumeric;
6
+ exports.parseBoolean = parseBoolean;
7
+ function kebabToCamel(str) {
8
+ return str.replace(/-./g, (x) => x[1].toUpperCase());
9
+ }
10
+ function camelToKebab(str) {
11
+ return str.replace(/[A-Z]/g, (x) => `-${x.toLowerCase()}`);
12
+ }
13
+ function isNumeric(str) {
14
+ if (typeof str !== "string")
15
+ return false;
16
+ return !isNaN(parseFloat(str)) && isFinite(Number(str));
17
+ }
18
+ function parseBoolean(value) {
19
+ if (value === 'true' || value === 'yes')
20
+ return true;
21
+ if (value === 'false' || value === 'no')
22
+ return false;
23
+ return null;
24
+ }
25
+ //# sourceMappingURL=Helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Helpers.js","sourceRoot":"","sources":["../../src/utils/Helpers.ts"],"names":[],"mappings":";;AAQA,oCAEC;AAKD,oCAEC;AAKD,8BAGC;AAKD,oCAIC;AA1BD,SAAgB,YAAY,CAAC,GAAW;IACpC,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACzD,CAAC;AAKD,SAAgB,YAAY,CAAC,GAAW;IACpC,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC;AAKD,SAAgB,SAAS,CAAC,GAAW;IACjC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1C,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5D,CAAC;AAKD,SAAgB,YAAY,CAAC,KAAa;IACtC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IACrD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1,14 @@
1
+ export declare class MikrotikCollection<T extends Record<string, any>> {
2
+ private readonly _items;
3
+ constructor(items: T[]);
4
+ all(): T[];
5
+ first(): T | null;
6
+ last(): T | null;
7
+ count(): number;
8
+ keyBy(key: keyof T): Map<string, T>;
9
+ groupBy(key: keyof T): Map<string, MikrotikCollection<T>>;
10
+ sortBy(key: keyof T, direction?: 'asc' | 'desc'): this;
11
+ sortByIp(key: keyof T, direction?: 'asc' | 'desc'): this;
12
+ filter(predicate: (item: T) => boolean): MikrotikCollection<T>;
13
+ private ipToLong;
14
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MikrotikCollection = void 0;
4
+ class MikrotikCollection {
5
+ constructor(items) {
6
+ this._items = items;
7
+ }
8
+ all() {
9
+ return this._items;
10
+ }
11
+ first() {
12
+ return this._items.length > 0 ? this._items[0] : null;
13
+ }
14
+ last() {
15
+ return this._items.length > 0 ? this._items[this._items.length - 1] : null;
16
+ }
17
+ count() {
18
+ return this._items.length;
19
+ }
20
+ keyBy(key) {
21
+ const map = new Map();
22
+ for (const item of this._items) {
23
+ const val = String(item[key]);
24
+ map.set(val, item);
25
+ }
26
+ return map;
27
+ }
28
+ groupBy(key) {
29
+ const map = new Map();
30
+ for (const item of this._items) {
31
+ const groupValue = String(item[key]);
32
+ if (!map.has(groupValue)) {
33
+ map.set(groupValue, []);
34
+ }
35
+ map.get(groupValue).push(item);
36
+ }
37
+ const collectionMap = new Map();
38
+ for (const [k, v] of map) {
39
+ collectionMap.set(k, new MikrotikCollection(v));
40
+ }
41
+ return collectionMap;
42
+ }
43
+ sortBy(key, direction = 'asc') {
44
+ this._items.sort((a, b) => {
45
+ const valA = a[key];
46
+ const valB = b[key];
47
+ if (typeof valA === 'number' && typeof valB === 'number') {
48
+ return direction === 'asc' ? valA - valB : valB - valA;
49
+ }
50
+ const strA = String(valA).toLowerCase();
51
+ const strB = String(valB).toLowerCase();
52
+ if (strA < strB)
53
+ return direction === 'asc' ? -1 : 1;
54
+ if (strA > strB)
55
+ return direction === 'asc' ? 1 : -1;
56
+ return 0;
57
+ });
58
+ return this;
59
+ }
60
+ sortByIp(key, direction = 'asc') {
61
+ this._items.sort((a, b) => {
62
+ const ipA = String(a[key]);
63
+ const ipB = String(b[key]);
64
+ const numA = this.ipToLong(ipA);
65
+ const numB = this.ipToLong(ipB);
66
+ return direction === 'asc' ? numA - numB : numB - numA;
67
+ });
68
+ return this;
69
+ }
70
+ filter(predicate) {
71
+ return new MikrotikCollection(this._items.filter(predicate));
72
+ }
73
+ ipToLong(ip) {
74
+ const cleanIp = ip.split('/')[0];
75
+ return cleanIp.split('.').reduce((acc, octet) => (acc << 8) + parseInt(octet, 10), 0) >>> 0;
76
+ }
77
+ }
78
+ exports.MikrotikCollection = MikrotikCollection;
79
+ //# sourceMappingURL=MikrotikCollection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MikrotikCollection.js","sourceRoot":"","sources":["../../src/utils/MikrotikCollection.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "rosinterface",
3
+ "version": "1.0.0",
4
+ "description": "High-performance, Offline-First Mikrotik RouterOS API Client for Enterprise.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "author": "IVMEX",
8
+ "license": "MIT",
9
+ "keywords": [
10
+ "mikrotik",
11
+ "routeros",
12
+ "api",
13
+ "client",
14
+ "isp",
15
+ "rosinterface",
16
+ "winbox",
17
+ "automation",
18
+ "offline-first",
19
+ "pooling"
20
+ ],
21
+ "files": [
22
+ "dist",
23
+ "README.md",
24
+ "LICENSE"
25
+ ],
26
+ "scripts": {
27
+ "build": "tsc",
28
+ "prepublishOnly": "npm run build",
29
+ "test": "ts-node test_integration.ts"
30
+ },
31
+ "dependencies": {
32
+ "dotenv": "^16.4.5"
33
+ },
34
+ "devDependencies": {
35
+ "@types/node": "^20.12.7",
36
+ "ts-node": "^10.9.2",
37
+ "typescript": "^5.4.5"
38
+ },
39
+ "engines": {
40
+ "node": ">=14.0.0"
41
+ }
42
+ }