wowlet/src/utils/xmrtoapi.h

88 lines
3.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// SPDX-License-Identifier: BSD-3-Clause
// Copyright (c) 2020-2021, The Monero Project.
#ifndef FEATHER_XMRTOAPI_H
#define FEATHER_XMRTOAPI_H
#include <QObject>
#include <utility>
#include "utils/networking.h"
enum Endpoint {
RATES = 0,
ORDER_CREATE,
ORDER_STATUS
};
struct XmrToError {
explicit XmrToError(QString code = "", QString msg = "")
: code(std::move(code)), msg(std::move(msg)) {};
QString code;
QString msg;
};
struct XmrToResponse {
explicit XmrToResponse(bool ok, Endpoint endpoint, QString message, XmrToError error = XmrToError(), QJsonObject obj = {})
: ok(ok), endpoint(endpoint), message(std::move(message)), error(std::move(error)), obj(std::move(obj)) {};
explicit XmrToResponse(bool ok, Endpoint endpoint, QString message, QJsonObject obj)
: ok(ok), endpoint(endpoint), message(std::move(message)), obj(std::move(obj)) {};
bool ok;
Endpoint endpoint;
QString message;
XmrToError error = XmrToError();
QJsonObject obj;
};
class XmrToApi : public QObject {
Q_OBJECT
public:
explicit XmrToApi(QObject *parent, UtilsNetworking *network, QString baseUrl = "https://xmr.to");
void getRates();
void createOrder(double amount, const QString &amount_currency, const QString &dest_address);
void getOrderStatus(const QString &uuid);
signals:
void ApiResponse(XmrToResponse resp);
private slots:
void onResponse(QNetworkReply *reply, Endpoint endpoint);
private:
static XmrToError getApiError(const QJsonObject &obj);
QString m_baseUrl;
UtilsNetworking *m_network;
// https://xmrto-api.readthedocs.io/en/latest/introduction.html#list-of-all-error-codes
const QMap<QString, QString> m_errorMap = {
{"XMRTO-ERROR-001", "internal services not available, try again later."},
{"XMRTO-ERROR-002", "malformed bitcoin address, check address validity."},
{"XMRTO-ERROR-003", "invalid bitcoin amount, check amount data type."},
{"XMRTO-ERROR-004", "bitcoin amount out of bounds, check min and max amount."},
{"XMRTO-ERROR-005", "unexpected validation error, contact support."},
{"XMRTO-ERROR-006", "requested order not found, check order UUID."},
{"XMRTO-ERROR-007", "third party service not available, try again later."},
{"XMRTO-ERROR-008", "insufficient funds available, try again later."},
{"XMRTO-ERROR-009", "invalid request, check request parameters."},
{"XMRTO-ERROR-010", "payment protocol failed, invalid or outdated data served by URL."},
{"XMRTO-ERROR-011", "malformed payment protocol url, URL is malformed or cannot be contacted."},
{"XMRTO-ERROR-012", "too many requests, try less often."},
{"XMRTO-ERROR-013", "access forbidden."},
{"XMRTO-ERROR-014", "service is not available in your region."},
{"XMRTO-ERROR-015", "invalid monero amount, check amount data type."},
{"XMRTO-ERROR-016", "invalid currency, check available currency options."},
{"XMRTO-ERROR-017", "malformed lightning network invoice, provide a correct invoice for the main network."},
{"XMRTO-ERROR-018", "lightning payment unlikely to succeed, check first if xmr.to has routes available."},
{"XMRTO-ERROR-019", "lightning invoice preimage already known, dont use the same invoice more than once."}
};
};
#endif //FEATHER_XMRTOAPI_H