craftdriver 0.0.3 → 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 (42) hide show
  1. package/README.md +67 -3
  2. package/dist/index.d.ts +2 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +3 -1
  5. package/dist/index.js.map +1 -1
  6. package/dist/lib/bidi/connection.d.ts +62 -0
  7. package/dist/lib/bidi/connection.d.ts.map +1 -0
  8. package/dist/lib/bidi/connection.js +227 -0
  9. package/dist/lib/bidi/connection.js.map +1 -0
  10. package/dist/lib/bidi/index.d.ts +76 -0
  11. package/dist/lib/bidi/index.d.ts.map +1 -0
  12. package/dist/lib/bidi/index.js +114 -0
  13. package/dist/lib/bidi/index.js.map +1 -0
  14. package/dist/lib/bidi/logs.d.ts +104 -0
  15. package/dist/lib/bidi/logs.d.ts.map +1 -0
  16. package/dist/lib/bidi/logs.js +273 -0
  17. package/dist/lib/bidi/logs.js.map +1 -0
  18. package/dist/lib/bidi/network.d.ts +92 -0
  19. package/dist/lib/bidi/network.d.ts.map +1 -0
  20. package/dist/lib/bidi/network.js +259 -0
  21. package/dist/lib/bidi/network.js.map +1 -0
  22. package/dist/lib/bidi/storage.d.ts +81 -0
  23. package/dist/lib/bidi/storage.d.ts.map +1 -0
  24. package/dist/lib/bidi/storage.js +292 -0
  25. package/dist/lib/bidi/storage.js.map +1 -0
  26. package/dist/lib/bidi/types.d.ts +302 -0
  27. package/dist/lib/bidi/types.d.ts.map +1 -0
  28. package/dist/lib/bidi/types.js +6 -0
  29. package/dist/lib/bidi/types.js.map +1 -0
  30. package/dist/lib/browser.d.ts +142 -0
  31. package/dist/lib/browser.d.ts.map +1 -1
  32. package/dist/lib/browser.js +162 -11
  33. package/dist/lib/browser.js.map +1 -1
  34. package/dist/lib/driver.d.ts +2 -0
  35. package/dist/lib/driver.d.ts.map +1 -1
  36. package/dist/lib/driver.js +9 -1
  37. package/dist/lib/driver.js.map +1 -1
  38. package/dist/lib/elementHandle.d.ts +3 -0
  39. package/dist/lib/elementHandle.d.ts.map +1 -1
  40. package/dist/lib/elementHandle.js +33 -0
  41. package/dist/lib/elementHandle.js.map +1 -1
  42. package/package.json +5 -2
