@substrate/api-sidecar
Version:
REST service that makes it easy to interact with blockchain nodes built using Substrate's FRAME framework.
126 lines • 5.18 kB
JavaScript
;
// write tests that get the metadata from an rpc and then inject the metadata into the controller
Object.defineProperty(exports, "__esModule", { value: true });
const api_1 = require("@polkadot/api");
const apiRegistry_1 = require("../apiRegistry");
const chains_config_1 = require("../chains-config");
const defaultControllers_1 = require("../chains-config/defaultControllers");
const _1 = require(".");
/**
* Return an array of instantiated controller instances based off of a `specName`.
*
* @param api ApiPromise to inject into controllers
* @param implName
*/
const mockSidecarConfig = {
EXPRESS: {
HOST: '',
PORT: 3000,
KEEP_ALIVE_TIMEOUT: 5000,
MAX_BODY: '100kb',
INJECTED_CONTROLLERS: false,
},
SUBSTRATE: {
URL: '',
MULTI_CHAIN_URL: [],
TYPES_BUNDLE: '',
TYPES_CHAIN: '',
TYPES_SPEC: '',
TYPES: '',
CACHE_CAPACITY: 1000,
},
LOG: {
LEVEL: 'info',
JSON: false,
FILTER_RPC: false,
STRIP_ANSI: false,
WRITE: false,
WRITE_PATH: '',
WRITE_MAX_FILE_SIZE: 0,
WRITE_MAX_FILES: 0,
},
METRICS: {
ENABLED: false,
PROM_HOST: '',
PROM_PORT: 0,
LOKI_HOST: '',
LOKI_PORT: 0,
INCLUDE_QUERYPARAMS: false,
},
};
const chainsToNode = {
// 'asset-hub-kusama': 'wss://asset-hub-kusama-rpc.dwellir.com',
kusama: 'wss://kusama-rpc.dwellir.com',
// 'asset-hub-westend': 'wss://asset-hub-westend-rpc.dwellir.com',
// astar: 'wss://astar-rpc.dwellir.com',
bifrost_polkadot: 'wss://bifrost-polkadot.ibp.network',
polkadot: 'wss://polkadot-rpc.dwellir.com',
'coretime-westend': 'wss://coretime-westend-rpc.dwellir.com',
'coretime-polkadot': 'wss://sys.ibp.network/coretime-polkadot',
crust: 'wss://crust-parachain.crustapps.net',
// karura: 'wss://karura-rpc.dwellir.com',
// manta: 'wss://ws.manta.systems',
kilt: 'wss://kilt.ibp.network',
// 'asset-hub-polkadot': 'wss://asset-hub-polkadot-rpc.dwellir.com',
};
describe('controllerInjection', () => {
jest.setTimeout(60000); // Increase timeout for async operations
for (const [chain, nodeUrl] of Object.entries(chainsToNode)) {
it(`should return the correct response for ${chain}`, async () => {
var _a;
const wsProvider = new api_1.WsProvider(nodeUrl);
const api = await api_1.ApiPromise.create({ provider: wsProvider });
try {
await api.isReady;
}
finally {
await (api === null || api === void 0 ? void 0 : api.disconnect()); // Close WebSocket connection
}
const metadata = api.registry.metadata.toJSON();
const pallets = metadata.pallets.map((p) => p.name).sort();
const injectedControllers = new Set();
// get controllers by pallets
Object.values(_1.controllers).forEach((controller) => {
if (controller.canInjectByPallets(pallets)) {
injectedControllers.add(controller.controllerName || controller.name);
}
});
const controllersToInclude = ((_a = chains_config_1.specToControllerMap[chain]) === null || _a === void 0 ? void 0 : _a.controllers.sort()) || defaultControllers_1.defaultControllers.controllers.sort();
const filtered = controllersToInclude.filter((c) => !injectedControllers.has(c));
expect(filtered).toHaveLength(0);
});
}
it('should inject default controllers when pallets are not checked (injected-controllers: false) and a custom config is not available', async () => {
const wsProvider = new api_1.WsProvider('wss://kusama-rpc.dwellir.com');
const api = await api_1.ApiPromise.create({ provider: wsProvider });
jest.spyOn(apiRegistry_1.ApiPromiseRegistry, 'getSpecNameByType').mockImplementation(() => {
return new Set(['mock_spec']);
});
try {
await api.isReady;
}
finally {
await (api === null || api === void 0 ? void 0 : api.disconnect()); // Close WebSocket connection
}
const pallets = api.registry.metadata.toJSON().pallets.map((p) => p.name);
const controllers = (0, chains_config_1.getControllers)({
...mockSidecarConfig,
EXPRESS: {
...mockSidecarConfig.EXPRESS,
INJECTED_CONTROLLERS: true,
},
}, 'mock_spec', pallets);
expect(controllers).toBeDefined();
expect(controllers).not.toHaveLength(0);
const controllersDefault = (0, chains_config_1.getControllers)({
...mockSidecarConfig,
EXPRESS: {
...mockSidecarConfig.EXPRESS,
INJECTED_CONTROLLERS: false,
},
}, 'mock_spec', []);
expect(controllersDefault).toBeDefined();
expect(controllersDefault).toHaveLength(defaultControllers_1.defaultControllers.controllers.length);
});
});
//# sourceMappingURL=controllerInjection.spec.js.map