@ya-modbus/mqtt-bridge 0.6.0 → 0.7.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 (145) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cjs/bin/ya-modbus-bridge.d.ts.map +1 -0
  3. package/dist/cjs/bin/ya-modbus-bridge.js +12 -0
  4. package/dist/cjs/bin/ya-modbus-bridge.js.map +1 -0
  5. package/dist/cjs/package.json +1 -0
  6. package/dist/cjs/src/cli.d.ts.map +1 -0
  7. package/dist/cjs/src/cli.js +113 -0
  8. package/dist/cjs/src/cli.js.map +1 -0
  9. package/dist/cjs/src/device-manager.d.ts.map +1 -0
  10. package/dist/cjs/src/device-manager.js +82 -0
  11. package/dist/cjs/src/device-manager.js.map +1 -0
  12. package/dist/cjs/src/driver-loader.d.ts.map +1 -0
  13. package/dist/cjs/src/driver-loader.js +122 -0
  14. package/dist/cjs/src/driver-loader.js.map +1 -0
  15. package/dist/cjs/src/index.d.ts.map +1 -0
  16. package/dist/cjs/src/index.js +291 -0
  17. package/dist/cjs/src/index.js.map +1 -0
  18. package/dist/cjs/src/polling-scheduler.d.ts.map +1 -0
  19. package/dist/cjs/src/polling-scheduler.js +130 -0
  20. package/dist/cjs/src/polling-scheduler.js.map +1 -0
  21. package/dist/cjs/src/types.d.ts.map +1 -0
  22. package/dist/cjs/src/types.js +3 -0
  23. package/dist/{src → cjs/src}/types.js.map +1 -1
  24. package/dist/cjs/src/utils/config-validator.d.ts.map +1 -0
  25. package/dist/cjs/src/utils/config-validator.js +35 -0
  26. package/dist/cjs/src/utils/config-validator.js.map +1 -0
  27. package/dist/cjs/src/utils/config.d.ts.map +1 -0
  28. package/dist/cjs/src/utils/config.js +55 -0
  29. package/dist/cjs/src/utils/config.js.map +1 -0
  30. package/dist/cjs/src/utils/device-validation.d.ts.map +1 -0
  31. package/dist/cjs/src/utils/device-validation.js +74 -0
  32. package/dist/cjs/src/utils/device-validation.js.map +1 -0
  33. package/dist/cjs/src/utils/package-info.d.ts.map +1 -0
  34. package/dist/cjs/src/utils/package-info.js +30 -0
  35. package/dist/cjs/src/utils/package-info.js.map +1 -0
  36. package/dist/cjs/src/utils/process.d.ts.map +1 -0
  37. package/dist/cjs/src/utils/process.js +16 -0
  38. package/dist/cjs/src/utils/process.js.map +1 -0
  39. package/dist/cjs/src/utils/test-utils.d.ts.map +1 -0
  40. package/dist/cjs/src/utils/test-utils.js +556 -0
  41. package/dist/cjs/src/utils/test-utils.js.map +1 -0
  42. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  43. package/dist/esm/bin/ya-modbus-bridge.d.ts +9 -0
  44. package/dist/esm/bin/ya-modbus-bridge.d.ts.map +1 -0
  45. package/dist/esm/bin/ya-modbus-bridge.js.map +1 -0
  46. package/dist/esm/package.json +1 -0
  47. package/dist/esm/src/cli.d.ts +4 -0
  48. package/dist/esm/src/cli.d.ts.map +1 -0
  49. package/dist/esm/src/cli.js.map +1 -0
  50. package/dist/esm/src/device-manager.d.ts +17 -0
  51. package/dist/esm/src/device-manager.d.ts.map +1 -0
  52. package/dist/{src → esm/src}/device-manager.js +2 -3
  53. package/dist/esm/src/device-manager.js.map +1 -0
  54. package/dist/esm/src/driver-loader.d.ts +53 -0
  55. package/dist/esm/src/driver-loader.d.ts.map +1 -0
  56. package/dist/{src → esm/src}/driver-loader.js +2 -4
  57. package/dist/esm/src/driver-loader.js.map +1 -0
  58. package/dist/esm/src/index.d.ts +13 -0
  59. package/dist/esm/src/index.d.ts.map +1 -0
  60. package/dist/esm/src/index.js.map +1 -0
  61. package/dist/esm/src/polling-scheduler.d.ts +48 -0
  62. package/dist/esm/src/polling-scheduler.d.ts.map +1 -0
  63. package/dist/{src → esm/src}/polling-scheduler.js +2 -4
  64. package/dist/esm/src/polling-scheduler.js.map +1 -0
  65. package/dist/esm/src/types.d.ts +86 -0
  66. package/dist/esm/src/types.d.ts.map +1 -0
  67. package/dist/esm/src/types.js.map +1 -0
  68. package/dist/esm/src/utils/config-validator.d.ts +3 -0
  69. package/dist/esm/src/utils/config-validator.d.ts.map +1 -0
  70. package/dist/esm/src/utils/config-validator.js.map +1 -0
  71. package/dist/esm/src/utils/config.d.ts +3 -0
  72. package/dist/esm/src/utils/config.d.ts.map +1 -0
  73. package/dist/esm/src/utils/config.js.map +1 -0
  74. package/dist/esm/src/utils/device-validation.d.ts +31 -0
  75. package/dist/esm/src/utils/device-validation.d.ts.map +1 -0
  76. package/dist/esm/src/utils/device-validation.js.map +1 -0
  77. package/dist/esm/src/utils/package-info.d.ts +5 -0
  78. package/dist/esm/src/utils/package-info.d.ts.map +1 -0
  79. package/dist/esm/src/utils/package-info.js +27 -0
  80. package/dist/esm/src/utils/package-info.js.map +1 -0
  81. package/dist/esm/src/utils/process.d.ts +10 -0
  82. package/dist/esm/src/utils/process.d.ts.map +1 -0
  83. package/dist/esm/src/utils/process.js.map +1 -0
  84. package/dist/esm/src/utils/test-utils.d.ts +313 -0
  85. package/dist/esm/src/utils/test-utils.d.ts.map +1 -0
  86. package/dist/esm/src/utils/test-utils.js.map +1 -0
  87. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  88. package/package.json +27 -10
  89. package/dist/bin/ya-modbus-bridge.d.ts.map +0 -1
  90. package/dist/bin/ya-modbus-bridge.js.map +0 -1
  91. package/dist/src/cli.d.ts.map +0 -1
  92. package/dist/src/cli.js.map +0 -1
  93. package/dist/src/device-manager.d.ts.map +0 -1
  94. package/dist/src/device-manager.js.map +0 -1
  95. package/dist/src/driver-loader.d.ts.map +0 -1
  96. package/dist/src/driver-loader.js.map +0 -1
  97. package/dist/src/index.d.ts.map +0 -1
  98. package/dist/src/index.js.map +0 -1
  99. package/dist/src/polling-scheduler.d.ts.map +0 -1
  100. package/dist/src/polling-scheduler.js.map +0 -1
  101. package/dist/src/types.d.ts.map +0 -1
  102. package/dist/src/utils/__mocks__/package-info.d.ts +0 -9
  103. package/dist/src/utils/__mocks__/package-info.d.ts.map +0 -1
  104. package/dist/src/utils/__mocks__/package-info.js +0 -11
  105. package/dist/src/utils/__mocks__/package-info.js.map +0 -1
  106. package/dist/src/utils/__mocks__/process.d.ts +0 -20
  107. package/dist/src/utils/__mocks__/process.d.ts.map +0 -1
  108. package/dist/src/utils/__mocks__/process.js +0 -37
  109. package/dist/src/utils/__mocks__/process.js.map +0 -1
  110. package/dist/src/utils/config-validator.d.ts.map +0 -1
  111. package/dist/src/utils/config-validator.js.map +0 -1
  112. package/dist/src/utils/config.d.ts.map +0 -1
  113. package/dist/src/utils/config.js.map +0 -1
  114. package/dist/src/utils/device-validation.d.ts.map +0 -1
  115. package/dist/src/utils/device-validation.js.map +0 -1
  116. package/dist/src/utils/package-info.d.ts.map +0 -1
  117. package/dist/src/utils/package-info.js +0 -11
  118. package/dist/src/utils/package-info.js.map +0 -1
  119. package/dist/src/utils/process.d.ts.map +0 -1
  120. package/dist/src/utils/process.js.map +0 -1
  121. package/dist/src/utils/test-utils.d.ts.map +0 -1
  122. package/dist/src/utils/test-utils.js.map +0 -1
  123. package/dist/tsconfig.tsbuildinfo +0 -1
  124. /package/dist/{bin → cjs/bin}/ya-modbus-bridge.d.ts +0 -0
  125. /package/dist/{src → cjs/src}/cli.d.ts +0 -0
  126. /package/dist/{src → cjs/src}/device-manager.d.ts +0 -0
  127. /package/dist/{src → cjs/src}/driver-loader.d.ts +0 -0
  128. /package/dist/{src → cjs/src}/index.d.ts +0 -0
  129. /package/dist/{src → cjs/src}/polling-scheduler.d.ts +0 -0
  130. /package/dist/{src → cjs/src}/types.d.ts +0 -0
  131. /package/dist/{src → cjs/src}/utils/config-validator.d.ts +0 -0
  132. /package/dist/{src → cjs/src}/utils/config.d.ts +0 -0
  133. /package/dist/{src → cjs/src}/utils/device-validation.d.ts +0 -0
  134. /package/dist/{src → cjs/src}/utils/package-info.d.ts +0 -0
  135. /package/dist/{src → cjs/src}/utils/process.d.ts +0 -0
  136. /package/dist/{src → cjs/src}/utils/test-utils.d.ts +0 -0
  137. /package/dist/{bin → esm/bin}/ya-modbus-bridge.js +0 -0
  138. /package/dist/{src → esm/src}/cli.js +0 -0
  139. /package/dist/{src → esm/src}/index.js +0 -0
  140. /package/dist/{src → esm/src}/types.js +0 -0
  141. /package/dist/{src → esm/src}/utils/config-validator.js +0 -0
  142. /package/dist/{src → esm/src}/utils/config.js +0 -0
  143. /package/dist/{src → esm/src}/utils/device-validation.js +0 -0
  144. /package/dist/{src → esm/src}/utils/process.js +0 -0
  145. /package/dist/{src → esm/src}/utils/test-utils.js +0 -0
