+2
.env.template
+2
.env.template
+3347
Cargo.lock
+3347
Cargo.lock
···
1
+
# This file is automatically @generated by Cargo.
2
+
# It is not intended for manual editing.
3
+
version = 4
4
+
5
+
[[package]]
6
+
name = "addr2line"
7
+
version = "0.24.2"
8
+
source = "registry+https://github.com/rust-lang/crates.io-index"
9
+
checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
10
+
dependencies = [
11
+
"gimli",
12
+
]
13
+
14
+
[[package]]
15
+
name = "adler2"
16
+
version = "2.0.0"
17
+
source = "registry+https://github.com/rust-lang/crates.io-index"
18
+
checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
19
+
20
+
[[package]]
21
+
name = "ahash"
22
+
version = "0.8.12"
23
+
source = "registry+https://github.com/rust-lang/crates.io-index"
24
+
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
25
+
dependencies = [
26
+
"cfg-if",
27
+
"once_cell",
28
+
"version_check",
29
+
"zerocopy",
30
+
]
31
+
32
+
[[package]]
33
+
name = "aho-corasick"
34
+
version = "1.1.3"
35
+
source = "registry+https://github.com/rust-lang/crates.io-index"
36
+
checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
37
+
dependencies = [
38
+
"memchr",
39
+
]
40
+
41
+
[[package]]
42
+
name = "allocator-api2"
43
+
version = "0.2.21"
44
+
source = "registry+https://github.com/rust-lang/crates.io-index"
45
+
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
46
+
47
+
[[package]]
48
+
name = "android-tzdata"
49
+
version = "0.1.1"
50
+
source = "registry+https://github.com/rust-lang/crates.io-index"
51
+
checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
52
+
53
+
[[package]]
54
+
name = "android_system_properties"
55
+
version = "0.1.5"
56
+
source = "registry+https://github.com/rust-lang/crates.io-index"
57
+
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
58
+
dependencies = [
59
+
"libc",
60
+
]
61
+
62
+
[[package]]
63
+
name = "anstream"
64
+
version = "0.6.18"
65
+
source = "registry+https://github.com/rust-lang/crates.io-index"
66
+
checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"
67
+
dependencies = [
68
+
"anstyle",
69
+
"anstyle-parse",
70
+
"anstyle-query",
71
+
"anstyle-wincon",
72
+
"colorchoice",
73
+
"is_terminal_polyfill",
74
+
"utf8parse",
75
+
]
76
+
77
+
[[package]]
78
+
name = "anstyle"
79
+
version = "1.0.10"
80
+
source = "registry+https://github.com/rust-lang/crates.io-index"
81
+
checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"
82
+
83
+
[[package]]
84
+
name = "anstyle-parse"
85
+
version = "0.2.6"
86
+
source = "registry+https://github.com/rust-lang/crates.io-index"
87
+
checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"
88
+
dependencies = [
89
+
"utf8parse",
90
+
]
91
+
92
+
[[package]]
93
+
name = "anstyle-query"
94
+
version = "1.1.2"
95
+
source = "registry+https://github.com/rust-lang/crates.io-index"
96
+
checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"
97
+
dependencies = [
98
+
"windows-sys 0.59.0",
99
+
]
100
+
101
+
[[package]]
102
+
name = "anstyle-wincon"
103
+
version = "3.0.7"
104
+
source = "registry+https://github.com/rust-lang/crates.io-index"
105
+
checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e"
106
+
dependencies = [
107
+
"anstyle",
108
+
"once_cell",
109
+
"windows-sys 0.59.0",
110
+
]
111
+
112
+
[[package]]
113
+
name = "anyhow"
114
+
version = "1.0.98"
115
+
source = "registry+https://github.com/rust-lang/crates.io-index"
116
+
checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487"
117
+
118
+
[[package]]
119
+
name = "async-compression"
120
+
version = "0.4.23"
121
+
source = "registry+https://github.com/rust-lang/crates.io-index"
122
+
checksum = "b37fc50485c4f3f736a4fb14199f6d5f5ba008d7f28fe710306c92780f004c07"
123
+
dependencies = [
124
+
"flate2",
125
+
"futures-core",
126
+
"memchr",
127
+
"pin-project-lite",
128
+
"tokio",
129
+
]
130
+
131
+
[[package]]
132
+
name = "async-lock"
133
+
version = "3.4.0"
134
+
source = "registry+https://github.com/rust-lang/crates.io-index"
135
+
checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
136
+
dependencies = [
137
+
"event-listener",
138
+
"event-listener-strategy",
139
+
"pin-project-lite",
140
+
]
141
+
142
+
[[package]]
143
+
name = "async-trait"
144
+
version = "0.1.88"
145
+
source = "registry+https://github.com/rust-lang/crates.io-index"
146
+
checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5"
147
+
dependencies = [
148
+
"proc-macro2",
149
+
"quote",
150
+
"syn",
151
+
]
152
+
153
+
[[package]]
154
+
name = "atproto_api"
155
+
version = "0.1.0"
156
+
dependencies = [
157
+
"atrium-api",
158
+
"serde",
159
+
]
160
+
161
+
[[package]]
162
+
name = "atrium-api"
163
+
version = "0.25.5"
164
+
source = "registry+https://github.com/rust-lang/crates.io-index"
165
+
checksum = "8bceed6a87be6213040945254aa94191490fea22b7f49dec584e349f336cc17a"
166
+
dependencies = [
167
+
"atrium-common",
168
+
"atrium-xrpc",
169
+
"chrono",
170
+
"http 1.3.1",
171
+
"ipld-core",
172
+
"langtag",
173
+
"regex",
174
+
"serde",
175
+
"serde_bytes",
176
+
"serde_json",
177
+
"thiserror 1.0.69",
178
+
"tokio",
179
+
"trait-variant",
180
+
]
181
+
182
+
[[package]]
183
+
name = "atrium-common"
184
+
version = "0.1.2"
185
+
source = "registry+https://github.com/rust-lang/crates.io-index"
186
+
checksum = "9ed5610654043faa396a5a15afac0ac646d76aebe45aebd7cef4f8b96b0ab7f4"
187
+
dependencies = [
188
+
"dashmap",
189
+
"lru",
190
+
"moka",
191
+
"thiserror 1.0.69",
192
+
"tokio",
193
+
"trait-variant",
194
+
"web-time",
195
+
]
196
+
197
+
[[package]]
198
+
name = "atrium-identity"
199
+
version = "0.1.6"
200
+
source = "registry+https://github.com/rust-lang/crates.io-index"
201
+
checksum = "035d4fcfed4a42e10f343e7ffc2b4a5aba355ece4b272a25f683043f07728ce0"
202
+
dependencies = [
203
+
"atrium-api",
204
+
"atrium-common",
205
+
"atrium-xrpc",
206
+
"serde",
207
+
"serde_html_form",
208
+
"serde_json",
209
+
"thiserror 1.0.69",
210
+
"trait-variant",
211
+
]
212
+
213
+
[[package]]
214
+
name = "atrium-oauth"
215
+
version = "0.1.4"
216
+
source = "registry+https://github.com/rust-lang/crates.io-index"
217
+
checksum = "d04c6818380cbaac6ae75f3b1ecf9f9210083fa8193dd9c218305a99fb4b34bd"
218
+
dependencies = [
219
+
"atrium-api",
220
+
"atrium-common",
221
+
"atrium-identity",
222
+
"atrium-xrpc",
223
+
"base64 0.22.1",
224
+
"chrono",
225
+
"dashmap",
226
+
"ecdsa",
227
+
"elliptic-curve",
228
+
"jose-jwa",
229
+
"jose-jwk",
230
+
"p256",
231
+
"rand",
232
+
"reqwest",
233
+
"serde",
234
+
"serde_html_form",
235
+
"serde_json",
236
+
"sha2",
237
+
"thiserror 1.0.69",
238
+
"tokio",
239
+
"trait-variant",
240
+
]
241
+
242
+
[[package]]
243
+
name = "atrium-xrpc"
244
+
version = "0.12.3"
245
+
source = "registry+https://github.com/rust-lang/crates.io-index"
246
+
checksum = "0216ad50ce34e9ff982e171c3659e65dedaa2ed5ac2994524debdc9a9647ffa8"
247
+
dependencies = [
248
+
"http 1.3.1",
249
+
"serde",
250
+
"serde_html_form",
251
+
"serde_json",
252
+
"thiserror 1.0.69",
253
+
"trait-variant",
254
+
]
255
+
256
+
[[package]]
257
+
name = "atrium-xrpc-client"
258
+
version = "0.5.14"
259
+
source = "registry+https://github.com/rust-lang/crates.io-index"
260
+
checksum = "e099e5171f79faef52364ef0657a4cab086a71b384a779a29597a91b780de0d5"
261
+
dependencies = [
262
+
"atrium-xrpc",
263
+
"reqwest",
264
+
]
265
+
266
+
[[package]]
267
+
name = "autocfg"
268
+
version = "1.4.0"
269
+
source = "registry+https://github.com/rust-lang/crates.io-index"
270
+
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
271
+
272
+
[[package]]
273
+
name = "backtrace"
274
+
version = "0.3.75"
275
+
source = "registry+https://github.com/rust-lang/crates.io-index"
276
+
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
277
+
dependencies = [
278
+
"addr2line",
279
+
"cfg-if",
280
+
"libc",
281
+
"miniz_oxide",
282
+
"object",
283
+
"rustc-demangle",
284
+
"windows-targets 0.52.6",
285
+
]
286
+
287
+
[[package]]
288
+
name = "base-x"
289
+
version = "0.2.11"
290
+
source = "registry+https://github.com/rust-lang/crates.io-index"
291
+
checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270"
292
+
293
+
[[package]]
294
+
name = "base16ct"
295
+
version = "0.2.0"
296
+
source = "registry+https://github.com/rust-lang/crates.io-index"
297
+
checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
298
+
299
+
[[package]]
300
+
name = "base64"
301
+
version = "0.21.7"
302
+
source = "registry+https://github.com/rust-lang/crates.io-index"
303
+
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
304
+
305
+
[[package]]
306
+
name = "base64"
307
+
version = "0.22.1"
308
+
source = "registry+https://github.com/rust-lang/crates.io-index"
309
+
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
310
+
311
+
[[package]]
312
+
name = "base64ct"
313
+
version = "1.7.3"
314
+
source = "registry+https://github.com/rust-lang/crates.io-index"
315
+
checksum = "89e25b6adfb930f02d1981565a6e5d9c547ac15a96606256d3b59040e5cd4ca3"
316
+
317
+
[[package]]
318
+
name = "bitflags"
319
+
version = "2.9.1"
320
+
source = "registry+https://github.com/rust-lang/crates.io-index"
321
+
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
322
+
323
+
[[package]]
324
+
name = "block-buffer"
325
+
version = "0.10.4"
326
+
source = "registry+https://github.com/rust-lang/crates.io-index"
327
+
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
328
+
dependencies = [
329
+
"generic-array",
330
+
]
331
+
332
+
[[package]]
333
+
name = "bon"
334
+
version = "3.6.3"
335
+
source = "registry+https://github.com/rust-lang/crates.io-index"
336
+
checksum = "ced38439e7a86a4761f7f7d5ded5ff009135939ecb464a24452eaa4c1696af7d"
337
+
dependencies = [
338
+
"bon-macros",
339
+
"rustversion",
340
+
]
341
+
342
+
[[package]]
343
+
name = "bon-macros"
344
+
version = "3.6.3"
345
+
source = "registry+https://github.com/rust-lang/crates.io-index"
346
+
checksum = "0ce61d2d3844c6b8d31b2353d9f66cf5e632b3e9549583fe3cac2f4f6136725e"
347
+
dependencies = [
348
+
"darling",
349
+
"ident_case",
350
+
"prettyplease",
351
+
"proc-macro2",
352
+
"quote",
353
+
"rustversion",
354
+
"syn",
355
+
]
356
+
357
+
[[package]]
358
+
name = "bot"
359
+
version = "0.1.0"
360
+
dependencies = [
361
+
"anyhow",
362
+
"clap",
363
+
"dotenv",
364
+
"env_logger",
365
+
"log",
366
+
"logic",
367
+
"tokio",
368
+
]
369
+
370
+
[[package]]
371
+
name = "bumpalo"
372
+
version = "3.17.0"
373
+
source = "registry+https://github.com/rust-lang/crates.io-index"
374
+
checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
375
+
376
+
[[package]]
377
+
name = "byteorder"
378
+
version = "1.5.0"
379
+
source = "registry+https://github.com/rust-lang/crates.io-index"
380
+
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
381
+
382
+
[[package]]
383
+
name = "bytes"
384
+
version = "1.10.1"
385
+
source = "registry+https://github.com/rust-lang/crates.io-index"
386
+
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
387
+
388
+
[[package]]
389
+
name = "cc"
390
+
version = "1.2.23"
391
+
source = "registry+https://github.com/rust-lang/crates.io-index"
392
+
checksum = "5f4ac86a9e5bc1e2b3449ab9d7d3a6a405e3d1bb28d7b9be8614f55846ae3766"
393
+
dependencies = [
394
+
"jobserver",
395
+
"libc",
396
+
"shlex",
397
+
]
398
+
399
+
[[package]]
400
+
name = "cfg-if"
401
+
version = "1.0.0"
402
+
source = "registry+https://github.com/rust-lang/crates.io-index"
403
+
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
404
+
405
+
[[package]]
406
+
name = "chrono"
407
+
version = "0.4.41"
408
+
source = "registry+https://github.com/rust-lang/crates.io-index"
409
+
checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d"
410
+
dependencies = [
411
+
"android-tzdata",
412
+
"iana-time-zone",
413
+
"js-sys",
414
+
"num-traits",
415
+
"serde",
416
+
"wasm-bindgen",
417
+
"windows-link",
418
+
]
419
+
420
+
[[package]]
421
+
name = "cid"
422
+
version = "0.11.1"
423
+
source = "registry+https://github.com/rust-lang/crates.io-index"
424
+
checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a"
425
+
dependencies = [
426
+
"core2",
427
+
"multibase",
428
+
"multihash",
429
+
"serde",
430
+
"serde_bytes",
431
+
"unsigned-varint",
432
+
]
433
+
434
+
[[package]]
435
+
name = "clap"
436
+
version = "4.5.38"
437
+
source = "registry+https://github.com/rust-lang/crates.io-index"
438
+
checksum = "ed93b9805f8ba930df42c2590f05453d5ec36cbb85d018868a5b24d31f6ac000"
439
+
dependencies = [
440
+
"clap_builder",
441
+
"clap_derive",
442
+
]
443
+
444
+
[[package]]
445
+
name = "clap_builder"
446
+
version = "4.5.38"
447
+
source = "registry+https://github.com/rust-lang/crates.io-index"
448
+
checksum = "379026ff283facf611b0ea629334361c4211d1b12ee01024eec1591133b04120"
449
+
dependencies = [
450
+
"anstream",
451
+
"anstyle",
452
+
"clap_lex",
453
+
"strsim",
454
+
]
455
+
456
+
[[package]]
457
+
name = "clap_derive"
458
+
version = "4.5.32"
459
+
source = "registry+https://github.com/rust-lang/crates.io-index"
460
+
checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7"
461
+
dependencies = [
462
+
"heck",
463
+
"proc-macro2",
464
+
"quote",
465
+
"syn",
466
+
]
467
+
468
+
[[package]]
469
+
name = "clap_lex"
470
+
version = "0.7.4"
471
+
source = "registry+https://github.com/rust-lang/crates.io-index"
472
+
checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6"
473
+
474
+
[[package]]
475
+
name = "colorchoice"
476
+
version = "1.0.3"
477
+
source = "registry+https://github.com/rust-lang/crates.io-index"
478
+
checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
479
+
480
+
[[package]]
481
+
name = "concurrent-queue"
482
+
version = "2.5.0"
483
+
source = "registry+https://github.com/rust-lang/crates.io-index"
484
+
checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
485
+
dependencies = [
486
+
"crossbeam-utils",
487
+
]
488
+
489
+
[[package]]
490
+
name = "const-oid"
491
+
version = "0.9.6"
492
+
source = "registry+https://github.com/rust-lang/crates.io-index"
493
+
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
494
+
495
+
[[package]]
496
+
name = "core-foundation"
497
+
version = "0.9.4"
498
+
source = "registry+https://github.com/rust-lang/crates.io-index"
499
+
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
500
+
dependencies = [
501
+
"core-foundation-sys",
502
+
"libc",
503
+
]
504
+
505
+
[[package]]
506
+
name = "core-foundation-sys"
507
+
version = "0.8.7"
508
+
source = "registry+https://github.com/rust-lang/crates.io-index"
509
+
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
510
+
511
+
[[package]]
512
+
name = "core2"
513
+
version = "0.4.0"
514
+
source = "registry+https://github.com/rust-lang/crates.io-index"
515
+
checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
516
+
dependencies = [
517
+
"memchr",
518
+
]
519
+
520
+
[[package]]
521
+
name = "cpufeatures"
522
+
version = "0.2.17"
523
+
source = "registry+https://github.com/rust-lang/crates.io-index"
524
+
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
525
+
dependencies = [
526
+
"libc",
527
+
]
528
+
529
+
[[package]]
530
+
name = "crc32fast"
531
+
version = "1.4.2"
532
+
source = "registry+https://github.com/rust-lang/crates.io-index"
533
+
checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
534
+
dependencies = [
535
+
"cfg-if",
536
+
]
537
+
538
+
[[package]]
539
+
name = "crossbeam-channel"
540
+
version = "0.5.15"
541
+
source = "registry+https://github.com/rust-lang/crates.io-index"
542
+
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
543
+
dependencies = [
544
+
"crossbeam-utils",
545
+
]
546
+
547
+
[[package]]
548
+
name = "crossbeam-epoch"
549
+
version = "0.9.18"
550
+
source = "registry+https://github.com/rust-lang/crates.io-index"
551
+
checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
552
+
dependencies = [
553
+
"crossbeam-utils",
554
+
]
555
+
556
+
[[package]]
557
+
name = "crossbeam-utils"
558
+
version = "0.8.21"
559
+
source = "registry+https://github.com/rust-lang/crates.io-index"
560
+
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
561
+
562
+
[[package]]
563
+
name = "crypto-bigint"
564
+
version = "0.5.5"
565
+
source = "registry+https://github.com/rust-lang/crates.io-index"
566
+
checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
567
+
dependencies = [
568
+
"generic-array",
569
+
"rand_core",
570
+
"subtle",
571
+
"zeroize",
572
+
]
573
+
574
+
[[package]]
575
+
name = "crypto-common"
576
+
version = "0.1.6"
577
+
source = "registry+https://github.com/rust-lang/crates.io-index"
578
+
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
579
+
dependencies = [
580
+
"generic-array",
581
+
"typenum",
582
+
]
583
+
584
+
[[package]]
585
+
name = "darling"
586
+
version = "0.20.11"
587
+
source = "registry+https://github.com/rust-lang/crates.io-index"
588
+
checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
589
+
dependencies = [
590
+
"darling_core",
591
+
"darling_macro",
592
+
]
593
+
594
+
[[package]]
595
+
name = "darling_core"
596
+
version = "0.20.11"
597
+
source = "registry+https://github.com/rust-lang/crates.io-index"
598
+
checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
599
+
dependencies = [
600
+
"fnv",
601
+
"ident_case",
602
+
"proc-macro2",
603
+
"quote",
604
+
"strsim",
605
+
"syn",
606
+
]
607
+
608
+
[[package]]
609
+
name = "darling_macro"
610
+
version = "0.20.11"
611
+
source = "registry+https://github.com/rust-lang/crates.io-index"
612
+
checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
613
+
dependencies = [
614
+
"darling_core",
615
+
"quote",
616
+
"syn",
617
+
]
618
+
619
+
[[package]]
620
+
name = "dashmap"
621
+
version = "6.1.0"
622
+
source = "registry+https://github.com/rust-lang/crates.io-index"
623
+
checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf"
624
+
dependencies = [
625
+
"cfg-if",
626
+
"crossbeam-utils",
627
+
"hashbrown 0.14.5",
628
+
"lock_api",
629
+
"once_cell",
630
+
"parking_lot_core",
631
+
]
632
+
633
+
[[package]]
634
+
name = "data-encoding"
635
+
version = "2.9.0"
636
+
source = "registry+https://github.com/rust-lang/crates.io-index"
637
+
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
638
+
639
+
[[package]]
640
+
name = "data-encoding-macro"
641
+
version = "0.1.18"
642
+
source = "registry+https://github.com/rust-lang/crates.io-index"
643
+
checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d"
644
+
dependencies = [
645
+
"data-encoding",
646
+
"data-encoding-macro-internal",
647
+
]
648
+
649
+
[[package]]
650
+
name = "data-encoding-macro-internal"
651
+
version = "0.1.16"
652
+
source = "registry+https://github.com/rust-lang/crates.io-index"
653
+
checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976"
654
+
dependencies = [
655
+
"data-encoding",
656
+
"syn",
657
+
]
658
+
659
+
[[package]]
660
+
name = "der"
661
+
version = "0.7.10"
662
+
source = "registry+https://github.com/rust-lang/crates.io-index"
663
+
checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
664
+
dependencies = [
665
+
"const-oid",
666
+
"zeroize",
667
+
]
668
+
669
+
[[package]]
670
+
name = "derive_builder"
671
+
version = "0.20.2"
672
+
source = "registry+https://github.com/rust-lang/crates.io-index"
673
+
checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947"
674
+
dependencies = [
675
+
"derive_builder_macro",
676
+
]
677
+
678
+
[[package]]
679
+
name = "derive_builder_core"
680
+
version = "0.20.2"
681
+
source = "registry+https://github.com/rust-lang/crates.io-index"
682
+
checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8"
683
+
dependencies = [
684
+
"darling",
685
+
"proc-macro2",
686
+
"quote",
687
+
"syn",
688
+
]
689
+
690
+
[[package]]
691
+
name = "derive_builder_macro"
692
+
version = "0.20.2"
693
+
source = "registry+https://github.com/rust-lang/crates.io-index"
694
+
checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
695
+
dependencies = [
696
+
"derive_builder_core",
697
+
"syn",
698
+
]
699
+
700
+
[[package]]
701
+
name = "digest"
702
+
version = "0.10.7"
703
+
source = "registry+https://github.com/rust-lang/crates.io-index"
704
+
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
705
+
dependencies = [
706
+
"block-buffer",
707
+
"const-oid",
708
+
"crypto-common",
709
+
"subtle",
710
+
]
711
+
712
+
[[package]]
713
+
name = "displaydoc"
714
+
version = "0.2.5"
715
+
source = "registry+https://github.com/rust-lang/crates.io-index"
716
+
checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
717
+
dependencies = [
718
+
"proc-macro2",
719
+
"quote",
720
+
"syn",
721
+
]
722
+
723
+
[[package]]
724
+
name = "dotenv"
725
+
version = "0.15.0"
726
+
source = "registry+https://github.com/rust-lang/crates.io-index"
727
+
checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
728
+
729
+
[[package]]
730
+
name = "ecdsa"
731
+
version = "0.16.9"
732
+
source = "registry+https://github.com/rust-lang/crates.io-index"
733
+
checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
734
+
dependencies = [
735
+
"der",
736
+
"digest",
737
+
"elliptic-curve",
738
+
"rfc6979",
739
+
"signature",
740
+
]
741
+
742
+
[[package]]
743
+
name = "elliptic-curve"
744
+
version = "0.13.8"
745
+
source = "registry+https://github.com/rust-lang/crates.io-index"
746
+
checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
747
+
dependencies = [
748
+
"base16ct",
749
+
"crypto-bigint",
750
+
"digest",
751
+
"ff",
752
+
"generic-array",
753
+
"group",
754
+
"rand_core",
755
+
"sec1",
756
+
"subtle",
757
+
"zeroize",
758
+
]
759
+
760
+
[[package]]
761
+
name = "env_filter"
762
+
version = "0.1.3"
763
+
source = "registry+https://github.com/rust-lang/crates.io-index"
764
+
checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0"
765
+
dependencies = [
766
+
"log",
767
+
"regex",
768
+
]
769
+
770
+
[[package]]
771
+
name = "env_logger"
772
+
version = "0.11.8"
773
+
source = "registry+https://github.com/rust-lang/crates.io-index"
774
+
checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
775
+
dependencies = [
776
+
"anstream",
777
+
"anstyle",
778
+
"env_filter",
779
+
"jiff",
780
+
"log",
781
+
]
782
+
783
+
[[package]]
784
+
name = "equivalent"
785
+
version = "1.0.2"
786
+
source = "registry+https://github.com/rust-lang/crates.io-index"
787
+
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
788
+
789
+
[[package]]
790
+
name = "errno"
791
+
version = "0.3.12"
792
+
source = "registry+https://github.com/rust-lang/crates.io-index"
793
+
checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18"
794
+
dependencies = [
795
+
"libc",
796
+
"windows-sys 0.59.0",
797
+
]
798
+
799
+
[[package]]
800
+
name = "event-listener"
801
+
version = "5.4.0"
802
+
source = "registry+https://github.com/rust-lang/crates.io-index"
803
+
checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae"
804
+
dependencies = [
805
+
"concurrent-queue",
806
+
"parking",
807
+
"pin-project-lite",
808
+
]
809
+
810
+
[[package]]
811
+
name = "event-listener-strategy"
812
+
version = "0.5.4"
813
+
source = "registry+https://github.com/rust-lang/crates.io-index"
814
+
checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93"
815
+
dependencies = [
816
+
"event-listener",
817
+
"pin-project-lite",
818
+
]
819
+
820
+
[[package]]
821
+
name = "fastrand"
822
+
version = "2.3.0"
823
+
source = "registry+https://github.com/rust-lang/crates.io-index"
824
+
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
825
+
826
+
[[package]]
827
+
name = "ff"
828
+
version = "0.13.1"
829
+
source = "registry+https://github.com/rust-lang/crates.io-index"
830
+
checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393"
831
+
dependencies = [
832
+
"rand_core",
833
+
"subtle",
834
+
]
835
+
836
+
[[package]]
837
+
name = "flate2"
838
+
version = "1.1.1"
839
+
source = "registry+https://github.com/rust-lang/crates.io-index"
840
+
checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece"
841
+
dependencies = [
842
+
"crc32fast",
843
+
"miniz_oxide",
844
+
]
845
+
846
+
[[package]]
847
+
name = "flume"
848
+
version = "0.11.1"
849
+
source = "registry+https://github.com/rust-lang/crates.io-index"
850
+
checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095"
851
+
dependencies = [
852
+
"futures-core",
853
+
"futures-sink",
854
+
"nanorand",
855
+
"spin",
856
+
]
857
+
858
+
[[package]]
859
+
name = "fnv"
860
+
version = "1.0.7"
861
+
source = "registry+https://github.com/rust-lang/crates.io-index"
862
+
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
863
+
864
+
[[package]]
865
+
name = "foldhash"
866
+
version = "0.1.5"
867
+
source = "registry+https://github.com/rust-lang/crates.io-index"
868
+
checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
869
+
870
+
[[package]]
871
+
name = "foreign-types"
872
+
version = "0.3.2"
873
+
source = "registry+https://github.com/rust-lang/crates.io-index"
874
+
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
875
+
dependencies = [
876
+
"foreign-types-shared",
877
+
]
878
+
879
+
[[package]]
880
+
name = "foreign-types-shared"
881
+
version = "0.1.1"
882
+
source = "registry+https://github.com/rust-lang/crates.io-index"
883
+
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
884
+
885
+
[[package]]
886
+
name = "form_urlencoded"
887
+
version = "1.2.1"
888
+
source = "registry+https://github.com/rust-lang/crates.io-index"
889
+
checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
890
+
dependencies = [
891
+
"percent-encoding",
892
+
]
893
+
894
+
[[package]]
895
+
name = "futures-channel"
896
+
version = "0.3.31"
897
+
source = "registry+https://github.com/rust-lang/crates.io-index"
898
+
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
899
+
dependencies = [
900
+
"futures-core",
901
+
]
902
+
903
+
[[package]]
904
+
name = "futures-core"
905
+
version = "0.3.31"
906
+
source = "registry+https://github.com/rust-lang/crates.io-index"
907
+
checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
908
+
909
+
[[package]]
910
+
name = "futures-macro"
911
+
version = "0.3.31"
912
+
source = "registry+https://github.com/rust-lang/crates.io-index"
913
+
checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
914
+
dependencies = [
915
+
"proc-macro2",
916
+
"quote",
917
+
"syn",
918
+
]
919
+
920
+
[[package]]
921
+
name = "futures-sink"
922
+
version = "0.3.31"
923
+
source = "registry+https://github.com/rust-lang/crates.io-index"
924
+
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
925
+
926
+
[[package]]
927
+
name = "futures-task"
928
+
version = "0.3.31"
929
+
source = "registry+https://github.com/rust-lang/crates.io-index"
930
+
checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
931
+
932
+
[[package]]
933
+
name = "futures-util"
934
+
version = "0.3.31"
935
+
source = "registry+https://github.com/rust-lang/crates.io-index"
936
+
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
937
+
dependencies = [
938
+
"futures-core",
939
+
"futures-macro",
940
+
"futures-sink",
941
+
"futures-task",
942
+
"pin-project-lite",
943
+
"pin-utils",
944
+
"slab",
945
+
]
946
+
947
+
[[package]]
948
+
name = "generator"
949
+
version = "0.8.5"
950
+
source = "registry+https://github.com/rust-lang/crates.io-index"
951
+
checksum = "d18470a76cb7f8ff746cf1f7470914f900252ec36bbc40b569d74b1258446827"
952
+
dependencies = [
953
+
"cc",
954
+
"cfg-if",
955
+
"libc",
956
+
"log",
957
+
"rustversion",
958
+
"windows",
959
+
]
960
+
961
+
[[package]]
962
+
name = "generic-array"
963
+
version = "0.14.7"
964
+
source = "registry+https://github.com/rust-lang/crates.io-index"
965
+
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
966
+
dependencies = [
967
+
"typenum",
968
+
"version_check",
969
+
"zeroize",
970
+
]
971
+
972
+
[[package]]
973
+
name = "getrandom"
974
+
version = "0.2.16"
975
+
source = "registry+https://github.com/rust-lang/crates.io-index"
976
+
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
977
+
dependencies = [
978
+
"cfg-if",
979
+
"js-sys",
980
+
"libc",
981
+
"wasi 0.11.0+wasi-snapshot-preview1",
982
+
"wasm-bindgen",
983
+
]
984
+
985
+
[[package]]
986
+
name = "getrandom"
987
+
version = "0.3.3"
988
+
source = "registry+https://github.com/rust-lang/crates.io-index"
989
+
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
990
+
dependencies = [
991
+
"cfg-if",
992
+
"libc",
993
+
"r-efi",
994
+
"wasi 0.14.2+wasi-0.2.4",
995
+
]
996
+
997
+
[[package]]
998
+
name = "gimli"
999
+
version = "0.31.1"
1000
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1001
+
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
1002
+
1003
+
[[package]]
1004
+
name = "gloo-utils"
1005
+
version = "0.2.0"
1006
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1007
+
checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa"
1008
+
dependencies = [
1009
+
"js-sys",
1010
+
"serde",
1011
+
"serde_json",
1012
+
"wasm-bindgen",
1013
+
"web-sys",
1014
+
]
1015
+
1016
+
[[package]]
1017
+
name = "group"
1018
+
version = "0.13.0"
1019
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1020
+
checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
1021
+
dependencies = [
1022
+
"ff",
1023
+
"rand_core",
1024
+
"subtle",
1025
+
]
1026
+
1027
+
[[package]]
1028
+
name = "hashbrown"
1029
+
version = "0.14.5"
1030
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1031
+
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
1032
+
1033
+
[[package]]
1034
+
name = "hashbrown"
1035
+
version = "0.15.3"
1036
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1037
+
checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3"
1038
+
dependencies = [
1039
+
"allocator-api2",
1040
+
"equivalent",
1041
+
"foldhash",
1042
+
]
1043
+
1044
+
[[package]]
1045
+
name = "heck"
1046
+
version = "0.5.0"
1047
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1048
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
1049
+
1050
+
[[package]]
1051
+
name = "hmac"
1052
+
version = "0.12.1"
1053
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1054
+
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
1055
+
dependencies = [
1056
+
"digest",
1057
+
]
1058
+
1059
+
[[package]]
1060
+
name = "http"
1061
+
version = "0.2.12"
1062
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1063
+
checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
1064
+
dependencies = [
1065
+
"bytes",
1066
+
"fnv",
1067
+
"itoa",
1068
+
]
1069
+
1070
+
[[package]]
1071
+
name = "http"
1072
+
version = "1.3.1"
1073
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1074
+
checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
1075
+
dependencies = [
1076
+
"bytes",
1077
+
"fnv",
1078
+
"itoa",
1079
+
]
1080
+
1081
+
[[package]]
1082
+
name = "http-body"
1083
+
version = "1.0.1"
1084
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1085
+
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
1086
+
dependencies = [
1087
+
"bytes",
1088
+
"http 1.3.1",
1089
+
]
1090
+
1091
+
[[package]]
1092
+
name = "http-body-util"
1093
+
version = "0.1.3"
1094
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1095
+
checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
1096
+
dependencies = [
1097
+
"bytes",
1098
+
"futures-core",
1099
+
"http 1.3.1",
1100
+
"http-body",
1101
+
"pin-project-lite",
1102
+
]
1103
+
1104
+
[[package]]
1105
+
name = "httparse"
1106
+
version = "1.10.1"
1107
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1108
+
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
1109
+
1110
+
[[package]]
1111
+
name = "hyper"
1112
+
version = "1.6.0"
1113
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1114
+
checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80"
1115
+
dependencies = [
1116
+
"bytes",
1117
+
"futures-channel",
1118
+
"futures-util",
1119
+
"http 1.3.1",
1120
+
"http-body",
1121
+
"httparse",
1122
+
"itoa",
1123
+
"pin-project-lite",
1124
+
"smallvec",
1125
+
"tokio",
1126
+
"want",
1127
+
]
1128
+
1129
+
[[package]]
1130
+
name = "hyper-tls"
1131
+
version = "0.6.0"
1132
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1133
+
checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
1134
+
dependencies = [
1135
+
"bytes",
1136
+
"http-body-util",
1137
+
"hyper",
1138
+
"hyper-util",
1139
+
"native-tls",
1140
+
"tokio",
1141
+
"tokio-native-tls",
1142
+
"tower-service",
1143
+
]
1144
+
1145
+
[[package]]
1146
+
name = "hyper-util"
1147
+
version = "0.1.11"
1148
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1149
+
checksum = "497bbc33a26fdd4af9ed9c70d63f61cf56a938375fbb32df34db9b1cd6d643f2"
1150
+
dependencies = [
1151
+
"bytes",
1152
+
"futures-channel",
1153
+
"futures-util",
1154
+
"http 1.3.1",
1155
+
"http-body",
1156
+
"hyper",
1157
+
"libc",
1158
+
"pin-project-lite",
1159
+
"socket2",
1160
+
"tokio",
1161
+
"tower-service",
1162
+
"tracing",
1163
+
]
1164
+
1165
+
[[package]]
1166
+
name = "iana-time-zone"
1167
+
version = "0.1.63"
1168
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1169
+
checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
1170
+
dependencies = [
1171
+
"android_system_properties",
1172
+
"core-foundation-sys",
1173
+
"iana-time-zone-haiku",
1174
+
"js-sys",
1175
+
"log",
1176
+
"wasm-bindgen",
1177
+
"windows-core",
1178
+
]
1179
+
1180
+
[[package]]
1181
+
name = "iana-time-zone-haiku"
1182
+
version = "0.1.2"
1183
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1184
+
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
1185
+
dependencies = [
1186
+
"cc",
1187
+
]
1188
+
1189
+
[[package]]
1190
+
name = "icu_collections"
1191
+
version = "2.0.0"
1192
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1193
+
checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47"
1194
+
dependencies = [
1195
+
"displaydoc",
1196
+
"potential_utf",
1197
+
"yoke",
1198
+
"zerofrom",
1199
+
"zerovec",
1200
+
]
1201
+
1202
+
[[package]]
1203
+
name = "icu_locale_core"
1204
+
version = "2.0.0"
1205
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1206
+
checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a"
1207
+
dependencies = [
1208
+
"displaydoc",
1209
+
"litemap",
1210
+
"tinystr",
1211
+
"writeable",
1212
+
"zerovec",
1213
+
]
1214
+
1215
+
[[package]]
1216
+
name = "icu_normalizer"
1217
+
version = "2.0.0"
1218
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1219
+
checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979"
1220
+
dependencies = [
1221
+
"displaydoc",
1222
+
"icu_collections",
1223
+
"icu_normalizer_data",
1224
+
"icu_properties",
1225
+
"icu_provider",
1226
+
"smallvec",
1227
+
"zerovec",
1228
+
]
1229
+
1230
+
[[package]]
1231
+
name = "icu_normalizer_data"
1232
+
version = "2.0.0"
1233
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1234
+
checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3"
1235
+
1236
+
[[package]]
1237
+
name = "icu_properties"
1238
+
version = "2.0.0"
1239
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1240
+
checksum = "2549ca8c7241c82f59c80ba2a6f415d931c5b58d24fb8412caa1a1f02c49139a"
1241
+
dependencies = [
1242
+
"displaydoc",
1243
+
"icu_collections",
1244
+
"icu_locale_core",
1245
+
"icu_properties_data",
1246
+
"icu_provider",
1247
+
"potential_utf",
1248
+
"zerotrie",
1249
+
"zerovec",
1250
+
]
1251
+
1252
+
[[package]]
1253
+
name = "icu_properties_data"
1254
+
version = "2.0.0"
1255
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1256
+
checksum = "8197e866e47b68f8f7d95249e172903bec06004b18b2937f1095d40a0c57de04"
1257
+
1258
+
[[package]]
1259
+
name = "icu_provider"
1260
+
version = "2.0.0"
1261
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1262
+
checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af"
1263
+
dependencies = [
1264
+
"displaydoc",
1265
+
"icu_locale_core",
1266
+
"stable_deref_trait",
1267
+
"tinystr",
1268
+
"writeable",
1269
+
"yoke",
1270
+
"zerofrom",
1271
+
"zerotrie",
1272
+
"zerovec",
1273
+
]
1274
+
1275
+
[[package]]
1276
+
name = "ident_case"
1277
+
version = "1.0.1"
1278
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1279
+
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
1280
+
1281
+
[[package]]
1282
+
name = "idna"
1283
+
version = "1.0.3"
1284
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1285
+
checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
1286
+
dependencies = [
1287
+
"idna_adapter",
1288
+
"smallvec",
1289
+
"utf8_iter",
1290
+
]
1291
+
1292
+
[[package]]
1293
+
name = "idna_adapter"
1294
+
version = "1.2.1"
1295
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1296
+
checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344"
1297
+
dependencies = [
1298
+
"icu_normalizer",
1299
+
"icu_properties",
1300
+
]
1301
+
1302
+
[[package]]
1303
+
name = "indexmap"
1304
+
version = "2.9.0"
1305
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1306
+
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
1307
+
dependencies = [
1308
+
"equivalent",
1309
+
"hashbrown 0.15.3",
1310
+
]
1311
+
1312
+
[[package]]
1313
+
name = "ipld-core"
1314
+
version = "0.4.2"
1315
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1316
+
checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db"
1317
+
dependencies = [
1318
+
"cid",
1319
+
"serde",
1320
+
"serde_bytes",
1321
+
]
1322
+
1323
+
[[package]]
1324
+
name = "ipnet"
1325
+
version = "2.11.0"
1326
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1327
+
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
1328
+
1329
+
[[package]]
1330
+
name = "is_terminal_polyfill"
1331
+
version = "1.70.1"
1332
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1333
+
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
1334
+
1335
+
[[package]]
1336
+
name = "itoa"
1337
+
version = "1.0.15"
1338
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1339
+
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
1340
+
1341
+
[[package]]
1342
+
name = "jiff"
1343
+
version = "0.2.13"
1344
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1345
+
checksum = "f02000660d30638906021176af16b17498bd0d12813dbfe7b276d8bc7f3c0806"
1346
+
dependencies = [
1347
+
"jiff-static",
1348
+
"log",
1349
+
"portable-atomic",
1350
+
"portable-atomic-util",
1351
+
"serde",
1352
+
]
1353
+
1354
+
[[package]]
1355
+
name = "jiff-static"
1356
+
version = "0.2.13"
1357
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1358
+
checksum = "f3c30758ddd7188629c6713fc45d1188af4f44c90582311d0c8d8c9907f60c48"
1359
+
dependencies = [
1360
+
"proc-macro2",
1361
+
"quote",
1362
+
"syn",
1363
+
]
1364
+
1365
+
[[package]]
1366
+
name = "jobserver"
1367
+
version = "0.1.33"
1368
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1369
+
checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
1370
+
dependencies = [
1371
+
"getrandom 0.3.3",
1372
+
"libc",
1373
+
]
1374
+
1375
+
[[package]]
1376
+
name = "jose-b64"
1377
+
version = "0.1.2"
1378
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1379
+
checksum = "bec69375368709666b21c76965ce67549f2d2db7605f1f8707d17c9656801b56"
1380
+
dependencies = [
1381
+
"base64ct",
1382
+
"serde",
1383
+
"subtle",
1384
+
"zeroize",
1385
+
]
1386
+
1387
+
[[package]]
1388
+
name = "jose-jwa"
1389
+
version = "0.1.2"
1390
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1391
+
checksum = "9ab78e053fe886a351d67cf0d194c000f9d0dcb92906eb34d853d7e758a4b3a7"
1392
+
dependencies = [
1393
+
"serde",
1394
+
]
1395
+
1396
+
[[package]]
1397
+
name = "jose-jwk"
1398
+
version = "0.1.2"
1399
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1400
+
checksum = "280fa263807fe0782ecb6f2baadc28dffc04e00558a58e33bfdb801d11fd58e7"
1401
+
dependencies = [
1402
+
"jose-b64",
1403
+
"jose-jwa",
1404
+
"p256",
1405
+
"serde",
1406
+
"zeroize",
1407
+
]
1408
+
1409
+
[[package]]
1410
+
name = "js-sys"
1411
+
version = "0.3.77"
1412
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1413
+
checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f"
1414
+
dependencies = [
1415
+
"once_cell",
1416
+
"wasm-bindgen",
1417
+
]
1418
+
1419
+
[[package]]
1420
+
name = "langtag"
1421
+
version = "0.3.4"
1422
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1423
+
checksum = "ed60c85f254d6ae8450cec15eedd921efbc4d1bdf6fcf6202b9a58b403f6f805"
1424
+
dependencies = [
1425
+
"serde",
1426
+
]
1427
+
1428
+
[[package]]
1429
+
name = "lazy_static"
1430
+
version = "1.5.0"
1431
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1432
+
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
1433
+
1434
+
[[package]]
1435
+
name = "libc"
1436
+
version = "0.2.172"
1437
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1438
+
checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
1439
+
1440
+
[[package]]
1441
+
name = "linux-raw-sys"
1442
+
version = "0.9.4"
1443
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1444
+
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
1445
+
1446
+
[[package]]
1447
+
name = "litemap"
1448
+
version = "0.8.0"
1449
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1450
+
checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956"
1451
+
1452
+
[[package]]
1453
+
name = "lock_api"
1454
+
version = "0.4.12"
1455
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1456
+
checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
1457
+
dependencies = [
1458
+
"autocfg",
1459
+
"scopeguard",
1460
+
]
1461
+
1462
+
[[package]]
1463
+
name = "log"
1464
+
version = "0.4.27"
1465
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1466
+
checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94"
1467
+
1468
+
[[package]]
1469
+
name = "logic"
1470
+
version = "0.1.0"
1471
+
dependencies = [
1472
+
"anyhow",
1473
+
"async-trait",
1474
+
"atproto_api",
1475
+
"atrium-api",
1476
+
"atrium-common",
1477
+
"atrium-identity",
1478
+
"atrium-oauth",
1479
+
"atrium-xrpc-client",
1480
+
"clap",
1481
+
"flume",
1482
+
"getrandom 0.2.16",
1483
+
"gloo-utils",
1484
+
"js-sys",
1485
+
"reqwest",
1486
+
"rocketman",
1487
+
"serde",
1488
+
"serde_json",
1489
+
"thiserror 2.0.12",
1490
+
"tokio",
1491
+
"tungstenite",
1492
+
"wasm-bindgen",
1493
+
"web-sys",
1494
+
]
1495
+
1496
+
[[package]]
1497
+
name = "loom"
1498
+
version = "0.7.2"
1499
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1500
+
checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca"
1501
+
dependencies = [
1502
+
"cfg-if",
1503
+
"generator",
1504
+
"scoped-tls",
1505
+
"tracing",
1506
+
"tracing-subscriber",
1507
+
]
1508
+
1509
+
[[package]]
1510
+
name = "lru"
1511
+
version = "0.12.5"
1512
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1513
+
checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38"
1514
+
dependencies = [
1515
+
"hashbrown 0.15.3",
1516
+
]
1517
+
1518
+
[[package]]
1519
+
name = "matchers"
1520
+
version = "0.1.0"
1521
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1522
+
checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
1523
+
dependencies = [
1524
+
"regex-automata 0.1.10",
1525
+
]
1526
+
1527
+
[[package]]
1528
+
name = "memchr"
1529
+
version = "2.7.4"
1530
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1531
+
checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
1532
+
1533
+
[[package]]
1534
+
name = "metrics"
1535
+
version = "0.24.2"
1536
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1537
+
checksum = "25dea7ac8057892855ec285c440160265225438c3c45072613c25a4b26e98ef5"
1538
+
dependencies = [
1539
+
"ahash",
1540
+
"portable-atomic",
1541
+
]
1542
+
1543
+
[[package]]
1544
+
name = "mime"
1545
+
version = "0.3.17"
1546
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1547
+
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
1548
+
1549
+
[[package]]
1550
+
name = "miniz_oxide"
1551
+
version = "0.8.8"
1552
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1553
+
checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a"
1554
+
dependencies = [
1555
+
"adler2",
1556
+
]
1557
+
1558
+
[[package]]
1559
+
name = "mio"
1560
+
version = "1.0.3"
1561
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1562
+
checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
1563
+
dependencies = [
1564
+
"libc",
1565
+
"wasi 0.11.0+wasi-snapshot-preview1",
1566
+
"windows-sys 0.52.0",
1567
+
]
1568
+
1569
+
[[package]]
1570
+
name = "moka"
1571
+
version = "0.12.10"
1572
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1573
+
checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926"
1574
+
dependencies = [
1575
+
"async-lock",
1576
+
"crossbeam-channel",
1577
+
"crossbeam-epoch",
1578
+
"crossbeam-utils",
1579
+
"event-listener",
1580
+
"futures-util",
1581
+
"loom",
1582
+
"parking_lot",
1583
+
"portable-atomic",
1584
+
"rustc_version",
1585
+
"smallvec",
1586
+
"tagptr",
1587
+
"thiserror 1.0.69",
1588
+
"uuid",
1589
+
]
1590
+
1591
+
[[package]]
1592
+
name = "multibase"
1593
+
version = "0.9.1"
1594
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1595
+
checksum = "9b3539ec3c1f04ac9748a260728e855f261b4977f5c3406612c884564f329404"
1596
+
dependencies = [
1597
+
"base-x",
1598
+
"data-encoding",
1599
+
"data-encoding-macro",
1600
+
]
1601
+
1602
+
[[package]]
1603
+
name = "multihash"
1604
+
version = "0.19.3"
1605
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1606
+
checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d"
1607
+
dependencies = [
1608
+
"core2",
1609
+
"serde",
1610
+
"unsigned-varint",
1611
+
]
1612
+
1613
+
[[package]]
1614
+
name = "nanorand"
1615
+
version = "0.7.0"
1616
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1617
+
checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
1618
+
dependencies = [
1619
+
"getrandom 0.2.16",
1620
+
]
1621
+
1622
+
[[package]]
1623
+
name = "native-tls"
1624
+
version = "0.2.14"
1625
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1626
+
checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
1627
+
dependencies = [
1628
+
"libc",
1629
+
"log",
1630
+
"openssl",
1631
+
"openssl-probe",
1632
+
"openssl-sys",
1633
+
"schannel",
1634
+
"security-framework",
1635
+
"security-framework-sys",
1636
+
"tempfile",
1637
+
]
1638
+
1639
+
[[package]]
1640
+
name = "nu-ansi-term"
1641
+
version = "0.46.0"
1642
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1643
+
checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
1644
+
dependencies = [
1645
+
"overload",
1646
+
"winapi",
1647
+
]
1648
+
1649
+
[[package]]
1650
+
name = "num-traits"
1651
+
version = "0.2.19"
1652
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1653
+
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
1654
+
dependencies = [
1655
+
"autocfg",
1656
+
]
1657
+
1658
+
[[package]]
1659
+
name = "object"
1660
+
version = "0.36.7"
1661
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1662
+
checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87"
1663
+
dependencies = [
1664
+
"memchr",
1665
+
]
1666
+
1667
+
[[package]]
1668
+
name = "once_cell"
1669
+
version = "1.21.3"
1670
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1671
+
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
1672
+
1673
+
[[package]]
1674
+
name = "openssl"
1675
+
version = "0.10.72"
1676
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1677
+
checksum = "fedfea7d58a1f73118430a55da6a286e7b044961736ce96a16a17068ea25e5da"
1678
+
dependencies = [
1679
+
"bitflags",
1680
+
"cfg-if",
1681
+
"foreign-types",
1682
+
"libc",
1683
+
"once_cell",
1684
+
"openssl-macros",
1685
+
"openssl-sys",
1686
+
]
1687
+
1688
+
[[package]]
1689
+
name = "openssl-macros"
1690
+
version = "0.1.1"
1691
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1692
+
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
1693
+
dependencies = [
1694
+
"proc-macro2",
1695
+
"quote",
1696
+
"syn",
1697
+
]
1698
+
1699
+
[[package]]
1700
+
name = "openssl-probe"
1701
+
version = "0.1.6"
1702
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1703
+
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
1704
+
1705
+
[[package]]
1706
+
name = "openssl-sys"
1707
+
version = "0.9.108"
1708
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1709
+
checksum = "e145e1651e858e820e4860f7b9c5e169bc1d8ce1c86043be79fa7b7634821847"
1710
+
dependencies = [
1711
+
"cc",
1712
+
"libc",
1713
+
"pkg-config",
1714
+
"vcpkg",
1715
+
]
1716
+
1717
+
[[package]]
1718
+
name = "overload"
1719
+
version = "0.1.1"
1720
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1721
+
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
1722
+
1723
+
[[package]]
1724
+
name = "p256"
1725
+
version = "0.13.2"
1726
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1727
+
checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
1728
+
dependencies = [
1729
+
"ecdsa",
1730
+
"elliptic-curve",
1731
+
"primeorder",
1732
+
"sha2",
1733
+
]
1734
+
1735
+
[[package]]
1736
+
name = "parking"
1737
+
version = "2.2.1"
1738
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1739
+
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
1740
+
1741
+
[[package]]
1742
+
name = "parking_lot"
1743
+
version = "0.12.3"
1744
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1745
+
checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
1746
+
dependencies = [
1747
+
"lock_api",
1748
+
"parking_lot_core",
1749
+
]
1750
+
1751
+
[[package]]
1752
+
name = "parking_lot_core"
1753
+
version = "0.9.10"
1754
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1755
+
checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
1756
+
dependencies = [
1757
+
"cfg-if",
1758
+
"libc",
1759
+
"redox_syscall",
1760
+
"smallvec",
1761
+
"windows-targets 0.52.6",
1762
+
]
1763
+
1764
+
[[package]]
1765
+
name = "percent-encoding"
1766
+
version = "2.3.1"
1767
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1768
+
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
1769
+
1770
+
[[package]]
1771
+
name = "pin-project-lite"
1772
+
version = "0.2.16"
1773
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1774
+
checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
1775
+
1776
+
[[package]]
1777
+
name = "pin-utils"
1778
+
version = "0.1.0"
1779
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1780
+
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
1781
+
1782
+
[[package]]
1783
+
name = "pkg-config"
1784
+
version = "0.3.32"
1785
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1786
+
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
1787
+
1788
+
[[package]]
1789
+
name = "portable-atomic"
1790
+
version = "1.11.0"
1791
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1792
+
checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
1793
+
1794
+
[[package]]
1795
+
name = "portable-atomic-util"
1796
+
version = "0.2.4"
1797
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1798
+
checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
1799
+
dependencies = [
1800
+
"portable-atomic",
1801
+
]
1802
+
1803
+
[[package]]
1804
+
name = "potential_utf"
1805
+
version = "0.1.2"
1806
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1807
+
checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585"
1808
+
dependencies = [
1809
+
"zerovec",
1810
+
]
1811
+
1812
+
[[package]]
1813
+
name = "ppv-lite86"
1814
+
version = "0.2.21"
1815
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1816
+
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
1817
+
dependencies = [
1818
+
"zerocopy",
1819
+
]
1820
+
1821
+
[[package]]
1822
+
name = "prettyplease"
1823
+
version = "0.2.32"
1824
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1825
+
checksum = "664ec5419c51e34154eec046ebcba56312d5a2fc3b09a06da188e1ad21afadf6"
1826
+
dependencies = [
1827
+
"proc-macro2",
1828
+
"syn",
1829
+
]
1830
+
1831
+
[[package]]
1832
+
name = "primeorder"
1833
+
version = "0.13.6"
1834
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1835
+
checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
1836
+
dependencies = [
1837
+
"elliptic-curve",
1838
+
]
1839
+
1840
+
[[package]]
1841
+
name = "proc-macro2"
1842
+
version = "1.0.95"
1843
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1844
+
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
1845
+
dependencies = [
1846
+
"unicode-ident",
1847
+
]
1848
+
1849
+
[[package]]
1850
+
name = "quote"
1851
+
version = "1.0.40"
1852
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1853
+
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
1854
+
dependencies = [
1855
+
"proc-macro2",
1856
+
]
1857
+
1858
+
[[package]]
1859
+
name = "r-efi"
1860
+
version = "5.2.0"
1861
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1862
+
checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5"
1863
+
1864
+
[[package]]
1865
+
name = "rand"
1866
+
version = "0.8.5"
1867
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1868
+
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
1869
+
dependencies = [
1870
+
"libc",
1871
+
"rand_chacha",
1872
+
"rand_core",
1873
+
]
1874
+
1875
+
[[package]]
1876
+
name = "rand_chacha"
1877
+
version = "0.3.1"
1878
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1879
+
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
1880
+
dependencies = [
1881
+
"ppv-lite86",
1882
+
"rand_core",
1883
+
]
1884
+
1885
+
[[package]]
1886
+
name = "rand_core"
1887
+
version = "0.6.4"
1888
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1889
+
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
1890
+
dependencies = [
1891
+
"getrandom 0.2.16",
1892
+
]
1893
+
1894
+
[[package]]
1895
+
name = "redox_syscall"
1896
+
version = "0.5.12"
1897
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1898
+
checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af"
1899
+
dependencies = [
1900
+
"bitflags",
1901
+
]
1902
+
1903
+
[[package]]
1904
+
name = "regex"
1905
+
version = "1.11.1"
1906
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1907
+
checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191"
1908
+
dependencies = [
1909
+
"aho-corasick",
1910
+
"memchr",
1911
+
"regex-automata 0.4.9",
1912
+
"regex-syntax 0.8.5",
1913
+
]
1914
+
1915
+
[[package]]
1916
+
name = "regex-automata"
1917
+
version = "0.1.10"
1918
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1919
+
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
1920
+
dependencies = [
1921
+
"regex-syntax 0.6.29",
1922
+
]
1923
+
1924
+
[[package]]
1925
+
name = "regex-automata"
1926
+
version = "0.4.9"
1927
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1928
+
checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908"
1929
+
dependencies = [
1930
+
"aho-corasick",
1931
+
"memchr",
1932
+
"regex-syntax 0.8.5",
1933
+
]
1934
+
1935
+
[[package]]
1936
+
name = "regex-syntax"
1937
+
version = "0.6.29"
1938
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1939
+
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
1940
+
1941
+
[[package]]
1942
+
name = "regex-syntax"
1943
+
version = "0.8.5"
1944
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1945
+
checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
1946
+
1947
+
[[package]]
1948
+
name = "reqwest"
1949
+
version = "0.12.15"
1950
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1951
+
checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb"
1952
+
dependencies = [
1953
+
"async-compression",
1954
+
"base64 0.22.1",
1955
+
"bytes",
1956
+
"futures-core",
1957
+
"futures-util",
1958
+
"http 1.3.1",
1959
+
"http-body",
1960
+
"http-body-util",
1961
+
"hyper",
1962
+
"hyper-tls",
1963
+
"hyper-util",
1964
+
"ipnet",
1965
+
"js-sys",
1966
+
"log",
1967
+
"mime",
1968
+
"native-tls",
1969
+
"once_cell",
1970
+
"percent-encoding",
1971
+
"pin-project-lite",
1972
+
"rustls-pemfile 2.2.0",
1973
+
"serde",
1974
+
"serde_json",
1975
+
"serde_urlencoded",
1976
+
"sync_wrapper",
1977
+
"tokio",
1978
+
"tokio-native-tls",
1979
+
"tokio-util",
1980
+
"tower",
1981
+
"tower-service",
1982
+
"url",
1983
+
"wasm-bindgen",
1984
+
"wasm-bindgen-futures",
1985
+
"web-sys",
1986
+
"windows-registry",
1987
+
]
1988
+
1989
+
[[package]]
1990
+
name = "rfc6979"
1991
+
version = "0.4.0"
1992
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1993
+
checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
1994
+
dependencies = [
1995
+
"hmac",
1996
+
"subtle",
1997
+
]
1998
+
1999
+
[[package]]
2000
+
name = "ring"
2001
+
version = "0.17.14"
2002
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2003
+
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
2004
+
dependencies = [
2005
+
"cc",
2006
+
"cfg-if",
2007
+
"getrandom 0.2.16",
2008
+
"libc",
2009
+
"untrusted",
2010
+
"windows-sys 0.52.0",
2011
+
]
2012
+
2013
+
[[package]]
2014
+
name = "rocketman"
2015
+
version = "0.2.5"
2016
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2017
+
checksum = "90cfc4ee9daf6e9d0ee217b9709aa3bd6c921e6926aa15c6ff5ba9162c2c649a"
2018
+
dependencies = [
2019
+
"anyhow",
2020
+
"async-trait",
2021
+
"bon",
2022
+
"derive_builder",
2023
+
"flume",
2024
+
"futures-util",
2025
+
"metrics",
2026
+
"rand",
2027
+
"serde",
2028
+
"serde_json",
2029
+
"tokio",
2030
+
"tokio-tungstenite",
2031
+
"tracing",
2032
+
"tracing-subscriber",
2033
+
"url",
2034
+
"zstd",
2035
+
]
2036
+
2037
+
[[package]]
2038
+
name = "rustc-demangle"
2039
+
version = "0.1.24"
2040
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2041
+
checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
2042
+
2043
+
[[package]]
2044
+
name = "rustc_version"
2045
+
version = "0.4.1"
2046
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2047
+
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
2048
+
dependencies = [
2049
+
"semver",
2050
+
]
2051
+
2052
+
[[package]]
2053
+
name = "rustix"
2054
+
version = "1.0.7"
2055
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2056
+
checksum = "c71e83d6afe7ff64890ec6b71d6a69bb8a610ab78ce364b3352876bb4c801266"
2057
+
dependencies = [
2058
+
"bitflags",
2059
+
"errno",
2060
+
"libc",
2061
+
"linux-raw-sys",
2062
+
"windows-sys 0.59.0",
2063
+
]
2064
+
2065
+
[[package]]
2066
+
name = "rustls"
2067
+
version = "0.21.12"
2068
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2069
+
checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e"
2070
+
dependencies = [
2071
+
"log",
2072
+
"ring",
2073
+
"rustls-webpki",
2074
+
"sct",
2075
+
]
2076
+
2077
+
[[package]]
2078
+
name = "rustls-native-certs"
2079
+
version = "0.6.3"
2080
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2081
+
checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
2082
+
dependencies = [
2083
+
"openssl-probe",
2084
+
"rustls-pemfile 1.0.4",
2085
+
"schannel",
2086
+
"security-framework",
2087
+
]
2088
+
2089
+
[[package]]
2090
+
name = "rustls-pemfile"
2091
+
version = "1.0.4"
2092
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2093
+
checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
2094
+
dependencies = [
2095
+
"base64 0.21.7",
2096
+
]
2097
+
2098
+
[[package]]
2099
+
name = "rustls-pemfile"
2100
+
version = "2.2.0"
2101
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2102
+
checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50"
2103
+
dependencies = [
2104
+
"rustls-pki-types",
2105
+
]
2106
+
2107
+
[[package]]
2108
+
name = "rustls-pki-types"
2109
+
version = "1.12.0"
2110
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2111
+
checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79"
2112
+
dependencies = [
2113
+
"zeroize",
2114
+
]
2115
+
2116
+
[[package]]
2117
+
name = "rustls-webpki"
2118
+
version = "0.101.7"
2119
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2120
+
checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
2121
+
dependencies = [
2122
+
"ring",
2123
+
"untrusted",
2124
+
]
2125
+
2126
+
[[package]]
2127
+
name = "rustversion"
2128
+
version = "1.0.20"
2129
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2130
+
checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2"
2131
+
2132
+
[[package]]
2133
+
name = "ryu"
2134
+
version = "1.0.20"
2135
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2136
+
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
2137
+
2138
+
[[package]]
2139
+
name = "schannel"
2140
+
version = "0.1.27"
2141
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2142
+
checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
2143
+
dependencies = [
2144
+
"windows-sys 0.59.0",
2145
+
]
2146
+
2147
+
[[package]]
2148
+
name = "scoped-tls"
2149
+
version = "1.0.1"
2150
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2151
+
checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
2152
+
2153
+
[[package]]
2154
+
name = "scopeguard"
2155
+
version = "1.2.0"
2156
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2157
+
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
2158
+
2159
+
[[package]]
2160
+
name = "sct"
2161
+
version = "0.7.1"
2162
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2163
+
checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
2164
+
dependencies = [
2165
+
"ring",
2166
+
"untrusted",
2167
+
]
2168
+
2169
+
[[package]]
2170
+
name = "sec1"
2171
+
version = "0.7.3"
2172
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2173
+
checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
2174
+
dependencies = [
2175
+
"base16ct",
2176
+
"der",
2177
+
"generic-array",
2178
+
"subtle",
2179
+
"zeroize",
2180
+
]
2181
+
2182
+
[[package]]
2183
+
name = "security-framework"
2184
+
version = "2.11.1"
2185
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2186
+
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
2187
+
dependencies = [
2188
+
"bitflags",
2189
+
"core-foundation",
2190
+
"core-foundation-sys",
2191
+
"libc",
2192
+
"security-framework-sys",
2193
+
]
2194
+
2195
+
[[package]]
2196
+
name = "security-framework-sys"
2197
+
version = "2.14.0"
2198
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2199
+
checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
2200
+
dependencies = [
2201
+
"core-foundation-sys",
2202
+
"libc",
2203
+
]
2204
+
2205
+
[[package]]
2206
+
name = "semver"
2207
+
version = "1.0.26"
2208
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2209
+
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
2210
+
2211
+
[[package]]
2212
+
name = "serde"
2213
+
version = "1.0.219"
2214
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2215
+
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
2216
+
dependencies = [
2217
+
"serde_derive",
2218
+
]
2219
+
2220
+
[[package]]
2221
+
name = "serde_bytes"
2222
+
version = "0.11.17"
2223
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2224
+
checksum = "8437fd221bde2d4ca316d61b90e337e9e702b3820b87d63caa9ba6c02bd06d96"
2225
+
dependencies = [
2226
+
"serde",
2227
+
]
2228
+
2229
+
[[package]]
2230
+
name = "serde_derive"
2231
+
version = "1.0.219"
2232
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2233
+
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
2234
+
dependencies = [
2235
+
"proc-macro2",
2236
+
"quote",
2237
+
"syn",
2238
+
]
2239
+
2240
+
[[package]]
2241
+
name = "serde_html_form"
2242
+
version = "0.2.7"
2243
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2244
+
checksum = "9d2de91cf02bbc07cde38891769ccd5d4f073d22a40683aa4bc7a95781aaa2c4"
2245
+
dependencies = [
2246
+
"form_urlencoded",
2247
+
"indexmap",
2248
+
"itoa",
2249
+
"ryu",
2250
+
"serde",
2251
+
]
2252
+
2253
+
[[package]]
2254
+
name = "serde_json"
2255
+
version = "1.0.140"
2256
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2257
+
checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
2258
+
dependencies = [
2259
+
"itoa",
2260
+
"memchr",
2261
+
"ryu",
2262
+
"serde",
2263
+
]
2264
+
2265
+
[[package]]
2266
+
name = "serde_urlencoded"
2267
+
version = "0.7.1"
2268
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2269
+
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
2270
+
dependencies = [
2271
+
"form_urlencoded",
2272
+
"itoa",
2273
+
"ryu",
2274
+
"serde",
2275
+
]
2276
+
2277
+
[[package]]
2278
+
name = "sha1"
2279
+
version = "0.10.6"
2280
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2281
+
checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
2282
+
dependencies = [
2283
+
"cfg-if",
2284
+
"cpufeatures",
2285
+
"digest",
2286
+
]
2287
+
2288
+
[[package]]
2289
+
name = "sha2"
2290
+
version = "0.10.9"
2291
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2292
+
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
2293
+
dependencies = [
2294
+
"cfg-if",
2295
+
"cpufeatures",
2296
+
"digest",
2297
+
]
2298
+
2299
+
[[package]]
2300
+
name = "sharded-slab"
2301
+
version = "0.1.7"
2302
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2303
+
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
2304
+
dependencies = [
2305
+
"lazy_static",
2306
+
]
2307
+
2308
+
[[package]]
2309
+
name = "shlex"
2310
+
version = "1.3.0"
2311
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2312
+
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
2313
+
2314
+
[[package]]
2315
+
name = "signal-hook-registry"
2316
+
version = "1.4.5"
2317
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2318
+
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
2319
+
dependencies = [
2320
+
"libc",
2321
+
]
2322
+
2323
+
[[package]]
2324
+
name = "signature"
2325
+
version = "2.2.0"
2326
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2327
+
checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
2328
+
dependencies = [
2329
+
"digest",
2330
+
"rand_core",
2331
+
]
2332
+
2333
+
[[package]]
2334
+
name = "slab"
2335
+
version = "0.4.9"
2336
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2337
+
checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
2338
+
dependencies = [
2339
+
"autocfg",
2340
+
]
2341
+
2342
+
[[package]]
2343
+
name = "smallvec"
2344
+
version = "1.15.0"
2345
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2346
+
checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
2347
+
2348
+
[[package]]
2349
+
name = "socket2"
2350
+
version = "0.5.9"
2351
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2352
+
checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
2353
+
dependencies = [
2354
+
"libc",
2355
+
"windows-sys 0.52.0",
2356
+
]
2357
+
2358
+
[[package]]
2359
+
name = "spin"
2360
+
version = "0.9.8"
2361
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2362
+
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
2363
+
dependencies = [
2364
+
"lock_api",
2365
+
]
2366
+
2367
+
[[package]]
2368
+
name = "stable_deref_trait"
2369
+
version = "1.2.0"
2370
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2371
+
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
2372
+
2373
+
[[package]]
2374
+
name = "strsim"
2375
+
version = "0.11.1"
2376
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2377
+
checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
2378
+
2379
+
[[package]]
2380
+
name = "subtle"
2381
+
version = "2.6.1"
2382
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2383
+
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
2384
+
2385
+
[[package]]
2386
+
name = "syn"
2387
+
version = "2.0.101"
2388
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2389
+
checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
2390
+
dependencies = [
2391
+
"proc-macro2",
2392
+
"quote",
2393
+
"unicode-ident",
2394
+
]
2395
+
2396
+
[[package]]
2397
+
name = "sync_wrapper"
2398
+
version = "1.0.2"
2399
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2400
+
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
2401
+
dependencies = [
2402
+
"futures-core",
2403
+
]
2404
+
2405
+
[[package]]
2406
+
name = "synstructure"
2407
+
version = "0.13.2"
2408
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2409
+
checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
2410
+
dependencies = [
2411
+
"proc-macro2",
2412
+
"quote",
2413
+
"syn",
2414
+
]
2415
+
2416
+
[[package]]
2417
+
name = "tagptr"
2418
+
version = "0.2.0"
2419
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2420
+
checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417"
2421
+
2422
+
[[package]]
2423
+
name = "tempfile"
2424
+
version = "3.20.0"
2425
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2426
+
checksum = "e8a64e3985349f2441a1a9ef0b853f869006c3855f2cda6862a94d26ebb9d6a1"
2427
+
dependencies = [
2428
+
"fastrand",
2429
+
"getrandom 0.3.3",
2430
+
"once_cell",
2431
+
"rustix",
2432
+
"windows-sys 0.59.0",
2433
+
]
2434
+
2435
+
[[package]]
2436
+
name = "thiserror"
2437
+
version = "1.0.69"
2438
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2439
+
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
2440
+
dependencies = [
2441
+
"thiserror-impl 1.0.69",
2442
+
]
2443
+
2444
+
[[package]]
2445
+
name = "thiserror"
2446
+
version = "2.0.12"
2447
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2448
+
checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708"
2449
+
dependencies = [
2450
+
"thiserror-impl 2.0.12",
2451
+
]
2452
+
2453
+
[[package]]
2454
+
name = "thiserror-impl"
2455
+
version = "1.0.69"
2456
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2457
+
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
2458
+
dependencies = [
2459
+
"proc-macro2",
2460
+
"quote",
2461
+
"syn",
2462
+
]
2463
+
2464
+
[[package]]
2465
+
name = "thiserror-impl"
2466
+
version = "2.0.12"
2467
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2468
+
checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d"
2469
+
dependencies = [
2470
+
"proc-macro2",
2471
+
"quote",
2472
+
"syn",
2473
+
]
2474
+
2475
+
[[package]]
2476
+
name = "thread_local"
2477
+
version = "1.1.8"
2478
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2479
+
checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c"
2480
+
dependencies = [
2481
+
"cfg-if",
2482
+
"once_cell",
2483
+
]
2484
+
2485
+
[[package]]
2486
+
name = "tinystr"
2487
+
version = "0.8.1"
2488
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2489
+
checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b"
2490
+
dependencies = [
2491
+
"displaydoc",
2492
+
"zerovec",
2493
+
]
2494
+
2495
+
[[package]]
2496
+
name = "tokio"
2497
+
version = "1.45.0"
2498
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2499
+
checksum = "2513ca694ef9ede0fb23fe71a4ee4107cb102b9dc1930f6d0fd77aae068ae165"
2500
+
dependencies = [
2501
+
"backtrace",
2502
+
"bytes",
2503
+
"libc",
2504
+
"mio",
2505
+
"parking_lot",
2506
+
"pin-project-lite",
2507
+
"signal-hook-registry",
2508
+
"socket2",
2509
+
"tokio-macros",
2510
+
"windows-sys 0.52.0",
2511
+
]
2512
+
2513
+
[[package]]
2514
+
name = "tokio-macros"
2515
+
version = "2.5.0"
2516
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2517
+
checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8"
2518
+
dependencies = [
2519
+
"proc-macro2",
2520
+
"quote",
2521
+
"syn",
2522
+
]
2523
+
2524
+
[[package]]
2525
+
name = "tokio-native-tls"
2526
+
version = "0.3.1"
2527
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2528
+
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
2529
+
dependencies = [
2530
+
"native-tls",
2531
+
"tokio",
2532
+
]
2533
+
2534
+
[[package]]
2535
+
name = "tokio-rustls"
2536
+
version = "0.24.1"
2537
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2538
+
checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
2539
+
dependencies = [
2540
+
"rustls",
2541
+
"tokio",
2542
+
]
2543
+
2544
+
[[package]]
2545
+
name = "tokio-tungstenite"
2546
+
version = "0.20.1"
2547
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2548
+
checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c"
2549
+
dependencies = [
2550
+
"futures-util",
2551
+
"log",
2552
+
"rustls",
2553
+
"rustls-native-certs",
2554
+
"tokio",
2555
+
"tokio-rustls",
2556
+
"tungstenite",
2557
+
"webpki-roots",
2558
+
]
2559
+
2560
+
[[package]]
2561
+
name = "tokio-util"
2562
+
version = "0.7.15"
2563
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2564
+
checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
2565
+
dependencies = [
2566
+
"bytes",
2567
+
"futures-core",
2568
+
"futures-sink",
2569
+
"pin-project-lite",
2570
+
"tokio",
2571
+
]
2572
+
2573
+
[[package]]
2574
+
name = "tower"
2575
+
version = "0.5.2"
2576
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2577
+
checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
2578
+
dependencies = [
2579
+
"futures-core",
2580
+
"futures-util",
2581
+
"pin-project-lite",
2582
+
"sync_wrapper",
2583
+
"tokio",
2584
+
"tower-layer",
2585
+
"tower-service",
2586
+
]
2587
+
2588
+
[[package]]
2589
+
name = "tower-layer"
2590
+
version = "0.3.3"
2591
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2592
+
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
2593
+
2594
+
[[package]]
2595
+
name = "tower-service"
2596
+
version = "0.3.3"
2597
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2598
+
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
2599
+
2600
+
[[package]]
2601
+
name = "tracing"
2602
+
version = "0.1.41"
2603
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2604
+
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
2605
+
dependencies = [
2606
+
"pin-project-lite",
2607
+
"tracing-attributes",
2608
+
"tracing-core",
2609
+
]
2610
+
2611
+
[[package]]
2612
+
name = "tracing-attributes"
2613
+
version = "0.1.28"
2614
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2615
+
checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d"
2616
+
dependencies = [
2617
+
"proc-macro2",
2618
+
"quote",
2619
+
"syn",
2620
+
]
2621
+
2622
+
[[package]]
2623
+
name = "tracing-core"
2624
+
version = "0.1.33"
2625
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2626
+
checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c"
2627
+
dependencies = [
2628
+
"once_cell",
2629
+
"valuable",
2630
+
]
2631
+
2632
+
[[package]]
2633
+
name = "tracing-log"
2634
+
version = "0.2.0"
2635
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2636
+
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
2637
+
dependencies = [
2638
+
"log",
2639
+
"once_cell",
2640
+
"tracing-core",
2641
+
]
2642
+
2643
+
[[package]]
2644
+
name = "tracing-subscriber"
2645
+
version = "0.3.19"
2646
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2647
+
checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
2648
+
dependencies = [
2649
+
"matchers",
2650
+
"nu-ansi-term",
2651
+
"once_cell",
2652
+
"regex",
2653
+
"sharded-slab",
2654
+
"smallvec",
2655
+
"thread_local",
2656
+
"tracing",
2657
+
"tracing-core",
2658
+
"tracing-log",
2659
+
]
2660
+
2661
+
[[package]]
2662
+
name = "trait-variant"
2663
+
version = "0.1.2"
2664
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2665
+
checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7"
2666
+
dependencies = [
2667
+
"proc-macro2",
2668
+
"quote",
2669
+
"syn",
2670
+
]
2671
+
2672
+
[[package]]
2673
+
name = "try-lock"
2674
+
version = "0.2.5"
2675
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2676
+
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
2677
+
2678
+
[[package]]
2679
+
name = "tungstenite"
2680
+
version = "0.20.1"
2681
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2682
+
checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9"
2683
+
dependencies = [
2684
+
"byteorder",
2685
+
"bytes",
2686
+
"data-encoding",
2687
+
"http 0.2.12",
2688
+
"httparse",
2689
+
"log",
2690
+
"rand",
2691
+
"rustls",
2692
+
"sha1",
2693
+
"thiserror 1.0.69",
2694
+
"url",
2695
+
"utf-8",
2696
+
]
2697
+
2698
+
[[package]]
2699
+
name = "typenum"
2700
+
version = "1.18.0"
2701
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2702
+
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
2703
+
2704
+
[[package]]
2705
+
name = "unicode-ident"
2706
+
version = "1.0.18"
2707
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2708
+
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
2709
+
2710
+
[[package]]
2711
+
name = "unsigned-varint"
2712
+
version = "0.8.0"
2713
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2714
+
checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06"
2715
+
2716
+
[[package]]
2717
+
name = "untrusted"
2718
+
version = "0.9.0"
2719
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2720
+
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
2721
+
2722
+
[[package]]
2723
+
name = "url"
2724
+
version = "2.5.4"
2725
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2726
+
checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60"
2727
+
dependencies = [
2728
+
"form_urlencoded",
2729
+
"idna",
2730
+
"percent-encoding",
2731
+
]
2732
+
2733
+
[[package]]
2734
+
name = "utf-8"
2735
+
version = "0.7.6"
2736
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2737
+
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
2738
+
2739
+
[[package]]
2740
+
name = "utf8_iter"
2741
+
version = "1.0.4"
2742
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2743
+
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
2744
+
2745
+
[[package]]
2746
+
name = "utf8parse"
2747
+
version = "0.2.2"
2748
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2749
+
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
2750
+
2751
+
[[package]]
2752
+
name = "uuid"
2753
+
version = "1.16.0"
2754
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2755
+
checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9"
2756
+
dependencies = [
2757
+
"getrandom 0.3.3",
2758
+
]
2759
+
2760
+
[[package]]
2761
+
name = "valuable"
2762
+
version = "0.1.1"
2763
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2764
+
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
2765
+
2766
+
[[package]]
2767
+
name = "vcpkg"
2768
+
version = "0.2.15"
2769
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2770
+
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
2771
+
2772
+
[[package]]
2773
+
name = "version_check"
2774
+
version = "0.9.5"
2775
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2776
+
checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
2777
+
2778
+
[[package]]
2779
+
name = "want"
2780
+
version = "0.3.1"
2781
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2782
+
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
2783
+
dependencies = [
2784
+
"try-lock",
2785
+
]
2786
+
2787
+
[[package]]
2788
+
name = "wasi"
2789
+
version = "0.11.0+wasi-snapshot-preview1"
2790
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2791
+
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
2792
+
2793
+
[[package]]
2794
+
name = "wasi"
2795
+
version = "0.14.2+wasi-0.2.4"
2796
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2797
+
checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"
2798
+
dependencies = [
2799
+
"wit-bindgen-rt",
2800
+
]
2801
+
2802
+
[[package]]
2803
+
name = "wasm-bindgen"
2804
+
version = "0.2.100"
2805
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2806
+
checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5"
2807
+
dependencies = [
2808
+
"cfg-if",
2809
+
"once_cell",
2810
+
"rustversion",
2811
+
"serde_json",
2812
+
"wasm-bindgen-macro",
2813
+
]
2814
+
2815
+
[[package]]
2816
+
name = "wasm-bindgen-backend"
2817
+
version = "0.2.100"
2818
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2819
+
checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6"
2820
+
dependencies = [
2821
+
"bumpalo",
2822
+
"log",
2823
+
"proc-macro2",
2824
+
"quote",
2825
+
"syn",
2826
+
"wasm-bindgen-shared",
2827
+
]
2828
+
2829
+
[[package]]
2830
+
name = "wasm-bindgen-futures"
2831
+
version = "0.4.50"
2832
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2833
+
checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61"
2834
+
dependencies = [
2835
+
"cfg-if",
2836
+
"js-sys",
2837
+
"once_cell",
2838
+
"wasm-bindgen",
2839
+
"web-sys",
2840
+
]
2841
+
2842
+
[[package]]
2843
+
name = "wasm-bindgen-macro"
2844
+
version = "0.2.100"
2845
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2846
+
checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407"
2847
+
dependencies = [
2848
+
"quote",
2849
+
"wasm-bindgen-macro-support",
2850
+
]
2851
+
2852
+
[[package]]
2853
+
name = "wasm-bindgen-macro-support"
2854
+
version = "0.2.100"
2855
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2856
+
checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de"
2857
+
dependencies = [
2858
+
"proc-macro2",
2859
+
"quote",
2860
+
"syn",
2861
+
"wasm-bindgen-backend",
2862
+
"wasm-bindgen-shared",
2863
+
]
2864
+
2865
+
[[package]]
2866
+
name = "wasm-bindgen-shared"
2867
+
version = "0.2.100"
2868
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2869
+
checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d"
2870
+
dependencies = [
2871
+
"unicode-ident",
2872
+
]
2873
+
2874
+
[[package]]
2875
+
name = "web-sys"
2876
+
version = "0.3.77"
2877
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2878
+
checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2"
2879
+
dependencies = [
2880
+
"js-sys",
2881
+
"wasm-bindgen",
2882
+
]
2883
+
2884
+
[[package]]
2885
+
name = "web-time"
2886
+
version = "1.1.0"
2887
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2888
+
checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
2889
+
dependencies = [
2890
+
"js-sys",
2891
+
"wasm-bindgen",
2892
+
]
2893
+
2894
+
[[package]]
2895
+
name = "webpki-roots"
2896
+
version = "0.25.4"
2897
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2898
+
checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1"
2899
+
2900
+
[[package]]
2901
+
name = "winapi"
2902
+
version = "0.3.9"
2903
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2904
+
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
2905
+
dependencies = [
2906
+
"winapi-i686-pc-windows-gnu",
2907
+
"winapi-x86_64-pc-windows-gnu",
2908
+
]
2909
+
2910
+
[[package]]
2911
+
name = "winapi-i686-pc-windows-gnu"
2912
+
version = "0.4.0"
2913
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2914
+
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
2915
+
2916
+
[[package]]
2917
+
name = "winapi-x86_64-pc-windows-gnu"
2918
+
version = "0.4.0"
2919
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2920
+
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
2921
+
2922
+
[[package]]
2923
+
name = "windows"
2924
+
version = "0.61.1"
2925
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2926
+
checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419"
2927
+
dependencies = [
2928
+
"windows-collections",
2929
+
"windows-core",
2930
+
"windows-future",
2931
+
"windows-link",
2932
+
"windows-numerics",
2933
+
]
2934
+
2935
+
[[package]]
2936
+
name = "windows-collections"
2937
+
version = "0.2.0"
2938
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2939
+
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
2940
+
dependencies = [
2941
+
"windows-core",
2942
+
]
2943
+
2944
+
[[package]]
2945
+
name = "windows-core"
2946
+
version = "0.61.1"
2947
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2948
+
checksum = "46ec44dc15085cea82cf9c78f85a9114c463a369786585ad2882d1ff0b0acf40"
2949
+
dependencies = [
2950
+
"windows-implement",
2951
+
"windows-interface",
2952
+
"windows-link",
2953
+
"windows-result",
2954
+
"windows-strings 0.4.1",
2955
+
]
2956
+
2957
+
[[package]]
2958
+
name = "windows-future"
2959
+
version = "0.2.1"
2960
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2961
+
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
2962
+
dependencies = [
2963
+
"windows-core",
2964
+
"windows-link",
2965
+
"windows-threading",
2966
+
]
2967
+
2968
+
[[package]]
2969
+
name = "windows-implement"
2970
+
version = "0.60.0"
2971
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2972
+
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
2973
+
dependencies = [
2974
+
"proc-macro2",
2975
+
"quote",
2976
+
"syn",
2977
+
]
2978
+
2979
+
[[package]]
2980
+
name = "windows-interface"
2981
+
version = "0.59.1"
2982
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2983
+
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
2984
+
dependencies = [
2985
+
"proc-macro2",
2986
+
"quote",
2987
+
"syn",
2988
+
]
2989
+
2990
+
[[package]]
2991
+
name = "windows-link"
2992
+
version = "0.1.1"
2993
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2994
+
checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
2995
+
2996
+
[[package]]
2997
+
name = "windows-numerics"
2998
+
version = "0.2.0"
2999
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3000
+
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
3001
+
dependencies = [
3002
+
"windows-core",
3003
+
"windows-link",
3004
+
]
3005
+
3006
+
[[package]]
3007
+
name = "windows-registry"
3008
+
version = "0.4.0"
3009
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3010
+
checksum = "4286ad90ddb45071efd1a66dfa43eb02dd0dfbae1545ad6cc3c51cf34d7e8ba3"
3011
+
dependencies = [
3012
+
"windows-result",
3013
+
"windows-strings 0.3.1",
3014
+
"windows-targets 0.53.0",
3015
+
]
3016
+
3017
+
[[package]]
3018
+
name = "windows-result"
3019
+
version = "0.3.3"
3020
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3021
+
checksum = "4b895b5356fc36103d0f64dd1e94dfa7ac5633f1c9dd6e80fe9ec4adef69e09d"
3022
+
dependencies = [
3023
+
"windows-link",
3024
+
]
3025
+
3026
+
[[package]]
3027
+
name = "windows-strings"
3028
+
version = "0.3.1"
3029
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3030
+
checksum = "87fa48cc5d406560701792be122a10132491cff9d0aeb23583cc2dcafc847319"
3031
+
dependencies = [
3032
+
"windows-link",
3033
+
]
3034
+
3035
+
[[package]]
3036
+
name = "windows-strings"
3037
+
version = "0.4.1"
3038
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3039
+
checksum = "2a7ab927b2637c19b3dbe0965e75d8f2d30bdd697a1516191cad2ec4df8fb28a"
3040
+
dependencies = [
3041
+
"windows-link",
3042
+
]
3043
+
3044
+
[[package]]
3045
+
name = "windows-sys"
3046
+
version = "0.52.0"
3047
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3048
+
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
3049
+
dependencies = [
3050
+
"windows-targets 0.52.6",
3051
+
]
3052
+
3053
+
[[package]]
3054
+
name = "windows-sys"
3055
+
version = "0.59.0"
3056
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3057
+
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
3058
+
dependencies = [
3059
+
"windows-targets 0.52.6",
3060
+
]
3061
+
3062
+
[[package]]
3063
+
name = "windows-targets"
3064
+
version = "0.52.6"
3065
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3066
+
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
3067
+
dependencies = [
3068
+
"windows_aarch64_gnullvm 0.52.6",
3069
+
"windows_aarch64_msvc 0.52.6",
3070
+
"windows_i686_gnu 0.52.6",
3071
+
"windows_i686_gnullvm 0.52.6",
3072
+
"windows_i686_msvc 0.52.6",
3073
+
"windows_x86_64_gnu 0.52.6",
3074
+
"windows_x86_64_gnullvm 0.52.6",
3075
+
"windows_x86_64_msvc 0.52.6",
3076
+
]
3077
+
3078
+
[[package]]
3079
+
name = "windows-targets"
3080
+
version = "0.53.0"
3081
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3082
+
checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b"
3083
+
dependencies = [
3084
+
"windows_aarch64_gnullvm 0.53.0",
3085
+
"windows_aarch64_msvc 0.53.0",
3086
+
"windows_i686_gnu 0.53.0",
3087
+
"windows_i686_gnullvm 0.53.0",
3088
+
"windows_i686_msvc 0.53.0",
3089
+
"windows_x86_64_gnu 0.53.0",
3090
+
"windows_x86_64_gnullvm 0.53.0",
3091
+
"windows_x86_64_msvc 0.53.0",
3092
+
]
3093
+
3094
+
[[package]]
3095
+
name = "windows-threading"
3096
+
version = "0.1.0"
3097
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3098
+
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
3099
+
dependencies = [
3100
+
"windows-link",
3101
+
]
3102
+
3103
+
[[package]]
3104
+
name = "windows_aarch64_gnullvm"
3105
+
version = "0.52.6"
3106
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3107
+
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
3108
+
3109
+
[[package]]
3110
+
name = "windows_aarch64_gnullvm"
3111
+
version = "0.53.0"
3112
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3113
+
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
3114
+
3115
+
[[package]]
3116
+
name = "windows_aarch64_msvc"
3117
+
version = "0.52.6"
3118
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3119
+
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
3120
+
3121
+
[[package]]
3122
+
name = "windows_aarch64_msvc"
3123
+
version = "0.53.0"
3124
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3125
+
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
3126
+
3127
+
[[package]]
3128
+
name = "windows_i686_gnu"
3129
+
version = "0.52.6"
3130
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3131
+
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
3132
+
3133
+
[[package]]
3134
+
name = "windows_i686_gnu"
3135
+
version = "0.53.0"
3136
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3137
+
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
3138
+
3139
+
[[package]]
3140
+
name = "windows_i686_gnullvm"
3141
+
version = "0.52.6"
3142
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3143
+
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
3144
+
3145
+
[[package]]
3146
+
name = "windows_i686_gnullvm"
3147
+
version = "0.53.0"
3148
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3149
+
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
3150
+
3151
+
[[package]]
3152
+
name = "windows_i686_msvc"
3153
+
version = "0.52.6"
3154
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3155
+
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
3156
+
3157
+
[[package]]
3158
+
name = "windows_i686_msvc"
3159
+
version = "0.53.0"
3160
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3161
+
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
3162
+
3163
+
[[package]]
3164
+
name = "windows_x86_64_gnu"
3165
+
version = "0.52.6"
3166
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3167
+
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
3168
+
3169
+
[[package]]
3170
+
name = "windows_x86_64_gnu"
3171
+
version = "0.53.0"
3172
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3173
+
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
3174
+
3175
+
[[package]]
3176
+
name = "windows_x86_64_gnullvm"
3177
+
version = "0.52.6"
3178
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3179
+
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
3180
+
3181
+
[[package]]
3182
+
name = "windows_x86_64_gnullvm"
3183
+
version = "0.53.0"
3184
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3185
+
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
3186
+
3187
+
[[package]]
3188
+
name = "windows_x86_64_msvc"
3189
+
version = "0.52.6"
3190
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3191
+
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
3192
+
3193
+
[[package]]
3194
+
name = "windows_x86_64_msvc"
3195
+
version = "0.53.0"
3196
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3197
+
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
3198
+
3199
+
[[package]]
3200
+
name = "wit-bindgen-rt"
3201
+
version = "0.39.0"
3202
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3203
+
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
3204
+
dependencies = [
3205
+
"bitflags",
3206
+
]
3207
+
3208
+
[[package]]
3209
+
name = "writeable"
3210
+
version = "0.6.1"
3211
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3212
+
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
3213
+
3214
+
[[package]]
3215
+
name = "yoke"
3216
+
version = "0.8.0"
3217
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3218
+
checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc"
3219
+
dependencies = [
3220
+
"serde",
3221
+
"stable_deref_trait",
3222
+
"yoke-derive",
3223
+
"zerofrom",
3224
+
]
3225
+
3226
+
[[package]]
3227
+
name = "yoke-derive"
3228
+
version = "0.8.0"
3229
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3230
+
checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6"
3231
+
dependencies = [
3232
+
"proc-macro2",
3233
+
"quote",
3234
+
"syn",
3235
+
"synstructure",
3236
+
]
3237
+
3238
+
[[package]]
3239
+
name = "zerocopy"
3240
+
version = "0.8.25"
3241
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3242
+
checksum = "a1702d9583232ddb9174e01bb7c15a2ab8fb1bc6f227aa1233858c351a3ba0cb"
3243
+
dependencies = [
3244
+
"zerocopy-derive",
3245
+
]
3246
+
3247
+
[[package]]
3248
+
name = "zerocopy-derive"
3249
+
version = "0.8.25"
3250
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3251
+
checksum = "28a6e20d751156648aa063f3800b706ee209a32c0b4d9f24be3d980b01be55ef"
3252
+
dependencies = [
3253
+
"proc-macro2",
3254
+
"quote",
3255
+
"syn",
3256
+
]
3257
+
3258
+
[[package]]
3259
+
name = "zerofrom"
3260
+
version = "0.1.6"
3261
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3262
+
checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5"
3263
+
dependencies = [
3264
+
"zerofrom-derive",
3265
+
]
3266
+
3267
+
[[package]]
3268
+
name = "zerofrom-derive"
3269
+
version = "0.1.6"
3270
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3271
+
checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
3272
+
dependencies = [
3273
+
"proc-macro2",
3274
+
"quote",
3275
+
"syn",
3276
+
"synstructure",
3277
+
]
3278
+
3279
+
[[package]]
3280
+
name = "zeroize"
3281
+
version = "1.8.1"
3282
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3283
+
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
3284
+
dependencies = [
3285
+
"serde",
3286
+
]
3287
+
3288
+
[[package]]
3289
+
name = "zerotrie"
3290
+
version = "0.2.2"
3291
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3292
+
checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595"
3293
+
dependencies = [
3294
+
"displaydoc",
3295
+
"yoke",
3296
+
"zerofrom",
3297
+
]
3298
+
3299
+
[[package]]
3300
+
name = "zerovec"
3301
+
version = "0.11.2"
3302
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3303
+
checksum = "4a05eb080e015ba39cc9e23bbe5e7fb04d5fb040350f99f34e338d5fdd294428"
3304
+
dependencies = [
3305
+
"yoke",
3306
+
"zerofrom",
3307
+
"zerovec-derive",
3308
+
]
3309
+
3310
+
[[package]]
3311
+
name = "zerovec-derive"
3312
+
version = "0.11.1"
3313
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3314
+
checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f"
3315
+
dependencies = [
3316
+
"proc-macro2",
3317
+
"quote",
3318
+
"syn",
3319
+
]
3320
+
3321
+
[[package]]
3322
+
name = "zstd"
3323
+
version = "0.13.3"
3324
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3325
+
checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a"
3326
+
dependencies = [
3327
+
"zstd-safe",
3328
+
]
3329
+
3330
+
[[package]]
3331
+
name = "zstd-safe"
3332
+
version = "7.2.4"
3333
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3334
+
checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d"
3335
+
dependencies = [
3336
+
"zstd-sys",
3337
+
]
3338
+
3339
+
[[package]]
3340
+
name = "zstd-sys"
3341
+
version = "2.0.15+zstd.1.5.7"
3342
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3343
+
checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237"
3344
+
dependencies = [
3345
+
"cc",
3346
+
"pkg-config",
3347
+
]
+22
Cargo.toml
+22
Cargo.toml
···
1
+
[workspace]
2
+
members = ['atproto_api', "bot", "logic"]
3
+
resolver = "2"
4
+
5
+
[workspace.dependencies]
6
+
atproto_api = { path = "atproto_api" }
7
+
atrium-api = "0.25.5"
8
+
atrium-common = "0.1.2"
9
+
atrium-identity = "0.1.6"
10
+
atrium-oauth = "0.1.4"
11
+
atrium-xrpc = "0.12.3"
12
+
atrium-xrpc-client = "0.5.14"
13
+
clap = { version = "4.0", features = ["derive"] }
14
+
log = "0.4.27"
15
+
logic = { path = "logic" }
16
+
serde = { version = "1.0.219", features = ["derive"] }
17
+
rocketman = "0.2.5"
18
+
tokio = { version = "1.45.0", features = ["full"] }
19
+
wasm-bindgen = { version = "0.2.100", features = ["default", "serde_json"] }
20
+
web-sys = "0.3.77"
21
+
gloo = "0.11.0"
22
+
gloo-utils = "0.2.0"
+48
README.md
+48
README.md
···
1
+
# Rust atproto template
2
+
3
+
A simple template
4
+
for getting started
5
+
with writing code using [atrium](https://github.com/atrium-rs/atrium) to interact with atproto repos.
6
+
This is the minimal setup,
7
+
but we're using the Statusphere lexicon to create some examples that can be used as studs to create your own
8
+
application.
9
+
10
+
# [atproto_api](./atproto_api)
11
+
12
+
Holds your rust types created from [lexicon json schema files](./atproto_api/lexicons)
13
+
using [esquema-cli](https://github.com/fatfingers23/esquema)
14
+
15
+
### How to change and setup lexicons
16
+
17
+
1. Setup and put your lexicon schema files in [./atproto_api/lexicons](/atproto_api/lexicons)
18
+
2. Install with `cargo install esquema-cli --locked --git https://github.com/fatfingers23/esquema.git`
19
+
3. Run with from root repo `esquema-cli generate local -l atproto_api/lexicons/ -o atproto_api/src/`
20
+
4. You now have Rust types for your lexicon schema in [/atproto_api/src](./atproto_api/src)
21
+
22
+
# [logic](./logic)
23
+
24
+
This crate holds all your logic for interacting with the atmosphere (jetstream, repos, etc). Can import it into a
25
+
backend, WASM, or in our case a CLI.
26
+
27
+
# [cli](./cli)
28
+
29
+
This is a binary showcasing how it can run on the backend
30
+
`cargo run --bin cli -- --help` for a list of commands. You can also copy [.env.template](./.env.template) and change it
31
+
to `.env` to save your handle and app password there.
32
+
33
+
#[wasm](./wasm)
34
+
This is a simple WASM project showcasing the same logic crate as used in the cli binary.
35
+
36
+
To run make sure you have [Trunk](https://trunkrs.dev/guide/) setup and then run `trunk serve` in the directory
37
+
38
+
## CLI and WASM Features to showcase examples
39
+
40
+
All of these features are implemented in the Logic crate and share a lot of code.
41
+
JetStream is a bit of an exception and has 2 different implementations.
42
+
[Rocketman](https://crates.io/crates/rocketman) for the cli and just a quick and dirty web_sys websocket connection for
43
+
the WASM one
44
+
45
+
- Create a new Statusphere status
46
+
- Get your current Statusphere status
47
+
- Look up someone's status via handle to show did resolver
48
+
- Start a JetStream listener to listen for updates (Includes atrium did resolver via http)
+1
atproto_api/.gitignore
+1
atproto_api/.gitignore
···
1
+
/target
+8
atproto_api/Cargo.toml
+8
atproto_api/Cargo.toml
+29
atproto_api/lexicons/star.json
+29
atproto_api/lexicons/star.json
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "sh.tangled.feed.star",
4
+
"needsCbor": true,
5
+
"needsType": true,
6
+
"defs": {
7
+
"main": {
8
+
"type": "record",
9
+
"key": "tid",
10
+
"record": {
11
+
"type": "object",
12
+
"required": [
13
+
"subject",
14
+
"createdAt"
15
+
],
16
+
"properties": {
17
+
"subject": {
18
+
"type": "string",
19
+
"format": "at-uri"
20
+
},
21
+
"createdAt": {
22
+
"type": "string",
23
+
"format": "datetime"
24
+
}
25
+
}
26
+
}
27
+
}
28
+
}
29
+
}
+29
atproto_api/lexicons/status.json
+29
atproto_api/lexicons/status.json
···
1
+
{
2
+
"lexicon": 1,
3
+
"id": "xyz.statusphere.status",
4
+
"defs": {
5
+
"main": {
6
+
"type": "record",
7
+
"key": "tid",
8
+
"record": {
9
+
"type": "object",
10
+
"required": [
11
+
"status",
12
+
"createdAt"
13
+
],
14
+
"properties": {
15
+
"status": {
16
+
"type": "string",
17
+
"minLength": 1,
18
+
"maxGraphemes": 1,
19
+
"maxLength": 32
20
+
},
21
+
"createdAt": {
22
+
"type": "string",
23
+
"format": "datetime"
24
+
}
25
+
}
26
+
}
27
+
}
28
+
}
29
+
}
+3
atproto_api/src/dev.rs
+3
atproto_api/src/dev.rs
+3
atproto_api/src/dev/baileytownsend.rs
+3
atproto_api/src/dev/baileytownsend.rs
+3
atproto_api/src/dev/baileytownsend/retrospective.rs
+3
atproto_api/src/dev/baileytownsend/retrospective.rs
+40
atproto_api/src/dev/baileytownsend/retrospective/day.rs
+40
atproto_api/src/dev/baileytownsend/retrospective/day.rs
···
1
+
// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
2
+
//!Definitions for the `dev.baileytownsend.retrospective.day` namespace.
3
+
use atrium_api::types::TryFromUnknown;
4
+
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
5
+
#[serde(rename_all = "camelCase")]
6
+
pub struct RecordData {
7
+
///An array of retrospective countables that happened in your day.
8
+
pub countables: Vec<Countable>,
9
+
///An array of retrospective events that happened in your day.
10
+
pub events: Vec<Event>,
11
+
///A text summary of your day, 300 character limit so it can be used as a post as well
12
+
#[serde(skip_serializing_if = "core::option::Option::is_none")]
13
+
pub summary: core::option::Option<String>,
14
+
}
15
+
pub type Record = atrium_api::types::Object<RecordData>;
16
+
impl From<atrium_api::types::Unknown> for RecordData {
17
+
fn from(value: atrium_api::types::Unknown) -> Self {
18
+
Self::try_from_unknown(value).unwrap()
19
+
}
20
+
}
21
+
///Something that happened in your day that can be counted. Steps, water consumed, etc.
22
+
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
23
+
#[serde(rename_all = "camelCase")]
24
+
pub struct CountableData {
25
+
///The count for the event. This is the number of times the event happened.
26
+
pub count: i64,
27
+
///a slugable key for the countable item using underscores instead of spaces. ounces_water, cookies_eaten, etc.
28
+
pub key: String,
29
+
}
30
+
pub type Countable = atrium_api::types::Object<CountableData>;
31
+
///Something that happened in your day. Maybe you read a book, told a funny joke, or went on a fun outing. This is a record of that event.
32
+
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
33
+
#[serde(rename_all = "camelCase")]
34
+
pub struct EventData {
35
+
///What was the event? Watched a movie, what movie? Went to the beach?
36
+
pub description: String,
37
+
///a slugable key for the event item using underscores instead of spaces. Like movies_watched, books_read, or restaurants_tried.
38
+
pub key: String,
39
+
}
40
+
pub type Event = atrium_api::types::Object<EventData>;
+4
atproto_api/src/lib.rs
+4
atproto_api/src/lib.rs
+35
atproto_api/src/record.rs
+35
atproto_api/src/record.rs
···
1
+
// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
2
+
//!A collection of known record types.
3
+
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
4
+
#[serde(tag = "$type")]
5
+
pub enum KnownRecord {
6
+
#[serde(rename = "sh.tangled.feed.star")]
7
+
ShTangledFeedStar(Box<crate::sh::tangled::feed::star::Record>),
8
+
#[serde(rename = "xyz.statusphere.status")]
9
+
XyzStatusphereStatus(Box<crate::xyz::statusphere::status::Record>),
10
+
}
11
+
impl From<crate::sh::tangled::feed::star::Record> for KnownRecord {
12
+
fn from(record: crate::sh::tangled::feed::star::Record) -> Self {
13
+
KnownRecord::ShTangledFeedStar(Box::new(record))
14
+
}
15
+
}
16
+
impl From<crate::sh::tangled::feed::star::RecordData> for KnownRecord {
17
+
fn from(record_data: crate::sh::tangled::feed::star::RecordData) -> Self {
18
+
KnownRecord::ShTangledFeedStar(Box::new(record_data.into()))
19
+
}
20
+
}
21
+
impl From<crate::xyz::statusphere::status::Record> for KnownRecord {
22
+
fn from(record: crate::xyz::statusphere::status::Record) -> Self {
23
+
KnownRecord::XyzStatusphereStatus(Box::new(record))
24
+
}
25
+
}
26
+
impl From<crate::xyz::statusphere::status::RecordData> for KnownRecord {
27
+
fn from(record_data: crate::xyz::statusphere::status::RecordData) -> Self {
28
+
KnownRecord::XyzStatusphereStatus(Box::new(record_data.into()))
29
+
}
30
+
}
31
+
impl Into<atrium_api::types::Unknown> for KnownRecord {
32
+
fn into(self) -> atrium_api::types::Unknown {
33
+
atrium_api::types::TryIntoUnknown::try_into_unknown(&self).unwrap()
34
+
}
35
+
}
+3
atproto_api/src/sh.rs
+3
atproto_api/src/sh.rs
+3
atproto_api/src/sh/tangled.rs
+3
atproto_api/src/sh/tangled.rs
+9
atproto_api/src/sh/tangled/feed.rs
+9
atproto_api/src/sh/tangled/feed.rs
···
1
+
// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
2
+
//!Definitions for the `sh.tangled.feed` namespace.
3
+
pub mod star;
4
+
#[derive(Debug)]
5
+
pub struct Star;
6
+
impl atrium_api::types::Collection for Star {
7
+
const NSID: &'static str = "sh.tangled.feed.star";
8
+
type Record = star::Record;
9
+
}
+15
atproto_api/src/sh/tangled/feed/star.rs
+15
atproto_api/src/sh/tangled/feed/star.rs
···
1
+
// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
2
+
//!Definitions for the `sh.tangled.feed.star` namespace.
3
+
use atrium_api::types::TryFromUnknown;
4
+
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
5
+
#[serde(rename_all = "camelCase")]
6
+
pub struct RecordData {
7
+
pub created_at: atrium_api::types::string::Datetime,
8
+
pub subject: String,
9
+
}
10
+
pub type Record = atrium_api::types::Object<RecordData>;
11
+
impl From<atrium_api::types::Unknown> for RecordData {
12
+
fn from(value: atrium_api::types::Unknown) -> Self {
13
+
Self::try_from_unknown(value).unwrap()
14
+
}
15
+
}
+3
atproto_api/src/xyz.rs
+3
atproto_api/src/xyz.rs
+9
atproto_api/src/xyz/statusphere.rs
+9
atproto_api/src/xyz/statusphere.rs
···
1
+
// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
2
+
//!Definitions for the `xyz.statusphere` namespace.
3
+
pub mod status;
4
+
#[derive(Debug)]
5
+
pub struct Status;
6
+
impl atrium_api::types::Collection for Status {
7
+
const NSID: &'static str = "xyz.statusphere.status";
8
+
type Record = status::Record;
9
+
}
+15
atproto_api/src/xyz/statusphere/status.rs
+15
atproto_api/src/xyz/statusphere/status.rs
···
1
+
// @generated - This file is generated by esquema-codegen (forked from atrium-codegen). DO NOT EDIT.
2
+
//!Definitions for the `xyz.statusphere.status` namespace.
3
+
use atrium_api::types::TryFromUnknown;
4
+
#[derive(serde::Serialize, serde::Deserialize, Debug, Clone, PartialEq, Eq)]
5
+
#[serde(rename_all = "camelCase")]
6
+
pub struct RecordData {
7
+
pub created_at: atrium_api::types::string::Datetime,
8
+
pub status: String,
9
+
}
10
+
pub type Record = atrium_api::types::Object<RecordData>;
11
+
impl From<atrium_api::types::Unknown> for RecordData {
12
+
fn from(value: atrium_api::types::Unknown) -> Self {
13
+
Self::try_from_unknown(value).unwrap()
14
+
}
15
+
}
+1
bot/.gitignore
+1
bot/.gitignore
···
1
+
/target
+14
bot/Cargo.toml
+14
bot/Cargo.toml
···
1
+
[package]
2
+
name = "bot"
3
+
version = "0.1.0"
4
+
edition = "2024"
5
+
6
+
[dependencies]
7
+
anyhow = "1.0.98"
8
+
clap.workspace = true
9
+
logic = { workspace = true, features = ["cli"] }
10
+
log.workspace = true
11
+
env_logger = "0.11.8"
12
+
dotenv = "0.15.0"
13
+
tokio.workspace = true
14
+
+129
bot/src/main.rs
+129
bot/src/main.rs
···
1
+
extern crate dotenv;
2
+
3
+
use anyhow::anyhow;
4
+
use clap::{Parser, Subcommand, arg};
5
+
use dotenv::dotenv;
6
+
use logic::emoji::Emoji;
7
+
use logic::{
8
+
Error, HydratedStatus, StatusSphereListener, BotApi, StatusphereIngesterTrait,
9
+
};
10
+
11
+
#[derive(Parser, Debug)]
12
+
#[command(version, about, long_about = None)]
13
+
#[command(propagate_version = true)]
14
+
struct Cli {
15
+
#[command(subcommand)]
16
+
command: Commands,
17
+
}
18
+
19
+
#[derive(Subcommand, Debug)]
20
+
enum Commands {
21
+
/// Create a new Statusphere emoji status
22
+
NewStatus(NewStatusArgs),
23
+
///Shows your current Statusphere status
24
+
CurrentStatus(CurrentStatusArgs),
25
+
/// Starts a JetStream listener listening for Statusphere updates
26
+
Listen,
27
+
}
28
+
29
+
#[derive(Parser, Debug)]
30
+
struct NewStatusArgs {
31
+
#[arg(short, long)]
32
+
emoji: Emoji,
33
+
}
34
+
35
+
#[derive(Parser, Debug)]
36
+
struct CurrentStatusArgs {
37
+
/// If you're not getting your own Statusphere can look up someone else's
38
+
#[arg(long, default_value = None)]
39
+
handle: Option<String>,
40
+
}
41
+
42
+
#[tokio::main]
43
+
async fn main() -> anyhow::Result<()> {
44
+
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
45
+
dotenv().ok();
46
+
47
+
let cli = Cli::parse();
48
+
match &cli.command {
49
+
Commands::NewStatus(args) => {
50
+
//We check .env variables
51
+
let handle = std::env::var("HANDLE")
52
+
.expect("The env variable HANDLE is not set. Check the .env");
53
+
54
+
let password = std::env::var("APP_PASSWORD")
55
+
.expect("The env variable APP_PASSWORD is not set. Check the .env");
56
+
57
+
let status_sphere_client = BotApi::new_logged_in(handle, password).await?;
58
+
match status_sphere_client.new_status(args.emoji.to_emoji()).await {
59
+
Ok(_) => {
60
+
log::info!(
61
+
"You just set {:?} as your current status.",
62
+
args.emoji.to_emoji()
63
+
);
64
+
}
65
+
Err(err) => {
66
+
log::error!("Error setting status: {}", err);
67
+
}
68
+
}
69
+
}
70
+
Commands::CurrentStatus(args) => {
71
+
let status_sphere_client = BotApi::new();
72
+
73
+
let handle = match args.handle.as_ref() {
74
+
None => {
75
+
log::info!("No handle passed, using the one in the env variable HANDLE");
76
+
&match std::env::var("HANDLE") {
77
+
Ok(handle) => handle,
78
+
Err(_) => {
79
+
return Err(anyhow!(
80
+
"You did not pass a handle and The env variable HANDLE is not set"
81
+
));
82
+
}
83
+
}
84
+
}
85
+
Some(handle) => handle,
86
+
};
87
+
88
+
match status_sphere_client.get_latest_status(handle.clone()).await {
89
+
Ok(result) => match result {
90
+
None => {
91
+
log::info!("{} has no status", handle);
92
+
}
93
+
Some(status) => {
94
+
log::info!(
95
+
"{} has a status of {} that was set on {}",
96
+
handle,
97
+
status.status,
98
+
status.created_at.as_str()
99
+
)
100
+
}
101
+
},
102
+
103
+
Err(err) => {
104
+
return Err(anyhow!(err));
105
+
}
106
+
}
107
+
}
108
+
&Commands::Listen => {
109
+
let status_sphere_listener = StatusSphereListener::new(ExampleIngestor);
110
+
status_sphere_listener.listen().await?;
111
+
}
112
+
}
113
+
114
+
Ok(())
115
+
}
116
+
117
+
pub struct ExampleIngestor;
118
+
119
+
impl StatusphereIngesterTrait for ExampleIngestor {
120
+
fn ingest(&self, status: HydratedStatus) -> Result<(), Error> {
121
+
log::info!(
122
+
"{} just posted the status {}",
123
+
status.handle.unwrap_or(status.did),
124
+
//Eh. i'm keeping the name but yeah
125
+
status.status.status
126
+
);
127
+
Ok(())
128
+
}
129
+
}
+1
logic/.gitignore
+1
logic/.gitignore
···
1
+
/target
+44
logic/Cargo.toml
+44
logic/Cargo.toml
···
1
+
[package]
2
+
name = "logic"
3
+
version = "0.1.0"
4
+
edition = "2024"
5
+
6
+
[dependencies]
7
+
atproto_api.workspace = true
8
+
atrium-api.workspace = true
9
+
atrium-common.workspace = true
10
+
atrium-identity.workspace = true
11
+
atrium-oauth.workspace = true
12
+
atrium-xrpc-client.workspace = true
13
+
serde.workspace = true
14
+
reqwest = { version = "0.12", default-features = false, features = ["gzip", "json"] }
15
+
thiserror = "2.0.12"
16
+
anyhow = "1.0.98"
17
+
serde_json = "1.0.140"
18
+
19
+
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
20
+
flume = "0.11.1"
21
+
tokio.workspace = true
22
+
rocketman.workspace = true
23
+
tungstenite = "0.20.1"
24
+
async-trait = "0.1.88"
25
+
clap = { workspace = true, optional = true }
26
+
27
+
[target.'cfg(target_arch = "wasm32")'.dependencies]
28
+
wasm-bindgen.workspace = true
29
+
getrandom = { version = "0.2.16", features = ["js"] }
30
+
web-sys = { workspace = true, features = [
31
+
"BinaryType",
32
+
"Blob",
33
+
"ErrorEvent",
34
+
"FileReader",
35
+
"MessageEvent",
36
+
"ProgressEvent",
37
+
"WebSocket",
38
+
] }
39
+
js-sys = "0.3.77"
40
+
gloo-utils.workspace = true
41
+
42
+
[features]
43
+
default = []
44
+
cli = ["dep:clap"]
+2
logic/bacon.toml
+2
logic/bacon.toml
+106
logic/src/emoji.rs
+106
logic/src/emoji.rs
···
1
+
use serde::Serialize;
2
+
3
+
#[derive(Clone, Debug, Serialize)]
4
+
#[cfg_attr(feature = "cli", derive(clap::ValueEnum))]
5
+
#[serde(rename_all = "kebab-case")]
6
+
pub enum Emoji {
7
+
ThumbsUp,
8
+
ThumbsDown,
9
+
BlueHeart,
10
+
PleadingFace,
11
+
AnguishedFace,
12
+
AngryFace,
13
+
UpsideDownFace,
14
+
WinkingFace,
15
+
SunglassesFace,
16
+
GlassesFace,
17
+
RaisedEyebrowFace,
18
+
PartyingFace,
19
+
CryingFace,
20
+
SteamFromNose,
21
+
ExplodingHead,
22
+
Saluting,
23
+
Skull,
24
+
RaisedFist,
25
+
RockOn,
26
+
Eyes,
27
+
Brain,
28
+
WomanTechnologist,
29
+
PersonTechnologist,
30
+
Ninja,
31
+
Troll,
32
+
Butterfly,
33
+
Rocket,
34
+
Potato,
35
+
Crab,
36
+
}
37
+
38
+
impl Emoji {
39
+
pub fn to_emoji(&self) -> &'static str {
40
+
match self {
41
+
Emoji::ThumbsUp => "👍",
42
+
Emoji::ThumbsDown => "👎",
43
+
Emoji::BlueHeart => "💙",
44
+
Emoji::PleadingFace => "🥹",
45
+
Emoji::AnguishedFace => "😧",
46
+
Emoji::AngryFace => "😤",
47
+
Emoji::UpsideDownFace => "🙃",
48
+
Emoji::WinkingFace => "😉",
49
+
Emoji::SunglassesFace => "😎",
50
+
Emoji::GlassesFace => "🤓",
51
+
Emoji::RaisedEyebrowFace => "🤨",
52
+
Emoji::PartyingFace => "🥳",
53
+
Emoji::CryingFace => "😭",
54
+
Emoji::SteamFromNose => "😤",
55
+
Emoji::ExplodingHead => "🤯",
56
+
Emoji::Saluting => "🫡",
57
+
Emoji::Skull => "💀",
58
+
Emoji::RaisedFist => "✊",
59
+
Emoji::RockOn => "🤘",
60
+
Emoji::Eyes => "👀",
61
+
Emoji::Brain => "🧠",
62
+
Emoji::WomanTechnologist => "👩💻",
63
+
Emoji::PersonTechnologist => "🧑💻",
64
+
Emoji::Ninja => "🥷",
65
+
Emoji::Troll => "🧌",
66
+
Emoji::Butterfly => "🦋",
67
+
Emoji::Rocket => "🚀",
68
+
Emoji::Potato => "🥔",
69
+
Emoji::Crab => "🦀",
70
+
}
71
+
}
72
+
}
73
+
74
+
pub fn emojis() -> Vec<Emoji> {
75
+
vec![
76
+
Emoji::ThumbsUp,
77
+
Emoji::ThumbsDown,
78
+
Emoji::BlueHeart,
79
+
Emoji::PleadingFace,
80
+
Emoji::AnguishedFace,
81
+
Emoji::AngryFace,
82
+
Emoji::UpsideDownFace,
83
+
Emoji::WinkingFace,
84
+
Emoji::SunglassesFace,
85
+
Emoji::GlassesFace,
86
+
Emoji::RaisedEyebrowFace,
87
+
Emoji::PartyingFace,
88
+
Emoji::CryingFace,
89
+
Emoji::SteamFromNose,
90
+
Emoji::ExplodingHead,
91
+
Emoji::Saluting,
92
+
Emoji::Skull,
93
+
Emoji::RaisedFist,
94
+
Emoji::RockOn,
95
+
Emoji::Eyes,
96
+
Emoji::Brain,
97
+
Emoji::WomanTechnologist,
98
+
Emoji::PersonTechnologist,
99
+
Emoji::Ninja,
100
+
Emoji::Troll,
101
+
Emoji::Butterfly,
102
+
Emoji::Rocket,
103
+
Emoji::Potato,
104
+
Emoji::Crab,
105
+
]
106
+
}
+490
logic/src/lib.rs
+490
logic/src/lib.rs
···
1
+
pub mod emoji;
2
+
mod resolver;
3
+
4
+
use crate::Error::RequestError;
5
+
use crate::resolver::ApiDNSTxtResolver;
6
+
#[cfg(not(target_arch = "wasm32"))]
7
+
use async_trait::async_trait;
8
+
use atproto_api::record::KnownRecord;
9
+
use atrium_api::agent::atp_agent::store::MemorySessionStore;
10
+
use atrium_api::agent::atp_agent::{AtpSession, CredentialSession};
11
+
use atrium_api::agent::{Agent, Configure};
12
+
use atrium_api::did_doc::DidDocument;
13
+
use atrium_api::types::string::{Datetime, Did, Handle};
14
+
use atrium_api::types::{Collection, LimitedNonZeroU8};
15
+
use atrium_common::resolver::Resolver;
16
+
use atrium_common::store::memory::MemoryStore;
17
+
use atrium_identity::did::{CommonDidResolver, CommonDidResolverConfig, DEFAULT_PLC_DIRECTORY_URL};
18
+
use atrium_identity::handle::{AtprotoHandleResolver, AtprotoHandleResolverConfig};
19
+
use atrium_oauth::DefaultHttpClient;
20
+
use atrium_xrpc_client::reqwest::ReqwestClient;
21
+
#[cfg(not(target_arch = "wasm32"))]
22
+
use rocketman::{
23
+
connection::JetstreamConnection, handler, ingestion::LexiconIngestor,
24
+
options::JetstreamOptions, types::event::Operation,
25
+
};
26
+
use serde::{Deserialize, Serialize};
27
+
#[cfg(not(target_arch = "wasm32"))]
28
+
use std::collections::HashMap;
29
+
use std::sync::Arc;
30
+
#[cfg(not(target_arch = "wasm32"))]
31
+
use std::sync::Mutex;
32
+
use thiserror::Error;
33
+
#[cfg(not(target_arch = "wasm32"))]
34
+
use tungstenite::Message;
35
+
#[cfg(target_arch = "wasm32")]
36
+
use wasm_bindgen::{JsCast, closure::Closure};
37
+
#[cfg(target_arch = "wasm32")]
38
+
use web_sys::{ErrorEvent, MessageEvent, WebSocket};
39
+
40
+
#[derive(Debug, Error)]
41
+
pub enum Error {
42
+
#[error("General error: {0}")]
43
+
GeneralError(String),
44
+
#[error("Login error: {0}")]
45
+
LoginError(String),
46
+
#[error("Write error: {0}")]
47
+
WriteError(String),
48
+
#[error("Request error: {0}")]
49
+
RequestError(String),
50
+
#[error("Authentication required")]
51
+
NeedsAuthentication,
52
+
#[error("Parse error: {0}")]
53
+
ParseError(String),
54
+
#[error("Jet stream: {0}")]
55
+
JetstreamError(String),
56
+
}
57
+
58
+
#[derive(Clone)]
59
+
pub struct BotApi {
60
+
agent: Arc<Agent<CredentialSession<MemoryStore<(), AtpSession>, ReqwestClient>>>,
61
+
handle_resolver: Arc<AtprotoHandleResolver<ApiDNSTxtResolver, DefaultHttpClient>>,
62
+
did_resolver: Arc<CommonDidResolver<DefaultHttpClient>>,
63
+
authenticated: bool,
64
+
}
65
+
66
+
fn get_new_session() -> CredentialSession<MemoryStore<(), AtpSession>, ReqwestClient> {
67
+
CredentialSession::new(
68
+
ReqwestClient::new("https://bsky.social"),
69
+
MemorySessionStore::default(),
70
+
)
71
+
}
72
+
73
+
/// Parses the PDS url from the DidDocument
74
+
fn get_pds_from_doc<'a>(doc: DidDocument) -> Result<String, Error> {
75
+
Ok(doc
76
+
.service
77
+
.as_ref()
78
+
.and_then(|services| {
79
+
services
80
+
.iter()
81
+
.find(|service| service.r#type == "AtprotoPersonalDataServer")
82
+
.map(|service| service.service_endpoint.clone())
83
+
})
84
+
.ok_or_else(|| Error::ParseError("No valid PDS URL found for this DID".to_string()))?)
85
+
}
86
+
87
+
impl BotApi {
88
+
/// Creates a new StatusphereApi to make unauthenticated calls to atproto repos
89
+
pub fn new() -> Self {
90
+
let session = get_new_session();
91
+
let agent = Agent::new(session);
92
+
let http_client = Arc::new(DefaultHttpClient::default());
93
+
let handle_resolver = AtprotoHandleResolver::new(AtprotoHandleResolverConfig {
94
+
dns_txt_resolver: ApiDNSTxtResolver::default(),
95
+
http_client: Arc::new(DefaultHttpClient::default()),
96
+
});
97
+
let did_resolver = CommonDidResolver::new(CommonDidResolverConfig {
98
+
plc_directory_url: DEFAULT_PLC_DIRECTORY_URL.to_string(),
99
+
http_client,
100
+
});
101
+
Self {
102
+
agent: Arc::new(agent),
103
+
handle_resolver: Arc::new(handle_resolver),
104
+
did_resolver: Arc::new(did_resolver),
105
+
authenticated: false,
106
+
}
107
+
}
108
+
109
+
/// Creates a new StatusphereAPi to make authenticated requests to your atproto repo
110
+
pub async fn new_logged_in(handle: String, password: String) -> Result<Self, Error> {
111
+
let session = get_new_session();
112
+
if let Err(error) = session.login(&handle, &password).await {
113
+
return Err(Error::LoginError(error.to_string()));
114
+
}
115
+
let agent = Agent::new(session);
116
+
let handle_resolver = AtprotoHandleResolver::new(AtprotoHandleResolverConfig {
117
+
dns_txt_resolver: ApiDNSTxtResolver::default(),
118
+
http_client: Arc::new(DefaultHttpClient::default()),
119
+
});
120
+
121
+
let did_resolver = CommonDidResolver::new(CommonDidResolverConfig {
122
+
plc_directory_url: DEFAULT_PLC_DIRECTORY_URL.to_string(),
123
+
http_client: Arc::new(DefaultHttpClient::default()),
124
+
});
125
+
126
+
Ok(Self {
127
+
agent: Arc::new(agent),
128
+
handle_resolver: Arc::new(handle_resolver),
129
+
did_resolver: Arc::new(did_resolver),
130
+
authenticated: true,
131
+
})
132
+
}
133
+
134
+
/// Updates a user's Statusphere status on their atproto repo
135
+
pub async fn new_status(&self, status: &str) -> Result<(), Error> {
136
+
if !self.authenticated {
137
+
return Err(Error::NeedsAuthentication);
138
+
}
139
+
140
+
let status: KnownRecord = atproto_api::xyz::statusphere::status::RecordData {
141
+
created_at: Datetime::now(),
142
+
status: status.to_string(),
143
+
}
144
+
.into();
145
+
146
+
let did = self.agent.did().await.unwrap();
147
+
match self
148
+
.agent
149
+
.api
150
+
.com
151
+
.atproto
152
+
.repo
153
+
.create_record(
154
+
atrium_api::com::atproto::repo::create_record::InputData {
155
+
collection: atproto_api::xyz::statusphere::Status::NSID.parse().unwrap(),
156
+
record: status.into(),
157
+
repo: did.clone().parse().unwrap(),
158
+
rkey: None,
159
+
swap_commit: None,
160
+
validate: None,
161
+
}
162
+
.into(),
163
+
)
164
+
.await
165
+
{
166
+
Ok(_) => Ok(()),
167
+
Err(err) => Err(Error::WriteError(err.to_string())),
168
+
}
169
+
}
170
+
171
+
/// Gets the users latest Statusphere status if they do not have one returns None
172
+
pub async fn get_latest_status(
173
+
&self,
174
+
handle: String,
175
+
) -> Result<Option<atproto_api::xyz::statusphere::status::RecordData>, Error> {
176
+
let handle = match Handle::new(handle) {
177
+
Ok(handle) => handle,
178
+
Err(err) => Err(Error::ParseError(err.to_string()))?,
179
+
};
180
+
181
+
let did = match self.handle_resolver.resolve(&handle).await {
182
+
Ok(did) => did,
183
+
Err(err) => {
184
+
return Err(RequestError(format!(
185
+
"Could not resolve the users handle: {:?}",
186
+
err.to_string()
187
+
)))?;
188
+
}
189
+
};
190
+
191
+
let pds_url = match self.did_resolver.resolve(&did).await {
192
+
Ok(did_doc) => get_pds_from_doc(did_doc)?,
193
+
Err(err) => Err(RequestError(err.to_string()))?,
194
+
};
195
+
196
+
//changing the agent to call the users pds
197
+
self.agent.configure_endpoint(pds_url);
198
+
199
+
let result = self
200
+
.agent
201
+
.api
202
+
.com
203
+
.atproto
204
+
.repo
205
+
.list_records(
206
+
atrium_api::com::atproto::repo::list_records::ParametersData {
207
+
collection: atproto_api::xyz::statusphere::Status::NSID.parse().unwrap(),
208
+
cursor: None,
209
+
limit: Some(LimitedNonZeroU8::<100>::try_from(10_u8).unwrap()),
210
+
repo: handle.parse().unwrap(),
211
+
reverse: None,
212
+
}
213
+
.into(),
214
+
)
215
+
.await
216
+
.map_err(|e| Error::RequestError(e.to_string()))?;
217
+
218
+
if let Some(record) = result.records.first() {
219
+
let status: atproto_api::xyz::statusphere::status::RecordData =
220
+
atproto_api::xyz::statusphere::status::RecordData::from(record.value.clone());
221
+
return Ok(Some(status));
222
+
}
223
+
Ok(None)
224
+
}
225
+
226
+
///Takes a users handle like @baileytownsend.dev and resolves it ot the did
227
+
pub async fn resolve_handle(&self, handle: String) -> Result<Did, Error> {
228
+
let handle = Handle::new(handle).map_err(|e| Error::ParseError(e.to_string()))?;
229
+
self.handle_resolver
230
+
.resolve(&handle)
231
+
.await
232
+
.map_err(|e| Error::RequestError(e.to_string()))
233
+
}
234
+
235
+
/// Takes a did and returns a handle
236
+
pub async fn get_handle(&self, did: String) -> Result<String, Error> {
237
+
let did = Did::new(did).map_err(|e| Error::ParseError(e.to_string()))?;
238
+
match self.did_resolver.resolve(&did).await {
239
+
Ok(did_doc) => {
240
+
match did_doc.also_known_as {
241
+
None => Err(Error::ParseError(
242
+
"No also_known_as field found".to_string(),
243
+
))?,
244
+
Some(also_known_as) => {
245
+
match also_known_as.is_empty() {
246
+
true => Err(Error::ParseError("also_known_as is empty".to_string()))?,
247
+
false => {
248
+
//also_known as a list starts the array with the highest priority handle
249
+
let formatted_handle =
250
+
format!("@{}", also_known_as[0]).replace("at://", "");
251
+
Ok(formatted_handle)
252
+
}
253
+
}
254
+
}
255
+
}
256
+
}
257
+
Err(err) => Err(Error::ParseError(err.to_string()))?,
258
+
}
259
+
}
260
+
}
261
+
262
+
/// A Jetstream listener using Rocketman
263
+
#[cfg(not(target_arch = "wasm32"))]
264
+
pub struct StatusSphereListener {
265
+
pub cursor: Arc<Mutex<Option<u64>>>,
266
+
pub ingestors: Arc<HashMap<String, Box<dyn LexiconIngestor + Send + Sync>>>,
267
+
jetstream_connection: JetstreamConnection,
268
+
pub msg_rx: flume::Receiver<Message>,
269
+
pub reconnect_tx: flume::Sender<()>,
270
+
}
271
+
272
+
/// The data we get back from handlers of the Jetstream.
273
+
#[derive(Serialize, Deserialize)]
274
+
pub struct HydratedStatus {
275
+
///Handle may not always be hydrated depending on the target.
276
+
pub handle: Option<String>,
277
+
pub did: String,
278
+
pub status: atproto_api::xyz::statusphere::status::RecordData,
279
+
}
280
+
281
+
/// Trait to share some similar types between jetstream implementations
282
+
pub trait StatusphereIngesterTrait: Send + Sync {
283
+
fn ingest(&self, status: HydratedStatus) -> Result<(), Error>;
284
+
}
285
+
286
+
/// our non wasm32 Injester
287
+
#[cfg(not(target_arch = "wasm32"))]
288
+
pub struct StatusphereIngester<F>
289
+
where
290
+
F: StatusphereIngesterTrait,
291
+
{
292
+
status_sphere_agent: BotApi,
293
+
handler: F,
294
+
}
295
+
296
+
#[cfg(not(target_arch = "wasm32"))]
297
+
impl StatusSphereListener {
298
+
pub fn new<F>(handler: F) -> Self
299
+
where
300
+
F: StatusphereIngesterTrait + Send + Sync + 'static,
301
+
{
302
+
// init the builder
303
+
let opts = JetstreamOptions::builder()
304
+
// your EXACT nsids
305
+
.wanted_collections(vec![
306
+
atproto_api::xyz::statusphere::Status::NSID.to_string(),
307
+
])
308
+
.build();
309
+
// create the jetstream connector
310
+
let jetstream = JetstreamConnection::new(opts);
311
+
312
+
// tracks the last message we've processed
313
+
let cursor: Arc<Mutex<Option<u64>>> = Arc::new(Mutex::new(None));
314
+
315
+
// get channels
316
+
let msg_rx = jetstream.get_msg_rx();
317
+
let reconnect_tx = jetstream.get_reconnect_tx();
318
+
319
+
// create your ingestors
320
+
let mut injestors: HashMap<String, Box<dyn LexiconIngestor + Send + Sync>> = HashMap::new();
321
+
322
+
injestors.insert(
323
+
atproto_api::xyz::statusphere::Status::NSID.to_string(),
324
+
Box::new(StatusphereIngester {
325
+
status_sphere_agent: BotApi::new(),
326
+
handler,
327
+
}),
328
+
);
329
+
Self {
330
+
cursor,
331
+
ingestors: Arc::new(injestors),
332
+
jetstream_connection: jetstream,
333
+
msg_rx,
334
+
reconnect_tx,
335
+
}
336
+
}
337
+
338
+
/// Start listening to the jetstream for new statusphere updates
339
+
pub async fn listen(&self) -> Result<(), Error> {
340
+
let msg_rx = self.msg_rx.clone();
341
+
let ingestors = Arc::clone(&self.ingestors);
342
+
let reconnect_tx = self.reconnect_tx.clone();
343
+
let cursor = self.cursor.clone();
344
+
345
+
tokio::spawn(async move {
346
+
while let Ok(message) = msg_rx.recv_async().await {
347
+
if let Err(e) = handler::handle_message(
348
+
message,
349
+
&ingestors,
350
+
reconnect_tx.clone(),
351
+
cursor.clone(),
352
+
)
353
+
.await
354
+
{
355
+
//Just error internally since this is a template
356
+
eprintln!("Error processing message: {}", e);
357
+
};
358
+
}
359
+
});
360
+
361
+
// connect to jetstream
362
+
// retries internally, but may fail if there is an extreme error.
363
+
self.jetstream_connection
364
+
.connect(self.cursor.clone())
365
+
.await
366
+
.map_err(|e| Error::GeneralError(e.to_string()))
367
+
}
368
+
}
369
+
370
+
/// Shows a Jestream Listener for desktop or server side
371
+
#[cfg(not(target_arch = "wasm32"))]
372
+
#[async_trait]
373
+
impl<F: StatusphereIngesterTrait + Send + Sync> LexiconIngestor for StatusphereIngester<F> {
374
+
async fn ingest(
375
+
&self,
376
+
message: rocketman::types::event::Event<serde_json::Value>,
377
+
) -> anyhow::Result<()> {
378
+
if let Some(commit) = &message.commit {
379
+
let handle = self
380
+
.status_sphere_agent
381
+
.get_handle(message.did.clone())
382
+
.await?;
383
+
384
+
match commit.operation {
385
+
Operation::Create | Operation::Update => {
386
+
if let Some(record) = &commit.record {
387
+
let status_at_proto_record = serde_json::from_value::<
388
+
atproto_api::xyz::statusphere::status::RecordData,
389
+
>(record.clone())?;
390
+
391
+
if let Some(ref _cid) = commit.cid {
392
+
self.handler.ingest(HydratedStatus {
393
+
handle: Some(handle),
394
+
did: message.did,
395
+
status: status_at_proto_record.clone(),
396
+
})?;
397
+
}
398
+
Ok::<(), anyhow::Error>(())
399
+
} else {
400
+
Ok::<(), anyhow::Error>(())
401
+
}
402
+
}
403
+
Operation::Delete => Ok::<(), anyhow::Error>(()),
404
+
}
405
+
} else {
406
+
Ok(())
407
+
}
408
+
}
409
+
}
410
+
411
+
#[cfg(target_arch = "wasm32")]
412
+
/// Just a simple jetstream listener with a lot less features than Rocketman but just to show it can happen and sharing code
413
+
pub fn listen<F>(on_message_handler: F) -> Result<(), Error>
414
+
where
415
+
F: StatusphereIngesterTrait + 'static,
416
+
{
417
+
// Connect to an echo server
418
+
let ws = WebSocket::new(
419
+
"wss://jetstream1.us-east.bsky.network/subscribe?wantedCollections=xyz.statusphere.status",
420
+
)
421
+
//HACK prob dont want that unwrap either, but this is just a template
422
+
.map_err(|e| Error::GeneralError(String::try_from(e).unwrap()))?;
423
+
// For small binary messages, like CBOR, Arraybuffer is more efficient than Blob handling
424
+
ws.set_binary_type(web_sys::BinaryType::Arraybuffer);
425
+
// create callback
426
+
let on_message = Closure::<dyn FnMut(_)>::new(move |e: MessageEvent| {
427
+
//We're just handling txt to make it easy
428
+
if let Ok(txt) = e.data().dyn_into::<js_sys::JsString>() {
429
+
//HACK .into_Serde() on jsvalue of e.data() was not working for some reason
430
+
let txt_str = String::from(txt);
431
+
let envelope: WasmEvent<atproto_api::xyz::statusphere::status::RecordData> =
432
+
serde_json::from_str(&txt_str).unwrap();
433
+
if let Some(commit) = envelope.commit {
434
+
if let Some(record) = commit.record {
435
+
let _ = on_message_handler.ingest(HydratedStatus {
436
+
handle: None,
437
+
did: envelope.did,
438
+
status: record,
439
+
});
440
+
}
441
+
}
442
+
}
443
+
});
444
+
445
+
// set message event handler on WebSocket
446
+
ws.set_onmessage(Some(on_message.as_ref().unchecked_ref()));
447
+
// forget the callback to keep it alive
448
+
on_message.forget();
449
+
450
+
let onerror_callback = Closure::<dyn FnMut(_)>::new(move |_e: ErrorEvent| {
451
+
//HACK would put an actual error handler here
452
+
});
453
+
ws.set_onerror(Some(onerror_callback.as_ref().unchecked_ref()));
454
+
onerror_callback.forget();
455
+
let onopen_callback = Closure::<dyn FnMut()>::new(move || {
456
+
//HACK
457
+
});
458
+
ws.set_onopen(Some(onopen_callback.as_ref().unchecked_ref()));
459
+
onopen_callback.forget();
460
+
Ok(())
461
+
}
462
+
463
+
///Shamelessly taken from rocketman. reimplmenting because Rocketman is not wasm compatible
464
+
/// Ideally you would have the same types between packages but just a proof of concept
465
+
/// https://github.com/espeon/cadet/blob/f034b19b73df4ac97e3ae54162d48883f81ff168/rocketman/src/types/event.rs#L14
466
+
#[derive(Debug, Serialize, Deserialize)]
467
+
#[serde(rename_all = "snake_case")]
468
+
struct WasmEvent<T> {
469
+
pub did: String,
470
+
pub commit: Option<WasmCommit<T>>,
471
+
}
472
+
473
+
#[derive(Debug, Serialize, Deserialize)]
474
+
#[serde(rename_all = "camelCase")]
475
+
struct WasmCommit<T> {
476
+
pub rev: String,
477
+
pub operation: WasmOperation,
478
+
pub collection: String,
479
+
pub rkey: String,
480
+
pub record: Option<T>,
481
+
pub cid: Option<String>,
482
+
}
483
+
//
484
+
#[derive(Debug, Serialize, Deserialize)]
485
+
#[serde(rename_all = "lowercase")]
486
+
enum WasmOperation {
487
+
Create,
488
+
Update,
489
+
Delete,
490
+
}
+83
logic/src/resolver.rs
+83
logic/src/resolver.rs
···
1
+
#[allow(dead_code)]
2
+
use atrium_identity::handle::DnsTxtResolver;
3
+
use reqwest::Client;
4
+
use serde::{Deserialize, Serialize};
5
+
use std::sync::Arc;
6
+
7
+
/// Setup for dns resolver for the handle resolver
8
+
pub struct ApiDNSTxtResolver {
9
+
client: Arc<Client>,
10
+
}
11
+
12
+
impl Default for ApiDNSTxtResolver {
13
+
fn default() -> Self {
14
+
Self {
15
+
client: Arc::new(Client::new()),
16
+
}
17
+
}
18
+
}
19
+
20
+
// curl --http2 --header "accept: application/dns-json" "https://one.one.one.one/dns-query?name=_atproto.baileytownsend.dev&type=TXT"
21
+
impl DnsTxtResolver for ApiDNSTxtResolver {
22
+
async fn resolve(
23
+
&self,
24
+
query: &str,
25
+
) -> core::result::Result<Vec<String>, Box<dyn std::error::Error + Send + Sync + 'static>> {
26
+
let request_url = format!(
27
+
"https://one.one.one.one/dns-query?name={}&type=TXT",
28
+
query.to_lowercase()
29
+
);
30
+
31
+
let resp = self
32
+
.client
33
+
.get(request_url)
34
+
.header("accept", "application/dns-json")
35
+
.send()
36
+
.await?;
37
+
if !resp.status().is_success() {
38
+
return Err(format!("HTTP request failed with status: {}", resp.status()).into());
39
+
}
40
+
41
+
let resp: DnsResponse = resp
42
+
.json()
43
+
.await
44
+
.map_err(|e| Box::new(e) as Box<dyn std::error::Error + Send + Sync + 'static>)?;
45
+
46
+
let response_data = resp
47
+
.Answer
48
+
.iter()
49
+
.map(|a| a.data.clone().replace("\"", ""))
50
+
.collect::<Vec<String>>();
51
+
Ok(response_data)
52
+
}
53
+
}
54
+
55
+
#[derive(Debug, Serialize, Deserialize)]
56
+
#[allow(non_snake_case)]
57
+
pub struct DnsResponse {
58
+
pub Status: i32,
59
+
pub TC: bool,
60
+
pub RD: bool,
61
+
pub RA: bool,
62
+
pub AD: bool,
63
+
pub CD: bool,
64
+
pub Question: Vec<Question>,
65
+
pub Answer: Vec<Answer>,
66
+
}
67
+
68
+
#[derive(Debug, Serialize, Deserialize)]
69
+
pub struct Question {
70
+
pub name: String,
71
+
#[serde(rename = "type")]
72
+
pub type_: i32,
73
+
}
74
+
75
+
#[derive(Debug, Serialize, Deserialize)]
76
+
#[allow(non_snake_case)]
77
+
pub struct Answer {
78
+
pub name: String,
79
+
#[serde(rename = "type")]
80
+
pub type_: i32,
81
+
pub TTL: i32,
82
+
pub data: String,
83
+
}