freedb
A lightweight solution to use a cloud Key-Value database based on github.com.
Install
npm install freedb --save
Usage
import Free from 'freedb';
const kv = new Free.KV({
// This is my public test account and token, only used for test and CI.
// If you want to have your own database,
// Then you need to create a repository and generate a token.
host: 'git@github.com:Gcaufy-Test/test-database.git',
token: 'your_github_repo_token'
});
kv.set('mykey', 'myvalue').then(res => {
console.log(res.raw_url);
});
How to generate a token
- Create or use your own github.com account and login.
- Go to: Settings -> Developer settings -> Personal access tokens -> Generate new token
- Select scopes: "repo" to make sure you grant access.
API:
-
Create a KV instance
new Free.KV(option: DataBaseOption):
DataBaseOption { // host: github clone links, support both https/ssh links host: string; // token: OAuth token, make sure you have read/write access for the repo token: string; // db: Basiclly it's a directory, default value is "default" db?: string; // branch: git branch, default value is "master" branch?: string; // cipher: if is a string, then treat as a secret key for aes192 for both key and value. or you can customize a encryt and decrypt function cipher?: CipherOption | string; // debug: show action log or not. debug?: boolean; } CipherOption { // secret key for encrypt secret: string; // customize encrypt algorithm, default value is ase192 encrypt algorithm encode: (str: string): string; // customize decrypt algorithm, default value is ase192 decrypt algorithm decode: (str: string): string; }
-
KV instance methods
- use(db: string): void
Switch database. can be a non-exist database.
- keys(): Promise<KeyRecord[]>
List all keys in current database;
- exist(key: string): Promise
Check a key exist or not in current database;
- get(key: string): Promise
Get a key record in current database;
- set(key: string, value: string): Promise
Set a value for a key. Will create a key if a key do not exist;
- append(key: string): Promise
Append a value for a key. Will create a key if a key do not exist;
KeyRecord { // Key content content?: string; // Key name name?: string; // Key content size, if the key do not exist, then size = -1 size?: number; // Key git raw url raw_url?: string; // Key git html url html_url?: string; // Key git commit hash if there is commit?: string; }
How to protect your data
There are two way to protect your data.
- Encrypt you key and value in
CipherOption
new GitDB.KV({
host: 'git@github.com:Gcuafy-Test/test-database',
token: 'mytoken',
cipher: {
secret: 'my secret key',
// Default value is using ase192 encrypt algorithm
encode (str) {
return MyEncryptMethod(str);
},
// Default value is using ase192 decrypt algorithm
decode (str) {
return MyDecryptMethod(str);
}
}
})
- Make the repository private. Simply and easy. Github support private repository