UNPKG

walletd

Version:

Universal headless digital asset wallet for machines

155 lines (77 loc) 2.05 kB
import {existsSync} from 'fs'; var configFile; if (existsSync(`${process.env.HOME}/.walletd/config.js`)) { configFile = require(`${process.env.HOME}/.walletd/config.js`); } else if (existsSync(`${process.env.HOME}/.walletd/config.ts`)) { configFile = require(`${process.env.HOME}/.walletd/config.ts`); } else { configFile = require("../../config"); } let packageJSON = require("../../package"); class WalletPlugin { name: string; module: any; code: any; constructor(name, pkg) { this.name = name; this.module = pkg; } init(walletData): WalletPlugin { this.code = this.module.init(walletData); return this; } } class Template { } interface WalletData { data: any; } class Wallet { plugin: WalletPlugin; data: WalletData; constructor(plugin: WalletPlugin, data: WalletData) { this.plugin = plugin.init(data); this.data = data; } async getBalance() { return this.plugin.code.getBalance(); } async sendPayment() { return this.plugin.code.sendPayment(); } async receivePayment() { return this.plugin.code.receivePayment(); } async listPayments() { return this.plugin.code.listPayments(); } } function parseNPMPlugins(packageJSON) { let pluginPackages = Object.entries(packageJSON.dependencies).filter(dep => { return dep[0].match(/^walletd-plugin-/); }); return pluginPackages.map(pkg => { let plugin = require(pkg[0]); plugin.name = pkg[0].split('walletd-plugin-')[1]; plugin.version = pkg[1]; return plugin; }); } async function init() { let pluginPackages = parseNPMPlugins(packageJSON); let wallets = {}; let plugins = {}; pluginPackages.forEach(pkg => { plugins[pkg.name] = new WalletPlugin(pkg.name, pkg); }); Object.entries(configFile.wallets).forEach(([name, config]) => { let wallet = new Wallet(plugins[config.plugin], config.data); wallets[name] = wallet; }); return wallets; } export { init, WalletPlugin, Wallet }