@gear-js/api
Version:
A JavaScript library that provides functionality to connect GEAR Component APIs.
73 lines (69 loc) • 2.34 kB
JavaScript
;
var util = require('@polkadot/util');
var metadata = require('../metadata/metadata.js');
var createType = require('../metadata/create-type.js');
require('@polkadot/types');
require('assert');
require('../metadata/programMetadata.js');
var is = require('../metadata/is.js');
function getRegistry(metaOrHexRegistry) {
if (!metaOrHexRegistry) {
return undefined;
}
if (util.isHex(metaOrHexRegistry)) {
return metaOrHexRegistry;
}
}
function encodePayload(payload, hexRegistryOrMeta, type, typeIndexOrPayloadType) {
if (payload === undefined) {
return [];
}
if (util.isHex(payload)) {
return Array.from(util.hexToU8a(payload));
}
if (util.isU8a(payload)) {
return Array.from(payload);
}
const [reg, meta] = is.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.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 metadata.GearMetadata(reg).createType(typeIndex, payload);
}
else {
result = createType.CreateType.create(payloadType, payload, reg);
}
}
else if (payloadType) {
result = createType.CreateType.create(payloadType, payload);
}
else {
result = createType.CreateType.create('Bytes', payload);
}
return Array.from(result.toU8a());
}
exports.encodePayload = encodePayload;
exports.getRegistry = getRegistry;