aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-02-14 00:09:15 -0800
committerAdam Soltys <[email protected]>2026-02-14 00:09:15 -0800
commitd242a387279119cfc6e191eff3b4e2228cbb5a4e (patch)
treebde7709ec71eb7a4119012e7d7a901d93deecc36 /src
parent193905fb8d3f5638cc865ef29784db9ebe206710 (diff)
downloadcoinos-ui-d242a387279119cfc6e191eff3b4e2228cbb5a4e.tar.gz
coinos-ui-d242a387279119cfc6e191eff3b4e2228cbb5a4e.zip
handle forwards
Diffstat (limited to 'src')
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts12
-rw-r--r--src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte11
-rw-r--r--src/routes/(app)/send/lightning/[payreq]/[...memo]/+page.server.ts9
-rw-r--r--src/routes/(app)/send/lightning/[payreq]/[...memo]/+page.svelte2
4 files changed, 31 insertions, 3 deletions
diff --git a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts
index c5149a93..717b5a4c 100644
--- a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts
+++ b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.server.ts
@@ -8,6 +8,16 @@ export async function load({ params: { address, amount, feeRate }, cookies, pare
const aid = cookies.get("aid") || user.id;
const account = await get(`/account/${aid}`, auth(cookies));
+ // Check if this is a forward (e.g. bitcoin vault paying a lightning invoice)
+ let forward: any = null;
+ try {
+ const inv = await get(`/invoice/${address}`);
+ if (inv?.forward?.startsWith("ln")) {
+ const parsed = await post("/parse", { payreq: inv.forward }, auth(cookies));
+ forward = { alias: parsed.alias, payreq: inv.forward };
+ }
+ } catch {}
+
if (account.type === "ark") {
const serverArkAddress = await get("/ark/address");
return {
@@ -16,6 +26,7 @@ export async function load({ params: { address, amount, feeRate }, cookies, pare
address,
rate: rates[user.currency],
serverArkAddress,
+ forward,
};
}
@@ -38,6 +49,7 @@ export async function load({ params: { address, amount, feeRate }, cookies, pare
subtract,
hex,
inputs,
+ forward,
};
} catch (e) {
const { message } = e as Error;
diff --git a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte
index 10c46935..1ef38f02 100644
--- a/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte
+++ b/src/routes/(app)/send/bitcoin/[address]/[amount]/[...feeRate]/+page.svelte
@@ -124,7 +124,7 @@
let toggle = () => (submitting = !submitting);
- let { account, amount, address, message, fee, fees, subtract, ourfee, hex, inputs } =
+ let { account, amount, address, message, fee, fees, subtract, ourfee, hex, inputs, forward } =
$derived(data);
let feeRate: any = $state(data.feeRate);
@@ -166,7 +166,14 @@
<div class="text-red-600">{form?.message || message || error}</div>
</div>
{:else}
- <div class="text-xl text-secondary break-all">{address}</div>
+ {#if forward}
+ <div class="text-xl">
+ <span class="text-secondary">{$t("payments.to")}</span>
+ <span class="font-semibold">{forward.alias}</span>
+ </div>
+ {:else}
+ <div class="text-xl text-secondary break-all">{address}</div>
+ {/if}
<Amount amount={subtract ? amount - fee - ourfee : amount} rate={$rate} {currency} />
diff --git a/src/routes/(app)/send/lightning/[payreq]/[...memo]/+page.server.ts b/src/routes/(app)/send/lightning/[payreq]/[...memo]/+page.server.ts
index de123e2e..c0b5c475 100644
--- a/src/routes/(app)/send/lightning/[payreq]/[...memo]/+page.server.ts
+++ b/src/routes/(app)/send/lightning/[payreq]/[...memo]/+page.server.ts
@@ -19,6 +19,15 @@ export async function load({ cookies, params, parent }) {
data.account = account;
data.serverArkAddress = await get("/ark/address");
} else if (account.type === "bitcoin") {
+ const amount = data.amount || parseInt(params.payreq.match(/amount=(\d+)/)?.[1] || "0");
+ if (amount) {
+ const inv = await post(
+ "/invoice",
+ { invoice: { type: "bitcoin", amount, forward: params.payreq }, user },
+ auth(cookies),
+ );
+ redirect(307, `/send/bitcoin/${inv.hash}/${amount}`);
+ }
data.account = account;
}
}
diff --git a/src/routes/(app)/send/lightning/[payreq]/[...memo]/+page.svelte b/src/routes/(app)/send/lightning/[payreq]/[...memo]/+page.svelte
index a204ca86..38407a0d 100644
--- a/src/routes/(app)/send/lightning/[payreq]/[...memo]/+page.svelte
+++ b/src/routes/(app)/send/lightning/[payreq]/[...memo]/+page.svelte
@@ -65,7 +65,7 @@
return;
}
- if (data.account?.seed) {
+ if (data.account?.type === "bitcoin") {
cancel();
(async () => {