UNPKG

3box

Version:
431 lines (345 loc) 16.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _get3 = _interopRequireDefault(require("@babel/runtime/helpers/get")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function () { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } var KeyValueStore = require('./keyValueStore'); var utils = require('./utils/index'); var PrivateStore = /*#__PURE__*/function (_KeyValueStore) { (0, _inherits2["default"])(PrivateStore, _KeyValueStore); var _super = _createSuper(PrivateStore); function PrivateStore() { (0, _classCallCheck2["default"])(this, PrivateStore); return _super.apply(this, arguments); } (0, _createClass2["default"])(PrivateStore, [{ key: "get", value: function () { var _get2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(key) { var opts, entry, _args = arguments; return _regenerator["default"].wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: opts = _args.length > 1 && _args[1] !== undefined ? _args[1] : {}; _context.t0 = (0, _get3["default"])((0, _getPrototypeOf2["default"])(PrivateStore.prototype), "get", this); _context.t1 = this; _context.next = 5; return this._3id.hashDBKey(key); case 5: _context.t2 = _context.sent; _context.t3 = opts; _context.next = 9; return _context.t0.call.call(_context.t0, _context.t1, _context.t2, _context.t3); case 9: entry = _context.sent; if (entry) { _context.next = 12; break; } return _context.abrupt("return", null); case 12: if (!opts.metadata) { _context.next = 21; break; } _context.t4 = _objectSpread; _context.t5 = _objectSpread({}, entry); _context.t6 = {}; _context.next = 18; return this._decryptEntry(entry.value); case 18: _context.t7 = _context.sent; _context.t8 = { value: _context.t7 }; return _context.abrupt("return", (0, _context.t4)(_context.t5, _context.t6, _context.t8)); case 21: return _context.abrupt("return", this._decryptEntry(entry)); case 22: case "end": return _context.stop(); } } }, _callee, this); })); function get(_x) { return _get2.apply(this, arguments); } return get; }() }, { key: "getMetadata", value: function () { var _getMetadata = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(key) { return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.t0 = (0, _get3["default"])((0, _getPrototypeOf2["default"])(PrivateStore.prototype), "getMetadata", this); _context2.t1 = this; _context2.next = 4; return this._3id.hashDBKey(key); case 4: _context2.t2 = _context2.sent; return _context2.abrupt("return", _context2.t0.call.call(_context2.t0, _context2.t1, _context2.t2)); case 6: case "end": return _context2.stop(); } } }, _callee2, this); })); function getMetadata(_x2) { return _getMetadata.apply(this, arguments); } return getMetadata; }() }, { key: "set", value: function () { var _set = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(key, value) { return _regenerator["default"].wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: utils.throwIfUndefined(key, 'key'); _context3.next = 3; return this._encryptEntry(value); case 3: value = _context3.sent; _context3.next = 6; return this._3id.hashDBKey(key); case 6: key = _context3.sent; return _context3.abrupt("return", (0, _get3["default"])((0, _getPrototypeOf2["default"])(PrivateStore.prototype), "set", this).call(this, key, value)); case 8: case "end": return _context3.stop(); } } }, _callee3, this); })); function set(_x3, _x4) { return _set.apply(this, arguments); } return set; }() }, { key: "setMultiple", value: function () { var _setMultiple = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(keys, values) { var _this = this; var dbKeys, encryptedValues; return _regenerator["default"].wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: utils.throwIfNotEqualLenArrays(keys, values); _context4.next = 3; return Promise.all(keys.map(function (key) { return _this._3id.hashDBKey(key); }, this)); case 3: dbKeys = _context4.sent; _context4.next = 6; return Promise.all(values.map(this._encryptEntry, this)); case 6: encryptedValues = _context4.sent; return _context4.abrupt("return", (0, _get3["default"])((0, _getPrototypeOf2["default"])(PrivateStore.prototype), "setMultiple", this).call(this, dbKeys, encryptedValues)); case 8: case "end": return _context4.stop(); } } }, _callee4, this); })); function setMultiple(_x5, _x6) { return _setMultiple.apply(this, arguments); } return setMultiple; }() }, { key: "remove", value: function () { var _remove = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(key) { return _regenerator["default"].wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: utils.throwIfUndefined(key, 'key'); _context5.next = 3; return this._3id.hashDBKey(key); case 3: key = _context5.sent; return _context5.abrupt("return", (0, _get3["default"])((0, _getPrototypeOf2["default"])(PrivateStore.prototype), "remove", this).call(this, key)); case 5: case "end": return _context5.stop(); } } }, _callee5, this); })); function remove(_x7) { return _remove.apply(this, arguments); } return remove; }() /** * Returns array of underlying log entries. In linearized order according to their Lamport clocks. * Useful for generating a complete history of all operations on store. Key is hashed, so key is * not available from the private store. * * @example * const log = store.log * const entry = log[0] * console.log(entry) * // { op: 'PUT', key: ...., value: 'Botbot', timeStamp: '1538575416068' } * * @return {Array<Object>} Array of ordered log entry objects */ }, { key: "log", value: function () { var _log = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() { var encLog, log, _iterator, _step, entry; return _regenerator["default"].wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: _context6.next = 2; return (0, _get3["default"])((0, _getPrototypeOf2["default"])(PrivateStore.prototype), "log", this).call(this); case 2: encLog = _context6.sent; log = []; _iterator = _createForOfIteratorHelper(encLog); _context6.prev = 5; _iterator.s(); case 7: if ((_step = _iterator.n()).done) { _context6.next = 25; break; } entry = _step.value; _context6.t0 = log; _context6.t1 = Object; _context6.t2 = entry; if (!entry.value) { _context6.next = 18; break; } _context6.next = 15; return this._decryptEntry(entry.value); case 15: _context6.t3 = _context6.sent; _context6.next = 19; break; case 18: _context6.t3 = null; case 19: _context6.t4 = _context6.t3; _context6.t5 = { value: _context6.t4 }; _context6.t6 = _context6.t1.assign.call(_context6.t1, _context6.t2, _context6.t5); _context6.t0.push.call(_context6.t0, _context6.t6); case 23: _context6.next = 7; break; case 25: _context6.next = 30; break; case 27: _context6.prev = 27; _context6.t7 = _context6["catch"](5); _iterator.e(_context6.t7); case 30: _context6.prev = 30; _iterator.f(); return _context6.finish(30); case 33: return _context6.abrupt("return", log); case 34: case "end": return _context6.stop(); } } }, _callee6, this, [[5, 27, 30, 33]]); })); function log() { return _log.apply(this, arguments); } return log; }() }, { key: "_encryptEntry", value: function () { var _encryptEntry2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(entry) { return _regenerator["default"].wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: if (!(typeof entry === 'undefined')) { _context7.next = 2; break; } throw new Error('Entry to encrypt cannot be undefined'); case 2: return _context7.abrupt("return", this._3id.encrypt(JSON.stringify(entry))); case 3: case "end": return _context7.stop(); } } }, _callee7, this); })); function _encryptEntry(_x8) { return _encryptEntry2.apply(this, arguments); } return _encryptEntry; }() }, { key: "_decryptEntry", value: function () { var _decryptEntry2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(encObj) { return _regenerator["default"].wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: _context8.t0 = JSON; _context8.next = 3; return this._3id.decrypt(encObj); case 3: _context8.t1 = _context8.sent; return _context8.abrupt("return", _context8.t0.parse.call(_context8.t0, _context8.t1)); case 5: case "end": return _context8.stop(); } } }, _callee8, this); })); function _decryptEntry(_x9) { return _decryptEntry2.apply(this, arguments); } return _decryptEntry; }() }]); return PrivateStore; }(KeyValueStore); module.exports = PrivateStore;