| 2380 | } |
| 2381 | |
| 2382 | static struct command_result *json_xpay_params(struct command *cmd, |
| 2383 | const char *buffer, |
| 2384 | const jsmntok_t *params, |
| 2385 | bool as_pay) |
| 2386 | { |
| 2387 | struct amount_msat *msat, *maxfee, *partial; |
| 2388 | const char *invstring; |
| 2389 | const char **layers; |
| 2390 | u32 *maxdelay; |
| 2391 | const char *payer_note; |
| 2392 | unsigned int *retryfor; |
| 2393 | struct sha256 *localinvreqid; |
| 2394 | struct json_escape *label; |
| 2395 | struct out_req *req; |
| 2396 | struct xpay_params *xparams; |
| 2397 | bool *dev_use_shadow; |
| 2398 | |
| 2399 | if (!param_check(cmd, buffer, params, |
| 2400 | p_req("invstring", param_invstring, &invstring), |
| 2401 | p_opt("amount_msat", param_msat, &msat), |
| 2402 | p_opt("maxfee", param_msat, &maxfee), |
| 2403 | p_opt("layers", param_string_array, &layers), |
| 2404 | p_opt_def("retry_for", param_number, &retryfor, 60), |
| 2405 | p_opt("partial_msat", param_msat, &partial), |
| 2406 | p_opt_def("maxdelay", param_u32, &maxdelay, 2016), |
| 2407 | p_opt("payer_note", param_string, &payer_note), |
| 2408 | p_opt("label", param_label, &label), |
| 2409 | p_opt("localinvreqid", param_sha256, &localinvreqid), |
| 2410 | p_opt_dev("dev_use_shadow", param_bool, &dev_use_shadow, true), |
| 2411 | NULL)) |
| 2412 | return command_param_failed(); |
| 2413 | |
| 2414 | /* Is this a one-shot vibe payment? Kids these days! */ |
| 2415 | if (!as_pay && bolt12_has_offer_prefix(invstring)) { |
| 2416 | struct command_result *ret; |
| 2417 | struct amount_msat authorized; |
| 2418 | |
| 2419 | ret = check_offer_payable(cmd, invstring, msat, &authorized); |
| 2420 | if (ret) |
| 2421 | return ret; |
| 2422 | |
| 2423 | if (localinvreqid) |
| 2424 | return command_fail(cmd, JSONRPC2_INVALID_PARAMS, |
| 2425 | "Cannot use localinvreqid with offer payment"); |
| 2426 | |
| 2427 | if (*dev_use_shadow == false) |
| 2428 | return command_fail(cmd, JSONRPC2_INVALID_PARAMS, |
| 2429 | "Cannot use dev_use_shadow=false with offer payment"); |
| 2430 | |
| 2431 | if (command_check_only(cmd)) |
| 2432 | return command_check_done(cmd); |
| 2433 | |
| 2434 | xparams = tal(cmd, struct xpay_params); |
| 2435 | xparams->msat = msat; |
| 2436 | xparams->maxfee = maxfee; |
| 2437 | xparams->partial = partial; |
| 2438 | xparams->layers = layers; |
| 2439 | xparams->retryfor = *retryfor; |
no test coverage detected