{"id":15093118,"url":"https://github.com/angular/blocking-proxy","last_synced_at":"2025-10-06T11:31:13.265Z","repository":{"id":65977147,"uuid":"71388051","full_name":"angular/blocking-proxy","owner":"angular","description":"Proxy for WebDriver tests that waits for Angular application stability.","archived":true,"fork":false,"pushed_at":"2020-09-10T11:32:20.000Z","size":344,"stargazers_count":26,"open_issues_count":12,"forks_count":10,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-10-06T00:33:42.726Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angular.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-10-19T18:37:28.000Z","updated_at":"2023-08-22T21:05:43.000Z","dependencies_parsed_at":"2023-02-19T19:15:45.493Z","dependency_job_id":null,"html_url":"https://github.com/angular/blocking-proxy","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/angular/blocking-proxy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular%2Fblocking-proxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular%2Fblocking-proxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular%2Fblocking-proxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular%2Fblocking-proxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angular","download_url":"https://codeload.github.com/angular/blocking-proxy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular%2Fblocking-proxy/sbom","scorecard":{"id":196360,"data":{"date":"2025-08-11","repo":{"name":"github.com/angular/blocking-proxy","commit":"481bbf78a21dc303eda0bec115fcfff9ac82310d"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.7,"checks":[{"name":"Code-Review","score":6,"reason":"Found 11/18 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/angular/.github/SECURITY.md:1","Info: Found linked content: github.com/angular/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/angular/.github/SECURITY.md:1","Info: Found text in security policy: github.com/angular/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Branch-Protection","score":3,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'master'","Info: 'force pushes' disabled on branch 'master'","Warn: 'branch protection settings apply to administrators' is disabled on branch 'master'","Warn: branch 'master' does not require approvers","Warn: codeowners review is not required on branch 'master'","Warn: no status checks found to merge onto branch 'master'","Warn: PRs are not required to make changes on branch 'master'; or we don't have data to detect it.If you think it might be the latter, make sure to run Scorecard with a PAT or use Repo Rules (that are always public) instead of Branch Protection settings"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: scripts/Dockerfile.sauceconnect:1","Warn: npmCommand not pinned by hash: examples/run_example.sh:5","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 26 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-16T21:54:07.800Z","repository_id":65977147,"created_at":"2025-08-16T21:54:07.800Z","updated_at":"2025-08-16T21:54:07.800Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278602006,"owners_count":26013997,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-25T11:03:43.805Z","updated_at":"2025-10-06T11:31:12.935Z","avatar_url":"https://github.com/angular.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Blocking Proxy [![Build Status](https://circleci.com/gh/angular/blocking-proxy.svg?style=shield)](https://circleci.com/gh/angular/blocking-proxy)\n\nBlocking Proxy is a tool for adding functionality to WebDriver-based\ntests.  It sits between your tests and the Selenium Server. For each \nWebDriver command, it runs a set of 'barriers' that will block \nforwarding the command to the Selenium server until some condition\nis met.\n\nBecause it interacts with WebDriver at the network level, Blocking Proxy can be\nused regardless of which language your tests are written in. See [the example](https://github.com/angular/blocking-proxy/blob/master/examples/README.md) \nfor a demonstration of using Blocking Proxy with WebDriver tests written in Python.\n\nAlthough Blocking Proxy can handle multiple WebDriver sessions, it can not yet handle\nmultiple concurrent clients. Thus, it's recommended to start a separate instance\nfor each test process.\n\n# Usage\n\nBlocking Proxy can be installed globally with `npm install -g blocking-proxy`.\nYou can also use it by cloning this repo and running these commands:\n\n```\nnpm install\nwebdriver-manager update \u0026\u0026 webdriver-manager start (in another terminal)\nnode ./built/lib/bin.js --seleniumAddress http://localhost:4444/wd/hub\n```\n\n# Features\n\n## Wait for Angular\n\nWhen testing an Angular application, Blocking Proxy can block webdriver commands\nuntil Angular's change detection is finished, and thus make your tests less flaky.\n\n## Highlight Delay\n\nIf `--highlightDelay \u003cdelayMS\u003e` is specified, Blocking Proxy will wait for \nthe specified delay (in milliseconds) before executing click commands or sending \nkeys. It will also highlight the element that is the target of the command.\n\nHere's an example of highlight delay in action:\n\n![Highlight Delay](http://i.giphy.com/jg7B2HHPIkwak.gif)\n\n## WebDriver logging\n\nWhen `--logDir \u003cpath\u003e` is set, Blocking Proxy will create a readable log of \nWebDriver commands at the specified path. The log will look something like this:\n\n```\n20:08:14.830 |    834ms | 37f13c | NewSession\n    {\"browserName\":\"chrome\"}\n20:08:15.674 |      4ms | 37f13c | SetTimeouts\n20:08:15.681 |    578ms | 37f13c | Go http://localhost:8081/ng1/#/interaction\n20:08:16.300 |    438ms | 37f13c | FindElement\n    Using css selector \\'.invalid\\'\n    ERROR: no such element\n```\nEach line shows the command that was executed and how long it took. For some\ncommands, extra data or the response from WebDriver will be shown on following\nlines.\n\n# Development\n\n## Formatting and lint\n\n`gulp format` runs clang-format. `gulp lint` validates format and runs tslint.\n\n## Running tests \n\nUnit tests live in `spec/unit` and can be run with `npm test`. Run `npm run test:auto` to automatically watch for changes and run unit tests.\n\n## Running e2e tests\n\nStart webdriver\n\n    webdriver-manager update\n    webdriver-manager start\n\nin another terminal, start the testapp\n\n    npm run testapp \n\nStart the proxy with \n  \n    npm start\n\nin yet another terminal, run the tests\n\n    npm run test:e2e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangular%2Fblocking-proxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangular%2Fblocking-proxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangular%2Fblocking-proxy/lists"}