Code:function transform(input) {
const { markets, positions, maxNoPrice, horizonDays } = input;
const maxPrice = parseFloat(maxNoPrice);
const horizon = parseInt(horizonDays, 10);
const held = new Set((positions || []).map(p => p.conditionId));
const excluded = [
'sports','nfl','nba','mlb','nhl','mls','wnba','ncaa','ncaaf','ncaab',
'premier league','la liga','serie a','bundesliga','ligue 1','eredivisie',
'champions league','europa league','uefa','fifa','copa','a-league','j-league',
'f1','formula 1','nascar','indycar','motogp','pga','lpga','golf',
'ufc','mma','boxing','tennis','cricket','rugby','nrl','afl',
' vs ',' vs.',' fc ',' fc.','football','soccer','baseball','basketball','hockey',
'bitcoin','btc','ethereum','eth','crypto','solana','sol','xrp','ripple',
'cardano','ada','dogecoin','doge','pepe','shib','shiba','wif','bonk','floki',
'bnb','binance coin','avalanche','avax','chainlink','link','polygon','matic',
'polkadot','dot','litecoin','ltc','tron','trx','near','atom','cosmos',
'arbitrum','arb','optimism','op','sui','aptos','apt','ton','toncoin',
'memecoin','meme coin','altcoin','stablecoin','usdc','usdt','tether','dai',
'nft','defi','token','blockchain','airdrop','etf','spot etf',
'stock','stocks','forex','fed rate','interest rate','treasury yield',
'sp500','s&p','nasdaq','dow jones','russell',
'nothing ever happens'
];
return (markets || []).filter(m => {
if (!m.outcomes || m.outcomes.length !== 2) return false;
const outcomes = m.outcomes.map(o => o.toLowerCase());
if (!outcomes.includes('yes') || !outcomes.includes('no')) return false;
if (m.negRisk) return false;
if (!m.active || m.closed) return false;
if (m.enableOrderBook === false) return false;
if (m.acceptingOrders === false) return false;
const end = new Date(m.endDate);
const horizonDate = new Date(Date.now() + horizon * 24 * 60 * 60 * 1000);
if (end > horizonDate) return false;
const q = (m.question || '').toLowerCase();
if (excluded.some(kw => q.includes(kw))) return false;
if (held.has(m.conditionId)) return false;
const noIdx = outcomes.indexOf('no');
const noPrice = parseFloat(m.outcomePrices[noIdx]);
if (!isFinite(noPrice) || noPrice > maxPrice || noPrice <= 0) return false;
return true;
}).map(m => {
const noIdx = m.outcomes.map(o => o.toLowerCase()).indexOf('no');
return {
tokenId: m.tokenIds[noIdx],
question: m.question,
noPrice: parseFloat(m.outcomePrices[noIdx]),
conditionId: m.conditionId
};
});
}
Input:{"horizonDays":"{{$props.horizon_days}}","markets":"{{search_markets.result.markets}}","maxNoPrice":"{{$props.max_no_price}}","positions":"{{get_positions.result.positions}}"}