UNPKG

@gear-js/api

Version:

A JavaScript library that provides functionality to connect GEAR Component APIs.

70 lines (67 loc) 2.24 kB
import { isHex, hexToU8a, isU8a } from '@polkadot/util'; import { GearMetadata } from '../metadata/metadata.js'; import { CreateType } from '../metadata/create-type.js'; import '@polkadot/types'; import 'assert'; import '../metadata/programMetadata.js'; import { isProgramMeta } from '../metadata/is.js'; function getRegistry(metaOrHexRegistry) { if (!metaOrHexRegistry) { return undefined; } if (isHex(metaOrHexRegistry)) { return metaOrHexRegistry; } } function encodePayload(payload, hexRegistryOrMeta, type, typeIndexOrPayloadType) { if (payload === undefined) { return []; } if (isHex(payload)) { return Array.from(hexToU8a(payload)); } if (isU8a(payload)) { return Array.from(payload); } const [reg, meta] = isProgramMeta(hexRegistryOrMeta) ? [undefined, hexRegistryOrMeta] : [hexRegistryOrMeta, undefined]; const [typeIndex, payloadType] = typeof typeIndexOrPayloadType === 'number' ? [typeIndexOrPayloadType, undefined] : [undefined, typeIndexOrPayloadType]; let result; if (meta) { if (typeIndex || typeIndex === 0) { result = meta.createType(typeIndex, payload); } else if (payloadType) { const index = meta.getTypeIndexByName(payloadType); if (index === null) { result = CreateType.create(payloadType, payload); } else { result = meta.createType(meta.getTypeIndexByName(payloadType), payload); } } else { const withType = type === 'reply' ? meta.types[type] : meta.types[type].input; result = meta.createType(withType, payload); } } else if (reg) { if (typeIndex || typeIndex === 0) { result = new GearMetadata(reg).createType(typeIndex, payload); } else { result = CreateType.create(payloadType, payload, reg); } } else if (payloadType) { result = CreateType.create(payloadType, payload); } else { result = CreateType.create('Bytes', payload); } return Array.from(result.toU8a()); } export { encodePayload, getRegistry };