@kraken-e2e/driver-web 1.0.0 → 3.0.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.
@@ -0,0 +1,4 @@
1
+ import type { DeviceTarget } from '@kraken-e2e/contracts';
2
+ import { type CommandRunner } from './doctor.js';
3
+ export declare function listWebTargets(run?: CommandRunner, fsExists?: (path: string) => boolean): Promise<readonly DeviceTarget[]>;
4
+ //# sourceMappingURL=devices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devices.d.ts","sourceRoot":"","sources":["../src/devices.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,KAAK,aAAa,EAAe,MAAM,aAAa,CAAC;AAe9D,wBAAsB,cAAc,CAClC,GAAG,GAAE,aAA2B,EAChC,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAoB,GAC/C,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CA+BlC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Browser enumeration for `kraken devices` (contract 2.1). Browsers are
3
+ * always 'available' (they spawn per session); the value here is showing the
4
+ * user which browser keys their config can use on this host.
5
+ */
6
+ import { existsSync } from 'node:fs';
7
+ import { spawnRunner } from './doctor.js';
8
+ const MAC_BROWSERS = [
9
+ ['chrome', 'Chrome', '/Applications/Google Chrome.app'],
10
+ ['firefox', 'Firefox', '/Applications/Firefox.app'],
11
+ ['safari', 'Safari', '/Applications/Safari.app'],
12
+ ['edge', 'Edge', '/Applications/Microsoft Edge.app'],
13
+ ];
14
+ const LINUX_BROWSERS = [
15
+ ['chrome', 'Chrome', 'google-chrome'],
16
+ ['chrome', 'Chromium', 'chromium'],
17
+ ['firefox', 'Firefox', 'firefox'],
18
+ ];
19
+ export async function listWebTargets(run = spawnRunner, fsExists = existsSync) {
20
+ const targets = [];
21
+ if (process.platform === 'darwin') {
22
+ for (const [key, name, appPath] of MAC_BROWSERS) {
23
+ if (!fsExists(appPath))
24
+ continue;
25
+ targets.push({
26
+ id: key,
27
+ name,
28
+ platform: 'web',
29
+ kind: 'browser',
30
+ state: 'available',
31
+ actorConfig: { platform: 'web', browser: key },
32
+ ...(key === 'safari' ? { detail: 'max ONE concurrent Safari session per host' } : {}),
33
+ });
34
+ }
35
+ return targets;
36
+ }
37
+ const seen = new Set();
38
+ for (const [key, name, binary] of LINUX_BROWSERS) {
39
+ if (seen.has(key) || run(binary, ['--version']).status !== 0)
40
+ continue;
41
+ seen.add(key);
42
+ targets.push({
43
+ id: key,
44
+ name,
45
+ platform: 'web',
46
+ kind: 'browser',
47
+ state: 'available',
48
+ actorConfig: { platform: 'web', browser: key },
49
+ });
50
+ }
51
+ return targets;
52
+ }
53
+ //# sourceMappingURL=devices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devices.js","sourceRoot":"","sources":["../src/devices.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAIrC,OAAO,EAAsB,WAAW,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,YAAY,GAAyE;IACzF,CAAC,QAAQ,EAAE,QAAQ,EAAE,iCAAiC,CAAC;IACvD,CAAC,SAAS,EAAE,SAAS,EAAE,2BAA2B,CAAC;IACnD,CAAC,QAAQ,EAAE,QAAQ,EAAE,0BAA0B,CAAC;IAChD,CAAC,MAAM,EAAE,MAAM,EAAE,kCAAkC,CAAC;CACrD,CAAC;AAEF,MAAM,cAAc,GAAwE;IAC1F,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC;IACrC,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;IAClC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAqB,WAAW,EAChC,WAAsC,UAAU;IAEhD,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,YAAY,EAAE,CAAC;YAChD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAS;YACjC,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,GAAG;gBACP,IAAI;gBACJ,QAAQ,EAAE,KAAK;gBACf,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE;gBAC9C,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,4CAA4C,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACtF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;QACjD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACvE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,IAAI,CAAC;YACX,EAAE,EAAE,GAAG;YACP,IAAI;YACJ,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,WAAW;YAClB,WAAW,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE;SAC/C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC5E,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC3D;AASD,eAAO,MAAM,GAAG,yGA+Cd,CAAC;AAEH,eAAe,GAAG,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC5E,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC3D;AASD,eAAO,MAAM,GAAG,yGA2Dd,CAAC;AAEH,eAAe,GAAG,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -7,7 +7,9 @@
7
7
  * Safari runs classic WebDriver (ADR-0001 §5.6).
8
8
  * IMPORT-SAFETY RULE (§5.5): webdriverio loads dynamically in createSession().
9
9
  */
10
+ import { join } from 'node:path';
10
11
  import { defineDriver } from '@kraken-e2e/contracts';
12
+ import { listWebTargets } from './devices.js';
11
13
  import { webDoctorChecks } from './doctor.js';
12
14
  import { manifest } from './manifest.js';
13
15
  import { WebUserSession } from './wdio-session.js';
@@ -18,11 +20,16 @@ const BROWSER_NAMES = {
18
20
  edge: 'MicrosoftEdge',
19
21
  };
20
22
  export const web = defineDriver((opts = {}) => {
23
+ let startedProjectRoot;
21
24
  return {
22
25
  manifest,
23
26
  doctor: webDoctorChecks(),
24
- async start() {
27
+ async start(host) {
25
28
  // Nothing to boot: WDIO spawns/manages the browser driver per session.
29
+ startedProjectRoot = host.projectRoot ?? process.cwd();
30
+ },
31
+ async listTargets() {
32
+ return listWebTargets();
26
33
  },
27
34
  async createSession(actor, services) {
28
35
  const config = actor.config;
@@ -47,6 +54,12 @@ export const web = defineDriver((opts = {}) => {
47
54
  const browser = await remote({
48
55
  capabilities: capabilities,
49
56
  logLevel: 'error',
57
+ // Project-local driver cache: WDIO's default is the OS tmpdir, where a
58
+ // single interrupted download leaves a corrupted folder that breaks
59
+ // every later run on the machine (observed live: chromedriver folder
60
+ // present, executable missing, all retries failing). A per-project dir
61
+ // is trivially inspectable and deletable: rm -rf .kraken/browser-cache
62
+ cacheDir: join(startedProjectRoot ?? process.cwd(), '.kraken', 'browser-cache'),
50
63
  });
51
64
  const session = new WebUserSession(browser, actor, services);
52
65
  const baseUrl = config['baseUrl'];
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kraken-e2e/driver-web",
3
- "version": "1.0.0",
3
+ "version": "3.0.0",
4
4
  "description": "Web driver: WebdriverIO native (WebDriver BiDi where available; Safari runs classic WebDriver)",
5
5
  "type": "module",
6
6
  "exports": {
@@ -23,14 +23,14 @@
23
23
  "node": ">=22.13.0"
24
24
  },
25
25
  "peerDependencies": {
26
- "@kraken-e2e/contracts": "^0.1.0"
26
+ "@kraken-e2e/contracts": "^3.0.0"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@types/node": "^22.15.0",
30
30
  "typescript": "~6.0.3",
31
31
  "vitest": "^4.1.9",
32
- "@kraken-e2e/contracts": "0.1.0",
33
- "@kraken-e2e/core": "0.1.0"
32
+ "@kraken-e2e/contracts": "3.0.0",
33
+ "@kraken-e2e/core": "3.0.0"
34
34
  },
35
35
  "dependencies": {
36
36
  "webdriverio": "9.29.1"