import Dexie from 'dexie' // Suffex the database name with NODE_ENV so that wer can have per-env databases. export const getDbName = () => { let name = `ZapDesktop` if (process.env.NODE_ENV) { name += `.${process.env.NODE_ENV}` } return name } // Define the database. const db = new Dexie(getDbName()) db.version(1).stores({ settings: 'key', wallets: '++id, type, chain, network', nodes: 'id' }) // Wallet with ID 1 will always be a local bitcoin wallet. // This ensures that useres upgrading from older versions do not loose their initial wallet. db.on('populate', () => { db.wallets.add({ type: 'local', currency: 'bitcoin' }) }) /** * @class Wallet * Wallet helper class. */ export const Wallet = db.wallets.defineClass({ id: Number, type: String, currency: String, network: String, alias: String, autopilot: Boolean, cert: String, host: String, macaroon: String }) /** * @class Node * Node helper class. */ export const Node = db.nodes.defineClass({ id: String, hasSynced: Boolean, addresses: Object }) /** * Get current address of a given type. * @param {String} type type of address to fetch. * @return {String} current address of requested type, if one exists. */ Node.prototype.getCurrentAddress = function(type) { return Dexie.getByKeyPath(this, `addresses.${type}`) } /** * Set current address of a given type. * @param {String} type type of address to save. * @param {String} address address to save. * @return {Node} updated node instance. */ Node.prototype.setCurrentAddress = function(type, address) { Dexie.setByKeyPath(this, `addresses.${type}`, address) return db.nodes.put(this) } export default db