robosats/api/errors.py
2023-04-01 12:00:00 +00:00

118 lines
6.4 KiB
Python

ERRORS = {
# 1000 - Bad request
1000: "You are already maker of an active order",
1001: "You are already taker of an active order",
1002: "You are already taking an active order",
1003: "You are still pending a payment from a recent order",
1004: "Your order is too big. It is worth {order_amount} Sats now, but the limit is {max_order_size} Sats",
1005: "Your order is too small. It is worth {order_amount} Sats now, but the limit is {min_order_size} Sats",
1006: "Maximum range amount must be at least 50 percent higher than the minimum amount",
1007: "Your order maximum amount is too big. It is worth {max_sats} Sats now, but the limit is {max_order_size} Sats",
1008: "Your order minimum amount is too small. It is worth {min_sats} Sats now, but the limit is {min_order_size} Sats",
1009: "Your order amount range is too large. Max amount can only be 15 times bigger than min amount",
1010: "The coordinator does not support orders in {country}",
1011: "The amount specified is outside the range specified by the maker",
1012: "You need to wait {time_out} seconds to take an order",
1013: "You cannot open a dispute of this order at this stage",
1014: "Only orders in dispute accept dispute statements",
1015: "Only the buyer of this order can provide a payout address.",
1016: "You cannot submit an address now.",
1017: "Only the buyer of this order can provide a buyer invoice.",
1018: "Wait for your order to be taken.",
1019: "You cannot submit an invoice while bonds are not locked.",
1020: "Current order status is {order_status}, not {cancel_status}.",
1021: "You cannot cancel this order",
1022: "Invoice expired. You did not confirm publishing the order in time. Make a new order.",
1023: "The lightning node is down. Write in the Telegram group to make sure the staff is aware.",
1024: "This is weird, RoboSats' lightning wallet is locked. Check in the Telegram group, maybe the staff has died.",
1025: "Order expired. You did not confirm taking the order in time.",
1026: "Invoice expired. You did not send the escrow in time.",
1027: "You cannot confirm to have received the fiat before it is confirmed to be sent by the buyer.",
1028: "Woah, something broke badly. Report in the public channels, or open a Github Issue.",
1029: "You cannot confirm the fiat payment at this stage",
1030: "Only the buyer can undo the fiat sent confirmation.",
1031: "Only orders in Chat and with fiat sent confirmed can be reverted.",
1032: "You cannot pause or unpause an order you did not make",
1033: "You can only pause/unpause an order that is either public or paused",
1034: "Your PGP public key does not seem valid.\nStderr: {import_pub_result_stderr}\n"
+ "ReturnCode: {import_pub_result_returncode}\nSummary: {import_pub_result_summary}\n"
+ "Results: {import_pub_result_results}\nImported: {import_pub_result_imported}\n",
1035: "Your PGP encrypted private key does not seem valid.\nStderr: {import_priv_result_stderr}\n"
+ "ReturnCode: {import_priv_result_returncode}\nSummary: {import_priv_result_summary}\n"
+ "Results: {import_priv_result.results}\nSec Imported: {import_priv_result_sec_imported}\n",
1036: "Woops! It seems you do not have a robot avatar",
1037: "The RoboSats {coordinator_alias} coordinator book is at full capacity! Current limit is {max_public_orders} orders",
1038: "You must specify min_amount and max_amount for a range order",
1039: "You must specify an order amount",
1040: "You must have a robot avatar to see the order details",
1041: "Order ID parameter not found in request",
1042: "Invalid Order Id",
1043: "This order has been cancelled",
1044: "This order is not available",
1045: "Wrong password",
1046: "This order is not public anymore.",
1047: "You are not a participant in this order",
1048: "The PGP signed cleartext message is not valid.",
1049: "The Robotic Satoshis working in the warehouse did not understand you. "
+ "Please, fill a Bug Issue in Github https://github.com/RoboSats/robosats/issues",
1050: "Invalid date format",
1051: "More than 5000 market ticks have been found. Please, narrow the date range",
1052: "Robot has no finished order",
1053: "Wrong hex pubkey",
# 2000 - Bad statement
2000: "The statement and chat logs are longer than 50,000 characters",
2001: "The statement is too short. Make sure to be thorough.",
# 3000 - Bad invoice
3000: "You submitted an empty invoice",
3001: "You can only submit an invoice after expiration or 3 failed attempts",
3002: "You must submit a NEW invoice",
3003: "You have not earned rewards",
3004: "Give me a new invoice",
3005: "Invoice payment failure: {failure_reason}",
# 4000 - Bad address
4000: "You submitted an empty address",
4001: "The mining fee is too low. Must be higher than {min_mining_fee_rate} Sat/vbyte",
4002: "The mining fee is too high, must be less than 500 Sats/vbyte",
4003: "The amount remaining after subtracting mining fee is close to dust limit.",
4004: "Invalid address",
4005: "Unable to validate address, check bitcoind backend",
# 5000 - Bad summary
5000: "Order has not finished yet",
# 6000 - Chat bad request
6000: "Order ID does not exist",
6001: "You are not participant in this order",
6002: "Order is not in chat status",
6003: "Invalid serializer",
# 7000 - Middlewares bad request
7000: "Robot token SHA256 was provided in the header. However it is not a valid 39 or 40 characters Base91 string.",
7001: "On the first request to a RoboSats coordinator, you must provide as well a valid public and encrypted private PGP keys and a nostr pubkey",
7002: "Invalid keys: {bad_keys_context}",
7003: "Authentication credentials were not provided.",
}
def new_error(code: int, parameters: dict = None) -> dict:
message = ERRORS[code]
if parameters is not None:
message = message.format(**parameters)
message_field_name = "bad_request"
if 2000 <= code < 3000:
message_field_name = "bad_statement"
if 3000 <= code < 4000:
message_field_name = "bad_invoice"
if 4000 <= code < 5000:
message_field_name = "bad_address"
if 5000 <= code < 6000:
message_field_name = "bad_summary"
return {
"error_code": code,
message_field_name: message,
}