@fluentui-react-native/desktop-driver 0.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 (235) hide show
  1. package/.cache/tsconfig.tsbuildinfo +1 -0
  2. package/AGENTS.md +68 -0
  3. package/CHANGELOG.md +16 -0
  4. package/PLAN.md +1394 -0
  5. package/README.md +223 -0
  6. package/SPEC.md +105 -0
  7. package/config/cli.cjs +8 -0
  8. package/jest.config.cjs +9 -0
  9. package/lib/agent/DesktopAgent.d.ts +56 -0
  10. package/lib/agent/DesktopAgent.d.ts.map +1 -0
  11. package/lib/agent/DesktopAgent.js +118 -0
  12. package/lib/agent/DesktopAgent.js.map +1 -0
  13. package/lib/agent/DesktopAgent.test.d.ts +2 -0
  14. package/lib/agent/DesktopAgent.test.d.ts.map +1 -0
  15. package/lib/agent/DesktopAgent.test.js +97 -0
  16. package/lib/agent/DesktopAgent.test.js.map +1 -0
  17. package/lib/agent/agent.contract.cjs +66 -0
  18. package/lib/agent/agent.contract.cjs.map +1 -0
  19. package/lib/agent/agent.contract.d.cts +2 -0
  20. package/lib/agent/agent.contract.d.cts.map +1 -0
  21. package/lib/agent/index.d.ts +3 -0
  22. package/lib/agent/index.d.ts.map +1 -0
  23. package/lib/agent/index.js +2 -0
  24. package/lib/agent/index.js.map +1 -0
  25. package/lib/artifacts/ArtifactManager.d.ts +13 -0
  26. package/lib/artifacts/ArtifactManager.d.ts.map +1 -0
  27. package/lib/artifacts/ArtifactManager.js +88 -0
  28. package/lib/artifacts/ArtifactManager.js.map +1 -0
  29. package/lib/artifacts/ArtifactManager.test.d.ts +2 -0
  30. package/lib/artifacts/ArtifactManager.test.d.ts.map +1 -0
  31. package/lib/artifacts/ArtifactManager.test.js +19 -0
  32. package/lib/artifacts/ArtifactManager.test.js.map +1 -0
  33. package/lib/artifacts/index.d.ts +2 -0
  34. package/lib/artifacts/index.d.ts.map +1 -0
  35. package/lib/artifacts/index.js +2 -0
  36. package/lib/artifacts/index.js.map +1 -0
  37. package/lib/authoring/index.d.ts +4 -0
  38. package/lib/authoring/index.d.ts.map +1 -0
  39. package/lib/authoring/index.js +2 -0
  40. package/lib/authoring/index.js.map +1 -0
  41. package/lib/authoring/results.d.ts +43 -0
  42. package/lib/authoring/results.d.ts.map +1 -0
  43. package/lib/authoring/results.js +2 -0
  44. package/lib/authoring/results.js.map +1 -0
  45. package/lib/authoring/storyTests.d.ts +81 -0
  46. package/lib/authoring/storyTests.d.ts.map +1 -0
  47. package/lib/authoring/storyTests.js +272 -0
  48. package/lib/authoring/storyTests.js.map +1 -0
  49. package/lib/authoring/storyTests.test.d.ts +2 -0
  50. package/lib/authoring/storyTests.test.d.ts.map +1 -0
  51. package/lib/authoring/storyTests.test.js +46 -0
  52. package/lib/authoring/storyTests.test.js.map +1 -0
  53. package/lib/cli/DesktopDriverCli.test.d.ts +2 -0
  54. package/lib/cli/DesktopDriverCli.test.d.ts.map +1 -0
  55. package/lib/cli/DesktopDriverCli.test.js +141 -0
  56. package/lib/cli/DesktopDriverCli.test.js.map +1 -0
  57. package/lib/cli/createDesktopDriverCommand.d.ts +8 -0
  58. package/lib/cli/createDesktopDriverCommand.d.ts.map +1 -0
  59. package/lib/cli/createDesktopDriverCommand.js +242 -0
  60. package/lib/cli/createDesktopDriverCommand.js.map +1 -0
  61. package/lib/cli/index.d.ts +3 -0
  62. package/lib/cli/index.d.ts.map +1 -0
  63. package/lib/cli/index.js +2 -0
  64. package/lib/cli/index.js.map +1 -0
  65. package/lib/client/DesktopDriverClient.d.ts +60 -0
  66. package/lib/client/DesktopDriverClient.d.ts.map +1 -0
  67. package/lib/client/DesktopDriverClient.js +155 -0
  68. package/lib/client/DesktopDriverClient.js.map +1 -0
  69. package/lib/client/index.d.ts +3 -0
  70. package/lib/client/index.d.ts.map +1 -0
  71. package/lib/client/index.js +2 -0
  72. package/lib/client/index.js.map +1 -0
  73. package/lib/host/types.d.ts +153 -0
  74. package/lib/host/types.d.ts.map +1 -0
  75. package/lib/host/types.js +2 -0
  76. package/lib/host/types.js.map +1 -0
  77. package/lib/hosts/fake/FakeDesktopHost.d.ts +72 -0
  78. package/lib/hosts/fake/FakeDesktopHost.d.ts.map +1 -0
  79. package/lib/hosts/fake/FakeDesktopHost.js +452 -0
  80. package/lib/hosts/fake/FakeDesktopHost.js.map +1 -0
  81. package/lib/index.d.ts +23 -0
  82. package/lib/index.d.ts.map +1 -0
  83. package/lib/index.js +11 -0
  84. package/lib/index.js.map +1 -0
  85. package/lib/protocol/actions.d.ts +11 -0
  86. package/lib/protocol/actions.d.ts.map +1 -0
  87. package/lib/protocol/actions.js +137 -0
  88. package/lib/protocol/actions.js.map +1 -0
  89. package/lib/protocol/capabilities.d.ts +11 -0
  90. package/lib/protocol/capabilities.d.ts.map +1 -0
  91. package/lib/protocol/capabilities.js +103 -0
  92. package/lib/protocol/capabilities.js.map +1 -0
  93. package/lib/protocol/constants.d.ts +2 -0
  94. package/lib/protocol/constants.d.ts.map +1 -0
  95. package/lib/protocol/constants.js +2 -0
  96. package/lib/protocol/constants.js.map +1 -0
  97. package/lib/protocol/errors.d.ts +37 -0
  98. package/lib/protocol/errors.d.ts.map +1 -0
  99. package/lib/protocol/errors.js +66 -0
  100. package/lib/protocol/errors.js.map +1 -0
  101. package/lib/protocol/timeouts.d.ts +2 -0
  102. package/lib/protocol/timeouts.d.ts.map +1 -0
  103. package/lib/protocol/timeouts.js +23 -0
  104. package/lib/protocol/timeouts.js.map +1 -0
  105. package/lib/protocol/types.d.ts +46 -0
  106. package/lib/protocol/types.d.ts.map +1 -0
  107. package/lib/protocol/types.js +2 -0
  108. package/lib/protocol/types.js.map +1 -0
  109. package/lib/runner/StoryTestRunner.d.ts +38 -0
  110. package/lib/runner/StoryTestRunner.d.ts.map +1 -0
  111. package/lib/runner/StoryTestRunner.js +497 -0
  112. package/lib/runner/StoryTestRunner.js.map +1 -0
  113. package/lib/runner/StoryTestRunner.test.d.ts +2 -0
  114. package/lib/runner/StoryTestRunner.test.d.ts.map +1 -0
  115. package/lib/runner/StoryTestRunner.test.js +349 -0
  116. package/lib/runner/StoryTestRunner.test.js.map +1 -0
  117. package/lib/runner/index.d.ts +3 -0
  118. package/lib/runner/index.d.ts.map +1 -0
  119. package/lib/runner/index.js +2 -0
  120. package/lib/runner/index.js.map +1 -0
  121. package/lib/server/SessionManager.d.ts +52 -0
  122. package/lib/server/SessionManager.d.ts.map +1 -0
  123. package/lib/server/SessionManager.js +208 -0
  124. package/lib/server/SessionManager.js.map +1 -0
  125. package/lib/server/TargetRegistry.d.ts +9 -0
  126. package/lib/server/TargetRegistry.d.ts.map +1 -0
  127. package/lib/server/TargetRegistry.js +24 -0
  128. package/lib/server/TargetRegistry.js.map +1 -0
  129. package/lib/server/createDesktopDriverServer.d.ts +19 -0
  130. package/lib/server/createDesktopDriverServer.d.ts.map +1 -0
  131. package/lib/server/createDesktopDriverServer.js +609 -0
  132. package/lib/server/createDesktopDriverServer.js.map +1 -0
  133. package/lib/server/desktopDriver.test.d.ts +2 -0
  134. package/lib/server/desktopDriver.test.d.ts.map +1 -0
  135. package/lib/server/desktopDriver.test.js +389 -0
  136. package/lib/server/desktopDriver.test.js.map +1 -0
  137. package/lib/server/index.d.ts +6 -0
  138. package/lib/server/index.d.ts.map +1 -0
  139. package/lib/server/index.js +4 -0
  140. package/lib/server/index.js.map +1 -0
  141. package/lib/server/webdriverio.contract.cjs +35 -0
  142. package/lib/server/webdriverio.contract.cjs.map +1 -0
  143. package/lib/server/webdriverio.contract.d.cts +2 -0
  144. package/lib/server/webdriverio.contract.d.cts.map +1 -0
  145. package/lib/server/webdriverio.test.d.ts +2 -0
  146. package/lib/server/webdriverio.test.d.ts.map +1 -0
  147. package/lib/server/webdriverio.test.js +40 -0
  148. package/lib/server/webdriverio.test.js.map +1 -0
  149. package/lib/storybook.d.ts +36 -0
  150. package/lib/storybook.d.ts.map +1 -0
  151. package/lib/storybook.js +2 -0
  152. package/lib/storybook.js.map +1 -0
  153. package/lib/testing/FakeStoryOrchestrator.d.ts +21 -0
  154. package/lib/testing/FakeStoryOrchestrator.d.ts.map +1 -0
  155. package/lib/testing/FakeStoryOrchestrator.js +44 -0
  156. package/lib/testing/FakeStoryOrchestrator.js.map +1 -0
  157. package/lib/testing/fakeStoryElements.d.ts +4 -0
  158. package/lib/testing/fakeStoryElements.d.ts.map +1 -0
  159. package/lib/testing/fakeStoryElements.js +143 -0
  160. package/lib/testing/fakeStoryElements.js.map +1 -0
  161. package/lib/testing/fakeStoryElements.test.d.ts +2 -0
  162. package/lib/testing/fakeStoryElements.test.d.ts.map +1 -0
  163. package/lib/testing/fakeStoryElements.test.js +38 -0
  164. package/lib/testing/fakeStoryElements.test.js.map +1 -0
  165. package/lib/testing/index.d.ts +7 -0
  166. package/lib/testing/index.d.ts.map +1 -0
  167. package/lib/testing/index.js +5 -0
  168. package/lib/testing/index.js.map +1 -0
  169. package/lib/testing/protocolHarness.d.ts +17 -0
  170. package/lib/testing/protocolHarness.d.ts.map +1 -0
  171. package/lib/testing/protocolHarness.js +46 -0
  172. package/lib/testing/protocolHarness.js.map +1 -0
  173. package/lib/wdio/DesktopWebdriver.d.ts +47 -0
  174. package/lib/wdio/DesktopWebdriver.d.ts.map +1 -0
  175. package/lib/wdio/DesktopWebdriver.js +76 -0
  176. package/lib/wdio/DesktopWebdriver.js.map +1 -0
  177. package/lib/wdio/DesktopWebdriver.test.d.ts +2 -0
  178. package/lib/wdio/DesktopWebdriver.test.d.ts.map +1 -0
  179. package/lib/wdio/DesktopWebdriver.test.js +74 -0
  180. package/lib/wdio/DesktopWebdriver.test.js.map +1 -0
  181. package/lib/wdio/index.d.ts +3 -0
  182. package/lib/wdio/index.d.ts.map +1 -0
  183. package/lib/wdio/index.js +2 -0
  184. package/lib/wdio/index.js.map +1 -0
  185. package/lib/wdio/wdioRunner.contract.cjs +64 -0
  186. package/lib/wdio/wdioRunner.contract.cjs.map +1 -0
  187. package/lib/wdio/wdioRunner.contract.d.cts +2 -0
  188. package/lib/wdio/wdioRunner.contract.d.cts.map +1 -0
  189. package/package.json +96 -0
  190. package/src/agent/DesktopAgent.test.ts +102 -0
  191. package/src/agent/DesktopAgent.ts +170 -0
  192. package/src/agent/agent.contract.cjs +32 -0
  193. package/src/agent/index.ts +8 -0
  194. package/src/artifacts/ArtifactManager.test.ts +20 -0
  195. package/src/artifacts/ArtifactManager.ts +105 -0
  196. package/src/artifacts/index.ts +1 -0
  197. package/src/authoring/index.ts +26 -0
  198. package/src/authoring/results.ts +47 -0
  199. package/src/authoring/storyTests.test.ts +58 -0
  200. package/src/authoring/storyTests.ts +345 -0
  201. package/src/cli/DesktopDriverCli.test.ts +150 -0
  202. package/src/cli/createDesktopDriverCommand.ts +290 -0
  203. package/src/cli/index.ts +2 -0
  204. package/src/client/DesktopDriverClient.ts +218 -0
  205. package/src/client/index.ts +2 -0
  206. package/src/host/types.ts +158 -0
  207. package/src/hosts/fake/FakeDesktopHost.ts +558 -0
  208. package/src/index.ts +101 -0
  209. package/src/protocol/actions.ts +163 -0
  210. package/src/protocol/capabilities.ts +129 -0
  211. package/src/protocol/constants.ts +1 -0
  212. package/src/protocol/errors.ts +76 -0
  213. package/src/protocol/timeouts.ts +26 -0
  214. package/src/protocol/types.ts +55 -0
  215. package/src/runner/StoryTestRunner.test.ts +362 -0
  216. package/src/runner/StoryTestRunner.ts +624 -0
  217. package/src/runner/index.ts +9 -0
  218. package/src/server/SessionManager.ts +302 -0
  219. package/src/server/TargetRegistry.ts +29 -0
  220. package/src/server/createDesktopDriverServer.ts +775 -0
  221. package/src/server/desktopDriver.test.ts +421 -0
  222. package/src/server/index.ts +5 -0
  223. package/src/server/webdriverio.contract.cjs +38 -0
  224. package/src/server/webdriverio.test.ts +41 -0
  225. package/src/storybook.ts +40 -0
  226. package/src/testing/FakeStoryOrchestrator.ts +55 -0
  227. package/src/testing/fakeStoryElements.test.ts +40 -0
  228. package/src/testing/fakeStoryElements.ts +167 -0
  229. package/src/testing/index.ts +6 -0
  230. package/src/testing/protocolHarness.ts +66 -0
  231. package/src/wdio/DesktopWebdriver.test.ts +76 -0
  232. package/src/wdio/DesktopWebdriver.ts +130 -0
  233. package/src/wdio/index.ts +2 -0
  234. package/src/wdio/wdioRunner.contract.cjs +30 -0
  235. package/tsconfig.json +15 -0
