// For Manual routes (using transaction hash)
// Terminal states: 3 = FULFILLED, 4 = SETTLED (success), 5 = EXPIRED, 6 = CANCELLED, 7 = REFUNDED (failure)
const TERMINAL_SUCCESS = [3, 4];
const TERMINAL_FAILURE = [5, 6, 7];
const TERMINAL_STATES = [...TERMINAL_SUCCESS, ...TERMINAL_FAILURE];
let status;
do {
await new Promise((resolve) => setTimeout(resolve, 5000)); // Wait 5 seconds between checks
console.log("Checking status...");
try {
status = await checkStatus(transactionHash);
console.log("Status details:", status?.bungeeStatusCode || "Pending");
} catch (error) {
console.error("Failed to check status:", error?.message || "Unknown error");
}
} while (!status || !TERMINAL_STATES.includes(status?.bungeeStatusCode));
// Handle terminal states
if (TERMINAL_SUCCESS.includes(status?.bungeeStatusCode)) {
console.log(
"Transaction complete:",
"\n- Hash:",
status.destinationData?.txHash || "Transaction hash not available"
);
} else {
const statusNames = { 5: "EXPIRED", 6: "CANCELLED", 7: "REFUNDED" };
console.error(
"Transaction failed:",
`\n- Status: ${statusNames[status?.bungeeStatusCode]} (${status?.bungeeStatusCode})`,
"\n- Transaction Hash:", transactionHash,
"\n- Details:", JSON.stringify(status, null, 2)
);
throw new Error(`Request ${statusNames[status?.bungeeStatusCode]}`);
}