charms-js
Version:
TypeScript SDK for decoding Bitcoin transactions containing Charms data
49 lines (48 loc) • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCharmInstances = createCharmInstances;
const utils_1 = require("./utils");
// Converts parsed charm data to CharmInstance array with UTXO details
function createCharmInstances(charmInfo, txId) {
try {
if (!charmInfo || 'error' in charmInfo) {
return { error: charmInfo?.error || 'Invalid charm information' };
}
const result = [];
charmInfo.outs.forEach((output, outputIndex) => {
if (!output.charms)
return;
Object.keys(output.charms).forEach(appId => {
const charmData = output.charms[appId];
const charmInstance = {
utxo: {
tx: txId,
index: outputIndex
},
address: output.address || 'unknown',
appId: appId,
app: charmInfo.apps[appId] || null,
appType: charmInfo.apps[appId] ? (0, utils_1.getAppType)(charmInfo.apps[appId]) : undefined,
verified: charmInfo.verified
};
// Process charm data (numeric or object)
if (typeof charmData === 'number') {
charmInstance.value = charmData;
}
else if (typeof charmData === 'object' && charmData !== null) {
// Copy all fields dynamically using spread
Object.assign(charmInstance, charmData);
// Set default custom field if not present
if (!charmInstance.custom) {
charmInstance.custom = {};
}
}
result.push(charmInstance);
});
});
return result;
}
catch (error) {
return { error: `Failed to create charm instances: ${error.message}` };
}
}