@@ -0,0 +1,137 @@
1
+ import { invalidArgument } from './errors.js';
2
+ export function createInputState() {
3
+ return { pressedButtons: new Set(), pressedKeys: new Set() };
4
+ }
5
+ export function parseActionSequences(value, current) {
6
+ if (!Array.isArray(value)) {
7
+ throw invalidArgument('"actions" must be an array.');
8
+ }
9
+ const nextState = {
10
+ pressedButtons: new Set(current.pressedButtons),
11
+ pressedKeys: new Set(current.pressedKeys),
12
+ };
13
+ const sourceIds = new Set();
14
+ const actions = value.map((item, index) => parseSource(item, index, sourceIds, nextState));
15
+ return { actions, nextState };
16
+ }
17
+ function parseSource(value, index, sourceIds, state) {
18
+ const source = requireObject(value, `actions[${index}]`);
19
+ if (typeof source.id !== 'string' || !source.id) {
20
+ throw invalidArgument(`actions[${index}].id must be a non-empty string.`);
21
+ }
22
+ if (sourceIds.has(source.id)) {
23
+ throw invalidArgument(`Action source id "${source.id}" is duplicated.`);
24
+ }
25
+ sourceIds.add(source.id);
26
+ if (source.type !== 'key' && source.type !== 'none' && source.type !== 'pointer' && source.type !== 'wheel') {
27
+ throw invalidArgument(`actions[${index}].type is not a supported input source.`);
28
+ }
29
+ if (!Array.isArray(source.actions)) {
30
+ throw invalidArgument(`actions[${index}].actions must be an array.`);
31
+ }
32
+ if (source.type === 'pointer' && source.parameters !== undefined) {
33
+ const parameters = requireObject(source.parameters, `actions[${index}].parameters`);
34
+ if (parameters.pointerType !== undefined &&
35
+ parameters.pointerType !== 'mouse' &&
36
+ parameters.pointerType !== 'pen' &&
37
+ parameters.pointerType !== 'touch') {
38
+ throw invalidArgument(`actions[${index}].parameters.pointerType is invalid.`);
39
+ }
40
+ }
41
+ const parsedActions = source.actions.map((action, actionIndex) => parseAction(action, source.type, `actions[${index}].actions[${actionIndex}]`, state));
42
+ return {
43
+ id: source.id,
44
+ type: source.type,
45
+ ...(source.parameters === undefined ? {} : { parameters: source.parameters }),
46
+ actions: parsedActions,
47
+ };
48
+ }
49
+ function parseAction(value, sourceType, path, state) {
50
+ const action = requireObject(value, path);
51
+ if (typeof action.type !== 'string') {
52
+ throw invalidArgument(`${path}.type must be a string.`);
53
+ }
54
+ if (action.type === 'pause') {
55
+ validateDuration(action.duration, path);
56
+ return action;
57
+ }
58
+ if (sourceType === 'none') {
59
+ throw invalidArgument(`${path}.type must be "pause" for a none input source.`);
60
+ }
61
+ if (sourceType === 'key') {
62
+ if (action.type !== 'keyDown' && action.type !== 'keyUp') {
63
+ throw invalidArgument(`${path}.type is invalid for a key input source.`);
64
+ }
65
+ if (typeof action.value !== 'string' || action.value.length === 0) {
66
+ throw invalidArgument(`${path}.value must be a non-empty string.`);
67
+ }
68
+ if (action.type === 'keyDown') {
69
+ state.pressedKeys.add(action.value);
70
+ }
71
+ else {
72
+ state.pressedKeys.delete(action.value);
73
+ }
74
+ return action;
75
+ }
76
+ if (sourceType === 'pointer') {
77
+ if (action.type === 'pointerCancel') {
78
+ state.pressedButtons.clear();
79
+ return action;
80
+ }
81
+ if (action.type === 'pointerDown' || action.type === 'pointerUp') {
82
+ if (!Number.isInteger(action.button) || action.button < 0) {
83
+ throw invalidArgument(`${path}.button must be a non-negative integer.`);
84
+ }
85
+ if (action.type === 'pointerDown') {
86
+ state.pressedButtons.add(action.button);
87
+ }
88
+ else {
89
+ state.pressedButtons.delete(action.button);
90
+ }
91
+ return action;
92
+ }
93
+ if (action.type === 'pointerMove') {
94
+ validateCoordinates(action, path);
95
+ validateDuration(action.duration, path);
96
+ validateOrigin(action.origin, path);
97
+ return action;
98
+ }
99
+ throw invalidArgument(`${path}.type is invalid for a pointer input source.`);
100
+ }
101
+ if (action.type !== 'scroll') {
102
+ throw invalidArgument(`${path}.type is invalid for a wheel input source.`);
103
+ }
104
+ validateCoordinates(action, path);
105
+ if (typeof action.deltaX !== 'number' || typeof action.deltaY !== 'number') {
106
+ throw invalidArgument(`${path}.deltaX and deltaY must be numbers.`);
107
+ }
108
+ validateDuration(action.duration, path);
109
+ validateOrigin(action.origin, path);
110
+ return action;
111
+ }
112
+ function validateCoordinates(action, path) {
113
+ if (typeof action.x !== 'number' || typeof action.y !== 'number') {
114
+ throw invalidArgument(`${path}.x and y must be numbers.`);
115
+ }
116
+ }
117
+ function validateDuration(value, path) {
118
+ if (value !== undefined && (!Number.isInteger(value) || value < 0)) {
119
+ throw invalidArgument(`${path}.duration must be a non-negative integer.`);
120
+ }
121
+ }
122
+ function validateOrigin(value, path) {
123
+ if (value === undefined || value === 'viewport' || value === 'pointer') {
124
+ return;
125
+ }
126
+ if (value && typeof value === 'object' && typeof value['element-6066-11e4-a52e-4f735466cecf'] === 'string') {
127
+ return;
128
+ }
129
+ throw invalidArgument(`${path}.origin must be "viewport", "pointer", or a WebDriver element reference.`);
130
+ }
131
+ function requireObject(value, path) {
132
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
133
+ throw invalidArgument(`${path} must be an object.`);
134
+ }
135
+ return value;
136
+ }
137
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/protocol/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQ9C,MAAM,UAAU,gBAAgB;IAC9B,OAAO,EAAE,cAAc,EAAE,IAAI,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAAc,EACd,OAA4B;IAK5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,eAAe,CAAC,6BAA6B,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,SAAS,GAAG;QAChB,cAAc,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;QAC/C,WAAW,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;KAC1C,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAC3F,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,KAAa,EAAE,SAAsB,EAAE,KAA0B;IACpG,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,WAAW,KAAK,GAAG,CAAC,CAAC;IACzD,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QAChD,MAAM,eAAe,CAAC,WAAW,KAAK,kCAAkC,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,MAAM,eAAe,CAAC,qBAAqB,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAC1E,CAAC;IACD,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzB,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5G,MAAM,eAAe,CAAC,WAAW,KAAK,yCAAyC,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,MAAM,eAAe,CAAC,WAAW,KAAK,6BAA6B,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACjE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,KAAK,cAAc,CAAC,CAAC;QACpF,IACE,UAAU,CAAC,WAAW,KAAK,SAAS;YACpC,UAAU,CAAC,WAAW,KAAK,OAAO;YAClC,UAAU,CAAC,WAAW,KAAK,KAAK;YAChC,UAAU,CAAC,WAAW,KAAK,OAAO,EAClC,CAAC;YACD,MAAM,eAAe,CAAC,WAAW,KAAK,sCAAsC,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAC/D,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,IAAuC,EAAE,WAAW,KAAK,aAAa,WAAW,GAAG,EAAE,KAAK,CAAC,CACxH,CAAC;IACF,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,GAAG,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAqC,EAAE,CAAC;QACxG,OAAO,EAAE,aAAa;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAClB,KAAc,EACd,UAA2C,EAC3C,IAAY,EACZ,KAA0B;IAE1B,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1C,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,eAAe,CAAC,GAAG,IAAI,yBAAyB,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxC,OAAO,MAAyB,CAAC;IACnC,CAAC;IACD,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,eAAe,CAAC,GAAG,IAAI,gDAAgD,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACzD,MAAM,eAAe,CAAC,GAAG,IAAI,0CAA0C,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,MAAM,eAAe,CAAC,GAAG,IAAI,oCAAoC,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,MAAyB,CAAC;IACnC,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACpC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC7B,OAAO,MAAyB,CAAC;QACnC,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACjE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,IAAK,MAAM,CAAC,MAAiB,GAAG,CAAC,EAAE,CAAC;gBACtE,MAAM,eAAe,CAAC,GAAG,IAAI,yCAAyC,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAClC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,MAAgB,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,MAAyB,CAAC;QACnC,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAClC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAClC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACxC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACpC,OAAO,MAAyB,CAAC;QACnC,CAAC;QACD,MAAM,eAAe,CAAC,GAAG,IAAI,8CAA8C,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,MAAM,eAAe,CAAC,GAAG,IAAI,4CAA4C,CAAC,CAAC;IAC7E,CAAC;IACD,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC3E,MAAM,eAAe,CAAC,GAAG,IAAI,qCAAqC,CAAC,CAAC;IACtE,CAAC;IACD,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACxC,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpC,OAAO,MAAyB,CAAC;AACnC,CAAC;AAED,SAAS,mBAAmB,CAAC,MAA+B,EAAE,IAAY;IACxE,IAAI,OAAO,MAAM,CAAC,CAAC,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACjE,MAAM,eAAe,CAAC,GAAG,IAAI,2BAA2B,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,IAAY;IACpD,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAK,KAAgB,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,eAAe,CAAC,GAAG,IAAI,2CAA2C,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,IAAY;IAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACvE,OAAO;IACT,CAAC;IACD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAiC,CAAC,qCAAqC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACxI,OAAO;IACT,CAAC;IACD,MAAM,eAAe,CAAC,GAAG,IAAI,0EAA0E,CAAC,CAAC;AAC3G,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,IAAY;IACjD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,MAAM,eAAe,CAAC,GAAG,IAAI,qBAAqB,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { DesktopHostInfo, DesktopTarget } from '../host/types.js';
2
+ import type { DesktopClickMode, NewSessionCapabilities } from './types.js';
3
+ export type MatchedCapabilities = {
4
+ clickMode: DesktopClickMode;
5
+ requested: Record<string, unknown>;
6
+ target: DesktopTarget;
7
+ };
8
+ export declare function getCapabilityCandidates(capabilities: NewSessionCapabilities): Record<string, unknown>[];
9
+ export declare function matchCapabilities(capabilities: NewSessionCapabilities, targets: readonly DesktopTarget[]): Promise<MatchedCapabilities>;
10
+ export declare function createReturnedCapabilities(matched: MatchedCapabilities, host: DesktopHostInfo, timeouts: Record<string, number>): Record<string, unknown>;
11
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../src/protocol/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAgB3E,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAmBvG;AAED,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,sBAAsB,EACpC,OAAO,EAAE,SAAS,aAAa,EAAE,GAChC,OAAO,CAAC,mBAAmB,CAAC,CA6B9B;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzB"}
@@ -0,0 +1,103 @@
1
+ import { invalidArgument, WebDriverError } from './errors.js';
2
+ import { withCommandTimeout } from './timeouts.js';
3
+ const standardCapabilities = new Set([
4
+ 'acceptInsecureCerts',
5
+ 'browserName',
6
+ 'browserVersion',
7
+ 'pageLoadStrategy',
8
+ 'platformName',
9
+ 'proxy',
10
+ 'setWindowRect',
11
+ 'strictFileInteractability',
12
+ 'timeouts',
13
+ 'unhandledPromptBehavior',
14
+ 'webSocketUrl',
15
+ ]);
16
+ export function getCapabilityCandidates(capabilities) {
17
+ if (!capabilities || typeof capabilities !== 'object' || Array.isArray(capabilities)) {
18
+ throw invalidArgument('"capabilities" must be an object.');
19
+ }
20
+ const alwaysMatch = validateCapabilityObject(capabilities.alwaysMatch ?? {}, 'alwaysMatch');
21
+ const firstMatch = capabilities.firstMatch ?? [{}];
22
+ if (!Array.isArray(firstMatch) || firstMatch.length === 0) {
23
+ throw invalidArgument('"firstMatch" must be a non-empty array when provided.');
24
+ }
25
+ return firstMatch.map((entry, index) => {
26
+ const candidate = validateCapabilityObject(entry, `firstMatch[${index}]`);
27
+ for (const key of Object.keys(candidate)) {
28
+ if (key in alwaysMatch) {
29
+ throw invalidArgument(`Capability "${key}" appears in both alwaysMatch and firstMatch[${index}].`);
30
+ }
31
+ }
32
+ return { ...alwaysMatch, ...candidate };
33
+ });
34
+ }
35
+ export async function matchCapabilities(capabilities, targets) {
36
+ const candidates = getCapabilityCandidates(capabilities);
37
+ for (const requested of candidates) {
38
+ validateCapabilityNames(requested);
39
+ const targetId = requested['furn:target'];
40
+ const candidatesForTarget = typeof targetId === 'string' ? targets.filter((target) => target.id === targetId) : targets.length === 1 ? targets : [];
41
+ for (const target of candidatesForTarget) {
42
+ if (requested.browserName !== undefined && requested.browserName !== 'furn-native-desktop') {
43
+ continue;
44
+ }
45
+ if (requested.platformName !== undefined && requested.platformName !== target.platformName) {
46
+ continue;
47
+ }
48
+ if (requested['furn:endpoint'] !== undefined && requested['furn:endpoint'] !== target.endpoint) {
49
+ continue;
50
+ }
51
+ if (requested['furn:renderer'] !== undefined && requested['furn:renderer'] !== target.renderer) {
52
+ continue;
53
+ }
54
+ const host = await withCommandTimeout((signal) => target.host.probe(signal), 10_000, `Probing target "${target.id}"`);
55
+ const clickMode = resolveClickMode(requested['furn:clickMode'], host);
56
+ return { clickMode, requested, target };
57
+ }
58
+ }
59
+ throw new WebDriverError('session not created', 'No registered desktop target matched the requested capabilities.');
60
+ }
61
+ export function createReturnedCapabilities(matched, host, timeouts) {
62
+ return {
63
+ browserName: 'furn-native-desktop',
64
+ platformName: matched.target.platformName,
65
+ setWindowRect: host.features.setWindowRect,
66
+ timeouts,
67
+ 'furn:clickMode': matched.clickMode,
68
+ 'furn:endpoint': matched.target.endpoint,
69
+ 'furn:features': host.features,
70
+ 'furn:renderer': matched.target.renderer,
71
+ 'furn:target': matched.target.id,
72
+ };
73
+ }
74
+ function validateCapabilityObject(value, name) {
75
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
76
+ throw invalidArgument(`"${name}" must be an object.`);
77
+ }
78
+ return value;
79
+ }
80
+ function validateCapabilityNames(capabilities) {
81
+ for (const name of Object.keys(capabilities)) {
82
+ if (!standardCapabilities.has(name) && !name.includes(':')) {
83
+ throw invalidArgument(`Extension capability "${name}" must contain a vendor prefix followed by ":".`);
84
+ }
85
+ }
86
+ }
87
+ function resolveClickMode(requested, host) {
88
+ const clickMode = requested ?? 'auto';
89
+ if (clickMode !== 'auto' && clickMode !== 'physical' && clickMode !== 'accessibility') {
90
+ throw invalidArgument('"furn:clickMode" must be "auto", "physical", or "accessibility".');
91
+ }
92
+ if (clickMode === 'physical' && !host.features.physicalClick) {
93
+ throw new WebDriverError('session not created', 'The target does not support physical click input.');
94
+ }
95
+ if (clickMode === 'accessibility' && !host.features.accessibilityClick) {
96
+ throw new WebDriverError('session not created', 'The target does not support accessibility click input.');
97
+ }
98
+ if (clickMode === 'auto' && !host.features.physicalClick && !host.features.accessibilityClick) {
99
+ throw new WebDriverError('session not created', 'The target does not support any click input mode.');
100
+ }
101
+ return clickMode === 'auto' ? (host.features.physicalClick ? 'physical' : 'accessibility') : clickMode;
102
+ }
103
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../src/protocol/capabilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const webElementIdentifier: 'element-6066-11e4-a52e-4f735466cecf';
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/protocol/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,EAAG,qCAA8C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const webElementIdentifier = 'element-6066-11e4-a52e-4f735466cecf';
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/protocol/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,qCAA8C,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { WebDriverErrorValue } from './types.js';
2
+ declare const errorStatuses: {
3
+ readonly 'element click intercepted': 400;
4
+ readonly 'element not interactable': 400;
5
+ readonly 'invalid argument': 400;
6
+ readonly 'invalid selector': 400;
7
+ readonly 'invalid session id': 404;
8
+ readonly 'javascript error': 500;
9
+ readonly 'no such element': 404;
10
+ readonly 'no such window': 404;
11
+ readonly 'session not created': 500;
12
+ readonly 'stale element reference': 404;
13
+ readonly timeout: 500;
14
+ readonly 'unable to capture screen': 500;
15
+ readonly 'unknown command': 404;
16
+ readonly 'unknown error': 500;
17
+ readonly 'unknown method': 405;
18
+ readonly 'unsupported operation': 500;
19
+ };
20
+ export type WebDriverErrorCode = keyof typeof errorStatuses;
21
+ export declare class WebDriverError extends Error {
22
+ readonly code: WebDriverErrorCode;
23
+ readonly data?: Record<string, unknown>;
24
+ readonly status: number;
25
+ constructor(code: WebDriverErrorCode, message: string, data?: Record<string, unknown>);
26
+ toJSON(): WebDriverErrorValue;
27
+ }
28
+ export declare function invalidArgument(message: string): WebDriverError;
29
+ export declare function toWebDriverError(error: unknown): WebDriverError;
30
+ export declare class HostStaleError extends Error {
31
+ constructor(message?: string);
32
+ }
33
+ export declare class HostUnsupportedError extends Error {
34
+ constructor(message: string);
35
+ }
36
+ export {};
37
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/protocol/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,QAAA,MAAM,aAAa;aACjB,2BAA2B,EAAE,GAAG;aAChC,0BAA0B,EAAE,GAAG;aAC/B,kBAAkB,EAAE,GAAG;aACvB,kBAAkB,EAAE,GAAG;aACvB,oBAAoB,EAAE,GAAG;aACzB,kBAAkB,EAAE,GAAG;aACvB,iBAAiB,EAAE,GAAG;aACtB,gBAAgB,EAAE,GAAG;aACrB,qBAAqB,EAAE,GAAG;aAC1B,yBAAyB,EAAE,GAAG;aAC9B,OAAO,EAAE,GAAG;aACZ,0BAA0B,EAAE,GAAG;aAC/B,iBAAiB,EAAE,GAAG;aACtB,eAAe,EAAE,GAAG;aACpB,gBAAgB,EAAE,GAAG;aACrB,uBAAuB,EAAE,GAAG;CACpB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,aAAa,CAAC;AAE5D,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,YAAY,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAMpF;IAED,MAAM,IAAI,mBAAmB,CAO5B;CACF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAW/D;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAO,SAA+C,EAGjE;CACF;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF"}
@@ -0,0 +1,66 @@
1
+ const errorStatuses = {
2
+ 'element click intercepted': 400,
3
+ 'element not interactable': 400,
4
+ 'invalid argument': 400,
5
+ 'invalid selector': 400,
6
+ 'invalid session id': 404,
7
+ 'javascript error': 500,
8
+ 'no such element': 404,
9
+ 'no such window': 404,
10
+ 'session not created': 500,
11
+ 'stale element reference': 404,
12
+ timeout: 500,
13
+ 'unable to capture screen': 500,
14
+ 'unknown command': 404,
15
+ 'unknown error': 500,
16
+ 'unknown method': 405,
17
+ 'unsupported operation': 500,
18
+ };
19
+ export class WebDriverError extends Error {
20
+ code;
21
+ data;
22
+ status;
23
+ constructor(code, message, data) {
24
+ super(message);
25
+ this.name = 'WebDriverError';
26
+ this.code = code;
27
+ this.data = data;
28
+ this.status = errorStatuses[code];
29
+ }
30
+ toJSON() {
31
+ return {
32
+ error: this.code,
33
+ message: this.message,
34
+ stacktrace: this.stack ?? '',
35
+ ...(this.data ? { data: this.data } : {}),
36
+ };
37
+ }
38
+ }
39
+ export function invalidArgument(message) {
40
+ return new WebDriverError('invalid argument', message);
41
+ }
42
+ export function toWebDriverError(error) {
43
+ if (error instanceof WebDriverError) {
44
+ return error;
45
+ }
46
+ if (error instanceof HostStaleError) {
47
+ return new WebDriverError('stale element reference', error.message);
48
+ }
49
+ if (error instanceof HostUnsupportedError) {
50
+ return new WebDriverError('unsupported operation', error.message);
51
+ }
52
+ return new WebDriverError('unknown error', error instanceof Error ? error.message : String(error));
53
+ }
54
+ export class HostStaleError extends Error {
55
+ constructor(message = 'The native element is no longer available.') {
56
+ super(message);
57
+ this.name = 'HostStaleError';
58
+ }
59
+ }
60
+ export class HostUnsupportedError extends Error {
61
+ constructor(message) {
62
+ super(message);
63
+ this.name = 'HostUnsupportedError';
64
+ }
65
+ }
66
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/protocol/errors.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAG;IACpB,2BAA2B,EAAE,GAAG;IAChC,0BAA0B,EAAE,GAAG;IAC/B,kBAAkB,EAAE,GAAG;IACvB,kBAAkB,EAAE,GAAG;IACvB,oBAAoB,EAAE,GAAG;IACzB,kBAAkB,EAAE,GAAG;IACvB,iBAAiB,EAAE,GAAG;IACtB,gBAAgB,EAAE,GAAG;IACrB,qBAAqB,EAAE,GAAG;IAC1B,yBAAyB,EAAE,GAAG;IAC9B,OAAO,EAAE,GAAG;IACZ,0BAA0B,EAAE,GAAG;IAC/B,iBAAiB,EAAE,GAAG;IACtB,eAAe,EAAE,GAAG;IACpB,gBAAgB,EAAE,GAAG;IACrB,uBAAuB,EAAE,GAAG;CACpB,CAAC;AAIX,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAqB;IACzB,IAAI,CAA2B;IAC/B,MAAM,CAAS;IAExB,YAAY,IAAwB,EAAE,OAAe,EAAE,IAA8B;QACnF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,MAAM;QACJ,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,UAAU,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;YAC5B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,OAAO,IAAI,cAAc,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;QACpC,OAAO,IAAI,cAAc,CAAC,yBAAyB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,KAAK,YAAY,oBAAoB,EAAE,CAAC;QAC1C,OAAO,IAAI,cAAc,CAAC,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,cAAc,CAAC,eAAe,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAO,GAAG,4CAA4C;QAChE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export declare function withCommandTimeout<T>(operation: (signal: AbortSignal) => Promise<T>, timeoutMs: number, description: string): Promise<T>;
2
+ //# sourceMappingURL=timeouts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeouts.d.ts","sourceRoot":"","sources":["../../src/protocol/timeouts.ts"],"names":[],"mappings":"AAEA,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC9C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,CAAC,CAAC,CAmBZ"}
@@ -0,0 +1,23 @@
1
+ import { WebDriverError } from './errors.js';
2
+ export async function withCommandTimeout(operation, timeoutMs, description) {
3
+ let timer;
4
+ const controller = new AbortController();
5
+ try {
6
+ return await Promise.race([
7
+ operation(controller.signal),
8
+ new Promise((_resolve, reject) => {
9
+ timer = setTimeout(() => {
10
+ const error = new WebDriverError('timeout', `${description} exceeded ${timeoutMs}ms.`);
11
+ controller.abort(error);
12
+ reject(error);
13
+ }, timeoutMs);
14
+ }),
15
+ ]);
16
+ }
17
+ finally {
18
+ if (timer) {
19
+ clearTimeout(timer);
20
+ }
21
+ }
22
+ }
23
+ //# sourceMappingURL=timeouts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeouts.js","sourceRoot":"","sources":["../../src/protocol/timeouts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAA8C,EAC9C,SAAiB,EACjB,WAAmB;IAEnB,IAAI,KAAgD,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC;YACxB,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;YAC5B,IAAI,OAAO,CAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE;gBACtC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBACtB,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,SAAS,EAAE,GAAG,WAAW,aAAa,SAAS,KAAK,CAAC,CAAC;oBACvF,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACxB,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC,EAAE,SAAS,CAAC,CAAC;YAChB,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,IAAI,KAAK,EAAE,CAAC;YACV,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,46 @@
1
+ export type DesktopEndpoint = 'macos' | 'windows' | 'win32';
2
+ export type DesktopPlatformName = 'macos' | 'windows';
3
+ export type DesktopRenderer = 'fabric' | 'paper';
4
+ export type DesktopClickMode = 'physical' | 'accessibility' | 'auto';
5
+ export type WebDriverTimeouts = {
6
+ implicit: number;
7
+ pageLoad: number;
8
+ script: number;
9
+ };
10
+ export type DesktopTimeouts = {
11
+ appLaunch: number;
12
+ nativeCommand: number;
13
+ stableLayout: number;
14
+ storyRender: number;
15
+ };
16
+ export type NewSessionCapabilities = {
17
+ alwaysMatch?: Record<string, unknown>;
18
+ firstMatch?: Record<string, unknown>[];
19
+ };
20
+ export type NewSessionRequest = {
21
+ capabilities: NewSessionCapabilities;
22
+ };
23
+ export type WebDriverElement = {
24
+ 'element-6066-11e4-a52e-4f735466cecf': string;
25
+ };
26
+ export type WebDriverResponse<T = unknown> = {
27
+ value: T;
28
+ };
29
+ export type WebDriverErrorValue = {
30
+ error: string;
31
+ message: string;
32
+ stacktrace: string;
33
+ data?: Record<string, unknown>;
34
+ };
35
+ export type WebDriverErrorResponse = WebDriverResponse<WebDriverErrorValue>;
36
+ export type WebDriverAction = {
37
+ type: string;
38
+ [key: string]: unknown;
39
+ };
40
+ export type WebDriverActionSequence = {
41
+ id: string;
42
+ type: 'key' | 'none' | 'pointer' | 'wheel';
43
+ parameters?: Record<string, unknown>;
44
+ actions: WebDriverAction[];
45
+ };
46
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/protocol/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,SAAS,CAAC;AACtD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,CAAC;AACjD,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,eAAe,GAAG,MAAM,CAAC;AAErE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,YAAY,EAAE,sBAAsB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,qCAAqC,EAAE,MAAM,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,CAAC,GAAG,OAAO,IAAI;IAC3C,KAAK,EAAE,CAAC,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;AAE5E,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/protocol/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,38 @@
1
+ import type { DesktopStoryRunResult } from '../authoring/results.js';
2
+ import type { DesktopStoryExpectation, DesktopStorySelector, DesktopStoryTest } from '../authoring/storyTests.js';
3
+ import type { ArtifactManager } from '../artifacts/ArtifactManager.js';
4
+ import type { DesktopElementClient, DesktopSessionClient } from '../client/DesktopDriverClient.js';
5
+ import type { DesktopEndpoint, DesktopPlatformName } from '../protocol/types.js';
6
+ import type { DesktopStoryManifest, DesktopStoryManifestEntry } from '../storybook.js';
7
+ export type DesktopStoryTestSelection = {
8
+ shardCount?: number;
9
+ shardIndex?: number;
10
+ story?: string;
11
+ tag?: string;
12
+ test?: string;
13
+ };
14
+ export type DesktopStoryTestRunnerOptions = {
15
+ artifacts?: ArtifactManager;
16
+ endpoint: DesktopEndpoint;
17
+ manifest: DesktopStoryManifest;
18
+ platformName: DesktopPlatformName;
19
+ runId?: string;
20
+ selection?: DesktopStoryTestSelection;
21
+ session: DesktopSessionClient;
22
+ signal?: AbortSignal;
23
+ targetId: string;
24
+ };
25
+ type SelectedTest = {
26
+ entry: DesktopStoryManifestEntry;
27
+ test: DesktopStoryTest;
28
+ };
29
+ export declare function runDesktopStoryTests({ artifacts, endpoint, manifest, platformName, runId, selection, session, signal, targetId, }: DesktopStoryTestRunnerOptions): Promise<DesktopStoryRunResult>;
30
+ export declare function selectDesktopStoryTests(manifest: DesktopStoryManifest, endpoint: DesktopEndpoint, selection?: DesktopStoryTestSelection): SelectedTest[];
31
+ export declare function assertDesktopExpectation(session: DesktopSessionClient, expectation: DesktopStoryExpectation): Promise<void>;
32
+ export declare function findDesktopElement(session: DesktopSessionClient, selector: DesktopStorySelector): Promise<DesktopElementClient>;
33
+ export declare function findDesktopElements(session: DesktopSessionClient, selector: DesktopStorySelector): Promise<DesktopElementClient[]>;
34
+ export declare class DesktopAssertionError extends Error {
35
+ constructor(message: string);
36
+ }
37
+ export {};
38
+ //# sourceMappingURL=StoryTestRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StoryTestRunner.d.ts","sourceRoot":"","sources":["../../src/runner/StoryTestRunner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,qBAAqB,EAItB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAEV,uBAAuB,EACvB,oBAAoB,EAEpB,gBAAgB,EACjB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAGnG,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAA2B,MAAM,sBAAsB,CAAC;AAC1G,OAAO,KAAK,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEvF,MAAM,MAAM,yBAAyB,GAAG;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,YAAY,EAAE,mBAAmB,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,yBAAyB,CAAC;IACtC,OAAO,EAAE,oBAAoB,CAAC;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,yBAAyB,CAAC;IACjC,IAAI,EAAE,gBAAgB,CAAC;CACxB,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,EACzC,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,KAAoB,EACpB,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GACT,EAAE,6BAA6B,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA+ChE;AAED,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,oBAAoB,EAC9B,QAAQ,EAAE,eAAe,EACzB,SAAS,GAAE,yBAA8B,GACxC,YAAY,EAAE,CAmBhB;AAwMD,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkDjI;AA8BD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAMrI;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAqBxI;AAsID,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF"}