+1214
-23
Cargo.lock
+1214
-23
Cargo.lock
···
29
29
]
30
30
31
31
[[package]]
32
+
name = "atomic-waker"
33
+
version = "1.1.2"
34
+
source = "registry+https://github.com/rust-lang/crates.io-index"
35
+
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
36
+
37
+
[[package]]
32
38
name = "autocfg"
33
39
version = "1.5.0"
34
40
source = "registry+https://github.com/rust-lang/crates.io-index"
···
41
47
checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002"
42
48
dependencies = [
43
49
"addr2line",
44
-
"cfg-if",
50
+
"cfg-if 1.0.3",
45
51
"libc",
46
52
"miniz_oxide",
47
53
"object",
···
50
56
]
51
57
52
58
[[package]]
59
+
name = "base64"
60
+
version = "0.22.1"
61
+
source = "registry+https://github.com/rust-lang/crates.io-index"
62
+
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
63
+
64
+
[[package]]
53
65
name = "bitflags"
54
66
version = "1.3.2"
55
67
source = "registry+https://github.com/rust-lang/crates.io-index"
···
62
74
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
63
75
64
76
[[package]]
77
+
name = "block-buffer"
78
+
version = "0.7.3"
79
+
source = "registry+https://github.com/rust-lang/crates.io-index"
80
+
checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
81
+
dependencies = [
82
+
"block-padding",
83
+
"byte-tools",
84
+
"byteorder",
85
+
"generic-array",
86
+
]
87
+
88
+
[[package]]
89
+
name = "block-padding"
90
+
version = "0.1.5"
91
+
source = "registry+https://github.com/rust-lang/crates.io-index"
92
+
checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
93
+
dependencies = [
94
+
"byte-tools",
95
+
]
96
+
97
+
[[package]]
98
+
name = "bumpalo"
99
+
version = "3.19.0"
100
+
source = "registry+https://github.com/rust-lang/crates.io-index"
101
+
checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43"
102
+
103
+
[[package]]
104
+
name = "byte-tools"
105
+
version = "0.3.1"
106
+
source = "registry+https://github.com/rust-lang/crates.io-index"
107
+
checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
108
+
109
+
[[package]]
110
+
name = "byteorder"
111
+
version = "1.5.0"
112
+
source = "registry+https://github.com/rust-lang/crates.io-index"
113
+
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
114
+
115
+
[[package]]
116
+
name = "bytes"
117
+
version = "0.4.12"
118
+
source = "registry+https://github.com/rust-lang/crates.io-index"
119
+
checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
120
+
dependencies = [
121
+
"byteorder",
122
+
"iovec",
123
+
]
124
+
125
+
[[package]]
126
+
name = "bytes"
127
+
version = "1.10.1"
128
+
source = "registry+https://github.com/rust-lang/crates.io-index"
129
+
checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a"
130
+
131
+
[[package]]
132
+
name = "cc"
133
+
version = "1.2.36"
134
+
source = "registry+https://github.com/rust-lang/crates.io-index"
135
+
checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54"
136
+
dependencies = [
137
+
"find-msvc-tools",
138
+
"shlex",
139
+
]
140
+
141
+
[[package]]
142
+
name = "cfg-if"
143
+
version = "0.1.10"
144
+
source = "registry+https://github.com/rust-lang/crates.io-index"
145
+
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
146
+
147
+
[[package]]
65
148
name = "cfg-if"
66
149
version = "1.0.3"
67
150
source = "registry+https://github.com/rust-lang/crates.io-index"
68
151
checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
69
152
70
153
[[package]]
154
+
name = "core-foundation"
155
+
version = "0.9.4"
156
+
source = "registry+https://github.com/rust-lang/crates.io-index"
157
+
checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
158
+
dependencies = [
159
+
"core-foundation-sys",
160
+
"libc",
161
+
]
162
+
163
+
[[package]]
164
+
name = "core-foundation-sys"
165
+
version = "0.8.7"
166
+
source = "registry+https://github.com/rust-lang/crates.io-index"
167
+
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
168
+
169
+
[[package]]
71
170
name = "data-encoding"
72
171
version = "2.9.0"
73
172
source = "registry+https://github.com/rust-lang/crates.io-index"
74
173
checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476"
75
174
76
175
[[package]]
176
+
name = "digest"
177
+
version = "0.8.1"
178
+
source = "registry+https://github.com/rust-lang/crates.io-index"
179
+
checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
180
+
dependencies = [
181
+
"generic-array",
182
+
]
183
+
184
+
[[package]]
77
185
name = "displaydoc"
78
186
version = "0.2.5"
79
187
source = "registry+https://github.com/rust-lang/crates.io-index"
···
85
193
]
86
194
87
195
[[package]]
196
+
name = "encoding_rs"
197
+
version = "0.8.35"
198
+
source = "registry+https://github.com/rust-lang/crates.io-index"
199
+
checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3"
200
+
dependencies = [
201
+
"cfg-if 1.0.3",
202
+
]
203
+
204
+
[[package]]
88
205
name = "enum-as-inner"
89
206
version = "0.3.4"
90
207
source = "registry+https://github.com/rust-lang/crates.io-index"
···
97
214
]
98
215
99
216
[[package]]
217
+
name = "equivalent"
218
+
version = "1.0.2"
219
+
source = "registry+https://github.com/rust-lang/crates.io-index"
220
+
checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
221
+
222
+
[[package]]
223
+
name = "errno"
224
+
version = "0.3.13"
225
+
source = "registry+https://github.com/rust-lang/crates.io-index"
226
+
checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad"
227
+
dependencies = [
228
+
"libc",
229
+
"windows-sys 0.59.0",
230
+
]
231
+
232
+
[[package]]
233
+
name = "fake-simd"
234
+
version = "0.1.2"
235
+
source = "registry+https://github.com/rust-lang/crates.io-index"
236
+
checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
237
+
238
+
[[package]]
239
+
name = "fastrand"
240
+
version = "2.3.0"
241
+
source = "registry+https://github.com/rust-lang/crates.io-index"
242
+
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
243
+
244
+
[[package]]
245
+
name = "find-msvc-tools"
246
+
version = "0.1.1"
247
+
source = "registry+https://github.com/rust-lang/crates.io-index"
248
+
checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d"
249
+
250
+
[[package]]
251
+
name = "fnv"
252
+
version = "1.0.7"
253
+
source = "registry+https://github.com/rust-lang/crates.io-index"
254
+
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
255
+
256
+
[[package]]
257
+
name = "foreign-types"
258
+
version = "0.3.2"
259
+
source = "registry+https://github.com/rust-lang/crates.io-index"
260
+
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
261
+
dependencies = [
262
+
"foreign-types-shared",
263
+
]
264
+
265
+
[[package]]
266
+
name = "foreign-types-shared"
267
+
version = "0.1.1"
268
+
source = "registry+https://github.com/rust-lang/crates.io-index"
269
+
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
270
+
271
+
[[package]]
100
272
name = "form_urlencoded"
101
273
version = "1.2.2"
102
274
source = "registry+https://github.com/rust-lang/crates.io-index"
···
106
278
]
107
279
108
280
[[package]]
281
+
name = "fuchsia-zircon"
282
+
version = "0.3.3"
283
+
source = "registry+https://github.com/rust-lang/crates.io-index"
284
+
checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
285
+
dependencies = [
286
+
"bitflags 1.3.2",
287
+
"fuchsia-zircon-sys",
288
+
]
289
+
290
+
[[package]]
291
+
name = "fuchsia-zircon-sys"
292
+
version = "0.3.3"
293
+
source = "registry+https://github.com/rust-lang/crates.io-index"
294
+
checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
295
+
296
+
[[package]]
109
297
name = "futures-channel"
110
298
version = "0.3.31"
111
299
source = "registry+https://github.com/rust-lang/crates.io-index"
112
300
checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
113
301
dependencies = [
114
302
"futures-core",
303
+
"futures-sink",
115
304
]
116
305
117
306
[[package]]
···
127
316
checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
128
317
129
318
[[package]]
319
+
name = "futures-sink"
320
+
version = "0.3.31"
321
+
source = "registry+https://github.com/rust-lang/crates.io-index"
322
+
checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
323
+
324
+
[[package]]
130
325
name = "futures-task"
131
326
version = "0.3.31"
132
327
source = "registry+https://github.com/rust-lang/crates.io-index"
···
139
334
checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
140
335
dependencies = [
141
336
"futures-core",
337
+
"futures-io",
338
+
"futures-sink",
142
339
"futures-task",
340
+
"memchr",
143
341
"pin-project-lite",
144
342
"pin-utils",
145
343
"slab",
146
344
]
147
345
148
346
[[package]]
347
+
name = "generic-array"
348
+
version = "0.12.4"
349
+
source = "registry+https://github.com/rust-lang/crates.io-index"
350
+
checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
351
+
dependencies = [
352
+
"typenum",
353
+
]
354
+
355
+
[[package]]
356
+
name = "getrandom"
357
+
version = "0.1.16"
358
+
source = "registry+https://github.com/rust-lang/crates.io-index"
359
+
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
360
+
dependencies = [
361
+
"cfg-if 1.0.3",
362
+
"libc",
363
+
"wasi 0.9.0+wasi-snapshot-preview1",
364
+
]
365
+
366
+
[[package]]
149
367
name = "getrandom"
150
368
version = "0.2.16"
151
369
source = "registry+https://github.com/rust-lang/crates.io-index"
152
370
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
153
371
dependencies = [
154
-
"cfg-if",
372
+
"cfg-if 1.0.3",
373
+
"libc",
374
+
"wasi 0.11.1+wasi-snapshot-preview1",
375
+
]
376
+
377
+
[[package]]
378
+
name = "getrandom"
379
+
version = "0.3.3"
380
+
source = "registry+https://github.com/rust-lang/crates.io-index"
381
+
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
382
+
dependencies = [
383
+
"cfg-if 1.0.3",
155
384
"libc",
156
-
"wasi",
385
+
"r-efi",
386
+
"wasi 0.14.4+wasi-0.2.4",
157
387
]
158
388
159
389
[[package]]
···
163
393
checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
164
394
165
395
[[package]]
396
+
name = "h2"
397
+
version = "0.4.12"
398
+
source = "registry+https://github.com/rust-lang/crates.io-index"
399
+
checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386"
400
+
dependencies = [
401
+
"atomic-waker",
402
+
"bytes 1.10.1",
403
+
"fnv",
404
+
"futures-core",
405
+
"futures-sink",
406
+
"http",
407
+
"indexmap",
408
+
"slab",
409
+
"tokio",
410
+
"tokio-util",
411
+
"tracing",
412
+
]
413
+
414
+
[[package]]
415
+
name = "hashbrown"
416
+
version = "0.15.5"
417
+
source = "registry+https://github.com/rust-lang/crates.io-index"
418
+
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
419
+
420
+
[[package]]
166
421
name = "heck"
167
422
version = "0.4.1"
168
423
source = "registry+https://github.com/rust-lang/crates.io-index"
169
424
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
170
425
171
426
[[package]]
427
+
name = "http"
428
+
version = "1.3.1"
429
+
source = "registry+https://github.com/rust-lang/crates.io-index"
430
+
checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565"
431
+
dependencies = [
432
+
"bytes 1.10.1",
433
+
"fnv",
434
+
"itoa",
435
+
]
436
+
437
+
[[package]]
438
+
name = "http-body"
439
+
version = "1.0.1"
440
+
source = "registry+https://github.com/rust-lang/crates.io-index"
441
+
checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184"
442
+
dependencies = [
443
+
"bytes 1.10.1",
444
+
"http",
445
+
]
446
+
447
+
[[package]]
448
+
name = "http-body-util"
449
+
version = "0.1.3"
450
+
source = "registry+https://github.com/rust-lang/crates.io-index"
451
+
checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a"
452
+
dependencies = [
453
+
"bytes 1.10.1",
454
+
"futures-core",
455
+
"http",
456
+
"http-body",
457
+
"pin-project-lite",
458
+
]
459
+
460
+
[[package]]
461
+
name = "httparse"
462
+
version = "1.10.1"
463
+
source = "registry+https://github.com/rust-lang/crates.io-index"
464
+
checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
465
+
466
+
[[package]]
467
+
name = "hyper"
468
+
version = "1.7.0"
469
+
source = "registry+https://github.com/rust-lang/crates.io-index"
470
+
checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e"
471
+
dependencies = [
472
+
"atomic-waker",
473
+
"bytes 1.10.1",
474
+
"futures-channel",
475
+
"futures-core",
476
+
"h2",
477
+
"http",
478
+
"http-body",
479
+
"httparse",
480
+
"itoa",
481
+
"pin-project-lite",
482
+
"pin-utils",
483
+
"smallvec",
484
+
"tokio",
485
+
"want",
486
+
]
487
+
488
+
[[package]]
489
+
name = "hyper-rustls"
490
+
version = "0.27.7"
491
+
source = "registry+https://github.com/rust-lang/crates.io-index"
492
+
checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58"
493
+
dependencies = [
494
+
"http",
495
+
"hyper",
496
+
"hyper-util",
497
+
"rustls",
498
+
"rustls-pki-types",
499
+
"tokio",
500
+
"tokio-rustls",
501
+
"tower-service",
502
+
]
503
+
504
+
[[package]]
505
+
name = "hyper-tls"
506
+
version = "0.6.0"
507
+
source = "registry+https://github.com/rust-lang/crates.io-index"
508
+
checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0"
509
+
dependencies = [
510
+
"bytes 1.10.1",
511
+
"http-body-util",
512
+
"hyper",
513
+
"hyper-util",
514
+
"native-tls",
515
+
"tokio",
516
+
"tokio-native-tls",
517
+
"tower-service",
518
+
]
519
+
520
+
[[package]]
521
+
name = "hyper-util"
522
+
version = "0.1.16"
523
+
source = "registry+https://github.com/rust-lang/crates.io-index"
524
+
checksum = "8d9b05277c7e8da2c93a568989bb6207bef0112e8d17df7a6eda4a3cf143bc5e"
525
+
dependencies = [
526
+
"base64",
527
+
"bytes 1.10.1",
528
+
"futures-channel",
529
+
"futures-core",
530
+
"futures-util",
531
+
"http",
532
+
"http-body",
533
+
"hyper",
534
+
"ipnet",
535
+
"libc",
536
+
"percent-encoding",
537
+
"pin-project-lite",
538
+
"socket2 0.6.0",
539
+
"system-configuration",
540
+
"tokio",
541
+
"tower-service",
542
+
"tracing",
543
+
"windows-registry",
544
+
]
545
+
546
+
[[package]]
172
547
name = "icu_collections"
173
548
version = "2.0.0"
174
549
source = "registry+https://github.com/rust-lang/crates.io-index"
···
287
662
]
288
663
289
664
[[package]]
665
+
name = "indexmap"
666
+
version = "2.11.0"
667
+
source = "registry+https://github.com/rust-lang/crates.io-index"
668
+
checksum = "f2481980430f9f78649238835720ddccc57e52df14ffce1c6f37391d61b563e9"
669
+
dependencies = [
670
+
"equivalent",
671
+
"hashbrown",
672
+
]
673
+
674
+
[[package]]
290
675
name = "instant"
291
676
version = "0.1.13"
292
677
source = "registry+https://github.com/rust-lang/crates.io-index"
293
678
checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
294
679
dependencies = [
295
-
"cfg-if",
680
+
"cfg-if 1.0.3",
296
681
]
297
682
298
683
[[package]]
···
302
687
checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b"
303
688
dependencies = [
304
689
"bitflags 2.9.4",
305
-
"cfg-if",
690
+
"cfg-if 1.0.3",
691
+
"libc",
692
+
]
693
+
694
+
[[package]]
695
+
name = "iovec"
696
+
version = "0.1.4"
697
+
source = "registry+https://github.com/rust-lang/crates.io-index"
698
+
checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
699
+
dependencies = [
306
700
"libc",
307
701
]
308
702
···
314
708
dependencies = [
315
709
"socket2 0.3.19",
316
710
"widestring",
317
-
"winapi",
711
+
"winapi 0.3.9",
318
712
"winreg",
319
713
]
320
714
···
325
719
checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130"
326
720
327
721
[[package]]
722
+
name = "iri-string"
723
+
version = "0.7.8"
724
+
source = "registry+https://github.com/rust-lang/crates.io-index"
725
+
checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2"
726
+
dependencies = [
727
+
"memchr",
728
+
"serde",
729
+
]
730
+
731
+
[[package]]
732
+
name = "itoa"
733
+
version = "1.0.15"
734
+
source = "registry+https://github.com/rust-lang/crates.io-index"
735
+
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
736
+
737
+
[[package]]
738
+
name = "js-sys"
739
+
version = "0.3.78"
740
+
source = "registry+https://github.com/rust-lang/crates.io-index"
741
+
checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738"
742
+
dependencies = [
743
+
"once_cell",
744
+
"wasm-bindgen",
745
+
]
746
+
747
+
[[package]]
328
748
name = "json"
329
749
version = "0.12.4"
330
750
source = "registry+https://github.com/rust-lang/crates.io-index"
331
751
checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd"
332
752
333
753
[[package]]
754
+
name = "kernel32-sys"
755
+
version = "0.2.2"
756
+
source = "registry+https://github.com/rust-lang/crates.io-index"
757
+
checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
758
+
dependencies = [
759
+
"winapi 0.2.8",
760
+
"winapi-build",
761
+
]
762
+
763
+
[[package]]
334
764
name = "lazy_static"
335
765
version = "1.5.0"
336
766
source = "registry+https://github.com/rust-lang/crates.io-index"
337
767
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
338
768
339
769
[[package]]
770
+
name = "lazycell"
771
+
version = "1.3.0"
772
+
source = "registry+https://github.com/rust-lang/crates.io-index"
773
+
checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
774
+
775
+
[[package]]
340
776
name = "libc"
341
777
version = "0.2.175"
342
778
source = "registry+https://github.com/rust-lang/crates.io-index"
···
347
783
version = "0.5.6"
348
784
source = "registry+https://github.com/rust-lang/crates.io-index"
349
785
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
786
+
787
+
[[package]]
788
+
name = "linux-raw-sys"
789
+
version = "0.9.4"
790
+
source = "registry+https://github.com/rust-lang/crates.io-index"
791
+
checksum = "cd945864f07fe9f5371a27ad7b52a172b4b499999f1d97574c9fa68373937e12"
350
792
351
793
[[package]]
352
794
name = "litemap"
···
392
834
checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0"
393
835
394
836
[[package]]
837
+
name = "mime"
838
+
version = "0.3.17"
839
+
source = "registry+https://github.com/rust-lang/crates.io-index"
840
+
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
841
+
842
+
[[package]]
395
843
name = "miniz_oxide"
396
844
version = "0.8.9"
397
845
source = "registry+https://github.com/rust-lang/crates.io-index"
···
402
850
403
851
[[package]]
404
852
name = "mio"
853
+
version = "0.6.23"
854
+
source = "registry+https://github.com/rust-lang/crates.io-index"
855
+
checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4"
856
+
dependencies = [
857
+
"cfg-if 0.1.10",
858
+
"fuchsia-zircon",
859
+
"fuchsia-zircon-sys",
860
+
"iovec",
861
+
"kernel32-sys",
862
+
"libc",
863
+
"log",
864
+
"miow",
865
+
"net2",
866
+
"slab",
867
+
"winapi 0.2.8",
868
+
]
869
+
870
+
[[package]]
871
+
name = "mio"
405
872
version = "1.0.4"
406
873
source = "registry+https://github.com/rust-lang/crates.io-index"
407
874
checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c"
408
875
dependencies = [
409
876
"libc",
410
-
"wasi",
411
-
"windows-sys",
877
+
"wasi 0.11.1+wasi-snapshot-preview1",
878
+
"windows-sys 0.59.0",
879
+
]
880
+
881
+
[[package]]
882
+
name = "mio-extras"
883
+
version = "2.0.6"
884
+
source = "registry+https://github.com/rust-lang/crates.io-index"
885
+
checksum = "52403fe290012ce777c4626790c8951324a2b9e3316b3143779c72b029742f19"
886
+
dependencies = [
887
+
"lazycell",
888
+
"log",
889
+
"mio 0.6.23",
890
+
"slab",
891
+
]
892
+
893
+
[[package]]
894
+
name = "miow"
895
+
version = "0.2.2"
896
+
source = "registry+https://github.com/rust-lang/crates.io-index"
897
+
checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d"
898
+
dependencies = [
899
+
"kernel32-sys",
900
+
"net2",
901
+
"winapi 0.2.8",
902
+
"ws2_32-sys",
903
+
]
904
+
905
+
[[package]]
906
+
name = "native-tls"
907
+
version = "0.2.14"
908
+
source = "registry+https://github.com/rust-lang/crates.io-index"
909
+
checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e"
910
+
dependencies = [
911
+
"libc",
912
+
"log",
913
+
"openssl",
914
+
"openssl-probe",
915
+
"openssl-sys",
916
+
"schannel",
917
+
"security-framework",
918
+
"security-framework-sys",
919
+
"tempfile",
920
+
]
921
+
922
+
[[package]]
923
+
name = "net2"
924
+
version = "0.2.39"
925
+
source = "registry+https://github.com/rust-lang/crates.io-index"
926
+
checksum = "b13b648036a2339d06de780866fbdfda0dde886de7b3af2ddeba8b14f4ee34ac"
927
+
dependencies = [
928
+
"cfg-if 0.1.10",
929
+
"libc",
930
+
"winapi 0.3.9",
412
931
]
413
932
414
933
[[package]]
···
421
940
]
422
941
423
942
[[package]]
943
+
name = "once_cell"
944
+
version = "1.21.3"
945
+
source = "registry+https://github.com/rust-lang/crates.io-index"
946
+
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
947
+
948
+
[[package]]
949
+
name = "opaque-debug"
950
+
version = "0.2.3"
951
+
source = "registry+https://github.com/rust-lang/crates.io-index"
952
+
checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
953
+
954
+
[[package]]
955
+
name = "openssl"
956
+
version = "0.10.73"
957
+
source = "registry+https://github.com/rust-lang/crates.io-index"
958
+
checksum = "8505734d46c8ab1e19a1dce3aef597ad87dcb4c37e7188231769bd6bd51cebf8"
959
+
dependencies = [
960
+
"bitflags 2.9.4",
961
+
"cfg-if 1.0.3",
962
+
"foreign-types",
963
+
"libc",
964
+
"once_cell",
965
+
"openssl-macros",
966
+
"openssl-sys",
967
+
]
968
+
969
+
[[package]]
970
+
name = "openssl-macros"
971
+
version = "0.1.1"
972
+
source = "registry+https://github.com/rust-lang/crates.io-index"
973
+
checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
974
+
dependencies = [
975
+
"proc-macro2",
976
+
"quote",
977
+
"syn 2.0.106",
978
+
]
979
+
980
+
[[package]]
981
+
name = "openssl-probe"
982
+
version = "0.1.6"
983
+
source = "registry+https://github.com/rust-lang/crates.io-index"
984
+
checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e"
985
+
986
+
[[package]]
987
+
name = "openssl-sys"
988
+
version = "0.9.109"
989
+
source = "registry+https://github.com/rust-lang/crates.io-index"
990
+
checksum = "90096e2e47630d78b7d1c20952dc621f957103f8bc2c8359ec81290d75238571"
991
+
dependencies = [
992
+
"cc",
993
+
"libc",
994
+
"pkg-config",
995
+
"vcpkg",
996
+
]
997
+
998
+
[[package]]
424
999
name = "parking_lot"
425
1000
version = "0.11.2"
426
1001
source = "registry+https://github.com/rust-lang/crates.io-index"
···
437
1012
source = "registry+https://github.com/rust-lang/crates.io-index"
438
1013
checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
439
1014
dependencies = [
440
-
"cfg-if",
1015
+
"cfg-if 1.0.3",
441
1016
"instant",
442
1017
"libc",
443
1018
"redox_syscall",
444
1019
"smallvec",
445
-
"winapi",
1020
+
"winapi 0.3.9",
446
1021
]
447
1022
448
1023
[[package]]
···
464
1039
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
465
1040
466
1041
[[package]]
1042
+
name = "pkg-config"
1043
+
version = "0.3.32"
1044
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1045
+
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
1046
+
1047
+
[[package]]
467
1048
name = "potential_utf"
468
1049
version = "0.1.3"
469
1050
source = "registry+https://github.com/rust-lang/crates.io-index"
···
500
1081
]
501
1082
502
1083
[[package]]
1084
+
name = "r-efi"
1085
+
version = "5.3.0"
1086
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1087
+
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
1088
+
1089
+
[[package]]
1090
+
name = "rand"
1091
+
version = "0.7.3"
1092
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1093
+
checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
1094
+
dependencies = [
1095
+
"getrandom 0.1.16",
1096
+
"libc",
1097
+
"rand_chacha 0.2.2",
1098
+
"rand_core 0.5.1",
1099
+
"rand_hc",
1100
+
]
1101
+
1102
+
[[package]]
503
1103
name = "rand"
504
1104
version = "0.8.5"
505
1105
source = "registry+https://github.com/rust-lang/crates.io-index"
506
1106
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
507
1107
dependencies = [
508
1108
"libc",
509
-
"rand_chacha",
510
-
"rand_core",
1109
+
"rand_chacha 0.3.1",
1110
+
"rand_core 0.6.4",
1111
+
]
1112
+
1113
+
[[package]]
1114
+
name = "rand_chacha"
1115
+
version = "0.2.2"
1116
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1117
+
checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
1118
+
dependencies = [
1119
+
"ppv-lite86",
1120
+
"rand_core 0.5.1",
511
1121
]
512
1122
513
1123
[[package]]
···
517
1127
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
518
1128
dependencies = [
519
1129
"ppv-lite86",
520
-
"rand_core",
1130
+
"rand_core 0.6.4",
1131
+
]
1132
+
1133
+
[[package]]
1134
+
name = "rand_core"
1135
+
version = "0.5.1"
1136
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1137
+
checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
1138
+
dependencies = [
1139
+
"getrandom 0.1.16",
521
1140
]
522
1141
523
1142
[[package]]
···
526
1145
source = "registry+https://github.com/rust-lang/crates.io-index"
527
1146
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
528
1147
dependencies = [
529
-
"getrandom",
1148
+
"getrandom 0.2.16",
1149
+
]
1150
+
1151
+
[[package]]
1152
+
name = "rand_hc"
1153
+
version = "0.2.0"
1154
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1155
+
checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
1156
+
dependencies = [
1157
+
"rand_core 0.5.1",
530
1158
]
531
1159
532
1160
[[package]]
···
539
1167
]
540
1168
541
1169
[[package]]
1170
+
name = "reqwest"
1171
+
version = "0.12.23"
1172
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1173
+
checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb"
1174
+
dependencies = [
1175
+
"base64",
1176
+
"bytes 1.10.1",
1177
+
"encoding_rs",
1178
+
"futures-channel",
1179
+
"futures-core",
1180
+
"futures-util",
1181
+
"h2",
1182
+
"http",
1183
+
"http-body",
1184
+
"http-body-util",
1185
+
"hyper",
1186
+
"hyper-rustls",
1187
+
"hyper-tls",
1188
+
"hyper-util",
1189
+
"js-sys",
1190
+
"log",
1191
+
"mime",
1192
+
"native-tls",
1193
+
"percent-encoding",
1194
+
"pin-project-lite",
1195
+
"rustls-pki-types",
1196
+
"serde",
1197
+
"serde_json",
1198
+
"serde_urlencoded",
1199
+
"sync_wrapper",
1200
+
"tokio",
1201
+
"tokio-native-tls",
1202
+
"tower",
1203
+
"tower-http",
1204
+
"tower-service",
1205
+
"url",
1206
+
"wasm-bindgen",
1207
+
"wasm-bindgen-futures",
1208
+
"web-sys",
1209
+
]
1210
+
1211
+
[[package]]
542
1212
name = "resolv-conf"
543
1213
version = "0.7.4"
544
1214
source = "registry+https://github.com/rust-lang/crates.io-index"
545
1215
checksum = "95325155c684b1c89f7765e30bc1c42e4a6da51ca513615660cb8a62ef9a88e3"
546
1216
547
1217
[[package]]
1218
+
name = "ring"
1219
+
version = "0.17.14"
1220
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1221
+
checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
1222
+
dependencies = [
1223
+
"cc",
1224
+
"cfg-if 1.0.3",
1225
+
"getrandom 0.2.16",
1226
+
"libc",
1227
+
"untrusted",
1228
+
"windows-sys 0.52.0",
1229
+
]
1230
+
1231
+
[[package]]
548
1232
name = "rustc-demangle"
549
1233
version = "0.1.26"
550
1234
source = "registry+https://github.com/rust-lang/crates.io-index"
551
1235
checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace"
552
1236
553
1237
[[package]]
1238
+
name = "rustix"
1239
+
version = "1.0.8"
1240
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1241
+
checksum = "11181fbabf243db407ef8df94a6ce0b2f9a733bd8be4ad02b4eda9602296cac8"
1242
+
dependencies = [
1243
+
"bitflags 2.9.4",
1244
+
"errno",
1245
+
"libc",
1246
+
"linux-raw-sys",
1247
+
"windows-sys 0.59.0",
1248
+
]
1249
+
1250
+
[[package]]
1251
+
name = "rustls"
1252
+
version = "0.23.31"
1253
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1254
+
checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc"
1255
+
dependencies = [
1256
+
"once_cell",
1257
+
"rustls-pki-types",
1258
+
"rustls-webpki",
1259
+
"subtle",
1260
+
"zeroize",
1261
+
]
1262
+
1263
+
[[package]]
1264
+
name = "rustls-pki-types"
1265
+
version = "1.12.0"
1266
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1267
+
checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79"
1268
+
dependencies = [
1269
+
"zeroize",
1270
+
]
1271
+
1272
+
[[package]]
1273
+
name = "rustls-webpki"
1274
+
version = "0.103.4"
1275
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1276
+
checksum = "0a17884ae0c1b773f1ccd2bd4a8c72f16da897310a98b0e84bf349ad5ead92fc"
1277
+
dependencies = [
1278
+
"ring",
1279
+
"rustls-pki-types",
1280
+
"untrusted",
1281
+
]
1282
+
1283
+
[[package]]
1284
+
name = "rustversion"
1285
+
version = "1.0.22"
1286
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1287
+
checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
1288
+
1289
+
[[package]]
1290
+
name = "ryu"
1291
+
version = "1.0.20"
1292
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1293
+
checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
1294
+
1295
+
[[package]]
1296
+
name = "schannel"
1297
+
version = "0.1.27"
1298
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1299
+
checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d"
1300
+
dependencies = [
1301
+
"windows-sys 0.59.0",
1302
+
]
1303
+
1304
+
[[package]]
554
1305
name = "scopeguard"
555
1306
version = "1.2.0"
556
1307
source = "registry+https://github.com/rust-lang/crates.io-index"
557
1308
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
558
1309
559
1310
[[package]]
1311
+
name = "security-framework"
1312
+
version = "2.11.1"
1313
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1314
+
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
1315
+
dependencies = [
1316
+
"bitflags 2.9.4",
1317
+
"core-foundation",
1318
+
"core-foundation-sys",
1319
+
"libc",
1320
+
"security-framework-sys",
1321
+
]
1322
+
1323
+
[[package]]
1324
+
name = "security-framework-sys"
1325
+
version = "2.14.0"
1326
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1327
+
checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32"
1328
+
dependencies = [
1329
+
"core-foundation-sys",
1330
+
"libc",
1331
+
]
1332
+
1333
+
[[package]]
560
1334
name = "serde"
561
1335
version = "1.0.219"
562
1336
source = "registry+https://github.com/rust-lang/crates.io-index"
···
577
1351
]
578
1352
579
1353
[[package]]
1354
+
name = "serde_json"
1355
+
version = "1.0.143"
1356
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1357
+
checksum = "d401abef1d108fbd9cbaebc3e46611f4b1021f714a0597a71f41ee463f5f4a5a"
1358
+
dependencies = [
1359
+
"itoa",
1360
+
"memchr",
1361
+
"ryu",
1362
+
"serde",
1363
+
]
1364
+
1365
+
[[package]]
1366
+
name = "serde_urlencoded"
1367
+
version = "0.7.1"
1368
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1369
+
checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
1370
+
dependencies = [
1371
+
"form_urlencoded",
1372
+
"itoa",
1373
+
"ryu",
1374
+
"serde",
1375
+
]
1376
+
1377
+
[[package]]
1378
+
name = "sha-1"
1379
+
version = "0.8.2"
1380
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1381
+
checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
1382
+
dependencies = [
1383
+
"block-buffer",
1384
+
"digest",
1385
+
"fake-simd",
1386
+
"opaque-debug",
1387
+
]
1388
+
1389
+
[[package]]
1390
+
name = "shlex"
1391
+
version = "1.3.0"
1392
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1393
+
checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
1394
+
1395
+
[[package]]
580
1396
name = "slab"
581
1397
version = "0.4.11"
582
1398
source = "registry+https://github.com/rust-lang/crates.io-index"
···
594
1410
source = "registry+https://github.com/rust-lang/crates.io-index"
595
1411
checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
596
1412
dependencies = [
597
-
"cfg-if",
1413
+
"cfg-if 1.0.3",
598
1414
"libc",
599
-
"winapi",
1415
+
"winapi 0.3.9",
600
1416
]
601
1417
602
1418
[[package]]
···
606
1422
checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807"
607
1423
dependencies = [
608
1424
"libc",
609
-
"windows-sys",
1425
+
"windows-sys 0.59.0",
610
1426
]
611
1427
612
1428
[[package]]
···
616
1432
checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
617
1433
618
1434
[[package]]
1435
+
name = "subtle"
1436
+
version = "2.6.1"
1437
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1438
+
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
1439
+
1440
+
[[package]]
619
1441
name = "syn"
620
1442
version = "1.0.109"
621
1443
source = "registry+https://github.com/rust-lang/crates.io-index"
···
638
1460
]
639
1461
640
1462
[[package]]
1463
+
name = "sync_wrapper"
1464
+
version = "1.0.2"
1465
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1466
+
checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
1467
+
dependencies = [
1468
+
"futures-core",
1469
+
]
1470
+
1471
+
[[package]]
641
1472
name = "synstructure"
642
1473
version = "0.13.2"
643
1474
source = "registry+https://github.com/rust-lang/crates.io-index"
···
649
1480
]
650
1481
651
1482
[[package]]
1483
+
name = "system-configuration"
1484
+
version = "0.6.1"
1485
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1486
+
checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b"
1487
+
dependencies = [
1488
+
"bitflags 2.9.4",
1489
+
"core-foundation",
1490
+
"system-configuration-sys",
1491
+
]
1492
+
1493
+
[[package]]
1494
+
name = "system-configuration-sys"
1495
+
version = "0.6.0"
1496
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1497
+
checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4"
1498
+
dependencies = [
1499
+
"core-foundation-sys",
1500
+
"libc",
1501
+
]
1502
+
1503
+
[[package]]
652
1504
name = "tangled-on-commit"
653
1505
version = "0.1.0"
654
1506
dependencies = [
655
1507
"json",
1508
+
"reqwest",
656
1509
"trust-dns-resolver",
1510
+
"ws",
1511
+
]
1512
+
1513
+
[[package]]
1514
+
name = "tempfile"
1515
+
version = "3.21.0"
1516
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1517
+
checksum = "15b61f8f20e3a6f7e0649d825294eaf317edce30f82cf6026e7e4cb9222a7d1e"
1518
+
dependencies = [
1519
+
"fastrand",
1520
+
"getrandom 0.3.3",
1521
+
"once_cell",
1522
+
"rustix",
1523
+
"windows-sys 0.59.0",
657
1524
]
658
1525
659
1526
[[package]]
···
708
1575
checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038"
709
1576
dependencies = [
710
1577
"backtrace",
1578
+
"bytes 1.10.1",
711
1579
"io-uring",
712
1580
"libc",
713
-
"mio",
1581
+
"mio 1.0.4",
714
1582
"pin-project-lite",
715
1583
"slab",
716
1584
"socket2 0.6.0",
717
-
"windows-sys",
1585
+
"windows-sys 0.59.0",
1586
+
]
1587
+
1588
+
[[package]]
1589
+
name = "tokio-native-tls"
1590
+
version = "0.3.1"
1591
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1592
+
checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
1593
+
dependencies = [
1594
+
"native-tls",
1595
+
"tokio",
1596
+
]
1597
+
1598
+
[[package]]
1599
+
name = "tokio-rustls"
1600
+
version = "0.26.2"
1601
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1602
+
checksum = "8e727b36a1a0e8b74c376ac2211e40c2c8af09fb4013c60d910495810f008e9b"
1603
+
dependencies = [
1604
+
"rustls",
1605
+
"tokio",
1606
+
]
1607
+
1608
+
[[package]]
1609
+
name = "tokio-util"
1610
+
version = "0.7.16"
1611
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1612
+
checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5"
1613
+
dependencies = [
1614
+
"bytes 1.10.1",
1615
+
"futures-core",
1616
+
"futures-sink",
1617
+
"pin-project-lite",
1618
+
"tokio",
1619
+
]
1620
+
1621
+
[[package]]
1622
+
name = "tower"
1623
+
version = "0.5.2"
1624
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1625
+
checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
1626
+
dependencies = [
1627
+
"futures-core",
1628
+
"futures-util",
1629
+
"pin-project-lite",
1630
+
"sync_wrapper",
1631
+
"tokio",
1632
+
"tower-layer",
1633
+
"tower-service",
1634
+
]
1635
+
1636
+
[[package]]
1637
+
name = "tower-http"
1638
+
version = "0.6.6"
1639
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1640
+
checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2"
1641
+
dependencies = [
1642
+
"bitflags 2.9.4",
1643
+
"bytes 1.10.1",
1644
+
"futures-util",
1645
+
"http",
1646
+
"http-body",
1647
+
"iri-string",
1648
+
"pin-project-lite",
1649
+
"tower",
1650
+
"tower-layer",
1651
+
"tower-service",
1652
+
]
1653
+
1654
+
[[package]]
1655
+
name = "tower-layer"
1656
+
version = "0.3.3"
1657
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1658
+
checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
1659
+
1660
+
[[package]]
1661
+
name = "tower-service"
1662
+
version = "0.3.3"
1663
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1664
+
checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
1665
+
1666
+
[[package]]
1667
+
name = "tracing"
1668
+
version = "0.1.41"
1669
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1670
+
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
1671
+
dependencies = [
1672
+
"pin-project-lite",
1673
+
"tracing-core",
1674
+
]
1675
+
1676
+
[[package]]
1677
+
name = "tracing-core"
1678
+
version = "0.1.34"
1679
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1680
+
checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
1681
+
dependencies = [
1682
+
"once_cell",
718
1683
]
719
1684
720
1685
[[package]]
···
724
1689
checksum = "ca94d4e9feb6a181c690c4040d7a24ef34018d8313ac5044a61d21222ae24e31"
725
1690
dependencies = [
726
1691
"async-trait",
727
-
"cfg-if",
1692
+
"cfg-if 1.0.3",
728
1693
"data-encoding",
729
1694
"enum-as-inner",
730
1695
"futures-channel",
···
734
1699
"ipnet",
735
1700
"lazy_static",
736
1701
"log",
737
-
"rand",
1702
+
"rand 0.8.5",
738
1703
"smallvec",
739
1704
"thiserror",
740
1705
"tinyvec",
···
748
1713
source = "registry+https://github.com/rust-lang/crates.io-index"
749
1714
checksum = "ecae383baad9995efaa34ce8e57d12c3f305e545887472a492b838f4b5cfb77a"
750
1715
dependencies = [
751
-
"cfg-if",
1716
+
"cfg-if 1.0.3",
752
1717
"futures-util",
753
1718
"ipconfig",
754
1719
"lazy_static",
···
763
1728
]
764
1729
765
1730
[[package]]
1731
+
name = "try-lock"
1732
+
version = "0.2.5"
1733
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1734
+
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
1735
+
1736
+
[[package]]
1737
+
name = "typenum"
1738
+
version = "1.18.0"
1739
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1740
+
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
1741
+
1742
+
[[package]]
766
1743
name = "unicode-bidi"
767
1744
version = "0.3.18"
768
1745
source = "registry+https://github.com/rust-lang/crates.io-index"
···
784
1761
]
785
1762
786
1763
[[package]]
1764
+
name = "untrusted"
1765
+
version = "0.9.0"
1766
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1767
+
checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
1768
+
1769
+
[[package]]
787
1770
name = "url"
788
1771
version = "2.5.7"
789
1772
source = "registry+https://github.com/rust-lang/crates.io-index"
···
802
1785
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
803
1786
804
1787
[[package]]
1788
+
name = "vcpkg"
1789
+
version = "0.2.15"
1790
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1791
+
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
1792
+
1793
+
[[package]]
1794
+
name = "want"
1795
+
version = "0.3.1"
1796
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1797
+
checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
1798
+
dependencies = [
1799
+
"try-lock",
1800
+
]
1801
+
1802
+
[[package]]
1803
+
name = "wasi"
1804
+
version = "0.9.0+wasi-snapshot-preview1"
1805
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1806
+
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
1807
+
1808
+
[[package]]
805
1809
name = "wasi"
806
1810
version = "0.11.1+wasi-snapshot-preview1"
807
1811
source = "registry+https://github.com/rust-lang/crates.io-index"
808
1812
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
809
1813
810
1814
[[package]]
1815
+
name = "wasi"
1816
+
version = "0.14.4+wasi-0.2.4"
1817
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1818
+
checksum = "88a5f4a424faf49c3c2c344f166f0662341d470ea185e939657aaff130f0ec4a"
1819
+
dependencies = [
1820
+
"wit-bindgen",
1821
+
]
1822
+
1823
+
[[package]]
1824
+
name = "wasm-bindgen"
1825
+
version = "0.2.101"
1826
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1827
+
checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b"
1828
+
dependencies = [
1829
+
"cfg-if 1.0.3",
1830
+
"once_cell",
1831
+
"rustversion",
1832
+
"wasm-bindgen-macro",
1833
+
"wasm-bindgen-shared",
1834
+
]
1835
+
1836
+
[[package]]
1837
+
name = "wasm-bindgen-backend"
1838
+
version = "0.2.101"
1839
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1840
+
checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb"
1841
+
dependencies = [
1842
+
"bumpalo",
1843
+
"log",
1844
+
"proc-macro2",
1845
+
"quote",
1846
+
"syn 2.0.106",
1847
+
"wasm-bindgen-shared",
1848
+
]
1849
+
1850
+
[[package]]
1851
+
name = "wasm-bindgen-futures"
1852
+
version = "0.4.51"
1853
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1854
+
checksum = "0ca85039a9b469b38336411d6d6ced91f3fc87109a2a27b0c197663f5144dffe"
1855
+
dependencies = [
1856
+
"cfg-if 1.0.3",
1857
+
"js-sys",
1858
+
"once_cell",
1859
+
"wasm-bindgen",
1860
+
"web-sys",
1861
+
]
1862
+
1863
+
[[package]]
1864
+
name = "wasm-bindgen-macro"
1865
+
version = "0.2.101"
1866
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1867
+
checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d"
1868
+
dependencies = [
1869
+
"quote",
1870
+
"wasm-bindgen-macro-support",
1871
+
]
1872
+
1873
+
[[package]]
1874
+
name = "wasm-bindgen-macro-support"
1875
+
version = "0.2.101"
1876
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1877
+
checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa"
1878
+
dependencies = [
1879
+
"proc-macro2",
1880
+
"quote",
1881
+
"syn 2.0.106",
1882
+
"wasm-bindgen-backend",
1883
+
"wasm-bindgen-shared",
1884
+
]
1885
+
1886
+
[[package]]
1887
+
name = "wasm-bindgen-shared"
1888
+
version = "0.2.101"
1889
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1890
+
checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1"
1891
+
dependencies = [
1892
+
"unicode-ident",
1893
+
]
1894
+
1895
+
[[package]]
1896
+
name = "web-sys"
1897
+
version = "0.3.78"
1898
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1899
+
checksum = "77e4b637749ff0d92b8fad63aa1f7cff3cbe125fd49c175cd6345e7272638b12"
1900
+
dependencies = [
1901
+
"js-sys",
1902
+
"wasm-bindgen",
1903
+
]
1904
+
1905
+
[[package]]
811
1906
name = "widestring"
812
1907
version = "0.4.3"
813
1908
source = "registry+https://github.com/rust-lang/crates.io-index"
···
815
1910
816
1911
[[package]]
817
1912
name = "winapi"
1913
+
version = "0.2.8"
1914
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1915
+
checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
1916
+
1917
+
[[package]]
1918
+
name = "winapi"
818
1919
version = "0.3.9"
819
1920
source = "registry+https://github.com/rust-lang/crates.io-index"
820
1921
checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
···
822
1923
"winapi-i686-pc-windows-gnu",
823
1924
"winapi-x86_64-pc-windows-gnu",
824
1925
]
1926
+
1927
+
[[package]]
1928
+
name = "winapi-build"
1929
+
version = "0.1.1"
1930
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1931
+
checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
825
1932
826
1933
[[package]]
827
1934
name = "winapi-i686-pc-windows-gnu"
···
836
1943
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
837
1944
838
1945
[[package]]
1946
+
name = "windows-link"
1947
+
version = "0.1.3"
1948
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1949
+
checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a"
1950
+
1951
+
[[package]]
1952
+
name = "windows-registry"
1953
+
version = "0.5.3"
1954
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1955
+
checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e"
1956
+
dependencies = [
1957
+
"windows-link",
1958
+
"windows-result",
1959
+
"windows-strings",
1960
+
]
1961
+
1962
+
[[package]]
1963
+
name = "windows-result"
1964
+
version = "0.3.4"
1965
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1966
+
checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6"
1967
+
dependencies = [
1968
+
"windows-link",
1969
+
]
1970
+
1971
+
[[package]]
1972
+
name = "windows-strings"
1973
+
version = "0.4.2"
1974
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1975
+
checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57"
1976
+
dependencies = [
1977
+
"windows-link",
1978
+
]
1979
+
1980
+
[[package]]
1981
+
name = "windows-sys"
1982
+
version = "0.52.0"
1983
+
source = "registry+https://github.com/rust-lang/crates.io-index"
1984
+
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
1985
+
dependencies = [
1986
+
"windows-targets",
1987
+
]
1988
+
1989
+
[[package]]
839
1990
name = "windows-sys"
840
1991
version = "0.59.0"
841
1992
source = "registry+https://github.com/rust-lang/crates.io-index"
···
914
2065
source = "registry+https://github.com/rust-lang/crates.io-index"
915
2066
checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9"
916
2067
dependencies = [
917
-
"winapi",
2068
+
"winapi 0.3.9",
918
2069
]
919
2070
920
2071
[[package]]
2072
+
name = "wit-bindgen"
2073
+
version = "0.45.1"
2074
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2075
+
checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36"
2076
+
2077
+
[[package]]
921
2078
name = "writeable"
922
2079
version = "0.6.1"
923
2080
source = "registry+https://github.com/rust-lang/crates.io-index"
924
2081
checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb"
2082
+
2083
+
[[package]]
2084
+
name = "ws"
2085
+
version = "0.9.2"
2086
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2087
+
checksum = "25fe90c75f236a0a00247d5900226aea4f2d7b05ccc34da9e7a8880ff59b5848"
2088
+
dependencies = [
2089
+
"byteorder",
2090
+
"bytes 0.4.12",
2091
+
"httparse",
2092
+
"log",
2093
+
"mio 0.6.23",
2094
+
"mio-extras",
2095
+
"rand 0.7.3",
2096
+
"sha-1",
2097
+
"slab",
2098
+
"url",
2099
+
]
2100
+
2101
+
[[package]]
2102
+
name = "ws2_32-sys"
2103
+
version = "0.2.1"
2104
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2105
+
checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
2106
+
dependencies = [
2107
+
"winapi 0.2.8",
2108
+
"winapi-build",
2109
+
]
925
2110
926
2111
[[package]]
927
2112
name = "yoke"
···
987
2172
"syn 2.0.106",
988
2173
"synstructure",
989
2174
]
2175
+
2176
+
[[package]]
2177
+
name = "zeroize"
2178
+
version = "1.8.1"
2179
+
source = "registry+https://github.com/rust-lang/crates.io-index"
2180
+
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
990
2181
991
2182
[[package]]
992
2183
name = "zerotrie"
+2
Cargo.toml
+2
Cargo.toml
+48
-4
README.md
+48
-4
README.md
···
6
6
$ tangled-on-commit @vielle.dev/tangled-on-commit ./commit.sh
7
7
```
8
8
9
+
> Created for linux. Should work fine on MacOS. Will not work on windows.
10
+
> Note: The shell command is placed inside `/bin/sh -c "COMMAND"`, so make sure to escape quotes and backslashes. I reccomend executing a shell file and piping stdout and stderr to a log file
11
+
9
12
## Installation
10
13
11
-
// TODO
14
+
Prerequisites:
15
+
16
+
- `Git`
17
+
- `Rust` (1.88+)
18
+
- `Cargo`
19
+
- `OpenSSL` (required for ssl connection)
20
+
- `pkg-config` (required for ssl connection)
21
+
22
+
1. Clone this repo:
23
+
`git clone git@tangled.sh:vielle.dev/tangled-on-commit`
24
+
2. Compile the binary:
25
+
`cargo build --release`
26
+
3. Copy the binary to your path:
27
+
`sudo cp ./target/release/tangled-on-commit /bin`
12
28
13
29
## Usage
14
30
15
-
// TODO
31
+
### CLI Arguments
16
32
17
-
## Configuration
33
+
- `tangled-on-commit (-h | --help)`
34
+
Displays this message
18
35
19
-
// TODO
36
+
- `tangled-on-commit`
37
+
No specified handle, repo, or command. Falls back to config/env
38
+
39
+
- `tangled-on-commit SHELL`
40
+
Uses config/env for handle and repo
41
+
42
+
- `tangled-on-commit @HANDLE SHELL`
43
+
Uses config/env for repo
44
+
45
+
- `tangled-on-commit REPO SHELL`
46
+
Uses config/env for handle
47
+
48
+
- `tangled-on-commit @HANDLE/REPO SHELL`
49
+
`tangled-on-commit HANDLE REPO SHELL`
50
+
No config/env
51
+
52
+
### JSON
53
+
54
+
Loads the file `tangled-on-commit.json` from cwd if it exists.
55
+
Reads keys \"handle\", \"repo_name\", and \"shell\".
56
+
Unknown keys are ignored and any key can be ommitted
57
+
JSON is used if the arguments aren't passed to the CLI
58
+
59
+
### Env
60
+
61
+
Loads the environment variables `TANGLED_ON_COMMIT_HANDLE` and `TANGLED_ON_COMMIT_REPO_NAME`
62
+
Shell cannot be set by environment variables.
63
+
Env variables are used if relevant keys are ommitted an arguments aren't passed to the CLI.
+1
src/args.rs
+1
src/args.rs
+145
-7
src/did.rs
+145
-7
src/did.rs
···
4
4
#[derive(Debug)]
5
5
pub struct DidDoc {
6
6
pub did: String,
7
+
pub pds: String,
7
8
}
8
9
9
10
fn get_txt_did(handle: &String) -> Result<String, ()> {
11
+
println!(" Trying dns TXT for _atproto.{}", handle);
10
12
// create a txt resolver
11
13
let resolver = match Resolver::new(ResolverConfig::default(), ResolverOpts::default()) {
12
14
Ok(val) => val,
13
-
Err(_) => return Err(()),
15
+
Err(_) => {
16
+
println!(" Couldn't create a DNS resolver");
17
+
return Err(());
18
+
}
14
19
};
15
20
16
21
// resolve _atproto.handle to a TXT record
17
22
let txt_res = match resolver.txt_lookup("_atproto.".to_owned() + &handle) {
18
23
Ok(val) => val,
19
-
Err(_) => return Err(()), // collect all entries and convert to strings
24
+
Err(_) => {
25
+
println!(" Couldn't resolve to a TXT record");
26
+
return Err(());
27
+
} // collect all entries and convert to strings
20
28
}
21
29
.into_iter()
22
30
.map(|x| x.to_string())
···
30
38
// only 1 did= can exist
31
39
// https://atproto.com/specs/handle#:~:text=If%20multiple%20valid%20records%20with%20different%20DIDs%20are%20present,%20resolution%20should%20fail.
32
40
if did_res.len() != 1 {
41
+
println!(" Found too many DIDs for this handle");
33
42
return Err(());
34
43
}
35
-
let did = did_res[0].clone();
36
44
37
-
return Ok(did.clone());
45
+
return Ok(did_res[0][4..].to_string());
38
46
}
39
47
40
48
fn get_http_did(handle: &String) -> Result<String, ()> {
41
-
return Ok(String::new());
49
+
println!(
50
+
" Trying https for https://{}/.well-known/atproto-did",
51
+
handle
52
+
);
53
+
let res =
54
+
match reqwest::blocking::get("https://".to_owned() + handle + "/.well-known/atproto-did") {
55
+
Ok(val) => val,
56
+
Err(_) => {
57
+
println!(" GET request failed");
58
+
return Err(());
59
+
}
60
+
};
61
+
62
+
// as per spec, non 2xx code means failure
63
+
if !res.status().is_success() {
64
+
println!(
65
+
" Got non 2xx status code: {}",
66
+
res.status().as_str()
67
+
);
68
+
return Err(());
69
+
}
70
+
71
+
let did_unparsed = match res.text() {
72
+
Ok(val) => val,
73
+
Err(_) => {
74
+
println!(" Missing or malformed body response");
75
+
return Err(());
76
+
}
77
+
};
78
+
79
+
let did = did_unparsed.trim();
80
+
81
+
if !did.starts_with("did:") {
82
+
println!(" Did not find a DID");
83
+
return Err(());
84
+
};
85
+
return Ok(String::from(did));
42
86
}
43
87
44
-
pub fn get_did(handle: String) -> Result<DidDoc, ()> {
88
+
fn parse_doc(did: String, text: String) -> Result<DidDoc, ()> {
89
+
let text_json = match json::parse(&text) {
90
+
Ok(val) => val,
91
+
Err(_) => {
92
+
println!(" Malformed DID document");
93
+
return Err(());
94
+
}
95
+
};
96
+
97
+
for service in text_json["service"].members() {
98
+
if service["id"]
99
+
.as_str()
100
+
.is_some_and(|x| x.ends_with("#atproto_pds"))
101
+
&& service["type"]
102
+
.as_str()
103
+
.is_some_and(|x| x == "AtprotoPersonalDataServer")
104
+
&& let Some(pds) = service["serviceEndpoint"].as_str()
105
+
{
106
+
return Ok(DidDoc {
107
+
did: did,
108
+
pds: pds.to_string(),
109
+
});
110
+
}
111
+
}
112
+
113
+
println!(" Missing fields from DID document");
114
+
return Err(());
115
+
}
116
+
117
+
fn get_plc_doc(plc: &str) -> Result<DidDoc, ()> {
118
+
let res = match reqwest::blocking::get("https://plc.directory/did:plc:".to_owned() + plc) {
119
+
Ok(val) => val,
120
+
Err(_) => {
121
+
println!(" GET request failed");
122
+
return Err(());
123
+
}
124
+
};
125
+
126
+
if !res.status().is_success() {
127
+
println!(" Got non 2xx status code: {}", res.status().as_str());
128
+
129
+
return Err(());
130
+
}
131
+
132
+
return parse_doc(
133
+
"did:plc:".to_owned() + plc,
134
+
match res.text() {
135
+
Ok(val) => val,
136
+
Err(_) => {
137
+
println!(" Missing or malformed body response");
138
+
return Err(());
139
+
}
140
+
},
141
+
);
142
+
}
143
+
144
+
fn get_web_doc(web: &str) -> Result<DidDoc, ()> {
145
+
let res = match reqwest::blocking::get("https://".to_owned() + web + "/.well-known/did.json") {
146
+
Ok(val) => val,
147
+
Err(_) => {
148
+
println!(" GET request failed");
149
+
return Err(());
150
+
}
151
+
};
152
+
153
+
if !res.status().is_success() {
154
+
println!(" Got non 2xx status code: {}", res.status().as_str());
155
+
return Err(());
156
+
}
157
+
158
+
return parse_doc(
159
+
"did:web:".to_owned() + web,
160
+
match res.text() {
161
+
Ok(val) => val,
162
+
Err(_) => {
163
+
println!(" Missing or malformed body response");
164
+
return Err(());
165
+
}
166
+
},
167
+
);
168
+
}
169
+
170
+
pub fn get_did(handle: &String) -> Result<DidDoc, ()> {
171
+
println!(" Getting DID for {}", handle);
45
172
let did = if let Ok(did) = get_txt_did(&handle) {
46
173
did
47
174
} else {
48
175
if let Ok(did) = get_http_did(&handle) {
49
176
did
50
177
} else {
178
+
println!(" Could not get a DID");
51
179
return Err(());
52
180
}
53
181
};
54
182
55
-
return Ok(DidDoc { did });
183
+
println!(" Getting DID document for {}", did);
184
+
let did_doc = if did.starts_with("did:plc:") {
185
+
get_plc_doc(&did[8..])
186
+
} else if did.starts_with("did:web:") {
187
+
get_web_doc(&did[8..])
188
+
} else {
189
+
println!(" Could not get a DID document");
190
+
Err(())
191
+
};
192
+
193
+
return did_doc;
56
194
}
+66
src/knot.rs
+66
src/knot.rs
···
1
+
pub fn find_knot(did: &String, repo_name: &String, pds: &String) -> Result<String, ()> {
2
+
// https://docs.bsky.app/docs/api/com-atproto-repo-list-records
3
+
let mut cursor: Option<String> = None;
4
+
5
+
loop {
6
+
let url = format!(
7
+
"{0}/xrpc/com.atproto.repo.listRecords?collection=sh.tangled.repo&repo={1}&cursor={2}",
8
+
pds.clone(),
9
+
did.clone(),
10
+
cursor.clone().unwrap_or(String::new())
11
+
);
12
+
13
+
let res = match reqwest::blocking::get(url) {
14
+
Ok(val) => val,
15
+
Err(_) => {
16
+
println!(" Failed to load repos.");
17
+
return Err(());
18
+
}
19
+
};
20
+
21
+
if !res.status().is_success() {
22
+
println!(" Got non 2xx code when loading repos");
23
+
return Err(());
24
+
}
25
+
26
+
let body = match res.text() {
27
+
Ok(val) => match json::parse(&val) {
28
+
Ok(val) => val,
29
+
Err(_) => {
30
+
println!(" Invalid or malformed response response");
31
+
return Err(());
32
+
}
33
+
},
34
+
Err(_) => {
35
+
println!(" Missing body from response");
36
+
return Err(());
37
+
}
38
+
};
39
+
40
+
// must contain a records array
41
+
if !body["records"].is_array() {
42
+
println!(" Invalid or malformed response response");
43
+
return Err(());
44
+
}
45
+
for record in body["records"].members() {
46
+
if let Some(val) = record["value"]["name"].as_str()
47
+
&& val == repo_name
48
+
{
49
+
if let Some(knot) = record["value"]["knot"].as_str() {
50
+
return Ok(String::from(knot));
51
+
} else {
52
+
println!(" Repo didn't have a valid knot");
53
+
return Err(());
54
+
}
55
+
}
56
+
}
57
+
58
+
if let Some(val) = body["cursor"].as_str() {
59
+
cursor = Some(String::from(val))
60
+
} else {
61
+
break;
62
+
}
63
+
}
64
+
65
+
return Err(());
66
+
}
+65
-16
src/main.rs
+65
-16
src/main.rs
···
1
+
use std::process::Command;
2
+
1
3
mod args;
2
4
mod did;
5
+
mod knot;
3
6
4
7
fn main() -> Result<(), ()> {
5
8
// load configuration
6
9
let config = match args::load_config() {
7
10
Ok(res) => res,
8
-
Err(_) => {
9
-
// q
10
-
return Err(());
11
-
}
11
+
Err(_) => return Err(()),
12
12
};
13
-
println!("{:#?}", config);
14
13
15
14
// resolve handle to did
16
-
let did_doc = match did::get_did(config.handle) {
15
+
println!("Resolving {}", config.handle);
16
+
let did_doc = match did::get_did(&config.handle) {
17
17
Ok(res) => res,
18
-
Err(_) => {
19
-
// q
20
-
return Err(());
21
-
}
18
+
Err(_) => return Err(()),
22
19
};
23
-
println!("{:#?}", did_doc);
20
+
println!(
21
+
" Found DID `{0}` hosted at `{1}`",
22
+
did_doc.did, did_doc.pds
23
+
);
24
+
24
25
// resolve did+repoName to knotserver
26
+
println!("Resolving @{0}/{1}", config.handle, config.repo_name);
27
+
let knot_server = match knot::find_knot(&did_doc.did, &config.repo_name, &did_doc.pds) {
28
+
Ok(val) => val,
29
+
Err(_) => return Err(()),
30
+
};
31
+
println!(" Found knot `{}`", knot_server);
25
32
26
33
// connect to /events on knotserver
34
+
println!(
35
+
"Connecting to `{}`",
36
+
format!("wss://{}/events", knot_server)
37
+
);
27
38
28
-
// on event:
29
-
// parse json
30
-
// validate meets expected schema (allow unknown vals)
31
-
// filter by did and reponame
32
-
// exec shell command in user shell (/bin/sh as fallback)
39
+
match ws::connect(format!("ws://{}/events", knot_server), |_out| {
40
+
println!(" Connection successful");
41
+
|msg: ws::Message| {
42
+
// parse json
43
+
let body = match json::parse(match msg.as_text() {
44
+
Ok(val) => val,
45
+
Err(_) => return Ok(()),
46
+
}) {
47
+
Ok(val) => val,
48
+
Err(_) => {
49
+
println!(" Invalid body. Skipping message");
50
+
return Ok(());
51
+
}
52
+
};
53
+
54
+
// filter by did and reponame
55
+
if let Some(repo_did) = body["event"]["repoDid"].as_str()
56
+
&& let Some(repo) = body["event"]["repoName"].as_str()
57
+
&& repo_did != &did_doc.did
58
+
&& repo != &config.repo_name
59
+
{
60
+
// repo doesnt match so skip
61
+
return Ok(());
62
+
}
63
+
64
+
println!(" Executing `/bin/sh -c {}`", &config.shell);
65
+
66
+
// exec shell command in /bin/sh
67
+
match Command::new("/bin/sh")
68
+
.arg("-c")
69
+
.arg(&config.shell)
70
+
.output()
71
+
{
72
+
Ok(val) => val,
73
+
Err(_) => return Ok(()),
74
+
};
75
+
76
+
Ok(())
77
+
}
78
+
}) {
79
+
Ok(_) => {}
80
+
Err(err) => println!(" Connection failed: {}", err),
81
+
};
33
82
34
83
return Ok(());
35
84
}