fix: relay-worker insert replacable events
This commit is contained in:
@ -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]);
|
||||
|
@ -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);
|
||||
|
@ -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 >
|
||||
);
|
||||
}
|
||||
|
@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user