@panguard-ai/core 0.1.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 (233) hide show
  1. package/dist/adapters/adapter-registry.d.ts +150 -0
  2. package/dist/adapters/adapter-registry.d.ts.map +1 -0
  3. package/dist/adapters/adapter-registry.js +271 -0
  4. package/dist/adapters/adapter-registry.js.map +1 -0
  5. package/dist/adapters/base-adapter.d.ts +101 -0
  6. package/dist/adapters/base-adapter.d.ts.map +1 -0
  7. package/dist/adapters/base-adapter.js +160 -0
  8. package/dist/adapters/base-adapter.js.map +1 -0
  9. package/dist/adapters/defender-adapter.d.ts +90 -0
  10. package/dist/adapters/defender-adapter.d.ts.map +1 -0
  11. package/dist/adapters/defender-adapter.js +227 -0
  12. package/dist/adapters/defender-adapter.js.map +1 -0
  13. package/dist/adapters/index.d.ts +22 -0
  14. package/dist/adapters/index.d.ts.map +1 -0
  15. package/dist/adapters/index.js +23 -0
  16. package/dist/adapters/index.js.map +1 -0
  17. package/dist/adapters/syslog-adapter.d.ts +207 -0
  18. package/dist/adapters/syslog-adapter.d.ts.map +1 -0
  19. package/dist/adapters/syslog-adapter.js +432 -0
  20. package/dist/adapters/syslog-adapter.js.map +1 -0
  21. package/dist/adapters/types.d.ts +135 -0
  22. package/dist/adapters/types.d.ts.map +1 -0
  23. package/dist/adapters/types.js +13 -0
  24. package/dist/adapters/types.js.map +1 -0
  25. package/dist/adapters/wazuh-adapter.d.ts +120 -0
  26. package/dist/adapters/wazuh-adapter.d.ts.map +1 -0
  27. package/dist/adapters/wazuh-adapter.js +266 -0
  28. package/dist/adapters/wazuh-adapter.js.map +1 -0
  29. package/dist/ai/claude-provider.d.ts +66 -0
  30. package/dist/ai/claude-provider.d.ts.map +1 -0
  31. package/dist/ai/claude-provider.js +166 -0
  32. package/dist/ai/claude-provider.js.map +1 -0
  33. package/dist/ai/funnel-router.d.ts +75 -0
  34. package/dist/ai/funnel-router.d.ts.map +1 -0
  35. package/dist/ai/funnel-router.js +173 -0
  36. package/dist/ai/funnel-router.js.map +1 -0
  37. package/dist/ai/index.d.ts +77 -0
  38. package/dist/ai/index.d.ts.map +1 -0
  39. package/dist/ai/index.js +95 -0
  40. package/dist/ai/index.js.map +1 -0
  41. package/dist/ai/ollama-provider.d.ts +73 -0
  42. package/dist/ai/ollama-provider.d.ts.map +1 -0
  43. package/dist/ai/ollama-provider.js +200 -0
  44. package/dist/ai/ollama-provider.js.map +1 -0
  45. package/dist/ai/openai-provider.d.ts +70 -0
  46. package/dist/ai/openai-provider.d.ts.map +1 -0
  47. package/dist/ai/openai-provider.js +175 -0
  48. package/dist/ai/openai-provider.js.map +1 -0
  49. package/dist/ai/prompts/event-classifier.d.ts +25 -0
  50. package/dist/ai/prompts/event-classifier.d.ts.map +1 -0
  51. package/dist/ai/prompts/event-classifier.js +94 -0
  52. package/dist/ai/prompts/event-classifier.js.map +1 -0
  53. package/dist/ai/prompts/index.d.ts +13 -0
  54. package/dist/ai/prompts/index.d.ts.map +1 -0
  55. package/dist/ai/prompts/index.js +13 -0
  56. package/dist/ai/prompts/index.js.map +1 -0
  57. package/dist/ai/prompts/report-generator.d.ts +25 -0
  58. package/dist/ai/prompts/report-generator.d.ts.map +1 -0
  59. package/dist/ai/prompts/report-generator.js +131 -0
  60. package/dist/ai/prompts/report-generator.js.map +1 -0
  61. package/dist/ai/prompts/threat-analyzer.d.ts +26 -0
  62. package/dist/ai/prompts/threat-analyzer.d.ts.map +1 -0
  63. package/dist/ai/prompts/threat-analyzer.js +75 -0
  64. package/dist/ai/prompts/threat-analyzer.js.map +1 -0
  65. package/dist/ai/provider-base.d.ts +100 -0
  66. package/dist/ai/provider-base.d.ts.map +1 -0
  67. package/dist/ai/provider-base.js +166 -0
  68. package/dist/ai/provider-base.js.map +1 -0
  69. package/dist/ai/response-parser.d.ts +36 -0
  70. package/dist/ai/response-parser.d.ts.map +1 -0
  71. package/dist/ai/response-parser.js +195 -0
  72. package/dist/ai/response-parser.js.map +1 -0
  73. package/dist/ai/token-tracker.d.ts +72 -0
  74. package/dist/ai/token-tracker.d.ts.map +1 -0
  75. package/dist/ai/token-tracker.js +145 -0
  76. package/dist/ai/token-tracker.js.map +1 -0
  77. package/dist/ai/types.d.ts +138 -0
  78. package/dist/ai/types.d.ts.map +1 -0
  79. package/dist/ai/types.js +12 -0
  80. package/dist/ai/types.js.map +1 -0
  81. package/dist/cli/index.d.ts +146 -0
  82. package/dist/cli/index.d.ts.map +1 -0
  83. package/dist/cli/index.js +515 -0
  84. package/dist/cli/index.js.map +1 -0
  85. package/dist/cli/prompts.d.ts +58 -0
  86. package/dist/cli/prompts.d.ts.map +1 -0
  87. package/dist/cli/prompts.js +327 -0
  88. package/dist/cli/prompts.js.map +1 -0
  89. package/dist/cli/wizard.d.ts +58 -0
  90. package/dist/cli/wizard.d.ts.map +1 -0
  91. package/dist/cli/wizard.js +200 -0
  92. package/dist/cli/wizard.js.map +1 -0
  93. package/dist/discovery/firewall-checker.d.ts +28 -0
  94. package/dist/discovery/firewall-checker.d.ts.map +1 -0
  95. package/dist/discovery/firewall-checker.js +379 -0
  96. package/dist/discovery/firewall-checker.js.map +1 -0
  97. package/dist/discovery/index.d.ts +23 -0
  98. package/dist/discovery/index.d.ts.map +1 -0
  99. package/dist/discovery/index.js +29 -0
  100. package/dist/discovery/index.js.map +1 -0
  101. package/dist/discovery/network-scanner.d.ts +60 -0
  102. package/dist/discovery/network-scanner.d.ts.map +1 -0
  103. package/dist/discovery/network-scanner.js +640 -0
  104. package/dist/discovery/network-scanner.js.map +1 -0
  105. package/dist/discovery/os-detector.d.ts +24 -0
  106. package/dist/discovery/os-detector.d.ts.map +1 -0
  107. package/dist/discovery/os-detector.js +253 -0
  108. package/dist/discovery/os-detector.js.map +1 -0
  109. package/dist/discovery/osquery-provider.d.ts +127 -0
  110. package/dist/discovery/osquery-provider.d.ts.map +1 -0
  111. package/dist/discovery/osquery-provider.js +214 -0
  112. package/dist/discovery/osquery-provider.js.map +1 -0
  113. package/dist/discovery/risk-scorer.d.ts +66 -0
  114. package/dist/discovery/risk-scorer.d.ts.map +1 -0
  115. package/dist/discovery/risk-scorer.js +294 -0
  116. package/dist/discovery/risk-scorer.js.map +1 -0
  117. package/dist/discovery/security-tools.d.ts +31 -0
  118. package/dist/discovery/security-tools.d.ts.map +1 -0
  119. package/dist/discovery/security-tools.js +346 -0
  120. package/dist/discovery/security-tools.js.map +1 -0
  121. package/dist/discovery/service-detector.d.ts +28 -0
  122. package/dist/discovery/service-detector.d.ts.map +1 -0
  123. package/dist/discovery/service-detector.js +300 -0
  124. package/dist/discovery/service-detector.js.map +1 -0
  125. package/dist/discovery/types.d.ts +502 -0
  126. package/dist/discovery/types.d.ts.map +1 -0
  127. package/dist/discovery/types.js +12 -0
  128. package/dist/discovery/types.js.map +1 -0
  129. package/dist/discovery/user-auditor.d.ts +28 -0
  130. package/dist/discovery/user-auditor.d.ts.map +1 -0
  131. package/dist/discovery/user-auditor.js +385 -0
  132. package/dist/discovery/user-auditor.js.map +1 -0
  133. package/dist/i18n/config.d.ts +45 -0
  134. package/dist/i18n/config.d.ts.map +1 -0
  135. package/dist/i18n/config.js +135 -0
  136. package/dist/i18n/config.js.map +1 -0
  137. package/dist/i18n/index.d.ts +8 -0
  138. package/dist/i18n/index.d.ts.map +1 -0
  139. package/dist/i18n/index.js +8 -0
  140. package/dist/i18n/index.js.map +1 -0
  141. package/dist/index.d.ts +31 -0
  142. package/dist/index.d.ts.map +1 -0
  143. package/dist/index.js +31 -0
  144. package/dist/index.js.map +1 -0
  145. package/dist/monitor/event-normalizer.d.ts +102 -0
  146. package/dist/monitor/event-normalizer.d.ts.map +1 -0
  147. package/dist/monitor/event-normalizer.js +195 -0
  148. package/dist/monitor/event-normalizer.js.map +1 -0
  149. package/dist/monitor/file-monitor.d.ts +90 -0
  150. package/dist/monitor/file-monitor.d.ts.map +1 -0
  151. package/dist/monitor/file-monitor.js +222 -0
  152. package/dist/monitor/file-monitor.js.map +1 -0
  153. package/dist/monitor/index.d.ts +147 -0
  154. package/dist/monitor/index.d.ts.map +1 -0
  155. package/dist/monitor/index.js +293 -0
  156. package/dist/monitor/index.js.map +1 -0
  157. package/dist/monitor/log-monitor.d.ts +102 -0
  158. package/dist/monitor/log-monitor.d.ts.map +1 -0
  159. package/dist/monitor/log-monitor.js +245 -0
  160. package/dist/monitor/log-monitor.js.map +1 -0
  161. package/dist/monitor/network-monitor.d.ts +103 -0
  162. package/dist/monitor/network-monitor.d.ts.map +1 -0
  163. package/dist/monitor/network-monitor.js +336 -0
  164. package/dist/monitor/network-monitor.js.map +1 -0
  165. package/dist/monitor/process-monitor.d.ts +108 -0
  166. package/dist/monitor/process-monitor.d.ts.map +1 -0
  167. package/dist/monitor/process-monitor.js +245 -0
  168. package/dist/monitor/process-monitor.js.map +1 -0
  169. package/dist/monitor/threat-intel-feeds.d.ts +141 -0
  170. package/dist/monitor/threat-intel-feeds.d.ts.map +1 -0
  171. package/dist/monitor/threat-intel-feeds.js +430 -0
  172. package/dist/monitor/threat-intel-feeds.js.map +1 -0
  173. package/dist/monitor/threat-intel.d.ts +83 -0
  174. package/dist/monitor/threat-intel.d.ts.map +1 -0
  175. package/dist/monitor/threat-intel.js +215 -0
  176. package/dist/monitor/threat-intel.js.map +1 -0
  177. package/dist/monitor/types.d.ts +65 -0
  178. package/dist/monitor/types.d.ts.map +1 -0
  179. package/dist/monitor/types.js +20 -0
  180. package/dist/monitor/types.js.map +1 -0
  181. package/dist/rules/index.d.ts +115 -0
  182. package/dist/rules/index.d.ts.map +1 -0
  183. package/dist/rules/index.js +244 -0
  184. package/dist/rules/index.js.map +1 -0
  185. package/dist/rules/rule-loader.d.ts +54 -0
  186. package/dist/rules/rule-loader.d.ts.map +1 -0
  187. package/dist/rules/rule-loader.js +167 -0
  188. package/dist/rules/rule-loader.js.map +1 -0
  189. package/dist/rules/sigma-matcher.d.ts +40 -0
  190. package/dist/rules/sigma-matcher.d.ts.map +1 -0
  191. package/dist/rules/sigma-matcher.js +447 -0
  192. package/dist/rules/sigma-matcher.js.map +1 -0
  193. package/dist/rules/sigma-parser.d.ts +36 -0
  194. package/dist/rules/sigma-parser.d.ts.map +1 -0
  195. package/dist/rules/sigma-parser.js +180 -0
  196. package/dist/rules/sigma-parser.js.map +1 -0
  197. package/dist/rules/types.d.ts +112 -0
  198. package/dist/rules/types.d.ts.map +1 -0
  199. package/dist/rules/types.js +11 -0
  200. package/dist/rules/types.js.map +1 -0
  201. package/dist/rules/yara-scanner.d.ts +103 -0
  202. package/dist/rules/yara-scanner.d.ts.map +1 -0
  203. package/dist/rules/yara-scanner.js +421 -0
  204. package/dist/rules/yara-scanner.js.map +1 -0
  205. package/dist/scoring/achievements.d.ts +76 -0
  206. package/dist/scoring/achievements.d.ts.map +1 -0
  207. package/dist/scoring/achievements.js +211 -0
  208. package/dist/scoring/achievements.js.map +1 -0
  209. package/dist/scoring/index.d.ts +3 -0
  210. package/dist/scoring/index.d.ts.map +1 -0
  211. package/dist/scoring/index.js +3 -0
  212. package/dist/scoring/index.js.map +1 -0
  213. package/dist/scoring/security-score.d.ts +60 -0
  214. package/dist/scoring/security-score.d.ts.map +1 -0
  215. package/dist/scoring/security-score.js +211 -0
  216. package/dist/scoring/security-score.js.map +1 -0
  217. package/dist/types.d.ts +71 -0
  218. package/dist/types.d.ts.map +1 -0
  219. package/dist/types.js +8 -0
  220. package/dist/types.js.map +1 -0
  221. package/dist/utils/index.d.ts +10 -0
  222. package/dist/utils/index.d.ts.map +1 -0
  223. package/dist/utils/index.js +9 -0
  224. package/dist/utils/index.js.map +1 -0
  225. package/dist/utils/logger.d.ts +38 -0
  226. package/dist/utils/logger.d.ts.map +1 -0
  227. package/dist/utils/logger.js +71 -0
  228. package/dist/utils/logger.js.map +1 -0
  229. package/dist/utils/validation.d.ts +35 -0
  230. package/dist/utils/validation.d.ts.map +1 -0
  231. package/dist/utils/validation.js +56 -0
  232. package/dist/utils/validation.js.map +1 -0
  233. package/package.json +60 -0
