diff --git a/packages/typegen/src/fromChain.ts b/packages/typegen/src/fromChain.ts index 33b577f600..86e4aa413e 100644 --- a/packages/typegen/src/fromChain.ts +++ b/packages/typegen/src/fromChain.ts @@ -3,11 +3,12 @@ import type { HexString } from '@polkadot/util/types'; +import fs from 'fs'; import path from 'path'; import yargs from 'yargs'; import { Definitions, DefinitionsTypes } from '@polkadot/types/types'; -import { formatNumber } from '@polkadot/util'; +import { formatNumber, isHex } from '@polkadot/util'; import { generateDefaultConsts, generateDefaultErrors, generateDefaultEvents, generateDefaultQuery, generateDefaultRpc, generateDefaultRuntime, generateDefaultTx } from './generate'; import { assertDir, assertFile, getMetadataViaWs, HEADER, writeFile } from './util'; @@ -96,10 +97,15 @@ async function mainPromise (): Promise { if (endpoint.startsWith('wss://') || endpoint.startsWith('ws://')) { metadata = await getMetadataViaWs(endpoint); } else { - const metaPath = assertFile(path.join(process.cwd(), endpoint)); - const metaCont = await import(metaPath) as { result: HexString }; + metadata = ( + JSON.parse( + fs.readFileSync(assertFile(path.join(process.cwd(), endpoint)), 'utf-8') + ) as { result: HexString } + ).result; - metadata = metaCont.result; + if (!isHex(metadata)) { + throw new Error('Invalid metadata file'); + } } await generate(metadata, pkg, output, isStrict); diff --git a/packages/typegen/src/fromDefs.ts b/packages/typegen/src/fromDefs.ts index 8255d987d8..94317264af 100644 --- a/packages/typegen/src/fromDefs.ts +++ b/packages/typegen/src/fromDefs.ts @@ -3,10 +3,12 @@ import type { HexString } from '@polkadot/util/types'; +import fs from 'fs'; import path from 'path'; import yargs from 'yargs'; import * as substrateDefs from '@polkadot/types/interfaces/definitions'; +import { isHex } from '@polkadot/util'; import { generateInterfaceTypes } from './generate/interfaceRegistry'; import { generateTsDef } from './generate/tsDef'; @@ -37,9 +39,9 @@ async function mainPromise (): Promise { let userDefs: Record = {}; try { - const defPath = assertFile(path.join(inputPath, 'definitions.ts')); - - userDefs = await import(defPath) as Record; + userDefs = await import( + assertFile(path.join(inputPath, 'definitions.ts')) + ) as Record; } catch (error) { console.error('ERROR: Unable to load user definitions:', (error as Error).message); } @@ -76,10 +78,15 @@ async function mainPromise (): Promise { if (endpoint.startsWith('wss://') || endpoint.startsWith('ws://')) { metadata = await getMetadataViaWs(endpoint); } else { - const metaPath = assertFile(path.join(process.cwd(), endpoint)); - const metaCont = await import(metaPath) as { result: HexString }; + metadata = ( + JSON.parse( + fs.readFileSync(assertFile(path.join(process.cwd(), endpoint)), 'utf-8') + ) as { result: HexString } + ).result; - metadata = metaCont.result; + if (!isHex(metadata)) { + throw new Error('Invalid metadata file'); + } } generateDefaultLookup(inputPath, metadata);