atproto explorer

move record verification outside resource

+16 -9
+16 -9
src/views/record.tsx
··· 1 1 import { Client, CredentialManager } from "@atcute/client"; 2 2 import { lexiconDoc } from "@atcute/lexicon-doc"; 3 - import { ActorIdentifier, is } from "@atcute/lexicons"; 3 + import { ActorIdentifier, is, ResourceUri } from "@atcute/lexicons"; 4 4 import { A, useLocation, useNavigate, useParams } from "@solidjs/router"; 5 5 import { createResource, createSignal, ErrorBoundary, Show, Suspense } from "solid-js"; 6 6 import { Backlinks } from "../components/backlinks.jsx"; ··· 50 50 } 51 51 setCID(res.data.cid); 52 52 setExternalLink(checkUri(res.data.uri, res.data.value)); 53 + verify(res.data); 53 54 55 + return res.data; 56 + }; 57 + 58 + const verify = async (record: { 59 + uri: ResourceUri; 60 + value: Record<string, unknown>; 61 + cid?: string | undefined; 62 + }) => { 54 63 try { 55 64 if (params.collection in lexicons) { 56 - if (is(lexicons[params.collection], res.data.value)) setValidSchema(true); 65 + if (is(lexicons[params.collection], record.value)) setValidSchema(true); 57 66 else setValidSchema(false); 58 67 } else if (params.collection === "com.atproto.lexicon.schema") { 59 68 try { 60 - lexiconDoc.parse(res.data.value, { mode: "passthrough" }); 69 + lexiconDoc.parse(record.value, { mode: "passthrough" }); 61 70 setValidSchema(true); 62 71 } catch (e) { 63 72 console.error(e); ··· 66 75 } 67 76 const { errors } = await verifyRecord({ 68 77 rpc: rpc, 69 - uri: res.data.uri, 70 - cid: res.data.cid!, 71 - record: res.data.value, 72 - didDoc: didDocCache[res.data.uri.split("/")[2]], 78 + uri: record.uri, 79 + cid: record.cid!, 80 + record: record.value, 81 + didDoc: didDocCache[record.uri.split("/")[2]], 73 82 }); 74 83 75 84 if (errors.length > 0) { ··· 81 90 console.error(err); 82 91 setValidRecord(false); 83 92 } 84 - 85 - return res.data; 86 93 }; 87 94 88 95 const [record, { refetch }] = createResource(fetchRecord);