@@ -0,0 +1,245 @@
1
+ /**
2
+ * System log monitoring via native OS log streams
3
+ * 透過原生作業系統日誌串流進行系統日誌監控
4
+ *
5
+ * Supports macOS (log stream), Linux (tail -F), and Windows (wevtutil).
6
+ * 支援 macOS (log stream)、Linux (tail -F) 和 Windows (wevtutil)。
7
+ *
8
+ * @module @panguard-ai/core/monitor/log-monitor
9
+ */
10
+ import { EventEmitter } from 'node:events';
11
+ import { spawn } from 'node:child_process';
12
+ import { platform } from 'node:os';
13
+ import { createInterface } from 'node:readline';
14
+ import { createLogger } from '../utils/index.js';
15
+ import { normalizeLogEvent } from './event-normalizer.js';
16
+ const logger = createLogger('log-monitor');
17
+ /**
18
+ * LogMonitor - monitors system logs in real-time using OS-native tools
19
+ * LogMonitor - 使用作業系統原生工具即時監控系統日誌
20
+ *
21
+ * Events emitted:
22
+ * - 'event': SecurityEvent - when a log line is captured / 當擷取到日誌行時
23
+ * - 'error': Error - when the monitoring process encounters an error / 當監控程序遇到錯誤時
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * const monitor = new LogMonitor();
28
+ * monitor.on('event', (event) => console.log(event));
29
+ * monitor.start();
30
+ * ```
31
+ */
32
+ export class LogMonitor extends EventEmitter {
33
+ /** Whether the monitor is currently running / 監控器是否正在執行 */
34
+ running = false;
35
+ /** Child process for log streaming / 用於日誌串流的子程序 */
36
+ childProcess;
37
+ /** Monitor configuration / 監控配置 */
38
+ config;
39
+ /**
40
+ * Create a new LogMonitor instance
41
+ * 建立新的 LogMonitor 實例
42
+ *
43
+ * @param config - Optional configuration / 可選配置
44
+ */
45
+ constructor(config) {
46
+ super();
47
+ this.config = config ?? {};
48
+ }
49
+ /**
50
+ * Start monitoring system logs
51
+ * 開始監控系統日誌
52
+ *
53
+ * Spawns the appropriate OS-level log monitoring process:
54
+ * 產生適當的作業系統級日誌監控程序:
55
+ * - macOS: `log stream --style json --predicate 'eventType == logEvent'`
56
+ * - Linux: `tail -F /var/log/auth.log /var/log/syslog`
57
+ * - Windows: `wevtutil qe Security /f:text /rd:true /c:1`
58
+ */
59
+ start() {
60
+ if (this.running) {
61
+ logger.warn('LogMonitor is already running');
62
+ return;
63
+ }
64
+ const os = platform();
65
+ logger.info(`Starting log monitor on platform: ${os}`);
66
+ try {
67
+ if (os === 'darwin') {
68
+ this.startMacOS();
69
+ }
70
+ else if (os === 'linux') {
71
+ this.startLinux();
72
+ }
73
+ else if (os === 'win32') {
74
+ this.startWindows();
75
+ }
76
+ else {
77
+ logger.error(`Unsupported platform: ${os}`);
78
+ this.emit('error', new Error(`Unsupported platform: ${os}`));
79
+ return;
80
+ }
81
+ this.running = true;
82
+ logger.info('LogMonitor started successfully');
83
+ }
84
+ catch (err) {
85
+ logger.error('Failed to start LogMonitor', { error: String(err) });
86
+ this.emit('error', err instanceof Error ? err : new Error(String(err)));
87
+ }
88
+ }
89
+ /**
90
+ * Stop monitoring system logs and clean up child processes
91
+ * 停止監控系統日誌並清理子程序
92
+ */
93
+ stop() {
94
+ if (!this.running) {
95
+ logger.warn('LogMonitor is not running');
96
+ return;
97
+ }
98
+ if (this.childProcess) {
99
+ this.childProcess.removeAllListeners();
100
+ if (this.childProcess.stdout) {
101
+ this.childProcess.stdout.removeAllListeners();
102
+ }
103
+ if (this.childProcess.stderr) {
104
+ this.childProcess.stderr.removeAllListeners();
105
+ }
106
+ this.childProcess.kill('SIGTERM');
107
+ // Force kill after 3 seconds if still alive
108
+ // 如果仍在執行,3 秒後強制終止
109
+ const forceKillTimeout = setTimeout(() => {
110
+ if (this.childProcess && !this.childProcess.killed) {
111
+ this.childProcess.kill('SIGKILL');
112
+ }
113
+ }, 3000);
114
+ this.childProcess.once('exit', () => {
115
+ clearTimeout(forceKillTimeout);
116
+ });
117
+ this.childProcess = undefined;
118
+ }
119
+ this.running = false;
120
+ logger.info('LogMonitor stopped');
121
+ }
122
+ /**
123
+ * Check if the monitor is currently running
124
+ * 檢查監控器是否正在執行
125
+ *
126
+ * @returns True if running / 如果正在執行則為 true
127
+ */
128
+ isRunning() {
129
+ return this.running;
130
+ }
131
+ /**
132
+ * Start macOS log stream monitoring
133
+ * 啟動 macOS 日誌串流監控
134
+ */
135
+ startMacOS() {
136
+ this.childProcess = spawn('log', [
137
+ 'stream',
138
+ '--style',
139
+ 'json',
140
+ '--predicate',
141
+ 'eventType == logEvent',
142
+ ]);
143
+ this.attachProcessHandlers('macOS-log-stream');
144
+ this.parseOutputStream((line) => {
145
+ // macOS log stream JSON output: try to parse each line
146
+ // macOS 日誌串流 JSON 輸出:嘗試解析每一行
147
+ try {
148
+ const parsed = JSON.parse(line);
149
+ const message = typeof parsed['eventMessage'] === 'string' ? parsed['eventMessage'] : line;
150
+ const source = typeof parsed['senderImagePath'] === 'string' ? parsed['senderImagePath'] : 'macOS';
151
+ const timestamp = typeof parsed['timestamp'] === 'string' ? new Date(parsed['timestamp']) : new Date();
152
+ const event = normalizeLogEvent({ message, source, timestamp });
153
+ this.emit('event', event);
154
+ }
155
+ catch {
156
+ // Non-JSON line (e.g., header line), treat as plain text
157
+ // 非 JSON 行(例如標頭行),視為純文字處理
158
+ if (line.trim().length > 0 && !line.startsWith('Filtering')) {
159
+ const event = normalizeLogEvent({
160
+ message: line,
161
+ source: 'macOS-log-stream',
162
+ });
163
+ this.emit('event', event);
164
+ }
165
+ }
166
+ });
167
+ }
168
+ /**
169
+ * Start Linux log tail monitoring
170
+ * 啟動 Linux 日誌尾部監控
171
+ */
172
+ startLinux() {
173
+ const logPaths = this.config.logPaths ?? ['/var/log/auth.log', '/var/log/syslog'];
174
+ this.childProcess = spawn('tail', ['-F', ...logPaths]);
175
+ this.attachProcessHandlers('linux-tail');
176
+ this.parseOutputStream((line) => {
177
+ if (line.trim().length > 0) {
178
+ const event = normalizeLogEvent({
179
+ message: line,
180
+ source: 'syslog',
181
+ });
182
+ this.emit('event', event);
183
+ }
184
+ });
185
+ }
186
+ /**
187
+ * Start Windows event log monitoring
188
+ * 啟動 Windows 事件日誌監控
189
+ */
190
+ startWindows() {
191
+ this.childProcess = spawn('wevtutil', ['qe', 'Security', '/f:text', '/rd:true', '/c:1']);
192
+ this.attachProcessHandlers('windows-wevtutil');
193
+ this.parseOutputStream((line) => {
194
+ if (line.trim().length > 0) {
195
+ const event = normalizeLogEvent({
196
+ message: line,
197
+ source: 'windows-event',
198
+ });
199
+ this.emit('event', event);
200
+ }
201
+ });
202
+ }
203
+ /**
204
+ * Attach error and exit handlers to the child process
205
+ * 將錯誤和退出處理器附加到子程序
206
+ *
207
+ * @param label - Label for logging / 用於日誌記錄的標籤
208
+ */
209
+ attachProcessHandlers(label) {
210
+ if (!this.childProcess)
211
+ return;
212
+ this.childProcess.on('error', (err) => {
213
+ logger.error(`${label} process error: ${err.message}`);
214
+ this.running = false;
215
+ this.emit('error', err);
216
+ });
217
+ this.childProcess.on('exit', (code, signal) => {
218
+ logger.info(`${label} process exited`, { code, signal });
219
+ if (this.running) {
220
+ // Unexpected exit / 意外退出
221
+ this.running = false;
222
+ this.emit('error', new Error(`${label} process exited unexpectedly (code: ${code}, signal: ${signal})`));
223
+ }
224
+ });
225
+ }
226
+ /**
227
+ * Parse stdout from the child process line by line
228
+ * 逐行解析子程序的標準輸出
229
+ *
230
+ * @param handler - Callback for each line / 每行的回呼函式
231
+ */
232
+ parseOutputStream(handler) {
233
+ if (!this.childProcess?.stdout)
234
+ return;
235
+ const rl = createInterface({
236
+ input: this.childProcess.stdout,
237
+ crlfDelay: Infinity,
238
+ });
239
+ rl.on('line', handler);
240
+ rl.on('error', (err) => {
241
+ logger.error(`Readline error: ${err.message}`);
242
+ });
243
+ }
244
+ }
245
+ //# sourceMappingURL=log-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-monitor.js","sourceRoot":"","sources":["../../src/monitor/log-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Network connection monitoring via polling
3
+ * 透過輪詢進行網路連線監控
4
+ *
5
+ * Periodically polls active network connections and emits events
6
+ * for newly established or closed connections.
7
+ * 定期輪詢活躍網路連線,並為新建立或關閉的連線發出事件。
8
+ *
9
+ * @module @panguard-ai/core/monitor/network-monitor
10
+ */
11
+ import { EventEmitter } from 'node:events';
12
+ import type { ActiveConnection } from '../discovery/types.js';
13
+ /**
14
+ * NetworkMonitor - monitors active network connections by polling OS tools
15
+ * NetworkMonitor - 透過輪詢作業系統工具監控活躍網路連線
16
+ *
17
+ * Events emitted:
18
+ * - 'new_connection': SecurityEvent - when a new connection is detected / 當偵測到新連線時
19
+ * - 'closed_connection': SecurityEvent - when a connection is closed / 當連線關閉時
20
+ * - 'error': Error - when polling encounters an error / 當輪詢遇到錯誤時
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const monitor = new NetworkMonitor(30000);
25
+ * monitor.on('new_connection', (event) => console.log('New:', event));
26
+ * monitor.on('closed_connection', (event) => console.log('Closed:', event));
27
+ * monitor.start();
28
+ * ```
29
+ */
30
+ export declare class NetworkMonitor extends EventEmitter {
31
+ /** Whether the monitor is currently running / 監控器是否正在執行 */
32
+ private running;
33
+ /** Polling timer / 輪詢計時器 */
34
+ private timer?;
35
+ /** Previous connection snapshot for diff detection / 用於差異偵測的先前連線快照 */
36
+ private previousConnections;
37
+ /** Polling interval in milliseconds / 輪詢間隔(毫秒) */
38
+ private pollInterval;
39
+ /**
40
+ * Create a new NetworkMonitor instance
41
+ * 建立新的 NetworkMonitor 實例
42
+ *
43
+ * @param pollInterval - Polling interval in ms (default 30000) / 輪詢間隔毫秒數(預設 30000)
44
+ */
45
+ constructor(pollInterval?: number);
46
+ /**
47
+ * Start polling for network connections
48
+ * 開始輪詢網路連線
49
+ */
50
+ start(): void;
51
+ /**
52
+ * Stop polling and clean up
53
+ * 停止輪詢並清理
54
+ */
55
+ stop(): void;
56
+ /**
57
+ * Check if the monitor is currently running
58
+ * 檢查監控器是否正在執行
59
+ *
60
+ * @returns True if running / 如果正在執行則為 true
61
+ */
62
+ isRunning(): boolean;
63
+ /**
64
+ * Poll current connections and emit events for changes
65
+ * 輪詢目前連線並為變更發出事件
66
+ */
67
+ private pollConnections;
68
+ /**
69
+ * Get current active network connections from the OS
70
+ * 從作業系統取得目前活躍的網路連線
71
+ *
72
+ * Uses platform-specific tools:
73
+ * 使用平台特定工具:
74
+ * - macOS: `lsof -i -P -n`
75
+ * - Linux: `ss -tnp`
76
+ * - Windows: `netstat -an`
77
+ *
78
+ * @returns Array of active connections / 活躍連線陣列
79
+ */
80
+ getCurrentConnections(): Promise<ActiveConnection[]>;
81
+ /**
82
+ * Parse macOS lsof output into ActiveConnection array
83
+ * 將 macOS lsof 輸出解析為 ActiveConnection 陣列
84
+ *
85
+ * @returns Parsed connections / 解析後的連線
86
+ */
87
+ private parseLsof;
88
+ /**
89
+ * Parse Linux ss output into ActiveConnection array
90
+ * 將 Linux ss 輸出解析為 ActiveConnection 陣列
91
+ *
92
+ * @returns Parsed connections / 解析後的連線
93
+ */
94
+ private parseSs;
95
+ /**
96
+ * Parse Windows netstat output into ActiveConnection array
97
+ * 將 Windows netstat 輸出解析為 ActiveConnection 陣列
98
+ *
99
+ * @returns Parsed connections / 解析後的連線
100
+ */
101
+ private parseNetstat;
102
+ }
103
+ //# sourceMappingURL=network-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-monitor.d.ts","sourceRoot":"","sources":["../../src/monitor/network-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAO3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAgB9D;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,2DAA2D;IAC3D,OAAO,CAAC,OAAO,CAAS;IACxB,4BAA4B;IAC5B,OAAO,CAAC,KAAK,CAAC,CAAiC;IAC/C,sEAAsE;IACtE,OAAO,CAAC,mBAAmB,CAA4C;IACvE,kDAAkD;IAClD,OAAO,CAAC,YAAY,CAAS;IAE7B;;;;;OAKG;gBACS,YAAY,SAAQ;IAKhC;;;OAGG;IACH,KAAK,IAAI,IAAI;IAiBb;;;OAGG;IACH,IAAI,IAAI,IAAI;IAgBZ;;;;;OAKG;IACH,SAAS,IAAI,OAAO;IAIpB;;;OAGG;YACW,eAAe;IA+C7B;;;;;;;;;;;OAWG;IACG,qBAAqB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAoB1D;;;;;OAKG;YACW,SAAS;IAyDvB;;;;;OAKG;YACW,OAAO;IAmDrB;;;;;OAKG;YACW,YAAY;CAsC3B"}