@ecobridge.xyz/devicemanager 3.0.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.
Files changed (137) hide show
  1. package/.gitea/workflows/default_nottags.yaml +66 -0
  2. package/.gitea/workflows/default_tags.yaml +124 -0
  3. package/.vscode/launch.json +11 -0
  4. package/.vscode/settings.json +26 -0
  5. package/changelog.md +91 -0
  6. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  7. package/dist_ts/00_commitinfo_data.js +9 -0
  8. package/dist_ts/device/device.classes.device.d.ts +205 -0
  9. package/dist_ts/device/device.classes.device.js +344 -0
  10. package/dist_ts/devicemanager.classes.devicemanager.d.ts +210 -0
  11. package/dist_ts/devicemanager.classes.devicemanager.js +835 -0
  12. package/dist_ts/discovery/discovery.classes.homeassistant.d.ts +101 -0
  13. package/dist_ts/discovery/discovery.classes.homeassistant.js +313 -0
  14. package/dist_ts/discovery/discovery.classes.mdns.d.ts +90 -0
  15. package/dist_ts/discovery/discovery.classes.mdns.js +291 -0
  16. package/dist_ts/discovery/discovery.classes.networkscanner.d.ts +64 -0
  17. package/dist_ts/discovery/discovery.classes.networkscanner.js +535 -0
  18. package/dist_ts/discovery/discovery.classes.ssdp.d.ts +112 -0
  19. package/dist_ts/discovery/discovery.classes.ssdp.js +255 -0
  20. package/dist_ts/factories/index.d.ts +190 -0
  21. package/dist_ts/factories/index.js +350 -0
  22. package/dist_ts/features/feature.abstract.d.ts +118 -0
  23. package/dist_ts/features/feature.abstract.js +172 -0
  24. package/dist_ts/features/feature.camera.d.ts +95 -0
  25. package/dist_ts/features/feature.camera.js +162 -0
  26. package/dist_ts/features/feature.climate.d.ts +174 -0
  27. package/dist_ts/features/feature.climate.js +328 -0
  28. package/dist_ts/features/feature.cover.d.ts +121 -0
  29. package/dist_ts/features/feature.cover.js +217 -0
  30. package/dist_ts/features/feature.fan.d.ts +127 -0
  31. package/dist_ts/features/feature.fan.js +235 -0
  32. package/dist_ts/features/feature.light.d.ts +156 -0
  33. package/dist_ts/features/feature.light.js +296 -0
  34. package/dist_ts/features/feature.lock.d.ts +103 -0
  35. package/dist_ts/features/feature.lock.js +170 -0
  36. package/dist_ts/features/feature.playback.d.ts +98 -0
  37. package/dist_ts/features/feature.playback.js +191 -0
  38. package/dist_ts/features/feature.power.d.ts +79 -0
  39. package/dist_ts/features/feature.power.js +173 -0
  40. package/dist_ts/features/feature.print.d.ts +78 -0
  41. package/dist_ts/features/feature.print.js +226 -0
  42. package/dist_ts/features/feature.scan.d.ts +79 -0
  43. package/dist_ts/features/feature.scan.js +315 -0
  44. package/dist_ts/features/feature.sensor.d.ts +95 -0
  45. package/dist_ts/features/feature.sensor.js +147 -0
  46. package/dist_ts/features/feature.snmp.d.ts +88 -0
  47. package/dist_ts/features/feature.snmp.js +175 -0
  48. package/dist_ts/features/feature.switch.d.ts +75 -0
  49. package/dist_ts/features/feature.switch.js +126 -0
  50. package/dist_ts/features/feature.volume.d.ts +104 -0
  51. package/dist_ts/features/feature.volume.js +186 -0
  52. package/dist_ts/features/index.d.ts +19 -0
  53. package/dist_ts/features/index.js +23 -0
  54. package/dist_ts/helpers/helpers.iprange.d.ts +35 -0
  55. package/dist_ts/helpers/helpers.iprange.js +151 -0
  56. package/dist_ts/helpers/helpers.retry.d.ts +25 -0
  57. package/dist_ts/helpers/helpers.retry.js +69 -0
  58. package/dist_ts/index.d.ts +15 -0
  59. package/dist_ts/index.js +40 -0
  60. package/dist_ts/interfaces/feature.interfaces.d.ts +255 -0
  61. package/dist_ts/interfaces/feature.interfaces.js +6 -0
  62. package/dist_ts/interfaces/homeassistant.interfaces.d.ts +550 -0
  63. package/dist_ts/interfaces/homeassistant.interfaces.js +111 -0
  64. package/dist_ts/interfaces/index.d.ts +330 -0
  65. package/dist_ts/interfaces/index.js +16 -0
  66. package/dist_ts/interfaces/smarthome.interfaces.d.ts +282 -0
  67. package/dist_ts/interfaces/smarthome.interfaces.js +7 -0
  68. package/dist_ts/paths.d.ts +1 -0
  69. package/dist_ts/paths.js +3 -0
  70. package/dist_ts/plugins.d.ts +23 -0
  71. package/dist_ts/plugins.js +30 -0
  72. package/dist_ts/protocols/index.d.ts +12 -0
  73. package/dist_ts/protocols/index.js +21 -0
  74. package/dist_ts/protocols/protocol.escl.d.ts +58 -0
  75. package/dist_ts/protocols/protocol.escl.js +364 -0
  76. package/dist_ts/protocols/protocol.homeassistant.d.ts +248 -0
  77. package/dist_ts/protocols/protocol.homeassistant.js +611 -0
  78. package/dist_ts/protocols/protocol.ipp.d.ts +45 -0
  79. package/dist_ts/protocols/protocol.ipp.js +284 -0
  80. package/dist_ts/protocols/protocol.nut.d.ts +160 -0
  81. package/dist_ts/protocols/protocol.nut.js +364 -0
  82. package/dist_ts/protocols/protocol.sane.d.ts +104 -0
  83. package/dist_ts/protocols/protocol.sane.js +597 -0
  84. package/dist_ts/protocols/protocol.snmp.d.ts +133 -0
  85. package/dist_ts/protocols/protocol.snmp.js +333 -0
  86. package/dist_ts/protocols/protocol.upnp.d.ts +207 -0
  87. package/dist_ts/protocols/protocol.upnp.js +442 -0
  88. package/dist_ts/protocols/protocol.upssnmp.d.ts +160 -0
  89. package/dist_ts/protocols/protocol.upssnmp.js +263 -0
  90. package/npmextra.json +24 -0
  91. package/package.json +39 -0
  92. package/readme.hints.md +115 -0
  93. package/readme.md +624 -0
  94. package/test/test.ts +261 -0
  95. package/ts/00_commitinfo_data.ts +8 -0
  96. package/ts/device/device.classes.device.ts +454 -0
  97. package/ts/devicemanager.classes.devicemanager.ts +1219 -0
  98. package/ts/discovery/discovery.classes.homeassistant.ts +376 -0
  99. package/ts/discovery/discovery.classes.mdns.ts +347 -0
  100. package/ts/discovery/discovery.classes.networkscanner.ts +648 -0
  101. package/ts/discovery/discovery.classes.ssdp.ts +357 -0
  102. package/ts/factories/index.ts +696 -0
  103. package/ts/features/feature.abstract.ts +251 -0
  104. package/ts/features/feature.camera.ts +214 -0
  105. package/ts/features/feature.climate.ts +407 -0
  106. package/ts/features/feature.cover.ts +278 -0
  107. package/ts/features/feature.fan.ts +296 -0
  108. package/ts/features/feature.light.ts +369 -0
  109. package/ts/features/feature.lock.ts +223 -0
  110. package/ts/features/feature.playback.ts +246 -0
  111. package/ts/features/feature.power.ts +231 -0
  112. package/ts/features/feature.print.ts +297 -0
  113. package/ts/features/feature.scan.ts +370 -0
  114. package/ts/features/feature.sensor.ts +202 -0
  115. package/ts/features/feature.snmp.ts +235 -0
  116. package/ts/features/feature.switch.ts +170 -0
  117. package/ts/features/feature.volume.ts +256 -0
  118. package/ts/features/index.ts +25 -0
  119. package/ts/helpers/helpers.iprange.ts +172 -0
  120. package/ts/helpers/helpers.retry.ts +100 -0
  121. package/ts/index.ts +165 -0
  122. package/ts/interfaces/feature.interfaces.ts +359 -0
  123. package/ts/interfaces/homeassistant.interfaces.ts +666 -0
  124. package/ts/interfaces/index.ts +421 -0
  125. package/ts/interfaces/smarthome.interfaces.ts +421 -0
  126. package/ts/paths.ts +5 -0
  127. package/ts/plugins.ts +41 -0
  128. package/ts/protocols/index.ts +59 -0
  129. package/ts/protocols/protocol.escl.ts +439 -0
  130. package/ts/protocols/protocol.homeassistant.ts +737 -0
  131. package/ts/protocols/protocol.ipp.ts +329 -0
  132. package/ts/protocols/protocol.nut.ts +471 -0
  133. package/ts/protocols/protocol.sane.ts +694 -0
  134. package/ts/protocols/protocol.snmp.ts +439 -0
  135. package/ts/protocols/protocol.upnp.ts +627 -0
  136. package/ts/protocols/protocol.upssnmp.ts +377 -0
  137. package/tsconfig.json +12 -0
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Common SNMP OIDs (Object Identifiers)
3
+ */
4
+ export declare const SNMP_OIDS: {
5
+ sysDescr: string;
6
+ sysObjectID: string;
7
+ sysUpTime: string;
8
+ sysContact: string;
9
+ sysName: string;
10
+ sysLocation: string;
11
+ sysServices: string;
12
+ ifNumber: string;
13
+ ifTable: string;
14
+ hrSystemUptime: string;
15
+ hrMemorySize: string;
16
+ upsIdentManufacturer: string;
17
+ upsIdentModel: string;
18
+ upsBatteryStatus: string;
19
+ upsSecondsOnBattery: string;
20
+ upsEstimatedMinutesRemaining: string;
21
+ upsEstimatedChargeRemaining: string;
22
+ upsBatteryVoltage: string;
23
+ upsInputFrequency: string;
24
+ upsInputVoltage: string;
25
+ upsOutputSource: string;
26
+ upsOutputFrequency: string;
27
+ upsOutputVoltage: string;
28
+ upsOutputCurrent: string;
29
+ upsOutputPower: string;
30
+ upsOutputPercentLoad: string;
31
+ prtGeneralPrinterName: string;
32
+ prtMarkerSuppliesLevel: string;
33
+ prtMarkerSuppliesMaxCapacity: string;
34
+ };
35
+ /**
36
+ * SNMP value types
37
+ */
38
+ export type TSnmpValueType = 'OctetString' | 'Integer' | 'Counter' | 'Counter32' | 'Counter64' | 'Gauge' | 'Gauge32' | 'TimeTicks' | 'IpAddress' | 'ObjectIdentifier' | 'Null' | 'Opaque';
39
+ /**
40
+ * SNMP varbind (variable binding)
41
+ */
42
+ export interface ISnmpVarbind {
43
+ oid: string;
44
+ type: TSnmpValueType;
45
+ value: unknown;
46
+ }
47
+ /**
48
+ * SNMP session options
49
+ */
50
+ export interface ISnmpOptions {
51
+ /** Community string (v1/v2c) or username (v3) */
52
+ community?: string;
53
+ /** SNMP version: 1, 2 (v2c), or 3 */
54
+ version?: 1 | 2 | 3;
55
+ /** Request timeout in milliseconds */
56
+ timeout?: number;
57
+ /** Number of retries */
58
+ retries?: number;
59
+ /** Port (default: 161) */
60
+ port?: number;
61
+ }
62
+ /**
63
+ * SNMP Protocol handler using net-snmp
64
+ */
65
+ export declare class SnmpProtocol {
66
+ private session;
67
+ private address;
68
+ private options;
69
+ constructor(address: string, options?: ISnmpOptions);
70
+ /**
71
+ * Create SNMP session
72
+ */
73
+ private getSession;
74
+ /**
75
+ * Close SNMP session
76
+ */
77
+ close(): void;
78
+ /**
79
+ * GET operation - retrieve a single OID value
80
+ */
81
+ get(oid: string): Promise<ISnmpVarbind>;
82
+ /**
83
+ * GET operation - retrieve multiple OID values
84
+ */
85
+ getMultiple(oids: string[]): Promise<ISnmpVarbind[]>;
86
+ /**
87
+ * GETNEXT operation - get the next OID in the MIB tree
88
+ */
89
+ getNext(oid: string): Promise<ISnmpVarbind>;
90
+ /**
91
+ * GETBULK operation (v2c/v3 only) - efficient retrieval of table rows
92
+ */
93
+ getBulk(oids: string[], nonRepeaters?: number, maxRepetitions?: number): Promise<ISnmpVarbind[]>;
94
+ /**
95
+ * Walk operation - retrieve all OIDs under a tree
96
+ */
97
+ walk(baseOid: string): Promise<ISnmpVarbind[]>;
98
+ /**
99
+ * SET operation - set an OID value
100
+ */
101
+ set(oid: string, type: TSnmpValueType, value: unknown): Promise<ISnmpVarbind>;
102
+ /**
103
+ * Get system information
104
+ */
105
+ getSystemInfo(): Promise<{
106
+ sysDescr: string;
107
+ sysObjectID: string;
108
+ sysUpTime: number;
109
+ sysContact: string;
110
+ sysName: string;
111
+ sysLocation: string;
112
+ }>;
113
+ /**
114
+ * Check if device is reachable via SNMP
115
+ */
116
+ isReachable(): Promise<boolean>;
117
+ /**
118
+ * Parse varbind to our format
119
+ */
120
+ private parseVarbind;
121
+ /**
122
+ * Get type name from SNMP type number
123
+ */
124
+ private getTypeName;
125
+ /**
126
+ * Get SNMP type number from type name
127
+ */
128
+ private getSnmpType;
129
+ /**
130
+ * Parse value based on type
131
+ */
132
+ private parseValue;
133
+ }
@@ -0,0 +1,333 @@
1
+ import * as plugins from '../plugins.js';
2
+ /**
3
+ * Common SNMP OIDs (Object Identifiers)
4
+ */
5
+ export const SNMP_OIDS = {
6
+ // System MIB (RFC 1213)
7
+ sysDescr: '1.3.6.1.2.1.1.1.0',
8
+ sysObjectID: '1.3.6.1.2.1.1.2.0',
9
+ sysUpTime: '1.3.6.1.2.1.1.3.0',
10
+ sysContact: '1.3.6.1.2.1.1.4.0',
11
+ sysName: '1.3.6.1.2.1.1.5.0',
12
+ sysLocation: '1.3.6.1.2.1.1.6.0',
13
+ sysServices: '1.3.6.1.2.1.1.7.0',
14
+ // IF-MIB - Interfaces
15
+ ifNumber: '1.3.6.1.2.1.2.1.0',
16
+ ifTable: '1.3.6.1.2.1.2.2',
17
+ // Host resources
18
+ hrSystemUptime: '1.3.6.1.2.1.25.1.1.0',
19
+ hrMemorySize: '1.3.6.1.2.1.25.2.2.0',
20
+ // UPS-MIB (RFC 1628)
21
+ upsIdentManufacturer: '1.3.6.1.2.1.33.1.1.1.0',
22
+ upsIdentModel: '1.3.6.1.2.1.33.1.1.2.0',
23
+ upsBatteryStatus: '1.3.6.1.2.1.33.1.2.1.0',
24
+ upsSecondsOnBattery: '1.3.6.1.2.1.33.1.2.2.0',
25
+ upsEstimatedMinutesRemaining: '1.3.6.1.2.1.33.1.2.3.0',
26
+ upsEstimatedChargeRemaining: '1.3.6.1.2.1.33.1.2.4.0',
27
+ upsBatteryVoltage: '1.3.6.1.2.1.33.1.2.5.0',
28
+ upsInputFrequency: '1.3.6.1.2.1.33.1.3.3.1.2',
29
+ upsInputVoltage: '1.3.6.1.2.1.33.1.3.3.1.3',
30
+ upsOutputSource: '1.3.6.1.2.1.33.1.4.1.0',
31
+ upsOutputFrequency: '1.3.6.1.2.1.33.1.4.2.0',
32
+ upsOutputVoltage: '1.3.6.1.2.1.33.1.4.4.1.2',
33
+ upsOutputCurrent: '1.3.6.1.2.1.33.1.4.4.1.3',
34
+ upsOutputPower: '1.3.6.1.2.1.33.1.4.4.1.4',
35
+ upsOutputPercentLoad: '1.3.6.1.2.1.33.1.4.4.1.5',
36
+ // Printer MIB
37
+ prtGeneralPrinterName: '1.3.6.1.2.1.43.5.1.1.16.1',
38
+ prtMarkerSuppliesLevel: '1.3.6.1.2.1.43.11.1.1.9',
39
+ prtMarkerSuppliesMaxCapacity: '1.3.6.1.2.1.43.11.1.1.8',
40
+ };
41
+ const DEFAULT_OPTIONS = {
42
+ community: 'public',
43
+ version: 2,
44
+ timeout: 5000,
45
+ retries: 1,
46
+ port: 161,
47
+ };
48
+ /**
49
+ * SNMP Protocol handler using net-snmp
50
+ */
51
+ export class SnmpProtocol {
52
+ session = null;
53
+ address;
54
+ options;
55
+ constructor(address, options) {
56
+ this.address = address;
57
+ this.options = { ...DEFAULT_OPTIONS, ...options };
58
+ }
59
+ /**
60
+ * Create SNMP session
61
+ */
62
+ getSession() {
63
+ if (!this.session) {
64
+ const snmpVersion = this.options.version === 1
65
+ ? plugins.netSnmp.Version1
66
+ : plugins.netSnmp.Version2c;
67
+ this.session = plugins.netSnmp.createSession(this.address, this.options.community, {
68
+ port: this.options.port,
69
+ retries: this.options.retries,
70
+ timeout: this.options.timeout,
71
+ version: snmpVersion,
72
+ });
73
+ }
74
+ return this.session;
75
+ }
76
+ /**
77
+ * Close SNMP session
78
+ */
79
+ close() {
80
+ if (this.session) {
81
+ this.session.close();
82
+ this.session = null;
83
+ }
84
+ }
85
+ /**
86
+ * GET operation - retrieve a single OID value
87
+ */
88
+ async get(oid) {
89
+ return new Promise((resolve, reject) => {
90
+ const session = this.getSession();
91
+ session.get([oid], (error, varbinds) => {
92
+ if (error) {
93
+ reject(error);
94
+ return;
95
+ }
96
+ if (varbinds.length === 0) {
97
+ reject(new Error(`No response for OID ${oid}`));
98
+ return;
99
+ }
100
+ const vb = varbinds[0];
101
+ if (plugins.netSnmp.isVarbindError(vb)) {
102
+ reject(new Error(`SNMP error for ${oid}: ${plugins.netSnmp.varbindError(vb)}`));
103
+ return;
104
+ }
105
+ resolve(this.parseVarbind(vb));
106
+ });
107
+ });
108
+ }
109
+ /**
110
+ * GET operation - retrieve multiple OID values
111
+ */
112
+ async getMultiple(oids) {
113
+ return new Promise((resolve, reject) => {
114
+ const session = this.getSession();
115
+ session.get(oids, (error, varbinds) => {
116
+ if (error) {
117
+ reject(error);
118
+ return;
119
+ }
120
+ const results = [];
121
+ for (const vb of varbinds) {
122
+ const varbind = vb;
123
+ if (!plugins.netSnmp.isVarbindError(varbind)) {
124
+ results.push(this.parseVarbind(varbind));
125
+ }
126
+ }
127
+ resolve(results);
128
+ });
129
+ });
130
+ }
131
+ /**
132
+ * GETNEXT operation - get the next OID in the MIB tree
133
+ */
134
+ async getNext(oid) {
135
+ return new Promise((resolve, reject) => {
136
+ const session = this.getSession();
137
+ session.getNext([oid], (error, varbinds) => {
138
+ if (error) {
139
+ reject(error);
140
+ return;
141
+ }
142
+ if (varbinds.length === 0) {
143
+ reject(new Error(`No response for GETNEXT ${oid}`));
144
+ return;
145
+ }
146
+ const vb = varbinds[0];
147
+ if (plugins.netSnmp.isVarbindError(vb)) {
148
+ reject(new Error(`SNMP error for ${oid}: ${plugins.netSnmp.varbindError(vb)}`));
149
+ return;
150
+ }
151
+ resolve(this.parseVarbind(vb));
152
+ });
153
+ });
154
+ }
155
+ /**
156
+ * GETBULK operation (v2c/v3 only) - efficient retrieval of table rows
157
+ */
158
+ async getBulk(oids, nonRepeaters = 0, maxRepetitions = 20) {
159
+ if (this.options.version === 1) {
160
+ throw new Error('GETBULK is not supported in SNMPv1');
161
+ }
162
+ return new Promise((resolve, reject) => {
163
+ const session = this.getSession();
164
+ session.getBulk(oids, nonRepeaters, maxRepetitions, (error, varbinds) => {
165
+ if (error) {
166
+ reject(error);
167
+ return;
168
+ }
169
+ const results = [];
170
+ for (const vb of varbinds) {
171
+ const varbind = vb;
172
+ if (!plugins.netSnmp.isVarbindError(varbind)) {
173
+ results.push(this.parseVarbind(varbind));
174
+ }
175
+ }
176
+ resolve(results);
177
+ });
178
+ });
179
+ }
180
+ /**
181
+ * Walk operation - retrieve all OIDs under a tree
182
+ */
183
+ async walk(baseOid) {
184
+ return new Promise((resolve, reject) => {
185
+ const session = this.getSession();
186
+ const results = [];
187
+ session.walk(baseOid, 20, // maxRepetitions
188
+ (varbinds) => {
189
+ for (const vb of varbinds) {
190
+ const varbind = vb;
191
+ if (!plugins.netSnmp.isVarbindError(varbind)) {
192
+ results.push(this.parseVarbind(varbind));
193
+ }
194
+ }
195
+ }, (error) => {
196
+ if (error) {
197
+ reject(error);
198
+ return;
199
+ }
200
+ resolve(results);
201
+ });
202
+ });
203
+ }
204
+ /**
205
+ * SET operation - set an OID value
206
+ */
207
+ async set(oid, type, value) {
208
+ return new Promise((resolve, reject) => {
209
+ const session = this.getSession();
210
+ const snmpType = this.getSnmpType(type);
211
+ const varbind = {
212
+ oid,
213
+ type: snmpType,
214
+ value,
215
+ };
216
+ session.set([varbind], (error, varbinds) => {
217
+ if (error) {
218
+ reject(error);
219
+ return;
220
+ }
221
+ if (varbinds.length === 0) {
222
+ reject(new Error(`No response for SET ${oid}`));
223
+ return;
224
+ }
225
+ const vb = varbinds[0];
226
+ if (plugins.netSnmp.isVarbindError(vb)) {
227
+ reject(new Error(`SNMP error for ${oid}: ${plugins.netSnmp.varbindError(vb)}`));
228
+ return;
229
+ }
230
+ resolve(this.parseVarbind(vb));
231
+ });
232
+ });
233
+ }
234
+ /**
235
+ * Get system information
236
+ */
237
+ async getSystemInfo() {
238
+ const oids = [
239
+ SNMP_OIDS.sysDescr,
240
+ SNMP_OIDS.sysObjectID,
241
+ SNMP_OIDS.sysUpTime,
242
+ SNMP_OIDS.sysContact,
243
+ SNMP_OIDS.sysName,
244
+ SNMP_OIDS.sysLocation,
245
+ ];
246
+ const varbinds = await this.getMultiple(oids);
247
+ const getValue = (oid) => {
248
+ const vb = varbinds.find((v) => v.oid === oid);
249
+ return vb?.value;
250
+ };
251
+ return {
252
+ sysDescr: String(getValue(SNMP_OIDS.sysDescr) || ''),
253
+ sysObjectID: String(getValue(SNMP_OIDS.sysObjectID) || ''),
254
+ sysUpTime: Number(getValue(SNMP_OIDS.sysUpTime) || 0),
255
+ sysContact: String(getValue(SNMP_OIDS.sysContact) || ''),
256
+ sysName: String(getValue(SNMP_OIDS.sysName) || ''),
257
+ sysLocation: String(getValue(SNMP_OIDS.sysLocation) || ''),
258
+ };
259
+ }
260
+ /**
261
+ * Check if device is reachable via SNMP
262
+ */
263
+ async isReachable() {
264
+ try {
265
+ await this.get(SNMP_OIDS.sysDescr);
266
+ return true;
267
+ }
268
+ catch {
269
+ return false;
270
+ }
271
+ }
272
+ /**
273
+ * Parse varbind to our format
274
+ */
275
+ parseVarbind(vb) {
276
+ return {
277
+ oid: vb.oid,
278
+ type: this.getTypeName(vb.type),
279
+ value: this.parseValue(vb.type, vb.value),
280
+ };
281
+ }
282
+ /**
283
+ * Get type name from SNMP type number
284
+ */
285
+ getTypeName(type) {
286
+ const typeMap = {
287
+ [plugins.netSnmp.ObjectType.OctetString]: 'OctetString',
288
+ [plugins.netSnmp.ObjectType.Integer]: 'Integer',
289
+ [plugins.netSnmp.ObjectType.Counter]: 'Counter',
290
+ [plugins.netSnmp.ObjectType.Counter32]: 'Counter32',
291
+ [plugins.netSnmp.ObjectType.Counter64]: 'Counter64',
292
+ [plugins.netSnmp.ObjectType.Gauge]: 'Gauge',
293
+ [plugins.netSnmp.ObjectType.Gauge32]: 'Gauge32',
294
+ [plugins.netSnmp.ObjectType.TimeTicks]: 'TimeTicks',
295
+ [plugins.netSnmp.ObjectType.IpAddress]: 'IpAddress',
296
+ [plugins.netSnmp.ObjectType.OID]: 'ObjectIdentifier',
297
+ [plugins.netSnmp.ObjectType.Null]: 'Null',
298
+ [plugins.netSnmp.ObjectType.Opaque]: 'Opaque',
299
+ };
300
+ return typeMap[type] || 'OctetString';
301
+ }
302
+ /**
303
+ * Get SNMP type number from type name
304
+ */
305
+ getSnmpType(type) {
306
+ const typeMap = {
307
+ OctetString: plugins.netSnmp.ObjectType.OctetString,
308
+ Integer: plugins.netSnmp.ObjectType.Integer,
309
+ Counter: plugins.netSnmp.ObjectType.Counter,
310
+ Counter32: plugins.netSnmp.ObjectType.Counter32,
311
+ Counter64: plugins.netSnmp.ObjectType.Counter64,
312
+ Gauge: plugins.netSnmp.ObjectType.Gauge,
313
+ Gauge32: plugins.netSnmp.ObjectType.Gauge32,
314
+ TimeTicks: plugins.netSnmp.ObjectType.TimeTicks,
315
+ IpAddress: plugins.netSnmp.ObjectType.IpAddress,
316
+ ObjectIdentifier: plugins.netSnmp.ObjectType.OID,
317
+ Null: plugins.netSnmp.ObjectType.Null,
318
+ Opaque: plugins.netSnmp.ObjectType.Opaque,
319
+ };
320
+ return typeMap[type];
321
+ }
322
+ /**
323
+ * Parse value based on type
324
+ */
325
+ parseValue(type, value) {
326
+ // OctetString - convert Buffer to string
327
+ if (type === plugins.netSnmp.ObjectType.OctetString && Buffer.isBuffer(value)) {
328
+ return value.toString('utf8');
329
+ }
330
+ return value;
331
+ }
332
+ }
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdG9jb2wuc25tcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3Byb3RvY29scy9wcm90b2NvbC5zbm1wLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sZUFBZSxDQUFDO0FBRXpDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3ZCLHdCQUF3QjtJQUN4QixRQUFRLEVBQUUsbUJBQW1CO0lBQzdCLFdBQVcsRUFBRSxtQkFBbUI7SUFDaEMsU0FBUyxFQUFFLG1CQUFtQjtJQUM5QixVQUFVLEVBQUUsbUJBQW1CO0lBQy9CLE9BQU8sRUFBRSxtQkFBbUI7SUFDNUIsV0FBVyxFQUFFLG1CQUFtQjtJQUNoQyxXQUFXLEVBQUUsbUJBQW1CO0lBRWhDLHNCQUFzQjtJQUN0QixRQUFRLEVBQUUsbUJBQW1CO0lBQzdCLE9BQU8sRUFBRSxpQkFBaUI7SUFFMUIsaUJBQWlCO0lBQ2pCLGNBQWMsRUFBRSxzQkFBc0I7SUFDdEMsWUFBWSxFQUFFLHNCQUFzQjtJQUVwQyxxQkFBcUI7SUFDckIsb0JBQW9CLEVBQUUsd0JBQXdCO0lBQzlDLGFBQWEsRUFBRSx3QkFBd0I7SUFDdkMsZ0JBQWdCLEVBQUUsd0JBQXdCO0lBQzFDLG1CQUFtQixFQUFFLHdCQUF3QjtJQUM3Qyw0QkFBNEIsRUFBRSx3QkFBd0I7SUFDdEQsMkJBQTJCLEVBQUUsd0JBQXdCO0lBQ3JELGlCQUFpQixFQUFFLHdCQUF3QjtJQUMzQyxpQkFBaUIsRUFBRSwwQkFBMEI7SUFDN0MsZUFBZSxFQUFFLDBCQUEwQjtJQUMzQyxlQUFlLEVBQUUsd0JBQXdCO0lBQ3pDLGtCQUFrQixFQUFFLHdCQUF3QjtJQUM1QyxnQkFBZ0IsRUFBRSwwQkFBMEI7SUFDNUMsZ0JBQWdCLEVBQUUsMEJBQTBCO0lBQzVDLGNBQWMsRUFBRSwwQkFBMEI7SUFDMUMsb0JBQW9CLEVBQUUsMEJBQTBCO0lBRWhELGNBQWM7SUFDZCxxQkFBcUIs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
@@ -0,0 +1,207 @@
1
+ /**
2
+ * UPnP service types for DLNA
3
+ */
4
+ export declare const UPNP_SERVICE_TYPES: {
5
+ AVTransport: string;
6
+ RenderingControl: string;
7
+ ConnectionManager: string;
8
+ ContentDirectory: string;
9
+ };
10
+ /**
11
+ * UPnP device types for DLNA
12
+ */
13
+ export declare const UPNP_DEVICE_TYPES: {
14
+ MediaRenderer: string;
15
+ MediaServer: string;
16
+ };
17
+ /**
18
+ * DLNA transport state
19
+ */
20
+ export type TDlnaTransportState = 'STOPPED' | 'PLAYING' | 'PAUSED_PLAYBACK' | 'TRANSITIONING' | 'NO_MEDIA_PRESENT';
21
+ /**
22
+ * DLNA transport status
23
+ */
24
+ export type TDlnaTransportStatus = 'OK' | 'ERROR_OCCURRED';
25
+ /**
26
+ * Position info from AVTransport
27
+ */
28
+ export interface IDlnaPositionInfo {
29
+ track: number;
30
+ trackDuration: string;
31
+ trackMetadata: string;
32
+ trackUri: string;
33
+ relativeTime: string;
34
+ absoluteTime: string;
35
+ relativeCount: number;
36
+ absoluteCount: number;
37
+ }
38
+ /**
39
+ * Transport info from AVTransport
40
+ */
41
+ export interface IDlnaTransportInfo {
42
+ state: TDlnaTransportState;
43
+ status: TDlnaTransportStatus;
44
+ speed: string;
45
+ }
46
+ /**
47
+ * Media info from AVTransport
48
+ */
49
+ export interface IDlnaMediaInfo {
50
+ nrTracks: number;
51
+ mediaDuration: string;
52
+ currentUri: string;
53
+ currentUriMetadata: string;
54
+ nextUri: string;
55
+ nextUriMetadata: string;
56
+ playMedium: string;
57
+ recordMedium: string;
58
+ writeStatus: string;
59
+ }
60
+ /**
61
+ * Content item from ContentDirectory
62
+ */
63
+ export interface IDlnaContentItem {
64
+ id: string;
65
+ parentId: string;
66
+ title: string;
67
+ class: string;
68
+ restricted: boolean;
69
+ res?: {
70
+ url: string;
71
+ protocolInfo: string;
72
+ size?: number;
73
+ duration?: string;
74
+ resolution?: string;
75
+ bitrate?: number;
76
+ }[];
77
+ albumArtUri?: string;
78
+ artist?: string;
79
+ album?: string;
80
+ genre?: string;
81
+ date?: string;
82
+ childCount?: number;
83
+ }
84
+ /**
85
+ * Browse result from ContentDirectory
86
+ */
87
+ export interface IDlnaBrowseResult {
88
+ items: IDlnaContentItem[];
89
+ numberReturned: number;
90
+ totalMatches: number;
91
+ updateId: number;
92
+ }
93
+ /**
94
+ * UPnP SOAP client for DLNA operations
95
+ */
96
+ export declare class UpnpSoapClient {
97
+ private baseUrl;
98
+ constructor(baseUrl: string);
99
+ /**
100
+ * Make a SOAP request to a UPnP service
101
+ */
102
+ soapAction(controlUrl: string, serviceType: string, action: string, args?: Record<string, string | number>): Promise<string>;
103
+ /**
104
+ * Escape XML special characters
105
+ */
106
+ private escapeXml;
107
+ /**
108
+ * Unescape XML special characters
109
+ */
110
+ unescapeXml(str: string): string;
111
+ /**
112
+ * Extract value from SOAP response
113
+ */
114
+ extractValue(xml: string, tag: string): string;
115
+ /**
116
+ * Extract multiple values from SOAP response
117
+ */
118
+ extractValues(xml: string, tags: string[]): Record<string, string>;
119
+ /**
120
+ * Set the URI to play
121
+ */
122
+ setAVTransportURI(controlUrl: string, uri: string, metadata?: string): Promise<void>;
123
+ /**
124
+ * Set next URI to play
125
+ */
126
+ setNextAVTransportURI(controlUrl: string, uri: string, metadata?: string): Promise<void>;
127
+ /**
128
+ * Play
129
+ */
130
+ play(controlUrl: string, speed?: string): Promise<void>;
131
+ /**
132
+ * Pause
133
+ */
134
+ pause(controlUrl: string): Promise<void>;
135
+ /**
136
+ * Stop
137
+ */
138
+ stop(controlUrl: string): Promise<void>;
139
+ /**
140
+ * Seek
141
+ */
142
+ seek(controlUrl: string, target: string, unit?: string): Promise<void>;
143
+ /**
144
+ * Next track
145
+ */
146
+ next(controlUrl: string): Promise<void>;
147
+ /**
148
+ * Previous track
149
+ */
150
+ previous(controlUrl: string): Promise<void>;
151
+ /**
152
+ * Get position info
153
+ */
154
+ getPositionInfo(controlUrl: string): Promise<IDlnaPositionInfo>;
155
+ /**
156
+ * Get transport info
157
+ */
158
+ getTransportInfo(controlUrl: string): Promise<IDlnaTransportInfo>;
159
+ /**
160
+ * Get media info
161
+ */
162
+ getMediaInfo(controlUrl: string): Promise<IDlnaMediaInfo>;
163
+ /**
164
+ * Get volume
165
+ */
166
+ getVolume(controlUrl: string, channel?: string): Promise<number>;
167
+ /**
168
+ * Set volume
169
+ */
170
+ setVolume(controlUrl: string, volume: number, channel?: string): Promise<void>;
171
+ /**
172
+ * Get mute state
173
+ */
174
+ getMute(controlUrl: string, channel?: string): Promise<boolean>;
175
+ /**
176
+ * Set mute state
177
+ */
178
+ setMute(controlUrl: string, muted: boolean, channel?: string): Promise<void>;
179
+ /**
180
+ * Browse content directory
181
+ */
182
+ browse(controlUrl: string, objectId?: string, browseFlag?: 'BrowseDirectChildren' | 'BrowseMetadata', filter?: string, startIndex?: number, requestCount?: number, sortCriteria?: string): Promise<IDlnaBrowseResult>;
183
+ /**
184
+ * Search content directory
185
+ */
186
+ search(controlUrl: string, containerId: string, searchCriteria: string, filter?: string, startIndex?: number, requestCount?: number, sortCriteria?: string): Promise<IDlnaBrowseResult>;
187
+ /**
188
+ * Parse DIDL-Lite result XML
189
+ */
190
+ private parseDidlResult;
191
+ /**
192
+ * Extract content from XML tag (handles namespaced tags)
193
+ */
194
+ private extractTagContent;
195
+ /**
196
+ * Generate DIDL-Lite metadata for a media URL
197
+ */
198
+ generateDidlMetadata(title: string, url: string, mimeType?: string): string;
199
+ /**
200
+ * Convert duration string to seconds
201
+ */
202
+ durationToSeconds(duration: string): number;
203
+ /**
204
+ * Convert seconds to duration string
205
+ */
206
+ secondsToDuration(seconds: number): string;
207
+ }