swipium 1.5.0 → 2.0.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 (498) hide show
  1. package/CHANGELOG.md +171 -0
  2. package/README.md +173 -280
  3. package/THREAT_MODEL.md +223 -47
  4. package/dist/appMap/automationLink.js +30 -27
  5. package/dist/appMap/automationLink.js.map +1 -1
  6. package/dist/appMap/build.js +47 -21
  7. package/dist/appMap/build.js.map +1 -1
  8. package/dist/appMap/codeIndex.js +2 -2
  9. package/dist/appMap/codeIndex.js.map +1 -1
  10. package/dist/appMap/featureIndex.js +3 -3
  11. package/dist/appMap/featureIndex.js.map +1 -1
  12. package/dist/appMap/featureModel.js +2 -2
  13. package/dist/appMap/featureModel.js.map +1 -1
  14. package/dist/appMap/firstRunApply.js +2 -2
  15. package/dist/appMap/firstRunApply.js.map +1 -1
  16. package/dist/appMap/issues.js +10 -10
  17. package/dist/appMap/issues.js.map +1 -1
  18. package/dist/appMap/migrations.js +5 -5
  19. package/dist/appMap/migrations.js.map +1 -1
  20. package/dist/appMap/prelaunch.js +2 -2
  21. package/dist/appMap/prelaunch.js.map +1 -1
  22. package/dist/appMap/projectRegistry.js +77 -11
  23. package/dist/appMap/projectRegistry.js.map +1 -1
  24. package/dist/appMap/provenance.js +2 -2
  25. package/dist/appMap/provenance.js.map +1 -1
  26. package/dist/appMap/query.js +2 -2
  27. package/dist/appMap/query.js.map +1 -1
  28. package/dist/appMap/runtimeMerge.js +3 -3
  29. package/dist/appMap/runtimeMerge.js.map +1 -1
  30. package/dist/appMap/schema.js +1 -1
  31. package/dist/appMap/schema.js.map +1 -1
  32. package/dist/appMap/screenMatch.js +1 -1
  33. package/dist/appMap/screenMatch.js.map +1 -1
  34. package/dist/appMap/staticScan.js +17 -17
  35. package/dist/appMap/staticScan.js.map +1 -1
  36. package/dist/appMap/store.js +55 -7
  37. package/dist/appMap/store.js.map +1 -1
  38. package/dist/appMap/tsAstScan.js +3 -3
  39. package/dist/appMap/tsAstScan.js.map +1 -1
  40. package/dist/artifacts/bundletool.js +5 -5
  41. package/dist/artifacts/bundletool.js.map +1 -1
  42. package/dist/artifacts/resolve.js +10 -10
  43. package/dist/artifacts/resolve.js.map +1 -1
  44. package/dist/automation/capabilities.js +3 -3
  45. package/dist/automation/capabilities.js.map +1 -1
  46. package/dist/automation/gestures.js +1 -1
  47. package/dist/automation/gestures.js.map +1 -1
  48. package/dist/automation/plan.js +7 -7
  49. package/dist/automation/plan.js.map +1 -1
  50. package/dist/automation/report.js +3 -3
  51. package/dist/automation/report.js.map +1 -1
  52. package/dist/automation/selectors.js +14 -25
  53. package/dist/automation/selectors.js.map +1 -1
  54. package/dist/automation/types.js +1 -1
  55. package/dist/automation/types.js.map +1 -1
  56. package/dist/automation/waits.js +5 -5
  57. package/dist/automation/waits.js.map +1 -1
  58. package/dist/automation/webview.js +2 -2
  59. package/dist/automation/webview.js.map +1 -1
  60. package/dist/automationGen/appiumModel.js +13 -7
  61. package/dist/automationGen/appiumModel.js.map +1 -1
  62. package/dist/automationGen/ciEmitter.js +5 -5
  63. package/dist/automationGen/ciEmitter.js.map +1 -1
  64. package/dist/automationGen/identifiers.js +224 -0
  65. package/dist/automationGen/identifiers.js.map +1 -0
  66. package/dist/automationGen/jsEmitter.js +265 -106
  67. package/dist/automationGen/jsEmitter.js.map +1 -1
  68. package/dist/automationGen/packagePatch.js +2 -2
  69. package/dist/automationGen/packagePatch.js.map +1 -1
  70. package/dist/automationGen/platformResolve.js +36 -0
  71. package/dist/automationGen/platformResolve.js.map +1 -0
  72. package/dist/automationGen/projectProfile.js +71 -26
  73. package/dist/automationGen/projectProfile.js.map +1 -1
  74. package/dist/automationGen/pythonEmitter.js +276 -105
  75. package/dist/automationGen/pythonEmitter.js.map +1 -1
  76. package/dist/automationGen/readmeEmitter.js +7 -6
  77. package/dist/automationGen/readmeEmitter.js.map +1 -1
  78. package/dist/{tools/automationGenerate.js → automationGen/run.js} +72 -113
  79. package/dist/automationGen/run.js.map +1 -0
  80. package/dist/automationGen/suitePlan.js +6 -4
  81. package/dist/automationGen/suitePlan.js.map +1 -1
  82. package/dist/automationGen/validation.js +20 -8
  83. package/dist/automationGen/validation.js.map +1 -1
  84. package/dist/build/parseBuildLog.js +2 -2
  85. package/dist/build/parseBuildLog.js.map +1 -1
  86. package/dist/build/plan.js +7 -7
  87. package/dist/build/plan.js.map +1 -1
  88. package/dist/ci/preflight.js +13 -4
  89. package/dist/ci/preflight.js.map +1 -1
  90. package/dist/cli/gc.js +74 -0
  91. package/dist/cli/gc.js.map +1 -0
  92. package/dist/cli/init.js +217 -26
  93. package/dist/cli/init.js.map +1 -1
  94. package/dist/cli/main.js +50 -0
  95. package/dist/cli/main.js.map +1 -0
  96. package/dist/cli/report.js +218 -0
  97. package/dist/cli/report.js.map +1 -0
  98. package/dist/cli/scan.js +35 -14
  99. package/dist/cli/scan.js.map +1 -1
  100. package/dist/cli/suite.js +6 -6
  101. package/dist/cli/suite.js.map +1 -1
  102. package/dist/cli/verify.js +7 -7
  103. package/dist/cli/verify.js.map +1 -1
  104. package/dist/consent/consent.js +162 -5
  105. package/dist/consent/consent.js.map +1 -1
  106. package/dist/context/detect.js +45 -14
  107. package/dist/context/detect.js.map +1 -1
  108. package/dist/context/findApps.js +6 -6
  109. package/dist/context/findApps.js.map +1 -1
  110. package/dist/context/projectRoot.js +174 -19
  111. package/dist/context/projectRoot.js.map +1 -1
  112. package/dist/context/scan.js +1 -1
  113. package/dist/context/scan.js.map +1 -1
  114. package/dist/core/capabilityGroups.js +90 -0
  115. package/dist/core/capabilityGroups.js.map +1 -0
  116. package/dist/core/target.js +3 -3
  117. package/dist/core/target.js.map +1 -1
  118. package/dist/core/targetPlan.js +65 -62
  119. package/dist/core/targetPlan.js.map +1 -1
  120. package/dist/drivers/DirectDriver.js +300 -36
  121. package/dist/drivers/DirectDriver.js.map +1 -1
  122. package/dist/drivers/SimctlDriver.js +120 -7
  123. package/dist/drivers/SimctlDriver.js.map +1 -1
  124. package/dist/drivers/WdaDriver.js +350 -50
  125. package/dist/drivers/WdaDriver.js.map +1 -1
  126. package/dist/explore/candidates.js +2 -2
  127. package/dist/explore/candidates.js.map +1 -1
  128. package/dist/explore/graph.js +5 -5
  129. package/dist/explore/graph.js.map +1 -1
  130. package/dist/explore/policy.js +5 -5
  131. package/dist/explore/policy.js.map +1 -1
  132. package/dist/explore/runner.js +301 -284
  133. package/dist/explore/runner.js.map +1 -1
  134. package/dist/explore/signatures.js +1 -1
  135. package/dist/featureTesting/executionBootstrap.js +29 -30
  136. package/dist/featureTesting/executionBootstrap.js.map +1 -1
  137. package/dist/featureTesting/featureMap.js +2 -2
  138. package/dist/featureTesting/featureMap.js.map +1 -1
  139. package/dist/featureTesting/featureScope.js +12 -12
  140. package/dist/featureTesting/featureScope.js.map +1 -1
  141. package/dist/featureTesting/mapFeatureScope.js +7 -7
  142. package/dist/featureTesting/mapFeatureScope.js.map +1 -1
  143. package/dist/featureTesting/objectiveModel.js +10 -10
  144. package/dist/featureTesting/objectiveModel.js.map +1 -1
  145. package/dist/featureTesting/resultMerge.js +6 -6
  146. package/dist/featureTesting/resultMerge.js.map +1 -1
  147. package/dist/featureTesting/sources.js +4 -4
  148. package/dist/featureTesting/sources.js.map +1 -1
  149. package/dist/featureTesting/suiteBridge.js +1 -1
  150. package/dist/featureTesting/suiteBridge.js.map +1 -1
  151. package/dist/featureTesting/synonyms.js +1 -1
  152. package/dist/featureTesting/synonyms.js.map +1 -1
  153. package/dist/featureTesting/testCaseFactory.js +11 -11
  154. package/dist/featureTesting/testCaseFactory.js.map +1 -1
  155. package/dist/featureTesting/testPlan.js +3 -3
  156. package/dist/featureTesting/testPlan.js.map +1 -1
  157. package/dist/firstRun/authStateMachine.js +1 -1
  158. package/dist/firstRun/authStateMachine.js.map +1 -1
  159. package/dist/firstRun/classifyScreen.js +5 -5
  160. package/dist/firstRun/classifyScreen.js.map +1 -1
  161. package/dist/firstRun/firstRunPlanner.js +11 -11
  162. package/dist/firstRun/firstRunPlanner.js.map +1 -1
  163. package/dist/firstRun/firstRunRunner.js +8 -8
  164. package/dist/firstRun/firstRunRunner.js.map +1 -1
  165. package/dist/firstRun/generatedDataPolicy.js +9 -9
  166. package/dist/firstRun/generatedDataPolicy.js.map +1 -1
  167. package/dist/firstRun/inputPlanner.js +5 -5
  168. package/dist/firstRun/inputPlanner.js.map +1 -1
  169. package/dist/firstRun/onboardingStateMachine.js +1 -1
  170. package/dist/firstRun/onboardingStateMachine.js.map +1 -1
  171. package/dist/firstRun/paywallPolicy.js +3 -3
  172. package/dist/firstRun/paywallPolicy.js.map +1 -1
  173. package/dist/firstRun/types.js +1 -1
  174. package/dist/firstRun/types.js.map +1 -1
  175. package/dist/fixtures/catalog.js +33 -3
  176. package/dist/fixtures/catalog.js.map +1 -1
  177. package/dist/fixtures/load.js +50 -0
  178. package/dist/fixtures/load.js.map +1 -0
  179. package/dist/flows/discover.js +2 -2
  180. package/dist/flows/discover.js.map +1 -1
  181. package/dist/flows/generate.js +20 -10
  182. package/dist/flows/generate.js.map +1 -1
  183. package/dist/flows/pack.js +3 -3
  184. package/dist/flows/pack.js.map +1 -1
  185. package/dist/flows/paths.js +57 -0
  186. package/dist/flows/paths.js.map +1 -0
  187. package/dist/flows/repair.js +111 -23
  188. package/dist/flows/repair.js.map +1 -1
  189. package/dist/flows/run.js +153 -57
  190. package/dist/flows/run.js.map +1 -1
  191. package/dist/flows/schema.js +50 -5
  192. package/dist/flows/schema.js.map +1 -1
  193. package/dist/flows/seedExec.js +4 -4
  194. package/dist/flows/seedExec.js.map +1 -1
  195. package/dist/flows/templates.js +5 -5
  196. package/dist/index.js +50 -8
  197. package/dist/index.js.map +1 -1
  198. package/dist/issues/classify.js +16 -16
  199. package/dist/issues/classify.js.map +1 -1
  200. package/dist/issues/fingerprint.js +24 -4
  201. package/dist/issues/fingerprint.js.map +1 -1
  202. package/dist/issues/index.js +94 -31
  203. package/dist/issues/index.js.map +1 -1
  204. package/dist/issues/metrics.js +4 -4
  205. package/dist/issues/metrics.js.map +1 -1
  206. package/dist/issues/recurrence.js +35 -8
  207. package/dist/issues/recurrence.js.map +1 -1
  208. package/dist/issues/report.js +4 -4
  209. package/dist/issues/report.js.map +1 -1
  210. package/dist/issues/reportBridge.js +4 -4
  211. package/dist/issues/reportBridge.js.map +1 -1
  212. package/dist/issues/schema.js +2 -2
  213. package/dist/issues/schema.js.map +1 -1
  214. package/dist/issues/sourceRevision.js +2 -2
  215. package/dist/issues/sourceRevision.js.map +1 -1
  216. package/dist/issues/store.js +110 -32
  217. package/dist/issues/store.js.map +1 -1
  218. package/dist/lib/abortScope.js +48 -0
  219. package/dist/lib/abortScope.js.map +1 -0
  220. package/dist/lib/android.js +75 -7
  221. package/dist/lib/android.js.map +1 -1
  222. package/dist/lib/coordSpace.js +1 -1
  223. package/dist/lib/coordSpace.js.map +1 -1
  224. package/dist/lib/device.js +32 -7
  225. package/dist/lib/device.js.map +1 -1
  226. package/dist/lib/gestures.js +141 -0
  227. package/dist/lib/gestures.js.map +1 -0
  228. package/dist/lib/gitignore.js +4 -3
  229. package/dist/lib/gitignore.js.map +1 -1
  230. package/dist/lib/image.js +1 -1
  231. package/dist/lib/image.js.map +1 -1
  232. package/dist/lib/lockfile.js +370 -31
  233. package/dist/lib/lockfile.js.map +1 -1
  234. package/dist/lib/needsInput.js +3 -3
  235. package/dist/lib/needsInput.js.map +1 -1
  236. package/dist/lib/png.js +2 -2
  237. package/dist/lib/png.js.map +1 -1
  238. package/dist/lib/redact.js +170 -9
  239. package/dist/lib/redact.js.map +1 -1
  240. package/dist/lib/result.js +79 -10
  241. package/dist/lib/result.js.map +1 -1
  242. package/dist/lib/schemaHash.js +3 -3
  243. package/dist/lib/schemaHash.js.map +1 -1
  244. package/dist/lib/sensitive.js +3 -2
  245. package/dist/lib/sensitive.js.map +1 -1
  246. package/dist/lib/simctl.js +3 -3
  247. package/dist/lib/simctl.js.map +1 -1
  248. package/dist/lib/spawn.js +52 -10
  249. package/dist/lib/spawn.js.map +1 -1
  250. package/dist/lib/toolAnnotations.js +114 -0
  251. package/dist/lib/toolAnnotations.js.map +1 -0
  252. package/dist/lib/wda.js +294 -15
  253. package/dist/lib/wda.js.map +1 -1
  254. package/dist/mobileAudit/checks.js +12 -12
  255. package/dist/mobileAudit/checks.js.map +1 -1
  256. package/dist/mobileAudit/evidence.js +4 -4
  257. package/dist/mobileAudit/evidence.js.map +1 -1
  258. package/dist/mobileAudit/profiles.js +1 -1
  259. package/dist/mobileAudit/profiles.js.map +1 -1
  260. package/dist/mobileAudit/results.js +3 -3
  261. package/dist/mobileAudit/results.js.map +1 -1
  262. package/dist/mobileAudit/runner.js +72 -18
  263. package/dist/mobileAudit/runner.js.map +1 -1
  264. package/dist/oracle/auth.js +1 -1
  265. package/dist/oracle/auth.js.map +1 -1
  266. package/dist/oracle/failures.js +219 -36
  267. package/dist/oracle/failures.js.map +1 -1
  268. package/dist/oracle/health.js +63 -17
  269. package/dist/oracle/health.js.map +1 -1
  270. package/dist/oracle/locator.js +13 -13
  271. package/dist/oracle/locator.js.map +1 -1
  272. package/dist/oracle/record.js +3 -3
  273. package/dist/oracle/record.js.map +1 -1
  274. package/dist/orchestration/envelope.js +2 -2
  275. package/dist/orchestration/envelope.js.map +1 -1
  276. package/dist/orchestration/goal.js +4 -4
  277. package/dist/orchestration/goal.js.map +1 -1
  278. package/dist/orchestration/testThis/execute.js +62 -21
  279. package/dist/orchestration/testThis/execute.js.map +1 -1
  280. package/dist/orchestration/testThis/pipeline.js +119 -30
  281. package/dist/orchestration/testThis/pipeline.js.map +1 -1
  282. package/dist/orchestration/testThis/plan.js +162 -73
  283. package/dist/orchestration/testThis/plan.js.map +1 -1
  284. package/dist/orchestration/testThis/sessionIntent.js +72 -0
  285. package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
  286. package/dist/orchestration/testThis/terminal.js +34 -16
  287. package/dist/orchestration/testThis/terminal.js.map +1 -1
  288. package/dist/orchestration/testThis/types.js +1 -1
  289. package/dist/orchestration/testThis/types.js.map +1 -1
  290. package/dist/plan/plan.js +9 -9
  291. package/dist/plan/plan.js.map +1 -1
  292. package/dist/prompts/index.js +22 -22
  293. package/dist/prompts/index.js.map +1 -1
  294. package/dist/report/export.js +392 -37
  295. package/dist/report/export.js.map +1 -1
  296. package/dist/report/findingsDedupe.js +41 -0
  297. package/dist/report/findingsDedupe.js.map +1 -0
  298. package/dist/report/policy.js +7 -4
  299. package/dist/report/policy.js.map +1 -1
  300. package/dist/report/qaLevel.js +8 -8
  301. package/dist/report/qaLevel.js.map +1 -1
  302. package/dist/report/sarifSources.js +160 -0
  303. package/dist/report/sarifSources.js.map +1 -0
  304. package/dist/report/summary.js +2 -2
  305. package/dist/report/summary.js.map +1 -1
  306. package/dist/report/testCatalog.js +4 -4
  307. package/dist/report/testCatalog.js.map +1 -1
  308. package/dist/report/toolHealth.js +124 -0
  309. package/dist/report/toolHealth.js.map +1 -0
  310. package/dist/server.js +472 -45
  311. package/dist/server.js.map +1 -1
  312. package/dist/services/automationGenerate.js +8 -2
  313. package/dist/services/automationGenerate.js.map +1 -1
  314. package/dist/services/build.js +2 -2
  315. package/dist/services/build.js.map +1 -1
  316. package/dist/{tools → services}/flowGenerate.js +29 -13
  317. package/dist/services/flowGenerate.js.map +1 -0
  318. package/dist/services/preflight.js +4 -4
  319. package/dist/services/preflight.js.map +1 -1
  320. package/dist/services/prepareAndroid.js +46 -8
  321. package/dist/services/prepareAndroid.js.map +1 -1
  322. package/dist/services/prepareIos.js +24 -9
  323. package/dist/services/prepareIos.js.map +1 -1
  324. package/dist/services/report.js +100 -45
  325. package/dist/services/report.js.map +1 -1
  326. package/dist/services/smoke.js +32 -16
  327. package/dist/services/smoke.js.map +1 -1
  328. package/dist/services/suiteGenerate.js +28 -3
  329. package/dist/services/suiteGenerate.js.map +1 -1
  330. package/dist/services/testSuiteKnowledge.js +40 -27
  331. package/dist/services/testSuiteKnowledge.js.map +1 -1
  332. package/dist/session/attach.js +270 -6
  333. package/dist/session/attach.js.map +1 -1
  334. package/dist/session/processRegistry.js +317 -48
  335. package/dist/session/processRegistry.js.map +1 -1
  336. package/dist/session/progress.js +1 -1
  337. package/dist/session/retention.js +201 -0
  338. package/dist/session/retention.js.map +1 -0
  339. package/dist/session/store.js +275 -48
  340. package/dist/session/store.js.map +1 -1
  341. package/dist/snapshot/overlays.js +53 -8
  342. package/dist/snapshot/overlays.js.map +1 -1
  343. package/dist/snapshot/parse.js +28 -4
  344. package/dist/snapshot/parse.js.map +1 -1
  345. package/dist/snapshot/present.js +11 -5
  346. package/dist/snapshot/present.js.map +1 -1
  347. package/dist/snapshot/settle.js +39 -9
  348. package/dist/snapshot/settle.js.map +1 -1
  349. package/dist/state/consent.js +99 -0
  350. package/dist/state/consent.js.map +1 -0
  351. package/dist/state/profile.js +46 -2
  352. package/dist/state/profile.js.map +1 -1
  353. package/dist/suite/compile.js +9 -5
  354. package/dist/suite/compile.js.map +1 -1
  355. package/dist/suite/lint.js +4 -4
  356. package/dist/suite/lint.js.map +1 -1
  357. package/dist/suite/pom.js +50 -41
  358. package/dist/suite/pom.js.map +1 -1
  359. package/dist/suite/secretGuard.js +266 -0
  360. package/dist/suite/secretGuard.js.map +1 -0
  361. package/dist/suite/testcase.js +9 -7
  362. package/dist/suite/testcase.js.map +1 -1
  363. package/dist/testSuite/exporter.js +4 -4
  364. package/dist/testSuite/exporter.js.map +1 -1
  365. package/dist/testSuite/generator.js +13 -9
  366. package/dist/testSuite/generator.js.map +1 -1
  367. package/dist/testSuite/history.js +1 -1
  368. package/dist/testSuite/history.js.map +1 -1
  369. package/dist/testSuite/issueLinks.js +3 -3
  370. package/dist/testSuite/issueLinks.js.map +1 -1
  371. package/dist/testSuite/lint.js +4 -4
  372. package/dist/testSuite/lint.js.map +1 -1
  373. package/dist/testSuite/merge.js +5 -5
  374. package/dist/testSuite/merge.js.map +1 -1
  375. package/dist/testSuite/schema.js +5 -5
  376. package/dist/testSuite/schema.js.map +1 -1
  377. package/dist/testSuite/store.js +3 -3
  378. package/dist/testSuite/store.js.map +1 -1
  379. package/dist/testSuite/traceability.js +2 -2
  380. package/dist/testSuite/traceability.js.map +1 -1
  381. package/dist/tools/act.js +794 -164
  382. package/dist/tools/act.js.map +1 -1
  383. package/dist/tools/agent.js +451 -128
  384. package/dist/tools/agent.js.map +1 -1
  385. package/dist/tools/appControl.js +69 -19
  386. package/dist/tools/appControl.js.map +1 -1
  387. package/dist/tools/appMap.js +188 -130
  388. package/dist/tools/appMap.js.map +1 -1
  389. package/dist/tools/build.js +32 -42
  390. package/dist/tools/build.js.map +1 -1
  391. package/dist/tools/bundletool.js +21 -31
  392. package/dist/tools/bundletool.js.map +1 -1
  393. package/dist/tools/clearOverlay.js +55 -12
  394. package/dist/tools/clearOverlay.js.map +1 -1
  395. package/dist/tools/device.js +76 -24
  396. package/dist/tools/device.js.map +1 -1
  397. package/dist/tools/doctor.js +68 -28
  398. package/dist/tools/doctor.js.map +1 -1
  399. package/dist/tools/explore.js +41 -47
  400. package/dist/tools/explore.js.map +1 -1
  401. package/dist/tools/featureTesting.js +31 -48
  402. package/dist/tools/featureTesting.js.map +1 -1
  403. package/dist/tools/firstRun.js +34 -41
  404. package/dist/tools/firstRun.js.map +1 -1
  405. package/dist/tools/flow.js +183 -103
  406. package/dist/tools/flow.js.map +1 -1
  407. package/dist/tools/flowRepair.js +25 -13
  408. package/dist/tools/flowRepair.js.map +1 -1
  409. package/dist/tools/generate.js +52 -89
  410. package/dist/tools/generate.js.map +1 -1
  411. package/dist/tools/getArtifact.js +16 -5
  412. package/dist/tools/getArtifact.js.map +1 -1
  413. package/dist/tools/health.js +15 -12
  414. package/dist/tools/health.js.map +1 -1
  415. package/dist/tools/ios.js +45 -223
  416. package/dist/tools/ios.js.map +1 -1
  417. package/dist/tools/issues.js +251 -35
  418. package/dist/tools/issues.js.map +1 -1
  419. package/dist/tools/jobs.js +41 -16
  420. package/dist/tools/jobs.js.map +1 -1
  421. package/dist/tools/metro.js +36 -35
  422. package/dist/tools/metro.js.map +1 -1
  423. package/dist/tools/mobileAudit.js +50 -45
  424. package/dist/tools/mobileAudit.js.map +1 -1
  425. package/dist/tools/network.js +31 -14
  426. package/dist/tools/network.js.map +1 -1
  427. package/dist/tools/note.js +26 -26
  428. package/dist/tools/note.js.map +1 -1
  429. package/dist/tools/prepareIosTarget.js +10 -16
  430. package/dist/tools/prepareIosTarget.js.map +1 -1
  431. package/dist/tools/prepareTarget.js +117 -50
  432. package/dist/tools/prepareTarget.js.map +1 -1
  433. package/dist/tools/report.js +11 -22
  434. package/dist/tools/report.js.map +1 -1
  435. package/dist/tools/resolveArtifact.js +11 -15
  436. package/dist/tools/resolveArtifact.js.map +1 -1
  437. package/dist/tools/resolveTarget.js +78 -24
  438. package/dist/tools/resolveTarget.js.map +1 -1
  439. package/dist/tools/screenRecord.js +23 -21
  440. package/dist/tools/screenRecord.js.map +1 -1
  441. package/dist/tools/screenshot.js +23 -16
  442. package/dist/tools/screenshot.js.map +1 -1
  443. package/dist/tools/smoke.js +20 -16
  444. package/dist/tools/smoke.js.map +1 -1
  445. package/dist/tools/snapshot.js +155 -118
  446. package/dist/tools/snapshot.js.map +1 -1
  447. package/dist/tools/startSession.js +104 -116
  448. package/dist/tools/startSession.js.map +1 -1
  449. package/dist/tools/suite.js +72 -43
  450. package/dist/tools/suite.js.map +1 -1
  451. package/dist/tools/testSuite.js +30 -20
  452. package/dist/tools/testSuite.js.map +1 -1
  453. package/dist/tools/testThis.js +24 -28
  454. package/dist/tools/testThis.js.map +1 -1
  455. package/dist/tools/visual.js +686 -210
  456. package/dist/tools/visual.js.map +1 -1
  457. package/dist/tools/wait.js +9 -38
  458. package/dist/tools/wait.js.map +1 -1
  459. package/dist/tools/wda.js +187 -57
  460. package/dist/tools/wda.js.map +1 -1
  461. package/dist/version.js +31 -22
  462. package/dist/version.js.map +1 -1
  463. package/dist/visual/ocr.js +53 -6
  464. package/dist/visual/ocr.js.map +1 -1
  465. package/dist/visual/provider.js +80 -12
  466. package/dist/visual/provider.js.map +1 -1
  467. package/docs/README.md +24 -10
  468. package/docs/ci-reports.md +328 -0
  469. package/docs/concepts.md +227 -0
  470. package/docs/flows.md +153 -0
  471. package/docs/mcp-server.md +194 -128
  472. package/docs/physical-devices.md +84 -0
  473. package/docs/tools.md +812 -152
  474. package/package.json +3 -2
  475. package/dist/tools/assertVisual.js +0 -84
  476. package/dist/tools/assertVisual.js.map +0 -1
  477. package/dist/tools/automationGenerate.js.map +0 -1
  478. package/dist/tools/capabilities.js +0 -179
  479. package/dist/tools/capabilities.js.map +0 -1
  480. package/dist/tools/detectContext.js +0 -41
  481. package/dist/tools/detectContext.js.map +0 -1
  482. package/dist/tools/flowGenerate.js.map +0 -1
  483. package/dist/tools/history.js +0 -86
  484. package/dist/tools/history.js.map +0 -1
  485. package/dist/tools/locator.js +0 -85
  486. package/dist/tools/locator.js.map +0 -1
  487. package/dist/tools/permissions.js +0 -174
  488. package/dist/tools/permissions.js.map +0 -1
  489. package/dist/tools/plan.js +0 -52
  490. package/dist/tools/plan.js.map +0 -1
  491. package/dist/tools/screenInfo.js +0 -76
  492. package/dist/tools/screenInfo.js.map +0 -1
  493. package/dist/tools/seed.js +0 -133
  494. package/dist/tools/seed.js.map +0 -1
  495. package/dist/tools/state.js +0 -217
  496. package/dist/tools/state.js.map +0 -1
  497. package/dist/tools/visualText.js +0 -106
  498. package/dist/tools/visualText.js.map +0 -1
