aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/routes/(app)/settings/+layout.svelte37
1 files changed, 24 insertions, 13 deletions
diff --git a/src/routes/(app)/settings/+layout.svelte b/src/routes/(app)/settings/+layout.svelte
index c094949d..c9897f07 100644
--- a/src/routes/(app)/settings/+layout.svelte
+++ b/src/routes/(app)/settings/+layout.svelte
@@ -12,8 +12,10 @@
import { avatar, banner, signer, password, pin, save } from "$lib/store";
import { upload } from "$lib/upload";
import { page } from "$app/stores";
- import { sign, send } from "$lib/nostr";
+ import { sign, send, getPrivateKey } from "$lib/nostr";
import { invalidateAll } from "$app/navigation";
+ import { getPublicKey } from "nostr-tools";
+ import { bytesToHex } from "@noble/hashes/utils";
let { children, data, form } = $props();
@@ -46,19 +48,16 @@
e.preventDefault();
try {
submitting = true;
- let data = new FormData(formElement);
+ let body = new FormData(formElement);
let user = await fd({
formData() {
- return data;
+ return body;
},
});
if (!user.pubkey || user.pubkey === prev.pubkey) {
- data.delete("pubkey");
+ body.delete("pubkey");
} else {
- signer.set(
- user.extension ? { method: "extension", ready: true } : null,
- );
let event = {
kind: 1,
created_at: Date.now(),
@@ -67,7 +66,7 @@
};
let signedEvent = await sign(event);
- data.set("event", JSON.stringify(signedEvent));
+ body.set("event", JSON.stringify(signedEvent));
}
if ($avatar) {
@@ -77,7 +76,7 @@
);
let url = `${$page.url.origin}/api/public/${hash}.webp`;
- data.set("picture", url);
+ body.set("picture", url);
await fetch(url, { cache: "reload", mode: "no-cors" });
} catch (e) {
@@ -92,7 +91,7 @@
);
let url = `${$page.url.origin}/api/public/${hash}.webp`;
- data.set("banner", url);
+ body.set("banner", url);
await fetch(url, { cache: "reload", mode: "no-cors" });
} catch (e) {
console.log("problem uploading banner", e);
@@ -120,6 +119,18 @@
};
try {
+ if (data?.user?.nsec && !$signer?.ready) {
+ let sk = await getPrivateKey(data.user);
+
+ signer.set({
+ method: "nsec",
+ ready: true,
+ params: { sk: bytesToHex(sk), pk: getPublicKey(sk) },
+ });
+
+ await tick();
+ }
+
event = await sign(event);
send(event);
} catch (e) {
@@ -128,7 +139,7 @@
}
}
- let email = data.get("email");
+ let email = body.get("email");
if (email && email !== prev.email) {
try {
cookies.get = function (n) {
@@ -148,14 +159,14 @@
const response = await fetch(formElement.action, {
method: "POST",
- body: data,
+ body,
});
const result = deserialize(await response.text());
if (result.type === "success") {
await invalidateAll();
- if (data.get("password")) $password = data.get("password");
+ if (body.get("password")) $password = body.get("password");
}
applyAction(result);