appium-webdriveragent 13.2.0 → 13.2.1

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/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [13.2.1](https://github.com/appium/WebDriverAgent/compare/v13.2.0...v13.2.1) (2026-06-06)
2
+
3
+ ### Miscellaneous Chores
4
+
5
+ * Refactor settings handling API ([#1148](https://github.com/appium/WebDriverAgent/issues/1148)) ([ff7ac36](https://github.com/appium/WebDriverAgent/commit/ff7ac368debb22659509169a0eca530bae3dc879))
6
+
1
7
  ## [13.2.0](https://github.com/appium/WebDriverAgent/compare/v13.1.3...v13.2.0) (2026-05-26)
2
8
 
3
9
  ### Features
@@ -522,6 +522,10 @@
522
522
  71F3E7D525417FF400E0C22B /* FBSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 71F3E7D225417FF400E0C22B /* FBSettings.h */; };
523
523
  71F3E7D625417FF400E0C22B /* FBSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3E7D325417FF400E0C22B /* FBSettings.m */; };
524
524
  71F3E7D725417FF400E0C22B /* FBSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3E7D325417FF400E0C22B /* FBSettings.m */; };
525
+ 71F3E7D825417FF400E0C22C /* FBSettingsHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 71F3E7D625417FF400E0C22C /* FBSettingsHandler.h */; };
526
+ 71F3E7D925417FF400E0C22C /* FBSettingsHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 71F3E7D625417FF400E0C22C /* FBSettingsHandler.h */; };
527
+ 71F3E7DA25417FF400E0C22C /* FBSettingsHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3E7D725417FF400E0C22C /* FBSettingsHandler.m */; };
528
+ 71F3E7DB25417FF400E0C22C /* FBSettingsHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F3E7D725417FF400E0C22C /* FBSettingsHandler.m */; };
525
529
  71F5BE23252E576C00EE9EBA /* XCUIElement+FBSwiping.h in Headers */ = {isa = PBXBuildFile; fileRef = 71F5BE21252E576C00EE9EBA /* XCUIElement+FBSwiping.h */; };
526
530
  71F5BE24252E576C00EE9EBA /* XCUIElement+FBSwiping.h in Headers */ = {isa = PBXBuildFile; fileRef = 71F5BE21252E576C00EE9EBA /* XCUIElement+FBSwiping.h */; };
527
531
  71F5BE25252E576C00EE9EBA /* XCUIElement+FBSwiping.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F5BE22252E576C00EE9EBA /* XCUIElement+FBSwiping.m */; };
@@ -1114,6 +1118,8 @@
1114
1118
  71E75E6C254824230099FC87 /* XCUIElementQuery+FBHelpers.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "XCUIElementQuery+FBHelpers.m"; sourceTree = "<group>"; };
1115
1119
  71F3E7D225417FF400E0C22B /* FBSettings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBSettings.h; sourceTree = "<group>"; };
1116
1120
  71F3E7D325417FF400E0C22B /* FBSettings.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBSettings.m; sourceTree = "<group>"; };
1121
+ 71F3E7D625417FF400E0C22C /* FBSettingsHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FBSettingsHandler.h; sourceTree = "<group>"; };
1122
+ 71F3E7D725417FF400E0C22C /* FBSettingsHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBSettingsHandler.m; sourceTree = "<group>"; };
1117
1123
  71F5BE21252E576C00EE9EBA /* XCUIElement+FBSwiping.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "XCUIElement+FBSwiping.h"; sourceTree = "<group>"; };
1118
1124
  71F5BE22252E576C00EE9EBA /* XCUIElement+FBSwiping.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "XCUIElement+FBSwiping.m"; sourceTree = "<group>"; };
1119
1125
  71F5BE33252E5B2200EE9EBA /* FBElementSwipingTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FBElementSwipingTests.m; sourceTree = "<group>"; };
@@ -1982,6 +1988,8 @@
1982
1988
  EE9AB7921CAEDF0C008C271F /* FBRuntimeUtils.m */,
1983
1989
  71F3E7D225417FF400E0C22B /* FBSettings.h */,
1984
1990
  71F3E7D325417FF400E0C22B /* FBSettings.m */,
1991
+ 71F3E7D625417FF400E0C22C /* FBSettingsHandler.h */,
1992
+ 71F3E7D725417FF400E0C22C /* FBSettingsHandler.m */,
1985
1993
  715AFABF1FFA29180053896D /* FBScreen.h */,
1986
1994
  715AFAC01FFA29180053896D /* FBScreen.m */,
1987
1995
  71C9EAAA25E8415A00470CD8 /* FBScreenshot.h */,
@@ -2333,6 +2341,7 @@
2333
2341
  13DE7A50287C46BB003243C6 /* FBXCElementSnapshot.h in Headers */,
2334
2342
  13DE7A56287CA1EC003243C6 /* FBXCElementSnapshotWrapper.h in Headers */,
2335
2343
  71F3E7D525417FF400E0C22B /* FBSettings.h in Headers */,
2344
+ 71F3E7D825417FF400E0C22C /* FBSettingsHandler.h in Headers */,
2336
2345
  641EE63A2240C5CA00173FCB /* XCTest.h in Headers */,
2337
2346
  641EE63B2240C5CA00173FCB /* FBAlertsMonitor.h in Headers */,
2338
2347
  641EE63D2240C5CA00173FCB /* FBSession.h in Headers */,
@@ -2746,6 +2755,7 @@
2746
2755
  719DCF152601EAFB000E765F /* FBNotificationsHelper.h in Headers */,
2747
2756
  EE35AD4A1E3B77D600A02D78 /* XCTestExpectationDelegate-Protocol.h in Headers */,
2748
2757
  71F3E7D425417FF400E0C22B /* FBSettings.h in Headers */,
2758
+ 71F3E7D925417FF400E0C22C /* FBSettingsHandler.h in Headers */,
2749
2759
  EE35AD641E3B77D600A02D78 /* XCTUIApplicationMonitor-Protocol.h in Headers */,
2750
2760
  EE35AD591E3B77D600A02D78 /* XCTKVOExpectation.h in Headers */,
