qa360 2.2.20 → 2.3.1
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/README.md +155 -262
- package/{cli/dist → dist}/commands/ai.js +1 -1
- package/{cli/dist → dist}/commands/coverage.js +1 -1
- package/{cli/dist → dist}/commands/crawl.d.ts +12 -1
- package/{cli/dist → dist}/commands/crawl.js +70 -9
- package/{cli/dist → dist}/commands/doctor.js +2 -2
- package/{cli/dist → dist}/commands/explain.js +2 -2
- package/{cli/dist → dist}/commands/flakiness.js +1 -1
- package/{cli/dist → dist}/commands/generate.js +1 -1
- package/{cli/dist → dist}/commands/history.js +1 -1
- package/{cli/dist → dist}/commands/monitor.js +3 -3
- package/{cli/dist → dist}/commands/ollama.js +1 -1
- package/{cli/dist → dist}/commands/pack.js +2 -2
- package/{cli/dist → dist}/commands/regression.js +1 -1
- package/{cli/dist → dist}/commands/repair.js +1 -1
- package/{cli/dist → dist}/commands/retry.js +1 -1
- package/{cli/dist → dist}/commands/run.d.ts +1 -1
- package/{cli/dist → dist}/commands/run.js +1 -1
- package/{cli/dist → dist}/commands/secrets.js +1 -1
- package/{cli/dist → dist}/commands/serve.js +1 -1
- package/{cli/dist → dist}/commands/slo.js +1 -1
- package/{cli/dist → dist}/commands/verify.js +1 -1
- package/{cli/dist → dist}/core/adapters/playwright-native-api.d.ts +2 -0
- package/{cli/dist → dist}/core/adapters/playwright-native-api.js +20 -1
- package/{cli/dist → dist}/core/adapters/playwright-ui.d.ts +21 -0
- package/dist/core/adapters/playwright-ui.js +2050 -0
- package/{cli/dist → dist}/core/ai/ollama-provider.js +15 -3
- package/{cli/dist → dist}/core/artifacts/ui-artifacts.js +24 -4
- package/dist/core/auth/backup-codes-provider.d.ts +91 -0
- package/dist/core/auth/backup-codes-provider.js +215 -0
- package/{cli/dist → dist}/core/auth/basic-auth-provider.d.ts +6 -0
- package/{cli/dist → dist}/core/auth/basic-auth-provider.js +24 -6
- package/dist/core/auth/digest-auth-provider.d.ts +116 -0
- package/dist/core/auth/digest-auth-provider.js +244 -0
- package/dist/core/auth/hcaptcha-handler.d.ts +103 -0
- package/dist/core/auth/hcaptcha-handler.js +288 -0
- package/{cli/dist → dist}/core/auth/index.d.ts +81 -4
- package/{cli/dist → dist}/core/auth/index.js +15 -1
- package/dist/core/auth/oauth-handler.d.ts +408 -0
- package/dist/core/auth/oauth-handler.js +636 -0
- package/{cli/dist → dist}/core/auth/oauth2-provider.d.ts +9 -0
- package/dist/core/auth/oauth2-provider.js +227 -0
- package/dist/core/auth/otp-provider.d.ts +93 -0
- package/dist/core/auth/otp-provider.js +288 -0
- package/dist/core/auth/recaptcha-handler.d.ts +119 -0
- package/dist/core/auth/recaptcha-handler.js +301 -0
- package/dist/core/auth/remember-me-handler.d.ts +142 -0
- package/dist/core/auth/remember-me-handler.js +255 -0
- package/dist/core/auth/saml-handler.d.ts +173 -0
- package/dist/core/auth/saml-handler.js +364 -0
- package/dist/core/auth/webauthn-handler.d.ts +182 -0
- package/dist/core/auth/webauthn-handler.js +310 -0
- package/dist/core/crawler/advanced-interactions.d.ts +342 -0
- package/dist/core/crawler/advanced-interactions.js +1069 -0
- package/dist/core/crawler/blob-url-download-handler.d.ts +145 -0
- package/dist/core/crawler/blob-url-download-handler.js +392 -0
- package/dist/core/crawler/consent-handler.d.ts +49 -0
- package/dist/core/crawler/consent-handler.js +258 -0
- package/dist/core/crawler/cookie-manager.d.ts +166 -0
- package/dist/core/crawler/cookie-manager.js +353 -0
- package/dist/core/crawler/coop-coep-handler.d.ts +136 -0
- package/dist/core/crawler/coop-coep-handler.js +338 -0
- package/dist/core/crawler/csp-handler.d.ts +151 -0
- package/dist/core/crawler/csp-handler.js +415 -0
- package/dist/core/crawler/download-handler.d.ts +155 -0
- package/dist/core/crawler/download-handler.js +370 -0
- package/dist/core/crawler/email-testing-handler.d.ts +214 -0
- package/dist/core/crawler/email-testing-handler.js +398 -0
- package/dist/core/crawler/error-tracking-handler.d.ts +177 -0
- package/dist/core/crawler/error-tracking-handler.js +378 -0
- package/dist/core/crawler/form-handler.d.ts +100 -0
- package/dist/core/crawler/form-handler.js +465 -0
- package/dist/core/crawler/framework-wait-handler.d.ts +96 -0
- package/dist/core/crawler/framework-wait-handler.js +464 -0
- package/dist/core/crawler/geolocation-handler.d.ts +112 -0
- package/dist/core/crawler/geolocation-handler.js +276 -0
- package/dist/core/crawler/index.d.ts +78 -0
- package/{cli/dist → dist}/core/crawler/index.js +74 -1
- package/dist/core/crawler/intelligent-selector-generator.d.ts +164 -0
- package/dist/core/crawler/intelligent-selector-generator.js +612 -0
- package/{cli/dist → dist}/core/crawler/journey-generator.js +44 -1
- package/{cli/dist → dist}/core/crawler/page-analyzer.d.ts +16 -1
- package/{cli/dist → dist}/core/crawler/page-analyzer.js +469 -17
- package/dist/core/crawler/permissions-handler.d.ts +112 -0
- package/dist/core/crawler/permissions-handler.js +236 -0
- package/dist/core/crawler/permissions-policy-handler.d.ts +113 -0
- package/dist/core/crawler/permissions-policy-handler.js +402 -0
- package/dist/core/crawler/presets.d.ts +100 -0
- package/dist/core/crawler/presets.js +887 -0
- package/dist/core/crawler/repl-debug-handler.d.ts +105 -0
- package/dist/core/crawler/repl-debug-handler.js +552 -0
- package/dist/core/crawler/reporting-api-handler.d.ts +212 -0
- package/dist/core/crawler/reporting-api-handler.js +344 -0
- package/{cli/dist → dist}/core/crawler/selector-generator.d.ts +9 -0
- package/{cli/dist → dist}/core/crawler/selector-generator.js +99 -23
- package/dist/core/crawler/site-profiler.d.ts +89 -0
- package/dist/core/crawler/site-profiler.js +290 -0
- package/dist/core/crawler/sourcemaps-handler.d.ts +144 -0
- package/dist/core/crawler/sourcemaps-handler.js +420 -0
- package/dist/core/crawler/stacked-modals-handler.d.ts +118 -0
- package/dist/core/crawler/stacked-modals-handler.js +429 -0
- package/dist/core/crawler/trusted-types-handler.d.ts +149 -0
- package/dist/core/crawler/trusted-types-handler.js +413 -0
- package/{cli/dist → dist}/core/crawler/types.d.ts +68 -2
- package/dist/core/crawler/wait-strategies.d.ts +108 -0
- package/dist/core/crawler/wait-strategies.js +399 -0
- package/dist/core/fixtures/factories.d.ts +180 -0
- package/dist/core/fixtures/factories.js +279 -0
- package/dist/core/fixtures/index.d.ts +6 -0
- package/dist/core/fixtures/index.js +6 -0
- package/{cli/dist → dist}/core/generation/crawler-pack-generator.d.ts +13 -3
- package/dist/core/generation/crawler-pack-generator.js +232 -0
- package/{cli/dist → dist}/core/generation/index.d.ts +2 -0
- package/{cli/dist → dist}/core/generation/index.js +2 -0
- package/{cli/dist → dist}/core/index.d.ts +2 -0
- package/{cli/dist → dist}/core/index.js +4 -0
- package/dist/core/network/index.d.ts +7 -0
- package/dist/core/network/index.js +7 -0
- package/dist/core/network/network-manager.d.ts +237 -0
- package/dist/core/network/network-manager.js +343 -0
- package/dist/core/network/network-simulator.d.ts +158 -0
- package/dist/core/network/network-simulator.js +261 -0
- package/{cli/dist → dist}/core/pack/validator.js +2 -2
- package/{cli/dist → dist}/core/pack-v2/migrator.d.ts +5 -0
- package/{cli/dist → dist}/core/pack-v2/migrator.js +81 -6
- package/{cli/dist → dist}/core/pack-v2/validator.js +4 -3
- package/{cli/dist → dist}/core/pom/base-page.js +1 -1
- package/{cli/dist → dist}/core/pom/loader.js +1 -1
- package/dist/core/reporting/index.d.ts +9 -0
- package/dist/core/reporting/index.js +10 -0
- package/dist/core/reporting/junit-reporter.d.ts +114 -0
- package/dist/core/reporting/junit-reporter.js +306 -0
- package/{cli/dist → dist}/core/runner/e2e-helpers.d.ts +1 -1
- package/{cli/dist → dist}/core/runner/e2e-helpers.js +2 -2
- package/{cli/dist → dist}/core/runner/phase3-runner.d.ts +3 -0
- package/{cli/dist → dist}/core/runner/phase3-runner.js +45 -14
- package/dist/core/sharding/test-sharding.d.ts +137 -0
- package/dist/core/sharding/test-sharding.js +233 -0
- package/dist/core/storage/cookie-manager.d.ts +160 -0
- package/dist/core/storage/cookie-manager.js +268 -0
- package/dist/core/storage/index.d.ts +7 -0
- package/dist/core/storage/index.js +7 -0
- package/dist/core/storage/storage-helpers.d.ts +138 -0
- package/dist/core/storage/storage-helpers.js +315 -0
- package/dist/core/test-helpers/index.d.ts +6 -0
- package/dist/core/test-helpers/index.js +6 -0
- package/dist/core/test-helpers/state-reset.d.ts +119 -0
- package/dist/core/test-helpers/state-reset.js +234 -0
- package/{cli/dist → dist}/core/types/pack-v1.d.ts +15 -2
- package/{cli/dist → dist}/core/types/pack-v2.d.ts +1 -1
- package/dist/core/upload/chunked-uploader.d.ts +150 -0
- package/dist/core/upload/chunked-uploader.js +289 -0
- package/dist/core/upload/index.d.ts +11 -0
- package/dist/core/upload/index.js +8 -0
- package/dist/core/upload/mime-validator.d.ts +119 -0
- package/dist/core/upload/mime-validator.js +373 -0
- package/dist/core/upload/presigned-uploader.d.ts +118 -0
- package/dist/core/upload/presigned-uploader.js +274 -0
- package/dist/core/utils/device-emulation.d.ts +194 -0
- package/dist/core/utils/device-emulation.js +380 -0
- package/dist/core/utils/index.d.ts +8 -0
- package/dist/core/utils/index.js +8 -0
- package/dist/core/utils/retry.d.ts +145 -0
- package/dist/core/utils/retry.js +242 -0
- package/dist/core/utils/smart-wait.d.ts +133 -0
- package/dist/core/utils/smart-wait.js +417 -0
- package/dist/core/visual/index.d.ts +7 -0
- package/dist/core/visual/index.js +7 -0
- package/dist/core/visual/pixel-diff.d.ts +87 -0
- package/dist/core/visual/pixel-diff.js +213 -0
- package/dist/core/visual/screenshot-helper.d.ts +130 -0
- package/dist/core/visual/screenshot-helper.js +223 -0
- package/{cli/dist → dist}/utils/config.d.ts +1 -1
- package/examples/README.md +160 -0
- package/examples/accessibility.yml +48 -0
- package/examples/api-basic.yml +27 -0
- package/examples/complete.yml +146 -0
- package/examples/crawler.yml +38 -0
- package/examples/fullstack.yml +78 -0
- package/examples/security.yml +58 -0
- package/examples/ui-advanced.yml +49 -0
- package/examples/ui-basic.yml +24 -0
- package/package.json +33 -67
- package/CHANGELOG.md +0 -262
- package/CONTRIBUTING.md +0 -273
- package/QUICK_START.md +0 -191
- package/cli/CHANGELOG.md +0 -84
- package/cli/LICENSE +0 -24
- package/cli/README.md +0 -222
- package/cli/dist/core/adapters/playwright-ui.js +0 -864
- package/cli/dist/core/auth/oauth2-provider.js +0 -114
- package/cli/dist/core/coverage/analyzer.d.ts +0 -101
- package/cli/dist/core/coverage/analyzer.js +0 -415
- package/cli/dist/core/coverage/collector.d.ts +0 -74
- package/cli/dist/core/coverage/collector.js +0 -459
- package/cli/dist/core/coverage/config.d.ts +0 -37
- package/cli/dist/core/coverage/config.js +0 -156
- package/cli/dist/core/coverage/index.d.ts +0 -11
- package/cli/dist/core/coverage/index.js +0 -15
- package/cli/dist/core/coverage/types.d.ts +0 -267
- package/cli/dist/core/coverage/types.js +0 -6
- package/cli/dist/core/coverage/vault.d.ts +0 -95
- package/cli/dist/core/coverage/vault.js +0 -405
- package/cli/dist/core/crawler/index.d.ts +0 -57
- package/cli/dist/core/fixtures/index.d.ts +0 -8
- package/cli/dist/core/fixtures/index.js +0 -8
- package/cli/dist/core/generation/crawler-pack-generator.js +0 -231
- package/cli/dist/core/reporting/index.d.ts +0 -6
- package/cli/dist/core/reporting/index.js +0 -6
- package/cli/dist/core/visual/index.d.ts +0 -6
- package/cli/dist/core/visual/index.js +0 -6
- package/cli/package.json +0 -76
- package/core/LICENSE +0 -24
- package/core/README.md +0 -64
- package/core/package.json +0 -81
- package/core/schemas/pack.schema.json +0 -236
- /package/{cli/bin → bin}/qa360.js +0 -0
- /package/{cli/dist → dist}/cli-minimal.d.ts +0 -0
- /package/{cli/dist → dist}/cli-minimal.js +0 -0
- /package/{cli/dist → dist}/commands/ai.d.ts +0 -0
- /package/{cli/dist → dist}/commands/ask.d.ts +0 -0
- /package/{cli/dist → dist}/commands/ask.js +0 -0
- /package/{cli/dist → dist}/commands/coverage.d.ts +0 -0
- /package/{cli/dist → dist}/commands/doctor.d.ts +0 -0
- /package/{cli/dist → dist}/commands/examples.d.ts +0 -0
- /package/{cli/dist → dist}/commands/examples.js +0 -0
- /package/{cli/dist → dist}/commands/explain.d.ts +0 -0
- /package/{cli/dist → dist}/commands/flakiness.d.ts +0 -0
- /package/{cli/dist → dist}/commands/generate.d.ts +0 -0
- /package/{cli/dist → dist}/commands/history.d.ts +0 -0
- /package/{cli/dist → dist}/commands/init.d.ts +0 -0
- /package/{cli/dist → dist}/commands/init.js +0 -0
- /package/{cli/dist → dist}/commands/monitor.d.ts +0 -0
- /package/{cli/dist → dist}/commands/ollama.d.ts +0 -0
- /package/{cli/dist → dist}/commands/pack.d.ts +0 -0
- /package/{cli/dist → dist}/commands/regression.d.ts +0 -0
- /package/{cli/dist → dist}/commands/repair.d.ts +0 -0
- /package/{cli/dist → dist}/commands/report.d.ts +0 -0
- /package/{cli/dist → dist}/commands/report.js +0 -0
- /package/{cli/dist → dist}/commands/retry.d.ts +0 -0
- /package/{cli/dist → dist}/commands/scan.d.ts +0 -0
- /package/{cli/dist → dist}/commands/scan.js +0 -0
- /package/{cli/dist → dist}/commands/secrets.d.ts +0 -0
- /package/{cli/dist → dist}/commands/serve.d.ts +0 -0
- /package/{cli/dist → dist}/commands/slo.d.ts +0 -0
- /package/{cli/dist → dist}/commands/verify.d.ts +0 -0
- /package/{cli/dist → dist}/core/adapters/gitleaks-secrets.d.ts +0 -0
- /package/{cli/dist → dist}/core/adapters/gitleaks-secrets.js +0 -0
- /package/{cli/dist → dist}/core/adapters/jest-adapter.d.ts +0 -0
- /package/{cli/dist → dist}/core/adapters/jest-adapter.js +0 -0
- /package/{cli/dist → dist}/core/adapters/k6-perf.d.ts +0 -0
- /package/{cli/dist → dist}/core/adapters/k6-perf.js +0 -0
- /package/{cli/dist → dist}/core/adapters/osv-deps.d.ts +0 -0
- /package/{cli/dist → dist}/core/adapters/osv-deps.js +0 -0
- /package/{cli/dist → dist}/core/adapters/playwright-native-adapter.d.ts +0 -0
- /package/{cli/dist → dist}/core/adapters/playwright-native-adapter.js +0 -0
- /package/{cli/dist → dist}/core/adapters/pytest-adapter.d.ts +0 -0
- /package/{cli/dist → dist}/core/adapters/pytest-adapter.js +0 -0
- /package/{cli/dist → dist}/core/adapters/semgrep-sast.d.ts +0 -0
- /package/{cli/dist → dist}/core/adapters/semgrep-sast.js +0 -0
- /package/{cli/dist → dist}/core/adapters/unit-test-types.d.ts +0 -0
- /package/{cli/dist → dist}/core/adapters/unit-test-types.js +0 -0
- /package/{cli/dist → dist}/core/adapters/vitest-adapter.d.ts +0 -0
- /package/{cli/dist → dist}/core/adapters/vitest-adapter.js +0 -0
- /package/{cli/dist → dist}/core/adapters/zap-dast.d.ts +0 -0
- /package/{cli/dist → dist}/core/adapters/zap-dast.js +0 -0
- /package/{cli/dist → dist}/core/ai/anthropic-provider.d.ts +0 -0
- /package/{cli/dist → dist}/core/ai/anthropic-provider.js +0 -0
- /package/{cli/dist → dist}/core/ai/deepseek-provider.d.ts +0 -0
- /package/{cli/dist → dist}/core/ai/deepseek-provider.js +0 -0
- /package/{cli/dist → dist}/core/ai/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/ai/index.js +0 -0
- /package/{cli/dist → dist}/core/ai/llm-client.d.ts +0 -0
- /package/{cli/dist → dist}/core/ai/llm-client.js +0 -0
- /package/{cli/dist → dist}/core/ai/mock-provider.d.ts +0 -0
- /package/{cli/dist → dist}/core/ai/mock-provider.js +0 -0
- /package/{cli/dist → dist}/core/ai/ollama-provider.d.ts +0 -0
- /package/{cli/dist → dist}/core/ai/openai-provider.d.ts +0 -0
- /package/{cli/dist → dist}/core/ai/openai-provider.js +0 -0
- /package/{cli/dist → dist}/core/ai/provider-factory.d.ts +0 -0
- /package/{cli/dist → dist}/core/ai/provider-factory.js +0 -0
- /package/{cli/dist → dist}/core/artifacts/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/artifacts/index.js +0 -0
- /package/{cli/dist → dist}/core/artifacts/ui-artifacts.d.ts +0 -0
- /package/{cli/dist → dist}/core/assertions/engine.d.ts +0 -0
- /package/{cli/dist → dist}/core/assertions/engine.js +0 -0
- /package/{cli/dist → dist}/core/assertions/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/assertions/index.js +0 -0
- /package/{cli/dist → dist}/core/assertions/types.d.ts +0 -0
- /package/{cli/dist → dist}/core/assertions/types.js +0 -0
- /package/{cli/dist → dist}/core/auth/api-key-provider.d.ts +0 -0
- /package/{cli/dist → dist}/core/auth/api-key-provider.js +0 -0
- /package/{cli/dist → dist}/core/auth/aws-iam-provider.d.ts +0 -0
- /package/{cli/dist → dist}/core/auth/aws-iam-provider.js +0 -0
- /package/{cli/dist → dist}/core/auth/azure-ad-provider.d.ts +0 -0
- /package/{cli/dist → dist}/core/auth/azure-ad-provider.js +0 -0
- /package/{cli/dist → dist}/core/auth/gcp-adc-provider.d.ts +0 -0
- /package/{cli/dist → dist}/core/auth/gcp-adc-provider.js +0 -0
- /package/{cli/dist → dist}/core/auth/jwt-provider.d.ts +0 -0
- /package/{cli/dist → dist}/core/auth/jwt-provider.js +0 -0
- /package/{cli/dist → dist}/core/auth/manager.d.ts +0 -0
- /package/{cli/dist → dist}/core/auth/manager.js +0 -0
- /package/{cli/dist → dist}/core/auth/totp-provider.d.ts +0 -0
- /package/{cli/dist → dist}/core/auth/totp-provider.js +0 -0
- /package/{cli/dist → dist}/core/auth/ui-login-provider.d.ts +0 -0
- /package/{cli/dist → dist}/core/auth/ui-login-provider.js +0 -0
- /package/{cli/dist → dist}/core/cache/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/cache/index.js +0 -0
- /package/{cli/dist → dist}/core/cache/lru-cache.d.ts +0 -0
- /package/{cli/dist → dist}/core/cache/lru-cache.js +0 -0
- /package/{cli/dist/core → dist}/core/coverage/analyzer.d.ts +0 -0
- /package/{cli/dist/core → dist}/core/coverage/analyzer.js +0 -0
- /package/{cli/dist/core → dist}/core/coverage/collector.d.ts +0 -0
- /package/{cli/dist/core → dist}/core/coverage/collector.js +0 -0
- /package/{cli/dist/core → dist}/core/coverage/config.d.ts +0 -0
- /package/{cli/dist/core → dist}/core/coverage/config.js +0 -0
- /package/{cli/dist/core → dist}/core/coverage/index.d.ts +0 -0
- /package/{cli/dist/core → dist}/core/coverage/index.js +0 -0
- /package/{cli/dist/core → dist}/core/coverage/types.d.ts +0 -0
- /package/{cli/dist/core → dist}/core/coverage/types.js +0 -0
- /package/{cli/dist/core → dist}/core/coverage/vault.d.ts +0 -0
- /package/{cli/dist/core → dist}/core/coverage/vault.js +0 -0
- /package/{cli/dist → dist}/core/crawler/journey-generator.d.ts +0 -0
- /package/{cli/dist → dist}/core/crawler/types.js +0 -0
- /package/{cli/dist → dist}/core/dashboard/assets.d.ts +0 -0
- /package/{cli/dist → dist}/core/dashboard/assets.js +0 -0
- /package/{cli/dist → dist}/core/dashboard/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/dashboard/index.js +0 -0
- /package/{cli/dist → dist}/core/dashboard/server.d.ts +0 -0
- /package/{cli/dist → dist}/core/dashboard/server.js +0 -0
- /package/{cli/dist → dist}/core/dashboard/types.d.ts +0 -0
- /package/{cli/dist → dist}/core/dashboard/types.js +0 -0
- /package/{cli/dist → dist}/core/discoverer/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/discoverer/index.js +0 -0
- /package/{cli/dist → dist}/core/fixtures/loader.d.ts +0 -0
- /package/{cli/dist → dist}/core/fixtures/loader.js +0 -0
- /package/{cli/dist → dist}/core/fixtures/resolver.d.ts +0 -0
- /package/{cli/dist → dist}/core/fixtures/resolver.js +0 -0
- /package/{cli/dist → dist}/core/fixtures/types.d.ts +0 -0
- /package/{cli/dist → dist}/core/fixtures/types.js +0 -0
- /package/{cli/dist → dist}/core/flakiness/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/flakiness/index.js +0 -0
- /package/{cli/dist → dist}/core/generation/code-formatter.d.ts +0 -0
- /package/{cli/dist → dist}/core/generation/code-formatter.js +0 -0
- /package/{cli/dist → dist}/core/generation/code-generator.d.ts +0 -0
- /package/{cli/dist → dist}/core/generation/code-generator.js +0 -0
- /package/{cli/dist → dist}/core/generation/generator.d.ts +0 -0
- /package/{cli/dist → dist}/core/generation/generator.js +0 -0
- /package/{cli/dist → dist}/core/generation/pack-generator.d.ts +0 -0
- /package/{cli/dist → dist}/core/generation/pack-generator.js +0 -0
- /package/{cli/dist → dist}/core/generation/prompt-builder.d.ts +0 -0
- /package/{cli/dist → dist}/core/generation/prompt-builder.js +0 -0
- /package/{cli/dist → dist}/core/generation/source-analyzer.d.ts +0 -0
- /package/{cli/dist → dist}/core/generation/source-analyzer.js +0 -0
- /package/{cli/dist → dist}/core/generation/test-optimizer.d.ts +0 -0
- /package/{cli/dist → dist}/core/generation/test-optimizer.js +0 -0
- /package/{cli/dist → dist}/core/generation/types.d.ts +0 -0
- /package/{cli/dist → dist}/core/generation/types.js +0 -0
- /package/{cli/dist → dist}/core/hooks/compose.d.ts +0 -0
- /package/{cli/dist → dist}/core/hooks/compose.js +0 -0
- /package/{cli/dist → dist}/core/hooks/runner.d.ts +0 -0
- /package/{cli/dist → dist}/core/hooks/runner.js +0 -0
- /package/{cli/dist → dist}/core/pack/migrator.d.ts +0 -0
- /package/{cli/dist → dist}/core/pack/migrator.js +0 -0
- /package/{cli/dist → dist}/core/pack/validator.d.ts +0 -0
- /package/{cli/dist → dist}/core/pack-v2/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/pack-v2/index.js +0 -0
- /package/{cli/dist → dist}/core/pack-v2/loader.d.ts +0 -0
- /package/{cli/dist → dist}/core/pack-v2/loader.js +0 -0
- /package/{cli/dist → dist}/core/pack-v2/validator.d.ts +0 -0
- /package/{cli/dist → dist}/core/parallel/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/parallel/index.js +0 -0
- /package/{cli/dist → dist}/core/parallel/parallel-runner.d.ts +0 -0
- /package/{cli/dist → dist}/core/parallel/parallel-runner.js +0 -0
- /package/{cli/dist → dist}/core/pom/base-page.d.ts +0 -0
- /package/{cli/dist → dist}/core/pom/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/pom/index.js +0 -0
- /package/{cli/dist → dist}/core/pom/loader.d.ts +0 -0
- /package/{cli/dist → dist}/core/pom/types.d.ts +0 -0
- /package/{cli/dist → dist}/core/pom/types.js +0 -0
- /package/{cli/dist → dist}/core/proof/bundle.d.ts +0 -0
- /package/{cli/dist → dist}/core/proof/bundle.js +0 -0
- /package/{cli/dist → dist}/core/proof/canonicalize.d.ts +0 -0
- /package/{cli/dist → dist}/core/proof/canonicalize.js +0 -0
- /package/{cli/dist → dist}/core/proof/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/proof/index.js +0 -0
- /package/{cli/dist → dist}/core/proof/schema.d.ts +0 -0
- /package/{cli/dist → dist}/core/proof/schema.js +0 -0
- /package/{cli/dist → dist}/core/proof/signer.d.ts +0 -0
- /package/{cli/dist → dist}/core/proof/signer.js +0 -0
- /package/{cli/dist → dist}/core/proof/verifier.d.ts +0 -0
- /package/{cli/dist → dist}/core/proof/verifier.js +0 -0
- /package/{cli/dist → dist}/core/regression/detector.d.ts +0 -0
- /package/{cli/dist → dist}/core/regression/detector.js +0 -0
- /package/{cli/dist → dist}/core/regression/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/regression/index.js +0 -0
- /package/{cli/dist → dist}/core/regression/trend-analyzer.d.ts +0 -0
- /package/{cli/dist → dist}/core/regression/trend-analyzer.js +0 -0
- /package/{cli/dist → dist}/core/regression/types.d.ts +0 -0
- /package/{cli/dist → dist}/core/regression/types.js +0 -0
- /package/{cli/dist → dist}/core/regression/vault.d.ts +0 -0
- /package/{cli/dist → dist}/core/regression/vault.js +0 -0
- /package/{cli/dist → dist}/core/repair/engine/fixer.d.ts +0 -0
- /package/{cli/dist → dist}/core/repair/engine/fixer.js +0 -0
- /package/{cli/dist → dist}/core/repair/engine/suggestion-engine.d.ts +0 -0
- /package/{cli/dist → dist}/core/repair/engine/suggestion-engine.js +0 -0
- /package/{cli/dist → dist}/core/repair/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/repair/index.js +0 -0
- /package/{cli/dist → dist}/core/repair/repairer.d.ts +0 -0
- /package/{cli/dist → dist}/core/repair/repairer.js +0 -0
- /package/{cli/dist → dist}/core/repair/types.d.ts +0 -0
- /package/{cli/dist → dist}/core/repair/types.js +0 -0
- /package/{cli/dist → dist}/core/repair/utils/error-analyzer.d.ts +0 -0
- /package/{cli/dist → dist}/core/repair/utils/error-analyzer.js +0 -0
- /package/{cli/dist → dist}/core/reporting/html-reporter.d.ts +0 -0
- /package/{cli/dist → dist}/core/reporting/html-reporter.js +0 -0
- /package/{cli/dist → dist}/core/retry/flakiness-integration.d.ts +0 -0
- /package/{cli/dist → dist}/core/retry/flakiness-integration.js +0 -0
- /package/{cli/dist → dist}/core/retry/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/retry/index.js +0 -0
- /package/{cli/dist → dist}/core/retry/retry-engine.d.ts +0 -0
- /package/{cli/dist → dist}/core/retry/retry-engine.js +0 -0
- /package/{cli/dist → dist}/core/retry/types.d.ts +0 -0
- /package/{cli/dist → dist}/core/retry/types.js +0 -0
- /package/{cli/dist → dist}/core/retry/vault.d.ts +0 -0
- /package/{cli/dist → dist}/core/retry/vault.js +0 -0
- /package/{cli/dist → dist}/core/schemas/pack.schema.json +0 -0
- /package/{cli/dist → dist}/core/secrets/crypto.d.ts +0 -0
- /package/{cli/dist → dist}/core/secrets/crypto.js +0 -0
- /package/{cli/dist → dist}/core/secrets/manager.d.ts +0 -0
- /package/{cli/dist → dist}/core/secrets/manager.js +0 -0
- /package/{cli/dist → dist}/core/security/redaction-patterns-extended.d.ts +0 -0
- /package/{cli/dist → dist}/core/security/redaction-patterns-extended.js +0 -0
- /package/{cli/dist → dist}/core/security/redactor.d.ts +0 -0
- /package/{cli/dist → dist}/core/security/redactor.js +0 -0
- /package/{cli/dist → dist}/core/self-healing/assertion-healer.d.ts +0 -0
- /package/{cli/dist → dist}/core/self-healing/assertion-healer.js +0 -0
- /package/{cli/dist → dist}/core/self-healing/engine.d.ts +0 -0
- /package/{cli/dist → dist}/core/self-healing/engine.js +0 -0
- /package/{cli/dist → dist}/core/self-healing/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/self-healing/index.js +0 -0
- /package/{cli/dist → dist}/core/self-healing/selector-healer.d.ts +0 -0
- /package/{cli/dist → dist}/core/self-healing/selector-healer.js +0 -0
- /package/{cli/dist → dist}/core/self-healing/types.d.ts +0 -0
- /package/{cli/dist → dist}/core/self-healing/types.js +0 -0
- /package/{cli/dist → dist}/core/serve/diagnostics-collector.d.ts +0 -0
- /package/{cli/dist → dist}/core/serve/diagnostics-collector.js +0 -0
- /package/{cli/dist → dist}/core/serve/health-checker.d.ts +0 -0
- /package/{cli/dist → dist}/core/serve/health-checker.js +0 -0
- /package/{cli/dist → dist}/core/serve/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/serve/index.js +0 -0
- /package/{cli/dist → dist}/core/serve/metrics-collector.d.ts +0 -0
- /package/{cli/dist → dist}/core/serve/metrics-collector.js +0 -0
- /package/{cli/dist → dist}/core/serve/process-manager.d.ts +0 -0
- /package/{cli/dist → dist}/core/serve/process-manager.js +0 -0
- /package/{cli/dist → dist}/core/serve/server.d.ts +0 -0
- /package/{cli/dist → dist}/core/serve/server.js +0 -0
- /package/{cli/dist → dist}/core/slo/config.d.ts +0 -0
- /package/{cli/dist → dist}/core/slo/config.js +0 -0
- /package/{cli/dist → dist}/core/slo/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/slo/index.js +0 -0
- /package/{cli/dist → dist}/core/slo/sli-calculator.d.ts +0 -0
- /package/{cli/dist → dist}/core/slo/sli-calculator.js +0 -0
- /package/{cli/dist → dist}/core/slo/slo-tracker.d.ts +0 -0
- /package/{cli/dist → dist}/core/slo/slo-tracker.js +0 -0
- /package/{cli/dist → dist}/core/slo/types.d.ts +0 -0
- /package/{cli/dist → dist}/core/slo/types.js +0 -0
- /package/{cli/dist → dist}/core/slo/vault.d.ts +0 -0
- /package/{cli/dist → dist}/core/slo/vault.js +0 -0
- /package/{cli/dist → dist}/core/tui/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/tui/index.js +0 -0
- /package/{cli/dist → dist}/core/tui/monitor.d.ts +0 -0
- /package/{cli/dist → dist}/core/tui/monitor.js +0 -0
- /package/{cli/dist → dist}/core/tui/renderer.d.ts +0 -0
- /package/{cli/dist → dist}/core/tui/renderer.js +0 -0
- /package/{cli/dist → dist}/core/tui/types.d.ts +0 -0
- /package/{cli/dist → dist}/core/tui/types.js +0 -0
- /package/{cli/dist → dist}/core/types/pack-v1.js +0 -0
- /package/{cli/dist → dist}/core/types/pack-v2.js +0 -0
- /package/{cli/dist → dist}/core/types/trust-score.d.ts +0 -0
- /package/{cli/dist → dist}/core/types/trust-score.js +0 -0
- /package/{cli/dist → dist}/core/vault/cas.d.ts +0 -0
- /package/{cli/dist → dist}/core/vault/cas.js +0 -0
- /package/{cli/dist → dist}/core/vault/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/vault/index.js +0 -0
- /package/{cli/dist → dist}/core/visual/visual-regression.d.ts +0 -0
- /package/{cli/dist → dist}/core/visual/visual-regression.js +0 -0
- /package/{cli/dist → dist}/core/watch/index.d.ts +0 -0
- /package/{cli/dist → dist}/core/watch/index.js +0 -0
- /package/{cli/dist → dist}/core/watch/watch-mode.d.ts +0 -0
- /package/{cli/dist → dist}/core/watch/watch-mode.js +0 -0
- /package/{cli/dist → dist}/generators/index.d.ts +0 -0
- /package/{cli/dist → dist}/generators/index.js +0 -0
- /package/{cli/dist → dist}/generators/json-reporter.d.ts +0 -0
- /package/{cli/dist → dist}/generators/json-reporter.js +0 -0
- /package/{cli/dist → dist}/generators/test-generator.d.ts +0 -0
- /package/{cli/dist → dist}/generators/test-generator.js +0 -0
- /package/{cli/dist → dist}/index.d.ts +0 -0
- /package/{cli/dist → dist}/index.js +0 -0
- /package/{cli/dist → dist}/scanners/dom-scanner.d.ts +0 -0
- /package/{cli/dist → dist}/scanners/dom-scanner.js +0 -0
- /package/{cli/dist → dist}/scanners/index.d.ts +0 -0
- /package/{cli/dist → dist}/scanners/index.js +0 -0
- /package/{cli/dist → dist}/schemas/pack.schema.json +0 -0
- /package/{cli/dist → dist}/types/scan.d.ts +0 -0
- /package/{cli/dist → dist}/types/scan.js +0 -0
- /package/{cli/dist → dist}/utils/config.js +0 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA360 Cookie Manager Module
|
|
3
|
+
*
|
|
4
|
+
* P0: Cookie manipulation helpers
|
|
5
|
+
* - Get/set/delete cookies with type safety
|
|
6
|
+
* - Cookie filtering and searching
|
|
7
|
+
* - Domain/path scoping
|
|
8
|
+
* - Expiration handling
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Cookie Manager
|
|
12
|
+
*/
|
|
13
|
+
export class CookieManager {
|
|
14
|
+
context;
|
|
15
|
+
constructor(context) {
|
|
16
|
+
this.context = context;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get all cookies
|
|
20
|
+
*/
|
|
21
|
+
async all() {
|
|
22
|
+
return await this.context.cookies();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get cookies matching filter criteria
|
|
26
|
+
*/
|
|
27
|
+
async filter(options) {
|
|
28
|
+
const cookies = await this.context.cookies();
|
|
29
|
+
return cookies.filter((cookie) => this.matchesFilter(cookie, options));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get a specific cookie by name
|
|
33
|
+
*/
|
|
34
|
+
async get(name) {
|
|
35
|
+
const cookies = await this.context.cookies();
|
|
36
|
+
return cookies.find((c) => c.name === name);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get a cookie value by name
|
|
40
|
+
*/
|
|
41
|
+
async getValue(name) {
|
|
42
|
+
const cookie = await this.get(name);
|
|
43
|
+
return cookie?.value;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Check if a cookie exists
|
|
47
|
+
*/
|
|
48
|
+
async has(name) {
|
|
49
|
+
const cookie = await this.get(name);
|
|
50
|
+
return cookie !== undefined;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Set a cookie
|
|
54
|
+
*/
|
|
55
|
+
async set(options) {
|
|
56
|
+
const cookie = this.normalizeCookieOptions(options);
|
|
57
|
+
await this.context.addCookies([cookie]);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Set multiple cookies at once
|
|
61
|
+
*/
|
|
62
|
+
async setMany(cookies) {
|
|
63
|
+
const normalizedCookies = cookies.map((c) => this.normalizeCookieOptions(c));
|
|
64
|
+
await this.context.addCookies(normalizedCookies);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Update an existing cookie
|
|
68
|
+
*/
|
|
69
|
+
async update(name, updates) {
|
|
70
|
+
const existing = await this.get(name);
|
|
71
|
+
if (!existing) {
|
|
72
|
+
throw new Error(`Cookie "${name}" not found`);
|
|
73
|
+
}
|
|
74
|
+
await this.set({
|
|
75
|
+
name,
|
|
76
|
+
value: existing.value,
|
|
77
|
+
domain: existing.domain,
|
|
78
|
+
path: existing.path,
|
|
79
|
+
expires: existing.expires,
|
|
80
|
+
sameSite: existing.sameSite,
|
|
81
|
+
secure: existing.secure,
|
|
82
|
+
httpOnly: existing.httpOnly,
|
|
83
|
+
...updates,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Delete a cookie by name
|
|
88
|
+
*/
|
|
89
|
+
async delete(name) {
|
|
90
|
+
await this.context.clearCookies({ name });
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Delete multiple cookies by name
|
|
94
|
+
*/
|
|
95
|
+
async deleteMany(names) {
|
|
96
|
+
// Delete each cookie individually since clearCookies with filters
|
|
97
|
+
// may not work as expected with just name
|
|
98
|
+
for (const name of names) {
|
|
99
|
+
await this.delete(name);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Delete cookies matching filter criteria
|
|
104
|
+
*/
|
|
105
|
+
async deleteFilter(options) {
|
|
106
|
+
const cookies = await this.filter(options);
|
|
107
|
+
await this.context.clearCookies(...cookies.map((c) => ({ name: c.name })));
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Clear all cookies
|
|
111
|
+
*/
|
|
112
|
+
async clear() {
|
|
113
|
+
await this.context.clearCookies();
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Clear cookies for a specific domain
|
|
117
|
+
*/
|
|
118
|
+
async clearDomain(domain) {
|
|
119
|
+
await this.deleteFilter({ domain });
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get cookies count
|
|
123
|
+
*/
|
|
124
|
+
async count() {
|
|
125
|
+
const cookies = await this.context.cookies();
|
|
126
|
+
return cookies.length;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Export cookies as JSON string
|
|
130
|
+
*/
|
|
131
|
+
async export() {
|
|
132
|
+
const cookies = await this.context.cookies();
|
|
133
|
+
return JSON.stringify(cookies, null, 2);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Import cookies from JSON string or array
|
|
137
|
+
*/
|
|
138
|
+
async import(data) {
|
|
139
|
+
const cookies = typeof data === 'string' ? JSON.parse(data) : data;
|
|
140
|
+
await this.context.addCookies(cookies);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Get cookies grouped by domain
|
|
144
|
+
*/
|
|
145
|
+
async byDomain() {
|
|
146
|
+
const cookies = await this.context.cookies();
|
|
147
|
+
const grouped = {};
|
|
148
|
+
for (const cookie of cookies) {
|
|
149
|
+
const domain = cookie.domain || 'unknown';
|
|
150
|
+
if (!grouped[domain]) {
|
|
151
|
+
grouped[domain] = [];
|
|
152
|
+
}
|
|
153
|
+
grouped[domain].push(cookie);
|
|
154
|
+
}
|
|
155
|
+
return grouped;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Set a session cookie (no expiration)
|
|
159
|
+
*/
|
|
160
|
+
async setSession(name, value, options = {}) {
|
|
161
|
+
await this.set({
|
|
162
|
+
name,
|
|
163
|
+
value,
|
|
164
|
+
...options,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Set a cookie with max-age (in seconds)
|
|
169
|
+
*/
|
|
170
|
+
async setWithMaxAge(name, value, maxAge, options = {}) {
|
|
171
|
+
await this.set({
|
|
172
|
+
name,
|
|
173
|
+
value,
|
|
174
|
+
maxAge,
|
|
175
|
+
...options,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Set a cookie that expires in days
|
|
180
|
+
*/
|
|
181
|
+
async setExpiringIn(name, value, days, options = {}) {
|
|
182
|
+
const expires = Math.floor(Date.now() / 1000) + days * 24 * 60 * 60;
|
|
183
|
+
await this.set({
|
|
184
|
+
name,
|
|
185
|
+
value,
|
|
186
|
+
expires,
|
|
187
|
+
...options,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Normalize cookie options to Playwright format
|
|
192
|
+
*/
|
|
193
|
+
normalizeCookieOptions(options) {
|
|
194
|
+
const cookie = {
|
|
195
|
+
name: options.name,
|
|
196
|
+
value: options.value,
|
|
197
|
+
sameSite: options.sameSite || 'Lax',
|
|
198
|
+
secure: options.secure ?? false,
|
|
199
|
+
httpOnly: options.httpOnly ?? false,
|
|
200
|
+
};
|
|
201
|
+
// URL is preferred - Playwright will infer domain and path from it
|
|
202
|
+
if (options.url) {
|
|
203
|
+
cookie.url = options.url;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
// Only set path when not using URL (Playwright infers path from URL)
|
|
207
|
+
cookie.path = options.path || '/';
|
|
208
|
+
// Set domain when not using URL
|
|
209
|
+
if (options.domain) {
|
|
210
|
+
cookie.domain = options.domain;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
// Handle expiration
|
|
214
|
+
if (options.maxAge !== undefined) {
|
|
215
|
+
cookie.expires = Math.floor(Date.now() / 1000) + options.maxAge;
|
|
216
|
+
}
|
|
217
|
+
else if (options.expires !== undefined) {
|
|
218
|
+
cookie.expires = options.expires;
|
|
219
|
+
}
|
|
220
|
+
return cookie;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Check if cookie matches filter criteria
|
|
224
|
+
*/
|
|
225
|
+
matchesFilter(cookie, filter) {
|
|
226
|
+
if (filter.name && !this.wildcardMatch(cookie.name, filter.name)) {
|
|
227
|
+
return false;
|
|
228
|
+
}
|
|
229
|
+
if (filter.domain && cookie.domain !== filter.domain) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
if (filter.path && cookie.path !== filter.path) {
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
if (filter.secure !== undefined && cookie.secure !== filter.secure) {
|
|
236
|
+
return false;
|
|
237
|
+
}
|
|
238
|
+
if (filter.httpOnly !== undefined && cookie.httpOnly !== filter.httpOnly) {
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
if (filter.sameSite && cookie.sameSite !== filter.sameSite) {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Simple wildcard matching
|
|
248
|
+
*/
|
|
249
|
+
wildcardMatch(text, pattern) {
|
|
250
|
+
if (!pattern.includes('*')) {
|
|
251
|
+
return text === pattern;
|
|
252
|
+
}
|
|
253
|
+
const regex = new RegExp(pattern.replace(/\*/g, '.*'));
|
|
254
|
+
return regex.test(text);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Convenience function to create cookie manager
|
|
259
|
+
*/
|
|
260
|
+
export function cookies(context) {
|
|
261
|
+
return new CookieManager(context);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Convenience function to create cookie manager from page
|
|
265
|
+
*/
|
|
266
|
+
export function cookiesFromPage(page) {
|
|
267
|
+
return new CookieManager(page.context());
|
|
268
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA360 Storage Module
|
|
3
|
+
*
|
|
4
|
+
* P0: Browser storage helpers and management
|
|
5
|
+
*/
|
|
6
|
+
export { LocalStorage, SessionStorage, createLocalStorage, createSessionStorage, type StorageOptions, type StorageResult, } from './storage-helpers.js';
|
|
7
|
+
export { CookieManager, cookies, cookiesFromPage, type CookieSetOptions, type CookieFilterOptions, } from './cookie-manager.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA360 Storage Module
|
|
3
|
+
*
|
|
4
|
+
* P0: Browser storage helpers and management
|
|
5
|
+
*/
|
|
6
|
+
export { LocalStorage, SessionStorage, createLocalStorage, createSessionStorage, } from './storage-helpers.js';
|
|
7
|
+
export { CookieManager, cookies, cookiesFromPage, } from './cookie-manager.js';
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA360 Storage Helpers Module
|
|
3
|
+
*
|
|
4
|
+
* P0: Simplified access to browser storage APIs
|
|
5
|
+
* - LocalStorage helpers with type safety
|
|
6
|
+
* - SessionStorage helpers with type safety
|
|
7
|
+
* - JSON serialization/deserialization
|
|
8
|
+
* - Prefix support for namespacing
|
|
9
|
+
*/
|
|
10
|
+
import type { Page } from '@playwright/test';
|
|
11
|
+
/**
|
|
12
|
+
* Storage options
|
|
13
|
+
*/
|
|
14
|
+
export interface StorageOptions {
|
|
15
|
+
/** Key prefix for namespacing */
|
|
16
|
+
prefix?: string;
|
|
17
|
+
/** Auto-parse JSON values */
|
|
18
|
+
json?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Storage get result with metadata
|
|
22
|
+
*/
|
|
23
|
+
export interface StorageResult<T = unknown> {
|
|
24
|
+
/** Whether the key exists */
|
|
25
|
+
exists: boolean;
|
|
26
|
+
/** The value (parsed if json=true) */
|
|
27
|
+
value: T | null;
|
|
28
|
+
/** The raw string value */
|
|
29
|
+
rawValue: string | null;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* LocalStorage Helper
|
|
33
|
+
*/
|
|
34
|
+
export declare class LocalStorage {
|
|
35
|
+
private page;
|
|
36
|
+
private options;
|
|
37
|
+
constructor(page: Page, options?: StorageOptions);
|
|
38
|
+
/**
|
|
39
|
+
* Get a value from localStorage
|
|
40
|
+
*/
|
|
41
|
+
get<T = string>(key: string): Promise<StorageResult<T>>;
|
|
42
|
+
/**
|
|
43
|
+
* Set a value in localStorage
|
|
44
|
+
*/
|
|
45
|
+
set(key: string, value: unknown): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Remove a value from localStorage
|
|
48
|
+
*/
|
|
49
|
+
remove(key: string): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Check if a key exists
|
|
52
|
+
*/
|
|
53
|
+
has(key: string): Promise<boolean>;
|
|
54
|
+
/**
|
|
55
|
+
* Get all keys (with prefix if configured)
|
|
56
|
+
*/
|
|
57
|
+
keys(): Promise<string[]>;
|
|
58
|
+
/**
|
|
59
|
+
* Clear all keys (with prefix if configured)
|
|
60
|
+
*/
|
|
61
|
+
clear(): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Get the number of items (with prefix if configured)
|
|
64
|
+
*/
|
|
65
|
+
size(): Promise<number>;
|
|
66
|
+
/**
|
|
67
|
+
* Get all items as an object (with prefix stripped if configured)
|
|
68
|
+
*/
|
|
69
|
+
getAll<T = unknown>(): Promise<Record<string, T>>;
|
|
70
|
+
/**
|
|
71
|
+
* Set multiple items at once
|
|
72
|
+
*/
|
|
73
|
+
setMany(items: Record<string, unknown>): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Remove multiple items at once
|
|
76
|
+
*/
|
|
77
|
+
removeMany(keys: string[]): Promise<void>;
|
|
78
|
+
private getFullKey;
|
|
79
|
+
private tryParseJSON;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* SessionStorage Helper
|
|
83
|
+
*/
|
|
84
|
+
export declare class SessionStorage {
|
|
85
|
+
private page;
|
|
86
|
+
private options;
|
|
87
|
+
constructor(page: Page, options?: StorageOptions);
|
|
88
|
+
/**
|
|
89
|
+
* Get a value from sessionStorage
|
|
90
|
+
*/
|
|
91
|
+
get<T = string>(key: string): Promise<StorageResult<T>>;
|
|
92
|
+
/**
|
|
93
|
+
* Set a value in sessionStorage
|
|
94
|
+
*/
|
|
95
|
+
set(key: string, value: unknown): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Remove a value from sessionStorage
|
|
98
|
+
*/
|
|
99
|
+
remove(key: string): Promise<void>;
|
|
100
|
+
/**
|
|
101
|
+
* Check if a key exists
|
|
102
|
+
*/
|
|
103
|
+
has(key: string): Promise<boolean>;
|
|
104
|
+
/**
|
|
105
|
+
* Get all keys (with prefix if configured)
|
|
106
|
+
*/
|
|
107
|
+
keys(): Promise<string[]>;
|
|
108
|
+
/**
|
|
109
|
+
* Clear all keys (with prefix if configured)
|
|
110
|
+
*/
|
|
111
|
+
clear(): Promise<void>;
|
|
112
|
+
/**
|
|
113
|
+
* Get the number of items (with prefix if configured)
|
|
114
|
+
*/
|
|
115
|
+
size(): Promise<number>;
|
|
116
|
+
/**
|
|
117
|
+
* Get all items as an object (with prefix stripped if configured)
|
|
118
|
+
*/
|
|
119
|
+
getAll<T = unknown>(): Promise<Record<string, T>>;
|
|
120
|
+
/**
|
|
121
|
+
* Set multiple items at once
|
|
122
|
+
*/
|
|
123
|
+
setMany(items: Record<string, unknown>): Promise<void>;
|
|
124
|
+
/**
|
|
125
|
+
* Remove multiple items at once
|
|
126
|
+
*/
|
|
127
|
+
removeMany(keys: string[]): Promise<void>;
|
|
128
|
+
private getFullKey;
|
|
129
|
+
private tryParseJSON;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Convenience function to create LocalStorage helper
|
|
133
|
+
*/
|
|
134
|
+
export declare function createLocalStorage(page: Page, options?: StorageOptions): LocalStorage;
|
|
135
|
+
/**
|
|
136
|
+
* Convenience function to create SessionStorage helper
|
|
137
|
+
*/
|
|
138
|
+
export declare function createSessionStorage(page: Page, options?: StorageOptions): SessionStorage;
|