| 2300 | } |
| 2301 | |
| 2302 | static struct command_result *json_xpay_params(struct command *cmd, |
| 2303 | const char *buffer, |
| 2304 | const jsmntok_t *params, |
| 2305 | bool as_pay) |
| 2306 | { |
| 2307 | struct amount_msat *msat, *maxfee, *partial; |
| 2308 | const char *invstring; |
| 2309 | const char **layers; |
| 2310 | u32 *maxdelay; |
| 2311 | const char *payer_note; |
| 2312 | unsigned int *retryfor; |
| 2313 | struct sha256 *localinvreqid; |
| 2314 | struct json_escape *label; |
| 2315 | struct out_req *req; |
| 2316 | struct xpay_params *xparams; |
| 2317 | bool *dev_use_shadow; |
| 2318 | |
| 2319 | if (!param_check(cmd, buffer, params, |
| 2320 | p_req("invstring", param_invstring, &invstring), |
| 2321 | p_opt("amount_msat", param_msat, &msat), |
| 2322 | p_opt("maxfee", param_msat, &maxfee), |
| 2323 | p_opt("layers", param_string_array, &layers), |
| 2324 | p_opt_def("retry_for", param_number, &retryfor, 60), |
| 2325 | p_opt("partial_msat", param_msat, &partial), |
| 2326 | p_opt_def("maxdelay", param_u32, &maxdelay, 2016), |
| 2327 | p_opt("payer_note", param_string, &payer_note), |
| 2328 | p_opt("label", param_label, &label), |
| 2329 | p_opt("localinvreqid", param_sha256, &localinvreqid), |
| 2330 | p_opt_dev("dev_use_shadow", param_bool, &dev_use_shadow, true), |
| 2331 | NULL)) |
| 2332 | return command_param_failed(); |
| 2333 | |
| 2334 | /* Is this a one-shot vibe payment? Kids these days! */ |
| 2335 | if (!as_pay && bolt12_has_offer_prefix(invstring)) { |
| 2336 | struct command_result *ret; |
| 2337 | |
| 2338 | ret = check_offer_payable(cmd, invstring, msat); |
| 2339 | if (ret) |
| 2340 | return ret; |
| 2341 | |
| 2342 | if (localinvreqid) |
| 2343 | return command_fail(cmd, JSONRPC2_INVALID_PARAMS, |
| 2344 | "Cannot use localinvreqid with offer payment"); |
| 2345 | |
| 2346 | if (*dev_use_shadow == false) |
| 2347 | return command_fail(cmd, JSONRPC2_INVALID_PARAMS, |
| 2348 | "Cannot use dev_use_shadow=false with offer payment"); |
| 2349 | |
| 2350 | if (command_check_only(cmd)) |
| 2351 | return command_check_done(cmd); |
| 2352 | |
| 2353 | xparams = tal(cmd, struct xpay_params); |
| 2354 | xparams->msat = msat; |
| 2355 | xparams->maxfee = maxfee; |
| 2356 | xparams->partial = partial; |
| 2357 | xparams->layers = layers; |
| 2358 | xparams->retryfor = *retryfor; |
| 2359 | xparams->maxdelay = *maxdelay; |
no test coverage detected