/** * @module AccessControllers * @description * Provides a system for managing access controllers. Supported access * controllers can be added and removed from the access controller list, and * can load the associated module if they are supported. */ import IPFSAccessController from './ipfs.js' import OrbitDBAccessController from './orbitdb.js' const accessControllers = {} /** * Gets an access controller module specified by type. * @param {string} type A valid access controller type. * @return {AccessController} The access controller module. * @private */ const getAccessController = (type) => { if (!accessControllers[type]) { throw new Error(`AccessController type '${type}' is not supported`) } return accessControllers[type] } /** * Adds an access controller module to the list of supported access controller. * @param {AccessController} accessController A compatible access controller * module. * @throws AccessController does not contain required field \'type\'. * @throws AccessController '${accessController.type}' already added. * @static */ const useAccessController = (accessController) => { if (!accessController.type) { throw new Error('AccessController does not contain required field \'type\'.') } accessControllers[accessController.type] = accessController } useAccessController(IPFSAccessController) useAccessController(OrbitDBAccessController) export { getAccessController, useAccessController, IPFSAccessController, OrbitDBAccessController }