/*********************************** *********** Create Offer ********** **********************************/ async function createOffer() { let net = getNet() const client = new xrpl.Client(net) await client.connect() let results = `===Connected to ${net}, getting wallet....===\n` resultField.value = results const wallet = xrpl.Wallet.fromSeed(accountSeedField.value) try { if (getCurrencyField.value == 'XRP') { takerGets = xrpl.xrpToDrops(getAmountField.value) } else { takerGetsString = '{"currency": "' + getCurrencyField.value + '",\n' + '"issuer": "' + getIssuerField.value + '",\n' + '"value": "' + getAmountField.value + '"}' takerGets = JSON.parse(takerGetsString) } if (payCurrencyField.value == 'XRP') { takerPays = xrpl.xrpToDrops(payAmountField.value) } else { takerPaysString = '{"currency": "' + payCurrencyField.value + '",\n' + '"issuer": "' + payIssuerField.value + '",\n' + '"value": "' + payAmountField.value + '"}' takerPays = JSON.parse(takerPaysString) } const prepared = await client.autofill({ "TransactionType": "OfferCreate", "Account": wallet.address, "TakerGets": takerGets, "TakerPays": takerPays }) const signed = wallet.sign(prepared) const tx = await client.submitAndWait(signed.tx_blob) results = '\n\n===Offer created===\n\n' + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2) resultField.value += results xrpBalanceField.value = (await client.getXrpBalance(wallet.address)) } catch (err) { console.error('Error creating offer:', err); results = `\nError: ${err.message}\n` resultField.value += results throw err; // Re-throw the error to be handled by the caller } finally { // Disconnect from the client client.disconnect() } } // End of createOffer() /*********************************** ************ Get Offers *********** **********************************/ async function getOffers() { let net = getNet() const client = new xrpl.Client(net) await client.connect() let results = `===Connected to ' + ${net}, getting offers....===\n` const wallet = xrpl.Wallet.fromSeed(accountSeedField.value) resultField.value = results results += '\n\n=== Offers ===\n' let offers try { offers = await client.request({ method: "account_offers", account: wallet.address, ledger_index: "validated" }) results = JSON.stringify(offers, null, 2) resultField.value += results } catch (err) { console.error('Error getting offers:', err); results = `\nError: ${err.message}\n` resultField.value += results throw err; // Re-throw the error to be handled by the caller } finally { client.disconnect() } }// End of getOffers() /*********************************** *********** Cancel Offer ********** **********************************/ async function cancelOffer() { let net = getNet() const client = new xrpl.Client(net) await client.connect() let results = `===Connected to ${net}, canceling offer.===\n` resultField.value = results const wallet = xrpl.Wallet.fromSeed(accountSeedField.value) try { // OfferSequence is the _seq_ value from getOffers. const prepared = await client.autofill({ "TransactionType": "OfferCancel", "Account": wallet.address, "OfferSequence": parseInt(offerSequenceField.value) }) const signed = wallet.sign(prepared) const tx = await client.submitAndWait(signed.tx_blob) results += "\nOffer canceled. Balance changes: \n" + JSON.stringify(xrpl.getBalanceChanges(tx.result.meta), null, 2) resultField.value = results xrpBalanceField.value = (await client.getXrpBalance(wallet.address)) } catch (err) { console.error('Error canceling offer:', err); results = `\nError: ${err.message}\n` resultField.value += results throw err; // Re-throw the error to be handled by the caller } finally { // Disconnect from the client client.disconnect() } }// End of cancelOffer()