diff --git a/packages/app/src/Components/User/Debug.tsx b/packages/app/src/Components/User/Debug.tsx new file mode 100644 index 00000000..d788dd87 --- /dev/null +++ b/packages/app/src/Components/User/Debug.tsx @@ -0,0 +1,40 @@ +import { useUserProfile } from "@snort/system-react"; + +import { UserRelays } from "@/Cache"; +import { getRelayName } from "@/Utils"; + +export function UserDebug({ pubkey }: { pubkey: string }) { + const profile = useUserProfile(pubkey); + const relays = UserRelays.getFromCache(pubkey); + + return ( +
+
+ {Object.entries(profile ?? {}).map(([k, v]) => { + let vv =
{v}
; + + if (k === "loaded") vv =
{new Date(Number(v)).toISOString()}
; + if (k === "created") vv =
{new Date(Number(v) * 1000).toISOString()}
; + if (k === "npub" || k === "pubkey") return; + return ( +
+
{k}
+ {vv} +
+ ); + })} +
+
+
+
Relays Updated: {new Date(1000 * (relays?.created ?? 0)).toISOString()}
+ {relays?.relays.map(a => ( +
+
{getRelayName(a.url)}
+
{a.settings.read && <>R}
+
{a.settings.write && <>W}
+
+ ))} +
+
+ ); +} diff --git a/packages/app/src/Components/User/ProfileCard.tsx b/packages/app/src/Components/User/ProfileCard.tsx index 8fa0e6ea..eb53c240 100644 --- a/packages/app/src/Components/User/ProfileCard.tsx +++ b/packages/app/src/Components/User/ProfileCard.tsx @@ -8,6 +8,7 @@ import Text from "@/Components/Text/Text"; import FollowedBy from "@/Components/User/FollowedBy"; import useLogin from "../../Hooks/useLogin"; +import { UserDebug } from "./Debug"; import FollowButton from "./FollowButton"; import ProfileImage from "./ProfileImage"; import { UserWebsiteLink } from "./UserWebsiteLink"; @@ -26,6 +27,7 @@ export function ProfileCard({ const [showProfileMenu, setShowProfileMenu] = useState(false); const [t, setT] = useState>(); const { publicKey: myPublicKey } = useLogin(s => ({ publicKey: s.publicKey })); + const debug = Boolean(localStorage.getItem("debug")); useEffect(() => { if (show) { @@ -71,6 +73,7 @@ export function ProfileCard({ /> {myPublicKey && } + {debug && } ); diff --git a/packages/shared/src/feed-cache.ts b/packages/shared/src/feed-cache.ts index 40ff2146..1acc96d8 100644 --- a/packages/shared/src/feed-cache.ts +++ b/packages/shared/src/feed-cache.ts @@ -10,8 +10,9 @@ export interface KeyedHookFilter { fn: HookFn; } -export interface CacheEvents { +export interface CacheEvents { change: (keys: Array) => void; + update: (v: T) => void; } export type CachedTable = { @@ -41,12 +42,12 @@ export type CachedTable = { key(of: T): string; snapshot(): Array; search(q: string): Promise>; -} & EventEmitter; +} & EventEmitter>; /** * Dexie backed generic hookable store */ -export abstract class FeedCache extends EventEmitter implements CachedTable { +export abstract class FeedCache extends EventEmitter> implements CachedTable { readonly name: string; #snapshot: Array = []; protected log: ReturnType; diff --git a/packages/system/src/background-loader.ts b/packages/system/src/background-loader.ts index e15bc48d..292886d8 100644 --- a/packages/system/src/background-loader.ts +++ b/packages/system/src/background-loader.ts @@ -79,6 +79,9 @@ export abstract class 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); return sub; } }