@descryy/mcp 0.11.5 → 0.11.7
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/dist/action-handshake.d.ts +38 -0
- package/dist/action-handshake.d.ts.map +1 -0
- package/dist/action-handshake.js +127 -0
- package/dist/action-handshake.js.map +1 -0
- package/dist/bin/descry-mcp.d.ts +7 -0
- package/dist/bin/descry-mcp.d.ts.map +1 -0
- package/dist/bin/descry-mcp.js +73 -0
- package/dist/bin/descry-mcp.js.map +1 -0
- package/dist/browser/auth.d.ts +84 -0
- package/dist/browser/auth.d.ts.map +1 -0
- package/dist/browser/auth.js +233 -0
- package/dist/browser/auth.js.map +1 -0
- package/dist/browser/capability-probe.d.ts +109 -0
- package/dist/browser/capability-probe.d.ts.map +1 -0
- package/dist/browser/capability-probe.js +201 -0
- package/dist/browser/capability-probe.js.map +1 -0
- package/dist/browser/driver.d.ts +591 -0
- package/dist/browser/driver.d.ts.map +1 -0
- package/dist/browser/driver.js +116 -0
- package/dist/browser/driver.js.map +1 -0
- package/dist/browser/evidence.d.ts +28 -0
- package/dist/browser/evidence.d.ts.map +1 -0
- package/dist/browser/evidence.js +82 -0
- package/dist/browser/evidence.js.map +1 -0
- package/dist/browser/fake-driver.d.ts +116 -0
- package/dist/browser/fake-driver.d.ts.map +1 -0
- package/dist/browser/fake-driver.js +416 -0
- package/dist/browser/fake-driver.js.map +1 -0
- package/dist/browser/fault-attribution.d.ts +178 -0
- package/dist/browser/fault-attribution.d.ts.map +1 -0
- package/dist/browser/fault-attribution.js +266 -0
- package/dist/browser/fault-attribution.js.map +1 -0
- package/dist/browser/graph-write.d.ts +45 -0
- package/dist/browser/graph-write.d.ts.map +1 -0
- package/dist/browser/graph-write.js +103 -0
- package/dist/browser/graph-write.js.map +1 -0
- package/dist/browser/identity-graph-write.d.ts +55 -0
- package/dist/browser/identity-graph-write.d.ts.map +1 -0
- package/dist/browser/identity-graph-write.js +45 -0
- package/dist/browser/identity-graph-write.js.map +1 -0
- package/dist/browser/page-probe.d.ts +81 -0
- package/dist/browser/page-probe.d.ts.map +1 -0
- package/dist/browser/page-probe.js +202 -0
- package/dist/browser/page-probe.js.map +1 -0
- package/dist/browser/playwright-driver.d.ts +115 -0
- package/dist/browser/playwright-driver.d.ts.map +1 -0
- package/dist/browser/playwright-driver.js +1545 -0
- package/dist/browser/playwright-driver.js.map +1 -0
- package/dist/browser/provider.d.ts +26 -0
- package/dist/browser/provider.d.ts.map +1 -0
- package/dist/browser/provider.js +14 -0
- package/dist/browser/provider.js.map +1 -0
- package/dist/browser/reach-recording-session.d.ts +44 -0
- package/dist/browser/reach-recording-session.d.ts.map +1 -0
- package/dist/browser/reach-recording-session.js +151 -0
- package/dist/browser/reach-recording-session.js.map +1 -0
- package/dist/browser/reachability.d.ts +168 -0
- package/dist/browser/reachability.d.ts.map +1 -0
- package/dist/browser/reachability.js +294 -0
- package/dist/browser/reachability.js.map +1 -0
- package/dist/browser/registry.d.ts +126 -0
- package/dist/browser/registry.d.ts.map +1 -0
- package/dist/browser/registry.js +177 -0
- package/dist/browser/registry.js.map +1 -0
- package/dist/browser/scenario-provenance.d.ts +23 -0
- package/dist/browser/scenario-provenance.d.ts.map +1 -0
- package/dist/browser/scenario-provenance.js +73 -0
- package/dist/browser/scenario-provenance.js.map +1 -0
- package/dist/browser/scenario-resolve.d.ts +28 -0
- package/dist/browser/scenario-resolve.d.ts.map +1 -0
- package/dist/browser/scenario-resolve.js +96 -0
- package/dist/browser/scenario-resolve.js.map +1 -0
- package/dist/browser/scenario-runner.d.ts +72 -0
- package/dist/browser/scenario-runner.d.ts.map +1 -0
- package/dist/browser/scenario-runner.js +353 -0
- package/dist/browser/scenario-runner.js.map +1 -0
- package/dist/browser/stack-parser.d.ts +19 -0
- package/dist/browser/stack-parser.d.ts.map +1 -0
- package/dist/browser/stack-parser.js +85 -0
- package/dist/browser/stack-parser.js.map +1 -0
- package/dist/browser/tool-support.d.ts +71 -0
- package/dist/browser/tool-support.d.ts.map +1 -0
- package/dist/browser/tool-support.js +216 -0
- package/dist/browser/tool-support.js.map +1 -0
- package/dist/browser/url-scheme.d.ts +14 -0
- package/dist/browser/url-scheme.d.ts.map +1 -0
- package/dist/browser/url-scheme.js +38 -0
- package/dist/browser/url-scheme.js.map +1 -0
- package/dist/browser/wait-target.d.ts +37 -0
- package/dist/browser/wait-target.d.ts.map +1 -0
- package/dist/browser/wait-target.js +54 -0
- package/dist/browser/wait-target.js.map +1 -0
- package/dist/cancellation.d.ts +20 -0
- package/dist/cancellation.d.ts.map +1 -0
- package/dist/cancellation.js +41 -0
- package/dist/cancellation.js.map +1 -0
- package/dist/capped.d.ts +39 -0
- package/dist/capped.d.ts.map +1 -0
- package/dist/capped.js +43 -0
- package/dist/capped.js.map +1 -0
- package/dist/credential-store.d.ts +22 -0
- package/dist/credential-store.d.ts.map +1 -0
- package/dist/credential-store.js +33 -0
- package/dist/credential-store.js.map +1 -0
- package/dist/disclosure-ledger.d.ts +14 -0
- package/dist/disclosure-ledger.d.ts.map +1 -0
- package/dist/disclosure-ledger.js +18 -0
- package/dist/disclosure-ledger.js.map +1 -0
- package/dist/evidence/observed-route-evidence.d.ts +25 -0
- package/dist/evidence/observed-route-evidence.d.ts.map +1 -0
- package/dist/evidence/observed-route-evidence.js +76 -0
- package/dist/evidence/observed-route-evidence.js.map +1 -0
- package/dist/heap.d.ts +61 -0
- package/dist/heap.d.ts.map +1 -0
- package/dist/heap.js +82 -0
- package/dist/heap.js.map +1 -0
- package/dist/heartbeat.d.ts +46 -0
- package/dist/heartbeat.d.ts.map +1 -0
- package/dist/heartbeat.js +66 -0
- package/dist/heartbeat.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/module-trust.d.ts +37 -0
- package/dist/module-trust.d.ts.map +1 -0
- package/dist/module-trust.js +77 -0
- package/dist/module-trust.js.map +1 -0
- package/dist/path-confinement.d.ts +31 -0
- package/dist/path-confinement.d.ts.map +1 -0
- package/dist/path-confinement.js +44 -0
- package/dist/path-confinement.js.map +1 -0
- package/dist/planner/predict-then-propose.d.ts +134 -0
- package/dist/planner/predict-then-propose.d.ts.map +1 -0
- package/dist/planner/predict-then-propose.js +138 -0
- package/dist/planner/predict-then-propose.js.map +1 -0
- package/dist/planner/propose-journey.d.ts +75 -0
- package/dist/planner/propose-journey.d.ts.map +1 -0
- package/dist/planner/propose-journey.js +96 -0
- package/dist/planner/propose-journey.js.map +1 -0
- package/dist/protocol.d.ts +57 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +90 -0
- package/dist/protocol.js.map +1 -0
- package/dist/ready-checks.d.ts +12 -0
- package/dist/ready-checks.d.ts.map +1 -0
- package/dist/ready-checks.js +43 -0
- package/dist/ready-checks.js.map +1 -0
- package/dist/registry.d.ts +103 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +327 -0
- package/dist/registry.js.map +1 -0
- package/dist/render.d.ts +623 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +968 -0
- package/dist/render.js.map +1 -0
- package/dist/runtime-registry.d.ts +22 -0
- package/dist/runtime-registry.d.ts.map +1 -0
- package/dist/runtime-registry.js +142 -0
- package/dist/runtime-registry.js.map +1 -0
- package/dist/sandbox-defaults.d.ts +41 -0
- package/dist/sandbox-defaults.d.ts.map +1 -0
- package/dist/sandbox-defaults.js +14 -0
- package/dist/sandbox-defaults.js.map +1 -0
- package/dist/scenarios/browser-run-plan-projection.d.ts +161 -0
- package/dist/scenarios/browser-run-plan-projection.d.ts.map +1 -0
- package/dist/scenarios/browser-run-plan-projection.js +264 -0
- package/dist/scenarios/browser-run-plan-projection.js.map +1 -0
- package/dist/scenarios/credential-ref.d.ts +102 -0
- package/dist/scenarios/credential-ref.d.ts.map +1 -0
- package/dist/scenarios/credential-ref.js +148 -0
- package/dist/scenarios/credential-ref.js.map +1 -0
- package/dist/scenarios/index.d.ts +7 -0
- package/dist/scenarios/index.d.ts.map +1 -0
- package/dist/scenarios/index.js +7 -0
- package/dist/scenarios/index.js.map +1 -0
- package/dist/scenarios/parse.d.ts +18 -0
- package/dist/scenarios/parse.d.ts.map +1 -0
- package/dist/scenarios/parse.js +212 -0
- package/dist/scenarios/parse.js.map +1 -0
- package/dist/scenarios/scenario.d.ts +93 -0
- package/dist/scenarios/scenario.d.ts.map +1 -0
- package/dist/scenarios/scenario.js +27 -0
- package/dist/scenarios/scenario.js.map +1 -0
- package/dist/scenarios/secret-ref.d.ts +86 -0
- package/dist/scenarios/secret-ref.d.ts.map +1 -0
- package/dist/scenarios/secret-ref.js +125 -0
- package/dist/scenarios/secret-ref.js.map +1 -0
- package/dist/scenarios/storage.d.ts +21 -0
- package/dist/scenarios/storage.d.ts.map +1 -0
- package/dist/scenarios/storage.js +103 -0
- package/dist/scenarios/storage.js.map +1 -0
- package/dist/server.d.ts +61 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +642 -0
- package/dist/server.js.map +1 -0
- package/dist/session.d.ts +356 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +779 -0
- package/dist/session.js.map +1 -0
- package/dist/tools/alias-kit.d.ts +29 -0
- package/dist/tools/alias-kit.d.ts.map +1 -0
- package/dist/tools/alias-kit.js +21 -0
- package/dist/tools/alias-kit.js.map +1 -0
- package/dist/tools/aliases.d.ts +42 -0
- package/dist/tools/aliases.d.ts.map +1 -0
- package/dist/tools/aliases.js +52 -0
- package/dist/tools/aliases.js.map +1 -0
- package/dist/tools/analyze-workspace.d.ts +52 -0
- package/dist/tools/analyze-workspace.d.ts.map +1 -0
- package/dist/tools/analyze-workspace.js +207 -0
- package/dist/tools/analyze-workspace.js.map +1 -0
- package/dist/tools/analyze.d.ts +163 -0
- package/dist/tools/analyze.d.ts.map +1 -0
- package/dist/tools/analyze.js +724 -0
- package/dist/tools/analyze.js.map +1 -0
- package/dist/tools/browser-click.d.ts +18 -0
- package/dist/tools/browser-click.d.ts.map +1 -0
- package/dist/tools/browser-click.js +110 -0
- package/dist/tools/browser-click.js.map +1 -0
- package/dist/tools/browser-close-session.d.ts +39 -0
- package/dist/tools/browser-close-session.d.ts.map +1 -0
- package/dist/tools/browser-close-session.js +120 -0
- package/dist/tools/browser-close-session.js.map +1 -0
- package/dist/tools/browser-fill.d.ts +18 -0
- package/dist/tools/browser-fill.d.ts.map +1 -0
- package/dist/tools/browser-fill.js +117 -0
- package/dist/tools/browser-fill.js.map +1 -0
- package/dist/tools/browser-navigate.d.ts +15 -0
- package/dist/tools/browser-navigate.d.ts.map +1 -0
- package/dist/tools/browser-navigate.js +106 -0
- package/dist/tools/browser-navigate.js.map +1 -0
- package/dist/tools/browser-read.d.ts +33 -0
- package/dist/tools/browser-read.d.ts.map +1 -0
- package/dist/tools/browser-read.js +105 -0
- package/dist/tools/browser-read.js.map +1 -0
- package/dist/tools/browser-run-scenario.d.ts +28 -0
- package/dist/tools/browser-run-scenario.d.ts.map +1 -0
- package/dist/tools/browser-run-scenario.js +238 -0
- package/dist/tools/browser-run-scenario.js.map +1 -0
- package/dist/tools/browser-save-scenario.d.ts +19 -0
- package/dist/tools/browser-save-scenario.d.ts.map +1 -0
- package/dist/tools/browser-save-scenario.js +447 -0
- package/dist/tools/browser-save-scenario.js.map +1 -0
- package/dist/tools/browser-select.d.ts +20 -0
- package/dist/tools/browser-select.d.ts.map +1 -0
- package/dist/tools/browser-select.js +120 -0
- package/dist/tools/browser-select.js.map +1 -0
- package/dist/tools/browser-snapshot.d.ts +46 -0
- package/dist/tools/browser-snapshot.d.ts.map +1 -0
- package/dist/tools/browser-snapshot.js +127 -0
- package/dist/tools/browser-snapshot.js.map +1 -0
- package/dist/tools/browser-start-session.d.ts +24 -0
- package/dist/tools/browser-start-session.d.ts.map +1 -0
- package/dist/tools/browser-start-session.js +653 -0
- package/dist/tools/browser-start-session.js.map +1 -0
- package/dist/tools/browser-submit.d.ts +18 -0
- package/dist/tools/browser-submit.d.ts.map +1 -0
- package/dist/tools/browser-submit.js +106 -0
- package/dist/tools/browser-submit.js.map +1 -0
- package/dist/tools/browser-type.d.ts +18 -0
- package/dist/tools/browser-type.d.ts.map +1 -0
- package/dist/tools/browser-type.js +115 -0
- package/dist/tools/browser-type.js.map +1 -0
- package/dist/tools/browser-wait-for.d.ts +45 -0
- package/dist/tools/browser-wait-for.d.ts.map +1 -0
- package/dist/tools/browser-wait-for.js +164 -0
- package/dist/tools/browser-wait-for.js.map +1 -0
- package/dist/tools/browser.d.ts +69 -0
- package/dist/tools/browser.d.ts.map +1 -0
- package/dist/tools/browser.js +326 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/chain.d.ts +41 -0
- package/dist/tools/chain.d.ts.map +1 -0
- package/dist/tools/chain.js +101 -0
- package/dist/tools/chain.js.map +1 -0
- package/dist/tools/change-scope.d.ts +25 -0
- package/dist/tools/change-scope.d.ts.map +1 -0
- package/dist/tools/change-scope.js +103 -0
- package/dist/tools/change-scope.js.map +1 -0
- package/dist/tools/code-context.d.ts +83 -0
- package/dist/tools/code-context.d.ts.map +1 -0
- package/dist/tools/code-context.js +432 -0
- package/dist/tools/code-context.js.map +1 -0
- package/dist/tools/contracts.d.ts +74 -0
- package/dist/tools/contracts.d.ts.map +1 -0
- package/dist/tools/contracts.js +214 -0
- package/dist/tools/contracts.js.map +1 -0
- package/dist/tools/cross-pr.d.ts +178 -0
- package/dist/tools/cross-pr.d.ts.map +1 -0
- package/dist/tools/cross-pr.js +362 -0
- package/dist/tools/cross-pr.js.map +1 -0
- package/dist/tools/disclosure.d.ts +75 -0
- package/dist/tools/disclosure.d.ts.map +1 -0
- package/dist/tools/disclosure.js +325 -0
- package/dist/tools/disclosure.js.map +1 -0
- package/dist/tools/draw-conclusion.d.ts +55 -0
- package/dist/tools/draw-conclusion.d.ts.map +1 -0
- package/dist/tools/draw-conclusion.js +243 -0
- package/dist/tools/draw-conclusion.js.map +1 -0
- package/dist/tools/git-context.d.ts +39 -0
- package/dist/tools/git-context.d.ts.map +1 -0
- package/dist/tools/git-context.js +374 -0
- package/dist/tools/git-context.js.map +1 -0
- package/dist/tools/git-diff.d.ts +45 -0
- package/dist/tools/git-diff.d.ts.map +1 -0
- package/dist/tools/git-diff.js +338 -0
- package/dist/tools/git-diff.js.map +1 -0
- package/dist/tools/git-history.d.ts +16 -0
- package/dist/tools/git-history.d.ts.map +1 -0
- package/dist/tools/git-history.js +106 -0
- package/dist/tools/git-history.js.map +1 -0
- package/dist/tools/history.d.ts +34 -0
- package/dist/tools/history.d.ts.map +1 -0
- package/dist/tools/history.js +121 -0
- package/dist/tools/history.js.map +1 -0
- package/dist/tools/impact.d.ts +46 -0
- package/dist/tools/impact.d.ts.map +1 -0
- package/dist/tools/impact.js +225 -0
- package/dist/tools/impact.js.map +1 -0
- package/dist/tools/index.d.ts +59 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +70 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/kit.d.ts +165 -0
- package/dist/tools/kit.d.ts.map +1 -0
- package/dist/tools/kit.js +153 -0
- package/dist/tools/kit.js.map +1 -0
- package/dist/tools/link-workspace.d.ts +24 -0
- package/dist/tools/link-workspace.d.ts.map +1 -0
- package/dist/tools/link-workspace.js +131 -0
- package/dist/tools/link-workspace.js.map +1 -0
- package/dist/tools/lookup.d.ts +19 -0
- package/dist/tools/lookup.d.ts.map +1 -0
- package/dist/tools/lookup.js +63 -0
- package/dist/tools/lookup.js.map +1 -0
- package/dist/tools/mark-incident.d.ts +28 -0
- package/dist/tools/mark-incident.d.ts.map +1 -0
- package/dist/tools/mark-incident.js +171 -0
- package/dist/tools/mark-incident.js.map +1 -0
- package/dist/tools/merged-browser.d.ts +11 -0
- package/dist/tools/merged-browser.d.ts.map +1 -0
- package/dist/tools/merged-browser.js +20 -0
- package/dist/tools/merged-browser.js.map +1 -0
- package/dist/tools/merged-context.d.ts +11 -0
- package/dist/tools/merged-context.d.ts.map +1 -0
- package/dist/tools/merged-context.js +21 -0
- package/dist/tools/merged-context.js.map +1 -0
- package/dist/tools/merged-observe.d.ts +13 -0
- package/dist/tools/merged-observe.d.ts.map +1 -0
- package/dist/tools/merged-observe.js +21 -0
- package/dist/tools/merged-observe.js.map +1 -0
- package/dist/tools/merged-workspace.d.ts +14 -0
- package/dist/tools/merged-workspace.d.ts.map +1 -0
- package/dist/tools/merged-workspace.js +21 -0
- package/dist/tools/merged-workspace.js.map +1 -0
- package/dist/tools/observe-runtime.d.ts +262 -0
- package/dist/tools/observe-runtime.d.ts.map +1 -0
- package/dist/tools/observe-runtime.js +1966 -0
- package/dist/tools/observe-runtime.js.map +1 -0
- package/dist/tools/observe-tests.d.ts +57 -0
- package/dist/tools/observe-tests.d.ts.map +1 -0
- package/dist/tools/observe-tests.js +391 -0
- package/dist/tools/observe-tests.js.map +1 -0
- package/dist/tools/observe.d.ts +28 -0
- package/dist/tools/observe.d.ts.map +1 -0
- package/dist/tools/observe.js +291 -0
- package/dist/tools/observe.js.map +1 -0
- package/dist/tools/pr-analysis.d.ts +189 -0
- package/dist/tools/pr-analysis.d.ts.map +1 -0
- package/dist/tools/pr-analysis.js +365 -0
- package/dist/tools/pr-analysis.js.map +1 -0
- package/dist/tools/pre-push.d.ts +168 -0
- package/dist/tools/pre-push.d.ts.map +1 -0
- package/dist/tools/pre-push.js +416 -0
- package/dist/tools/pre-push.js.map +1 -0
- package/dist/tools/predict-reach.d.ts +57 -0
- package/dist/tools/predict-reach.d.ts.map +1 -0
- package/dist/tools/predict-reach.js +183 -0
- package/dist/tools/predict-reach.js.map +1 -0
- package/dist/tools/propagation.d.ts +37 -0
- package/dist/tools/propagation.d.ts.map +1 -0
- package/dist/tools/propagation.js +162 -0
- package/dist/tools/propagation.js.map +1 -0
- package/dist/tools/propose-journey.d.ts +16 -0
- package/dist/tools/propose-journey.d.ts.map +1 -0
- package/dist/tools/propose-journey.js +132 -0
- package/dist/tools/propose-journey.js.map +1 -0
- package/dist/tools/prove-reach.d.ts +74 -0
- package/dist/tools/prove-reach.d.ts.map +1 -0
- package/dist/tools/prove-reach.js +274 -0
- package/dist/tools/prove-reach.js.map +1 -0
- package/dist/tools/questions.d.ts +30 -0
- package/dist/tools/questions.d.ts.map +1 -0
- package/dist/tools/questions.js +230 -0
- package/dist/tools/questions.js.map +1 -0
- package/dist/tools/refusal-fetch.d.ts +35 -0
- package/dist/tools/refusal-fetch.d.ts.map +1 -0
- package/dist/tools/refusal-fetch.js +123 -0
- package/dist/tools/refusal-fetch.js.map +1 -0
- package/dist/tools/runtime-incident.d.ts +33 -0
- package/dist/tools/runtime-incident.d.ts.map +1 -0
- package/dist/tools/runtime-incident.js +67 -0
- package/dist/tools/runtime-incident.js.map +1 -0
- package/dist/tools/runtime-journey-drive.d.ts +102 -0
- package/dist/tools/runtime-journey-drive.d.ts.map +1 -0
- package/dist/tools/runtime-journey-drive.js +247 -0
- package/dist/tools/runtime-journey-drive.js.map +1 -0
- package/dist/tools/scope.d.ts +45 -0
- package/dist/tools/scope.d.ts.map +1 -0
- package/dist/tools/scope.js +217 -0
- package/dist/tools/scope.js.map +1 -0
- package/dist/tools/similar-incidents.d.ts +43 -0
- package/dist/tools/similar-incidents.d.ts.map +1 -0
- package/dist/tools/similar-incidents.js +190 -0
- package/dist/tools/similar-incidents.js.map +1 -0
- package/dist/tools/validate.d.ts +133 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +488 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/tools/verb.d.ts +46 -0
- package/dist/tools/verb.d.ts.map +1 -0
- package/dist/tools/verb.js +78 -0
- package/dist/tools/verb.js.map +1 -0
- package/dist/tools/verification-status.d.ts +38 -0
- package/dist/tools/verification-status.d.ts.map +1 -0
- package/dist/tools/verification-status.js +203 -0
- package/dist/tools/verification-status.js.map +1 -0
- package/dist/tools/verify-claim.d.ts +29 -0
- package/dist/tools/verify-claim.d.ts.map +1 -0
- package/dist/tools/verify-claim.js +218 -0
- package/dist/tools/verify-claim.js.map +1 -0
- package/dist/tools/workspace.d.ts +28 -0
- package/dist/tools/workspace.d.ts.map +1 -0
- package/dist/tools/workspace.js +94 -0
- package/dist/tools/workspace.js.map +1 -0
- package/dist/transport.d.ts +32 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +85 -0
- package/dist/transport.js.map +1 -0
- package/dist/workspace-index.d.ts +164 -0
- package/dist/workspace-index.d.ts.map +1 -0
- package/dist/workspace-index.js +381 -0
- package/dist/workspace-index.js.map +1 -0
- package/package.json +5 -5
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fingerprint the application before driving it, and say up front how much of
|
|
3
|
+
* it is likely reachable. §4.2.
|
|
4
|
+
*
|
|
5
|
+
* ## Why a probe is worth more than it looks
|
|
6
|
+
*
|
|
7
|
+
* The obvious value is expectation-setting: a run that opens by saying "this
|
|
8
|
+
* page has a payment widget in a frame I cannot enter and a canvas I cannot
|
|
9
|
+
* read" is a better run than one that discovers it at the end. The larger value
|
|
10
|
+
* is the second-order one §4.2 names — **the distribution of these fingerprints
|
|
11
|
+
* across real applications is the roadmap.** The corpus in
|
|
12
|
+
* `fixtures/hostile-apps/` was drawn from imagination, which is exactly the
|
|
13
|
+
* method §4 says does not scale. A risk kind counted across real sessions is
|
|
14
|
+
* drawn from the field, and it ranks the work without anybody guessing.
|
|
15
|
+
*
|
|
16
|
+
* That is why `ReachRiskKind` is a small closed vocabulary and not free text.
|
|
17
|
+
* A count is only a roadmap if the same shape lands in the same bucket every
|
|
18
|
+
* time.
|
|
19
|
+
*
|
|
20
|
+
* ## The estimate is pessimistic in exactly one direction
|
|
21
|
+
*
|
|
22
|
+
* `full` requires **zero** named risks. Anything else is at best `partial`. An
|
|
23
|
+
* estimate that reads high and then disappoints is the failure this exists to
|
|
24
|
+
* remove, so the asymmetry is deliberate: a `partial` that turns out to be full
|
|
25
|
+
* coverage costs a sentence of hedging, and a `full` that turns out to be 30%
|
|
26
|
+
* costs the report's credibility.
|
|
27
|
+
*
|
|
28
|
+
* Nothing here names a language or a framework (rule 1) — every field is a
|
|
29
|
+
* property of a rendered document.
|
|
30
|
+
*/
|
|
31
|
+
/** How much of the application this page is likely to expose. Four values, ordered worst-last. */
|
|
32
|
+
export declare const REACH_BANDS: readonly ["full", "partial", "low", "blocked"];
|
|
33
|
+
export type ReachBand = (typeof REACH_BANDS)[number];
|
|
34
|
+
/**
|
|
35
|
+
* The closed vocabulary of reasons reach is at risk. Extend it only with a
|
|
36
|
+
* shape seen in the field — a kind nobody counts is a kind that cannot rank
|
|
37
|
+
* anything, and a kind that overlaps another makes both counts meaningless.
|
|
38
|
+
*/
|
|
39
|
+
export declare const REACH_RISK_KINDS: readonly ["shadowRoot", "childFrame", "crossOriginFrame", "virtualizedRegion", "belowTheFold", "canvasRendered", "overlay", "inertSubtree", "authWall", "challenge", "clientSideRouting"];
|
|
40
|
+
export type ReachRiskKind = (typeof REACH_RISK_KINDS)[number];
|
|
41
|
+
export interface ReachRisk {
|
|
42
|
+
readonly kind: ReachRiskKind;
|
|
43
|
+
/** What was found, with the number that was found. */
|
|
44
|
+
readonly detail: string;
|
|
45
|
+
/** What it costs — stated as a consequence for this run, not as a category. */
|
|
46
|
+
readonly effect: string;
|
|
47
|
+
}
|
|
48
|
+
export interface ReachEstimate {
|
|
49
|
+
readonly band: ReachBand;
|
|
50
|
+
readonly risks: readonly ReachRisk[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* What one probe of a page found. Counts, never verdicts: a fingerprint is
|
|
54
|
+
* evidence, and `estimateReach` is the only thing that turns it into a claim.
|
|
55
|
+
*/
|
|
56
|
+
export interface PageFingerprint {
|
|
57
|
+
readonly url: string;
|
|
58
|
+
/** Interactive elements the snapshot query matched, shadow roots included. */
|
|
59
|
+
readonly interactiveElements: number;
|
|
60
|
+
/** Open shadow roots found. Closed ones cannot be counted at all, which is disclosed rather than reported as zero. */
|
|
61
|
+
readonly openShadowRoots: number;
|
|
62
|
+
/** Of `interactiveElements`, how many live inside a shadow root. These are drivable and unsaveable. */
|
|
63
|
+
readonly shadowInteractiveElements: number;
|
|
64
|
+
readonly childFrames: number;
|
|
65
|
+
readonly crossOriginChildFrames: number;
|
|
66
|
+
/** Regions whose scrollable content exceeds their box — a paged, virtualized or otherwise windowed list. */
|
|
67
|
+
readonly scrollableRegions: number;
|
|
68
|
+
/** Largest canvas area as a share of the viewport, 0–1. */
|
|
69
|
+
readonly canvasViewportShare: number;
|
|
70
|
+
/** Largest canvas area in CSS pixels. Needed alongside the share because a
|
|
71
|
+
* small viewport and a large one disagree about the same canvas. */
|
|
72
|
+
readonly largestCanvasArea: number;
|
|
73
|
+
/** Fixed-position elements covering a large part of the viewport — a consent
|
|
74
|
+
* banner, a cookie wall, an interstitial. Counted because the app underneath
|
|
75
|
+
* one is fully enumerable and completely unclickable, which is the single
|
|
76
|
+
* most misleading state this probe can be in. */
|
|
77
|
+
readonly fixedOverlays: number;
|
|
78
|
+
/** Elements marked `inert`. Their descendants are in the DOM, are enumerated,
|
|
79
|
+
* and are removed from hit-testing and focus entirely. */
|
|
80
|
+
readonly inertSubtrees: number;
|
|
81
|
+
/** Modal dialogs currently open. A modal makes the rest of the document
|
|
82
|
+
* unreachable whether or not anyone marked it inert. */
|
|
83
|
+
readonly openModalDialogs: number;
|
|
84
|
+
readonly passwordFields: number;
|
|
85
|
+
/**
|
|
86
|
+
* Fields declaring `autocomplete="one-time-code"` — a second factor.
|
|
87
|
+
*
|
|
88
|
+
* Counted apart from `passwordFields` because a second-factor screen usually
|
|
89
|
+
* has no password on it, so a session that landed on one would otherwise look
|
|
90
|
+
* like an ordinary page with a text box. It is deliberately **not** a
|
|
91
|
+
* `challenge`: the code is a fact Descry does not have rather than a test it
|
|
92
|
+
* is refusing to sit, and the remedy — seed a session that is already past it
|
|
93
|
+
* — is the same one an auth wall has, so it is reported as the same risk with
|
|
94
|
+
* its own sentence. Matched on the standard attribute alone: a looser match
|
|
95
|
+
* would put a wall in front of an application that has none.
|
|
96
|
+
*/
|
|
97
|
+
readonly oneTimeCodeFields: number;
|
|
98
|
+
/** Markers a human-verification challenge leaves behind, in plain words. Empty is a real "none found", not "did not look". */
|
|
99
|
+
readonly challengeMarkers: readonly string[];
|
|
100
|
+
/** The page changed history without a document navigation. **Null means not
|
|
101
|
+
* probed** — a single static look cannot tell a routed application from a
|
|
102
|
+
* server-rendered one, and `false` there would be a claim nothing supports. */
|
|
103
|
+
readonly clientSideRouting: boolean | null;
|
|
104
|
+
/** Document height over viewport height. 1 means everything is on screen. */
|
|
105
|
+
readonly documentHeightRatio: number;
|
|
106
|
+
}
|
|
107
|
+
export declare function estimateReach(fingerprint: PageFingerprint): ReachEstimate;
|
|
108
|
+
export declare function reachEstimateNotes(estimate: ReachEstimate, notProbedRouting?: boolean): readonly string[];
|
|
109
|
+
//# sourceMappingURL=capability-probe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-probe.d.ts","sourceRoot":"","sources":["../../src/browser/capability-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,kGAAkG;AAClG,eAAO,MAAM,WAAW,gDAAiD,CAAC;AAC1E,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,2LAYnB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CACtC;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,sHAAsH;IACtH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,uGAAuG;IACvG,QAAQ,CAAC,yBAAyB,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,4GAA4G;IAC5G,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,2DAA2D;IAC3D,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC;yEACqE;IACrE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC;;;sDAGkD;IAClD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;+DAC2D;IAC3D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B;6DACyD;IACzD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,8HAA8H;IAC9H,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C;;oFAEgF;IAChF,QAAQ,CAAC,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3C,6EAA6E;IAC7E,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAgBD,wBAAgB,aAAa,CAAC,WAAW,EAAE,eAAe,GAAG,aAAa,CAiIzE;AAmBD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,EAAE,gBAAgB,UAAQ,GAAG,SAAS,MAAM,EAAE,CAkBvG"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fingerprint the application before driving it, and say up front how much of
|
|
3
|
+
* it is likely reachable. §4.2.
|
|
4
|
+
*
|
|
5
|
+
* ## Why a probe is worth more than it looks
|
|
6
|
+
*
|
|
7
|
+
* The obvious value is expectation-setting: a run that opens by saying "this
|
|
8
|
+
* page has a payment widget in a frame I cannot enter and a canvas I cannot
|
|
9
|
+
* read" is a better run than one that discovers it at the end. The larger value
|
|
10
|
+
* is the second-order one §4.2 names — **the distribution of these fingerprints
|
|
11
|
+
* across real applications is the roadmap.** The corpus in
|
|
12
|
+
* `fixtures/hostile-apps/` was drawn from imagination, which is exactly the
|
|
13
|
+
* method §4 says does not scale. A risk kind counted across real sessions is
|
|
14
|
+
* drawn from the field, and it ranks the work without anybody guessing.
|
|
15
|
+
*
|
|
16
|
+
* That is why `ReachRiskKind` is a small closed vocabulary and not free text.
|
|
17
|
+
* A count is only a roadmap if the same shape lands in the same bucket every
|
|
18
|
+
* time.
|
|
19
|
+
*
|
|
20
|
+
* ## The estimate is pessimistic in exactly one direction
|
|
21
|
+
*
|
|
22
|
+
* `full` requires **zero** named risks. Anything else is at best `partial`. An
|
|
23
|
+
* estimate that reads high and then disappoints is the failure this exists to
|
|
24
|
+
* remove, so the asymmetry is deliberate: a `partial` that turns out to be full
|
|
25
|
+
* coverage costs a sentence of hedging, and a `full` that turns out to be 30%
|
|
26
|
+
* costs the report's credibility.
|
|
27
|
+
*
|
|
28
|
+
* Nothing here names a language or a framework (rule 1) — every field is a
|
|
29
|
+
* property of a rendered document.
|
|
30
|
+
*/
|
|
31
|
+
/** How much of the application this page is likely to expose. Four values, ordered worst-last. */
|
|
32
|
+
export const REACH_BANDS = ["full", "partial", "low", "blocked"];
|
|
33
|
+
/**
|
|
34
|
+
* The closed vocabulary of reasons reach is at risk. Extend it only with a
|
|
35
|
+
* shape seen in the field — a kind nobody counts is a kind that cannot rank
|
|
36
|
+
* anything, and a kind that overlaps another makes both counts meaningless.
|
|
37
|
+
*/
|
|
38
|
+
export const REACH_RISK_KINDS = [
|
|
39
|
+
"shadowRoot",
|
|
40
|
+
"childFrame",
|
|
41
|
+
"crossOriginFrame",
|
|
42
|
+
"virtualizedRegion",
|
|
43
|
+
"belowTheFold",
|
|
44
|
+
"canvasRendered",
|
|
45
|
+
"overlay",
|
|
46
|
+
"inertSubtree",
|
|
47
|
+
"authWall",
|
|
48
|
+
"challenge",
|
|
49
|
+
"clientSideRouting",
|
|
50
|
+
];
|
|
51
|
+
/** Above this share of the viewport, a canvas is the application rather than a chart in it. */
|
|
52
|
+
const CANVAS_DOMINATES = 0.5;
|
|
53
|
+
/**
|
|
54
|
+
* A canvas can be the whole application and still be a quarter of a large
|
|
55
|
+
* viewport — `fixtures/hostile-apps/` app 08 measured 0.25 on a 1280×720
|
|
56
|
+
* window and the share rule alone called it `full` reach, which is the wrong
|
|
57
|
+
* answer about an app with no DOM controls at all. So a large canvas on a page
|
|
58
|
+
* with almost nothing to click also counts. Both numbers are starting values.
|
|
59
|
+
*/
|
|
60
|
+
const CANVAS_LARGE_AREA = 50_000;
|
|
61
|
+
const FEW_CONTROLS = 2;
|
|
62
|
+
/** Below this, a taller-than-viewport document is ordinary rather than a long unvisited page. */
|
|
63
|
+
const TALL_DOCUMENT = 2;
|
|
64
|
+
export function estimateReach(fingerprint) {
|
|
65
|
+
const risks = [];
|
|
66
|
+
if (fingerprint.challengeMarkers.length > 0) {
|
|
67
|
+
risks.push({
|
|
68
|
+
kind: "challenge",
|
|
69
|
+
detail: `A human-verification challenge is present: ${fingerprint.challengeMarkers.join("; ")}.`,
|
|
70
|
+
effect: "Descry does not attempt to pass a challenge, by design. Everything behind this screen is not analysable, " +
|
|
71
|
+
"and reporting it as clean would be the more serious error.",
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
if (fingerprint.passwordFields > 0 || fingerprint.oneTimeCodeFields > 0) {
|
|
75
|
+
const parts = [];
|
|
76
|
+
if (fingerprint.passwordFields > 0) {
|
|
77
|
+
parts.push(`${fingerprint.passwordFields} password field${fingerprint.passwordFields === 1 ? "" : "s"}`);
|
|
78
|
+
}
|
|
79
|
+
if (fingerprint.oneTimeCodeFields > 0) {
|
|
80
|
+
parts.push(`${fingerprint.oneTimeCodeFields} one-time code field${fingerprint.oneTimeCodeFields === 1 ? "" : "s"} (a second factor)`);
|
|
81
|
+
}
|
|
82
|
+
risks.push({
|
|
83
|
+
kind: "authWall",
|
|
84
|
+
detail: `The entry screen has ${parts.join(" and ")}.`,
|
|
85
|
+
effect: "This looks like a sign-in step rather than the application. Without a seeded session, only this screen " +
|
|
86
|
+
"and whatever it links to without signing in can be reached. A second factor in particular is a value " +
|
|
87
|
+
"Descry does not hold and does not try to obtain — a session seeded from past it is the way through.",
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (fingerprint.fixedOverlays > 0) {
|
|
91
|
+
risks.push({
|
|
92
|
+
kind: "overlay",
|
|
93
|
+
detail: `${fingerprint.fixedOverlays} fixed element${fingerprint.fixedOverlays === 1 ? "" : "s"} cover${fingerprint.fixedOverlays === 1 ? "s" : ""} a large part of the viewport.`,
|
|
94
|
+
effect: "A consent banner or interstitial over the application leaves every control beneath it enumerable, " +
|
|
95
|
+
"counted and untouchable. Until it is dismissed, an element list of this page describes an app that " +
|
|
96
|
+
"cannot be operated.",
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (fingerprint.openModalDialogs > 0 || fingerprint.inertSubtrees > 0) {
|
|
100
|
+
risks.push({
|
|
101
|
+
kind: "inertSubtree",
|
|
102
|
+
detail: `${fingerprint.openModalDialogs} open modal dialog${fingerprint.openModalDialogs === 1 ? "" : "s"} and ` +
|
|
103
|
+
`${fingerprint.inertSubtrees} inert subtree${fingerprint.inertSubtrees === 1 ? "" : "s"} on the page.`,
|
|
104
|
+
effect: "Everything outside the modal is still in the document and still enumerated, but is out of the hit-testing " +
|
|
105
|
+
"and focus trees. A click on it does not time out slowly — it cannot land at all.",
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
if (fingerprint.canvasViewportShare >= CANVAS_DOMINATES ||
|
|
109
|
+
(fingerprint.largestCanvasArea >= CANVAS_LARGE_AREA && fingerprint.interactiveElements <= FEW_CONTROLS)) {
|
|
110
|
+
risks.push({
|
|
111
|
+
kind: "canvasRendered",
|
|
112
|
+
detail: `A canvas covers about ${Math.round(fingerprint.canvasViewportShare * 100)}% of the viewport (${Math.round(fingerprint.largestCanvasArea)} px²).`,
|
|
113
|
+
effect: "Controls drawn into a canvas have no element behind them. Nothing on that surface can be enumerated or " +
|
|
114
|
+
"clicked, and any element reported from inside it is fallback markup that is not on screen.",
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
if (fingerprint.openShadowRoots > 0) {
|
|
118
|
+
risks.push({
|
|
119
|
+
kind: "shadowRoot",
|
|
120
|
+
detail: `${fingerprint.openShadowRoots} open shadow root${fingerprint.openShadowRoots === 1 ? "" : "s"}, holding ${fingerprint.shadowInteractiveElements} interactive element${fingerprint.shadowInteractiveElements === 1 ? "" : "s"}.`,
|
|
121
|
+
effect: "These can be driven this session but cannot be given a stable selector, so none of them can be saved to a " +
|
|
122
|
+
"scenario and replayed.",
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
if (fingerprint.childFrames > fingerprint.crossOriginChildFrames) {
|
|
126
|
+
risks.push({
|
|
127
|
+
kind: "childFrame",
|
|
128
|
+
detail: `${fingerprint.childFrames - fingerprint.crossOriginChildFrames} same-origin frame${fingerprint.childFrames - fingerprint.crossOriginChildFrames === 1 ? "" : "s"} on the page.`,
|
|
129
|
+
effect: "Their contents are enumerated and drivable, but an element inside a frame is given no page-level " +
|
|
130
|
+
"selector — the scenario format has no field to name a frame — so a flow through one cannot be saved " +
|
|
131
|
+
"or replayed.",
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
if (fingerprint.crossOriginChildFrames > 0) {
|
|
135
|
+
risks.push({
|
|
136
|
+
kind: "crossOriginFrame",
|
|
137
|
+
detail: `${fingerprint.crossOriginChildFrames} frame${fingerprint.crossOriginChildFrames === 1 ? "" : "s"} from another origin.`,
|
|
138
|
+
effect: "An embedded third-party surface — payment, auth or chat, typically. It is outside the origin this session " +
|
|
139
|
+
"was consented for, so it is not entered even when it could be.",
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
if (fingerprint.scrollableRegions > 0) {
|
|
143
|
+
risks.push({
|
|
144
|
+
kind: "virtualizedRegion",
|
|
145
|
+
detail: `${fingerprint.scrollableRegions} region${fingerprint.scrollableRegions === 1 ? "" : "s"} scroll independently of the page.`,
|
|
146
|
+
effect: "A windowed list renders only what is in view and destroys what it leaves, so no single snapshot can ever " +
|
|
147
|
+
"contain all of it and a handle taken before a scroll may not survive one.",
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
if (fingerprint.documentHeightRatio >= TALL_DOCUMENT) {
|
|
151
|
+
risks.push({
|
|
152
|
+
kind: "belowTheFold",
|
|
153
|
+
detail: `The document is about ${fingerprint.documentHeightRatio.toFixed(1)}× the viewport height.`,
|
|
154
|
+
effect: "Most of the page was never scrolled to. What is below the fold is unvisited, not absent.",
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
if (fingerprint.clientSideRouting === true) {
|
|
158
|
+
risks.push({
|
|
159
|
+
kind: "clientSideRouting",
|
|
160
|
+
detail: "The page changes history without loading a document.",
|
|
161
|
+
effect: "Screens are reached by clicking rather than by URL, so a screen nobody clicked toward was never seen and " +
|
|
162
|
+
"does not appear as a missing page anywhere.",
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
return { band: bandFor(risks), risks };
|
|
166
|
+
}
|
|
167
|
+
function bandFor(risks) {
|
|
168
|
+
if (risks.length === 0)
|
|
169
|
+
return "full";
|
|
170
|
+
const kinds = new Set(risks.map((r) => r.kind));
|
|
171
|
+
if (kinds.has("challenge"))
|
|
172
|
+
return "blocked";
|
|
173
|
+
// A covered or modal-blocked app is `low`, not `partial`: unlike a shadow
|
|
174
|
+
// root or a frame, nothing on the page is operable while it holds.
|
|
175
|
+
if (kinds.has("canvasRendered") || kinds.has("authWall") || kinds.has("overlay") || kinds.has("inertSubtree"))
|
|
176
|
+
return "low";
|
|
177
|
+
return "partial";
|
|
178
|
+
}
|
|
179
|
+
const BAND_SENTENCE = {
|
|
180
|
+
full: "Nothing on this page was recognised as a barrier to reaching it. That is an estimate made before driving anything, not a measurement of what was reached.",
|
|
181
|
+
partial: "Parts of this application are expected to be out of reach. This is an estimate made before driving anything; the reachability report at the end of the session is the measurement.",
|
|
182
|
+
low: "Most of this application is expected to be out of reach. This is an estimate made before driving anything; the reachability report at the end of the session is the measurement.",
|
|
183
|
+
blocked: "This screen is behind a challenge Descry does not attempt to pass. Anything behind it is not analysable — which is a different statement from finding nothing wrong with it.",
|
|
184
|
+
};
|
|
185
|
+
export function reachEstimateNotes(estimate, notProbedRouting = false) {
|
|
186
|
+
const notes = [`Reach estimate: ${estimate.band}. ${BAND_SENTENCE[estimate.band]}`];
|
|
187
|
+
for (const risk of estimate.risks)
|
|
188
|
+
notes.push(`${risk.kind}: ${risk.detail} ${risk.effect}`);
|
|
189
|
+
if (notProbedRouting) {
|
|
190
|
+
notes.push("Whether this application routes on the client was not probed — one static look cannot tell that from a " +
|
|
191
|
+
"server-rendered page. If it does route on the client, screens are reached by clicking rather than by URL, " +
|
|
192
|
+
"and a screen nobody clicked toward is missing from every number here without appearing as a missing page.");
|
|
193
|
+
}
|
|
194
|
+
if (estimate.risks.some((r) => r.kind === "shadowRoot")) {
|
|
195
|
+
notes.push("Only open shadow roots are counted. A closed shadow root cannot be enumerated at all, so its contents are " +
|
|
196
|
+
"neither counted here nor reported as absent — if this application uses one, its controls are missing from " +
|
|
197
|
+
"every number in this session.");
|
|
198
|
+
}
|
|
199
|
+
return notes;
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=capability-probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-probe.js","sourceRoot":"","sources":["../../src/browser/capability-probe.ts"],"names":[],"mappings":"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"}
|