Code:function transform(input) {
var traders = input.traders;
var positionSets = [input.p0, input.p1, input.p2, input.p3, input.p4];
var now = new Date();
var allPositions = [];
for (var t = 0; t < positionSets.length; t++) {
var trader = traders['t' + t];
if (!trader) continue;
var positions = positionSets[t] || [];
for (var p = 0; p < positions.length; p++) {
var pos = positions[p];
if (!pos.currentValue || pos.currentValue < 100) continue;
if (pos.redeemable) continue;
if (pos.currentPrice <= 0) continue;
if (pos.endDate) {
var end = new Date(pos.endDate + 'T23:59:59Z');
if (end < now) continue;
}
allPositions.push({
tn: trader.name, tr: trader.rank, tp: trader.pnl,
title: pos.title || '', outcome: pos.outcome || '',
size: pos.size || 0, cv: pos.currentValue || 0,
cid: pos.conditionId || '', slug: pos.eventSlug || pos.slug || '',
cp: pos.currentPrice || 0,
asset: pos.asset || ''
});
}
}
var groups = {};
for (var i = 0; i < allPositions.length; i++) {
var ap = allPositions[i];
var key = (ap.cid || ap.title) + ':' + ap.outcome;
if (!groups[key]) {
groups[key] = { title: ap.title, outcome: ap.outcome, slug: ap.slug, traders: [], totalValue: 0, tokenId: ap.asset, cid: ap.cid };
}
if (!groups[key].tokenId && ap.asset) groups[key].tokenId = ap.asset;
var isDupe = false;
for (var d = 0; d < groups[key].traders.length; d++) {
if (groups[key].traders[d].name === ap.tn) { isDupe = true; break; }
}
if (!isDupe) {
groups[key].traders.push({ name: ap.tn, rank: ap.tr, pnl: ap.tp, value: ap.cv, size: ap.size });
groups[key].totalValue += ap.cv || 0;
}
}
var consensus = [];
for (var k in groups) {
if (groups[k].traders.length >= 3 && groups[k].tokenId) {
consensus.push(groups[k]);
}
}
if (consensus.length === 0) return { hasConsensus: false, bets: [], count: 0, message: 'No consensus found' };
consensus.sort(function(a, b) { return b.traders.length - a.traders.length; });
var bets = [];
function fmt(n) {
if (!n && n !== 0) return '0';
var neg = n < 0;
var s = String(Math.round(Math.abs(n)));
var r = '';
for (var i = s.length - 1, c = 0; i >= 0; i--, c++) {
if (c > 0 && c % 3 === 0) r = ',' + r;
r = s[i] + r;
}
return neg ? '-$' + r : '$' + r;
}
var msg = '*SMART MONEY APE*\n_$100 on each consensus market_\n\n';
var limit = Math.min(consensus.length, 5);
for (var c = 0; c < limit; c++) {
var g = consensus[c];
bets.push({ tokenId: g.tokenId, title: g.title, outcome: g.outcome, traderCount: g.traders.length, totalValue: g.totalValue });
msg += '*' + g.title + '* | ' + g.outcome + ' | ' + g.traders.length + '/5 agree | ' + fmt(g.totalValue) + '\n';
}
msg += '\nTotal bets: ' + bets.length + ' x $100 = $' + (bets.length * 100);
return { hasConsensus: true, bets: bets, count: bets.length, message: msg };
}
Input:{"p0":"{{pos_0.result.positions}}","p1":"{{pos_1.result.positions}}","p2":"{{pos_2.result.positions}}","p3":"{{pos_3.result.positions}}","p4":"{{pos_4.result.positions}}","traders":"{{prep.result.output}}"}