@@ -1,6 +1,30 @@
1
+ import { currentScreenSizeEpoch } from './DirectDriver.js';
1
2
  import * as sim from '../lib/simctl.js';
2
- import { acceptWdaAlert, clearWdaElement, clearWdaFocusedByKeys, createWdaSession, deleteWdaSession, dismissWdaAlert, dragWdaPoint, findFocusedWdaElement, findWdaElement, normalizeWdaSource, pressWdaBack, pressWdaHome, tapWdaElement, tapWdaPoint, typeWdaElement, typeWdaKeys, wdaActiveAppInfo, wdaScreenshot, wdaSessionUdidMismatch, wdaSource, } from '../lib/wda.js';
3
+ import { currentSignal } from '../lib/abortScope.js';
4
+ import { parseSnapshot } from '../snapshot/parse.js';
5
+ import { acceptWdaAlert, clearWdaElement, clearWdaFocusedByKeys, createWdaSession, deleteWdaSession, dismissWdaAlert, dismissWdaKeyboard, isInvalidWdaSession, wdaKeyboardFrame, wdaKeyboardShown, wdaOrientation, withWdaCall, dragWdaPoint, findFocusedWdaElement, findWdaElement, normalizeWdaSource, pressWdaHome, tapWdaElement, tapWdaPoint, typeWdaElement, typeWdaKeys, wdaActiveAppInfo, wdaElementAttribute, wdaScreenshot, wdaSessionUdidMismatch, wdaSource, wdaWindowSize, } from '../lib/wda.js';
3
6
  const UNSUPPORTED = 'not supported by the WDA backend yet.';