@@ -0,0 +1,104 @@
1
+ /**
2
+ * BiDi Log Monitor
3
+ * Real-time console and JavaScript error monitoring
4
+ */
5
+ import type { BiDiConnection } from './connection.js';
6
+ import type { BrowsingContext, LogLevel } from './types.js';
7
+ export interface ConsoleMessage {
8
+ type: 'console';
9
+ level: LogLevel;
10
+ text: string;
11
+ timestamp: Date;
12
+ method: string;
13
+ args: unknown[];
14
+ stackTrace?: StackFrame[];
15
+ context?: BrowsingContext;
16
+ }
17
+ export interface JavaScriptError {
18
+ type: 'javascript';
19
+ level: 'error';
20
+ text: string;
21
+ timestamp: Date;
22
+ stackTrace?: StackFrame[];
23
+ context?: BrowsingContext;
24
+ }
25
+ export interface StackFrame {
26
+ functionName: string;
27
+ url: string;
28
+ lineNumber: number;
29
+ columnNumber: number;
30
+ }
31
+ export type LogMessage = ConsoleMessage | JavaScriptError;
32
+ export type LogHandler = (message: LogMessage) => void;
33
+ export type ConsoleHandler = (message: ConsoleMessage) => void;
34
+ export type ErrorHandler = (error: JavaScriptError) => void;
35
+ export declare class LogMonitor {
36
+ private connection;
37
+ private subscribed;
38
+ private context?;
39
+ private allHandlers;
40
+ private levelHandlers;
41
+ private consoleHandlers;
42
+ private errorHandlers;
43
+ private logs;
44
+ private maxLogs;
45
+ constructor(connection: BiDiConnection, context?: BrowsingContext);
46
+ /**
47
+ * Initialize log event subscriptions
48
+ */
49
+ initialize(): Promise<void>;
50
+ /**
51
+ * Listen to all log messages
52
+ */
53
+ onLog(handler: LogHandler): () => void;
54
+ /**
55
+ * Listen to console messages only
56
+ */
57
+ onConsole(handler: ConsoleHandler): () => void;
58
+ /**
59
+ * Listen to JavaScript errors only
60
+ */
61
+ onError(handler: ErrorHandler): () => void;
62
+ /**
63
+ * Listen to specific log levels
64
+ */
65
+ on(level: LogLevel, handler: LogHandler): () => void;
66
+ /**
67
+ * Get all captured logs
68
+ */
69
+ getLogs(): LogMessage[];
70
+ /**
71
+ * Get logs filtered by level
72
+ */
73
+ getLogsByLevel(level: LogLevel): LogMessage[];
74
+ /**
75
+ * Get all console messages
76
+ */
77
+ getConsoleLogs(): ConsoleMessage[];
78
+ /**
79
+ * Get all JavaScript errors
80
+ */
81
+ getErrors(): JavaScriptError[];
82
+ /**
83
+ * Clear captured logs
84
+ */
85
+ clearLogs(): void;
86
+ /**
87
+ * Wait for a console message matching predicate
88
+ */
89
+ waitForConsole(predicate: (msg: ConsoleMessage) => boolean, timeout?: number): Promise<ConsoleMessage>;
90
+ /**
91
+ * Wait for a JavaScript error
92
+ */
93
+ waitForError(predicate?: (err: JavaScriptError) => boolean, timeout?: number): Promise<JavaScriptError>;
94
+ /**
95
+ * Assert no JavaScript errors occurred
96
+ */
97
+ assertNoErrors(): void;
98
+ private handleLogEntry;
99
+ private convertLogEntry;
100
+ private convertStackTrace;
101
+ private deserializeValue;
102
+ private notifyHandlers;
103
+ }
104
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../src/lib/bidi/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,273 @@
1
+ /**
2
+ * BiDi Log Monitor
3
+ * Real-time console and JavaScript error monitoring
4
+ */
5
+ export class LogMonitor {
6
+ connection;
7
+ subscribed = false;
8
+ context;
9
+ allHandlers = new Set();
10
+ levelHandlers = new Map();
11
+ consoleHandlers = new Set();
12
+ errorHandlers = new Set();
13
+ logs = [];
14
+ maxLogs = 1000;
15
+ constructor(connection, context) {
16
+ this.connection = connection;
17
+ this.context = context;
18
+ }
19
+ /**
20
+ * Initialize log event subscriptions
21
+ */
22
+ async initialize() {
23
+ if (this.subscribed)
24
+ return;
25
+ await this.connection.subscribe(['log.entryAdded'], this.context ? [this.context] : undefined);
26
+ this.connection.on('log.entryAdded', (params) => {
27
+ this.handleLogEntry(params);
28
+ });
29
+ this.subscribed = true;
30
+ }
31
+ /**
32
+ * Listen to all log messages
33
+ */
34
+ onLog(handler) {
35
+ this.allHandlers.add(handler);
36
+ return () => this.allHandlers.delete(handler);
37
+ }
38
+ /**
39
+ * Listen to console messages only
40
+ */
41
+ onConsole(handler) {
42
+ this.consoleHandlers.add(handler);
43
+ return () => this.consoleHandlers.delete(handler);
44
+ }
45
+ /**
46
+ * Listen to JavaScript errors only
47
+ */
48
+ onError(handler) {
49
+ this.errorHandlers.add(handler);
50
+ return () => this.errorHandlers.delete(handler);
51
+ }
52
+ /**
53
+ * Listen to specific log levels
54
+ */
55
+ on(level, handler) {
56
+ if (!this.levelHandlers.has(level)) {
57
+ this.levelHandlers.set(level, new Set());
58
+ }
59
+ this.levelHandlers.get(level).add(handler);
60
+ return () => this.levelHandlers.get(level)?.delete(handler);
61
+ }
62
+ /**
63
+ * Get all captured logs
64
+ */
65
+ getLogs() {
66
+ return [...this.logs];
67
+ }
68
+ /**
69
+ * Get logs filtered by level
70
+ */
71
+ getLogsByLevel(level) {
72
+ return this.logs.filter((log) => log.level === level);
73
+ }
74
+ /**
75
+ * Get all console messages
76
+ */
77
+ getConsoleLogs() {
78
+ return this.logs.filter((log) => log.type === 'console');
79
+ }
80
+ /**
81
+ * Get all JavaScript errors
82
+ */
83
+ getErrors() {
84
+ return this.logs.filter((log) => log.type === 'javascript');
85
+ }
86
+ /**
87
+ * Clear captured logs
88
+ */
89
+ clearLogs() {
90
+ this.logs = [];
91
+ }
92
+ /**
93
+ * Wait for a console message matching predicate
94
+ */
95
+ waitForConsole(predicate, timeout = 30000) {
96
+ return new Promise((resolve, reject) => {
97
+ const timeoutId = setTimeout(() => {
98
+ unsubscribe();
99
+ reject(new Error('Timeout waiting for console message'));
100
+ }, timeout);
101
+ const unsubscribe = this.onConsole((msg) => {
102
+ if (predicate(msg)) {
103
+ clearTimeout(timeoutId);
104
+ unsubscribe();
105
+ resolve(msg);
106
+ }
107
+ });
108
+ });
109
+ }
110
+ /**
111
+ * Wait for a JavaScript error
112
+ */
113
+ waitForError(predicate, timeout = 30000) {
114
+ return new Promise((resolve, reject) => {
115
+ const timeoutId = setTimeout(() => {
116
+ unsubscribe();
117
+ reject(new Error('Timeout waiting for JavaScript error'));
118
+ }, timeout);
119
+ const unsubscribe = this.onError((err) => {
120
+ if (!predicate || predicate(err)) {
121
+ clearTimeout(timeoutId);
122
+ unsubscribe();
123
+ resolve(err);
124
+ }
125
+ });
126
+ });
127
+ }
128
+ /**
129
+ * Assert no JavaScript errors occurred
130
+ */
131
+ assertNoErrors() {
132
+ const errors = this.getErrors();
133
+ if (errors.length > 0) {
134
+ const errorMessages = errors.map((e) => e.text).join('\n');
135
+ throw new Error(`JavaScript errors detected:\n${errorMessages}`);
136
+ }
137
+ }
138
+ handleLogEntry(entry) {
139
+ const message = this.convertLogEntry(entry);
140
+ // Store log
141
+ this.logs.push(message);
142
+ if (this.logs.length > this.maxLogs) {
143
+ this.logs.shift();
144
+ }
145
+ // Notify handlers
146
+ this.notifyHandlers(message);
147
+ }
148
+ convertLogEntry(entry) {
149
+ const stackTrace = entry.stackTrace
150
+ ? this.convertStackTrace(entry.stackTrace)
151
+ : undefined;
152
+ if (entry.type === 'javascript') {
153
+ const error = {
154
+ type: 'javascript',
155
+ level: 'error',
156
+ text: entry.text,
157
+ timestamp: new Date(entry.timestamp),
158
+ stackTrace,
159
+ context: entry.source.context,
160
+ };
161
+ return error;
162
+ }
163
+ const consoleMsg = {
164
+ type: 'console',
165
+ level: entry.level,
166
+ text: entry.text,
167
+ timestamp: new Date(entry.timestamp),
168
+ method: entry.method || entry.level,
169
+ args: entry.args ? entry.args.map((arg) => this.deserializeValue(arg)) : [],
170
+ stackTrace,
171
+ context: entry.source.context,
172
+ };
173
+ return consoleMsg;
174
+ }
175
+ convertStackTrace(trace) {
176
+ return trace.callFrames.map((frame) => ({
177
+ functionName: frame.functionName,
178
+ url: frame.url,
179
+ lineNumber: frame.lineNumber,
180
+ columnNumber: frame.columnNumber,
181
+ }));
182
+ }
183
+ deserializeValue(value) {
184
+ switch (value.type) {
185
+ case 'undefined':
186
+ return undefined;
187
+ case 'null':
188
+ return null;
189
+ case 'string':
190
+ return value.value;
191
+ case 'number':
192
+ if (value.value === 'NaN')
193
+ return NaN;
194
+ if (value.value === 'Infinity')
195
+ return Infinity;
196
+ if (value.value === '-Infinity')
197
+ return -Infinity;
198
+ if (value.value === '-0')
199
+ return -0;
200
+ return value.value;
201
+ case 'boolean':
202
+ return value.value;
203
+ case 'bigint':
204
+ return BigInt(value.value);
205
+ case 'array':
206
+ return value.value?.map((v) => this.deserializeValue(v)) ?? [];
207
+ case 'object':
208
+ if (!value.value)
209
+ return {};
210
+ return Object.fromEntries(value.value.map(([k, v]) => [
211
+ typeof k === 'string' ? k : this.deserializeValue(k),
212
+ this.deserializeValue(v),
213
+ ]));
214
+ case 'regexp':
215
+ return new RegExp(value.value.pattern, value.value.flags);
216
+ case 'date':
217
+ return new Date(value.value);
218
+ case 'function':
219
+ return '[Function]';
220
+ case 'node':
221
+ return `[${value.value.nodeName || 'Node'}]`;
222
+ case 'window':
223
+ return `[Window: ${value.value.context}]`;
224
+ default:
225
+ return '[Unknown]';
226
+ }
227
+ }
228
+ notifyHandlers(message) {
229
+ // All handlers
230
+ for (const handler of this.allHandlers) {
231
+ try {
232
+ handler(message);
233
+ }
234
+ catch (err) {
235
+ console.error('Error in log handler:', err);
236
+ }
237
+ }
238
+ // Level-specific handlers
239
+ const levelHandlers = this.levelHandlers.get(message.level);
240
+ if (levelHandlers) {
241
+ for (const handler of levelHandlers) {
242
+ try {
243
+ handler(message);
244
+ }
245
+ catch (err) {
246
+ console.error('Error in level log handler:', err);
247
+ }
248
+ }
249
+ }
250
+ // Type-specific handlers
251
+ if (message.type === 'console') {
252
+ for (const handler of this.consoleHandlers) {
253
+ try {
254
+ handler(message);
255
+ }
256
+ catch (err) {
257
+ console.error('Error in console handler:', err);
258
+ }
259
+ }
260
+ }
261
+ else if (message.type === 'javascript') {
262
+ for (const handler of this.errorHandlers) {
263
+ try {
264
+ handler(message);
265
+ }
266
+ catch (err) {
267
+ console.error('Error in error handler:', err);
268
+ }
269
+ }
270
+ }
271
+ }
272
+ }
273
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/lib/bidi/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * BiDi Network Interceptor
3
+ * Provides request interception, mocking, and modification capabilities
4
+ */
5
+ import type { BiDiConnection } from './connection.js';
6
+ import type { BrowsingContext, InterceptPhase, NetworkIntercept, UrlPattern } from './types.js';
7
+ export interface MockResponse {
8
+ status?: number;
9
+ statusText?: string;
10
+ headers?: Record<string, string>;
11
+ body?: string | Buffer | object;
12
+ }
13
+ export interface RequestHandler {
14
+ (request: InterceptedRequest): MockResponse | void | Promise<MockResponse | void>;
15
+ }
16
+ export interface InterceptedRequest {
17
+ id: string;
18
+ url: string;
19
+ method: string;
20
+ headers: Record<string, string>;
21
+ postData?: string;
22
+ resourceType?: string;
23
+ isBlocked: boolean;
24
+ context: BrowsingContext | null;
25
+ }
26
+ export interface InterceptRule {
27
+ id: NetworkIntercept;
28
+ patterns: UrlPattern[];
29
+ phases: InterceptPhase[];
30
+ handler?: RequestHandler;
31
+ }
32
+ export declare class NetworkInterceptor {
33
+ private connection;
34
+ private intercepts;
35
+ private handlers;
36
+ private subscribed;
37
+ private context?;
38
+ constructor(connection: BiDiConnection, context?: BrowsingContext);
39
+ /**
40
+ * Initialize network event subscriptions
41
+ */
42
+ initialize(): Promise<void>;
43
+ /**
44
+ * Add a network intercept for specific URL patterns
45
+ */
46
+ intercept(patterns: string | string[] | UrlPattern | UrlPattern[], handler: RequestHandler, phases?: InterceptPhase[]): Promise<string>;
47
+ /**
48
+ * Mock all requests matching pattern with a fixed response
49
+ */
50
+ mock(pattern: string | string[] | UrlPattern | UrlPattern[], response: MockResponse | ((req: InterceptedRequest) => MockResponse)): Promise<string>;
51
+ /**
52
+ * Block all requests matching pattern
53
+ */
54
+ block(pattern: string | string[]): Promise<string>;
55
+ /**
56
+ * Modify request headers for matching patterns
57
+ */
58
+ setExtraHeaders(headers: Record<string, string>, contexts?: BrowsingContext[]): Promise<void>;
59
+ /**
60
+ * Continue a blocked request (optionally with modifications)
61
+ */
62
+ continueRequest(requestId: string, options?: {
63
+ url?: string;
64
+ method?: string;
65
+ headers?: Record<string, string>;
66
+ body?: string;
67
+ }): Promise<void>;
68
+ /**
69
+ * Provide a custom response for a blocked request
70
+ */
71
+ provideResponse(requestId: string, response: MockResponse): Promise<void>;
72
+ /**
73
+ * Fail a blocked request
74
+ */
75
+ failRequest(requestId: string): Promise<void>;
76
+ /**
77
+ * Remove an intercept
78
+ */
79
+ removeIntercept(interceptId: string): Promise<void>;
80
+ /**
81
+ * Remove all intercepts
82
+ */
83
+ removeAllIntercepts(): Promise<void>;
84
+ /**
85
+ * Set cache behavior
86
+ */
87
+ setCacheBehavior(behavior: 'default' | 'bypass', contexts?: BrowsingContext[]): Promise<void>;
88
+ private handleBeforeRequestSent;
89
+ private normalizePatterns;
90
+ private headersToObject;
91
+ }
92
+ //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../../src/lib/bidi/network.ts"],"names":[],"mappings":"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"}