webdriverio/__mocks__/@wdio
David Prevost 2e070380e8
feat(runner+browserstack): Mask sensitive data for Reporters (and more) (#13938)
* Draft solution masking on the `onBeforeCommand`

Use same default string as appium

Use same default token as appium

Full working solutions

Fix compilation problems

Remove it from capabilities from simplicity

Fix grammar

Use Regex native type

Draft mask body & command args in webdriver directly

Full working solution

Removing old solution and complete the new one

Revert "Draft solution masking on the `onBeforeCommand`"

This reverts commit 5feb324af2d2a1ded4e81c86cad2670a34150b7b.

Code review

Update packages/webdriver/src/command.ts

Co-authored-by: Christian Bromann <git@bromann.dev>
Unit test on the regExp converter from string

Add missing case of missing starting and ending slash

Remove undesired changes

Convert string to regExps only once
Fix problem after rebase
remove occurences of any

Add new mask parameter to elementSendKeys to mask text input and more

Added also the `/session/:sessionId/appium/settings` endpoints to generate regEx from the sensitive value so that we can mask the value int he appium log on top of WebDriver log and other touchpoint
e2e test for masking text value with setValue command

Use `updateSettings` only with Appium

Review solution to be completely outside of `request.ts`

Use env `WDIO_LOG_MASKING_PATTERNS` to pass regex and mask log

Full working solutions to mask logs with 0 1 or 2 capturing group

Working solution to mask for example BrowserStack key in logs

Code review
Fix masking not working when output directly in console

mask string logging only

Better code for wdio-logger masking + more unit tests

- Better typing in logger to reflect reality of having only 1 arg of type string of 3 args where the third can be anything.
- Move masking utility code into an utils file and add better unit tests
- Add `setMaskingPatterns` following `setLogLevelsConfig` for more flexible configuration
- Fix a couple fo edge cases
- Ensure we mask the output of serializers too

Have mask in command optional and fix ut

- Have mask optional in send and add command to not interfere with expected output and be less "breaking" if masking is not used
- fix ut affected by new logData eventhandler

Better masking code for command with masking at true

- Move masking code for command into an utility
- Use args better with index to fetch mask and text
- Apply masking only if the command has the param 'mask', 'text' and mask is true
- Share the logger replacer with this package
- Fix Logger mock for the `SENSITIVE_DATA_REPLACER`
- Replace the sensitive info in both the body and args
- Make sure we reuse existing body and args if no masking require for better backward compatibility
- Add unit test for commands with masking

Review e2e tests to had a input with masking case

Remove `.only` on tests

Remove fail tentative

Tentative fix for failure in `react.test.tsx`

- react.test.tsx: SyntaxError: Importing binding name 'SENSITIVE_DATA_REPLACER' is not found

* Use the new appium http header masking automatically

* fix: used an additional non-typed options to pass the masking property

* Add an options object for future needs

* Fix masking e2e

* Be more verbose on the unmasked vs masked version in the code

* Update packages/wdio-logger/src/index.ts

Co-authored-by: Christian Bromann <git@bromann.dev>

* Update packages/wdio-logger/src/index.ts

Co-authored-by: Christian Bromann <git@bromann.dev>

* Code review

- Use optional options instead
- Add more comment on intentions

* Update packages/webdriver/src/types.ts

* Update packages/webdriverio/src/types.ts

* Update packages/webdriver/tests/command.test.ts

* Update packages/webdriverio/src/types.ts

* Update packages/webdriver/tests/utils.test.ts

* On more UT for emit and log.info cases with masked data

* make sure the capture data are reset

* Better integration of the appium header

* final code review

* Fix pipeline

* Fix depcheck

* Fix this.client header undesired alteration

* Ensure more code coverage

* Apply suggestions from code review
Apply suggestions from code review
Apply suggestions from code review

* Code reviews

* Fix `CommandRuntimeOptions is not defined`

* Review to mask all captured group + documentation

* Add more verbose e2e

* Add `maskingPatterns` capabilities to set easily masking patterns

* Code review

* Test if this is causing e2e to fails!

* Fix typo

* Rectify doc since it is not a capability

* More robust masking algorithm supporting logging of string array

- Apply masking on the entire string after stripping the colors (ansi) for a more robust algorithm
- The above allow to support regular expression with keyword like `RESULT` or `COMMAND` or `BIDI COMMAND`
- Downside is in the console some colors are lost
- Enhance doc for the above and show an example to configure all loggers since using wdio.conf object not always work for all of them

* Simplify `setMaskingPatterns` API

* Add JSDOC and simplify `mask` following previous changes

* Update packages/webdriverio/src/types.ts

Co-authored-by: Christian Bromann <git@bromann.dev>

* Update packages/webdriver/src/types.ts

Co-authored-by: Christian Bromann <git@bromann.dev>

* Use suggested return-early version of mask in used command.ts

* Fix grammar + review doc

* be more human friendly

* Test

* Code review

* Fix new line sometimes stripped away

* Update packages/wdio-logger/README.md

Co-authored-by: Christian Bromann <git@bromann.dev>

* Apply suggestions from code review

Co-authored-by: Christian Bromann <git@bromann.dev>

* Last comment review checking types in setMaskingPatterns

* Add doc on `maskingPatterns` in Configuration.md

* Add guides on security

* Apply suggestions from code review

* Add missing import in example

---------

Co-authored-by: Christian Bromann <git@bromann.dev>
2025-05-29 14:18:24 -07:00
..
config (@wdio/utils): separate between common and node utils (#11469) 2023-10-19 15:43:14 -07:00
utils (webdriverio): allow to define new capabilities when calling `reloadSession (#12147) 2024-02-05 20:24:27 -08:00
config.ts feat: introduce defineConfig function to create a typed configuration object (#14350) 2025-04-12 15:05:57 +02:00
foobar-service.ts rewrite @wdio/utils 2022-07-19 11:03:35 +00:00
local-runner.ts (internal): fix usage of intialise wording in variables, comments and elsewhere (#11672) 2023-11-14 22:10:33 -08:00
logger.ts feat(runner+browserstack): Mask sensitive data for Reporters (and more) (#13938) 2025-05-29 14:18:24 -07:00
repl.ts rewrite repl package to esm 2022-07-19 11:15:42 +00:00
reporter.ts feat(reporter): add browserName function and use where required (#14454) 2025-05-06 08:05:03 -07:00
runner.ts rewrite @wdio/local-runner 2022-07-19 11:15:45 +00:00
utils.ts fix(webdriver): better type check for webSocketUrl capability (#13417) 2024-08-19 13:34:41 -07:00