swipium 1.4.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 (541) hide show
  1. package/CHANGELOG.md +313 -0
  2. package/README.md +175 -219
  3. package/THREAT_MODEL.md +223 -47
  4. package/dist/appMap/automationLink.js +39 -26
  5. package/dist/appMap/automationLink.js.map +1 -1
  6. package/dist/appMap/build.js +68 -20
  7. package/dist/appMap/build.js.map +1 -1
  8. package/dist/appMap/codeIndex.js +31 -5
  9. package/dist/appMap/codeIndex.js.map +1 -1
  10. package/dist/appMap/featureIndex.js +23 -5
  11. package/dist/appMap/featureIndex.js.map +1 -1
  12. package/dist/appMap/featureModel.js +44 -8
  13. package/dist/appMap/featureModel.js.map +1 -1
  14. package/dist/appMap/firstRunApply.js +24 -6
  15. package/dist/appMap/firstRunApply.js.map +1 -1
  16. package/dist/appMap/fsWalk.js +19 -2
  17. package/dist/appMap/fsWalk.js.map +1 -1
  18. package/dist/appMap/issues.js +10 -30
  19. package/dist/appMap/issues.js.map +1 -1
  20. package/dist/appMap/migrations.js +6 -6
  21. package/dist/appMap/migrations.js.map +1 -1
  22. package/dist/appMap/prelaunch.js +2 -2
  23. package/dist/appMap/prelaunch.js.map +1 -1
  24. package/dist/appMap/projectRegistry.js +83 -11
  25. package/dist/appMap/projectRegistry.js.map +1 -1
  26. package/dist/appMap/provenance.js +2 -2
  27. package/dist/appMap/provenance.js.map +1 -1
  28. package/dist/appMap/query.js +21 -5
  29. package/dist/appMap/query.js.map +1 -1
  30. package/dist/appMap/runtimeMerge.js +12 -5
  31. package/dist/appMap/runtimeMerge.js.map +1 -1
  32. package/dist/appMap/schema.js +1 -1
  33. package/dist/appMap/schema.js.map +1 -1
  34. package/dist/appMap/screenMatch.js +6 -2
  35. package/dist/appMap/screenMatch.js.map +1 -1
  36. package/dist/appMap/staticScan.js +151 -39
  37. package/dist/appMap/staticScan.js.map +1 -1
  38. package/dist/appMap/store.js +58 -85
  39. package/dist/appMap/store.js.map +1 -1
  40. package/dist/appMap/tsAstScan.js +34 -12
  41. package/dist/appMap/tsAstScan.js.map +1 -1
  42. package/dist/artifacts/bundletool.js +49 -12
  43. package/dist/artifacts/bundletool.js.map +1 -1
  44. package/dist/artifacts/resolve.js +41 -14
  45. package/dist/artifacts/resolve.js.map +1 -1
  46. package/dist/automation/capabilities.js +112 -30
  47. package/dist/automation/capabilities.js.map +1 -1
  48. package/dist/automation/gestures.js +6 -2
  49. package/dist/automation/gestures.js.map +1 -1
  50. package/dist/automation/plan.js +71 -23
  51. package/dist/automation/plan.js.map +1 -1
  52. package/dist/automation/report.js +15 -5
  53. package/dist/automation/report.js.map +1 -1
  54. package/dist/automation/selectors.js +22 -28
  55. package/dist/automation/selectors.js.map +1 -1
  56. package/dist/automation/types.js +1 -1
  57. package/dist/automation/types.js.map +1 -1
  58. package/dist/automation/waits.js +14 -8
  59. package/dist/automation/waits.js.map +1 -1
  60. package/dist/automation/webview.js +9 -3
  61. package/dist/automation/webview.js.map +1 -1
  62. package/dist/automationGen/appiumModel.js +16 -8
  63. package/dist/automationGen/appiumModel.js.map +1 -1
  64. package/dist/automationGen/ciEmitter.js +6 -6
  65. package/dist/automationGen/ciEmitter.js.map +1 -1
  66. package/dist/automationGen/identifiers.js +224 -0
  67. package/dist/automationGen/identifiers.js.map +1 -0
  68. package/dist/automationGen/jsEmitter.js +288 -121
  69. package/dist/automationGen/jsEmitter.js.map +1 -1
  70. package/dist/automationGen/packagePatch.js +2 -2
  71. package/dist/automationGen/packagePatch.js.map +1 -1
  72. package/dist/automationGen/platformResolve.js +36 -0
  73. package/dist/automationGen/platformResolve.js.map +1 -0
  74. package/dist/automationGen/projectProfile.js +76 -27
  75. package/dist/automationGen/projectProfile.js.map +1 -1
  76. package/dist/automationGen/pythonEmitter.js +278 -107
  77. package/dist/automationGen/pythonEmitter.js.map +1 -1
  78. package/dist/automationGen/readmeEmitter.js +7 -6
  79. package/dist/automationGen/readmeEmitter.js.map +1 -1
  80. package/dist/automationGen/run.js +388 -0
  81. package/dist/automationGen/run.js.map +1 -0
  82. package/dist/automationGen/suitePlan.js +17 -10
  83. package/dist/automationGen/suitePlan.js.map +1 -1
  84. package/dist/automationGen/validation.js +52 -12
  85. package/dist/automationGen/validation.js.map +1 -1
  86. package/dist/build/parseBuildLog.js +235 -31
  87. package/dist/build/parseBuildLog.js.map +1 -1
  88. package/dist/build/plan.js +39 -18
  89. package/dist/build/plan.js.map +1 -1
  90. package/dist/ci/preflight.js +13 -4
  91. package/dist/ci/preflight.js.map +1 -1
  92. package/dist/cli/gc.js +74 -0
  93. package/dist/cli/gc.js.map +1 -0
  94. package/dist/cli/init.js +217 -26
  95. package/dist/cli/init.js.map +1 -1
  96. package/dist/cli/main.js +50 -0
  97. package/dist/cli/main.js.map +1 -0
  98. package/dist/cli/report.js +218 -0
  99. package/dist/cli/report.js.map +1 -0
  100. package/dist/cli/scan.js +36 -15
  101. package/dist/cli/scan.js.map +1 -1
  102. package/dist/cli/suite.js +7 -7
  103. package/dist/cli/suite.js.map +1 -1
  104. package/dist/cli/verify.js +7 -7
  105. package/dist/cli/verify.js.map +1 -1
  106. package/dist/consent/consent.js +162 -5
  107. package/dist/consent/consent.js.map +1 -1
  108. package/dist/context/detect.js +55 -18
  109. package/dist/context/detect.js.map +1 -1
  110. package/dist/context/findApps.js +22 -8
  111. package/dist/context/findApps.js.map +1 -1
  112. package/dist/context/projectRoot.js +174 -19
  113. package/dist/context/projectRoot.js.map +1 -1
  114. package/dist/context/scan.js +1 -1
  115. package/dist/context/scan.js.map +1 -1
  116. package/dist/core/capabilityGroups.js +90 -0
  117. package/dist/core/capabilityGroups.js.map +1 -0
  118. package/dist/core/target.js +10 -8
  119. package/dist/core/target.js.map +1 -1
  120. package/dist/core/targetPlan.js +160 -39
  121. package/dist/core/targetPlan.js.map +1 -1
  122. package/dist/drivers/DirectDriver.js +317 -43
  123. package/dist/drivers/DirectDriver.js.map +1 -1
  124. package/dist/drivers/SimctlDriver.js +124 -8
  125. package/dist/drivers/SimctlDriver.js.map +1 -1
  126. package/dist/drivers/WdaDriver.js +365 -55
  127. package/dist/drivers/WdaDriver.js.map +1 -1
  128. package/dist/explore/candidates.js +7 -3
  129. package/dist/explore/candidates.js.map +1 -1
  130. package/dist/explore/graph.js +15 -6
  131. package/dist/explore/graph.js.map +1 -1
  132. package/dist/explore/memory.js +4 -1
  133. package/dist/explore/memory.js.map +1 -1
  134. package/dist/explore/planner.js +54 -9
  135. package/dist/explore/planner.js.map +1 -1
  136. package/dist/explore/policy.js +11 -6
  137. package/dist/explore/policy.js.map +1 -1
  138. package/dist/explore/runner.js +363 -190
  139. package/dist/explore/runner.js.map +1 -1
  140. package/dist/explore/signatures.js +4 -2
  141. package/dist/explore/signatures.js.map +1 -1
  142. package/dist/explore/suite.js +3 -1
  143. package/dist/explore/suite.js.map +1 -1
  144. package/dist/featureTesting/executionBootstrap.js +137 -29
  145. package/dist/featureTesting/executionBootstrap.js.map +1 -1
  146. package/dist/featureTesting/featureMap.js +6 -3
  147. package/dist/featureTesting/featureMap.js.map +1 -1
  148. package/dist/featureTesting/featureScope.js +101 -20
  149. package/dist/featureTesting/featureScope.js.map +1 -1
  150. package/dist/featureTesting/mapFeatureScope.js +44 -15
  151. package/dist/featureTesting/mapFeatureScope.js.map +1 -1
  152. package/dist/featureTesting/objectiveModel.js +15 -11
  153. package/dist/featureTesting/objectiveModel.js.map +1 -1
  154. package/dist/featureTesting/resultMerge.js +16 -8
  155. package/dist/featureTesting/resultMerge.js.map +1 -1
  156. package/dist/featureTesting/sources.js +8 -5
  157. package/dist/featureTesting/sources.js.map +1 -1
  158. package/dist/featureTesting/suiteBridge.js +8 -2
  159. package/dist/featureTesting/suiteBridge.js.map +1 -1
  160. package/dist/featureTesting/synonyms.js +32 -4
  161. package/dist/featureTesting/synonyms.js.map +1 -1
  162. package/dist/featureTesting/testCaseFactory.js +27 -15
  163. package/dist/featureTesting/testCaseFactory.js.map +1 -1
  164. package/dist/featureTesting/testPlan.js +34 -12
  165. package/dist/featureTesting/testPlan.js.map +1 -1
  166. package/dist/firstRun/authStateMachine.js +1 -1
  167. package/dist/firstRun/authStateMachine.js.map +1 -1
  168. package/dist/firstRun/classifyScreen.js +9 -6
  169. package/dist/firstRun/classifyScreen.js.map +1 -1
  170. package/dist/firstRun/firstRunPlanner.js +16 -13
  171. package/dist/firstRun/firstRunPlanner.js.map +1 -1
  172. package/dist/firstRun/firstRunRunner.js +92 -31
  173. package/dist/firstRun/firstRunRunner.js.map +1 -1
  174. package/dist/firstRun/generatedDataPolicy.js +25 -15
  175. package/dist/firstRun/generatedDataPolicy.js.map +1 -1
  176. package/dist/firstRun/inputPlanner.js +45 -11
  177. package/dist/firstRun/inputPlanner.js.map +1 -1
  178. package/dist/firstRun/onboardingStateMachine.js +1 -1
  179. package/dist/firstRun/onboardingStateMachine.js.map +1 -1
  180. package/dist/firstRun/paywallPolicy.js +3 -3
  181. package/dist/firstRun/paywallPolicy.js.map +1 -1
  182. package/dist/firstRun/types.js +1 -1
  183. package/dist/firstRun/types.js.map +1 -1
  184. package/dist/fixtures/catalog.js +72 -9
  185. package/dist/fixtures/catalog.js.map +1 -1
  186. package/dist/fixtures/load.js +50 -0
  187. package/dist/fixtures/load.js.map +1 -0
  188. package/dist/flows/discover.js +2 -2
  189. package/dist/flows/discover.js.map +1 -1
  190. package/dist/flows/generate.js +68 -17
  191. package/dist/flows/generate.js.map +1 -1
  192. package/dist/flows/lint.js +88 -14
  193. package/dist/flows/lint.js.map +1 -1
  194. package/dist/flows/pack.js +21 -5
  195. package/dist/flows/pack.js.map +1 -1
  196. package/dist/flows/paths.js +57 -0
  197. package/dist/flows/paths.js.map +1 -0
  198. package/dist/flows/repair.js +176 -37
  199. package/dist/flows/repair.js.map +1 -1
  200. package/dist/flows/run.js +308 -99
  201. package/dist/flows/run.js.map +1 -1
  202. package/dist/flows/schema.js +107 -25
  203. package/dist/flows/schema.js.map +1 -1
  204. package/dist/flows/seedExec.js +8 -4
  205. package/dist/flows/seedExec.js.map +1 -1
  206. package/dist/flows/templates.js +5 -5
  207. package/dist/index.js +50 -8
  208. package/dist/index.js.map +1 -1
  209. package/dist/ios/signing.js +32 -3
  210. package/dist/ios/signing.js.map +1 -1
  211. package/dist/issues/classify.js +28 -20
  212. package/dist/issues/classify.js.map +1 -1
  213. package/dist/issues/fingerprint.js +35 -9
  214. package/dist/issues/fingerprint.js.map +1 -1
  215. package/dist/issues/index.js +93 -46
  216. package/dist/issues/index.js.map +1 -1
  217. package/dist/issues/metrics.js +6 -5
  218. package/dist/issues/metrics.js.map +1 -1
  219. package/dist/issues/recurrence.js +35 -8
  220. package/dist/issues/recurrence.js.map +1 -1
  221. package/dist/issues/report.js +12 -8
  222. package/dist/issues/report.js.map +1 -1
  223. package/dist/issues/reportBridge.js +40 -9
  224. package/dist/issues/reportBridge.js.map +1 -1
  225. package/dist/issues/schema.js +2 -2
  226. package/dist/issues/schema.js.map +1 -1
  227. package/dist/issues/sourceRevision.js +2 -2
  228. package/dist/issues/sourceRevision.js.map +1 -1
  229. package/dist/issues/store.js +110 -32
  230. package/dist/issues/store.js.map +1 -1
  231. package/dist/lib/abortScope.js +48 -0
  232. package/dist/lib/abortScope.js.map +1 -0
  233. package/dist/lib/android.js +84 -8
  234. package/dist/lib/android.js.map +1 -1
  235. package/dist/lib/coordSpace.js +1 -1
  236. package/dist/lib/coordSpace.js.map +1 -1
  237. package/dist/lib/device.js +53 -12
  238. package/dist/lib/device.js.map +1 -1
  239. package/dist/lib/gestures.js +141 -0
  240. package/dist/lib/gestures.js.map +1 -0
  241. package/dist/lib/gitignore.js +4 -3
  242. package/dist/lib/gitignore.js.map +1 -1
  243. package/dist/lib/image.js +12 -3
  244. package/dist/lib/image.js.map +1 -1
  245. package/dist/lib/lockfile.js +399 -0
  246. package/dist/lib/lockfile.js.map +1 -0
  247. package/dist/lib/needsInput.js +9 -6
  248. package/dist/lib/needsInput.js.map +1 -1
  249. package/dist/lib/png.js +4 -3
  250. package/dist/lib/png.js.map +1 -1
  251. package/dist/lib/redact.js +170 -9
  252. package/dist/lib/redact.js.map +1 -1
  253. package/dist/lib/result.js +94 -10
  254. package/dist/lib/result.js.map +1 -1
  255. package/dist/lib/schemaHash.js +7 -5
  256. package/dist/lib/schemaHash.js.map +1 -1
  257. package/dist/lib/sensitive.js +6 -3
  258. package/dist/lib/sensitive.js.map +1 -1
  259. package/dist/lib/simctl.js +3 -3
  260. package/dist/lib/simctl.js.map +1 -1
  261. package/dist/lib/spawn.js +78 -17
  262. package/dist/lib/spawn.js.map +1 -1
  263. package/dist/lib/toolAnnotations.js +114 -0
  264. package/dist/lib/toolAnnotations.js.map +1 -0
  265. package/dist/lib/wda.js +321 -25
  266. package/dist/lib/wda.js.map +1 -1
  267. package/dist/lib/wdaConfig.js +12 -5
  268. package/dist/lib/wdaConfig.js.map +1 -1
  269. package/dist/lib/wdaTune.js +52 -23
  270. package/dist/lib/wdaTune.js.map +1 -1
  271. package/dist/mobileAudit/checks.js +150 -28
  272. package/dist/mobileAudit/checks.js.map +1 -1
  273. package/dist/mobileAudit/evidence.js +4 -4
  274. package/dist/mobileAudit/evidence.js.map +1 -1
  275. package/dist/mobileAudit/profiles.js +121 -20
  276. package/dist/mobileAudit/profiles.js.map +1 -1
  277. package/dist/mobileAudit/results.js +9 -4
  278. package/dist/mobileAudit/results.js.map +1 -1
  279. package/dist/mobileAudit/runner.js +214 -35
  280. package/dist/mobileAudit/runner.js.map +1 -1
  281. package/dist/oracle/auth.js +1 -1
  282. package/dist/oracle/auth.js.map +1 -1
  283. package/dist/oracle/failures.js +1085 -145
  284. package/dist/oracle/failures.js.map +1 -1
  285. package/dist/oracle/health.js +148 -26
  286. package/dist/oracle/health.js.map +1 -1
  287. package/dist/oracle/locator.js +148 -19
  288. package/dist/oracle/locator.js.map +1 -1
  289. package/dist/oracle/record.js +3 -3
  290. package/dist/oracle/record.js.map +1 -1
  291. package/dist/orchestration/envelope.js +2 -2
  292. package/dist/orchestration/envelope.js.map +1 -1
  293. package/dist/orchestration/goal.js +7 -13
  294. package/dist/orchestration/goal.js.map +1 -1
  295. package/dist/orchestration/testThis/execute.js +167 -0
  296. package/dist/orchestration/testThis/execute.js.map +1 -0
  297. package/dist/orchestration/testThis/pipeline.js +413 -0
  298. package/dist/orchestration/testThis/pipeline.js.map +1 -0
  299. package/dist/orchestration/testThis/plan.js +519 -0
  300. package/dist/orchestration/testThis/plan.js.map +1 -0
  301. package/dist/orchestration/testThis/sessionIntent.js +72 -0
  302. package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
  303. package/dist/orchestration/testThis/terminal.js +136 -0
  304. package/dist/orchestration/testThis/terminal.js.map +1 -0
  305. package/dist/orchestration/testThis/types.js +12 -0
  306. package/dist/orchestration/testThis/types.js.map +1 -0
  307. package/dist/plan/plan.js +9 -9
  308. package/dist/plan/plan.js.map +1 -1
  309. package/dist/prompts/index.js +24 -24
  310. package/dist/prompts/index.js.map +1 -1
  311. package/dist/report/coverage.js +0 -1
  312. package/dist/report/coverage.js.map +1 -1
  313. package/dist/report/evidence.js.map +1 -1
  314. package/dist/report/export.js +449 -72
  315. package/dist/report/export.js.map +1 -1
  316. package/dist/report/findingsDedupe.js +41 -0
  317. package/dist/report/findingsDedupe.js.map +1 -0
  318. package/dist/report/flake.js +13 -14
  319. package/dist/report/flake.js.map +1 -1
  320. package/dist/report/history.js +72 -38
  321. package/dist/report/history.js.map +1 -1
  322. package/dist/report/policy.js +18 -7
  323. package/dist/report/policy.js.map +1 -1
  324. package/dist/report/qaLevel.js +10 -16
  325. package/dist/report/qaLevel.js.map +1 -1
  326. package/dist/report/readiness.js +42 -12
  327. package/dist/report/readiness.js.map +1 -1
  328. package/dist/report/sarifSources.js +160 -0
  329. package/dist/report/sarifSources.js.map +1 -0
  330. package/dist/report/summary.js +2 -2
  331. package/dist/report/summary.js.map +1 -1
  332. package/dist/report/testCatalog.js +4 -4
  333. package/dist/report/testCatalog.js.map +1 -1
  334. package/dist/report/timing.js +23 -23
  335. package/dist/report/timing.js.map +1 -1
  336. package/dist/report/toolHealth.js +124 -0
  337. package/dist/report/toolHealth.js.map +1 -0
  338. package/dist/server.js +501 -69
  339. package/dist/server.js.map +1 -1
  340. package/dist/services/automationGenerate.js +8 -2
  341. package/dist/services/automationGenerate.js.map +1 -1
  342. package/dist/services/build.js +10 -4
  343. package/dist/services/build.js.map +1 -1
  344. package/dist/services/flowGenerate.js +75 -0
  345. package/dist/services/flowGenerate.js.map +1 -0
  346. package/dist/services/preflight.js +40 -8
  347. package/dist/services/preflight.js.map +1 -1
  348. package/dist/services/prepareAndroid.js +92 -18
  349. package/dist/services/prepareAndroid.js.map +1 -1
  350. package/dist/services/prepareIos.js +94 -17
  351. package/dist/services/prepareIos.js.map +1 -1
  352. package/dist/services/report.js +271 -80
  353. package/dist/services/report.js.map +1 -1
  354. package/dist/services/smoke.js +68 -22
  355. package/dist/services/smoke.js.map +1 -1
  356. package/dist/services/suiteGenerate.js +43 -6
  357. package/dist/services/suiteGenerate.js.map +1 -1
  358. package/dist/services/testSuiteKnowledge.js +78 -33
  359. package/dist/services/testSuiteKnowledge.js.map +1 -1
  360. package/dist/session/attach.js +284 -4
  361. package/dist/session/attach.js.map +1 -1
  362. package/dist/session/processRegistry.js +433 -0
  363. package/dist/session/processRegistry.js.map +1 -0
  364. package/dist/session/progress.js +1 -1
  365. package/dist/session/progress.js.map +1 -1
  366. package/dist/session/retention.js +201 -0
  367. package/dist/session/retention.js.map +1 -0
  368. package/dist/session/store.js +459 -59
  369. package/dist/session/store.js.map +1 -1
  370. package/dist/snapshot/overlays.js +60 -10
  371. package/dist/snapshot/overlays.js.map +1 -1
  372. package/dist/snapshot/parse.js +30 -12
  373. package/dist/snapshot/parse.js.map +1 -1
  374. package/dist/snapshot/present.js +36 -6
  375. package/dist/snapshot/present.js.map +1 -1
  376. package/dist/snapshot/settle.js +39 -9
  377. package/dist/snapshot/settle.js.map +1 -1
  378. package/dist/state/consent.js +99 -0
  379. package/dist/state/consent.js.map +1 -0
  380. package/dist/state/profile.js +82 -11
  381. package/dist/state/profile.js.map +1 -1
  382. package/dist/suite/compile.js +15 -6
  383. package/dist/suite/compile.js.map +1 -1
  384. package/dist/suite/lint.js +22 -4
  385. package/dist/suite/lint.js.map +1 -1
  386. package/dist/suite/pom.js +75 -44
  387. package/dist/suite/pom.js.map +1 -1
  388. package/dist/suite/secretGuard.js +266 -0
  389. package/dist/suite/secretGuard.js.map +1 -0
  390. package/dist/suite/testcase.js +15 -11
  391. package/dist/suite/testcase.js.map +1 -1
  392. package/dist/testSuite/exporter.js +7 -3
  393. package/dist/testSuite/exporter.js.map +1 -1
  394. package/dist/testSuite/generator.js +43 -14
  395. package/dist/testSuite/generator.js.map +1 -1
  396. package/dist/testSuite/history.js +1 -1
  397. package/dist/testSuite/history.js.map +1 -1
  398. package/dist/testSuite/issueLinks.js +3 -3
  399. package/dist/testSuite/issueLinks.js.map +1 -1
  400. package/dist/testSuite/lint.js +4 -4
  401. package/dist/testSuite/lint.js.map +1 -1
  402. package/dist/testSuite/merge.js +13 -7
  403. package/dist/testSuite/merge.js.map +1 -1
  404. package/dist/testSuite/schema.js +21 -16
  405. package/dist/testSuite/schema.js.map +1 -1
  406. package/dist/testSuite/store.js +12 -4
  407. package/dist/testSuite/store.js.map +1 -1
  408. package/dist/testSuite/traceability.js +2 -2
  409. package/dist/testSuite/traceability.js.map +1 -1
  410. package/dist/tools/act.js +868 -174
  411. package/dist/tools/act.js.map +1 -1
  412. package/dist/tools/agent.js +521 -112
  413. package/dist/tools/agent.js.map +1 -1
  414. package/dist/tools/appControl.js +82 -19
  415. package/dist/tools/appControl.js.map +1 -1
  416. package/dist/tools/appMap.js +393 -189
  417. package/dist/tools/appMap.js.map +1 -1
  418. package/dist/tools/build.js +92 -51
  419. package/dist/tools/build.js.map +1 -1
  420. package/dist/tools/bundletool.js +141 -40
  421. package/dist/tools/bundletool.js.map +1 -1
  422. package/dist/tools/clearOverlay.js +98 -18
  423. package/dist/tools/clearOverlay.js.map +1 -1
  424. package/dist/tools/device.js +108 -19
  425. package/dist/tools/device.js.map +1 -1
  426. package/dist/tools/doctor.js +98 -35
  427. package/dist/tools/doctor.js.map +1 -1
  428. package/dist/tools/explore.js +110 -42
  429. package/dist/tools/explore.js.map +1 -1
  430. package/dist/tools/featureTesting.js +152 -130
  431. package/dist/tools/featureTesting.js.map +1 -1
  432. package/dist/tools/firstRun.js +94 -66
  433. package/dist/tools/firstRun.js.map +1 -1
  434. package/dist/tools/flow.js +347 -132
  435. package/dist/tools/flow.js.map +1 -1
  436. package/dist/tools/flowRepair.js +42 -10
  437. package/dist/tools/flowRepair.js.map +1 -1
  438. package/dist/tools/generate.js +199 -0
  439. package/dist/tools/generate.js.map +1 -0
  440. package/dist/tools/getArtifact.js +37 -8
  441. package/dist/tools/getArtifact.js.map +1 -1
  442. package/dist/tools/health.js +17 -12
  443. package/dist/tools/health.js.map +1 -1
  444. package/dist/tools/ios.js +148 -194
  445. package/dist/tools/ios.js.map +1 -1
  446. package/dist/tools/issues.js +256 -171
  447. package/dist/tools/issues.js.map +1 -1
  448. package/dist/tools/jobs.js +55 -11
  449. package/dist/tools/jobs.js.map +1 -1
  450. package/dist/tools/metro.js +84 -38
  451. package/dist/tools/metro.js.map +1 -1
  452. package/dist/tools/mobileAudit.js +83 -26
  453. package/dist/tools/mobileAudit.js.map +1 -1
  454. package/dist/tools/network.js +36 -14
  455. package/dist/tools/network.js.map +1 -1
  456. package/dist/tools/note.js +31 -17
  457. package/dist/tools/note.js.map +1 -1
  458. package/dist/tools/prepareIosTarget.js +31 -14
  459. package/dist/tools/prepareIosTarget.js.map +1 -1
  460. package/dist/tools/prepareTarget.js +193 -47
  461. package/dist/tools/prepareTarget.js.map +1 -1
  462. package/dist/tools/report.js +16 -8
  463. package/dist/tools/report.js.map +1 -1
  464. package/dist/tools/resolveArtifact.js +12 -12
  465. package/dist/tools/resolveArtifact.js.map +1 -1
  466. package/dist/tools/resolveTarget.js +81 -18
  467. package/dist/tools/resolveTarget.js.map +1 -1
  468. package/dist/tools/screenRecord.js +85 -20
  469. package/dist/tools/screenRecord.js.map +1 -1
  470. package/dist/tools/screenshot.js +42 -18
  471. package/dist/tools/screenshot.js.map +1 -1
  472. package/dist/tools/smoke.js +29 -12
  473. package/dist/tools/smoke.js.map +1 -1
  474. package/dist/tools/snapshot.js +157 -107
  475. package/dist/tools/snapshot.js.map +1 -1
  476. package/dist/tools/startSession.js +117 -84
  477. package/dist/tools/startSession.js.map +1 -1
  478. package/dist/tools/suite.js +391 -310
  479. package/dist/tools/suite.js.map +1 -1
  480. package/dist/tools/testSuite.js +112 -36
  481. package/dist/tools/testSuite.js.map +1 -1
  482. package/dist/tools/testThis.js +35 -802
  483. package/dist/tools/testThis.js.map +1 -1
  484. package/dist/tools/visual.js +698 -116
  485. package/dist/tools/visual.js.map +1 -1
  486. package/dist/tools/wait.js +9 -23
  487. package/dist/tools/wait.js.map +1 -1
  488. package/dist/tools/wda.js +312 -54
  489. package/dist/tools/wda.js.map +1 -1
  490. package/dist/version.js +37 -64
  491. package/dist/version.js.map +1 -1
  492. package/dist/visual/ocr.js +65 -8
  493. package/dist/visual/ocr.js.map +1 -1
  494. package/dist/visual/provider.js +87 -15
  495. package/dist/visual/provider.js.map +1 -1
  496. package/docs/README.md +24 -10
  497. package/docs/ci-reports.md +328 -0
  498. package/docs/concepts.md +227 -0
  499. package/docs/flows.md +153 -0
  500. package/docs/mcp-server.md +210 -104
  501. package/docs/physical-devices.md +84 -0
  502. package/docs/tools.md +808 -217
  503. package/package.json +16 -6
  504. package/dist/appMap/diff.js +0 -60
  505. package/dist/appMap/diff.js.map +0 -1
  506. package/dist/automation/maestroIr.js +0 -282
  507. package/dist/automation/maestroIr.js.map +0 -1
  508. package/dist/interop/maestro.js +0 -151
  509. package/dist/interop/maestro.js.map +0 -1
  510. package/dist/tools/assertVisual.js +0 -74
  511. package/dist/tools/assertVisual.js.map +0 -1
  512. package/dist/tools/automationGenerate.js +0 -394
  513. package/dist/tools/automationGenerate.js.map +0 -1
  514. package/dist/tools/capabilities.js +0 -209
  515. package/dist/tools/capabilities.js.map +0 -1
  516. package/dist/tools/detectContext.js +0 -41
  517. package/dist/tools/detectContext.js.map +0 -1
  518. package/dist/tools/flowGenerate.js +0 -55
  519. package/dist/tools/flowGenerate.js.map +0 -1
  520. package/dist/tools/history.js +0 -56
  521. package/dist/tools/history.js.map +0 -1
  522. package/dist/tools/idling.js +0 -104
  523. package/dist/tools/idling.js.map +0 -1
  524. package/dist/tools/inputCapabilities.js +0 -30
  525. package/dist/tools/inputCapabilities.js.map +0 -1
  526. package/dist/tools/locator.js +0 -57
  527. package/dist/tools/locator.js.map +0 -1
  528. package/dist/tools/maestro.js +0 -78
  529. package/dist/tools/maestro.js.map +0 -1
  530. package/dist/tools/permissions.js +0 -149
  531. package/dist/tools/permissions.js.map +0 -1
  532. package/dist/tools/plan.js +0 -49
  533. package/dist/tools/plan.js.map +0 -1
  534. package/dist/tools/screenInfo.js +0 -70
  535. package/dist/tools/screenInfo.js.map +0 -1
  536. package/dist/tools/seed.js +0 -101
  537. package/dist/tools/seed.js.map +0 -1
  538. package/dist/tools/state.js +0 -170
  539. package/dist/tools/state.js.map +0 -1
  540. package/dist/tools/visualText.js +0 -61
  541. package/dist/tools/visualText.js.map +0 -1
