aboutsummaryrefslogtreecommitdiffstats
path: root/redis.coffee.default
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2012-12-03 11:00:06 -0800
committerAdam Soltys <[email protected]>2012-12-03 11:00:06 -0800
commit0d0604e03b8f5cde61078b280e4cb2548e5b0a62 (patch)
tree89606df66364183387b5e5d51b6f4ab6782b643f /redis.coffee.default
parent3fcf88ecdab1424d9ba49ee35ea402f82a985036 (diff)
downloadcoinos-server-0d0604e03b8f5cde61078b280e4cb2548e5b0a62.tar.gz
coinos-server-0d0604e03b8f5cde61078b280e4cb2548e5b0a62.zip
Allow cached AJAX
Diffstat (limited to 'redis.coffee.default')
0 files changed, 0 insertions, 0 deletions
>75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
<script>
	import { SvelteToast } from '@zerodevx/svelte-toast';
	import { onDestroy, onMount } from 'svelte';
	import { close, connect, send } from '$lib/socket';
	import { last, invoice, request, ndef, passwordPrompt, pin } 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 { rate, user, subject, token, rates } = data;

	$: update(data);
	let update = (data) => {
		({ rate, user, subject, token, rates } = data);
	};

	onMount(async () => {
		let localStorageLocale = localStorage.getItem(localeLocalStorageKey);
		if (localStorageLocale) locale.set(localStorageLocale);

		locale.subscribe((lng) => {
			if (lng) localStorage.setItem(localeLocalStorageKey, lng);
		});

		if (browser) {
			let log = console.log;
			checkSocket();
			expirePin();

			try {
				$ndef = new NDEFReader();
				await $ndef.scan();

				$ndef.addEventListener('readingerror', (e) => {
					console.log('nfc error', e);
				});

				$ndef.addEventListener('reading', ({ message, serialNumber }) => {
          goto(`/${user.username}/card/${serialNumber.replace(/:/g, '-')}`);
				});
			} catch (error) {
				log('Argh! ' + error);
			}
		}
	});

	$: browser && connect(token);

	let lost,
		checkTimer,
		expireTimer,
		counter = 0;

	let checkSocket = () => {
		counter++;
		lost = Date.now() - $last > 30000;
		if (lost) connect(token);
		if (counter > 5) {
			send('heartbeat', token);
			counter = 0;
		}

		checkTimer = setTimeout(checkSocket, 1000);
	};

	let expirePin = () => {
		$pin = null;
		expireTimer = setTimeout(expirePin, 300000);
	};

	onDestroy(() => {
		if (browser) {
			clearTimeout(checkTimer);
			clearTimeout(expireTimer);
		}
	});
</script>

{#if browser && $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 } }} />

<main data-sveltekit-prefetch class="pb-20">
	<slot />
</main>

{#if $invoice}
	<Invoice {user} />
{/if}

{#if $request}
	<Request {user} />
{/if}