aboutsummaryrefslogtreecommitdiffstats
path: root/src/routes/(app)/generate/+page.svelte
blob: 49d75dc6ad8e366100ca849426f5594a1b1262d0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<script>
  import { fail, post, wait } from "$lib/utils";
  import { onMount } from "svelte";
  import { goto, invalidate } from "$app/navigation";
  import Pin from "$comp/Pin.svelte";
  import Spinner from "$comp/Spinner.svelte";
  import { loginRedirect, pin, password } from "$lib/store";
  import { generate } from "$lib/nostr";
  import { browser } from "$app/environment";

  export let data;
  let { user } = data;

  let loaded;
  let gen = async () => {
    if (!browser) return;

    if (user.pubkey) {
      goto($loginRedirect || `/${user.username}`, { invalidateAll: true });
      return;
    }

    try {
      await generate(user);
    } catch (e) {
      console.log("error generating", e);
    }

    try {
      user.pin = $pin;
      await post(`/generate`, user);
      goto($loginRedirect || `/${user.username}`, { invalidateAll: true });
    } catch (e) {
      $pin = "";
      if (e.message?.startsWith("Pin")) {
        fail("Wrong pin, try again");
      } else {
        fail("Failed to generate keys");
        goto("/");
      }
    }
  };

  onMount(() => browser && setTimeout(() => (loaded = true) && gen(), 50));

  $: $pin?.length === 6 && gen(user);
</script>

{#if loaded && user?.haspin && $pin?.length !== 6}
  <Pin />
{/if}

<div class="container px-4 text-center mx-auto">
  <h1 class="text-3xl md:text-4xl font-bold mb-6">
    Generating new account keys
  </h1>
  <div class="flex w-full py-5 max-w-[200px] mx-auto bg-black rounded-2xl">
    <Spinner />
  </div>
</div>