+4
-1
backend/package.json
+4
-1
backend/package.json
···
9
9
"start": "node dist/src/main.js",
10
10
"lint": "npx eslint .",
11
11
"lint-write": "npx eslint . --fix",
12
+
"test": "vitest",
12
13
"fmt": "npx prettier --write .",
13
14
"db:push": "npx drizzle-kit push"
14
15
},
···
20
21
"dependencies": {
21
22
"@atcute/atproto": "^3.1.2",
22
23
"@atcute/client": "^4.0.3",
24
+
"@atcute/crypto": "^2.2.4",
23
25
"@atcute/identity": "^1.0.3",
24
26
"@atcute/identity-resolver": "^1.1.3",
25
27
"@atcute/lexicon-doc": "^1.0.3",
···
54
56
"prettier": "^3.6.2",
55
57
"tsx": "^4.20.4",
56
58
"typescript": "^5.9.2",
57
-
"typescript-eslint": "^8.40.0"
59
+
"typescript-eslint": "^8.40.0",
60
+
"vitest": "^3.2.4"
58
61
}
59
62
}
+630
backend/pnpm-lock.yaml
+630
backend/pnpm-lock.yaml
···
14
14
'@atcute/client':
15
15
specifier: ^4.0.3
16
16
version: 4.0.3
17
+
'@atcute/crypto':
18
+
specifier: ^2.2.4
19
+
version: 2.2.4
17
20
'@atcute/identity':
18
21
specifier: ^1.0.3
19
22
version: 1.0.3
···
114
117
typescript-eslint:
115
118
specifier: ^8.40.0
116
119
version: 8.40.0(eslint@9.33.0(jiti@2.5.1))(typescript@5.9.2)
120
+
vitest:
121
+
specifier: ^3.2.4
122
+
version: 3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.0)
117
123
118
124
packages:
119
125
···
125
131
126
132
'@atcute/client@4.0.3':
127
133
resolution: {integrity: sha512-RIOZWFVLca/HiPAAUDqQPOdOreCxTbL5cb+WUf5yqQOKIu5yEAP3eksinmlLmgIrlr5qVOE7brazUUzaskFCfw==}
134
+
135
+
'@atcute/crypto@2.2.4':
136
+
resolution: {integrity: sha512-88LbuJr63bbdJywd949YgbEiaaW4UU5iXJcFE1WqY/5ItYuoHWVdmL3XsqehiM0AfzvrYEfd5ox2wm9CK9dyQQ==}
128
137
129
138
'@atcute/identity-resolver@1.1.3':
130
139
resolution: {integrity: sha512-KZgGgg99CWaV7Df3+h3X/WMrDzTPQVfsaoIVbTNLx2B56BvCL2EmaxPSVw/7BFUJMZHlVU4rtoEB4lyvNyMswA==}
···
143
152
144
153
'@atcute/lexicons@1.1.1':
145
154
resolution: {integrity: sha512-k6qy5p3j9fJJ6ekaMPfEfp3ni4TW/XNuH9ZmsuwC0fi0tOjp+Fa8ZQakHwnqOzFt/cVBfGcmYE/lKNAbeTjgUg==}
155
+
156
+
'@atcute/multibase@1.1.5':
157
+
resolution: {integrity: sha512-vbmEFxgpntMuRqVZOCBgf6bgq69UGrlznQCZirVSit/mlcgyFVkSGbSEfkRnpIcrM8SnaySwuKbVvL+EPLh2dw==}
158
+
159
+
'@atcute/uint8array@1.0.4':
160
+
resolution: {integrity: sha512-9jASMDghzhhDwjF3+eW+ZIauvytnUWDPfUVGUValRwnf9AZ7Yqqkc76tC89HVzVDAlJdhwQIUG2dQBsiVqumUA==}
146
161
147
162
'@atcute/util-fetch@1.0.1':
148
163
resolution: {integrity: sha512-Clc0E/5ufyGBVfYBUwWNlHONlZCoblSr4Ho50l1LhmRPGB1Wu/AQ9Sz+rsBg7fdaW/auve8ulmwhRhnX2cGRow==}
···
668
683
'@neon-rs/load@0.0.4':
669
684
resolution: {integrity: sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw==}
670
685
686
+
'@noble/secp256k1@2.3.0':
687
+
resolution: {integrity: sha512-0TQed2gcBbIrh7Ccyw+y/uZQvbJwm7Ao4scBUxqpBCcsOlZG0O4KGfjtNAy/li4W8n1xt3dxrwJ0beZ2h2G6Kw==}
688
+
671
689
'@nodelib/fs.scandir@2.1.5':
672
690
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
673
691
engines: {node: '>= 8'}
···
687
705
resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
688
706
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
689
707
708
+
'@rollup/rollup-android-arm-eabi@4.50.0':
709
+
resolution: {integrity: sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ==}
710
+
cpu: [arm]
711
+
os: [android]
712
+
713
+
'@rollup/rollup-android-arm64@4.50.0':
714
+
resolution: {integrity: sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw==}
715
+
cpu: [arm64]
716
+
os: [android]
717
+
718
+
'@rollup/rollup-darwin-arm64@4.50.0':
719
+
resolution: {integrity: sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg==}
720
+
cpu: [arm64]
721
+
os: [darwin]
722
+
723
+
'@rollup/rollup-darwin-x64@4.50.0':
724
+
resolution: {integrity: sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw==}
725
+
cpu: [x64]
726
+
os: [darwin]
727
+
728
+
'@rollup/rollup-freebsd-arm64@4.50.0':
729
+
resolution: {integrity: sha512-UR1uTJFU/p801DvvBbtDD7z9mQL8J80xB0bR7DqW7UGQHRm/OaKzp4is7sQSdbt2pjjSS72eAtRh43hNduTnnQ==}
730
+
cpu: [arm64]
731
+
os: [freebsd]
732
+
733
+
'@rollup/rollup-freebsd-x64@4.50.0':
734
+
resolution: {integrity: sha512-G/DKyS6PK0dD0+VEzH/6n/hWDNPDZSMBmqsElWnCRGrYOb2jC0VSupp7UAHHQ4+QILwkxSMaYIbQ72dktp8pKA==}
735
+
cpu: [x64]
736
+
os: [freebsd]
737
+
738
+
'@rollup/rollup-linux-arm-gnueabihf@4.50.0':
739
+
resolution: {integrity: sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w==}
740
+
cpu: [arm]
741
+
os: [linux]
742
+
743
+
'@rollup/rollup-linux-arm-musleabihf@4.50.0':
744
+
resolution: {integrity: sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg==}
745
+
cpu: [arm]
746
+
os: [linux]
747
+
748
+
'@rollup/rollup-linux-arm64-gnu@4.50.0':
749
+
resolution: {integrity: sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g==}
750
+
cpu: [arm64]
751
+
os: [linux]
752
+
753
+
'@rollup/rollup-linux-arm64-musl@4.50.0':
754
+
resolution: {integrity: sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ==}
755
+
cpu: [arm64]
756
+
os: [linux]
757
+
758
+
'@rollup/rollup-linux-loongarch64-gnu@4.50.0':
759
+
resolution: {integrity: sha512-BGYSwJdMP0hT5CCmljuSNx7+k+0upweM2M4YGfFBjnFSZMHOLYR0gEEj/dxyYJ6Zc6AiSeaBY8dWOa11GF/ppQ==}
760
+
cpu: [loong64]
761
+
os: [linux]
762
+
763
+
'@rollup/rollup-linux-ppc64-gnu@4.50.0':
764
+
resolution: {integrity: sha512-I1gSMzkVe1KzAxKAroCJL30hA4DqSi+wGc5gviD0y3IL/VkvcnAqwBf4RHXHyvH66YVHxpKO8ojrgc4SrWAnLg==}
765
+
cpu: [ppc64]
766
+
os: [linux]
767
+
768
+
'@rollup/rollup-linux-riscv64-gnu@4.50.0':
769
+
resolution: {integrity: sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA==}
770
+
cpu: [riscv64]
771
+
os: [linux]
772
+
773
+
'@rollup/rollup-linux-riscv64-musl@4.50.0':
774
+
resolution: {integrity: sha512-LSXSGumSURzEQLT2e4sFqFOv3LWZsEF8FK7AAv9zHZNDdMnUPYH3t8ZlaeYYZyTXnsob3htwTKeWtBIkPV27iQ==}
775
+
cpu: [riscv64]
776
+
os: [linux]
777
+
778
+
'@rollup/rollup-linux-s390x-gnu@4.50.0':
779
+
resolution: {integrity: sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ==}
780
+
cpu: [s390x]
781
+
os: [linux]
782
+
783
+
'@rollup/rollup-linux-x64-gnu@4.50.0':
784
+
resolution: {integrity: sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA==}
785
+
cpu: [x64]
786
+
os: [linux]
787
+
788
+
'@rollup/rollup-linux-x64-musl@4.50.0':
789
+
resolution: {integrity: sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw==}
790
+
cpu: [x64]
791
+
os: [linux]
792
+
793
+
'@rollup/rollup-openharmony-arm64@4.50.0':
794
+
resolution: {integrity: sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q==}
795
+
cpu: [arm64]
796
+
os: [openharmony]
797
+
798
+
'@rollup/rollup-win32-arm64-msvc@4.50.0':
799
+
resolution: {integrity: sha512-q7cIIdFvWQoaCbLDUyUc8YfR3Jh2xx3unO8Dn6/TTogKjfwrax9SyfmGGK6cQhKtjePI7jRfd7iRYcxYs93esg==}
800
+
cpu: [arm64]
801
+
os: [win32]
802
+
803
+
'@rollup/rollup-win32-ia32-msvc@4.50.0':
804
+
resolution: {integrity: sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw==}
805
+
cpu: [ia32]
806
+
os: [win32]
807
+
808
+
'@rollup/rollup-win32-x64-msvc@4.50.0':
809
+
resolution: {integrity: sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg==}
810
+
cpu: [x64]
811
+
os: [win32]
812
+
690
813
'@rtsao/scc@1.1.0':
691
814
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
692
815
···
782
905
peerDependencies:
783
906
vue: ^2.7.0 || ^3.0.0
784
907
908
+
'@types/chai@5.2.2':
909
+
resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
910
+
785
911
'@types/debug@4.1.12':
786
912
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
913
+
914
+
'@types/deep-eql@4.0.2':
915
+
resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
787
916
788
917
'@types/estree@1.0.8':
789
918
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
···
885
1014
886
1015
'@ungap/structured-clone@1.3.0':
887
1016
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
1017
+
1018
+
'@vitest/expect@3.2.4':
1019
+
resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==}
1020
+
1021
+
'@vitest/mocker@3.2.4':
1022
+
resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==}
1023
+
peerDependencies:
1024
+
msw: ^2.4.9
1025
+
vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0
1026
+
peerDependenciesMeta:
1027
+
msw:
1028
+
optional: true
1029
+
vite:
1030
+
optional: true
1031
+
1032
+
'@vitest/pretty-format@3.2.4':
1033
+
resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==}
1034
+
1035
+
'@vitest/runner@3.2.4':
1036
+
resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==}
1037
+
1038
+
'@vitest/snapshot@3.2.4':
1039
+
resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==}
1040
+
1041
+
'@vitest/spy@3.2.4':
1042
+
resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==}
1043
+
1044
+
'@vitest/utils@3.2.4':
1045
+
resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
888
1046
889
1047
'@vue/compiler-core@3.5.19':
890
1048
resolution: {integrity: sha512-/afpyvlkrSNYbPo94Qu8GtIOWS+g5TRdOvs6XZNw6pWQQmj5pBgSZvEPOIZlqWq0YvoUhDDQaQ2TnzuJdOV4hA==}
···
1000
1158
resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
1001
1159
engines: {node: '>= 0.4'}
1002
1160
1161
+
assertion-error@2.0.1:
1162
+
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
1163
+
engines: {node: '>=12'}
1164
+
1003
1165
async-function@1.0.0:
1004
1166
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
1005
1167
engines: {node: '>= 0.4'}
···
1032
1194
1033
1195
bun-types@1.2.17:
1034
1196
resolution: {integrity: sha512-ElC7ItwT3SCQwYZDYoAH+q6KT4Fxjl8DtZ6qDulUFBmXA8YB4xo+l54J9ZJN+k2pphfn9vk7kfubeSd5QfTVJQ==}
1197
+
1198
+
cac@6.7.14:
1199
+
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
1200
+
engines: {node: '>=8'}
1035
1201
1036
1202
call-bind-apply-helpers@1.0.2:
1037
1203
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
···
1055
1221
ccount@2.0.1:
1056
1222
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
1057
1223
1224
+
chai@5.3.3:
1225
+
resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
1226
+
engines: {node: '>=18'}
1227
+
1058
1228
chalk@4.1.2:
1059
1229
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
1060
1230
engines: {node: '>=10'}
···
1071
1241
1072
1242
character-entities@2.0.2:
1073
1243
resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
1244
+
1245
+
check-error@2.1.1:
1246
+
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
1247
+
engines: {node: '>= 16'}
1074
1248
1075
1249
clean-css@5.3.3:
1076
1250
resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
···
1175
1349
1176
1350
decode-named-character-reference@1.2.0:
1177
1351
resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
1352
+
1353
+
deep-eql@5.0.2:
1354
+
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
1355
+
engines: {node: '>=6'}
1178
1356
1179
1357
deep-is@0.1.4:
1180
1358
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
···
1331
1509
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
1332
1510
engines: {node: '>= 0.4'}
1333
1511
1512
+
es-module-lexer@1.7.0:
1513
+
resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
1514
+
1334
1515
es-object-atoms@1.1.1:
1335
1516
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
1336
1517
engines: {node: '>= 0.4'}
···
1473
1654
estree-walker@2.0.2:
1474
1655
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
1475
1656
1657
+
estree-walker@3.0.3:
1658
+
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
1659
+
1476
1660
esutils@2.0.3:
1477
1661
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1478
1662
engines: {node: '>=0.10.0'}
1479
1663
1480
1664
event-target-polyfill@0.0.4:
1481
1665
resolution: {integrity: sha512-Gs6RLjzlLRdT8X9ZipJdIZI/Y6/HhRLyq9RdDlCsnpxr/+Nn6bU2EFGuC94GjxqhM+Nmij2Vcq98yoHrU8uNFQ==}
1666
+
1667
+
expect-type@1.2.2:
1668
+
resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
1669
+
engines: {node: '>=12.0.0'}
1482
1670
1483
1671
extend@3.0.2:
1484
1672
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
···
1504
1692
1505
1693
fastq@1.19.1:
1506
1694
resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
1695
+
1696
+
fdir@6.5.0:
1697
+
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
1698
+
engines: {node: '>=12.0.0'}
1699
+
peerDependencies:
1700
+
picomatch: ^3 || ^4
1701
+
peerDependenciesMeta:
1702
+
picomatch:
1703
+
optional: true
1507
1704
1508
1705
fecha@4.2.3:
1509
1706
resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==}
···
1871
2068
js-base64@3.7.8:
1872
2069
resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==}
1873
2070
2071
+
js-tokens@9.0.1:
2072
+
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
2073
+
1874
2074
js-yaml@4.1.0:
1875
2075
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
1876
2076
hasBin: true
···
1937
2137
1938
2138
longest-streak@3.1.0:
1939
2139
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
2140
+
2141
+
loupe@3.2.1:
2142
+
resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
1940
2143
1941
2144
lower-case@2.0.2:
1942
2145
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
···
2196
2399
path-parse@1.0.7:
2197
2400
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
2198
2401
2402
+
pathe@2.0.3:
2403
+
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
2404
+
2405
+
pathval@2.0.1:
2406
+
resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
2407
+
engines: {node: '>= 14.16'}
2408
+
2199
2409
picocolors@1.1.1:
2200
2410
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
2201
2411
2202
2412
picomatch@2.3.1:
2203
2413
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
2204
2414
engines: {node: '>=8.6'}
2415
+
2416
+
picomatch@4.0.3:
2417
+
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
2418
+
engines: {node: '>=12'}
2205
2419
2206
2420
possible-typed-array-names@1.1.0:
2207
2421
resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
···
2321
2535
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
2322
2536
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
2323
2537
2538
+
rollup@4.50.0:
2539
+
resolution: {integrity: sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw==}
2540
+
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
2541
+
hasBin: true
2542
+
2324
2543
run-parallel@1.2.0:
2325
2544
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
2326
2545
···
2391
2610
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
2392
2611
engines: {node: '>= 0.4'}
2393
2612
2613
+
siginfo@2.0.0:
2614
+
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
2615
+
2394
2616
simple-swizzle@0.2.2:
2395
2617
resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
2396
2618
···
2410
2632
2411
2633
stack-trace@0.0.10:
2412
2634
resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
2635
+
2636
+
stackback@0.0.2:
2637
+
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
2638
+
2639
+
std-env@3.9.0:
2640
+
resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
2413
2641
2414
2642
stop-iteration-iterator@1.1.0:
2415
2643
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
···
2445
2673
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
2446
2674
engines: {node: '>=8'}
2447
2675
2676
+
strip-literal@3.0.0:
2677
+
resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
2678
+
2448
2679
supports-color@7.2.0:
2449
2680
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
2450
2681
engines: {node: '>=8'}
···
2471
2702
tiny-emitter@2.1.0:
2472
2703
resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==}
2473
2704
2705
+
tinybench@2.9.0:
2706
+
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
2707
+
2708
+
tinyexec@0.3.2:
2709
+
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
2710
+
2711
+
tinyglobby@0.2.15:
2712
+
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
2713
+
engines: {node: '>=12.0.0'}
2714
+
2715
+
tinypool@1.1.1:
2716
+
resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
2717
+
engines: {node: ^18.0.0 || >=20.0.0}
2718
+
2719
+
tinyrainbow@2.0.0:
2720
+
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
2721
+
engines: {node: '>=14.0.0'}
2722
+
2723
+
tinyspy@4.0.3:
2724
+
resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==}
2725
+
engines: {node: '>=14.0.0'}
2726
+
2474
2727
to-regex-range@5.0.1:
2475
2728
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
2476
2729
engines: {node: '>=8.0'}
···
2598
2851
vfile@6.0.3:
2599
2852
resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
2600
2853
2854
+
vite-node@3.2.4:
2855
+
resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
2856
+
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
2857
+
hasBin: true
2858
+
2859
+
vite@7.1.4:
2860
+
resolution: {integrity: sha512-X5QFK4SGynAeeIt+A7ZWnApdUyHYm+pzv/8/A57LqSGcI88U6R6ipOs3uCesdc6yl7nl+zNO0t8LmqAdXcQihw==}
2861
+
engines: {node: ^20.19.0 || >=22.12.0}
2862
+
hasBin: true
2863
+
peerDependencies:
2864
+
'@types/node': ^20.19.0 || >=22.12.0
2865
+
jiti: '>=1.21.0'
2866
+
less: ^4.0.0
2867
+
lightningcss: ^1.21.0
2868
+
sass: ^1.70.0
2869
+
sass-embedded: ^1.70.0
2870
+
stylus: '>=0.54.8'
2871
+
sugarss: ^5.0.0
2872
+
terser: ^5.16.0
2873
+
tsx: ^4.8.1
2874
+
yaml: ^2.4.2
2875
+
peerDependenciesMeta:
2876
+
'@types/node':
2877
+
optional: true
2878
+
jiti:
2879
+
optional: true
2880
+
less:
2881
+
optional: true
2882
+
lightningcss:
2883
+
optional: true
2884
+
sass:
2885
+
optional: true
2886
+
sass-embedded:
2887
+
optional: true
2888
+
stylus:
2889
+
optional: true
2890
+
sugarss:
2891
+
optional: true
2892
+
terser:
2893
+
optional: true
2894
+
tsx:
2895
+
optional: true
2896
+
yaml:
2897
+
optional: true
2898
+
2899
+
vitest@3.2.4:
2900
+
resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
2901
+
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
2902
+
hasBin: true
2903
+
peerDependencies:
2904
+
'@edge-runtime/vm': '*'
2905
+
'@types/debug': ^4.1.12
2906
+
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
2907
+
'@vitest/browser': 3.2.4
2908
+
'@vitest/ui': 3.2.4
2909
+
happy-dom: '*'
2910
+
jsdom: '*'
2911
+
peerDependenciesMeta:
2912
+
'@edge-runtime/vm':
2913
+
optional: true
2914
+
'@types/debug':
2915
+
optional: true
2916
+
'@types/node':
2917
+
optional: true
2918
+
'@vitest/browser':
2919
+
optional: true
2920
+
'@vitest/ui':
2921
+
optional: true
2922
+
happy-dom:
2923
+
optional: true
2924
+
jsdom:
2925
+
optional: true
2926
+
2601
2927
vue-component-type-helpers@3.0.6:
2602
2928
resolution: {integrity: sha512-6CRM8X7EJqWCJOiKPvSLQG+hJPb/Oy2gyJx3pLjUEhY7PuaCthQu3e0zAGI1lqUBobrrk9IT0K8sG2GsCluxoQ==}
2603
2929
···
2651
2977
engines: {node: '>= 8'}
2652
2978
hasBin: true
2653
2979
2980
+
why-is-node-running@2.3.0:
2981
+
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
2982
+
engines: {node: '>=8'}
2983
+
hasBin: true
2984
+
2654
2985
winston-transport@4.9.0:
2655
2986
resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==}
2656
2987
engines: {node: '>= 12.0.0'}
···
2709
3040
'@atcute/identity': 1.0.3
2710
3041
'@atcute/lexicons': 1.1.1
2711
3042
3043
+
'@atcute/crypto@2.2.4':
3044
+
dependencies:
3045
+
'@atcute/multibase': 1.1.5
3046
+
'@atcute/uint8array': 1.0.4
3047
+
'@noble/secp256k1': 2.3.0
3048
+
2712
3049
'@atcute/identity-resolver@1.1.3(@atcute/identity@1.0.3)':
2713
3050
dependencies:
2714
3051
'@atcute/identity': 1.0.3
···
2736
3073
'@atcute/lexicons@1.1.1':
2737
3074
dependencies:
2738
3075
esm-env: 1.2.2
3076
+
3077
+
'@atcute/multibase@1.1.5':
3078
+
dependencies:
3079
+
'@atcute/uint8array': 1.0.4
3080
+
3081
+
'@atcute/uint8array@1.0.4': {}
2739
3082
2740
3083
'@atcute/util-fetch@1.0.1':
2741
3084
dependencies:
···
3130
3473
3131
3474
'@neon-rs/load@0.0.4': {}
3132
3475
3476
+
'@noble/secp256k1@2.3.0': {}
3477
+
3133
3478
'@nodelib/fs.scandir@2.1.5':
3134
3479
dependencies:
3135
3480
'@nodelib/fs.stat': 2.0.5
···
3146
3491
3147
3492
'@pkgr/core@0.2.9': {}
3148
3493
3494
+
'@rollup/rollup-android-arm-eabi@4.50.0':
3495
+
optional: true
3496
+
3497
+
'@rollup/rollup-android-arm64@4.50.0':
3498
+
optional: true
3499
+
3500
+
'@rollup/rollup-darwin-arm64@4.50.0':
3501
+
optional: true
3502
+
3503
+
'@rollup/rollup-darwin-x64@4.50.0':
3504
+
optional: true
3505
+
3506
+
'@rollup/rollup-freebsd-arm64@4.50.0':
3507
+
optional: true
3508
+
3509
+
'@rollup/rollup-freebsd-x64@4.50.0':
3510
+
optional: true
3511
+
3512
+
'@rollup/rollup-linux-arm-gnueabihf@4.50.0':
3513
+
optional: true
3514
+
3515
+
'@rollup/rollup-linux-arm-musleabihf@4.50.0':
3516
+
optional: true
3517
+
3518
+
'@rollup/rollup-linux-arm64-gnu@4.50.0':
3519
+
optional: true
3520
+
3521
+
'@rollup/rollup-linux-arm64-musl@4.50.0':
3522
+
optional: true
3523
+
3524
+
'@rollup/rollup-linux-loongarch64-gnu@4.50.0':
3525
+
optional: true
3526
+
3527
+
'@rollup/rollup-linux-ppc64-gnu@4.50.0':
3528
+
optional: true
3529
+
3530
+
'@rollup/rollup-linux-riscv64-gnu@4.50.0':
3531
+
optional: true
3532
+
3533
+
'@rollup/rollup-linux-riscv64-musl@4.50.0':
3534
+
optional: true
3535
+
3536
+
'@rollup/rollup-linux-s390x-gnu@4.50.0':
3537
+
optional: true
3538
+
3539
+
'@rollup/rollup-linux-x64-gnu@4.50.0':
3540
+
optional: true
3541
+
3542
+
'@rollup/rollup-linux-x64-musl@4.50.0':
3543
+
optional: true
3544
+
3545
+
'@rollup/rollup-openharmony-arm64@4.50.0':
3546
+
optional: true
3547
+
3548
+
'@rollup/rollup-win32-arm64-msvc@4.50.0':
3549
+
optional: true
3550
+
3551
+
'@rollup/rollup-win32-ia32-msvc@4.50.0':
3552
+
optional: true
3553
+
3554
+
'@rollup/rollup-win32-x64-msvc@4.50.0':
3555
+
optional: true
3556
+
3149
3557
'@rtsao/scc@1.1.0': {}
3150
3558
3151
3559
'@scalar/code-highlight@0.1.9':
···
3365
3773
'@tanstack/virtual-core': 3.13.12
3366
3774
vue: 3.5.19(typescript@5.9.2)
3367
3775
3776
+
'@types/chai@5.2.2':
3777
+
dependencies:
3778
+
'@types/deep-eql': 4.0.2
3779
+
3368
3780
'@types/debug@4.1.12':
3369
3781
dependencies:
3370
3782
'@types/ms': 2.1.0
3783
+
3784
+
'@types/deep-eql@4.0.2': {}
3371
3785
3372
3786
'@types/estree@1.0.8': {}
3373
3787
···
3500
3914
3501
3915
'@ungap/structured-clone@1.3.0': {}
3502
3916
3917
+
'@vitest/expect@3.2.4':
3918
+
dependencies:
3919
+
'@types/chai': 5.2.2
3920
+
'@vitest/spy': 3.2.4
3921
+
'@vitest/utils': 3.2.4
3922
+
chai: 5.3.3
3923
+
tinyrainbow: 2.0.0
3924
+
3925
+
'@vitest/mocker@3.2.4(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.0))':
3926
+
dependencies:
3927
+
'@vitest/spy': 3.2.4
3928
+
estree-walker: 3.0.3
3929
+
magic-string: 0.30.18
3930
+
optionalDependencies:
3931
+
vite: 7.1.4(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.0)
3932
+
3933
+
'@vitest/pretty-format@3.2.4':
3934
+
dependencies:
3935
+
tinyrainbow: 2.0.0
3936
+
3937
+
'@vitest/runner@3.2.4':
3938
+
dependencies:
3939
+
'@vitest/utils': 3.2.4
3940
+
pathe: 2.0.3
3941
+
strip-literal: 3.0.0
3942
+
3943
+
'@vitest/snapshot@3.2.4':
3944
+
dependencies:
3945
+
'@vitest/pretty-format': 3.2.4
3946
+
magic-string: 0.30.18
3947
+
pathe: 2.0.3
3948
+
3949
+
'@vitest/spy@3.2.4':
3950
+
dependencies:
3951
+
tinyspy: 4.0.3
3952
+
3953
+
'@vitest/utils@3.2.4':
3954
+
dependencies:
3955
+
'@vitest/pretty-format': 3.2.4
3956
+
loupe: 3.2.1
3957
+
tinyrainbow: 2.0.0
3958
+
3503
3959
'@vue/compiler-core@3.5.19':
3504
3960
dependencies:
3505
3961
'@babel/parser': 7.28.3
···
3680
4136
get-intrinsic: 1.3.0
3681
4137
is-array-buffer: 3.0.5
3682
4138
4139
+
assertion-error@2.0.1: {}
4140
+
3683
4141
async-function@1.0.0: {}
3684
4142
3685
4143
async@3.2.6: {}
···
3711
4169
dependencies:
3712
4170
'@types/node': 24.3.0
3713
4171
optional: true
4172
+
4173
+
cac@6.7.14: {}
3714
4174
3715
4175
call-bind-apply-helpers@1.0.2:
3716
4176
dependencies:
···
3738
4198
3739
4199
ccount@2.0.1: {}
3740
4200
4201
+
chai@5.3.3:
4202
+
dependencies:
4203
+
assertion-error: 2.0.1
4204
+
check-error: 2.1.1
4205
+
deep-eql: 5.0.2
4206
+
loupe: 3.2.1
4207
+
pathval: 2.0.1
4208
+
3741
4209
chalk@4.1.2:
3742
4210
dependencies:
3743
4211
ansi-styles: 4.3.0
···
3750
4218
character-entities-legacy@3.0.0: {}
3751
4219
3752
4220
character-entities@2.0.2: {}
4221
+
4222
+
check-error@2.1.1: {}
3753
4223
3754
4224
clean-css@5.3.3:
3755
4225
dependencies:
···
3843
4313
decode-named-character-reference@1.2.0:
3844
4314
dependencies:
3845
4315
character-entities: 2.0.2
4316
+
4317
+
deep-eql@5.0.2: {}
3846
4318
3847
4319
deep-is@0.1.4: {}
3848
4320
···
3964
4436
3965
4437
es-errors@1.3.0: {}
3966
4438
4439
+
es-module-lexer@1.7.0: {}
4440
+
3967
4441
es-object-atoms@1.1.1:
3968
4442
dependencies:
3969
4443
es-errors: 1.3.0
···
4185
4659
4186
4660
estree-walker@2.0.2: {}
4187
4661
4662
+
estree-walker@3.0.3:
4663
+
dependencies:
4664
+
'@types/estree': 1.0.8
4665
+
4188
4666
esutils@2.0.3: {}
4189
4667
4190
4668
event-target-polyfill@0.0.4: {}
4669
+
4670
+
expect-type@1.2.2: {}
4191
4671
4192
4672
extend@3.0.2: {}
4193
4673
···
4213
4693
dependencies:
4214
4694
reusify: 1.1.0
4215
4695
4696
+
fdir@6.5.0(picomatch@4.0.3):
4697
+
optionalDependencies:
4698
+
picomatch: 4.0.3
4699
+
4216
4700
fecha@4.2.3: {}
4217
4701
4218
4702
fetch-blob@3.2.0:
···
4658
5142
4659
5143
js-base64@3.7.8: {}
4660
5144
5145
+
js-tokens@9.0.1: {}
5146
+
4661
5147
js-yaml@4.1.0:
4662
5148
dependencies:
4663
5149
argparse: 2.0.1
···
4726
5212
triple-beam: 1.4.1
4727
5213
4728
5214
longest-streak@3.1.0: {}
5215
+
5216
+
loupe@3.2.1: {}
4729
5217
4730
5218
lower-case@2.0.2:
4731
5219
dependencies:
···
5184
5672
5185
5673
path-parse@1.0.7: {}
5186
5674
5675
+
pathe@2.0.3: {}
5676
+
5677
+
pathval@2.0.1: {}
5678
+
5187
5679
picocolors@1.1.1: {}
5188
5680
5189
5681
picomatch@2.3.1: {}
5190
5682
5683
+
picomatch@4.0.3: {}
5684
+
5191
5685
possible-typed-array-names@1.1.0: {}
5192
5686
5193
5687
postcss@8.5.6:
···
5359
5853
5360
5854
reusify@1.1.0: {}
5361
5855
5856
+
rollup@4.50.0:
5857
+
dependencies:
5858
+
'@types/estree': 1.0.8
5859
+
optionalDependencies:
5860
+
'@rollup/rollup-android-arm-eabi': 4.50.0
5861
+
'@rollup/rollup-android-arm64': 4.50.0
5862
+
'@rollup/rollup-darwin-arm64': 4.50.0
5863
+
'@rollup/rollup-darwin-x64': 4.50.0
5864
+
'@rollup/rollup-freebsd-arm64': 4.50.0
5865
+
'@rollup/rollup-freebsd-x64': 4.50.0
5866
+
'@rollup/rollup-linux-arm-gnueabihf': 4.50.0
5867
+
'@rollup/rollup-linux-arm-musleabihf': 4.50.0
5868
+
'@rollup/rollup-linux-arm64-gnu': 4.50.0
5869
+
'@rollup/rollup-linux-arm64-musl': 4.50.0
5870
+
'@rollup/rollup-linux-loongarch64-gnu': 4.50.0
5871
+
'@rollup/rollup-linux-ppc64-gnu': 4.50.0
5872
+
'@rollup/rollup-linux-riscv64-gnu': 4.50.0
5873
+
'@rollup/rollup-linux-riscv64-musl': 4.50.0
5874
+
'@rollup/rollup-linux-s390x-gnu': 4.50.0
5875
+
'@rollup/rollup-linux-x64-gnu': 4.50.0
5876
+
'@rollup/rollup-linux-x64-musl': 4.50.0
5877
+
'@rollup/rollup-openharmony-arm64': 4.50.0
5878
+
'@rollup/rollup-win32-arm64-msvc': 4.50.0
5879
+
'@rollup/rollup-win32-ia32-msvc': 4.50.0
5880
+
'@rollup/rollup-win32-x64-msvc': 4.50.0
5881
+
fsevents: 2.3.3
5882
+
5362
5883
run-parallel@1.2.0:
5363
5884
dependencies:
5364
5885
queue-microtask: 1.2.3
···
5447
5968
side-channel-list: 1.0.0
5448
5969
side-channel-map: 1.0.1
5449
5970
side-channel-weakmap: 1.0.2
5971
+
5972
+
siginfo@2.0.0: {}
5450
5973
5451
5974
simple-swizzle@0.2.2:
5452
5975
dependencies:
···
5465
5988
5466
5989
stack-trace@0.0.10: {}
5467
5990
5991
+
stackback@0.0.2: {}
5992
+
5993
+
std-env@3.9.0: {}
5994
+
5468
5995
stop-iteration-iterator@1.1.0:
5469
5996
dependencies:
5470
5997
es-errors: 1.3.0
···
5512
6039
5513
6040
strip-json-comments@3.1.1: {}
5514
6041
6042
+
strip-literal@3.0.0:
6043
+
dependencies:
6044
+
js-tokens: 9.0.1
6045
+
5515
6046
supports-color@7.2.0:
5516
6047
dependencies:
5517
6048
has-flag: 4.0.0
···
5535
6066
5536
6067
tiny-emitter@2.1.0: {}
5537
6068
6069
+
tinybench@2.9.0: {}
6070
+
6071
+
tinyexec@0.3.2: {}
6072
+
6073
+
tinyglobby@0.2.15:
6074
+
dependencies:
6075
+
fdir: 6.5.0(picomatch@4.0.3)
6076
+
picomatch: 4.0.3
6077
+
6078
+
tinypool@1.1.1: {}
6079
+
6080
+
tinyrainbow@2.0.0: {}
6081
+
6082
+
tinyspy@4.0.3: {}
6083
+
5538
6084
to-regex-range@5.0.1:
5539
6085
dependencies:
5540
6086
is-number: 7.0.0
···
5695
6241
'@types/unist': 3.0.3
5696
6242
vfile-message: 4.0.3
5697
6243
6244
+
vite-node@3.2.4(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.0):
6245
+
dependencies:
6246
+
cac: 6.7.14
6247
+
debug: 4.4.1
6248
+
es-module-lexer: 1.7.0
6249
+
pathe: 2.0.3
6250
+
vite: 7.1.4(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.0)
6251
+
transitivePeerDependencies:
6252
+
- '@types/node'
6253
+
- jiti
6254
+
- less
6255
+
- lightningcss
6256
+
- sass
6257
+
- sass-embedded
6258
+
- stylus
6259
+
- sugarss
6260
+
- supports-color
6261
+
- terser
6262
+
- tsx
6263
+
- yaml
6264
+
6265
+
vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.0):
6266
+
dependencies:
6267
+
esbuild: 0.25.9
6268
+
fdir: 6.5.0(picomatch@4.0.3)
6269
+
picomatch: 4.0.3
6270
+
postcss: 8.5.6
6271
+
rollup: 4.50.0
6272
+
tinyglobby: 0.2.15
6273
+
optionalDependencies:
6274
+
'@types/node': 24.3.0
6275
+
fsevents: 2.3.3
6276
+
jiti: 2.5.1
6277
+
terser: 5.43.1
6278
+
tsx: 4.20.4
6279
+
yaml: 2.8.0
6280
+
6281
+
vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.0):
6282
+
dependencies:
6283
+
'@types/chai': 5.2.2
6284
+
'@vitest/expect': 3.2.4
6285
+
'@vitest/mocker': 3.2.4(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.0))
6286
+
'@vitest/pretty-format': 3.2.4
6287
+
'@vitest/runner': 3.2.4
6288
+
'@vitest/snapshot': 3.2.4
6289
+
'@vitest/spy': 3.2.4
6290
+
'@vitest/utils': 3.2.4
6291
+
chai: 5.3.3
6292
+
debug: 4.4.1
6293
+
expect-type: 1.2.2
6294
+
magic-string: 0.30.18
6295
+
pathe: 2.0.3
6296
+
picomatch: 4.0.3
6297
+
std-env: 3.9.0
6298
+
tinybench: 2.9.0
6299
+
tinyexec: 0.3.2
6300
+
tinyglobby: 0.2.15
6301
+
tinypool: 1.1.1
6302
+
tinyrainbow: 2.0.0
6303
+
vite: 7.1.4(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.0)
6304
+
vite-node: 3.2.4(@types/node@24.3.0)(jiti@2.5.1)(terser@5.43.1)(tsx@4.20.4)(yaml@2.8.0)
6305
+
why-is-node-running: 2.3.0
6306
+
optionalDependencies:
6307
+
'@types/debug': 4.1.12
6308
+
'@types/node': 24.3.0
6309
+
transitivePeerDependencies:
6310
+
- jiti
6311
+
- less
6312
+
- lightningcss
6313
+
- msw
6314
+
- sass
6315
+
- sass-embedded
6316
+
- stylus
6317
+
- sugarss
6318
+
- supports-color
6319
+
- terser
6320
+
- tsx
6321
+
- yaml
6322
+
5698
6323
vue-component-type-helpers@3.0.6: {}
5699
6324
5700
6325
vue-demi@0.14.10(vue@3.5.19(typescript@5.9.2)):
···
5761
6386
which@2.0.2:
5762
6387
dependencies:
5763
6388
isexe: 2.0.0
6389
+
6390
+
why-is-node-running@2.3.0:
6391
+
dependencies:
6392
+
siginfo: 2.0.0
6393
+
stackback: 0.0.2
5764
6394
5765
6395
winston-transport@4.9.0:
5766
6396
dependencies:
+51
backend/src/api/did.ts
+51
backend/src/api/did.ts
···
1
+
/*
2
+
* clippr: a social bookmarking service for the AT Protocol
3
+
* Copyright (c) 2025 clippr contributors.
4
+
* SPDX-License-Identifier: AGPL-3.0-only
5
+
*/
6
+
7
+
import {
8
+
CompositeDidDocumentResolver,
9
+
DocumentNotFoundError,
10
+
FailedDocumentResolutionError,
11
+
HandleResolutionError,
12
+
ImproperDidError,
13
+
PlcDidDocumentResolver,
14
+
UnsupportedDidMethodError,
15
+
WebDidDocumentResolver,
16
+
} from "@atcute/identity-resolver";
17
+
18
+
// Gets a DID document from a given DID. DID method agnostic.
19
+
export async function getDidDocument(
20
+
did: `did:plc:${string}` | `did:web:${string}`,
21
+
) {
22
+
const docResolver = new CompositeDidDocumentResolver({
23
+
methods: {
24
+
plc: new PlcDidDocumentResolver(),
25
+
web: new WebDidDocumentResolver(),
26
+
},
27
+
});
28
+
29
+
let doc;
30
+
try {
31
+
doc = await docResolver.resolve(did);
32
+
} catch (err) {
33
+
if (err instanceof DocumentNotFoundError) {
34
+
throw new Error("Document not found");
35
+
}
36
+
if (err instanceof UnsupportedDidMethodError) {
37
+
throw new Error("Unsupported DID method");
38
+
}
39
+
if (err instanceof ImproperDidError) {
40
+
throw new Error("Invalid DID");
41
+
}
42
+
if (err instanceof FailedDocumentResolutionError) {
43
+
throw new Error("Failed document resolution");
44
+
}
45
+
if (err instanceof HandleResolutionError) {
46
+
throw new Error("Unknown resolution error");
47
+
}
48
+
}
49
+
50
+
return doc;
51
+
}
+5
-38
backend/src/network/converters.ts
+5
-38
backend/src/network/converters.ts
···
4
4
* SPDX-License-Identifier: AGPL-3.0-only
5
5
*/
6
6
7
-
import {
8
-
CompositeDidDocumentResolver,
9
-
DocumentNotFoundError,
10
-
FailedDocumentResolutionError,
11
-
HandleResolutionError,
12
-
ImproperDidError,
13
-
PlcDidDocumentResolver,
14
-
UnsupportedDidMethodError,
15
-
WebDidDocumentResolver,
16
-
} from "@atcute/identity-resolver";
17
7
import { Client, simpleFetchHandler } from "@atcute/client";
8
+
import { getDidDocument } from "../api/did.js";
18
9
19
10
/// Converts an ``At.DID`` type to a proper string, for type reasons.
20
11
export function convertDidToString(did: `did:${string}`): string {
···
31
22
}
32
23
}
33
24
34
-
// Get a user's handle from their DID. DID method agnostic.
25
+
// Get a user's handle from their DID.
26
+
//
27
+
// WARNING: Handle validation is not performed and is taken from the document as-is. Fix me!
35
28
export async function getHandleFromDid(did: string): Promise<string> {
36
-
const docResolver = new CompositeDidDocumentResolver({
37
-
methods: {
38
-
plc: new PlcDidDocumentResolver(),
39
-
web: new WebDidDocumentResolver(),
40
-
},
41
-
});
42
-
43
-
let doc;
44
-
try {
45
-
doc = await docResolver.resolve(convertStringToTypedDid(did));
46
-
} catch (err) {
47
-
if (err instanceof DocumentNotFoundError) {
48
-
throw new Error("Document not found");
49
-
}
50
-
if (err instanceof UnsupportedDidMethodError) {
51
-
throw new Error("Unsupported did method");
52
-
}
53
-
if (err instanceof ImproperDidError) {
54
-
throw new Error("Improper did");
55
-
}
56
-
if (err instanceof FailedDocumentResolutionError) {
57
-
throw new Error("Failed document resolution");
58
-
}
59
-
if (err instanceof HandleResolutionError) {
60
-
throw new Error("Generic handle resolution error");
61
-
}
62
-
}
29
+
const doc = await getDidDocument(convertStringToTypedDid(did));
63
30
64
31
if (!doc?.alsoKnownAs) {
65
32
throw new Error("No handles found");