mirror of
https://github.com/orbitdb/orbitdb.git
synced 2025-06-01 03:36:38 +00:00
51 lines
1.5 KiB
JavaScript
51 lines
1.5 KiB
JavaScript
/**
|
|
* @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
|
|
}
|