- Add firehose.rs that processes events
- Add postgres db connection that saves the events (can turn to timescale or something silly later)
+1291
-52
Cargo.lock
+1291
-52
Cargo.lock
···
17
17
source = "registry+https://github.com/rust-lang/crates.io-index"
18
18
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
19
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
+
"getrandom 0.3.3",
28
+
"once_cell",
29
+
"version_check",
30
+
"zerocopy",
31
+
]
32
+
33
+
[[package]]
34
+
name = "allocator-api2"
35
+
version = "0.2.21"
36
+
source = "registry+https://github.com/rust-lang/crates.io-index"
37
+
checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
38
+
39
+
[[package]]
40
+
name = "android_system_properties"
41
+
version = "0.1.5"
42
+
source = "registry+https://github.com/rust-lang/crates.io-index"
43
+
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
44
+
dependencies = [
45
+
"libc",
46
+
]
47
+
48
+
[[package]]
49
+
name = "arrayref"
50
+
version = "0.3.9"
51
+
source = "registry+https://github.com/rust-lang/crates.io-index"
52
+
checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb"
53
+
54
+
[[package]]
55
+
name = "arrayvec"
56
+
version = "0.7.6"
57
+
source = "registry+https://github.com/rust-lang/crates.io-index"
58
+
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
59
+
60
+
[[package]]
61
+
name = "async-stream"
62
+
version = "0.3.6"
63
+
source = "registry+https://github.com/rust-lang/crates.io-index"
64
+
checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476"
65
+
dependencies = [
66
+
"async-stream-impl",
67
+
"futures-core",
68
+
"pin-project-lite",
69
+
]
70
+
71
+
[[package]]
72
+
name = "async-stream-impl"
73
+
version = "0.3.6"
74
+
source = "registry+https://github.com/rust-lang/crates.io-index"
75
+
checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d"
76
+
dependencies = [
77
+
"proc-macro2",
78
+
"quote",
79
+
"syn 2.0.106",
80
+
]
81
+
82
+
[[package]]
83
+
name = "atoi"
84
+
version = "2.0.0"
85
+
source = "registry+https://github.com/rust-lang/crates.io-index"
86
+
checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
87
+
dependencies = [
88
+
"num-traits",
89
+
]
90
+
20
91
[[package]]
21
92
name = "atomic-waker"
22
93
version = "1.1.2"
···
95
166
"miniz_oxide",
96
167
"object",
97
168
"rustc-demangle",
98
-
"windows-targets",
169
+
"windows-targets 0.52.6",
99
170
]
100
171
172
+
[[package]]
173
+
name = "base-x"
174
+
version = "0.2.11"
175
+
source = "registry+https://github.com/rust-lang/crates.io-index"
176
+
checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270"
177
+
178
+
[[package]]
179
+
name = "base256emoji"
180
+
version = "1.0.2"
181
+
source = "registry+https://github.com/rust-lang/crates.io-index"
182
+
checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c"
183
+
dependencies = [
184
+
"const-str",
185
+
"match-lookup",
186
+
]
187
+
188
+
[[package]]
189
+
name = "base64"
190
+
version = "0.21.7"
191
+
source = "registry+https://github.com/rust-lang/crates.io-index"
192
+
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
193
+
101
194
[[package]]
102
195
name = "base64"
103
196
version = "0.22.1"
104
197
source = "registry+https://github.com/rust-lang/crates.io-index"
105
198
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
106
199
200
+
[[package]]
201
+
name = "base64ct"
202
+
version = "1.8.0"
203
+
source = "registry+https://github.com/rust-lang/crates.io-index"
204
+
checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba"
205
+
107
206
[[package]]
108
207
name = "bitflags"
109
208
version = "2.9.4"
110
209
source = "registry+https://github.com/rust-lang/crates.io-index"
111
210
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
211
+
dependencies = [
212
+
"serde",
213
+
]
214
+
215
+
[[package]]
216
+
name = "blake2b_simd"
217
+
version = "1.0.3"
218
+
source = "registry+https://github.com/rust-lang/crates.io-index"
219
+
checksum = "06e903a20b159e944f91ec8499fe1e55651480c541ea0a584f5d967c49ad9d99"
220
+
dependencies = [
221
+
"arrayref",
222
+
"arrayvec",
223
+
"constant_time_eq",
224
+
]
112
225
113
226
[[package]]
114
227
name = "block-buffer"
···
125
238
source = "registry+https://github.com/rust-lang/crates.io-index"
126
239
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
127
240
241
+
[[package]]
242
+
name = "byteorder"
243
+
version = "1.5.0"
244
+
source = "registry+https://github.com/rust-lang/crates.io-index"
245
+
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
246
+
128
247
[[package]]
129
248
name = "bytes"
130
249
version = "1.10.1"
131
250
source = "registry+https://github.com/rust-lang/crates.io-index"
132
251
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
133
252
253
+
[[package]]
254
+
name = "cbor4ii"
255
+
version = "0.2.14"
256
+
source = "registry+https://github.com/rust-lang/crates.io-index"
257
+
checksum = "b544cf8c89359205f4f990d0e6f3828db42df85b5dac95d09157a250eb0749c4"
258
+
dependencies = [
259
+
"serde",
260
+
]
261
+
134
262
[[package]]
135
263
name = "cc"
136
264
version = "1.2.39"
···
147
275
source = "registry+https://github.com/rust-lang/crates.io-index"
148
276
checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
149
277
278
+
[[package]]
279
+
name = "chrono"
280
+
version = "0.4.42"
281
+
source = "registry+https://github.com/rust-lang/crates.io-index"
282
+
checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2"
283
+
dependencies = [
284
+
"iana-time-zone",
285
+
"js-sys",
286
+
"num-traits",
287
+
"wasm-bindgen",
288
+
"windows-link 0.2.0",
289
+
]
290
+
291
+
[[package]]
292
+
name = "cid"
293
+
version = "0.11.1"
294
+
source = "registry+https://github.com/rust-lang/crates.io-index"
295
+
checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a"
296
+
dependencies = [
297
+
"core2",
298
+
"multibase",
299
+
"multihash",
300
+
"serde",
301
+
"serde_bytes",
302
+
"unsigned-varint",
303
+
]
304
+
305
+
[[package]]
306
+
name = "const-oid"
307
+
version = "0.9.6"
308
+
source = "registry+https://github.com/rust-lang/crates.io-index"
309
+
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
310
+
311
+
[[package]]
312
+
name = "const-str"
313
+
version = "0.4.3"
314
+
source = "registry+https://github.com/rust-lang/crates.io-index"
315
+
checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3"
316
+
317
+
[[package]]
318
+
name = "constant_time_eq"
319
+
version = "0.3.1"
320
+
source = "registry+https://github.com/rust-lang/crates.io-index"
321
+
checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6"
322
+
150
323
[[package]]
151
324
name = "core-foundation"
152
325
version = "0.9.4"
···
163
336
source = "registry+https://github.com/rust-lang/crates.io-index"
164
337
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
165
338
339
+
[[package]]
340
+
name = "core2"
341
+
version = "0.4.0"
342
+
source = "registry+https://github.com/rust-lang/crates.io-index"
343
+
checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
344
+
dependencies = [
345
+
"memchr",
346
+
]
347
+
166
348
[[package]]
167
349
name = "cpufeatures"
168
350
version = "0.2.17"
···
172
354
"libc",
173
355
]
174
356
357
+
[[package]]
358
+
name = "crc"
359
+
version = "3.3.0"
360
+
source = "registry+https://github.com/rust-lang/crates.io-index"
361
+
checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675"
362
+
dependencies = [
363
+
"crc-catalog",
364
+
]
365
+
366
+
[[package]]
367
+
name = "crc-catalog"
368
+
version = "2.4.0"
369
+
source = "registry+https://github.com/rust-lang/crates.io-index"
370
+
checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
371
+
372
+
[[package]]
373
+
name = "crossbeam-queue"
374
+
version = "0.3.12"
375
+
source = "registry+https://github.com/rust-lang/crates.io-index"
376
+
checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115"
377
+
dependencies = [
378
+
"crossbeam-utils",
379
+
]
380
+
381
+
[[package]]
382
+
name = "crossbeam-utils"
383
+
version = "0.8.21"
384
+
source = "registry+https://github.com/rust-lang/crates.io-index"
385
+
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
386
+
175
387
[[package]]
176
388
name = "crypto-common"
177
389
version = "0.1.6"
···
188
400
source = "registry+https://github.com/rust-lang/crates.io-index"
189
401
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
190
402
403
+
[[package]]
404
+
name = "data-encoding-macro"
405
+
version = "0.1.18"
406
+
source = "registry+https://github.com/rust-lang/crates.io-index"
407
+
checksum = "47ce6c96ea0102f01122a185683611bd5ac8d99e62bc59dd12e6bda344ee673d"
408
+
dependencies = [
409
+
"data-encoding",
410
+
"data-encoding-macro-internal",
411
+
]
412
+
413
+
[[package]]
414
+
name = "data-encoding-macro-internal"
415
+
version = "0.1.16"
416
+
source = "registry+https://github.com/rust-lang/crates.io-index"
417
+
checksum = "8d162beedaa69905488a8da94f5ac3edb4dd4788b732fadb7bd120b2625c1976"
418
+
dependencies = [
419
+
"data-encoding",
420
+
"syn 2.0.106",
421
+
]
422
+
423
+
[[package]]
424
+
name = "der"
425
+
version = "0.7.10"
426
+
source = "registry+https://github.com/rust-lang/crates.io-index"
427
+
checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb"
428
+
dependencies = [
429
+
"const-oid",
430
+
"pem-rfc7468",
431
+
"zeroize",
432
+
]
433
+
191
434
[[package]]
192
435
name = "digest"
193
436
version = "0.10.7"
···
195
438
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
196
439
dependencies = [
197
440
"block-buffer",
441
+
"const-oid",
198
442
"crypto-common",
443
+
"subtle",
199
444
]
200
445
201
446
[[package]]
···
206
451
dependencies = [
207
452
"proc-macro2",
208
453
"quote",
209
-
"syn",
454
+
"syn 2.0.106",
455
+
]
456
+
457
+
[[package]]
458
+
name = "dotenvy"
459
+
version = "0.15.7"
460
+
source = "registry+https://github.com/rust-lang/crates.io-index"
461
+
checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
462
+
463
+
[[package]]
464
+
name = "either"
465
+
version = "1.15.0"
466
+
source = "registry+https://github.com/rust-lang/crates.io-index"
467
+
checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719"
468
+
dependencies = [
469
+
"serde",
210
470
]
211
471
212
472
[[package]]
···
234
494
"windows-sys 0.61.1",
235
495
]
236
496
497
+
[[package]]
498
+
name = "etcetera"
499
+
version = "0.8.0"
500
+
source = "registry+https://github.com/rust-lang/crates.io-index"
501
+
checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943"
502
+
dependencies = [
503
+
"cfg-if",
504
+
"home",
505
+
"windows-sys 0.48.0",
506
+
]
507
+
508
+
[[package]]
509
+
name = "event-listener"
510
+
version = "2.5.3"
511
+
source = "registry+https://github.com/rust-lang/crates.io-index"
512
+
checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
513
+
237
514
[[package]]
238
515
name = "fastrand"
239
516
version = "2.3.0"
···
246
523
source = "registry+https://github.com/rust-lang/crates.io-index"
247
524
checksum = "1ced73b1dacfc750a6db6c0a0c3a3853c8b41997e2e2c563dc90804ae6867959"
248
525
526
+
[[package]]
527
+
name = "flume"
528
+
version = "0.11.1"
529
+
source = "registry+https://github.com/rust-lang/crates.io-index"
530
+
checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095"
531
+
dependencies = [
532
+
"futures-core",
533
+
"futures-sink",
534
+
"spin",
535
+
]
536
+
249
537
[[package]]
250
538
name = "fnv"
251
539
version = "1.0.7"
···
318
606
"futures-util",
319
607
]
320
608
609
+
[[package]]
610
+
name = "futures-intrusive"
611
+
version = "0.5.0"
612
+
source = "registry+https://github.com/rust-lang/crates.io-index"
613
+
checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
614
+
dependencies = [
615
+
"futures-core",
616
+
"lock_api",
617
+
"parking_lot",
618
+
]
619
+
321
620
[[package]]
322
621
name = "futures-io"
323
622
version = "0.3.31"
···
332
631
dependencies = [
333
632
"proc-macro2",
334
633
"quote",
335
-
"syn",
634
+
"syn 2.0.106",
336
635
]
337
636
338
637
[[package]]
···
423
722
"tracing",
424
723
]
425
724
725
+
[[package]]
726
+
name = "half"
727
+
version = "1.8.3"
728
+
source = "registry+https://github.com/rust-lang/crates.io-index"
729
+
checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403"
730
+
731
+
[[package]]
732
+
name = "hashbrown"
733
+
version = "0.14.5"
734
+
source = "registry+https://github.com/rust-lang/crates.io-index"
735
+
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
736
+
dependencies = [
737
+
"ahash",
738
+
"allocator-api2",
739
+
]
740
+
426
741
[[package]]
427
742
name = "hashbrown"
428
743
version = "0.16.0"
429
744
source = "registry+https://github.com/rust-lang/crates.io-index"
430
745
checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d"
431
746
747
+
[[package]]
748
+
name = "hashlink"
749
+
version = "0.8.4"
750
+
source = "registry+https://github.com/rust-lang/crates.io-index"
751
+
checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
752
+
dependencies = [
753
+
"hashbrown 0.14.5",
754
+
]
755
+
756
+
[[package]]
757
+
name = "heck"
758
+
version = "0.4.1"
759
+
source = "registry+https://github.com/rust-lang/crates.io-index"
760
+
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
761
+
dependencies = [
762
+
"unicode-segmentation",
763
+
]
764
+
765
+
[[package]]
766
+
name = "hex"
767
+
version = "0.4.3"
768
+
source = "registry+https://github.com/rust-lang/crates.io-index"
769
+
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
770
+
771
+
[[package]]
772
+
name = "hkdf"
773
+
version = "0.12.4"
774
+
source = "registry+https://github.com/rust-lang/crates.io-index"
775
+
checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
776
+
dependencies = [
777
+
"hmac",
778
+
]
779
+
780
+
[[package]]
781
+
name = "hmac"
782
+
version = "0.12.1"
783
+
source = "registry+https://github.com/rust-lang/crates.io-index"
784
+
checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
785
+
dependencies = [
786
+
"digest",
787
+
]
788
+
789
+
[[package]]
790
+
name = "home"
791
+
version = "0.5.11"
792
+
source = "registry+https://github.com/rust-lang/crates.io-index"
793
+
checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf"
794
+
dependencies = [
795
+
"windows-sys 0.59.0",
796
+
]
797
+
432
798
[[package]]
433
799
name = "http"
434
800
version = "1.3.1"
···
507
873
"http",
508
874
"hyper",
509
875
"hyper-util",
510
-
"rustls",
876
+
"rustls 0.23.32",
511
877
"rustls-pki-types",
512
878
"tokio",
513
879
"tokio-rustls",
···
536
902
source = "registry+https://github.com/rust-lang/crates.io-index"
537
903
checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
538
904
dependencies = [
539
-
"base64",
905
+
"base64 0.22.1",
540
906
"bytes",
541
907
"futures-channel",
542
908
"futures-core",
···
556
922
"windows-registry",
557
923
]
558
924
925
+
[[package]]
926
+
name = "iana-time-zone"
927
+
version = "0.1.64"
928
+
source = "registry+https://github.com/rust-lang/crates.io-index"
929
+
checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb"
930
+
dependencies = [
931
+
"android_system_properties",
932
+
"core-foundation-sys",
933
+
"iana-time-zone-haiku",
934
+
"js-sys",
935
+
"log",
936
+
"wasm-bindgen",
937
+
"windows-core",
938
+
]
939
+
940
+
[[package]]
941
+
name = "iana-time-zone-haiku"
942
+
version = "0.1.2"
943
+
source = "registry+https://github.com/rust-lang/crates.io-index"
944
+
checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
945
+
dependencies = [
946
+
"cc",
947
+
]
948
+
559
949
[[package]]
560
950
name = "icu_collections"
561
951
version = "2.0.0"
···
670
1060
checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5"
671
1061
dependencies = [
672
1062
"equivalent",
673
-
"hashbrown",
1063
+
"hashbrown 0.16.0",
674
1064
]
675
1065
676
1066
[[package]]
···
684
1074
"libc",
685
1075
]
686
1076
1077
+
[[package]]
1078
+
name = "ipld-core"
1079
+
version = "0.4.2"
1080
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1081
+
checksum = "104718b1cc124d92a6d01ca9c9258a7df311405debb3408c445a36452f9bf8db"
1082
+
dependencies = [
1083
+
"cid",
1084
+
"serde",
1085
+
"serde_bytes",
1086
+
]
1087
+
687
1088
[[package]]
688
1089
name = "ipnet"
689
1090
version = "2.11.0"
···
721
1122
version = "1.5.0"
722
1123
source = "registry+https://github.com/rust-lang/crates.io-index"
723
1124
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
1125
+
dependencies = [
1126
+
"spin",
1127
+
]
724
1128
725
1129
[[package]]
726
1130
name = "libc"
···
729
1133
checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543"
730
1134
731
1135
[[package]]
732
-
name = "linux-raw-sys"
733
-
version = "0.11.0"
1136
+
name = "libm"
1137
+
version = "0.2.15"
1138
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1139
+
checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
1140
+
1141
+
[[package]]
1142
+
name = "libredox"
1143
+
version = "0.1.10"
1144
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1145
+
checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb"
1146
+
dependencies = [
1147
+
"bitflags",
1148
+
"libc",
1149
+
"redox_syscall",
1150
+
]
1151
+
1152
+
[[package]]
1153
+
name = "libsqlite3-sys"
1154
+
version = "0.27.0"
1155
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1156
+
checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716"
1157
+
dependencies = [
1158
+
"cc",
1159
+
"pkg-config",
1160
+
"vcpkg",
1161
+
]
1162
+
1163
+
[[package]]
1164
+
name = "linux-raw-sys"
1165
+
version = "0.11.0"
734
1166
source = "registry+https://github.com/rust-lang/crates.io-index"
735
1167
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
736
1168
···
767
1199
source = "registry+https://github.com/rust-lang/crates.io-index"
768
1200
checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
769
1201
1202
+
[[package]]
1203
+
name = "match-lookup"
1204
+
version = "0.1.1"
1205
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1206
+
checksum = "1265724d8cb29dbbc2b0f06fffb8bf1a8c0cf73a78eede9ba73a4a66c52a981e"
1207
+
dependencies = [
1208
+
"proc-macro2",
1209
+
"quote",
1210
+
"syn 1.0.109",
1211
+
]
1212
+
770
1213
[[package]]
771
1214
name = "matchit"
772
1215
version = "0.8.4"
···
794
1237
"proc-macro2",
795
1238
"proc-macro2-diagnostics",
796
1239
"quote",
797
-
"syn",
1240
+
"syn 2.0.106",
1241
+
]
1242
+
1243
+
[[package]]
1244
+
name = "md-5"
1245
+
version = "0.10.6"
1246
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1247
+
checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
1248
+
dependencies = [
1249
+
"cfg-if",
1250
+
"digest",
798
1251
]
799
1252
800
1253
[[package]]
···
809
1262
source = "registry+https://github.com/rust-lang/crates.io-index"
810
1263
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
811
1264
1265
+
[[package]]
1266
+
name = "minimal-lexical"
1267
+
version = "0.2.1"
1268
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1269
+
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
1270
+
812
1271
[[package]]
813
1272
name = "miniz_oxide"
814
1273
version = "0.8.9"
···
829
1288
"windows-sys 0.59.0",
830
1289
]
831
1290
1291
+
[[package]]
1292
+
name = "multibase"
1293
+
version = "0.9.2"
1294
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1295
+
checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77"
1296
+
dependencies = [
1297
+
"base-x",
1298
+
"base256emoji",
1299
+
"data-encoding",
1300
+
"data-encoding-macro",
1301
+
]
1302
+
1303
+
[[package]]
1304
+
name = "multihash"
1305
+
version = "0.19.3"
1306
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1307
+
checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d"
1308
+
dependencies = [
1309
+
"core2",
1310
+
"serde",
1311
+
"unsigned-varint",
1312
+
]
1313
+
832
1314
[[package]]
833
1315
name = "native-tls"
834
1316
version = "0.2.14"
···
846
1328
"tempfile",
847
1329
]
848
1330
1331
+
[[package]]
1332
+
name = "nom"
1333
+
version = "7.1.3"
1334
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1335
+
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
1336
+
dependencies = [
1337
+
"memchr",
1338
+
"minimal-lexical",
1339
+
]
1340
+
849
1341
[[package]]
850
1342
name = "nu-ansi-term"
851
1343
version = "0.50.1"
···
855
1347
"windows-sys 0.52.0",
856
1348
]
857
1349
1350
+
[[package]]
1351
+
name = "num-bigint-dig"
1352
+
version = "0.8.4"
1353
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1354
+
checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
1355
+
dependencies = [
1356
+
"byteorder",
1357
+
"lazy_static",
1358
+
"libm",
1359
+
"num-integer",
1360
+
"num-iter",
1361
+
"num-traits",
1362
+
"rand 0.8.5",
1363
+
"smallvec",
1364
+
"zeroize",
1365
+
]
1366
+
1367
+
[[package]]
1368
+
name = "num-integer"
1369
+
version = "0.1.46"
1370
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1371
+
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
1372
+
dependencies = [
1373
+
"num-traits",
1374
+
]
1375
+
1376
+
[[package]]
1377
+
name = "num-iter"
1378
+
version = "0.1.45"
1379
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1380
+
checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
1381
+
dependencies = [
1382
+
"autocfg",
1383
+
"num-integer",
1384
+
"num-traits",
1385
+
]
1386
+
1387
+
[[package]]
1388
+
name = "num-traits"
1389
+
version = "0.2.19"
1390
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1391
+
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
1392
+
dependencies = [
1393
+
"autocfg",
1394
+
"libm",
1395
+
]
1396
+
858
1397
[[package]]
859
1398
name = "object"
860
1399
version = "0.36.7"
···
893
1432
dependencies = [
894
1433
"proc-macro2",
895
1434
"quote",
896
-
"syn",
1435
+
"syn 2.0.106",
897
1436
]
898
1437
899
1438
[[package]]
···
934
1473
"libc",
935
1474
"redox_syscall",
936
1475
"smallvec",
937
-
"windows-targets",
1476
+
"windows-targets 0.52.6",
1477
+
]
1478
+
1479
+
[[package]]
1480
+
name = "paste"
1481
+
version = "1.0.15"
1482
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1483
+
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
1484
+
1485
+
[[package]]
1486
+
name = "pem-rfc7468"
1487
+
version = "0.7.0"
1488
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1489
+
checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
1490
+
dependencies = [
1491
+
"base64ct",
938
1492
]
939
1493
940
1494
[[package]]
···
955
1509
source = "registry+https://github.com/rust-lang/crates.io-index"
956
1510
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
957
1511
1512
+
[[package]]
1513
+
name = "pkcs1"
1514
+
version = "0.7.5"
1515
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1516
+
checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
1517
+
dependencies = [
1518
+
"der",
1519
+
"pkcs8",
1520
+
"spki",
1521
+
]
1522
+
1523
+
[[package]]
1524
+
name = "pkcs8"
1525
+
version = "0.10.2"
1526
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1527
+
checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
1528
+
dependencies = [
1529
+
"der",
1530
+
"spki",
1531
+
]
1532
+
958
1533
[[package]]
959
1534
name = "pkg-config"
960
1535
version = "0.3.32"
···
996
1571
dependencies = [
997
1572
"proc-macro2",
998
1573
"quote",
999
-
"syn",
1574
+
"syn 2.0.106",
1000
1575
"version_check",
1001
1576
]
1002
1577
···
1015
1590
source = "registry+https://github.com/rust-lang/crates.io-index"
1016
1591
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
1017
1592
1593
+
[[package]]
1594
+
name = "rand"
1595
+
version = "0.8.5"
1596
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1597
+
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
1598
+
dependencies = [
1599
+
"libc",
1600
+
"rand_chacha 0.3.1",
1601
+
"rand_core 0.6.4",
1602
+
]
1603
+
1018
1604
[[package]]
1019
1605
name = "rand"
1020
1606
version = "0.9.2"
1021
1607
source = "registry+https://github.com/rust-lang/crates.io-index"
1022
1608
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
1023
1609
dependencies = [
1024
-
"rand_chacha",
1025
-
"rand_core",
1610
+
"rand_chacha 0.9.0",
1611
+
"rand_core 0.9.3",
1612
+
]
1613
+
1614
+
[[package]]
1615
+
name = "rand_chacha"
1616
+
version = "0.3.1"
1617
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1618
+
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
1619
+
dependencies = [
1620
+
"ppv-lite86",
1621
+
"rand_core 0.6.4",
1026
1622
]
1027
1623
1028
1624
[[package]]
···
1032
1628
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
1033
1629
dependencies = [
1034
1630
"ppv-lite86",
1035
-
"rand_core",
1631
+
"rand_core 0.9.3",
1632
+
]
1633
+
1634
+
[[package]]
1635
+
name = "rand_core"
1636
+
version = "0.6.4"
1637
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1638
+
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
1639
+
dependencies = [
1640
+
"getrandom 0.2.16",
1036
1641
]
1037
1642
1038
1643
[[package]]
···
1059
1664
source = "registry+https://github.com/rust-lang/crates.io-index"
1060
1665
checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb"
1061
1666
dependencies = [
1062
-
"base64",
1667
+
"base64 0.22.1",
1063
1668
"bytes",
1064
1669
"encoding_rs",
1065
1670
"futures-core",
···
1107
1712
"windows-sys 0.52.0",
1108
1713
]
1109
1714
1715
+
[[package]]
1716
+
name = "rs-car"
1717
+
version = "0.5.0"
1718
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1719
+
checksum = "660d1576a918f8ccab9a98025367f6c1996e7551d5059833ddf0995e2f444cbf"
1720
+
dependencies = [
1721
+
"blake2b_simd",
1722
+
"futures",
1723
+
"ipld-core",
1724
+
"serde_ipld_dagcbor",
1725
+
"sha2",
1726
+
]
1727
+
1728
+
[[package]]
1729
+
name = "rsa"
1730
+
version = "0.9.8"
1731
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1732
+
checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b"
1733
+
dependencies = [
1734
+
"const-oid",
1735
+
"digest",
1736
+
"num-bigint-dig",
1737
+
"num-integer",
1738
+
"num-traits",
1739
+
"pkcs1",
1740
+
"pkcs8",
1741
+
"rand_core 0.6.4",
1742
+
"signature",
1743
+
"spki",
1744
+
"subtle",
1745
+
"zeroize",
1746
+
]
1747
+
1110
1748
[[package]]
1111
1749
name = "rustc-demangle"
1112
1750
version = "0.1.26"
···
1126
1764
"windows-sys 0.61.1",
1127
1765
]
1128
1766
1767
+
[[package]]
1768
+
name = "rustls"
1769
+
version = "0.21.12"
1770
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1771
+
checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e"
1772
+
dependencies = [
1773
+
"ring",
1774
+
"rustls-webpki 0.101.7",
1775
+
"sct",
1776
+
]
1777
+
1129
1778
[[package]]
1130
1779
name = "rustls"
1131
1780
version = "0.23.32"
···
1134
1783
dependencies = [
1135
1784
"once_cell",
1136
1785
"rustls-pki-types",
1137
-
"rustls-webpki",
1786
+
"rustls-webpki 0.103.6",
1138
1787
"subtle",
1139
1788
"zeroize",
1140
1789
]
1141
1790
1791
+
[[package]]
1792
+
name = "rustls-pemfile"
1793
+
version = "1.0.4"
1794
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1795
+
checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
1796
+
dependencies = [
1797
+
"base64 0.21.7",
1798
+
]
1799
+
1142
1800
[[package]]
1143
1801
name = "rustls-pki-types"
1144
1802
version = "1.12.0"
···
1148
1806
"zeroize",
1149
1807
]
1150
1808
1809
+
[[package]]
1810
+
name = "rustls-webpki"
1811
+
version = "0.101.7"
1812
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1813
+
checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
1814
+
dependencies = [
1815
+
"ring",
1816
+
"untrusted",
1817
+
]
1818
+
1151
1819
[[package]]
1152
1820
name = "rustls-webpki"
1153
1821
version = "0.103.6"
···
1186
1854
source = "registry+https://github.com/rust-lang/crates.io-index"
1187
1855
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
1188
1856
1857
+
[[package]]
1858
+
name = "sct"
1859
+
version = "0.7.1"
1860
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1861
+
checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
1862
+
dependencies = [
1863
+
"ring",
1864
+
"untrusted",
1865
+
]
1866
+
1189
1867
[[package]]
1190
1868
name = "security-framework"
1191
1869
version = "2.11.1"
···
1211
1889
1212
1890
[[package]]
1213
1891
name = "serde"
1214
-
version = "1.0.219"
1892
+
version = "1.0.228"
1893
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1894
+
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
1895
+
dependencies = [
1896
+
"serde_core",
1897
+
"serde_derive",
1898
+
]
1899
+
1900
+
[[package]]
1901
+
name = "serde_bytes"
1902
+
version = "0.11.19"
1903
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1904
+
checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8"
1905
+
dependencies = [
1906
+
"serde",
1907
+
"serde_core",
1908
+
]
1909
+
1910
+
[[package]]
1911
+
name = "serde_cbor"
1912
+
version = "0.11.2"
1913
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1914
+
checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5"
1915
+
dependencies = [
1916
+
"half",
1917
+
"serde",
1918
+
]
1919
+
1920
+
[[package]]
1921
+
name = "serde_core"
1922
+
version = "1.0.228"
1215
1923
source = "registry+https://github.com/rust-lang/crates.io-index"
1216
-
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
1924
+
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
1217
1925
dependencies = [
1218
1926
"serde_derive",
1219
1927
]
1220
1928
1221
1929
[[package]]
1222
1930
name = "serde_derive"
1223
-
version = "1.0.219"
1931
+
version = "1.0.228"
1224
1932
source = "registry+https://github.com/rust-lang/crates.io-index"
1225
-
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
1933
+
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
1226
1934
dependencies = [
1227
1935
"proc-macro2",
1228
1936
"quote",
1229
-
"syn",
1937
+
"syn 2.0.106",
1938
+
]
1939
+
1940
+
[[package]]
1941
+
name = "serde_ipld_dagcbor"
1942
+
version = "0.6.4"
1943
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1944
+
checksum = "46182f4f08349a02b45c998ba3215d3f9de826246ba02bb9dddfe9a2a2100778"
1945
+
dependencies = [
1946
+
"cbor4ii",
1947
+
"ipld-core",
1948
+
"scopeguard",
1949
+
"serde",
1230
1950
]
1231
1951
1232
1952
[[package]]
···
1274
1994
"digest",
1275
1995
]
1276
1996
1997
+
[[package]]
1998
+
name = "sha2"
1999
+
version = "0.10.9"
2000
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2001
+
checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283"
2002
+
dependencies = [
2003
+
"cfg-if",
2004
+
"cpufeatures",
2005
+
"digest",
2006
+
]
2007
+
1277
2008
[[package]]
1278
2009
name = "sharded-slab"
1279
2010
version = "0.1.7"
···
1287
2018
name = "shitsky"
1288
2019
version = "0.1.0"
1289
2020
dependencies = [
2021
+
"async-stream",
1290
2022
"axum",
1291
-
"base64",
2023
+
"chrono",
2024
+
"cid",
2025
+
"dotenvy",
1292
2026
"futures",
2027
+
"futures-util",
1293
2028
"listenfd",
1294
2029
"maud",
1295
2030
"reqwest",
2031
+
"rs-car",
2032
+
"serde",
2033
+
"serde_bytes",
2034
+
"serde_cbor",
2035
+
"serde_ipld_dagcbor",
2036
+
"serde_json",
2037
+
"sha2",
2038
+
"sqlx",
2039
+
"thiserror 2.0.17",
1296
2040
"tokio",
1297
2041
"tokio-tungstenite",
1298
2042
"tower-http",
1299
2043
"tracing",
1300
2044
"tracing-subscriber",
2045
+
"url",
1301
2046
]
1302
2047
1303
2048
[[package]]
···
1315
2060
"libc",
1316
2061
]
1317
2062
2063
+
[[package]]
2064
+
name = "signature"
2065
+
version = "2.2.0"
2066
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2067
+
checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
2068
+
dependencies = [
2069
+
"digest",
2070
+
"rand_core 0.6.4",
2071
+
]
2072
+
1318
2073
[[package]]
1319
2074
name = "slab"
1320
2075
version = "0.4.11"
···
1337
2092
"windows-sys 0.59.0",
1338
2093
]
1339
2094
2095
+
[[package]]
2096
+
name = "spin"
2097
+
version = "0.9.8"
2098
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2099
+
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
2100
+
dependencies = [
2101
+
"lock_api",
2102
+
]
2103
+
2104
+
[[package]]
2105
+
name = "spki"
2106
+
version = "0.7.3"
2107
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2108
+
checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
2109
+
dependencies = [
2110
+
"base64ct",
2111
+
"der",
2112
+
]
2113
+
2114
+
[[package]]
2115
+
name = "sqlformat"
2116
+
version = "0.2.6"
2117
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2118
+
checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790"
2119
+
dependencies = [
2120
+
"nom",
2121
+
"unicode_categories",
2122
+
]
2123
+
2124
+
[[package]]
2125
+
name = "sqlx"
2126
+
version = "0.7.4"
2127
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2128
+
checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa"
2129
+
dependencies = [
2130
+
"sqlx-core",
2131
+
"sqlx-macros",
2132
+
"sqlx-mysql",
2133
+
"sqlx-postgres",
2134
+
"sqlx-sqlite",
2135
+
]
2136
+
2137
+
[[package]]
2138
+
name = "sqlx-core"
2139
+
version = "0.7.4"
2140
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2141
+
checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6"
2142
+
dependencies = [
2143
+
"ahash",
2144
+
"atoi",
2145
+
"byteorder",
2146
+
"bytes",
2147
+
"chrono",
2148
+
"crc",
2149
+
"crossbeam-queue",
2150
+
"either",
2151
+
"event-listener",
2152
+
"futures-channel",
2153
+
"futures-core",
2154
+
"futures-intrusive",
2155
+
"futures-io",
2156
+
"futures-util",
2157
+
"hashlink",
2158
+
"hex",
2159
+
"indexmap",
2160
+
"log",
2161
+
"memchr",
2162
+
"once_cell",
2163
+
"paste",
2164
+
"percent-encoding",
2165
+
"rustls 0.21.12",
2166
+
"rustls-pemfile",
2167
+
"serde",
2168
+
"serde_json",
2169
+
"sha2",
2170
+
"smallvec",
2171
+
"sqlformat",
2172
+
"thiserror 1.0.69",
2173
+
"tokio",
2174
+
"tokio-stream",
2175
+
"tracing",
2176
+
"url",
2177
+
"webpki-roots",
2178
+
]
2179
+
2180
+
[[package]]
2181
+
name = "sqlx-macros"
2182
+
version = "0.7.4"
2183
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2184
+
checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127"
2185
+
dependencies = [
2186
+
"proc-macro2",
2187
+
"quote",
2188
+
"sqlx-core",
2189
+
"sqlx-macros-core",
2190
+
"syn 1.0.109",
2191
+
]
2192
+
2193
+
[[package]]
2194
+
name = "sqlx-macros-core"
2195
+
version = "0.7.4"
2196
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2197
+
checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8"
2198
+
dependencies = [
2199
+
"dotenvy",
2200
+
"either",
2201
+
"heck",
2202
+
"hex",
2203
+
"once_cell",
2204
+
"proc-macro2",
2205
+
"quote",
2206
+
"serde",
2207
+
"serde_json",
2208
+
"sha2",
2209
+
"sqlx-core",
2210
+
"sqlx-mysql",
2211
+
"sqlx-postgres",
2212
+
"sqlx-sqlite",
2213
+
"syn 1.0.109",
2214
+
"tempfile",
2215
+
"tokio",
2216
+
"url",
2217
+
]
2218
+
2219
+
[[package]]
2220
+
name = "sqlx-mysql"
2221
+
version = "0.7.4"
2222
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2223
+
checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418"
2224
+
dependencies = [
2225
+
"atoi",
2226
+
"base64 0.21.7",
2227
+
"bitflags",
2228
+
"byteorder",
2229
+
"bytes",
2230
+
"chrono",
2231
+
"crc",
2232
+
"digest",
2233
+
"dotenvy",
2234
+
"either",
2235
+
"futures-channel",
2236
+
"futures-core",
2237
+
"futures-io",
2238
+
"futures-util",
2239
+
"generic-array",
2240
+
"hex",
2241
+
"hkdf",
2242
+
"hmac",
2243
+
"itoa",
2244
+
"log",
2245
+
"md-5",
2246
+
"memchr",
2247
+
"once_cell",
2248
+
"percent-encoding",
2249
+
"rand 0.8.5",
2250
+
"rsa",
2251
+
"serde",
2252
+
"sha1",
2253
+
"sha2",
2254
+
"smallvec",
2255
+
"sqlx-core",
2256
+
"stringprep",
2257
+
"thiserror 1.0.69",
2258
+
"tracing",
2259
+
"whoami",
2260
+
]
2261
+
2262
+
[[package]]
2263
+
name = "sqlx-postgres"
2264
+
version = "0.7.4"
2265
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2266
+
checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e"
2267
+
dependencies = [
2268
+
"atoi",
2269
+
"base64 0.21.7",
2270
+
"bitflags",
2271
+
"byteorder",
2272
+
"chrono",
2273
+
"crc",
2274
+
"dotenvy",
2275
+
"etcetera",
2276
+
"futures-channel",
2277
+
"futures-core",
2278
+
"futures-io",
2279
+
"futures-util",
2280
+
"hex",
2281
+
"hkdf",
2282
+
"hmac",
2283
+
"home",
2284
+
"itoa",
2285
+
"log",
2286
+
"md-5",
2287
+
"memchr",
2288
+
"once_cell",
2289
+
"rand 0.8.5",
2290
+
"serde",
2291
+
"serde_json",
2292
+
"sha2",
2293
+
"smallvec",
2294
+
"sqlx-core",
2295
+
"stringprep",
2296
+
"thiserror 1.0.69",
2297
+
"tracing",
2298
+
"whoami",
2299
+
]
2300
+
2301
+
[[package]]
2302
+
name = "sqlx-sqlite"
2303
+
version = "0.7.4"
2304
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2305
+
checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa"
2306
+
dependencies = [
2307
+
"atoi",
2308
+
"chrono",
2309
+
"flume",
2310
+
"futures-channel",
2311
+
"futures-core",
2312
+
"futures-executor",
2313
+
"futures-intrusive",
2314
+
"futures-util",
2315
+
"libsqlite3-sys",
2316
+
"log",
2317
+
"percent-encoding",
2318
+
"serde",
2319
+
"sqlx-core",
2320
+
"tracing",
2321
+
"url",
2322
+
"urlencoding",
2323
+
]
2324
+
1340
2325
[[package]]
1341
2326
name = "stable_deref_trait"
1342
2327
version = "1.2.0"
1343
2328
source = "registry+https://github.com/rust-lang/crates.io-index"
1344
2329
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
1345
2330
2331
+
[[package]]
2332
+
name = "stringprep"
2333
+
version = "0.1.5"
2334
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2335
+
checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1"
2336
+
dependencies = [
2337
+
"unicode-bidi",
2338
+
"unicode-normalization",
2339
+
"unicode-properties",
2340
+
]
2341
+
1346
2342
[[package]]
1347
2343
name = "subtle"
1348
2344
version = "2.6.1"
1349
2345
source = "registry+https://github.com/rust-lang/crates.io-index"
1350
2346
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
1351
2347
2348
+
[[package]]
2349
+
name = "syn"
2350
+
version = "1.0.109"
2351
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2352
+
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
2353
+
dependencies = [
2354
+
"proc-macro2",
2355
+
"quote",
2356
+
"unicode-ident",
2357
+
]
2358
+
1352
2359
[[package]]
1353
2360
name = "syn"
1354
2361
version = "2.0.106"
···
1377
2384
dependencies = [
1378
2385
"proc-macro2",
1379
2386
"quote",
1380
-
"syn",
2387
+
"syn 2.0.106",
1381
2388
]
1382
2389
1383
2390
[[package]]
···
1416
2423
1417
2424
[[package]]
1418
2425
name = "thiserror"
1419
-
version = "2.0.16"
2426
+
version = "1.0.69"
2427
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2428
+
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
2429
+
dependencies = [
2430
+
"thiserror-impl 1.0.69",
2431
+
]
2432
+
2433
+
[[package]]
2434
+
name = "thiserror"
2435
+
version = "2.0.17"
2436
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2437
+
checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
2438
+
dependencies = [
2439
+
"thiserror-impl 2.0.17",
2440
+
]
2441
+
2442
+
[[package]]
2443
+
name = "thiserror-impl"
2444
+
version = "1.0.69"
1420
2445
source = "registry+https://github.com/rust-lang/crates.io-index"
1421
-
checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0"
2446
+
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
1422
2447
dependencies = [
1423
-
"thiserror-impl",
2448
+
"proc-macro2",
2449
+
"quote",
2450
+
"syn 2.0.106",
1424
2451
]
1425
2452
1426
2453
[[package]]
1427
2454
name = "thiserror-impl"
1428
-
version = "2.0.16"
2455
+
version = "2.0.17"
1429
2456
source = "registry+https://github.com/rust-lang/crates.io-index"
1430
-
checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960"
2457
+
checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
1431
2458
dependencies = [
1432
2459
"proc-macro2",
1433
2460
"quote",
1434
-
"syn",
2461
+
"syn 2.0.106",
1435
2462
]
1436
2463
1437
2464
[[package]]
···
1453
2480
"zerovec",
1454
2481
]
1455
2482
2483
+
[[package]]
2484
+
name = "tinyvec"
2485
+
version = "1.10.0"
2486
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2487
+
checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa"
2488
+
dependencies = [
2489
+
"tinyvec_macros",
2490
+
]
2491
+
2492
+
[[package]]
2493
+
name = "tinyvec_macros"
2494
+
version = "0.1.1"
2495
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2496
+
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
2497
+
1456
2498
[[package]]
1457
2499
name = "tokio"
1458
2500
version = "1.47.1"
···
1481
2523
dependencies = [
1482
2524
"proc-macro2",
1483
2525
"quote",
1484
-
"syn",
2526
+
"syn 2.0.106",
1485
2527
]
1486
2528
1487
2529
[[package]]
···
1500
2542
source = "registry+https://github.com/rust-lang/crates.io-index"
1501
2543
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
1502
2544
dependencies = [
1503
-
"rustls",
2545
+
"rustls 0.23.32",
2546
+
"tokio",
2547
+
]
2548
+
2549
+
[[package]]
2550
+
name = "tokio-stream"
2551
+
version = "0.1.17"
2552
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2553
+
checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047"
2554
+
dependencies = [
2555
+
"futures-core",
2556
+
"pin-project-lite",
1504
2557
"tokio",
1505
2558
]
1506
2559
···
1598
2651
dependencies = [
1599
2652
"proc-macro2",
1600
2653
"quote",
1601
-
"syn",
2654
+
"syn 2.0.106",
1602
2655
]
1603
2656
1604
2657
[[package]]
···
1654
2707
"httparse",
1655
2708
"log",
1656
2709
"native-tls",
1657
-
"rand",
2710
+
"rand 0.9.2",
1658
2711
"sha1",
1659
-
"thiserror",
2712
+
"thiserror 2.0.17",
1660
2713
"utf-8",
1661
2714
]
1662
2715
···
1666
2719
source = "registry+https://github.com/rust-lang/crates.io-index"
1667
2720
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
1668
2721
2722
+
[[package]]
2723
+
name = "unicode-bidi"
2724
+
version = "0.3.18"
2725
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2726
+
checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5"
2727
+
1669
2728
[[package]]
1670
2729
name = "unicode-ident"
1671
2730
version = "1.0.19"
1672
2731
source = "registry+https://github.com/rust-lang/crates.io-index"
1673
2732
checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d"
1674
2733
2734
+
[[package]]
2735
+
name = "unicode-normalization"
2736
+
version = "0.1.24"
2737
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2738
+
checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956"
2739
+
dependencies = [
2740
+
"tinyvec",
2741
+
]
2742
+
2743
+
[[package]]
2744
+
name = "unicode-properties"
2745
+
version = "0.1.3"
2746
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2747
+
checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0"
2748
+
2749
+
[[package]]
2750
+
name = "unicode-segmentation"
2751
+
version = "1.12.0"
2752
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2753
+
checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493"
2754
+
2755
+
[[package]]
2756
+
name = "unicode_categories"
2757
+
version = "0.1.1"
2758
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2759
+
checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
2760
+
2761
+
[[package]]
2762
+
name = "unsigned-varint"
2763
+
version = "0.8.0"
2764
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2765
+
checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06"
2766
+
1675
2767
[[package]]
1676
2768
name = "untrusted"
1677
2769
version = "0.9.0"
···
1690
2782
"serde",
1691
2783
]
1692
2784
2785
+
[[package]]
2786
+
name = "urlencoding"
2787
+
version = "2.1.3"
2788
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2789
+
checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
2790
+
1693
2791
[[package]]
1694
2792
name = "utf-8"
1695
2793
version = "0.7.6"
···
1763
2861
"wit-bindgen",
1764
2862
]
1765
2863
2864
+
[[package]]
2865
+
name = "wasite"
2866
+
version = "0.1.0"
2867
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2868
+
checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
2869
+
1766
2870
[[package]]
1767
2871
name = "wasm-bindgen"
1768
2872
version = "0.2.101"
···
1786
2890
"log",
1787
2891
"proc-macro2",
1788
2892
"quote",
1789
-
"syn",
2893
+
"syn 2.0.106",
1790
2894
"wasm-bindgen-shared",
1791
2895
]
1792
2896
···
1821
2925
dependencies = [
1822
2926
"proc-macro2",
1823
2927
"quote",
1824
-
"syn",
2928
+
"syn 2.0.106",
1825
2929
"wasm-bindgen-backend",
1826
2930
"wasm-bindgen-shared",
1827
2931
]
···
1845
2949
"wasm-bindgen",
1846
2950
]
1847
2951
2952
+
[[package]]
2953
+
name = "webpki-roots"
2954
+
version = "0.25.4"
2955
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2956
+
checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1"
2957
+
2958
+
[[package]]
2959
+
name = "whoami"
2960
+
version = "1.6.1"
2961
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2962
+
checksum = "5d4a4db5077702ca3015d3d02d74974948aba2ad9e12ab7df718ee64ccd7e97d"
2963
+
dependencies = [
2964
+
"libredox",
2965
+
"wasite",
2966
+
]
2967
+
1848
2968
[[package]]
1849
2969
name = "winapi"
1850
2970
version = "0.3.9"
···
1867
2987
source = "registry+https://github.com/rust-lang/crates.io-index"
1868
2988
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1869
2989
2990
+
[[package]]
2991
+
name = "windows-core"
2992
+
version = "0.62.1"
2993
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2994
+
checksum = "6844ee5416b285084d3d3fffd743b925a6c9385455f64f6d4fa3031c4c2749a9"
2995
+
dependencies = [
2996
+
"windows-implement",
2997
+
"windows-interface",
2998
+
"windows-link 0.2.0",
2999
+
"windows-result 0.4.0",
3000
+
"windows-strings 0.5.0",
3001
+
]
3002
+
3003
+
[[package]]
3004
+
name = "windows-implement"
3005
+
version = "0.60.1"
3006
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3007
+
checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0"
3008
+
dependencies = [
3009
+
"proc-macro2",
3010
+
"quote",
3011
+
"syn 2.0.106",
3012
+
]
3013
+
3014
+
[[package]]
3015
+
name = "windows-interface"
3016
+
version = "0.59.2"
3017
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3018
+
checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5"
3019
+
dependencies = [
3020
+
"proc-macro2",
3021
+
"quote",
3022
+
"syn 2.0.106",
3023
+
]
3024
+
1870
3025
[[package]]
1871
3026
name = "windows-link"
1872
3027
version = "0.1.3"
···
1886
3041
checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
1887
3042
dependencies = [
1888
3043
"windows-link 0.1.3",
1889
-
"windows-result",
1890
-
"windows-strings",
3044
+
"windows-result 0.3.4",
3045
+
"windows-strings 0.4.2",
1891
3046
]
1892
3047
1893
3048
[[package]]
···
1899
3054
"windows-link 0.1.3",
1900
3055
]
1901
3056
3057
+
[[package]]
3058
+
name = "windows-result"
3059
+
version = "0.4.0"
3060
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3061
+
checksum = "7084dcc306f89883455a206237404d3eaf961e5bd7e0f312f7c91f57eb44167f"
3062
+
dependencies = [
3063
+
"windows-link 0.2.0",
3064
+
]
3065
+
1902
3066
[[package]]
1903
3067
name = "windows-strings"
1904
3068
version = "0.4.2"
···
1908
3072
"windows-link 0.1.3",
1909
3073
]
1910
3074
3075
+
[[package]]
3076
+
name = "windows-strings"
3077
+
version = "0.5.0"
3078
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3079
+
checksum = "7218c655a553b0bed4426cf54b20d7ba363ef543b52d515b3e48d7fd55318dda"
3080
+
dependencies = [
3081
+
"windows-link 0.2.0",
3082
+
]
3083
+
3084
+
[[package]]
3085
+
name = "windows-sys"
3086
+
version = "0.48.0"
3087
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3088
+
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
3089
+
dependencies = [
3090
+
"windows-targets 0.48.5",
3091
+
]
3092
+
1911
3093
[[package]]
1912
3094
name = "windows-sys"
1913
3095
version = "0.52.0"
1914
3096
source = "registry+https://github.com/rust-lang/crates.io-index"
1915
3097
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
1916
3098
dependencies = [
1917
-
"windows-targets",
3099
+
"windows-targets 0.52.6",
1918
3100
]
1919
3101
1920
3102
[[package]]
···
1923
3105
source = "registry+https://github.com/rust-lang/crates.io-index"
1924
3106
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
1925
3107
dependencies = [
1926
-
"windows-targets",
3108
+
"windows-targets 0.52.6",
1927
3109
]
1928
3110
1929
3111
[[package]]
···
1935
3117
"windows-link 0.2.0",
1936
3118
]
1937
3119
3120
+
[[package]]
3121
+
name = "windows-targets"
3122
+
version = "0.48.5"
3123
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3124
+
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
3125
+
dependencies = [
3126
+
"windows_aarch64_gnullvm 0.48.5",
3127
+
"windows_aarch64_msvc 0.48.5",
3128
+
"windows_i686_gnu 0.48.5",
3129
+
"windows_i686_msvc 0.48.5",
3130
+
"windows_x86_64_gnu 0.48.5",
3131
+
"windows_x86_64_gnullvm 0.48.5",
3132
+
"windows_x86_64_msvc 0.48.5",
3133
+
]
3134
+
1938
3135
[[package]]
1939
3136
name = "windows-targets"
1940
3137
version = "0.52.6"
1941
3138
source = "registry+https://github.com/rust-lang/crates.io-index"
1942
3139
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
1943
3140
dependencies = [
1944
-
"windows_aarch64_gnullvm",
1945
-
"windows_aarch64_msvc",
1946
-
"windows_i686_gnu",
3141
+
"windows_aarch64_gnullvm 0.52.6",
3142
+
"windows_aarch64_msvc 0.52.6",
3143
+
"windows_i686_gnu 0.52.6",
1947
3144
"windows_i686_gnullvm",
1948
-
"windows_i686_msvc",
1949
-
"windows_x86_64_gnu",
1950
-
"windows_x86_64_gnullvm",
1951
-
"windows_x86_64_msvc",
3145
+
"windows_i686_msvc 0.52.6",
3146
+
"windows_x86_64_gnu 0.52.6",
3147
+
"windows_x86_64_gnullvm 0.52.6",
3148
+
"windows_x86_64_msvc 0.52.6",
1952
3149
]
1953
3150
3151
+
[[package]]
3152
+
name = "windows_aarch64_gnullvm"
3153
+
version = "0.48.5"
3154
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3155
+
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
3156
+
1954
3157
[[package]]
1955
3158
name = "windows_aarch64_gnullvm"
1956
3159
version = "0.52.6"
1957
3160
source = "registry+https://github.com/rust-lang/crates.io-index"
1958
3161
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
1959
3162
3163
+
[[package]]
3164
+
name = "windows_aarch64_msvc"
3165
+
version = "0.48.5"
3166
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3167
+
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
3168
+
1960
3169
[[package]]
1961
3170
name = "windows_aarch64_msvc"
1962
3171
version = "0.52.6"
1963
3172
source = "registry+https://github.com/rust-lang/crates.io-index"
1964
3173
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
1965
3174
3175
+
[[package]]
3176
+
name = "windows_i686_gnu"
3177
+
version = "0.48.5"
3178
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3179
+
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
3180
+
1966
3181
[[package]]
1967
3182
name = "windows_i686_gnu"
1968
3183
version = "0.52.6"
···
1975
3190
source = "registry+https://github.com/rust-lang/crates.io-index"
1976
3191
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
1977
3192
3193
+
[[package]]
3194
+
name = "windows_i686_msvc"
3195
+
version = "0.48.5"
3196
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3197
+
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
3198
+
1978
3199
[[package]]
1979
3200
name = "windows_i686_msvc"
1980
3201
version = "0.52.6"
1981
3202
source = "registry+https://github.com/rust-lang/crates.io-index"
1982
3203
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
1983
3204
3205
+
[[package]]
3206
+
name = "windows_x86_64_gnu"
3207
+
version = "0.48.5"
3208
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3209
+
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
3210
+
1984
3211
[[package]]
1985
3212
name = "windows_x86_64_gnu"
1986
3213
version = "0.52.6"
1987
3214
source = "registry+https://github.com/rust-lang/crates.io-index"
1988
3215
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
1989
3216
3217
+
[[package]]
3218
+
name = "windows_x86_64_gnullvm"
3219
+
version = "0.48.5"
3220
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3221
+
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
3222
+
1990
3223
[[package]]
1991
3224
name = "windows_x86_64_gnullvm"
1992
3225
version = "0.52.6"
1993
3226
source = "registry+https://github.com/rust-lang/crates.io-index"
1994
3227
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
1995
3228
3229
+
[[package]]
3230
+
name = "windows_x86_64_msvc"
3231
+
version = "0.48.5"
3232
+
source = "registry+https://github.com/rust-lang/crates.io-index"
3233
+
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
3234
+
1996
3235
[[package]]
1997
3236
name = "windows_x86_64_msvc"
1998
3237
version = "0.52.6"
···
2031
3270
dependencies = [
2032
3271
"proc-macro2",
2033
3272
"quote",
2034
-
"syn",
3273
+
"syn 2.0.106",
2035
3274
"synstructure",
2036
3275
]
2037
3276
···
2052
3291
dependencies = [
2053
3292
"proc-macro2",
2054
3293
"quote",
2055
-
"syn",
3294
+
"syn 2.0.106",
2056
3295
]
2057
3296
2058
3297
[[package]]
···
2072
3311
dependencies = [
2073
3312
"proc-macro2",
2074
3313
"quote",
2075
-
"syn",
3314
+
"syn 2.0.106",
2076
3315
"synstructure",
2077
3316
]
2078
3317
···
2112
3351
dependencies = [
2113
3352
"proc-macro2",
2114
3353
"quote",
2115
-
"syn",
3354
+
"syn 2.0.106",
2116
3355
]
+15
-1
Cargo.toml
+15
-1
Cargo.toml
···
4
4
edition = "2024"
5
5
6
6
[dependencies]
7
+
async-stream = "0.3.6"
7
8
axum = "0.8"
8
-
base64 = "0.22.1"
9
+
chrono = "0.4.42"
10
+
cid = { version = "0.11", features = ["serde-codec"] }
11
+
dotenvy = "0.15.7"
9
12
futures = "0.3.31"
13
+
futures-util = "0.3.31"
10
14
listenfd = "1.0.2"
11
15
maud = { version = "0.27", features = ["axum"] }
12
16
reqwest = "0.12.23"
17
+
rs-car = "0.5.0"
18
+
serde = { version = "1.0", features = ["derive"] }
19
+
serde_bytes = "0.11.19"
20
+
serde_cbor = "0.11"
21
+
serde_ipld_dagcbor = "0.6.4"
22
+
serde_json = "1.0"
23
+
sha2 = "0.10"
24
+
sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "postgres", "macros", "json", "chrono"] }
25
+
thiserror = "2.0.17"
13
26
tokio = { version = "1.0", features = ["full"] }
14
27
tokio-tungstenite = { version = "0.28.0", features = ["native-tls"] }
15
28
tower-http = { version = "0.6", features = ["trace"] }
16
29
tracing = "0.1"
17
30
tracing-subscriber = "0.3"
31
+
url = "2.5.7"
+283
src/firehose.rs
+283
src/firehose.rs
···
1
+
use async_stream::try_stream;
2
+
use cid::Cid;
3
+
use futures_util::{
4
+
TryStreamExt,
5
+
stream::{Stream, StreamExt},
6
+
};
7
+
use serde::{Deserialize, Serialize};
8
+
use serde_json::Value as JsonValue;
9
+
use std::collections::HashMap;
10
+
use std::time::Duration;
11
+
use thiserror::Error;
12
+
use tokio_tungstenite::{connect_async, tungstenite::protocol::Message};
13
+
14
+
#[derive(Error, Debug)]
15
+
pub enum FirehoseError {
16
+
#[error("WebSocket connection error: {0}")]
17
+
WebSocket(#[from] tokio_tungstenite::tungstenite::Error),
18
+
#[error("URL parsing error: {0}")]
19
+
Url(#[from] url::ParseError),
20
+
#[error("Failed to deserialize CBOR data: {0}")]
21
+
Cbor(#[from] std::io::Error),
22
+
#[error("Failed to read CAR file: {0}")]
23
+
CarRead(#[from] rs_car::CarDecodeError),
24
+
#[error("Invalid message frame received from relay")]
25
+
InvalidFrame,
26
+
#[error("Received an error message from the relay: {name} - {message}")]
27
+
RelayError { name: String, message: String },
28
+
#[error("Unknown message type received: {0}")]
29
+
UnknownMessageType(String),
30
+
#[error("Connection timed out after {0:?} without receiving a message")]
31
+
Timeout(Duration),
32
+
}
33
+
34
+
#[derive(Debug, Clone, Serialize, Deserialize)]
35
+
#[serde(tag = "action", rename_all = "camelCase")]
36
+
pub enum RepoOp {
37
+
Create {
38
+
path: String,
39
+
cid: Cid,
40
+
record: JsonValue,
41
+
},
42
+
Update {
43
+
path: String,
44
+
cid: Cid,
45
+
record: JsonValue,
46
+
},
47
+
Delete {
48
+
path: String,
49
+
},
50
+
}
51
+
52
+
#[derive(Debug, Clone, Serialize, Deserialize)]
53
+
pub struct CommitEvent {
54
+
#[serde(rename = "seq")]
55
+
pub sequence: i64,
56
+
pub repo: String,
57
+
pub commit: Cid,
58
+
pub rev: String,
59
+
pub since: Option<String>,
60
+
pub ops: Vec<RepoOp>,
61
+
#[serde(rename = "time")]
62
+
pub timestamp: String,
63
+
}
64
+
65
+
#[derive(Debug, Clone, Serialize)]
66
+
#[serde(untagged)]
67
+
pub enum FirehoseEvent {
68
+
Commit(CommitEvent),
69
+
Info(JsonValue),
70
+
Account(JsonValue),
71
+
Identity(JsonValue),
72
+
Unknown(JsonValue),
73
+
}
74
+
75
+
#[derive(Debug, Clone)]
76
+
pub struct FirehoseOptions {
77
+
pub relay_url: String,
78
+
pub cursor: Option<i64>,
79
+
pub auto_reconnect: bool,
80
+
}
81
+
82
+
impl Default for FirehoseOptions {
83
+
fn default() -> Self {
84
+
Self {
85
+
relay_url: "wss://relay.upcloud.world".to_string(),
86
+
cursor: None,
87
+
auto_reconnect: true,
88
+
}
89
+
}
90
+
}
91
+
92
+
#[derive(Deserialize, Debug)]
93
+
pub struct FrameHeader {
94
+
#[serde(rename = "op")]
95
+
operation: i64,
96
+
#[serde(rename = "t")]
97
+
message_type: String,
98
+
}
99
+
100
+
#[derive(Deserialize, Debug)]
101
+
struct ErrorBody {
102
+
error: String,
103
+
message: String,
104
+
}
105
+
106
+
#[derive(Deserialize, Debug, Clone)]
107
+
struct RawRepoOp {
108
+
action: String,
109
+
path: String,
110
+
cid: Option<Cid>,
111
+
}
112
+
113
+
#[derive(Deserialize, Debug)]
114
+
struct RawCommitEvent {
115
+
seq: i64,
116
+
repo: String,
117
+
commit: Cid,
118
+
rev: String,
119
+
since: Option<String>,
120
+
blocks: serde_bytes::ByteBuf,
121
+
ops: Vec<RawRepoOp>,
122
+
time: String,
123
+
}
124
+
125
+
pub fn subscribe_repos(
126
+
options: FirehoseOptions,
127
+
) -> impl Stream<Item = Result<FirehoseEvent, FirehoseError>> {
128
+
let mut last_cursor = options.cursor;
129
+
130
+
try_stream! {
131
+
loop {
132
+
let mut url_str = format!(
133
+
"{}/xrpc/com.atproto.sync.subscribeRepos",
134
+
options.relay_url
135
+
);
136
+
if let Some(cursor_val) = last_cursor {
137
+
url_str.push_str(&format!("?cursor={}", cursor_val));
138
+
}
139
+
140
+
tracing::info!("Connecting to {}...", url_str);
141
+
142
+
let (mut ws_stream, _) = connect_async(&url_str).await?;
143
+
144
+
tracing::info!("Successfully connected to firehose.");
145
+
146
+
loop {
147
+
let next_message = tokio::time::timeout(
148
+
Duration::from_secs(15),
149
+
ws_stream.next()
150
+
);
151
+
152
+
match next_message.await {
153
+
Err(_) => {
154
+
tracing::info!("Connection timed out. Attempting to reconnect...");
155
+
ws_stream.close(None).await?;
156
+
break;
157
+
},
158
+
Ok(Some(Ok(msg))) => {
159
+
if let Message::Binary(data) = msg {
160
+
let mut deserializer = serde_ipld_dagcbor::de::Deserializer::from_slice(&data);
161
+
let map_cbor_err = |e: serde_ipld_dagcbor::DecodeError<std::convert::Infallible>| {
162
+
std::io::Error::other(e.to_string())
163
+
};
164
+
165
+
let header: FrameHeader = match serde::Deserialize::deserialize(&mut deserializer).map_err(map_cbor_err) {
166
+
Ok(h) => h,
167
+
Err(e) => {
168
+
tracing::error!("Failed to deserialize frame header: {}. Skipping message.", e);
169
+
continue;
170
+
}
171
+
};
172
+
173
+
if header.operation == -1 {
174
+
let body: ErrorBody = match serde::Deserialize::deserialize(&mut deserializer).map_err(map_cbor_err) {
175
+
Ok(b) => b,
176
+
Err(e) => {
177
+
tracing::error!("Failed to deserialize relay error body: {}. Skipping message.", e);
178
+
continue;
179
+
}
180
+
};
181
+
Err(FirehoseError::RelayError { name: body.error, message: body.message })?;
182
+
}
183
+
184
+
let event = match header.message_type.as_str() {
185
+
"#commit" => {
186
+
let raw_commit: RawCommitEvent = match serde::Deserialize::deserialize(&mut deserializer).map_err(map_cbor_err) {
187
+
Ok(c) => c,
188
+
Err(e) => {
189
+
tracing::error!("Failed to deserialize commit body: {}. Skipping message.", e);
190
+
continue;
191
+
}
192
+
};
193
+
last_cursor = Some(raw_commit.seq);
194
+
let commit_event = process_commit_event(raw_commit).await?;
195
+
FirehoseEvent::Commit(commit_event)
196
+
}
197
+
t => {
198
+
let body: JsonValue = match serde::Deserialize::deserialize(&mut deserializer).map_err(map_cbor_err) {
199
+
Ok(b) => b,
200
+
Err(e) => {
201
+
tracing::error!("Failed to deserialize event body for type '{}': {}. Skipping message.", t, e);
202
+
continue;
203
+
}
204
+
};
205
+
if let Some(seq) = body.get("seq").and_then(|v| v.as_i64()) {
206
+
last_cursor = Some(seq);
207
+
}
208
+
match t {
209
+
"#info" => FirehoseEvent::Info(body),
210
+
"#account" => FirehoseEvent::Account(body),
211
+
"#identity" => FirehoseEvent::Identity(body),
212
+
_ => FirehoseEvent::Unknown(body)
213
+
}
214
+
}
215
+
};
216
+
yield event;
217
+
}
218
+
}
219
+
Ok(Some(Err(e))) => {
220
+
tracing::info!("WebSocket error: {}", e);
221
+
break;
222
+
}
223
+
Ok(None) => {
224
+
tracing::info!("WebSocket stream closed by server.");
225
+
break;
226
+
}
227
+
}
228
+
}
229
+
230
+
if !options.auto_reconnect {
231
+
tracing::info!("Auto-reconnect is disabled. Exiting.");
232
+
break;
233
+
}
234
+
tokio::time::sleep(Duration::from_secs(1)).await;
235
+
}
236
+
}
237
+
}
238
+
239
+
async fn process_commit_event(raw: RawCommitEvent) -> Result<CommitEvent, FirehoseError> {
240
+
let mut blocks_reader = raw.blocks.as_ref();
241
+
let car_reader = rs_car::CarReader::new(&mut blocks_reader, false).await?;
242
+
243
+
let records_map: HashMap<Cid, Vec<u8>> = car_reader.try_collect::<HashMap<_, _>>().await?;
244
+
245
+
let mut ops = Vec::new();
246
+
for op in raw.ops {
247
+
let repo_op = match op.action.as_str() {
248
+
"create" | "update" => {
249
+
let cid = op.cid.expect("Create/Update operation must have a CID");
250
+
let record_bytes = records_map.get(&cid).cloned().unwrap_or_default();
251
+
let record: JsonValue =
252
+
serde_ipld_dagcbor::from_slice(&record_bytes).unwrap_or(JsonValue::Null);
253
+
254
+
if op.action == "create" {
255
+
RepoOp::Create {
256
+
path: op.path,
257
+
cid,
258
+
record,
259
+
}
260
+
} else {
261
+
RepoOp::Update {
262
+
path: op.path,
263
+
cid,
264
+
record,
265
+
}
266
+
}
267
+
}
268
+
"delete" => RepoOp::Delete { path: op.path },
269
+
_ => continue,
270
+
};
271
+
ops.push(repo_op);
272
+
}
273
+
274
+
Ok(CommitEvent {
275
+
sequence: raw.seq,
276
+
repo: raw.repo,
277
+
commit: raw.commit,
278
+
rev: raw.rev,
279
+
since: raw.since,
280
+
ops,
281
+
timestamp: raw.time,
282
+
})
283
+
}
+109
-40
src/main.rs
+109
-40
src/main.rs
···
1
-
use std::sync::Arc;
2
-
3
-
use axum::{Extension, Router, routing::get};
4
-
use base64::{Engine, prelude::BASE64_STANDARD};
5
-
use futures::{StreamExt as _, lock::Mutex};
1
+
use axum::{Router, extract::State, routing::get};
2
+
use chrono::{DateTime, NaiveDateTime, Utc};
3
+
use futures::StreamExt as _;
6
4
use listenfd::ListenFd;
7
5
use maud::{DOCTYPE, Markup, html};
8
-
use reqwest::Url;
6
+
use serde_json::Value as JsonValue;
7
+
use sqlx::postgres::PgPoolOptions;
8
+
use sqlx::{Error, PgPool};
9
9
use tokio::net::TcpListener;
10
-
use tokio_tungstenite::tungstenite::Message;
11
10
use tower_http::trace::TraceLayer;
12
11
13
-
type Db = Arc<Mutex<Vec<String>>>;
12
+
pub mod firehose;
13
+
use firehose::{FirehoseEvent, FirehoseOptions, subscribe_repos};
14
+
15
+
type Db = PgPool;
14
16
15
17
#[tokio::main]
16
-
async fn main() {
18
+
async fn main() -> Result<(), Box<dyn std::error::Error>> {
17
19
tracing_subscriber::fmt::init();
20
+
dotenvy::dotenv().ok();
18
21
19
-
let db = Arc::new(Mutex::new(Vec::new()));
22
+
let db_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set");
23
+
let pool = PgPoolOptions::new()
24
+
.max_connections(5)
25
+
.connect(&db_url)
26
+
.await?;
20
27
21
-
let web_server_db = db.clone();
22
-
tokio::spawn(async move { web_server(web_server_db).await });
28
+
sqlx::migrate!("./migrations").run(&pool).await?;
23
29
24
-
let jetstream_db = db.clone();
25
-
firehose_subscriber(jetstream_db).await
26
-
}
30
+
tracing::info!("Database connected and migrations are up to date.");
27
31
28
-
async fn firehose_subscriber(db: Db) {
29
-
tracing::info!("Connecting to firehose...");
32
+
let web_server_pool = pool.clone();
33
+
tokio::spawn(async move { web_server(web_server_pool).await });
30
34
31
-
let (mut socket, response) = tokio_tungstenite::connect_async(
32
-
// Url::parse("wss://relay.upcloud.world/xrpc/com.atproto.sync.subscribeRepos")
33
-
Url::parse("wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos")
34
-
.unwrap()
35
-
.as_str(),
36
-
)
37
-
.await
38
-
.unwrap();
35
+
firehose_subscriber(pool).await;
39
36
40
-
tracing::info!("{:?}", response);
37
+
Ok(())
38
+
}
41
39
42
-
tracing::info!("Connected to firehose!");
40
+
async fn firehose_subscriber(db: Db) {
41
+
tracing::info!("Starting firehose subscriber...");
42
+
43
+
let options = FirehoseOptions {
44
+
relay_url: "wss://relay.upcloud.world".to_string(),
45
+
..Default::default()
46
+
};
43
47
44
-
loop {
45
-
while let Some(Ok(Message::Binary(message))) = socket.next().await {
46
-
let msg = BASE64_STANDARD.encode(message);
47
-
let mut database = db.lock().await;
48
-
database.push(msg);
48
+
let mut stream = Box::pin(subscribe_repos(options));
49
+
50
+
while let Some(event_result) = stream.next().await {
51
+
match event_result {
52
+
Ok(FirehoseEvent::Commit(commit)) => {
53
+
tracing::debug!(
54
+
"Received a commit from {} with {} ops",
55
+
commit.repo,
56
+
commit.ops.len()
57
+
);
58
+
59
+
match serde_json::to_value(&commit) {
60
+
Ok(json_value) => {
61
+
if let Err(e) = create_firehose_record(&db, &json_value).await {
62
+
tracing::error!("Failed to write record to DB: {}", e);
63
+
}
64
+
}
65
+
Err(e) => {
66
+
tracing::error!("Failed to serialize commit to JSON: {}", e);
67
+
}
68
+
}
69
+
}
70
+
Ok(event) => {
71
+
tracing::info!("Received other event: {:?}", event);
72
+
}
73
+
Err(e) => {
74
+
tracing::error!("Firehose stream error: {}", e);
75
+
}
49
76
}
50
77
}
51
78
}
···
55
82
56
83
let app = Router::new()
57
84
.route("/", get(index))
58
-
.layer(Extension(db))
85
+
.with_state(db)
59
86
.layer(TraceLayer::new_for_http());
60
87
61
88
let mut listenfd = ListenFd::from_env();
···
66
93
TcpListener::from_std(listener).unwrap()
67
94
}
68
95
// otherwise fall back to local listening
69
-
None => TcpListener::bind("127.0.0.1:3000").await.unwrap(),
96
+
_none => TcpListener::bind("127.0.0.1:3000").await.unwrap(),
70
97
};
71
98
72
-
let server = axum::serve(listener, app);
73
99
tracing::info!("Web server started!");
100
+
axum::serve(listener, app).await.unwrap();
101
+
}
74
102
75
-
server.await.unwrap();
103
+
struct FirehoseMessage {
104
+
message: JsonValue,
76
105
}
77
106
78
-
async fn index(Extension(db): Extension<Db>) -> Markup {
79
-
let borrowed_db = db.lock().await;
80
-
let items = borrowed_db.iter().rev().take(100).collect::<Vec<&String>>();
107
+
async fn index(State(db): State<Db>) -> Markup {
108
+
let query_result = sqlx::query_as!(
109
+
FirehoseMessage,
110
+
"SELECT message FROM firehose_messages ORDER BY created_at DESC LIMIT 100"
111
+
)
112
+
.fetch_all(&db)
113
+
.await;
114
+
115
+
let items = match query_result {
116
+
Ok(messages) => messages,
117
+
Err(e) => {
118
+
tracing::error!("Failed to fetch messages from DB: {}", e);
119
+
vec![]
120
+
}
121
+
};
81
122
82
123
page(
83
124
"ShitSky",
···
85
126
p { "Hello from ShitSky" }
86
127
@for item in &items {
87
128
pre {
88
-
(item)
129
+
(serde_json::to_string_pretty(&item.message).unwrap_or_default())
89
130
}
90
131
}
91
132
},
···
106
147
}
107
148
}
108
149
}
150
+
151
+
async fn create_firehose_record(db: &PgPool, record: &JsonValue) -> Result<(), Error> {
152
+
let created_at_opt: Option<NaiveDateTime> = record
153
+
.get("time")
154
+
.and_then(|val| val.as_str())
155
+
.filter(|s| !s.is_empty())
156
+
.and_then(|s| s.parse::<DateTime<Utc>>().ok())
157
+
.map(|dt_utc| dt_utc.naive_utc());
158
+
159
+
if let Some(created_at) = created_at_opt {
160
+
sqlx::query!(
161
+
"INSERT INTO firehose_messages (message, created_at) VALUES ($1, $2)",
162
+
record,
163
+
created_at
164
+
)
165
+
.execute(db)
166
+
.await?;
167
+
} else {
168
+
sqlx::query!(
169
+
"INSERT INTO firehose_messages (message) VALUES ($1)",
170
+
record,
171
+
)
172
+
.execute(db)
173
+
.await?;
174
+
}
175
+
176
+
Ok(())
177
+
}