2751
2761
  13DE7A43287C2A8D003243C6 /* FBXCAccessibilityElement.h in Headers */,
@@ -3159,6 +3169,7 @@
3159
3169
  E444DCD624917A5E0060D7EB /* DDRange.m in Sources */,
3160
3170
  641EE5D72240C5CA00173FCB /* FBScreenshotCommands.m in Sources */,
3161
3171
  71F3E7D725417FF400E0C22B /* FBSettings.m in Sources */,
3172
+ 71F3E7DA25417FF400E0C22C /* FBSettingsHandler.m in Sources */,
3162
3173
  641EE5D92240C5CA00173FCB /* XCUIElement+FBPickerWheel.m in Sources */,
3163
3174
  641EE5DA2240C5CA00173FCB /* XCUIApplicationProcessDelay.m in Sources */,
3164
3175
  641EE5DB2240C5CA00173FCB /* FBXPath.m in Sources */,
@@ -3374,6 +3385,7 @@
3374
3385
  EE158AB91CBD456F00A3E3F0 /* FBAlertViewCommands.m in Sources */,
3375
3386
  71BB58F12B96511800CB9BFE /* FBVideoCommands.m in Sources */,
3376
3387
  71F3E7D625417FF400E0C22B /* FBSettings.m in Sources */,
3388
+ 71F3E7DB25417FF400E0C22C /* FBSettingsHandler.m in Sources */,
3377
3389
  13DE7A57287CA1EC003243C6 /* FBXCElementSnapshotWrapper.m in Sources */,
3378
3390
  71BB58F82B96531900CB9BFE /* FBScreenRecordingContainer.m in Sources */,
3379
3391
  EE158AB31CBD456F00A3E3F0 /* XCUIElement+FBScrolling.m in Sources */,
@@ -9,7 +9,6 @@
9
9
  #import "FBSessionCommands.h"
10
10
 
11
11
  #import "FBCapabilities.h"
12
- #import "FBClassChainQueryParser.h"
13
12
  #import "FBConfiguration.h"
14
13
  #import "FBExceptions.h"
15
14
  #import "FBLogger.h"
@@ -17,8 +16,8 @@
17
16
  #import "FBRouteRequest.h"
18
17
  #import "FBSession.h"
19
18
  #import "FBSettings.h"
19
+ #import "FBSettingsHandler.h"
20
20
  #import "FBRuntimeUtils.h"
21
- #import "FBActiveAppDetectionPoint.h"
22
21
  #import "FBXCodeCompatibility.h"
23
22
  #import "XCUIApplication+FBHelpers.h"
24
23
  #import "XCUIApplication+FBQuiescence.h"
@@ -324,192 +323,28 @@
324
323
 
325
324
  + (id<FBResponsePayload>)handleGetSettings:(FBRouteRequest *)request
326
325
  {
327
- return FBResponseWithObject(
328
- @{
329
- FB_SETTING_USE_COMPACT_RESPONSES: @([FBConfiguration shouldUseCompactResponses]),
330
- FB_SETTING_ELEMENT_RESPONSE_ATTRIBUTES: [FBConfiguration elementResponseAttributes],
331
- FB_SETTING_MJPEG_SERVER_SCREENSHOT_QUALITY: @([FBConfiguration mjpegServerScreenshotQuality]),
332
- FB_SETTING_MJPEG_SERVER_FRAMERATE: @([FBConfiguration mjpegServerFramerate]),
333
- FB_SETTING_MJPEG_SCALING_FACTOR: @([FBConfiguration mjpegScalingFactor]),
334
- FB_SETTING_MJPEG_FIX_ORIENTATION: @([FBConfiguration mjpegShouldFixOrientation]),
335
- FB_SETTING_SCREENSHOT_QUALITY: @([FBConfiguration screenshotQuality]),
336
- FB_SETTING_KEYBOARD_AUTOCORRECTION: @([FBConfiguration keyboardAutocorrection]),
337
- FB_SETTING_KEYBOARD_PREDICTION: @([FBConfiguration keyboardPrediction]),
338
- FB_SETTING_SNAPSHOT_MAX_DEPTH: @([FBConfiguration snapshotMaxDepth]),
339
- FB_SETTING_SNAPSHOT_MAX_CHILDREN: @([FBConfiguration snapshotMaxChildren]),
340
- FB_SETTING_USE_FIRST_MATCH: @([FBConfiguration useFirstMatch]),
341
- FB_SETTING_WAIT_FOR_IDLE_TIMEOUT: @([FBConfiguration waitForIdleTimeout]),
342
- FB_SETTING_ANIMATION_COOL_OFF_TIMEOUT: @([FBConfiguration animationCoolOffTimeout]),
343
- FB_SETTING_BOUND_ELEMENTS_BY_INDEX: @([FBConfiguration boundElementsByIndex]),
344
- FB_SETTING_REDUCE_MOTION: @([FBConfiguration reduceMotionEnabled]),
345
- FB_SETTING_DEFAULT_ACTIVE_APPLICATION: request.session.defaultActiveApplication,
346
- FB_SETTING_ACTIVE_APP_DETECTION_POINT: FBActiveAppDetectionPoint.sharedInstance.stringCoordinates,
347
- FB_SETTING_ACCEPT_ALERT_BUTTON_SELECTOR: FBConfiguration.acceptAlertButtonSelector,
348
- FB_SETTING_DISMISS_ALERT_BUTTON_SELECTOR: FBConfiguration.dismissAlertButtonSelector,
349
- FB_SETTING_AUTO_CLICK_ALERT_SELECTOR: FBConfiguration.autoClickAlertSelector,
350
- FB_SETTING_DEFAULT_ALERT_ACTION: request.session.defaultAlertAction ?: @"",
351
- FB_SETTING_MAX_TYPING_FREQUENCY: @([FBConfiguration maxTypingFrequency]),
352
- FB_SETTING_RESPECT_SYSTEM_ALERTS: @([FBConfiguration shouldRespectSystemAlerts]),
353
- FB_SETTING_USE_CLEAR_TEXT_SHORTCUT: @([FBConfiguration useClearTextShortcut]),
354
- FB_SETTING_INCLUDE_HITTABLE_IN_PAGE_SOURCE: @([FBConfiguration includeHittableInPageSource]),
355
- FB_SETTING_INCLUDE_NATIVE_FRAME_IN_PAGE_SOURCE: @([FBConfiguration includeNativeFrameInPageSource]),
356
- FB_SETTING_INCLUDE_MIN_MAX_VALUE_IN_PAGE_SOURCE: @([FBConfiguration includeMinMaxValueInPageSource]),
357
- FB_SETTING_INCLUDE_CUSTOM_ACTIONS_IN_PAGE_SOURCE: @([FBConfiguration includeCustomActionsInPageSource]),
358
- FB_SETTING_ENFORCE_CUSTOM_SNAPSHOTS: @([FBConfiguration enforceCustomSnapshots]),
359
- FB_SETTING_LIMIT_XPATH_CONTEXT_SCOPE: @([FBConfiguration limitXpathContextScope]),
360
- #if !TARGET_OS_TV
361
- FB_SETTING_SCREENSHOT_ORIENTATION: [FBConfiguration humanReadableScreenshotOrientation],
362
- #endif
363
- }
364
- );
326
+ return FBResponseWithObject([FBSettingsHandler currentSettingsForSession:request.session]);
365
327
  }
