+503
-514
Cargo.lock
+503
-514
Cargo.lock
···
3
version = 4
4
5
[[package]]
6
-
name = "addr2line"
7
-
version = "0.24.2"
8
-
source = "registry+https://github.com/rust-lang/crates.io-index"
9
-
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
10
-
dependencies = [
11
-
"gimli",
12
-
]
13
-
14
-
[[package]]
15
-
name = "adler2"
16
-
version = "2.0.1"
17
-
source = "registry+https://github.com/rust-lang/crates.io-index"
18
-
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
19
-
20
-
[[package]]
21
name = "aho-corasick"
22
-
version = "1.1.3"
23
source = "registry+https://github.com/rust-lang/crates.io-index"
24
-
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
25
dependencies = [
26
"memchr",
27
]
···
34
35
[[package]]
36
name = "anyhow"
37
-
version = "1.0.99"
38
source = "registry+https://github.com/rust-lang/crates.io-index"
39
-
checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100"
40
41
[[package]]
42
name = "arc-swap"
···
52
dependencies = [
53
"proc-macro2",
54
"quote",
55
-
"syn",
56
]
57
58
[[package]]
···
71
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
72
73
[[package]]
74
name = "atproto-identity"
75
-
version = "0.11.3"
76
-
source = "registry+https://github.com/rust-lang/crates.io-index"
77
-
checksum = "aaac8751c7e4329a95714c01d9e47d22d94bc8c96e78079098312235128acb9f"
78
dependencies = [
79
"anyhow",
80
"async-trait",
···
91
"serde",
92
"serde_ipld_dagcbor",
93
"serde_json",
94
-
"thiserror 2.0.16",
95
"tokio",
96
"tracing",
97
]
98
99
[[package]]
100
name = "atproto-jetstream"
101
-
version = "0.11.3"
102
-
source = "registry+https://github.com/rust-lang/crates.io-index"
103
-
checksum = "9e55d1140fcf5c6be0c03e7db773c6a9258986340118015d9bb536bf22689de2"
104
dependencies = [
105
"anyhow",
106
"async-trait",
···
109
"http",
110
"serde",
111
"serde_json",
112
-
"thiserror 2.0.16",
113
"tokio",
114
"tokio-util",
115
"tokio-websockets",
···
120
]
121
122
[[package]]
123
name = "autocfg"
124
version = "1.5.0"
125
source = "registry+https://github.com/rust-lang/crates.io-index"
···
127
128
[[package]]
129
name = "axum"
130
-
version = "0.8.4"
131
source = "registry+https://github.com/rust-lang/crates.io-index"
132
-
checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5"
133
dependencies = [
134
"axum-core",
135
"bytes",
···
146
"mime",
147
"percent-encoding",
148
"pin-project-lite",
149
-
"rustversion",
150
-
"serde",
151
"serde_json",
152
"serde_path_to_error",
153
"serde_urlencoded",
···
161
162
[[package]]
163
name = "axum-core"
164
-
version = "0.5.2"
165
source = "registry+https://github.com/rust-lang/crates.io-index"
166
-
checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6"
167
dependencies = [
168
"bytes",
169
"futures-core",
···
172
"http-body-util",
173
"mime",
174
"pin-project-lite",
175
-
"rustversion",
176
"sync_wrapper",
177
"tower-layer",
178
"tower-service",
···
181
182
[[package]]
183
name = "backon"
184
-
version = "1.5.2"
185
source = "registry+https://github.com/rust-lang/crates.io-index"
186
-
checksum = "592277618714fbcecda9a02ba7a8781f319d26532a88553bbacc77ba5d2b3a8d"
187
dependencies = [
188
"fastrand",
189
]
190
191
[[package]]
192
-
name = "backtrace"
193
-
version = "0.3.75"
194
-
source = "registry+https://github.com/rust-lang/crates.io-index"
195
-
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
196
-
dependencies = [
197
-
"addr2line",
198
-
"cfg-if",
199
-
"libc",
200
-
"miniz_oxide",
201
-
"object",
202
-
"rustc-demangle",
203
-
"windows-targets 0.52.6",
204
-
]
205
-
206
-
[[package]]
207
name = "base-x"
208
version = "0.2.11"
209
source = "registry+https://github.com/rust-lang/crates.io-index"
···
214
version = "0.2.0"
215
source = "registry+https://github.com/rust-lang/crates.io-index"
216
checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
217
218
[[package]]
219
name = "base64"
···
249
250
[[package]]
251
name = "bitflags"
252
-
version = "2.9.4"
253
source = "registry+https://github.com/rust-lang/crates.io-index"
254
-
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
255
dependencies = [
256
-
"serde",
257
]
258
259
[[package]]
···
303
304
[[package]]
305
name = "cc"
306
-
version = "1.2.36"
307
source = "registry+https://github.com/rust-lang/crates.io-index"
308
-
checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54"
309
dependencies = [
310
"find-msvc-tools",
311
"jobserver",
···
315
316
[[package]]
317
name = "cfg-if"
318
-
version = "1.0.3"
319
source = "registry+https://github.com/rust-lang/crates.io-index"
320
-
checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
321
322
[[package]]
323
name = "cfg_aliases"
···
326
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
327
328
[[package]]
329
name = "cid"
330
version = "0.11.1"
331
source = "registry+https://github.com/rust-lang/crates.io-index"
···
369
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
370
371
[[package]]
372
name = "core-foundation"
373
version = "0.9.4"
374
source = "registry+https://github.com/rust-lang/crates.io-index"
···
511
checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976"
512
dependencies = [
513
"data-encoding",
514
-
"syn",
515
]
516
517
[[package]]
···
576
dependencies = [
577
"proc-macro2",
578
"quote",
579
-
"syn",
580
]
581
582
[[package]]
···
595
"digest",
596
"elliptic-curve",
597
"rfc6979",
598
"signature",
599
"spki",
600
]
···
650
"heck",
651
"proc-macro2",
652
"quote",
653
-
"syn",
654
]
655
656
[[package]]
···
661
662
[[package]]
663
name = "errno"
664
-
version = "0.3.13"
665
source = "registry+https://github.com/rust-lang/crates.io-index"
666
-
checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
667
dependencies = [
668
"libc",
669
-
"windows-sys 0.60.2",
670
]
671
672
[[package]]
···
709
710
[[package]]
711
name = "find-msvc-tools"
712
-
version = "0.1.1"
713
source = "registry+https://github.com/rust-lang/crates.io-index"
714
-
checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d"
715
716
[[package]]
717
name = "flume"
···
827
dependencies = [
828
"proc-macro2",
829
"quote",
830
-
"syn",
831
]
832
833
[[package]]
···
861
]
862
863
[[package]]
864
-
name = "generator"
865
-
version = "0.8.7"
866
-
source = "registry+https://github.com/rust-lang/crates.io-index"
867
-
checksum = "605183a538e3e2a9c1038635cc5c2d194e2ee8fd0d1b66b8349fad7dbacce5a2"
868
-
dependencies = [
869
-
"cc",
870
-
"cfg-if",
871
-
"libc",
872
-
"log",
873
-
"rustversion",
874
-
"windows",
875
-
]
876
-
877
-
[[package]]
878
name = "generic-array"
879
-
version = "0.14.7"
880
source = "registry+https://github.com/rust-lang/crates.io-index"
881
-
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
882
dependencies = [
883
"typenum",
884
"version_check",
···
894
"cfg-if",
895
"js-sys",
896
"libc",
897
-
"wasi 0.11.1+wasi-snapshot-preview1",
898
"wasm-bindgen",
899
]
900
901
[[package]]
902
name = "getrandom"
903
-
version = "0.3.3"
904
source = "registry+https://github.com/rust-lang/crates.io-index"
905
-
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
906
dependencies = [
907
"cfg-if",
908
"js-sys",
909
"libc",
910
"r-efi",
911
-
"wasi 0.14.3+wasi-0.2.4",
912
"wasm-bindgen",
913
]
914
-
915
-
[[package]]
916
-
name = "gimli"
917
-
version = "0.31.1"
918
-
source = "registry+https://github.com/rust-lang/crates.io-index"
919
-
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
920
921
[[package]]
922
name = "group"
···
960
]
961
962
[[package]]
963
name = "hashlink"
964
version = "0.10.0"
965
source = "registry+https://github.com/rust-lang/crates.io-index"
966
checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
967
dependencies = [
968
-
"hashbrown",
969
]
970
971
[[package]]
···
1004
"once_cell",
1005
"rand 0.9.2",
1006
"ring",
1007
-
"thiserror 2.0.16",
1008
"tinyvec",
1009
"tokio",
1010
"tracing",
···
1027
"rand 0.9.2",
1028
"resolv-conf",
1029
"smallvec",
1030
-
"thiserror 2.0.16",
1031
"tokio",
1032
"tracing",
1033
]
···
1052
1053
[[package]]
1054
name = "home"
1055
-
version = "0.5.11"
1056
source = "registry+https://github.com/rust-lang/crates.io-index"
1057
-
checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf"
1058
dependencies = [
1059
-
"windows-sys 0.59.0",
1060
]
1061
1062
[[package]]
···
1169
1170
[[package]]
1171
name = "hyper-util"
1172
-
version = "0.1.16"
1173
source = "registry+https://github.com/rust-lang/crates.io-index"
1174
-
checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
1175
dependencies = [
1176
"base64",
1177
"bytes",
···
1185
"libc",
1186
"percent-encoding",
1187
"pin-project-lite",
1188
-
"socket2 0.6.0",
1189
"system-configuration",
1190
"tokio",
1191
"tower-service",
···
1195
1196
[[package]]
1197
name = "icu_collections"
1198
-
version = "2.0.0"
1199
source = "registry+https://github.com/rust-lang/crates.io-index"
1200
-
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
1201
dependencies = [
1202
"displaydoc",
1203
"potential_utf",
···
1208
1209
[[package]]
1210
name = "icu_locale_core"
1211
-
version = "2.0.0"
1212
source = "registry+https://github.com/rust-lang/crates.io-index"
1213
-
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
1214
dependencies = [
1215
"displaydoc",
1216
"litemap",
···
1221
1222
[[package]]
1223
name = "icu_normalizer"
1224
-
version = "2.0.0"
1225
source = "registry+https://github.com/rust-lang/crates.io-index"
1226
-
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
1227
dependencies = [
1228
-
"displaydoc",
1229
"icu_collections",
1230
"icu_normalizer_data",
1231
"icu_properties",
···
1236
1237
[[package]]
1238
name = "icu_normalizer_data"
1239
-
version = "2.0.0"
1240
source = "registry+https://github.com/rust-lang/crates.io-index"
1241
-
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
1242
1243
[[package]]
1244
name = "icu_properties"
1245
-
version = "2.0.1"
1246
source = "registry+https://github.com/rust-lang/crates.io-index"
1247
-
checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b"
1248
dependencies = [
1249
-
"displaydoc",
1250
"icu_collections",
1251
"icu_locale_core",
1252
"icu_properties_data",
1253
"icu_provider",
1254
-
"potential_utf",
1255
"zerotrie",
1256
"zerovec",
1257
]
1258
1259
[[package]]
1260
name = "icu_properties_data"
1261
-
version = "2.0.1"
1262
source = "registry+https://github.com/rust-lang/crates.io-index"
1263
-
checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632"
1264
1265
[[package]]
1266
name = "icu_provider"
1267
-
version = "2.0.0"
1268
source = "registry+https://github.com/rust-lang/crates.io-index"
1269
-
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
1270
dependencies = [
1271
"displaydoc",
1272
"icu_locale_core",
1273
-
"stable_deref_trait",
1274
-
"tinystr",
1275
"writeable",
1276
"yoke",
1277
"zerofrom",
···
1302
1303
[[package]]
1304
name = "indexmap"
1305
-
version = "2.11.0"
1306
source = "registry+https://github.com/rust-lang/crates.io-index"
1307
-
checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9"
1308
dependencies = [
1309
"equivalent",
1310
-
"hashbrown",
1311
-
]
1312
-
1313
-
[[package]]
1314
-
name = "io-uring"
1315
-
version = "0.7.10"
1316
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1317
-
checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b"
1318
-
dependencies = [
1319
-
"bitflags",
1320
-
"cfg-if",
1321
-
"libc",
1322
]
1323
1324
[[package]]
···
1372
source = "registry+https://github.com/rust-lang/crates.io-index"
1373
checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
1374
dependencies = [
1375
-
"getrandom 0.3.3",
1376
"libc",
1377
]
1378
1379
[[package]]
1380
name = "js-sys"
1381
-
version = "0.3.78"
1382
source = "registry+https://github.com/rust-lang/crates.io-index"
1383
-
checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738"
1384
dependencies = [
1385
"once_cell",
1386
"wasm-bindgen",
···
1411
1412
[[package]]
1413
name = "libc"
1414
-
version = "0.2.175"
1415
source = "registry+https://github.com/rust-lang/crates.io-index"
1416
-
checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
1417
1418
[[package]]
1419
name = "libm"
···
1423
1424
[[package]]
1425
name = "libredox"
1426
-
version = "0.1.9"
1427
source = "registry+https://github.com/rust-lang/crates.io-index"
1428
-
checksum = "391290121bad3d37fbddad76d8f5d1c1c314cfc646d143d7e07a3086ddff0ce3"
1429
dependencies = [
1430
"bitflags",
1431
"libc",
···
1445
1446
[[package]]
1447
name = "linux-raw-sys"
1448
-
version = "0.9.4"
1449
source = "registry+https://github.com/rust-lang/crates.io-index"
1450
-
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
1451
1452
[[package]]
1453
name = "litemap"
1454
-
version = "0.8.0"
1455
source = "registry+https://github.com/rust-lang/crates.io-index"
1456
-
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
1457
1458
[[package]]
1459
name = "lock_api"
1460
-
version = "0.4.13"
1461
source = "registry+https://github.com/rust-lang/crates.io-index"
1462
-
checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
1463
dependencies = [
1464
-
"autocfg",
1465
"scopeguard",
1466
]
1467
···
1470
version = "0.4.28"
1471
source = "registry+https://github.com/rust-lang/crates.io-index"
1472
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
1473
-
1474
-
[[package]]
1475
-
name = "loom"
1476
-
version = "0.7.2"
1477
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1478
-
checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca"
1479
-
dependencies = [
1480
-
"cfg-if",
1481
-
"generator",
1482
-
"scoped-tls",
1483
-
"tracing",
1484
-
"tracing-subscriber",
1485
-
]
1486
1487
[[package]]
1488
name = "lru"
···
1490
source = "registry+https://github.com/rust-lang/crates.io-index"
1491
checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
1492
dependencies = [
1493
-
"hashbrown",
1494
]
1495
1496
[[package]]
···
1498
version = "0.1.2"
1499
source = "registry+https://github.com/rust-lang/crates.io-index"
1500
checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
1501
1502
[[package]]
1503
name = "matchers"
···
1526
1527
[[package]]
1528
name = "memchr"
1529
-
version = "2.7.5"
1530
source = "registry+https://github.com/rust-lang/crates.io-index"
1531
-
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
1532
1533
[[package]]
1534
name = "metrohash"
···
1553
]
1554
1555
[[package]]
1556
-
name = "miniz_oxide"
1557
-
version = "0.8.9"
1558
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1559
-
checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316"
1560
-
dependencies = [
1561
-
"adler2",
1562
-
]
1563
-
1564
-
[[package]]
1565
name = "mio"
1566
-
version = "1.0.4"
1567
source = "registry+https://github.com/rust-lang/crates.io-index"
1568
-
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
1569
dependencies = [
1570
"libc",
1571
-
"wasi 0.11.1+wasi-snapshot-preview1",
1572
-
"windows-sys 0.59.0",
1573
]
1574
1575
[[package]]
1576
name = "moka"
1577
-
version = "0.12.10"
1578
source = "registry+https://github.com/rust-lang/crates.io-index"
1579
-
checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926"
1580
dependencies = [
1581
"crossbeam-channel",
1582
"crossbeam-epoch",
1583
"crossbeam-utils",
1584
-
"loom",
1585
"parking_lot",
1586
"portable-atomic",
1587
"rustc_version",
1588
"smallvec",
1589
"tagptr",
1590
-
"thiserror 1.0.69",
1591
"uuid",
1592
]
1593
1594
[[package]]
1595
name = "multibase"
1596
-
version = "0.9.1"
1597
source = "registry+https://github.com/rust-lang/crates.io-index"
1598
-
checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404"
1599
dependencies = [
1600
"base-x",
1601
"data-encoding",
1602
"data-encoding-macro",
1603
]
···
1632
1633
[[package]]
1634
name = "nu-ansi-term"
1635
-
version = "0.50.1"
1636
source = "registry+https://github.com/rust-lang/crates.io-index"
1637
-
checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399"
1638
dependencies = [
1639
-
"windows-sys 0.52.0",
1640
]
1641
1642
[[package]]
···
1651
1652
[[package]]
1653
name = "num-bigint-dig"
1654
-
version = "0.8.4"
1655
source = "registry+https://github.com/rust-lang/crates.io-index"
1656
-
checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
1657
dependencies = [
1658
-
"byteorder",
1659
"lazy_static",
1660
"libm",
1661
"num-integer",
···
1707
]
1708
1709
[[package]]
1710
-
name = "object"
1711
-
version = "0.36.7"
1712
-
source = "registry+https://github.com/rust-lang/crates.io-index"
1713
-
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
1714
-
dependencies = [
1715
-
"memchr",
1716
-
]
1717
-
1718
-
[[package]]
1719
name = "once_cell"
1720
version = "1.21.3"
1721
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1727
1728
[[package]]
1729
name = "openssl"
1730
-
version = "0.10.73"
1731
source = "registry+https://github.com/rust-lang/crates.io-index"
1732
-
checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8"
1733
dependencies = [
1734
"bitflags",
1735
"cfg-if",
···
1748
dependencies = [
1749
"proc-macro2",
1750
"quote",
1751
-
"syn",
1752
]
1753
1754
[[package]]
···
1759
1760
[[package]]
1761
name = "openssl-sys"
1762
-
version = "0.9.109"
1763
source = "registry+https://github.com/rust-lang/crates.io-index"
1764
-
checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571"
1765
dependencies = [
1766
"cc",
1767
"libc",
···
1778
"ecdsa",
1779
"elliptic-curve",
1780
"primeorder",
1781
"sha2",
1782
]
1783
···
1790
"ecdsa",
1791
"elliptic-curve",
1792
"primeorder",
1793
"sha2",
1794
]
1795
···
1801
1802
[[package]]
1803
name = "parking_lot"
1804
-
version = "0.12.4"
1805
source = "registry+https://github.com/rust-lang/crates.io-index"
1806
-
checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13"
1807
dependencies = [
1808
"lock_api",
1809
"parking_lot_core",
···
1811
1812
[[package]]
1813
name = "parking_lot_core"
1814
-
version = "0.9.11"
1815
source = "registry+https://github.com/rust-lang/crates.io-index"
1816
-
checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5"
1817
dependencies = [
1818
"cfg-if",
1819
"libc",
1820
"redox_syscall",
1821
"smallvec",
1822
-
"windows-targets 0.52.6",
1823
]
1824
1825
[[package]]
···
1884
1885
[[package]]
1886
name = "potential_utf"
1887
-
version = "0.1.3"
1888
source = "registry+https://github.com/rust-lang/crates.io-index"
1889
-
checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a"
1890
dependencies = [
1891
"zerovec",
1892
]
···
1907
checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
1908
dependencies = [
1909
"elliptic-curve",
1910
]
1911
1912
[[package]]
1913
name = "proc-macro2"
1914
-
version = "1.0.101"
1915
source = "registry+https://github.com/rust-lang/crates.io-index"
1916
-
checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de"
1917
dependencies = [
1918
"unicode-ident",
1919
]
···
1926
"async-trait",
1927
"atproto-identity",
1928
"atproto-jetstream",
1929
"axum",
1930
"bincode",
1931
"cadence",
···
1937
"serde",
1938
"serde_json",
1939
"sqlx",
1940
-
"thiserror 2.0.16",
1941
"tokio",
1942
"tokio-util",
1943
"tower-http",
···
1958
"quinn-udp",
1959
"rustc-hash",
1960
"rustls",
1961
-
"socket2 0.6.0",
1962
-
"thiserror 2.0.16",
1963
"tokio",
1964
"tracing",
1965
"web-time",
···
1972
checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
1973
dependencies = [
1974
"bytes",
1975
-
"getrandom 0.3.3",
1976
"lru-slab",
1977
"rand 0.9.2",
1978
"ring",
···
1980
"rustls",
1981
"rustls-pki-types",
1982
"slab",
1983
-
"thiserror 2.0.16",
1984
"tinyvec",
1985
"tracing",
1986
"web-time",
···
1995
"cfg_aliases",
1996
"libc",
1997
"once_cell",
1998
-
"socket2 0.6.0",
1999
"tracing",
2000
"windows-sys 0.60.2",
2001
]
2002
2003
[[package]]
2004
name = "quote"
2005
-
version = "1.0.40"
2006
source = "registry+https://github.com/rust-lang/crates.io-index"
2007
-
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
2008
dependencies = [
2009
"proc-macro2",
2010
]
···
2071
source = "registry+https://github.com/rust-lang/crates.io-index"
2072
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
2073
dependencies = [
2074
-
"getrandom 0.3.3",
2075
]
2076
2077
[[package]]
2078
name = "redis"
2079
-
version = "0.32.5"
2080
source = "registry+https://github.com/rust-lang/crates.io-index"
2081
-
checksum = "7cd3650deebc68526b304898b192fa4102a4ef0b9ada24da096559cb60e0eef8"
2082
dependencies = [
2083
"arc-swap",
2084
"backon",
···
2094
"rustls",
2095
"rustls-native-certs",
2096
"ryu",
2097
-
"socket2 0.6.0",
2098
"tokio",
2099
"tokio-rustls",
2100
"tokio-util",
···
2103
2104
[[package]]
2105
name = "redox_syscall"
2106
-
version = "0.5.17"
2107
source = "registry+https://github.com/rust-lang/crates.io-index"
2108
-
checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77"
2109
dependencies = [
2110
"bitflags",
2111
]
2112
2113
[[package]]
2114
name = "regex-automata"
2115
-
version = "0.4.10"
2116
source = "registry+https://github.com/rust-lang/crates.io-index"
2117
-
checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6"
2118
dependencies = [
2119
"aho-corasick",
2120
"memchr",
···
2123
2124
[[package]]
2125
name = "regex-syntax"
2126
-
version = "0.8.6"
2127
source = "registry+https://github.com/rust-lang/crates.io-index"
2128
-
checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
2129
2130
[[package]]
2131
name = "reqwest"
2132
-
version = "0.12.23"
2133
source = "registry+https://github.com/rust-lang/crates.io-index"
2134
-
checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb"
2135
dependencies = [
2136
"base64",
2137
"bytes",
2138
"encoding_rs",
2139
"futures-core",
2140
"h2",
2141
"http",
2142
"http-body",
···
2148
"js-sys",
2149
"log",
2150
"mime",
2151
"native-tls",
2152
"percent-encoding",
2153
"pin-project-lite",
···
2172
]
2173
2174
[[package]]
2175
name = "resolv-conf"
2176
-
version = "0.7.4"
2177
source = "registry+https://github.com/rust-lang/crates.io-index"
2178
-
checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3"
2179
2180
[[package]]
2181
name = "rfc6979"
···
2222
]
2223
2224
[[package]]
2225
-
name = "rustc-demangle"
2226
-
version = "0.1.26"
2227
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2228
-
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
2229
-
2230
-
[[package]]
2231
name = "rustc-hash"
2232
version = "2.1.1"
2233
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2244
2245
[[package]]
2246
name = "rustix"
2247
-
version = "1.0.8"
2248
source = "registry+https://github.com/rust-lang/crates.io-index"
2249
-
checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
2250
dependencies = [
2251
"bitflags",
2252
"errno",
2253
"libc",
2254
"linux-raw-sys",
2255
-
"windows-sys 0.60.2",
2256
]
2257
2258
[[package]]
2259
name = "rustls"
2260
-
version = "0.23.31"
2261
source = "registry+https://github.com/rust-lang/crates.io-index"
2262
-
checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc"
2263
dependencies = [
2264
"once_cell",
2265
"ring",
···
2271
2272
[[package]]
2273
name = "rustls-native-certs"
2274
-
version = "0.8.1"
2275
source = "registry+https://github.com/rust-lang/crates.io-index"
2276
-
checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3"
2277
dependencies = [
2278
"openssl-probe",
2279
"rustls-pki-types",
2280
"schannel",
2281
-
"security-framework 3.3.0",
2282
]
2283
2284
[[package]]
2285
name = "rustls-pki-types"
2286
-
version = "1.12.0"
2287
source = "registry+https://github.com/rust-lang/crates.io-index"
2288
-
checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79"
2289
dependencies = [
2290
"web-time",
2291
"zeroize",
···
2293
2294
[[package]]
2295
name = "rustls-webpki"
2296
-
version = "0.103.4"
2297
source = "registry+https://github.com/rust-lang/crates.io-index"
2298
-
checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc"
2299
dependencies = [
2300
"ring",
2301
"rustls-pki-types",
···
2316
2317
[[package]]
2318
name = "schannel"
2319
-
version = "0.1.27"
2320
source = "registry+https://github.com/rust-lang/crates.io-index"
2321
-
checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
2322
dependencies = [
2323
-
"windows-sys 0.59.0",
2324
]
2325
-
2326
-
[[package]]
2327
-
name = "scoped-tls"
2328
-
version = "1.0.1"
2329
-
source = "registry+https://github.com/rust-lang/crates.io-index"
2330
-
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
2331
2332
[[package]]
2333
name = "scopeguard"
···
2365
2366
[[package]]
2367
name = "security-framework"
2368
-
version = "3.3.0"
2369
source = "registry+https://github.com/rust-lang/crates.io-index"
2370
-
checksum = "80fb1d92c5028aa318b4b8bd7302a5bfcf48be96a37fc6fc790f806b0004ee0c"
2371
dependencies = [
2372
"bitflags",
2373
"core-foundation 0.10.1",
···
2378
2379
[[package]]
2380
name = "security-framework-sys"
2381
-
version = "2.14.0"
2382
source = "registry+https://github.com/rust-lang/crates.io-index"
2383
-
checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
2384
dependencies = [
2385
"core-foundation-sys",
2386
"libc",
···
2388
2389
[[package]]
2390
name = "semver"
2391
-
version = "1.0.26"
2392
source = "registry+https://github.com/rust-lang/crates.io-index"
2393
-
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
2394
2395
[[package]]
2396
name = "serde"
2397
-
version = "1.0.219"
2398
source = "registry+https://github.com/rust-lang/crates.io-index"
2399
-
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
2400
dependencies = [
2401
"serde_derive",
2402
]
2403
2404
[[package]]
2405
name = "serde_bytes"
2406
-
version = "0.11.17"
2407
source = "registry+https://github.com/rust-lang/crates.io-index"
2408
-
checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96"
2409
dependencies = [
2410
"serde",
2411
]
2412
2413
[[package]]
2414
name = "serde_derive"
2415
-
version = "1.0.219"
2416
source = "registry+https://github.com/rust-lang/crates.io-index"
2417
-
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
2418
dependencies = [
2419
"proc-macro2",
2420
"quote",
2421
-
"syn",
2422
]
2423
2424
[[package]]
2425
name = "serde_ipld_dagcbor"
2426
-
version = "0.6.3"
2427
source = "registry+https://github.com/rust-lang/crates.io-index"
2428
-
checksum = "99600723cf53fb000a66175555098db7e75217c415bdd9a16a65d52a19dcc4fc"
2429
dependencies = [
2430
"cbor4ii",
2431
"ipld-core",
···
2435
2436
[[package]]
2437
name = "serde_json"
2438
-
version = "1.0.143"
2439
source = "registry+https://github.com/rust-lang/crates.io-index"
2440
-
checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a"
2441
dependencies = [
2442
"itoa",
2443
"memchr",
2444
"ryu",
2445
"serde",
2446
]
2447
2448
[[package]]
2449
name = "serde_path_to_error"
2450
-
version = "0.1.17"
2451
source = "registry+https://github.com/rust-lang/crates.io-index"
2452
-
checksum = "59fab13f937fa393d08645bf3a84bdfe86e296747b506ada67bb15f10f218b2a"
2453
dependencies = [
2454
"itoa",
2455
"serde",
2456
]
2457
2458
[[package]]
···
2566
2567
[[package]]
2568
name = "socket2"
2569
-
version = "0.6.0"
2570
source = "registry+https://github.com/rust-lang/crates.io-index"
2571
-
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
2572
dependencies = [
2573
"libc",
2574
-
"windows-sys 0.59.0",
2575
]
2576
2577
[[package]]
···
2622
"futures-intrusive",
2623
"futures-io",
2624
"futures-util",
2625
-
"hashbrown",
2626
"hashlink",
2627
"indexmap",
2628
"log",
···
2633
"serde_json",
2634
"sha2",
2635
"smallvec",
2636
-
"thiserror 2.0.16",
2637
"tokio",
2638
"tokio-stream",
2639
"tracing",
···
2650
"quote",
2651
"sqlx-core",
2652
"sqlx-macros-core",
2653
-
"syn",
2654
]
2655
2656
[[package]]
···
2673
"sqlx-mysql",
2674
"sqlx-postgres",
2675
"sqlx-sqlite",
2676
-
"syn",
2677
"tokio",
2678
"url",
2679
]
···
2715
"smallvec",
2716
"sqlx-core",
2717
"stringprep",
2718
-
"thiserror 2.0.16",
2719
"tracing",
2720
"whoami",
2721
]
···
2752
"smallvec",
2753
"sqlx-core",
2754
"stringprep",
2755
-
"thiserror 2.0.16",
2756
"tracing",
2757
"whoami",
2758
]
···
2776
"serde",
2777
"serde_urlencoded",
2778
"sqlx-core",
2779
-
"thiserror 2.0.16",
2780
"tracing",
2781
"url",
2782
]
2783
2784
[[package]]
2785
name = "stable_deref_trait"
2786
-
version = "1.2.0"
2787
source = "registry+https://github.com/rust-lang/crates.io-index"
2788
-
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
2789
2790
[[package]]
2791
name = "stringprep"
···
2806
2807
[[package]]
2808
name = "syn"
2809
-
version = "2.0.106"
2810
source = "registry+https://github.com/rust-lang/crates.io-index"
2811
-
checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
2812
dependencies = [
2813
"proc-macro2",
2814
"quote",
···
2832
dependencies = [
2833
"proc-macro2",
2834
"quote",
2835
-
"syn",
2836
]
2837
2838
[[package]]
···
2864
2865
[[package]]
2866
name = "tempfile"
2867
-
version = "3.21.0"
2868
source = "registry+https://github.com/rust-lang/crates.io-index"
2869
-
checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e"
2870
dependencies = [
2871
"fastrand",
2872
-
"getrandom 0.3.3",
2873
"once_cell",
2874
"rustix",
2875
-
"windows-sys 0.60.2",
2876
]
2877
2878
[[package]]
···
2886
2887
[[package]]
2888
name = "thiserror"
2889
-
version = "2.0.16"
2890
source = "registry+https://github.com/rust-lang/crates.io-index"
2891
-
checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0"
2892
dependencies = [
2893
-
"thiserror-impl 2.0.16",
2894
]
2895
2896
[[package]]
···
2901
dependencies = [
2902
"proc-macro2",
2903
"quote",
2904
-
"syn",
2905
]
2906
2907
[[package]]
2908
name = "thiserror-impl"
2909
-
version = "2.0.16"
2910
source = "registry+https://github.com/rust-lang/crates.io-index"
2911
-
checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960"
2912
dependencies = [
2913
"proc-macro2",
2914
"quote",
2915
-
"syn",
2916
]
2917
2918
[[package]]
···
2926
2927
[[package]]
2928
name = "tinystr"
2929
-
version = "0.8.1"
2930
source = "registry+https://github.com/rust-lang/crates.io-index"
2931
-
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
2932
dependencies = [
2933
"displaydoc",
2934
"zerovec",
···
2951
2952
[[package]]
2953
name = "tokio"
2954
-
version = "1.47.1"
2955
source = "registry+https://github.com/rust-lang/crates.io-index"
2956
-
checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
2957
dependencies = [
2958
-
"backtrace",
2959
"bytes",
2960
-
"io-uring",
2961
"libc",
2962
"mio",
2963
"parking_lot",
2964
"pin-project-lite",
2965
"signal-hook-registry",
2966
-
"slab",
2967
-
"socket2 0.6.0",
2968
"tokio-macros",
2969
-
"windows-sys 0.59.0",
2970
]
2971
2972
[[package]]
2973
name = "tokio-macros"
2974
-
version = "2.5.0"
2975
source = "registry+https://github.com/rust-lang/crates.io-index"
2976
-
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
2977
dependencies = [
2978
"proc-macro2",
2979
"quote",
2980
-
"syn",
2981
]
2982
2983
[[package]]
···
2992
2993
[[package]]
2994
name = "tokio-rustls"
2995
-
version = "0.26.2"
2996
source = "registry+https://github.com/rust-lang/crates.io-index"
2997
-
checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
2998
dependencies = [
2999
"rustls",
3000
"tokio",
···
3013
3014
[[package]]
3015
name = "tokio-util"
3016
-
version = "0.7.16"
3017
source = "registry+https://github.com/rust-lang/crates.io-index"
3018
-
checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5"
3019
dependencies = [
3020
"bytes",
3021
"futures-core",
···
3123
dependencies = [
3124
"proc-macro2",
3125
"quote",
3126
-
"syn",
3127
]
3128
3129
[[package]]
···
3173
3174
[[package]]
3175
name = "typenum"
3176
-
version = "1.18.0"
3177
source = "registry+https://github.com/rust-lang/crates.io-index"
3178
-
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
3179
3180
[[package]]
3181
name = "unicase"
···
3191
3192
[[package]]
3193
name = "unicode-ident"
3194
-
version = "1.0.18"
3195
source = "registry+https://github.com/rust-lang/crates.io-index"
3196
-
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
3197
3198
[[package]]
3199
name = "unicode-normalization"
3200
-
version = "0.1.24"
3201
source = "registry+https://github.com/rust-lang/crates.io-index"
3202
-
checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956"
3203
dependencies = [
3204
"tinyvec",
3205
]
3206
3207
[[package]]
3208
name = "unicode-properties"
3209
-
version = "0.1.3"
3210
source = "registry+https://github.com/rust-lang/crates.io-index"
3211
-
checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"
3212
3213
[[package]]
3214
name = "unsigned-varint"
···
3258
source = "registry+https://github.com/rust-lang/crates.io-index"
3259
checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2"
3260
dependencies = [
3261
-
"getrandom 0.3.3",
3262
"js-sys",
3263
"wasm-bindgen",
3264
]
···
3303
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
3304
3305
[[package]]
3306
-
name = "wasi"
3307
-
version = "0.14.3+wasi-0.2.4"
3308
source = "registry+https://github.com/rust-lang/crates.io-index"
3309
-
checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95"
3310
dependencies = [
3311
"wit-bindgen",
3312
]
···
3319
3320
[[package]]
3321
name = "wasm-bindgen"
3322
-
version = "0.2.101"
3323
source = "registry+https://github.com/rust-lang/crates.io-index"
3324
-
checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b"
3325
dependencies = [
3326
"cfg-if",
3327
"once_cell",
···
3331
]
3332
3333
[[package]]
3334
-
name = "wasm-bindgen-backend"
3335
-
version = "0.2.101"
3336
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3337
-
checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb"
3338
-
dependencies = [
3339
-
"bumpalo",
3340
-
"log",
3341
-
"proc-macro2",
3342
-
"quote",
3343
-
"syn",
3344
-
"wasm-bindgen-shared",
3345
-
]
3346
-
3347
-
[[package]]
3348
name = "wasm-bindgen-futures"
3349
-
version = "0.4.51"
3350
source = "registry+https://github.com/rust-lang/crates.io-index"
3351
-
checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe"
3352
dependencies = [
3353
"cfg-if",
3354
"js-sys",
···
3359
3360
[[package]]
3361
name = "wasm-bindgen-macro"
3362
-
version = "0.2.101"
3363
source = "registry+https://github.com/rust-lang/crates.io-index"
3364
-
checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d"
3365
dependencies = [
3366
"quote",
3367
"wasm-bindgen-macro-support",
···
3369
3370
[[package]]
3371
name = "wasm-bindgen-macro-support"
3372
-
version = "0.2.101"
3373
source = "registry+https://github.com/rust-lang/crates.io-index"
3374
-
checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa"
3375
dependencies = [
3376
"proc-macro2",
3377
"quote",
3378
-
"syn",
3379
-
"wasm-bindgen-backend",
3380
"wasm-bindgen-shared",
3381
]
3382
3383
[[package]]
3384
name = "wasm-bindgen-shared"
3385
-
version = "0.2.101"
3386
source = "registry+https://github.com/rust-lang/crates.io-index"
3387
-
checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1"
3388
dependencies = [
3389
"unicode-ident",
3390
]
3391
3392
[[package]]
3393
name = "web-sys"
3394
-
version = "0.3.78"
3395
source = "registry+https://github.com/rust-lang/crates.io-index"
3396
-
checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12"
3397
dependencies = [
3398
"js-sys",
3399
"wasm-bindgen",
···
3411
3412
[[package]]
3413
name = "webpki-roots"
3414
-
version = "1.0.2"
3415
source = "registry+https://github.com/rust-lang/crates.io-index"
3416
-
checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2"
3417
dependencies = [
3418
"rustls-pki-types",
3419
]
···
3430
3431
[[package]]
3432
name = "widestring"
3433
-
version = "1.2.0"
3434
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3435
-
checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d"
3436
-
3437
-
[[package]]
3438
-
name = "windows"
3439
-
version = "0.61.3"
3440
source = "registry+https://github.com/rust-lang/crates.io-index"
3441
-
checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893"
3442
-
dependencies = [
3443
-
"windows-collections",
3444
-
"windows-core",
3445
-
"windows-future",
3446
-
"windows-link",
3447
-
"windows-numerics",
3448
-
]
3449
-
3450
-
[[package]]
3451
-
name = "windows-collections"
3452
-
version = "0.2.0"
3453
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3454
-
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
3455
-
dependencies = [
3456
-
"windows-core",
3457
-
]
3458
-
3459
-
[[package]]
3460
-
name = "windows-core"
3461
-
version = "0.61.2"
3462
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3463
-
checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3"
3464
-
dependencies = [
3465
-
"windows-implement",
3466
-
"windows-interface",
3467
-
"windows-link",
3468
-
"windows-result",
3469
-
"windows-strings",
3470
-
]
3471
-
3472
-
[[package]]
3473
-
name = "windows-future"
3474
-
version = "0.2.1"
3475
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3476
-
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
3477
-
dependencies = [
3478
-
"windows-core",
3479
-
"windows-link",
3480
-
"windows-threading",
3481
-
]
3482
-
3483
-
[[package]]
3484
-
name = "windows-implement"
3485
-
version = "0.60.0"
3486
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3487
-
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
3488
-
dependencies = [
3489
-
"proc-macro2",
3490
-
"quote",
3491
-
"syn",
3492
-
]
3493
-
3494
-
[[package]]
3495
-
name = "windows-interface"
3496
-
version = "0.59.1"
3497
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3498
-
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
3499
-
dependencies = [
3500
-
"proc-macro2",
3501
-
"quote",
3502
-
"syn",
3503
-
]
3504
3505
[[package]]
3506
name = "windows-link"
···
3509
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
3510
3511
[[package]]
3512
-
name = "windows-numerics"
3513
-
version = "0.2.0"
3514
source = "registry+https://github.com/rust-lang/crates.io-index"
3515
-
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
3516
-
dependencies = [
3517
-
"windows-core",
3518
-
"windows-link",
3519
-
]
3520
3521
[[package]]
3522
name = "windows-registry"
···
3524
source = "registry+https://github.com/rust-lang/crates.io-index"
3525
checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
3526
dependencies = [
3527
-
"windows-link",
3528
"windows-result",
3529
"windows-strings",
3530
]
···
3535
source = "registry+https://github.com/rust-lang/crates.io-index"
3536
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
3537
dependencies = [
3538
-
"windows-link",
3539
]
3540
3541
[[package]]
···
3544
source = "registry+https://github.com/rust-lang/crates.io-index"
3545
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
3546
dependencies = [
3547
-
"windows-link",
3548
]
3549
3550
[[package]]
···
3567
3568
[[package]]
3569
name = "windows-sys"
3570
-
version = "0.59.0"
3571
source = "registry+https://github.com/rust-lang/crates.io-index"
3572
-
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
3573
dependencies = [
3574
-
"windows-targets 0.52.6",
3575
]
3576
3577
[[package]]
3578
name = "windows-sys"
3579
-
version = "0.60.2"
3580
source = "registry+https://github.com/rust-lang/crates.io-index"
3581
-
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
3582
dependencies = [
3583
-
"windows-targets 0.53.3",
3584
]
3585
3586
[[package]]
···
3616
3617
[[package]]
3618
name = "windows-targets"
3619
-
version = "0.53.3"
3620
-
source = "registry+https://github.com/rust-lang/crates.io-index"
3621
-
checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91"
3622
-
dependencies = [
3623
-
"windows-link",
3624
-
"windows_aarch64_gnullvm 0.53.0",
3625
-
"windows_aarch64_msvc 0.53.0",
3626
-
"windows_i686_gnu 0.53.0",
3627
-
"windows_i686_gnullvm 0.53.0",
3628
-
"windows_i686_msvc 0.53.0",
3629
-
"windows_x86_64_gnu 0.53.0",
3630
-
"windows_x86_64_gnullvm 0.53.0",
3631
-
"windows_x86_64_msvc 0.53.0",
3632
-
]
3633
-
3634
-
[[package]]
3635
-
name = "windows-threading"
3636
-
version = "0.1.0"
3637
source = "registry+https://github.com/rust-lang/crates.io-index"
3638
-
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
3639
dependencies = [
3640
-
"windows-link",
3641
]
3642
3643
[[package]]
···
3654
3655
[[package]]
3656
name = "windows_aarch64_gnullvm"
3657
-
version = "0.53.0"
3658
source = "registry+https://github.com/rust-lang/crates.io-index"
3659
-
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
3660
3661
[[package]]
3662
name = "windows_aarch64_msvc"
···
3672
3673
[[package]]
3674
name = "windows_aarch64_msvc"
3675
-
version = "0.53.0"
3676
source = "registry+https://github.com/rust-lang/crates.io-index"
3677
-
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
3678
3679
[[package]]
3680
name = "windows_i686_gnu"
···
3690
3691
[[package]]
3692
name = "windows_i686_gnu"
3693
-
version = "0.53.0"
3694
source = "registry+https://github.com/rust-lang/crates.io-index"
3695
-
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
3696
3697
[[package]]
3698
name = "windows_i686_gnullvm"
···
3702
3703
[[package]]
3704
name = "windows_i686_gnullvm"
3705
-
version = "0.53.0"
3706
source = "registry+https://github.com/rust-lang/crates.io-index"
3707
-
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
3708
3709
[[package]]
3710
name = "windows_i686_msvc"
···
3720
3721
[[package]]
3722
name = "windows_i686_msvc"
3723
-
version = "0.53.0"
3724
source = "registry+https://github.com/rust-lang/crates.io-index"
3725
-
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
3726
3727
[[package]]
3728
name = "windows_x86_64_gnu"
···
3738
3739
[[package]]
3740
name = "windows_x86_64_gnu"
3741
-
version = "0.53.0"
3742
source = "registry+https://github.com/rust-lang/crates.io-index"
3743
-
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
3744
3745
[[package]]
3746
name = "windows_x86_64_gnullvm"
···
3756
3757
[[package]]
3758
name = "windows_x86_64_gnullvm"
3759
-
version = "0.53.0"
3760
source = "registry+https://github.com/rust-lang/crates.io-index"
3761
-
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
3762
3763
[[package]]
3764
name = "windows_x86_64_msvc"
···
3774
3775
[[package]]
3776
name = "windows_x86_64_msvc"
3777
-
version = "0.53.0"
3778
source = "registry+https://github.com/rust-lang/crates.io-index"
3779
-
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
3780
3781
[[package]]
3782
name = "winreg"
···
3790
3791
[[package]]
3792
name = "wit-bindgen"
3793
-
version = "0.45.1"
3794
source = "registry+https://github.com/rust-lang/crates.io-index"
3795
-
checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36"
3796
3797
[[package]]
3798
name = "writeable"
3799
-
version = "0.6.1"
3800
source = "registry+https://github.com/rust-lang/crates.io-index"
3801
-
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
3802
3803
[[package]]
3804
name = "yoke"
3805
-
version = "0.8.0"
3806
source = "registry+https://github.com/rust-lang/crates.io-index"
3807
-
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
3808
dependencies = [
3809
-
"serde",
3810
"stable_deref_trait",
3811
"yoke-derive",
3812
"zerofrom",
···
3814
3815
[[package]]
3816
name = "yoke-derive"
3817
-
version = "0.8.0"
3818
source = "registry+https://github.com/rust-lang/crates.io-index"
3819
-
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
3820
dependencies = [
3821
"proc-macro2",
3822
"quote",
3823
-
"syn",
3824
"synstructure",
3825
]
3826
3827
[[package]]
3828
name = "zerocopy"
3829
-
version = "0.8.26"
3830
source = "registry+https://github.com/rust-lang/crates.io-index"
3831
-
checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f"
3832
dependencies = [
3833
"zerocopy-derive",
3834
]
3835
3836
[[package]]
3837
name = "zerocopy-derive"
3838
-
version = "0.8.26"
3839
source = "registry+https://github.com/rust-lang/crates.io-index"
3840
-
checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181"
3841
dependencies = [
3842
"proc-macro2",
3843
"quote",
3844
-
"syn",
3845
]
3846
3847
[[package]]
···
3861
dependencies = [
3862
"proc-macro2",
3863
"quote",
3864
-
"syn",
3865
"synstructure",
3866
]
3867
3868
[[package]]
3869
name = "zeroize"
3870
-
version = "1.8.1"
3871
source = "registry+https://github.com/rust-lang/crates.io-index"
3872
-
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
3873
3874
[[package]]
3875
name = "zerotrie"
3876
-
version = "0.2.2"
3877
source = "registry+https://github.com/rust-lang/crates.io-index"
3878
-
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
3879
dependencies = [
3880
"displaydoc",
3881
"yoke",
···
3884
3885
[[package]]
3886
name = "zerovec"
3887
-
version = "0.11.4"
3888
source = "registry+https://github.com/rust-lang/crates.io-index"
3889
-
checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b"
3890
dependencies = [
3891
"yoke",
3892
"zerofrom",
···
3895
3896
[[package]]
3897
name = "zerovec-derive"
3898
-
version = "0.11.1"
3899
source = "registry+https://github.com/rust-lang/crates.io-index"
3900
-
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
3901
dependencies = [
3902
"proc-macro2",
3903
"quote",
3904
-
"syn",
3905
]
3906
3907
[[package]]
···
3
version = 4
4
5
[[package]]
6
name = "aho-corasick"
7
+
version = "1.1.4"
8
source = "registry+https://github.com/rust-lang/crates.io-index"
9
+
checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
10
dependencies = [
11
"memchr",
12
]
···
19
20
[[package]]
21
name = "anyhow"
22
+
version = "1.0.100"
23
source = "registry+https://github.com/rust-lang/crates.io-index"
24
+
checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61"
25
26
[[package]]
27
name = "arc-swap"
···
37
dependencies = [
38
"proc-macro2",
39
"quote",
40
+
"syn 2.0.108",
41
]
42
43
[[package]]
···
56
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
57
58
[[package]]
59
+
name = "atproto-client"
60
+
version = "0.13.0"
61
+
source = "git+https://tangled.org/@smokesignal.events/atproto-identity-rs#8a38edecc8ebebd74d511ae7863c7eecd0b877ad"
62
+
dependencies = [
63
+
"anyhow",
64
+
"async-trait",
65
+
"atproto-identity",
66
+
"atproto-oauth",
67
+
"atproto-record",
68
+
"bytes",
69
+
"reqwest",
70
+
"reqwest-chain",
71
+
"reqwest-middleware",
72
+
"serde",
73
+
"serde_json",
74
+
"thiserror 2.0.17",
75
+
"tokio",
76
+
"tracing",
77
+
"urlencoding",
78
+
]
79
+
80
+
[[package]]
81
name = "atproto-identity"
82
+
version = "0.13.0"
83
+
source = "git+https://tangled.org/@smokesignal.events/atproto-identity-rs#8a38edecc8ebebd74d511ae7863c7eecd0b877ad"
84
dependencies = [
85
"anyhow",
86
"async-trait",
···
97
"serde",
98
"serde_ipld_dagcbor",
99
"serde_json",
100
+
"thiserror 2.0.17",
101
"tokio",
102
"tracing",
103
+
"url",
104
+
"urlencoding",
105
]
106
107
[[package]]
108
name = "atproto-jetstream"
109
+
version = "0.13.0"
110
+
source = "git+https://tangled.org/@smokesignal.events/atproto-identity-rs#8a38edecc8ebebd74d511ae7863c7eecd0b877ad"
111
dependencies = [
112
"anyhow",
113
"async-trait",
···
116
"http",
117
"serde",
118
"serde_json",
119
+
"thiserror 2.0.17",
120
"tokio",
121
"tokio-util",
122
"tokio-websockets",
···
127
]
128
129
[[package]]
130
+
name = "atproto-lexicon"
131
+
version = "0.13.0"
132
+
source = "git+https://tangled.org/@smokesignal.events/atproto-identity-rs#8a38edecc8ebebd74d511ae7863c7eecd0b877ad"
133
+
dependencies = [
134
+
"anyhow",
135
+
"async-trait",
136
+
"atproto-client",
137
+
"atproto-identity",
138
+
"hickory-resolver",
139
+
"reqwest",
140
+
"serde",
141
+
"serde_json",
142
+
"thiserror 2.0.17",
143
+
"tokio",
144
+
"tracing",
145
+
]
146
+
147
+
[[package]]
148
+
name = "atproto-oauth"
149
+
version = "0.13.0"
150
+
source = "git+https://tangled.org/@smokesignal.events/atproto-identity-rs#8a38edecc8ebebd74d511ae7863c7eecd0b877ad"
151
+
dependencies = [
152
+
"anyhow",
153
+
"async-trait",
154
+
"atproto-identity",
155
+
"base64",
156
+
"chrono",
157
+
"ecdsa",
158
+
"elliptic-curve",
159
+
"k256",
160
+
"lru",
161
+
"multibase",
162
+
"p256",
163
+
"p384",
164
+
"rand 0.8.5",
165
+
"reqwest",
166
+
"reqwest-chain",
167
+
"reqwest-middleware",
168
+
"serde",
169
+
"serde_ipld_dagcbor",
170
+
"serde_json",
171
+
"sha2",
172
+
"thiserror 2.0.17",
173
+
"tokio",
174
+
"tracing",
175
+
"ulid",
176
+
]
177
+
178
+
[[package]]
179
+
name = "atproto-record"
180
+
version = "0.13.0"
181
+
source = "git+https://tangled.org/@smokesignal.events/atproto-identity-rs#8a38edecc8ebebd74d511ae7863c7eecd0b877ad"
182
+
dependencies = [
183
+
"anyhow",
184
+
"atproto-identity",
185
+
"base64",
186
+
"chrono",
187
+
"cid",
188
+
"multihash",
189
+
"rand 0.8.5",
190
+
"serde",
191
+
"serde_ipld_dagcbor",
192
+
"serde_json",
193
+
"sha2",
194
+
"thiserror 2.0.17",
195
+
]
196
+
197
+
[[package]]
198
name = "autocfg"
199
version = "1.5.0"
200
source = "registry+https://github.com/rust-lang/crates.io-index"
···
202
203
[[package]]
204
name = "axum"
205
+
version = "0.8.6"
206
source = "registry+https://github.com/rust-lang/crates.io-index"
207
+
checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871"
208
dependencies = [
209
"axum-core",
210
"bytes",
···
221
"mime",
222
"percent-encoding",
223
"pin-project-lite",
224
+
"serde_core",
225
"serde_json",
226
"serde_path_to_error",
227
"serde_urlencoded",
···
235
236
[[package]]
237
name = "axum-core"
238
+
version = "0.5.5"
239
source = "registry+https://github.com/rust-lang/crates.io-index"
240
+
checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22"
241
dependencies = [
242
"bytes",
243
"futures-core",
···
246
"http-body-util",
247
"mime",
248
"pin-project-lite",
249
"sync_wrapper",
250
"tower-layer",
251
"tower-service",
···
254
255
[[package]]
256
name = "backon"
257
+
version = "1.6.0"
258
source = "registry+https://github.com/rust-lang/crates.io-index"
259
+
checksum = "cffb0e931875b666fc4fcb20fee52e9bbd1ef836fd9e9e04ec21555f9f85f7ef"
260
dependencies = [
261
"fastrand",
262
]
263
264
[[package]]
265
name = "base-x"
266
version = "0.2.11"
267
source = "registry+https://github.com/rust-lang/crates.io-index"
···
272
version = "0.2.0"
273
source = "registry+https://github.com/rust-lang/crates.io-index"
274
checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
275
+
276
+
[[package]]
277
+
name = "base256emoji"
278
+
version = "1.0.2"
279
+
source = "registry+https://github.com/rust-lang/crates.io-index"
280
+
checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c"
281
+
dependencies = [
282
+
"const-str",
283
+
"match-lookup",
284
+
]
285
286
[[package]]
287
name = "base64"
···
317
318
[[package]]
319
name = "bitflags"
320
+
version = "2.10.0"
321
source = "registry+https://github.com/rust-lang/crates.io-index"
322
+
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
323
dependencies = [
324
+
"serde_core",
325
]
326
327
[[package]]
···
371
372
[[package]]
373
name = "cc"
374
+
version = "1.2.44"
375
source = "registry+https://github.com/rust-lang/crates.io-index"
376
+
checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3"
377
dependencies = [
378
"find-msvc-tools",
379
"jobserver",
···
383
384
[[package]]
385
name = "cfg-if"
386
+
version = "1.0.4"
387
source = "registry+https://github.com/rust-lang/crates.io-index"
388
+
checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
389
390
[[package]]
391
name = "cfg_aliases"
···
394
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
395
396
[[package]]
397
+
name = "chrono"
398
+
version = "0.4.42"
399
+
source = "registry+https://github.com/rust-lang/crates.io-index"
400
+
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
401
+
dependencies = [
402
+
"num-traits",
403
+
"serde",
404
+
]
405
+
406
+
[[package]]
407
name = "cid"
408
version = "0.11.1"
409
source = "registry+https://github.com/rust-lang/crates.io-index"
···
447
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
448
449
[[package]]
450
+
name = "const-str"
451
+
version = "0.4.3"
452
+
source = "registry+https://github.com/rust-lang/crates.io-index"
453
+
checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3"
454
+
455
+
[[package]]
456
name = "core-foundation"
457
version = "0.9.4"
458
source = "registry+https://github.com/rust-lang/crates.io-index"
···
595
checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976"
596
dependencies = [
597
"data-encoding",
598
+
"syn 2.0.108",
599
]
600
601
[[package]]
···
660
dependencies = [
661
"proc-macro2",
662
"quote",
663
+
"syn 2.0.108",
664
]
665
666
[[package]]
···
679
"digest",
680
"elliptic-curve",
681
"rfc6979",
682
+
"serdect",
683
"signature",
684
"spki",
685
]
···
735
"heck",
736
"proc-macro2",
737
"quote",
738
+
"syn 2.0.108",
739
]
740
741
[[package]]
···
746
747
[[package]]
748
name = "errno"
749
+
version = "0.3.14"
750
source = "registry+https://github.com/rust-lang/crates.io-index"
751
+
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
752
dependencies = [
753
"libc",
754
+
"windows-sys 0.61.2",
755
]
756
757
[[package]]
···
794
795
[[package]]
796
name = "find-msvc-tools"
797
+
version = "0.1.4"
798
source = "registry+https://github.com/rust-lang/crates.io-index"
799
+
checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127"
800
801
[[package]]
802
name = "flume"
···
912
dependencies = [
913
"proc-macro2",
914
"quote",
915
+
"syn 2.0.108",
916
]
917
918
[[package]]
···
946
]
947
948
[[package]]
949
name = "generic-array"
950
+
version = "0.14.9"
951
source = "registry+https://github.com/rust-lang/crates.io-index"
952
+
checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2"
953
dependencies = [
954
"typenum",
955
"version_check",
···
965
"cfg-if",
966
"js-sys",
967
"libc",
968
+
"wasi",
969
"wasm-bindgen",
970
]
971
972
[[package]]
973
name = "getrandom"
974
+
version = "0.3.4"
975
source = "registry+https://github.com/rust-lang/crates.io-index"
976
+
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
977
dependencies = [
978
"cfg-if",
979
"js-sys",
980
"libc",
981
"r-efi",
982
+
"wasip2",
983
"wasm-bindgen",
984
]
985
986
[[package]]
987
name = "group"
···
1025
]
1026
1027
[[package]]
1028
+
name = "hashbrown"
1029
+
version = "0.16.0"
1030
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1031
+
checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
1032
+
1033
+
[[package]]
1034
name = "hashlink"
1035
version = "0.10.0"
1036
source = "registry+https://github.com/rust-lang/crates.io-index"
1037
checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
1038
dependencies = [
1039
+
"hashbrown 0.15.5",
1040
]
1041
1042
[[package]]
···
1075
"once_cell",
1076
"rand 0.9.2",
1077
"ring",
1078
+
"thiserror 2.0.17",
1079
"tinyvec",
1080
"tokio",
1081
"tracing",
···
1098
"rand 0.9.2",
1099
"resolv-conf",
1100
"smallvec",
1101
+
"thiserror 2.0.17",
1102
"tokio",
1103
"tracing",
1104
]
···
1123
1124
[[package]]
1125
name = "home"
1126
+
version = "0.5.12"
1127
source = "registry+https://github.com/rust-lang/crates.io-index"
1128
+
checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d"
1129
dependencies = [
1130
+
"windows-sys 0.61.2",
1131
]
1132
1133
[[package]]
···
1240
1241
[[package]]
1242
name = "hyper-util"
1243
+
version = "0.1.17"
1244
source = "registry+https://github.com/rust-lang/crates.io-index"
1245
+
checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8"
1246
dependencies = [
1247
"base64",
1248
"bytes",
···
1256
"libc",
1257
"percent-encoding",
1258
"pin-project-lite",
1259
+
"socket2 0.6.1",
1260
"system-configuration",
1261
"tokio",
1262
"tower-service",
···
1266
1267
[[package]]
1268
name = "icu_collections"
1269
+
version = "2.1.1"
1270
source = "registry+https://github.com/rust-lang/crates.io-index"
1271
+
checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43"
1272
dependencies = [
1273
"displaydoc",
1274
"potential_utf",
···
1279
1280
[[package]]
1281
name = "icu_locale_core"
1282
+
version = "2.1.1"
1283
source = "registry+https://github.com/rust-lang/crates.io-index"
1284
+
checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6"
1285
dependencies = [
1286
"displaydoc",
1287
"litemap",
···
1292
1293
[[package]]
1294
name = "icu_normalizer"
1295
+
version = "2.1.1"
1296
source = "registry+https://github.com/rust-lang/crates.io-index"
1297
+
checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599"
1298
dependencies = [
1299
"icu_collections",
1300
"icu_normalizer_data",
1301
"icu_properties",
···
1306
1307
[[package]]
1308
name = "icu_normalizer_data"
1309
+
version = "2.1.1"
1310
source = "registry+https://github.com/rust-lang/crates.io-index"
1311
+
checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a"
1312
1313
[[package]]
1314
name = "icu_properties"
1315
+
version = "2.1.1"
1316
source = "registry+https://github.com/rust-lang/crates.io-index"
1317
+
checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99"
1318
dependencies = [
1319
"icu_collections",
1320
"icu_locale_core",
1321
"icu_properties_data",
1322
"icu_provider",
1323
"zerotrie",
1324
"zerovec",
1325
]
1326
1327
[[package]]
1328
name = "icu_properties_data"
1329
+
version = "2.1.1"
1330
source = "registry+https://github.com/rust-lang/crates.io-index"
1331
+
checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899"
1332
1333
[[package]]
1334
name = "icu_provider"
1335
+
version = "2.1.1"
1336
source = "registry+https://github.com/rust-lang/crates.io-index"
1337
+
checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614"
1338
dependencies = [
1339
"displaydoc",
1340
"icu_locale_core",
1341
"writeable",
1342
"yoke",
1343
"zerofrom",
···
1368
1369
[[package]]
1370
name = "indexmap"
1371
+
version = "2.12.0"
1372
source = "registry+https://github.com/rust-lang/crates.io-index"
1373
+
checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f"
1374
dependencies = [
1375
"equivalent",
1376
+
"hashbrown 0.16.0",
1377
]
1378
1379
[[package]]
···
1427
source = "registry+https://github.com/rust-lang/crates.io-index"
1428
checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33"
1429
dependencies = [
1430
+
"getrandom 0.3.4",
1431
"libc",
1432
]
1433
1434
[[package]]
1435
name = "js-sys"
1436
+
version = "0.3.82"
1437
source = "registry+https://github.com/rust-lang/crates.io-index"
1438
+
checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65"
1439
dependencies = [
1440
"once_cell",
1441
"wasm-bindgen",
···
1466
1467
[[package]]
1468
name = "libc"
1469
+
version = "0.2.177"
1470
source = "registry+https://github.com/rust-lang/crates.io-index"
1471
+
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
1472
1473
[[package]]
1474
name = "libm"
···
1478
1479
[[package]]
1480
name = "libredox"
1481
+
version = "0.1.10"
1482
source = "registry+https://github.com/rust-lang/crates.io-index"
1483
+
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
1484
dependencies = [
1485
"bitflags",
1486
"libc",
···
1500
1501
[[package]]
1502
name = "linux-raw-sys"
1503
+
version = "0.11.0"
1504
source = "registry+https://github.com/rust-lang/crates.io-index"
1505
+
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
1506
1507
[[package]]
1508
name = "litemap"
1509
+
version = "0.8.1"
1510
source = "registry+https://github.com/rust-lang/crates.io-index"
1511
+
checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77"
1512
1513
[[package]]
1514
name = "lock_api"
1515
+
version = "0.4.14"
1516
source = "registry+https://github.com/rust-lang/crates.io-index"
1517
+
checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965"
1518
dependencies = [
1519
"scopeguard",
1520
]
1521
···
1524
version = "0.4.28"
1525
source = "registry+https://github.com/rust-lang/crates.io-index"
1526
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
1527
1528
[[package]]
1529
name = "lru"
···
1531
source = "registry+https://github.com/rust-lang/crates.io-index"
1532
checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
1533
dependencies = [
1534
+
"hashbrown 0.15.5",
1535
]
1536
1537
[[package]]
···
1539
version = "0.1.2"
1540
source = "registry+https://github.com/rust-lang/crates.io-index"
1541
checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154"
1542
+
1543
+
[[package]]
1544
+
name = "match-lookup"
1545
+
version = "0.1.1"
1546
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1547
+
checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e"
1548
+
dependencies = [
1549
+
"proc-macro2",
1550
+
"quote",
1551
+
"syn 1.0.109",
1552
+
]
1553
1554
[[package]]
1555
name = "matchers"
···
1578
1579
[[package]]
1580
name = "memchr"
1581
+
version = "2.7.6"
1582
source = "registry+https://github.com/rust-lang/crates.io-index"
1583
+
checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273"
1584
1585
[[package]]
1586
name = "metrohash"
···
1605
]
1606
1607
[[package]]
1608
name = "mio"
1609
+
version = "1.1.0"
1610
source = "registry+https://github.com/rust-lang/crates.io-index"
1611
+
checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873"
1612
dependencies = [
1613
"libc",
1614
+
"wasi",
1615
+
"windows-sys 0.61.2",
1616
]
1617
1618
[[package]]
1619
name = "moka"
1620
+
version = "0.12.11"
1621
source = "registry+https://github.com/rust-lang/crates.io-index"
1622
+
checksum = "8261cd88c312e0004c1d51baad2980c66528dfdb2bee62003e643a4d8f86b077"
1623
dependencies = [
1624
"crossbeam-channel",
1625
"crossbeam-epoch",
1626
"crossbeam-utils",
1627
+
"equivalent",
1628
"parking_lot",
1629
"portable-atomic",
1630
"rustc_version",
1631
"smallvec",
1632
"tagptr",
1633
"uuid",
1634
]
1635
1636
[[package]]
1637
name = "multibase"
1638
+
version = "0.9.2"
1639
source = "registry+https://github.com/rust-lang/crates.io-index"
1640
+
checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77"
1641
dependencies = [
1642
"base-x",
1643
+
"base256emoji",
1644
"data-encoding",
1645
"data-encoding-macro",
1646
]
···
1675
1676
[[package]]
1677
name = "nu-ansi-term"
1678
+
version = "0.50.3"
1679
source = "registry+https://github.com/rust-lang/crates.io-index"
1680
+
checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
1681
dependencies = [
1682
+
"windows-sys 0.61.2",
1683
]
1684
1685
[[package]]
···
1694
1695
[[package]]
1696
name = "num-bigint-dig"
1697
+
version = "0.8.5"
1698
source = "registry+https://github.com/rust-lang/crates.io-index"
1699
+
checksum = "82c79c15c05d4bf82b6f5ef163104cc81a760d8e874d38ac50ab67c8877b647b"
1700
dependencies = [
1701
"lazy_static",
1702
"libm",
1703
"num-integer",
···
1749
]
1750
1751
[[package]]
1752
name = "once_cell"
1753
version = "1.21.3"
1754
source = "registry+https://github.com/rust-lang/crates.io-index"
···
1760
1761
[[package]]
1762
name = "openssl"
1763
+
version = "0.10.74"
1764
source = "registry+https://github.com/rust-lang/crates.io-index"
1765
+
checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654"
1766
dependencies = [
1767
"bitflags",
1768
"cfg-if",
···
1781
dependencies = [
1782
"proc-macro2",
1783
"quote",
1784
+
"syn 2.0.108",
1785
]
1786
1787
[[package]]
···
1792
1793
[[package]]
1794
name = "openssl-sys"
1795
+
version = "0.9.110"
1796
source = "registry+https://github.com/rust-lang/crates.io-index"
1797
+
checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2"
1798
dependencies = [
1799
"cc",
1800
"libc",
···
1811
"ecdsa",
1812
"elliptic-curve",
1813
"primeorder",
1814
+
"serdect",
1815
"sha2",
1816
]
1817
···
1824
"ecdsa",
1825
"elliptic-curve",
1826
"primeorder",
1827
+
"serdect",
1828
"sha2",
1829
]
1830
···
1836
1837
[[package]]
1838
name = "parking_lot"
1839
+
version = "0.12.5"
1840
source = "registry+https://github.com/rust-lang/crates.io-index"
1841
+
checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a"
1842
dependencies = [
1843
"lock_api",
1844
"parking_lot_core",
···
1846
1847
[[package]]
1848
name = "parking_lot_core"
1849
+
version = "0.9.12"
1850
source = "registry+https://github.com/rust-lang/crates.io-index"
1851
+
checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1"
1852
dependencies = [
1853
"cfg-if",
1854
"libc",
1855
"redox_syscall",
1856
"smallvec",
1857
+
"windows-link 0.2.1",
1858
]
1859
1860
[[package]]
···
1919
1920
[[package]]
1921
name = "potential_utf"
1922
+
version = "0.1.4"
1923
source = "registry+https://github.com/rust-lang/crates.io-index"
1924
+
checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77"
1925
dependencies = [
1926
"zerovec",
1927
]
···
1942
checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
1943
dependencies = [
1944
"elliptic-curve",
1945
+
"serdect",
1946
]
1947
1948
[[package]]
1949
name = "proc-macro2"
1950
+
version = "1.0.103"
1951
source = "registry+https://github.com/rust-lang/crates.io-index"
1952
+
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
1953
dependencies = [
1954
"unicode-ident",
1955
]
···
1962
"async-trait",
1963
"atproto-identity",
1964
"atproto-jetstream",
1965
+
"atproto-lexicon",
1966
"axum",
1967
"bincode",
1968
"cadence",
···
1974
"serde",
1975
"serde_json",
1976
"sqlx",
1977
+
"thiserror 2.0.17",
1978
"tokio",
1979
"tokio-util",
1980
"tower-http",
···
1995
"quinn-udp",
1996
"rustc-hash",
1997
"rustls",
1998
+
"socket2 0.6.1",
1999
+
"thiserror 2.0.17",
2000
"tokio",
2001
"tracing",
2002
"web-time",
···
2009
checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31"
2010
dependencies = [
2011
"bytes",
2012
+
"getrandom 0.3.4",
2013
"lru-slab",
2014
"rand 0.9.2",
2015
"ring",
···
2017
"rustls",
2018
"rustls-pki-types",
2019
"slab",
2020
+
"thiserror 2.0.17",
2021
"tinyvec",
2022
"tracing",
2023
"web-time",
···
2032
"cfg_aliases",
2033
"libc",
2034
"once_cell",
2035
+
"socket2 0.6.1",
2036
"tracing",
2037
"windows-sys 0.60.2",
2038
]
2039
2040
[[package]]
2041
name = "quote"
2042
+
version = "1.0.41"
2043
source = "registry+https://github.com/rust-lang/crates.io-index"
2044
+
checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
2045
dependencies = [
2046
"proc-macro2",
2047
]
···
2108
source = "registry+https://github.com/rust-lang/crates.io-index"
2109
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
2110
dependencies = [
2111
+
"getrandom 0.3.4",
2112
]
2113
2114
[[package]]
2115
name = "redis"
2116
+
version = "0.32.7"
2117
source = "registry+https://github.com/rust-lang/crates.io-index"
2118
+
checksum = "014cc767fefab6a3e798ca45112bccad9c6e0e218fbd49720042716c73cfef44"
2119
dependencies = [
2120
"arc-swap",
2121
"backon",
···
2131
"rustls",
2132
"rustls-native-certs",
2133
"ryu",
2134
+
"socket2 0.6.1",
2135
"tokio",
2136
"tokio-rustls",
2137
"tokio-util",
···
2140
2141
[[package]]
2142
name = "redox_syscall"
2143
+
version = "0.5.18"
2144
source = "registry+https://github.com/rust-lang/crates.io-index"
2145
+
checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d"
2146
dependencies = [
2147
"bitflags",
2148
]
2149
2150
[[package]]
2151
name = "regex-automata"
2152
+
version = "0.4.13"
2153
source = "registry+https://github.com/rust-lang/crates.io-index"
2154
+
checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c"
2155
dependencies = [
2156
"aho-corasick",
2157
"memchr",
···
2160
2161
[[package]]
2162
name = "regex-syntax"
2163
+
version = "0.8.8"
2164
source = "registry+https://github.com/rust-lang/crates.io-index"
2165
+
checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
2166
2167
[[package]]
2168
name = "reqwest"
2169
+
version = "0.12.24"
2170
source = "registry+https://github.com/rust-lang/crates.io-index"
2171
+
checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f"
2172
dependencies = [
2173
"base64",
2174
"bytes",
2175
"encoding_rs",
2176
"futures-core",
2177
+
"futures-util",
2178
"h2",
2179
"http",
2180
"http-body",
···
2186
"js-sys",
2187
"log",
2188
"mime",
2189
+
"mime_guess",
2190
"native-tls",
2191
"percent-encoding",
2192
"pin-project-lite",
···
2211
]
2212
2213
[[package]]
2214
+
name = "reqwest-chain"
2215
+
version = "1.0.0"
2216
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2217
+
checksum = "da5c014fb79a8227db44a0433d748107750d2550b7fca55c59a3d7ee7d2ee2b2"
2218
+
dependencies = [
2219
+
"anyhow",
2220
+
"async-trait",
2221
+
"http",
2222
+
"reqwest-middleware",
2223
+
]
2224
+
2225
+
[[package]]
2226
+
name = "reqwest-middleware"
2227
+
version = "0.4.2"
2228
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2229
+
checksum = "57f17d28a6e6acfe1733fe24bcd30774d13bffa4b8a22535b4c8c98423088d4e"
2230
+
dependencies = [
2231
+
"anyhow",
2232
+
"async-trait",
2233
+
"http",
2234
+
"reqwest",
2235
+
"serde",
2236
+
"thiserror 1.0.69",
2237
+
"tower-service",
2238
+
]
2239
+
2240
+
[[package]]
2241
name = "resolv-conf"
2242
+
version = "0.7.5"
2243
source = "registry+https://github.com/rust-lang/crates.io-index"
2244
+
checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799"
2245
2246
[[package]]
2247
name = "rfc6979"
···
2288
]
2289
2290
[[package]]
2291
name = "rustc-hash"
2292
version = "2.1.1"
2293
source = "registry+https://github.com/rust-lang/crates.io-index"
···
2304
2305
[[package]]
2306
name = "rustix"
2307
+
version = "1.1.2"
2308
source = "registry+https://github.com/rust-lang/crates.io-index"
2309
+
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
2310
dependencies = [
2311
"bitflags",
2312
"errno",
2313
"libc",
2314
"linux-raw-sys",
2315
+
"windows-sys 0.61.2",
2316
]
2317
2318
[[package]]
2319
name = "rustls"
2320
+
version = "0.23.34"
2321
source = "registry+https://github.com/rust-lang/crates.io-index"
2322
+
checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7"
2323
dependencies = [
2324
"once_cell",
2325
"ring",
···
2331
2332
[[package]]
2333
name = "rustls-native-certs"
2334
+
version = "0.8.2"
2335
source = "registry+https://github.com/rust-lang/crates.io-index"
2336
+
checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923"
2337
dependencies = [
2338
"openssl-probe",
2339
"rustls-pki-types",
2340
"schannel",
2341
+
"security-framework 3.5.1",
2342
]
2343
2344
[[package]]
2345
name = "rustls-pki-types"
2346
+
version = "1.13.0"
2347
source = "registry+https://github.com/rust-lang/crates.io-index"
2348
+
checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a"
2349
dependencies = [
2350
"web-time",
2351
"zeroize",
···
2353
2354
[[package]]
2355
name = "rustls-webpki"
2356
+
version = "0.103.8"
2357
source = "registry+https://github.com/rust-lang/crates.io-index"
2358
+
checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52"
2359
dependencies = [
2360
"ring",
2361
"rustls-pki-types",
···
2376
2377
[[package]]
2378
name = "schannel"
2379
+
version = "0.1.28"
2380
source = "registry+https://github.com/rust-lang/crates.io-index"
2381
+
checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1"
2382
dependencies = [
2383
+
"windows-sys 0.61.2",
2384
]
2385
2386
[[package]]
2387
name = "scopeguard"
···
2419
2420
[[package]]
2421
name = "security-framework"
2422
+
version = "3.5.1"
2423
source = "registry+https://github.com/rust-lang/crates.io-index"
2424
+
checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef"
2425
dependencies = [
2426
"bitflags",
2427
"core-foundation 0.10.1",
···
2432
2433
[[package]]
2434
name = "security-framework-sys"
2435
+
version = "2.15.0"
2436
source = "registry+https://github.com/rust-lang/crates.io-index"
2437
+
checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0"
2438
dependencies = [
2439
"core-foundation-sys",
2440
"libc",
···
2442
2443
[[package]]
2444
name = "semver"
2445
+
version = "1.0.27"
2446
source = "registry+https://github.com/rust-lang/crates.io-index"
2447
+
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
2448
2449
[[package]]
2450
name = "serde"
2451
+
version = "1.0.228"
2452
source = "registry+https://github.com/rust-lang/crates.io-index"
2453
+
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
2454
dependencies = [
2455
+
"serde_core",
2456
"serde_derive",
2457
]
2458
2459
[[package]]
2460
name = "serde_bytes"
2461
+
version = "0.11.19"
2462
source = "registry+https://github.com/rust-lang/crates.io-index"
2463
+
checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8"
2464
dependencies = [
2465
"serde",
2466
+
"serde_core",
2467
+
]
2468
+
2469
+
[[package]]
2470
+
name = "serde_core"
2471
+
version = "1.0.228"
2472
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2473
+
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
2474
+
dependencies = [
2475
+
"serde_derive",
2476
]
2477
2478
[[package]]
2479
name = "serde_derive"
2480
+
version = "1.0.228"
2481
source = "registry+https://github.com/rust-lang/crates.io-index"
2482
+
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
2483
dependencies = [
2484
"proc-macro2",
2485
"quote",
2486
+
"syn 2.0.108",
2487
]
2488
2489
[[package]]
2490
name = "serde_ipld_dagcbor"
2491
+
version = "0.6.4"
2492
source = "registry+https://github.com/rust-lang/crates.io-index"
2493
+
checksum = "46182f4f08349a02b45c998ba3215d3f9de826246ba02bb9dddfe9a2a2100778"
2494
dependencies = [
2495
"cbor4ii",
2496
"ipld-core",
···
2500
2501
[[package]]
2502
name = "serde_json"
2503
+
version = "1.0.145"
2504
source = "registry+https://github.com/rust-lang/crates.io-index"
2505
+
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
2506
dependencies = [
2507
"itoa",
2508
"memchr",
2509
"ryu",
2510
"serde",
2511
+
"serde_core",
2512
]
2513
2514
[[package]]
2515
name = "serde_path_to_error"
2516
+
version = "0.1.20"
2517
source = "registry+https://github.com/rust-lang/crates.io-index"
2518
+
checksum = "10a9ff822e371bb5403e391ecd83e182e0e77ba7f6fe0160b795797109d1b457"
2519
dependencies = [
2520
"itoa",
2521
"serde",
2522
+
"serde_core",
2523
]
2524
2525
[[package]]
···
2633
2634
[[package]]
2635
name = "socket2"
2636
+
version = "0.6.1"
2637
source = "registry+https://github.com/rust-lang/crates.io-index"
2638
+
checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
2639
dependencies = [
2640
"libc",
2641
+
"windows-sys 0.60.2",
2642
]
2643
2644
[[package]]
···
2689
"futures-intrusive",
2690
"futures-io",
2691
"futures-util",
2692
+
"hashbrown 0.15.5",
2693
"hashlink",
2694
"indexmap",
2695
"log",
···
2700
"serde_json",
2701
"sha2",
2702
"smallvec",
2703
+
"thiserror 2.0.17",
2704
"tokio",
2705
"tokio-stream",
2706
"tracing",
···
2717
"quote",
2718
"sqlx-core",
2719
"sqlx-macros-core",
2720
+
"syn 2.0.108",
2721
]
2722
2723
[[package]]
···
2740
"sqlx-mysql",
2741
"sqlx-postgres",
2742
"sqlx-sqlite",
2743
+
"syn 2.0.108",
2744
"tokio",
2745
"url",
2746
]
···
2782
"smallvec",
2783
"sqlx-core",
2784
"stringprep",
2785
+
"thiserror 2.0.17",
2786
"tracing",
2787
"whoami",
2788
]
···
2819
"smallvec",
2820
"sqlx-core",
2821
"stringprep",
2822
+
"thiserror 2.0.17",
2823
"tracing",
2824
"whoami",
2825
]
···
2843
"serde",
2844
"serde_urlencoded",
2845
"sqlx-core",
2846
+
"thiserror 2.0.17",
2847
"tracing",
2848
"url",
2849
]
2850
2851
[[package]]
2852
name = "stable_deref_trait"
2853
+
version = "1.2.1"
2854
source = "registry+https://github.com/rust-lang/crates.io-index"
2855
+
checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596"
2856
2857
[[package]]
2858
name = "stringprep"
···
2873
2874
[[package]]
2875
name = "syn"
2876
+
version = "1.0.109"
2877
source = "registry+https://github.com/rust-lang/crates.io-index"
2878
+
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
2879
+
dependencies = [
2880
+
"proc-macro2",
2881
+
"quote",
2882
+
"unicode-ident",
2883
+
]
2884
+
2885
+
[[package]]
2886
+
name = "syn"
2887
+
version = "2.0.108"
2888
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2889
+
checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917"
2890
dependencies = [
2891
"proc-macro2",
2892
"quote",
···
2910
dependencies = [
2911
"proc-macro2",
2912
"quote",
2913
+
"syn 2.0.108",
2914
]
2915
2916
[[package]]
···
2942
2943
[[package]]
2944
name = "tempfile"
2945
+
version = "3.23.0"
2946
source = "registry+https://github.com/rust-lang/crates.io-index"
2947
+
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
2948
dependencies = [
2949
"fastrand",
2950
+
"getrandom 0.3.4",
2951
"once_cell",
2952
"rustix",
2953
+
"windows-sys 0.61.2",
2954
]
2955
2956
[[package]]
···
2964
2965
[[package]]
2966
name = "thiserror"
2967
+
version = "2.0.17"
2968
source = "registry+https://github.com/rust-lang/crates.io-index"
2969
+
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
2970
dependencies = [
2971
+
"thiserror-impl 2.0.17",
2972
]
2973
2974
[[package]]
···
2979
dependencies = [
2980
"proc-macro2",
2981
"quote",
2982
+
"syn 2.0.108",
2983
]
2984
2985
[[package]]
2986
name = "thiserror-impl"
2987
+
version = "2.0.17"
2988
source = "registry+https://github.com/rust-lang/crates.io-index"
2989
+
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
2990
dependencies = [
2991
"proc-macro2",
2992
"quote",
2993
+
"syn 2.0.108",
2994
]
2995
2996
[[package]]
···
3004
3005
[[package]]
3006
name = "tinystr"
3007
+
version = "0.8.2"
3008
source = "registry+https://github.com/rust-lang/crates.io-index"
3009
+
checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869"
3010
dependencies = [
3011
"displaydoc",
3012
"zerovec",
···
3029
3030
[[package]]
3031
name = "tokio"
3032
+
version = "1.48.0"
3033
source = "registry+https://github.com/rust-lang/crates.io-index"
3034
+
checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408"
3035
dependencies = [
3036
"bytes",
3037
"libc",
3038
"mio",
3039
"parking_lot",
3040
"pin-project-lite",
3041
"signal-hook-registry",
3042
+
"socket2 0.6.1",
3043
"tokio-macros",
3044
+
"windows-sys 0.61.2",
3045
]
3046
3047
[[package]]
3048
name = "tokio-macros"
3049
+
version = "2.6.0"
3050
source = "registry+https://github.com/rust-lang/crates.io-index"
3051
+
checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
3052
dependencies = [
3053
"proc-macro2",
3054
"quote",
3055
+
"syn 2.0.108",
3056
]
3057
3058
[[package]]
···
3067
3068
[[package]]
3069
name = "tokio-rustls"
3070
+
version = "0.26.4"
3071
source = "registry+https://github.com/rust-lang/crates.io-index"
3072
+
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
3073
dependencies = [
3074
"rustls",
3075
"tokio",
···
3088
3089
[[package]]
3090
name = "tokio-util"
3091
+
version = "0.7.17"
3092
source = "registry+https://github.com/rust-lang/crates.io-index"
3093
+
checksum = "2efa149fe76073d6e8fd97ef4f4eca7b67f599660115591483572e406e165594"
3094
dependencies = [
3095
"bytes",
3096
"futures-core",
···
3198
dependencies = [
3199
"proc-macro2",
3200
"quote",
3201
+
"syn 2.0.108",
3202
]
3203
3204
[[package]]
···
3248
3249
[[package]]
3250
name = "typenum"
3251
+
version = "1.19.0"
3252
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3253
+
checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb"
3254
+
3255
+
[[package]]
3256
+
name = "ulid"
3257
+
version = "1.2.1"
3258
source = "registry+https://github.com/rust-lang/crates.io-index"
3259
+
checksum = "470dbf6591da1b39d43c14523b2b469c86879a53e8b758c8e090a470fe7b1fbe"
3260
+
dependencies = [
3261
+
"rand 0.9.2",
3262
+
"web-time",
3263
+
]
3264
3265
[[package]]
3266
name = "unicase"
···
3276
3277
[[package]]
3278
name = "unicode-ident"
3279
+
version = "1.0.22"
3280
source = "registry+https://github.com/rust-lang/crates.io-index"
3281
+
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
3282
3283
[[package]]
3284
name = "unicode-normalization"
3285
+
version = "0.1.25"
3286
source = "registry+https://github.com/rust-lang/crates.io-index"
3287
+
checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8"
3288
dependencies = [
3289
"tinyvec",
3290
]
3291
3292
[[package]]
3293
name = "unicode-properties"
3294
+
version = "0.1.4"
3295
source = "registry+https://github.com/rust-lang/crates.io-index"
3296
+
checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d"
3297
3298
[[package]]
3299
name = "unsigned-varint"
···
3343
source = "registry+https://github.com/rust-lang/crates.io-index"
3344
checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2"
3345
dependencies = [
3346
+
"getrandom 0.3.4",
3347
"js-sys",
3348
"wasm-bindgen",
3349
]
···
3388
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
3389
3390
[[package]]
3391
+
name = "wasip2"
3392
+
version = "1.0.1+wasi-0.2.4"
3393
source = "registry+https://github.com/rust-lang/crates.io-index"
3394
+
checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7"
3395
dependencies = [
3396
"wit-bindgen",
3397
]
···
3404
3405
[[package]]
3406
name = "wasm-bindgen"
3407
+
version = "0.2.105"
3408
source = "registry+https://github.com/rust-lang/crates.io-index"
3409
+
checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60"
3410
dependencies = [
3411
"cfg-if",
3412
"once_cell",
···
3416
]
3417
3418
[[package]]
3419
name = "wasm-bindgen-futures"
3420
+
version = "0.4.55"
3421
source = "registry+https://github.com/rust-lang/crates.io-index"
3422
+
checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0"
3423
dependencies = [
3424
"cfg-if",
3425
"js-sys",
···
3430
3431
[[package]]
3432
name = "wasm-bindgen-macro"
3433
+
version = "0.2.105"
3434
source = "registry+https://github.com/rust-lang/crates.io-index"
3435
+
checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2"
3436
dependencies = [
3437
"quote",
3438
"wasm-bindgen-macro-support",
···
3440
3441
[[package]]
3442
name = "wasm-bindgen-macro-support"
3443
+
version = "0.2.105"
3444
source = "registry+https://github.com/rust-lang/crates.io-index"
3445
+
checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc"
3446
dependencies = [
3447
+
"bumpalo",
3448
"proc-macro2",
3449
"quote",
3450
+
"syn 2.0.108",
3451
"wasm-bindgen-shared",
3452
]
3453
3454
[[package]]
3455
name = "wasm-bindgen-shared"
3456
+
version = "0.2.105"
3457
source = "registry+https://github.com/rust-lang/crates.io-index"
3458
+
checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76"
3459
dependencies = [
3460
"unicode-ident",
3461
]
3462
3463
[[package]]
3464
name = "web-sys"
3465
+
version = "0.3.82"
3466
source = "registry+https://github.com/rust-lang/crates.io-index"
3467
+
checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1"
3468
dependencies = [
3469
"js-sys",
3470
"wasm-bindgen",
···
3482
3483
[[package]]
3484
name = "webpki-roots"
3485
+
version = "1.0.4"
3486
source = "registry+https://github.com/rust-lang/crates.io-index"
3487
+
checksum = "b2878ef029c47c6e8cf779119f20fcf52bde7ad42a731b2a304bc221df17571e"
3488
dependencies = [
3489
"rustls-pki-types",
3490
]
···
3501
3502
[[package]]
3503
name = "widestring"
3504
+
version = "1.2.1"
3505
source = "registry+https://github.com/rust-lang/crates.io-index"
3506
+
checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471"
3507
3508
[[package]]
3509
name = "windows-link"
···
3512
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
3513
3514
[[package]]
3515
+
name = "windows-link"
3516
+
version = "0.2.1"
3517
source = "registry+https://github.com/rust-lang/crates.io-index"
3518
+
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
3519
3520
[[package]]
3521
name = "windows-registry"
···
3523
source = "registry+https://github.com/rust-lang/crates.io-index"
3524
checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
3525
dependencies = [
3526
+
"windows-link 0.1.3",
3527
"windows-result",
3528
"windows-strings",
3529
]
···
3534
source = "registry+https://github.com/rust-lang/crates.io-index"
3535
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
3536
dependencies = [
3537
+
"windows-link 0.1.3",
3538
]
3539
3540
[[package]]
···
3543
source = "registry+https://github.com/rust-lang/crates.io-index"
3544
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
3545
dependencies = [
3546
+
"windows-link 0.1.3",
3547
]
3548
3549
[[package]]
···
3566
3567
[[package]]
3568
name = "windows-sys"
3569
+
version = "0.60.2"
3570
source = "registry+https://github.com/rust-lang/crates.io-index"
3571
+
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
3572
dependencies = [
3573
+
"windows-targets 0.53.5",
3574
]
3575
3576
[[package]]
3577
name = "windows-sys"
3578
+
version = "0.61.2"
3579
source = "registry+https://github.com/rust-lang/crates.io-index"
3580
+
checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
3581
dependencies = [
3582
+
"windows-link 0.2.1",
3583
]
3584
3585
[[package]]
···
3615
3616
[[package]]
3617
name = "windows-targets"
3618
+
version = "0.53.5"
3619
source = "registry+https://github.com/rust-lang/crates.io-index"
3620
+
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
3621
dependencies = [
3622
+
"windows-link 0.2.1",
3623
+
"windows_aarch64_gnullvm 0.53.1",
3624
+
"windows_aarch64_msvc 0.53.1",
3625
+
"windows_i686_gnu 0.53.1",
3626
+
"windows_i686_gnullvm 0.53.1",
3627
+
"windows_i686_msvc 0.53.1",
3628
+
"windows_x86_64_gnu 0.53.1",
3629
+
"windows_x86_64_gnullvm 0.53.1",
3630
+
"windows_x86_64_msvc 0.53.1",
3631
]
3632
3633
[[package]]
···
3644
3645
[[package]]
3646
name = "windows_aarch64_gnullvm"
3647
+
version = "0.53.1"
3648
source = "registry+https://github.com/rust-lang/crates.io-index"
3649
+
checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
3650
3651
[[package]]
3652
name = "windows_aarch64_msvc"
···
3662
3663
[[package]]
3664
name = "windows_aarch64_msvc"
3665
+
version = "0.53.1"
3666
source = "registry+https://github.com/rust-lang/crates.io-index"
3667
+
checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
3668
3669
[[package]]
3670
name = "windows_i686_gnu"
···
3680
3681
[[package]]
3682
name = "windows_i686_gnu"
3683
+
version = "0.53.1"
3684
source = "registry+https://github.com/rust-lang/crates.io-index"
3685
+
checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
3686
3687
[[package]]
3688
name = "windows_i686_gnullvm"
···
3692
3693
[[package]]
3694
name = "windows_i686_gnullvm"
3695
+
version = "0.53.1"
3696
source = "registry+https://github.com/rust-lang/crates.io-index"
3697
+
checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
3698
3699
[[package]]
3700
name = "windows_i686_msvc"
···
3710
3711
[[package]]
3712
name = "windows_i686_msvc"
3713
+
version = "0.53.1"
3714
source = "registry+https://github.com/rust-lang/crates.io-index"
3715
+
checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
3716
3717
[[package]]
3718
name = "windows_x86_64_gnu"
···
3728
3729
[[package]]
3730
name = "windows_x86_64_gnu"
3731
+
version = "0.53.1"
3732
source = "registry+https://github.com/rust-lang/crates.io-index"
3733
+
checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
3734
3735
[[package]]
3736
name = "windows_x86_64_gnullvm"
···
3746
3747
[[package]]
3748
name = "windows_x86_64_gnullvm"
3749
+
version = "0.53.1"
3750
source = "registry+https://github.com/rust-lang/crates.io-index"
3751
+
checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
3752
3753
[[package]]
3754
name = "windows_x86_64_msvc"
···
3764
3765
[[package]]
3766
name = "windows_x86_64_msvc"
3767
+
version = "0.53.1"
3768
source = "registry+https://github.com/rust-lang/crates.io-index"
3769
+
checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
3770
3771
[[package]]
3772
name = "winreg"
···
3780
3781
[[package]]
3782
name = "wit-bindgen"
3783
+
version = "0.46.0"
3784
source = "registry+https://github.com/rust-lang/crates.io-index"
3785
+
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
3786
3787
[[package]]
3788
name = "writeable"
3789
+
version = "0.6.2"
3790
source = "registry+https://github.com/rust-lang/crates.io-index"
3791
+
checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9"
3792
3793
[[package]]
3794
name = "yoke"
3795
+
version = "0.8.1"
3796
source = "registry+https://github.com/rust-lang/crates.io-index"
3797
+
checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954"
3798
dependencies = [
3799
"stable_deref_trait",
3800
"yoke-derive",
3801
"zerofrom",
···
3803
3804
[[package]]
3805
name = "yoke-derive"
3806
+
version = "0.8.1"
3807
source = "registry+https://github.com/rust-lang/crates.io-index"
3808
+
checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
3809
dependencies = [
3810
"proc-macro2",
3811
"quote",
3812
+
"syn 2.0.108",
3813
"synstructure",
3814
]
3815
3816
[[package]]
3817
name = "zerocopy"
3818
+
version = "0.8.27"
3819
source = "registry+https://github.com/rust-lang/crates.io-index"
3820
+
checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
3821
dependencies = [
3822
"zerocopy-derive",
3823
]
3824
3825
[[package]]
3826
name = "zerocopy-derive"
3827
+
version = "0.8.27"
3828
source = "registry+https://github.com/rust-lang/crates.io-index"
3829
+
checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
3830
dependencies = [
3831
"proc-macro2",
3832
"quote",
3833
+
"syn 2.0.108",
3834
]
3835
3836
[[package]]
···
3850
dependencies = [
3851
"proc-macro2",
3852
"quote",
3853
+
"syn 2.0.108",
3854
"synstructure",
3855
]
3856
3857
[[package]]
3858
name = "zeroize"
3859
+
version = "1.8.2"
3860
source = "registry+https://github.com/rust-lang/crates.io-index"
3861
+
checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0"
3862
3863
[[package]]
3864
name = "zerotrie"
3865
+
version = "0.2.3"
3866
source = "registry+https://github.com/rust-lang/crates.io-index"
3867
+
checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851"
3868
dependencies = [
3869
"displaydoc",
3870
"yoke",
···
3873
3874
[[package]]
3875
name = "zerovec"
3876
+
version = "0.11.5"
3877
source = "registry+https://github.com/rust-lang/crates.io-index"
3878
+
checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002"
3879
dependencies = [
3880
"yoke",
3881
"zerofrom",
···
3884
3885
[[package]]
3886
name = "zerovec-derive"
3887
+
version = "0.11.2"
3888
source = "registry+https://github.com/rust-lang/crates.io-index"
3889
+
checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
3890
dependencies = [
3891
"proc-macro2",
3892
"quote",
3893
+
"syn 2.0.108",
3894
]
3895
3896
[[package]]
+6
-5
Cargo.toml
+6
-5
Cargo.toml
···
16
[dependencies]
17
anyhow = "1.0"
18
async-trait = "0.1"
19
-
atproto-identity = { version = "0.11.3" }
20
-
atproto-jetstream = { version = "0.11.3" }
21
axum = { version = "0.8" }
22
-
bincode = { version = "2.0.1", features = ["serde"] }
23
-
cadence = "1.6.0"
24
deadpool-redis = { version = "0.22", features = ["connection-manager", "tokio-comp", "tokio-rustls-comp"] }
25
httpdate = "1.0"
26
-
metrohash = "1.0.7"
27
reqwest = { version = "0.12", features = ["json"] }
28
serde = { version = "1.0", features = ["derive"] }
29
serde_json = "1.0"
···
16
[dependencies]
17
anyhow = "1.0"
18
async-trait = "0.1"
19
+
atproto-identity = { git = "https://tangled.org/@smokesignal.events/atproto-identity-rs" }
20
+
atproto-jetstream = { git = "https://tangled.org/@smokesignal.events/atproto-identity-rs" }
21
+
atproto-lexicon = { git = "https://tangled.org/@smokesignal.events/atproto-identity-rs" }
22
axum = { version = "0.8" }
23
+
bincode = { version = "2.0", features = ["serde"] }
24
+
cadence = "1.6"
25
deadpool-redis = { version = "0.22", features = ["connection-manager", "tokio-comp", "tokio-rustls-comp"] }
26
httpdate = "1.0"
27
+
metrohash = "1.0"
28
reqwest = { version = "0.12", features = ["json"] }
29
serde = { version = "1.0", features = ["derive"] }
30
serde_json = "1.0"
+32
-3
src/bin/quickdid.rs
+32
-3
src/bin/quickdid.rs
···
4
resolve::HickoryDnsResolver,
5
};
6
use atproto_jetstream::{Consumer as JetstreamConsumer, ConsumerTaskConfig};
7
use quickdid::{
8
cache::create_redis_pool,
9
config::Config,
···
15
handle_resolver_task::{HandleResolverTaskConfig, create_handle_resolver_task_with_config},
16
http::{AppContext, create_router},
17
jetstream_handler::QuickDidEventHandler,
18
metrics::create_metrics_publisher,
19
queue::{
20
HandleResolutionWork, QueueAdapter, create_mpsc_queue_from_channel, create_noop_queue,
···
230
// Create DNS resolver
231
let dns_resolver = HickoryDnsResolver::create_resolver(dns_nameservers.as_ref());
232
233
-
// Create DNS resolver Arc for sharing
234
let dns_resolver_arc = Arc::new(dns_resolver);
235
236
// Create metrics publisher based on configuration
···
412
let (mut handle_resolver, cache_ttl): (
413
Arc<dyn quickdid::handle_resolver::HandleResolver>,
414
u64,
415
-
) = if let Some(pool) = redis_pool {
416
tracing::info!(
417
"Using Redis-backed handle resolver with {}-second cache TTL",
418
config.cache_ttl_redis
···
420
(
421
create_redis_resolver_with_ttl(
422
base_handle_resolver,
423
-
pool,
424
config.cache_ttl_redis,
425
metrics_publisher.clone(),
426
),
···
475
);
476
}
477
478
// Setup background handle resolution task
479
{
480
let adapter_for_task = handle_queue.clone();
···
531
let app_context = AppContext::new(
532
handle_resolver.clone(),
533
handle_queue,
534
metrics_publisher.clone(),
535
config.etag_seed.clone(),
536
config.cache_control_header.clone(),
···
4
resolve::HickoryDnsResolver,
5
};
6
use atproto_jetstream::{Consumer as JetstreamConsumer, ConsumerTaskConfig};
7
+
use atproto_lexicon::resolve::{DefaultLexiconResolver, LexiconResolver};
8
use quickdid::{
9
cache::create_redis_pool,
10
config::Config,
···
16
handle_resolver_task::{HandleResolverTaskConfig, create_handle_resolver_task_with_config},
17
http::{AppContext, create_router},
18
jetstream_handler::QuickDidEventHandler,
19
+
lexicon_resolver::create_redis_lexicon_resolver_with_ttl,
20
metrics::create_metrics_publisher,
21
queue::{
22
HandleResolutionWork, QueueAdapter, create_mpsc_queue_from_channel, create_noop_queue,
···
232
// Create DNS resolver
233
let dns_resolver = HickoryDnsResolver::create_resolver(dns_nameservers.as_ref());
234
235
+
// Clone DNS resolver for lexicon resolution before wrapping in Arc
236
+
let lexicon_dns_resolver = dns_resolver.clone();
237
+
238
+
// Wrap DNS resolver in Arc for handle resolution
239
let dns_resolver_arc = Arc::new(dns_resolver);
240
241
// Create metrics publisher based on configuration
···
417
let (mut handle_resolver, cache_ttl): (
418
Arc<dyn quickdid::handle_resolver::HandleResolver>,
419
u64,
420
+
) = if let Some(ref pool) = redis_pool {
421
tracing::info!(
422
"Using Redis-backed handle resolver with {}-second cache TTL",
423
config.cache_ttl_redis
···
425
(
426
create_redis_resolver_with_ttl(
427
base_handle_resolver,
428
+
pool.clone(),
429
config.cache_ttl_redis,
430
metrics_publisher.clone(),
431
),
···
480
);
481
}
482
483
+
// Create lexicon resolver with Redis caching if available
484
+
let lexicon_resolver: Arc<dyn LexiconResolver> = {
485
+
let base_lexicon_resolver: Arc<dyn LexiconResolver> = Arc::new(
486
+
DefaultLexiconResolver::new(http_client.clone(), lexicon_dns_resolver),
487
+
);
488
+
489
+
if let Some(ref pool) = redis_pool {
490
+
tracing::info!(
491
+
"Using Redis-backed lexicon resolver with {}-second cache TTL",
492
+
config.cache_ttl_redis
493
+
);
494
+
create_redis_lexicon_resolver_with_ttl(
495
+
base_lexicon_resolver,
496
+
pool.clone(),
497
+
config.cache_ttl_redis,
498
+
metrics_publisher.clone(),
499
+
)
500
+
} else {
501
+
tracing::info!("Using base lexicon resolver without caching");
502
+
base_lexicon_resolver
503
+
}
504
+
};
505
+
506
// Setup background handle resolution task
507
{
508
let adapter_for_task = handle_queue.clone();
···
559
let app_context = AppContext::new(
560
handle_resolver.clone(),
561
handle_queue,
562
+
lexicon_resolver,
563
metrics_publisher.clone(),
564
config.etag_seed.clone(),
565
config.cache_control_header.clone(),
+126
src/http/handle_xrpc_resolve_lexicon.rs
+126
src/http/handle_xrpc_resolve_lexicon.rs
···
···
1
+
use std::sync::Arc;
2
+
3
+
use atproto_lexicon::resolve::LexiconResolver;
4
+
use axum::{
5
+
extract::{Query, State},
6
+
http::{HeaderMap, HeaderValue, StatusCode, header},
7
+
response::{IntoResponse, Json},
8
+
};
9
+
use serde::{Deserialize, Serialize};
10
+
11
+
use crate::metrics::SharedMetricsPublisher;
12
+
13
+
#[derive(Deserialize)]
14
+
pub(super) struct ResolveLexiconParams {
15
+
nsid: Option<String>,
16
+
}
17
+
18
+
#[derive(Serialize)]
19
+
pub(super) struct ErrorResponse {
20
+
error: String,
21
+
message: String,
22
+
}
23
+
24
+
pub(super) async fn handle_xrpc_resolve_lexicon(
25
+
Query(params): Query<ResolveLexiconParams>,
26
+
State(lexicon_resolver): State<Arc<dyn LexiconResolver>>,
27
+
State(metrics): State<SharedMetricsPublisher>,
28
+
) -> impl IntoResponse {
29
+
// Validate that nsid is provided
30
+
let nsid = match params.nsid {
31
+
Some(n) => n,
32
+
None => {
33
+
metrics
34
+
.incr_with_tags(
35
+
"xrpc.com.atproto.lexicon.resolveLexicon.invalid_nsid",
36
+
&[("reason", "missing")],
37
+
)
38
+
.await;
39
+
return (
40
+
StatusCode::BAD_REQUEST,
41
+
Json(ErrorResponse {
42
+
error: "InvalidRequest".to_string(),
43
+
message: "Error: Params must have the property \"nsid\"".to_string(),
44
+
}),
45
+
)
46
+
.into_response();
47
+
}
48
+
};
49
+
50
+
tracing::debug!(nsid, "Resolving lexicon");
51
+
52
+
// Perform the lexicon resolution
53
+
match lexicon_resolver.resolve(&nsid).await {
54
+
Ok(resolved) => {
55
+
tracing::debug!(nsid, "Successfully resolved lexicon");
56
+
57
+
metrics
58
+
.incr_with_tags("lexicon.resolution.request", &[("success", "1")])
59
+
.await;
60
+
61
+
let mut headers = HeaderMap::new();
62
+
add_cors_headers(&mut headers);
63
+
64
+
// The resolved value is already a serde_json::Value, so just return it as JSON
65
+
(StatusCode::OK, headers, Json(resolved)).into_response()
66
+
}
67
+
Err(err) => {
68
+
tracing::debug!(error = ?err, nsid, "Error resolving lexicon");
69
+
70
+
metrics
71
+
.incr_with_tags("lexicon.resolution.request", &[("success", "0")])
72
+
.await;
73
+
74
+
let mut headers = HeaderMap::new();
75
+
add_cors_headers(&mut headers);
76
+
77
+
(
78
+
StatusCode::BAD_REQUEST,
79
+
headers,
80
+
Json(ErrorResponse {
81
+
error: "LexiconNotFound".to_string(),
82
+
message: "No lexicon was resolved for the NSID".to_string(),
83
+
}),
84
+
)
85
+
.into_response()
86
+
}
87
+
}
88
+
}
89
+
90
+
pub(super) async fn handle_xrpc_resolve_lexicon_options() -> impl IntoResponse {
91
+
let mut headers = HeaderMap::new();
92
+
add_cors_headers(&mut headers);
93
+
(StatusCode::NO_CONTENT, headers)
94
+
}
95
+
96
+
fn add_cors_headers(headers: &mut HeaderMap) {
97
+
headers.insert("Allow", HeaderValue::from_static("GET, HEAD, OPTIONS"));
98
+
headers.insert(
99
+
header::ACCESS_CONTROL_ALLOW_HEADERS,
100
+
HeaderValue::from_static("*"),
101
+
);
102
+
headers.insert(
103
+
header::ACCESS_CONTROL_ALLOW_METHODS,
104
+
HeaderValue::from_static("GET, HEAD, OPTIONS"),
105
+
);
106
+
headers.insert(
107
+
header::ACCESS_CONTROL_ALLOW_ORIGIN,
108
+
HeaderValue::from_static("*"),
109
+
);
110
+
headers.insert(
111
+
header::ACCESS_CONTROL_EXPOSE_HEADERS,
112
+
HeaderValue::from_static("*"),
113
+
);
114
+
headers.insert(
115
+
header::ACCESS_CONTROL_MAX_AGE,
116
+
HeaderValue::from_static("86400"),
117
+
);
118
+
headers.insert(
119
+
"Access-Control-Request-Headers",
120
+
HeaderValue::from_static("*"),
121
+
);
122
+
headers.insert(
123
+
"Access-Control-Request-Method",
124
+
HeaderValue::from_static("GET"),
125
+
);
126
+
}
+1
src/http/mod.rs
+1
src/http/mod.rs
+10
src/http/server.rs
+10
src/http/server.rs
···
1
use crate::handle_resolver::HandleResolver;
2
use crate::metrics::SharedMetricsPublisher;
3
use crate::queue::{HandleResolutionWork, QueueAdapter};
4
use axum::{
5
Router,
6
extract::{MatchedPath, State},
···
17
pub(crate) struct InnerAppContext {
18
pub(crate) handle_resolver: Arc<dyn HandleResolver>,
19
pub(crate) handle_queue: Arc<dyn QueueAdapter<HandleResolutionWork>>,
20
pub(crate) metrics: SharedMetricsPublisher,
21
pub(crate) etag_seed: String,
22
pub(crate) cache_control_header: Option<String>,
···
31
pub fn new(
32
handle_resolver: Arc<dyn HandleResolver>,
33
handle_queue: Arc<dyn QueueAdapter<HandleResolutionWork>>,
34
metrics: SharedMetricsPublisher,
35
etag_seed: String,
36
cache_control_header: Option<String>,
···
39
Self(Arc::new(InnerAppContext {
40
handle_resolver,
41
handle_queue,
42
metrics,
43
etag_seed,
44
cache_control_header,
···
78
handle_queue,
79
Arc<dyn QueueAdapter<HandleResolutionWork>>
80
);
81
impl_from_ref!(AppContext, metrics, SharedMetricsPublisher);
82
83
/// Middleware to track HTTP request metrics
···
126
"/xrpc/com.atproto.identity.resolveHandle",
127
get(super::handle_xrpc_resolve_handle::handle_xrpc_resolve_handle)
128
.options(super::handle_xrpc_resolve_handle::handle_xrpc_resolve_handle_options),
129
)
130
.fallback_service(ServeDir::new(static_dir))
131
.layer(middleware::from_fn_with_state(
···
1
use crate::handle_resolver::HandleResolver;
2
use crate::metrics::SharedMetricsPublisher;
3
use crate::queue::{HandleResolutionWork, QueueAdapter};
4
+
use atproto_lexicon::resolve::LexiconResolver;
5
use axum::{
6
Router,
7
extract::{MatchedPath, State},
···
18
pub(crate) struct InnerAppContext {
19
pub(crate) handle_resolver: Arc<dyn HandleResolver>,
20
pub(crate) handle_queue: Arc<dyn QueueAdapter<HandleResolutionWork>>,
21
+
pub(crate) lexicon_resolver: Arc<dyn LexiconResolver>,
22
pub(crate) metrics: SharedMetricsPublisher,
23
pub(crate) etag_seed: String,
24
pub(crate) cache_control_header: Option<String>,
···
33
pub fn new(
34
handle_resolver: Arc<dyn HandleResolver>,
35
handle_queue: Arc<dyn QueueAdapter<HandleResolutionWork>>,
36
+
lexicon_resolver: Arc<dyn LexiconResolver>,
37
metrics: SharedMetricsPublisher,
38
etag_seed: String,
39
cache_control_header: Option<String>,
···
42
Self(Arc::new(InnerAppContext {
43
handle_resolver,
44
handle_queue,
45
+
lexicon_resolver,
46
metrics,
47
etag_seed,
48
cache_control_header,
···
82
handle_queue,
83
Arc<dyn QueueAdapter<HandleResolutionWork>>
84
);
85
+
impl_from_ref!(AppContext, lexicon_resolver, Arc<dyn LexiconResolver>);
86
impl_from_ref!(AppContext, metrics, SharedMetricsPublisher);
87
88
/// Middleware to track HTTP request metrics
···
131
"/xrpc/com.atproto.identity.resolveHandle",
132
get(super::handle_xrpc_resolve_handle::handle_xrpc_resolve_handle)
133
.options(super::handle_xrpc_resolve_handle::handle_xrpc_resolve_handle_options),
134
+
)
135
+
.route(
136
+
"/xrpc/com.atproto.lexicon.resolveLexicon",
137
+
get(super::handle_xrpc_resolve_lexicon::handle_xrpc_resolve_lexicon)
138
+
.options(super::handle_xrpc_resolve_lexicon::handle_xrpc_resolve_lexicon_options),
139
)
140
.fallback_service(ServeDir::new(static_dir))
141
.layer(middleware::from_fn_with_state(
+3
-3
src/jetstream_handler.rs
+3
-3
src/jetstream_handler.rs
···
207
did: "did:plc:test123".to_string(),
208
kind: "deleted".to_string(),
209
time_us: 0,
210
-
identity: json!(null),
211
};
212
213
handler.handle_event(event).await.unwrap();
···
229
did: "did:plc:test456".to_string(),
230
kind: "deactivated".to_string(),
231
time_us: 0,
232
-
identity: json!(null),
233
};
234
235
handler.handle_event(event).await.unwrap();
···
251
did: "did:plc:test789".to_string(),
252
kind: "active".to_string(),
253
time_us: 0,
254
-
identity: json!(null),
255
};
256
257
handler.handle_event(event).await.unwrap();
···
207
did: "did:plc:test123".to_string(),
208
kind: "deleted".to_string(),
209
time_us: 0,
210
+
account: json!(null),
211
};
212
213
handler.handle_event(event).await.unwrap();
···
229
did: "did:plc:test456".to_string(),
230
kind: "deactivated".to_string(),
231
time_us: 0,
232
+
account: json!(null),
233
};
234
235
handler.handle_event(event).await.unwrap();
···
251
did: "did:plc:test789".to_string(),
252
kind: "active".to_string(),
253
time_us: 0,
254
+
account: json!(null),
255
};
256
257
handler.handle_event(event).await.unwrap();
+8
src/lexicon_resolver/mod.rs
+8
src/lexicon_resolver/mod.rs
···
···
1
+
//! Lexicon resolution with caching support.
2
+
//!
3
+
//! This module provides implementations for resolving AT Protocol lexicons (NSIDs)
4
+
//! to their schemas with various caching strategies.
5
+
6
+
mod redis;
7
+
8
+
pub use redis::{create_redis_lexicon_resolver, create_redis_lexicon_resolver_with_ttl};
+458
src/lexicon_resolver/redis.rs
+458
src/lexicon_resolver/redis.rs
···
···
1
+
//! Redis-backed caching lexicon resolver.
2
+
//!
3
+
//! This module provides a lexicon resolver that caches resolution results in Redis
4
+
//! with configurable expiration times. Redis caching provides persistence across
5
+
//! service restarts and allows sharing of cached results across multiple instances.
6
+
7
+
use crate::metrics::SharedMetricsPublisher;
8
+
use async_trait::async_trait;
9
+
use atproto_lexicon::resolve::LexiconResolver;
10
+
use deadpool_redis::{Pool as RedisPool, redis::AsyncCommands};
11
+
use metrohash::MetroHash64;
12
+
use std::hash::Hasher as _;
13
+
use std::sync::Arc;
14
+
15
+
/// Redis-backed caching lexicon resolver.
16
+
///
17
+
/// This resolver caches lexicon resolution results in Redis with a configurable TTL.
18
+
/// Results are stored as JSON bytes to minimize storage overhead while maintaining
19
+
/// the schema structure.
20
+
///
21
+
/// # Features
22
+
///
23
+
/// - Persistent caching across service restarts
24
+
/// - Shared cache across multiple service instances
25
+
/// - Configurable TTL (default: 90 days)
26
+
/// - JSON storage format for lexicon schemas
27
+
/// - Graceful fallback if Redis is unavailable
28
+
///
29
+
/// # Example
30
+
///
31
+
/// ```no_run
32
+
/// use std::sync::Arc;
33
+
/// use deadpool_redis::Pool;
34
+
/// use atproto_lexicon::resolve::LexiconResolver;
35
+
/// use quickdid::lexicon_resolver::create_redis_lexicon_resolver;
36
+
/// use quickdid::metrics::NoOpMetricsPublisher;
37
+
///
38
+
/// # async fn example() {
39
+
/// # let inner_resolver: Arc<dyn LexiconResolver> = todo!();
40
+
/// # let redis_pool: Pool = todo!();
41
+
/// # let metrics = Arc::new(NoOpMetricsPublisher);
42
+
/// // Create with default 90-day TTL
43
+
/// let resolver = create_redis_lexicon_resolver(
44
+
/// inner_resolver,
45
+
/// redis_pool,
46
+
/// metrics
47
+
/// );
48
+
/// # }
49
+
/// ```
50
+
pub(super) struct RedisLexiconResolver {
51
+
/// Base lexicon resolver to perform actual resolution
52
+
inner: Arc<dyn LexiconResolver>,
53
+
/// Redis connection pool
54
+
pool: RedisPool,
55
+
/// Redis key prefix for lexicon resolution cache
56
+
key_prefix: String,
57
+
/// TTL for cache entries in seconds
58
+
ttl_seconds: u64,
59
+
/// Metrics publisher for telemetry
60
+
metrics: SharedMetricsPublisher,
61
+
}
62
+
63
+
impl RedisLexiconResolver {
64
+
/// Create a new Redis-backed lexicon resolver with default 90-day TTL.
65
+
fn new(
66
+
inner: Arc<dyn LexiconResolver>,
67
+
pool: RedisPool,
68
+
metrics: SharedMetricsPublisher,
69
+
) -> Self {
70
+
Self::with_ttl(inner, pool, 90 * 24 * 60 * 60, metrics) // 90 days default
71
+
}
72
+
73
+
/// Create a new Redis-backed lexicon resolver with custom TTL.
74
+
fn with_ttl(
75
+
inner: Arc<dyn LexiconResolver>,
76
+
pool: RedisPool,
77
+
ttl_seconds: u64,
78
+
metrics: SharedMetricsPublisher,
79
+
) -> Self {
80
+
Self::with_full_config(inner, pool, "lexicon:".to_string(), ttl_seconds, metrics)
81
+
}
82
+
83
+
/// Create a new Redis-backed lexicon resolver with full configuration.
84
+
fn with_full_config(
85
+
inner: Arc<dyn LexiconResolver>,
86
+
pool: RedisPool,
87
+
key_prefix: String,
88
+
ttl_seconds: u64,
89
+
metrics: SharedMetricsPublisher,
90
+
) -> Self {
91
+
Self {
92
+
inner,
93
+
pool,
94
+
key_prefix,
95
+
ttl_seconds,
96
+
metrics,
97
+
}
98
+
}
99
+
100
+
/// Generate the Redis key for an NSID.
101
+
///
102
+
/// Uses MetroHash64 to generate a consistent hash of the NSID
103
+
/// for use as the Redis key. This provides better key distribution
104
+
/// and avoids issues with special characters in NSIDs.
105
+
fn make_key(&self, nsid: &str) -> String {
106
+
let mut h = MetroHash64::default();
107
+
h.write(nsid.as_bytes());
108
+
format!("{}{}", self.key_prefix, h.finish())
109
+
}
110
+
111
+
/// Get the TTL in seconds.
112
+
fn ttl_seconds(&self) -> u64 {
113
+
self.ttl_seconds
114
+
}
115
+
}
116
+
117
+
#[async_trait]
118
+
impl LexiconResolver for RedisLexiconResolver {
119
+
async fn resolve(&self, nsid: &str) -> Result<serde_json::Value, anyhow::Error> {
120
+
let key = self.make_key(nsid);
121
+
122
+
// Try to get from Redis cache first
123
+
match self.pool.get().await {
124
+
Ok(mut conn) => {
125
+
// Check if the key exists in Redis (stored as JSON bytes)
126
+
let cached: Option<Vec<u8>> = match conn.get(&key).await {
127
+
Ok(value) => value,
128
+
Err(e) => {
129
+
self.metrics.incr("lexicon_resolver.redis.get_error").await;
130
+
tracing::warn!("Failed to get NSID from Redis cache: {}", e);
131
+
None
132
+
}
133
+
};
134
+
135
+
if let Some(cached_bytes) = cached {
136
+
// Deserialize the cached JSON
137
+
match serde_json::from_slice::<serde_json::Value>(&cached_bytes) {
138
+
Ok(cached_value) => {
139
+
tracing::debug!("Cache hit for NSID {}", nsid);
140
+
self.metrics.incr("lexicon_resolver.redis.cache_hit").await;
141
+
return Ok(cached_value);
142
+
}
143
+
Err(e) => {
144
+
tracing::warn!(
145
+
"Failed to deserialize cached lexicon for NSID {}: {}",
146
+
nsid,
147
+
e
148
+
);
149
+
self.metrics
150
+
.incr("lexicon_resolver.redis.deserialize_error")
151
+
.await;
152
+
// Fall through to re-resolve if deserialization fails
153
+
}
154
+
}
155
+
}
156
+
157
+
// Not in cache, resolve through inner resolver
158
+
tracing::debug!("Cache miss for NSID {}, resolving...", nsid);
159
+
self.metrics.incr("lexicon_resolver.redis.cache_miss").await;
160
+
let result = self.inner.resolve(nsid).await;
161
+
162
+
// Cache successful result
163
+
if let Ok(ref schema) = result {
164
+
// Serialize to JSON bytes
165
+
match serde_json::to_vec(schema) {
166
+
Ok(bytes) => {
167
+
// Set with expiration (ignore errors to not fail the resolution)
168
+
if let Err(e) = conn
169
+
.set_ex::<_, _, ()>(&key, bytes, self.ttl_seconds())
170
+
.await
171
+
{
172
+
tracing::warn!(
173
+
"Failed to cache lexicon resolution in Redis: {}",
174
+
e
175
+
);
176
+
self.metrics
177
+
.incr("lexicon_resolver.redis.cache_set_error")
178
+
.await;
179
+
} else {
180
+
tracing::debug!("Cached lexicon for NSID {}", nsid);
181
+
self.metrics.incr("lexicon_resolver.redis.cache_set").await;
182
+
}
183
+
}
184
+
Err(e) => {
185
+
tracing::warn!(
186
+
"Failed to serialize lexicon result for NSID {}: {}",
187
+
nsid,
188
+
e
189
+
);
190
+
self.metrics
191
+
.incr("lexicon_resolver.redis.serialize_error")
192
+
.await;
193
+
}
194
+
}
195
+
}
196
+
197
+
result
198
+
}
199
+
Err(e) => {
200
+
// Redis connection failed, fall back to inner resolver
201
+
tracing::warn!(
202
+
"Failed to get Redis connection, falling back to uncached resolution: {}",
203
+
e
204
+
);
205
+
self.metrics
206
+
.incr("lexicon_resolver.redis.connection_error")
207
+
.await;
208
+
self.inner.resolve(nsid).await
209
+
}
210
+
}
211
+
}
212
+
}
213
+
214
+
/// Create a new Redis-backed lexicon resolver with default 90-day TTL.
215
+
///
216
+
/// # Arguments
217
+
///
218
+
/// * `inner` - The underlying resolver to use for actual resolution
219
+
/// * `pool` - Redis connection pool
220
+
/// * `metrics` - Metrics publisher for telemetry
221
+
///
222
+
/// # Example
223
+
///
224
+
/// ```no_run
225
+
/// use std::sync::Arc;
226
+
/// use atproto_lexicon::resolve::{DefaultLexiconResolver, LexiconResolver};
227
+
/// use quickdid::lexicon_resolver::create_redis_lexicon_resolver;
228
+
/// use quickdid::cache::create_redis_pool;
229
+
/// use quickdid::metrics::NoOpMetricsPublisher;
230
+
///
231
+
/// # async fn example() -> anyhow::Result<()> {
232
+
/// # use atproto_identity::resolve::HickoryDnsResolver;
233
+
/// # use reqwest::Client;
234
+
/// # let dns_resolver = HickoryDnsResolver::create_resolver(&[]);
235
+
/// # let http_client = Client::new();
236
+
/// # let metrics = Arc::new(NoOpMetricsPublisher);
237
+
/// let base: Arc<dyn LexiconResolver> = Arc::new(
238
+
/// DefaultLexiconResolver::new(http_client, dns_resolver)
239
+
/// );
240
+
///
241
+
/// let pool = create_redis_pool("redis://localhost:6379")?;
242
+
/// let resolver = create_redis_lexicon_resolver(base, pool, metrics);
243
+
/// let schema = resolver.resolve("app.bsky.feed.post").await.unwrap();
244
+
/// # Ok(())
245
+
/// # }
246
+
/// ```
247
+
pub fn create_redis_lexicon_resolver(
248
+
inner: Arc<dyn LexiconResolver>,
249
+
pool: RedisPool,
250
+
metrics: SharedMetricsPublisher,
251
+
) -> Arc<dyn LexiconResolver> {
252
+
Arc::new(RedisLexiconResolver::new(inner, pool, metrics))
253
+
}
254
+
255
+
/// Create a new Redis-backed lexicon resolver with custom TTL.
256
+
///
257
+
/// # Arguments
258
+
///
259
+
/// * `inner` - The underlying resolver to use for actual resolution
260
+
/// * `pool` - Redis connection pool
261
+
/// * `ttl_seconds` - TTL for cache entries in seconds
262
+
/// * `metrics` - Metrics publisher for telemetry
263
+
pub fn create_redis_lexicon_resolver_with_ttl(
264
+
inner: Arc<dyn LexiconResolver>,
265
+
pool: RedisPool,
266
+
ttl_seconds: u64,
267
+
metrics: SharedMetricsPublisher,
268
+
) -> Arc<dyn LexiconResolver> {
269
+
Arc::new(RedisLexiconResolver::with_ttl(
270
+
inner,
271
+
pool,
272
+
ttl_seconds,
273
+
metrics,
274
+
))
275
+
}
276
+
277
+
#[cfg(test)]
278
+
mod tests {
279
+
use super::*;
280
+
281
+
// Mock lexicon resolver for testing
282
+
#[derive(Clone)]
283
+
struct MockLexiconResolver {
284
+
should_fail: bool,
285
+
expected_schema: serde_json::Value,
286
+
}
287
+
288
+
#[async_trait]
289
+
impl LexiconResolver for MockLexiconResolver {
290
+
async fn resolve(&self, _nsid: &str) -> Result<serde_json::Value, anyhow::Error> {
291
+
if self.should_fail {
292
+
Err(anyhow::anyhow!("Mock resolution failure"))
293
+
} else {
294
+
Ok(self.expected_schema.clone())
295
+
}
296
+
}
297
+
}
298
+
299
+
#[tokio::test]
300
+
async fn test_redis_lexicon_resolver_cache_hit() {
301
+
let pool = match crate::test_helpers::get_test_redis_pool() {
302
+
Some(p) => p,
303
+
None => return,
304
+
};
305
+
306
+
// Create mock resolver with sample schema
307
+
let schema = serde_json::json!({
308
+
"lexicon": 1,
309
+
"id": "app.bsky.feed.post",
310
+
"defs": {
311
+
"main": {
312
+
"type": "record",
313
+
"description": "A post record"
314
+
}
315
+
}
316
+
});
317
+
318
+
let mock_resolver = Arc::new(MockLexiconResolver {
319
+
should_fail: false,
320
+
expected_schema: schema.clone(),
321
+
});
322
+
323
+
// Create metrics publisher
324
+
let metrics = Arc::new(crate::metrics::NoOpMetricsPublisher);
325
+
326
+
// Create Redis-backed resolver with a unique key prefix for testing
327
+
let test_prefix = format!(
328
+
"test:lexicon:{}:",
329
+
std::time::SystemTime::now()
330
+
.duration_since(std::time::UNIX_EPOCH)
331
+
.unwrap()
332
+
.as_nanos()
333
+
);
334
+
let redis_resolver = RedisLexiconResolver::with_full_config(
335
+
mock_resolver,
336
+
pool.clone(),
337
+
test_prefix.clone(),
338
+
3600,
339
+
metrics,
340
+
);
341
+
342
+
let test_nsid = "app.bsky.feed.post";
343
+
344
+
// First resolution - should call inner resolver
345
+
let result1 = redis_resolver.resolve(test_nsid).await.unwrap();
346
+
assert_eq!(result1, schema);
347
+
348
+
// Second resolution - should hit cache
349
+
let result2 = redis_resolver.resolve(test_nsid).await.unwrap();
350
+
assert_eq!(result2, schema);
351
+
352
+
// Clean up test data
353
+
if let Ok(mut conn) = pool.get().await {
354
+
let mut h = MetroHash64::default();
355
+
h.write(test_nsid.as_bytes());
356
+
let key = format!("{}{}", test_prefix, h.finish());
357
+
let _: Result<(), _> = conn.del(key).await;
358
+
}
359
+
}
360
+
361
+
#[tokio::test]
362
+
async fn test_redis_lexicon_resolver_cache_miss() {
363
+
let pool = match crate::test_helpers::get_test_redis_pool() {
364
+
Some(p) => p,
365
+
None => return,
366
+
};
367
+
368
+
let schema = serde_json::json!({
369
+
"lexicon": 1,
370
+
"id": "com.example.test",
371
+
});
372
+
373
+
let mock_resolver = Arc::new(MockLexiconResolver {
374
+
should_fail: false,
375
+
expected_schema: schema.clone(),
376
+
});
377
+
378
+
let metrics = Arc::new(crate::metrics::NoOpMetricsPublisher);
379
+
380
+
let test_prefix = format!(
381
+
"test:lexicon:{}:",
382
+
std::time::SystemTime::now()
383
+
.duration_since(std::time::UNIX_EPOCH)
384
+
.unwrap()
385
+
.as_nanos()
386
+
);
387
+
let redis_resolver = RedisLexiconResolver::with_full_config(
388
+
mock_resolver,
389
+
pool.clone(),
390
+
test_prefix.clone(),
391
+
3600,
392
+
metrics,
393
+
);
394
+
395
+
let test_nsid = "com.example.test";
396
+
397
+
// Ensure key doesn't exist
398
+
if let Ok(mut conn) = pool.get().await {
399
+
let mut h = MetroHash64::default();
400
+
h.write(test_nsid.as_bytes());
401
+
let key = format!("{}{}", test_prefix, h.finish());
402
+
let _: Result<(), _> = conn.del(&key).await;
403
+
}
404
+
405
+
// Resolution should succeed and cache the result
406
+
let result = redis_resolver.resolve(test_nsid).await.unwrap();
407
+
assert_eq!(result, schema);
408
+
409
+
// Verify the result was cached
410
+
if let Ok(mut conn) = pool.get().await {
411
+
let mut h = MetroHash64::default();
412
+
h.write(test_nsid.as_bytes());
413
+
let key = format!("{}{}", test_prefix, h.finish());
414
+
let exists: bool = conn.exists(&key).await.unwrap();
415
+
assert!(exists, "Result should be cached");
416
+
417
+
// Clean up
418
+
let _: Result<(), _> = conn.del(key).await;
419
+
}
420
+
}
421
+
422
+
#[tokio::test]
423
+
async fn test_redis_lexicon_resolver_error_handling() {
424
+
let pool = match crate::test_helpers::get_test_redis_pool() {
425
+
Some(p) => p,
426
+
None => return,
427
+
};
428
+
429
+
// Create mock resolver that fails
430
+
let mock_resolver = Arc::new(MockLexiconResolver {
431
+
should_fail: true,
432
+
expected_schema: serde_json::Value::Null,
433
+
});
434
+
435
+
let metrics = Arc::new(crate::metrics::NoOpMetricsPublisher);
436
+
437
+
let test_prefix = format!(
438
+
"test:lexicon:{}:",
439
+
std::time::SystemTime::now()
440
+
.duration_since(std::time::UNIX_EPOCH)
441
+
.unwrap()
442
+
.as_nanos()
443
+
);
444
+
let redis_resolver = RedisLexiconResolver::with_full_config(
445
+
mock_resolver,
446
+
pool.clone(),
447
+
test_prefix,
448
+
3600,
449
+
metrics,
450
+
);
451
+
452
+
let test_nsid = "com.example.nonexistent";
453
+
454
+
// Resolution should fail
455
+
let result = redis_resolver.resolve(test_nsid).await;
456
+
assert!(result.is_err());
457
+
}
458
+
}
+1
src/lib.rs
+1
src/lib.rs
···
3
pub mod handle_resolver; // Only traits and factory functions exposed
4
pub mod http; // Only create_router exposed
5
pub mod jetstream_handler; // Jetstream event handler for AT Protocol events
6
7
// Semi-public modules - needed by binary but with limited exposure
8
pub mod cache; // Only create_redis_pool exposed
···
3
pub mod handle_resolver; // Only traits and factory functions exposed
4
pub mod http; // Only create_router exposed
5
pub mod jetstream_handler; // Jetstream event handler for AT Protocol events
6
+
pub mod lexicon_resolver; // Lexicon resolution with caching support
7
8
// Semi-public modules - needed by binary but with limited exposure
9
pub mod cache; // Only create_redis_pool exposed
+87
-31
www/index.html
+87
-31
www/index.html
···
35
<!-- Stylesheet -->
36
<link rel="stylesheet" href="/css/pico.classless.green.min.css">
37
<style>
38
-
#resolveForm {
39
margin: 2rem 0;
40
padding: 1.5rem;
41
background: var(--card-background-color);
···
43
border: 1px solid var(--muted-border-color);
44
}
45
46
-
#result {
47
-
margin-top: 2rem;
48
padding: 1.5rem;
49
background: var(--code-background-color);
50
border-radius: var(--border-radius);
51
border: 1px solid var(--muted-border-color);
52
}
53
54
-
#resultContent {
55
background: transparent;
56
padding: 1rem;
57
overflow-x: auto;
···
75
font-weight: bold;
76
margin-right: 0.5rem;
77
}
78
</style>
79
</head>
80
···
86
</hgroup>
87
</header>
88
<main>
89
-
<p>QuickDID is a high-performance handle-to-DID resolution service for the AT Protocol ecosystem.</p>
90
91
<h2>Available Endpoints</h2>
92
93
-
<h3>GET /xrpc/com.atproto.identity.resolveHandle</h3>
94
-
<p>Resolve an AT Protocol handle to its DID</p>
95
-
<p>Parameters: <code>?handle={handle}</code></p>
96
97
-
<h2>Try It Out</h2>
98
-
<form id="resolveForm">
99
-
<label for="handle">
100
-
Enter an AT Protocol handle to resolve:
101
-
<input type="text" id="handle" name="handle" placeholder="e.g., alice.bsky.social" required>
102
-
</label>
103
-
<button type="submit">Resolve Handle</button>
104
-
</form>
105
106
-
<div id="result" style="display: none;">
107
-
<h3>Result</h3>
108
-
<pre id="resultContent"></pre>
109
-
</div>
110
111
-
<h2>Example Usage</h2>
112
-
<code>curl "https://quickdid.smokesignal.tools/xrpc/com.atproto.identity.resolveHandle?handle=ngerakines.me"</code>
113
114
<h2>Documentation</h2>
115
<p>
···
122
</main>
123
124
<script>
125
-
document.getElementById('resolveForm').addEventListener('submit', async (e) => {
126
e.preventDefault();
127
128
-
const handle = document.getElementById('handle').value.trim();
129
-
const resultDiv = document.getElementById('result');
130
-
const resultContent = document.getElementById('resultContent');
131
132
// Show loading state
133
resultDiv.style.display = 'block';
···
155
}
156
});
157
158
-
// Allow pressing Enter in the input field to submit
159
-
document.getElementById('handle').addEventListener('keypress', (e) => {
160
-
if (e.key === 'Enter') {
161
-
e.preventDefault();
162
-
document.getElementById('resolveForm').dispatchEvent(new Event('submit'));
163
}
164
});
165
</script>
···
35
<!-- Stylesheet -->
36
<link rel="stylesheet" href="/css/pico.classless.green.min.css">
37
<style>
38
+
.resolver-form {
39
margin: 2rem 0;
40
padding: 1.5rem;
41
background: var(--card-background-color);
···
43
border: 1px solid var(--muted-border-color);
44
}
45
46
+
.resolver-result {
47
+
margin-top: 1rem;
48
padding: 1.5rem;
49
background: var(--code-background-color);
50
border-radius: var(--border-radius);
51
border: 1px solid var(--muted-border-color);
52
}
53
54
+
.result-content {
55
background: transparent;
56
padding: 1rem;
57
overflow-x: auto;
···
75
font-weight: bold;
76
margin-right: 0.5rem;
77
}
78
+
79
+
.endpoint-section {
80
+
margin-bottom: 3rem;
81
+
}
82
</style>
83
</head>
84
···
90
</hgroup>
91
</header>
92
<main>
93
+
<p>QuickDID provides high-performance resolution services for the AT Protocol ecosystem.</p>
94
95
<h2>Available Endpoints</h2>
96
97
+
<section class="endpoint-section">
98
+
<h3>GET /xrpc/com.atproto.identity.resolveHandle</h3>
99
+
<p>Resolve an AT Protocol handle to its DID</p>
100
+
<p>Parameters: <code>?handle={handle}</code></p>
101
+
102
+
<h4>Try It Out</h4>
103
+
<form id="handleResolveForm" class="resolver-form">
104
+
<label for="handleInput">
105
+
Enter an AT Protocol handle to resolve:
106
+
<input type="text" id="handleInput" name="handle" placeholder="e.g., alice.bsky.social" required>
107
+
</label>
108
+
<button type="submit">Resolve Handle</button>
109
+
</form>
110
111
+
<div id="handleResult" class="resolver-result" style="display: none;">
112
+
<h4>Result</h4>
113
+
<pre id="handleResultContent" class="result-content"></pre>
114
+
</div>
115
116
+
<h4>Example Usage</h4>
117
+
<code>curl "https://quickdid.smokesignal.tools/xrpc/com.atproto.identity.resolveHandle?handle=ngerakines.me"</code>
118
+
</section>
119
120
+
<section class="endpoint-section">
121
+
<h3>GET /xrpc/com.atproto.lexicon.resolveLexicon</h3>
122
+
<p>Resolve an AT Protocol lexicon (NSID) to its schema</p>
123
+
<p>Parameters: <code>?nsid={nsid}</code></p>
124
+
125
+
<h4>Try It Out</h4>
126
+
<form id="lexiconResolveForm" class="resolver-form">
127
+
<label for="nsidInput">
128
+
Enter an AT Protocol NSID to resolve:
129
+
<input type="text" id="nsidInput" name="nsid" placeholder="e.g., app.bsky.feed.post" required>
130
+
</label>
131
+
<button type="submit">Resolve Lexicon</button>
132
+
</form>
133
+
134
+
<div id="lexiconResult" class="resolver-result" style="display: none;">
135
+
<h4>Result</h4>
136
+
<pre id="lexiconResultContent" class="result-content"></pre>
137
+
</div>
138
+
139
+
<h4>Example Usage</h4>
140
+
<code>curl "https://quickdid.smokesignal.tools/xrpc/com.atproto.lexicon.resolveLexicon?nsid=app.bsky.feed.post"</code>
141
+
</section>
142
143
<h2>Documentation</h2>
144
<p>
···
151
</main>
152
153
<script>
154
+
// Handle form submission for handle resolution
155
+
document.getElementById('handleResolveForm').addEventListener('submit', async (e) => {
156
e.preventDefault();
157
158
+
const handle = document.getElementById('handleInput').value.trim();
159
+
const resultDiv = document.getElementById('handleResult');
160
+
const resultContent = document.getElementById('handleResultContent');
161
162
// Show loading state
163
resultDiv.style.display = 'block';
···
185
}
186
});
187
188
+
// Handle form submission for lexicon resolution
189
+
document.getElementById('lexiconResolveForm').addEventListener('submit', async (e) => {
190
+
e.preventDefault();
191
+
192
+
const nsid = document.getElementById('nsidInput').value.trim();
193
+
const resultDiv = document.getElementById('lexiconResult');
194
+
const resultContent = document.getElementById('lexiconResultContent');
195
+
196
+
// Show loading state
197
+
resultDiv.style.display = 'block';
198
+
resultContent.textContent = 'Loading...';
199
+
200
+
try {
201
+
// Build the request URL
202
+
const url = `/xrpc/com.atproto.lexicon.resolveLexicon?nsid=${encodeURIComponent(nsid)}`;
203
+
204
+
// Make the GET request
205
+
const response = await fetch(url);
206
+
const data = await response.json();
207
+
208
+
// Display the result
209
+
if (response.ok) {
210
+
resultContent.textContent = JSON.stringify(data, null, 2);
211
+
resultContent.style.color = '';
212
+
} else {
213
+
resultContent.textContent = `Error: ${JSON.stringify(data, null, 2)}`;
214
+
resultContent.style.color = '#d32f2f';
215
+
}
216
+
} catch (error) {
217
+
resultContent.textContent = `Network Error: ${error.message}`;
218
+
resultContent.style.color = '#d32f2f';
219
}
220
});
221
</script>