lisk-framework
Version:
Lisk blockchain application platform
90 lines • 3.28 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.BasePlugin = exports.validatePluginSpec = exports.getPluginExportPath = void 0;
const path_1 = require("path");
const lisk_validator_1 = require("@liskhq/lisk-validator");
const lisk_api_client_1 = require("@liskhq/lisk-api-client");
const lisk_utils_1 = require("@liskhq/lisk-utils");
const system_dirs_1 = require("../system_dirs");
const errors_1 = require("../errors");
const getPluginExportPath = (pluginInstance) => {
let plugin;
if (!pluginInstance.nodeModulePath) {
return undefined;
}
try {
plugin = require(pluginInstance.nodeModulePath);
}
catch (error) {
}
if (!(plugin === null || plugin === void 0 ? void 0 : plugin[pluginInstance.constructor.name])) {
return undefined;
}
const Klass = plugin[pluginInstance.constructor.name];
if (typeof Klass !== 'function' || Klass.name !== pluginInstance.constructor.name) {
return undefined;
}
if (!(pluginInstance instanceof Klass)) {
return undefined;
}
return pluginInstance.nodeModulePath;
};
exports.getPluginExportPath = getPluginExportPath;
const validatePluginSpec = (pluginInstance) => {
if (!pluginInstance.name) {
throw new errors_1.ImplementationMissingError('Plugin "name" is required.');
}
if (!pluginInstance.load) {
throw new errors_1.ImplementationMissingError('Plugin "load" interface is required.');
}
if (!pluginInstance.unload) {
throw new errors_1.ImplementationMissingError('Plugin "unload" interface is required.');
}
if (pluginInstance.configSchema) {
lisk_validator_1.validator.validateSchema(pluginInstance.configSchema);
}
};
exports.validatePluginSpec = validatePluginSpec;
class BasePlugin {
get name() {
const name = this.constructor.name.replace('Plugin', '');
return name.charAt(0).toLowerCase() + name.substr(1);
}
get config() {
return this._config;
}
get appConfig() {
return this._appConfig;
}
get dataPath() {
const dirs = (0, system_dirs_1.systemDirs)(this.appConfig.system.dataPath);
return (0, path_1.join)(dirs.plugins, this.name, 'data');
}
get events() {
return [];
}
get apiClient() {
if (!this._apiClient) {
throw new Error('RPC with IPC protocol must be enabled to use MethodClient.');
}
return this._apiClient;
}
async init(context) {
var _a;
this.logger = context.logger;
if (this.configSchema) {
this._config = lisk_utils_1.objects.mergeDeep({}, (_a = this.configSchema.default) !== null && _a !== void 0 ? _a : {}, context.config);
lisk_validator_1.validator.validate(this.configSchema, this.config);
}
else {
this._config = {};
}
this._appConfig = context.appConfig;
if (this._appConfig.rpc.modes.includes('ipc')) {
const dirs = (0, system_dirs_1.systemDirs)(this.appConfig.system.dataPath);
this._apiClient = await (0, lisk_api_client_1.createIPCClient)(dirs.dataPath);
}
}
}
exports.BasePlugin = BasePlugin;
//# sourceMappingURL=base_plugin.js.map
;