+530
-506
index.html
+530
-506
index.html
···
220
220
params: { limit: 100 },
221
221
});
222
222
this.accounts = accountsRes.repos;
223
-
this.accountsComplete == !accountsRes.cursor;
223
+
224
+
// weird thing with the ref pds: it *always* has a cursor on the first page
225
+
if (accountsRes.cursor) {
226
+
// so grab a second page just to see if there really is a second page
227
+
try {
228
+
const secondPage = await query('com.atproto.sync.listRepos', {
229
+
params: { limit: 1, cursor: accountsRes.cursor },
230
+
});
231
+
this.accountsComplete = !secondPage.cursor || secondPage.repos.length == 0;
232
+
} catch (e) {
233
+
// we're in a niche spot. ignore errors and look at the original (faulty) cursor
234
+
this.accountsComplete = !accountsRes.cursor; // 🤷♀️
235
+
}
236
+
} else {
237
+
this.accountsComplete = true;
238
+
}
239
+
224
240
} catch (e) {
225
241
if (window.isXrpcErr(e)) {
226
242
this.error = e.error;
···
554
570
})
555
571
</script>
556
572
</head>
557
-
<body x-data="debug">
558
-
<div class="hero bg-base-200">
573
+
<body x-data="debug" class="bg-base-200">
574
+
<div class="hero bg-base-200 p-8">
559
575
<div class="hero-content flex-col">
560
-
<h1>PDS Debugger</h1>
576
+
<h1 class="text-2xl mb-8">PDS Debugger</h1>
577
+
<form @submit.prevent="await diagnose()">
578
+
<label class="text-sm text-primary" for="identifier">
579
+
atproto handle, DID, or HTTPS PDS URL
580
+
</label>
581
+
<br/>
582
+
<div class="join">
583
+
<input
584
+
id="identifier"
585
+
class="input join-item"
586
+
x-model="identifier"
587
+
:disabled="identifierLoading"
588
+
autofocus
589
+
/>
590
+
<button
591
+
class="btn btn-primary join-item"
592
+
type="submit"
593
+
>go</button>
594
+
</div>
595
+
</form>
596
+
</div>
597
+
</div>
598
+
599
+
<div class="w-full max-w-lg mx-auto">
600
+
<template x-if="identifierError">
601
+
<p>uh oh: <span x-text="identifierError"></span></p>
602
+
</template>
561
603
562
-
<p class="text-sm">Work in progress!</p>
563
-
<details class="text-xs">
564
-
<summary>Future features</summary>
565
-
<ul class="list-disc pl-4">
566
-
<li>firehose & jetstream listeners</li>
567
-
</ul>
568
-
</details>
569
-
<details class="text-xs">
570
-
<summary>Limitations</summary>
571
-
<ul class="list-disc pl-4">
572
-
<li>The Bluesky production relay at <code>bsky.network</code> runs the old bgs implementation, and is missing many relay XRPC endpoints.</li>
573
-
<li>The Blacksky relay at <code>atproto.africa</code> runs an independent implementation, and is also missing many relay XRPC endpoints.</li>
574
-
<li>All diagnostics run in your browser, so servers that don't enable CORS (some PDS hosts, Upcloud's relay) will fail tests.</li>
575
-
</ul>
576
-
</details>
604
+
<template x-if="pds != null">
577
605
578
-
<div class="card bg-base-100 w-full max-w-sm shrink-0 shadow-2xl">
606
+
<div class="card bg-base-100 w-full max-w-2xl shrink-0 shadow-2xl m-4">
579
607
<div class="card-body">
580
-
<form @submit.prevent="await diagnose()">
581
-
<label>
582
-
Enter an atproto handle, DID, or HTTPS PDS URL
583
-
<input
584
-
class="input"
585
-
x-model="identifier"
586
-
:disabled="identifierLoading"
587
-
autofocus
588
-
/>
589
-
</label>
590
-
</form>
591
-
</div>
592
-
</div>
608
+
<h2 class="card-title">
609
+
<span class="badge badge-secondary">PDS</span>
610
+
<span x-text="pds"></span>
611
+
</h2>
593
612
594
-
<template x-if="identifierError">
595
-
<p>uh oh: <span x-text="identifierError"></span></p>
596
-
</template>
613
+
<div
614
+
x-data="pdsCheck(pds)"
615
+
x-init="$watch('pds', v => update(v))"
616
+
>
617
+
<h3 class="text-lg mt-3">
618
+
Server
619
+
<span
620
+
x-show="description !== null"
621
+
class="badge badge-sm badge-soft badge-success"
622
+
>online</span>
623
+
</h3>
624
+
<p x-show="loadingDesc">Loading…</p>
625
+
<p x-show="error" class="text-warning" x-text="error"></p>
626
+
<template x-if="description !== null">
627
+
<div>
628
+
<div class="overflow-x-auto">
629
+
<table class="table table-xs">
630
+
<tbody>
631
+
<tr>
632
+
<td class="text-sm">
633
+
Open registration:
634
+
<span
635
+
x-text="!description.inviteCodeRequired"
636
+
></span>
637
+
</td>
638
+
</tr>
639
+
<tr>
640
+
<td class="text-sm">
641
+
Version:
642
+
<code
643
+
class="text-xs"
644
+
x-text="version"
645
+
></code>
646
+
</td>
647
+
</tr>
648
+
</tbody>
649
+
</table>
650
+
</div>
651
+
<h4 class="font-bold">
652
+
Accounts
653
+
</h4>
654
+
<div class="overflow-x-auto overflow-y-auto max-h-26">
655
+
<table class="table table-xs">
656
+
<tbody>
657
+
<template x-for="account in accounts">
658
+
<tr>
659
+
<td>
660
+
<code>
661
+
<a
662
+
href="#"
663
+
class="link"
664
+
x-text="account.did"
665
+
@click.prevent="goto(account.did)"
666
+
></a>
667
+
</code>
668
+
</td>
669
+
<td>
670
+
<span
671
+
x-show="account.active"
672
+
class="badge badge-sm badge-soft badge-success"
673
+
>
674
+
active
675
+
</span>
676
+
<span
677
+
x-show="!account.active"
678
+
x-text="account.status"
679
+
class="badge badge-sm badge-soft badge-warning"
680
+
></span>
681
+
</td>
682
+
<td
683
+
x-data="didToHandle(account.did)"
684
+
x-intersect:enter.once="load"
685
+
>
686
+
<span x-show="loading">Loading…</span>
687
+
<span x-show="error !== null" x-text="error"></span>
688
+
<a
689
+
href="#"
690
+
class="link"
691
+
@click.prevent="goto(handle)"
692
+
x-show="handle !== null"
693
+
x-text="`@${handle}`"
694
+
></a>
695
+
</td>
696
+
</tr>
697
+
</template>
698
+
<template x-if="!loadingDesc && !accountsComplete">
699
+
<tr>
700
+
<td colspan="2" class="text-xs text-warning-content">
701
+
(more accounts not shown)
702
+
</td>
703
+
</tr>
704
+
</template>
705
+
</tbody>
706
+
</table>
707
+
</div>
708
+
</div>
709
+
</template>
710
+
</div>
597
711
598
-
<template x-if="pds != null">
599
-
<div class="card bg-base-100 w-full max-w-lg shrink-0 shadow-2xl">
600
-
<div class="card-body">
601
-
<h2 class="card-title">
602
-
<span class="badge badge-secondary">PDS</span>
603
-
<span x-text="pds"></span>
604
-
</h2>
712
+
<h3 class="text-lg mt-3">Relay host status</h3>
713
+
<div class="overflow-x-auto">
714
+
<table class="table table-xs">
715
+
<tbody>
716
+
<template x-for="relay in window.relays">
717
+
<tr
718
+
x-data="relayCheckHost(pds, relay)"
719
+
x-init="$watch('pds', pds => check(pds, relay))"
720
+
>
721
+
<td class="text-sm">
722
+
<div class="tooltip tooltip-right" :data-tip="relay.hostname">
723
+
<img
724
+
class="inline-block h-4 w-4"
725
+
:src="relay.icon"
726
+
alt=""
727
+
/>
728
+
<span x-text="relay.name"></span>
729
+
<span
730
+
x-show="!!relay.note"
731
+
x-text="relay.note"
732
+
class="badge badge-soft badge-neutral badge-xs"
733
+
></span>
734
+
</div>
735
+
</td>
736
+
<td>
737
+
<template x-if="loading">
738
+
<em>loading…</em>
739
+
</template>
740
+
<template x-if="error">
741
+
<div
742
+
class="text-xs"
743
+
:class="expectedErrorInfo
744
+
? 'text-info tooltip tooltip-left cursor-help'
745
+
: 'text-warning'"
746
+
:data-tip="expectedErrorInfo"
747
+
>
748
+
<span x-text="error"></span>
749
+
<span
750
+
x-show="!!expectedErrorInfo"
751
+
class="badge badge-soft badge-info badge-xs"
752
+
>i</span>
753
+
</div>
754
+
</template>
755
+
<template x-if="status">
756
+
<span
757
+
x-text="status"
758
+
class="badge badge-sm"
759
+
:class="status === 'active' && 'badge-soft badge-success'"
760
+
></span>
761
+
</template>
762
+
</td>
763
+
<td>
764
+
<div x-show="status !== 'active' && !expectedErrorInfo">
765
+
<button
766
+
x-show="reqCrawlStatus !== 'done'"
767
+
class="btn btn-xs btn-ghost whitespace-nowrap"
768
+
:disabled="reqCrawlStatus === 'loading'"
769
+
@click="requestCrawl(pds, relay)"
770
+
>
771
+
request crawl
772
+
</button>
773
+
<span
774
+
x-show="reqCrawlError !== null"
775
+
x-text="reqCrawlError"
776
+
class="text-xs text-warning"
777
+
></span>
778
+
<button
779
+
x-show="reqCrawlError === null && reqCrawlStatus === 'done'"
780
+
class="btn btn-xs btn-soft btn-primary whitespace-nowrap"
781
+
@click="check"
782
+
>
783
+
refresh
784
+
</button>
785
+
</div>
786
+
</td>
787
+
</tr>
788
+
</template>
789
+
</tbody>
790
+
</table>
791
+
</div>
792
+
</div>
793
+
</div>
794
+
</template>
605
795
606
-
<div
607
-
x-data="pdsCheck(pds)"
608
-
x-init="$watch('pds', v => update(v))"
609
-
>
796
+
<template x-if="did != null">
797
+
<div class="card bg-base-100 w-full max-w-2xl shrink-0 shadow-2xl m-4">
798
+
<div class="card-body">
799
+
<h2 class="card-title">
800
+
<span class="badge badge-secondary">DID</span>
801
+
<code x-text="did"></code>
802
+
</h2>
803
+
<template x-if="pds != null">
804
+
<div x-data="didRepoState(did, pds)">
610
805
<h3 class="text-lg mt-3">
611
-
Server
806
+
Repo
612
807
<span
613
-
x-show="description !== null"
808
+
x-show="state && state.active"
614
809
class="badge badge-sm badge-soft badge-success"
615
-
>online</span>
810
+
>active</span>
616
811
</h3>
617
-
<p x-show="loadingDesc">Loading…</p>
618
-
<p x-show="error" class="text-warning" x-text="error"></p>
619
-
<template x-if="description !== null">
620
-
<div>
621
-
<div class="overflow-x-auto">
622
-
<table class="table table-xs">
623
-
<tbody>
624
-
<tr>
625
-
<td class="text-sm">
626
-
Open registration:
812
+
<div class="overflow-x-auto">
813
+
<table class="table table-xs">
814
+
<tbody>
815
+
<tr>
816
+
<td class="text-sm">
817
+
Rev:
818
+
<code x-text="state && state.rev"></code>
819
+
</td>
820
+
</tr>
821
+
<tr>
822
+
<td class="text-sm">
823
+
Size:
824
+
<span x-data="repoSize">
825
+
<template x-if="loading">
826
+
<em>loading…</em>
827
+
</template>
828
+
<template x-if="error">
829
+
<span class="text-xs text-warning" x-text="error"></span>
830
+
</template>
831
+
<template x-if="size">
832
+
<code>
833
+
<span x-text="size"></span> MiB
834
+
</code>
835
+
</template>
836
+
<template x-if="!size && !error && !loading">
837
+
<button
838
+
class="btn btn-xs btn-soft btn-primary"
839
+
@click.prevent="loadRepoForSize(did, pds)"
840
+
>load</button>
841
+
</template>
842
+
</span>
843
+
</td>
844
+
</tr>
845
+
<tr>
846
+
<td class="text-sm">
847
+
PDS:
848
+
<a
849
+
href="#"
850
+
class="link"
851
+
@click.prevent="goto(pds)"
852
+
x-text="pds"
853
+
></a>
854
+
</td>
855
+
</tr>
856
+
</tbody>
857
+
</table>
858
+
</div>
859
+
860
+
<h3 class="text-lg mt-3">
861
+
Relay repo status
862
+
</h3>
863
+
<div class="overflow-x-auto">
864
+
<table class="table table-xs">
865
+
<tbody>
866
+
<template x-for="relay in window.relays">
867
+
<tr
868
+
x-data="relayCheckRepo(did, relay)"
869
+
x-init="$watch('pds', pds => check(did, relay))"
870
+
>
871
+
<td class="text-sm">
872
+
<div class="tooltip tooltip-right" :data-tip="relay.hostname">
873
+
<img
874
+
class="inline-block h-4 w-4"
875
+
:src="relay.icon"
876
+
alt=""
877
+
/>
878
+
<span x-text="relay.name"></span>
627
879
<span
628
-
x-text="!description.inviteCodeRequired"
880
+
x-show="!!relay.note"
881
+
x-text="relay.note"
882
+
class="badge badge-neutral badge-soft badge-xs"
629
883
></span>
884
+
</div>
885
+
</td>
886
+
<template x-if="loading">
887
+
<td>
888
+
<em>loading…</em>
630
889
</td>
631
-
</tr>
632
-
<tr>
633
-
<td class="text-sm">
634
-
Version:
635
-
<code
890
+
</template>
891
+
<template x-if="error">
892
+
<td>
893
+
<div
636
894
class="text-xs"
637
-
x-text="version"
638
-
></code>
895
+
:class="expectedErrorInfo
896
+
? 'text-info tooltip tooltip-left cursor-help'
897
+
: 'text-warning'"
898
+
:data-tip="expectedErrorInfo"
899
+
>
900
+
<span x-text="error"></span>
901
+
<span
902
+
x-show="!!expectedErrorInfo"
903
+
class="badge badge-soft badge-info badge-xs"
904
+
>i</span>
905
+
</div>
906
+
</td>
907
+
</template>
908
+
<template x-if="status">
909
+
<td>
910
+
<span
911
+
x-show="status.active"
912
+
class="badge badge-sm badge-soft badge-success"
913
+
>
914
+
active
915
+
</span>
916
+
<span
917
+
x-show="!status.active"
918
+
x-text="status.status"
919
+
class="badge badge-sm badge-soft badge-warning"
920
+
></span>
921
+
</td>
922
+
</template>
923
+
<template x-if="revStatus(state && state.rev)">
924
+
<td x-data="{ asdf: revStatus(state.rev) }">
925
+
<span
926
+
x-show="asdf === 'current'"
927
+
class="badge badge-sm badge-soft badge-success"
928
+
>current</span>
929
+
<span
930
+
x-show="asdf === 'behind'"
931
+
class="badge badge-sm badge-soft badge-warning tooltip tooltip-left"
932
+
:data-tip="status.rev"
933
+
>behind</span>
934
+
<span
935
+
x-show="asdf === 'ahead'"
936
+
class="badge badge-sm badge-soft badge-success tooltip tooltip-left"
937
+
:data-tip="`Account may have updated between checks? ${status.rev}`"
938
+
>ahead</span>
639
939
</td>
640
-
</tr>
641
-
</tbody>
642
-
</table>
643
-
</div>
644
-
<h4 class="font-bold">
645
-
Accounts
646
-
</h4>
647
-
<div class="overflow-x-auto overflow-y-auto max-h-26">
940
+
</template>
941
+
</tr>
942
+
</template>
943
+
</tbody>
944
+
</table>
945
+
</div>
946
+
947
+
<template x-if="did.startsWith('did:plc:')">
948
+
<div x-data="pdsHistory(did, pds)">
949
+
<h3 class="text-lg mt-3">
950
+
PLC PDS history
951
+
</h3>
952
+
<div class="overflow-x-auto">
648
953
<table class="table table-xs">
649
954
<tbody>
650
-
<template x-for="account in accounts">
955
+
<template x-if="loading">
651
956
<tr>
652
-
<td>
653
-
<code>
654
-
<a
655
-
href="#"
656
-
class="link"
657
-
x-text="account.did"
658
-
@click.prevent="goto(account.did)"
659
-
></a>
660
-
</code>
957
+
<td>Loading…</td>
958
+
</tr>
959
+
</template>
960
+
<template x-if="error">
961
+
<tr>
962
+
<td>Error: <span x-text="error"></span></td>
963
+
</tr>
964
+
</template>
965
+
<template x-if="!loading && !error && history.length === 0">
966
+
<tr>
967
+
<td class="text-sm">
968
+
<em>no previous PDS</em>
661
969
</td>
970
+
</tr>
971
+
</template>
972
+
<template x-for="event in history">
973
+
<tr x-data="didRepoState(did, event.pds)">
662
974
<td>
663
-
<span
664
-
x-show="account.active"
665
-
class="badge badge-sm badge-soft badge-success"
666
-
>
667
-
active
668
-
</span>
669
-
<span
670
-
x-show="!account.active"
671
-
x-text="account.status"
672
-
class="badge badge-sm badge-soft badge-warning"
673
-
></span>
975
+
<code x-text="event.date.split('T')[0]"></code>
674
976
</td>
675
-
<td
676
-
x-data="didToHandle(account.did)"
677
-
x-intersect:enter.once="load"
678
-
>
679
-
<span x-show="loading">Loading…</span>
680
-
<span x-show="error !== null" x-text="error"></span>
977
+
<td>
681
978
<a
682
979
href="#"
683
980
class="link"
684
-
@click.prevent="goto(handle)"
685
-
x-show="handle !== null"
686
-
x-text="`@${handle}`"
981
+
@click.prevent="goto(event.pds)"
982
+
x-text="event.pds"
687
983
></a>
688
984
</td>
689
-
</tr>
690
-
</template>
691
-
<template x-if="!loadingDesc && !accountsComplete">
692
-
<tr>
693
-
<td colspan="2" class="text-xs text-warning-content">
694
-
(more accounts not shown)
695
-
</td>
985
+
<template x-if="event.current">
986
+
<td>
987
+
<span
988
+
x-show="state && !state.active"
989
+
x-text="state && state.status"
990
+
class="badge badge-sm badge-soft badge-warning"
991
+
></span>
992
+
<span
993
+
x-show="state && state.active"
994
+
class="badge badge-sm badge-soft badge-success"
995
+
>current</span>
996
+
</td>
997
+
</template>
998
+
<template x-if="!event.current">
999
+
<td>
1000
+
<span
1001
+
x-show="state && !state.active"
1002
+
x-text="state && state.status"
1003
+
class="badge badge-sm badge-soft badge-success"
1004
+
></span>
1005
+
<span
1006
+
x-show="state && state.active"
1007
+
class="badge badge-sm badge-soft badge-warning"
1008
+
>active</span>
1009
+
</td>
1010
+
</template>
696
1011
</tr>
697
1012
</template>
698
1013
</tbody>
···
701
1016
</div>
702
1017
</template>
703
1018
</div>
1019
+
</template>
1020
+
</div>
1021
+
</div>
1022
+
</template>
704
1023
705
-
<h3 class="text-lg mt-3">Relay host status</h3>
706
-
<div class="overflow-x-auto">
707
-
<table class="table table-xs">
708
-
<tbody>
709
-
<template x-for="relay in window.relays">
710
-
<tr
711
-
x-data="relayCheckHost(pds, relay)"
712
-
x-init="$watch('pds', pds => check(pds, relay))"
713
-
>
714
-
<td class="text-sm">
715
-
<div class="tooltip tooltip-right" :data-tip="relay.hostname">
716
-
<img
717
-
class="inline-block h-4 w-4"
718
-
:src="relay.icon"
719
-
alt=""
720
-
/>
721
-
<span x-text="relay.name"></span>
722
-
<span
723
-
x-show="!!relay.note"
724
-
x-text="relay.note"
725
-
class="badge badge-soft badge-neutral badge-xs"
726
-
></span>
727
-
</div>
728
-
</td>
729
-
<td>
730
-
<template x-if="loading">
731
-
<em>loading…</em>
732
-
</template>
733
-
<template x-if="error">
734
-
<div
735
-
class="text-xs"
736
-
:class="expectedErrorInfo
737
-
? 'text-info tooltip tooltip-left cursor-help'
738
-
: 'text-warning'"
739
-
:data-tip="expectedErrorInfo"
740
-
>
741
-
<span x-text="error"></span>
742
-
<span
743
-
x-show="!!expectedErrorInfo"
744
-
class="badge badge-soft badge-info badge-xs"
745
-
>i</span>
746
-
</div>
747
-
</template>
748
-
<template x-if="status">
749
-
<span
750
-
x-text="status"
751
-
class="badge badge-sm"
752
-
:class="status === 'active' && 'badge-soft badge-success'"
753
-
></span>
754
-
</template>
755
-
</td>
756
-
<td>
757
-
<div x-show="status !== 'active' && !expectedErrorInfo">
758
-
<button
759
-
x-show="reqCrawlStatus !== 'done'"
760
-
class="btn btn-xs btn-ghost whitespace-nowrap"
761
-
:disabled="reqCrawlStatus === 'loading'"
762
-
@click="requestCrawl(pds, relay)"
763
-
>
764
-
request crawl
765
-
</button>
766
-
<span
767
-
x-show="reqCrawlError !== null"
768
-
x-text="reqCrawlError"
769
-
class="text-xs text-warning"
770
-
></span>
771
-
<button
772
-
x-show="reqCrawlError === null && reqCrawlStatus === 'done'"
773
-
class="btn btn-xs btn-soft btn-primary whitespace-nowrap"
774
-
@click="check"
775
-
>
776
-
refresh
777
-
</button>
778
-
</div>
779
-
</td>
780
-
</tr>
781
-
</template>
782
-
</tbody>
783
-
</table>
784
-
</div>
1024
+
<template x-if="handle !== null">
1025
+
<div class="card bg-base-100 w-full max-w-2xl shrink-0 shadow-2xl m-4">
1026
+
<div
1027
+
x-data="checkHandle(handle)"
1028
+
x-init="$watch('handle', h => updateHandle(h))"
1029
+
class="card-body"
1030
+
>
1031
+
<h2 class="card-title">
1032
+
<span class="badge badge-secondary">Handle</span>
1033
+
<span x-text="handle"></span>
1034
+
</h2>
1035
+
1036
+
<h3 class="text-lg mt-3">
1037
+
Resolution
1038
+
</h3>
1039
+
<p x-show="loading" class="text-i">Loading…</p>
1040
+
<div x-show="!loading" class="overflow-x-auto">
1041
+
<table class="table table-xs">
1042
+
<tbody>
1043
+
<tr>
1044
+
<td class="text-sm">DNS</td>
1045
+
<td class="text-sm">
1046
+
<code x-text="dnsDid"></code>
1047
+
</td>
1048
+
<td>
1049
+
<div
1050
+
class="badge badge-sm badge-soft badge-neutral"
1051
+
x-show="dnsErr !== null"
1052
+
x-text="dnsErr"
1053
+
></div>
1054
+
</td>
1055
+
</tr>
1056
+
<tr>
1057
+
<td class="text-sm">Http</td>
1058
+
<td class="text-sm">
1059
+
<code x-text="httpDid"></code>
1060
+
</td>
1061
+
<td>
1062
+
<div
1063
+
class="badge badge-sm badge-soft badge-neutral"
1064
+
x-show="httpErr !== null"
1065
+
x-text="httpErr"
1066
+
></div>
1067
+
</td>
1068
+
</tr>
1069
+
</tbody>
1070
+
</table>
785
1071
</div>
786
-
</div>
787
-
</template>
788
1072
789
-
<template x-if="did != null">
790
-
<div class="card bg-base-100 w-full max-w-lg shrink-0 shadow-2xl">
791
-
<div class="card-body">
792
-
<h2 class="card-title">
793
-
<span class="badge badge-secondary">DID</span>
794
-
<code x-text="did"></code>
795
-
</h2>
796
-
<template x-if="pds != null">
797
-
<div x-data="didRepoState(did, pds)">
798
-
<h3 class="text-lg mt-3">
799
-
Repo
800
-
<span
801
-
x-show="state && state.active"
802
-
class="badge badge-sm badge-soft badge-success"
803
-
>active</span>
804
-
</h3>
805
-
<div class="overflow-x-auto">
806
-
<table class="table table-xs">
807
-
<tbody>
1073
+
<template x-if="did !== null && did.startsWith('did:plc:')">
1074
+
1075
+
<div x-data="handleHistory(did, handle)">
1076
+
<h3 class="text-lg mt-3">
1077
+
PLC handle history
1078
+
</h3>
1079
+
<div class="overflow-x-auto">
1080
+
<table class="table table-xs">
1081
+
<tbody>
1082
+
<template x-if="loading">
1083
+
<tr>
1084
+
<td>Loading…</td>
1085
+
</tr>
1086
+
</template>
1087
+
<template x-if="error">
1088
+
<tr>
1089
+
<td>Error: <span x-text="error"></span></td>
1090
+
</tr>
1091
+
</template>
1092
+
<template x-if="!loading && !error && history.length === 0">
808
1093
<tr>
809
1094
<td class="text-sm">
810
-
Rev:
811
-
<code x-text="state && state.rev"></code>
1095
+
<em>no previous handle</em>
812
1096
</td>
813
1097
</tr>
1098
+
</template>
1099
+
<template x-for="event in history">
814
1100
<tr>
815
-
<td class="text-sm">
816
-
PDS:
1101
+
<td>
1102
+
<code x-text="event.date.split('T')[0]"></code>
1103
+
</td>
1104
+
<td>
817
1105
<a
818
1106
href="#"
819
1107
class="link"
820
-
@click.prevent="goto(pds)"
821
-
x-text="pds"
1108
+
@click.prevent="goto(event.handle)"
1109
+
x-text="event.handle"
822
1110
></a>
823
1111
</td>
824
1112
</tr>
825
-
<tr>
826
-
<td class="text-sm">
827
-
Size:
828
-
<span x-data="repoSize">
829
-
<template x-if="loading">
830
-
<em>loading…</em>
831
-
</template>
832
-
<template x-if="error">
833
-
<span class="text-xs text-warning" x-text="error"></span>
834
-
</template>
835
-
<template x-if="size">
836
-
<code>
837
-
<span x-text="size"></span> MiB
838
-
</code>
839
-
</template>
840
-
<template x-if="!size && !error && !loading">
841
-
<button
842
-
class="btn btn-xs btn-soft btn-primary"
843
-
@click.prevent="loadRepoForSize(did, pds)"
844
-
>load</button>
845
-
</template>
846
-
</span>
847
-
</td>
848
-
</tr>
849
-
</tbody>
850
-
</table>
851
-
</div>
852
-
853
-
<h3 class="text-lg mt-3">
854
-
Relay repo status
855
-
</h3>
856
-
<div class="overflow-x-auto">
857
-
<table class="table table-xs">
858
-
<tbody>
859
-
<template x-for="relay in window.relays">
860
-
<tr
861
-
x-data="relayCheckRepo(did, relay)"
862
-
x-init="$watch('pds', pds => check(did, relay))"
863
-
>
864
-
<td class="text-sm">
865
-
<div class="tooltip tooltip-right" :data-tip="relay.hostname">
866
-
<img
867
-
class="inline-block h-4 w-4"
868
-
:src="relay.icon"
869
-
alt=""
870
-
/>
871
-
<span x-text="relay.name"></span>
872
-
<span
873
-
x-show="!!relay.note"
874
-
x-text="relay.note"
875
-
class="badge badge-neutral badge-soft badge-xs"
876
-
></span>
877
-
</div>
878
-
</td>
879
-
<template x-if="loading">
880
-
<td>
881
-
<em>loading…</em>
882
-
</td>
883
-
</template>
884
-
<template x-if="error">
885
-
<td>
886
-
<div
887
-
class="text-xs"
888
-
:class="expectedErrorInfo
889
-
? 'text-info tooltip tooltip-left cursor-help'
890
-
: 'text-warning'"
891
-
:data-tip="expectedErrorInfo"
892
-
>
893
-
<span x-text="error"></span>
894
-
<span
895
-
x-show="!!expectedErrorInfo"
896
-
class="badge badge-soft badge-info badge-xs"
897
-
>i</span>
898
-
</div>
899
-
</td>
900
-
</template>
901
-
<template x-if="status">
902
-
<td>
903
-
<span
904
-
x-show="status.active"
905
-
class="badge badge-sm badge-soft badge-success"
906
-
>
907
-
active
908
-
</span>
909
-
<span
910
-
x-show="!status.active"
911
-
x-text="status.status"
912
-
class="badge badge-sm badge-soft badge-warning"
913
-
></span>
914
-
</td>
915
-
</template>
916
-
<template x-if="revStatus(state && state.rev)">
917
-
<td x-data="{ asdf: revStatus(state.rev) }">
918
-
<span
919
-
x-show="asdf === 'current'"
920
-
class="badge badge-sm badge-soft badge-success"
921
-
>current</span>
922
-
<span
923
-
x-show="asdf === 'behind'"
924
-
class="badge badge-sm badge-soft badge-warning tooltip tooltip-left"
925
-
:data-tip="status.rev"
926
-
>behind</span>
927
-
<span
928
-
x-show="asdf === 'ahead'"
929
-
class="badge badge-sm badge-soft badge-success tooltip tooltip-left"
930
-
:data-tip="`Account may have updated between checks? ${status.rev}`"
931
-
>ahead</span>
932
-
</td>
933
-
</template>
934
-
</tr>
935
-
</template>
936
-
</tbody>
937
-
</table>
938
-
</div>
1113
+
</template>
1114
+
</tbody>
1115
+
</table>
1116
+
</div>
1117
+
</div>
939
1118
940
-
<template x-if="did.startsWith('did:plc:')">
941
-
<div x-data="pdsHistory(did, pds)">
942
-
<h3 class="text-lg mt-3">
943
-
PLC PDS history
944
-
</h3>
945
-
<div class="overflow-x-auto">
946
-
<table class="table table-xs">
947
-
<tbody>
948
-
<template x-if="loading">
949
-
<tr>
950
-
<td>Loading…</td>
951
-
</tr>
952
-
</template>
953
-
<template x-if="error">
954
-
<tr>
955
-
<td>Error: <span x-text="error"></span></td>
956
-
</tr>
957
-
</template>
958
-
<template x-if="!loading && !error && history.length === 0">
959
-
<tr>
960
-
<td class="text-sm">
961
-
<em>no previous PDS</em>
962
-
</td>
963
-
</tr>
964
-
</template>
965
-
<template x-for="event in history">
966
-
<tr x-data="didRepoState(did, event.pds)">
967
-
<td>
968
-
<code x-text="event.date.split('T')[0]"></code>
969
-
</td>
970
-
<td>
971
-
<a
972
-
href="#"
973
-
class="link"
974
-
@click.prevent="goto(event.pds)"
975
-
x-text="event.pds"
976
-
></a>
977
-
</td>
978
-
<template x-if="event.current">
979
-
<td>
980
-
<span
981
-
x-show="state && !state.active"
982
-
x-text="state && state.status"
983
-
class="badge badge-sm badge-soft badge-warning"
984
-
></span>
985
-
<span
986
-
x-show="state && state.active"
987
-
class="badge badge-sm badge-soft badge-success"
988
-
>current</span>
989
-
</td>
990
-
</template>
991
-
<template x-if="!event.current">
992
-
<td>
993
-
<span
994
-
x-show="state && !state.active"
995
-
x-text="state && state.status"
996
-
class="badge badge-sm badge-soft badge-success"
997
-
></span>
998
-
<span
999
-
x-show="state && state.active"
1000
-
class="badge badge-sm badge-soft badge-warning"
1001
-
>active</span>
1002
-
</td>
1003
-
</template>
1004
-
</tr>
1005
-
</template>
1006
-
</tbody>
1007
-
</table>
1008
-
</div>
1009
-
</div>
1010
-
</template>
1011
-
</div>
1012
-
</template>
1013
-
</div>
1119
+
</template>
1014
1120
</div>
1015
-
</template>
1121
+
</div>
1122
+
</template>
1123
+
</div>
1016
1124
1017
-
<template x-if="handle !== null">
1018
-
<div class="card bg-base-100 w-full max-w-lg shrink-0 shadow-2xl">
1019
-
<div
1020
-
x-data="checkHandle(handle)"
1021
-
x-init="$watch('handle', h => updateHandle(h))"
1022
-
class="card-body"
1023
-
>
1024
-
<h2 class="card-title">
1025
-
<span class="badge badge-secondary">Handle</span>
1026
-
<span x-text="handle"></span>
1027
-
</h2>
1028
1125
1029
-
<h3 class="text-lg mt-3">
1030
-
Resolution
1031
-
</h3>
1032
-
<p x-show="loading" class="text-i">Loading…</p>
1033
-
<div x-show="!loading" class="overflow-x-auto">
1034
-
<table class="table table-xs">
1035
-
<tbody>
1036
-
<tr>
1037
-
<td class="text-sm">DNS</td>
1038
-
<td class="text-sm">
1039
-
<code x-text="dnsDid"></code>
1040
-
</td>
1041
-
<td>
1042
-
<div
1043
-
class="badge badge-sm badge-soft badge-neutral"
1044
-
x-show="dnsErr !== null"
1045
-
x-text="dnsErr"
1046
-
></div>
1047
-
</td>
1048
-
</tr>
1049
-
<tr>
1050
-
<td class="text-sm">Http</td>
1051
-
<td class="text-sm">
1052
-
<code x-text="httpDid"></code>
1053
-
</td>
1054
-
<td>
1055
-
<div
1056
-
class="badge badge-sm badge-soft badge-neutral"
1057
-
x-show="httpErr !== null"
1058
-
x-text="httpErr"
1059
-
></div>
1060
-
</td>
1061
-
</tr>
1062
-
</tbody>
1063
-
</table>
1064
-
</div>
1065
1126
1066
-
<template x-if="did !== null && did.startsWith('did:plc:')">
1067
-
1068
-
<div x-data="handleHistory(did, handle)">
1069
-
<h3 class="text-lg mt-3">
1070
-
PLC handle history
1071
-
</h3>
1072
-
<div class="overflow-x-auto">
1073
-
<table class="table table-xs">
1074
-
<tbody>
1075
-
<template x-if="loading">
1076
-
<tr>
1077
-
<td>Loading…</td>
1078
-
</tr>
1079
-
</template>
1080
-
<template x-if="error">
1081
-
<tr>
1082
-
<td>Error: <span x-text="error"></span></td>
1083
-
</tr>
1084
-
</template>
1085
-
<template x-if="!loading && !error && history.length === 0">
1086
-
<tr>
1087
-
<td class="text-sm">
1088
-
<em>no previous handle</em>
1089
-
</td>
1090
-
</tr>
1091
-
</template>
1092
-
<template x-for="event in history">
1093
-
<tr>
1094
-
<td>
1095
-
<code x-text="event.date.split('T')[0]"></code>
1096
-
</td>
1097
-
<td>
1098
-
<a
1099
-
href="#"
1100
-
class="link"
1101
-
@click.prevent="goto(event.handle)"
1102
-
x-text="event.handle"
1103
-
></a>
1104
-
</td>
1105
-
</tr>
1106
-
</template>
1107
-
</tbody>
1108
-
</table>
1109
-
</div>
1110
-
</div>
1127
+
<div class="footer text-xs sm:footer-horizontal text-neutral mt-32 p-8 max-w-2xl mx-auto">
1128
+
<nav>
1129
+
<h3 class="footer-title">Current limitations</h3>
1130
+
<p>PDS hosts without CORS will fail tests</p>
1131
+
<p>Bluesky relay is missing API endpoints</p>
1132
+
<p>Blacksky relay is also missing API endpoints</p>
1133
+
<p>The requestCrawl button is not well tested</p>
1134
+
</nav>
1135
+
<nav>
1111
1136
1112
-
</template>
1113
-
</div>
1114
-
</div>
1115
-
</template>
1116
-
</div>
1137
+
<h3 class="footer-title">Future features</h3>
1138
+
<p>Account label lookup</p>
1139
+
</nav>
1117
1140
</div>
1141
+
1118
1142
</body>
1119
1143
</html>