@@ -0,0 +1,48 @@
1
+ import type { DeviceDriver } from '@ya-modbus/driver-types';
2
+ import type { DeviceConfig } from './types.js';
3
+ type DataCallback = (deviceId: string, data: Record<string, unknown>) => void;
4
+ type ErrorCallback = (deviceId: string, error: Error, failureCount: number) => void;
5
+ /**
6
+ * Coordinates polling across multiple devices
7
+ */
8
+ export declare class PollingScheduler {
9
+ private onData;
10
+ private onError;
11
+ private devices;
12
+ private running;
13
+ constructor(onData: DataCallback, onError: ErrorCallback);
14
+ /**
15
+ * Schedule a device for polling
16
+ */
17
+ scheduleDevice(deviceId: string, config: DeviceConfig, driver: DeviceDriver): void;
18
+ /**
19
+ * Stop polling a device and remove it from the schedule
20
+ */
21
+ unscheduleDevice(deviceId: string): void;
22
+ /**
23
+ * Start polling all scheduled devices
24
+ */
25
+ start(): void;
26
+ /**
27
+ * Stop polling all devices
28
+ */
29
+ stop(): void;
30
+ /**
31
+ * Check if a device is scheduled for polling
32
+ */
33
+ isScheduled(deviceId: string): boolean;
34
+ /**
35
+ * Start polling for a specific device
36
+ */
37
+ private startDevicePolling;
38
+ /**
39
+ * Schedule the next poll for a device, with backoff if needed
40
+ */
41
+ private scheduleNextPoll;
42
+ /**
43
+ * Poll a device once
44
+ */
45
+ private pollDevice;
46
+ }
47
+ export {};
48
+ //# sourceMappingURL=polling-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polling-scheduler.d.ts","sourceRoot":"","sources":["../../../src/polling-scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAU9C,KAAK,YAAY,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;AAC7E,KAAK,aAAa,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAA;AAInF;;GAEG;AACH,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IALjB,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,OAAO,CAAQ;gBAGb,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,aAAa;IAGhC;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAelF;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQxC;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAItC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkBxB;;OAEG;YACW,UAAU;CAyCzB"}
@@ -3,13 +3,11 @@ const DEFAULT_POLLING_INTERVAL = 5000; // 5 seconds
3
3
  * Coordinates polling across multiple devices
