|
|
const express = require("express"); |
|
|
const router = require("express").Router(); |
|
|
const crypto = require("crypto"); |
|
|
const StrikeHistory = require("../models/StrikeHistory"); |
|
|
|
|
|
const sha256 = (payload) => |
|
|
crypto.createHash("sha256").update(JSON.stringify(payload)).digest("hex"); |
|
|
|
|
|
router.get("/verify/:strikeId", async (req, res) => { |
|
|
try { |
|
|
const strike = await StrikeHistory.findById(req.params.strikeId); |
|
|
if (!strike) return res.status(404).json({ valid: false }); |
|
|
|
|
|
const recomputed = sha256(strike.audit_payload); |
|
|
|
|
|
res.json({ |
|
|
valid: recomputed === strike.audit_hash, |
|
|
audit_hash: strike.audit_hash, |
|
|
recomputed_hash: recomputed, |
|
|
strike, |
|
|
}); |
|
|
} catch (err) { |
|
|
res.status(500).json({ valid: false }); |
|
|
} |
|
|
}); |
|
|
|
|
|
|
|
|
router.get("/status", async (req, res) => { |
|
|
try { |
|
|
const start = new Date(); |
|
|
start.setHours(0, 0, 0, 0); |
|
|
|
|
|
const end = new Date(); |
|
|
end.setHours(23, 59, 59, 999); |
|
|
|
|
|
|
|
|
const strike = await StrikeHistory.findOne({ |
|
|
date: { $gte: start, $lte: end }, |
|
|
}).populate("winners.user_id", "name email"); |
|
|
|
|
|
|
|
|
if (global.isStrikeRunning) { |
|
|
return res.json({ |
|
|
status: "RUNNING", |
|
|
live: global.liveStrikeData || null, |
|
|
}); |
|
|
} |
|
|
|
|
|
|
|
|
if (!strike) { |
|
|
return res.json({ |
|
|
status: "IDLE", |
|
|
}); |
|
|
} |
|
|
|
|
|
|
|
|
strike_completed_json = { |
|
|
status: "COMPLETED", |
|
|
date: strike.date, |
|
|
result: { |
|
|
target_price: strike.target_price, |
|
|
winning_digits: strike.winning_digits, |
|
|
total_pool: strike.total_pool, |
|
|
audit_hash: strike.audit_hash, |
|
|
audit_payload: strike.audit_payload, |
|
|
winners: strike.winners |
|
|
.sort((a, b) => a.rank - b.rank) |
|
|
.slice(0, 3) |
|
|
.map((w) => ({ |
|
|
name: w.user_id?.name || "Anonymous", |
|
|
tier: w.tier, |
|
|
amount: w.amount, |
|
|
rank: w.rank, |
|
|
kus_id: w.kus_id, |
|
|
})), |
|
|
}, |
|
|
}; |
|
|
|
|
|
return res.json(strike_completed_json); |
|
|
|
|
|
console.log("Strike Result:", strike_completed_json); |
|
|
} catch (err) { |
|
|
console.error("Strike Status Error:", err); |
|
|
res.status(500).json({ |
|
|
status: "ERROR", |
|
|
message: "Failed to fetch strike status", |
|
|
}); |
|
|
} |
|
|
}); |
|
|
|
|
|
module.exports = router; |
|
|
|