
Security News
The Hidden Blast Radius of the Axios Compromise
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.
@buttercup/locust
Advanced tools
Login form location utility
Locust helps find login forms by searching the DOM for common login form elements. It processes a page and returns targets which can be used for automating logins.
Run npm install @buttercup/locust --save-dev to install as a dev dependency - as it's designed to be included in a build system, such as with Webpack, it does not need to be a normal dependency.
Types are included.
Locust is an ESM-only library, so you must include it in another project and use a bundler, such as Webpack, to build it for the browser.
Locust exports a couple of useful methods, but the one which provides the most simple approach to logging in is getLoginTarget:
import { getLoginTarget } from "@buttercup/locust";
getLoginTarget().login("myUsername", "myPassword");
The example above enters the username and password in the best form found on the page and then proceeds to submit that form (logging the user in).
To find all forms on a page, use the getLoginTargets method instead, which returns an array of login targets. You can then sort through these to find all the different login forms that may exist.
In the case that you don't want to automatically log in, but still enter the details, you can use the following example:
const target = getLoginTarget();
await target.fillUsername("myUsername");
await target.fillPassword("myPassword");
You can fill in OTPs using the following:
await target.fillOTP("123456");
Note that getLoginTarget may return null if no form is found, so you should check for this eventuality.
You can filter input/form elements picked up by getLoginTarget and getLoginTargets by passing an element validator callback as the second parameter:
const target = getLoginTarget(
document,
() => true
);
Where the callback follows this format:
(feature: LoginTargetFeature, element: HTMLElement) => boolean;
Return false to ignore the element and true to include it. Defaults to true for all elements.
Locust login targets will emit events when certain things happen. To listen for changes to the values of usernames and passwords on forms simply attach event listeners:
const target = getLoginTarget();
target.on("valueChanged", info => {
if (info.type === "username") {
console.log("New username:", info.value);
}
});
// `type` can be "username" or "password"
Login targets subclass
EventEmitter, so you can use all other methods provided by their implementation.
You can also listen to form submission:
const target = getLoginTarget();
target.once("formSubmitted", ({ source }) => {
// `source` will either be "submitButton" or "form"
});
You can run npm run dev to generate and watch-files to develop Locust. To create a script that outputs dev information, run npm run dev:inject and inject the provided script snippet into pages to test Locust. It won't work all of the time if the Buttercup browser extension is running, nor will it work in consecutive executions.
To run on HTTPS pages consider using a Chrome extension like Disable Content Security Policy, which will allow injection of local scripts.
FAQs
Locust Login Toolkit
We found that @buttercup/locust demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.

Research
A supply chain attack on Axios introduced a malicious dependency, plain-crypto-js@4.2.1, published minutes earlier and absent from the project’s GitHub releases.

Research
Malicious versions of the Telnyx Python SDK on PyPI delivered credential-stealing malware via a multi-stage supply chain attack.