From 3c812931ea7d00c61dbf5f8b8d368c940f6e4321 Mon Sep 17 00:00:00 2001 From: Arjun Porwal <65214523+ap211unitech@users.noreply.github.com> Date: Tue, 16 Dec 2025 19:14:04 +0530 Subject: [PATCH] Improve subscriptions for observable handling (#6236) * fix: subscribeNewHeads for improved observable handling * fix: replace switchMap with mergeMap for improved subscription handling --- packages/api-derive/src/chain/subscribeFinalizedBlocks.ts | 4 ++-- packages/api-derive/src/chain/subscribeFinalizedHeads.ts | 4 ++-- packages/api-derive/src/chain/subscribeNewBlocks.ts | 4 ++-- packages/api-derive/src/chain/subscribeNewHeads.ts | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/api-derive/src/chain/subscribeFinalizedBlocks.ts b/packages/api-derive/src/chain/subscribeFinalizedBlocks.ts index 41b554ea03..7a291ab78a 100644 --- a/packages/api-derive/src/chain/subscribeFinalizedBlocks.ts +++ b/packages/api-derive/src/chain/subscribeFinalizedBlocks.ts @@ -5,7 +5,7 @@ import type { Observable } from 'rxjs'; import type { SignedBlockExtended } from '../type/types.js'; import type { DeriveApi } from '../types.js'; -import { switchMap } from 'rxjs'; +import { mergeMap } from 'rxjs'; import { memo } from '../util/index.js'; @@ -22,7 +22,7 @@ import { memo } from '../util/index.js'; export function subscribeFinalizedBlocks (instanceId: string, api: DeriveApi): () => Observable { return memo(instanceId, (): Observable => api.derive.chain.subscribeFinalizedHeads().pipe( - switchMap((header) => + mergeMap((header) => api.derive.chain.getBlock(header.createdAtHash || header.hash) ) ) diff --git a/packages/api-derive/src/chain/subscribeFinalizedHeads.ts b/packages/api-derive/src/chain/subscribeFinalizedHeads.ts index 19d93125db..15095899d1 100644 --- a/packages/api-derive/src/chain/subscribeFinalizedHeads.ts +++ b/packages/api-derive/src/chain/subscribeFinalizedHeads.ts @@ -5,7 +5,7 @@ import type { Observable } from 'rxjs'; import type { Hash, Header } from '@polkadot/types/interfaces'; import type { DeriveApi } from '../types.js'; -import { from, of, switchMap } from 'rxjs'; +import { from, mergeMap, of, switchMap } from 'rxjs'; import { memo } from '../util/index.js'; @@ -43,7 +43,7 @@ export function subscribeFinalizedHeads (instanceId: string, api: DeriveApi): () let prevHash: Hash | null = null; return api.rpc.chain.subscribeFinalizedHeads().pipe( - switchMap((header) => { + mergeMap((header) => { const endHash = prevHash; const startHash = header.parentHash; diff --git a/packages/api-derive/src/chain/subscribeNewBlocks.ts b/packages/api-derive/src/chain/subscribeNewBlocks.ts index 0994965d1f..9ebeaab86d 100644 --- a/packages/api-derive/src/chain/subscribeNewBlocks.ts +++ b/packages/api-derive/src/chain/subscribeNewBlocks.ts @@ -5,7 +5,7 @@ import type { Observable } from 'rxjs'; import type { SignedBlockExtended } from '../type/types.js'; import type { DeriveApi } from '../types.js'; -import { switchMap } from 'rxjs'; +import { mergeMap } from 'rxjs'; import { memo } from '../util/index.js'; @@ -22,7 +22,7 @@ import { memo } from '../util/index.js'; export function subscribeNewBlocks (instanceId: string, api: DeriveApi): () => Observable { return memo(instanceId, (): Observable => api.derive.chain.subscribeNewHeads().pipe( - switchMap((header) => + mergeMap((header) => api.derive.chain.getBlock(header.createdAtHash || header.hash) ) ) diff --git a/packages/api-derive/src/chain/subscribeNewHeads.ts b/packages/api-derive/src/chain/subscribeNewHeads.ts index 36061e0dfa..ca159e2308 100644 --- a/packages/api-derive/src/chain/subscribeNewHeads.ts +++ b/packages/api-derive/src/chain/subscribeNewHeads.ts @@ -5,7 +5,7 @@ import type { Observable } from 'rxjs'; import type { HeaderExtended } from '../type/types.js'; import type { DeriveApi } from '../types.js'; -import { map, switchMap } from 'rxjs'; +import { map, mergeMap } from 'rxjs'; import { createHeaderExtended } from '../type/index.js'; import { memo } from '../util/index.js'; @@ -25,7 +25,7 @@ import { getAuthorDetails } from './util.js'; export function subscribeNewHeads (instanceId: string, api: DeriveApi): () => Observable { return memo(instanceId, (): Observable => api.rpc.chain.subscribeNewHeads().pipe( - switchMap((header) => + mergeMap((header) => getAuthorDetails(api, header) ), map(([header, validators, author]): HeaderExtended => {