@@ -18,13 +18,31 @@ import { ApiPromise } from '@polkadot/api';
1818import { ApiDecoration } from '@polkadot/api/types' ;
1919import type { BlockHash } from '@polkadot/types/interfaces' ;
2020import { u8aToHex } from '@polkadot/util' ;
21- import { merkleizeMetadata } from '@polkadot-api/merkleize-metadata' ;
2221import { BadRequest , InternalServerError } from 'http-errors' ;
2322import { ITransactionMetadataBlob } from 'src/types/responses' ;
2423
2524import { MetadataBlobParams } from '../../controllers/transaction/TransactionMetadataBlobController' ;
2625import { AbstractService } from '../AbstractService' ;
2726
27+ // Dynamic import helper that TypeScript won't transform to require()
28+ // This is necessary because @polkadot -api/merkleize-metadata is an ESM-only package
29+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
30+ const dynamicImport = new Function ( 'specifier' , 'return import(specifier)' ) as < T > ( specifier : string ) => Promise < T > ;
31+
32+ // Cached module after first load
33+ let merkleizeMetadataModule : typeof import ( '@polkadot-api/merkleize-metadata' ) | null = null ;
34+
35+ async function getMerkleizeMetadata ( ) : Promise <
36+ ( typeof import ( '@polkadot-api/merkleize-metadata' ) ) [ 'merkleizeMetadata' ]
37+ > {
38+ if ( ! merkleizeMetadataModule ) {
39+ merkleizeMetadataModule = await dynamicImport < typeof import ( '@polkadot-api/merkleize-metadata' ) > (
40+ '@polkadot-api/merkleize-metadata' ,
41+ ) ;
42+ }
43+ return merkleizeMetadataModule . merkleizeMetadata ;
44+ }
45+
2846export class TransactionMetadataBlobService extends AbstractService {
2947 /**
3048 * Fetch metadata blob (proof) for a given transaction.
@@ -87,6 +105,8 @@ export class TransactionMetadataBlobService extends AbstractService {
87105
88106 const base58Prefix = ss58Format ?. toNumber ( ) ?? 42 ;
89107
108+ // Use dynamic import for ESM module compatibility
109+ const merkleizeMetadata = await getMerkleizeMetadata ( ) ;
90110 const merkleized = merkleizeMetadata ( metadataV15Raw , {
91111 decimals,
92112 tokenSymbol,
0 commit comments