
Research
2025 Report: Destructive Malware in Open Source Packages
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.
@socketsupply/dynavolt
Advanced tools
A highly opinionated DynamoDB client for aws-sdk v3 using esm.
import Dynavolt from 'dynavolt'
const db = new Dynavolt({ region: 'us-west-2' })
const { err, data: table } = await db.create('artists')
You can also specify hash, range, and options.
const opts = { TimeToLiveSpecification: {
AttributeName: 'ttl',
Enabled: true
}
const { err } = await db.create('artists', 'genres', 'artists', opts)
Open a database and optionally create it if it doesnt exist.
const { err, data: table } = await db.open('artists', { create: true })
Dynavolt will automatically (and recursively) deduce the types of your data and annotate them correctly, so there is no need to write "dynamodb json".
const { err } = await table.put('glen', 'danzig', { height: 'quite-short' })
Dynavolt will automatically (and recursively) deduce the types of your data and annotate them correctly, so there is no need to write "dynamodb json".
const { err } = await table.put('glen', 'danzig', { height: 'quite-short' })
const expr = `SET count = count + N(${value})`
const { err, data } = await table.update('iggy', 'pop', expr)
const { err, data } = await table.get('iggy', 'pop')
const { err } = await table.delete('henry', 'rollins')
const { err } = await table.batchWrite([
['foo', 'bar', { beep: 'boop' }],
['foo', 'bar']
])
const { err } = await table.batchRead([
['foo', 'bazz'],
['beep', 'boop']
])
Query takes a Key Condition Expression. For syntax refernece see the Comparison Operator and Function Reference.
const iterator = table.query(`hash = N(greetings) AND begins_with(range, S(hell))`)
for await (const { err, data: { key, value } } of iterator) {
console.log(key, value)
}
You can also chain a Filter Expression and Projection Expression clauses onto querties. More info about Projection Expression syntax here.
const iterator = table
.query(`hash = N(songs) AND begins_with(range, S(moth))`)
.filter(`contains(artists.name, S(danzig)`)
.properties('artists.weight', 'artists.height')
for await (const { err, data: { key, value } } of iterator) {
console.log(key, value)
}
Scan takes a Filter Expression.
const iterator = table.scan(`contains(artists.name, S(danzig)`)
for await (const { err, data: { key, value } } of iterator) {
console.log(key, value)
}
Records in your database can be set to expire by specifying a TTL attribute
on your table.
const { err } = await table.setTTL('stillCool')
Now one minute after adding the following record, it will be removed.
const opts = {
stillCool: 6e4
}
const { err } = await table.put('brian', 'setzer', { cool: true }, opts)
FAQs
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.

Research
Destructive malware is rising across open source registries, using delays and kill switches to wipe code, break builds, and disrupt CI/CD.

Security News
Socket CTO Ahmad Nassri shares practical AI coding techniques, tools, and team workflows, plus what still feels noisy and why shipping remains human-led.

Research
/Security News
A five-month operation turned 27 npm packages into durable hosting for browser-run lures that mimic document-sharing portals and Microsoft sign-in, targeting 25 organizations across manufacturing, industrial automation, plastics, and healthcare for credential theft.