7
+ /** A cached screen size is re-validated (GET /orientation + /window/size) after this long even
8
+ * without an observed rotation. Rotations seen in a page source drop it immediately. */
9
+ export const WDA_SCREEN_SIZE_TTL_MS = 30_000;
10
+ /** How long a post-settle page source may answer `press back` (only while no action ran since and
11
+ * nothing invalidated the device's screen). Short on purpose: the app can navigate by itself. */
12
+ export const WDA_BACK_SOURCE_FRESH_MS = 3_000;
13
+ /** Per-device page-source epoch: bumped by any out-of-driver screen change on that simulator
14
+ * (simctl launch/terminate/openurl, app-control tools, flow openUrl) so a cached source taken
15
+ * before it is never reused to find a back button. Keyed by udid; '*' = every device. */
16
+ const pageSourceEpoch = new Map();
17
+ function sourceEpochOf(udid) {
18
+ return (pageSourceEpoch.get(udid ?? '') ?? 0) + (pageSourceEpoch.get('*') ?? 0);
19
+ }
20
+ /** Drop any WdaDriver's cached page source for `udid` (all devices when omitted). Call after any
21
+ * simctl / app-control action that can change the screen outside the WDA driver. */
22
+ export function invalidateWdaPageSource(udid) {
23
+ const key = udid ?? '*';
24
+ pageSourceEpoch.set(key, (pageSourceEpoch.get(key) ?? 0) + 1);
25
+ }
26
+ /** How long the element id found by clearFocusedText() is reused by the following inputText(). */
27
+ export const WDA_FOCUSED_REUSE_MS = 10_000;
4
28
  function tailLines(text, lines) {
5
29
  const all = text.split(/\r?\n/);
6
30
  return all.slice(Math.max(0, all.length - lines)).join('\n');
@@ -10,6 +34,30 @@ function errorSummary(e) {
10
34
  .replace(/\s+/g, ' ')
11
35
  .slice(0, 300);
12
36
  }
37
+ /** PURE: where iOS "back" is on this screen: the center of the navigation bar's back button in a
38
+ * (normalized) WDA source, or null. The back button is the FIRST XCUIElementTypeButton inside the
39
+ * first XCUIElementTypeNavigationBar, and only when it sits in the bar's LEFT half. A root screen's
40
+ * bar can hold only trailing buttons ("Edit", "+"), which are not back. */
41
+ export function iosBackButtonPoint(normalizedXml) {
42
+ const nodes = parseSnapshot(normalizedXml).allNodes;
43
+ const bar = nodes.find((n) => /XCUIElementTypeNavigationBar$/.test(n.cls));
44
+ if (!bar)
45
+ return null;
46
+ const btn = nodes.find((n) => n.dfs > bar.dfs &&
47
+ n.dfs <= bar.subtreeEnd &&
48
+ /XCUIElementTypeButton$/.test(n.cls) &&
49
+ n.enabled &&
50
+ n.bounds[2] > n.bounds[0] &&
51
+ n.bounds[3] > n.bounds[1]);
52
+ if (!btn)
53
+ return null;
54
+ const x = Math.round((btn.bounds[0] + btn.bounds[2]) / 2);
55
+ const y = Math.round((btn.bounds[1] + btn.bounds[3]) / 2);
56
+ const barMid = (bar.bounds[0] + bar.bounds[2]) / 2;
57
+ return x < barMid ? { x, y } : null;
58
+ }
59
+ /** Thrown (message prefix) when iOS has no way to go "back" on the current screen. */
60
+ export const IOS_BACK_UNSUPPORTED = 'BACKEND_UNSUPPORTED: iOS has no system back key. No navigation-bar back button was found and the screen size needed for an edge-swipe back gesture is unknown.';
13
61
  export class WdaDriver {
14
62
  kind = 'wda';
15
63
  baseUrl;
@@ -18,6 +66,8 @@ export class WdaDriver {
18
66
  sessionId;
19
67
  bundleId;
20
68
  capabilities;
69
+ /** Every session this driver creates re-uses the running app (restart rebind). */
70
+ reuseRunningApp;
21
71
  settings;
22
72
  onTiming;
23
73
  constructor(baseUrl, opts = {}) {
@@ -27,6 +77,7 @@ export class WdaDriver {
27
77
  this.sessionId = opts.sessionId;
28
78
  this.bundleId = opts.bundleId;
29
79
  this.capabilities = opts.capabilities;
80
+ this.reuseRunningApp = opts.reuseRunningApp === true;
30
81
  this.settings = opts.settings;
31
82
  this.onTiming = opts.onTiming;
32
83
  }
@@ -39,7 +90,64 @@ export class WdaDriver {
39
90
  this.onTiming?.(kind, Date.now() - started);
40
91
  }
41
92
  }
42
- async ensureSession() {
93
+ /** Last normalized page source from dumpXml(). It's cleared by every state-changing call, so while
94
+ * set it IS the current screen (as of `at`). Lets `press back` skip a fresh /source. */
95
+ lastSource;
96
+ /** Focused element found by clearFocusedText(), reused by the next inputText(). */
97
+ focusedEl;
98
+ /** Called by every state-changing operation. */
99
+ touched() {
100
+ this.lastSource = undefined;
101
+ }
102
+ /** Run a simctl app-control call (launch/terminate/install/openurl): the screen may change
103
+ * outside WDA, so every driver's cached source for this simulator is dropped before AND after
104
+ * (a source dumped while the call ran is stale too). */
105
+ async simctlChange(fn) {
106
+ this.touched();
107
+ invalidateWdaPageSource(this.udid);
108
+ try {
109
+ return await fn();
110
+ }
111
+ finally {
112
+ invalidateWdaPageSource(this.udid);
113
+ }
114
+ }
115
+ /** Set when a session was transparently re-created after "invalid session id" (WDA restart /
116
+ * session reaped). Callers may surface it as a warning via consumeSessionRecovered(). */
117
+ sessionRecovered = false;
118
+ /** Returns (and clears) whether the last operations ran on a re-created WDA session. */
119
+ consumeSessionRecovered() {
120
+ const v = this.sessionRecovered;
121
+ this.sessionRecovered = false;
122
+ return v;
123
+ }
124
+ /** Run a session-scoped WDA operation with the bound signal + per-endpoint timeouts. On
125
+ * "invalid session id" (WDA restarted / session reaped) the cached session is dropped and
126
+ * the operation retried ONCE on a fresh session; the failed request never acted. The fresh
127
+ * session is created with forceAppLaunch:false + shouldTerminateApp:false (reuseRunningApp) so
128
+ * WDA does NOT terminate + relaunch the app under test (WebDriverAgent FBSessionCommands: when
129
+ * `bundleId` is passed, `forceAppLaunch` defaults to YES and a running app is relaunched; with
130
+ * NO a running app is left as-is and a backgrounded one is only activated). */
131
+ async withSession(fn) {
132
+ return withWdaCall({ signal: currentSignal() }, async () => {
133
+ const sid = await this.ensureSession();
134
+ try {
135
+ return await fn(sid);
136
+ }
137
+ catch (e) {
138
+ if (!isInvalidWdaSession(e))
139
+ throw e;
140
+ this.sessionId = undefined;
141
+ this.cachedScreenSize = undefined;
142
+ this.lastSource = undefined;
143
+ this.focusedEl = undefined;
144
+ const fresh = await this.ensureSession({ recover: true });
145
+ this.sessionRecovered = true;
146
+ return fn(fresh);
147
+ }
148
+ });
149
+ }
150
+ async ensureSession(opts = {}) {
43
151
  if (this.sessionId)
44
152
  return this.sessionId;
45
153
  const s = await this.timed('session_create', () => createWdaSession(this.baseUrl, {
@@ -47,6 +155,7 @@ export class WdaDriver {
47
155
  udid: this.udid,
48
156
  capabilities: this.capabilities,
49
157
  settings: this.settings,
158
+ reuseRunningApp: this.reuseRunningApp || opts.recover === true,
50
159
  }));
51
160
  const mismatchedUdid = wdaSessionUdidMismatch(s.capabilities, this.udid);
52
161
  if (mismatchedUdid) {
@@ -80,12 +189,18 @@ export class WdaDriver {
80
189
  async installApp(appPath) {
81
190
  if (!this.udid || !this.simulator.installApp)
82
191
  return this.no('app install');
83
- await this.simulator.installApp(this.udid, appPath);
192
+ const udid = this.udid;
193
+ await this.simctlChange(async () => {
194
+ await this.simulator.installApp?.(udid, appPath);
195
+ });
84
196
  }
85
197
  async uninstallApp(pkg) {
86
198
  if (!this.udid || !this.simulator.uninstallApp)
87
199
  return this.no('app uninstall');
88
- await this.simulator.uninstallApp(this.udid, pkg);
200
+ const udid = this.udid;
201
+ await this.simctlChange(async () => {
202
+ await this.simulator.uninstallApp?.(udid, pkg);
203
+ });
89
204
  }
90
205
  async isInstalled(pkg) {
91
206
  const target = pkg || this.bundleId;
@@ -115,16 +230,22 @@ export class WdaDriver {
115
230
  }
116
231
  }
117
232
  async launchApp(pkg) {
233
+ this.touched();
118
234
  this.bundleId = pkg;
119
- if (this.udid) {
120
- await this.simulator.launchApp(this.udid, pkg);
235
+ const udid = this.udid;
236
+ if (udid) {
237
+ await this.simctlChange(() => this.simulator.launchApp(udid, pkg));
121
238
  }
122
239
  await this.ensureSession();
123
240
  }
124
241
  async launchAppWithArgs(pkg, args) {
242
+ this.touched();
125
243
  this.bundleId = pkg;
126
- if (this.udid && this.simulator.launchAppWithArgs) {
127
- await this.simulator.launchAppWithArgs(this.udid, pkg, args);
244
+ const udid = this.udid;
245
+ if (udid && this.simulator.launchAppWithArgs) {
246
+ await this.simctlChange(async () => {
247
+ await this.simulator.launchAppWithArgs?.(udid, pkg, args);
248
+ });
128
249
  }
129
250
  else if (Object.keys(args).length) {
130
251
  return this.no('launch arguments');
@@ -135,13 +256,42 @@ export class WdaDriver {
135
256
  const target = pkg || this.bundleId;
136
257
  if (!this.udid || !target)
137
258
  return this.no('app terminate');
138
- await this.simulator.terminateApp(this.udid, target);
259
+ const udid = this.udid;
260
+ await this.simctlChange(() => this.simulator.terminateApp(udid, target));
139
261
  }
140
262
  clearData() {
141
263
  return this.no('clear app data');
142
264
  }
143
- imeShown() {
144
- return Promise.resolve(false);
265
+ /** Keyboard shown? A single find-by-class-name call (XCUIElementTypeKeyboard). */
266
+ async imeShown() {
267
+ return this.withSession((sid) => wdaKeyboardShown(this.baseUrl, sid));
268
+ }
269
+ async imeFrame() {
270
+ return this.withSession((sid) => wdaKeyboardFrame(this.baseUrl, sid));
271
+ }
272
+ /** imeShown + imeFrame in ONE keyboard lookup (both used to run the same /elements query):
273
+ * no keyboard element (or no usable rect) ⇒ not shown. */
274
+ async imeState() {
275
+ const frame = await this.imeFrame();
276
+ return { shown: frame !== null, frame };
277
+ }
278
+ async hideKeyboard() {
279
+ this.touched();
280
+ return this.withSession(async (sid) => {
281
+ if (!(await wdaKeyboardShown(this.baseUrl, sid)))
282
+ return false;
283
+ try {
284
+ await dismissWdaKeyboard(this.baseUrl, sid);
285
+ }
286
+ catch (e) {
287
+ if (isInvalidWdaSession(e))
288
+ throw e; // let withSession recover the session
289
+ // WDA 400 "Did not know how to dismiss the keyboard": the app offers no generic way
290
+ // (no Done/Return-dismiss). Report "could not hide" instead of an untyped error.
291
+ return false;
292
+ }
293
+ return true;
294
+ });
145
295
  }
146
296
  async logcat(lines = 200, grep) {
147
297
  if (!this.udid)
@@ -162,32 +312,74 @@ export class WdaDriver {
162
312
  return this.no('airplane-mode toggle');
163
313
  }
164
314
  async foregroundOwner() {
165
- try {
166
- const info = await wdaActiveAppInfo(this.baseUrl, await this.ensureSession());
167
- return info.bundleId ?? info.name ?? this.bundleId ?? 'unknown';
168
- }
169
- catch {
170
- return this.bundleId ?? 'unknown';
315
+ // Never guess the app under test on failure: callers treat 'unknown' as "don't judge", while a
316
+ // guessed bundleId made qa_app_control background report the app as still in front.
317
+ for (let attempt = 0; attempt < 2; attempt++) {
318
+ try {
319
+ const info = await this.withSession((sid) => wdaActiveAppInfo(this.baseUrl, sid));
320
+ return info.bundleId || info.name || 'unknown';
321
+ }
322
+ catch {
323
+ if (attempt === 0)
324
+ await new Promise((r) => setTimeout(r, 300));
325
+ }
171
326
  }
327
+ return 'unknown';
172
328
  }
173
329
  async screenshot() {
174
- const sid = await this.ensureSession();
175
- return this.timed('screenshot', () => wdaScreenshot(this.baseUrl, sid));
176
- }
177
- async dumpXml() {
178
- const sid = await this.ensureSession();
179
- return normalizeWdaSource(await this.timed('source', () => wdaSource(this.baseUrl, sid)));
330
+ return this.withSession((sid) => this.timed('screenshot', () => wdaScreenshot(this.baseUrl, sid)));
331
+ }
332
+ async dumpXml(opts = {}) {
333
+ // opts.timeoutMs bounds the /source request (default 30 s). The settle loop passes its
334
+ // remaining deadline. Retries are the caller's loop; WDA itself is not retried here.
335
+ let sid;
336
+ const xml = normalizeWdaSource(await withWdaCall({ timeoutMs: opts.timeoutMs }, () => this.withSession((s) => {
337
+ sid = s;
338
+ return this.timed('source', () => wdaSource(this.baseUrl, s));
339
+ })));
340
+ this.lastSource = { sid, xml, at: Date.now(), epoch: sourceEpochOf(this.udid) };
341
+ this.noteSourceSize(xml);
342
+ return xml;
343
+ }
344
+ /** A page source whose root size is the cached size with SWAPPED axes = a rotation happened. */
345
+ noteSourceSize(xml) {
346
+ const c = this.cachedScreenSize;
347
+ if (!c)
348
+ return;
349
+ const m = xml.match(/bounds="\[0,0\]\[(\d+),(\d+)\]"/);
350
+ if (!m)
351
+ return;
352
+ const [w, h] = [Number(m[1]), Number(m[2])];
353
+ if (w === c.size.height && h === c.size.width && w !== h)
354
+ this.cachedScreenSize = undefined;
180
355
  }
181
356
  async tapXY(x, y) {
182
- const sid = await this.ensureSession();
183
- await this.timed('tap', () => tapWdaPoint(this.baseUrl, sid, x, y));
357
+ this.touched();
358
+ await this.withSession((sid) => this.timed('tap', () => tapWdaPoint(this.baseUrl, sid, x, y)));
184
359
  }
185
360
  async pressXY(x, y) {
186
361
  await this.tapXY(x, y);
187
362
  }
188
363
  async inputText(text) {
189
- const sid = await this.ensureSession();
364
+ this.touched();
365
+ return this.withSession((sid) => this.inputTextIn(sid, text));
366
+ }
367
+ async inputTextIn(sid, text) {
190
368
  let focusedError;
369
+ // Reuse the element clearFocusedText() just found (saves one find round trip per type);
370
+ // on any failure fall through to a fresh lookup.
371
+ const reuse = this.focusedEl;
372
+ this.focusedEl = undefined;
373
+ if (reuse && reuse.sid === sid && Date.now() - reuse.at < WDA_FOCUSED_REUSE_MS) {
374
+ try {
375
+ await this.timed('type', () => typeWdaElement(this.baseUrl, sid, reuse.elementId, text));
376
+ return;
377
+ }
378
+ catch (e) {
379
+ if (isInvalidWdaSession(e))
380
+ throw e;
381
+ }
382
+ }
191
383
  try {
192
384
  const el = await this.timed('find_element', () => findFocusedWdaElement(this.baseUrl, sid));
193
385
  await this.timed('type', () => typeWdaElement(this.baseUrl, sid, el.elementId, text));
@@ -205,11 +397,16 @@ export class WdaDriver {
205
397
  }
206
398
  }
207
399
  async clearFocusedText(approxLen = 40) {
208
- const sid = await this.ensureSession();
400
+ this.touched();
401
+ return this.withSession((sid) => this.clearFocusedTextIn(sid, approxLen));
402
+ }
403
+ async clearFocusedTextIn(sid, approxLen) {
209
404
  let clearError;
405
+ this.focusedEl = undefined;
210
406
  try {
211
407
  const el = await this.timed('find_element', () => findFocusedWdaElement(this.baseUrl, sid));
212
408
  await this.timed('clear', () => clearWdaElement(this.baseUrl, sid, el.elementId));
409
+ this.focusedEl = { sid, elementId: el.elementId, at: Date.now() };
213
410
  return;
214
411
  }
215
412
  catch (e) {
@@ -223,32 +420,108 @@ export class WdaDriver {
223
420
  }
224
421
  }
225
422
  async pressKey(key) {
423
+ const cached = this.lastSource; // the screen as last dumped, if nothing acted since
424
+ this.touched();
226
425
  if (key === 'home') {
227
- await pressWdaHome(this.baseUrl, await this.ensureSession());
426
+ await this.withSession(() => pressWdaHome(this.baseUrl)); // session-less route; session kept warm
228
427
  return;
229
428
  }
230
429
  if (key === 'back') {
231
- await pressWdaBack(this.baseUrl, await this.ensureSession());
430
+ // iOS has no system back key (WDA has no /back endpoint): tap the navigation bar's back
431
+ // button when the screen has one, else perform the interactive-pop edge swipe.
432
+ await this.withSession((sid) => this.backIn(sid, cached && cached.sid === sid && cached.epoch === sourceEpochOf(this.udid) && Date.now() - cached.at < WDA_BACK_SOURCE_FRESH_MS
433
+ ? cached.xml
434
+ : undefined));
232
435
  return;
233
436
  }
234
437
  await this.inputText('\n');
235
438
  }
439
+ /** Last `back` strategy used ('nav_button' | 'edge_swipe'), surfaced by qa_act. */
440
+ lastBackVia;
441
+ async backIn(sid, cachedXml) {
442
+ // The latest post-settle source (nothing acted since) is the current screen: try its back
443
+ // button first and only fetch a fresh /source when it has none.
444
+ const cachedBtn = cachedXml ? iosBackButtonPoint(cachedXml) : null;
445
+ if (cachedBtn) {
446
+ await this.timed('tap', () => tapWdaPoint(this.baseUrl, sid, cachedBtn.x, cachedBtn.y));
447
+ this.lastBackVia = 'nav_button';
448
+ return;
449
+ }
450
+ const xml = normalizeWdaSource(await this.timed('source', () => wdaSource(this.baseUrl, sid)));
451
+ const btn = iosBackButtonPoint(xml);
452
+ if (btn) {
453
+ await this.timed('tap', () => tapWdaPoint(this.baseUrl, sid, btn.x, btn.y));
454
+ this.lastBackVia = 'nav_button';
455
+ return;
456
+ }
457
+ let size = null;
458
+ try {
459
+ size = await wdaWindowSize(this.baseUrl, sid);
460
+ }
461
+ catch (e) {
462
+ if (isInvalidWdaSession(e))
463
+ throw e;
464
+ const screen = parseSnapshot(xml).screen;
465
+ size = screen[0] > 0 && screen[1] > 0 ? { width: screen[0], height: screen[1] } : null;
466
+ }
467
+ if (!size)
468
+ throw new Error(IOS_BACK_UNSUPPORTED);
469
+ const y = Math.round(size.height / 2);
470
+ await dragWdaPoint(this.baseUrl, sid, 2, y, Math.round(size.width * 0.6), y, 0.1);
471
+ this.lastBackVia = 'edge_swipe';
472
+ }
236
473
  async acceptAlert() {
237
- await acceptWdaAlert(this.baseUrl, await this.ensureSession());
474
+ this.touched();
475
+ await this.withSession((sid) => acceptWdaAlert(this.baseUrl, sid));
238
476
  }
239
477
  async dismissAlert() {
240
- await dismissWdaAlert(this.baseUrl, await this.ensureSession());
478
+ this.touched();
479
+ await this.withSession((sid) => dismissWdaAlert(this.baseUrl, sid));
241
480
  }
242
481
  async swipe(x1, y1, x2, y2, ms = 300) {
243
- await dragWdaPoint(this.baseUrl, await this.ensureSession(), x1, y1, x2, y2, ms / 1000);
482
+ this.touched();
483
+ await this.withSession((sid) => dragWdaPoint(this.baseUrl, sid, x1, y1, x2, y2, ms / 1000));
244
484
  }
245
485
  adbReverseMetro() {
246
486
  return this.no('dev-server port reverse');
247
487
  }
488
+ // Size in points via GET /window/size instead of dumping the entire page source.
489
+ // Cached per WDA session (a new session naturally misses it) WITHOUT a per-call /orientation
490
+ // round trip: the cache is dropped when a page source shows the axes swapped (rotation), when
491
+ // Swipium changes the orientation (invalidateScreenSizeCache epoch), and after
492
+ // WDA_SCREEN_SIZE_TTL_MS. On a miss, /orientation is still read to key the new entry.
493
+ cachedScreenSize;
248
494
  async screenSize() {
249
- const xml = await this.dumpXml();
250
- const m = xml.match(/bounds="\[0,0\]\[(\d+),(\d+)\]"/);
251
- return m ? { width: Number(m[1]), height: Number(m[2]) } : null;
495
+ const hit = this.cachedScreenSize;
496
+ if (hit &&
497
+ hit.sessionId === this.sessionId &&
498
+ hit.epoch === currentScreenSizeEpoch(this.udid) &&
499
+ Date.now() - hit.at < WDA_SCREEN_SIZE_TTL_MS)
500
+ return { ...hit.size };
501
+ return this.withSession(async (sid) => {
502
+ const epoch = currentScreenSizeEpoch(this.udid);
503
+ const orientation = await wdaOrientation(this.baseUrl, sid).catch(() => 'unknown');
504
+ const cached = this.cachedScreenSize;
505
+ if (cached?.sessionId === sid && cached.orientation === orientation && cached.epoch === epoch) {
506
+ cached.at = Date.now();
507
+ return { ...cached.size };
508
+ }
509
+ let size;
510
+ try {
511
+ size = await wdaWindowSize(this.baseUrl, sid);
512
+ }
513
+ catch (e) {
514
+ if (isInvalidWdaSession(e))
515
+ throw e;
516
+ // older WDA builds lack /window/size, so fall back to the page-source root bounds
517
+ const xml = normalizeWdaSource(await this.timed('source', () => wdaSource(this.baseUrl, sid)));
518
+ const m = xml.match(/bounds="\[0,0\]\[(\d+),(\d+)\]"/);
519
+ size = m ? { width: Number(m[1]), height: Number(m[2]) } : null;
520
+ }
521
+ if (size)
522
+ this.cachedScreenSize = { sessionId: sid, orientation, epoch, at: Date.now(), size };
523
+ return size;
524
+ });
252
525
  }
253
526
  screenDensity() {
254
527
  return Promise.resolve(null);
@@ -256,7 +529,8 @@ export class WdaDriver {
256
529
  async openUrl(url) {
257
530
  if (!this.udid)
258
531
  return this.no('open url without a simulator UDID');
259
- await this.simulator.openUrl(this.udid, url);
532
+ const udid = this.udid;
533
+ await this.simctlChange(() => this.simulator.openUrl(udid, url));
260
534
  }
261
535
  disableAnimations() {
262
536
  return Promise.resolve();
@@ -268,29 +542,55 @@ export class WdaDriver {
268
542
  await this.typeBySelector('accessibility id', value, text);
269
543
  }
270
544
  async tapBySelector(using, value) {
271
- const sid = await this.ensureSession();
272
- const el = await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
273
- await this.timed('tap', () => tapWdaElement(this.baseUrl, sid, el.elementId));
545
+ this.touched();
546
+ await this.withSession(async (sid) => {
547
+ const el = await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
548
+ await this.timed('tap', () => tapWdaElement(this.baseUrl, sid, el.elementId));
549
+ });
274
550
  }
275
551
  async typeBySelector(using, value, text) {
276
- const sid = await this.ensureSession();
277
- const el = await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
278
- await this.timed('type', () => typeWdaElement(this.baseUrl, sid, el.elementId, text));
552
+ this.touched();
553
+ await this.withSession(async (sid) => {
554
+ const el = await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
555
+ await this.timed('type', () => typeWdaElement(this.baseUrl, sid, el.elementId, text));
556
+ });
279
557
  }
280
558
  async clearBySelector(using, value) {
281
- const sid = await this.ensureSession();
282
- const el = await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
283
- await this.timed('clear', () => clearWdaElement(this.baseUrl, sid, el.elementId));
559
+ this.touched();
560
+ await this.withSession(async (sid) => {
561
+ const el = await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
562
+ await this.timed('clear', () => clearWdaElement(this.baseUrl, sid, el.elementId));
563
+ });
284
564
  }
285
- async existsBySelector(using, value) {
286
- const sid = await this.ensureSession();
565
+ // Real secure-field signal for native-selector typing: resolve the element and
566
+ // read its `type` attribute (XCUIElementTypeSecureTextField), accepting a boolean `secure`
567
+ // attribute where a WDA build exposes one instead.
568
+ async isSecureBySelector(using, value) {
569
+ return this.withSession((sid) => this.isSecureIn(sid, using, value));
570
+ }
571
+ async isSecureIn(sid, using, value) {
572
+ const el = await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
287
573
  try {
288
- await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
289
- return true;
574
+ if (/SecureTextField/i.test(await wdaElementAttribute(this.baseUrl, sid, el.elementId, 'type')))
575
+ return true;
290
576
  }
291
577
  catch {
292
- return false;
578
+ // some builds don't serve /attribute/type, so fall through to the `secure` attribute
293
579
  }
580
+ return /^(true|1)$/i.test(await wdaElementAttribute(this.baseUrl, sid, el.elementId, 'secure').catch(() => ''));
581
+ }
582
+ async existsBySelector(using, value) {
583
+ return this.withSession(async (sid) => {
584
+ try {
585
+ await this.timed('find_element', () => findWdaElement(this.baseUrl, sid, using, value));
586
+ return true;
587
+ }
588
+ catch (e) {
589
+ if (isInvalidWdaSession(e))
590
+ throw e; // let withSession recover the session
591
+ return false;
592
+ }
593
+ });
294
594
  }
295
595
  }
296
596
  //# sourceMappingURL=WdaDriver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WdaDriver.js","sourceRoot":"","sources":["../../src/drivers/WdaDriver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"WdaDriver.js","sourceRoot":"","sources":["../../src/drivers/WdaDriver.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  // Candidate action ranking (Phase 3.3 §8). From a parsed snapshot, produce ranked ExploreElements:
2
2
  // prioritize useful low-risk coverage (nav, tabs, named safe buttons, list items) and deprioritize
3
- // unlabeled icons + coordinate-only targets — which also surface as locator-quality issues. PURE.
3
+ // unlabeled icons + coordinate-only targets, which also surface as locator-quality issues. PURE.
4
4
  import { classifyRisk } from './policy.js';
5
5
  const NAV = /\b(home|tab|menu|settings?|search|explore|discover|profile|account|back|next|map|list|history|notifications?|messages?|dashboard|library|feed|overview)\b/i;
6
6
  function locatorFor(e) {
@@ -94,7 +94,7 @@ export function actionLikeNonInteractive(elements) {
94
94
  }
95
95
  return out;
96
96
  }
97
- /** Locator-readiness grade for a screen (Phase 3.3 §9.4) — drives the report's testability advice. */
97
+ /** Locator-readiness grade for a screen (Phase 3.3 §9.4). Drives the report's testability advice. */
98
98
  export function locatorQuality(elements) {
99
99
  const actionable = elements.filter((e) => e.clickable);
100
100
  if (actionable.length === 0)