diff --git a/e2e/refund/noLockup.png b/e2e/refund/noLockup.png
new file mode 100644
index 00000000..53c1aff3
Binary files /dev/null and b/e2e/refund/noLockup.png differ
diff --git a/e2e/refund/refundFile.spec.ts b/e2e/refund/refundFile.spec.ts
new file mode 100644
index 00000000..a16006de
--- /dev/null
+++ b/e2e/refund/refundFile.spec.ts
@@ -0,0 +1,23 @@
+import { expect, test } from "@playwright/test";
+import path from "path";
+
+import dict from "../../src/i18n/i18n";
+
+test.describe("Refund files", () => {
+ test("should show that no lockup transaction can be found", async ({
+ page,
+ }) => {
+ await page.goto("/");
+
+ await page.getByRole("link", { name: "Refund" }).click();
+ await page.getByTestId("refundUpload").click();
+
+ await page
+ .getByTestId("refundUpload")
+ .setInputFiles(path.join(__dirname, "noLockup.png"));
+
+ await expect(
+ page.getByRole("button", { name: dict.en.no_lockup_transaction }),
+ ).toBeVisible();
+ });
+});
diff --git a/package-lock.json b/package-lock.json
index 00504683..224015fc 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -51,6 +51,7 @@
"@testing-library/user-event": "^14.5.2",
"@trivago/prettier-plugin-sort-imports": "^5.2.0",
"@types/jest": "^29.5.14",
+ "@types/node": "^22.10.5",
"@webbtc/webln-types": "^3.0.0",
"babel-jest": "^29.7.0",
"babel-plugin-transform-import-meta": "^2.2.1",
@@ -6777,14 +6778,20 @@
"license": "MIT"
},
"node_modules/@types/node": {
- "version": "22.8.7",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.7.tgz",
- "integrity": "sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==",
+ "version": "22.10.5",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz",
+ "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==",
"license": "MIT",
"dependencies": {
- "undici-types": "~6.19.8"
+ "undici-types": "~6.20.0"
}
},
+ "node_modules/@types/node/node_modules/undici-types": {
+ "version": "6.20.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+ "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+ "license": "MIT"
+ },
"node_modules/@types/offscreencanvas": {
"version": "2019.7.3",
"resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz",
diff --git a/package.json b/package.json
index e9d3487d..2ad356ed 100644
--- a/package.json
+++ b/package.json
@@ -34,6 +34,7 @@
"@testing-library/user-event": "^14.5.2",
"@trivago/prettier-plugin-sort-imports": "^5.2.0",
"@types/jest": "^29.5.14",
+ "@types/node": "^22.10.5",
"@webbtc/webln-types": "^3.0.0",
"babel-jest": "^29.7.0",
"babel-plugin-transform-import-meta": "^2.2.1",
diff --git a/src/components/RefundButton.tsx b/src/components/RefundButton.tsx
index 6699159e..d6499802 100644
--- a/src/components/RefundButton.tsx
+++ b/src/components/RefundButton.tsx
@@ -5,11 +5,12 @@ import { Network as LiquidNetwork } from "liquidjs-lib/src/networks";
import log from "loglevel";
import {
Accessor,
+ Match,
Setter,
Show,
+ Switch,
createResource,
createSignal,
- onMount,
} from "solid-js";
import { ChainSwap, SubmarineSwap } from "src/utils/swapCreator";
@@ -162,16 +163,11 @@ const RefundButton = (props: {
const refundAction = async () => {
setRefundRunning(true);
- const transactionToRefund = await getLockupTransaction(
- props.swap().id,
- props.swap().type,
- );
-
try {
const res = await refund(
props.swap(),
refundAddress(),
- transactionToRefund,
+ lockupTransaction(),
);
// save refundTx into swaps json and set it to the current swap
@@ -202,9 +198,9 @@ const RefundButton = (props: {
msg === "non-final"
) {
msg = t("locktime_not_satisfied");
- setTimeoutEta(transactionToRefund.timeoutEta);
+ setTimeoutEta(lockupTransaction().timeoutEta);
setTimeoutBlockheight(
- transactionToRefund.timeoutBlockHeight,
+ lockupTransaction().timeoutBlockHeight,
);
}
log.error(msg);
@@ -218,8 +214,10 @@ const RefundButton = (props: {
setRefundRunning(false);
};
- onMount(async () => {
- if (!props.swap()) return;
+ const [lockupTransaction] = createResource(async () => {
+ if (!props.swap()) {
+ return undefined;
+ }
const transactionToRefund = await getLockupTransaction(
props.swap().id,
@@ -231,6 +229,8 @@ const RefundButton = (props: {
setTimeoutEta(transactionToRefund.timeoutEta);
setTimeoutBlockheight(transactionToRefund.timeoutBlockHeight);
}
+
+ return transactionToRefund;
});
const [preimageHash] = createResource(async () => {
@@ -294,43 +294,57 @@ const RefundButton = (props: {
}>
-