@haibun/web-playwright 3.1.1 → 3.3.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.
- package/build/BrowserFactory.d.ts +11 -11
- package/build/BrowserFactory.d.ts.map +1 -1
- package/build/BrowserFactory.js +40 -46
- package/build/BrowserFactory.js.map +1 -1
- package/build/PlaywrightEvents.d.ts +2 -2
- package/build/PlaywrightEvents.d.ts.map +1 -1
- package/build/PlaywrightEvents.js +41 -23
- package/build/PlaywrightEvents.js.map +1 -1
- package/build/cycles.d.ts.map +1 -1
- package/build/cycles.js +82 -36
- package/build/cycles.js.map +1 -1
- package/build/interactionSteps.d.ts +40 -51
- package/build/interactionSteps.d.ts.map +1 -1
- package/build/interactionSteps.js +32 -51
- package/build/interactionSteps.js.map +1 -1
- package/build/rest-playwright.d.ts +25 -22
- package/build/rest-playwright.d.ts.map +1 -1
- package/build/rest-playwright.js +16 -17
- package/build/rest-playwright.js.map +1 -1
- package/build/twin-page.d.ts +1 -1
- package/build/twin-page.d.ts.map +1 -1
- package/build/twin-page.js +4 -8
- package/build/twin-page.js.map +1 -1
- package/build/web-playwright.d.ts +18 -37
- package/build/web-playwright.d.ts.map +1 -1
- package/build/web-playwright.js +60 -79
- package/build/web-playwright.js.map +1 -1
- package/package.json +12 -7
- package/build/monitor/MonitorHandler.d.ts +0 -52
- package/build/monitor/MonitorHandler.d.ts.map +0 -1
- package/build/monitor/MonitorHandler.js +0 -176
- package/build/monitor/MonitorHandler.js.map +0 -1
- package/build/monitor/artifactDisplays/HtmlArtifactDisplay.d.ts +0 -9
- package/build/monitor/artifactDisplays/HtmlArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/HtmlArtifactDisplay.js +0 -27
- package/build/monitor/artifactDisplays/HtmlArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/ImageArtifactDisplay.d.ts +0 -9
- package/build/monitor/artifactDisplays/ImageArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/ImageArtifactDisplay.js +0 -17
- package/build/monitor/artifactDisplays/ImageArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/JsonArtifactDisplay.d.ts +0 -8
- package/build/monitor/artifactDisplays/JsonArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/JsonArtifactDisplay.js +0 -26
- package/build/monitor/artifactDisplays/JsonArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/JsonArtifactHTTPTrace.d.ts +0 -13
- package/build/monitor/artifactDisplays/JsonArtifactHTTPTrace.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/JsonArtifactHTTPTrace.js +0 -47
- package/build/monitor/artifactDisplays/JsonArtifactHTTPTrace.js.map +0 -1
- package/build/monitor/artifactDisplays/ResolvedFeaturesArtifactDisplay.d.ts +0 -9
- package/build/monitor/artifactDisplays/ResolvedFeaturesArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/ResolvedFeaturesArtifactDisplay.js +0 -147
- package/build/monitor/artifactDisplays/ResolvedFeaturesArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/SequenceDiagramGenerator.d.ts +0 -32
- package/build/monitor/artifactDisplays/SequenceDiagramGenerator.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/SequenceDiagramGenerator.js +0 -258
- package/build/monitor/artifactDisplays/SequenceDiagramGenerator.js.map +0 -1
- package/build/monitor/artifactDisplays/SpeechArtifactDisplay.d.ts +0 -9
- package/build/monitor/artifactDisplays/SpeechArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/SpeechArtifactDisplay.js +0 -19
- package/build/monitor/artifactDisplays/SpeechArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/VideoArtifactDisplay.d.ts +0 -9
- package/build/monitor/artifactDisplays/VideoArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/VideoArtifactDisplay.js +0 -21
- package/build/monitor/artifactDisplays/VideoArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/VideoStartArtifactDisplay.d.ts +0 -9
- package/build/monitor/artifactDisplays/VideoStartArtifactDisplay.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/VideoStartArtifactDisplay.js +0 -16
- package/build/monitor/artifactDisplays/VideoStartArtifactDisplay.js.map +0 -1
- package/build/monitor/artifactDisplays/artifactDisplayBase.d.ts +0 -20
- package/build/monitor/artifactDisplays/artifactDisplayBase.d.ts.map +0 -1
- package/build/monitor/artifactDisplays/artifactDisplayBase.js +0 -40
- package/build/monitor/artifactDisplays/artifactDisplayBase.js.map +0 -1
- package/build/monitor/controls.d.ts +0 -13
- package/build/monitor/controls.d.ts.map +0 -1
- package/build/monitor/controls.js +0 -349
- package/build/monitor/controls.js.map +0 -1
- package/build/monitor/disclosureJson.d.ts +0 -3
- package/build/monitor/disclosureJson.d.ts.map +0 -1
- package/build/monitor/disclosureJson.js +0 -353
- package/build/monitor/disclosureJson.js.map +0 -1
- package/build/monitor/graph/feature-bases.d.ts +0 -5
- package/build/monitor/graph/feature-bases.d.ts.map +0 -1
- package/build/monitor/graph/feature-bases.js +0 -36
- package/build/monitor/graph/feature-bases.js.map +0 -1
- package/build/monitor/graph/generateMermaidGraph.d.ts +0 -11
- package/build/monitor/graph/generateMermaidGraph.d.ts.map +0 -1
- package/build/monitor/graph/generateMermaidGraph.js +0 -314
- package/build/monitor/graph/generateMermaidGraph.js.map +0 -1
- package/build/monitor/graph/graphUtils.d.ts +0 -3
- package/build/monitor/graph/graphUtils.d.ts.map +0 -1
- package/build/monitor/graph/graphUtils.js +0 -26
- package/build/monitor/graph/graphUtils.js.map +0 -1
- package/build/monitor/graph/mermaidGraphLinks.d.ts +0 -3
- package/build/monitor/graph/mermaidGraphLinks.d.ts.map +0 -1
- package/build/monitor/graph/mermaidGraphLinks.js +0 -26
- package/build/monitor/graph/mermaidGraphLinks.js.map +0 -1
- package/build/monitor/messages.d.ts +0 -14
- package/build/monitor/messages.d.ts.map +0 -1
- package/build/monitor/messages.js +0 -359
- package/build/monitor/messages.js.map +0 -1
- package/build/monitor/monitor.d.ts +0 -25
- package/build/monitor/monitor.d.ts.map +0 -1
- package/build/monitor/monitor.js +0 -599
- package/build/monitor/monitor.js.map +0 -1
- package/build/monitor/test-utils.d.ts +0 -9
- package/build/monitor/test-utils.d.ts.map +0 -1
- package/build/monitor/test-utils.js +0 -70
- package/build/monitor/test-utils.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Browser, BrowserContext, Page, BrowserType, BrowserContextOptions } from 'playwright';
|
|
2
2
|
import { PlaywrightEvents } from './PlaywrightEvents.js';
|
|
3
3
|
import { TWorld } from '@haibun/core/lib/defs.js';
|
|
4
|
-
import {
|
|
4
|
+
import { TTag } from '@haibun/core/lib/ttag.js';
|
|
5
5
|
export declare const BROWSERS: {
|
|
6
6
|
[name: string]: BrowserType;
|
|
7
7
|
};
|
|
@@ -38,7 +38,7 @@ export declare class BrowserFactory {
|
|
|
38
38
|
[name: string]: Page | undefined;
|
|
39
39
|
};
|
|
40
40
|
contextStats: {
|
|
41
|
-
[
|
|
41
|
+
[featureNum: string]: {
|
|
42
42
|
start: number;
|
|
43
43
|
end?: number;
|
|
44
44
|
duration?: number;
|
|
@@ -51,23 +51,23 @@ export declare class BrowserFactory {
|
|
|
51
51
|
private constructor();
|
|
52
52
|
static getBrowserFactory(world: TWorld, tagConfig: TTaggedBrowserFactoryOptions, tag?: string): BrowserFactory;
|
|
53
53
|
getBrowser(type: string, tag?: string): Promise<Browser>;
|
|
54
|
-
getExistingBrowserContextWithTag({
|
|
55
|
-
|
|
54
|
+
getExistingBrowserContextWithTag({ featureNum }: {
|
|
55
|
+
featureNum: number;
|
|
56
56
|
}): BrowserContext;
|
|
57
|
-
closeContext({
|
|
58
|
-
|
|
57
|
+
closeContext({ featureNum }: {
|
|
58
|
+
featureNum: number;
|
|
59
59
|
}): Promise<void>;
|
|
60
60
|
private captureVideoStart;
|
|
61
61
|
static closeBrowsers(): Promise<void>;
|
|
62
62
|
close(): Promise<void>;
|
|
63
|
-
hasPage({
|
|
64
|
-
|
|
63
|
+
hasPage({ featureNum }: {
|
|
64
|
+
featureNum: number;
|
|
65
65
|
}, tab?: number): boolean;
|
|
66
|
-
registerPopup({
|
|
67
|
-
|
|
66
|
+
registerPopup({ featureNum }: {
|
|
67
|
+
featureNum: number;
|
|
68
68
|
}, tab: number, popup: Page): void;
|
|
69
69
|
getBrowserContextPage(tag: TTag, tab: number): Promise<Page>;
|
|
70
70
|
private pageKey;
|
|
71
|
-
private
|
|
71
|
+
private getBrowserContextWithFeatureNum;
|
|
72
72
|
}
|
|
73
73
|
//# sourceMappingURL=BrowserFactory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserFactory.d.ts","sourceRoot":"","sources":["../src/BrowserFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAA6B,WAAW,EAAW,qBAAqB,EAAiB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"BrowserFactory.d.ts","sourceRoot":"","sources":["../src/BrowserFactory.ts"],"names":[],"mappings":"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"}
|
package/build/BrowserFactory.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { chromium, firefox, webkit, devices } from 'playwright';
|
|
2
|
-
import { EExecutionMessageType } from '@haibun/core/lib/interfaces/logger.js';
|
|
3
2
|
import { PlaywrightEvents } from './PlaywrightEvents.js';
|
|
4
|
-
import { Timer } from '@haibun/core/
|
|
3
|
+
import { Timer } from '@haibun/core/schema/protocol.js';
|
|
5
4
|
export const BROWSERS = {
|
|
6
5
|
firefox,
|
|
7
6
|
chromium,
|
|
@@ -33,42 +32,37 @@ export class BrowserFactory {
|
|
|
33
32
|
return browser;
|
|
34
33
|
}
|
|
35
34
|
}
|
|
36
|
-
getExistingBrowserContextWithTag({
|
|
37
|
-
if (this.browserContexts[
|
|
38
|
-
return this.browserContexts[
|
|
35
|
+
getExistingBrowserContextWithTag({ featureNum }) {
|
|
36
|
+
if (this.browserContexts[featureNum]) {
|
|
37
|
+
return this.browserContexts[featureNum];
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
|
-
async closeContext({
|
|
42
|
-
this.world.
|
|
43
|
-
if (this.browserContexts[
|
|
44
|
-
const p = this.pages[
|
|
40
|
+
async closeContext({ featureNum }) {
|
|
41
|
+
this.world.eventLogger.debug(`closed browser context ${featureNum}`);
|
|
42
|
+
if (this.browserContexts[featureNum] !== undefined) {
|
|
43
|
+
const p = this.pages[featureNum];
|
|
45
44
|
if (p) {
|
|
46
45
|
try {
|
|
47
46
|
await p.close();
|
|
48
47
|
}
|
|
49
48
|
catch (error) {
|
|
50
|
-
this.world.
|
|
49
|
+
this.world.eventLogger.error(`Error closing page: ${error}`);
|
|
51
50
|
}
|
|
52
51
|
}
|
|
53
52
|
}
|
|
54
|
-
await this.browserContexts[
|
|
55
|
-
this.captureVideoStart(
|
|
56
|
-
this.tracers[
|
|
57
|
-
delete this.pages[
|
|
58
|
-
delete this.browserContexts[
|
|
53
|
+
await this.browserContexts[featureNum]?.close();
|
|
54
|
+
this.captureVideoStart(featureNum);
|
|
55
|
+
this.tracers[featureNum]?.close();
|
|
56
|
+
delete this.pages[featureNum];
|
|
57
|
+
delete this.browserContexts[featureNum];
|
|
59
58
|
}
|
|
60
|
-
captureVideoStart(
|
|
61
|
-
this.contextStats[
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
artifactType: 'video/start'
|
|
68
|
-
}],
|
|
69
|
-
tag: this.world.tag
|
|
70
|
-
};
|
|
71
|
-
this.world.logger.debug(`video start`, vs);
|
|
59
|
+
captureVideoStart(featureNum) {
|
|
60
|
+
if (!this.contextStats[featureNum]) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
this.contextStats[featureNum].end = Timer.since();
|
|
64
|
+
this.contextStats[featureNum].duration = this.contextStats[featureNum].end - this.contextStats[featureNum].start;
|
|
65
|
+
this.world.eventLogger.debug(`video stats for ${featureNum}: duration ${this.contextStats[featureNum].duration}`);
|
|
72
66
|
}
|
|
73
67
|
static async closeBrowsers() {
|
|
74
68
|
for (const b in BrowserFactory.browsers) {
|
|
@@ -79,34 +73,34 @@ export class BrowserFactory {
|
|
|
79
73
|
async close() {
|
|
80
74
|
await BrowserFactory.closeBrowsers();
|
|
81
75
|
}
|
|
82
|
-
hasPage({
|
|
83
|
-
return !!this.pages[this.pageKey(
|
|
76
|
+
hasPage({ featureNum }, tab) {
|
|
77
|
+
return !!this.pages[this.pageKey(featureNum, tab)];
|
|
84
78
|
}
|
|
85
|
-
registerPopup({
|
|
86
|
-
const tt = this.pageKey(
|
|
79
|
+
registerPopup({ featureNum }, tab, popup) {
|
|
80
|
+
const tt = this.pageKey(featureNum, tab);
|
|
87
81
|
this.pages[tt] = popup;
|
|
88
82
|
}
|
|
89
83
|
async getBrowserContextPage(tag, tab) {
|
|
90
|
-
const {
|
|
91
|
-
const pageKey = this.pageKey(
|
|
84
|
+
const { featureNum } = tag;
|
|
85
|
+
const pageKey = this.pageKey(featureNum, tab);
|
|
92
86
|
let page = this.pages[pageKey];
|
|
93
87
|
if (page) {
|
|
94
88
|
// await page.bringToFront();
|
|
95
89
|
return page;
|
|
96
90
|
}
|
|
97
|
-
this.world.
|
|
98
|
-
const context = await this.
|
|
91
|
+
this.world.eventLogger.debug(`creating new page for ${featureNum}`);
|
|
92
|
+
const context = await this.getBrowserContextWithFeatureNum(featureNum);
|
|
99
93
|
page = await context.newPage();
|
|
100
94
|
const tracer = await (new PlaywrightEvents(this.world, page, tag)).init();
|
|
101
95
|
this.pages[pageKey] = page;
|
|
102
|
-
this.tracers[
|
|
96
|
+
this.tracers[featureNum] = tracer;
|
|
103
97
|
return page;
|
|
104
98
|
}
|
|
105
|
-
pageKey(
|
|
106
|
-
return `${
|
|
99
|
+
pageKey(featureNum, tab) {
|
|
100
|
+
return `${featureNum}-${tab}`;
|
|
107
101
|
}
|
|
108
|
-
async
|
|
109
|
-
if (!this.browserContexts[
|
|
102
|
+
async getBrowserContextWithFeatureNum(featureNum, tag = DEFAULT_CONFIG_TAG) {
|
|
103
|
+
if (!this.browserContexts[featureNum]) {
|
|
110
104
|
let browserContext;
|
|
111
105
|
const config = BrowserFactory.configs[tag];
|
|
112
106
|
const deviceContext = config.device
|
|
@@ -119,21 +113,21 @@ export class BrowserFactory {
|
|
|
119
113
|
};
|
|
120
114
|
const launchConfig = { ...deviceContext, ...config.options, ...config.launchOptions };
|
|
121
115
|
if (config.persistentDirectory) {
|
|
122
|
-
this.world.
|
|
116
|
+
this.world.eventLogger.debug(`creating new persistent context ${featureNum} ${config.type}, ${config.persistentDirectory} with ${JSON.stringify(BrowserFactory.configs)}`);
|
|
123
117
|
browserContext = await BrowserFactory.configs[tag].browserType.launchPersistentContext(config.persistentDirectory, launchConfig);
|
|
124
118
|
}
|
|
125
119
|
else {
|
|
126
|
-
this.world.
|
|
120
|
+
this.world.eventLogger.debug(`creating new context ${featureNum} ${config.type}`);
|
|
127
121
|
const browser = await this.getBrowser(config.type);
|
|
128
122
|
browserContext = await browser.newContext(launchConfig);
|
|
129
123
|
}
|
|
130
|
-
this.browserContexts[
|
|
131
|
-
this.contextStats[
|
|
124
|
+
this.browserContexts[featureNum] = browserContext;
|
|
125
|
+
this.contextStats[featureNum] = { start: Timer.since() };
|
|
132
126
|
if (BrowserFactory.configs.defaultTimeout) {
|
|
133
|
-
this.browserContexts[
|
|
127
|
+
this.browserContexts[featureNum].setDefaultTimeout(config.defaultTimeout);
|
|
134
128
|
}
|
|
135
129
|
}
|
|
136
|
-
return this.browserContexts[
|
|
130
|
+
return this.browserContexts[featureNum];
|
|
137
131
|
}
|
|
138
132
|
}
|
|
139
133
|
//# sourceMappingURL=BrowserFactory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BrowserFactory.js","sourceRoot":"","sources":["../src/BrowserFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAe,OAAO,EAAwC,MAAM,YAAY,CAAC;AAElJ,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"BrowserFactory.js","sourceRoot":"","sources":["../src/BrowserFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Page } from 'playwright';
|
|
2
|
-
import { TArtifactHTTPTrace } from '@haibun/core/lib/interfaces/logger.js';
|
|
3
2
|
import { TTag } from '@haibun/core/lib/ttag.js';
|
|
4
3
|
import { TWorld } from '@haibun/core/lib/defs.js';
|
|
5
4
|
type TEtc = {
|
|
@@ -14,6 +13,7 @@ export declare class PlaywrightEvents {
|
|
|
14
13
|
private page;
|
|
15
14
|
private tag;
|
|
16
15
|
navigateCount: number;
|
|
16
|
+
private pendingRequests;
|
|
17
17
|
constructor(world: TWorld, page: Page, tag: TTag);
|
|
18
18
|
init(): Promise<this>;
|
|
19
19
|
private logRequest;
|
|
@@ -21,7 +21,7 @@ export declare class PlaywrightEvents {
|
|
|
21
21
|
private logResponse;
|
|
22
22
|
private framenavigated;
|
|
23
23
|
close(): void;
|
|
24
|
-
log(label: string, httpEvent:
|
|
24
|
+
log(label: string, httpEvent: 'request' | 'response' | 'route', maybeFrameURL: string, targetURL: string, etc: TEtc): void;
|
|
25
25
|
}
|
|
26
26
|
export {};
|
|
27
27
|
//# sourceMappingURL=PlaywrightEvents.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightEvents.d.ts","sourceRoot":"","sources":["../src/PlaywrightEvents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAA4B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"PlaywrightEvents.d.ts","sourceRoot":"","sources":["../src/PlaywrightEvents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAA4B,MAAM,YAAY,CAAC;AAG5D,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAKlD,KAAK,IAAI,GAAG;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB,CAAA;AAGD,qBAAa,gBAAgB;IAIhB,OAAO,CAAC,KAAK;IAAU,OAAO,CAAC,IAAI;IAAQ,OAAO,CAAC,GAAG;IAHlE,aAAa,SAAK;IAClB,OAAO,CAAC,eAAe,CAA8B;gBAEjC,KAAK,EAAE,MAAM,EAAU,IAAI,EAAE,IAAI,EAAU,GAAG,EAAE,IAAI;IAGlE,IAAI;IASV,OAAO,CAAC,UAAU;YAaJ,YAAY;IAM1B,OAAO,CAAC,WAAW;IA2BnB,OAAO,CAAC,cAAc;IAmBf,KAAK,IAAI,IAAI;IAKpB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI;CA0BnH"}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { Origin } from '@haibun/core/lib/defs.js';
|
|
1
|
+
import { HttpTraceArtifact } from '@haibun/core/schema/protocol.js';
|
|
2
|
+
import { Origin } from '@haibun/core/schema/protocol.js';
|
|
4
3
|
import { DOMAIN_STRING } from '@haibun/core/lib/domain-types.js';
|
|
5
|
-
import {
|
|
4
|
+
import { trackHttpHost, trackHttpRequest } from '@haibun/core/lib/http-observations.js';
|
|
6
5
|
export class PlaywrightEvents {
|
|
7
6
|
world;
|
|
8
7
|
page;
|
|
9
8
|
tag;
|
|
10
9
|
navigateCount = 0;
|
|
10
|
+
pendingRequests = new Map();
|
|
11
11
|
constructor(world, page, tag) {
|
|
12
12
|
this.world = world;
|
|
13
13
|
this.page = page;
|
|
14
14
|
this.tag = tag;
|
|
15
15
|
}
|
|
16
16
|
async init() {
|
|
17
|
-
this.world.
|
|
17
|
+
this.world.eventLogger.debug(`setPage ${JSON.stringify(this.tag)}`);
|
|
18
18
|
this.page.on('request', this.logRequest.bind(this));
|
|
19
19
|
// biome-disable-next-line @typescript-eslint/no-floating-promises
|
|
20
20
|
await this.page.route('**/*', this.routeRequest.bind(this));
|
|
@@ -23,13 +23,14 @@ export class PlaywrightEvents {
|
|
|
23
23
|
return this;
|
|
24
24
|
}
|
|
25
25
|
logRequest(request, type = 'request') {
|
|
26
|
+
this.pendingRequests.set(request, Date.now());
|
|
26
27
|
const frameURL = request.frame().url();
|
|
27
28
|
const etc = {
|
|
28
29
|
method: request.method(),
|
|
29
30
|
headers: request.headers(),
|
|
30
31
|
postData: request.postData(),
|
|
31
32
|
};
|
|
32
|
-
this.log(`${type} ${etc.method}`, type, frameURL, request.url(), etc);
|
|
33
|
+
void this.log(`${type} ${etc.method}`, type, frameURL, request.url(), etc);
|
|
33
34
|
return;
|
|
34
35
|
}
|
|
35
36
|
async routeRequest(route, request) {
|
|
@@ -38,13 +39,26 @@ export class PlaywrightEvents {
|
|
|
38
39
|
await route.continue();
|
|
39
40
|
}
|
|
40
41
|
logResponse(response) {
|
|
41
|
-
const
|
|
42
|
+
const request = response.request();
|
|
43
|
+
const startTime = this.pendingRequests.get(request);
|
|
44
|
+
const duration = startTime ? Date.now() - startTime : 0;
|
|
45
|
+
if (startTime) {
|
|
46
|
+
this.pendingRequests.delete(request);
|
|
47
|
+
}
|
|
48
|
+
const frameURL = request.frame().url();
|
|
42
49
|
const etc = {
|
|
43
50
|
status: response.status(),
|
|
44
51
|
statusText: response.statusText(),
|
|
45
52
|
headers: response.headers()
|
|
46
53
|
};
|
|
47
|
-
this.log(`response ${etc.status}`, 'response', frameURL, response.url(), etc);
|
|
54
|
+
void this.log(`response ${etc.status}`, 'response', frameURL, response.url(), etc);
|
|
55
|
+
// Track request using shared helper
|
|
56
|
+
trackHttpRequest(this.world, {
|
|
57
|
+
url: response.url(),
|
|
58
|
+
status: response.status(),
|
|
59
|
+
time: duration,
|
|
60
|
+
method: request.method()
|
|
61
|
+
});
|
|
48
62
|
return;
|
|
49
63
|
}
|
|
50
64
|
framenavigated(frame) {
|
|
@@ -53,9 +67,13 @@ export class PlaywrightEvents {
|
|
|
53
67
|
const provenance = { in: 'PlaywrightEvents.framenavigated', seq: [], when: 'framenavigated' };
|
|
54
68
|
this.world.shared.setForStepper('WebPlaywright', { term: 'currentURI', value: url, domain: DOMAIN_STRING, origin: Origin.var }, provenance);
|
|
55
69
|
this.world.shared.setForStepper('WebPlaywright', { term: 'navigateCount', value: this.navigateCount, domain: DOMAIN_STRING, origin: Origin.var }, provenance);
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
|
|
70
|
+
// Store visited pages in observations for 'every url observed in visited pages is ...'
|
|
71
|
+
if (!this.world.runtime.observations) {
|
|
72
|
+
this.world.runtime.observations = new Map();
|
|
73
|
+
}
|
|
74
|
+
const visitedPages = this.world.runtime.observations.get('visitedPages') || [];
|
|
75
|
+
visitedPages.push(url);
|
|
76
|
+
this.world.runtime.observations.set('visitedPages', visitedPages);
|
|
59
77
|
this.navigateCount++;
|
|
60
78
|
}
|
|
61
79
|
}
|
|
@@ -74,19 +92,19 @@ export class PlaywrightEvents {
|
|
|
74
92
|
requestingURL,
|
|
75
93
|
...etc
|
|
76
94
|
};
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
95
|
+
// Track HTTP hosts using shared helper
|
|
96
|
+
trackHttpHost(this.world, targetURL);
|
|
97
|
+
// Emit HTTP trace artifact
|
|
98
|
+
const artifact = HttpTraceArtifact.parse({
|
|
99
|
+
id: `http-trace-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
100
|
+
timestamp: Date.now(),
|
|
101
|
+
kind: 'artifact',
|
|
102
|
+
artifactType: 'http-trace',
|
|
103
|
+
level: 'debug',
|
|
80
104
|
httpEvent,
|
|
81
|
-
trace: logData
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const mc = {
|
|
85
|
-
incident: EExecutionMessageType.TRACE,
|
|
86
|
-
artifacts: [artifact],
|
|
87
|
-
tag: this.tag
|
|
88
|
-
};
|
|
89
|
-
this.world.logger.debug(`playwright ${label} ${shortenURI(logData.requestingURL)} ➔ ${targetWithoutRequestingBase}`, mc);
|
|
105
|
+
trace: logData
|
|
106
|
+
});
|
|
107
|
+
this.world.eventLogger.emit(artifact);
|
|
90
108
|
}
|
|
91
109
|
}
|
|
92
110
|
//# sourceMappingURL=PlaywrightEvents.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaywrightEvents.js","sourceRoot":"","sources":["../src/PlaywrightEvents.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"PlaywrightEvents.js","sourceRoot":"","sources":["../src/PlaywrightEvents.ts"],"names":[],"mappings":"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"}
|
package/build/cycles.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cycles.d.ts","sourceRoot":"","sources":["../src/cycles.ts"],"names":[],"mappings":"AAGA,OAAO,
|
|
1
|
+
{"version":3,"file":"cycles.d.ts","sourceRoot":"","sources":["../src/cycles.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsB,cAAc,EAA4F,MAAM,0BAA0B,CAAC;AAKxK,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA6CpD,eAAO,MAAM,MAAM,GAAI,IAAI,aAAa,KAAG,cAsCzC,CAAC"}
|
package/build/cycles.js
CHANGED
|
@@ -1,34 +1,71 @@
|
|
|
1
1
|
import { rmSync } from 'fs';
|
|
2
|
-
import { resolve } from 'path
|
|
3
|
-
import {
|
|
2
|
+
import { relative, resolve } from 'path';
|
|
3
|
+
import { VideoArtifact } from '@haibun/core/schema/protocol.js';
|
|
4
4
|
import { EMediaTypes } from '@haibun/domain-storage/media-types.js';
|
|
5
|
-
import { EMonitoringTypes } from './web-playwright.js';
|
|
6
5
|
import { WebPlaywrightDomains } from './domains.js';
|
|
6
|
+
// HTTP trace observation sources
|
|
7
|
+
const httpTraceSources = [
|
|
8
|
+
{
|
|
9
|
+
name: 'http-trace hosts',
|
|
10
|
+
observe: (world) => {
|
|
11
|
+
const httpHosts = world.runtime.observations?.get('httpHosts');
|
|
12
|
+
if (!httpHosts)
|
|
13
|
+
return { items: [], metrics: {} };
|
|
14
|
+
const items = [...httpHosts.keys()];
|
|
15
|
+
const metrics = {};
|
|
16
|
+
for (const [host, count] of httpHosts.entries()) {
|
|
17
|
+
metrics[host] = { count };
|
|
18
|
+
}
|
|
19
|
+
return { items, metrics };
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'http-trace',
|
|
24
|
+
observe: (world) => {
|
|
25
|
+
const requests = world.runtime.observations?.get('httpRequests');
|
|
26
|
+
if (!requests)
|
|
27
|
+
return { items: [], metrics: {} };
|
|
28
|
+
const items = [...requests.keys()];
|
|
29
|
+
const metrics = {};
|
|
30
|
+
for (const [id, data] of requests.entries()) {
|
|
31
|
+
metrics[id] = data;
|
|
32
|
+
}
|
|
33
|
+
return { items, metrics };
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'visited pages',
|
|
38
|
+
observe: (world) => {
|
|
39
|
+
const visitedPages = world.runtime.observations?.get('visitedPages');
|
|
40
|
+
if (!visitedPages)
|
|
41
|
+
return { items: [], metrics: {} };
|
|
42
|
+
const metrics = {};
|
|
43
|
+
for (let i = 0; i < visitedPages.length; i++) {
|
|
44
|
+
metrics[visitedPages[i]] = { index: i };
|
|
45
|
+
}
|
|
46
|
+
return { items: visitedPages, metrics };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
];
|
|
7
50
|
export const cycles = (wp) => ({
|
|
8
|
-
|
|
51
|
+
getConcerns: () => ({ domains: WebPlaywrightDomains, sources: httpTraceSources }),
|
|
9
52
|
// biome-disable-next-line @typescript-eslint/no-unused-vars
|
|
10
53
|
async onFailure({ failedStep }) {
|
|
11
54
|
if (wp.bf?.hasPage(wp.getWorld().tag, wp.tab)) {
|
|
12
|
-
await wp.captureFailureScreenshot(
|
|
55
|
+
await wp.captureFailureScreenshot('failure', failedStep);
|
|
13
56
|
}
|
|
14
57
|
},
|
|
15
58
|
async startExecution(resolvedFeatures) {
|
|
16
|
-
if (wp.monitor) {
|
|
17
|
-
await wp.createMonitor();
|
|
18
|
-
await wp.monitorHandler.createMonitorPage(wp);
|
|
19
|
-
}
|
|
20
59
|
if (wp.twin) {
|
|
21
60
|
await wp.createTwin();
|
|
22
61
|
}
|
|
23
|
-
await writeFeaturesArtifact(wp, 'features', resolvedFeatures);
|
|
24
62
|
},
|
|
25
63
|
async startFeature({ resolvedFeature, index }) {
|
|
26
64
|
wp.tab = 0;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
65
|
+
wp.resetVideoStartEmitted(); // Reset for new feature's video recording
|
|
66
|
+
// Reset API state to prevent header leakage between features
|
|
67
|
+
wp.extraHTTPHeaders = {};
|
|
68
|
+
wp.apiUserAgent = undefined;
|
|
32
69
|
if (wp.twinPage) {
|
|
33
70
|
wp.twinPage.updateWorld(wp.getWorld());
|
|
34
71
|
}
|
|
@@ -42,42 +79,51 @@ export const cycles = (wp) => ({
|
|
|
42
79
|
if (wp.twin) {
|
|
43
80
|
await wp.twinPage.writePage();
|
|
44
81
|
}
|
|
45
|
-
if (wp.monitor === EMonitoringTypes.MONITOR_EACH) {
|
|
46
|
-
await wp.callClosers();
|
|
47
|
-
await wp.monitorHandler.writeMonitor();
|
|
48
|
-
}
|
|
49
82
|
},
|
|
50
83
|
async endExecution() {
|
|
51
|
-
|
|
52
|
-
await wp.callClosers();
|
|
53
|
-
await wp.monitorHandler.writeMonitor();
|
|
54
|
-
}
|
|
84
|
+
// empty
|
|
55
85
|
},
|
|
56
86
|
});
|
|
57
87
|
async function writeFeaturesArtifact(wp, type, resolvedFeatures) {
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
const path = resolve(wp.storage.fromLocation(mediaType, loc, `${type}.json`));
|
|
62
|
-
await wp.storage.writeFile(path, JSON.stringify(resolvedFeatures, null, 2), mediaType);
|
|
88
|
+
const filename = `${type}.json`;
|
|
89
|
+
const contents = JSON.stringify(resolvedFeatures, null, 2);
|
|
90
|
+
await wp.storage.saveArtifact(filename, contents, EMediaTypes.json, 'json');
|
|
63
91
|
}
|
|
64
92
|
async function closeAfterFeature(wp) {
|
|
65
93
|
for (const file of wp.downloaded) {
|
|
66
|
-
wp.getWorld().
|
|
94
|
+
wp.getWorld().eventLogger.debug(`removing ${JSON.stringify(file)}`);
|
|
67
95
|
rmSync(file);
|
|
68
96
|
wp.downloaded = [];
|
|
69
97
|
}
|
|
70
98
|
if (wp.hasFactory) {
|
|
71
99
|
if (wp.captureVideo) {
|
|
72
100
|
const page = await wp.getPage();
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
101
|
+
const videoPath = await page.video().path();
|
|
102
|
+
const world = wp.getWorld();
|
|
103
|
+
// Compute path relative to feature capture dir for serialized HTML
|
|
104
|
+
const basePath = wp.storage.getArtifactBasePath();
|
|
105
|
+
const featureRelPath = relative(resolve(basePath), videoPath);
|
|
106
|
+
// For artifact, use feature-relative path (strip featn-N prefix)
|
|
107
|
+
// const match = featureRelPath.match(/^featn-\d+(?:-.*)?\/(.*)$/);
|
|
108
|
+
// const path = match ? './' + match[1] : './' + featureRelPath;
|
|
109
|
+
// Emit video artifact event (with isTimeLined for timeline sync)
|
|
110
|
+
// VideoStartArtifact is emitted in getPage() when recording starts
|
|
111
|
+
const featureStep = {
|
|
112
|
+
seqPath: [world.tag.featureNum, 0, 0],
|
|
113
|
+
source: { path: world.runtime.feature || 'feature' },
|
|
114
|
+
in: 'feature video',
|
|
115
|
+
action: {},
|
|
79
116
|
};
|
|
80
|
-
|
|
117
|
+
const videoEvent = VideoArtifact.parse({
|
|
118
|
+
id: `feat-${world.tag.featureNum}.video`,
|
|
119
|
+
timestamp: Date.now(),
|
|
120
|
+
kind: 'artifact',
|
|
121
|
+
artifactType: 'video',
|
|
122
|
+
path: featureRelPath, // Use base-relative for live, transformed for serialized
|
|
123
|
+
mimetype: 'video/webm',
|
|
124
|
+
isTimeLined: true,
|
|
125
|
+
});
|
|
126
|
+
world.eventLogger.artifact(featureStep, videoEvent);
|
|
81
127
|
}
|
|
82
128
|
// close the context, which closes any pages
|
|
83
129
|
if (wp.hasFactory) {
|
package/build/cycles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cycles.js","sourceRoot":"","sources":["../src/cycles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"cycles.js","sourceRoot":"","sources":["../src/cycles.ts"],"names":[],"mappings":"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"}
|