Skip to content

Commit 16fd23e

Browse files
author
Llorenç
committed
GH review changes
1 parent a05aee2 commit 16fd23e

File tree

3 files changed

+31
-14
lines changed

3 files changed

+31
-14
lines changed

src/frontend/src/lib/flows/recoverWithPhraseFlow.svelte.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ const authenticateWithRecoveryPhrase = async (
3030
};
3131

3232
const bufferEqual = (buf1: ArrayBuffer, buf2: ArrayBuffer): boolean => {
33-
if (buf1.byteLength != buf2.byteLength) return false;
33+
if (buf1.byteLength !== buf2.byteLength) return false;
3434
const dv1 = new Int8Array(buf1);
3535
const dv2 = new Int8Array(buf2);
36-
for (let i = 0; i != buf1.byteLength; i++) {
37-
if (dv1[i] != dv2[i]) return false;
36+
for (let i = 0; i !== buf1.byteLength; i++) {
37+
if (dv1[i] !== dv2[i]) return false;
3838
}
3939
return true;
4040
};
@@ -79,7 +79,7 @@ export const recoverWithPhrase = async (
7979
});
8080
// Make call to lookup endpoint
8181
const identityInfo = await anonymousActor.identity_info
82-
.withOptions({ agent })(BigInt(userNumber))
82+
.withOptions({ agent })(userNumber)
8383
.then(throwCanisterError);
8484
return {
8585
success: true,

src/frontend/src/lib/utils/recoveryPhrase.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ type TestVector = {
99
derivationPath?: number[];
1010
};
1111

12-
// Test vectors consist of taken from
12+
// Test vectors are taken from
1313
// https://github.com/satoshilabs/slips/blob/master/slip-0010.md
1414
// The public key vectors contained a leading 0-byte for no obvious reason.
1515
// These were removed.

src/frontend/src/routes/(new-styling)/recovery-phrase/+page.svelte

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
Array.from({ length: 24 }, () => ({ value: "" })),
1111
);
1212
13+
// Flag to prevent double-triggering recovery on multiple blur events
14+
let recoveryInProgress = $state(false);
15+
1316
// TODO: Use word validation instead of presence.
1417
const submitEnabled = $derived(
1518
words.every((word) => word.value.trim().length > 0),
@@ -36,13 +39,26 @@
3639
};
3740
3841
const handleRecoverWithPhrase = async () => {
42+
if (recoveryInProgress) {
43+
return;
44+
}
45+
recoveryInProgress = true;
46+
3947
const phraseWords = words.map((word) => word.value);
40-
const result = await recoverWithPhrase(phraseWords);
41-
// TODO: Handle success and error
42-
if (result.success) {
43-
console.log("success", result.info);
44-
} else {
45-
console.log("error", result.error);
48+
try {
49+
const result = await recoverWithPhrase(phraseWords);
50+
// TODO: Handle success and error
51+
if (result.success) {
52+
console.log("success", result.info);
53+
} else {
54+
console.log("error", result.error);
55+
}
56+
} catch (error) {
57+
// TODO: Manage error
58+
console.error("error", error);
59+
} finally {
60+
// Reset flag on error to allow retry
61+
recoveryInProgress = false;
4662
}
4763
};
4864
@@ -53,8 +69,9 @@
5369
const pastedText = event.clipboardData?.getData("text");
5470
if (!pastedText) return;
5571
56-
// Fill inputs starting from current index
57-
const pastedWords = pastedText.split(" ");
72+
// Uses might paste text with multiple spaces, tabs, or newlines between words.
73+
const pastedWords = pastedText.trim().split(/\s+/);
74+
// Fill inputs starting from current index.
5875
pastedWords.forEach((word, i) => {
5976
const targetIndex = currentIndex + i;
6077
if (targetIndex < words.length) {
@@ -85,7 +102,7 @@
85102
86103
const handleBlur = () => {
87104
// Auto-submit when all 24 words are complete
88-
if (submitEnabled) {
105+
if (submitEnabled && !recoveryInProgress) {
89106
handleRecoverWithPhrase();
90107
}
91108
};

0 commit comments

Comments
 (0)