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.
- package/CHANGELOG.md +313 -0
- package/README.md +175 -219
- package/THREAT_MODEL.md +223 -47
- package/dist/appMap/automationLink.js +39 -26
- package/dist/appMap/automationLink.js.map +1 -1
- package/dist/appMap/build.js +68 -20
- package/dist/appMap/build.js.map +1 -1
- package/dist/appMap/codeIndex.js +31 -5
- package/dist/appMap/codeIndex.js.map +1 -1
- package/dist/appMap/featureIndex.js +23 -5
- package/dist/appMap/featureIndex.js.map +1 -1
- package/dist/appMap/featureModel.js +44 -8
- package/dist/appMap/featureModel.js.map +1 -1
- package/dist/appMap/firstRunApply.js +24 -6
- package/dist/appMap/firstRunApply.js.map +1 -1
- package/dist/appMap/fsWalk.js +19 -2
- package/dist/appMap/fsWalk.js.map +1 -1
- package/dist/appMap/issues.js +10 -30
- package/dist/appMap/issues.js.map +1 -1
- package/dist/appMap/migrations.js +6 -6
- package/dist/appMap/migrations.js.map +1 -1
- package/dist/appMap/prelaunch.js +2 -2
- package/dist/appMap/prelaunch.js.map +1 -1
- package/dist/appMap/projectRegistry.js +83 -11
- package/dist/appMap/projectRegistry.js.map +1 -1
- package/dist/appMap/provenance.js +2 -2
- package/dist/appMap/provenance.js.map +1 -1
- package/dist/appMap/query.js +21 -5
- package/dist/appMap/query.js.map +1 -1
- package/dist/appMap/runtimeMerge.js +12 -5
- package/dist/appMap/runtimeMerge.js.map +1 -1
- package/dist/appMap/schema.js +1 -1
- package/dist/appMap/schema.js.map +1 -1
- package/dist/appMap/screenMatch.js +6 -2
- package/dist/appMap/screenMatch.js.map +1 -1
- package/dist/appMap/staticScan.js +151 -39
- package/dist/appMap/staticScan.js.map +1 -1
- package/dist/appMap/store.js +58 -85
- package/dist/appMap/store.js.map +1 -1
- package/dist/appMap/tsAstScan.js +34 -12
- package/dist/appMap/tsAstScan.js.map +1 -1
- package/dist/artifacts/bundletool.js +49 -12
- package/dist/artifacts/bundletool.js.map +1 -1
- package/dist/artifacts/resolve.js +41 -14
- package/dist/artifacts/resolve.js.map +1 -1
- package/dist/automation/capabilities.js +112 -30
- package/dist/automation/capabilities.js.map +1 -1
- package/dist/automation/gestures.js +6 -2
- package/dist/automation/gestures.js.map +1 -1
- package/dist/automation/plan.js +71 -23
- package/dist/automation/plan.js.map +1 -1
- package/dist/automation/report.js +15 -5
- package/dist/automation/report.js.map +1 -1
- package/dist/automation/selectors.js +22 -28
- package/dist/automation/selectors.js.map +1 -1
- package/dist/automation/types.js +1 -1
- package/dist/automation/types.js.map +1 -1
- package/dist/automation/waits.js +14 -8
- package/dist/automation/waits.js.map +1 -1
- package/dist/automation/webview.js +9 -3
- package/dist/automation/webview.js.map +1 -1
- package/dist/automationGen/appiumModel.js +16 -8
- package/dist/automationGen/appiumModel.js.map +1 -1
- package/dist/automationGen/ciEmitter.js +6 -6
- package/dist/automationGen/ciEmitter.js.map +1 -1
- package/dist/automationGen/identifiers.js +224 -0
- package/dist/automationGen/identifiers.js.map +1 -0
- package/dist/automationGen/jsEmitter.js +288 -121
- package/dist/automationGen/jsEmitter.js.map +1 -1
- package/dist/automationGen/packagePatch.js +2 -2
- package/dist/automationGen/packagePatch.js.map +1 -1
- package/dist/automationGen/platformResolve.js +36 -0
- package/dist/automationGen/platformResolve.js.map +1 -0
- package/dist/automationGen/projectProfile.js +76 -27
- package/dist/automationGen/projectProfile.js.map +1 -1
- package/dist/automationGen/pythonEmitter.js +278 -107
- package/dist/automationGen/pythonEmitter.js.map +1 -1
- package/dist/automationGen/readmeEmitter.js +7 -6
- package/dist/automationGen/readmeEmitter.js.map +1 -1
- package/dist/automationGen/run.js +388 -0
- package/dist/automationGen/run.js.map +1 -0
- package/dist/automationGen/suitePlan.js +17 -10
- package/dist/automationGen/suitePlan.js.map +1 -1
- package/dist/automationGen/validation.js +52 -12
- package/dist/automationGen/validation.js.map +1 -1
- package/dist/build/parseBuildLog.js +235 -31
- package/dist/build/parseBuildLog.js.map +1 -1
- package/dist/build/plan.js +39 -18
- package/dist/build/plan.js.map +1 -1
- package/dist/ci/preflight.js +13 -4
- package/dist/ci/preflight.js.map +1 -1
- package/dist/cli/gc.js +74 -0
- package/dist/cli/gc.js.map +1 -0
- package/dist/cli/init.js +217 -26
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.js +50 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/report.js +218 -0
- package/dist/cli/report.js.map +1 -0
- package/dist/cli/scan.js +36 -15
- package/dist/cli/scan.js.map +1 -1
- package/dist/cli/suite.js +7 -7
- package/dist/cli/suite.js.map +1 -1
- package/dist/cli/verify.js +7 -7
- package/dist/cli/verify.js.map +1 -1
- package/dist/consent/consent.js +162 -5
- package/dist/consent/consent.js.map +1 -1
- package/dist/context/detect.js +55 -18
- package/dist/context/detect.js.map +1 -1
- package/dist/context/findApps.js +22 -8
- package/dist/context/findApps.js.map +1 -1
- package/dist/context/projectRoot.js +174 -19
- package/dist/context/projectRoot.js.map +1 -1
- package/dist/context/scan.js +1 -1
- package/dist/context/scan.js.map +1 -1
- package/dist/core/capabilityGroups.js +90 -0
- package/dist/core/capabilityGroups.js.map +1 -0
- package/dist/core/target.js +10 -8
- package/dist/core/target.js.map +1 -1
- package/dist/core/targetPlan.js +160 -39
- package/dist/core/targetPlan.js.map +1 -1
- package/dist/drivers/DirectDriver.js +317 -43
- package/dist/drivers/DirectDriver.js.map +1 -1
- package/dist/drivers/SimctlDriver.js +124 -8
- package/dist/drivers/SimctlDriver.js.map +1 -1
- package/dist/drivers/WdaDriver.js +365 -55
- package/dist/drivers/WdaDriver.js.map +1 -1
- package/dist/explore/candidates.js +7 -3
- package/dist/explore/candidates.js.map +1 -1
- package/dist/explore/graph.js +15 -6
- package/dist/explore/graph.js.map +1 -1
- package/dist/explore/memory.js +4 -1
- package/dist/explore/memory.js.map +1 -1
- package/dist/explore/planner.js +54 -9
- package/dist/explore/planner.js.map +1 -1
- package/dist/explore/policy.js +11 -6
- package/dist/explore/policy.js.map +1 -1
- package/dist/explore/runner.js +363 -190
- package/dist/explore/runner.js.map +1 -1
- package/dist/explore/signatures.js +4 -2
- package/dist/explore/signatures.js.map +1 -1
- package/dist/explore/suite.js +3 -1
- package/dist/explore/suite.js.map +1 -1
- package/dist/featureTesting/executionBootstrap.js +137 -29
- package/dist/featureTesting/executionBootstrap.js.map +1 -1
- package/dist/featureTesting/featureMap.js +6 -3
- package/dist/featureTesting/featureMap.js.map +1 -1
- package/dist/featureTesting/featureScope.js +101 -20
- package/dist/featureTesting/featureScope.js.map +1 -1
- package/dist/featureTesting/mapFeatureScope.js +44 -15
- package/dist/featureTesting/mapFeatureScope.js.map +1 -1
- package/dist/featureTesting/objectiveModel.js +15 -11
- package/dist/featureTesting/objectiveModel.js.map +1 -1
- package/dist/featureTesting/resultMerge.js +16 -8
- package/dist/featureTesting/resultMerge.js.map +1 -1
- package/dist/featureTesting/sources.js +8 -5
- package/dist/featureTesting/sources.js.map +1 -1
- package/dist/featureTesting/suiteBridge.js +8 -2
- package/dist/featureTesting/suiteBridge.js.map +1 -1
- package/dist/featureTesting/synonyms.js +32 -4
- package/dist/featureTesting/synonyms.js.map +1 -1
- package/dist/featureTesting/testCaseFactory.js +27 -15
- package/dist/featureTesting/testCaseFactory.js.map +1 -1
- package/dist/featureTesting/testPlan.js +34 -12
- package/dist/featureTesting/testPlan.js.map +1 -1
- package/dist/firstRun/authStateMachine.js +1 -1
- package/dist/firstRun/authStateMachine.js.map +1 -1
- package/dist/firstRun/classifyScreen.js +9 -6
- package/dist/firstRun/classifyScreen.js.map +1 -1
- package/dist/firstRun/firstRunPlanner.js +16 -13
- package/dist/firstRun/firstRunPlanner.js.map +1 -1
- package/dist/firstRun/firstRunRunner.js +92 -31
- package/dist/firstRun/firstRunRunner.js.map +1 -1
- package/dist/firstRun/generatedDataPolicy.js +25 -15
- package/dist/firstRun/generatedDataPolicy.js.map +1 -1
- package/dist/firstRun/inputPlanner.js +45 -11
- package/dist/firstRun/inputPlanner.js.map +1 -1
- package/dist/firstRun/onboardingStateMachine.js +1 -1
- package/dist/firstRun/onboardingStateMachine.js.map +1 -1
- package/dist/firstRun/paywallPolicy.js +3 -3
- package/dist/firstRun/paywallPolicy.js.map +1 -1
- package/dist/firstRun/types.js +1 -1
- package/dist/firstRun/types.js.map +1 -1
- package/dist/fixtures/catalog.js +72 -9
- package/dist/fixtures/catalog.js.map +1 -1
- package/dist/fixtures/load.js +50 -0
- package/dist/fixtures/load.js.map +1 -0
- package/dist/flows/discover.js +2 -2
- package/dist/flows/discover.js.map +1 -1
- package/dist/flows/generate.js +68 -17
- package/dist/flows/generate.js.map +1 -1
- package/dist/flows/lint.js +88 -14
- package/dist/flows/lint.js.map +1 -1
- package/dist/flows/pack.js +21 -5
- package/dist/flows/pack.js.map +1 -1
- package/dist/flows/paths.js +57 -0
- package/dist/flows/paths.js.map +1 -0
- package/dist/flows/repair.js +176 -37
- package/dist/flows/repair.js.map +1 -1
- package/dist/flows/run.js +308 -99
- package/dist/flows/run.js.map +1 -1
- package/dist/flows/schema.js +107 -25
- package/dist/flows/schema.js.map +1 -1
- package/dist/flows/seedExec.js +8 -4
- package/dist/flows/seedExec.js.map +1 -1
- package/dist/flows/templates.js +5 -5
- package/dist/index.js +50 -8
- package/dist/index.js.map +1 -1
- package/dist/ios/signing.js +32 -3
- package/dist/ios/signing.js.map +1 -1
- package/dist/issues/classify.js +28 -20
- package/dist/issues/classify.js.map +1 -1
- package/dist/issues/fingerprint.js +35 -9
- package/dist/issues/fingerprint.js.map +1 -1
- package/dist/issues/index.js +93 -46
- package/dist/issues/index.js.map +1 -1
- package/dist/issues/metrics.js +6 -5
- package/dist/issues/metrics.js.map +1 -1
- package/dist/issues/recurrence.js +35 -8
- package/dist/issues/recurrence.js.map +1 -1
- package/dist/issues/report.js +12 -8
- package/dist/issues/report.js.map +1 -1
- package/dist/issues/reportBridge.js +40 -9
- package/dist/issues/reportBridge.js.map +1 -1
- package/dist/issues/schema.js +2 -2
- package/dist/issues/schema.js.map +1 -1
- package/dist/issues/sourceRevision.js +2 -2
- package/dist/issues/sourceRevision.js.map +1 -1
- package/dist/issues/store.js +110 -32
- package/dist/issues/store.js.map +1 -1
- package/dist/lib/abortScope.js +48 -0
- package/dist/lib/abortScope.js.map +1 -0
- package/dist/lib/android.js +84 -8
- package/dist/lib/android.js.map +1 -1
- package/dist/lib/coordSpace.js +1 -1
- package/dist/lib/coordSpace.js.map +1 -1
- package/dist/lib/device.js +53 -12
- package/dist/lib/device.js.map +1 -1
- package/dist/lib/gestures.js +141 -0
- package/dist/lib/gestures.js.map +1 -0
- package/dist/lib/gitignore.js +4 -3
- package/dist/lib/gitignore.js.map +1 -1
- package/dist/lib/image.js +12 -3
- package/dist/lib/image.js.map +1 -1
- package/dist/lib/lockfile.js +399 -0
- package/dist/lib/lockfile.js.map +1 -0
- package/dist/lib/needsInput.js +9 -6
- package/dist/lib/needsInput.js.map +1 -1
- package/dist/lib/png.js +4 -3
- package/dist/lib/png.js.map +1 -1
- package/dist/lib/redact.js +170 -9
- package/dist/lib/redact.js.map +1 -1
- package/dist/lib/result.js +94 -10
- package/dist/lib/result.js.map +1 -1
- package/dist/lib/schemaHash.js +7 -5
- package/dist/lib/schemaHash.js.map +1 -1
- package/dist/lib/sensitive.js +6 -3
- package/dist/lib/sensitive.js.map +1 -1
- package/dist/lib/simctl.js +3 -3
- package/dist/lib/simctl.js.map +1 -1
- package/dist/lib/spawn.js +78 -17
- package/dist/lib/spawn.js.map +1 -1
- package/dist/lib/toolAnnotations.js +114 -0
- package/dist/lib/toolAnnotations.js.map +1 -0
- package/dist/lib/wda.js +321 -25
- package/dist/lib/wda.js.map +1 -1
- package/dist/lib/wdaConfig.js +12 -5
- package/dist/lib/wdaConfig.js.map +1 -1
- package/dist/lib/wdaTune.js +52 -23
- package/dist/lib/wdaTune.js.map +1 -1
- package/dist/mobileAudit/checks.js +150 -28
- package/dist/mobileAudit/checks.js.map +1 -1
- package/dist/mobileAudit/evidence.js +4 -4
- package/dist/mobileAudit/evidence.js.map +1 -1
- package/dist/mobileAudit/profiles.js +121 -20
- package/dist/mobileAudit/profiles.js.map +1 -1
- package/dist/mobileAudit/results.js +9 -4
- package/dist/mobileAudit/results.js.map +1 -1
- package/dist/mobileAudit/runner.js +214 -35
- package/dist/mobileAudit/runner.js.map +1 -1
- package/dist/oracle/auth.js +1 -1
- package/dist/oracle/auth.js.map +1 -1
- package/dist/oracle/failures.js +1085 -145
- package/dist/oracle/failures.js.map +1 -1
- package/dist/oracle/health.js +148 -26
- package/dist/oracle/health.js.map +1 -1
- package/dist/oracle/locator.js +148 -19
- package/dist/oracle/locator.js.map +1 -1
- package/dist/oracle/record.js +3 -3
- package/dist/oracle/record.js.map +1 -1
- package/dist/orchestration/envelope.js +2 -2
- package/dist/orchestration/envelope.js.map +1 -1
- package/dist/orchestration/goal.js +7 -13
- package/dist/orchestration/goal.js.map +1 -1
- package/dist/orchestration/testThis/execute.js +167 -0
- package/dist/orchestration/testThis/execute.js.map +1 -0
- package/dist/orchestration/testThis/pipeline.js +413 -0
- package/dist/orchestration/testThis/pipeline.js.map +1 -0
- package/dist/orchestration/testThis/plan.js +519 -0
- package/dist/orchestration/testThis/plan.js.map +1 -0
- package/dist/orchestration/testThis/sessionIntent.js +72 -0
- package/dist/orchestration/testThis/sessionIntent.js.map +1 -0
- package/dist/orchestration/testThis/terminal.js +136 -0
- package/dist/orchestration/testThis/terminal.js.map +1 -0
- package/dist/orchestration/testThis/types.js +12 -0
- package/dist/orchestration/testThis/types.js.map +1 -0
- package/dist/plan/plan.js +9 -9
- package/dist/plan/plan.js.map +1 -1
- package/dist/prompts/index.js +24 -24
- package/dist/prompts/index.js.map +1 -1
- package/dist/report/coverage.js +0 -1
- package/dist/report/coverage.js.map +1 -1
- package/dist/report/evidence.js.map +1 -1
- package/dist/report/export.js +449 -72
- package/dist/report/export.js.map +1 -1
- package/dist/report/findingsDedupe.js +41 -0
- package/dist/report/findingsDedupe.js.map +1 -0
- package/dist/report/flake.js +13 -14
- package/dist/report/flake.js.map +1 -1
- package/dist/report/history.js +72 -38
- package/dist/report/history.js.map +1 -1
- package/dist/report/policy.js +18 -7
- package/dist/report/policy.js.map +1 -1
- package/dist/report/qaLevel.js +10 -16
- package/dist/report/qaLevel.js.map +1 -1
- package/dist/report/readiness.js +42 -12
- package/dist/report/readiness.js.map +1 -1
- package/dist/report/sarifSources.js +160 -0
- package/dist/report/sarifSources.js.map +1 -0
- package/dist/report/summary.js +2 -2
- package/dist/report/summary.js.map +1 -1
- package/dist/report/testCatalog.js +4 -4
- package/dist/report/testCatalog.js.map +1 -1
- package/dist/report/timing.js +23 -23
- package/dist/report/timing.js.map +1 -1
- package/dist/report/toolHealth.js +124 -0
- package/dist/report/toolHealth.js.map +1 -0
- package/dist/server.js +501 -69
- package/dist/server.js.map +1 -1
- package/dist/services/automationGenerate.js +8 -2
- package/dist/services/automationGenerate.js.map +1 -1
- package/dist/services/build.js +10 -4
- package/dist/services/build.js.map +1 -1
- package/dist/services/flowGenerate.js +75 -0
- package/dist/services/flowGenerate.js.map +1 -0
- package/dist/services/preflight.js +40 -8
- package/dist/services/preflight.js.map +1 -1
- package/dist/services/prepareAndroid.js +92 -18
- package/dist/services/prepareAndroid.js.map +1 -1
- package/dist/services/prepareIos.js +94 -17
- package/dist/services/prepareIos.js.map +1 -1
- package/dist/services/report.js +271 -80
- package/dist/services/report.js.map +1 -1
- package/dist/services/smoke.js +68 -22
- package/dist/services/smoke.js.map +1 -1
- package/dist/services/suiteGenerate.js +43 -6
- package/dist/services/suiteGenerate.js.map +1 -1
- package/dist/services/testSuiteKnowledge.js +78 -33
- package/dist/services/testSuiteKnowledge.js.map +1 -1
- package/dist/session/attach.js +284 -4
- package/dist/session/attach.js.map +1 -1
- package/dist/session/processRegistry.js +433 -0
- package/dist/session/processRegistry.js.map +1 -0
- package/dist/session/progress.js +1 -1
- package/dist/session/progress.js.map +1 -1
- package/dist/session/retention.js +201 -0
- package/dist/session/retention.js.map +1 -0
- package/dist/session/store.js +459 -59
- package/dist/session/store.js.map +1 -1
- package/dist/snapshot/overlays.js +60 -10
- package/dist/snapshot/overlays.js.map +1 -1
- package/dist/snapshot/parse.js +30 -12
- package/dist/snapshot/parse.js.map +1 -1
- package/dist/snapshot/present.js +36 -6
- package/dist/snapshot/present.js.map +1 -1
- package/dist/snapshot/settle.js +39 -9
- package/dist/snapshot/settle.js.map +1 -1
- package/dist/state/consent.js +99 -0
- package/dist/state/consent.js.map +1 -0
- package/dist/state/profile.js +82 -11
- package/dist/state/profile.js.map +1 -1
- package/dist/suite/compile.js +15 -6
- package/dist/suite/compile.js.map +1 -1
- package/dist/suite/lint.js +22 -4
- package/dist/suite/lint.js.map +1 -1
- package/dist/suite/pom.js +75 -44
- package/dist/suite/pom.js.map +1 -1
- package/dist/suite/secretGuard.js +266 -0
- package/dist/suite/secretGuard.js.map +1 -0
- package/dist/suite/testcase.js +15 -11
- package/dist/suite/testcase.js.map +1 -1
- package/dist/testSuite/exporter.js +7 -3
- package/dist/testSuite/exporter.js.map +1 -1
- package/dist/testSuite/generator.js +43 -14
- package/dist/testSuite/generator.js.map +1 -1
- package/dist/testSuite/history.js +1 -1
- package/dist/testSuite/history.js.map +1 -1
- package/dist/testSuite/issueLinks.js +3 -3
- package/dist/testSuite/issueLinks.js.map +1 -1
- package/dist/testSuite/lint.js +4 -4
- package/dist/testSuite/lint.js.map +1 -1
- package/dist/testSuite/merge.js +13 -7
- package/dist/testSuite/merge.js.map +1 -1
- package/dist/testSuite/schema.js +21 -16
- package/dist/testSuite/schema.js.map +1 -1
- package/dist/testSuite/store.js +12 -4
- package/dist/testSuite/store.js.map +1 -1
- package/dist/testSuite/traceability.js +2 -2
- package/dist/testSuite/traceability.js.map +1 -1
- package/dist/tools/act.js +868 -174
- package/dist/tools/act.js.map +1 -1
- package/dist/tools/agent.js +521 -112
- package/dist/tools/agent.js.map +1 -1
- package/dist/tools/appControl.js +82 -19
- package/dist/tools/appControl.js.map +1 -1
- package/dist/tools/appMap.js +393 -189
- package/dist/tools/appMap.js.map +1 -1
- package/dist/tools/build.js +92 -51
- package/dist/tools/build.js.map +1 -1
- package/dist/tools/bundletool.js +141 -40
- package/dist/tools/bundletool.js.map +1 -1
- package/dist/tools/clearOverlay.js +98 -18
- package/dist/tools/clearOverlay.js.map +1 -1
- package/dist/tools/device.js +108 -19
- package/dist/tools/device.js.map +1 -1
- package/dist/tools/doctor.js +98 -35
- package/dist/tools/doctor.js.map +1 -1
- package/dist/tools/explore.js +110 -42
- package/dist/tools/explore.js.map +1 -1
- package/dist/tools/featureTesting.js +152 -130
- package/dist/tools/featureTesting.js.map +1 -1
- package/dist/tools/firstRun.js +94 -66
- package/dist/tools/firstRun.js.map +1 -1
- package/dist/tools/flow.js +347 -132
- package/dist/tools/flow.js.map +1 -1
- package/dist/tools/flowRepair.js +42 -10
- package/dist/tools/flowRepair.js.map +1 -1
- package/dist/tools/generate.js +199 -0
- package/dist/tools/generate.js.map +1 -0
- package/dist/tools/getArtifact.js +37 -8
- package/dist/tools/getArtifact.js.map +1 -1
- package/dist/tools/health.js +17 -12
- package/dist/tools/health.js.map +1 -1
- package/dist/tools/ios.js +148 -194
- package/dist/tools/ios.js.map +1 -1
- package/dist/tools/issues.js +256 -171
- package/dist/tools/issues.js.map +1 -1
- package/dist/tools/jobs.js +55 -11
- package/dist/tools/jobs.js.map +1 -1
- package/dist/tools/metro.js +84 -38
- package/dist/tools/metro.js.map +1 -1
- package/dist/tools/mobileAudit.js +83 -26
- package/dist/tools/mobileAudit.js.map +1 -1
- package/dist/tools/network.js +36 -14
- package/dist/tools/network.js.map +1 -1
- package/dist/tools/note.js +31 -17
- package/dist/tools/note.js.map +1 -1
- package/dist/tools/prepareIosTarget.js +31 -14
- package/dist/tools/prepareIosTarget.js.map +1 -1
- package/dist/tools/prepareTarget.js +193 -47
- package/dist/tools/prepareTarget.js.map +1 -1
- package/dist/tools/report.js +16 -8
- package/dist/tools/report.js.map +1 -1
- package/dist/tools/resolveArtifact.js +12 -12
- package/dist/tools/resolveArtifact.js.map +1 -1
- package/dist/tools/resolveTarget.js +81 -18
- package/dist/tools/resolveTarget.js.map +1 -1
- package/dist/tools/screenRecord.js +85 -20
- package/dist/tools/screenRecord.js.map +1 -1
- package/dist/tools/screenshot.js +42 -18
- package/dist/tools/screenshot.js.map +1 -1
- package/dist/tools/smoke.js +29 -12
- package/dist/tools/smoke.js.map +1 -1
- package/dist/tools/snapshot.js +157 -107
- package/dist/tools/snapshot.js.map +1 -1
- package/dist/tools/startSession.js +117 -84
- package/dist/tools/startSession.js.map +1 -1
- package/dist/tools/suite.js +391 -310
- package/dist/tools/suite.js.map +1 -1
- package/dist/tools/testSuite.js +112 -36
- package/dist/tools/testSuite.js.map +1 -1
- package/dist/tools/testThis.js +35 -802
- package/dist/tools/testThis.js.map +1 -1
- package/dist/tools/visual.js +698 -116
- package/dist/tools/visual.js.map +1 -1
- package/dist/tools/wait.js +9 -23
- package/dist/tools/wait.js.map +1 -1
- package/dist/tools/wda.js +312 -54
- package/dist/tools/wda.js.map +1 -1
- package/dist/version.js +37 -64
- package/dist/version.js.map +1 -1
- package/dist/visual/ocr.js +65 -8
- package/dist/visual/ocr.js.map +1 -1
- package/dist/visual/provider.js +87 -15
- package/dist/visual/provider.js.map +1 -1
- package/docs/README.md +24 -10
- package/docs/ci-reports.md +328 -0
- package/docs/concepts.md +227 -0
- package/docs/flows.md +153 -0
- package/docs/mcp-server.md +210 -104
- package/docs/physical-devices.md +84 -0
- package/docs/tools.md +808 -217
- package/package.json +16 -6
- package/dist/appMap/diff.js +0 -60
- package/dist/appMap/diff.js.map +0 -1
- package/dist/automation/maestroIr.js +0 -282
- package/dist/automation/maestroIr.js.map +0 -1
- package/dist/interop/maestro.js +0 -151
- package/dist/interop/maestro.js.map +0 -1
- package/dist/tools/assertVisual.js +0 -74
- package/dist/tools/assertVisual.js.map +0 -1
- package/dist/tools/automationGenerate.js +0 -394
- package/dist/tools/automationGenerate.js.map +0 -1
- package/dist/tools/capabilities.js +0 -209
- package/dist/tools/capabilities.js.map +0 -1
- package/dist/tools/detectContext.js +0 -41
- package/dist/tools/detectContext.js.map +0 -1
- package/dist/tools/flowGenerate.js +0 -55
- package/dist/tools/flowGenerate.js.map +0 -1
- package/dist/tools/history.js +0 -56
- package/dist/tools/history.js.map +0 -1
- package/dist/tools/idling.js +0 -104
- package/dist/tools/idling.js.map +0 -1
- package/dist/tools/inputCapabilities.js +0 -30
- package/dist/tools/inputCapabilities.js.map +0 -1
- package/dist/tools/locator.js +0 -57
- package/dist/tools/locator.js.map +0 -1
- package/dist/tools/maestro.js +0 -78
- package/dist/tools/maestro.js.map +0 -1
- package/dist/tools/permissions.js +0 -149
- package/dist/tools/permissions.js.map +0 -1
- package/dist/tools/plan.js +0 -49
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/screenInfo.js +0 -70
- package/dist/tools/screenInfo.js.map +0 -1
- package/dist/tools/seed.js +0 -101
- package/dist/tools/seed.js.map +0 -1
- package/dist/tools/state.js +0 -170
- package/dist/tools/state.js.map +0 -1
- package/dist/tools/visualText.js +0 -61
- package/dist/tools/visualText.js.map +0 -1
package/dist/suite/pom.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
// Screen/Page Object Model generation
|
|
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
|
|
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 =
|
|
31
|
-
|
|
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
|
|
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}` : ''}
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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({
|
|
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
|
|
175
|
-
const v =
|
|
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
|
-
|
|
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({
|
|
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({
|
|
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({
|
|
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)
|
|
265
|
-
...(variables.length ? [`# variables
|
|
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, '')
|
package/dist/suite/pom.js.map
CHANGED
|
@@ -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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"}
|