4
4
  */
5
5
  export class PollingScheduler {
6
- onData;
7
- onError;
8
- devices = new Map();
9
- running = false;
10
6
  constructor(onData, onError) {
11
7
  this.onData = onData;
12
8
  this.onError = onError;
9
+ this.devices = new Map();
10
+ this.running = false;
13
11
  }
14
12
  /**
15
13
  * Schedule a device for polling
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polling-scheduler.js","sourceRoot":"","sources":["../../../src/polling-scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ export interface MqttBridgeConfig {
2
+ mqtt: {
3
+ url: string;
4
+ clientId?: string;
5
+ username?: string;
6
+ password?: string;
7
+ reconnectPeriod?: number;
8
+ };
9
+ stateDir?: string;
10
+ topicPrefix?: string;
11
+ }
12
+ export interface BridgeStatus {
13
+ state: 'starting' | 'running' | 'stopping' | 'stopped' | 'error';
14
+ timestamp: number;
15
+ deviceCount: number;
16
+ mqttConnected?: boolean;
17
+ errors?: string[];
18
+ }
19
+ export interface PublishOptions {
20
+ qos?: 0 | 1 | 2;
21
+ retain?: boolean;
22
+ }
23
+ export interface SubscribeOptions {
24
+ qos?: 0 | 1 | 2;
25
+ }
26
+ export interface MqttMessage {
27
+ topic: string;
28
+ payload: Buffer;
29
+ qos: 0 | 1 | 2;
30
+ retain: boolean;
31
+ }
32
+ export type MessageHandler = (message: MqttMessage) => void;
33
+ export interface PollingConfig {
34
+ interval: number;
35
+ maxRetries?: number;
36
+ retryBackoff?: number;
37
+ }
38
+ export interface DeviceConfig {
39
+ deviceId: string;
40
+ driver: string;
41
+ connection: DeviceConnection;
42
+ enabled?: boolean;
43
+ polling?: PollingConfig;
44
+ }
45
+ export type DeviceConnection = RTUConnection | TCPConnection;
46
+ export interface RTUConnection {
47
+ type: 'rtu';
48
+ port: string;
49
+ baudRate: number;
50
+ slaveId: number;
51
+ parity: 'none' | 'even' | 'odd';
52
+ dataBits: 7 | 8;
53
+ stopBits: 1 | 2;
54
+ timeout?: number;
55
+ }
56
+ export interface TCPConnection {
57
+ type: 'tcp';
58
+ host: string;
59
+ port?: number;
60
+ slaveId: number;
61
+ timeout?: number;
62
+ }
63
+ export interface DeviceStatus {
64
+ deviceId: string;
65
+ state: 'connecting' | 'connected' | 'disconnected' | 'error';
66
+ enabled: boolean;
67
+ connected: boolean;
68
+ lastUpdate?: number;
69
+ lastPoll?: number;
70
+ consecutiveFailures?: number;
71
+ errors?: string[];
72
+ }
73
+ export interface MqttBridge {
74
+ start(): Promise<void>;
75
+ stop(): Promise<void>;
76
+ getStatus(): BridgeStatus;
77
+ publish(topic: string, payload: string | Buffer, options?: PublishOptions): Promise<void>;
78
+ subscribe(topic: string, handler: MessageHandler, options?: SubscribeOptions): Promise<void>;
79
+ unsubscribe(topic: string): Promise<void>;
80
+ addDevice(config: DeviceConfig): Promise<void>;
81
+ removeDevice(deviceId: string): Promise<void>;
82
+ getDevice(deviceId: string): DeviceStatus | undefined;
83
+ listDevices(): DeviceStatus[];
84
+ getDeviceConfig(deviceId: string): DeviceConfig | undefined;
85
+ }
86
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { MqttBridgeConfig } from '../types.js';
2
+ export declare function validateConfig(config: unknown): asserts config is MqttBridgeConfig;
3
+ //# sourceMappingURL=config-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-validator.d.ts","sourceRoot":"","sources":["../../../../src/utils/config-validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AA4BnD,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAOlF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../../../../src/utils/config-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,GAAG,EAAE;SACL,KAAK,CAAC,2BAA2B,EAAE;QAClC,OAAO,EAAE,yDAAyD;KACnE,CAAC;IACJ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACxD,CAAC,CAAA;AAEF,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;QACT,4CAA4C;SAC3C,KAAK,CAAC,gBAAgB,EAAE;QACvB,OAAO,EACL,sFAAsF;KACzF,CAAC;SACD,QAAQ,EAAE;CACd,CAAC,CAAA;AAEF,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAEvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC7F,MAAM,IAAI,KAAK,CAAC,0BAA0B,MAAM,EAAE,CAAC,CAAA;IACrD,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { MqttBridgeConfig } from '../types.js';
2
+ export declare function loadConfig(configPath: string): Promise<MqttBridgeConfig>;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/utils/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AA6BnD,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4B9E"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/utils/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { z } from 'zod';
2
+ export declare const deviceConfigSchema: z.ZodObject<{
3
+ deviceId: z.ZodString;
4
+ driver: z.ZodString;
5
+ connection: z.ZodUnion<readonly [z.ZodObject<{
6
+ type: z.ZodLiteral<"rtu">;
7
+ port: z.ZodString;
8
+ baudRate: z.ZodNumber;
9
+ slaveId: z.ZodNumber;
10
+ parity: z.ZodOptional<z.ZodEnum<{
11
+ none: "none";
12
+ even: "even";
13
+ odd: "odd";
14
+ }>>;
15
+ dataBits: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<7>, z.ZodLiteral<8>]>>;
16
+ stopBits: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<2>]>>;
17
+ }, z.core.$strip>, z.ZodObject<{
18
+ type: z.ZodLiteral<"tcp">;
19
+ host: z.ZodString;
20
+ port: z.ZodNumber;
21
+ slaveId: z.ZodNumber;
22
+ }, z.core.$strip>]>;
23
+ enabled: z.ZodOptional<z.ZodBoolean>;
24
+ polling: z.ZodOptional<z.ZodObject<{
25
+ interval: z.ZodNumber;
26
+ maxRetries: z.ZodOptional<z.ZodNumber>;
27
+ retryBackoff: z.ZodOptional<z.ZodNumber>;
28
+ }, z.core.$strip>>;
29
+ }, z.core.$strip>;
30
+ export declare function validateDeviceConfig(config: unknown): void;
31
+ //# sourceMappingURL=device-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-validation.d.ts","sourceRoot":"","sources":["../../../../src/utils/device-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA+DvB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAM7B,CAAA;AAEF,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAO1D"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-validation.js","sourceRoot":"","sources":["../../../../src/utils/device-validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function getPackageInfo(): {
2
+ version: string;
3
+ description: string;
4
+ };
5
+ //# sourceMappingURL=package-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-info.d.ts","sourceRoot":"","sources":["../../../../src/utils/package-info.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CA2BzE"}
@@ -0,0 +1,27 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ export function getPackageInfo() {
5
+ // Determine the package root differently for ESM vs CJS builds
6
+ // In CJS: __dirname is available
7
+ // In ESM: use import.meta.url
8
+ let pkgPath;
9
+ // Check if we're in a CommonJS context by testing for __dirname
10
+ // This works because typeof __dirname is 'undefined' in ESM but 'string' in CJS
11
+ if (typeof __dirname !== 'undefined') {
12
+ // CommonJS: file is at dist/cjs/src/utils/package-info.js
13
+ pkgPath = join(__dirname, '../../../../package.json');
14
+ }
15
+ else {
16
+ // ESM: file is at dist/esm/src/utils/package-info.js
17
+ // Use import.meta.url (only executed in ESM builds where it's valid)
18
+ // TypeScript will complain about import.meta in CJS, but this branch is never reached in CJS runtime
19
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
20
+ // @ts-ignore - import.meta is valid in ESM but TypeScript CJS build sees all code
21
+ const currentFileUrl = new URL(import.meta.url);
22
+ pkgPath = fileURLToPath(new URL('../../../../package.json', currentFileUrl));
23
+ }
24
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
25
+ return pkg;
26
+ }
27
+ //# sourceMappingURL=package-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-info.js","sourceRoot":"","sources":["../../../../src/utils/package-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,MAAM,UAAU,cAAc;IAC5B,+DAA+D;IAC/D,iCAAiC;IACjC,8BAA8B;IAE9B,IAAI,OAAe,CAAA;IAEnB,gEAAgE;IAChE,gFAAgF;IAChF,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE,CAAC;QACrC,0DAA0D;QAC1D,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAA;IACvD,CAAC;SAAM,CAAC;QACN,qDAAqD;QACrD,qEAAqE;QACrE,qGAAqG;QACrG,6DAA6D;QAC7D,kFAAkF;QAClF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/C,OAAO,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,0BAA0B,EAAE,cAAc,CAAC,CAAC,CAAA;IAC9E,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAGpD,CAAA;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Process utilities for signal handling and exit
3
+ * Extracted to separate module for testability
4
+ */
5
+ export interface ProcessUtils {
6
+ exit(code: number): void;
7
+ onSignal(signal: NodeJS.Signals, handler: () => void): void;
8
+ }
9
+ export declare const processUtils: ProcessUtils;
10
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../../../src/utils/process.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAAA;CAC5D;AAED,eAAO,MAAM,YAAY,EAAE,YAQ1B,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../../../src/utils/process.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,CAAC,IAAY;QACf,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC;IAED,QAAQ,CAAC,MAAsB,EAAE,OAAmB;QAClD,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7B,CAAC;CACF,CAAA"}
@@ -0,0 +1,313 @@
1
+ import { AddressInfo, Server } from 'node:net';
2
+ import { jest } from '@jest/globals';
3
+ import type { Transport, DeviceDriver } from '@ya-modbus/driver-types';
4
+ import { TransportManager } from '@ya-modbus/transport';
5
+ import Aedes from 'aedes';
6
+ import { DriverLoader } from '../driver-loader.js';
7
+ import type { MessageHandler, MqttBridge, MqttBridgeConfig, PublishOptions, SubscribeOptions } from '../types.js';
8
+ export interface TestBroker {
9
+ address: AddressInfo;
10
+ url: string;
11
+ port: number;
12
+ broker: Aedes;
13
+ server: Server;
14
+ close: () => Promise<void>;
15
+ }
16
+ /**
17
+ * Race a promise against a timeout, properly cleaning up the timer
18
+ *
19
+ * This ensures Jest can exit cleanly by clearing the timeout when the promise settles.
20
+ * Always use this instead of bare Promise.race with setTimeout.
21
+ *
22
+ * @param promise - The promise to race
23
+ * @param timeoutMs - Timeout in milliseconds
24
+ * @param errorMessage - Error message if timeout occurs, or a function that returns the message
25
+ * @returns Promise that resolves/rejects with the first settled result
26
+ *
27
+ * @example
28
+ * // With static message
29
+ * await withTimeout(
30
+ * clientReadyPromise,
31
+ * 5000,
32
+ * 'Client ready timeout'
33
+ * )
34
+ *
35
+ * @example
36
+ * // With dynamic message (evaluated when timeout occurs)
37
+ * await withTimeout(
38
+ * disconnectPromise,
39
+ * 5000,
40
+ * () => `Still connected: ${broker.connectedClients}`
41
+ * )
42
+ */
43
+ export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number, errorMessage: string | (() => string)): Promise<T>;
44
+ /**
45
+ * Wait for all MQTT clients to disconnect from a test broker
46
+ *
47
+ * @param broker - The test broker to monitor
48
+ * @param timeoutMs - Maximum time to wait in milliseconds (default: 5000)
49
+ * @returns Promise that resolves when all clients disconnect or rejects on timeout
50
+ *
51
+ * @example
52
+ * await waitForAllClientsToDisconnect(broker, 5000)
53
+ */
54
+ export declare function waitForAllClientsToDisconnect(broker: TestBroker, timeoutMs?: number): Promise<void>;
55
+ /**
56
+ * Wait for a client to be ready
57
+ *
58
+ * @param broker - The test broker to monitor
59
+ * @param timeoutMs - Maximum time to wait in milliseconds (default: 2000)
60
+ * @returns Promise that resolves when a client is ready or rejects on timeout
61
+ *
62
+ * @example
63
+ * await waitForClientReady(broker)
64
+ */
65
+ export declare function waitForClientReady(broker: TestBroker, timeoutMs?: number): Promise<void>;
66
+ /**
67
+ * Wait for a client to disconnect
68
+ *
69
+ * @param broker - The test broker to monitor
70
+ * @param timeoutMs - Maximum time to wait in milliseconds (default: 2000)
71
+ * @returns Promise that resolves when a client disconnects or rejects on timeout
72
+ *
73
+ * @example
74
+ * await waitForClientDisconnect(broker)
75
+ */
76
+ export declare function waitForClientDisconnect(broker: TestBroker, timeoutMs?: number): Promise<void>;
77
+ /**
78
+ * Wait for a publish event on the broker
79
+ *
80
+ * @param broker - The test broker to monitor
81
+ * @param topicPattern - Optional topic to match (supports wildcards)
82
+ * @param timeoutMs - Maximum time to wait in milliseconds (default: 1000)
83
+ * @returns Promise that resolves with the published packet or rejects on timeout
84
+ *
85
+ * @example
86
+ * const packet = await waitForPublish(broker, 'test/topic')
87
+ */
88
+ export declare function waitForPublish(broker: TestBroker, topicPattern?: string, timeoutMs?: number): Promise<{
89
+ topic: string;
90
+ payload: Buffer;
91
+ }>;
92
+ /**
93
+ * Wait for a subscribe event on the broker
94
+ *
95
+ * @param broker - The test broker to monitor
96
+ * @param topicPattern - Optional topic to match
97
+ * @param timeoutMs - Maximum time to wait in milliseconds (default: 1000)
98
+ * @returns Promise that resolves with subscriptions or rejects on timeout
99
+ *
100
+ * @example
101
+ * await waitForSubscribe(broker, 'test/topic')
102
+ */
103
+ export declare function waitForSubscribe(broker: TestBroker, topicPattern?: string, timeoutMs?: number): Promise<Array<{
104
+ topic: string;
105
+ }>>;
106
+ /**
107
+ * Wait for an unsubscribe event on the broker
108
+ *
109
+ * @param broker - The test broker to monitor
110
+ * @param topicPattern - Optional topic to match
111
+ * @param timeoutMs - Maximum time to wait in milliseconds (default: 1000)
112
+ * @returns Promise that resolves with unsubscriptions or rejects on timeout
113
+ *
114
+ * @example
115
+ * await waitForUnsubscribe(broker, 'test/topic')
116
+ */
117
+ export declare function waitForUnsubscribe(broker: TestBroker, topicPattern?: string, timeoutMs?: number): Promise<Array<string>>;
118
+ /**
119
+ * Create a test bridge configuration with optional overrides
120
+ *
121
+ * @param broker - The test broker to connect to
122
+ * @param overrides - Optional configuration overrides
123
+ * @returns Bridge configuration for testing
124
+ *
125
+ * @example
126
+ * const config = createTestBridgeConfig(broker, { topicPrefix: 'custom' })
127
+ */
128
+ export declare function createTestBridgeConfig(broker: TestBroker, overrides?: Partial<MqttBridgeConfig>): MqttBridgeConfig;
129
+ /**
130
+ * Subscribe to a topic and wait for the subscription to be registered with the broker
131
+ *
132
+ * @param bridge - The MQTT bridge instance
133
+ * @param broker - The test broker to monitor
134
+ * @param topic - Topic to subscribe to (without prefix)
135
+ * @param handler - Message handler function
136
+ * @param options - Subscribe options and topic prefix
137
+ * @returns Promise that resolves when subscription is registered
138
+ *
139
+ * @example
140
+ * await subscribeAndWait(bridge, broker, 'test/topic', (msg) => { ... })
141
+ */
142
+ export declare function subscribeAndWait(bridge: MqttBridge, broker: TestBroker, topic: string, handler: MessageHandler, options?: SubscribeOptions & {
143
+ prefix?: string;
144
+ }): Promise<void>;
145
+ /**
146
+ * Publish a message and wait for it to be published to the broker
147
+ *
148
+ * @param bridge - The MQTT bridge instance
149
+ * @param broker - The test broker to monitor
150
+ * @param topic - Topic to publish to (without prefix)
151
+ * @param message - Message payload
152
+ * @param options - Publish options and topic prefix
153
+ * @returns Promise that resolves when message is published
154
+ *
155
+ * @example
156
+ * await publishAndWait(bridge, broker, 'test/topic', 'Hello', { qos: 1 })
157
+ */
158
+ export declare function publishAndWait(bridge: MqttBridge, broker: TestBroker, topic: string, message: string | Buffer, options?: PublishOptions & {
159
+ prefix?: string;
160
+ }): Promise<void>;
161
+ /**
162
+ * Message collector for capturing messages in tests
163
+ */
164
+ export interface MessageCollector {
165
+ messages: string[];
166
+ handler: MessageHandler;
167
+ clear: () => void;
168
+ }
169
+ /**
170
+ * Create a message collector for capturing messages in tests
171
+ *
172
+ * @returns Message collector with handler and utilities
173
+ *
174
+ * @example
175
+ * const collector = createMessageCollector()
176
+ * await bridge.subscribe('test/topic', collector.handler)
177
+ * expect(collector.messages).toContain('Expected message')
178
+ */
179
+ export declare function createMessageCollector(): MessageCollector;
180
+ /**
181
+ * Execute a test function with a running bridge, ensuring proper cleanup
182
+ *
183
+ * Automatically starts the bridge before the test and stops it after,
184
+ * even if the test throws an error. This eliminates boilerplate and
185
+ * ensures resources are properly cleaned up.
186
+ *
187
+ * @param config - Bridge configuration
188
+ * @param testFn - Test function to execute with the running bridge (can be sync or async)
189
+ * @returns Promise that resolves when test completes and bridge is stopped
190
+ *
191
+ * @example
192
+ * await withBridge(createTestBridgeConfig(broker), async (bridge) => {
193
+ * const status = bridge.getStatus()
194
+ * expect(status.state).toBe('running')
195
+ * })
196
+ */
197
+ export declare function withBridge(config: MqttBridgeConfig, testFn: (bridge: MqttBridge) => Promise<void> | void): Promise<void>;
198
+ /**
199
+ * Execute a test function with a running bridge using mock driver DI
200
+ *
201
+ * Automatically sets up the bridge with injected mocks, starts it before the test,
202
+ * and stops it after. This eliminates boilerplate for tests that need to verify
203
+ * driver lifecycle with dependency injection.
204
+ *
205
+ * @param broker - The test broker to connect to
206
+ * @param testFn - Test function with bridge and mocks
207
+ * @param overrides - Optional configuration overrides
208
+ * @returns Promise that resolves when test completes and bridge is stopped
209
+ *
210
+ * @example
211
+ * await withBridgeAndMockDriver(broker, async (bridge, mocks) => {
212
+ * await bridge.addDevice({ deviceId: 'test', driver: 'mock', connection: {...} })
213
+ * expect(mocks.mockDriver.initialize).toHaveBeenCalled()
214
+ * })
215
+ */
216
+ export declare function withBridgeAndMockDriver(broker: TestBroker, testFn: (bridge: MqttBridge, mocks: {
217
+ mockDriver: jest.Mocked<DeviceDriver>;
218
+ mockTransport: jest.Mocked<Transport>;
219
+ mockLoadDriverFn: jest.Mock;
220
+ mockTransportManager: jest.Mocked<TransportManager>;
221
+ }) => Promise<void> | void, overrides?: Partial<MqttBridgeConfig>): Promise<void>;
222
+ /**
223
+ * Start an Aedes MQTT broker on a dynamic port for testing
224
+ */
225
+ export declare function startTestBroker(options?: {
226
+ port?: number;
227
+ }): Promise<TestBroker>;
228
+ /**
229
+ * Create a mock transport for testing
230
+ *
231
+ * Returns a transport mock that implements the Transport interface
232
+ * with jest.fn() for all methods, allowing verification of calls.
233
+ *
234
+ * @returns Mock transport with trackable method calls
235
+ *
236
+ * @example
237
+ * const mockTransport = createMockTransport()
238
+ * mockTransport.readHoldingRegisters.mockResolvedValue([1, 2, 3])
239
+ */
240
+ export declare function createMockTransport(): jest.Mocked<Transport>;
241
+ /**
242
+ * Create a mock TransportManager for testing
243
+ *
244
+ * Returns a TransportManager mock that implements the TransportManager interface
245
+ * with jest.fn() for all methods, allowing verification of calls.
246
+ *
247
+ * @returns Mock TransportManager with trackable method calls
248
+ *
249
+ * @example
250
+ * const mockTransportManager = createMockTransportManager()
251
+ * const loader = new DriverLoader(mockLoadDriver, mockTransportManager)
252
+ */
253
+ export declare function createMockTransportManager(): jest.Mocked<TransportManager>;
254
+ /**
255
+ * Create a mock driver for testing
256
+ *
257
+ * Returns a mock driver that implements the DeviceDriver interface
258
+ * with jest.fn() for all methods, allowing verification of calls.
259
+ *
260
+ * @param overrides - Optional property overrides
261
+ * @returns Mock driver with trackable method calls
262
+ *
263
+ * @example
264
+ * const mockDriver = createMockDriver({
265
+ * dataPoints: [{ id: 'voltage', name: 'Voltage', type: 'number', unit: 'V' }]
266
+ * })
267
+ * mockDriver.readDataPoints.mockResolvedValue({ voltage: 230 })
268
+ */
269
+ export declare function createMockDriver(overrides?: {
270
+ name?: string;
271
+ manufacturer?: string;
272
+ model?: string;
273
+ dataPoints?: Array<{
274
+ id: string;
275
+ name: string;
276
+ type: string;
277
+ unit?: string;
278
+ }>;
279
+ }): jest.Mocked<DeviceDriver>;
280
+ /**
281
+ * Create a test bridge configuration with mock driver injection
282
+ *
283
+ * This configures the bridge with dependency injection for testing,
284
+ * allowing integration tests to verify driver lifecycle without
285
+ * loading real driver packages.
286
+ *
287
+ * **Note**: Returns fresh mock instances on each call. Mock state does
288
+ * not persist between invocations. Each test gets independent mocks.
289
+ *
290
+ * @param broker - The test broker to connect to
291
+ * @param overrides - Optional configuration overrides
292
+ * @returns Object with bridge config and driver loader
293
+ *
294
+ * @example
295
+ * const { config, driverLoader, mockDriver } = createTestBridgeWithMockDriver(broker)
296
+ * const bridge = createBridge(config, { driverLoader })
297
+ * await bridge.addDevice({
298
+ * deviceId: 'test-device',
299
+ * driver: 'ya-modbus-driver-test',
300
+ * connection: { type: 'tcp', host: 'localhost', port: 502, slaveId: 1 },
301
+ * })
302
+ * // Verify driver lifecycle with injected mocks
303
+ * expect(mockDriver.initialize).toHaveBeenCalled()
304
+ */
305
+ export declare function createTestBridgeWithMockDriver(broker: TestBroker, overrides?: Partial<MqttBridgeConfig>): {
306
+ config: MqttBridgeConfig;
307
+ driverLoader: DriverLoader;
308
+ mockDriver: jest.Mocked<DeviceDriver>;
309
+ mockTransport: jest.Mocked<Transport>;
310
+ mockLoadDriverFn: jest.Mock;
311
+ mockTransportManager: jest.Mocked<TransportManager>;
312
+ };
313
+ //# sourceMappingURL=test-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../../../src/utils/test-utils.ts"],"names":[],"mappings":"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"}