From 1f302cd27001299bff5e97a8a19aa4a16118c3e5 Mon Sep 17 00:00:00 2001 From: erdoganishe Date: Thu, 11 Dec 2025 16:16:14 +0200 Subject: [PATCH] lightningd: add description field to offer related responces Changelog-Added: Expose decoded offer description in `offer` and `listoffers` RPC responses. --- lightningd/offer.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/lightningd/offer.c b/lightningd/offer.c index 279962817..bd4357eb3 100644 --- a/lightningd/offer.c +++ b/lightningd/offer.c @@ -25,6 +25,26 @@ static void json_populate_offer(struct json_stream *response, json_add_escaped_string(response, "label", label); } +static const char *offer_description_from_b12(const tal_t *ctx, + struct lightningd *ld, + const char *b12) +{ + struct tlv_offer *offer; + char *fail; + + offer = offer_decode(ctx, b12, strlen(b12), + NULL, NULL, &fail); + if (!offer) { + log_debug(ld->log, "Failed to decode BOLT12: %s", fail); + return NULL; + } + + if (!offer->offer_description) + return NULL; + + return offer->offer_description; +} + static struct command_result *param_b12_offer(struct command *cmd, const char *name, const char *buffer, @@ -134,6 +154,7 @@ static struct command_result *json_listoffers(struct command *cmd, struct json_stream *response; struct wallet *wallet = cmd->ld->wallet; const char *b12; + const char *description; const struct json_escape *label; bool *active_only; enum offer_status status; @@ -154,6 +175,9 @@ static struct command_result *json_listoffers(struct command *cmd, json_populate_offer(response, offer_id, b12, label, status); + description = offer_description_from_b12(tmpctx, cmd->ld, b12); + if (description) + json_add_stringn(response, "description", description, tal_bytelen(description)); json_object_end(response); } } else { @@ -170,6 +194,9 @@ static struct command_result *json_listoffers(struct command *cmd, json_populate_offer(response, &id, b12, label, status); + description = offer_description_from_b12(tmpctx, cmd->ld, b12); + if (description) + json_add_stringn(response, "description", description, tal_bytelen(description)); json_object_end(response); } } @@ -193,6 +220,7 @@ static struct command_result *json_disableoffer(struct command *cmd, struct sha256 *offer_id; struct wallet *wallet = cmd->ld->wallet; const char *b12; + const char *description; const struct json_escape *label; enum offer_status status; @@ -216,6 +244,9 @@ static struct command_result *json_disableoffer(struct command *cmd, response = json_stream_success(cmd); json_populate_offer(response, offer_id, b12, label, status); + description = offer_description_from_b12(tmpctx, cmd->ld, b12); + if (description) + json_add_stringn(response, "description", description, tal_bytelen(description)); return command_success(cmd, response); } @@ -234,6 +265,7 @@ static struct command_result *json_enableoffer(struct command *cmd, struct sha256 *offer_id; struct wallet *wallet = cmd->ld->wallet; const char *b12; + const char *description; const struct json_escape *label; enum offer_status status; @@ -257,6 +289,9 @@ static struct command_result *json_enableoffer(struct command *cmd, response = json_stream_success(cmd); json_populate_offer(response, offer_id, b12, label, status); + description = offer_description_from_b12(tmpctx, cmd->ld, b12); + if (description) + json_add_stringn(response, "description", description, tal_bytelen(description)); return command_success(cmd, response); }