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