@neo-one/server-plugin-wallet
Version:
NEO•ONE Server wallet plugin.
88 lines (86 loc) • 13.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const client_core_1 = require("@neo-one/client-core");
const client_full_core_1 = require("@neo-one/client-full-core");
const server_plugin_1 = require("@neo-one/server-plugin");
const fs = tslib_1.__importStar(require("fs-extra"));
const lodash_1 = tslib_1.__importDefault(require("lodash"));
const path = tslib_1.__importStar(require("path"));
const redux_persist_node_storage_1 = require("redux-persist-node-storage");
const constants_1 = require("./constants");
const crud_1 = require("./crud");
const MasterWalletResourceAdapter_1 = require("./MasterWalletResourceAdapter");
const WALLETS_PATH = 'wallets';
class WalletResourceType extends server_plugin_1.ResourceType {
constructor({ plugin }) {
super({
plugin,
name: 'wallet',
names: {
capital: 'Wallet',
capitalPlural: 'Wallets',
lower: 'wallet',
lowerPlural: 'wallets',
},
});
}
async createMasterResourceAdapter({ pluginManager, dataPath, }) {
const walletsPath = path.resolve(dataPath, WALLETS_PATH);
fs.mkdirpSync(walletsPath);
const client = new client_full_core_1.Client({
file: new client_full_core_1.LocalUserAccountProvider({
keystore: new client_core_1.LocalKeyStore(new client_core_1.LocalStringStore(new redux_persist_node_storage_1.AsyncNodeStorage(walletsPath))),
provider: new client_core_1.NEOONEProvider([{ network: 'main', rpcURL: constants_1.constants.MAIN_URL }]),
}),
});
return new MasterWalletResourceAdapter_1.MasterWalletResourceAdapter({
client,
pluginManager,
resourceType: this,
});
}
getCRUD() {
return new server_plugin_1.CRUD({
resourceType: this,
start: new crud_1.StartWalletCRUD({ resourceType: this }),
stop: new crud_1.StopWalletCRUD({ resourceType: this }),
delete: new crud_1.DeleteWalletCRUD({ resourceType: this }),
create: new crud_1.CreateWalletCRUD({ resourceType: this }),
get: new crud_1.GetWalletCRUD({ resourceType: this }),
describe: new crud_1.DescribeWalletCRUD({ resourceType: this }),
});
}
getListTable(resources) {
return [['Wallet', 'Name', 'Address', 'Unlocked', 'NEO', 'GAS']].concat(lodash_1.default.sortBy(resources, (resource) => resource.name).map((resource) => [
resource.network,
resource.baseName,
resource.address,
resource.unlocked ? 'Yes' : 'No',
resource.neoBalance,
resource.gasBalance,
]));
}
getDescribeTable(resource) {
const table = [
['Network', resource.network],
['Name', resource.baseName],
['Unlocked', resource.unlocked ? 'Yes' : 'No'],
['Private Key', resource.wif === undefined ? 'Locked' : resource.wif],
['NEP2', resource.nep2 === undefined ? 'N/A' : resource.nep2],
['Public Key', resource.publicKey],
['Address', resource.address],
];
return table.concat([
[
'Balance',
{
type: 'list',
table: [['Asset', 'Amount', 'Hash']].concat(lodash_1.default.sortBy(resource.balance, (coin) => coin.asset).map((coin) => [coin.assetName, coin.amount, coin.asset])),
},
],
]);
}
}
exports.WalletResourceType = WalletResourceType;
//# sourceMappingURL=data:application/json;charset=utf8;base64,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QyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDMUc7aUJBQ0Y7YUFDTztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWxGRCxnREFrRkMiLCJmaWxlIjoibmVvLW9uZS1zZXJ2ZXItcGx1Z2luLXdhbGxldC9zcmMvV2FsbGV0UmVzb3VyY2VUeXBlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXNlckFjY291bnRJRCB9IGZyb20gJ0BuZW8tb25lL2NsaWVudC1jb21tb24nO1xuaW1wb3J0IHsgTG9jYWxLZXlTdG9yZSwgTG9jYWxTdHJpbmdTdG9yZSwgTkVPT05FUHJvdmlkZXIgfSBmcm9tICdAbmVvLW9uZS9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBDbGllbnQsIExvY2FsVXNlckFjY291bnRQcm92aWRlciB9IGZyb20gJ0BuZW8tb25lL2NsaWVudC1mdWxsLWNvcmUnO1xuaW1wb3J0IHtcbiAgQ1JVRCxcbiAgRGVzY3JpYmVUYWJsZSxcbiAgTGlzdFRhYmxlLFxuICBNYXN0ZXJSZXNvdXJjZUFkYXB0ZXIsXG4gIE1hc3RlclJlc291cmNlQWRhcHRlck9wdGlvbnMsXG4gIFJlc291cmNlU3RhdGUsXG4gIFJlc291cmNlVHlwZSxcbn0gZnJvbSAnQG5lby1vbmUvc2VydmVyLXBsdWdpbic7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFzeW5jTm9kZVN0b3JhZ2UgfSBmcm9tICdyZWR1eC1wZXJzaXN0LW5vZGUtc3RvcmFnZSc7XG5pbXBvcnQgeyBjb25zdGFudHMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBDcmVhdGVXYWxsZXRDUlVELFxuICBEZWxldGVXYWxsZXRDUlVELFxuICBEZXNjcmliZVdhbGxldENSVUQsXG4gIEdldFdhbGxldENSVUQsXG4gIFN0YXJ0V2FsbGV0Q1JVRCxcbiAgU3RvcFdhbGxldENSVUQsXG59IGZyb20gJy4vY3J1ZCc7XG5pbXBvcnQgeyBNYXN0ZXJXYWxsZXRSZXNvdXJjZUFkYXB0ZXIgfSBmcm9tICcuL01hc3RlcldhbGxldFJlc291cmNlQWRhcHRlcic7XG5pbXBvcnQgeyBXYWxsZXRQbHVnaW4gfSBmcm9tICcuL1dhbGxldFBsdWdpbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29pbiB7XG4gIHJlYWRvbmx5IGFzc2V0TmFtZTogc3RyaW5nO1xuICByZWFkb25seSBhc3NldDogc3RyaW5nO1xuICByZWFkb25seSBhbW91bnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXYWxsZXQge1xuICByZWFkb25seSBwbHVnaW46IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYmFzZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhdGU6IFJlc291cmNlU3RhdGU7XG4gIHJlYWRvbmx5IG5ldHdvcms6IHN0cmluZztcbiAgcmVhZG9ubHkgYWNjb3VudElEOiBVc2VyQWNjb3VudElEO1xuICByZWFkb25seSBhZGRyZXNzOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVubG9ja2VkOiBib29sZWFuO1xuICByZWFkb25seSBuZW9CYWxhbmNlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGdhc0JhbGFuY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgd2lmOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IG5lcDI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcHVibGljS2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJhbGFuY2U6IHJlYWRvbmx5IENvaW5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXYWxsZXRSZXNvdXJjZU9wdGlvbnMge1xuICByZWFkb25seSBuZXR3b3JrPzogc3RyaW5nO1xuICByZWFkb25seSBwYXNzd29yZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcHJpdmF0ZUtleT86IHN0cmluZztcbn1cblxuY29uc3QgV0FMTEVUU19QQVRIID0gJ3dhbGxldHMnO1xuXG5leHBvcnQgY2xhc3MgV2FsbGV0UmVzb3VyY2VUeXBlIGV4dGVuZHMgUmVzb3VyY2VUeXBlPFdhbGxldCwgV2FsbGV0UmVzb3VyY2VPcHRpb25zPiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih7IHBsdWdpbiB9OiB7IHJlYWRvbmx5IHBsdWdpbjogV2FsbGV0UGx1Z2luIH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBwbHVnaW4sXG4gICAgICBuYW1lOiAnd2FsbGV0JyxcbiAgICAgIG5hbWVzOiB7XG4gICAgICAgIGNhcGl0YWw6ICdXYWxsZXQnLFxuICAgICAgICBjYXBpdGFsUGx1cmFsOiAnV2FsbGV0cycsXG4gICAgICAgIGxvd2VyOiAnd2FsbGV0JyxcbiAgICAgICAgbG93ZXJQbHVyYWw6ICd3YWxsZXRzJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlTWFzdGVyUmVzb3VyY2VBZGFwdGVyKHtcbiAgICBwbHVnaW5NYW5hZ2VyLFxuICAgIGRhdGFQYXRoLFxuICB9OiBNYXN0ZXJSZXNvdXJjZUFkYXB0ZXJPcHRpb25zKTogUHJvbWlzZTxNYXN0ZXJSZXNvdXJjZUFkYXB0ZXI8V2FsbGV0LCBXYWxsZXRSZXNvdXJjZU9wdGlvbnM+PiB7XG4gICAgY29uc3Qgd2FsbGV0c1BhdGggPSBwYXRoLnJlc29sdmUoZGF0YVBhdGgsIFdBTExFVFNfUEFUSCk7XG4gICAgZnMubWtkaXJwU3luYyh3YWxsZXRzUGF0aCk7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCh7XG4gICAgICBmaWxlOiBuZXcgTG9jYWxVc2VyQWNjb3VudFByb3ZpZGVyKHtcbiAgICAgICAga2V5c3RvcmU6IG5ldyBMb2NhbEtleVN0b3JlKG5ldyBMb2NhbFN0cmluZ1N0b3JlKG5ldyBBc3luY05vZGVTdG9yYWdlKHdhbGxldHNQYXRoKSkpLFxuICAgICAgICBwcm92aWRlcjogbmV3IE5FT09ORVByb3ZpZGVyKFt7IG5ldHdvcms6ICdtYWluJywgcnBjVVJMOiBjb25zdGFudHMuTUFJTl9VUkwgfV0pLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IE1hc3RlcldhbGxldFJlc291cmNlQWRhcHRlcih7XG4gICAgICBjbGllbnQsXG4gICAgICBwbHVnaW5NYW5hZ2VyLFxuICAgICAgcmVzb3VyY2VUeXBlOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENSVUQoKTogQ1JVRDxXYWxsZXQsIFdhbGxldFJlc291cmNlT3B0aW9ucz4ge1xuICAgIHJldHVybiBuZXcgQ1JVRCh7XG4gICAgICByZXNvdXJjZVR5cGU6IHRoaXMsXG4gICAgICBzdGFydDogbmV3IFN0YXJ0V2FsbGV0Q1JVRCh7IHJlc291cmNlVHlwZTogdGhpcyB9KSxcbiAgICAgIHN0b3A6IG5ldyBTdG9wV2FsbGV0Q1JVRCh7IHJlc291cmNlVHlwZTogdGhpcyB9KSxcbiAgICAgIGRlbGV0ZTogbmV3IERlbGV0ZVdhbGxldENSVUQoeyByZXNvdXJjZVR5cGU6IHRoaXMgfSksXG4gICAgICBjcmVhdGU6IG5ldyBDcmVhdGVXYWxsZXRDUlVEKHsgcmVzb3VyY2VUeXBlOiB0aGlzIH0pLFxuICAgICAgZ2V0OiBuZXcgR2V0V2FsbGV0Q1JVRCh7IHJlc291cmNlVHlwZTogdGhpcyB9KSxcbiAgICAgIGRlc2NyaWJlOiBuZXcgRGVzY3JpYmVXYWxsZXRDUlVEKHsgcmVzb3VyY2VUeXBlOiB0aGlzIH0pLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldExpc3RUYWJsZShyZXNvdXJjZXM6IHJlYWRvbmx5IFdhbGxldFtdKTogTGlzdFRhYmxlIHtcbiAgICByZXR1cm4gW1snV2FsbGV0JywgJ05hbWUnLCAnQWRkcmVzcycsICdVbmxvY2tlZCcsICdORU8nLCAnR0FTJ11dLmNvbmNhdChcbiAgICAgIF8uc29ydEJ5KHJlc291cmNlcywgKHJlc291cmNlKSA9PiByZXNvdXJjZS5uYW1lKS5tYXAoKHJlc291cmNlKSA9PiBbXG4gICAgICAgIHJlc291cmNlLm5ldHdvcmssXG4gICAgICAgIHJlc291cmNlLmJhc2VOYW1lLFxuICAgICAgICByZXNvdXJjZS5hZGRyZXNzLFxuICAgICAgICByZXNvdXJjZS51bmxvY2tlZCA/ICdZZXMnIDogJ05vJyxcbiAgICAgICAgcmVzb3VyY2UubmVvQmFsYW5jZSxcbiAgICAgICAgcmVzb3VyY2UuZ2FzQmFsYW5jZSxcbiAgICAgIF0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVzY3JpYmVUYWJsZShyZXNvdXJjZTogV2FsbGV0KTogRGVzY3JpYmVUYWJsZSB7XG4gICAgY29uc3QgdGFibGU6IERlc2NyaWJlVGFibGUgPSBbXG4gICAgICBbJ05ldHdvcmsnLCByZXNvdXJjZS5uZXR3b3JrXSBhcyBjb25zdCxcbiAgICAgIFsnTmFtZScsIHJlc291cmNlLmJhc2VOYW1lXSBhcyBjb25zdCxcbiAgICAgIFsnVW5sb2NrZWQnLCByZXNvdXJjZS51bmxvY2tlZCA/ICdZZXMnIDogJ05vJ10gYXMgY29uc3QsXG4gICAgICBbJ1ByaXZhdGUgS2V5JywgcmVzb3VyY2Uud2lmID09PSB1bmRlZmluZWQgPyAnTG9ja2VkJyA6IHJlc291cmNlLndpZl0gYXMgY29uc3QsXG4gICAgICBbJ05FUDInLCByZXNvdXJjZS5uZXAyID09PSB1bmRlZmluZWQgPyAnTi9BJyA6IHJlc291cmNlLm5lcDJdIGFzIGNvbnN0LFxuICAgICAgWydQdWJsaWMgS2V5JywgcmVzb3VyY2UucHVibGljS2V5XSBhcyBjb25zdCxcbiAgICAgIFsnQWRkcmVzcycsIHJlc291cmNlLmFkZHJlc3NdIGFzIGNvbnN0LFxuICAgIF07XG5cbiAgICByZXR1cm4gdGFibGUuY29uY2F0KFtcbiAgICAgIFtcbiAgICAgICAgJ0JhbGFuY2UnLFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgIHRhYmxlOiBbWydBc3NldCcsICdBbW91bnQnLCAnSGFzaCddXS5jb25jYXQoXG4gICAgICAgICAgICBfLnNvcnRCeShyZXNvdXJjZS5iYWxhbmNlLCAoY29pbikgPT4gY29pbi5hc3NldCkubWFwKChjb2luKSA9PiBbY29pbi5hc3NldE5hbWUsIGNvaW4uYW1vdW50LCBjb2luLmFzc2V0XSksXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgIF0gYXMgY29uc3QsXG4gICAgXSk7XG4gIH1cbn1cbiJdfQ==