package/dist/suite/pom.js CHANGED
@@ -1,9 +1,11 @@
1
- // Screen/Page Object Model generation (roadmap §6) — turn a linear action recording into a
1
+ // Screen/Page Object Model generation: turn a linear action recording into a
2
2
  // MAINTAINABLE suite where selectors live in page objects and tests reference them by name,
3
- // instead of duplicating raw selectors. PURE: no filesystem, no device — callers serialize the
3
+ // instead of duplicating raw selectors. PURE: no filesystem, no device. Callers serialize the
4
4
  // returned files. Also produces a locator audit (durable vs brittle) with app-code remediation,
5
5
  // because durable automation is the point (§2.4 / §6 locator policy).
6
6
  import { stringify } from 'yaml';
7
+ import { secretSafeActions, secretVarName } from './secretGuard.js';
8
+ import { asciiFold } from '../automationGen/identifiers.js';
7
9
  function durabilityOf(kind) {
8
10
  switch (kind) {
9
11
  case 'accessibility_id':
@@ -19,56 +21,52 @@ function durabilityOf(kind) {
19
21
  }
20
22
  }
21
23
  function pascal(s) {
22
- const parts = s
24
+ const parts = asciiFold(s)
23
25
  .replace(/[^A-Za-z0-9]+/g, ' ')
24
26
  .trim()
25
27
  .split(/\s+/)
26
28
  .filter(Boolean);
27
29
  return parts.map((p) => p[0].toUpperCase() + p.slice(1)).join('') || 'Screen';
28
30
  }
31
+ /** camelCase element name. Recorded copy can be non-ASCII-only ("登录") or start with a digit
32
+ * ("2FA code"): the former gets the stable fallback `element` (deduped element2, element3, …),
33
+ * the latter an `el` prefix so every downstream identifier (YAML key, JS field, Python attr) is
34
+ * a valid name. Keyword clashes (continue/class/return) are resolved per language by the
35
+ * emitters (automationGen/identifiers.ts). */
29
36
  function camel(s) {
30
- const p = pascal(s);
31
- return p ? p[0].toLowerCase() + p.slice(1) : 'el';
37
+ const p = asciiFold(s)
38
+ .replace(/[^A-Za-z0-9]+/g, ' ')
39
+ .trim()
40
+ .split(/\s+/)
41
+ .filter(Boolean)
42
+ .map((w) => w[0].toUpperCase() + w.slice(1))
43
+ .join('');
44
+ if (!p)
45
+ return 'element';
46
+ const c = p[0].toLowerCase() + p.slice(1);
47
+ return /^[0-9]/.test(c) ? `el${p}` : c;
32
48
  }
33
49
  /** Page name from a foreground-owner string: strip android package, take a readable segment. */
34
50
  function pageNameFromScreen(screen, index) {
35
51
  if (!screen)
36
52
  return `Screen${index + 1}Page`;
37
- // android: com.app/.LoginActivity → LoginActivity → LoginPage
53
+ // android: com.app/.LoginActivity > LoginActivity > LoginPage
38
54
  const activity = screen.includes('/') ? screen.split('/').pop() : screen.split('.').pop();
39
55
  const base = activity.replace(/Activity$|ViewController$|Screen$/i, '');
40
56
  return `${pascal(base || activity)}Page`;
41
57
  }
42
- /** Derive a meaningful secret variable name (P0.5) — reuses an existing ${VAR} the agent set,
43
- * else names from the field (password/otp/token), else a numbered SWIPIUM_SECRET_N. */
44
- function secretVarFor(a, index) {
45
- const existing = a.text?.match(/^\$\{([^}]+)\}$/);
46
- // Reuse an already-meaningful var; but rename a generic recorder placeholder (SECRET_N).
47
- if (existing && !/^SECRET_\d+$/i.test(existing[1]))
48
- return existing[1];
49
- const key = `${a.selector ?? ''}`.toLowerCase();
50
- if (/pass/.test(key))
51
- return 'SWIPIUM_TEST_PASSWORD';
52
- if (/otp|code|2fa|mfa/.test(key))
53
- return 'SWIPIUM_TEST_OTP';
54
- if (/token|api[_-]?key/.test(key))
55
- return 'SWIPIUM_TEST_TOKEN';
56
- if (/pin/.test(key))
57
- return 'SWIPIUM_TEST_PIN';
58
- return `SWIPIUM_SECRET_${index}`;
59
- }
60
58
  function remediationFor(el) {
61
59
  if (el.selectorKind === 'coords') {
62
- return `add a testID (RN) / accessibilityIdentifier (iOS) / android:contentDescription / Flutter Key + Semantics(identifier:) to the tapped element${el.screen ? ` on ${el.screen}` : ''} — it has no durable locator`;
60
+ return `add a testID (RN) / accessibilityIdentifier (iOS) / android:contentDescription / Flutter Key + Semantics(identifier:) to the tapped element${el.screen ? ` on ${el.screen}` : ''}. It has no durable locator`;
63
61
  }
64
62
  if (el.selectorKind === 'text') {
65
- return `text selector "${el.selector}" is locale/copy-fragile — add an accessibilityIdentifier/testID (or a Flutter Key/Semantics label) for CI-stable replay`;
63
+ return `text selector "${el.selector}" is locale/copy-fragile. Add an accessibilityIdentifier/testID (or a Flutter Key/Semantics label) for CI-stable replay`;
66
64
  }
67
65
  if (el.selectorKind === 'name') {
68
- return `iOS name selector "${el.selector}" can drift with labels/localization — add an accessibilityIdentifier for CI-stable replay`;
66
+ return `iOS name selector "${el.selector}" can drift with labels/localization. Add an accessibilityIdentifier for CI-stable replay`;
69
67
  }
70
68
  if (el.selectorKind === 'predicate' || el.selectorKind === 'class_chain') {
71
- return `iOS ${el.selectorKind} selector "${el.selector}" is a fallback locator — prefer accessibilityIdentifier and avoid XPath-style hierarchy dependence`;
69
+ return `iOS ${el.selectorKind} selector "${el.selector}" is a fallback locator. Prefer accessibilityIdentifier and avoid XPath-style hierarchy dependence`;
72
70
  }
73
71
  return undefined;
74
72
  }
