appium-chromedriver 8.2.28 → 8.2.29

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.
Files changed (43) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/build/lib/chromedriver.d.ts +70 -67
  3. package/build/lib/chromedriver.d.ts.map +1 -1
  4. package/build/lib/chromedriver.js +62 -571
  5. package/build/lib/chromedriver.js.map +1 -1
  6. package/build/lib/commands/binary.d.ts +28 -0
  7. package/build/lib/commands/binary.d.ts.map +1 -0
  8. package/build/lib/commands/binary.js +320 -0
  9. package/build/lib/commands/binary.js.map +1 -0
  10. package/build/lib/commands/process.d.ts +18 -0
  11. package/build/lib/commands/process.d.ts.map +1 -0
  12. package/build/lib/commands/process.js +118 -0
  13. package/build/lib/commands/process.js.map +1 -0
  14. package/build/lib/commands/session.d.ts +31 -0
  15. package/build/lib/commands/session.d.ts.map +1 -0
  16. package/build/lib/commands/session.js +137 -0
  17. package/build/lib/commands/session.js.map +1 -0
  18. package/build/lib/commands/types.d.ts +32 -0
  19. package/build/lib/commands/types.d.ts.map +1 -0
  20. package/build/lib/commands/types.js +3 -0
  21. package/build/lib/commands/types.js.map +1 -0
  22. package/build/lib/commands/version.d.ts +7 -0
  23. package/build/lib/commands/version.d.ts.map +1 -0
  24. package/build/lib/commands/version.js +100 -0
  25. package/build/lib/commands/version.js.map +1 -0
  26. package/build/lib/constants.d.ts +11 -0
  27. package/build/lib/constants.d.ts.map +1 -1
  28. package/build/lib/constants.js +12 -1
  29. package/build/lib/constants.js.map +1 -1
  30. package/config/mapping.json +1 -0
  31. package/lib/chromedriver.ts +100 -685
  32. package/lib/commands/binary.ts +353 -0
  33. package/lib/commands/process.ts +114 -0
  34. package/lib/commands/session.ts +122 -0
  35. package/lib/commands/types.ts +32 -0
  36. package/lib/commands/version.ts +74 -0
  37. package/lib/constants.ts +13 -0
  38. package/package.json +1 -1
  39. package/build/lib/protocol-helpers.d.ts +0 -21
  40. package/build/lib/protocol-helpers.d.ts.map +0 -1
  41. package/build/lib/protocol-helpers.js +0 -48
  42. package/build/lib/protocol-helpers.js.map +0 -1
  43. package/lib/protocol-helpers.ts +0 -51
