@walletpack/core
Version:
> TODO: description
218 lines (185 loc) • 7.14 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _Meta = _interopRequireDefault(require("./Meta"));
var _Keychain = _interopRequireDefault(require("./Keychain"));
var _Settings = _interopRequireDefault(require("./Settings"));
var _aesOop = _interopRequireDefault(require("aes-oop"));
var _Hasher = _interopRequireDefault(require("../util/Hasher"));
var _IdGenerator = _interopRequireDefault(require("../util/IdGenerator"));
var _PluginRepository = _interopRequireDefault(require("../plugins/PluginRepository"));
var _Identity = _interopRequireWildcard(require("./Identity"));
var _Contact = _interopRequireDefault(require("./Contact"));
var Scatter =
/*#__PURE__*/
function () {
function Scatter() {
(0, _classCallCheck2["default"])(this, Scatter);
this.meta = _Meta["default"].placeholder();
this.keychain = _Keychain["default"].placeholder();
this.settings = _Settings["default"].placeholder();
this.contacts = [];
this.hash = _Hasher["default"].unsaltedQuickHash(_IdGenerator["default"].text(2048));
this.onboarded = false;
this.pin = null;
this.pinForAll = false;
}
(0, _createClass2["default"])(Scatter, [{
key: "clone",
value: function clone() {
return Scatter.fromJson(JSON.parse(JSON.stringify(this)));
}
}, {
key: "isEncrypted",
value: function isEncrypted() {
return (0, _typeof2["default"])(this.keychain) !== 'object';
}
/***
* Encrypts the entire keychain
* @param seed - The seed to encrypt with
*/
}, {
key: "decrypt",
value: function decrypt(seed) {
if (this.isEncrypted()) this.keychain = _Keychain["default"].fromJson(_aesOop["default"].decrypt(this.keychain, seed));
}
/***
* Decrypts the entire keychain
* @param seed - The seed to decrypt with
*/
}, {
key: "encrypt",
value: function encrypt(seed) {
if (!this.isEncrypted()) this.keychain = _aesOop["default"].encrypt(this.keychain, seed);
}
}, {
key: "savable",
value: function savable(seed) {
// Encrypting in-place.
this.keychain.cards.map(function (card) {
return card.encrypt(seed);
});
this.keychain.keypairs.map(function (keypair) {
return keypair.encrypt(seed);
});
this.keychain.identities.map(function (id) {
return id.encrypt(seed);
}); // Encrypting clone
var clone = this.clone();
clone.encrypt(seed);
return clone;
}
/*************************************/
/************ HELPERS *************/
/*************************************/
}, {
key: "networkTokens",
value: function networkTokens() {
return this.settings.networks.map(function (x) {
var token = x.systemToken();
token.chainId = x.chainId;
return token;
}).reduce(function (acc, token) {
var exists = acc.find(function (x) {
return x.unique() === token.unique() && x.chainId === token.chainId;
});
if (!exists) acc.push(token);
return acc;
}, []);
}
}, {
key: "allTokens",
value: function allTokens() {
return this.networkTokens().concat(this.settings.tokens);
}
}], [{
key: "create",
value: function () {
var _create = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee2() {
var scatter, firstIdentity;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
scatter = new Scatter();
_context2.next = 3;
return Promise.all(_PluginRepository["default"].signatureProviders().map(
/*#__PURE__*/
function () {
var _ref = (0, _asyncToGenerator2["default"])(
/*#__PURE__*/
_regenerator["default"].mark(function _callee(plugin) {
var network;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
network = plugin.getEndorsedNetwork();
scatter.settings.networks.push(network);
case 2:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function (_x) {
return _ref.apply(this, arguments);
};
}()));
case 3:
firstIdentity = _Identity["default"].placeholder();
_context2.next = 6;
return firstIdentity.initialize(scatter.hash);
case 6:
firstIdentity.name = 'MyFirstIdentity';
scatter.keychain.locations = [_Identity.LocationInformation.fromJson({
name: 'Home'
})];
firstIdentity.location = scatter.keychain.locations[0];
scatter.keychain.updateOrPushIdentity(firstIdentity);
return _context2.abrupt("return", scatter);
case 11:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
function create() {
return _create.apply(this, arguments);
}
return create;
}()
}, {
key: "placeholder",
value: function placeholder() {
return new Scatter();
}
}, {
key: "fromJson",
value: function fromJson(json) {
var p = Object.assign(this.placeholder(), json);
if (json.hasOwnProperty('meta')) p.meta = _Meta["default"].fromJson(json.meta);
if (json.hasOwnProperty('settings')) p.settings = _Settings["default"].fromJson(json.settings);
if (json.hasOwnProperty('keychain')) p.keychain = typeof json.keychain === 'string' ? json.keychain : _Keychain["default"].fromJson(json.keychain);
if (json.hasOwnProperty('contacts')) p.contacts = json.contacts.map(function (x) {
return _Contact["default"].fromJson(x);
});
return p;
}
}]);
return Scatter;
}();
exports["default"] = Scatter;