atmosphere explorer pds.ls
tool typescript atproto
434
fork

Configure Feed

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

add did doc fetching fallback for feedgens

Juliet 3d7a4c3b 8655d3fd

+89 -76
+89 -76
src/views/repo.tsx
··· 111 111 const fetchRepo = async () => { 112 112 try { 113 113 pds = await resolvePDS(did); 114 + setDidDoc(didDocCache[did] as DidDocument); 114 115 } catch { 115 - if (!did.startsWith("did:")) { 116 + // Fallback for feedgens 117 + if (did.startsWith("did:web")) { 118 + try { 119 + const res = await fetch(`https://${did.replace("did:web:", "")}/.well-known/did.json`); 120 + const didDoc = await res.json(); 121 + setDidDoc(didDoc); 122 + } catch {} 123 + } else if (!did.startsWith("did:")) { 116 124 try { 117 125 const did = await resolveHandle(params.repo as Handle); 118 126 navigate(location.pathname.replace(params.repo!, did), { replace: true }); ··· 130 138 } 131 139 } 132 140 } 133 - setDidDoc(didDocCache[did] as DidDocument); 141 + 134 142 if (did.startsWith("did:plc")) getRotationKeys(); 135 - 136 143 validateHandles(); 137 144 138 145 if (!pds) { ··· 524 531 </div> 525 532 526 533 {/* Aliases Section */} 527 - <div> 528 - <p class="font-semibold">Aliases</p> 529 - <For each={didDocument().alsoKnownAs}> 530 - {(alias) => ( 531 - <div class="flex items-center gap-1 text-sm text-neutral-700 dark:text-neutral-300"> 532 - <span>{alias}</span> 533 - <Show when={alias.startsWith("at://")}> 534 - <Tooltip 535 - text={ 536 - validHandles[alias] === true ? "Valid handle" 537 - : validHandles[alias] === undefined ? 538 - "Validating" 539 - : "Invalid handle" 540 - } 541 - > 542 - <span 543 - classList={{ 544 - "iconify lucide--check text-green-600 dark:text-green-400": 545 - validHandles[alias] === true, 546 - "iconify lucide--x text-red-500 dark:text-red-400": 547 - validHandles[alias] === false, 548 - "iconify lucide--loader-circle animate-spin": 549 - validHandles[alias] === undefined, 550 - }} 551 - ></span> 552 - </Tooltip> 553 - </Show> 554 - </div> 555 - )} 556 - </For> 557 - </div> 558 - 559 - {/* Services Section */} 560 - <div> 561 - <p class="font-semibold">Services</p> 562 - <div class="flex flex-col gap-1"> 563 - <For each={didDocument().service}> 564 - {(service) => ( 565 - <div class="grid grid-cols-[auto_1fr] items-center gap-x-1 text-sm text-neutral-700 dark:text-neutral-300"> 566 - <span class="iconify lucide--hash"></span> 567 - <span>{service.id.split("#")[1]}</span> 568 - <span></span> 569 - <a 570 - class="w-fit underline hover:text-blue-500 dark:hover:text-blue-400" 571 - href={service.serviceEndpoint.toString()} 572 - target="_blank" 573 - rel="noopener" 574 - > 575 - {service.serviceEndpoint.toString()} 576 - </a> 534 + <Show when={didDocument().alsoKnownAs}> 535 + <div> 536 + <p class="font-semibold">Aliases</p> 537 + <For each={didDocument().alsoKnownAs}> 538 + {(alias) => ( 539 + <div class="flex items-center gap-1 text-sm text-neutral-700 dark:text-neutral-300"> 540 + <span>{alias}</span> 541 + <Show when={alias.startsWith("at://")}> 542 + <Tooltip 543 + text={ 544 + validHandles[alias] === true ? "Valid handle" 545 + : validHandles[alias] === undefined ? 546 + "Validating" 547 + : "Invalid handle" 548 + } 549 + > 550 + <span 551 + classList={{ 552 + "iconify lucide--check text-green-600 dark:text-green-400": 553 + validHandles[alias] === true, 554 + "iconify lucide--x text-red-500 dark:text-red-400": 555 + validHandles[alias] === false, 556 + "iconify lucide--loader-circle animate-spin": 557 + validHandles[alias] === undefined, 558 + }} 559 + ></span> 560 + </Tooltip> 561 + </Show> 577 562 </div> 578 563 )} 579 564 </For> 580 565 </div> 581 - </div> 566 + </Show> 567 + 568 + {/* Services Section */} 569 + <Show when={didDocument().service}> 570 + <div> 571 + <p class="font-semibold">Services</p> 572 + <div class="flex flex-col gap-1"> 573 + <For each={didDocument().service}> 574 + {(service) => ( 575 + <div class="grid grid-cols-[auto_1fr] items-center gap-x-1 text-sm text-neutral-700 dark:text-neutral-300"> 576 + <span class="iconify lucide--hash"></span> 577 + <span>{service.id.split("#")[1]}</span> 578 + <span></span> 579 + <a 580 + class="w-fit underline hover:text-blue-500 dark:hover:text-blue-400" 581 + href={service.serviceEndpoint.toString()} 582 + target="_blank" 583 + rel="noopener" 584 + > 585 + {service.serviceEndpoint.toString()} 586 + </a> 587 + </div> 588 + )} 589 + </For> 590 + </div> 591 + </div> 592 + </Show> 582 593 583 594 {/* Verification Methods Section */} 584 - <div> 585 - <p class="font-semibold">Verification Methods</p> 586 - <div class="flex flex-col gap-1"> 587 - <For each={didDocument().verificationMethod}> 588 - {(verif) => ( 589 - <Show when={verif.publicKeyMultibase}> 590 - {(key) => ( 591 - <div class="grid grid-cols-[auto_1fr] items-center gap-x-1 text-sm text-neutral-700 dark:text-neutral-300"> 592 - <span class="iconify lucide--hash"></span> 593 - <div class="flex items-center gap-2"> 594 - <span>{verif.id.split("#")[1]}</span> 595 - <div class="flex items-center gap-1 text-neutral-500 dark:text-neutral-400"> 596 - <span class="iconify lucide--key-round"></span> 597 - <span>{detectKeyType(key())}</span> 595 + <Show when={didDocument().verificationMethod}> 596 + <div> 597 + <p class="font-semibold">Verification Methods</p> 598 + <div class="flex flex-col gap-1"> 599 + <For each={didDocument().verificationMethod}> 600 + {(verif) => ( 601 + <Show when={verif.publicKeyMultibase}> 602 + {(key) => ( 603 + <div class="grid grid-cols-[auto_1fr] items-center gap-x-1 text-sm text-neutral-700 dark:text-neutral-300"> 604 + <span class="iconify lucide--hash"></span> 605 + <div class="flex items-center gap-2"> 606 + <span>{verif.id.split("#")[1]}</span> 607 + <div class="flex items-center gap-1 text-neutral-500 dark:text-neutral-400"> 608 + <span class="iconify lucide--key-round"></span> 609 + <span>{detectKeyType(key())}</span> 610 + </div> 598 611 </div> 612 + <span></span> 613 + <div class="font-mono break-all">{key()}</div> 599 614 </div> 600 - <span></span> 601 - <div class="font-mono break-all">{key()}</div> 602 - </div> 603 - )} 604 - </Show> 605 - )} 606 - </For> 615 + )} 616 + </Show> 617 + )} 618 + </For> 619 + </div> 607 620 </div> 608 - </div> 621 + </Show> 609 622 610 623 {/* Rotation Keys Section */} 611 624 <Show when={rotationKeys().length > 0}>