
Product
Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain
Socket Firewall is a free tool that blocks malicious packages at install time, giving developers proactive protection against rising supply chain attacks.
abtest-util
Advanced tools
A simple and extensible utility library for abtest
First, create your test with new ABTest(config)
:
const appId = require('./some.state')
const appIdToRunABTest = '1731035743'
const test = new ABTest({
// current user
user: "7ae4d9c516",
// method to classify user into groups
classify(user) {
return parseInt(user, 16) % 2 === 0
? this.groups.A
: this.groups.B
},
// assign handler(s) to each group
handlers: {
A: () => 'Running default function of group A',
B: {
foo: () => 'Running foo of group B',
bar: ABTest.noop, // do nothing
},
}
// optional: if you need 3 or more groups, assign them to
// `groups`, and they can be accessed as this.groups.C
groups: ['A', 'B', 'C'],
// optional: conditionally run the test
shouldRunTest(user) {
return appId === appIdToRunABTest
}
})
module.exports = test
When you want to run the test:
const test = require("./abtest");
// if user is in group A:
const resultA = test.run();
// if user is in group B:
const resultB = test.run("foo");
// NOTE: user can't be group A and group B!
// so one of (resultA, resultB) will throw an Error!
new ABTest(config)
config | description | type |
---|---|---|
config.user | required. Current user | string|number |
config.classify | required. Method to divide user into groups | (string|number) => string |
config.handlers | required. Individual handlers for groups | see example |
config.shouldRunTest | optional. Method to decide whether test or not | (...param: any[]) => boolean. default: () => true |
config.groups | optional. All groups of current test | string[]. default: ['A', 'B'] |
const test = new ABTest({
user: "7ae4d9c516",
classify(user) {
return parseInt(user, 16) % 2 === 0 ? this.groups.A : this.groups.B;
},
handlers: {
A: () => "Running default function of group A",
B: {
foo: () => "Running foo of group B",
bar: () => "Running bar of group B"
}
}
});
ABTest.prototype.setUser(user)
Set current user.
ABTest.prototype.getUser()
Get current user.
test.setUser("7ae4d9c517");
test.getUser(); // 7ae4d9c517
ABTest.prototype.getGroupId()
Get current group id.
test.getGroupId(); // B
test.setUser("7ae4d9c517");
test.getGroupId(); // A
ABTest.prototype.addHandler(name, handler[, groupId])
Adds the handler
of name
on group groupId
(default: current groupId).
test.getGroupId() // B
test.addHandler('baz', () => 'Running baz of group B')
test.run('baz') // Running foo of group B
test.setUser('7ae4d9c517')
test.getGroupId() // A
test.addHandler('foo', () => )
ABTest.prototype.run
test.run(); // Error: Name is required for object type handlers.
test.run(); // 'Running default function of group A'
test.run("foo"); // 'Running foo of group B'
test.run("bar"); // 'Running bar of group B'
FAQs
A tiny ABTest utility library
We found that abtest-util demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer 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.
Product
Socket Firewall is a free tool that blocks malicious packages at install time, giving developers proactive protection against rising supply chain attacks.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.