diff --git a/packages/app/src/Pages/settings/Cache.tsx b/packages/app/src/Pages/settings/Cache.tsx
index 032c16f3..ed415354 100644
--- a/packages/app/src/Pages/settings/Cache.tsx
+++ b/packages/app/src/Pages/settings/Cache.tsx
@@ -65,10 +65,17 @@ function RelayCacheStats() {
- {myEvents &&
-
- }} />
}
+ {myEvents && (
+
+ ,
+ }}
+ />
+
+ )}
@@ -99,7 +106,7 @@ function RelayCacheStats() {
-
{ }}>
+ {}}>
,
path: "follows-relay-health",
- }
+ },
],
},
{
-
title: ,
items: [
{
icon: "repost",
iconBg: "bg-blue-800",
message: ,
- path: "sync-account"
- }
- ]
- }
+ path: "sync-account",
+ },
+ ],
+ },
] as SettingsMenuItems;
export const ToolsPages = [
@@ -62,8 +61,8 @@ export const ToolsPages = [
},
{
path: "sync-account",
- element:
- }
+ element: ,
+ },
] as Array;
export function ToolsPage() {
diff --git a/packages/app/src/Pages/settings/tools/sync-account.tsx b/packages/app/src/Pages/settings/tools/sync-account.tsx
index 33e274c7..aa27b1e0 100644
--- a/packages/app/src/Pages/settings/tools/sync-account.tsx
+++ b/packages/app/src/Pages/settings/tools/sync-account.tsx
@@ -1,5 +1,5 @@
import { unwrap } from "@snort/shared";
-import { RangeSync, TaggedNostrEvent } from "@snort/system"
+import { RangeSync, TaggedNostrEvent } from "@snort/system";
import { SnortContext } from "@snort/system-react";
import { useContext, useState } from "react";
import { FormattedMessage, FormattedNumber } from "react-intl";
@@ -9,40 +9,56 @@ import useLogin from "@/Hooks/useLogin";
import { SearchRelays } from "@/Utils/Const";
export default function SyncAccountTool() {
- const system = useContext(SnortContext);
- const login = useLogin();
- const [scan, setScan] = useState();
- const [results, setResults] = useState>([]);
+ const system = useContext(SnortContext);
+ const login = useLogin();
+ const [scan, setScan] = useState();
+ const [results, setResults] = useState>([]);
- async function start() {
- const relays = Object.entries(login.relays.item).filter(([, v]) => v.write).map(([k,]) => k);
- const sync = new RangeSync(system);
- sync.on("event", evs => {
- setResults(r => [...r, ...evs]);
- });
- sync.on("scan", t => setScan(t));
- await sync.sync({
- authors: [unwrap(login.publicKey)],
- relays: [...relays, ...Object.keys(CONFIG.defaultRelays), ...SearchRelays]
- })
- }
- return <>
-
-
-
+ async function start() {
+ const relays = Object.entries(login.relays.item)
+ .filter(([, v]) => v.write)
+ .map(([k]) => k);
+ const sync = new RangeSync(system);
+ sync.on("event", evs => {
+ setResults(r => [...r, ...evs]);
+ });
+ sync.on("scan", t => setScan(t));
+ await sync.sync({
+ authors: [unwrap(login.publicKey)],
+ relays: [...relays, ...Object.keys(CONFIG.defaultRelays), ...SearchRelays],
+ });
+ }
+ return (
+ <>
+
+
+
- {results.length > 0 &&
-
- }} />
-
}
- {scan !== undefined &&
-
-
}
-
-
-
+ {results.length > 0 && (
+
+ ,
+ }}
+ />
+
+ )}
+ {scan !== undefined && (
+
+
+
+ )}
+
+
+
>
-}
\ No newline at end of file
+ );
+}
diff --git a/packages/app/src/Utils/Const.ts b/packages/app/src/Utils/Const.ts
index e92097d7..2b4c728c 100644
--- a/packages/app/src/Utils/Const.ts
+++ b/packages/app/src/Utils/Const.ts
@@ -31,11 +31,7 @@ export const SnortPubKey = "npub1sn0rtcjcf543gj4wsg7fa59s700d5ztys5ctj0g69g2x680
/**
* Default search relays
*/
-export const SearchRelays = [
- "wss://relay.nostr.band/",
- "wss://search.nos.today/",
- "wss://relay.noswhere.com/",
-];
+export const SearchRelays = ["wss://relay.nostr.band/", "wss://search.nos.today/", "wss://relay.noswhere.com/"];
export const DeveloperAccounts = [
"63fe6318dc58583cfe16810f86dd09e18bfd76aabc24a0081ce2856f330504ed", // kieran
diff --git a/packages/system/src/outbox/outbox-model.ts b/packages/system/src/outbox/outbox-model.ts
index 5e961f91..f1c25de5 100644
--- a/packages/system/src/outbox/outbox-model.ts
+++ b/packages/system/src/outbox/outbox-model.ts
@@ -62,7 +62,7 @@ export class OutboxModel extends BaseRequestRouter {
const topRelays = [...relayUserMap.entries()].sort(([, v], [, v1]) => v1.size - v.size);
if (missing.length > 0) {
- this.#log("No relay metadata found, outbox model will not work for %O", missing)
+ this.#log("No relay metadata found, outbox model will not work for %O", missing);
}
// - count keys per relay
// - pick n top relays
@@ -101,9 +101,11 @@ export class OutboxModel extends BaseRequestRouter {
return [filter];
}
- const topWriteRelays = this.pickTopRelays(unwrap(authors),
+ const topWriteRelays = this.pickTopRelays(
+ unwrap(authors),
pickN ?? DefaultPickNRelays,
- pattern === "inbox" ? "read" : "write");
+ pattern === "inbox" ? "read" : "write",
+ );
const pickedRelays = dedupe(topWriteRelays.flatMap(a => a.relays));
const picked = pickedRelays.map(a => {
@@ -111,7 +113,7 @@ export class OutboxModel extends BaseRequestRouter {
return {
...filter,
[key]: keysOnPickedRelay,
- relays: appendDedupe(filter.relays, [a])
+ relays: appendDedupe(filter.relays, [a]),
} as ReqFilter;
});
const noRelays = dedupe(topWriteRelays.filter(a => a.relays.length === 0).map(a => a.key));
@@ -175,7 +177,7 @@ export class OutboxModel extends BaseRequestRouter {
await this.updateRelayLists(recipients);
const relays = this.pickTopRelays(recipients, pickN ?? DefaultPickNRelays, "read");
const ret = removeUndefined(dedupe(relays.map(a => a.relays).flat()));
-
+
this.#log("Picked: pattern=%s, input=%O, output=%O", "inbox", ev, ret);
return ret;
}
diff --git a/packages/system/src/profile-cache.ts b/packages/system/src/profile-cache.ts
index fc13bb3e..4496948e 100644
--- a/packages/system/src/profile-cache.ts
+++ b/packages/system/src/profile-cache.ts
@@ -19,10 +19,7 @@ export class ProfileLoaderService extends BackgroundLoader {
override buildSub(missing: string[]): RequestBuilder {
const sub = new RequestBuilder(`profiles`);
- sub.withFilter()
- .kinds([EventKind.SetMetadata])
- .authors(missing)
- .relay(MetadataRelays);
+ sub.withFilter().kinds([EventKind.SetMetadata]).authors(missing).relay(MetadataRelays);
return sub;
}
diff --git a/packages/system/src/range-sync.ts b/packages/system/src/range-sync.ts
index d29a2c68..ecda6426 100644
--- a/packages/system/src/range-sync.ts
+++ b/packages/system/src/range-sync.ts
@@ -8,63 +8,63 @@ import { ReqFilter, RequestBuilder, SystemInterface, TaggedNostrEvent } from "."
const NostrBirthday: number = new Date(2021, 1, 1).getTime() / 1000;
interface RangeSyncEvents {
- event: (ev: Array) => void
- scan: (from: number) => void
+ event: (ev: Array) => void;
+ scan: (from: number) => void;
}
/**
* A simple time based sync for pulling lots of data from nostr
*/
export class RangeSync extends EventEmitter {
- #start: number = NostrBirthday;
- #windowSize: number = 60 * 60 * 12;
+ #start: number = NostrBirthday;
+ #windowSize: number = 60 * 60 * 12;
- constructor(readonly system: SystemInterface) {
- super();
+ constructor(readonly system: SystemInterface) {
+ super();
+ }
+
+ /**
+ * Set window size in seconds
+ */
+ setWindowSize(n: number) {
+ if (n < 60) {
+ throw new Error("Window size too small");
+ }
+ this.#windowSize = n;
+ }
+
+ /**
+ * Set start time for range sync
+ * @param n Unix timestamp
+ */
+ setStartPoint(n: number) {
+ if (n < NostrBirthday) {
+ throw new Error("Start point cannot be before nostr's birthday");
+ }
+ this.#start = n;
+ }
+
+ /**
+ * Request to sync with a given filter
+ */
+ async sync(filter: ReqFilter) {
+ if (filter.since !== undefined || filter.until !== undefined || filter.limit !== undefined) {
+ throw new Error("Filter must not contain since/until/limit");
}
- /**
- * Set window size in seconds
- */
- setWindowSize(n: number) {
- if (n < 60) {
- throw new Error("Window size too small");
- }
- this.#windowSize = n;
+ if (!this.system.requestRouter) {
+ throw new Error("RangeSync cannot work without request router!");
}
- /**
- * Set start time for range sync
- * @param n Unix timestamp
- */
- setStartPoint(n: number) {
- if (n < NostrBirthday) {
- throw new Error("Start point cannot be before nostr's birthday");
- }
- this.#start = n;
+ const now = unixNow();
+ for (let end = now; end > this.#start; end -= this.#windowSize) {
+ const rb = new RequestBuilder(`range-query:${end}`);
+ rb.withBareFilter(filter)
+ .since(end - this.#windowSize)
+ .until(end);
+ this.emit("scan", end);
+ const results = await this.system.Fetch(rb);
+ this.emit("event", results);
}
-
- /**
- * Request to sync with a given filter
- */
- async sync(filter: ReqFilter) {
- if (filter.since !== undefined || filter.until !== undefined || filter.limit !== undefined) {
- throw new Error("Filter must not contain since/until/limit");
- }
-
- if (!this.system.requestRouter) {
- throw new Error("RangeSync cannot work without request router!");
- }
-
- const now = unixNow();
- for (let end = now; end > this.#start; end -= this.#windowSize) {
- const rb = new RequestBuilder(`range-query:${end}`);
- rb.withBareFilter(filter)
- .since(end - this.#windowSize)
- .until(end);
- this.emit("scan", end);
- const results = await this.system.Fetch(rb);
- this.emit("event", results);
- }
- }
-}
\ No newline at end of file
+ }
+}