package/CHANGELOG.md CHANGED
@@ -1,3 +1,13 @@
1
+ ## [8.2.29](https://github.com/appium/appium-chromedriver/compare/v8.2.28...v8.2.29) (2026-04-24)
2
+
3
+ ### Miscellaneous Chores
4
+
5
+ * ChromeDriver Bump to v148.0.7778.56 ([#568](https://github.com/appium/appium-chromedriver/issues/568)) ([84b1bb0](https://github.com/appium/appium-chromedriver/commit/84b1bb012ad16c99d40c8d3c2a971298b0fec9e8))
6
+
7
+ ### Code Refactoring
8
+
9
+ * Decompose Chromedriver internals ([#565](https://github.com/appium/appium-chromedriver/issues/565)) ([209efa8](https://github.com/appium/appium-chromedriver/commit/209efa82b03d697fd1e81cc4e80238dde7f1de00))
10
+
1
11
  ## [8.2.28](https://github.com/appium/appium-chromedriver/compare/v8.2.27...v8.2.28) (2026-04-23)
2
12
 
3
13
  ### Miscellaneous Chores
@@ -1,114 +1,117 @@
1
1
  import events from 'node:events';
2
- import { JWProxy } from '@appium/base-driver';
2
+ import { JWProxy, PROTOCOLS } from '@appium/base-driver';
3
+ import { SubProcess, exec } from 'teen_process';
4
+ import { ChromedriverStorageClient } from './storage-client/storage-client';
5
+ import { CHROMEDRIVER_EVENTS, CHROMEDRIVER_STATES } from './constants';
6
+ import type { ADB } from 'appium-adb';
3
7
  import type { HTTPMethod, HTTPBody } from '@appium/types';
4
8
  import type { Request, Response } from 'express';
5
9
  import type { ChromedriverOpts } from './types';
6
10
  type SessionCapabilities = Record<string, any>;
7
- export declare class Chromedriver extends events.EventEmitter {
8
- static readonly EVENT_ERROR = "chromedriver_error";
9
- static readonly EVENT_CHANGED = "stateChanged";
10
- static readonly STATE_STOPPED = "stopped";
11
- static readonly STATE_STARTING = "starting";
12
- static readonly STATE_ONLINE = "online";
13
- static readonly STATE_STOPPING = "stopping";
14
- static readonly STATE_RESTARTING = "restarting";
11
+ type ChromedriverState = (typeof CHROMEDRIVER_STATES)[keyof typeof CHROMEDRIVER_STATES];
12
+ type ChromedriverEventMap = {
13
+ [CHROMEDRIVER_EVENTS.ERROR]: [Error];
14
+ [CHROMEDRIVER_EVENTS.CHANGED]: [{
15
+ state: ChromedriverState;
16
+ }];
17
+ };
18
+ export declare class Chromedriver extends events.EventEmitter<ChromedriverEventMap> {
19
+ static readonly EVENT_ERROR: "chromedriver_error";
20
+ static readonly EVENT_CHANGED: "stateChanged";
21
+ static readonly STATE_STOPPED: "stopped";
22
+ static readonly STATE_STARTING: "starting";
23
+ static readonly STATE_ONLINE: "online";
24
+ static readonly STATE_STOPPING: "stopping";
25
+ static readonly STATE_RESTARTING: "restarting";
15
26
  private readonly _log;
16
27
  private readonly proxyHost;
17
- private readonly proxyPort;
18
- private readonly adb?;
19
- private readonly cmdArgs?;
20
- private proc;
21
- private readonly useSystemExecutable;
22
- private chromedriver?;
23
- private readonly executableDir;
24
- private readonly mappingPath?;
25
- private bundleId?;
26
- private executableVerified;
28
+ readonly proxyPort: number;
29
+ readonly adb?: ADB;
30
+ readonly cmdArgs?: string[];
31
+ proc: SubProcess | null;
32
+ readonly useSystemExecutable: boolean;
33
+ chromedriver?: string;
34
+ readonly executableDir: string;
35
+ readonly mappingPath?: string;
36
+ bundleId?: string;
37
+ executableVerified: boolean;
27
38
  state: string;
28
- private readonly _execFunc;
39
+ _execFunc: typeof exec;
29
40
  jwproxy: JWProxy;
30
- private readonly isCustomExecutableDir;
31
- private readonly verbose?;
32
- private readonly logPath?;
33
- private readonly disableBuildCheck;
34
- private readonly storageClient;
35
- private readonly details?;
36
- private capabilities;
37
- private _desiredProtocol;
38
- private _driverVersion;
39
- private _onlineStatus;
41
+ readonly isCustomExecutableDir: boolean;
42
+ readonly verbose?: boolean;
43
+ readonly logPath?: string;
44
+ readonly disableBuildCheck: boolean;
45
+ readonly storageClient: ChromedriverStorageClient | null;
46
+ readonly details?: ChromedriverOpts['details'];
47
+ capabilities: SessionCapabilities;
48
+ _desiredProtocol: keyof typeof PROTOCOLS | null;
49
+ _driverVersion: string | null;
50
+ _onlineStatus: Record<string, any> | null;
40
51
  constructor(args?: ChromedriverOpts);
41
- /**
42
- * Gets the logger instance for this Chromedriver instance.
43
- * @returns The logger instance.
44
- */
45
52
  get log(): any;
46
- /**
47
- * Gets the version of the currently running Chromedriver.
48
- * @returns The driver version string, or null if not yet determined.
49
- */
50
53
  get driverVersion(): string | null;
51
54
  /**
52
55
  * Starts a new Chromedriver session with the given capabilities.
53
- * @param caps - The session capabilities to use.
54
- * @param emitStartingState - Whether to emit the starting state event (default: true).
55
- * @returns A promise that resolves to the session capabilities returned by Chromedriver.
56
- * @throws {Error} If Chromedriver fails to start or crashes during startup.
56
+ *
57
+ * @param caps - Capabilities passed to Chromedriver session creation.
58
+ * @param emitStartingState - Whether to emit the `starting` state transition.
59
+ * @returns Session capabilities returned by Chromedriver.
57
60
  */
58
61
  start(caps: SessionCapabilities, emitStartingState?: boolean): Promise<SessionCapabilities>;
59
62
  /**
60
- * Gets the current session ID if the driver is online.
61
- * @returns The session ID string, or null if the driver is not online.
63
+ * Gets active Chromedriver session id if the driver is online.
64
+ *
65
+ * @returns The session id or `null` when driver is not online.
62
66
  */
63
67
  sessionId(): string | null;
64
68
  /**
65
- * Restarts the Chromedriver session.
66
- * The session will be stopped and then started again with the same capabilities.
67
- * @returns A promise that resolves to the session capabilities returned by Chromedriver.
68
- * @throws {Error} If the driver is not online or if restart fails.
69
+ * Restarts current Chromedriver session with previously stored capabilities.
70
+ *
71
+ * @returns Session capabilities returned by the restarted session.
69
72
  */
70
73
  restart(): Promise<SessionCapabilities>;
71
74
  /**
72
- * Stops the Chromedriver session and terminates the process.
73
- * @param emitStates - Whether to emit state change events during shutdown (default: true).
74
- * @returns A promise that resolves when the session has been stopped.
75
+ * Stops the current Chromedriver session and underlying subprocess.
76
+ *
77
+ * @param emitStates - Whether to emit stopping/stopped state transitions.
75
78
  */
76
79
  stop(emitStates?: boolean): Promise<void>;
77
80
  /**
78
- * Sends a command to the Chromedriver server.
79
- * @param url - The endpoint URL (e.g., '/url', '/session').
80
- * @param method - The HTTP method to use ('POST', 'GET', or 'DELETE').
81
- * @param body - Optional request body for POST requests.
82
- * @returns A promise that resolves to the response from Chromedriver.
81
+ * Sends a direct command to Chromedriver through the JSONWP/W3C proxy.
82
+ *
83
+ * @param url - Chromedriver endpoint path.
84
+ * @param method - HTTP method used for the command.
85
+ * @param body - Optional request payload.
86
+ * @returns Command response payload.
83
87
  */
84
88
  sendCommand(url: string, method: HTTPMethod, body?: HTTPBody): Promise<HTTPBody>;
85
89
  /**
86
- * Proxies an HTTP request/response to the Chromedriver server.
87
- * @param req - The incoming HTTP request object.
88
- * @param res - The outgoing HTTP response object.
89
- * @returns A promise that resolves when the proxying is complete.
90
+ * Proxies an incoming Express request/response pair to Chromedriver.
91
+ *
92
+ * @param req - Incoming request object.
93
+ * @param res - Outgoing response object.
90
94
  */
91
95
  proxyReq(req: Request, res: Response): Promise<void>;
92
96
  /**
93
- * Checks if Chromedriver is currently able to automate webviews.
94
- * Sometimes Chromedriver stops automating webviews; this method runs a simple
95
- * command to determine the current state.
96
- * @returns A promise that resolves to true if webviews are working, false otherwise.
97
+ * Checks whether the active webview connection is currently responsive.
98
+ *
99
+ * @returns `true` if `/url` command succeeds, otherwise `false`.
97
100
  */
98
101
  hasWorkingWebview(): Promise<boolean>;
99
102
  private buildChromedriverArgs;
100
103
  private getDriversMapping;
101
104
  private getChromedrivers;
102
- private getChromeVersion;
103
105
  private updateDriversMapping;
104
106
  private getCompatibleChromedriver;
105
107
  private initChromedriverPath;
108
+ private getChromeVersion;
106
109
  private syncProtocol;
107
110
  private waitForOnline;
108
111
  private getStatus;
109
- private startSession;
110
- private changeState;
111
112
  private killAll;
113
+ private changeState;
114
+ private startSession;
112
115
  }
113
116
  export {};
114
117
  //# sourceMappingURL=chromedriver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chromedriver.d.ts","sourceRoot":"","sources":["../../lib/chromedriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chromedriver.d.ts","sourceRoot":"","sources":["../../lib/chromedriver.ts"],"names":[],"mappings":"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"}