@blockv/sdk
Version:
Allows web apps to display and interact with vatoms.
81 lines (60 loc) • 2.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
/**
* This is Version 2 of the Mempool. This version supports region monitoring, as well as timed updates.
* Once this class is generic enough and the Data Pool Protocol is implemented, we can split this out into it's own npm module.
*
* This aims to follow what is described in https://github.com/BLOCKvIO/Data-Pool-Protocol/blob/master/Data%20Pool%20Protocol.md
*
*/
class DataPool {
constructor() {
// Region plugins
this.plugins = [require('./plugins/InventoryRegion').default, require('./plugins/VatomIDRegion').default, require('./plugins/VatomChildrenRegion').default, require('./plugins/GeoPosRegion').default]; // Currently active regions
this.regions = []; // Session information
this.sessionInfo = {};
}
/**
* Fetches or creates a vatom region.
*
* @param {string} id The plugin ID.
* @param {*} descriptor Region-specific filtering information. See plugins for more info.
*/
region(id, descriptor) {
// Find existing region
let region = this.regions.find(r => r.matches(id, descriptor));
if (region) {
return region;
} // We need to create a new region. Find region plugin
let Region = this.plugins.find(p => p.id === id);
if (!Region) {
throw new Error(`Region with ID '${id}' not found.`);
} // Create and store region
region = new Region(this, descriptor);
this.regions.push(region); // Make sure region has loaded from it's cache
region.loadFromCache(); // Return new region
return region;
}
/** Removes the specified region */
removeRegion(region) {
for (let i = 0; i < this.regions.length; i++) {
if (this.regions[i] === region) {
return this.regions.splice(i, 1);
}
}
}
/**
* Update session-specific information used by plugins.
*/
setSessionInfo(info) {
// Store it
this.sessionInfo = info; // Notify regions
for (let r of this.regions) {
r.onSessionInfoChanged(info);
}
}
}
exports.default = DataPool;