aurora-db v0.0.2
AuroraDB
Proxified asynchronous API for more flexible and distributed IndexedDB
Create a regular or distributed database in the browser for p2p applications, multiplayer games, collaborative software etc.
Features
π Elegant Async/Await API:
await db.add(key, data) // Add record
await db.get(key) // Get record
await db.remove(key) // Remove record
await db.all() // Get everything
await db.destroy() // Destroy everything
...π€ Modernized via Proxy so we can also have:
await db.filter()
await db.every()
await db.transaction() π Distributed with a flip of a bool:
distributed: true // in db scheme- Encryption, chunking and connection handled by PeerJS
- Minimal footprint
- Written in pure JavaScript, requiring no external libraries or frameworks
Installation
Install AuroraDB from NPM:
npm install aurora-dbOr use it from a CDN:
<script src="https://cdn.jsdelivr.net/npm/aurora-db"></script>Usage/Examples
Create an scheme for your DB:
const exampleScheme = {
name: '#YourUniqueAppId', // make your app name unique this wil be your unique channel name
server: { host: '<server-url>' }, // peerjs-server config
distributed: false, // local or distributed deafult false
keyPath: 'id',
autoIncrement: false,
indexes: [
{name: "id", unique: true}, {name: "name"}
]
}Instantiate AuroraDB and pass the scheme to the constructor:
const db = new AuroraDB(exampleScheme)Add to DB:
await db.add("Player1", 9) // Adding a score for highscore leaderboard exampleDelete from DB:
await db.remove("Player1") Get from DB:
await db.get("Player1") Filter DB and return new Array:
await db.filter(e => e.name[0] == 'J') // Get records of all users whose name begins with "J"Verify that all DB entries satisfy the condition:
await db.every(e => e.name[0] == 'M') // Check if all users have a name starting with "M"Slice DB for lazy loading and pagination:
await db.slice(0,10) // Get the first 10 entriesGet all records from DB
await db.all()Control transactions if necessary
await db.transaction(db => { db.entries['foo'] = {name: 'foo'}; db.entries['bar'] = {name: 'bar'}})Add some data to our DB:
await db.add("Player1", 9) // eg. adding a score for leaderboardSend our data to everyone:
await db.post()Get data from everyone:
await db.fetch()Subscribe to events:
db.addEventListener("connection") // new peer joined
db.addEventListener("close") // peer closed connection
db.addEventListener("change") // local DB updated - can call post() after this
db.addEventListener("post") // listen for DB requests
db.addEventListener("disconnect") // listen for DB requestsGet data from everyone:
await db.fetch()Run PeerJS Server
Clone the project
git clone https://github.com/peers/peerjs-server.gitGo to the project directory
cd peerjs-serverInstall dependencies
npm install peer -gStart the server
peerjs --port 9000 --key peerjs
//Started PeerServer on ::, port: 9000, path: / Also, you can use Docker image to run a new container:
docker run -p 9000:9000 -d peerjs/peerjs-serverFor further server customization, please look at:
https://github.com/peers/peerjs-server