
Research
/Security News
Toptal’s GitHub Organization Hijacked: 10 Malicious Packages Published
Threat actors hijacked Toptal’s GitHub org, publishing npm packages with malicious payloads that steal tokens and attempt to wipe victim systems.
This is a small file/directory based app for Node JS that provides some basic database functionality for storing key-value pairs in table/row/entry format as .json files.
The purpose of this library is to provide a simple database-like storage system for things like small personal projects or prototyping. It is written to be easy to setup and use.
This library requires no dependencies.
Note: sketchdb requires Node.js v18 or higher.
run
npm install sketchdb
in your project's directory to install a local node module.
run
npm exec sketchdb-setup
from the top level of your project directory to setup an instance of sketchdb.
Alternatively, call sketchdb.setup() from inside a script (note - sketchdb.setup() is async and returns a promise)
The setup application will create a new directory in that top level directory of the project named "sketchdb_store" where data will be stored, along with a subdirectory named "tables". (That's all sketchdb-setup does)
External edits to directories and files in sketchdb_store will reflect in the database as long as they are proper JSON.
All function calls to sketchdb return a Promise.
Calls to retrieve data will resolve to that data or reject with an error.
Calls to write data or perform a delete operation will resolve with true on success (this will probably change to an object of some sort with more info but haven't decided yet)
For your convenience, all main API functions in sketchdb are available in both snake_case
and camelCase
formats. You can use whichever naming style fits your project best—they are fully interchangeable.
Examples:
sketchdb.createTable = sketchdb.create_table;
sketchdb.listTables = sketchdb.list_tables;
sketchdb.getRow = sketchdb.get_row;
sketchdb.getAll = sketchdb.get_all;
sketchdb.deleteRow = sketchdb.delete_row;
sketchdb.deleteTable = sketchdb.delete_table;
sketchdb.renameTable = sketchdb.rename_table;
sketchdb.moveRow = sketchdb.move_row;
sketchdb.insert
sketchdb.update
List the tables in the database in array format.
Syntax:
sketchdb.list_tables()
Parameters:
none
Return value: Returns a Promise. When resolved, Promise returns an array of the table names as strings.
Example usage:
sketchdb.list_tables()
.then(function(results) {
do_something_with_results(results);
// Results will be an array like ["users","posts","authors"]
});
Creates a new table in the database.
Syntax:
sketchdb.create_table('table_name')
Parameters:
table_name: The name of the table to create (as a string)
Return value: Returns a Promise. Resolves with true. Rejects with an error if the table exists.
Example usage:
sketchdb.create_table('users')
.then(success_function)
.catch(error_handler);
Note: You can also create a table by making a subdirectory in "./sketchdb_store/tables/" with the table name.
Insert a new row into a given table in the database.
Syntax:
sketchdb.insert(table_name, id, data)
Or let sketchdb generate a unique id:
sketchdb.insert(table_name, data)
Parameters:
Return value: Returns a Promise. Resolves with the id.
Example usage:
const user = { name: 'John', group: '1' };
sketchdb.insert('users', user)
.then(function(id) {
// use the returned unique id
});
or
const id = '1234'
const user = { name: 'John', group: '1' };
sketchdb.insert('users', id, user)
.then(function(id) {
// do something next, id is the given id
});
Retrieve a row from a given table.
Syntax:
sketchdb.get_row(table_name, id)
Parameters:
Return value: Resolves to the data object for the row, or rejects if not found.
Example usage:
sketchdb.get_row('users', '178')
.then(user => {
// Do something with the user data
console.log('User name:', user.name);
console.log('User group:', user.group);
})
.catch(error => {
// Handle the error
console.error('Error fetching row:', error.message);
});
Retrieve all rows from a given table as an array.
Syntax:
sketchdb.get_all(table_name)
Return value: Resolves to an array of row objects. Rejects if table not found.
Example usage:
sketchdb.get_all('users')
.then(users => {
//do something with the users array
handle_users(users);
})
.catch(handle_error);
Update a row with new or replacement data.
Syntax:
sketchdb.update(table_name, id, data)
Parameters:
Return value: Resolves with true on success, rejects on error.
Example usage:
sketchdb.update('users', 'uq13g564d', { group: '2' })
.then(success_function)
.catch(handle_error);
Delete a row from a table.
Syntax:
sketchdb.delete_row(table_name, id)
Return value: Resolves with true on success.
Example usage:
sketchdb.delete_row('users', '178')
.then(success_function)
.catch(handle_error);
Delete an entire table and its rows.
Syntax:
sketchdb.delete_table(table_name)
Return value: Resolves with true on success.
Example usage:
sketchdb.delete_table('students')
.then(success_function)
.catch(handle_error);
Return an array of all rows in a table with a given key/value pair.
Syntax:
sketchdb.filter(table_name, key, value)
Return value: Resolves to array of row objects with matching key/value.
Example usage:
sketchdb.filter('users', 'group', 'superuser')
.then(users => {
// Do something with the array of objects
handle_users_array(users);
})
.catch(error => {
// Handle the error
console.error('Error fetching array:', error.message);
});
Rename a table.
Syntax:
sketchdb.rename_table(table, new_name)
Return value: Resolves with true on success.
Example usage:
sketchdb.rename_table('authors', 'contributors')
.then(success_function)
.catch(handle_error);
Move a row from one table to another (retaining the same row id).
Syntax:
sketchdb.move_row(from_table, to_table, id)
Parameters:
Return value: Resolves with true on success. Rejects with an error if the source row does not exist, or the destination already has the id.
Example usage:
sketchdb.move_row('drafts', 'posts', '12345')
.then(() => console.log('Row moved!'))
.catch(handle_error);
FAQs
A simple directory/file based database app.
The npm package sketchdb receives a total of 269 weekly downloads. As such, sketchdb popularity was classified as not popular.
We found that sketchdb demonstrated a healthy version release cadence and project activity because the last version was released less than 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.
Research
/Security News
Threat actors hijacked Toptal’s GitHub org, publishing npm packages with malicious payloads that steal tokens and attempt to wipe victim systems.
Research
/Security News
Socket researchers investigate 4 malicious npm and PyPI packages with 56,000+ downloads that install surveillance malware.
Security News
The ongoing npm phishing campaign escalates as attackers hijack the popular 'is' package, embedding malware in multiple versions.