3box
Version:
Interact with user data
431 lines (345 loc) • 16.6 kB
JavaScript
"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;