+9
-12
package.json
+9
-12
package.json
···
11
11
"devDependencies": {
12
12
"@iconify-json/lucide": "^1.2.70",
13
13
"@iconify/tailwind4": "^1.0.6",
14
-
"@tailwindcss/vite": "^4.1.14",
14
+
"@tailwindcss/vite": "^4.1.15",
15
15
"prettier": "^3.6.2",
16
16
"prettier-plugin-organize-imports": "^4.3.0",
17
17
"prettier-plugin-tailwindcss": "^0.7.1",
18
-
"tailwindcss": "^4.1.14",
18
+
"tailwindcss": "^4.1.15",
19
19
"typescript": "^5.9.3",
20
-
"vite": "^7.1.10",
20
+
"vite": "^7.1.11",
21
21
"vite-plugin-solid": "^2.11.9"
22
22
},
23
23
"dependencies": {
24
-
"@atcute/atproto": "^3.1.7",
25
-
"@atcute/bluesky": "^3.2.7",
26
-
"@atcute/car": "^3.1.3",
27
-
"@atcute/cbor": "^2.2.7",
28
-
"@atcute/cid": "^2.2.5",
24
+
"@atcute/atproto": "^3.1.8",
25
+
"@atcute/bluesky": "^3.2.8",
29
26
"@atcute/client": "^4.0.5",
30
27
"@atcute/crypto": "^2.2.5",
31
28
"@atcute/did-plc": "^0.1.7",
32
29
"@atcute/identity": "^1.1.1",
33
30
"@atcute/identity-resolver": "^1.1.4",
34
-
"@atcute/leaflet": "^1.0.10",
31
+
"@atcute/leaflet": "^1.0.11",
35
32
"@atcute/lexicon-doc": "^1.1.3",
36
-
"@atcute/lexicon-resolver": "^0.1.2",
33
+
"@atcute/lexicon-resolver": "^0.1.3",
37
34
"@atcute/lexicons": "^1.2.2",
38
35
"@atcute/oauth-browser-client": "^1.0.27",
39
-
"@atcute/tangled": "^1.0.9",
36
+
"@atcute/repo": "^0.1.0",
37
+
"@atcute/tangled": "^1.0.10",
40
38
"@atcute/tid": "^1.0.3",
41
-
"@atcute/uint8array": "^1.0.5",
42
39
"@codemirror/commands": "^6.9.0",
43
40
"@codemirror/lang-json": "^6.0.2",
44
41
"@codemirror/lint": "^6.9.0",
+218
-233
pnpm-lock.yaml
+218
-233
pnpm-lock.yaml
···
9
9
.:
10
10
dependencies:
11
11
'@atcute/atproto':
12
-
specifier: ^3.1.7
13
-
version: 3.1.7
12
+
specifier: ^3.1.8
13
+
version: 3.1.8
14
14
'@atcute/bluesky':
15
-
specifier: ^3.2.7
16
-
version: 3.2.7
17
-
'@atcute/car':
18
-
specifier: ^3.1.3
19
-
version: 3.1.3
20
-
'@atcute/cbor':
21
-
specifier: ^2.2.7
22
-
version: 2.2.7
23
-
'@atcute/cid':
24
-
specifier: ^2.2.5
25
-
version: 2.2.5
15
+
specifier: ^3.2.8
16
+
version: 3.2.8
26
17
'@atcute/client':
27
18
specifier: ^4.0.5
28
19
version: 4.0.5
···
39
30
specifier: ^1.1.4
40
31
version: 1.1.4(@atcute/identity@1.1.1)
41
32
'@atcute/leaflet':
42
-
specifier: ^1.0.10
43
-
version: 1.0.10
33
+
specifier: ^1.0.11
34
+
version: 1.0.11
44
35
'@atcute/lexicon-doc':
45
36
specifier: ^1.1.3
46
37
version: 1.1.3
47
38
'@atcute/lexicon-resolver':
48
-
specifier: ^0.1.2
49
-
version: 0.1.2(@atcute/identity-resolver@1.1.4(@atcute/identity@1.1.1))(@atcute/identity@1.1.1)
39
+
specifier: ^0.1.3
40
+
version: 0.1.3(@atcute/identity-resolver@1.1.4(@atcute/identity@1.1.1))(@atcute/identity@1.1.1)
50
41
'@atcute/lexicons':
51
42
specifier: ^1.2.2
52
43
version: 1.2.2
53
44
'@atcute/oauth-browser-client':
54
45
specifier: ^1.0.27
55
46
version: 1.0.27
47
+
'@atcute/repo':
48
+
specifier: ^0.1.0
49
+
version: 0.1.0
56
50
'@atcute/tangled':
57
-
specifier: ^1.0.9
58
-
version: 1.0.9
51
+
specifier: ^1.0.10
52
+
version: 1.0.10
59
53
'@atcute/tid':
60
54
specifier: ^1.0.3
61
55
version: 1.0.3
62
-
'@atcute/uint8array':
63
-
specifier: ^1.0.5
64
-
version: 1.0.5
65
56
'@codemirror/commands':
66
57
specifier: ^6.9.0
67
58
version: 6.9.0
···
107
98
version: 1.2.70
108
99
'@iconify/tailwind4':
109
100
specifier: ^1.0.6
110
-
version: 1.0.6(tailwindcss@4.1.14)
101
+
version: 1.0.6(tailwindcss@4.1.15)
111
102
'@tailwindcss/vite':
112
-
specifier: ^4.1.14
113
-
version: 4.1.14(vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2))
103
+
specifier: ^4.1.15
104
+
version: 4.1.15(vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2))
114
105
prettier:
115
106
specifier: ^3.6.2
116
107
version: 3.6.2
···
121
112
specifier: ^0.7.1
122
113
version: 0.7.1(prettier-plugin-organize-imports@4.3.0(prettier@3.6.2)(typescript@5.9.3))(prettier@3.6.2)
123
114
tailwindcss:
124
-
specifier: ^4.1.14
125
-
version: 4.1.14
115
+
specifier: ^4.1.15
116
+
version: 4.1.15
126
117
typescript:
127
118
specifier: ^5.9.3
128
119
version: 5.9.3
129
120
vite:
130
-
specifier: ^7.1.10
131
-
version: 7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2)
121
+
specifier: ^7.1.11
122
+
version: 7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2)
132
123
vite-plugin-solid:
133
124
specifier: ^2.11.9
134
-
version: 2.11.9(solid-js@1.9.9)(vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2))
125
+
version: 2.11.9(solid-js@1.9.9)(vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2))
135
126
136
127
packages:
137
128
···
141
132
'@antfu/utils@8.1.1':
142
133
resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
143
134
144
-
'@atcute/atproto@3.1.7':
145
-
resolution: {integrity: sha512-3Ym8qaVZg2vf8qw0KO1aue39z/5oik5J+UDoSes1vr8ddw40UVLA5sV4bXSKmLnhzQHiLLgoVZXe4zaKfozPoQ==}
135
+
'@atcute/atproto@3.1.8':
136
+
resolution: {integrity: sha512-Miu+S7RSgAYbmQWtHJKfSFUN5Kliqoo4YH0rILPmBtfmlZieORJgXNj9oO/Uive0/ulWkiRse07ATIcK8JxMnw==}
146
137
147
-
'@atcute/bluesky@3.2.7':
148
-
resolution: {integrity: sha512-mofkZySIIp+Z+TbBD+cDWaPY6FVKNRZG8yhMFkh6uMCuiazDUAUjxr4yaFjYMVcgMN9FkwGllwQJevUH9aTSnQ==}
138
+
'@atcute/bluesky@3.2.8':
139
+
resolution: {integrity: sha512-wxEnSOvX7nLH4sVzX9YFCkaNEWIDrTv3pTs6/x4NgJ3AJ3XJio0OYPM8tR7wAgsklY6BHvlAgt3yoCDK0cl1CA==}
149
140
150
141
'@atcute/car@3.1.3':
151
142
resolution: {integrity: sha512-WJ13bAEt7TjDMVi09ubjLtvhdljbWInGm9Kfy7Y6NhrmiyC/aZYaA/zHX/bHI6xv1c/h3SQduWqxOr4ae49eqA==}
152
143
144
+
'@atcute/car@5.0.0':
145
+
resolution: {integrity: sha512-OIY2xTXv8lSpZsDSn/UYQtJSMvDw5Hi4Q+uyvmiqSM+fht08QRAEq/nxa5YFciPZ3nfDFnZ3//EgJw7QhkSXLQ==}
146
+
153
147
'@atcute/cbor@2.2.7':
154
148
resolution: {integrity: sha512-/mwAF0gnokOphceZqFq3uzMGdd8sbw5y6bxF8CRutRkCCUcpjjpJc5fkLwhxyGgOveF3mZuHE6p7t/+IAqb7Aw==}
155
149
156
-
'@atcute/cid@2.2.5':
157
-
resolution: {integrity: sha512-7SId61nMyuxSwsDI02wEZn6/gVeha2TrAN4W0UPSdSEcwQD3R2W8VU7zvR4XGfU7A/KmBnVkwx5FTfzyizKj6g==}
150
+
'@atcute/cid@2.2.6':
151
+
resolution: {integrity: sha512-bTAHHbJ24p+E//V4KCS4xdmd39o211jJswvqQOevj7vk+5IYcgDLx1ryZWZ1sEPOo9x875li/kj5gpKL14RDwQ==}
158
152
159
153
'@atcute/client@4.0.5':
160
154
resolution: {integrity: sha512-R8Qen8goGmEkynYGg2m6XFlVmz0GTDvQ+9w+4QqOob+XMk8/WDpF4aImev7WKEde/rV2gjcqW7zM8E6W9NShDA==}
···
173
167
'@atcute/identity@1.1.1':
174
168
resolution: {integrity: sha512-zax42n693VEhnC+5tndvO2KLDTMkHOz8UExwmklvJv7R9VujfEwiSWhcv6Jgwb3ellaG8wjiQ1lMOIjLLvwh0Q==}
175
169
176
-
'@atcute/leaflet@1.0.10':
177
-
resolution: {integrity: sha512-BTALobkbxNO6+IiGRcqfCmMxioqh88S0LEswHLf2rBVfNNL7/gZ0EuHhwN+sizHoY7Od6/MBUk4aOEjUPr16tw==}
170
+
'@atcute/leaflet@1.0.11':
171
+
resolution: {integrity: sha512-PmhBIltPD4DqR737J412ePwtfyBeC/Xr9R+s/d55Aq0kLPo4aBWt+JDb40Mh4JCGGxiz6gu9HFCCZeaVLrL4Dw==}
178
172
179
173
'@atcute/lexicon-doc@1.1.3':
180
174
resolution: {integrity: sha512-HlQBmB4NCZPzREyVzr7lzjRxSiRHook2xfa7DgA3dk3oYZ+KnnPEtS6M1sAmAAddtUdrOrJ+0xJPQHkfElZmpQ==}
181
175
182
-
'@atcute/lexicon-resolver@0.1.2':
183
-
resolution: {integrity: sha512-qiBZspJQIcVL/9ZkWMIThsavbX4PL6F2IEEow5V/eCgKiknfq5G2X4ULb+iKvI2vwl9STCeUpctUT3/q4nXVqg==}
176
+
'@atcute/lexicon-resolver@0.1.3':
177
+
resolution: {integrity: sha512-4AOS3KKm60GtBfl7ue/35xwZlylAuX5V2xmXnAmNoiN3vIauNkYawwRqgtni5q+EIV9R7p4D8tzkv58NaZ8fEQ==}
184
178
peerDependencies:
185
179
'@atcute/identity': ^1.1.0
186
180
'@atcute/identity-resolver': ^1.1.3
···
188
182
'@atcute/lexicons@1.2.2':
189
183
resolution: {integrity: sha512-bgEhJq5Z70/0TbK5sx+tAkrR8FsCODNiL2gUEvS5PuJfPxmFmRYNWaMGehxSPaXWpU2+Oa9ckceHiYbrItDTkA==}
190
184
185
+
'@atcute/mst@0.1.0':
186
+
resolution: {integrity: sha512-h+iDToKEnBpigk2DOHjSqY63vJtjYKUIztqu1CZ0P+I54wV2SrgoqAXAT1xrW6A1Iup8cjTv+U2H5WVG4KxPLw==}
187
+
191
188
'@atcute/multibase@1.1.6':
192
189
resolution: {integrity: sha512-HBxuCgYLKPPxETV0Rot4VP9e24vKl8JdzGCZOVsDaOXJgbRZoRIF67Lp0H/OgnJeH/Xpva8Z5ReoTNJE5dn3kg==}
193
190
194
191
'@atcute/oauth-browser-client@1.0.27':
195
192
resolution: {integrity: sha512-Ng1tCOTMLgFHHoIHXTtCZR1/ND62an1qxPX2kBoUzkxxd7iCP7IBYYqOiKyJYT5n1R4zS+s29hFS4t9mxXa5kQ==}
196
193
197
-
'@atcute/tangled@1.0.9':
198
-
resolution: {integrity: sha512-Nr/LyEe4To5Yz+3IwL2pExKr+AJ7tPMR2+3YNMKeWHvVm+UfMTd4PkwwwAI9fKvBv2qEJ3egE1mXefGW15sqDQ==}
194
+
'@atcute/repo@0.1.0':
195
+
resolution: {integrity: sha512-INiYAuma8dydBu7cqd2WVpcXh3mzhIepYBUqFWAK5MqMulPRLTRCc/9GW3G9pxYrOdlvLCVamG2Jf8XK0nuFEw==}
196
+
197
+
'@atcute/tangled@1.0.10':
198
+
resolution: {integrity: sha512-DGconZIN5TpLBah+aHGbWI1tMsL7XzyVEbr/fW4CbcLWYKICU6SAUZ0YnZ+5GvltjlORWHUy7hfftvoh4zodIA==}
199
199
200
200
'@atcute/tid@1.0.3':
201
201
resolution: {integrity: sha512-wfMJx1IMdnu0CZgWl0uR4JO2s6PGT1YPhpytD4ZHzEYKKQVuqV6Eb/7vieaVo1eYNMp2FrY67FZObeR7utRl2w==}
···
648
648
'@iconify/utils@2.3.0':
649
649
resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
650
650
651
-
'@isaacs/fs-minipass@4.0.1':
652
-
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
653
-
engines: {node: '>=18.0.0'}
654
-
655
651
'@jridgewell/gen-mapping@0.3.13':
656
652
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
657
653
···
815
811
'@standard-schema/spec@1.0.0':
816
812
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
817
813
818
-
'@tailwindcss/node@4.1.14':
819
-
resolution: {integrity: sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw==}
814
+
'@tailwindcss/node@4.1.15':
815
+
resolution: {integrity: sha512-HF4+7QxATZWY3Jr8OlZrBSXmwT3Watj0OogeDvdUY/ByXJHQ+LBtqA2brDb3sBxYslIFx6UP94BJ4X6a4L9Bmw==}
820
816
821
-
'@tailwindcss/oxide-android-arm64@4.1.14':
822
-
resolution: {integrity: sha512-a94ifZrGwMvbdeAxWoSuGcIl6/DOP5cdxagid7xJv6bwFp3oebp7y2ImYsnZBMTwjn5Ev5xESvS3FFYUGgPODQ==}
817
+
'@tailwindcss/oxide-android-arm64@4.1.15':
818
+
resolution: {integrity: sha512-TkUkUgAw8At4cBjCeVCRMc/guVLKOU1D+sBPrHt5uVcGhlbVKxrCaCW9OKUIBv1oWkjh4GbunD/u/Mf0ql6kEA==}
823
819
engines: {node: '>= 10'}
824
820
cpu: [arm64]
825
821
os: [android]
826
822
827
-
'@tailwindcss/oxide-darwin-arm64@4.1.14':
828
-
resolution: {integrity: sha512-HkFP/CqfSh09xCnrPJA7jud7hij5ahKyWomrC3oiO2U9i0UjP17o9pJbxUN0IJ471GTQQmzwhp0DEcpbp4MZTA==}
823
+
'@tailwindcss/oxide-darwin-arm64@4.1.15':
824
+
resolution: {integrity: sha512-xt5XEJpn2piMSfvd1UFN6jrWXyaKCwikP4Pidcf+yfHTSzSpYhG3dcMktjNkQO3JiLCp+0bG0HoWGvz97K162w==}
829
825
engines: {node: '>= 10'}
830
826
cpu: [arm64]
831
827
os: [darwin]
832
828
833
-
'@tailwindcss/oxide-darwin-x64@4.1.14':
834
-
resolution: {integrity: sha512-eVNaWmCgdLf5iv6Qd3s7JI5SEFBFRtfm6W0mphJYXgvnDEAZ5sZzqmI06bK6xo0IErDHdTA5/t7d4eTfWbWOFw==}
829
+
'@tailwindcss/oxide-darwin-x64@4.1.15':
830
+
resolution: {integrity: sha512-TnWaxP6Bx2CojZEXAV2M01Yl13nYPpp0EtGpUrY+LMciKfIXiLL2r/SiSRpagE5Fp2gX+rflp/Os1VJDAyqymg==}
835
831
engines: {node: '>= 10'}
836
832
cpu: [x64]
837
833
os: [darwin]
838
834
839
-
'@tailwindcss/oxide-freebsd-x64@4.1.14':
840
-
resolution: {integrity: sha512-QWLoRXNikEuqtNb0dhQN6wsSVVjX6dmUFzuuiL09ZeXju25dsei2uIPl71y2Ic6QbNBsB4scwBoFnlBfabHkEw==}
835
+
'@tailwindcss/oxide-freebsd-x64@4.1.15':
836
+
resolution: {integrity: sha512-quISQDWqiB6Cqhjc3iWptXVZHNVENsWoI77L1qgGEHNIdLDLFnw3/AfY7DidAiiCIkGX/MjIdB3bbBZR/G2aJg==}
841
837
engines: {node: '>= 10'}
842
838
cpu: [x64]
843
839
os: [freebsd]
844
840
845
-
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14':
846
-
resolution: {integrity: sha512-VB4gjQni9+F0VCASU+L8zSIyjrLLsy03sjcR3bM0V2g4SNamo0FakZFKyUQ96ZVwGK4CaJsc9zd/obQy74o0Fw==}
841
+
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.15':
842
+
resolution: {integrity: sha512-ObG76+vPlab65xzVUQbExmDU9FIeYLQ5k2LrQdR2Ud6hboR+ZobXpDoKEYXf/uOezOfIYmy2Ta3w0ejkTg9yxg==}
847
843
engines: {node: '>= 10'}
848
844
cpu: [arm]
849
845
os: [linux]
850
846
851
-
'@tailwindcss/oxide-linux-arm64-gnu@4.1.14':
852
-
resolution: {integrity: sha512-qaEy0dIZ6d9vyLnmeg24yzA8XuEAD9WjpM5nIM1sUgQ/Zv7cVkharPDQcmm/t/TvXoKo/0knI3me3AGfdx6w1w==}
847
+
'@tailwindcss/oxide-linux-arm64-gnu@4.1.15':
848
+
resolution: {integrity: sha512-4WbBacRmk43pkb8/xts3wnOZMDKsPFyEH/oisCm2q3aLZND25ufvJKcDUpAu0cS+CBOL05dYa8D4U5OWECuH/Q==}
853
849
engines: {node: '>= 10'}
854
850
cpu: [arm64]
855
851
os: [linux]
856
852
857
-
'@tailwindcss/oxide-linux-arm64-musl@4.1.14':
858
-
resolution: {integrity: sha512-ISZjT44s59O8xKsPEIesiIydMG/sCXoMBCqsphDm/WcbnuWLxxb+GcvSIIA5NjUw6F8Tex7s5/LM2yDy8RqYBQ==}
853
+
'@tailwindcss/oxide-linux-arm64-musl@4.1.15':
854
+
resolution: {integrity: sha512-AbvmEiteEj1nf42nE8skdHv73NoR+EwXVSgPY6l39X12Ex8pzOwwfi3Kc8GAmjsnsaDEbk+aj9NyL3UeyHcTLg==}
859
855
engines: {node: '>= 10'}
860
856
cpu: [arm64]
861
857
os: [linux]
862
858
863
-
'@tailwindcss/oxide-linux-x64-gnu@4.1.14':
864
-
resolution: {integrity: sha512-02c6JhLPJj10L2caH4U0zF8Hji4dOeahmuMl23stk0MU1wfd1OraE7rOloidSF8W5JTHkFdVo/O7uRUJJnUAJg==}
859
+
'@tailwindcss/oxide-linux-x64-gnu@4.1.15':
860
+
resolution: {integrity: sha512-+rzMVlvVgrXtFiS+ES78yWgKqpThgV19ISKD58Ck+YO5pO5KjyxLt7AWKsWMbY0R9yBDC82w6QVGz837AKQcHg==}
865
861
engines: {node: '>= 10'}
866
862
cpu: [x64]
867
863
os: [linux]
868
864
869
-
'@tailwindcss/oxide-linux-x64-musl@4.1.14':
870
-
resolution: {integrity: sha512-TNGeLiN1XS66kQhxHG/7wMeQDOoL0S33x9BgmydbrWAb9Qw0KYdd8o1ifx4HOGDWhVmJ+Ul+JQ7lyknQFilO3Q==}
865
+
'@tailwindcss/oxide-linux-x64-musl@4.1.15':
866
+
resolution: {integrity: sha512-fPdEy7a8eQN9qOIK3Em9D3TO1z41JScJn8yxl/76mp4sAXFDfV4YXxsiptJcOwy6bGR+70ZSwFIZhTXzQeqwQg==}
871
867
engines: {node: '>= 10'}
872
868
cpu: [x64]
873
869
os: [linux]
874
870
875
-
'@tailwindcss/oxide-wasm32-wasi@4.1.14':
876
-
resolution: {integrity: sha512-uZYAsaW/jS/IYkd6EWPJKW/NlPNSkWkBlaeVBi/WsFQNP05/bzkebUL8FH1pdsqx4f2fH/bWFcUABOM9nfiJkQ==}
871
+
'@tailwindcss/oxide-wasm32-wasi@4.1.15':
872
+
resolution: {integrity: sha512-sJ4yd6iXXdlgIMfIBXuVGp/NvmviEoMVWMOAGxtxhzLPp9LOj5k0pMEMZdjeMCl4C6Up+RM8T3Zgk+BMQ0bGcQ==}
877
873
engines: {node: '>=14.0.0'}
878
874
cpu: [wasm32]
879
875
bundledDependencies:
···
884
880
- '@emnapi/wasi-threads'
885
881
- tslib
886
882
887
-
'@tailwindcss/oxide-win32-arm64-msvc@4.1.14':
888
-
resolution: {integrity: sha512-Az0RnnkcvRqsuoLH2Z4n3JfAef0wElgzHD5Aky/e+0tBUxUhIeIqFBTMNQvmMRSP15fWwmvjBxZ3Q8RhsDnxAA==}
883
+
'@tailwindcss/oxide-win32-arm64-msvc@4.1.15':
884
+
resolution: {integrity: sha512-sJGE5faXnNQ1iXeqmRin7Ds/ru2fgCiaQZQQz3ZGIDtvbkeV85rAZ0QJFMDg0FrqsffZG96H1U9AQlNBRLsHVg==}
889
885
engines: {node: '>= 10'}
890
886
cpu: [arm64]
891
887
os: [win32]
892
888
893
-
'@tailwindcss/oxide-win32-x64-msvc@4.1.14':
894
-
resolution: {integrity: sha512-ttblVGHgf68kEE4om1n/n44I0yGPkCPbLsqzjvybhpwa6mKKtgFfAzy6btc3HRmuW7nHe0OOrSeNP9sQmmH9XA==}
889
+
'@tailwindcss/oxide-win32-x64-msvc@4.1.15':
890
+
resolution: {integrity: sha512-NLeHE7jUV6HcFKS504bpOohyi01zPXi2PXmjFfkzTph8xRxDdxkRsXm/xDO5uV5K3brrE1cCwbUYmFUSHR3u1w==}
895
891
engines: {node: '>= 10'}
896
892
cpu: [x64]
897
893
os: [win32]
898
894
899
-
'@tailwindcss/oxide@4.1.14':
900
-
resolution: {integrity: sha512-23yx+VUbBwCg2x5XWdB8+1lkPajzLmALEfMb51zZUBYaYVPDQvBSD/WYDqiVyBIo2BZFa3yw1Rpy3G2Jp+K0dw==}
895
+
'@tailwindcss/oxide@4.1.15':
896
+
resolution: {integrity: sha512-krhX+UOOgnsUuks2SR7hFafXmLQrKxB4YyRTERuCE59JlYL+FawgaAlSkOYmDRJdf1Q+IFNDMl9iRnBW7QBDfQ==}
901
897
engines: {node: '>= 10'}
902
898
903
-
'@tailwindcss/vite@4.1.14':
904
-
resolution: {integrity: sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA==}
899
+
'@tailwindcss/vite@4.1.15':
900
+
resolution: {integrity: sha512-B6s60MZRTUil+xKoZoGe6i0Iar5VuW+pmcGlda2FX+guDuQ1G1sjiIy1W0frneVpeL/ZjZ4KEgWZHNrIm++2qA==}
905
901
peerDependencies:
906
902
vite: ^5.2.0 || ^6 || ^7
907
903
···
942
938
solid-js:
943
939
optional: true
944
940
945
-
baseline-browser-mapping@2.8.17:
946
-
resolution: {integrity: sha512-j5zJcx6golJYTG6c05LUZ3Z8Gi+M62zRT/ycz4Xq4iCOdpcxwg7ngEYD4KA0eWZC7U17qh/Smq8bYbACJ0ipBA==}
941
+
baseline-browser-mapping@2.8.18:
942
+
resolution: {integrity: sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==}
947
943
hasBin: true
948
944
949
945
browserslist@4.26.3:
···
953
949
954
950
caniuse-lite@1.0.30001751:
955
951
resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==}
956
-
957
-
chownr@3.0.0:
958
-
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
959
-
engines: {node: '>=18'}
960
952
961
953
codemirror@6.0.2:
962
954
resolution: {integrity: sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==}
···
1075
1067
kolorist@1.8.0:
1076
1068
resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
1077
1069
1078
-
lightningcss-darwin-arm64@1.30.1:
1079
-
resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
1070
+
lightningcss-android-arm64@1.30.2:
1071
+
resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
1072
+
engines: {node: '>= 12.0.0'}
1073
+
cpu: [arm64]
1074
+
os: [android]
1075
+
1076
+
lightningcss-darwin-arm64@1.30.2:
1077
+
resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==}
1080
1078
engines: {node: '>= 12.0.0'}
1081
1079
cpu: [arm64]
1082
1080
os: [darwin]
1083
1081
1084
-
lightningcss-darwin-x64@1.30.1:
1085
-
resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
1082
+
lightningcss-darwin-x64@1.30.2:
1083
+
resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==}
1086
1084
engines: {node: '>= 12.0.0'}
1087
1085
cpu: [x64]
1088
1086
os: [darwin]
1089
1087
1090
-
lightningcss-freebsd-x64@1.30.1:
1091
-
resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
1088
+
lightningcss-freebsd-x64@1.30.2:
1089
+
resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==}
1092
1090
engines: {node: '>= 12.0.0'}
1093
1091
cpu: [x64]
1094
1092
os: [freebsd]
1095
1093
1096
-
lightningcss-linux-arm-gnueabihf@1.30.1:
1097
-
resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==}
1094
+
lightningcss-linux-arm-gnueabihf@1.30.2:
1095
+
resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==}
1098
1096
engines: {node: '>= 12.0.0'}
1099
1097
cpu: [arm]
1100
1098
os: [linux]
1101
1099
1102
-
lightningcss-linux-arm64-gnu@1.30.1:
1103
-
resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
1100
+
lightningcss-linux-arm64-gnu@1.30.2:
1101
+
resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
1104
1102
engines: {node: '>= 12.0.0'}
1105
1103
cpu: [arm64]
1106
1104
os: [linux]
1107
1105
1108
-
lightningcss-linux-arm64-musl@1.30.1:
1109
-
resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
1106
+
lightningcss-linux-arm64-musl@1.30.2:
1107
+
resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
1110
1108
engines: {node: '>= 12.0.0'}
1111
1109
cpu: [arm64]
1112
1110
os: [linux]
1113
1111
1114
-
lightningcss-linux-x64-gnu@1.30.1:
1115
-
resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
1112
+
lightningcss-linux-x64-gnu@1.30.2:
1113
+
resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
1116
1114
engines: {node: '>= 12.0.0'}
1117
1115
cpu: [x64]
1118
1116
os: [linux]
1119
1117
1120
-
lightningcss-linux-x64-musl@1.30.1:
1121
-
resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
1118
+
lightningcss-linux-x64-musl@1.30.2:
1119
+
resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
1122
1120
engines: {node: '>= 12.0.0'}
1123
1121
cpu: [x64]
1124
1122
os: [linux]
1125
1123
1126
-
lightningcss-win32-arm64-msvc@1.30.1:
1127
-
resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
1124
+
lightningcss-win32-arm64-msvc@1.30.2:
1125
+
resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
1128
1126
engines: {node: '>= 12.0.0'}
1129
1127
cpu: [arm64]
1130
1128
os: [win32]
1131
1129
1132
-
lightningcss-win32-x64-msvc@1.30.1:
1133
-
resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==}
1130
+
lightningcss-win32-x64-msvc@1.30.2:
1131
+
resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==}
1134
1132
engines: {node: '>= 12.0.0'}
1135
1133
cpu: [x64]
1136
1134
os: [win32]
1137
1135
1138
-
lightningcss@1.30.1:
1139
-
resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
1136
+
lightningcss@1.30.2:
1137
+
resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
1140
1138
engines: {node: '>= 12.0.0'}
1141
1139
1142
1140
local-pkg@1.1.2:
···
1153
1151
resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==}
1154
1152
engines: {node: '>=12.13'}
1155
1153
1156
-
minipass@7.1.2:
1157
-
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
1158
-
engines: {node: '>=16 || 14 >=14.17'}
1159
-
1160
-
minizlib@3.1.0:
1161
-
resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
1162
-
engines: {node: '>= 18'}
1163
-
1164
1154
mlly@1.8.0:
1165
1155
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
1166
1156
···
1184
1174
node-releases@2.0.25:
1185
1175
resolution: {integrity: sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==}
1186
1176
1187
-
package-manager-detector@1.4.1:
1188
-
resolution: {integrity: sha512-dSMiVLBEA4XaNJ0PRb4N5cV/SEP4BWrWZKBmfF+OUm2pQTiZ6DDkKeWaltwu3JRhLoy59ayIkJ00cx9K9CaYTg==}
1177
+
package-manager-detector@1.5.0:
1178
+
resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==}
1189
1179
1190
1180
parse5@7.3.0:
1191
1181
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
···
1320
1310
style-mod@4.1.3:
1321
1311
resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==}
1322
1312
1323
-
tailwindcss@4.1.14:
1324
-
resolution: {integrity: sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==}
1313
+
tailwindcss@4.1.15:
1314
+
resolution: {integrity: sha512-k2WLnWkYFkdpRv+Oby3EBXIyQC8/s1HOFMBUViwtAh6Z5uAozeUSMQlIsn/c6Q2iJzqG6aJT3wdPaRNj70iYxQ==}
1325
1315
1326
1316
tapable@2.3.0:
1327
1317
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
1328
1318
engines: {node: '>=6'}
1329
-
1330
-
tar@7.5.1:
1331
-
resolution: {integrity: sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==}
1332
-
engines: {node: '>=18'}
1333
1319
1334
1320
tinyexec@1.0.1:
1335
1321
resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
···
1373
1359
'@testing-library/jest-dom':
1374
1360
optional: true
1375
1361
1376
-
vite@7.1.10:
1377
-
resolution: {integrity: sha512-CmuvUBzVJ/e3HGxhg6cYk88NGgTnBoOo7ogtfJJ0fefUWAxN/WDSUa50o+oVBxuIhO8FoEZW0j2eW7sfjs5EtA==}
1362
+
vite@7.1.11:
1363
+
resolution: {integrity: sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==}
1378
1364
engines: {node: ^20.19.0 || >=22.12.0}
1379
1365
hasBin: true
1380
1366
peerDependencies:
···
1427
1413
yallist@3.1.1:
1428
1414
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
1429
1415
1430
-
yallist@5.0.0:
1431
-
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
1432
-
engines: {node: '>=18'}
1433
-
1434
1416
yocto-queue@1.2.1:
1435
1417
resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
1436
1418
engines: {node: '>=12.20'}
···
1439
1421
1440
1422
'@antfu/install-pkg@1.1.0':
1441
1423
dependencies:
1442
-
package-manager-detector: 1.4.1
1424
+
package-manager-detector: 1.5.0
1443
1425
tinyexec: 1.0.1
1444
1426
1445
1427
'@antfu/utils@8.1.1': {}
1446
1428
1447
-
'@atcute/atproto@3.1.7':
1429
+
'@atcute/atproto@3.1.8':
1448
1430
dependencies:
1449
1431
'@atcute/lexicons': 1.2.2
1450
1432
1451
-
'@atcute/bluesky@3.2.7':
1433
+
'@atcute/bluesky@3.2.8':
1452
1434
dependencies:
1453
-
'@atcute/atproto': 3.1.7
1435
+
'@atcute/atproto': 3.1.8
1454
1436
'@atcute/lexicons': 1.2.2
1455
1437
1456
1438
'@atcute/car@3.1.3':
1457
1439
dependencies:
1458
1440
'@atcute/cbor': 2.2.7
1459
-
'@atcute/cid': 2.2.5
1441
+
'@atcute/cid': 2.2.6
1460
1442
'@atcute/uint8array': 1.0.5
1461
1443
'@atcute/varint': 1.0.3
1462
1444
yocto-queue: 1.2.1
1463
1445
1446
+
'@atcute/car@5.0.0':
1447
+
dependencies:
1448
+
'@atcute/cbor': 2.2.7
1449
+
'@atcute/cid': 2.2.6
1450
+
'@atcute/uint8array': 1.0.5
1451
+
'@atcute/varint': 1.0.3
1452
+
1464
1453
'@atcute/cbor@2.2.7':
1465
1454
dependencies:
1466
-
'@atcute/cid': 2.2.5
1455
+
'@atcute/cid': 2.2.6
1467
1456
'@atcute/multibase': 1.1.6
1468
1457
'@atcute/uint8array': 1.0.5
1469
1458
1470
-
'@atcute/cid@2.2.5':
1459
+
'@atcute/cid@2.2.6':
1471
1460
dependencies:
1472
1461
'@atcute/multibase': 1.1.6
1473
1462
'@atcute/uint8array': 1.0.5
···
1486
1475
'@atcute/did-plc@0.1.7':
1487
1476
dependencies:
1488
1477
'@atcute/cbor': 2.2.7
1489
-
'@atcute/cid': 2.2.5
1478
+
'@atcute/cid': 2.2.6
1490
1479
'@atcute/crypto': 2.2.5
1491
1480
'@atcute/identity': 1.1.1
1492
1481
'@atcute/lexicons': 1.2.2
···
1506
1495
'@atcute/lexicons': 1.2.2
1507
1496
'@badrap/valita': 0.4.6
1508
1497
1509
-
'@atcute/leaflet@1.0.10':
1498
+
'@atcute/leaflet@1.0.11':
1510
1499
dependencies:
1511
-
'@atcute/atproto': 3.1.7
1500
+
'@atcute/atproto': 3.1.8
1512
1501
'@atcute/lexicons': 1.2.2
1513
1502
1514
1503
'@atcute/lexicon-doc@1.1.3':
1515
1504
dependencies:
1516
1505
'@badrap/valita': 0.4.6
1517
1506
1518
-
'@atcute/lexicon-resolver@0.1.2(@atcute/identity-resolver@1.1.4(@atcute/identity@1.1.1))(@atcute/identity@1.1.1)':
1507
+
'@atcute/lexicon-resolver@0.1.3(@atcute/identity-resolver@1.1.4(@atcute/identity@1.1.1))(@atcute/identity@1.1.1)':
1519
1508
dependencies:
1520
-
'@atcute/car': 3.1.3
1509
+
'@atcute/car': 5.0.0
1521
1510
'@atcute/cbor': 2.2.7
1522
-
'@atcute/cid': 2.2.5
1511
+
'@atcute/cid': 2.2.6
1523
1512
'@atcute/crypto': 2.2.5
1524
1513
'@atcute/identity': 1.1.1
1525
1514
'@atcute/identity-resolver': 1.1.4(@atcute/identity@1.1.1)
1526
1515
'@atcute/lexicon-doc': 1.1.3
1527
1516
'@atcute/lexicons': 1.2.2
1517
+
'@atcute/repo': 0.1.0
1528
1518
'@atcute/uint8array': 1.0.5
1529
1519
'@atcute/util-fetch': 1.0.3
1530
1520
'@badrap/valita': 0.4.6
···
1534
1524
'@standard-schema/spec': 1.0.0
1535
1525
esm-env: 1.2.2
1536
1526
1527
+
'@atcute/mst@0.1.0':
1528
+
dependencies:
1529
+
'@atcute/cbor': 2.2.7
1530
+
'@atcute/cid': 2.2.6
1531
+
'@atcute/uint8array': 1.0.5
1532
+
1537
1533
'@atcute/multibase@1.1.6':
1538
1534
dependencies:
1539
1535
'@atcute/uint8array': 1.0.5
···
1547
1543
'@atcute/uint8array': 1.0.5
1548
1544
nanoid: 5.1.6
1549
1545
1550
-
'@atcute/tangled@1.0.9':
1546
+
'@atcute/repo@0.1.0':
1547
+
dependencies:
1548
+
'@atcute/car': 5.0.0
1549
+
'@atcute/cbor': 2.2.7
1550
+
'@atcute/cid': 2.2.6
1551
+
'@atcute/crypto': 2.2.5
1552
+
'@atcute/lexicons': 1.2.2
1553
+
'@atcute/mst': 0.1.0
1554
+
'@atcute/uint8array': 1.0.5
1555
+
1556
+
'@atcute/tangled@1.0.10':
1551
1557
dependencies:
1552
-
'@atcute/atproto': 3.1.7
1558
+
'@atcute/atproto': 3.1.8
1553
1559
'@atcute/lexicons': 1.2.2
1554
1560
1555
1561
'@atcute/tid@1.0.3': {}
···
1894
1900
dependencies:
1895
1901
'@iconify/types': 2.0.0
1896
1902
1897
-
'@iconify/tailwind4@1.0.6(tailwindcss@4.1.14)':
1903
+
'@iconify/tailwind4@1.0.6(tailwindcss@4.1.15)':
1898
1904
dependencies:
1899
1905
'@iconify/types': 2.0.0
1900
1906
'@iconify/utils': 2.3.0
1901
-
tailwindcss: 4.1.14
1907
+
tailwindcss: 4.1.15
1902
1908
transitivePeerDependencies:
1903
1909
- supports-color
1904
1910
···
1916
1922
mlly: 1.8.0
1917
1923
transitivePeerDependencies:
1918
1924
- supports-color
1919
-
1920
-
'@isaacs/fs-minipass@4.0.1':
1921
-
dependencies:
1922
-
minipass: 7.1.2
1923
1925
1924
1926
'@jridgewell/gen-mapping@0.3.13':
1925
1927
dependencies:
···
2044
2046
2045
2047
'@standard-schema/spec@1.0.0': {}
2046
2048
2047
-
'@tailwindcss/node@4.1.14':
2049
+
'@tailwindcss/node@4.1.15':
2048
2050
dependencies:
2049
2051
'@jridgewell/remapping': 2.3.5
2050
2052
enhanced-resolve: 5.18.3
2051
2053
jiti: 2.6.1
2052
-
lightningcss: 1.30.1
2054
+
lightningcss: 1.30.2
2053
2055
magic-string: 0.30.19
2054
2056
source-map-js: 1.2.1
2055
-
tailwindcss: 4.1.14
2057
+
tailwindcss: 4.1.15
2056
2058
2057
-
'@tailwindcss/oxide-android-arm64@4.1.14':
2059
+
'@tailwindcss/oxide-android-arm64@4.1.15':
2058
2060
optional: true
2059
2061
2060
-
'@tailwindcss/oxide-darwin-arm64@4.1.14':
2062
+
'@tailwindcss/oxide-darwin-arm64@4.1.15':
2061
2063
optional: true
2062
2064
2063
-
'@tailwindcss/oxide-darwin-x64@4.1.14':
2065
+
'@tailwindcss/oxide-darwin-x64@4.1.15':
2064
2066
optional: true
2065
2067
2066
-
'@tailwindcss/oxide-freebsd-x64@4.1.14':
2068
+
'@tailwindcss/oxide-freebsd-x64@4.1.15':
2067
2069
optional: true
2068
2070
2069
-
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.14':
2071
+
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.15':
2070
2072
optional: true
2071
2073
2072
-
'@tailwindcss/oxide-linux-arm64-gnu@4.1.14':
2074
+
'@tailwindcss/oxide-linux-arm64-gnu@4.1.15':
2073
2075
optional: true
2074
2076
2075
-
'@tailwindcss/oxide-linux-arm64-musl@4.1.14':
2077
+
'@tailwindcss/oxide-linux-arm64-musl@4.1.15':
2076
2078
optional: true
2077
2079
2078
-
'@tailwindcss/oxide-linux-x64-gnu@4.1.14':
2080
+
'@tailwindcss/oxide-linux-x64-gnu@4.1.15':
2079
2081
optional: true
2080
2082
2081
-
'@tailwindcss/oxide-linux-x64-musl@4.1.14':
2083
+
'@tailwindcss/oxide-linux-x64-musl@4.1.15':
2082
2084
optional: true
2083
2085
2084
-
'@tailwindcss/oxide-wasm32-wasi@4.1.14':
2086
+
'@tailwindcss/oxide-wasm32-wasi@4.1.15':
2085
2087
optional: true
2086
2088
2087
-
'@tailwindcss/oxide-win32-arm64-msvc@4.1.14':
2089
+
'@tailwindcss/oxide-win32-arm64-msvc@4.1.15':
2088
2090
optional: true
2089
2091
2090
-
'@tailwindcss/oxide-win32-x64-msvc@4.1.14':
2092
+
'@tailwindcss/oxide-win32-x64-msvc@4.1.15':
2091
2093
optional: true
2092
2094
2093
-
'@tailwindcss/oxide@4.1.14':
2094
-
dependencies:
2095
-
detect-libc: 2.1.2
2096
-
tar: 7.5.1
2095
+
'@tailwindcss/oxide@4.1.15':
2097
2096
optionalDependencies:
2098
-
'@tailwindcss/oxide-android-arm64': 4.1.14
2099
-
'@tailwindcss/oxide-darwin-arm64': 4.1.14
2100
-
'@tailwindcss/oxide-darwin-x64': 4.1.14
2101
-
'@tailwindcss/oxide-freebsd-x64': 4.1.14
2102
-
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.14
2103
-
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.14
2104
-
'@tailwindcss/oxide-linux-arm64-musl': 4.1.14
2105
-
'@tailwindcss/oxide-linux-x64-gnu': 4.1.14
2106
-
'@tailwindcss/oxide-linux-x64-musl': 4.1.14
2107
-
'@tailwindcss/oxide-wasm32-wasi': 4.1.14
2108
-
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.14
2109
-
'@tailwindcss/oxide-win32-x64-msvc': 4.1.14
2097
+
'@tailwindcss/oxide-android-arm64': 4.1.15
2098
+
'@tailwindcss/oxide-darwin-arm64': 4.1.15
2099
+
'@tailwindcss/oxide-darwin-x64': 4.1.15
2100
+
'@tailwindcss/oxide-freebsd-x64': 4.1.15
2101
+
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.15
2102
+
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.15
2103
+
'@tailwindcss/oxide-linux-arm64-musl': 4.1.15
2104
+
'@tailwindcss/oxide-linux-x64-gnu': 4.1.15
2105
+
'@tailwindcss/oxide-linux-x64-musl': 4.1.15
2106
+
'@tailwindcss/oxide-wasm32-wasi': 4.1.15
2107
+
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.15
2108
+
'@tailwindcss/oxide-win32-x64-msvc': 4.1.15
2110
2109
2111
-
'@tailwindcss/vite@4.1.14(vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2))':
2110
+
'@tailwindcss/vite@4.1.15(vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2))':
2112
2111
dependencies:
2113
-
'@tailwindcss/node': 4.1.14
2114
-
'@tailwindcss/oxide': 4.1.14
2115
-
tailwindcss: 4.1.14
2116
-
vite: 7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2)
2112
+
'@tailwindcss/node': 4.1.15
2113
+
'@tailwindcss/oxide': 4.1.15
2114
+
tailwindcss: 4.1.15
2115
+
vite: 7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2)
2117
2116
2118
2117
'@types/babel__core@7.20.5':
2119
2118
dependencies:
···
2162
2161
optionalDependencies:
2163
2162
solid-js: 1.9.9
2164
2163
2165
-
baseline-browser-mapping@2.8.17: {}
2164
+
baseline-browser-mapping@2.8.18: {}
2166
2165
2167
2166
browserslist@4.26.3:
2168
2167
dependencies:
2169
-
baseline-browser-mapping: 2.8.17
2168
+
baseline-browser-mapping: 2.8.18
2170
2169
caniuse-lite: 1.0.30001751
2171
2170
electron-to-chromium: 1.5.237
2172
2171
node-releases: 2.0.25
2173
2172
update-browserslist-db: 1.1.3(browserslist@4.26.3)
2174
2173
2175
2174
caniuse-lite@1.0.30001751: {}
2176
-
2177
-
chownr@3.0.0: {}
2178
2175
2179
2176
codemirror@6.0.2:
2180
2177
dependencies:
···
2306
2303
2307
2304
kolorist@1.8.0: {}
2308
2305
2309
-
lightningcss-darwin-arm64@1.30.1:
2306
+
lightningcss-android-arm64@1.30.2:
2310
2307
optional: true
2311
2308
2312
-
lightningcss-darwin-x64@1.30.1:
2309
+
lightningcss-darwin-arm64@1.30.2:
2313
2310
optional: true
2314
2311
2315
-
lightningcss-freebsd-x64@1.30.1:
2312
+
lightningcss-darwin-x64@1.30.2:
2316
2313
optional: true
2317
2314
2318
-
lightningcss-linux-arm-gnueabihf@1.30.1:
2315
+
lightningcss-freebsd-x64@1.30.2:
2319
2316
optional: true
2320
2317
2321
-
lightningcss-linux-arm64-gnu@1.30.1:
2318
+
lightningcss-linux-arm-gnueabihf@1.30.2:
2322
2319
optional: true
2323
2320
2324
-
lightningcss-linux-arm64-musl@1.30.1:
2321
+
lightningcss-linux-arm64-gnu@1.30.2:
2325
2322
optional: true
2326
2323
2327
-
lightningcss-linux-x64-gnu@1.30.1:
2324
+
lightningcss-linux-arm64-musl@1.30.2:
2328
2325
optional: true
2329
2326
2330
-
lightningcss-linux-x64-musl@1.30.1:
2327
+
lightningcss-linux-x64-gnu@1.30.2:
2331
2328
optional: true
2332
2329
2333
-
lightningcss-win32-arm64-msvc@1.30.1:
2330
+
lightningcss-linux-x64-musl@1.30.2:
2334
2331
optional: true
2335
2332
2336
-
lightningcss-win32-x64-msvc@1.30.1:
2333
+
lightningcss-win32-arm64-msvc@1.30.2:
2337
2334
optional: true
2338
2335
2339
-
lightningcss@1.30.1:
2336
+
lightningcss-win32-x64-msvc@1.30.2:
2337
+
optional: true
2338
+
2339
+
lightningcss@1.30.2:
2340
2340
dependencies:
2341
2341
detect-libc: 2.1.2
2342
2342
optionalDependencies:
2343
-
lightningcss-darwin-arm64: 1.30.1
2344
-
lightningcss-darwin-x64: 1.30.1
2345
-
lightningcss-freebsd-x64: 1.30.1
2346
-
lightningcss-linux-arm-gnueabihf: 1.30.1
2347
-
lightningcss-linux-arm64-gnu: 1.30.1
2348
-
lightningcss-linux-arm64-musl: 1.30.1
2349
-
lightningcss-linux-x64-gnu: 1.30.1
2350
-
lightningcss-linux-x64-musl: 1.30.1
2351
-
lightningcss-win32-arm64-msvc: 1.30.1
2352
-
lightningcss-win32-x64-msvc: 1.30.1
2343
+
lightningcss-android-arm64: 1.30.2
2344
+
lightningcss-darwin-arm64: 1.30.2
2345
+
lightningcss-darwin-x64: 1.30.2
2346
+
lightningcss-freebsd-x64: 1.30.2
2347
+
lightningcss-linux-arm-gnueabihf: 1.30.2
2348
+
lightningcss-linux-arm64-gnu: 1.30.2
2349
+
lightningcss-linux-arm64-musl: 1.30.2
2350
+
lightningcss-linux-x64-gnu: 1.30.2
2351
+
lightningcss-linux-x64-musl: 1.30.2
2352
+
lightningcss-win32-arm64-msvc: 1.30.2
2353
+
lightningcss-win32-x64-msvc: 1.30.2
2353
2354
2354
2355
local-pkg@1.1.2:
2355
2356
dependencies:
···
2368
2369
merge-anything@5.1.7:
2369
2370
dependencies:
2370
2371
is-what: 4.1.16
2371
-
2372
-
minipass@7.1.2: {}
2373
-
2374
-
minizlib@3.1.0:
2375
-
dependencies:
2376
-
minipass: 7.1.2
2377
2372
2378
2373
mlly@1.8.0:
2379
2374
dependencies:
···
2392
2387
2393
2388
node-releases@2.0.25: {}
2394
2389
2395
-
package-manager-detector@1.4.1: {}
2390
+
package-manager-detector@1.5.0: {}
2396
2391
2397
2392
parse5@7.3.0:
2398
2393
dependencies:
···
2495
2490
2496
2491
style-mod@4.1.3: {}
2497
2492
2498
-
tailwindcss@4.1.14: {}
2493
+
tailwindcss@4.1.15: {}
2499
2494
2500
2495
tapable@2.3.0: {}
2501
-
2502
-
tar@7.5.1:
2503
-
dependencies:
2504
-
'@isaacs/fs-minipass': 4.0.1
2505
-
chownr: 3.0.0
2506
-
minipass: 7.1.2
2507
-
minizlib: 3.1.0
2508
-
yallist: 5.0.0
2509
2496
2510
2497
tinyexec@1.0.1: {}
2511
2498
···
2537
2524
2538
2525
validate-html-nesting@1.2.3: {}
2539
2526
2540
-
vite-plugin-solid@2.11.9(solid-js@1.9.9)(vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2)):
2527
+
vite-plugin-solid@2.11.9(solid-js@1.9.9)(vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2)):
2541
2528
dependencies:
2542
2529
'@babel/core': 7.28.4
2543
2530
'@types/babel__core': 7.20.5
···
2545
2532
merge-anything: 5.1.7
2546
2533
solid-js: 1.9.9
2547
2534
solid-refresh: 0.6.3(solid-js@1.9.9)
2548
-
vite: 7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2)
2549
-
vitefu: 1.1.1(vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2))
2535
+
vite: 7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2)
2536
+
vitefu: 1.1.1(vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2))
2550
2537
transitivePeerDependencies:
2551
2538
- supports-color
2552
2539
2553
-
vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2):
2540
+
vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2):
2554
2541
dependencies:
2555
2542
esbuild: 0.25.11
2556
2543
fdir: 6.5.0(picomatch@4.0.3)
···
2562
2549
'@types/node': 22.13.1
2563
2550
fsevents: 2.3.3
2564
2551
jiti: 2.6.1
2565
-
lightningcss: 1.30.1
2552
+
lightningcss: 1.30.2
2566
2553
tsx: 4.19.2
2567
2554
2568
-
vitefu@1.1.1(vite@7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2)):
2555
+
vitefu@1.1.1(vite@7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2)):
2569
2556
optionalDependencies:
2570
-
vite: 7.1.10(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.1)(tsx@4.19.2)
2557
+
vite: 7.1.11(@types/node@22.13.1)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.19.2)
2571
2558
2572
2559
w3c-keyname@2.2.8: {}
2573
2560
2574
2561
yallist@3.1.1: {}
2575
-
2576
-
yallist@5.0.0: {}
2577
2562
2578
2563
yocto-queue@1.2.1: {}
+2
-2
src/components/account.tsx
+2
-2
src/components/account.tsx
···
97
97
return (
98
98
<>
99
99
<Modal open={openManager()} onClose={() => setOpenManager(false)}>
100
-
<div class="dark:bg-dark-300 dark:shadow-dark-700 absolute top-16 left-[50%] w-[22rem] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-200 dark:border-neutral-700 starting:opacity-0">
100
+
<div class="dark:bg-dark-300 dark:shadow-dark-700 absolute top-16 left-[50%] w-88 -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-200 dark:border-neutral-700 starting:opacity-0">
101
101
<div class="mb-2 px-1 font-semibold">
102
102
<span>Manage accounts</span>
103
103
</div>
104
-
<div class="mb-3 max-h-[20rem] overflow-y-auto md:max-h-[25rem]">
104
+
<div class="mb-3 max-h-80 overflow-y-auto md:max-h-100">
105
105
<For each={Object.keys(sessions)}>
106
106
{(did) => (
107
107
<div class="flex items-center">
+4
-4
src/components/create.tsx
+4
-4
src/components/create.tsx
···
334
334
<div
335
335
data-draggable
336
336
classList={{
337
-
"dark:bg-dark-300 dark:shadow-dark-700 pointer-events-auto absolute top-16 left-[50%] w-screen -translate-x-1/2 cursor-grab rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-200 sm:w-xl lg:w-[48rem] dark:border-neutral-700 starting:opacity-0": true,
337
+
"dark:bg-dark-300 dark:shadow-dark-700 pointer-events-auto absolute top-16 left-[50%] w-screen -translate-x-1/2 cursor-grab rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-200 sm:w-xl lg:w-3xl dark:border-neutral-700 starting:opacity-0": true,
338
338
"opacity-60 hover:opacity-100": nonBlocking(),
339
339
}}
340
340
ref={dragBox}
···
369
369
<div class="flex flex-wrap items-center gap-1 text-sm">
370
370
<span>at://</span>
371
371
<select
372
-
class="dark:bg-dark-100 dark:shadow-dark-700 max-w-[10rem] truncate rounded-lg border-[0.5px] border-neutral-300 bg-white px-1 py-1 shadow-xs select-none focus:outline-[1px] focus:outline-neutral-600 dark:border-neutral-600 dark:focus:outline-neutral-400"
372
+
class="dark:bg-dark-100 dark:shadow-dark-700 max-w-40 truncate rounded-lg border-[0.5px] border-neutral-300 bg-white px-1 py-1 shadow-xs select-none focus:outline-[1px] focus:outline-neutral-600 dark:border-neutral-600 dark:focus:outline-neutral-400"
373
373
name="repo"
374
374
id="repo"
375
375
>
···
386
386
id="collection"
387
387
name="collection"
388
388
placeholder="Collection (default: $type)"
389
-
class="w-[10rem] placeholder:text-xs lg:w-[13rem]"
389
+
class="w-40 placeholder:text-xs lg:w-52"
390
390
/>
391
391
<span>/</span>
392
392
<TextInput
393
393
id="rkey"
394
394
name="rkey"
395
395
placeholder="Record key (default: TID)"
396
-
class="w-[10rem] placeholder:text-xs lg:w-[13rem]"
396
+
class="w-40 placeholder:text-xs lg:w-52"
397
397
/>
398
398
</div>
399
399
</Show>
+1
-1
src/components/json.tsx
+1
-1
src/components/json.tsx
···
154
154
<span class="flex gap-x-1">
155
155
<Show when={blob.mimeType.startsWith("image/") && !hide()}>
156
156
<img
157
-
class="h-auto max-h-[16rem] max-w-[16rem] object-contain"
157
+
class="h-auto max-h-64 max-w-[16rem] object-contain"
158
158
src={`https://${pds()}/xrpc/com.atproto.sync.getBlob?did=${repo}&cid=${blob.ref.$link}`}
159
159
/>
160
160
</Show>
+1
-1
src/components/search.tsx
+1
-1
src/components/search.tsx
···
165
165
return (
166
166
<>
167
167
<Modal open={openList()} onClose={() => setOpenList(false)}>
168
-
<div class="dark:bg-dark-300 dark:shadow-dark-700 absolute top-16 left-[50%] w-[22rem] -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-200 sm:w-[26rem] dark:border-neutral-700 starting:opacity-0">
168
+
<div class="dark:bg-dark-300 dark:shadow-dark-700 absolute top-16 left-[50%] w-88 -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-4 shadow-md transition-opacity duration-200 sm:w-104 dark:border-neutral-700 starting:opacity-0">
169
169
<div class="mb-2 flex items-center gap-1 font-semibold">
170
170
<span class="iconify lucide--link"></span>
171
171
<span>Supported URLs</span>
+1
-1
src/components/video-player.tsx
+1
-1
src/components/video-player.tsx
+1
-1
src/layout.tsx
+1
-1
src/layout.tsx
···
113
113
</Show>
114
114
<Show keyed when={location.pathname}>
115
115
<ErrorBoundary
116
-
fallback={(err) => <div class="mt-3 break-words">Error: {err.message}</div>}
116
+
fallback={(err) => <div class="mt-3 wrap-break-word">Error: {err.message}</div>}
117
117
>
118
118
<Suspense
119
119
fallback={
-306
src/utils/verify.ts
-306
src/utils/verify.ts
···
1
-
import * as CAR from "@atcute/car";
2
-
import { CarReader } from "@atcute/car/v4";
3
-
import * as CBOR from "@atcute/cbor";
4
-
import * as CID from "@atcute/cid";
5
-
import { Client } from "@atcute/client";
6
-
import { type FoundPublicKey, getPublicKeyFromDidController, verifySig } from "@atcute/crypto";
7
-
import { type DidDocument, getAtprotoVerificationMaterial } from "@atcute/identity";
8
-
import { Did } from "@atcute/lexicons";
9
-
import { toSha256 } from "@atcute/uint8array";
10
-
11
-
import { type AddressedAtUri, parseAddressedAtUri } from "./types/at-uri";
12
-
13
-
export interface VerifyError {
14
-
message: string;
15
-
detail?: unknown;
16
-
}
17
-
18
-
export interface VerifyResult {
19
-
errors: VerifyError[];
20
-
}
21
-
22
-
export interface VerifyOptions {
23
-
rpc: Client;
24
-
uri: string;
25
-
cid: string;
26
-
record: unknown;
27
-
didDoc: DidDocument;
28
-
}
29
-
30
-
export const verifyRecord = async (opts: VerifyOptions): Promise<VerifyResult> => {
31
-
const errors: VerifyError[] = [];
32
-
33
-
// verify cid can be parsed
34
-
try {
35
-
CID.fromString(opts.cid);
36
-
} catch (e) {
37
-
errors.push({ message: `provided cid is invalid`, detail: e });
38
-
}
39
-
40
-
// verify record content matches cid
41
-
let cbor: Uint8Array;
42
-
{
43
-
cbor = CBOR.encode(opts.record);
44
-
45
-
const cid = await CID.create(CID.CODEC_DCBOR, cbor);
46
-
const cidString = CID.toString(cid);
47
-
48
-
if (cidString !== opts.cid) {
49
-
errors.push({ message: `record content does not match cid` });
50
-
}
51
-
}
52
-
53
-
// verify at-uri is valid
54
-
let uri: AddressedAtUri;
55
-
try {
56
-
uri = parseAddressedAtUri(opts.uri);
57
-
58
-
if (uri.repo !== opts.didDoc.id) {
59
-
errors.push({ message: `repo in at-uri does not match did document` });
60
-
}
61
-
} catch (err) {
62
-
errors.push({ message: `provided at-uri is invalid`, detail: err });
63
-
return { errors };
64
-
}
65
-
66
-
// grab public key from did document
67
-
let publicKey: FoundPublicKey;
68
-
try {
69
-
const controller = getAtprotoVerificationMaterial(opts.didDoc);
70
-
if (!controller) {
71
-
errors.push({
72
-
message: `did document does not contain verification material`,
73
-
});
74
-
return { errors };
75
-
}
76
-
77
-
publicKey = getPublicKeyFromDidController(controller);
78
-
} catch (err) {
79
-
errors.push({
80
-
message: `failed to get public key from did document`,
81
-
detail: err,
82
-
});
83
-
return { errors };
84
-
}
85
-
86
-
// grab the raw record blocks from the pds
87
-
let car: Uint8Array;
88
-
const { ok, data } = await opts.rpc.get("com.atproto.sync.getRecord", {
89
-
params: {
90
-
did: opts.didDoc.id as Did,
91
-
collection: uri.collection,
92
-
rkey: uri.rkey,
93
-
},
94
-
as: "bytes",
95
-
});
96
-
if (!ok) {
97
-
errors.push({ message: `failed to fetch car from pds`, detail: data.error });
98
-
return { errors };
99
-
} else {
100
-
car = data;
101
-
}
102
-
103
-
// read the car
104
-
let blockmap: CAR.BlockMap;
105
-
let commit: CAR.Commit;
106
-
107
-
try {
108
-
const reader = CarReader.fromUint8Array(car);
109
-
if (reader.header.data.roots.length !== 1) {
110
-
errors.push({ message: `car must have exactly one root` });
111
-
return { errors };
112
-
}
113
-
114
-
blockmap = new Map();
115
-
for (const entry of reader) {
116
-
const cidString = CID.toString(entry.cid);
117
-
118
-
// Verify that `bytes` matches its associated CID
119
-
const expectedCid = CID.toString(await CID.create(entry.cid.codec as 85 | 113, entry.bytes));
120
-
if (cidString !== expectedCid) {
121
-
errors.push({
122
-
message: `cid does not match bytes`,
123
-
detail: { cid: cidString, expectedCid },
124
-
});
125
-
}
126
-
127
-
blockmap.set(cidString, entry);
128
-
}
129
-
130
-
if (blockmap.size === 0) {
131
-
errors.push({ message: `car must have at least one block` });
132
-
return { errors };
133
-
}
134
-
135
-
commit = CAR.readBlock(blockmap, reader.header.data.roots[0], CAR.isCommit);
136
-
} catch (err) {
137
-
errors.push({ message: `failed to read car`, detail: err });
138
-
return { errors };
139
-
}
140
-
141
-
// verify did in commit matches the did in the at-uri
142
-
if (commit.did !== opts.didDoc.id) {
143
-
errors.push({ message: `did in commit does not match did document` });
144
-
}
145
-
146
-
// verify signature contained in commit is valid
147
-
{
148
-
const { sig, ...unsigned } = commit;
149
-
150
-
const data = CBOR.encode(unsigned);
151
-
const valid = await verifySig(
152
-
publicKey,
153
-
CBOR.fromBytes(sig) as Uint8Array<ArrayBuffer>,
154
-
data as Uint8Array<ArrayBuffer>,
155
-
);
156
-
157
-
if (!valid) {
158
-
errors.push({ message: `signature verification failed` });
159
-
}
160
-
}
161
-
162
-
// verify the commit is a valid commit
163
-
try {
164
-
const result = await dfs(blockmap, commit.data.$link, opts.cid);
165
-
if (!result.found) {
166
-
errors.push({ message: `could not find record in car` });
167
-
}
168
-
} catch (err) {
169
-
errors.push({ message: `failed to iterate over car`, detail: err });
170
-
}
171
-
172
-
return { errors };
173
-
};
174
-
175
-
interface DfsResult {
176
-
found: boolean;
177
-
min?: string;
178
-
max?: string;
179
-
depth?: number;
180
-
}
181
-
182
-
const encoder = new TextEncoder();
183
-
const decoder = new TextDecoder();
184
-
185
-
const dfs = async (
186
-
blockmap: CAR.BlockMap,
187
-
from: string | undefined,
188
-
target: string,
189
-
visited = new Set<string>(),
190
-
): Promise<DfsResult> => {
191
-
// If there's no starting point, return empty state
192
-
if (from == null) {
193
-
return { found: false };
194
-
}
195
-
196
-
// Check for cycles
197
-
{
198
-
if (visited.has(from)) {
199
-
throw new Error(`cycle detected; cid=${from}`);
200
-
}
201
-
202
-
visited.add(from);
203
-
}
204
-
205
-
// Get the block data
206
-
let node: CAR.MstNode;
207
-
{
208
-
const entry = blockmap.get(from);
209
-
if (!entry) {
210
-
return { found: false };
211
-
}
212
-
213
-
const decoded = CBOR.decode(entry.bytes);
214
-
if (!CAR.isMstNode(decoded)) {
215
-
throw new Error(`invalid mst node; cid=${from}`);
216
-
}
217
-
218
-
node = decoded;
219
-
}
220
-
221
-
// Recursively process the left child
222
-
const left = await dfs(blockmap, node.l?.$link, target, visited);
223
-
224
-
let key = "";
225
-
let found = left.found;
226
-
let depth: number | undefined;
227
-
let firstKey: string | undefined;
228
-
let lastKey: string | undefined;
229
-
230
-
// Process all entries in this node
231
-
for (const entry of node.e) {
232
-
if (entry.v.$link === target) {
233
-
found = true;
234
-
}
235
-
236
-
// Construct the key by truncating and appending
237
-
key = key.substring(0, entry.p) + decoder.decode(CBOR.fromBytes(entry.k));
238
-
239
-
// Calculate depth based on leading zeros in the hash
240
-
const keyDigest = await toSha256(encoder.encode(key) as Uint8Array<ArrayBuffer>);
241
-
let zeroCount = 0;
242
-
243
-
outerLoop: for (const byte of keyDigest) {
244
-
for (let bit = 7; bit >= 0; bit--) {
245
-
if (((byte >> bit) & 1) !== 0) {
246
-
break outerLoop;
247
-
}
248
-
zeroCount++;
249
-
}
250
-
}
251
-
252
-
const thisDepth = Math.floor(zeroCount / 2);
253
-
254
-
// Ensure consistent depth
255
-
if (depth === undefined) {
256
-
depth = thisDepth;
257
-
} else if (depth !== thisDepth) {
258
-
throw new Error(`node has entries with different depths; cid=${from}`);
259
-
}
260
-
261
-
// Track first and last keys
262
-
if (lastKey === undefined) {
263
-
firstKey = key;
264
-
lastKey = key;
265
-
}
266
-
267
-
// Check key ordering
268
-
if (lastKey > key) {
269
-
throw new Error(`entries are out of order; cid=${from}`);
270
-
}
271
-
272
-
// Process right child
273
-
const right = await dfs(blockmap, entry.t?.$link, target, visited);
274
-
275
-
// Check ordering with right subtree
276
-
if (right.min && right.min < lastKey) {
277
-
throw new Error(`entries are out of order; cid=${from}`);
278
-
}
279
-
280
-
found ||= right.found;
281
-
282
-
// Check depth ordering
283
-
if (left.depth !== undefined && left.depth >= thisDepth) {
284
-
throw new Error(`depths are out of order; cid=${from}`);
285
-
}
286
-
287
-
if (right.depth !== undefined && right.depth >= thisDepth) {
288
-
throw new Error(`depths are out of order; cid=${from}`);
289
-
}
290
-
291
-
// Update last key based on right subtree
292
-
lastKey = right.max ?? key;
293
-
}
294
-
295
-
// Check ordering with left subtree
296
-
if (left.max && firstKey && left.max > firstKey) {
297
-
throw new Error(`entries are out of order; cid=${from}`);
298
-
}
299
-
300
-
return {
301
-
found,
302
-
min: firstKey,
303
-
max: lastKey,
304
-
depth,
305
-
};
306
-
};
+3
-3
src/views/collection.tsx
+3
-3
src/views/collection.tsx
···
60
60
<Show when={hover()}>
61
61
<span
62
62
ref={previewRef}
63
-
class={`dark:bg-dark-300 dark:shadow-dark-700 pointer-events-none absolute left-[50%] z-25 block max-h-[20rem] w-max max-w-sm -translate-x-1/2 overflow-hidden rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-2 text-xs whitespace-pre-wrap shadow-md sm:max-h-[28rem] lg:max-w-lg dark:border-neutral-700 ${isOverflowing(previewHeight()) ? "bottom-7" : "top-7"}`}
63
+
class={`dark:bg-dark-300 dark:shadow-dark-700 pointer-events-none absolute left-[50%] z-25 block max-h-80 w-max max-w-sm -translate-x-1/2 overflow-hidden rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-2 text-xs whitespace-pre-wrap shadow-md sm:max-h-112 lg:max-w-lg dark:border-neutral-700 ${isOverflowing(previewHeight()) ? "bottom-7" : "top-7"}`}
64
64
>
65
65
<JSONValue
66
66
data={props.record.record.value as JSONType}
···
312
312
</Show>
313
313
<span>{records.length} records</span>
314
314
</div>
315
-
<div class="flex w-[5rem] items-center justify-end">
315
+
<div class="flex w-20 items-center justify-end">
316
316
<Show when={cursor()}>
317
317
<Show when={!response.loading}>
318
318
<Button onClick={() => refetch()}>Load More</Button>
319
319
</Show>
320
320
<Show when={response.loading}>
321
-
<div class="iconify lucide--loader-circle w-[5rem] animate-spin text-xl" />
321
+
<div class="iconify lucide--loader-circle w-20 animate-spin text-xl" />
322
322
</Show>
323
323
</Show>
324
324
</div>
+2
-2
src/views/home.tsx
+2
-2
src/views/home.tsx
···
1
1
export const Home = () => {
2
2
return (
3
-
<div class="flex w-full flex-col gap-4 break-words">
3
+
<div class="flex w-full flex-col gap-4 wrap-break-word">
4
4
<div>
5
5
<div>
6
6
<span class="text-lg font-semibold">AT Protocol Explorer</span>
···
58
58
Made by{" "}
59
59
<a
60
60
href="https://juli.ee"
61
-
class="font-pecita relative after:absolute after:bottom-0 after:left-0 after:h-[1px] after:w-0 after:bg-current after:transition-[width] after:duration-300 after:ease-out hover:after:w-full"
61
+
class="font-pecita relative after:absolute after:bottom-0 after:left-0 after:h-px after:w-0 after:bg-current after:transition-[width] after:duration-300 after:ease-out hover:after:w-full"
62
62
>
63
63
Juliet
64
64
</a>{" "}
+6
-6
src/views/labels.tsx
+6
-6
src/views/labels.tsx
···
113
113
</div>
114
114
</Show>
115
115
<Show when={cursor()}>
116
-
<div class="flex h-[2rem] w-[5.5rem] items-center justify-center text-nowrap">
116
+
<div class="flex h-8 w-22 items-center justify-center text-nowrap">
117
117
<Show when={!response.loading}>
118
118
<Button onClick={() => refetch()}>Load More</Button>
119
119
</Show>
···
131
131
<div class="flex items-center justify-between gap-2 pb-2">
132
132
<div class="flex flex-col">
133
133
<div class="flex items-center gap-x-2">
134
-
<div class="min-w-[4rem] font-semibold">URI</div>
134
+
<div class="min-w-16 font-semibold">URI</div>
135
135
<A
136
136
href={`/at://${label.uri.replace("at://", "")}`}
137
137
class="text-blue-400 hover:underline active:underline"
···
141
141
</div>
142
142
<Show when={label.cid}>
143
143
<div class="flex items-center gap-x-2">
144
-
<div class="min-w-[4rem] font-semibold">CID</div>
144
+
<div class="min-w-16 font-semibold">CID</div>
145
145
{label.cid}
146
146
</div>
147
147
</Show>
148
148
<div class="flex items-center gap-x-2">
149
-
<div class="min-w-[4rem] font-semibold">Label</div>
149
+
<div class="min-w-16 font-semibold">Label</div>
150
150
{label.val}
151
151
</div>
152
152
<div class="flex items-center gap-x-2">
153
-
<div class="min-w-[4rem] font-semibold">Created</div>
153
+
<div class="min-w-16 font-semibold">Created</div>
154
154
{localDateFromTimestamp(new Date(label.cts).getTime())}
155
155
</div>
156
156
<Show when={label.exp}>
157
157
{(exp) => (
158
158
<div class="flex items-center gap-x-2">
159
-
<div class="min-w-[4rem] font-semibold">Expires</div>
159
+
<div class="min-w-16 font-semibold">Expires</div>
160
160
{localDateFromTimestamp(new Date(exp()).getTime())}
161
161
</div>
162
162
)}
+1
-1
src/views/pds.tsx
+1
-1
src/views/pds.tsx
···
74
74
<span class="iconify lucide--info"></span>
75
75
</button>
76
76
<Modal open={openInfo()} onClose={() => setOpenInfo(false)}>
77
-
<div class="dark:bg-dark-300 dark:shadow-dark-700 absolute top-70 left-[50%] w-max max-w-full -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-3 break-words shadow-md transition-opacity duration-200 sm:max-w-[32rem] dark:border-neutral-700 starting:opacity-0">
77
+
<div class="dark:bg-dark-300 dark:shadow-dark-700 absolute top-70 left-[50%] w-max max-w-full -translate-x-1/2 rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 p-3 wrap-break-word shadow-md transition-opacity duration-200 sm:max-w-lg dark:border-neutral-700 starting:opacity-0">
78
78
<div class="mb-1 flex justify-between gap-2">
79
79
<div class="flex items-center gap-1">
80
80
<span class="iconify lucide--info"></span>
+27
-22
src/views/record.tsx
+27
-22
src/views/record.tsx
···
2
2
import { lexiconDoc } from "@atcute/lexicon-doc";
3
3
import { ResolvedSchema } from "@atcute/lexicon-resolver";
4
4
import { ActorIdentifier, is, Nsid, ResourceUri } from "@atcute/lexicons";
5
+
import { AtprotoDid, Did } from "@atcute/lexicons/syntax";
6
+
import { verifyRecord } from "@atcute/repo";
5
7
import { A, useLocation, useNavigate, useParams } from "@solidjs/router";
6
8
import { createResource, createSignal, ErrorBoundary, Show, Suspense } from "solid-js";
7
9
import { Backlinks } from "../components/backlinks.jsx";
···
15
17
import { pds } from "../components/navbar.jsx";
16
18
import Tooltip from "../components/tooltip.jsx";
17
19
import { setNotif } from "../layout.jsx";
18
-
import {
19
-
didDocCache,
20
-
resolveLexiconAuthority,
21
-
resolveLexiconSchema,
22
-
resolvePDS,
23
-
} from "../utils/api.js";
20
+
import { resolveLexiconAuthority, resolveLexiconSchema, resolvePDS } from "../utils/api.js";
24
21
import { AtUri, uriTemplates } from "../utils/templates.js";
25
22
import { lexicons } from "../utils/types/lexicons.js";
26
-
import { verifyRecord } from "../utils/verify.js";
27
23
28
24
export const RecordView = () => {
29
25
const location = useLocation();
···
89
85
setValidSchema(false);
90
86
}
91
87
}
92
-
const { errors } = await verifyRecord({
93
-
rpc: rpc,
94
-
uri: record.uri,
95
-
cid: record.cid!,
96
-
record: record.value,
97
-
didDoc: didDocCache[record.uri.split("/")[2]],
88
+
89
+
const { ok, data } = await rpc.get("com.atproto.sync.getRecord", {
90
+
params: {
91
+
did: did as Did,
92
+
collection: params.collection as Nsid,
93
+
rkey: params.rkey,
94
+
},
95
+
as: "bytes",
96
+
});
97
+
if (!ok) throw data.error;
98
+
99
+
await verifyRecord({
100
+
did: did as AtprotoDid,
101
+
collection: params.collection,
102
+
rkey: params.rkey,
103
+
carBytes: data,
98
104
});
99
105
100
-
if (errors.length > 0) {
101
-
console.warn(errors);
102
-
setNotice(`Invalid record: ${errors.map((e) => e.message).join("\n")}`);
103
-
}
104
-
setValidRecord(errors.length === 0);
105
-
} catch (err) {
106
+
setValidRecord(true);
107
+
} catch (err: any) {
106
108
console.error(err);
109
+
setNotice(err.message);
107
110
setValidRecord(false);
108
111
}
109
112
};
···
247
250
</div>
248
251
</div>
249
252
<Show when={!location.hash || location.hash === "#record"}>
250
-
<div class="w-max max-w-screen min-w-full px-4 font-mono text-xs wrap-anywhere whitespace-pre-wrap sm:px-2 sm:text-sm md:max-w-[48rem]">
253
+
<div class="w-max max-w-screen min-w-full px-4 font-mono text-xs wrap-anywhere whitespace-pre-wrap sm:px-2 sm:text-sm md:max-w-3xl">
251
254
<JSONValue data={record()?.value as any} repo={record()!.uri.split("/")[2]} />
252
255
</div>
253
256
</Show>
···
265
268
</Show>
266
269
</Show>
267
270
<Show when={location.hash === "#backlinks"}>
268
-
<ErrorBoundary fallback={(err) => <div class="break-words">Error: {err.message}</div>}>
271
+
<ErrorBoundary
272
+
fallback={(err) => <div class="wrap-break-word">Error: {err.message}</div>}
273
+
>
269
274
<Suspense
270
275
fallback={
271
276
<div class="iconify lucide--loader-circle animate-spin self-center text-xl" />
···
311
316
></span>
312
317
</div>
313
318
<Show when={validRecord() === false}>
314
-
<div class="break-words">{notice()}</div>
319
+
<div class="wrap-break-word">{notice()}</div>
315
320
</Show>
316
321
</div>
317
322
<Show when={validSchema() !== undefined}>
+10
-4
src/views/repo.tsx
+10
-4
src/views/repo.tsx
···
153
153
154
154
return (
155
155
<Show when={repo()}>
156
-
<div class="flex w-full flex-col gap-2 break-words">
156
+
<div class="flex w-full flex-col gap-2 wrap-break-word">
157
157
<div
158
158
class={`dark:shadow-dark-700 dark:bg-dark-300 flex justify-between rounded-lg border-[0.5px] border-neutral-300 bg-neutral-50 px-2 py-1.5 text-sm shadow-xs dark:border-neutral-700`}
159
159
>
···
229
229
</div>
230
230
<div class="flex w-full flex-col gap-1 px-2">
231
231
<Show when={location.hash === "#logs"}>
232
-
<ErrorBoundary fallback={(err) => <div class="break-words">Error: {err.message}</div>}>
232
+
<ErrorBoundary
233
+
fallback={(err) => <div class="wrap-break-word">Error: {err.message}</div>}
234
+
>
233
235
<Suspense
234
236
fallback={
235
237
<div class="iconify lucide--loader-circle mt-2 animate-spin self-center text-xl" />
···
240
242
</ErrorBoundary>
241
243
</Show>
242
244
<Show when={location.hash === "#backlinks"}>
243
-
<ErrorBoundary fallback={(err) => <div class="break-words">Error: {err.message}</div>}>
245
+
<ErrorBoundary
246
+
fallback={(err) => <div class="wrap-break-word">Error: {err.message}</div>}
247
+
>
244
248
<Suspense
245
249
fallback={
246
250
<div class="iconify lucide--loader-circle mt-2 animate-spin self-center text-xl" />
···
251
255
</ErrorBoundary>
252
256
</Show>
253
257
<Show when={location.hash === "#blobs"}>
254
-
<ErrorBoundary fallback={(err) => <div class="break-words">Error: {err.message}</div>}>
258
+
<ErrorBoundary
259
+
fallback={(err) => <div class="wrap-break-word">Error: {err.message}</div>}
260
+
>
255
261
<Suspense
256
262
fallback={
257
263
<div class="iconify lucide--loader-circle mt-2 animate-spin self-center text-xl" />
+6
-6
src/views/stream.tsx
+6
-6
src/views/stream.tsx
···
163
163
<form ref={formRef} class="flex w-full flex-col gap-1 text-sm">
164
164
<Show when={!connected()}>
165
165
<label class="flex items-center justify-end gap-x-1">
166
-
<span class="min-w-[5rem]">Instance</span>
166
+
<span class="min-w-20">Instance</span>
167
167
<TextInput
168
168
name="instance"
169
169
value={
···
177
177
</label>
178
178
<Show when={streamType === "jetstream"}>
179
179
<label class="flex items-center justify-end gap-x-1">
180
-
<span class="min-w-[5rem]">Collections</span>
180
+
<span class="min-w-20">Collections</span>
181
181
<textarea
182
182
name="collections"
183
183
spellcheck={false}
···
189
189
</Show>
190
190
<Show when={streamType === "jetstream"}>
191
191
<label class="flex items-center justify-end gap-x-1">
192
-
<span class="min-w-[5rem]">DIDs</span>
192
+
<span class="min-w-20">DIDs</span>
193
193
<textarea
194
194
name="dids"
195
195
spellcheck={false}
···
200
200
</label>
201
201
</Show>
202
202
<label class="flex items-center justify-end gap-x-1">
203
-
<span class="min-w-[5rem]">Cursor</span>
203
+
<span class="min-w-20">Cursor</span>
204
204
<TextInput
205
205
name="cursor"
206
206
placeholder="Leave empty for live-tail"
···
228
228
{(param) => (
229
229
<Show when={param.param}>
230
230
<div class="flex">
231
-
<div class="min-w-[6rem] font-semibold">{param.name}</div>
231
+
<div class="min-w-24 font-semibold">{param.name}</div>
232
232
{param.param}
233
233
</div>
234
234
</Show>
···
246
246
<Show when={notice().length}>
247
247
<div class="text-red-500 dark:text-red-400">{notice()}</div>
248
248
</Show>
249
-
<div class="flex w-full flex-col gap-2 divide-y-[0.5px] divide-neutral-500 font-mono text-sm wrap-anywhere whitespace-pre-wrap md:w-[48rem]">
249
+
<div class="flex w-full flex-col gap-2 divide-y-[0.5px] divide-neutral-500 font-mono text-sm wrap-anywhere whitespace-pre-wrap md:w-3xl">
250
250
<For each={records().toReversed()}>
251
251
{(rec) => (
252
252
<div class="pb-2">