@vforsh/argus-watcher 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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/cdp/watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { LogEvent, WatcherChrome, WatcherMatch } from '@vforsh/argus-core';
2
+ type PageInfo = {
3
+ url: string;
4
+ title: string | null;
5
+ };
6
+ export type WatcherFileLoggerOptions = {
7
+ watcherId: string;
8
+ startedAt: number;
9
+ logsDir: string;
10
+ chrome: WatcherChrome;
11
+ match?: WatcherMatch;
12
+ maxFiles: number;
13
+ };
14
+ export declare class WatcherFileLogger {
15
+ private readonly watcherId;
16
+ private readonly startedAt;
17
+ private readonly startedAtIso;
18
+ private readonly logsDir;
19
+ private readonly chrome;
20
+ private readonly match?;
21
+ private readonly maxFiles;
22
+ private currentStream;
23
+ private writePromise;
24
+ private fileIndex;
25
+ private needsNewFile;
26
+ private hasCreatedFile;
27
+ private currentPageUrl;
28
+ private currentPageTitle;
29
+ private closed;
30
+ private failed;
31
+ constructor(options: WatcherFileLoggerOptions);
32
+ writeEvent(event: Omit<LogEvent, 'id'>): void;
33
+ rotate(info: PageInfo): void;
34
+ close(): Promise<void>;
35
+ private ensureStream;
36
+ private buildFilename;
37
+ private closeCurrentStream;
38
+ private writeToStream;
39
+ private enqueue;
40
+ private enqueueGuarded;
41
+ private handleError;
42
+ private pruneOldFiles;
43
+ }
44
+ export {};
45
+ //# sourceMappingURL=WatcherFileLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WatcherFileLogger.d.ts","sourceRoot":"","sources":["../../src/fileLogs/WatcherFileLogger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAE/E,KAAK,QAAQ,GAAG;IACf,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,YAAY,CAAO;IAC3B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,MAAM,CAAQ;gBAEV,OAAO,EAAE,wBAAwB;IAU7C,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,IAAI;IAkB7C,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAe5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAWR,YAAY;IA0B1B,OAAO,CAAC,aAAa;YAIP,kBAAkB;YAWlB,aAAa;IAe3B,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,WAAW;YAQL,aAAa;CA6B3B"}
@@ -0,0 +1,228 @@
1
+ import fs from 'node:fs';
2
+ import fsPromises from 'node:fs/promises';
3
+ import path from 'node:path';
4
+ export class WatcherFileLogger {
5
+ watcherId;
6
+ startedAt;
7
+ startedAtIso;
8
+ logsDir;
9
+ chrome;
10
+ match;
11
+ maxFiles;
12
+ currentStream = null;
13
+ writePromise = Promise.resolve();
14
+ fileIndex = 1;
15
+ needsNewFile = true;
16
+ hasCreatedFile = false;
17
+ currentPageUrl = null;
18
+ currentPageTitle = null;
19
+ closed = false;
20
+ failed = false;
21
+ constructor(options) {
22
+ this.watcherId = options.watcherId;
23
+ this.startedAt = options.startedAt;
24
+ this.startedAtIso = toSafeTimestamp(options.startedAt);
25
+ this.logsDir = options.logsDir;
26
+ this.chrome = options.chrome;
27
+ this.match = options.match;
28
+ this.maxFiles = options.maxFiles;
29
+ }
30
+ writeEvent(event) {
31
+ if (this.closed || this.failed) {
32
+ return;
33
+ }
34
+ this.enqueueGuarded(async () => {
35
+ const previousPageUrl = this.currentPageUrl;
36
+ if (!this.currentPageUrl && event.pageUrl) {
37
+ this.currentPageUrl = event.pageUrl;
38
+ }
39
+ if (!this.currentPageTitle && event.pageTitle) {
40
+ this.currentPageTitle = event.pageTitle;
41
+ }
42
+ await this.ensureStream();
43
+ const line = formatLogLine(event, previousPageUrl);
44
+ await this.writeToStream(line);
45
+ });
46
+ }
47
+ rotate(info) {
48
+ if (this.closed || this.failed) {
49
+ return;
50
+ }
51
+ this.enqueueGuarded(async () => {
52
+ this.currentPageUrl = info.url;
53
+ this.currentPageTitle = info.title ?? null;
54
+ if (this.hasCreatedFile) {
55
+ this.fileIndex += 1;
56
+ }
57
+ this.needsNewFile = true;
58
+ await this.closeCurrentStream();
59
+ });
60
+ }
61
+ close() {
62
+ if (this.closed) {
63
+ return this.writePromise;
64
+ }
65
+ this.closed = true;
66
+ this.enqueue(async () => {
67
+ await this.closeCurrentStream();
68
+ });
69
+ return this.writePromise;
70
+ }
71
+ async ensureStream() {
72
+ if (this.currentStream && !this.needsNewFile) {
73
+ return;
74
+ }
75
+ await fsPromises.mkdir(this.logsDir, { recursive: true });
76
+ const filePath = path.join(this.logsDir, this.buildFilename());
77
+ const stream = fs.createWriteStream(filePath, { flags: 'a' });
78
+ stream.on('error', (error) => this.handleError(error));
79
+ this.currentStream = stream;
80
+ this.needsNewFile = false;
81
+ this.hasCreatedFile = true;
82
+ const header = renderHeader({
83
+ watcherId: this.watcherId,
84
+ startedAt: this.startedAt,
85
+ chrome: this.chrome,
86
+ match: this.match,
87
+ pageUrl: this.currentPageUrl,
88
+ pageTitle: this.currentPageTitle,
89
+ });
90
+ await this.writeToStream(header);
91
+ await this.pruneOldFiles();
92
+ }
93
+ buildFilename() {
94
+ return `watcher-${this.watcherId}-${this.startedAtIso}-${this.fileIndex}.log`;
95
+ }
96
+ async closeCurrentStream() {
97
+ if (!this.currentStream) {
98
+ return;
99
+ }
100
+ const stream = this.currentStream;
101
+ this.currentStream = null;
102
+ await new Promise((resolve) => {
103
+ stream.end(() => resolve());
104
+ });
105
+ }
106
+ async writeToStream(contents) {
107
+ if (!this.currentStream) {
108
+ return;
109
+ }
110
+ await new Promise((resolve, reject) => {
111
+ this.currentStream?.write(contents, (error) => {
112
+ if (error) {
113
+ reject(error);
114
+ return;
115
+ }
116
+ resolve();
117
+ });
118
+ });
119
+ }
120
+ enqueue(task) {
121
+ this.writePromise = this.writePromise.then(task).catch((error) => this.handleError(error));
122
+ }
123
+ enqueueGuarded(task) {
124
+ this.enqueue(async () => {
125
+ if (this.failed) {
126
+ return;
127
+ }
128
+ await task();
129
+ });
130
+ }
131
+ handleError(_error) {
132
+ this.failed = true;
133
+ if (this.currentStream) {
134
+ this.currentStream.destroy();
135
+ this.currentStream = null;
136
+ }
137
+ }
138
+ async pruneOldFiles() {
139
+ if (this.maxFiles <= 0) {
140
+ return;
141
+ }
142
+ const prefix = `watcher-${this.watcherId}-${this.startedAtIso}-`;
143
+ let entries;
144
+ try {
145
+ entries = await fsPromises.readdir(this.logsDir);
146
+ }
147
+ catch {
148
+ return;
149
+ }
150
+ const files = entries
151
+ .filter((entry) => entry.startsWith(prefix) && entry.endsWith('.log'))
152
+ .map((entry) => ({ name: entry, index: parseFileIndex(entry, prefix) }))
153
+ .filter((entry) => entry.index !== null)
154
+ .sort((a, b) => a.index - b.index);
155
+ if (files.length <= this.maxFiles) {
156
+ return;
157
+ }
158
+ const toRemove = files.slice(0, files.length - this.maxFiles);
159
+ for (const file of toRemove) {
160
+ try {
161
+ await fsPromises.rm(path.join(this.logsDir, file.name), { force: true });
162
+ }
163
+ catch {
164
+ // best-effort cleanup
165
+ }
166
+ }
167
+ }
168
+ }
169
+ const renderHeader = (context) => {
170
+ const matchText = context.match ? safeStringify(context.match) : '(none)';
171
+ const pageUrl = context.pageUrl ?? '(unknown)';
172
+ const pageTitle = context.pageTitle ?? '(unknown)';
173
+ return [
174
+ '---',
175
+ `watcherId: ${context.watcherId}`,
176
+ `startedAt: ${new Date(context.startedAt).toISOString()}`,
177
+ `chrome: ${context.chrome.host}:${context.chrome.port}`,
178
+ `match: ${matchText}`,
179
+ `pageUrl: ${pageUrl}`,
180
+ `pageTitle: ${pageTitle}`,
181
+ '---',
182
+ '',
183
+ ].join('\n');
184
+ };
185
+ const formatLogLine = (event, previousPageUrl) => {
186
+ const timestamp = new Date(event.ts).toISOString();
187
+ let line = `${timestamp} [${event.level}] ${event.text}`;
188
+ const location = formatLocation(event);
189
+ if (location) {
190
+ line += ` at ${location}`;
191
+ }
192
+ if (event.pageUrl && event.pageUrl !== previousPageUrl) {
193
+ line += ` page=${event.pageUrl}`;
194
+ }
195
+ return `${line}\n`;
196
+ };
197
+ const formatLocation = (event) => {
198
+ if (!event.file) {
199
+ return null;
200
+ }
201
+ let location = event.file;
202
+ if (event.line != null) {
203
+ location += `:${event.line}`;
204
+ if (event.column != null) {
205
+ location += `:${event.column}`;
206
+ }
207
+ }
208
+ return location;
209
+ };
210
+ const toSafeTimestamp = (ts) => new Date(ts).toISOString().replace(/:/g, '-');
211
+ const safeStringify = (value) => {
212
+ try {
213
+ return JSON.stringify(value);
214
+ }
215
+ catch {
216
+ return String(value);
217
+ }
218
+ };
219
+ const parseFileIndex = (name, prefix) => {
220
+ const suffix = name.slice(prefix.length);
221
+ const match = suffix.match(/^(\d+)\.log$/);
222
+ if (!match) {
223
+ return null;
224
+ }
225
+ const value = Number(match[1]);
226
+ return Number.isFinite(value) ? value : null;
227
+ };
228
+ //# sourceMappingURL=WatcherFileLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WatcherFileLogger.js","sourceRoot":"","sources":["../../src/fileLogs/WatcherFileLogger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { WatcherRecord } from '@vforsh/argus-core';
2
+ import type { LogBuffer } from '../buffer/LogBuffer.js';
3
+ /** Options for the watcher HTTP server. */
4
+ export type HttpServerOptions = {
5
+ host: string;
6
+ port: number;
7
+ buffer: LogBuffer;
8
+ getWatcher: () => WatcherRecord;
9
+ getCdpStatus: () => {
10
+ attached: boolean;
11
+ target: {
12
+ title: string | null;
13
+ url: string | null;
14
+ } | null;
15
+ };
16
+ };
17
+ /** Handle for the running HTTP server. */
18
+ export type HttpServerHandle = {
19
+ port: number;
20
+ close: () => Promise<void>;
21
+ };
22
+ /** Start HTTP server bound to localhost for watcher API. */
23
+ export declare const startHttpServer: (options: HttpServerOptions) => Promise<HttpServerHandle>;
24
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC5H,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEvD,2CAA2C;AAC3C,MAAM,MAAM,iBAAiB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,SAAS,CAAA;IACjB,UAAU,EAAE,MAAM,aAAa,CAAA;IAC/B,YAAY,EAAE,MAAM;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE;YAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,CAAA;CACtG,CAAA;AAED,0CAA0C;AAC1C,MAAM,MAAM,gBAAgB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B,CAAA;AAED,4DAA4D;AAC5D,eAAO,MAAM,eAAe,GAAU,SAAS,iBAAiB,KAAG,OAAO,CAAC,gBAAgB,CAuC1F,CAAA"}
@@ -0,0 +1,107 @@
1
+ import http from 'node:http';
2
+ /** Start HTTP server bound to localhost for watcher API. */
3
+ export const startHttpServer = async (options) => {
4
+ const server = http.createServer(async (req, res) => {
5
+ const url = new URL(req.url ?? '/', `http://${req.headers.host ?? options.host}`);
6
+ if (req.method === 'GET' && url.pathname === '/status') {
7
+ return respondJson(res, buildStatus(options));
8
+ }
9
+ if (req.method === 'GET' && url.pathname === '/logs') {
10
+ return handleLogs(url, res, options);
11
+ }
12
+ if (req.method === 'GET' && url.pathname === '/tail') {
13
+ return handleTail(url, res, options);
14
+ }
15
+ respondJson(res, { ok: false, error: { message: 'Not found', code: 'not_found' } }, 404);
16
+ });
17
+ await new Promise((resolve, reject) => {
18
+ server.once('error', reject);
19
+ server.listen(options.port, options.host, () => resolve());
20
+ });
21
+ const address = server.address();
22
+ const port = typeof address === 'object' && address ? address.port : options.port;
23
+ return {
24
+ port,
25
+ close: () => new Promise((resolve, reject) => {
26
+ server.close((error) => {
27
+ if (error) {
28
+ reject(error);
29
+ return;
30
+ }
31
+ resolve();
32
+ });
33
+ }),
34
+ };
35
+ };
36
+ const handleLogs = (url, res, options) => {
37
+ const after = clampNumber(url.searchParams.get('after'), 0);
38
+ const limit = clampNumber(url.searchParams.get('limit'), 500, 1, 5000);
39
+ const levels = parseLevels(url.searchParams.get('levels'));
40
+ const grep = url.searchParams.get('grep') ?? undefined;
41
+ const sinceTs = clampNumber(url.searchParams.get('sinceTs'), undefined);
42
+ const events = options.buffer.listAfter(after, { levels, grep, sinceTs }, limit);
43
+ const nextAfter = events.length > 0 ? (events[events.length - 1]?.id ?? after) : after;
44
+ const response = { ok: true, events, nextAfter };
45
+ respondJson(res, response);
46
+ };
47
+ const handleTail = async (url, res, options) => {
48
+ const after = clampNumber(url.searchParams.get('after'), 0);
49
+ const limit = clampNumber(url.searchParams.get('limit'), 500, 1, 5000);
50
+ const timeoutMs = clampNumber(url.searchParams.get('timeoutMs'), 25_000, 1000, 120_000);
51
+ const levels = parseLevels(url.searchParams.get('levels'));
52
+ const grep = url.searchParams.get('grep') ?? undefined;
53
+ const events = await options.buffer.waitForAfter(after, { levels, grep }, limit, timeoutMs);
54
+ const nextAfter = events.length > 0 ? (events[events.length - 1]?.id ?? after) : after;
55
+ const response = { ok: true, events, nextAfter, timedOut: events.length === 0 };
56
+ respondJson(res, response);
57
+ };
58
+ const buildStatus = (options) => {
59
+ const watcher = options.getWatcher();
60
+ const buffer = options.buffer.getStats();
61
+ const cdpStatus = options.getCdpStatus();
62
+ return {
63
+ ok: true,
64
+ id: watcher.id,
65
+ pid: watcher.pid,
66
+ attached: cdpStatus.attached,
67
+ target: cdpStatus.target,
68
+ buffer,
69
+ watcher,
70
+ };
71
+ };
72
+ const respondJson = (res, body, status = 200) => {
73
+ const payload = JSON.stringify(body);
74
+ res.statusCode = status;
75
+ res.setHeader('Content-Type', 'application/json');
76
+ res.end(payload);
77
+ };
78
+ const clampNumber = (value, fallback, min, max) => {
79
+ if (value == null) {
80
+ return fallback ?? 0;
81
+ }
82
+ const parsed = Number(value);
83
+ if (!Number.isFinite(parsed)) {
84
+ return fallback ?? 0;
85
+ }
86
+ if (min != null && parsed < min) {
87
+ return min;
88
+ }
89
+ if (max != null && parsed > max) {
90
+ return max;
91
+ }
92
+ return parsed;
93
+ };
94
+ const parseLevels = (value) => {
95
+ if (!value) {
96
+ return undefined;
97
+ }
98
+ const levels = value
99
+ .split(',')
100
+ .map((item) => item.trim())
101
+ .filter(Boolean);
102
+ if (levels.length === 0) {
103
+ return undefined;
104
+ }
105
+ return levels;
106
+ };
107
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { WatcherMatch, WatcherChrome, WatcherRecord, LogEvent } from '@vforsh/argus-core';
2
+ /** Options to start a watcher server. */
3
+ export type StartWatcherOptions = {
4
+ /** Unique watcher identifier (used for registry presence and removal on shutdown). */
5
+ id: string;
6
+ /** Host/interface to bind the watcher HTTP server to. Defaults to `127.0.0.1`. */
7
+ host?: string;
8
+ /** Port to bind the watcher HTTP server to. Defaults to `0` (ephemeral). */
9
+ port?: number;
10
+ /** Criteria for which Chrome target(s) to attach to. */
11
+ match?: WatcherMatch;
12
+ /** Chrome DevTools Protocol (CDP) connection settings. Defaults to `127.0.0.1:9222`. */
13
+ chrome?: WatcherChrome;
14
+ /** Max buffered log events before older entries are dropped. Defaults to `50_000`. */
15
+ bufferSize?: number;
16
+ /** How often (in ms) to refresh the watcher record in the registry. Defaults to `15_000`. */
17
+ heartbeatMs?: number;
18
+ /** Optional file log persistence settings. */
19
+ fileLogs?: {
20
+ /** Directory to store watcher logs. Required when fileLogs is set. */
21
+ logsDir: string;
22
+ /** Max number of log files to keep for this watcher session. Defaults to `5`. */
23
+ maxFiles?: number;
24
+ };
25
+ };
26
+ /** Handle returned by startWatcher. */
27
+ export type WatcherHandle = {
28
+ close: () => Promise<void>;
29
+ watcher: WatcherRecord;
30
+ };
31
+ /**
32
+ * Start a watcher that connects to Chrome CDP, buffers console logs, and exposes the HTTP API.
33
+ * @param options - Configuration for binding, CDP matching, and buffering.
34
+ * @returns A handle that can be closed to stop the watcher and clean up registry state.
35
+ */
36
+ export declare const startWatcher: (options: StartWatcherOptions) => Promise<WatcherHandle>;
37
+ /** Log event shape emitted by watchers. */
38
+ export type { LogEvent };
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAQ9F,yCAAyC;AACzC,MAAM,MAAM,mBAAmB,GAAG;IACjC,sFAAsF;IACtF,EAAE,EAAE,MAAM,CAAA;IACV,kFAAkF;IAClF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,4EAA4E;IAC5E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wDAAwD;IACxD,KAAK,CAAC,EAAE,YAAY,CAAA;IACpB,wFAAwF;IACxF,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6FAA6F;IAC7F,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE;QACV,sEAAsE;QACtE,OAAO,EAAE,MAAM,CAAA;QACf,iFAAiF;QACjF,QAAQ,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;CACD,CAAA;AAED,uCAAuC;AACvC,MAAM,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1B,OAAO,EAAE,aAAa,CAAA;CACtB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAU,SAAS,mBAAmB,KAAG,OAAO,CAAC,aAAa,CA2EtF,CAAA;AAED,2CAA2C;AAC3C,YAAY,EAAE,QAAQ,EAAE,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,96 @@
1
+ import path from 'node:path';
2
+ import { startCdpWatcher } from './cdp/watcher.js';
3
+ import { LogBuffer } from './buffer/LogBuffer.js';
4
+ import { startHttpServer } from './http/server.js';
5
+ import { announceWatcher, removeWatcher, startRegistryHeartbeat } from './registry/registry.js';
6
+ import { WatcherFileLogger } from './fileLogs/WatcherFileLogger.js';
7
+ /**
8
+ * Start a watcher that connects to Chrome CDP, buffers console logs, and exposes the HTTP API.
9
+ * @param options - Configuration for binding, CDP matching, and buffering.
10
+ * @returns A handle that can be closed to stop the watcher and clean up registry state.
11
+ */
12
+ export const startWatcher = async (options) => {
13
+ if (!options.id) {
14
+ throw new Error('Watcher id is required');
15
+ }
16
+ const host = options.host ?? '127.0.0.1';
17
+ const port = options.port ?? 0;
18
+ const chrome = options.chrome ?? { host: '127.0.0.1', port: 9222 };
19
+ const bufferSize = options.bufferSize ?? 50_000;
20
+ const startedAt = Date.now();
21
+ const buffer = new LogBuffer(bufferSize);
22
+ let cdpStatus = { attached: false, target: null };
23
+ const fileLogs = options.fileLogs;
24
+ const logsDir = fileLogs ? resolveLogsDir(fileLogs.logsDir) : null;
25
+ const maxFiles = fileLogs ? resolveMaxFiles(fileLogs.maxFiles) : null;
26
+ const fileLogger = logsDir
27
+ ? new WatcherFileLogger({
28
+ watcherId: options.id,
29
+ startedAt,
30
+ logsDir,
31
+ chrome,
32
+ match: options.match,
33
+ maxFiles: maxFiles ?? 5,
34
+ })
35
+ : null;
36
+ const record = {
37
+ id: options.id,
38
+ host,
39
+ port,
40
+ pid: process.pid,
41
+ startedAt,
42
+ updatedAt: Date.now(),
43
+ match: options.match,
44
+ chrome,
45
+ };
46
+ const server = await startHttpServer({
47
+ host,
48
+ port,
49
+ buffer,
50
+ getWatcher: () => record,
51
+ getCdpStatus: () => cdpStatus,
52
+ });
53
+ record.port = server.port;
54
+ await announceWatcher(record);
55
+ const heartbeat = startRegistryHeartbeat(() => record, options.heartbeatMs ?? 15_000);
56
+ const cdp = startCdpWatcher({
57
+ chrome,
58
+ match: options.match,
59
+ onLog: (event) => {
60
+ buffer.add(event);
61
+ fileLogger?.writeEvent(event);
62
+ },
63
+ onPageNavigation: (info) => {
64
+ fileLogger?.rotate(info);
65
+ },
66
+ onStatus: (status) => {
67
+ cdpStatus = status;
68
+ },
69
+ });
70
+ return {
71
+ watcher: record,
72
+ close: async () => {
73
+ heartbeat.stop();
74
+ await cdp.stop();
75
+ await fileLogger?.close();
76
+ await server.close();
77
+ await removeWatcher(record.id);
78
+ },
79
+ };
80
+ };
81
+ const resolveLogsDir = (logsDir) => {
82
+ if (typeof logsDir !== 'string' || logsDir.trim() === '') {
83
+ throw new Error('fileLogs.logsDir is required');
84
+ }
85
+ return path.resolve(logsDir);
86
+ };
87
+ const resolveMaxFiles = (maxFiles) => {
88
+ if (maxFiles === undefined) {
89
+ return 5;
90
+ }
91
+ if (!Number.isInteger(maxFiles) || maxFiles < 1) {
92
+ throw new Error('fileLogs.maxFiles must be an integer >= 1');
93
+ }
94
+ return maxFiles;
95
+ };
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { WatcherRecord } from '@vforsh/argus-core';
2
+ /** Write watcher entry to registry. */
3
+ export declare const announceWatcher: (watcher: WatcherRecord) => Promise<void>;
4
+ /** Refresh watcher entry in registry. */
5
+ export declare const updateWatcherHeartbeat: (watcher: WatcherRecord) => Promise<void>;
6
+ /** Remove watcher entry from registry by id. */
7
+ export declare const removeWatcher: (id: string) => Promise<void>;
8
+ /** Periodically refresh registry entry until stopped. */
9
+ export declare const startRegistryHeartbeat: (getWatcher: () => WatcherRecord, intervalMs?: number) => {
10
+ stop: () => void;
11
+ };
12
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/registry/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,uCAAuC;AACvC,eAAO,MAAM,eAAe,GAAU,SAAS,aAAa,KAAG,OAAO,CAAC,IAAI,CAI1E,CAAA;AAED,yCAAyC;AACzC,eAAO,MAAM,sBAAsB,GAAU,SAAS,aAAa,KAAG,OAAO,CAAC,IAAI,CAEjF,CAAA;AAED,gDAAgD;AAChD,eAAO,MAAM,aAAa,GAAU,IAAI,MAAM,KAAG,OAAO,CAAC,IAAI,CAI5D,CAAA;AAED,yDAAyD;AACzD,eAAO,MAAM,sBAAsB,GAAI,YAAY,MAAM,aAAa,EAAE,mBAAmB,KAAG;IAAE,IAAI,EAAE,MAAM,IAAI,CAAA;CAU/G,CAAA"}