fix: relay-worker insert replacable events

This commit is contained in:
2024-01-18 16:00:20 +00:00
parent e3f8d48ddb
commit f147edd03c
8 changed files with 155 additions and 91 deletions

View File

@ -41,11 +41,7 @@ export default function useLoginFeed() {
const { publicKey: pubKey, follows } = login;
const { publisher, system } = useEventPublisher();
const followLists = useFollowsContactListView();
useEffect(() => {
followLists.forEach(e => socialGraphInstance.handleEvent(e));
}, followLists);
useFollowsContactListView();
useEffect(() => {
system.checkSigs = login.appData.item.preferences.checkSigs;
}, [login]);

View File

@ -36,13 +36,13 @@ export function useWorkerRelayView(id: string, filters: Array<ReqFilter>, leaveO
...f,
limit: undefined,
until: undefined,
since: latest.results?.at(i)?.created_at ?? (maxWindow ? unixNow() - maxWindow : undefined),
since: latest.result?.at(i)?.created_at ?? (maxWindow ? unixNow() - maxWindow : undefined),
}))
.forEach(f => rb.withBareFilter(f));
setRb(rb);
});
Relay.req({ id, filters, leaveOpen }).then(res => {
setEvents(res.results);
setEvents(res.result);
if (res.port) {
res.port.addEventListener("message", ev => {
const evs = ev.data as Array<NostrEvent>;
@ -82,7 +82,7 @@ export function useWorkerRelayViewCount(id: string, filters: Array<ReqFilter>, m
...f,
limit: undefined,
until: undefined,
since: latest.results?.at(i)?.created_at ?? (maxWindow ? unixNow() - maxWindow : undefined),
since: latest.result?.at(i)?.created_at ?? (maxWindow ? unixNow() - maxWindow : undefined),
}))
.forEach(f => rb.withBareFilter(f));
setRb(rb);

View File

@ -74,26 +74,34 @@ function RelayCacheStats() {
</tr>
</thead>
<tbody>
{Object.entries(counts)
.sort(([, a], [, b]) => (a > b ? -1 : 1))
.map(([k, v]) => {
return (
<tr key={k}>
<td>{k}</td>
<td>
<FormattedNumber value={v} />
</td>
</tr>
);
})}
{Object.entries(counts).sort(([, a], [, b]) => a > b ? -1 : 1).map(([k, v]) => {
return (
<tr key={k}>
<td><FormattedNumber value={Number(k)} /></td>
<td><FormattedNumber value={v} /></td>
</tr>
);
})}
</tbody>
</table>
</div>
<div>
<AsyncButton onClick={() => {}}>
<div className="flex flex-col gap-2">
<AsyncButton onClick={() => { }}>
<FormattedMessage defaultMessage="Clear" id="/GCoTA" />
</AsyncButton>
<AsyncButton onClick={async () => {
const data = await Relay.dump();
const url = URL.createObjectURL(new File([data], "snort.db", {
type: "application/octet-stream"
}));
const a = document.createElement("a");
a.href = url;
a.download = "snort.db";
a.click();
}}>
<FormattedMessage defaultMessage="Dump" id="f2CAxA" />
</AsyncButton>
</div>
</div>
</div >
);
}

View File

@ -1,5 +1,4 @@
import { removeUndefined, throwIfOffline } from "@snort/shared";
import LRUSet from "@snort/shared/src/LRUSet";
import { mapEventToProfile, NostrEvent, NostrSystem, ProfileLoaderService, socialGraphInstance } from "@snort/system";
import { WorkerRelayInterface } from "@snort/worker-relay";
import WorkerRelayPath from "@snort/worker-relay/dist/worker?worker&url";
@ -63,28 +62,13 @@ export async function fetchProfile(key: string) {
}
export const Relay = new WorkerRelayInterface(WorkerRelayPath);
let relayInitStarted = false;
export async function initRelayWorker() {
if (relayInitStarted) return;
relayInitStarted = true;
try {
if (await Relay.init()) {
if (await Relay.open()) {
await Relay.migrate();
const seen = new LRUSet<string>(100);
System.on("event", async (_, ev) => {
if (seen.has(ev.id)) return;
seen.add(ev.id);
await Relay.event(ev);
});
System.on("request", async (subId, f) => {
const evs = await Relay.req(["REQ", "", ...f.filters]);
evs.forEach(ev => {
seen.add(ev.id);
queueMicrotask(() => {
System.HandleEvent(subId, { ...ev, relays: [] });
});
});
System.on("event", (_, ev) => {
Relay.event(ev);
});
}
}