appium-desktop-driver 1.2.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.
Files changed (208) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +609 -0
  3. package/ROADMAP.md +175 -0
  4. package/build/lib/commands/actions.d.ts +12 -0
  5. package/build/lib/commands/actions.d.ts.map +1 -0
  6. package/build/lib/commands/actions.js +242 -0
  7. package/build/lib/commands/actions.js.map +1 -0
  8. package/build/lib/commands/app.d.ts +18 -0
  9. package/build/lib/commands/app.d.ts.map +1 -0
  10. package/build/lib/commands/app.js +280 -0
  11. package/build/lib/commands/app.js.map +1 -0
  12. package/build/lib/commands/device.d.ts +11 -0
  13. package/build/lib/commands/device.d.ts.map +1 -0
  14. package/build/lib/commands/device.js +236 -0
  15. package/build/lib/commands/device.js.map +1 -0
  16. package/build/lib/commands/element.d.ts +16 -0
  17. package/build/lib/commands/element.d.ts.map +1 -0
  18. package/build/lib/commands/element.js +233 -0
  19. package/build/lib/commands/element.js.map +1 -0
  20. package/build/lib/commands/extension.d.ts +124 -0
  21. package/build/lib/commands/extension.d.ts.map +1 -0
  22. package/build/lib/commands/extension.js +715 -0
  23. package/build/lib/commands/extension.js.map +1 -0
  24. package/build/lib/commands/functions.d.ts +3 -0
  25. package/build/lib/commands/functions.d.ts.map +1 -0
  26. package/build/lib/commands/functions.js +194 -0
  27. package/build/lib/commands/functions.js.map +1 -0
  28. package/build/lib/commands/index.d.ts +178 -0
  29. package/build/lib/commands/index.d.ts.map +1 -0
  30. package/build/lib/commands/index.js +54 -0
  31. package/build/lib/commands/index.js.map +1 -0
  32. package/build/lib/commands/powershell.d.ts +6 -0
  33. package/build/lib/commands/powershell.d.ts.map +1 -0
  34. package/build/lib/commands/powershell.js +202 -0
  35. package/build/lib/commands/powershell.js.map +1 -0
  36. package/build/lib/commands/screen-recorder.d.ts +40 -0
  37. package/build/lib/commands/screen-recorder.d.ts.map +1 -0
  38. package/build/lib/commands/screen-recorder.js +183 -0
  39. package/build/lib/commands/screen-recorder.js.map +1 -0
  40. package/build/lib/commands/system.d.ts +4 -0
  41. package/build/lib/commands/system.d.ts.map +1 -0
  42. package/build/lib/commands/system.js +8 -0
  43. package/build/lib/commands/system.js.map +1 -0
  44. package/build/lib/constants.d.ts +3 -0
  45. package/build/lib/constants.d.ts.map +1 -0
  46. package/build/lib/constants.js +6 -0
  47. package/build/lib/constants.js.map +1 -0
  48. package/build/lib/constraints.d.ts +58 -0
  49. package/build/lib/constraints.d.ts.map +1 -0
  50. package/build/lib/constraints.js +60 -0
  51. package/build/lib/constraints.js.map +1 -0
  52. package/build/lib/driver.d.ts +36 -0
  53. package/build/lib/driver.d.ts.map +1 -0
  54. package/build/lib/driver.js +209 -0
  55. package/build/lib/driver.js.map +1 -0
  56. package/build/lib/enums.d.ts +89 -0
  57. package/build/lib/enums.d.ts.map +1 -0
  58. package/build/lib/enums.js +83 -0
  59. package/build/lib/enums.js.map +1 -0
  60. package/build/lib/mcp/appium-manager.d.ts +8 -0
  61. package/build/lib/mcp/appium-manager.d.ts.map +1 -0
  62. package/build/lib/mcp/appium-manager.js +160 -0
  63. package/build/lib/mcp/appium-manager.js.map +1 -0
  64. package/build/lib/mcp/config.d.ts +7 -0
  65. package/build/lib/mcp/config.d.ts.map +1 -0
  66. package/build/lib/mcp/config.js +14 -0
  67. package/build/lib/mcp/config.js.map +1 -0
  68. package/build/lib/mcp/constants.d.ts +3 -0
  69. package/build/lib/mcp/constants.d.ts.map +1 -0
  70. package/build/lib/mcp/constants.js +6 -0
  71. package/build/lib/mcp/constants.js.map +1 -0
  72. package/build/lib/mcp/errors.d.ts +2 -0
  73. package/build/lib/mcp/errors.d.ts.map +1 -0
  74. package/build/lib/mcp/errors.js +10 -0
  75. package/build/lib/mcp/errors.js.map +1 -0
  76. package/build/lib/mcp/index.d.ts +3 -0
  77. package/build/lib/mcp/index.d.ts.map +1 -0
  78. package/build/lib/mcp/index.js +113 -0
  79. package/build/lib/mcp/index.js.map +1 -0
  80. package/build/lib/mcp/session.d.ts +24 -0
  81. package/build/lib/mcp/session.d.ts.map +1 -0
  82. package/build/lib/mcp/session.js +77 -0
  83. package/build/lib/mcp/session.js.map +1 -0
  84. package/build/lib/mcp/tools/advanced.d.ts +4 -0
  85. package/build/lib/mcp/tools/advanced.d.ts.map +1 -0
  86. package/build/lib/mcp/tools/advanced.js +119 -0
  87. package/build/lib/mcp/tools/advanced.js.map +1 -0
  88. package/build/lib/mcp/tools/app.d.ts +4 -0
  89. package/build/lib/mcp/tools/app.d.ts.map +1 -0
  90. package/build/lib/mcp/tools/app.js +64 -0
  91. package/build/lib/mcp/tools/app.js.map +1 -0
  92. package/build/lib/mcp/tools/clipboard.d.ts +4 -0
  93. package/build/lib/mcp/tools/clipboard.d.ts.map +1 -0
  94. package/build/lib/mcp/tools/clipboard.js +41 -0
  95. package/build/lib/mcp/tools/clipboard.js.map +1 -0
  96. package/build/lib/mcp/tools/find.d.ts +4 -0
  97. package/build/lib/mcp/tools/find.d.ts.map +1 -0
  98. package/build/lib/mcp/tools/find.js +119 -0
  99. package/build/lib/mcp/tools/find.js.map +1 -0
  100. package/build/lib/mcp/tools/index.d.ts +4 -0
  101. package/build/lib/mcp/tools/index.d.ts.map +1 -0
  102. package/build/lib/mcp/tools/index.js +24 -0
  103. package/build/lib/mcp/tools/index.js.map +1 -0
  104. package/build/lib/mcp/tools/inspect.d.ts +4 -0
  105. package/build/lib/mcp/tools/inspect.d.ts.map +1 -0
  106. package/build/lib/mcp/tools/inspect.js +106 -0
  107. package/build/lib/mcp/tools/inspect.js.map +1 -0
  108. package/build/lib/mcp/tools/interact.d.ts +4 -0
  109. package/build/lib/mcp/tools/interact.d.ts.map +1 -0
  110. package/build/lib/mcp/tools/interact.js +121 -0
  111. package/build/lib/mcp/tools/interact.js.map +1 -0
  112. package/build/lib/mcp/tools/patterns.d.ts +4 -0
  113. package/build/lib/mcp/tools/patterns.d.ts.map +1 -0
  114. package/build/lib/mcp/tools/patterns.js +136 -0
  115. package/build/lib/mcp/tools/patterns.js.map +1 -0
  116. package/build/lib/mcp/tools/session.d.ts +4 -0
  117. package/build/lib/mcp/tools/session.d.ts.map +1 -0
  118. package/build/lib/mcp/tools/session.js +55 -0
  119. package/build/lib/mcp/tools/session.js.map +1 -0
  120. package/build/lib/mcp/tools/window.d.ts +4 -0
  121. package/build/lib/mcp/tools/window.d.ts.map +1 -0
  122. package/build/lib/mcp/tools/window.js +134 -0
  123. package/build/lib/mcp/tools/window.js.map +1 -0
  124. package/build/lib/powershell/common.d.ts +39 -0
  125. package/build/lib/powershell/common.d.ts.map +1 -0
  126. package/build/lib/powershell/common.js +121 -0
  127. package/build/lib/powershell/common.js.map +1 -0
  128. package/build/lib/powershell/conditions.d.ts +24 -0
  129. package/build/lib/powershell/conditions.d.ts.map +1 -0
  130. package/build/lib/powershell/conditions.js +131 -0
  131. package/build/lib/powershell/conditions.js.map +1 -0
  132. package/build/lib/powershell/converter.d.ts +3 -0
  133. package/build/lib/powershell/converter.d.ts.map +1 -0
  134. package/build/lib/powershell/converter.js +273 -0
  135. package/build/lib/powershell/converter.js.map +1 -0
  136. package/build/lib/powershell/core.d.ts +8 -0
  137. package/build/lib/powershell/core.d.ts.map +1 -0
  138. package/build/lib/powershell/core.js +30 -0
  139. package/build/lib/powershell/core.js.map +1 -0
  140. package/build/lib/powershell/elements.d.ts +70 -0
  141. package/build/lib/powershell/elements.d.ts.map +1 -0
  142. package/build/lib/powershell/elements.js +523 -0
  143. package/build/lib/powershell/elements.js.map +1 -0
  144. package/build/lib/powershell/index.d.ts +8 -0
  145. package/build/lib/powershell/index.d.ts.map +1 -0
  146. package/build/lib/powershell/index.js +24 -0
  147. package/build/lib/powershell/index.js.map +1 -0
  148. package/build/lib/powershell/regex.d.ts +19 -0
  149. package/build/lib/powershell/regex.d.ts.map +1 -0
  150. package/build/lib/powershell/regex.js +68 -0
  151. package/build/lib/powershell/regex.js.map +1 -0
  152. package/build/lib/powershell/types.d.ts +155 -0
  153. package/build/lib/powershell/types.d.ts.map +1 -0
  154. package/build/lib/powershell/types.js +141 -0
  155. package/build/lib/powershell/types.js.map +1 -0
  156. package/build/lib/util.d.ts +17 -0
  157. package/build/lib/util.d.ts.map +1 -0
  158. package/build/lib/util.js +76 -0
  159. package/build/lib/util.js.map +1 -0
  160. package/build/lib/winapi/types/index.d.ts +8 -0
  161. package/build/lib/winapi/types/index.d.ts.map +1 -0
  162. package/build/lib/winapi/types/index.js +24 -0
  163. package/build/lib/winapi/types/index.js.map +1 -0
  164. package/build/lib/winapi/types/input.d.ts +11 -0
  165. package/build/lib/winapi/types/input.d.ts.map +1 -0
  166. package/build/lib/winapi/types/input.js +12 -0
  167. package/build/lib/winapi/types/input.js.map +1 -0
  168. package/build/lib/winapi/types/keyeventf.d.ts +13 -0
  169. package/build/lib/winapi/types/keyeventf.d.ts.map +1 -0
  170. package/build/lib/winapi/types/keyeventf.js +14 -0
  171. package/build/lib/winapi/types/keyeventf.js.map +1 -0
  172. package/build/lib/winapi/types/mouseeventf.d.ts +34 -0
  173. package/build/lib/winapi/types/mouseeventf.d.ts.map +1 -0
  174. package/build/lib/winapi/types/mouseeventf.js +37 -0
  175. package/build/lib/winapi/types/mouseeventf.js.map +1 -0
  176. package/build/lib/winapi/types/scancode.d.ts +95 -0
  177. package/build/lib/winapi/types/scancode.d.ts.map +1 -0
  178. package/build/lib/winapi/types/scancode.js +96 -0
  179. package/build/lib/winapi/types/scancode.js.map +1 -0
  180. package/build/lib/winapi/types/systemmetric.d.ts +214 -0
  181. package/build/lib/winapi/types/systemmetric.d.ts.map +1 -0
  182. package/build/lib/winapi/types/systemmetric.js +215 -0
  183. package/build/lib/winapi/types/systemmetric.js.map +1 -0
  184. package/build/lib/winapi/types/virtualkey.d.ts +353 -0
  185. package/build/lib/winapi/types/virtualkey.d.ts.map +1 -0
  186. package/build/lib/winapi/types/virtualkey.js +354 -0
  187. package/build/lib/winapi/types/virtualkey.js.map +1 -0
  188. package/build/lib/winapi/types/xmousebutton.d.ts +7 -0
  189. package/build/lib/winapi/types/xmousebutton.d.ts.map +1 -0
  190. package/build/lib/winapi/types/xmousebutton.js +8 -0
  191. package/build/lib/winapi/types/xmousebutton.js.map +1 -0
  192. package/build/lib/winapi/user32.d.ts +56 -0
  193. package/build/lib/winapi/user32.d.ts.map +1 -0
  194. package/build/lib/winapi/user32.js +592 -0
  195. package/build/lib/winapi/user32.js.map +1 -0
  196. package/build/lib/xpath/core.d.ts +8 -0
  197. package/build/lib/xpath/core.d.ts.map +1 -0
  198. package/build/lib/xpath/core.js +593 -0
  199. package/build/lib/xpath/core.js.map +1 -0
  200. package/build/lib/xpath/functions.d.ts +4 -0
  201. package/build/lib/xpath/functions.d.ts.map +1 -0
  202. package/build/lib/xpath/functions.js +271 -0
  203. package/build/lib/xpath/functions.js.map +1 -0
  204. package/build/lib/xpath/index.d.ts +3 -0
  205. package/build/lib/xpath/index.d.ts.map +1 -0
  206. package/build/lib/xpath/index.js +19 -0
  207. package/build/lib/xpath/index.js.map +1 -0
  208. package/package.json +71 -0
