@testivai/witness-cdp 0.1.11 → 0.2.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.
Potentially problematic release.
This version of @testivai/witness-cdp might be problematic. Click here for more details.
- package/dist/cdp/binding.d.ts +6 -1
- package/dist/cdp/binding.d.ts.map +1 -1
- package/dist/cdp/binding.js +63 -42
- package/dist/cdp/binding.js.map +1 -1
- package/package.json +1 -1
package/dist/cdp/binding.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export declare class CdpBinding {
|
|
|
7
7
|
private capture;
|
|
8
8
|
private snapshots;
|
|
9
9
|
private isBindingRegistered;
|
|
10
|
+
private pollInterval?;
|
|
10
11
|
constructor(client: CdpClient);
|
|
11
12
|
/**
|
|
12
13
|
* Set up the Runtime bindings
|
|
@@ -17,7 +18,7 @@ export declare class CdpBinding {
|
|
|
17
18
|
*/
|
|
18
19
|
private injectClientScript;
|
|
19
20
|
/**
|
|
20
|
-
* Set up
|
|
21
|
+
* Set up polling for capture requests
|
|
21
22
|
*/
|
|
22
23
|
private setupEventListeners;
|
|
23
24
|
/**
|
|
@@ -40,5 +41,9 @@ export declare class CdpBinding {
|
|
|
40
41
|
* Check if bindings are registered
|
|
41
42
|
*/
|
|
42
43
|
isRegistered(): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Clean up resources
|
|
46
|
+
*/
|
|
47
|
+
cleanup(): void;
|
|
43
48
|
}
|
|
44
49
|
//# sourceMappingURL=binding.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../src/cdp/binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../src/cdp/binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAyCrC;;GAEG;AACH,qBAAa,UAAU;IAMT,OAAO,CAAC,MAAM;IAL1B,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,YAAY,CAAC,CAAiB;gBAElB,MAAM,EAAE,SAAS;IAKrC;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBpC;;OAEG;YACW,kBAAkB;IA2BhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;OAEG;YACW,iBAAiB;IAqC/B;;OAEG;YACW,OAAO;IAWrB;;OAEG;IACH,YAAY,IAAI,GAAG,EAAE;IAIrB;;OAEG;IACH,cAAc,IAAI,IAAI;IAKtB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB"}
|
package/dist/cdp/binding.js
CHANGED
|
@@ -5,37 +5,25 @@ const capture_1 = require("./capture");
|
|
|
5
5
|
const logger_1 = require("../utils/logger");
|
|
6
6
|
/**
|
|
7
7
|
* Client-side script injected into the browser
|
|
8
|
-
* This creates a
|
|
8
|
+
* This creates a simple function that triggers CDP capture
|
|
9
9
|
*/
|
|
10
10
|
const CLIENT_SCRIPT = `
|
|
11
11
|
(function() {
|
|
12
|
-
// Flag to track if binding is ready
|
|
13
|
-
let _isSetup = false;
|
|
14
|
-
|
|
15
12
|
// Create the witness function
|
|
16
13
|
window.testivaiWitness = function(name) {
|
|
17
14
|
console.log('TestivAI: Witness called with:', name);
|
|
18
|
-
|
|
15
|
+
// Store the snapshot name for the CDP client to pick up
|
|
16
|
+
window.__testivaiSnapshotName = name;
|
|
17
|
+
// Signal that we want to capture
|
|
18
|
+
window.__testivaiCaptureRequested = Date.now();
|
|
19
|
+
console.log('TestivAI: Capture requested for:', name);
|
|
20
|
+
// Return a promise that will be resolved by the ACK
|
|
19
21
|
return new Promise(function(resolve) {
|
|
20
|
-
// Store resolve function for ACK
|
|
21
22
|
window.__testivaiResolve = resolve;
|
|
22
|
-
|
|
23
|
-
// Set a timeout in case ACK never comes
|
|
24
|
-
const timeout = setTimeout(function() {
|
|
25
|
-
console.warn('TestivAI: Timeout waiting for capture ACK, resolving anyway');
|
|
26
|
-
resolve();
|
|
27
|
-
}, 5000); // Shorter timeout
|
|
28
|
-
|
|
29
|
-
// Send the capture request via console message
|
|
30
|
-
// The CDP client will intercept this
|
|
31
|
-
const message = '__TESTIVAI_CAPTURE__:' + JSON.stringify(name);
|
|
32
|
-
console.log('TestivAI: Sending message:', message);
|
|
33
|
-
console.log(message);
|
|
34
23
|
});
|
|
35
24
|
};
|
|
36
25
|
|
|
37
|
-
|
|
38
|
-
console.log('TestivAI: Binding ready (using console message bridge)');
|
|
26
|
+
console.log('TestivAI: Binding ready');
|
|
39
27
|
})();
|
|
40
28
|
`;
|
|
41
29
|
/**
|
|
@@ -68,10 +56,6 @@ class CdpBinding {
|
|
|
68
56
|
try {
|
|
69
57
|
// Enable Runtime domain
|
|
70
58
|
await this.client.enableDomain('Runtime');
|
|
71
|
-
// Enable Log domain to ensure console events are captured
|
|
72
|
-
await this.client.enableDomain('Log');
|
|
73
|
-
await this.client.send('Log.enable');
|
|
74
|
-
// Enable console API to capture messages
|
|
75
59
|
await this.client.send('Runtime.enable');
|
|
76
60
|
// Inject the client-side script
|
|
77
61
|
await this.injectClientScript();
|
|
@@ -112,20 +96,36 @@ class CdpBinding {
|
|
|
112
96
|
}
|
|
113
97
|
}
|
|
114
98
|
/**
|
|
115
|
-
* Set up
|
|
99
|
+
* Set up polling for capture requests
|
|
116
100
|
*/
|
|
117
101
|
setupEventListeners() {
|
|
118
|
-
//
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
102
|
+
// Poll for capture requests
|
|
103
|
+
const pollInterval = setInterval(async () => {
|
|
104
|
+
try {
|
|
105
|
+
const result = await this.client.send('Runtime.evaluate', {
|
|
106
|
+
expression: 'window.__testivaiCaptureRequested',
|
|
107
|
+
});
|
|
108
|
+
if (result.result.value) {
|
|
109
|
+
// Get the snapshot name
|
|
110
|
+
const nameResult = await this.client.send('Runtime.evaluate', {
|
|
111
|
+
expression: 'window.__testivaiSnapshotName',
|
|
112
|
+
});
|
|
113
|
+
const snapshotName = nameResult.result.value || 'snapshot';
|
|
114
|
+
logger_1.logger.info('TestivAI: Capture requested for:', snapshotName);
|
|
115
|
+
// Clear the request flag
|
|
116
|
+
await this.client.send('Runtime.evaluate', {
|
|
117
|
+
expression: 'window.__testivaiCaptureRequested = null; window.__testivaiSnapshotName = null;',
|
|
118
|
+
});
|
|
119
|
+
// Handle the capture
|
|
120
|
+
await this.handleWitnessCall(snapshotName);
|
|
121
|
+
}
|
|
127
122
|
}
|
|
128
|
-
|
|
123
|
+
catch (error) {
|
|
124
|
+
logger_1.logger.debug('Error polling for capture requests:', error);
|
|
125
|
+
}
|
|
126
|
+
}, 100);
|
|
127
|
+
// Store interval for cleanup
|
|
128
|
+
this.pollInterval = pollInterval;
|
|
129
129
|
// Listen for frame navigation to re-inject script
|
|
130
130
|
this.client.on('frameNavigated', async () => {
|
|
131
131
|
if (this.isBindingRegistered) {
|
|
@@ -137,20 +137,32 @@ class CdpBinding {
|
|
|
137
137
|
/**
|
|
138
138
|
* Handle a witness binding call
|
|
139
139
|
*/
|
|
140
|
-
async handleWitnessCall(
|
|
140
|
+
async handleWitnessCall(snapshotName) {
|
|
141
141
|
try {
|
|
142
|
-
const
|
|
143
|
-
logger_1.logger.
|
|
144
|
-
//
|
|
145
|
-
|
|
142
|
+
const name = snapshotName || 'snapshot';
|
|
143
|
+
logger_1.logger.info(`TestivAI: Capturing snapshot: ${name}`);
|
|
144
|
+
// Enable Page domain if not already enabled
|
|
145
|
+
await this.client.enableDomain('Page');
|
|
146
|
+
// Capture screenshot using Page.captureScreenshot
|
|
147
|
+
const screenshotResult = await this.client.send('Page.captureScreenshot', {
|
|
148
|
+
format: 'png',
|
|
149
|
+
captureBeyondViewport: true,
|
|
150
|
+
});
|
|
151
|
+
// Create snapshot object
|
|
152
|
+
const snapshot = {
|
|
153
|
+
name,
|
|
154
|
+
data: screenshotResult.data,
|
|
155
|
+
timestamp: new Date().toISOString(),
|
|
156
|
+
};
|
|
146
157
|
// Add to snapshots array
|
|
147
158
|
this.snapshots.push(snapshot);
|
|
159
|
+
logger_1.logger.info(`TestivAI: Captured snapshot: ${name}`);
|
|
148
160
|
// Send ACK to resolve the Promise
|
|
149
161
|
await this.sendAck();
|
|
150
|
-
logger_1.logger.debug(`Captured and ACK'd: ${
|
|
162
|
+
logger_1.logger.debug(`TestivAI: Captured and ACK'd: ${name}`);
|
|
151
163
|
}
|
|
152
164
|
catch (error) {
|
|
153
|
-
logger_1.logger.error(`Failed to handle witness call for ${
|
|
165
|
+
logger_1.logger.error(`TestivAI: Failed to handle witness call for ${snapshotName}:`, error);
|
|
154
166
|
// Still send ACK to avoid hanging the test
|
|
155
167
|
await this.sendAck();
|
|
156
168
|
}
|
|
@@ -188,6 +200,15 @@ class CdpBinding {
|
|
|
188
200
|
isRegistered() {
|
|
189
201
|
return this.isBindingRegistered;
|
|
190
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Clean up resources
|
|
205
|
+
*/
|
|
206
|
+
cleanup() {
|
|
207
|
+
if (this.pollInterval) {
|
|
208
|
+
clearInterval(this.pollInterval);
|
|
209
|
+
this.pollInterval = undefined;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
191
212
|
}
|
|
192
213
|
exports.CdpBinding = CdpBinding;
|
|
193
214
|
//# sourceMappingURL=binding.js.map
|
package/dist/cdp/binding.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/cdp/binding.ts"],"names":[],"mappings":";;;AACA,uCAAuC;AACvC,4CAAyC;AAEzC;;;GAGG;AACH,MAAM,aAAa,GAAG
|
|
1
|
+
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/cdp/binding.ts"],"names":[],"mappings":"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"}
|