Skip to content

Commit 15d3cfa

Browse files
committed
enable service worker
1 parent 3fa8b7a commit 15d3cfa

File tree

7 files changed

+172
-157
lines changed

7 files changed

+172
-157
lines changed

apps/gui/src/lib/stores/checks.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ export const relayChecksActiveKeys = derived(overrideRelayChecksActiveKeys, ($ov
3131
"banner",
3232
"seenBy",
3333
"lastSeen",
34-
"seenTimes"
34+
"seenTimes",
35+
"monitorPubkey",
36+
"operatorPubkey"
3537
]
3638
const derivedKeys = [
3739
'nip11IsValid',

apps/gui/src/routes/+layout.svelte

+6
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@
3737
3838
window.process = process;
3939
40+
if ('serviceWorker' in navigator) {
41+
addEventListener('load', function () {
42+
navigator.serviceWorker.register('$src/service-worker/index.js');
43+
});
44+
}
45+
4046
const IDLE_TIMEOUT_MS = 5 * 60 * 1000;
4147
4248
let isReady = false;

apps/gui/src/routes/relays/[protocol]/[...relay]/(components)/RelaySidebar.svelte

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<script lang="ts">
2+
import { type Readable } from "svelte/store";
23
import { cubicInOut } from "svelte/easing";
34
import { crossfade } from "svelte/transition";
45
import { cn } from "$lib/components/utils.js";
@@ -8,19 +9,20 @@
89
910
let className: string | undefined | null = undefined;
1011
11-
export let items: { href: string; title: string }[];
12+
export let items: Readable<{ href: string; title: string }[]>;
1213
export { className as class };
1314
const [send, receive] = crossfade({
1415
duration: 250,
1516
easing: cubicInOut,
1617
});
18+
1719
</script>
1820
<!-- <nav class={cn("flex space-x-2 lg:flex-col lg:space-x-0 lg:space-y-1", className)}> -->
1921
<RelayLiveness class="block relative justify-start hover:bg-transparent text-lg py-1.5 px-3 rounded-md ml-14 -mr-4 capitalize mb-3" />
2022

2123
<nav class={cn("", className)}>
2224

23-
{#each items as item}
25+
{#each $items as item}
2426
{@const isActive = $page.url.pathname === item.href}
2527
<Button
2628
href={item.href}
@@ -41,6 +43,11 @@
4143
{/if}
4244
<div class="relative">
4345
{item.title}
46+
{#if item?.errorCount}
47+
<span class="relative -top-0.5 ml-1 rounded-full bg-red-700 text-white text-xs font-bold py-1 px-2">
48+
{item.errorCount}
49+
</span>
50+
{/if}
4451
</div>
4552
</Button>
4653
{/each}

apps/gui/src/routes/relays/[protocol]/[...relay]/+layout.svelte

+145-142
Original file line numberDiff line numberDiff line change
@@ -27,153 +27,156 @@
2727
import OperatorRelay from "$lib/components/partials/OperatorRelay.svelte";
2828
import { doLiveSync } from "$stores/app";
2929
30-
// export let params: { protocol: string; relay: string };
31-
32-
$: pathname = $page.url
33-
34-
let currentRelay: string = '';
35-
let loading: boolean = true;
36-
37-
const relayUrl = generateRelayUrlFromPath() as string;
38-
39-
// const nip11Ready: Writable<boolean> = writable(false);
40-
// const operatorMetaReady: Writable<boolean> = writable(false);
41-
// const monitors: Writable<Monitor[]> = writable([]);
42-
43-
// const liveness: Writable<null | 'online' | 'offline' | 'dead' | 'unknown'> = writable(null);
44-
// const oldChecks: Writable<Nip66CheckEvent[]> = writable([]);
45-
46-
// const nocapService: Writable<NocapService> = writable(new NocapService());
47-
48-
// const deduplicateEvents = ( events: NostrEvent[] ) => {
49-
// const deduped = new Map();
50-
// events.forEach( event => {
51-
// const key = eventKey(event);
52-
// deduped.set(key, event);
53-
// });
54-
// return Array.from(deduped.values());
55-
// }
56-
30+
import {nip11ValidationErrorCount} from "$stores/nip11-validations";
31+
32+
$: pathname = $page.url
33+
34+
let currentRelay: string = '';
35+
let loading: boolean = true;
36+
37+
const relayUrl = generateRelayUrlFromPath() as string;
38+
39+
// const nip11Ready: Writable<boolean> = writable(false);
40+
// const operatorMetaReady: Writable<boolean> = writable(false);
41+
// const monitors: Writable<Monitor[]> = writable([]);
42+
43+
// const liveness: Writable<null | 'online' | 'offline' | 'dead' | 'unknown'> = writable(null);
44+
// const oldChecks: Writable<Nip66CheckEvent[]> = writable([]);
45+
46+
// const nocapService: Writable<NocapService> = writable(new NocapService());
47+
48+
// const deduplicateEvents = ( events: NostrEvent[] ) => {
49+
// const deduped = new Map();
50+
// events.forEach( event => {
51+
// const key = eventKey(event);
52+
// deduped.set(key, event);
53+
// });
54+
// return Array.from(deduped.values());
55+
// }
56+
57+
58+
// const relayChecks: Readable<Nip66CheckEvent[]> = derived([oldChecks, relayCheckAggregates], ([$oldChecks]) => {
59+
// const checks = relayLivenessChecks(relayUrl)
60+
// if($oldChecks.length) {
61+
// return deduplicateEvents([...$oldChecks, ...checks]);
62+
// }
63+
// return relayLivenessChecks(relayUrl);
64+
// })
65+
let relayAggregate: Readable<any | undefined> = readable(undefined)
66+
let nip11: Readable<Nip11 | undefined> = readable(undefined);
67+
let operatorPubkey: Readable<string | undefined> = readable(undefined);
68+
let operatorProfile: Readable<PubkeyProfile | undefined> = readable(undefined);
69+
let operatorRelays: Readable<string[] | undefined> = readable(undefined);
70+
71+
const sidebarNavItems = derived(nip11ValidationErrorCount, $nip11ValidationErrorCount => {
72+
return [
73+
{
74+
title: "Overview",
75+
href: `/relays/${generateRelayPathFromUrl(relayUrl)}`,
76+
},
77+
{
78+
title: "Insights",
79+
href: `/relays/${generateRelayPathFromUrl(relayUrl)}/insights`,
80+
},
81+
{
82+
title: "Operator",
83+
href: `/relays/${generateRelayPathFromUrl(relayUrl)}/operator`,
84+
},
85+
{
86+
title: "Feed",
87+
href: `/relays/${generateRelayPathFromUrl(relayUrl)}/feed`,
88+
},
89+
{
90+
title: "Checks",
91+
href: `/relays/${generateRelayPathFromUrl(relayUrl)}/checks`
92+
},
93+
{
94+
title: "NIP-11",
95+
href: `/relays/${generateRelayPathFromUrl(relayUrl)}/nip-11`,
96+
errorCount: $nip11ValidationErrorCount.get(relayUrl)
97+
},
98+
{
99+
title: "Audits",
100+
href: `/relays/${generateRelayPathFromUrl(relayUrl)}/audits`
101+
},
102+
];
103+
});
104+
105+
let hasSynced = false;
106+
107+
const sync = async () => {
108+
if(hasSynced) return;
109+
await $route66?.ready();
110+
await $dataRegister.require(
111+
[
112+
'sync:cache',
113+
'sync:relay:checks',
114+
'sync:relay:nip11',
115+
'sync:relay:operator',
116+
'sync:relay:live'
117+
],
118+
{
119+
'sync:relay:checks': [ relayUrl ],
120+
'sync:relay:nip11': [ relayUrl ],
121+
'sync:relay:operator': [ relayUrl ],
122+
'sync:relay:live': [ relayUrl ]
123+
}
124+
);
125+
hasSynced = true;
126+
}
127+
128+
const mount = () => {
129+
doLiveSync.set(false);
130+
if (currentRelay === relayUrl) return;
57131
58-
// const relayChecks: Readable<Nip66CheckEvent[]> = derived([oldChecks, relayCheckAggregates], ([$oldChecks]) => {
59-
// const checks = relayLivenessChecks(relayUrl)
60-
// if($oldChecks.length) {
61-
// return deduplicateEvents([...$oldChecks, ...checks]);
62-
// }
63-
// return relayLivenessChecks(relayUrl);
64-
// })
65-
let relayAggregate: Readable<any | undefined> = readable(undefined)
66-
let nip11: Readable<Nip11 | undefined> = readable(undefined);
67-
let operatorPubkey: Readable<string | undefined> = readable(undefined);
68-
let operatorProfile: Readable<PubkeyProfile | undefined> = readable(undefined);
69-
let operatorRelays: Readable<string[] | undefined> = readable(undefined);
70-
71-
const sidebarNavItems = [
72-
{
73-
title: "Overview",
74-
href: `/relays/${generateRelayPathFromUrl(relayUrl)}`,
75-
},
76-
{
77-
title: "Insights",
78-
href: `/relays/${generateRelayPathFromUrl(relayUrl)}/insights`,
79-
},
80-
{
81-
title: "Operator",
82-
href: `/relays/${generateRelayPathFromUrl(relayUrl)}/operator`,
83-
},
84-
{
85-
title: "Feed",
86-
href: `/relays/${generateRelayPathFromUrl(relayUrl)}/feed`,
87-
},
88-
{
89-
title: "Checks",
90-
href: `/relays/${generateRelayPathFromUrl(relayUrl)}/checks`,
91-
},
92-
{
93-
title: "NIP-11",
94-
href: `/relays/${generateRelayPathFromUrl(relayUrl)}/nip-11`,
95-
},
96-
{
97-
title: "Audits",
98-
href: `/relays/${generateRelayPathFromUrl(relayUrl)}/audits`
99-
},
100-
];
101-
102-
let hasSynced = false;
103-
104-
const sync = async () => {
105-
if(hasSynced) return;
106-
await $route66?.ready();
107-
await $dataRegister.require(
108-
[
109-
'sync:cache',
110-
'sync:relay:checks',
111-
'sync:relay:nip11',
112-
'sync:relay:operator',
113-
'sync:relay:live'
114-
],
115-
{
116-
'sync:relay:checks': [ relayUrl ],
117-
'sync:relay:nip11': [ relayUrl ],
118-
'sync:relay:operator': [ relayUrl ],
119-
'sync:relay:live': [ relayUrl ]
120-
}
121-
);
122-
hasSynced = true;
123-
}
124-
125-
const mount = () => {
126-
doLiveSync.set(false);
127-
if (currentRelay === relayUrl) return;
128-
129-
let resume: LiveSyncResumer;
130-
pauseLiveSync().then( (r) => resume = r);
131-
sync().then( () => {
132-
nip11 = relayNip11$(relayUrl);
133-
operatorPubkey = relayOperatorPubkey$(relayUrl);
134-
if($operatorPubkey) {
135-
operatorProfile = operatorProfile$($operatorPubkey);
136-
operatorRelays = operatorRelays$($operatorPubkey);
137-
}
138-
relayAggregate = relayLivenessAggregate$(relayUrl);
139-
loading = false
140-
})
141-
return () => {
142-
stopRelayLiveSync();
143-
resume();
132+
let resume: LiveSyncResumer;
133+
pauseLiveSync().then( (r) => resume = r);
134+
sync().then( () => {
135+
nip11 = relayNip11$(relayUrl);
136+
operatorPubkey = relayOperatorPubkey$(relayUrl);
137+
if($operatorPubkey) {
138+
operatorProfile = operatorProfile$($operatorPubkey);
139+
operatorRelays = operatorRelays$($operatorPubkey);
144140
}
145-
};
146-
147-
relayNip11$
148-
149-
const destroy = () => {
150-
if (currentRelay === relayUrl) return;
151-
loading = true;
152-
doLiveSync.set(true);
153-
// currentRelay = '';
154-
// monitors.set([]);
155-
// nip11Ready.set(false);
156-
// operatorMetaReady.set(false);
157-
// liveness.set(null);
141+
relayAggregate = relayLivenessAggregate$(relayUrl);
142+
loading = false
143+
})
144+
return () => {
145+
stopRelayLiveSync();
146+
resume();
147+
}
158148
};
159149
160-
onMount(mount);
161-
onDestroy(destroy);
150+
relayNip11$
162151
163-
$: description = $nip11?.description || null;
164-
$: banner = $nip11?.banner || null;
165-
$: icon = $nip11?.icon || null;4
166-
167-
// $: relayData = {
168-
// url: relayUrl,
169-
// operator: {
170-
// pubkey: $operatorPubkey,
171-
// profile: $operatorProfile,
172-
// relays: $operatorRelays
173-
// }
174-
// }
175-
176-
// setContext('relayUrl', relayUrl);
152+
const destroy = () => {
153+
if (currentRelay === relayUrl) return;
154+
loading = true;
155+
doLiveSync.set(true);
156+
// currentRelay = '';
157+
// monitors.set([]);
158+
// nip11Ready.set(false);
159+
// operatorMetaReady.set(false);
160+
// liveness.set(null);
161+
};
162+
163+
onMount(mount);
164+
onDestroy(destroy);
165+
166+
$: description = $nip11?.description || null;
167+
$: banner = $nip11?.banner || null;
168+
$: icon = $nip11?.icon || null;4
169+
170+
// $: relayData = {
171+
// url: relayUrl,
172+
// operator: {
173+
// pubkey: $operatorPubkey,
174+
// profile: $operatorProfile,
175+
// relays: $operatorRelays
176+
// }
177+
// }
178+
179+
// setContext('relayUrl', relayUrl);
177180
</script>
178181

179182
<PageHeader

apps/gui/src/routes/relays/software/[softwareKey]/+page.svelte

+2-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@
6060
returnResults: true
6161
}
6262
let results = await route66.adapters?.websocketAdapter?.subscribe({relays, filters, options});
63-
results = results.map((ev: IEvent) => new NostrEvent(ev))
64-
if(results.length) {
63+
if(results?.length) {
64+
results = results.map((ev: IEvent) => new NostrEvent(ev))
6565
wiki.set(new NostrEvent(results?.[0]));
6666
}
6767

0 commit comments

Comments
 (0)