Security
We take security very seriously and have implemented robust measures to ensure data protection. Below are the specifications for our security features:
| Feature | Description | |--------------------------------|-----------------------------------------------------------------------------| | Password Hashing | We use PBKDF2 (Password-Based Key Derivation Function 2) with HMAC-SHA3-256 for password hashing. This method involves multiple iterations to enhance security against brute-force attacks. Learn more about PBKDF2 | | Encryption | Data is encrypted using AES-256-GCM (Advanced Encryption Standard with Galois/Counter Mode), which provides both confidentiality and integrity. Learn more about AES-GCM | | Integrity | We ensure data integrity by hashing data with SHA3-512 and comparing it with the stored hash to detect any tampering. Learn more about SHA-3 |
Supported features
By default RIDB is bundled with a default InMemory storage with support for write, create, update, fetch one, remove, find and count operations.
| Feature | Description | |--------------------------------|-----------------------------------------------------------------------------| | Schemas | Creation of declarative schemas with required fields, default and encrypted fields | | Validation | Implement validation across all the flows extracting properties and required fields when needed | | Primary Key Management | Primary key and index management | | Plugin Engine | Extend the functionality of your Database implementation with wasm or Javascript plugins | | Data Encryption Plugin | Secure data with encryption plugins | | Migration Plugin | Support for data migrations | | Integrity Plugin | Support for data has not been tampered with | | IndexDB Storage | Robust type safe replacement for Dexie
Install
In order to install simply run the following command npm:
text1npm i @trust0/ridb --save
yarn:
text1yarn add @trust0/ridb
Usage
Creating your own database is pretty straight forward.
javascript1234567891011121314151617181920212223import {RIDB,SchemaFieldType} from '@trust0/ridb';(async () => {const db = new RIDB({demo: {version: 0,primaryKey: 'id',type: SchemaFieldType.object,properties: {id: {type: SchemaFieldType.string,maxLength: 60}}}});console.log("Starting the database");await db.start({dbName: "demo"});console.log("Ok :)");})()
Use with custom storage (IndexDB and InMemory)
javascript123456789101112131415161718192021222324import {RIDB,SchemaFieldType,StorageType} from '@trust0/ridb';(async () => {const db = new RIDB({demo: {version: 0,primaryKey: 'id',type: SchemaFieldType.object,properties: {id: {type: SchemaFieldType.string,maxLength: 60}}}});console.log("Starting the database");await db.start({dbName: "demo", storage: StorageType.IndexDB //or StorageType.InMemory});console.log("Ok :)");})()
Specification
Storage
A valid storage must extend BaseStorage class here's some example:
typescript1234567891011121314151617181920212223242526272829303132333435363738export class InMemory<T extends SchemaTypeRecord> extends BaseStorage<T> {static create<SchemasCreate extends SchemaTypeRecord>(name: string,schemas: SchemasCreate,options: any): Promise<BaseStorage<SchemasCreate>> {throw new Error("Method not implemented.");}constructor(name: string, schemas: T, options: any) {super(name, schemas, options);}findDocumentById(collectionName: keyof T, id: string): Promise<Doc<T[keyof T]> | null> {throw new Error("Method not implemented.");}find(collectionName: keyof T, query: QueryType<T[keyof T]>): Promise<Doc<T[keyof T]>[]> {throw new Error("Method not implemented.");}write(op: Operation<T[keyof T]>): Promise<Doc<T[keyof T]>> {throw new Error("Method not implemented.");}count(collectionName: keyof T, query: QueryType<T[keyof T]>): Promise<number> {throw new Error("Method not implemented.");}start(): Promise<void> {throw new Error("Method not implemented.");}close(): Promise<void> {throw new Error("Method not implemented.");}}
Plugins
Plugins extend the functionality of the database by hooking into the database lifecycle.
typescript123456789101112131415161718/*** A simple plugin that overrides the docCreateHook and docRecoverHook methods.*/class MySimplePlugin extends BasePlugin {constructor() {super();this.docCreateHook = (schema,migration,docs) => docs;this.docRecoverHook = (schema,migration,docs) => docs;}}