
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
idb-map-entries
Advanced tools
Social Media Photo by delfi de la Rua on Unsplash
An IndexedDB based Map with an asynchronous interface.
An IDBMap instance implements all Map methods or accessors except these are all asynchroonus.
An IDBMap also extends EventTarget too, so dispatchEvent
is also available, among others. Handled events are by default abort
, close
, error
and versionchange
.
The IDBMap constructor is the only main different API compared to Map:
name
suffix as string. The DB will be called 'IDBMap/${name}'
. The storage name used for this db will be entries. An empty string is also a valid name but please be aware of naming collisionsoptions
object, currently to either override transactions' durability, where its default value is 'default'
, or to use a different database prefix name which default value is 'IDBMap'
type IDBMapOptions = {
durability?: 'strict' | 'relaxed' | 'default';
prefix?: string;
}
class IDBMap extends EventTarget implements Map {
constructor(
name:string,
options:IDBMapOptions = { durability: 'default', prefix: 'IDBMap' }
):IDBMap
// the only extra method not present in Map or EventTarget
close():Promise<void>
}
import IDBMap from '@webreflection/idb-map';
// create an async map with a generic storage name
const idbMap = new IDBMap('my-storage-name');
// check any Map property by awaiting it
console.log(await idbMap.size);
console.log(await idbMap.has('nope'));
// optional helpers for buffered data
const encoder = new TextEncoder;
const decoder = new TextDecoder;
// set any IDB compatible value
await idbMap.set('test.txt', 'test value');
console.log(await idbMap.has('test.txt'));
await idbMap.set('other.txt', encoder.encode('other value'));
// get any IDB stored value
console.log(await idbMap.get('test.txt'));
console.log(decoder.decode(await idbMap.get('other.txt')));
// retrieve any other async Map API method
console.log(await idbMap.keys());
console.log(await idbMap.size);
for (const entry of await idbMap.entries())
console.log(entry);
// or remove a single key
await idbMap.delete('other.txt');
console.log(await idbMap.keys());
console.log(await idbMap.size);
// or clear the whole thing
await idbMap.clear();
console.log(await idbMap.keys());
console.log(await idbMap.size);
// eventually close it
await idbMap.close();
The idb-map/sync
export returns an instance of Map (no EventTarget) with only a sync()
extra method that is needed to be awaited on bootstrap or, if many changes are performed, before closing the thread.
Its content and methods are entirely loaded into RAM so it's less efficient in that regard but surely easier to both handle and reason about plus it's definitively faster than the fully async version.
import IDBMapSync from '@webreflection/idb-map/sync';
// create an async map with a generic storage name
const idbMap = new IDBMap('my-storage-name');
// await to populate it on bootstrap
await idbMap.sync();
// check any Map property by awaiting it
console.log(idbMap.size);
console.log(idbMap.has('nope'));
// optional helpers for buffered data
const encoder = new TextEncoder;
const decoder = new TextDecoder;
// set any IDB compatible value
idbMap.set('test.txt', 'test value');
console.log(idbMap.has('test.txt'));
idbMap.set('other.txt', encoder.encode('other value'));
// get any IDB stored value
console.log(idbMap.get('test.txt'));
console.log(decoder.decode(idbMap.get('other.txt')));
// retrieve any other async Map API method
console.log(idbMap.keys());
console.log(idbMap.size);
for (const entry of idbMap.entries())
console.log(entry);
// or remove a single key
idbMap.delete('other.txt');
console.log(idbMap.keys());
console.log(idbMap.size);
// or clear the whole thing
idbMap.clear();
console.log(idbMap.keys());
console.log(idbMap.size);
// eventually sync it before exiting
await idbMap.sync();
There are other projects with a similar goal, most popular or notable is idb-keyval, but ...
.close()
asynchronous method to ensure a db has been successfully closedThat's pretty much it; you already know this module and the only different thing is the way an IDBMap is initialized.
FAQs
Async IndexedDB based Map
We found that idb-map-entries demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 0 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.
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.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.