@substrate/api-sidecar
Version:
REST service that makes it easy to interact with blockchain nodes built using Substrate's FRAME framework.
175 lines • 8.87 kB
JavaScript
"use strict";
// Copyright 2017-2025 Parity Technologies (UK) Ltd.
// This file is part of Substrate API Sidecar.
//
// Substrate API Sidecar is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
Object.defineProperty(exports, "__esModule", { value: true });
exports.getControllers = exports.getControllersByPallets = exports.assetHubToBabe = exports.assetHubSpecNames = exports.specToControllerMap = void 0;
exports.getControllersForSpec = getControllersForSpec;
const util_1 = require("@polkadot/util");
const apiRegistry_1 = require("../apiRegistry");
const controllers_1 = require("../controllers");
const acalaControllers_1 = require("./acalaControllers");
const assetHubKusamaControllers_1 = require("./assetHubKusamaControllers");
const assetHubNextWestendControllers_1 = require("./assetHubNextWestendControllers");
const assetHubPolkadotControllers_1 = require("./assetHubPolkadotControllers");
const assetHubWestendControllers_1 = require("./assetHubWestendControllers");
const astarControllers_1 = require("./astarControllers");
const bifrostControllers_1 = require("./bifrostControllers");
const bifrostPolkadotControllers_1 = require("./bifrostPolkadotControllers");
const calamariControllers_1 = require("./calamariControllers");
const coretimeControllers_1 = require("./coretimeControllers");
const crustControllers_1 = require("./crustControllers");
const defaultControllers_1 = require("./defaultControllers");
const dockMainnetControllers_1 = require("./dockMainnetControllers");
const dockPoSMainnetControllers_1 = require("./dockPoSMainnetControllers");
const dockPoSTestnetControllers_1 = require("./dockPoSTestnetControllers");
const heikoControllers_1 = require("./heikoControllers");
const karuraControllers_1 = require("./karuraControllers");
const kiltControllers_1 = require("./kiltControllers");
const kulupuControllers_1 = require("./kulupuControllers");
const kusamaControllers_1 = require("./kusamaControllers");
const mandalaControllers_1 = require("./mandalaControllers");
const mantaControllers_1 = require("./mantaControllers");
const parallelControllers_1 = require("./parallelControllers");
const polkadotControllers_1 = require("./polkadotControllers");
const polymeshControllers_1 = require("./polymeshControllers");
const shidenControllers_1 = require("./shidenControllers");
const soraControllers_1 = require("./soraControllers");
const westendControllers_1 = require("./westendControllers");
exports.specToControllerMap = {
westend: westendControllers_1.westendControllers,
polkadot: polkadotControllers_1.polkadotControllers,
polymesh_mainnet: polymeshControllers_1.polymeshControllers,
polymesh_testnet: polymeshControllers_1.polymeshControllers,
kusama: kusamaControllers_1.kusamaControllers,
kulupu: kulupuControllers_1.kulupuControllers,
kilt: kiltControllers_1.kiltControllers,
mandala: mandalaControllers_1.mandalaControllers,
'dock-main-runtime': dockMainnetControllers_1.dockMainnetControllers,
'dock-pos-main-runtime': dockPoSMainnetControllers_1.dockPoSMainnetControllers,
'dock-pos-test-runtime': dockPoSTestnetControllers_1.dockTestnetControllers,
'asset-hub-kusama': assetHubKusamaControllers_1.assetHubKusamaControllers,
'asset-hub-polkadot': assetHubPolkadotControllers_1.assetHubPolkadotControllers,
statemine: assetHubKusamaControllers_1.assetHubKusamaControllers,
statemint: assetHubPolkadotControllers_1.assetHubPolkadotControllers,
westmine: assetHubKusamaControllers_1.assetHubKusamaControllers,
'asset-hub-westend': assetHubWestendControllers_1.assetHubWestendControllers,
'asset-hub-next': assetHubNextWestendControllers_1.assetHubNextWestendControllers,
westmint: assetHubWestendControllers_1.assetHubWestendControllers,
shiden: shidenControllers_1.shidenControllers,
astar: astarControllers_1.astarControllers,
sora: soraControllers_1.soraControllers,
calamari: calamariControllers_1.calamariControllers,
karura: karuraControllers_1.karuraControllers,
acala: acalaControllers_1.acalaControllers,
manta: mantaControllers_1.mantaControllers,
crust: crustControllers_1.crustControllers,
bifrost: bifrostControllers_1.bifrostControllers,
bifrost_polkadot: bifrostPolkadotControllers_1.bifrostPolkadotControllers,
heiko: heikoControllers_1.heikoControllers,
parallel: parallelControllers_1.parallelControllers,
'coretime-westend': coretimeControllers_1.coretimeControllers,
'coretime-polkadot': coretimeControllers_1.coretimeControllers,
'coretime-kusama': coretimeControllers_1.coretimeControllers,
};
exports.assetHubSpecNames = new Set(['statemine', 'statemint', 'westmint', 'asset-hub-paseo']);
exports.assetHubToBabe = {
statemint: {
epochDuration: new util_1.BN(2400),
genesisSlot: new util_1.BN(265084563),
slotDurationMs: new util_1.BN(6000),
},
statemine: {
epochDuration: new util_1.BN(600),
genesisSlot: new util_1.BN(262493679),
slotDurationMs: new util_1.BN(6000),
},
westmint: {
epochDuration: new util_1.BN(600),
genesisSlot: new util_1.BN(264379767),
slotDurationMs: new util_1.BN(6000),
},
'asset-hub-paseo': {
epochDuration: new util_1.BN(600),
genesisSlot: new util_1.BN(284730328),
slotDurationMs: new util_1.BN(6000),
},
};
/**
* Return an array of instantiated controller instances based off of a `specName`.
*
* @param api ApiPromise to inject into controllers
* @param specName spacName of the chain to get controllers and options for
*/
function getControllersForSpec(specName, withRC) {
if (exports.specToControllerMap[specName]) {
return getControllersFromConfig(specName, exports.specToControllerMap[specName], withRC);
}
// If we don't have the specName in the specToControllerMap we use the default
// contoller config
return getControllersFromConfig(specName, defaultControllers_1.defaultControllers, false);
}
/**
* Return an array of instantiated controller instances based off of a
* `ControllerConfig`.
*
* @param api ApiPromise to inject into controllers
* @param config controller mount configuration object
*/
function getControllersFromConfig(specName, config, withRc) {
const controllersToInclude = config.controllers;
return controllersToInclude.reduce((acc, controller) => {
if (controller.toString().toLowerCase().includes('rc') && !withRc) {
return acc;
}
else {
acc.push(new controllers_1.controllers[controller](specName, config.options));
}
return acc;
}, []);
}
/**
* Return an array of instantiated controller instances based off of a `specName`.
* @param pallets pallets available to define controllers
* @param api ApiPromise to inject into controllers
* @param specName specName of chain to get options
*/
const getControllersByPallets = (specName, pallets) => {
var _a;
const controllersSet = [];
const config = ((_a = exports.specToControllerMap === null || exports.specToControllerMap === void 0 ? void 0 : exports.specToControllerMap[specName]) === null || _a === void 0 ? void 0 : _a.options) || (defaultControllers_1.defaultControllers === null || defaultControllers_1.defaultControllers === void 0 ? void 0 : defaultControllers_1.defaultControllers.options);
Object.values(controllers_1.controllers).forEach((controller) => {
if (controller.canInjectByPallets(pallets)) {
controllersSet.push(new controller(specName, config));
}
});
return controllersSet;
};
exports.getControllersByPallets = getControllersByPallets;
const getControllers = (config, specName, pallets) => {
if (!specName || !specName.length) {
throw new Error('specName is required');
}
if (config.EXPRESS.INJECTED_CONTROLLERS) {
return (0, exports.getControllersByPallets)(specName, pallets);
}
else {
// filter by rc situtation
const hasRelayConnection = !!apiRegistry_1.ApiPromiseRegistry.getApiByType('relay')[0];
return getControllersForSpec(specName, hasRelayConnection && exports.assetHubSpecNames.has(specName));
}
};
exports.getControllers = getControllers;
//# sourceMappingURL=index.js.map