366
328
 
367
- // TODO if we get lots more settings, handling them with a series of if-statements will be unwieldy
368
- // and this should be refactored
369
329
  + (id<FBResponsePayload>)handleSetSettings:(FBRouteRequest *)request
370
330
  {
371
- NSDictionary* settings = request.arguments[@"settings"];
372
-
373
- if (nil != [settings objectForKey:FB_SETTING_USE_COMPACT_RESPONSES]) {
374
- [FBConfiguration setShouldUseCompactResponses:[[settings objectForKey:FB_SETTING_USE_COMPACT_RESPONSES] boolValue]];
375
- }
376
- if (nil != [settings objectForKey:FB_SETTING_ELEMENT_RESPONSE_ATTRIBUTES]) {
377
- [FBConfiguration setElementResponseAttributes:(NSString *)[settings objectForKey:FB_SETTING_ELEMENT_RESPONSE_ATTRIBUTES]];
378
- }
379
- if (nil != [settings objectForKey:FB_SETTING_MJPEG_SERVER_SCREENSHOT_QUALITY]) {
380
- [FBConfiguration setMjpegServerScreenshotQuality:[[settings objectForKey:FB_SETTING_MJPEG_SERVER_SCREENSHOT_QUALITY] unsignedIntegerValue]];
381
- }
382
- if (nil != [settings objectForKey:FB_SETTING_MJPEG_SERVER_FRAMERATE]) {
383
- [FBConfiguration setMjpegServerFramerate:[[settings objectForKey:FB_SETTING_MJPEG_SERVER_FRAMERATE] unsignedIntegerValue]];
384
- }
385
- if (nil != [settings objectForKey:FB_SETTING_SCREENSHOT_QUALITY]) {
386
- [FBConfiguration setScreenshotQuality:[[settings objectForKey:FB_SETTING_SCREENSHOT_QUALITY] unsignedIntegerValue]];
387
- }
388
- if (nil != [settings objectForKey:FB_SETTING_MJPEG_SCALING_FACTOR]) {
389
- [FBConfiguration setMjpegScalingFactor:[[settings objectForKey:FB_SETTING_MJPEG_SCALING_FACTOR] floatValue]];
390
- }
391
- if (nil != [settings objectForKey:FB_SETTING_MJPEG_FIX_ORIENTATION]) {
392
- [FBConfiguration setMjpegShouldFixOrientation:[[settings objectForKey:FB_SETTING_MJPEG_FIX_ORIENTATION] boolValue]];
393
- }
394
- if (nil != [settings objectForKey:FB_SETTING_KEYBOARD_AUTOCORRECTION]) {
395
- [FBConfiguration setKeyboardAutocorrection:[[settings objectForKey:FB_SETTING_KEYBOARD_AUTOCORRECTION] boolValue]];
331
+ id settingsArgument = request.arguments[@"settings"];
332
+ if (nil != settingsArgument && ![settingsArgument isKindOfClass:NSDictionary.class]) {
333
+ return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:@"settings must be a dictionary"
334
+ traceback:nil]);
396
335
  }
