···11-import { createSignal, onMount, For, Show } from "solid-js";
22-import { deleteStoredSession, getSession, OAuthUserAgent } from "@atcute/oauth-browser-client";
33-import { agent, Login, retrieveSession, setAgent } from "./login.jsx";
11+import { Client, CredentialManager } from "@atcute/client";
42import { Did } from "@atcute/lexicons";
55-import { resolveDidDoc } from "../utils/api.js";
33+import { deleteStoredSession, getSession, OAuthUserAgent } from "@atcute/oauth-browser-client";
44+import { A } from "@solidjs/router";
55+import { createSignal, For, onMount, Show } from "solid-js";
66import { createStore } from "solid-js/store";
77-import { Client, CredentialManager } from "@atcute/client";
77+import { resolveDidDoc } from "../utils/api.js";
88+import { agent, Login, retrieveSession, setAgent } from "./login.jsx";
89import { Modal } from "./modal.jsx";
99-import { A } from "@solidjs/router";
10101111const AccountManager = () => {
1212 const [openManager, setOpenManager] = createSignal(false);
+2-2
src/components/backlinks.tsx
···11-import { createSignal, onMount, Show, For, createResource } from "solid-js";
22-import { getRecordBacklinks, getDidBacklinks, getAllBacklinks } from "../utils/api.js";
31import * as TID from "@atcute/tid";
22+import { createResource, createSignal, For, onMount, Show } from "solid-js";
33+import { getAllBacklinks, getDidBacklinks, getRecordBacklinks } from "../utils/api.js";
44import { localDateFromTimestamp } from "../utils/date.js";
55import { Button } from "./button.jsx";
66
+8-8
src/components/create.tsx
···11-import { createSignal, Show } from "solid-js";
21import { Client } from "@atcute/client";
33-import { agent } from "../components/login.jsx";
44-import { Editor, editorView } from "../components/editor.jsx";
55-import Tooltip from "./tooltip.jsx";
66-import { useNavigate, useParams } from "@solidjs/router";
72import { remove } from "@mary/exif-rm";
88-import { TextInput } from "./text-input.jsx";
99-import { Modal } from "./modal.jsx";
1010-import { Button } from "./button.jsx";
33+import { useNavigate, useParams } from "@solidjs/router";
44+import { createSignal, Show } from "solid-js";
55+import { Editor, editorView } from "../components/editor.jsx";
66+import { agent } from "../components/login.jsx";
117import { setNotif } from "../layout.jsx";
88+import { Button } from "./button.jsx";
99+import { Modal } from "./modal.jsx";
1010+import { TextInput } from "./text-input.jsx";
1111+import Tooltip from "./tooltip.jsx";
12121313export const RecordEditor = (props: { create: boolean; record?: any; refetch?: any }) => {
1414 const navigate = useNavigate();
+5-5
src/components/editor.tsx
···11-import { onCleanup, onMount } from "solid-js";
22-import { basicSetup, EditorView } from "codemirror";
11+import { indentWithTab } from "@codemirror/commands";
32import { json, jsonParseLinter } from "@codemirror/lang-json";
43import { linter } from "@codemirror/lint";
55-import { basicLight } from "@fsegurai/codemirror-theme-basic-light";
66-import { basicDark } from "@fsegurai/codemirror-theme-basic-dark";
74import { Compartment } from "@codemirror/state";
88-import { indentWithTab } from "@codemirror/commands";
95import { keymap } from "@codemirror/view";
66+import { basicDark } from "@fsegurai/codemirror-theme-basic-dark";
77+import { basicLight } from "@fsegurai/codemirror-theme-basic-light";
88+import { basicSetup, EditorView } from "codemirror";
99+import { onCleanup, onMount } from "solid-js";
10101111export let editorView: EditorView;
1212
+3-3
src/components/json.tsx
···11-import VideoPlayer from "./video-player";
11+import { A } from "@solidjs/router";
22import { createEffect, createSignal, For, Show } from "solid-js";
33-import { A } from "@solidjs/router";
33+import { hideMedia } from "../views/settings";
44import { pds } from "./navbar";
55import Tooltip from "./tooltip";
66-import { hideMedia } from "../views/settings";
66+import VideoPlayer from "./video-player";
7788interface AtBlob {
99 $type: string;
+3-3
src/components/login.tsx
···11-import { createSignal } from "solid-js";
11+import { Did } from "@atcute/lexicons";
22+import { isHandle } from "@atcute/lexicons/syntax";
23import {
34 configureOAuth,
45 createAuthorizationUrl,
···1011 resolveFromService,
1112 type Session,
1213} from "@atcute/oauth-browser-client";
1313-import { Did } from "@atcute/lexicons";
1414-import { isHandle } from "@atcute/lexicons/syntax";
1414+import { createSignal } from "solid-js";
1515import { TextInput } from "./text-input";
16161717configureOAuth({
+2-2
src/components/navbar.tsx
···11+import { Did, Handle } from "@atcute/lexicons";
12import { A, Params, useLocation } from "@solidjs/router";
22-import Tooltip from "./tooltip";
33import { createEffect, createSignal, onMount, Show } from "solid-js";
44import { didDocCache, labelerCache, validateHandle } from "../utils/api";
55-import { Did, Handle } from "@atcute/lexicons";
65import { addToClipboard } from "../utils/copy";
66+import Tooltip from "./tooltip";
7788export const [pds, setPDS] = createSignal<string>();
99export const [cid, setCID] = createSignal<string>();
+2-2
src/components/search.tsx
···11-import { resolveHandle } from "../utils/api.js";
11+import { Handle } from "@atcute/lexicons";
22import { useNavigate } from "@solidjs/router";
33import { createSignal, Show } from "solid-js";
44-import { Handle } from "@atcute/lexicons";
44+import { resolveHandle } from "../utils/api.js";
5566const Search = () => {
77 const navigate = useNavigate();
+6-6
src/index.tsx
···11/* @refresh reload */
22+import { Route, Router } from "@solidjs/router";
23import { render } from "solid-js/web";
33-import "./styles/index.css";
44-import { Route, Router } from "@solidjs/router";
54import { Layout } from "./layout.tsx";
66-import { Home } from "./views/home.tsx";
77-import { PdsView } from "./views/pds.tsx";
88-import { RepoView } from "./views/repo.tsx";
55+import "./styles/index.css";
96import { CollectionView } from "./views/collection.tsx";
77+import { Home } from "./views/home.tsx";
108import { LabelView } from "./views/labels.tsx";
1111-import { StreamView } from "./views/stream.tsx";
99+import { PdsView } from "./views/pds.tsx";
1210import { RecordView } from "./views/record.tsx";
1111+import { RepoView } from "./views/repo.tsx";
1312import { Settings } from "./views/settings.tsx";
1313+import { StreamView } from "./views/stream.tsx";
14141515render(
1616 () => (
+6-6
src/layout.tsx
···11-import { createEffect, createSignal, ErrorBoundary, onMount, Show, Suspense } from "solid-js";
11+import { Handle } from "@atcute/lexicons";
22+import { Meta, MetaProvider } from "@solidjs/meta";
23import { A, RouteSectionProps, useLocation, useNavigate } from "@solidjs/router";
33-import { agent } from "./components/login.jsx";
44+import { createEffect, createSignal, ErrorBoundary, onMount, Show, Suspense } from "solid-js";
55+import { AccountManager } from "./components/account.jsx";
46import { RecordEditor } from "./components/create.jsx";
77+import { agent } from "./components/login.jsx";
58import { NavBar } from "./components/navbar.jsx";
69import { Search } from "./components/search.jsx";
77-import { AccountManager } from "./components/account.jsx";
88-import { resolveHandle } from "./utils/api.js";
99-import { Meta, MetaProvider } from "@solidjs/meta";
1010-import { Handle } from "@atcute/lexicons";
1110import { themeEvent, ThemeSelection } from "./components/theme.jsx";
1111+import { resolveHandle } from "./utils/api.js";
12121313export const [notif, setNotif] = createSignal<{
1414 show: boolean;
+3-5
src/utils/api.ts
···11-import { createStore } from "solid-js/store";
22-31import "@atcute/atproto";
42import {
53 type DidDocument,
···1816} from "@atcute/identity-resolver";
1917import { Did, Handle } from "@atcute/lexicons";
2018import { isHandle } from "@atcute/lexicons/syntax";
2121-1919+import { createStore } from "solid-js/store";
2220import { setPDS } from "../components/navbar";
23212422const didDocumentResolver = new CompositeDidDocumentResolver({
···167165 getPDS,
168166 getRecordBacklinks,
169167 labelerCache,
170170- resolveHandle,
171168 resolveDidDoc,
172172- validateHandle,
169169+ resolveHandle,
173170 resolvePDS,
171171+ validateHandle,
174172 type LinkData,
175173};
···11-import { Client } from "@atcute/client";
22-31import * as CAR from "@atcute/car";
42import { CarReader } from "@atcute/car/v4";
53import * as CBOR from "@atcute/cbor";
64import * as CID from "@atcute/cid";
55+import { Client } from "@atcute/client";
76import { type FoundPublicKey, getPublicKeyFromDidController, verifySig } from "@atcute/crypto";
87import { type DidDocument, getAtprotoVerificationMaterial } from "@atcute/identity";
98import { Did } from "@atcute/lexicons";
+1-1
src/views/blob.tsx
···11-import { createResource, createSignal, For, Show } from "solid-js";
21import { Client, CredentialManager } from "@atcute/client";
22+import { createResource, createSignal, For, Show } from "solid-js";
33import { Button } from "../components/button";
4455const LIMIT = 1000;
+10-10
src/views/collection.tsx
···11-import { createEffect, createResource, createSignal, For, Show, untrack } from "solid-js";
22-import { CredentialManager, Client } from "@atcute/client";
33-import { A, useParams } from "@solidjs/router";
44-import { resolvePDS } from "../utils/api.js";
11+import { ComAtprotoRepoApplyWrites, ComAtprotoRepoGetRecord } from "@atcute/atproto";
22+import { Client, CredentialManager } from "@atcute/client";
33+import { $type, ActorIdentifier, InferXRPCBodyOutput } from "@atcute/lexicons";
54import * as TID from "@atcute/tid";
55+import { A, useParams } from "@solidjs/router";
66+import { createEffect, createResource, createSignal, For, Show, untrack } from "solid-js";
77+import { createStore } from "solid-js/store";
88+import { Button } from "../components/button.jsx";
69import { JSONType, JSONValue } from "../components/json.jsx";
710import { agent } from "../components/login.jsx";
88-import { createStore } from "solid-js/store";
99-import Tooltip from "../components/tooltip.jsx";
1010-import { localDateFromTimestamp } from "../utils/date.js";
1111-import { $type, ActorIdentifier, InferXRPCBodyOutput } from "@atcute/lexicons";
1212-import { ComAtprotoRepoApplyWrites, ComAtprotoRepoGetRecord } from "@atcute/atproto";
1311import { TextInput } from "../components/text-input.jsx";
1414-import { Button } from "../components/button.jsx";
1212+import Tooltip from "../components/tooltip.jsx";
1513import { setNotif } from "../layout.jsx";
1414+import { resolvePDS } from "../utils/api.js";
1515+import { localDateFromTimestamp } from "../utils/date.js";
16161717interface AtprotoRecord {
1818 rkey: string;
+4-4
src/views/labels.tsx
···11-import { createResource, createSignal, For, onMount, Show } from "solid-js";
11+import { ComAtprotoLabelDefs } from "@atcute/atproto";
22import { Client, CredentialManager } from "@atcute/client";
33import { A, useParams, useSearchParams } from "@solidjs/router";
44+import { createResource, createSignal, For, onMount, Show } from "solid-js";
55+import { Button } from "../components/button.jsx";
66+import { TextInput } from "../components/text-input.jsx";
47import { labelerCache, resolvePDS } from "../utils/api.js";
58import { localDateFromTimestamp } from "../utils/date.js";
66-import { ComAtprotoLabelDefs } from "@atcute/atproto";
77-import { TextInput } from "../components/text-input.jsx";
88-import { Button } from "../components/button.jsx";
991010const LabelView = () => {
1111 const params = useParams();
+5-5
src/views/pds.tsx
···11-import { createSignal, For, Show, createResource } from "solid-js";
11+import { ComAtprotoServerDescribeServer, ComAtprotoSyncListRepos } from "@atcute/atproto";
22import { Client, CredentialManager } from "@atcute/client";
33+import { InferXRPCBodyOutput } from "@atcute/lexicons";
44+import * as TID from "@atcute/tid";
35import { A, useParams } from "@solidjs/router";
66+import { createResource, createSignal, For, Show } from "solid-js";
77+import { Button } from "../components/button";
48import { setPDS } from "../components/navbar";
59import Tooltip from "../components/tooltip";
66-import { InferXRPCBodyOutput } from "@atcute/lexicons";
77-import { ComAtprotoServerDescribeServer, ComAtprotoSyncListRepos } from "@atcute/atproto";
88-import * as TID from "@atcute/tid";
910import { localDateFromTimestamp } from "../utils/date";
1010-import { Button } from "../components/button";
11111212const LIMIT = 1000;
1313
+10-13
src/views/record.tsx
···11-import { CredentialManager, Client } from "@atcute/client";
22-11+import { Client, CredentialManager } from "@atcute/client";
22+import { lexiconDoc } from "@atcute/lexicon-doc";
33+import { ActorIdentifier, is } from "@atcute/lexicons";
34import { A, useLocation, useNavigate, useParams } from "@solidjs/router";
45import { createResource, createSignal, ErrorBoundary, Show, Suspense } from "solid-js";
55-66import { Backlinks } from "../components/backlinks.jsx";
77+import { Button } from "../components/button.jsx";
88+import { RecordEditor } from "../components/create.jsx";
79import { JSONValue } from "../components/json.jsx";
810import { agent } from "../components/login.jsx";
1111+import { Modal } from "../components/modal.jsx";
912import { pds, setCID, setValidRecord, setValidSchema, validRecord } from "../components/navbar.jsx";
1010-1313+import Tooltip from "../components/tooltip.jsx";
1414+import { setNotif } from "../layout.jsx";
1115import { didDocCache, resolvePDS } from "../utils/api.js";
1616+import { addToClipboard } from "../utils/copy.js";
1217import { AtUri, uriTemplates } from "../utils/templates.js";
1313-import { verifyRecord } from "../utils/verify.js";
1414-import { ActorIdentifier, is } from "@atcute/lexicons";
1515-import { lexiconDoc } from "@atcute/lexicon-doc";
1618import { lexicons } from "../utils/types/lexicons.js";
1717-import { RecordEditor } from "../components/create.jsx";
1818-import { addToClipboard } from "../utils/copy.js";
1919-import Tooltip from "../components/tooltip.jsx";
2020-import { Modal } from "../components/modal.jsx";
2121-import { Button } from "../components/button.jsx";
2222-import { setNotif } from "../layout.jsx";
1919+import { verifyRecord } from "../utils/verify.js";
23202421export const RecordView = () => {
2522 const location = useLocation();
+12-12
src/views/repo.tsx
···11-import { createSignal, For, Show, createResource, Suspense, ErrorBoundary } from "solid-js";
21import { Client, CredentialManager } from "@atcute/client";
33-import { A, useLocation, useNavigate, useParams } from "@solidjs/router";
44-import { didDocCache, resolvePDS } from "../utils/api.js";
55-import { Backlinks } from "../components/backlinks.jsx";
66-import { ActorIdentifier } from "@atcute/lexicons";
77-import { DidDocument } from "@atcute/identity";
88-import { BlobView } from "./blob.jsx";
99-import { TextInput } from "../components/text-input.jsx";
1010-import Tooltip from "../components/tooltip.jsx";
22+import { parsePublicMultikey } from "@atcute/crypto";
113import {
124 CompatibleOperationOrTombstone,
135 defs,
146 IndexedEntry,
157 processIndexedEntryLog,
168} from "@atcute/did-plc";
1717-import { createOperationHistory, DiffEntry, groupBy } from "../utils/plc-logs.js";
1818-import { localDateFromTimestamp } from "../utils/date.js";
99+import { DidDocument } from "@atcute/identity";
1010+import { ActorIdentifier } from "@atcute/lexicons";
1111+import { A, useLocation, useNavigate, useParams } from "@solidjs/router";
1212+import { createResource, createSignal, ErrorBoundary, For, Show, Suspense } from "solid-js";
1313+import { Backlinks } from "../components/backlinks.jsx";
1914import { Button } from "../components/button.jsx";
2020-import { parsePublicMultikey } from "@atcute/crypto";
1515+import { TextInput } from "../components/text-input.jsx";
1616+import Tooltip from "../components/tooltip.jsx";
1717+import { didDocCache, resolvePDS } from "../utils/api.js";
1818+import { localDateFromTimestamp } from "../utils/date.js";
1919+import { createOperationHistory, DiffEntry, groupBy } from "../utils/plc-logs.js";
2020+import { BlobView } from "./blob.jsx";
21212222type Tab = "collections" | "backlinks" | "identity" | "blobs";
2323type PlcEvent = "handle" | "rotation_key" | "service" | "verification_method";
+4-4
src/views/stream.tsx
···11-import { createSignal, For, Show, onCleanup, onMount } from "solid-js";
22-import { JSONValue } from "../components/json";
33-import { A, useLocation, useSearchParams } from "@solidjs/router";
41import { Firehose } from "@skyware/firehose";
55-import { TextInput } from "../components/text-input";
22+import { A, useLocation, useSearchParams } from "@solidjs/router";
33+import { createSignal, For, onCleanup, onMount, Show } from "solid-js";
64import { Button } from "../components/button";
55+import { JSONValue } from "../components/json";
66+import { TextInput } from "../components/text-input";
7788const LIMIT = 25;
99type Parameter = { name: string; param: string | string[] | undefined };
+1-1
vite.config.ts
···11+import tailwindcss from "@tailwindcss/vite";
12import { defineConfig } from "vite";
23import solidPlugin from "vite-plugin-solid";
34import metadata from "./public/oauth-client-metadata.json";
44-import tailwindcss from "@tailwindcss/vite";
5566const SERVER_HOST = "127.0.0.1";
77const SERVER_PORT = 13213;