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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
<script>
import { SvelteToast } from '@zerodevx/svelte-toast';
import { onDestroy, onMount } from 'svelte';
import { close, connect, send } from '$lib/socket';
import { last, selectedRate, invoice, rate, user, request, passwordPrompt } from '$lib/store';
import { page } from '$app/stores';
import { browser } from '$app/environment';
import { goto } from '$app/navigation';
import { LoadingSplash, Invoice, Password, Request } from '$comp';
import { warning, protectedRoutes } from '$lib/utils';
import { t, locale } from '$lib/translations';
const localeLocalStorageKey = 'sveltekit-i18n-locale';
export let data;
let { subject } = $page.data;
let r, u, token, rates;
$: update(data);
let update = () => {
({ user: u, rate: r, token, rates } = data);
$rate = r;
$user = u;
};
$: $selectedRate = r * (rates[u?.currency || 'USD'] / rates.USD);
$: $selectedRate = $rate * (rates[u?.currency || 'USD'] / rates.USD);
onMount(() => {
let localStorageLocale = localStorage.getItem(localeLocalStorageKey);
if (localStorageLocale) locale.set(localStorageLocale);
locale.subscribe((lng) => {
if (lng) localStorage.setItem(localeLocalStorageKey, lng);
});
browser && checkSocket();
});
$: browser && connect(token);
let lost,
timer,
counter = 0;
let checkSocket = () => {
counter++;
lost = Date.now() - $last > 15000;
if (lost) connect(token);
if (counter > 5) {
send('heartbeat');
counter = 0;
}
timer = setTimeout(checkSocket, 1000);
};
onDestroy(() => browser && clearTimeout(timer));
</script>
{#if $passwordPrompt}
<Password {user} />
{/if}
<svelte:head>
{#if subject}
<title>coinos - {subject.username}</title>
<meta name="lightning" content={`lnurlp:${subject.username}@coinos.io`} />
{:else}
<title>coinos</title>
{/if}
{#if subject?.profile}
<meta name="og:image" content={`/api/public/${subject.uuid}-profile.webp`} />
{:else}
<meta property="og:image" content="/icons/logo.svg" />
{/if}
</svelte:head>
<SvelteToast options={{ reversed: true, intro: { y: 192 } }} />
{#if lost}
<div class="fixed bottom-12 right-12 text-red-600 bg-white z-50 px-4 py-2 rounded-full border">
Lost connection to server, try refreshing
</div>
{/if}
<main data-sveltekit-prefetch>
<slot />
</main>
{#if $invoice}
<Invoice user={u} />
{/if}
{#if $request}
<Request user={u} />
{/if}
|