397
- if (nil != [settings objectForKey:FB_SETTING_KEYBOARD_PREDICTION]) {
398
- [FBConfiguration setKeyboardPrediction:[[settings objectForKey:FB_SETTING_KEYBOARD_PREDICTION] boolValue]];
336
+ NSDictionary *settings = settingsArgument ?: @{};
337
+ FBCommandStatus *status = [FBSettingsHandler applySettings:settings
338
+ toSession:request.session];
339
+ if (status.hasError) {
340
+ return FBResponseWithStatus(status);
399
341
  }
400
- if (nil != [settings objectForKey:FB_SETTING_RESPECT_SYSTEM_ALERTS]) {
401
- [FBConfiguration setShouldRespectSystemAlerts:[[settings objectForKey:FB_SETTING_RESPECT_SYSTEM_ALERTS] boolValue]];
402
- }
403
- if (nil != [settings objectForKey:FB_SETTING_SNAPSHOT_MAX_DEPTH]) {
404
- [FBConfiguration setSnapshotMaxDepth:[[settings objectForKey:FB_SETTING_SNAPSHOT_MAX_DEPTH] intValue]];
405
- }
406
- if (nil != [settings objectForKey:FB_SETTING_SNAPSHOT_MAX_CHILDREN]) {
407
- [FBConfiguration setSnapshotMaxChildren:[[settings objectForKey:FB_SETTING_SNAPSHOT_MAX_CHILDREN] intValue]];
408
- }
409
- if (nil != [settings objectForKey:FB_SETTING_USE_FIRST_MATCH]) {
410
- [FBConfiguration setUseFirstMatch:[[settings objectForKey:FB_SETTING_USE_FIRST_MATCH] boolValue]];
411
- }
412
- if (nil != [settings objectForKey:FB_SETTING_BOUND_ELEMENTS_BY_INDEX]) {
413
- [FBConfiguration setBoundElementsByIndex:[[settings objectForKey:FB_SETTING_BOUND_ELEMENTS_BY_INDEX] boolValue]];
414
- }
415
- if (nil != [settings objectForKey:FB_SETTING_REDUCE_MOTION]) {
416
- [FBConfiguration setReduceMotionEnabled:[[settings objectForKey:FB_SETTING_REDUCE_MOTION] boolValue]];
417
- }
418
- if (nil != [settings objectForKey:FB_SETTING_DEFAULT_ACTIVE_APPLICATION]) {
419
- request.session.defaultActiveApplication = (NSString *)[settings objectForKey:FB_SETTING_DEFAULT_ACTIVE_APPLICATION];
420
- }
421
- if (nil != [settings objectForKey:FB_SETTING_ACTIVE_APP_DETECTION_POINT]) {
422
- NSError *error;
423
- if (![FBActiveAppDetectionPoint.sharedInstance setCoordinatesWithString:(NSString *)[settings objectForKey:FB_SETTING_ACTIVE_APP_DETECTION_POINT]
424
- error:&error]) {
425
- return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:error.localizedDescription
426
- traceback:nil]);
427
- }
428
- }
429
- if (nil != [settings objectForKey:FB_SETTING_ACCEPT_ALERT_BUTTON_SELECTOR]) {
430
- [FBConfiguration setAcceptAlertButtonSelector:(NSString *)[settings objectForKey:FB_SETTING_ACCEPT_ALERT_BUTTON_SELECTOR]];
431
- }
432
- if (nil != [settings objectForKey:FB_SETTING_DISMISS_ALERT_BUTTON_SELECTOR]) {
433
- [FBConfiguration setDismissAlertButtonSelector:(NSString *)[settings objectForKey:FB_SETTING_DISMISS_ALERT_BUTTON_SELECTOR]];
434
- }
435
- if (nil != [settings objectForKey:FB_SETTING_AUTO_CLICK_ALERT_SELECTOR]) {
436
- FBCommandStatus *status = [self.class configureAutoClickAlertWithSelector:settings[FB_SETTING_AUTO_CLICK_ALERT_SELECTOR]
437
- forSession:request.session];
438
- if (status.hasError) {
439
- return FBResponseWithStatus(status);
440
- }
441
- }
442
- if (nil != [settings objectForKey:FB_SETTING_WAIT_FOR_IDLE_TIMEOUT]) {
443
- [FBConfiguration setWaitForIdleTimeout:[[settings objectForKey:FB_SETTING_WAIT_FOR_IDLE_TIMEOUT] doubleValue]];
444
- }
445
- if (nil != [settings objectForKey:FB_SETTING_ANIMATION_COOL_OFF_TIMEOUT]) {
446
- [FBConfiguration setAnimationCoolOffTimeout:[[settings objectForKey:FB_SETTING_ANIMATION_COOL_OFF_TIMEOUT] doubleValue]];
447
- }
448
- if ([[settings objectForKey:FB_SETTING_DEFAULT_ALERT_ACTION] isKindOfClass:NSString.class]) {
449
- request.session.defaultAlertAction = [settings[FB_SETTING_DEFAULT_ALERT_ACTION] lowercaseString];
450
- }
451
- if (nil != [settings objectForKey:FB_SETTING_MAX_TYPING_FREQUENCY]) {
452
- [FBConfiguration setMaxTypingFrequency:[[settings objectForKey:FB_SETTING_MAX_TYPING_FREQUENCY] unsignedIntegerValue]];
453
- }
454
- if (nil != [settings objectForKey:FB_SETTING_USE_CLEAR_TEXT_SHORTCUT]) {
455
- [FBConfiguration setUseClearTextShortcut:[[settings objectForKey:FB_SETTING_USE_CLEAR_TEXT_SHORTCUT] boolValue]];
456
- }
457
- if (nil != [settings objectForKey:FB_SETTING_INCLUDE_HITTABLE_IN_PAGE_SOURCE]) {
458
- [FBConfiguration setIncludeHittableInPageSource:[[settings objectForKey:FB_SETTING_INCLUDE_HITTABLE_IN_PAGE_SOURCE] boolValue]];
459
- }
460
- if (nil != [settings objectForKey:FB_SETTING_INCLUDE_NATIVE_FRAME_IN_PAGE_SOURCE]) {
461
- [FBConfiguration setIncludeNativeFrameInPageSource:[[settings objectForKey:FB_SETTING_INCLUDE_NATIVE_FRAME_IN_PAGE_SOURCE] boolValue]];
462
- }
463
- if (nil != [settings objectForKey:FB_SETTING_INCLUDE_MIN_MAX_VALUE_IN_PAGE_SOURCE]) {
464
- [FBConfiguration setIncludeMinMaxValueInPageSource:[[settings objectForKey:FB_SETTING_INCLUDE_MIN_MAX_VALUE_IN_PAGE_SOURCE] boolValue]];
465
- }
466
- if (nil != [settings objectForKey:FB_SETTING_INCLUDE_CUSTOM_ACTIONS_IN_PAGE_SOURCE]) {
467
- [FBConfiguration setIncludeCustomActionsInPageSource:[[settings objectForKey:FB_SETTING_INCLUDE_CUSTOM_ACTIONS_IN_PAGE_SOURCE] boolValue]];
468
- }
469
- if (nil != [settings objectForKey:FB_SETTING_ENFORCE_CUSTOM_SNAPSHOTS]) {
470
- [FBConfiguration setEnforceCustomSnapshots:[[settings objectForKey:FB_SETTING_ENFORCE_CUSTOM_SNAPSHOTS] boolValue]];
471
- }
472
- if (nil != [settings objectForKey:FB_SETTING_LIMIT_XPATH_CONTEXT_SCOPE]) {
473
- [FBConfiguration setLimitXpathContextScope:[[settings objectForKey:FB_SETTING_LIMIT_XPATH_CONTEXT_SCOPE] boolValue]];
474
- }
475
-
476
- #if !TARGET_OS_TV
477
- if (nil != [settings objectForKey:FB_SETTING_SCREENSHOT_ORIENTATION]) {
478
- NSError *error;
479
- if (![FBConfiguration setScreenshotOrientation:(NSString *)[settings objectForKey:FB_SETTING_SCREENSHOT_ORIENTATION]
480
- error:&error]) {
481
- return FBResponseWithStatus([FBCommandStatus invalidArgumentErrorWithMessage:error.localizedDescription
482
- traceback:nil]);
483
- }
484
- }
485
- #endif
486
-
487
342
  return [self handleGetSettings:request];