@@ -88,6 +86,9 @@ function auditCodeFor(el) {
88
86
  * - audits every locator's durability with app-code remediation.
89
87
  */
90
88
  export function generatePom(actions, opts) {
89
+ // Defense in depth: a registered secret typed into a field the UI did not flag as secure was
90
+ // recorded as a literal. Rewrite it as a secret step before anything is emitted.
91
+ actions = secretSafeActions(actions, opts.secrets, opts.inputs).actions;
91
92
  // 1. segment into pages by recorded screen identity. This keeps signup, onboarding, paywall,
92
93
  // and home actions in separate page objects even when the foreground owner is the same app.
93
94
  const pages = [];
@@ -127,19 +128,19 @@ export function generatePom(actions, opts) {
127
128
  const variables = [];
128
129
  let secretCount = 0;
129
130
  const ensureElement = (page, a) => {
130
- // Coordinate-only actions have no nameable element — keep as inline coords in the step.
131
+ // Coordinate-only actions have no nameable element, so keep as inline coords in the step.
131
132
  if (!a.selector || a.selectorKind === 'coords')
132
133
  return undefined;
133
134
  const baseName = camel(a.selector);
134
135
  let name = baseName || 'el';
135
136
  // Reuse if an element with the same selector already exists on this page.
136
- const match = page.elements.find((e) => e.selector === a.selector && e.selectorKind === a.selectorKind);
137
+ const match = page.elements.find((e) => e.selector === a.selector && e.selectorKind === (a.selectorKind ?? 'text'));
137
138
  if (match)
138
139
  return match.name;
139
140
  let n = 2;
140
141
  while (page.elements.some((e) => e.name === name))
141
142
  name = `${baseName}${n++}`;
142
- const durability = durabilityOf(a.selectorKind);
143
+ const durability = durabilityOf(a.selectorKind ?? 'text');
143
144
  const readinessCode = auditCodeFor({ selectorKind: a.selectorKind ?? 'text' });
144
145
  const el = {
145
146
  name,
@@ -162,7 +163,12 @@ export function generatePom(actions, opts) {
162
163
  case 'clear': {
163
164
  const element = ensureElement(page, a);
164
165
  if (element)
165
- steps.push({ page: page.name, element, action: a.action === 'clear' ? 'inputText' : 'tap', ...(a.action === 'clear' ? { text: '' } : {}) });
166
+ steps.push({
167
+ page: page.name,
168
+ element,
169
+ action: a.action === 'clear' ? 'inputText' : 'tap',
170
+ ...(a.action === 'clear' ? { text: '' } : {}),
171
+ });
166
172
  else
167
173
  steps.push({ page: page.name, action: 'tap', coords: [a.x ?? 0, a.y ?? 0] });
168
174
  break;
@@ -171,8 +177,8 @@ export function generatePom(actions, opts) {
171
177
  const element = ensureElement(page, a);
172
178
  let text = a.text ?? '';
173
179
  if (a.secret) {
174
- // Secret values become ${SWIPIUM_TEST_*} variables — never the raw value (P0.5).
175
- const v = secretVarFor(a, ++secretCount);
180
+ // Secret values become ${SWIPIUM_TEST_*} variables, never the raw value (P0.5).
181
+ const v = secretVarName(a, ++secretCount);
176
182
  text = `\${${v}}`;
177
183
  variables.push(v);
178
184
  }
@@ -191,18 +197,22 @@ export function generatePom(actions, opts) {
191
197
  steps.push({ page: page.name, action: 'swipe', direction: a.direction ?? 'up' });
192
198
  break;
193
199
  case 'scroll': {
200
+ // A recorded scroll's direction is the CONTENT direction (scroll down = reveal content below).
194
201
  const element = ensureElement(page, a);
195
202
  if (element)
196
- steps.push({ page: page.name, element, action: 'scrollTo' });
203
+ steps.push({ page: page.name, element, action: 'scrollTo', direction: a.direction ?? 'down' });
204
+ // No target: replay as the swipe qa_act performed: scroll down = FINGER swipes up (act.ts).
197
205
  else
198
- steps.push({ page: page.name, action: 'swipe', direction: a.direction ?? 'up' });
206
+ steps.push({ page: page.name, action: 'swipe', direction: SCROLL_FINGER[a.direction ?? 'down'] ?? 'up' });
199
207
  break;
200
208
  }
201
209
  case 'open_url':
202
210
  steps.push({ page: page.name, action: 'openUrl', url: a.url ?? '' });
203
211
  break;
204
212
  case 'assert_visual':
205
- steps.push({ page: page.name, action: 'assertVisible', text: a.assertion ?? a.selector });
213
+ // Free-form visual judgement ("Settings home shows General row") is NOT on-screen text, so it
214
+ // must never become assertTextVisible(...). Kept as a clearly-marked manual visual checkpoint.
215
+ steps.push({ page: page.name, action: 'visualCheck', text: a.assertion ?? a.selector ?? 'visual checkpoint' });
206
216
  break;
207
217
  }
208
218
  }
@@ -210,13 +220,27 @@ export function generatePom(actions, opts) {
210
220
  const entries = [];
211
221
  for (const p of pages) {
212
222
  for (const e of p.elements) {
213
- entries.push({ page: p.name, element: e.name, durability: e.durability, selectorKind: e.selectorKind, code: e.readinessCode, remediation: e.remediation });
223
+ entries.push({
224
+ page: p.name,
225
+ element: e.name,
226
+ durability: e.durability,
227
+ selectorKind: e.selectorKind,
228
+ code: e.readinessCode,
229
+ remediation: e.remediation,
230
+ });
214
231
  }
215
232
  }
216
233
  // coordinate-only steps also count against durability.
217
234
  for (const s of steps) {
218
235
  if (!s.element && s.coords)
219
- entries.push({ page: s.page, element: `(coords ${s.coords[0]},${s.coords[1]})`, durability: 'brittle', selectorKind: 'coords', code: 'COORDINATE_ONLY', remediation: remediationFor({ selectorKind: 'coords' }) });
236
+ entries.push({
237
+ page: s.page,
238
+ element: `(coords ${s.coords[0]},${s.coords[1]})`,
239
+ durability: 'brittle',
240
+ selectorKind: 'coords',
241
+ code: 'COORDINATE_ONLY',
242
+ remediation: remediationFor({ selectorKind: 'coords' }),
243
+ });
220
244
  }
221
245
  const durable = entries.filter((e) => e.durability === 'durable').length;
222
246
  const semi = entries.filter((e) => e.durability === 'semi').length;
@@ -251,7 +275,10 @@ export function generatePom(actions, opts) {
251
275
  elementsYaml[e.name] = ev;
252
276
  }
253
277
  const pageObj = { name: p.name, platforms: ['android', 'ios'], screen: p.screen ?? undefined, elements: elementsYaml };
254
- files.push({ path: `pages/${kebab(p.name)}.page.yaml`, content: `# Swipium page object — review before committing.\n${stringify(pageObj)}` });
278
+ files.push({
279
+ path: `pages/${kebab(p.name)}.page.yaml`,
280
+ content: `# Swipium page object. Review before committing.\n${stringify(pageObj)}`,
281
+ });
255
282
  }
256
283
  const testObj = { name: opts.name };
257
284
  if (opts.appId)
@@ -261,8 +288,8 @@ export function generatePom(actions, opts) {
261
288
  testObj.uses = pages.map((p) => `pages/${kebab(p.name)}.page.yaml`);
262
289
  testObj.steps = steps.map(serializeStep);
263
290
  const testHeader = [
264
- '# Swipium test (POM) — selectors live in page objects; this test references them by name.',
265
- ...(variables.length ? [`# variables — provide via qa_flow_run { variables }: ${variables.join(', ')}`] : []),
291
+ '# Swipium test (POM). Selectors live in page objects; this test references them by name.',
292
+ ...(variables.length ? [`# variables (provide via qa_flow_run { variables }): ${variables.join(', ')}`] : []),
266
293
  `# locator durability: ${durable} durable / ${semi} semi / ${brittle} brittle (${audit.brittlePct}% brittle)`,
267
294
  ].join('\n');
268
295
  files.push({ path: `tests/${kebab(opts.name)}.smoke.yaml`, content: `${testHeader}\n${stringify(testObj)}` });
@@ -283,15 +310,19 @@ function serializeStep(s) {
283
310
  case 'swipe':
284
311
  return { ...ref, action: 'swipe', direction: s.direction };
285
312
  case 'scrollTo':
286
- return { ...ref, action: 'scrollTo' };
313
+ return { ...ref, action: 'scrollTo', ...(s.direction ? { direction: s.direction } : {}) };
287
314
  case 'openUrl':
288
315
  return { ...ref, action: 'openUrl', url: s.url };
289
316
  case 'assertVisible':
290
317
  return { ...ref, action: 'assertVisible', text: s.text };
318
+ case 'visualCheck':
319
+ return { ...ref, action: 'visualCheck', text: s.text, manual: true };
291
320
  }
292
321
  }
322
+ /** Content scroll direction > the finger swipe qa_act performs for it (mirrors tools/act.ts). */
323
+ const SCROLL_FINGER = { down: 'up', up: 'down', left: 'left', right: 'right' };
293
324
  function kebab(s) {
294
- return s
325
+ return asciiFold(s)
295
326
  .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
296
327
  .replace(/[^A-Za-z0-9]+/g, '-')
297
328
  .replace(/^-+|-+$/g, '')
@@ -1 +1 @@
1
- {"version":3,"file":"pom.js","sourceRoot":"","sources":["../../src/suite/pom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pom.js","sourceRoot":"","sources":["../../src/suite/pom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,266 @@
1
+ // Defense in depth against secret leaks into GENERATED assets and persisted state.
2
+ //
3
+ // The recorder (qa_act) is supposed to mark a value typed into a secure field as `secret` and
4
+ // record a ${VAR} placeholder. But a registered secret (session.secrets) typed into a field the UI
5
+ // does NOT flag as secure is recorded as a plain literal, and every generator downstream (flow YAML,
6
+ // POM/suite, Appium JS/TS/Python, test cases, test-suite.json) would then write it in plaintext.
7
+ //
8
+ // This module is the emit-time backstop every generator and the session persister go through:
9
+ // - secretSafeActions: rewrite recorded actions so any literal that EQUALS or CONTAINS a registered
10
+ // secret becomes a secret step (placeholder var, needs-human-data), never the raw value;
11
+ // - findSecretLeaks / assertNoSecretLeaks: scan generated text for registered secret values
12
+ // (raw + XML/JSON-encoded spellings) and FAIL generation loudly instead of writing a leak.
13
+ import { makeRedactor, REDACTED, TOKEN_REDACTION_MIN } from '../lib/redact.js';
14
+ /** Registered secret values, de-duplicated and non-empty. */
15
+ function secretList(secrets) {
16
+ if (!secrets)
17
+ return [];
18
+ return [...new Set([...secrets].filter((s) => typeof s === 'string' && s.length > 0))];
19
+ }
20
+ /** A "weak" (dictionary-like / short) secret: QA passwords such as "test", "admin", "demo",
21
+ * "password", "Login": letters only, or a short alphanumeric run. Substring-matching these would
22
+ * flag template text ("testID", "tests:") and structural identifiers (resource_id "password",
23
+ * screen "Login"), so they are matched as whole tokens / whole string literals only. Anything with
24
+ * a symbol, or a longer mixed alphanumeric value, stays a "strong" secret (substring-matched). */
25
+ export function isWeakSecret(value) {
26
+ if (!/^[\p{L}\p{N}_-]+$/u.test(value))
27
+ return false;
28
+ return /^\p{L}+$/u.test(value) || value.length < 8;
29
+ }
30
+ const escapeRe = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
31
+ /** Redactor used for recorded USER CONTENT (typed text, url, assertion prose): strong secrets are
32
+ * scrubbed as substrings (session-redactor rules); weak secrets only as whole tokens. */
33
+ function contentRedactor(secrets) {
34
+ const strong = makeRedactor(secrets.filter((s) => !isWeakSecret(s)));
35
+ const weak = secrets
36
+ .filter((s) => isWeakSecret(s))
37
+ .sort((a, b) => b.length - a.length)
38
+ .map((s) => new RegExp(`(?<![\\p{L}\\p{N}_])${escapeRe(s)}(?![\\p{L}\\p{N}_])`, 'gu'));
39
+ const r = (v) => {
40
+ if (!v)
41
+ return v;
42
+ let out = strong(v) ?? v;
43
+ for (const re of weak)
44
+ out = out.replace(re, REDACTED);
45
+ return out;
46
+ };
47
+ return r;
48
+ }
49
+ /** True when `value` is, or contains, a registered secret (exact match for any length; substring /
50
+ * token match with the same rules as the session redactor). */
51
+ export function containsSecret(value, secrets, redact) {
52
+ if (!value)
53
+ return false;
54
+ if (secrets.includes(value))
55
+ return true;
56
+ return (redact(value) ?? value) !== value;
57
+ }
58
+ const PLACEHOLDER_RE = /^\$\{[^}]+\}$/;
59
+ /** The session's stored inputs as bindings (varName > raw value, secret flag from metadata). */
60
+ export function inputBindings(session) {
61
+ const out = [];
62
+ for (const [varName, value] of session.inputValues ?? new Map()) {
63
+ if (typeof value !== 'string' || !value)
64
+ continue;
65
+ const meta = session.inputs?.find((i) => i.varName === varName);
66
+ out.push({ varName, value, secret: meta?.secret ?? false });
67
+ }
68
+ return out;
69
+ }
70
+ /** Recorded typed text that equals a stored session input value > that input's `${VAR}` placeholder
71
+ * (secret inputs AND non-secret ones such as SWIPIUM_TEST_EMAIL). Returns undefined otherwise. */
72
+ export function inputPlaceholderFor(text, inputs) {
73
+ if (!text || !inputs?.length || PLACEHOLDER_RE.test(text))
74
+ return undefined;
75
+ return inputs.find((b) => b.value === text);
76
+ }
77
+ /** A flow-variable name the runner can resolve from the environment: SWIPIUM_-prefixed, [A-Za-z0-9_]. */
78
+ export function swipiumVarName(name) {
79
+ const n = name.replace(/[^A-Za-z0-9_]/g, '_');
80
+ return /^SWIPIUM_/.test(n) ? n : `SWIPIUM_${n}`;
81
+ }
82
+ /** ONE naming rule for secret placeholders across every generator (flow YAML, POM/suite, Appium).
83
+ * Every emitted name is SWIPIUM_-prefixed. The flow runner resolves env vars ONLY for SWIPIUM_*
84
+ * names, so a generated flow replays from env in CI:
85
+ * reuse a meaningful ${VAR} already on the step (e.g. a stored input's SWIPIUM_TEST_PASSWORD; an
86
+ * unprefixed name gets the SWIPIUM_ prefix), but rename a generic recorder placeholder (SECRET_N);
87
+ * else name it from the field (password/otp/token/pin > SWIPIUM_TEST_*), else SWIPIUM_SECRET_N. */
88
+ export function secretVarName(a, index) {
89
+ const existing = a.text?.match(/^\$\{([^}]+)\}$/);
90
+ if (existing && !/^SECRET_\d+$/i.test(existing[1]))
91
+ return swipiumVarName(existing[1]);
92
+ const key = `${a.selector ?? ''}`.toLowerCase();
93
+ if (/pass/.test(key))
94
+ return 'SWIPIUM_TEST_PASSWORD';
95
+ if (/otp|code|2fa|mfa/.test(key))
96
+ return 'SWIPIUM_TEST_OTP';
97
+ if (/token|api[_-]?key/.test(key))
98
+ return 'SWIPIUM_TEST_TOKEN';
99
+ if (/pin/.test(key))
100
+ return 'SWIPIUM_TEST_PIN';
101
+ return `SWIPIUM_SECRET_${index}`;
102
+ }
103
+ /**
104
+ * Return a COPY of `actions` in which no registered secret value survives in recorded USER CONTENT:
105
+ * - a `type` step whose literal text equals a stored session input becomes that input's ${VAR}
106
+ * (secret input > secret step; non-secret input such as an email stays a data placeholder);
107
+ * - a `type` step whose literal text equals/contains a secret becomes a secret step (text dropped so
108
+ * the generators allocate an env-var placeholder; exportability needs-human-data);
109
+ * - user-content prose (url, assertion, warning, OCR text) containing a secret is redacted.
110
+ * Selector / screen / action / id fields are NEVER rewritten: a resource_id "password" or a screen
111
+ * "Login" is a locator, not a leak, and rewriting it to «redacted» makes the step unreplayable (and
112
+ * persisted state.json would carry the broken locator across a restart).
113
+ * Existing ${VAR} placeholders are kept. Input actions are never mutated.
114
+ */
115
+ export function secretSafeActions(actions, secretsIn, inputs) {
116
+ const secrets = secretList(secretsIn);
117
+ if (!secrets.length && !inputs?.length)
118
+ return { actions, converted: 0 };
119
+ const redact = contentRedactor(secrets);
120
+ const scrub = (v) => (v ? (secrets.includes(v) ? REDACTED : (redact(v) ?? v)) : v);
121
+ let converted = 0;
122
+ const out = actions.map((a) => {
123
+ let next = a;
124
+ if (a.action === 'type' && a.text && !PLACEHOLDER_RE.test(a.text)) {
125
+ const bound = inputPlaceholderFor(a.text, inputs);
126
+ if (bound) {
127
+ const secret = bound.secret || containsSecret(a.text, secrets, redact);
128
+ next = {
129
+ ...a,
130
+ text: `\${${swipiumVarName(bound.varName)}}`,
131
+ ...(secret ? { secret: true, exportability: 'needs-human-data' } : {}),
132
+ };
133
+ }
134
+ else if (secrets.length && containsSecret(a.text, secrets, redact)) {
135
+ next = { ...a, text: undefined, secret: true, exportability: 'needs-human-data' };
136
+ }
137
+ }
138
+ if (secrets.length) {
139
+ const url = scrub(next.url);
140
+ const assertion = scrub(next.assertion);
141
+ const warning = scrub(next.warning);
142
+ const ocr = next.provenance?.visual?.ocrText;
143
+ const ocrScrubbed = scrub(ocr);
144
+ if (url !== next.url || assertion !== next.assertion || warning !== next.warning || ocrScrubbed !== ocr) {
145
+ next = { ...next, url, assertion, warning };
146
+ if (ocrScrubbed !== ocr && next.provenance?.visual)
147
+ next.provenance = { ...next.provenance, visual: { ...next.provenance.visual, ocrText: ocrScrubbed } };
148
+ for (const k of ['url', 'assertion', 'warning'])
149
+ if (next[k] === undefined)
150
+ delete next[k];
151
+ }
152
+ }
153
+ if (next !== a)
154
+ converted++;
155
+ return next;
156
+ });
157
+ return { actions: converted ? out : actions, converted };
158
+ }
159
+ /** Structural identifiers of a recording (selectors, screen names/signatures, provenance ids): a
160
+ * weak secret equal to one of these is a LOCATOR in generated output, not a leaked value. */
161
+ export function structuralLiterals(actions) {
162
+ const out = new Set();
163
+ for (const a of actions ?? []) {
164
+ for (const v of [
165
+ a.selector,
166
+ a.screen,
167
+ a.screenSig,
168
+ a.provenance?.resourceId,
169
+ a.provenance?.accessibilityLabel,
170
+ a.provenance?.selectorValue,
171
+ a.provenance?.text,
172
+ a.provenance?.className,
173
+ a.provenance?.originalScreenSignature,
174
+ ])
175
+ if (typeof v === 'string' && v)
176
+ out.add(v);
177
+ }
178
+ return [...out];
179
+ }
180
+ /** Redactor for GENERATED structured output (test-suite.json cases…): strong secrets are scrubbed
181
+ * as substrings everywhere (session-redactor rules); a weak secret only when a WHOLE string value
182
+ * equals it and that value is not a structural identifier of the recording (selector/screen),
183
+ * never inside template prose or locators. */
184
+ export function generatedOutputRedactor(secretsIn, structuralIn) {
185
+ const secrets = secretList(secretsIn);
186
+ const strong = makeRedactor(secrets.filter((s) => !isWeakSecret(s)));
187
+ const weak = new Set(secrets.filter((s) => isWeakSecret(s)));
188
+ const structural = new Set(structuralIn ?? []);
189
+ const r = (v) => {
190
+ if (!v)
191
+ return v;
192
+ if (weak.has(v) && !structural.has(v))
193
+ return REDACTED;
194
+ return strong(v) ?? v;
195
+ };
196
+ return r;
197
+ }
198
+ /** Whole string-literal occurrence of `s` in VALUE position: "s" / 's' / `s` (not an object key
199
+ * `"s":`), or a bare YAML scalar value (`key: s`, `- s`). */
200
+ function weakLiteralRe(s) {
201
+ const e = escapeRe(s);
202
+ return new RegExp(`(["'\`])${e}\\1(?!\\s*:)|(?:^|:\\s|-\\s)\\s*${e}\\s*(?:#.*)?$`, 'u');
203
+ }
204
+ /** Find registered secret values in generated file contents, comments included.
205
+ * - strong secrets (symbols / long mixed values): raw or XML/JSON-encoded SUBSTRING, anywhere;
206
+ * - weak secrets (dictionary-like / short, see isWeakSecret): only where the generated text carries
207
+ * the value as a whole string literal / scalar value (an emitted data literal), and not when that
208
+ * value is one of the recording's structural identifiers (a selector or screen name). Template
209
+ * text ("testID", "tests:", "tests/x.smoke.yaml") never matches. */
210
+ export function findSecretLeaks(files, secretsIn, opts = {}) {
211
+ const secrets = secretList(secretsIn);
212
+ if (!secrets.length)
213
+ return [];
214
+ const structural = new Set(opts.structural ?? []);
215
+ const redact = makeRedactor(secrets.filter((s) => !isWeakSecret(s)));
216
+ const weak = secrets.filter((s) => isWeakSecret(s) && s.length >= TOKEN_REDACTION_MIN && !structural.has(s)).map(weakLiteralRe);
217
+ const leaks = [];
218
+ for (const f of files) {
219
+ const lines = f.content.split('\n');
220
+ // Same matching rules as the session redactor (values < 3 chars are not matched: they would
221
+ // flag ordinary step numbers/words; recorded actions are already rewritten on exact equality).
222
+ lines.forEach((line, i) => {
223
+ if ((redact(line) ?? line) !== line || weak.some((re) => re.test(line)))
224
+ leaks.push({ path: f.path, line: i + 1 });
225
+ });
226
+ }
227
+ return leaks;
228
+ }
229
+ /** Thrown when generated output would contain a registered secret value. Callers must NOT write. */
230
+ export class SecretLeakError extends Error {
231
+ leaks;
232
+ code = 'SECRET_IN_GENERATED_OUTPUT';
233
+ constructor(leaks, where) {
234
+ super(`${where}: refusing to write generated output: a registered secret value would be written in plaintext ` +
235
+ `(${leaks
236
+ .slice(0, 5)
237
+ .map((l) => `${l.path}:${l.line}`)
238
+ .join(', ')}${leaks.length > 5 ? `, +${leaks.length - 5} more` : ''})`);
239
+ this.leaks = leaks;
240
+ this.name = 'SecretLeakError';
241
+ }
242
+ }
243
+ /** Throw SecretLeakError when any file contains a registered secret value. */
244
+ export function assertNoSecretLeaks(files, secrets, where, opts = {}) {
245
+ const leaks = findSecretLeaks(files, secrets, opts);
246
+ if (leaks.length)
247
+ throw new SecretLeakError(leaks, where);
248
+ }
249
+ /** Redact registered secret values from qa_note prose (workflow/reason/setup text) before notes feed
250
+ * generated test cases or persisted state. URIs and structured fields are left alone. */
251
+ export function secretSafeNotes(notes, secretsIn) {
252
+ const secrets = secretList(secretsIn);
253
+ if (!secrets.length)
254
+ return notes;
255
+ const redact = makeRedactor(secrets);
256
+ const r = (v) => (v ? (redact(v) ?? v) : v);
257
+ return notes.map((n) => ({
258
+ ...n,
259
+ workflow: r(n.workflow) ?? n.workflow,
260
+ reason: r(n.reason),
261
+ missingPrecondition: r(n.missingPrecondition),
262
+ requiredState: r(n.requiredState),
263
+ recommendedSetup: r(n.recommendedSetup),
264
+ }));
265
+ }
266
+ //# sourceMappingURL=secretGuard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretGuard.js","sourceRoot":"","sources":["../../src/suite/secretGuard.ts"],"names":[],"mappings":"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"}