Kazuaki Matsuo
a090505184
fix(base-driver): reject implicit HEAD command routing ( #22992 )
2026-10-15 18:57:15 -07:00
Kazuaki Matsuo
aba33a2d17
fix(base-driver): validate and merge all capability candidates ( #22982 )
2026-10-15 10:19:35 -07:00
Mykola Mokhnach
2bbb1d3a49
fix(http-server)!: reject browser-origin requests unless CORS is enabled ( #22990 )
...
BREAKING CHANGE: clients that send an Origin header must enable the CORS feature (--allow-insecure=*:cors).
BREAKING CHANGE: Library callers that depended on the implicit CORS default must now pass allowCors: true
2026-10-15 18:15:36 +02:00
Kazuaki Matsuo
d05423e77d
fix(base-driver): apply initial session timeouts ( #22983 )
...
* refactor(base-driver): share standard timeout value validation
Refs #22966 (F21).
* fix(base-driver): apply initial session timeouts
Refs #22966 (F21). Initialize local timeout state before driver backend startup.
* test(base-driver): cover initial session timeout state
Refs #22966 (F21). Covers nulls, bounds, invalid inputs, readback, defaults, and backend setter overrides.
* refactor(types): export the existing Timeouts type
* refactor(base-driver): reuse the shared Timeouts type
Use Partial<Timeouts> for initial session timeout state.
Validation: TypeScript build, base-driver type tests, and targeted lint/format checks passed.
* refactor(base-driver): share timeout mapping across initialization loops
* refactor(base-driver): normalize reset options in a loop
* refactor(base-driver): extract session preparation helpers
* fix(base-driver): identify timeout type in validation errors
* fix(base-driver): show invalid timeout values in errors
* refactor(base-driver): simplify timeout update mapping
* refactor(base-driver): centralize timeout metadata in timeout module
Share standard timeout names, local fields, and setters with session initialization. Reuse keyof Timeouts for validation. Refs #22966 .
* refactor(base-driver): reuse timeout metadata for initial session state
Remove the duplicate timeout mapping from driver.ts. Preserve direct field initialization before backend startup. Validation: 578 base-driver tests, TypeScript build, type tests, and targeted lint/format checks passed.
* fix(types): allow partial initial timeout capabilities
2026-10-15 09:16:57 +09:00
Mohamed Mostafa
f820e04000
fix(appium): apply default capabilities to every firstMatch candidate ( #22988 )
...
* fix(appium): apply default capabilities to every firstMatch candidate
* docs(appium): explain how default capabilities apply to firstMatch candidates
2026-10-15 09:16:28 +09:00
Mohamed Mostafa
814357aa7f
fix(base-driver): reject an unsupported log type with InvalidArgumentError ( #22986 )
2026-10-14 17:48:34 +02:00
Mohamed Mostafa
a9d1b1212d
fix(base-driver): reject an unknown timeout type with InvalidArgumentError ( #22987 )
2026-10-14 18:43:50 +03:00
Kazuaki Matsuo
f3edfc5e03
fix(base-driver)!: match standard capability names case-sensitively ( #22976 )
...
* Update migration guide for Appium 3 to 4
Refs #22966 (F12).
* Refactor capability imports and standard cap check
Refs #22966 (F12).
* Add test for insertAppiumPrefixes function
Refs #22966 (F12).
* Update isStandardCap to use exact matches
Refs #22966 (F12).
* Enhance capability tests for standard names
Refs #22966 (F12).
* Update error message in capability.spec.ts
Refs #22966 (F12).
2026-10-14 12:20:43 +09:00
Kazuaki Matsuo
07d324b488
fix(base-driver): preserve optional WebDriver error data ( #22974 )
...
* fix(base-driver): preserve optional WebDriver error data
Preserve supplied Classic WebDriver error data. Refs #22966 (F09).
* fix(base-driver): retain data in returned driver errors
* Add data handling to errorFromW3CJsonCode
Refs #22966 (F09).
* Add tests for error handling in ProxyRequestError
Refs #22966 (F09).
* Enhance proxy tests with error handling case
Refs #22966 (F09).
* test(http-server): cover returned driver error data
2026-10-14 12:09:48 +09:00
Kazuaki Matsuo
b452a5eade
fix(base-driver): preserve capability invalid argument errors ( #22977 )
...
* Change error type for non-W3C capabilities
Refs #22966 (F10).
* fix(base-driver): preserve capability invalid argument errors
Refs #22966 (F10).
* fix(base-driver): preserve capability invalid argument errors
Refs #22966 (F10).
* fix(base-driver): preserve capability invalid argument errors
Refs #22966 (F10).
* fix(base-driver): preserve capability invalid argument errors
Refs #22966 (F10).
* test(fake-driver): expect invalid argument for legacy capabilities
2026-10-14 12:07:37 +09:00
Kazuaki Matsuo
f1cf93e368
fix(base-driver): omit null capabilities before merging ( #22975 )
...
* Implement omitNullCapabilities function
Refs #22966 (F13).
* Add tests for null capability values handling
Refs #22966 (F13).
* refactor(base-driver): avoid reassigning capability argument
Use a normalizedCaps local for validation and the return value, preserving null-omission behavior. Refs #22966 (F13).
2026-10-14 12:07:08 +09:00
Kazuaki Matsuo
eef8246f8a
fix(base-driver): validate standard timeouts and preserve null values ( #22961 )
...
* fix(base-driver): validate timeouts before applying changes
* test(base-driver): preserve timeouts on invalid updates
* fix(base-driver): preserve null script timeouts
* fix(base-driver): allow nullable script timeout state
* fix(types): accept null script timeouts
* test(base-driver): cover null script timeout updates
* docs(appium): document null script timeouts
* refactor(base-driver): loop over validated timeout updates
* fix(base-driver): validate standard timeouts and preserve null values
* refactor(types): introduce shared TimeoutValue type
Refactor Timeouts type to use TimeoutValue for better clarity.
* refactor(types): export TimeoutValue
* refactor(types): use TimeoutValue for driver timeout state
* refactor(types): use TimeoutValue in timeout command signatures
* refactor(base-driver): use shared type for timeout state
* refactor(base-driver): use TimeoutValue in timeout commands
* docs: simplify timeout API descriptions
2026-10-13 05:21:57 +09:00
Kazuaki Matsuo
3f82e6a181
fix(appium): suspend idle timeout during BiDi commands ( #22947 )
...
* fix(appium): track idle timeout across plugin commands
* fix(appium): suspend idle timeout during BiDi commands
* fix(base-driver): guard timeout restarts from legacy drivers
* review
* review
* fix(base-driver)!: require shared command activity tracking
Remove legacy timer method overrides and the compatibility capability flag. Document the driver migration requirement and verify shared activity across ESM copies without replacing timer methods.
BREAKING CHANGE: Drivers must use base-driver with shared command activity tracking. Custom timeout implementations must delegate timer creation to super.startNewCommandTimeout(); legacy private-counter implementations are no longer protected by method overrides.
* add fake driver/plugin example
* remove from readme
* fix(appium): release one proxied BiDi command per response
* test(appium): cover overlapping duplicate BiDi command IDs
2026-10-13 04:18:26 +09:00
Kazuaki Matsuo
c10c41384c
fix(appium)!: track idle timeout across plugin commands ( #22946 )
...
* fix(appium): track idle timeout across plugin commands
* fix(base-driver): guard timeout restarts from legacy drivers
* review
* fix(base-driver)!: require shared command activity tracking
Remove legacy timer method overrides and the compatibility capability flag. Document the driver migration requirement and verify shared activity across ESM copies without replacing timer methods.
BREAKING CHANGE: Drivers must use base-driver with shared command activity tracking. Custom timeout implementations must delegate timer creation to super.startNewCommandTimeout(); legacy private-counter implementations are no longer protected by method overrides.
* add fake driver/plugin example
* remove from readme
* Remove actions needed for driver updates in migration guide
Removed the section detailing actions needed for driver updates related to shared command activity tracking.
* refactor(base-driver): simplify shutdown promise handling
* Add actions needed for custom startNewCommandTimeout
Updated migration guide to include new requirements for custom command timeout implementations.
2026-10-13 03:22:51 +09:00
Kazuaki Matsuo
9b1ddb8bf6
fix(appium): classify driver selection failures as session not created ( #22970 )
2026-10-12 15:13:58 +09:00
Kazuaki Matsuo
4949ea4375
fix(http-server): set no-cache on WebDriver responses ( #22971 )
...
* fix(http-server): set no-cache on WebDriver responses
* test(http-server): isolate cache-control regression requests
2026-10-12 15:10:45 +09:00
Kazuaki Matsuo
da8570d882
fix(http-server): return WebDriver errors for the root path ( #22969 )
...
* fix(http-server): return WebDriver errors for the root path
* test(http-server): isolate server ports between test cases
2026-10-12 15:07:04 +09:00
Kazuaki Matsuo
122c157292
fix(base-driver): preserve detached shadow root errors ( #22968 )
2026-10-12 15:05:41 +09:00
Mohamed Mostafa
b0b2ce903c
fix(images-plugin): return every image match from findElements ( #22926 )
2026-10-12 07:57:39 +02:00
Edgars Eglītis
ba8d57f378
docs: fix missing prefix for platformVersion capability ( #22967 )
2026-10-11 22:59:46 +03:00
Edgars Eglītis
0b3fe1ce35
feat(appium): fallback to latest compatible extension version for CLI install ( #22951 )
...
* feat(appium): fallback to latest compatible extension version for CLI `install`
* fix: fail fast for fully outdated extensions
* fix: revert dep/peerDep requirement
* fix: address comments
* chore: fix tests
* docs: add feature to migration guide
2026-10-11 22:50:28 +03:00
Mykola Mokhnach
b67054ad45
docs: update Appium 3 to 4 migration guide ( #22965 )
2026-10-11 20:32:27 +02:00
Kazuaki Matsuo
7b13975340
fix(support): preserve case-only moves on Windows ( #22958 )
...
* fix(support): move source symlinks without following their targets
* fix(support): compare move entries by device and inode
* fix(support): preserve case-only moves on Windows
* test(support): cover Windows case-only moves
* refactor
* refactor(support): extract internal MoveOperation module
This class handles moving files and directories with options for recursive transfers and error handling.
* refactor(support): use internal MoveOperation from fs
Removed the MoveOperation class and its associated methods, simplifying the file structure.
2026-10-11 23:22:17 +09:00
Kazuaki Matsuo
139f086941
fix(storage-plugin): contain upload event socket errors ( #22963 )
...
* fix(storage-plugin): contain upload event socket errors
* test(storage-plugin): cover upload event connection errors
2026-10-11 23:13:26 +09:00
Kazuaki Matsuo
b54c51da1a
fix(base-driver): contain idle timeout cleanup failures ( #22964 )
...
* fix(base-driver): contain idle timeout cleanup failures
* test(base-driver): keep other sessions alive after cleanup failures
2026-10-11 23:10:34 +09:00
Kazuaki Matsuo
a520720d06
fix(base-driver): validate timeouts before applying changes ( #22960 )
...
* fix(base-driver): validate timeouts before applying changes
* test(base-driver): preserve timeouts on invalid updates
* refactor(base-driver): loop over validated timeout updates
2026-10-11 16:50:38 +09:00
Kazuaki Matsuo
6bae658c4b
fix(support): reject all directory walk errors ( #22956 )
...
* fix(support): reject all directory walk errors
* review
2026-10-11 16:40:02 +09:00
Kazuaki Matsuo
9940156d1a
fix(storage-plugin): reject concurrent WebSocket uploads ( #22962 )
...
* fix(storage-plugin): reject concurrent WebSocket uploads
* test(storage-plugin): cover upload contention and retries
2026-10-11 16:39:44 +09:00
Kazuaki Matsuo
ef5468ceac
fix(storage-plugin): reject reserved partial-file names ( #22959 )
...
* fix(storage-plugin): reject reserved partial-file names
* test(storage-plugin): cover reserved partial-file names
2026-10-11 16:36:23 +09:00
Kazuaki Matsuo
f0d1cad091
fix(base-driver): notify IPC waiters on either unsubscribe path ( #22955 )
...
* fix(base-driver): notify IPC waiters on either unsubscribe path
* fix(base-driver): finish IPC waits before notifying observers
2026-10-11 05:33:11 +09:00
Kazuaki Matsuo
81dc35dc6b
fix(support): move source symlinks without following their targets ( #22954 )
...
* fix(support): move source symlinks without following their targets
* fix(support): compare move entries by device and inode
2026-10-11 05:28:50 +09:00
Kazuaki Matsuo
d8fff407cf
fix(storage-plugin): preserve pending upload sockets across retries ( #22948 )
...
* fix(storage-plugin): preserve pending upload sockets across retries
* fix(storage-plugin): isolate upload names and renew retry expiry
* test(storage-plugin): bound upload waits and cleanup clients
* use sha1
* add test
* revert docs
2026-10-11 05:16:09 +09:00
Kazuaki Matsuo
8272eddcd2
chore: bump shell quote and remove workaround ( #22953 )
2026-10-11 02:24:46 +09:00
Mykola Mokhnach
cce0b5814d
feat(types)!: remove driver-specific capabilities from base constraints ( #22952 )
...
BREAKING CHANGE: the locale, language, autoWebview, orientation and udid capabilities are no longer part of the standard capability constraints. They are not generic enough and must be defined by the corresponding drivers.
2026-10-10 17:29:16 +02:00
Mykola Mokhnach
8822ceaabb
feat(types)!: remove deprecated autoLaunch capability ( #22950 )
...
BREAKING CHANGE: the deprecated appium:autoLaunch capability is no longer part of the standard capability constraints.
2026-10-10 17:19:15 +02:00
Kazuaki Matsuo
e870487757
fix(base-driver): preserve encoded proxy path parameters ( #22945 )
2026-10-10 16:15:43 +09:00
Kazuaki Matsuo
9cb4185b07
fix(http-server): contain WebSocket upgrade failures ( #22944 )
...
* fix(http-server): contain WebSocket upgrade failures
* test(http-server): bound and verify WebSocket exchanges
2026-10-10 16:15:24 +09:00
github-actions
3afce5b748
chore: publish
...
- appium@4.0.0-beta.4
- @appium/base-driver@11.0.0-beta.3
- @appium/base-plugin@4.0.0-beta.3
- @appium/docutils@4.0.0-beta.3
- @appium/driver-test-support@4.0.0-beta.3
- @appium/execute-driver-plugin@8.0.0-beta.4
- @appium/fake-driver@7.0.0-beta.4
- @appium/fake-plugin@5.0.0-beta.4
- @appium/http-server@1.0.0-beta.3
- @appium/images-plugin@6.0.0-beta.4
- @appium/logger@3.0.0-beta.2
- @appium/opencv@6.0.0-beta.3
- @appium/oxc-config@2.0.0-beta.2
- @appium/plugin-test-support@4.0.0-beta.4
- @appium/relaxed-caps-plugin@4.0.0-beta.4
- @appium/schema@2.0.0-beta.2
- @appium/storage-plugin@3.0.0-beta.4
- @appium/support@8.0.0-beta.3
- @appium/types@2.0.0-beta.3
- @appium/universal-xml-plugin@4.0.0-beta.4
2026-10-09 17:41:46 +00:00
Kazuaki Matsuo
c5ddcef894
fix: centralize URL hostname formatting and bracket IPv6 hosts ( #22914 )
...
* fix: bracket IPv6 hosts in proxy and helper URLs
* refactor(support): share URL hostname formatting across packages
* test: remove duplicate hostname formatting coverage
* refactor(support): move hostname formatting to net module
2026-10-08 23:52:44 +09:00
Edgars Eglītis
01c14af88f
chore: port oxc dependency bumps from master ( #22924 )
2026-10-08 17:25:17 +03:00
Edgars Eglītis
27d3fe41f7
feat(oxc-config): enable plugins at the root level ( #22908 )
...
BREAKING CHANGE: enable 19 additional oxlint rules
2026-10-08 17:15:52 +03:00
Edgars Eglītis
57af81cc3b
chore: port dependency bumps from master ( #22921 )
...
* chore: port dependency bumps from master
* chore: fix format
2026-10-08 17:14:32 +03:00
Edgars Eglītis
9f8455e197
fix: tune wincore driver integration ( #22922 )
...
* fix: tune wincore driver integration
* docs: adjust CLI reference doc
2026-10-08 17:04:24 +03:00
Edgars Eglītis
602f8a5ec9
chore: disable more oxlint rules for tests ( #22919 )
2026-10-08 17:03:03 +03:00
Mykola Mokhnach
7544a1008d
feat(appium)!: replace obsolete windows driver with appium-wincore-driver ( #22917 )
...
BREAKING CHANGE: Replace the `windows` known-driver shortcut with `wincore` pointing to appium-wincore-driver instead of the obsolete appium-windows-driver
2026-10-08 11:34:50 +02:00
Michael Lip
3063ec9917
fix(universal-xml-plugin): keep the enabled attribute in transformed source ( #22911 )
2026-10-08 10:09:49 +02:00
Mohamed Mostafa
aed3af9538
fix(support): do not drop directories while fs.mv moves a folder ( #22913 )
2026-10-08 15:27:12 +09:00
Mohamed Mostafa
dbae73b921
fix(execute-driver-plugin): bracket IPv6 server hosts for webdriverio ( #22912 )
2026-10-08 15:24:06 +09:00
Mykola Mokhnach
8297d31fb1
fix(storage-plugin)!: mount routes under the server base path ( #22906 )
...
BREAKING CHANGE: the storage routes (and the stream/events websocket paths) were always mounted at the server root, ignoring --base-path. They are now prefixed with the base path, e.g. /wd/hub/appium/storage/add.
2026-10-07 10:13:24 +02:00
Edgars Eglītis
28c1f9392e
chore: fix one more oxlint warning ( #22907 )
2026-10-06 20:37:46 +03:00