@e2e-dev/web 0.11.0-canary-20260928184528 → 0.11.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/README.md +17 -14
- package/dist/.build.json +1 -1
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +24 -4
- package/dist/actions.js.map +1 -1
- package/dist/attempt-session.d.ts +38 -3
- package/dist/attempt-session.d.ts.map +1 -1
- package/dist/attempt-session.js +71 -16
- package/dist/attempt-session.js.map +1 -1
- package/dist/browser-connection.d.ts.map +1 -1
- package/dist/browser-connection.js +12 -1
- package/dist/browser-connection.js.map +1 -1
- package/dist/{web.d.ts → browser.d.ts} +18 -9
- package/dist/browser.d.ts.map +1 -0
- package/dist/{web.js → browser.js} +35 -19
- package/dist/browser.js.map +1 -0
- package/dist/downloads.d.ts +29 -0
- package/dist/downloads.d.ts.map +1 -0
- package/dist/downloads.js +74 -0
- package/dist/downloads.js.map +1 -0
- package/dist/engine.d.ts +2 -2
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +113 -18
- package/dist/engine.js.map +1 -1
- package/dist/in-page/read-semantics.d.ts.map +1 -1
- package/dist/in-page/read-semantics.js +143 -34
- package/dist/in-page/read-semantics.js.map +1 -1
- package/dist/index.d.ts +19 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/locators.d.ts.map +1 -1
- package/dist/locators.js +26 -7
- package/dist/locators.js.map +1 -1
- package/dist/protected-app.d.ts +6 -2
- package/dist/protected-app.d.ts.map +1 -1
- package/dist/protected-app.js +18 -5
- package/dist/protected-app.js.map +1 -1
- package/dist/provider-video.d.ts +48 -0
- package/dist/provider-video.d.ts.map +1 -0
- package/dist/provider-video.js +80 -0
- package/dist/provider-video.js.map +1 -0
- package/dist/provider.d.ts +100 -5
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +148 -14
- package/dist/provider.js.map +1 -1
- package/dist/surface.d.ts +57 -13
- package/dist/surface.d.ts.map +1 -1
- package/dist/surface.js +41 -10
- package/dist/surface.js.map +1 -1
- package/dist/video.d.ts +34 -10
- package/dist/video.d.ts.map +1 -1
- package/dist/video.js +19 -10
- package/dist/video.js.map +1 -1
- package/package.json +4 -4
- package/dist/web.d.ts.map +0 -1
- package/dist/web.js.map +0 -1
package/dist/locators.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locators.js","sourceRoot":"","sources":["../src/locators.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAG1D,OAAO,EAAE,WAAW,EAAgE,MAAM,YAAY,CAAC;AACvG,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAIvD,SAAS,WAAW,CAAC,OAAoB;IACvC,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAChF,OAAO,OAAO,CAAC,KAAK,CAAC;AACvB,CAAC;AAED,SAAS,YAAY,CAAC,OAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,cAAc,CAAC,SAAiB,EAAE,OAAoB;IAC7D,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,MAAM,KAAK,GACT,OAAO,CAAC,IAAI,KAAK,QAAQ;QACvB,CAAC,CAAC,sBAAsB,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;IACxE,OAAO,oBAAoB,IAAI,IAAI,KAAK,GAAG,CAAC;AAC9C,CAAC;AAED,uGAAuG;AACvG,SAAS,sBAAsB,CAAC,EAAU;IACxC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC,EAAE,CAAC;SACd,OAAO,CAAC,0BAA0B,EAAE,UAAU,CAAC;SAC/C,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,0BAA0B,GAAqC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAEtF,2FAA2F;AAC3F,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAoBlD
|
|
1
|
+
{"version":3,"file":"locators.js","sourceRoot":"","sources":["../src/locators.ts"],"names":[],"mappings":"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"}
|
package/dist/protected-app.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* context it creates; nothing here holds state.
|
|
6
6
|
*/
|
|
7
7
|
import type { BrowserContext } from 'playwright';
|
|
8
|
+
import { type ResolveSecretOptions, type Secret } from 'e2e/engine';
|
|
8
9
|
import type { WebBasicAuth } from './surface.ts';
|
|
9
10
|
/** The credentials Playwright answers an HTTP authentication challenge with. */
|
|
10
11
|
export interface PlaywrightHttpCredential {
|
|
@@ -26,7 +27,10 @@ export declare function installSiteHeaders(context: BrowserContext, site: string
|
|
|
26
27
|
* The basic-auth credentials a context answers a challenge with, as
|
|
27
28
|
* Playwright's own `httpCredentials` does: on a 401 from any origin. A site
|
|
28
29
|
* cannot be enumerated into the exact origins Playwright scopes by, and a
|
|
29
|
-
* challenge is answered only where one is issued.
|
|
30
|
+
* challenge is answered only where one is issued. A `Secret` password
|
|
31
|
+
* resolves through the attempt, which registers the value for redaction, and
|
|
32
|
+
* the `Authorization` credential Playwright sends with it too: a page that
|
|
33
|
+
* echoes its request headers shows that, not the password.
|
|
30
34
|
*/
|
|
31
|
-
export declare function httpCredentials(basicAuth: WebBasicAuth
|
|
35
|
+
export declare function httpCredentials(basicAuth: WebBasicAuth, resolveSecret: (secret: Secret, options?: ResolveSecretOptions) => Promise<string>): Promise<PlaywrightHttpCredential>;
|
|
32
36
|
//# sourceMappingURL=protected-app.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protected-app.d.ts","sourceRoot":"","sources":["../src/protected-app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"protected-app.d.ts","sourceRoot":"","sources":["../src/protected-app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAY,KAAK,oBAAoB,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,gFAAgF;AAChF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,8EAA8E;AAC9E,wBAAgB,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAE1G;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,GACpD,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,YAAY,EACvB,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,MAAM,CAAC,GACjF,OAAO,CAAC,wBAAwB,CAAC,CAInC"}
|
package/dist/protected-app.js
CHANGED
|
@@ -28,12 +28,25 @@ export async function installSiteHeaders(context, site, headers) {
|
|
|
28
28
|
* The basic-auth credentials a context answers a challenge with, as
|
|
29
29
|
* Playwright's own `httpCredentials` does: on a 401 from any origin. A site
|
|
30
30
|
* cannot be enumerated into the exact origins Playwright scopes by, and a
|
|
31
|
-
* challenge is answered only where one is issued.
|
|
31
|
+
* challenge is answered only where one is issued. A `Secret` password
|
|
32
|
+
* resolves through the attempt, which registers the value for redaction, and
|
|
33
|
+
* the `Authorization` credential Playwright sends with it too: a page that
|
|
34
|
+
* echoes its request headers shows that, not the password.
|
|
32
35
|
*/
|
|
33
|
-
export function httpCredentials(basicAuth) {
|
|
34
|
-
if (basicAuth === undefined)
|
|
35
|
-
return undefined;
|
|
36
|
+
export async function httpCredentials(basicAuth, resolveSecret) {
|
|
36
37
|
const { username, password } = basicAuth;
|
|
37
|
-
|
|
38
|
+
if (typeof password === 'string')
|
|
39
|
+
return { username, password };
|
|
40
|
+
return { username, password: await resolveSecret(password, { derived: (plaintext) => basicCredentials(username, plaintext) }) };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* The credential an `Authorization: Basic` header carries for `username` and
|
|
44
|
+
* `password`, base64 of `username:password` as Playwright encodes it, with
|
|
45
|
+
* and without its `=` padding: an echo may drop or escape the padding.
|
|
46
|
+
*/
|
|
47
|
+
function basicCredentials(username, password) {
|
|
48
|
+
const encoded = Buffer.from(`${username}:${password}`, 'utf8').toString('base64');
|
|
49
|
+
const unpadded = encoded.replace(/=+$/, '');
|
|
50
|
+
return unpadded === encoded ? [encoded] : [encoded, unpadded];
|
|
38
51
|
}
|
|
39
52
|
//# sourceMappingURL=protected-app.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protected-app.js","sourceRoot":"","sources":["../src/protected-app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"protected-app.js","sourceRoot":"","sources":["../src/protected-app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,QAAQ,EAA0C,MAAM,YAAY,CAAC;AAS9E,8EAA8E;AAC9E,MAAM,UAAU,cAAc,CAAC,OAAyC;IACtE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACzG,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAuB,EACvB,IAAwB,EACxB,OAAqD;IAErD,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO;IACxD,MAAM,OAAO,CAAC,KAAK,CACjB,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,EAC5B,KAAK,EAAE,KAAK,EAAE,EAAE;QACd,MAAM,KAAK,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACzG,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAuB,EACvB,aAAkF;IAElF,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IACzC,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAChE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;AAClI,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,QAAgB,EAAE,QAAgB;IAC1D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC5C,OAAO,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The attempt's video as its browser provider records it: one recording of
|
|
3
|
+
* the browser for the whole attempt, whichever pages open and close in it,
|
|
4
|
+
* ended by `stopProviderRecording` into the attempt's one segment, a file in
|
|
5
|
+
* its `video` directory or a link.
|
|
6
|
+
*/
|
|
7
|
+
import type { Page } from 'playwright';
|
|
8
|
+
import { type VideoSegment } from 'e2e/engine';
|
|
9
|
+
import type { LeaseRecording } from './provider.ts';
|
|
10
|
+
import type { AttemptVideo } from './video.ts';
|
|
11
|
+
export declare class ProviderVideo implements AttemptVideo {
|
|
12
|
+
private readonly record;
|
|
13
|
+
private readonly artifactsDir;
|
|
14
|
+
/** The recording covers the browser, so no page starts a segment of its own. */
|
|
15
|
+
readonly isArmed = false;
|
|
16
|
+
/** The provider records the browser from outside; the page's screencast stays the trace's. */
|
|
17
|
+
readonly startsScreencast = false;
|
|
18
|
+
private started;
|
|
19
|
+
/** The stop in flight, shared: a close that retries while a timed-out stop is still running waits for it instead of stopping twice. */
|
|
20
|
+
private stopping;
|
|
21
|
+
constructor(record: (signal: AbortSignal) => Promise<LeaseRecording>, artifactsDir: string);
|
|
22
|
+
/**
|
|
23
|
+
* Starts the provider's recording. One that arrives once `signal` aborted
|
|
24
|
+
* (a start that outlived its budget) is stopped at once and never kept, and
|
|
25
|
+
* never replaces the handle of a recording started after it.
|
|
26
|
+
*/
|
|
27
|
+
arm(_page: Page, signal: AbortSignal): Promise<void>;
|
|
28
|
+
/** Pages come and go under one recording of the browser. */
|
|
29
|
+
pageOpened(): Promise<void>;
|
|
30
|
+
/** Pages come and go under one recording of the browser. */
|
|
31
|
+
pageClosing(): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Stops the recording as the attempt's one segment; nothing when none was
|
|
34
|
+
* started. A stop that failed keeps the recording, so the attempt's close
|
|
35
|
+
* tries once more instead of leaving it running on a browser later
|
|
36
|
+
* attempts share.
|
|
37
|
+
*/
|
|
38
|
+
stop(signal: AbortSignal): Promise<readonly VideoSegment[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Stops a recording the attempt never collected, best effort: the attempt
|
|
41
|
+
* keeps nothing of it. A stop that fails keeps the handle, so the recording
|
|
42
|
+
* is never marked stopped while it may still run.
|
|
43
|
+
*/
|
|
44
|
+
abandon(signal: AbortSignal): Promise<void>;
|
|
45
|
+
/** Ends one of the provider's recordings as a segment of the attempt. */
|
|
46
|
+
private stopLease;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=provider-video.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-video.d.ts","sourceRoot":"","sources":["../src/provider-video.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAyB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAK/C,qBAAa,aAAc,YAAW,YAAY;IAU9C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAV/B,gFAAgF;IAChF,QAAQ,CAAC,OAAO,SAAS;IACzB,8FAA8F;IAC9F,QAAQ,CAAC,gBAAgB,SAAS;IAClC,OAAO,CAAC,OAAO,CAA6B;IAC5C,uIAAuI;IACvI,OAAO,CAAC,QAAQ,CAA+C;IAE/D,YACmB,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,cAAc,CAAC,EACxD,YAAY,EAAE,MAAM,EACnC;IAEJ;;;;OAIG;IACG,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzD;IAED,4DAA4D;IACtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;IAEpC,4DAA4D;IACtD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;IAErC;;;;;OAKG;IACH,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAY1D;IAED;;;;OAIG;IACG,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAEhD;IAED,yEAAyE;IACzE,OAAO,CAAC,SAAS;CAQlB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The attempt's video as its browser provider records it: one recording of
|
|
3
|
+
* the browser for the whole attempt, whichever pages open and close in it,
|
|
4
|
+
* ended by `stopProviderRecording` into the attempt's one segment, a file in
|
|
5
|
+
* its `video` directory or a link.
|
|
6
|
+
*/
|
|
7
|
+
import { stopProviderRecording } from 'e2e/engine';
|
|
8
|
+
import { connectionAbort } from './operation-budget.js';
|
|
9
|
+
/** How long a recording that started after its attempt gave up gets to stop. */
|
|
10
|
+
const LATE_STOP_MS = 10_000;
|
|
11
|
+
export class ProviderVideo {
|
|
12
|
+
record;
|
|
13
|
+
artifactsDir;
|
|
14
|
+
/** The recording covers the browser, so no page starts a segment of its own. */
|
|
15
|
+
isArmed = false;
|
|
16
|
+
/** The provider records the browser from outside; the page's screencast stays the trace's. */
|
|
17
|
+
startsScreencast = false;
|
|
18
|
+
started;
|
|
19
|
+
/** The stop in flight, shared: a close that retries while a timed-out stop is still running waits for it instead of stopping twice. */
|
|
20
|
+
stopping;
|
|
21
|
+
constructor(record, artifactsDir) {
|
|
22
|
+
this.record = record;
|
|
23
|
+
this.artifactsDir = artifactsDir;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Starts the provider's recording. One that arrives once `signal` aborted
|
|
27
|
+
* (a start that outlived its budget) is stopped at once and never kept, and
|
|
28
|
+
* never replaces the handle of a recording started after it.
|
|
29
|
+
*/
|
|
30
|
+
async arm(_page, signal) {
|
|
31
|
+
const started = await this.record(signal);
|
|
32
|
+
if (!signal.aborted) {
|
|
33
|
+
this.started = started;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
await this.stopLease(started, AbortSignal.timeout(LATE_STOP_MS)).catch(() => undefined);
|
|
37
|
+
throw connectionAbort(signal, 'video');
|
|
38
|
+
}
|
|
39
|
+
/** Pages come and go under one recording of the browser. */
|
|
40
|
+
async pageOpened() { }
|
|
41
|
+
/** Pages come and go under one recording of the browser. */
|
|
42
|
+
async pageClosing() { }
|
|
43
|
+
/**
|
|
44
|
+
* Stops the recording as the attempt's one segment; nothing when none was
|
|
45
|
+
* started. A stop that failed keeps the recording, so the attempt's close
|
|
46
|
+
* tries once more instead of leaving it running on a browser later
|
|
47
|
+
* attempts share.
|
|
48
|
+
*/
|
|
49
|
+
stop(signal) {
|
|
50
|
+
const started = this.started;
|
|
51
|
+
if (started === undefined)
|
|
52
|
+
return Promise.resolve([]);
|
|
53
|
+
this.stopping ??= this.stopLease(started, signal).then((segment) => {
|
|
54
|
+
if (this.started === started)
|
|
55
|
+
this.started = undefined;
|
|
56
|
+
return [segment];
|
|
57
|
+
}).finally(() => {
|
|
58
|
+
this.stopping = undefined;
|
|
59
|
+
});
|
|
60
|
+
return this.stopping;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Stops a recording the attempt never collected, best effort: the attempt
|
|
64
|
+
* keeps nothing of it. A stop that fails keeps the handle, so the recording
|
|
65
|
+
* is never marked stopped while it may still run.
|
|
66
|
+
*/
|
|
67
|
+
async abandon(signal) {
|
|
68
|
+
await this.stop(signal).catch(() => undefined);
|
|
69
|
+
}
|
|
70
|
+
/** Ends one of the provider's recordings as a segment of the attempt. */
|
|
71
|
+
stopLease(started, signal) {
|
|
72
|
+
return stopProviderRecording(started.recording, {
|
|
73
|
+
artifactsDir: this.artifactsDir,
|
|
74
|
+
provider: started.provider,
|
|
75
|
+
leaseId: started.leaseId,
|
|
76
|
+
signal,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=provider-video.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-video.js","sourceRoot":"","sources":["../src/provider-video.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,qBAAqB,EAAqB,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIxD,gFAAgF;AAChF,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B,MAAM,OAAO,aAAa;IAUL,MAAM;IACN,YAAY;IAV/B,gFAAgF;IACvE,OAAO,GAAG,KAAK,CAAC;IACzB,8FAA8F;IACrF,gBAAgB,GAAG,KAAK,CAAC;IAC1B,OAAO,CAA6B;IAC5C,uIAAuI;IAC/H,QAAQ,CAA+C;IAE/D,YACmB,MAAwD,EACxD,YAAoB;sBADpB,MAAM;4BACN,YAAY;IAC5B,CAAC;IAEJ;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,KAAW,EAAE,MAAmB;QACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YACvB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACxF,MAAM,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,UAAU,KAAmB,CAAC;IAEpC,4DAA4D;IAC5D,KAAK,CAAC,WAAW,KAAmB,CAAC;IAErC;;;;;OAKG;IACH,IAAI,CAAC,MAAmB;QACtB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,OAAO,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,CACpD,CAAC,OAAO,EAAE,EAAE;YACV,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;gBAAE,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;YACvD,OAAO,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC,CACF,CAAC,OAAO,CAAC,GAAG,EAAE;YACb,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CAAC,MAAmB;QAC/B,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED,yEAAyE;IACjE,SAAS,CAAC,OAAuB,EAAE,MAAmB;QAC5D,OAAO,qBAAqB,CAAC,OAAO,CAAC,SAAS,EAAE;YAC9C,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,MAAM;SACP,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/provider.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* Nothing here knows any vendor: a cloud browser service, a browser farm, or
|
|
8
8
|
* a Chrome on a machine down the hall are each one small provider in user code.
|
|
9
9
|
*/
|
|
10
|
-
import { type EngineAttemptContext, type EngineCleanupContext, type EngineFinishInfo, type EngineInitInfo, type EnginePrepareInfo, type EnginePrepareResult } from 'e2e/engine';
|
|
10
|
+
import { type EngineAttemptContext, type EngineCleanupContext, type EngineFinishInfo, type EngineInitInfo, type EnginePrepareInfo, type EnginePrepareResult, type ProviderRecordContext, type ProviderRecording } from 'e2e/engine';
|
|
11
11
|
/**
|
|
12
12
|
* How long a lease lives. `worker` (the default) is one browser per worker
|
|
13
13
|
* slot, acquired in `prepare` and released in `finish`; `attempt` is a fresh
|
|
@@ -32,7 +32,7 @@ export interface BrowserRequest {
|
|
|
32
32
|
readonly env: Readonly<Record<string, string | undefined>>;
|
|
33
33
|
/** Aborts on interrupt, and when the attempt that needs the browser is cancelled or exceeds its budget. */
|
|
34
34
|
readonly signal: AbortSignal;
|
|
35
|
-
/** Reports one line of progress to the run's reporter (a session URL to watch)
|
|
35
|
+
/** Reports one line of progress to the run's reporter (a session URL to watch), from the runner and from a worker alike. */
|
|
36
36
|
readonly log: (line: string) => void;
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
@@ -66,14 +66,51 @@ export interface BrowserReleaseContext {
|
|
|
66
66
|
readonly signal: AbortSignal;
|
|
67
67
|
readonly log: (line: string) => void;
|
|
68
68
|
}
|
|
69
|
+
/** Handed to `downloads.read`, once per file. */
|
|
70
|
+
export interface BrowserDownloadContext {
|
|
71
|
+
readonly runId: string;
|
|
72
|
+
readonly targetName: string;
|
|
73
|
+
/** The run's environment, the same `acquire` saw. */
|
|
74
|
+
readonly env: Readonly<Record<string, string | undefined>>;
|
|
75
|
+
/** Aborts when the `browser.waitForDownload` call is cancelled or exceeds its timeout. */
|
|
76
|
+
readonly signal: AbortSignal;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* How a download reaches the runner from a browser on another machine. The
|
|
80
|
+
* browser saves every file to its own disk, where the runner cannot open
|
|
81
|
+
* it, so the engine points the browser's downloads at `dir` there and reads
|
|
82
|
+
* each finished file back through `read`.
|
|
83
|
+
*/
|
|
84
|
+
export interface BrowserProviderDownloads {
|
|
85
|
+
/** Absolute directory on the browser's machine the browser saves downloads to; created by the browser if missing. */
|
|
86
|
+
readonly dir: string;
|
|
87
|
+
/** The bytes of one finished download, `file` an absolute path under `dir`, read off the leased browser's disk. */
|
|
88
|
+
read(lease: BrowserLease, file: string, context: BrowserDownloadContext): Promise<Uint8Array>;
|
|
89
|
+
}
|
|
90
|
+
/** The downloads of the browser an attempt rides, read through its provider. */
|
|
91
|
+
export interface LeaseDownloads {
|
|
92
|
+
/** The provider as error messages name it: `browser provider "kernel"`. */
|
|
93
|
+
readonly provider: string;
|
|
94
|
+
readonly dir: string;
|
|
95
|
+
read(file: string, signal: AbortSignal): Promise<Uint8Array>;
|
|
96
|
+
}
|
|
97
|
+
/** A provider recording the attempt started, with who made it and which lease it covers, for `stopProviderRecording`. */
|
|
98
|
+
export interface LeaseRecording {
|
|
99
|
+
readonly recording: ProviderRecording;
|
|
100
|
+
/** The provider as error messages name it: `browser provider "kernel"`. */
|
|
101
|
+
readonly provider: string;
|
|
102
|
+
readonly leaseId: string;
|
|
103
|
+
}
|
|
69
104
|
/**
|
|
70
105
|
* A source of hosted browsers. In `worker` scope `acquire` is called once per
|
|
71
106
|
* worker slot, for every slot at once, in the runner process; a worker whose
|
|
72
107
|
* browser drops calls it again, from its own process, for a replacement. In
|
|
73
108
|
* `attempt` scope every `startAttempt` calls it from the worker. `release`
|
|
74
109
|
* is called exactly once per lease, by the process that acquired it, also
|
|
75
|
-
* after an `acquire` of another slot failed
|
|
76
|
-
*
|
|
110
|
+
* after an `acquire` of another slot failed; a worker that dies first never
|
|
111
|
+
* calls it, and `sweep`, when the provider has one, releases what it left.
|
|
112
|
+
* A provider must not rely on runner-process state to serve a request from
|
|
113
|
+
* a worker.
|
|
77
114
|
*/
|
|
78
115
|
export interface BrowserProvider {
|
|
79
116
|
/** Label in progress lines and error messages. */
|
|
@@ -82,6 +119,32 @@ export interface BrowserProvider {
|
|
|
82
119
|
readonly scope?: BrowserProviderScope | undefined;
|
|
83
120
|
acquire(request: BrowserRequest): Promise<BrowserLease>;
|
|
84
121
|
release(lease: BrowserLease, context: BrowserReleaseContext): Promise<void>;
|
|
122
|
+
/**
|
|
123
|
+
* Records the leased browser for an attempt that records video, in place
|
|
124
|
+
* of the engine's screencast of the page: the service's own recording of
|
|
125
|
+
* the browser, called from the worker when the attempt starts its video.
|
|
126
|
+
* A provider that cannot record its browsers (a headless session the
|
|
127
|
+
* service cannot replay) leaves it out, and the engine records the
|
|
128
|
+
* screencast.
|
|
129
|
+
*/
|
|
130
|
+
record?(lease: BrowserLease, context: ProviderRecordContext): Promise<ProviderRecording>;
|
|
131
|
+
/**
|
|
132
|
+
* Serves `browser.waitForDownload` for a browser that runs on another machine.
|
|
133
|
+
* Without it a download on such a browser fails, since the file lands on
|
|
134
|
+
* the browser's disk; a provider whose browsers run on the runner's own
|
|
135
|
+
* machine leaves it out.
|
|
136
|
+
*/
|
|
137
|
+
readonly downloads?: BrowserProviderDownloads | undefined;
|
|
138
|
+
/**
|
|
139
|
+
* Releases every lease of the run and target the provider still holds
|
|
140
|
+
* open, and resolves to their ids. Called once per target from `finish`,
|
|
141
|
+
* in the runner, after every worker exited and the leases `prepare` made
|
|
142
|
+
* were released: whatever it finds is a lease a worker acquired (a
|
|
143
|
+
* per-attempt browser, a replacement) and never gave back, because the
|
|
144
|
+
* worker died before it could. Find them by what `acquire` tagged them
|
|
145
|
+
* with at the service: the run id and the target.
|
|
146
|
+
*/
|
|
147
|
+
sweep?(context: BrowserReleaseContext): Promise<readonly string[]>;
|
|
85
148
|
}
|
|
86
149
|
/** Narrows an intended provider, or names what it is missing. */
|
|
87
150
|
export declare function asBrowserProvider(browser: object): BrowserProvider;
|
|
@@ -99,8 +162,12 @@ export declare function asBrowserProvider(browser: object): BrowserProvider;
|
|
|
99
162
|
export declare class LeasedBrowsers {
|
|
100
163
|
private readonly provider;
|
|
101
164
|
readonly scope: BrowserProviderScope;
|
|
165
|
+
/** The provider's name, for messages. */
|
|
166
|
+
readonly name: string;
|
|
102
167
|
/** Leases granted so far, per target, filled as each `acquire` settles. */
|
|
103
168
|
private readonly held;
|
|
169
|
+
/** Targets whose `prepare` succeeded, so workers ran and may have left leases open. */
|
|
170
|
+
private readonly workersRan;
|
|
104
171
|
private run;
|
|
105
172
|
/** The lease the worker's shared browser attaches to, and whether `endpoint` has handed it out yet. */
|
|
106
173
|
private current;
|
|
@@ -118,8 +185,20 @@ export declare class LeasedBrowsers {
|
|
|
118
185
|
* target nothing runs on leases nothing.
|
|
119
186
|
*/
|
|
120
187
|
prepare(info: EnginePrepareInfo): Promise<EnginePrepareResult>;
|
|
121
|
-
/**
|
|
188
|
+
/**
|
|
189
|
+
* Releases what `prepare` leased for the target, every lease before the
|
|
190
|
+
* first failure is reported, then has the provider sweep up the leases a
|
|
191
|
+
* worker that died left open, in either scope, once workers ran: the sweep
|
|
192
|
+
* runs whatever the releases did, and is skipped when `prepare` failed and
|
|
193
|
+
* no worker started.
|
|
194
|
+
*/
|
|
122
195
|
finish(info: EngineFinishInfo): Promise<void>;
|
|
196
|
+
/**
|
|
197
|
+
* The provider's sweep of the leases workers left open, bounded by the
|
|
198
|
+
* cleanup budget. A backstop, so a sweep that fails is reported as a line,
|
|
199
|
+
* never as the run's failure: the service still ends an idle browser.
|
|
200
|
+
*/
|
|
201
|
+
private sweep;
|
|
123
202
|
/**
|
|
124
203
|
* Records the run this worker serves and, in `worker` scope, the lease its
|
|
125
204
|
* slot was handed. A missing hand-off is a broken invariant: the runner
|
|
@@ -148,6 +227,22 @@ export declare class LeasedBrowsers {
|
|
|
148
227
|
endAttempt(context: EngineCleanupContext): Promise<void>;
|
|
149
228
|
/** Releases the replacement lease the worker acquired for itself; what `prepare` leased is the runner's to release. */
|
|
150
229
|
dispose(context: EngineCleanupContext): Promise<void>;
|
|
230
|
+
/**
|
|
231
|
+
* How the attempt records its browser when the provider records: starts
|
|
232
|
+
* the provider's recording of the browser the attempt rides, the
|
|
233
|
+
* attempt's lease in `attempt` scope and the worker's current one in
|
|
234
|
+
* `worker` scope. Undefined when the provider does not record. A start
|
|
235
|
+
* that fails is named after the provider, or is the cancellation when the
|
|
236
|
+
* attempt gave up first; `stopProviderRecording` checks the stop.
|
|
237
|
+
*/
|
|
238
|
+
recorder(attemptId: string): ((signal: AbortSignal) => Promise<LeaseRecording>) | undefined;
|
|
239
|
+
/**
|
|
240
|
+
* The downloads of the browser the attempt rides, when the provider
|
|
241
|
+
* serves them: the attempt's lease in `attempt` scope and the worker's
|
|
242
|
+
* current one in `worker` scope. A read that fails is named after the
|
|
243
|
+
* provider, or is the cancellation when the caller gave up first.
|
|
244
|
+
*/
|
|
245
|
+
downloads(): LeaseDownloads | undefined;
|
|
151
246
|
private requireRun;
|
|
152
247
|
/** One `acquire`, its result checked field by field; a failure is named after the provider. */
|
|
153
248
|
private acquire;
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|