// Copyright 2017-2021 @polkadot/api-derive authors & contributors // SPDX-License-Identifier: Apache-2.0 import type { ApiInterfaceRx } from '@polkadot/api/types'; import type { Observable } from '@polkadot/x-rxjs'; import type { DeriveSessionInfo } from '../types'; import { map } from '@polkadot/x-rxjs/operators'; import { memo } from '../util'; /** * @description Retrieves all the session and era query and calculates specific values on it as the length of the session and eras */ export function info (instanceId: string, api: ApiInterfaceRx): () => Observable { return memo(instanceId, (): Observable => api.derive.session.indexes().pipe( map((indexes) => { const sessionLength = api.consts?.babe?.epochDuration || api.registry.createType('u64', 1); const sessionsPerEra = api.consts?.staking?.sessionsPerEra || api.registry.createType('SessionIndex', 1); return { ...indexes, eraLength: api.registry.createType('BlockNumber', sessionsPerEra.mul(sessionLength)), isEpoch: !!api.query.babe, sessionLength, sessionsPerEra }; }) ) ); }