@@ -0,0 +1,36 @@
1
+ import { BaseDriver } from '@appium/base-driver';
2
+ import { ChildProcessWithoutNullStreams } from 'node:child_process';
3
+ import type { ScreenRecorder } from './commands/screen-recorder';
4
+ import { NovaWindowsDriverConstraints } from './constraints';
5
+ import type { DefaultCreateSessionResult, DriverData, Element, InitialOpts, StringRecord, W3CDriverCaps } from '@appium/types';
6
+ type W3CNovaWindowsDriverCaps = W3CDriverCaps<NovaWindowsDriverConstraints>;
7
+ type DefaultWindowsCreateSessionResult = DefaultCreateSessionResult<NovaWindowsDriverConstraints>;
8
+ type KeyboardState = {
9
+ pressed: Set<string>;
10
+ shift: boolean;
11
+ ctrl: boolean;
12
+ meta: boolean;
13
+ alt: boolean;
14
+ };
15
+ declare const LOCATION_STRATEGIES: readonly ["id", "name", "xpath", "tag name", "class name", "accessibility id", "-windows uiautomation"];
16
+ export declare class NovaWindowsDriver extends BaseDriver<NovaWindowsDriverConstraints, StringRecord> {
17
+ isPowerShellSessionStarted: boolean;
18
+ powerShell?: ChildProcessWithoutNullStreams;
19
+ powerShellStdOut: string;
20
+ powerShellStdErr: string;
21
+ appProcessIds: number[];
22
+ keyboardState: KeyboardState;
23
+ _screenRecorder: ScreenRecorder | null;
24
+ constructor(opts?: InitialOpts, shouldValidateCaps?: boolean);
25
+ findElement(strategy: string, selector: string): Promise<Element>;
26
+ findElements(strategy: string, selector: string): Promise<Element[]>;
27
+ findElementFromElement(strategy: string, selector: string, elementId: string): Promise<Element>;
28
+ findElementsFromElement(strategy: string, selector: string, elementId: string): Promise<Element[]>;
29
+ findElOrEls(strategy: typeof LOCATION_STRATEGIES[number], selector: string, mult: true, context?: string): Promise<Element[]>;
30
+ findElOrEls(strategy: typeof LOCATION_STRATEGIES[number], selector: string, mult: false, context?: string): Promise<Element>;
31
+ createSession(jwpCaps: W3CNovaWindowsDriverCaps, reqCaps?: W3CNovaWindowsDriverCaps, w3cCaps?: W3CNovaWindowsDriverCaps, driverData?: DriverData[]): Promise<DefaultWindowsCreateSessionResult>;
32
+ deleteSession(sessionId?: string | null | undefined): Promise<void>;
33
+ private processSelector;
34
+ }
35
+ export {};
36
+ //# sourceMappingURL=driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../lib/driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA2B,MAAM,qBAAqB,CAAC;AAE1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,OAAO,EACH,4BAA4B,EAE/B,MAAM,eAAe,CAAC;AAoBvB,OAAO,KAAK,EACR,0BAA0B,EAC1B,UAAU,EACV,OAAO,EACP,WAAW,EACX,YAAY,EACZ,aAAa,EAChB,MAAM,eAAe,CAAC;AAEvB,KAAK,wBAAwB,GAAG,aAAa,CAAC,4BAA4B,CAAC,CAAC;AAC5E,KAAK,iCAAiC,GAAG,0BAA0B,CAAC,4BAA4B,CAAC,CAAC;AAElG,KAAK,aAAa,GAAG;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;CAChB,CAAA;AAED,QAAA,MAAM,mBAAmB,yGAQd,CAAC;AAEZ,qBAAa,iBAAkB,SAAQ,UAAU,CAAC,4BAA4B,EAAE,YAAY,CAAC;IACzF,0BAA0B,EAAE,OAAO,CAAS;IAC5C,UAAU,CAAC,EAAE,8BAA8B,CAAC;IAC5C,gBAAgB,EAAE,MAAM,CAAM;IAC9B,gBAAgB,EAAE,MAAM,CAAM;IAC9B,aAAa,EAAE,MAAM,EAAE,CAAM;IAC7B,aAAa,EAAE,aAAa,CAM1B;IACF,eAAe,EAAE,cAAc,GAAG,IAAI,CAAQ;gBAElC,IAAI,GAAE,WAA+B,EAAE,kBAAkB,UAAO;IAa7D,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKjE,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAKpE,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK/F,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAKlG,WAAW,CAAC,QAAQ,EAAE,OAAO,mBAAmB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7H,WAAW,CAAC,QAAQ,EAAE,OAAO,mBAAmB,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA8C5H,aAAa,CACxB,OAAO,EAAE,wBAAwB,EACjC,OAAO,CAAC,EAAE,wBAAwB,EAClC,OAAO,CAAC,EAAE,wBAAwB,EAClC,UAAU,CAAC,EAAE,UAAU,EAAE,GAC1B,OAAO,CAAC,iCAAiC,CAAC;IA0D9B,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAgClF,OAAO,CAAC,eAAe;CA4B1B"}
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.NovaWindowsDriver = void 0;
7
+ const base_driver_1 = require("@appium/base-driver");
8
+ const support_1 = require("appium/support");
9
+ const commands_1 = __importDefault(require("./commands"));
10
+ const constraints_1 = require("./constraints");
11
+ const powershell_1 = require("./powershell");
12
+ const util_1 = require("./util");
13
+ const user32_1 = require("./winapi/user32");
14
+ const xpath_1 = require("./xpath");
15
+ const LOCATION_STRATEGIES = Object.freeze([
16
+ 'id',
17
+ 'name',
18
+ 'xpath',
19
+ 'tag name',
20
+ 'class name',
21
+ 'accessibility id',
22
+ '-windows uiautomation',
23
+ ]);
24
+ class NovaWindowsDriver extends base_driver_1.BaseDriver {
25
+ isPowerShellSessionStarted = false;
26
+ powerShell;
27
+ powerShellStdOut = '';
28
+ powerShellStdErr = '';
29
+ appProcessIds = [];
30
+ keyboardState = {
31
+ pressed: new Set(),
32
+ alt: false,
33
+ ctrl: false,
34
+ meta: false,
35
+ shift: false,
36
+ };
37
+ _screenRecorder = null;
38
+ constructor(opts = {}, shouldValidateCaps = true) {
39
+ super(opts, shouldValidateCaps);
40
+ this.locatorStrategies = [...LOCATION_STRATEGIES];
41
+ this.desiredCapConstraints = constraints_1.UI_AUTOMATION_DRIVER_CONSTRAINTS;
42
+ // Bind commands to this instance (not prototype) so each driver instance uses its own
43
+ // PowerShell session and state when multiple sessions exist
44
+ for (const key in commands_1.default) { // TODO: create a decorator that will do that for the class
45
+ this[key] = commands_1.default[key].bind(this);
46
+ }
47
+ }
48
+ async findElement(strategy, selector) {
49
+ [strategy, selector] = this.processSelector(strategy, selector);
50
+ return super.findElement(strategy, selector);
51
+ }
52
+ async findElements(strategy, selector) {
53
+ [strategy, selector] = this.processSelector(strategy, selector);
54
+ return super.findElements(strategy, selector);
55
+ }
56
+ async findElementFromElement(strategy, selector, elementId) {
57
+ [strategy, selector] = this.processSelector(strategy, selector);
58
+ return super.findElementFromElement(strategy, selector, elementId);
59
+ }
60
+ async findElementsFromElement(strategy, selector, elementId) {
61
+ [strategy, selector] = this.processSelector(strategy, selector);
62
+ return super.findElementsFromElement(strategy, selector, elementId);
63
+ }
64
+ async findElOrEls(strategy, selector, mult, context) {
65
+ let condition;
66
+ switch (strategy) {
67
+ case 'id':
68
+ condition = new powershell_1.PropertyCondition(powershell_1.Property.RUNTIME_ID, new powershell_1.PSInt32Array(selector.split('.').map(Number)));
69
+ break;
70
+ case 'tag name':
71
+ condition = new powershell_1.PropertyCondition(powershell_1.Property.CONTROL_TYPE, new powershell_1.PSControlType(selector));
72
+ break;
73
+ case 'accessibility id':
74
+ condition = new powershell_1.PropertyCondition(powershell_1.Property.AUTOMATION_ID, new powershell_1.PSString(selector));
75
+ break;
76
+ case 'name':
77
+ condition = new powershell_1.PropertyCondition(powershell_1.Property.NAME, new powershell_1.PSString(selector));
78
+ break;
79
+ case 'class name':
80
+ condition = new powershell_1.PropertyCondition(powershell_1.Property.CLASS_NAME, new powershell_1.PSString(selector));
81
+ break;
82
+ case '-windows uiautomation':
83
+ condition = (0, powershell_1.convertStringToCondition)(selector);
84
+ break;
85
+ case 'xpath':
86
+ return await (0, xpath_1.xpathToElIdOrIds)(selector, mult, context, this.sendPowerShellCommand.bind(this));
87
+ default:
88
+ throw new base_driver_1.errors.InvalidArgumentError(`Invalid find strategy ${strategy}`);
89
+ }
90
+ const searchContext = context ? new powershell_1.FoundAutomationElement(context) : powershell_1.AutomationElement.automationRoot;
91
+ if (mult) {
92
+ const result = await this.sendPowerShellCommand(searchContext.findAll(powershell_1.TreeScope.DESCENDANTS, condition).buildCommand());
93
+ const elIds = result.split('\n').map((elId) => elId.trim()).filter(Boolean);
94
+ return elIds.filter(Boolean).map((elId) => ({ [base_driver_1.W3C_ELEMENT_KEY]: elId }));
95
+ }
96
+ const result = await this.sendPowerShellCommand(searchContext.findFirst(powershell_1.TreeScope.DESCENDANTS, condition).buildCommand());
97
+ const elId = result.trim();
98
+ if (!elId) {
99
+ throw new base_driver_1.errors.NoSuchElementError();
100
+ }
101
+ return { [base_driver_1.W3C_ELEMENT_KEY]: elId };
102
+ }
103
+ async createSession(jwpCaps, reqCaps, w3cCaps, driverData) {
104
+ if (!support_1.system.isWindows()) {
105
+ this.log.errorWithException('Windows UI Automation tests only run on Windows.');
106
+ }
107
+ if (typeof w3cCaps?.alwaysMatch?.['appium:appTopLevelWindow'] === 'number') {
108
+ w3cCaps.alwaysMatch['appium:appTopLevelWindow'] = String(w3cCaps.alwaysMatch['appium:appTopLevelWindow']);
109
+ }
110
+ if (typeof w3cCaps?.firstMatch?.some['appium:appTopLevelWindow'] === 'number') {
111
+ w3cCaps.firstMatch['appium:appTopLevelWindow'] = w3cCaps.firstMatch['appium:appTopLevelWindow'].map(String);
112
+ }
113
+ try {
114
+ this.log.debug('Creating NovaWindows driver session...');
115
+ const [sessionId, caps] = await super.createSession(jwpCaps, reqCaps, w3cCaps, driverData);
116
+ if (caps.smoothPointerMove) {
117
+ (0, util_1.assertSupportedEasingFunction)(caps.smoothPointerMove);
118
+ }
119
+ if (caps.app && caps.appTopLevelWindow) {
120
+ throw new base_driver_1.errors.InvalidArgumentError('Invalid capabilities. Specify either app or appTopLevelWindow.');
121
+ }
122
+ if (caps.appEnvironment) {
123
+ const invalidKeys = Object.entries(caps.appEnvironment)
124
+ .filter(([, v]) => typeof v !== 'string')
125
+ .map(([k]) => k);
126
+ if (invalidKeys.length > 0) {
127
+ throw new base_driver_1.errors.InvalidArgumentError(`Invalid capabilities. 'appEnvironment' values must be strings. Invalid keys: ${invalidKeys.join(', ')}`);
128
+ }
129
+ }
130
+ if (caps['ms:windowSwitchRetries'] !== undefined) {
131
+ (0, util_1.assertIntegerCap)('ms:windowSwitchRetries', caps['ms:windowSwitchRetries'], 0);
132
+ }
133
+ if (caps['ms:windowSwitchInterval'] !== undefined) {
134
+ (0, util_1.assertIntegerCap)('ms:windowSwitchInterval', caps['ms:windowSwitchInterval'], 0);
135
+ }
136
+ if (this.caps.shouldCloseApp === undefined) {
137
+ this.caps.shouldCloseApp = true; // set default value
138
+ }
139
+ await this.startPowerShellSession();
140
+ if (this.caps.prerun) {
141
+ this.log.info('Executing prerun PowerShell script...');
142
+ await this.executePowerShellScript(this.caps.prerun);
143
+ }
144
+ (0, user32_1.setDpiAwareness)();
145
+ this.log.debug(`Started session ${sessionId}.`);
146
+ return [sessionId, caps];
147
+ }
148
+ catch (e) {
149
+ await this.deleteSession();
150
+ throw e;
151
+ }
152
+ }
153
+ async deleteSession(sessionId) {
154
+ this.log.debug('Deleting NovaWindows driver session...');
155
+ if (this.caps.shouldCloseApp && this.caps.app && this.caps.app.toLowerCase() !== 'root') {
156
+ try {
157
+ if (this.caps['ms:forcequit'] === true) {
158
+ await this.sendPowerShellCommand(/* ps1 */ `
159
+ if ($null -ne $rootElement) {
160
+ $processId = $rootElement.Current.ProcessId
161
+ Stop-Process -Id $processId -Force -ErrorAction SilentlyContinue
162
+ }
163
+ `);
164
+ }
165
+ else {
166
+ const result = await this.sendPowerShellCommand(powershell_1.AutomationElement.automationRoot.buildCommand());
167
+ const elementId = result.split('\n').map((id) => id.trim()).filter(Boolean)[0];
168
+ if (elementId) {
169
+ await this.sendPowerShellCommand(new powershell_1.FoundAutomationElement(elementId).buildCloseCommand());
170
+ }
171
+ }
172
+ }
173
+ catch {
174
+ // noop
175
+ }
176
+ }
177
+ if (this.caps.postrun) {
178
+ this.log.info('Executing postrun PowerShell script...');
179
+ await this.executePowerShellScript(this.caps.postrun);
180
+ }
181
+ await this.terminatePowerShellSession();
182
+ await super.deleteSession(sessionId);
183
+ }
184
+ processSelector(strategy, selector) {
185
+ if (strategy !== 'css selector') {
186
+ return [strategy, selector];
187
+ }
188
+ this.log.warn('Warning: Use Appium mobile selectors instead of Selenium By, since most of them are based on CSS.');
189
+ const digitRegex = /\\3(\d) /;
190
+ if (selector.startsWith('.')) {
191
+ selector = selector.substring(1).replace(digitRegex, '$1');
192
+ strategy = 'class name';
193
+ return [strategy, selector];
194
+ }
195
+ if (selector.startsWith('#')) {
196
+ selector = selector.substring(1).replace(digitRegex, '$1');
197
+ strategy = 'id';
198
+ return [strategy, selector];
199
+ }
200
+ if (selector.startsWith('*[name')) {
201
+ selector = selector.substring(selector.indexOf('"') + 1, selector.lastIndexOf('"')).replace(digitRegex, '$1');
202
+ strategy = 'name';
203
+ return [strategy, selector];
204
+ }
205
+ return [strategy, selector];
206
+ }
207
+ }
208
+ exports.NovaWindowsDriver = NovaWindowsDriver;
209
+ //# sourceMappingURL=driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../lib/driver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ type Enumerate<N extends number, Acc extends number[] = []> = Acc['length'] extends N ? Acc[number] : Enumerate<N, [...Acc, Acc['length']]>;
2
+ type IntRange<F extends number, T extends number> = Exclude<Enumerate<T>, Enumerate<F>> | T;
3
+ type AllFlagsValue<N extends number, A extends any[] = []> = [N] extends [Partial<A>['length']] ? A['length'] : UnionFlags<N, [0, ...A, ...A]>;
4
+ type UnionFlags<N extends number, A extends any[] = []> = IntRange<0, AllFlagsValue<N, A>>;
5
+ export type Enum<T> = T[keyof T];
6
+ export type FlagsEnum<T> = Enum<T> extends number ? UnionFlags<Enum<T>> : never;
7
+ export declare const Key: Readonly<{
8
+ readonly NULL: "";
9
+ readonly CANCEL: "";
10
+ readonly HELP: "";
11
+ readonly BACKSPACE: "";
12
+ readonly TAB: "";
13
+ readonly CLEAR: "";
14
+ readonly RETURN: "";
15
+ readonly ENTER: "";
16
+ readonly SHIFT: "";
17
+ readonly CONTROL: "";
18
+ readonly ALT: "";
19
+ readonly PAUSE: "";
20
+ readonly ESCAPE: "";
21
+ readonly SPACE: "";
22
+ readonly PAGE_UP: "";
23
+ readonly PAGE_DOWN: "";
24
+ readonly END: "";
25
+ readonly HOME: "";
26
+ readonly LEFT: "";
27
+ readonly UP: "";
28
+ readonly RIGHT: "";
29
+ readonly DOWN: "";
30
+ readonly INSERT: "";
31
+ readonly DELETE: "";
32
+ readonly SEMICOLON: "";
33
+ readonly EQUALS: "";
34
+ readonly NUMPAD0: "";
35
+ readonly NUMPAD1: "";
36
+ readonly NUMPAD2: "";
37
+ readonly NUMPAD3: "";
38
+ readonly NUMPAD4: "";
39
+ readonly NUMPAD5: "";
40
+ readonly NUMPAD6: "";
41
+ readonly NUMPAD7: "";
42
+ readonly NUMPAD8: "";
43
+ readonly NUMPAD9: "";
44
+ readonly MULTIPLY: "";
45
+ readonly ADD: "";
46
+ readonly SEPARATOR: "";
47
+ readonly SUBTRACT: "";
48
+ readonly DECIMAL: "";
49
+ readonly DIVIDE: "";
50
+ readonly F1: "";
51
+ readonly F2: "";
52
+ readonly F3: "";
53
+ readonly F4: "";
54
+ readonly F5: "";
55
+ readonly F6: "";
56
+ readonly F7: "";
57
+ readonly F8: "";
58
+ readonly F9: "";
59
+ readonly F10: "";
60
+ readonly F11: "";
61
+ readonly F12: "";
62
+ readonly META: "";
63
+ readonly ZENKAKUHANKAKU: "";
64
+ readonly R_SHIFT: "";
65
+ readonly R_CONTROL: "";
66
+ readonly R_ALT: "";
67
+ readonly R_META: "";
68
+ readonly R_PAGEUP: "";
69
+ readonly R_PAGEDOWN: "";
70
+ readonly R_END: "";
71
+ readonly R_HOME: "";
72
+ readonly R_ARROWLEFT: "";
73
+ readonly R_ARROWUP: "";
74
+ readonly R_ARROWRIGHT: "";
75
+ readonly R_ARROWDOWN: "";
76
+ readonly R_INSERT: "";
77
+ readonly R_DELETE: "";
78
+ }>;
79
+ export type Key = Enum<typeof Key>;
80
+ export declare const ClickType: Readonly<{
81
+ LEFT: "left";
82
+ MIDDLE: "middle";
83
+ RIGHT: "right";
84
+ BACK: "back";
85
+ FORWARD: "forward";
86
+ }>;
87
+ export type ClickType = Enum<typeof ClickType>;
88
+ export {};
89
+ //# sourceMappingURL=enums.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../lib/enums.ts"],"names":[],"mappings":"AAAA,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAC/E,GAAG,CAAC,MAAM,CAAC,GACX,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;AAE3C,KAAK,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAE3F,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/I,KAAK,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,EAAE,IAAI,QAAQ,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE3F,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AACjC,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAEhF,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuEL,CAAC;AAEZ,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AAEnC,eAAO,MAAM,SAAS;;;;;;EAMpB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,SAAS,CAAC,CAAC"}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ClickType = exports.Key = void 0;
4
+ exports.Key = Object.freeze({
5
+ NULL: '\uE000',
6
+ CANCEL: '\uE001',
7
+ HELP: '\uE002',
8
+ BACKSPACE: '\uE003',
9
+ TAB: '\uE004',
10
+ CLEAR: '\uE005',
11
+ RETURN: '\uE006',
12
+ ENTER: '\uE007',
13
+ SHIFT: '\uE008',
14
+ CONTROL: '\uE009',
15
+ ALT: '\uE00A',
16
+ PAUSE: '\uE00B',
17
+ ESCAPE: '\uE00C',
18
+ SPACE: '\uE00D',
19
+ PAGE_UP: '\uE00E',
20
+ PAGE_DOWN: '\uE00F',
21
+ END: '\uE010',
22
+ HOME: '\uE011',
23
+ LEFT: '\uE012',
24
+ UP: '\uE013',
25
+ RIGHT: '\uE014',
26
+ DOWN: '\uE015',
27
+ INSERT: '\uE016',
28
+ DELETE: '\uE017',
29
+ SEMICOLON: '\uE018',
30
+ EQUALS: '\uE019',
31
+ NUMPAD0: '\uE01A',
32
+ NUMPAD1: '\uE01B',
33
+ NUMPAD2: '\uE01C',
34
+ NUMPAD3: '\uE01D',
35
+ NUMPAD4: '\uE01E',
36
+ NUMPAD5: '\uE01F',
37
+ NUMPAD6: '\uE020',
38
+ NUMPAD7: '\uE021',
39
+ NUMPAD8: '\uE022',
40
+ NUMPAD9: '\uE023',
41
+ MULTIPLY: '\uE024',
42
+ ADD: '\uE025',
43
+ SEPARATOR: '\uE026',
44
+ SUBTRACT: '\uE027',
45
+ DECIMAL: '\uE028',
46
+ DIVIDE: '\uE029',
47
+ F1: '\uE031',
48
+ F2: '\uE032',
49
+ F3: '\uE033',
50
+ F4: '\uE034',
51
+ F5: '\uE035',
52
+ F6: '\uE036',
53
+ F7: '\uE037',
54
+ F8: '\uE038',
55
+ F9: '\uE039',
56
+ F10: '\uE03A',
57
+ F11: '\uE03B',
58
+ F12: '\uE03C',
59
+ META: '\uE03D',
60
+ ZENKAKUHANKAKU: '\uE040',
61
+ R_SHIFT: '\uE050',
62
+ R_CONTROL: '\uE051',
63
+ R_ALT: '\uE052',
64
+ R_META: '\uE053',
65
+ R_PAGEUP: '\uE054',
66
+ R_PAGEDOWN: '\uE055',
67
+ R_END: '\uE056',
68
+ R_HOME: '\uE057',
69
+ R_ARROWLEFT: '\uE058',
70
+ R_ARROWUP: '\uE059',
71
+ R_ARROWRIGHT: '\uE05A',
72
+ R_ARROWDOWN: '\uE05B',
73
+ R_INSERT: '\uE05C',
74
+ R_DELETE: '\uE05D',
75
+ });
76
+ exports.ClickType = Object.freeze({
77
+ LEFT: 'left',
78
+ MIDDLE: 'middle',
79
+ RIGHT: 'right',
80
+ BACK: 'back',
81
+ FORWARD: 'forward'
82
+ });
83
+ //# sourceMappingURL=enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../lib/enums.ts"],"names":[],"mappings":";;;AAYa,QAAA,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,QAAQ;IACnB,GAAG,EAAE,QAAQ;IACb,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,QAAQ;IACjB,GAAG,EAAE,QAAQ;IACb,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,QAAQ;IACnB,GAAG,EAAE,QAAQ;IACb,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,QAAQ;IACd,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,QAAQ;IACb,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,QAAQ;IAClB,OAAO,EAAE,QAAQ;IACjB,MAAM,EAAE,QAAQ;IAChB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,QAAQ;IACZ,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,GAAG,EAAE,QAAQ;IACb,IAAI,EAAE,QAAQ;IACd,cAAc,EAAE,QAAQ;IACxB,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,QAAQ;IACnB,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,QAAQ;IAClB,UAAU,EAAE,QAAQ;IACpB,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,QAAQ;IACrB,SAAS,EAAE,QAAQ;IACnB,YAAY,EAAE,QAAQ;IACtB,WAAW,EAAE,QAAQ;IACrB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;CACZ,CAAC,CAAC;AAIC,QAAA,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;CACrB,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { McpConfig } from './config.js';
2
+ export declare class AppiumManager {
3
+ private process;
4
+ private managed;
5
+ ensureRunning(config: McpConfig): Promise<void>;
6
+ shutdown(): Promise<void>;
7
+ }
8
+ //# sourceMappingURL=appium-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appium-manager.d.ts","sourceRoot":"","sources":["../../../lib/mcp/appium-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAyD7C,qBAAa,aAAa;IACtB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,OAAO,CAAS;IAElB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAwD/C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAsBlC"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.AppiumManager = void 0;
37
+ const fs = __importStar(require("node:fs"));
38
+ const http = __importStar(require("node:http"));
39
+ const path = __importStar(require("node:path"));
40
+ const node_child_process_1 = require("node:child_process");
41
+ const POLL_INTERVAL_MS = 500;
42
+ const STARTUP_TIMEOUT_MS = 30_000;
43
+ const SHUTDOWN_TIMEOUT_MS = 5_000;
44
+ function isAppiumReady(host, port) {
45
+ return new Promise((resolve) => {
46
+ const req = http.get({ hostname: host, port, path: '/status', timeout: 2000 }, (res) => {
47
+ let body = '';
48
+ res.on('data', (chunk) => { body += chunk; });
49
+ res.on('end', () => {
50
+ try {
51
+ const json = JSON.parse(body);
52
+ resolve(json?.value?.ready === true);
53
+ }
54
+ catch {
55
+ resolve(false);
56
+ }
57
+ });
58
+ });
59
+ req.on('error', () => resolve(false));
60
+ req.on('timeout', () => { req.destroy(); resolve(false); });
61
+ });
62
+ }
63
+ function waitForAppium(host, port) {
64
+ return new Promise((resolve, reject) => {
65
+ const deadline = Date.now() + STARTUP_TIMEOUT_MS;
66
+ const poll = async () => {
67
+ if (await isAppiumReady(host, port)) {
68
+ resolve();
69
+ return;
70
+ }
71
+ if (Date.now() >= deadline) {
72
+ reject(new Error(`Appium did not become ready within ${STARTUP_TIMEOUT_MS / 1000}s on ${host}:${port}`));
73
+ return;
74
+ }
75
+ setTimeout(poll, POLL_INTERVAL_MS);
76
+ };
77
+ poll();
78
+ });
79
+ }
80
+ function resolveAppiumBinary(configBinary) {
81
+ if (configBinary) {
82
+ return configBinary;
83
+ }
84
+ // Prefer a local node_modules/.bin/appium (3 levels up from build/lib/mcp/)
85
+ const localBin = path.resolve(__dirname, '..', '..', '..', 'node_modules', '.bin', 'appium');
86
+ if (fs.existsSync(localBin)) {
87
+ return localBin;
88
+ }
89
+ // Fall back to appium on the system PATH (global install: npm install -g appium)
90
+ return 'appium';
91
+ }
92
+ class AppiumManager {
93
+ process = null;
94
+ managed = false;
95
+ async ensureRunning(config) {
96
+ const { appiumHost: host, appiumPort: port } = config;
97
+ if (await isAppiumReady(host, port)) {
98
+ process.stderr.write(`[MCP] Appium already running on ${host}:${port}\n`);
99
+ return;
100
+ }
101
+ if (!config.appiumAutoStart) {
102
+ throw new Error(`Appium is not running on ${host}:${port}.\n` +
103
+ `Start it with: appium --port ${port}\n` +
104
+ `Or set APPIUM_AUTO_START=true to start it automatically.`);
105
+ }
106
+ const binary = resolveAppiumBinary(config.appiumBinary);
107
+ process.stderr.write(`[MCP] Starting Appium: ${binary} --port ${port} --address ${host}\n`);
108
+ const child = (0, node_child_process_1.spawn)(binary, ['--port', String(port), '--address', host], {
109
+ stdio: ['ignore', 'pipe', 'pipe'],
110
+ shell: process.platform === 'win32',
111
+ });
112
+ // Wait for either a successful spawn or an early error.
113
+ // The 'spawn' event (Node ≥ 15.1) fires only after the OS has confirmed the
114
+ // process started; 'error' fires if it never starts (binary not found, etc.).
115
+ // Using setImmediate here would be a race — resolve could win before 'error' fires.
116
+ await new Promise((resolve, reject) => {
117
+ child.once('error', (err) => {
118
+ reject(new Error(`Failed to spawn Appium binary at "${binary}": ${err.message}\n` +
119
+ `Install Appium globally with: npm install -g appium\n` +
120
+ `Or set APPIUM_BINARY to the full path of the appium executable.`));
121
+ });
122
+ child.once('spawn', resolve);
123
+ });
124
+ this.process = child;
125
+ this.managed = true;
126
+ this.process.stdout?.on('data', (data) => {
127
+ process.stderr.write(`[Appium] ${data}`);
128
+ });
129
+ this.process.stderr?.on('data', (data) => {
130
+ process.stderr.write(`[Appium] ${data}`);
131
+ });
132
+ this.process.on('exit', (code) => {
133
+ process.stderr.write(`[MCP] Appium process exited with code ${code}\n`);
134
+ });
135
+ await waitForAppium(host, port);
136
+ process.stderr.write(`[MCP] Appium ready on ${host}:${port}\n`);
137
+ }
138
+ async shutdown() {
139
+ if (!this.managed || !this.process) {
140
+ return;
141
+ }
142
+ process.stderr.write('[MCP] Stopping Appium...\n');
143
+ this.process.kill('SIGTERM');
144
+ const child = this.process;
145
+ await new Promise((resolve) => {
146
+ const timeout = setTimeout(() => {
147
+ child.kill('SIGKILL');
148
+ resolve();
149
+ }, SHUTDOWN_TIMEOUT_MS);
150
+ child.on('exit', () => {
151
+ clearTimeout(timeout);
152
+ resolve();
153
+ });
154
+ });
155
+ this.process = null;
156
+ this.managed = false;
157
+ }
158
+ }
159
+ exports.AppiumManager = AppiumManager;
160
+ //# sourceMappingURL=appium-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appium-manager.js","sourceRoot":"","sources":["../../../lib/mcp/appium-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** Infrastructure config — read from env vars at startup. */
2
+ export interface McpConfig {
3
+ appiumHost: string;
4
+ appiumPort: number;
5
+ }
6
+ export declare function loadConfig(): McpConfig;
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../lib/mcp/config.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,WAAW,SAAS;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,UAAU,IAAI,SAAS,CAUtC"}