488
343
  }
489
344
 
490
345
 
491
346
  #pragma mark - Helpers
492
347
 
493
- + (FBCommandStatus *)configureAutoClickAlertWithSelector:(NSString *)selector
494
- forSession:(FBSession *)session
495
- {
496
- if (0 == [selector length]) {
497
- [FBConfiguration setAutoClickAlertSelector:selector];
498
- [session disableAlertsMonitor];
499
- return [FBCommandStatus ok];
500
- }
501
-
502
- NSError *error;
503
- FBClassChain *parsedChain = [FBClassChainQueryParser parseQuery:selector error:&error];
504
- if (nil == parsedChain) {
505
- return [FBCommandStatus invalidSelectorErrorWithMessage:error.localizedDescription
506
- traceback:nil];
507
- }
508
- [FBConfiguration setAutoClickAlertSelector:selector];
509
- [session enableAlertsMonitor];
510
- return [FBCommandStatus ok];
511
- }
512
-
513
348
  + (NSString *)buildTimestamp
514
349
  {
515
350
  return [NSString stringWithFormat:@"%@ %@",
@@ -15,11 +15,11 @@
15
15
  <key>CFBundlePackageType</key>
16
16
  <string>FMWK</string>
17
17
  <key>CFBundleShortVersionString</key>
18
- <string>13.2.0</string>
18
+ <string>13.2.1</string>
19
19
  <key>CFBundleSignature</key>
20
20
  <string>????</string>
21
21
  <key>CFBundleVersion</key>
22
- <string>13.2.0</string>
22
+ <string>13.2.1</string>
23
23
  <key>NSPrincipalClass</key>
24
24
  <string/>
25
25
  </dict>
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Copyright (c) 2015-present, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
9
+ #import <Foundation/Foundation.h>
10
+
11
+ @class FBCommandStatus;
12
+ @class FBSession;
13
+
14
+ NS_ASSUME_NONNULL_BEGIN
15
+
16
+ @interface FBSettingsHandler : NSObject
17
+
18
+ /**
19
+ * Applies the given settings dictionary to FBConfiguration and the active session.
20
+ * JSON null values are normalized to nil. Nil is applied only for settings that
21
+ * support clearing (e.g. alert action and selectors); other keys are skipped so
22
+ * null does not get coerced to NO/0. Unknown keys are skipped.
23
+ *
24
+ * @return nil on success, or an FBCommandStatus describing the validation error.
25
+ */
26
+ + (nullable FBCommandStatus *)applySettings:(NSDictionary *)settings toSession:(FBSession *)session;
27
+
28
+ /**
29
+ * Returns the current values for all known settings.
30
+ */
31
+ + (NSDictionary *)currentSettingsForSession:(FBSession *)session;
32
+
33
+ @end
34
+
35
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,356 @@
1
+ /**
2
+ * Copyright (c) 2015-present, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ */
8
+
9
+ #import "FBSettingsHandler.h"
10
+
11
+ #import "FBActiveAppDetectionPoint.h"
12
+ #import "FBClassChainQueryParser.h"
13
+ #import "FBCommandStatus.h"
14
+ #import "FBConfiguration.h"
15
+ #import "FBSession.h"
16
+ #import "FBSettings.h"
17
+
18
+ typedef FBCommandStatus * _Nullable (^FBSettingApplyBlock)(FBSession *session, id value);
19
+ typedef id _Nonnull (^FBSettingGetBlock)(FBSession *session);
20
+
21
+ static id FBNormalizedSettingValue(id value)
22
+ {
23
+ return value == NSNull.null ? nil : value;
24
+ }
25
+
26
+ static NSSet<NSString *> *FBNilClearableSettingKeys(void)
27
+ {
28
+ static NSSet<NSString *> *keys;
29
+ static dispatch_once_t onceToken;
30
+ dispatch_once(&onceToken, ^{
31
+ keys = [NSSet setWithObjects:
32
+ FB_SETTING_DEFAULT_ALERT_ACTION,
33
+ FB_SETTING_ACCEPT_ALERT_BUTTON_SELECTOR,
34
+ FB_SETTING_DISMISS_ALERT_BUTTON_SELECTOR,
35
+ FB_SETTING_AUTO_CLICK_ALERT_SELECTOR,
36
+ nil];
37
+ });
38
+ return keys;
39
+ }
40
+
41
+ @implementation FBSettingsHandler
42
+
43
+ + (NSDictionary<NSString *, FBSettingApplyBlock> *)settersMap
44
+ {
45
+ static NSDictionary<NSString *, FBSettingApplyBlock> *settersMap;
46
+ static dispatch_once_t onceToken;
47
+ dispatch_once(&onceToken, ^{
48
+ NSMutableDictionary<NSString *, FBSettingApplyBlock> *map = [NSMutableDictionary dictionary];
49
+ map[FB_SETTING_USE_COMPACT_RESPONSES] = ^FBCommandStatus *(FBSession *session, id value) {
50
+ [FBConfiguration setShouldUseCompactResponses:[value boolValue]];
51
+ return nil;
52
+ };
53
+ map[FB_SETTING_ELEMENT_RESPONSE_ATTRIBUTES] = ^FBCommandStatus *(FBSession *session, id value) {
54
+ [FBConfiguration setElementResponseAttributes:(NSString *)value];
55
+ return nil;
56
+ };
57
+ map[FB_SETTING_MJPEG_SERVER_SCREENSHOT_QUALITY] = ^FBCommandStatus *(FBSession *session, id value) {
58
+ [FBConfiguration setMjpegServerScreenshotQuality:[value unsignedIntegerValue]];
59
+ return nil;
60
+ };
61
+ map[FB_SETTING_MJPEG_SERVER_FRAMERATE] = ^FBCommandStatus *(FBSession *session, id value) {
62
+ [FBConfiguration setMjpegServerFramerate:[value unsignedIntegerValue]];
63
+ return nil;
64
+ };
65
+ map[FB_SETTING_SCREENSHOT_QUALITY] = ^FBCommandStatus *(FBSession *session, id value) {
66
+ [FBConfiguration setScreenshotQuality:[value unsignedIntegerValue]];
67
+ return nil;
68
+ };
69
+ map[FB_SETTING_MJPEG_SCALING_FACTOR] = ^FBCommandStatus *(FBSession *session, id value) {
70
+ [FBConfiguration setMjpegScalingFactor:[value floatValue]];
71
+ return nil;
72
+ };
73
+ map[FB_SETTING_MJPEG_FIX_ORIENTATION] = ^FBCommandStatus *(FBSession *session, id value) {
74
+ [FBConfiguration setMjpegShouldFixOrientation:[value boolValue]];
75
+ return nil;
76
+ };
77
+ map[FB_SETTING_KEYBOARD_AUTOCORRECTION] = ^FBCommandStatus *(FBSession *session, id value) {
78
+ [FBConfiguration setKeyboardAutocorrection:[value boolValue]];
79
+ return nil;
80
+ };
81
+ map[FB_SETTING_KEYBOARD_PREDICTION] = ^FBCommandStatus *(FBSession *session, id value) {
82
+ [FBConfiguration setKeyboardPrediction:[value boolValue]];
83
+ return nil;
84
+ };
85
+ map[FB_SETTING_RESPECT_SYSTEM_ALERTS] = ^FBCommandStatus *(FBSession *session, id value) {
86
+ [FBConfiguration setShouldRespectSystemAlerts:[value boolValue]];
87
+ return nil;
88
+ };
89
+ map[FB_SETTING_SNAPSHOT_MAX_DEPTH] = ^FBCommandStatus *(FBSession *session, id value) {
90
+ [FBConfiguration setSnapshotMaxDepth:[value intValue]];
91
+ return nil;
92
+ };
93
+ map[FB_SETTING_SNAPSHOT_MAX_CHILDREN] = ^FBCommandStatus *(FBSession *session, id value) {
94
+ [FBConfiguration setSnapshotMaxChildren:[value intValue]];
95
+ return nil;
96
+ };
97
+ map[FB_SETTING_USE_FIRST_MATCH] = ^FBCommandStatus *(FBSession *session, id value) {
98
+ [FBConfiguration setUseFirstMatch:[value boolValue]];
99
+ return nil;
100
+ };
101
+ map[FB_SETTING_BOUND_ELEMENTS_BY_INDEX] = ^FBCommandStatus *(FBSession *session, id value) {
102
+ [FBConfiguration setBoundElementsByIndex:[value boolValue]];
103
+ return nil;
104
+ };
105
+ map[FB_SETTING_REDUCE_MOTION] = ^FBCommandStatus *(FBSession *session, id value) {
106
+ [FBConfiguration setReduceMotionEnabled:[value boolValue]];
107
+ return nil;
108
+ };
109
+ map[FB_SETTING_DEFAULT_ACTIVE_APPLICATION] = ^FBCommandStatus *(FBSession *session, id value) {
110
+ session.defaultActiveApplication = (NSString *)value;
111
+ return nil;
112
+ };
113
+ map[FB_SETTING_ACTIVE_APP_DETECTION_POINT] = ^FBCommandStatus *(FBSession *session, id value) {
114
+ NSError *error;
115
+ if (![FBActiveAppDetectionPoint.sharedInstance setCoordinatesWithString:(NSString *)value
116
+ error:&error]) {
117
+ return [FBCommandStatus invalidArgumentErrorWithMessage:error.localizedDescription
118
+ traceback:nil];
119
+ }
120
+ return nil;
121
+ };
122
+ map[FB_SETTING_ACCEPT_ALERT_BUTTON_SELECTOR] = ^FBCommandStatus *(FBSession *session, id value) {
123
+ [FBConfiguration setAcceptAlertButtonSelector:(NSString *)value];
124
+ return nil;
125
+ };
126
+ map[FB_SETTING_DISMISS_ALERT_BUTTON_SELECTOR] = ^FBCommandStatus *(FBSession *session, id value) {
127
+ [FBConfiguration setDismissAlertButtonSelector:(NSString *)value];
128
+ return nil;
129
+ };
130
+ map[FB_SETTING_AUTO_CLICK_ALERT_SELECTOR] = ^FBCommandStatus *(FBSession *session, id value) {
131
+ return [self configureAutoClickAlertWithSelector:(NSString *)value forSession:session];
132
+ };
133
+ map[FB_SETTING_WAIT_FOR_IDLE_TIMEOUT] = ^FBCommandStatus *(FBSession *session, id value) {
134
+ [FBConfiguration setWaitForIdleTimeout:[value doubleValue]];
135
+ return nil;
136
+ };
137
+ map[FB_SETTING_ANIMATION_COOL_OFF_TIMEOUT] = ^FBCommandStatus *(FBSession *session, id value) {
138
+ [FBConfiguration setAnimationCoolOffTimeout:[value doubleValue]];
139
+ return nil;
140
+ };
141
+ map[FB_SETTING_DEFAULT_ALERT_ACTION] = ^FBCommandStatus *(FBSession *session, id value) {
142
+ if (nil == value) {
143
+ session.defaultAlertAction = nil;
144
+ } else if ([value isKindOfClass:NSString.class]) {
145
+ session.defaultAlertAction = [(NSString *)value lowercaseString];
146
+ }
147
+ return nil;
148
+ };
149
+ map[FB_SETTING_MAX_TYPING_FREQUENCY] = ^FBCommandStatus *(FBSession *session, id value) {
150
+ [FBConfiguration setMaxTypingFrequency:[value unsignedIntegerValue]];
151
+ return nil;
152
+ };
153
+ map[FB_SETTING_USE_CLEAR_TEXT_SHORTCUT] = ^FBCommandStatus *(FBSession *session, id value) {
154
+ [FBConfiguration setUseClearTextShortcut:[value boolValue]];
155
+ return nil;
156
+ };
157
+ map[FB_SETTING_INCLUDE_HITTABLE_IN_PAGE_SOURCE] = ^FBCommandStatus *(FBSession *session, id value) {
158
+ [FBConfiguration setIncludeHittableInPageSource:[value boolValue]];
159
+ return nil;
160
+ };
161
+ map[FB_SETTING_INCLUDE_NATIVE_FRAME_IN_PAGE_SOURCE] = ^FBCommandStatus *(FBSession *session, id value) {
162
+ [FBConfiguration setIncludeNativeFrameInPageSource:[value boolValue]];
163
+ return nil;
164
+ };
165
+ map[FB_SETTING_INCLUDE_MIN_MAX_VALUE_IN_PAGE_SOURCE] = ^FBCommandStatus *(FBSession *session, id value) {
166
+ [FBConfiguration setIncludeMinMaxValueInPageSource:[value boolValue]];
167
+ return nil;
168
+ };
169
+ map[FB_SETTING_INCLUDE_CUSTOM_ACTIONS_IN_PAGE_SOURCE] = ^FBCommandStatus *(FBSession *session, id value) {
170
+ [FBConfiguration setIncludeCustomActionsInPageSource:[value boolValue]];
171
+ return nil;
172
+ };
173
+ map[FB_SETTING_ENFORCE_CUSTOM_SNAPSHOTS] = ^FBCommandStatus *(FBSession *session, id value) {
174
+ [FBConfiguration setEnforceCustomSnapshots:[value boolValue]];
175
+ return nil;
176
+ };
177
+ map[FB_SETTING_LIMIT_XPATH_CONTEXT_SCOPE] = ^FBCommandStatus *(FBSession *session, id value) {
178
+ [FBConfiguration setLimitXpathContextScope:[value boolValue]];
179
+ return nil;
180
+ };
181
+ #if !TARGET_OS_TV
182
+ map[FB_SETTING_SCREENSHOT_ORIENTATION] = ^FBCommandStatus *(FBSession *session, id value) {
183
+ NSError *error;
184
+ if (![FBConfiguration setScreenshotOrientation:(NSString *)value error:&error]) {
185
+ return [FBCommandStatus invalidArgumentErrorWithMessage:error.localizedDescription
186
+ traceback:nil];
187
+ }
188
+ return nil;
189
+ };
190
+ #endif
191
+ settersMap = map.copy;
192
+ });
193
+ return settersMap;
194
+ }
195
+
196
+ + (NSDictionary<NSString *, FBSettingGetBlock> *)gettersMap
197
+ {
198
+ static NSDictionary<NSString *, FBSettingGetBlock> *gettersMap;
199
+ static dispatch_once_t onceToken;
200
+ dispatch_once(&onceToken, ^{
201
+ NSMutableDictionary<NSString *, FBSettingGetBlock> *map = [NSMutableDictionary dictionary];
202
+ map[FB_SETTING_USE_COMPACT_RESPONSES] = ^id(FBSession *session) {
203
+ return @([FBConfiguration shouldUseCompactResponses]);
204
+ };
205
+ map[FB_SETTING_ELEMENT_RESPONSE_ATTRIBUTES] = ^id(FBSession *session) {
206
+ return [FBConfiguration elementResponseAttributes];
207
+ };
208
+ map[FB_SETTING_MJPEG_SERVER_SCREENSHOT_QUALITY] = ^id(FBSession *session) {
209
+ return @([FBConfiguration mjpegServerScreenshotQuality]);
210
+ };
211
+ map[FB_SETTING_MJPEG_SERVER_FRAMERATE] = ^id(FBSession *session) {
212
+ return @([FBConfiguration mjpegServerFramerate]);
213
+ };
214
+ map[FB_SETTING_MJPEG_SCALING_FACTOR] = ^id(FBSession *session) {
215
+ return @([FBConfiguration mjpegScalingFactor]);
216
+ };
217
+ map[FB_SETTING_MJPEG_FIX_ORIENTATION] = ^id(FBSession *session) {
218
+ return @([FBConfiguration mjpegShouldFixOrientation]);
219
+ };
220
+ map[FB_SETTING_SCREENSHOT_QUALITY] = ^id(FBSession *session) {
221
+ return @([FBConfiguration screenshotQuality]);
222
+ };
223
+ map[FB_SETTING_KEYBOARD_AUTOCORRECTION] = ^id(FBSession *session) {
224
+ return @([FBConfiguration keyboardAutocorrection]);
225
+ };
226
+ map[FB_SETTING_KEYBOARD_PREDICTION] = ^id(FBSession *session) {
227
+ return @([FBConfiguration keyboardPrediction]);
228
+ };
229
+ map[FB_SETTING_SNAPSHOT_MAX_DEPTH] = ^id(FBSession *session) {
230
+ return @([FBConfiguration snapshotMaxDepth]);
231
+ };
232
+ map[FB_SETTING_SNAPSHOT_MAX_CHILDREN] = ^id(FBSession *session) {
233
+ return @([FBConfiguration snapshotMaxChildren]);
234
+ };
235
+ map[FB_SETTING_USE_FIRST_MATCH] = ^id(FBSession *session) {
236
+ return @([FBConfiguration useFirstMatch]);
237
+ };
238
+ map[FB_SETTING_WAIT_FOR_IDLE_TIMEOUT] = ^id(FBSession *session) {
239
+ return @([FBConfiguration waitForIdleTimeout]);
240
+ };
241
+ map[FB_SETTING_ANIMATION_COOL_OFF_TIMEOUT] = ^id(FBSession *session) {
242
+ return @([FBConfiguration animationCoolOffTimeout]);
243
+ };
244
+ map[FB_SETTING_BOUND_ELEMENTS_BY_INDEX] = ^id(FBSession *session) {
245
+ return @([FBConfiguration boundElementsByIndex]);
246
+ };
247
+ map[FB_SETTING_REDUCE_MOTION] = ^id(FBSession *session) {
248
+ return @([FBConfiguration reduceMotionEnabled]);
249
+ };
250
+ map[FB_SETTING_DEFAULT_ACTIVE_APPLICATION] = ^id(FBSession *session) {
251
+ return session.defaultActiveApplication;
252
+ };
253
+ map[FB_SETTING_ACTIVE_APP_DETECTION_POINT] = ^id(FBSession *session) {
254
+ return FBActiveAppDetectionPoint.sharedInstance.stringCoordinates;
255
+ };
256
+ map[FB_SETTING_ACCEPT_ALERT_BUTTON_SELECTOR] = ^id(FBSession *session) {
257
+ return FBConfiguration.acceptAlertButtonSelector;
258
+ };
259
+ map[FB_SETTING_DISMISS_ALERT_BUTTON_SELECTOR] = ^id(FBSession *session) {
260
+ return FBConfiguration.dismissAlertButtonSelector;
261
+ };
262
+ map[FB_SETTING_AUTO_CLICK_ALERT_SELECTOR] = ^id(FBSession *session) {
263
+ return FBConfiguration.autoClickAlertSelector;
264
+ };
265
+ map[FB_SETTING_DEFAULT_ALERT_ACTION] = ^id(FBSession *session) {
266
+ return session.defaultAlertAction ?: @"";
267
+ };
268
+ map[FB_SETTING_MAX_TYPING_FREQUENCY] = ^id(FBSession *session) {
269
+ return @([FBConfiguration maxTypingFrequency]);
270
+ };
271
+ map[FB_SETTING_RESPECT_SYSTEM_ALERTS] = ^id(FBSession *session) {
272
+ return @([FBConfiguration shouldRespectSystemAlerts]);
273
+ };
274
+ map[FB_SETTING_USE_CLEAR_TEXT_SHORTCUT] = ^id(FBSession *session) {
275
+ return @([FBConfiguration useClearTextShortcut]);
276
+ };
277
+ map[FB_SETTING_INCLUDE_HITTABLE_IN_PAGE_SOURCE] = ^id(FBSession *session) {
278
+ return @([FBConfiguration includeHittableInPageSource]);
279
+ };
280
+ map[FB_SETTING_INCLUDE_NATIVE_FRAME_IN_PAGE_SOURCE] = ^id(FBSession *session) {
281
+ return @([FBConfiguration includeNativeFrameInPageSource]);
282
+ };
283
+ map[FB_SETTING_INCLUDE_MIN_MAX_VALUE_IN_PAGE_SOURCE] = ^id(FBSession *session) {
284
+ return @([FBConfiguration includeMinMaxValueInPageSource]);
285
+ };
286
+ map[FB_SETTING_INCLUDE_CUSTOM_ACTIONS_IN_PAGE_SOURCE] = ^id(FBSession *session) {
287
+ return @([FBConfiguration includeCustomActionsInPageSource]);
288
+ };
289
+ map[FB_SETTING_ENFORCE_CUSTOM_SNAPSHOTS] = ^id(FBSession *session) {
290
+ return @([FBConfiguration enforceCustomSnapshots]);
291
+ };
292
+ map[FB_SETTING_LIMIT_XPATH_CONTEXT_SCOPE] = ^id(FBSession *session) {
293
+ return @([FBConfiguration limitXpathContextScope]);
294
+ };
295
+ #if !TARGET_OS_TV
296
+ map[FB_SETTING_SCREENSHOT_ORIENTATION] = ^id(FBSession *session) {
297
+ return [FBConfiguration humanReadableScreenshotOrientation];
298
+ };
299
+ #endif
300
+ gettersMap = map.copy;
301
+ });
302
+ return gettersMap;
303
+ }
304
+
305
+ + (NSDictionary *)currentSettingsForSession:(FBSession *)session
306
+ {
307
+ NSDictionary<NSString *, FBSettingGetBlock> *gettersMap = [self gettersMap];
308
+ NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithCapacity:gettersMap.count];
309
+ for (NSString *key in gettersMap) {
310
+ settings[key] = gettersMap[key](session);
311
+ }
312
+ return settings.copy;
313
+ }
314
+
315
+ + (nullable FBCommandStatus *)applySettings:(NSDictionary *)settings toSession:(FBSession *)session
316
+ {
317
+ NSDictionary<NSString *, FBSettingApplyBlock> *settersMap = [self settersMap];
318
+ NSSet<NSString *> *nilClearableKeys = FBNilClearableSettingKeys();
319
+ for (NSString *key in settings) {
320
+ FBSettingApplyBlock handler = settersMap[key];
321
+ if (nil == handler) {
322
+ continue;
323
+ }
324
+ id value = FBNormalizedSettingValue(settings[key]);
325
+ if (nil == value && ![nilClearableKeys containsObject:key]) {
326
+ continue;
327
+ }
328
+ FBCommandStatus *status = handler(session, value);
329
+ if (status.hasError) {
330
+ return status;
331
+ }
332
+ }
333
+ return nil;
334
+ }
335
+
336
+ + (FBCommandStatus *)configureAutoClickAlertWithSelector:(NSString *)selector
337
+ forSession:(FBSession *)session
338
+ {
339
+ if (0 == [selector length]) {
340
+ [FBConfiguration setAutoClickAlertSelector:selector];
341
+ [session disableAlertsMonitor];
342
+ return [FBCommandStatus ok];
343
+ }
344
+
345
+ NSError *error;
346
+ FBClassChain *parsedChain = [FBClassChainQueryParser parseQuery:selector error:&error];
347
+ if (nil == parsedChain) {
348
+ return [FBCommandStatus invalidSelectorErrorWithMessage:error.localizedDescription
349
+ traceback:nil];
350
+ }
351
+ [FBConfiguration setAutoClickAlertSelector:selector];
352
+ [session enableAlertsMonitor];
353
+ return [FBCommandStatus ok];
354
+ }
355
+
356
+ @end
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "appium-webdriveragent",
3
- "version": "13.2.0",
3
+ "version": "13.2.1",
4
4
  "description": "Package bundling WebDriverAgent",
5
5
  "main": "./build/lib/index.js",
6
6
  "types": "./build/lib/index.d.ts",