QuickDID is a high-performance AT Protocol identity resolution service written in Rust. It provides handle-to-DID resolution with Redis-backed caching and queue processing.
52
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 224 lines 8.9 kB view raw
1<!doctype html> 2<html lang="en"> 3 4<head> 5 <meta charset="utf-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1"> 7 <meta name="color-scheme" content="light dark"> 8 9 <!-- Primary Meta Tags --> 10 <title>QuickDID - AT Protocol Identity Resolution Service</title> 11 <meta name="title" content="QuickDID - AT Protocol Identity Resolution Service"> 12 <meta name="description" content="High-performance handle-to-DID resolution service for the AT Protocol ecosystem. Resolve Bluesky and AT Protocol handles instantly."> 13 <meta name="keywords" content="ATProtocol, Bluesky, DID, handle resolution, decentralized identity, atproto"> 14 <meta name="author" content="Nick Gerakines"> 15 16 <!-- Open Graph / Facebook --> 17 <meta property="og:type" content="website"> 18 <meta property="og:url" content="https://quickdid.smokesignal.tools/"> 19 <meta property="og:title" content="QuickDID - AT Protocol Identity Resolution Service"> 20 <meta property="og:description" content="High-performance handle-to-DID resolution service for the AT Protocol ecosystem. Resolve Bluesky and AT Protocol handles instantly."> 21 <meta property="og:site_name" content="QuickDID"> 22 23 <!-- Twitter --> 24 <meta property="twitter:card" content="summary_large_image"> 25 <meta property="twitter:url" content="https://quickdid.smokesignal.tools/"> 26 <meta property="twitter:title" content="QuickDID - AT Protocol Identity Resolution Service"> 27 <meta property="twitter:description" content="High-performance handle-to-DID resolution service for the AT Protocol ecosystem. Resolve Bluesky and AT Protocol handles instantly."> 28 29 <!-- Additional Meta Tags --> 30 <meta name="robots" content="index, follow"> 31 <meta name="language" content="English"> 32 <meta name="theme-color" content="#1976d2"> 33 <link rel="canonical" href="https://quickdid.smokesignal.tools/"> 34 35 <!-- Stylesheet --> 36 <link rel="stylesheet" href="/css/pico.classless.green.min.css"> 37 <style> 38 .resolver-form { 39 margin: 2rem 0; 40 padding: 1.5rem; 41 background: var(--card-background-color); 42 border-radius: var(--border-radius); 43 border: 1px solid var(--muted-border-color); 44 } 45 46 .resolver-result { 47 margin-top: 1rem; 48 padding: 1.5rem; 49 background: var(--code-background-color); 50 border-radius: var(--border-radius); 51 border: 1px solid var(--muted-border-color); 52 } 53 54 .result-content { 55 background: transparent; 56 padding: 1rem; 57 overflow-x: auto; 58 white-space: pre-wrap; 59 word-break: break-word; 60 } 61 62 code { 63 padding: 0.25rem 0.5rem; 64 background: var(--code-background-color); 65 border-radius: var(--border-radius); 66 } 67 68 span { 69 display: inline-block; 70 padding: 0.25rem 0.5rem; 71 background: var(--primary); 72 color: var(--primary-inverse); 73 border-radius: var(--border-radius); 74 font-size: 0.875rem; 75 font-weight: bold; 76 margin-right: 0.5rem; 77 } 78 79 .endpoint-section { 80 margin-bottom: 3rem; 81 } 82 </style> 83</head> 84 85<body> 86 <header> 87 <hgroup> 88 <h1>QuickDID</h1> 89 <p>AT Protocol Identity Resolution Service</p> 90 </hgroup> 91 </header> 92 <main> 93 <p>QuickDID provides high-performance resolution services for the AT Protocol ecosystem.</p> 94 95 <h2>Available Endpoints</h2> 96 97 <section class="endpoint-section"> 98 <h3>GET /xrpc/com.atproto.identity.resolveHandle</h3> 99 <p>Resolve an AT Protocol handle to its DID</p> 100 <p>Parameters: <code>?handle={handle}</code></p> 101 102 <h4>Try It Out</h4> 103 <form id="handleResolveForm" class="resolver-form"> 104 <label for="handleInput"> 105 Enter an AT Protocol handle to resolve: 106 <input type="text" id="handleInput" name="handle" placeholder="e.g., alice.bsky.social" required> 107 </label> 108 <button type="submit">Resolve Handle</button> 109 </form> 110 111 <div id="handleResult" class="resolver-result" style="display: none;"> 112 <h4>Result</h4> 113 <pre id="handleResultContent" class="result-content"></pre> 114 </div> 115 116 <h4>Example Usage</h4> 117 <code>curl "https://quickdid.smokesignal.tools/xrpc/com.atproto.identity.resolveHandle?handle=ngerakines.me"</code> 118 </section> 119 120 <section class="endpoint-section"> 121 <h3>GET /xrpc/com.atproto.lexicon.resolveLexicon</h3> 122 <p>Resolve an AT Protocol lexicon (NSID) to its schema</p> 123 <p>Parameters: <code>?nsid={nsid}</code></p> 124 125 <h4>Try It Out</h4> 126 <form id="lexiconResolveForm" class="resolver-form"> 127 <label for="nsidInput"> 128 Enter an AT Protocol NSID to resolve: 129 <input type="text" id="nsidInput" name="nsid" placeholder="e.g., app.bsky.feed.post" required> 130 </label> 131 <button type="submit">Resolve Lexicon</button> 132 </form> 133 134 <div id="lexiconResult" class="resolver-result" style="display: none;"> 135 <h4>Result</h4> 136 <pre id="lexiconResultContent" class="result-content"></pre> 137 </div> 138 139 <h4>Example Usage</h4> 140 <code>curl "https://quickdid.smokesignal.tools/xrpc/com.atproto.lexicon.resolveLexicon?nsid=app.bsky.feed.post"</code> 141 </section> 142 143 <h2>Documentation</h2> 144 <p> 145 For more information, visit the 146 <a href="https://tangled.sh/@smokesignal.events/quickdid" target="_blank"> 147 QuickDID repository 148 </a> 149 . 150 </p> 151 </main> 152 153 <script> 154 // Handle form submission for handle resolution 155 document.getElementById('handleResolveForm').addEventListener('submit', async (e) => { 156 e.preventDefault(); 157 158 const handle = document.getElementById('handleInput').value.trim(); 159 const resultDiv = document.getElementById('handleResult'); 160 const resultContent = document.getElementById('handleResultContent'); 161 162 // Show loading state 163 resultDiv.style.display = 'block'; 164 resultContent.textContent = 'Loading...'; 165 166 try { 167 // Build the request URL 168 const url = `/xrpc/com.atproto.identity.resolveHandle?handle=${encodeURIComponent(handle)}`; 169 170 // Make the GET request 171 const response = await fetch(url); 172 const data = await response.json(); 173 174 // Display the result 175 if (response.ok) { 176 resultContent.textContent = JSON.stringify(data, null, 2); 177 resultContent.style.color = ''; 178 } else { 179 resultContent.textContent = `Error: ${JSON.stringify(data, null, 2)}`; 180 resultContent.style.color = '#d32f2f'; 181 } 182 } catch (error) { 183 resultContent.textContent = `Network Error: ${error.message}`; 184 resultContent.style.color = '#d32f2f'; 185 } 186 }); 187 188 // Handle form submission for lexicon resolution 189 document.getElementById('lexiconResolveForm').addEventListener('submit', async (e) => { 190 e.preventDefault(); 191 192 const nsid = document.getElementById('nsidInput').value.trim(); 193 const resultDiv = document.getElementById('lexiconResult'); 194 const resultContent = document.getElementById('lexiconResultContent'); 195 196 // Show loading state 197 resultDiv.style.display = 'block'; 198 resultContent.textContent = 'Loading...'; 199 200 try { 201 // Build the request URL 202 const url = `/xrpc/com.atproto.lexicon.resolveLexicon?nsid=${encodeURIComponent(nsid)}`; 203 204 // Make the GET request 205 const response = await fetch(url); 206 const data = await response.json(); 207 208 // Display the result 209 if (response.ok) { 210 resultContent.textContent = JSON.stringify(data, null, 2); 211 resultContent.style.color = ''; 212 } else { 213 resultContent.textContent = `Error: ${JSON.stringify(data, null, 2)}`; 214 resultContent.style.color = '#d32f2f'; 215 } 216 } catch (error) { 217 resultContent.textContent = `Network Error: ${error.message}`; 218 resultContent.style.color = '#d32f2f'; 219 } 220 }); 221 </script> 222</body> 223 224</html>