Files
notesnook/packages/core/database/backup.js
2020-09-13 13:24:24 +05:00

35 lines
889 B
JavaScript

export default class Backup {
/**
*
* @param {import("../api/index.js").default} db
*/
constructor(db) {
this._db = db;
}
async export(encrypt = false) {
const keys = await this._db.context.getAllKeys();
const db = Object.fromEntries(await this._db.context.readMulti(keys));
if (encrypt) {
const key = await this._db.user.key();
return JSON.stringify(
await this._db.context.encrypt(key, JSON.stringify(db))
);
}
return JSON.stringify(db);
}
async import(data) {
let backup = JSON.parse(data);
//check if we have encrypted data
if (backup.salt && backup.iv) {
const key = await this._db.user.key();
backup = JSON.parse(await this._db.context.decrypt(key, backup));
}
for (let key in backup) {
let value = backup[key];
await this._db.context.write(key, value);
}
}
}