@testivai/witness-cdp 0.1.10 → 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 -34
- 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,34 +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);
|
|
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
|
|
18
21
|
return new Promise(function(resolve) {
|
|
19
|
-
// Store resolve function for ACK
|
|
20
22
|
window.__testivaiResolve = resolve;
|
|
21
|
-
|
|
22
|
-
// Set a timeout in case ACK never comes
|
|
23
|
-
const timeout = setTimeout(function() {
|
|
24
|
-
console.warn('TestivAI: Timeout waiting for capture ACK, resolving anyway');
|
|
25
|
-
resolve();
|
|
26
|
-
}, 5000); // Shorter timeout
|
|
27
|
-
|
|
28
|
-
// Send the capture request via console message
|
|
29
|
-
// The CDP client will intercept this
|
|
30
|
-
console.log('__TESTIVAI_CAPTURE__:' + JSON.stringify(name));
|
|
31
23
|
});
|
|
32
24
|
};
|
|
33
25
|
|
|
34
|
-
|
|
35
|
-
console.log('TestivAI: Binding ready (using console message bridge)');
|
|
26
|
+
console.log('TestivAI: Binding ready');
|
|
36
27
|
})();
|
|
37
28
|
`;
|
|
38
29
|
/**
|
|
@@ -65,7 +56,6 @@ class CdpBinding {
|
|
|
65
56
|
try {
|
|
66
57
|
// Enable Runtime domain
|
|
67
58
|
await this.client.enableDomain('Runtime');
|
|
68
|
-
// Enable console API to capture messages
|
|
69
59
|
await this.client.send('Runtime.enable');
|
|
70
60
|
// Inject the client-side script
|
|
71
61
|
await this.injectClientScript();
|
|
@@ -106,18 +96,36 @@ class CdpBinding {
|
|
|
106
96
|
}
|
|
107
97
|
}
|
|
108
98
|
/**
|
|
109
|
-
* Set up
|
|
99
|
+
* Set up polling for capture requests
|
|
110
100
|
*/
|
|
111
101
|
setupEventListeners() {
|
|
112
|
-
//
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
+
}
|
|
119
122
|
}
|
|
120
|
-
|
|
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;
|
|
121
129
|
// Listen for frame navigation to re-inject script
|
|
122
130
|
this.client.on('frameNavigated', async () => {
|
|
123
131
|
if (this.isBindingRegistered) {
|
|
@@ -129,20 +137,32 @@ class CdpBinding {
|
|
|
129
137
|
/**
|
|
130
138
|
* Handle a witness binding call
|
|
131
139
|
*/
|
|
132
|
-
async handleWitnessCall(
|
|
140
|
+
async handleWitnessCall(snapshotName) {
|
|
133
141
|
try {
|
|
134
|
-
const
|
|
135
|
-
logger_1.logger.
|
|
136
|
-
//
|
|
137
|
-
|
|
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
|
+
};
|
|
138
157
|
// Add to snapshots array
|
|
139
158
|
this.snapshots.push(snapshot);
|
|
159
|
+
logger_1.logger.info(`TestivAI: Captured snapshot: ${name}`);
|
|
140
160
|
// Send ACK to resolve the Promise
|
|
141
161
|
await this.sendAck();
|
|
142
|
-
logger_1.logger.debug(`Captured and ACK'd: ${
|
|
162
|
+
logger_1.logger.debug(`TestivAI: Captured and ACK'd: ${name}`);
|
|
143
163
|
}
|
|
144
164
|
catch (error) {
|
|
145
|
-
logger_1.logger.error(`Failed to handle witness call for ${
|
|
165
|
+
logger_1.logger.error(`TestivAI: Failed to handle witness call for ${snapshotName}:`, error);
|
|
146
166
|
// Still send ACK to avoid hanging the test
|
|
147
167
|
await this.sendAck();
|
|
148
168
|
}
|
|
@@ -180,6 +200,15 @@ class CdpBinding {
|
|
|
180
200
|
isRegistered() {
|
|
181
201
|
return this.isBindingRegistered;
|
|
182
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Clean up resources
|
|
205
|
+
*/
|
|
206
|
+
cleanup() {
|
|
207
|
+
if (this.pollInterval) {
|
|
208
|
+
clearInterval(this.pollInterval);
|
|
209
|
+
this.pollInterval = undefined;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
183
212
|
}
|
|
184
213
|
exports.CdpBinding = CdpBinding;
|
|
185
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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"}
|