orbit-db
Version:
Distributed p2p database on IPFS
106 lines (74 loc) • 3.37 kB
JavaScript
'use strict';
var _from = require('babel-runtime/core-js/array/from');
var _from2 = _interopRequireDefault(_from);
var _set = require('babel-runtime/core-js/set');
var _set2 = _interopRequireDefault(_set);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var path = require('path');
var AccessController = require('./access-controller');
var OrbitDBAccessController = function (_AccessController) {
(0, _inherits3.default)(OrbitDBAccessController, _AccessController);
function OrbitDBAccessController(orbitdb) {
(0, _classCallCheck3.default)(this, OrbitDBAccessController);
var _this = (0, _possibleConstructorReturn3.default)(this, (OrbitDBAccessController.__proto__ || (0, _getPrototypeOf2.default)(OrbitDBAccessController)).call(this));
_this._orbitdb = orbitdb;
_this._db = null;
return _this;
}
(0, _createClass3.default)(OrbitDBAccessController, [{
key: 'load',
value: async function load(address) {
var addr = path.join(address, '/_access'
// Create a key-value database that the creator can write to
);this._db = await this._orbitdb.keyvalue(addr, {
write: [this._orbitdb.key.getPublic('hex')],
replicate: false // TODO: remove
}
// Get values from the database
);this._access = {
admin: this._db.get('admin') || [],
read: this._db.get('read') || [],
write: this._db.get('write') || []
};
}
}, {
key: 'save',
value: async function save() {
if (!this._db) {
this._db = await this._orbitdb.keyvalue(addr, {
write: [this._orbitdb.key.getPublic('hex')],
replicate: false // TODO: remove
});
}
return _promise2.default.resolve(this._db.address.toString());
}
/* Public Methods */
}, {
key: 'add',
value: async function add(accessLevel, key) {
if (!(0, _keys2.default)(this._access).includes(accessLevel)) throw new Error('Unknown access level: ' + accessLevel);
if (!this._access[accessLevel].includes(key)) {
var accessKeys = new _set2.default(this._db.get(accessLevel));
accessKeys.add(key);
await this._db.put(accessLevel, (0, _from2.default)(accessKeys));
this._access[accessLevel] = this._db.get(accessLevel);
}
}
}]);
return OrbitDBAccessController;
}(AccessController);
module.exports = OrbitDBAccessController;