Command-line tool for managing your AT Protocol bookmarks. Works with kipclip.com and any app that uses the same record format. kipclip.com
atproto rust kipclip bookmarks tags toread atprotocol
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Initial implementation of kipclip CLI

Rust CLI for kipclip.com AT Protocol bookmark manager. Uses jacquard
for OAuth loopback (PKCE + DPoP) and typed XRPC calls to the user's PDS.

Commands: login, logout, whoami, add, list, search, open, delete, tag,
untag, tags, note.

Tijs Teulings 5514e19b

+6526
+1
.gitignore
··· 1 + /target
+5242
Cargo.lock
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 4 4 + 5 + [[package]] 6 + name = "abnf" 7 + version = "0.13.0" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "087113bd50d9adce24850eed5d0476c7d199d532fce8fab5173650331e09033a" 10 + dependencies = [ 11 + "abnf-core", 12 + "nom", 13 + ] 14 + 15 + [[package]] 16 + name = "abnf-core" 17 + version = "0.5.0" 18 + source = "registry+https://github.com/rust-lang/crates.io-index" 19 + checksum = "c44e09c43ae1c368fb91a03a566472d0087c26cf7e1b9e8e289c14ede681dd7d" 20 + dependencies = [ 21 + "nom", 22 + ] 23 + 24 + [[package]] 25 + name = "addr2line" 26 + version = "0.25.1" 27 + source = "registry+https://github.com/rust-lang/crates.io-index" 28 + checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" 29 + dependencies = [ 30 + "gimli", 31 + ] 32 + 33 + [[package]] 34 + name = "adler2" 35 + version = "2.0.1" 36 + source = "registry+https://github.com/rust-lang/crates.io-index" 37 + checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" 38 + 39 + [[package]] 40 + name = "adler32" 41 + version = "1.2.0" 42 + source = "registry+https://github.com/rust-lang/crates.io-index" 43 + checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" 44 + 45 + [[package]] 46 + name = "aho-corasick" 47 + version = "1.1.4" 48 + source = "registry+https://github.com/rust-lang/crates.io-index" 49 + checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" 50 + dependencies = [ 51 + "memchr", 52 + ] 53 + 54 + [[package]] 55 + name = "aliasable" 56 + version = "0.1.3" 57 + source = "registry+https://github.com/rust-lang/crates.io-index" 58 + checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" 59 + 60 + [[package]] 61 + name = "alloc-no-stdlib" 62 + version = "2.0.4" 63 + source = "registry+https://github.com/rust-lang/crates.io-index" 64 + checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 65 + 66 + [[package]] 67 + name = "alloc-stdlib" 68 + version = "0.2.2" 69 + source = "registry+https://github.com/rust-lang/crates.io-index" 70 + checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 71 + dependencies = [ 72 + "alloc-no-stdlib", 73 + ] 74 + 75 + [[package]] 76 + name = "android_system_properties" 77 + version = "0.1.5" 78 + source = "registry+https://github.com/rust-lang/crates.io-index" 79 + checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 80 + dependencies = [ 81 + "libc", 82 + ] 83 + 84 + [[package]] 85 + name = "anstream" 86 + version = "0.6.21" 87 + source = "registry+https://github.com/rust-lang/crates.io-index" 88 + checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" 89 + dependencies = [ 90 + "anstyle", 91 + "anstyle-parse", 92 + "anstyle-query", 93 + "anstyle-wincon", 94 + "colorchoice", 95 + "is_terminal_polyfill", 96 + "utf8parse", 97 + ] 98 + 99 + [[package]] 100 + name = "anstyle" 101 + version = "1.0.13" 102 + source = "registry+https://github.com/rust-lang/crates.io-index" 103 + checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" 104 + 105 + [[package]] 106 + name = "anstyle-parse" 107 + version = "0.2.7" 108 + source = "registry+https://github.com/rust-lang/crates.io-index" 109 + checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" 110 + dependencies = [ 111 + "utf8parse", 112 + ] 113 + 114 + [[package]] 115 + name = "anstyle-query" 116 + version = "1.1.5" 117 + source = "registry+https://github.com/rust-lang/crates.io-index" 118 + checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" 119 + dependencies = [ 120 + "windows-sys 0.61.2", 121 + ] 122 + 123 + [[package]] 124 + name = "anstyle-wincon" 125 + version = "3.0.11" 126 + source = "registry+https://github.com/rust-lang/crates.io-index" 127 + checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" 128 + dependencies = [ 129 + "anstyle", 130 + "once_cell_polyfill", 131 + "windows-sys 0.61.2", 132 + ] 133 + 134 + [[package]] 135 + name = "anyhow" 136 + version = "1.0.102" 137 + source = "registry+https://github.com/rust-lang/crates.io-index" 138 + checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" 139 + 140 + [[package]] 141 + name = "ascii" 142 + version = "1.1.0" 143 + source = "registry+https://github.com/rust-lang/crates.io-index" 144 + checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16" 145 + 146 + [[package]] 147 + name = "async-compression" 148 + version = "0.4.41" 149 + source = "registry+https://github.com/rust-lang/crates.io-index" 150 + checksum = "d0f9ee0f6e02ffd7ad5816e9464499fba7b3effd01123b515c41d1697c43dad1" 151 + dependencies = [ 152 + "compression-codecs", 153 + "compression-core", 154 + "pin-project-lite", 155 + "tokio", 156 + ] 157 + 158 + [[package]] 159 + name = "async-trait" 160 + version = "0.1.89" 161 + source = "registry+https://github.com/rust-lang/crates.io-index" 162 + checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" 163 + dependencies = [ 164 + "proc-macro2", 165 + "quote", 166 + "syn 2.0.117", 167 + ] 168 + 169 + [[package]] 170 + name = "atomic-polyfill" 171 + version = "1.0.3" 172 + source = "registry+https://github.com/rust-lang/crates.io-index" 173 + checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" 174 + dependencies = [ 175 + "critical-section", 176 + ] 177 + 178 + [[package]] 179 + name = "atomic-waker" 180 + version = "1.1.2" 181 + source = "registry+https://github.com/rust-lang/crates.io-index" 182 + checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 183 + 184 + [[package]] 185 + name = "autocfg" 186 + version = "1.5.0" 187 + source = "registry+https://github.com/rust-lang/crates.io-index" 188 + checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" 189 + 190 + [[package]] 191 + name = "backtrace" 192 + version = "0.3.76" 193 + source = "registry+https://github.com/rust-lang/crates.io-index" 194 + checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" 195 + dependencies = [ 196 + "addr2line", 197 + "cfg-if", 198 + "libc", 199 + "miniz_oxide", 200 + "object", 201 + "rustc-demangle", 202 + "windows-link", 203 + ] 204 + 205 + [[package]] 206 + name = "backtrace-ext" 207 + version = "0.2.1" 208 + source = "registry+https://github.com/rust-lang/crates.io-index" 209 + checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50" 210 + dependencies = [ 211 + "backtrace", 212 + ] 213 + 214 + [[package]] 215 + name = "base-x" 216 + version = "0.2.11" 217 + source = "registry+https://github.com/rust-lang/crates.io-index" 218 + checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270" 219 + 220 + [[package]] 221 + name = "base16ct" 222 + version = "0.2.0" 223 + source = "registry+https://github.com/rust-lang/crates.io-index" 224 + checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" 225 + 226 + [[package]] 227 + name = "base256emoji" 228 + version = "1.0.2" 229 + source = "registry+https://github.com/rust-lang/crates.io-index" 230 + checksum = "b5e9430d9a245a77c92176e649af6e275f20839a48389859d1661e9a128d077c" 231 + dependencies = [ 232 + "const-str", 233 + "match-lookup", 234 + ] 235 + 236 + [[package]] 237 + name = "base64" 238 + version = "0.13.1" 239 + source = "registry+https://github.com/rust-lang/crates.io-index" 240 + checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" 241 + 242 + [[package]] 243 + name = "base64" 244 + version = "0.22.1" 245 + source = "registry+https://github.com/rust-lang/crates.io-index" 246 + checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 247 + 248 + [[package]] 249 + name = "base64ct" 250 + version = "1.8.3" 251 + source = "registry+https://github.com/rust-lang/crates.io-index" 252 + checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" 253 + 254 + [[package]] 255 + name = "bitflags" 256 + version = "2.11.0" 257 + source = "registry+https://github.com/rust-lang/crates.io-index" 258 + checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" 259 + 260 + [[package]] 261 + name = "block-buffer" 262 + version = "0.10.4" 263 + source = "registry+https://github.com/rust-lang/crates.io-index" 264 + checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 265 + dependencies = [ 266 + "generic-array", 267 + ] 268 + 269 + [[package]] 270 + name = "bon" 271 + version = "3.9.0" 272 + source = "registry+https://github.com/rust-lang/crates.io-index" 273 + checksum = "2d13a61f2963b88eef9c1be03df65d42f6996dfeac1054870d950fcf66686f83" 274 + dependencies = [ 275 + "bon-macros", 276 + "rustversion", 277 + ] 278 + 279 + [[package]] 280 + name = "bon-macros" 281 + version = "3.9.0" 282 + source = "registry+https://github.com/rust-lang/crates.io-index" 283 + checksum = "d314cc62af2b6b0c65780555abb4d02a03dd3b799cd42419044f0c38d99738c0" 284 + dependencies = [ 285 + "darling 0.23.0", 286 + "ident_case", 287 + "prettyplease", 288 + "proc-macro2", 289 + "quote", 290 + "rustversion", 291 + "syn 2.0.117", 292 + ] 293 + 294 + [[package]] 295 + name = "borsh" 296 + version = "1.6.0" 297 + source = "registry+https://github.com/rust-lang/crates.io-index" 298 + checksum = "d1da5ab77c1437701eeff7c88d968729e7766172279eab0676857b3d63af7a6f" 299 + dependencies = [ 300 + "cfg_aliases", 301 + ] 302 + 303 + [[package]] 304 + name = "brotli" 305 + version = "3.5.0" 306 + source = "registry+https://github.com/rust-lang/crates.io-index" 307 + checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" 308 + dependencies = [ 309 + "alloc-no-stdlib", 310 + "alloc-stdlib", 311 + "brotli-decompressor", 312 + ] 313 + 314 + [[package]] 315 + name = "brotli-decompressor" 316 + version = "2.5.1" 317 + source = "registry+https://github.com/rust-lang/crates.io-index" 318 + checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" 319 + dependencies = [ 320 + "alloc-no-stdlib", 321 + "alloc-stdlib", 322 + ] 323 + 324 + [[package]] 325 + name = "btree-range-map" 326 + version = "0.7.2" 327 + source = "registry+https://github.com/rust-lang/crates.io-index" 328 + checksum = "1be5c9672446d3800bcbcaabaeba121fe22f1fb25700c4562b22faf76d377c33" 329 + dependencies = [ 330 + "btree-slab", 331 + "cc-traits", 332 + "range-traits", 333 + "serde", 334 + "slab", 335 + ] 336 + 337 + [[package]] 338 + name = "btree-slab" 339 + version = "0.6.1" 340 + source = "registry+https://github.com/rust-lang/crates.io-index" 341 + checksum = "7a2b56d3029f075c4fa892428a098425b86cef5c89ae54073137ece416aef13c" 342 + dependencies = [ 343 + "cc-traits", 344 + "slab", 345 + "smallvec", 346 + ] 347 + 348 + [[package]] 349 + name = "buf_redux" 350 + version = "0.8.4" 351 + source = "registry+https://github.com/rust-lang/crates.io-index" 352 + checksum = "b953a6887648bb07a535631f2bc00fbdb2a2216f135552cb3f534ed136b9c07f" 353 + dependencies = [ 354 + "memchr", 355 + "safemem", 356 + ] 357 + 358 + [[package]] 359 + name = "bumpalo" 360 + version = "3.20.2" 361 + source = "registry+https://github.com/rust-lang/crates.io-index" 362 + checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb" 363 + 364 + [[package]] 365 + name = "byteorder" 366 + version = "1.5.0" 367 + source = "registry+https://github.com/rust-lang/crates.io-index" 368 + checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 369 + 370 + [[package]] 371 + name = "bytes" 372 + version = "1.11.1" 373 + source = "registry+https://github.com/rust-lang/crates.io-index" 374 + checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33" 375 + dependencies = [ 376 + "serde", 377 + ] 378 + 379 + [[package]] 380 + name = "cbor4ii" 381 + version = "0.2.14" 382 + source = "registry+https://github.com/rust-lang/crates.io-index" 383 + checksum = "b544cf8c89359205f4f990d0e6f3828db42df85b5dac95d09157a250eb0749c4" 384 + dependencies = [ 385 + "serde", 386 + ] 387 + 388 + [[package]] 389 + name = "cc" 390 + version = "1.2.56" 391 + source = "registry+https://github.com/rust-lang/crates.io-index" 392 + checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2" 393 + dependencies = [ 394 + "find-msvc-tools", 395 + "shlex", 396 + ] 397 + 398 + [[package]] 399 + name = "cc-traits" 400 + version = "2.0.0" 401 + source = "registry+https://github.com/rust-lang/crates.io-index" 402 + checksum = "060303ef31ef4a522737e1b1ab68c67916f2a787bb2f4f54f383279adba962b5" 403 + dependencies = [ 404 + "slab", 405 + ] 406 + 407 + [[package]] 408 + name = "cesu8" 409 + version = "1.1.0" 410 + source = "registry+https://github.com/rust-lang/crates.io-index" 411 + checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" 412 + 413 + [[package]] 414 + name = "cfg-if" 415 + version = "1.0.4" 416 + source = "registry+https://github.com/rust-lang/crates.io-index" 417 + checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" 418 + 419 + [[package]] 420 + name = "cfg_aliases" 421 + version = "0.2.1" 422 + source = "registry+https://github.com/rust-lang/crates.io-index" 423 + checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 424 + 425 + [[package]] 426 + name = "chrono" 427 + version = "0.4.44" 428 + source = "registry+https://github.com/rust-lang/crates.io-index" 429 + checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" 430 + dependencies = [ 431 + "iana-time-zone", 432 + "js-sys", 433 + "num-traits", 434 + "serde", 435 + "wasm-bindgen", 436 + "windows-link", 437 + ] 438 + 439 + [[package]] 440 + name = "chunked_transfer" 441 + version = "1.5.0" 442 + source = "registry+https://github.com/rust-lang/crates.io-index" 443 + checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901" 444 + 445 + [[package]] 446 + name = "ciborium" 447 + version = "0.2.2" 448 + source = "registry+https://github.com/rust-lang/crates.io-index" 449 + checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" 450 + dependencies = [ 451 + "ciborium-io", 452 + "ciborium-ll", 453 + "serde", 454 + ] 455 + 456 + [[package]] 457 + name = "ciborium-io" 458 + version = "0.2.2" 459 + source = "registry+https://github.com/rust-lang/crates.io-index" 460 + checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" 461 + 462 + [[package]] 463 + name = "ciborium-ll" 464 + version = "0.2.2" 465 + source = "registry+https://github.com/rust-lang/crates.io-index" 466 + checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" 467 + dependencies = [ 468 + "ciborium-io", 469 + "half", 470 + ] 471 + 472 + [[package]] 473 + name = "cid" 474 + version = "0.11.1" 475 + source = "registry+https://github.com/rust-lang/crates.io-index" 476 + checksum = "3147d8272e8fa0ccd29ce51194dd98f79ddfb8191ba9e3409884e751798acf3a" 477 + dependencies = [ 478 + "core2", 479 + "multibase", 480 + "multihash", 481 + "serde", 482 + "serde_bytes", 483 + "unsigned-varint", 484 + ] 485 + 486 + [[package]] 487 + name = "clap" 488 + version = "4.5.60" 489 + source = "registry+https://github.com/rust-lang/crates.io-index" 490 + checksum = "2797f34da339ce31042b27d23607e051786132987f595b02ba4f6a6dffb7030a" 491 + dependencies = [ 492 + "clap_builder", 493 + "clap_derive", 494 + ] 495 + 496 + [[package]] 497 + name = "clap_builder" 498 + version = "4.5.60" 499 + source = "registry+https://github.com/rust-lang/crates.io-index" 500 + checksum = "24a241312cea5059b13574bb9b3861cabf758b879c15190b37b6d6fd63ab6876" 501 + dependencies = [ 502 + "anstream", 503 + "anstyle", 504 + "clap_lex", 505 + "strsim", 506 + ] 507 + 508 + [[package]] 509 + name = "clap_derive" 510 + version = "4.5.55" 511 + source = "registry+https://github.com/rust-lang/crates.io-index" 512 + checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5" 513 + dependencies = [ 514 + "heck 0.5.0", 515 + "proc-macro2", 516 + "quote", 517 + "syn 2.0.117", 518 + ] 519 + 520 + [[package]] 521 + name = "clap_lex" 522 + version = "1.0.0" 523 + source = "registry+https://github.com/rust-lang/crates.io-index" 524 + checksum = "3a822ea5bc7590f9d40f1ba12c0dc3c2760f3482c6984db1573ad11031420831" 525 + 526 + [[package]] 527 + name = "cobs" 528 + version = "0.3.0" 529 + source = "registry+https://github.com/rust-lang/crates.io-index" 530 + checksum = "0fa961b519f0b462e3a3b4a34b64d119eeaca1d59af726fe450bbba07a9fc0a1" 531 + dependencies = [ 532 + "thiserror 2.0.18", 533 + ] 534 + 535 + [[package]] 536 + name = "colorchoice" 537 + version = "1.0.4" 538 + source = "registry+https://github.com/rust-lang/crates.io-index" 539 + checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" 540 + 541 + [[package]] 542 + name = "combine" 543 + version = "4.6.7" 544 + source = "registry+https://github.com/rust-lang/crates.io-index" 545 + checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" 546 + dependencies = [ 547 + "bytes", 548 + "memchr", 549 + ] 550 + 551 + [[package]] 552 + name = "compression-codecs" 553 + version = "0.4.37" 554 + source = "registry+https://github.com/rust-lang/crates.io-index" 555 + checksum = "eb7b51a7d9c967fc26773061ba86150f19c50c0d65c887cb1fbe295fd16619b7" 556 + dependencies = [ 557 + "compression-core", 558 + "flate2", 559 + "memchr", 560 + ] 561 + 562 + [[package]] 563 + name = "compression-core" 564 + version = "0.4.31" 565 + source = "registry+https://github.com/rust-lang/crates.io-index" 566 + checksum = "75984efb6ed102a0d42db99afb6c1948f0380d1d91808d5529916e6c08b49d8d" 567 + 568 + [[package]] 569 + name = "const-oid" 570 + version = "0.9.6" 571 + source = "registry+https://github.com/rust-lang/crates.io-index" 572 + checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" 573 + 574 + [[package]] 575 + name = "const-str" 576 + version = "0.4.3" 577 + source = "registry+https://github.com/rust-lang/crates.io-index" 578 + checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" 579 + 580 + [[package]] 581 + name = "cordyceps" 582 + version = "0.3.4" 583 + source = "registry+https://github.com/rust-lang/crates.io-index" 584 + checksum = "688d7fbb8092b8de775ef2536f36c8c31f2bc4006ece2e8d8ad2d17d00ce0a2a" 585 + dependencies = [ 586 + "loom", 587 + "tracing", 588 + ] 589 + 590 + [[package]] 591 + name = "core-foundation" 592 + version = "0.9.4" 593 + source = "registry+https://github.com/rust-lang/crates.io-index" 594 + checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" 595 + dependencies = [ 596 + "core-foundation-sys", 597 + "libc", 598 + ] 599 + 600 + [[package]] 601 + name = "core-foundation" 602 + version = "0.10.1" 603 + source = "registry+https://github.com/rust-lang/crates.io-index" 604 + checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" 605 + dependencies = [ 606 + "core-foundation-sys", 607 + "libc", 608 + ] 609 + 610 + [[package]] 611 + name = "core-foundation-sys" 612 + version = "0.8.7" 613 + source = "registry+https://github.com/rust-lang/crates.io-index" 614 + checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 615 + 616 + [[package]] 617 + name = "core2" 618 + version = "0.4.0" 619 + source = "registry+https://github.com/rust-lang/crates.io-index" 620 + checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" 621 + dependencies = [ 622 + "memchr", 623 + ] 624 + 625 + [[package]] 626 + name = "cpufeatures" 627 + version = "0.2.17" 628 + source = "registry+https://github.com/rust-lang/crates.io-index" 629 + checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 630 + dependencies = [ 631 + "libc", 632 + ] 633 + 634 + [[package]] 635 + name = "crc32fast" 636 + version = "1.5.0" 637 + source = "registry+https://github.com/rust-lang/crates.io-index" 638 + checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" 639 + dependencies = [ 640 + "cfg-if", 641 + ] 642 + 643 + [[package]] 644 + name = "critical-section" 645 + version = "1.2.0" 646 + source = "registry+https://github.com/rust-lang/crates.io-index" 647 + checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" 648 + 649 + [[package]] 650 + name = "crossbeam-channel" 651 + version = "0.5.15" 652 + source = "registry+https://github.com/rust-lang/crates.io-index" 653 + checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2" 654 + dependencies = [ 655 + "crossbeam-utils", 656 + ] 657 + 658 + [[package]] 659 + name = "crossbeam-utils" 660 + version = "0.8.21" 661 + source = "registry+https://github.com/rust-lang/crates.io-index" 662 + checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 663 + 664 + [[package]] 665 + name = "crunchy" 666 + version = "0.2.4" 667 + source = "registry+https://github.com/rust-lang/crates.io-index" 668 + checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" 669 + 670 + [[package]] 671 + name = "crypto-bigint" 672 + version = "0.5.5" 673 + source = "registry+https://github.com/rust-lang/crates.io-index" 674 + checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" 675 + dependencies = [ 676 + "generic-array", 677 + "rand_core 0.6.4", 678 + "subtle", 679 + "zeroize", 680 + ] 681 + 682 + [[package]] 683 + name = "crypto-common" 684 + version = "0.1.6" 685 + source = "registry+https://github.com/rust-lang/crates.io-index" 686 + checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 687 + dependencies = [ 688 + "generic-array", 689 + "typenum", 690 + ] 691 + 692 + [[package]] 693 + name = "darling" 694 + version = "0.21.3" 695 + source = "registry+https://github.com/rust-lang/crates.io-index" 696 + checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" 697 + dependencies = [ 698 + "darling_core 0.21.3", 699 + "darling_macro 0.21.3", 700 + ] 701 + 702 + [[package]] 703 + name = "darling" 704 + version = "0.23.0" 705 + source = "registry+https://github.com/rust-lang/crates.io-index" 706 + checksum = "25ae13da2f202d56bd7f91c25fba009e7717a1e4a1cc98a76d844b65ae912e9d" 707 + dependencies = [ 708 + "darling_core 0.23.0", 709 + "darling_macro 0.23.0", 710 + ] 711 + 712 + [[package]] 713 + name = "darling_core" 714 + version = "0.21.3" 715 + source = "registry+https://github.com/rust-lang/crates.io-index" 716 + checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" 717 + dependencies = [ 718 + "fnv", 719 + "ident_case", 720 + "proc-macro2", 721 + "quote", 722 + "strsim", 723 + "syn 2.0.117", 724 + ] 725 + 726 + [[package]] 727 + name = "darling_core" 728 + version = "0.23.0" 729 + source = "registry+https://github.com/rust-lang/crates.io-index" 730 + checksum = "9865a50f7c335f53564bb694ef660825eb8610e0a53d3e11bf1b0d3df31e03b0" 731 + dependencies = [ 732 + "ident_case", 733 + "proc-macro2", 734 + "quote", 735 + "strsim", 736 + "syn 2.0.117", 737 + ] 738 + 739 + [[package]] 740 + name = "darling_macro" 741 + version = "0.21.3" 742 + source = "registry+https://github.com/rust-lang/crates.io-index" 743 + checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" 744 + dependencies = [ 745 + "darling_core 0.21.3", 746 + "quote", 747 + "syn 2.0.117", 748 + ] 749 + 750 + [[package]] 751 + name = "darling_macro" 752 + version = "0.23.0" 753 + source = "registry+https://github.com/rust-lang/crates.io-index" 754 + checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" 755 + dependencies = [ 756 + "darling_core 0.23.0", 757 + "quote", 758 + "syn 2.0.117", 759 + ] 760 + 761 + [[package]] 762 + name = "dashmap" 763 + version = "6.1.0" 764 + source = "registry+https://github.com/rust-lang/crates.io-index" 765 + checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" 766 + dependencies = [ 767 + "cfg-if", 768 + "crossbeam-utils", 769 + "hashbrown 0.14.5", 770 + "lock_api", 771 + "once_cell", 772 + "parking_lot_core", 773 + ] 774 + 775 + [[package]] 776 + name = "data-encoding" 777 + version = "2.10.0" 778 + source = "registry+https://github.com/rust-lang/crates.io-index" 779 + checksum = "d7a1e2f27636f116493b8b860f5546edb47c8d8f8ea73e1d2a20be88e28d1fea" 780 + 781 + [[package]] 782 + name = "data-encoding-macro" 783 + version = "0.1.19" 784 + source = "registry+https://github.com/rust-lang/crates.io-index" 785 + checksum = "8142a83c17aa9461d637e649271eae18bf2edd00e91f2e105df36c3c16355bdb" 786 + dependencies = [ 787 + "data-encoding", 788 + "data-encoding-macro-internal", 789 + ] 790 + 791 + [[package]] 792 + name = "data-encoding-macro-internal" 793 + version = "0.1.17" 794 + source = "registry+https://github.com/rust-lang/crates.io-index" 795 + checksum = "7ab67060fc6b8ef687992d439ca0fa36e7ed17e9a0b16b25b601e8757df720de" 796 + dependencies = [ 797 + "data-encoding", 798 + "syn 2.0.117", 799 + ] 800 + 801 + [[package]] 802 + name = "deflate" 803 + version = "1.0.0" 804 + source = "registry+https://github.com/rust-lang/crates.io-index" 805 + checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f" 806 + dependencies = [ 807 + "adler32", 808 + "gzip-header", 809 + ] 810 + 811 + [[package]] 812 + name = "der" 813 + version = "0.7.10" 814 + source = "registry+https://github.com/rust-lang/crates.io-index" 815 + checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" 816 + dependencies = [ 817 + "const-oid", 818 + "pem-rfc7468", 819 + "zeroize", 820 + ] 821 + 822 + [[package]] 823 + name = "deranged" 824 + version = "0.5.8" 825 + source = "registry+https://github.com/rust-lang/crates.io-index" 826 + checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" 827 + dependencies = [ 828 + "powerfmt", 829 + "serde_core", 830 + ] 831 + 832 + [[package]] 833 + name = "derive_more" 834 + version = "1.0.0" 835 + source = "registry+https://github.com/rust-lang/crates.io-index" 836 + checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" 837 + dependencies = [ 838 + "derive_more-impl", 839 + ] 840 + 841 + [[package]] 842 + name = "derive_more-impl" 843 + version = "1.0.0" 844 + source = "registry+https://github.com/rust-lang/crates.io-index" 845 + checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" 846 + dependencies = [ 847 + "proc-macro2", 848 + "quote", 849 + "syn 2.0.117", 850 + "unicode-xid", 851 + ] 852 + 853 + [[package]] 854 + name = "diatomic-waker" 855 + version = "0.2.3" 856 + source = "registry+https://github.com/rust-lang/crates.io-index" 857 + checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c" 858 + 859 + [[package]] 860 + name = "digest" 861 + version = "0.10.7" 862 + source = "registry+https://github.com/rust-lang/crates.io-index" 863 + checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 864 + dependencies = [ 865 + "block-buffer", 866 + "const-oid", 867 + "crypto-common", 868 + "subtle", 869 + ] 870 + 871 + [[package]] 872 + name = "dirs" 873 + version = "6.0.0" 874 + source = "registry+https://github.com/rust-lang/crates.io-index" 875 + checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e" 876 + dependencies = [ 877 + "dirs-sys", 878 + ] 879 + 880 + [[package]] 881 + name = "dirs-sys" 882 + version = "0.5.0" 883 + source = "registry+https://github.com/rust-lang/crates.io-index" 884 + checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab" 885 + dependencies = [ 886 + "libc", 887 + "option-ext", 888 + "redox_users", 889 + "windows-sys 0.61.2", 890 + ] 891 + 892 + [[package]] 893 + name = "displaydoc" 894 + version = "0.2.5" 895 + source = "registry+https://github.com/rust-lang/crates.io-index" 896 + checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 897 + dependencies = [ 898 + "proc-macro2", 899 + "quote", 900 + "syn 2.0.117", 901 + ] 902 + 903 + [[package]] 904 + name = "dyn-clone" 905 + version = "1.0.20" 906 + source = "registry+https://github.com/rust-lang/crates.io-index" 907 + checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" 908 + 909 + [[package]] 910 + name = "ecdsa" 911 + version = "0.16.9" 912 + source = "registry+https://github.com/rust-lang/crates.io-index" 913 + checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" 914 + dependencies = [ 915 + "der", 916 + "digest", 917 + "elliptic-curve", 918 + "rfc6979", 919 + "signature", 920 + "spki", 921 + ] 922 + 923 + [[package]] 924 + name = "elliptic-curve" 925 + version = "0.13.8" 926 + source = "registry+https://github.com/rust-lang/crates.io-index" 927 + checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" 928 + dependencies = [ 929 + "base16ct", 930 + "crypto-bigint", 931 + "digest", 932 + "ff", 933 + "generic-array", 934 + "group", 935 + "pem-rfc7468", 936 + "pkcs8", 937 + "rand_core 0.6.4", 938 + "sec1", 939 + "subtle", 940 + "zeroize", 941 + ] 942 + 943 + [[package]] 944 + name = "embedded-io" 945 + version = "0.4.0" 946 + source = "registry+https://github.com/rust-lang/crates.io-index" 947 + checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced" 948 + 949 + [[package]] 950 + name = "embedded-io" 951 + version = "0.6.1" 952 + source = "registry+https://github.com/rust-lang/crates.io-index" 953 + checksum = "edd0f118536f44f5ccd48bcb8b111bdc3de888b58c74639dfb034a357d0f206d" 954 + 955 + [[package]] 956 + name = "encoding_rs" 957 + version = "0.8.35" 958 + source = "registry+https://github.com/rust-lang/crates.io-index" 959 + checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 960 + dependencies = [ 961 + "cfg-if", 962 + ] 963 + 964 + [[package]] 965 + name = "enum-as-inner" 966 + version = "0.6.1" 967 + source = "registry+https://github.com/rust-lang/crates.io-index" 968 + checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" 969 + dependencies = [ 970 + "heck 0.5.0", 971 + "proc-macro2", 972 + "quote", 973 + "syn 2.0.117", 974 + ] 975 + 976 + [[package]] 977 + name = "equivalent" 978 + version = "1.0.2" 979 + source = "registry+https://github.com/rust-lang/crates.io-index" 980 + checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 981 + 982 + [[package]] 983 + name = "errno" 984 + version = "0.3.14" 985 + source = "registry+https://github.com/rust-lang/crates.io-index" 986 + checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" 987 + dependencies = [ 988 + "libc", 989 + "windows-sys 0.61.2", 990 + ] 991 + 992 + [[package]] 993 + name = "fastrand" 994 + version = "2.3.0" 995 + source = "registry+https://github.com/rust-lang/crates.io-index" 996 + checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" 997 + 998 + [[package]] 999 + name = "ff" 1000 + version = "0.13.1" 1001 + source = "registry+https://github.com/rust-lang/crates.io-index" 1002 + checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" 1003 + dependencies = [ 1004 + "rand_core 0.6.4", 1005 + "subtle", 1006 + ] 1007 + 1008 + [[package]] 1009 + name = "filetime" 1010 + version = "0.2.27" 1011 + source = "registry+https://github.com/rust-lang/crates.io-index" 1012 + checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db" 1013 + dependencies = [ 1014 + "cfg-if", 1015 + "libc", 1016 + "libredox", 1017 + ] 1018 + 1019 + [[package]] 1020 + name = "find-msvc-tools" 1021 + version = "0.1.9" 1022 + source = "registry+https://github.com/rust-lang/crates.io-index" 1023 + checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582" 1024 + 1025 + [[package]] 1026 + name = "flate2" 1027 + version = "1.1.9" 1028 + source = "registry+https://github.com/rust-lang/crates.io-index" 1029 + checksum = "843fba2746e448b37e26a819579957415c8cef339bf08564fe8b7ddbd959573c" 1030 + dependencies = [ 1031 + "crc32fast", 1032 + "miniz_oxide", 1033 + ] 1034 + 1035 + [[package]] 1036 + name = "fnv" 1037 + version = "1.0.7" 1038 + source = "registry+https://github.com/rust-lang/crates.io-index" 1039 + checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 1040 + 1041 + [[package]] 1042 + name = "foldhash" 1043 + version = "0.1.5" 1044 + source = "registry+https://github.com/rust-lang/crates.io-index" 1045 + checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 1046 + 1047 + [[package]] 1048 + name = "foreign-types" 1049 + version = "0.3.2" 1050 + source = "registry+https://github.com/rust-lang/crates.io-index" 1051 + checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" 1052 + dependencies = [ 1053 + "foreign-types-shared", 1054 + ] 1055 + 1056 + [[package]] 1057 + name = "foreign-types-shared" 1058 + version = "0.1.1" 1059 + source = "registry+https://github.com/rust-lang/crates.io-index" 1060 + checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" 1061 + 1062 + [[package]] 1063 + name = "form_urlencoded" 1064 + version = "1.2.2" 1065 + source = "registry+https://github.com/rust-lang/crates.io-index" 1066 + checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" 1067 + dependencies = [ 1068 + "percent-encoding", 1069 + ] 1070 + 1071 + [[package]] 1072 + name = "futf" 1073 + version = "0.1.5" 1074 + source = "registry+https://github.com/rust-lang/crates.io-index" 1075 + checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" 1076 + dependencies = [ 1077 + "mac", 1078 + "new_debug_unreachable", 1079 + ] 1080 + 1081 + [[package]] 1082 + name = "futures-buffered" 1083 + version = "0.2.13" 1084 + source = "registry+https://github.com/rust-lang/crates.io-index" 1085 + checksum = "4421cb78ee172b6b06080093479d3c50f058e7c81b7d577bbb8d118d551d4cd5" 1086 + dependencies = [ 1087 + "cordyceps", 1088 + "diatomic-waker", 1089 + "futures-core", 1090 + "pin-project-lite", 1091 + "spin 0.10.0", 1092 + ] 1093 + 1094 + [[package]] 1095 + name = "futures-channel" 1096 + version = "0.3.32" 1097 + source = "registry+https://github.com/rust-lang/crates.io-index" 1098 + checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" 1099 + dependencies = [ 1100 + "futures-core", 1101 + ] 1102 + 1103 + [[package]] 1104 + name = "futures-core" 1105 + version = "0.3.32" 1106 + source = "registry+https://github.com/rust-lang/crates.io-index" 1107 + checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" 1108 + 1109 + [[package]] 1110 + name = "futures-io" 1111 + version = "0.3.32" 1112 + source = "registry+https://github.com/rust-lang/crates.io-index" 1113 + checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" 1114 + 1115 + [[package]] 1116 + name = "futures-lite" 1117 + version = "2.6.1" 1118 + source = "registry+https://github.com/rust-lang/crates.io-index" 1119 + checksum = "f78e10609fe0e0b3f4157ffab1876319b5b0db102a2c60dc4626306dc46b44ad" 1120 + dependencies = [ 1121 + "fastrand", 1122 + "futures-core", 1123 + "futures-io", 1124 + "parking", 1125 + "pin-project-lite", 1126 + ] 1127 + 1128 + [[package]] 1129 + name = "futures-macro" 1130 + version = "0.3.32" 1131 + source = "registry+https://github.com/rust-lang/crates.io-index" 1132 + checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" 1133 + dependencies = [ 1134 + "proc-macro2", 1135 + "quote", 1136 + "syn 2.0.117", 1137 + ] 1138 + 1139 + [[package]] 1140 + name = "futures-sink" 1141 + version = "0.3.32" 1142 + source = "registry+https://github.com/rust-lang/crates.io-index" 1143 + checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" 1144 + 1145 + [[package]] 1146 + name = "futures-task" 1147 + version = "0.3.32" 1148 + source = "registry+https://github.com/rust-lang/crates.io-index" 1149 + checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" 1150 + 1151 + [[package]] 1152 + name = "futures-util" 1153 + version = "0.3.32" 1154 + source = "registry+https://github.com/rust-lang/crates.io-index" 1155 + checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" 1156 + dependencies = [ 1157 + "futures-core", 1158 + "futures-macro", 1159 + "futures-sink", 1160 + "futures-task", 1161 + "pin-project-lite", 1162 + "slab", 1163 + ] 1164 + 1165 + [[package]] 1166 + name = "generator" 1167 + version = "0.8.8" 1168 + source = "registry+https://github.com/rust-lang/crates.io-index" 1169 + checksum = "52f04ae4152da20c76fe800fa48659201d5cf627c5149ca0b707b69d7eef6cf9" 1170 + dependencies = [ 1171 + "cc", 1172 + "cfg-if", 1173 + "libc", 1174 + "log", 1175 + "rustversion", 1176 + "windows-link", 1177 + "windows-result", 1178 + ] 1179 + 1180 + [[package]] 1181 + name = "generic-array" 1182 + version = "0.14.9" 1183 + source = "registry+https://github.com/rust-lang/crates.io-index" 1184 + checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" 1185 + dependencies = [ 1186 + "typenum", 1187 + "version_check", 1188 + "zeroize", 1189 + ] 1190 + 1191 + [[package]] 1192 + name = "getrandom" 1193 + version = "0.2.17" 1194 + source = "registry+https://github.com/rust-lang/crates.io-index" 1195 + checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0" 1196 + dependencies = [ 1197 + "cfg-if", 1198 + "js-sys", 1199 + "libc", 1200 + "wasi", 1201 + "wasm-bindgen", 1202 + ] 1203 + 1204 + [[package]] 1205 + name = "getrandom" 1206 + version = "0.3.4" 1207 + source = "registry+https://github.com/rust-lang/crates.io-index" 1208 + checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" 1209 + dependencies = [ 1210 + "cfg-if", 1211 + "js-sys", 1212 + "libc", 1213 + "r-efi 5.3.0", 1214 + "wasip2", 1215 + "wasm-bindgen", 1216 + ] 1217 + 1218 + [[package]] 1219 + name = "getrandom" 1220 + version = "0.4.2" 1221 + source = "registry+https://github.com/rust-lang/crates.io-index" 1222 + checksum = "0de51e6874e94e7bf76d726fc5d13ba782deca734ff60d5bb2fb2607c7406555" 1223 + dependencies = [ 1224 + "cfg-if", 1225 + "libc", 1226 + "r-efi 6.0.0", 1227 + "wasip2", 1228 + "wasip3", 1229 + ] 1230 + 1231 + [[package]] 1232 + name = "gimli" 1233 + version = "0.32.3" 1234 + source = "registry+https://github.com/rust-lang/crates.io-index" 1235 + checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" 1236 + 1237 + [[package]] 1238 + name = "gloo-storage" 1239 + version = "0.3.0" 1240 + source = "registry+https://github.com/rust-lang/crates.io-index" 1241 + checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a" 1242 + dependencies = [ 1243 + "gloo-utils", 1244 + "js-sys", 1245 + "serde", 1246 + "serde_json", 1247 + "thiserror 1.0.69", 1248 + "wasm-bindgen", 1249 + "web-sys", 1250 + ] 1251 + 1252 + [[package]] 1253 + name = "gloo-utils" 1254 + version = "0.2.0" 1255 + source = "registry+https://github.com/rust-lang/crates.io-index" 1256 + checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" 1257 + dependencies = [ 1258 + "js-sys", 1259 + "serde", 1260 + "serde_json", 1261 + "wasm-bindgen", 1262 + "web-sys", 1263 + ] 1264 + 1265 + [[package]] 1266 + name = "group" 1267 + version = "0.13.0" 1268 + source = "registry+https://github.com/rust-lang/crates.io-index" 1269 + checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" 1270 + dependencies = [ 1271 + "ff", 1272 + "rand_core 0.6.4", 1273 + "subtle", 1274 + ] 1275 + 1276 + [[package]] 1277 + name = "gzip-header" 1278 + version = "1.0.0" 1279 + source = "registry+https://github.com/rust-lang/crates.io-index" 1280 + checksum = "95cc527b92e6029a62960ad99aa8a6660faa4555fe5f731aab13aa6a921795a2" 1281 + dependencies = [ 1282 + "crc32fast", 1283 + ] 1284 + 1285 + [[package]] 1286 + name = "h2" 1287 + version = "0.4.13" 1288 + source = "registry+https://github.com/rust-lang/crates.io-index" 1289 + checksum = "2f44da3a8150a6703ed5d34e164b875fd14c2cdab9af1252a9a1020bde2bdc54" 1290 + dependencies = [ 1291 + "atomic-waker", 1292 + "bytes", 1293 + "fnv", 1294 + "futures-core", 1295 + "futures-sink", 1296 + "http", 1297 + "indexmap 2.13.0", 1298 + "slab", 1299 + "tokio", 1300 + "tokio-util", 1301 + "tracing", 1302 + ] 1303 + 1304 + [[package]] 1305 + name = "half" 1306 + version = "2.7.1" 1307 + source = "registry+https://github.com/rust-lang/crates.io-index" 1308 + checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" 1309 + dependencies = [ 1310 + "cfg-if", 1311 + "crunchy", 1312 + "zerocopy", 1313 + ] 1314 + 1315 + [[package]] 1316 + name = "hash32" 1317 + version = "0.2.1" 1318 + source = "registry+https://github.com/rust-lang/crates.io-index" 1319 + checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" 1320 + dependencies = [ 1321 + "byteorder", 1322 + ] 1323 + 1324 + [[package]] 1325 + name = "hashbrown" 1326 + version = "0.12.3" 1327 + source = "registry+https://github.com/rust-lang/crates.io-index" 1328 + checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" 1329 + 1330 + [[package]] 1331 + name = "hashbrown" 1332 + version = "0.14.5" 1333 + source = "registry+https://github.com/rust-lang/crates.io-index" 1334 + checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 1335 + 1336 + [[package]] 1337 + name = "hashbrown" 1338 + version = "0.15.5" 1339 + source = "registry+https://github.com/rust-lang/crates.io-index" 1340 + checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" 1341 + dependencies = [ 1342 + "foldhash", 1343 + ] 1344 + 1345 + [[package]] 1346 + name = "hashbrown" 1347 + version = "0.16.1" 1348 + source = "registry+https://github.com/rust-lang/crates.io-index" 1349 + checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" 1350 + 1351 + [[package]] 1352 + name = "heapless" 1353 + version = "0.7.17" 1354 + source = "registry+https://github.com/rust-lang/crates.io-index" 1355 + checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" 1356 + dependencies = [ 1357 + "atomic-polyfill", 1358 + "hash32", 1359 + "rustc_version", 1360 + "serde", 1361 + "spin 0.9.8", 1362 + "stable_deref_trait", 1363 + ] 1364 + 1365 + [[package]] 1366 + name = "heck" 1367 + version = "0.4.1" 1368 + source = "registry+https://github.com/rust-lang/crates.io-index" 1369 + checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" 1370 + 1371 + [[package]] 1372 + name = "heck" 1373 + version = "0.5.0" 1374 + source = "registry+https://github.com/rust-lang/crates.io-index" 1375 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 1376 + 1377 + [[package]] 1378 + name = "hermit-abi" 1379 + version = "0.5.2" 1380 + source = "registry+https://github.com/rust-lang/crates.io-index" 1381 + checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" 1382 + 1383 + [[package]] 1384 + name = "hex" 1385 + version = "0.4.3" 1386 + source = "registry+https://github.com/rust-lang/crates.io-index" 1387 + checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" 1388 + 1389 + [[package]] 1390 + name = "hex_fmt" 1391 + version = "0.3.0" 1392 + source = "registry+https://github.com/rust-lang/crates.io-index" 1393 + checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" 1394 + 1395 + [[package]] 1396 + name = "hickory-proto" 1397 + version = "0.24.4" 1398 + source = "registry+https://github.com/rust-lang/crates.io-index" 1399 + checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" 1400 + dependencies = [ 1401 + "async-trait", 1402 + "cfg-if", 1403 + "data-encoding", 1404 + "enum-as-inner", 1405 + "futures-channel", 1406 + "futures-io", 1407 + "futures-util", 1408 + "idna", 1409 + "ipnet", 1410 + "once_cell", 1411 + "rand 0.8.5", 1412 + "thiserror 1.0.69", 1413 + "tinyvec", 1414 + "tokio", 1415 + "tracing", 1416 + "url", 1417 + ] 1418 + 1419 + [[package]] 1420 + name = "hickory-resolver" 1421 + version = "0.24.4" 1422 + source = "registry+https://github.com/rust-lang/crates.io-index" 1423 + checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" 1424 + dependencies = [ 1425 + "cfg-if", 1426 + "futures-util", 1427 + "hickory-proto", 1428 + "ipconfig", 1429 + "lru-cache", 1430 + "once_cell", 1431 + "parking_lot", 1432 + "rand 0.8.5", 1433 + "resolv-conf", 1434 + "smallvec", 1435 + "thiserror 1.0.69", 1436 + "tokio", 1437 + "tracing", 1438 + ] 1439 + 1440 + [[package]] 1441 + name = "hmac" 1442 + version = "0.12.1" 1443 + source = "registry+https://github.com/rust-lang/crates.io-index" 1444 + checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 1445 + dependencies = [ 1446 + "digest", 1447 + ] 1448 + 1449 + [[package]] 1450 + name = "html5ever" 1451 + version = "0.27.0" 1452 + source = "registry+https://github.com/rust-lang/crates.io-index" 1453 + checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" 1454 + dependencies = [ 1455 + "log", 1456 + "mac", 1457 + "markup5ever", 1458 + "proc-macro2", 1459 + "quote", 1460 + "syn 2.0.117", 1461 + ] 1462 + 1463 + [[package]] 1464 + name = "http" 1465 + version = "1.4.0" 1466 + source = "registry+https://github.com/rust-lang/crates.io-index" 1467 + checksum = "e3ba2a386d7f85a81f119ad7498ebe444d2e22c2af0b86b069416ace48b3311a" 1468 + dependencies = [ 1469 + "bytes", 1470 + "itoa", 1471 + ] 1472 + 1473 + [[package]] 1474 + name = "http-body" 1475 + version = "1.0.1" 1476 + source = "registry+https://github.com/rust-lang/crates.io-index" 1477 + checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 1478 + dependencies = [ 1479 + "bytes", 1480 + "http", 1481 + ] 1482 + 1483 + [[package]] 1484 + name = "http-body-util" 1485 + version = "0.1.3" 1486 + source = "registry+https://github.com/rust-lang/crates.io-index" 1487 + checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" 1488 + dependencies = [ 1489 + "bytes", 1490 + "futures-core", 1491 + "http", 1492 + "http-body", 1493 + "pin-project-lite", 1494 + ] 1495 + 1496 + [[package]] 1497 + name = "httparse" 1498 + version = "1.10.1" 1499 + source = "registry+https://github.com/rust-lang/crates.io-index" 1500 + checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" 1501 + 1502 + [[package]] 1503 + name = "httpdate" 1504 + version = "1.0.3" 1505 + source = "registry+https://github.com/rust-lang/crates.io-index" 1506 + checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 1507 + 1508 + [[package]] 1509 + name = "hyper" 1510 + version = "1.8.1" 1511 + source = "registry+https://github.com/rust-lang/crates.io-index" 1512 + checksum = "2ab2d4f250c3d7b1c9fcdff1cece94ea4e2dfbec68614f7b87cb205f24ca9d11" 1513 + dependencies = [ 1514 + "atomic-waker", 1515 + "bytes", 1516 + "futures-channel", 1517 + "futures-core", 1518 + "h2", 1519 + "http", 1520 + "http-body", 1521 + "httparse", 1522 + "itoa", 1523 + "pin-project-lite", 1524 + "pin-utils", 1525 + "smallvec", 1526 + "tokio", 1527 + "want", 1528 + ] 1529 + 1530 + [[package]] 1531 + name = "hyper-rustls" 1532 + version = "0.27.7" 1533 + source = "registry+https://github.com/rust-lang/crates.io-index" 1534 + checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" 1535 + dependencies = [ 1536 + "http", 1537 + "hyper", 1538 + "hyper-util", 1539 + "rustls", 1540 + "rustls-pki-types", 1541 + "tokio", 1542 + "tokio-rustls", 1543 + "tower-service", 1544 + "webpki-roots", 1545 + ] 1546 + 1547 + [[package]] 1548 + name = "hyper-tls" 1549 + version = "0.6.0" 1550 + source = "registry+https://github.com/rust-lang/crates.io-index" 1551 + checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" 1552 + dependencies = [ 1553 + "bytes", 1554 + "http-body-util", 1555 + "hyper", 1556 + "hyper-util", 1557 + "native-tls", 1558 + "tokio", 1559 + "tokio-native-tls", 1560 + "tower-service", 1561 + ] 1562 + 1563 + [[package]] 1564 + name = "hyper-util" 1565 + version = "0.1.20" 1566 + source = "registry+https://github.com/rust-lang/crates.io-index" 1567 + checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" 1568 + dependencies = [ 1569 + "base64 0.22.1", 1570 + "bytes", 1571 + "futures-channel", 1572 + "futures-util", 1573 + "http", 1574 + "http-body", 1575 + "hyper", 1576 + "ipnet", 1577 + "libc", 1578 + "percent-encoding", 1579 + "pin-project-lite", 1580 + "socket2 0.6.3", 1581 + "system-configuration", 1582 + "tokio", 1583 + "tower-service", 1584 + "tracing", 1585 + "windows-registry", 1586 + ] 1587 + 1588 + [[package]] 1589 + name = "iana-time-zone" 1590 + version = "0.1.65" 1591 + source = "registry+https://github.com/rust-lang/crates.io-index" 1592 + checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" 1593 + dependencies = [ 1594 + "android_system_properties", 1595 + "core-foundation-sys", 1596 + "iana-time-zone-haiku", 1597 + "js-sys", 1598 + "log", 1599 + "wasm-bindgen", 1600 + "windows-core", 1601 + ] 1602 + 1603 + [[package]] 1604 + name = "iana-time-zone-haiku" 1605 + version = "0.1.2" 1606 + source = "registry+https://github.com/rust-lang/crates.io-index" 1607 + checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1608 + dependencies = [ 1609 + "cc", 1610 + ] 1611 + 1612 + [[package]] 1613 + name = "icu_collections" 1614 + version = "2.1.1" 1615 + source = "registry+https://github.com/rust-lang/crates.io-index" 1616 + checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" 1617 + dependencies = [ 1618 + "displaydoc", 1619 + "potential_utf", 1620 + "yoke", 1621 + "zerofrom", 1622 + "zerovec", 1623 + ] 1624 + 1625 + [[package]] 1626 + name = "icu_locale_core" 1627 + version = "2.1.1" 1628 + source = "registry+https://github.com/rust-lang/crates.io-index" 1629 + checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" 1630 + dependencies = [ 1631 + "displaydoc", 1632 + "litemap", 1633 + "tinystr", 1634 + "writeable", 1635 + "zerovec", 1636 + ] 1637 + 1638 + [[package]] 1639 + name = "icu_normalizer" 1640 + version = "2.1.1" 1641 + source = "registry+https://github.com/rust-lang/crates.io-index" 1642 + checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" 1643 + dependencies = [ 1644 + "icu_collections", 1645 + "icu_normalizer_data", 1646 + "icu_properties", 1647 + "icu_provider", 1648 + "smallvec", 1649 + "zerovec", 1650 + ] 1651 + 1652 + [[package]] 1653 + name = "icu_normalizer_data" 1654 + version = "2.1.1" 1655 + source = "registry+https://github.com/rust-lang/crates.io-index" 1656 + checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" 1657 + 1658 + [[package]] 1659 + name = "icu_properties" 1660 + version = "2.1.2" 1661 + source = "registry+https://github.com/rust-lang/crates.io-index" 1662 + checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" 1663 + dependencies = [ 1664 + "icu_collections", 1665 + "icu_locale_core", 1666 + "icu_properties_data", 1667 + "icu_provider", 1668 + "zerotrie", 1669 + "zerovec", 1670 + ] 1671 + 1672 + [[package]] 1673 + name = "icu_properties_data" 1674 + version = "2.1.2" 1675 + source = "registry+https://github.com/rust-lang/crates.io-index" 1676 + checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" 1677 + 1678 + [[package]] 1679 + name = "icu_provider" 1680 + version = "2.1.1" 1681 + source = "registry+https://github.com/rust-lang/crates.io-index" 1682 + checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" 1683 + dependencies = [ 1684 + "displaydoc", 1685 + "icu_locale_core", 1686 + "writeable", 1687 + "yoke", 1688 + "zerofrom", 1689 + "zerotrie", 1690 + "zerovec", 1691 + ] 1692 + 1693 + [[package]] 1694 + name = "id-arena" 1695 + version = "2.3.0" 1696 + source = "registry+https://github.com/rust-lang/crates.io-index" 1697 + checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" 1698 + 1699 + [[package]] 1700 + name = "ident_case" 1701 + version = "1.0.1" 1702 + source = "registry+https://github.com/rust-lang/crates.io-index" 1703 + checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" 1704 + 1705 + [[package]] 1706 + name = "idna" 1707 + version = "1.1.0" 1708 + source = "registry+https://github.com/rust-lang/crates.io-index" 1709 + checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" 1710 + dependencies = [ 1711 + "idna_adapter", 1712 + "smallvec", 1713 + "utf8_iter", 1714 + ] 1715 + 1716 + [[package]] 1717 + name = "idna_adapter" 1718 + version = "1.2.1" 1719 + source = "registry+https://github.com/rust-lang/crates.io-index" 1720 + checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" 1721 + dependencies = [ 1722 + "icu_normalizer", 1723 + "icu_properties", 1724 + ] 1725 + 1726 + [[package]] 1727 + name = "indexmap" 1728 + version = "1.9.3" 1729 + source = "registry+https://github.com/rust-lang/crates.io-index" 1730 + checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" 1731 + dependencies = [ 1732 + "autocfg", 1733 + "hashbrown 0.12.3", 1734 + "serde", 1735 + ] 1736 + 1737 + [[package]] 1738 + name = "indexmap" 1739 + version = "2.13.0" 1740 + source = "registry+https://github.com/rust-lang/crates.io-index" 1741 + checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" 1742 + dependencies = [ 1743 + "equivalent", 1744 + "hashbrown 0.16.1", 1745 + "serde", 1746 + "serde_core", 1747 + ] 1748 + 1749 + [[package]] 1750 + name = "indoc" 1751 + version = "2.0.7" 1752 + source = "registry+https://github.com/rust-lang/crates.io-index" 1753 + checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706" 1754 + dependencies = [ 1755 + "rustversion", 1756 + ] 1757 + 1758 + [[package]] 1759 + name = "inventory" 1760 + version = "0.3.22" 1761 + source = "registry+https://github.com/rust-lang/crates.io-index" 1762 + checksum = "009ae045c87e7082cb72dab0ccd01ae075dd00141ddc108f43a0ea150a9e7227" 1763 + dependencies = [ 1764 + "rustversion", 1765 + ] 1766 + 1767 + [[package]] 1768 + name = "ipconfig" 1769 + version = "0.3.2" 1770 + source = "registry+https://github.com/rust-lang/crates.io-index" 1771 + checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" 1772 + dependencies = [ 1773 + "socket2 0.5.10", 1774 + "widestring", 1775 + "windows-sys 0.48.0", 1776 + "winreg", 1777 + ] 1778 + 1779 + [[package]] 1780 + name = "ipld-core" 1781 + version = "0.4.3" 1782 + source = "registry+https://github.com/rust-lang/crates.io-index" 1783 + checksum = "090f624976d72f0b0bb71b86d58dc16c15e069193067cb3a3a09d655246cbbda" 1784 + dependencies = [ 1785 + "cid", 1786 + "serde", 1787 + "serde_bytes", 1788 + ] 1789 + 1790 + [[package]] 1791 + name = "ipnet" 1792 + version = "2.12.0" 1793 + source = "registry+https://github.com/rust-lang/crates.io-index" 1794 + checksum = "d98f6fed1fde3f8c21bc40a1abb88dd75e67924f9cffc3ef95607bad8017f8e2" 1795 + 1796 + [[package]] 1797 + name = "iri-string" 1798 + version = "0.7.10" 1799 + source = "registry+https://github.com/rust-lang/crates.io-index" 1800 + checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" 1801 + dependencies = [ 1802 + "memchr", 1803 + "serde", 1804 + ] 1805 + 1806 + [[package]] 1807 + name = "is-docker" 1808 + version = "0.2.0" 1809 + source = "registry+https://github.com/rust-lang/crates.io-index" 1810 + checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" 1811 + dependencies = [ 1812 + "once_cell", 1813 + ] 1814 + 1815 + [[package]] 1816 + name = "is-wsl" 1817 + version = "0.4.0" 1818 + source = "registry+https://github.com/rust-lang/crates.io-index" 1819 + checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" 1820 + dependencies = [ 1821 + "is-docker", 1822 + "once_cell", 1823 + ] 1824 + 1825 + [[package]] 1826 + name = "is_ci" 1827 + version = "1.2.0" 1828 + source = "registry+https://github.com/rust-lang/crates.io-index" 1829 + checksum = "7655c9839580ee829dfacba1d1278c2b7883e50a277ff7541299489d6bdfdc45" 1830 + 1831 + [[package]] 1832 + name = "is_terminal_polyfill" 1833 + version = "1.70.2" 1834 + source = "registry+https://github.com/rust-lang/crates.io-index" 1835 + checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" 1836 + 1837 + [[package]] 1838 + name = "itoa" 1839 + version = "1.0.17" 1840 + source = "registry+https://github.com/rust-lang/crates.io-index" 1841 + checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" 1842 + 1843 + [[package]] 1844 + name = "jacquard" 1845 + version = "0.9.5" 1846 + source = "registry+https://github.com/rust-lang/crates.io-index" 1847 + checksum = "f7c1fdbcf1153e6e6b87fde20036c1ffe7473c4852f1c6369bc4ef1fe47ccb9f" 1848 + dependencies = [ 1849 + "bytes", 1850 + "getrandom 0.2.17", 1851 + "gloo-storage", 1852 + "http", 1853 + "jacquard-api", 1854 + "jacquard-common", 1855 + "jacquard-derive", 1856 + "jacquard-identity", 1857 + "jacquard-oauth", 1858 + "jose-jwk", 1859 + "miette", 1860 + "regex", 1861 + "regex-lite", 1862 + "reqwest", 1863 + "serde", 1864 + "serde_html_form", 1865 + "serde_json", 1866 + "smol_str", 1867 + "thiserror 2.0.18", 1868 + "tokio", 1869 + "trait-variant", 1870 + "url", 1871 + "webpage", 1872 + ] 1873 + 1874 + [[package]] 1875 + name = "jacquard-api" 1876 + version = "0.9.5" 1877 + source = "registry+https://github.com/rust-lang/crates.io-index" 1878 + checksum = "4979fb1848c1dd7ac8fd12745bc71f56f6da61374407d5f9b06005467a954e5a" 1879 + dependencies = [ 1880 + "bon", 1881 + "bytes", 1882 + "jacquard-common", 1883 + "jacquard-derive", 1884 + "jacquard-lexicon", 1885 + "miette", 1886 + "rustversion", 1887 + "serde", 1888 + "serde_bytes", 1889 + "serde_ipld_dagcbor", 1890 + "thiserror 2.0.18", 1891 + "unicode-segmentation", 1892 + ] 1893 + 1894 + [[package]] 1895 + name = "jacquard-common" 1896 + version = "0.9.5" 1897 + source = "registry+https://github.com/rust-lang/crates.io-index" 1898 + checksum = "1751921e0bdae5e0077afade6161545e9ef7698306c868f800916e99ecbcaae9" 1899 + dependencies = [ 1900 + "base64 0.22.1", 1901 + "bon", 1902 + "bytes", 1903 + "chrono", 1904 + "cid", 1905 + "getrandom 0.2.17", 1906 + "getrandom 0.3.4", 1907 + "http", 1908 + "ipld-core", 1909 + "k256", 1910 + "langtag", 1911 + "miette", 1912 + "multibase", 1913 + "multihash", 1914 + "ouroboros", 1915 + "p256", 1916 + "postcard", 1917 + "rand 0.9.2", 1918 + "regex", 1919 + "regex-lite", 1920 + "reqwest", 1921 + "serde", 1922 + "serde_bytes", 1923 + "serde_html_form", 1924 + "serde_ipld_dagcbor", 1925 + "serde_json", 1926 + "signature", 1927 + "smol_str", 1928 + "thiserror 2.0.18", 1929 + "tokio", 1930 + "tokio-util", 1931 + "trait-variant", 1932 + "url", 1933 + ] 1934 + 1935 + [[package]] 1936 + name = "jacquard-derive" 1937 + version = "0.9.5" 1938 + source = "registry+https://github.com/rust-lang/crates.io-index" 1939 + checksum = "9c8d73dfee07943fdab93569ed1c28b06c6921ed891c08b415c4a323ff67e593" 1940 + dependencies = [ 1941 + "heck 0.5.0", 1942 + "jacquard-lexicon", 1943 + "proc-macro2", 1944 + "quote", 1945 + "syn 2.0.117", 1946 + ] 1947 + 1948 + [[package]] 1949 + name = "jacquard-identity" 1950 + version = "0.9.5" 1951 + source = "registry+https://github.com/rust-lang/crates.io-index" 1952 + checksum = "e7aaefa819fa4213cf59f180dba932f018a7cd0599582fd38474ee2a38c16cf2" 1953 + dependencies = [ 1954 + "bon", 1955 + "bytes", 1956 + "hickory-resolver", 1957 + "http", 1958 + "jacquard-api", 1959 + "jacquard-common", 1960 + "jacquard-lexicon", 1961 + "miette", 1962 + "mini-moka-wasm", 1963 + "n0-future", 1964 + "percent-encoding", 1965 + "reqwest", 1966 + "serde", 1967 + "serde_html_form", 1968 + "serde_json", 1969 + "thiserror 2.0.18", 1970 + "tokio", 1971 + "trait-variant", 1972 + "url", 1973 + "urlencoding", 1974 + ] 1975 + 1976 + [[package]] 1977 + name = "jacquard-lexicon" 1978 + version = "0.9.5" 1979 + source = "registry+https://github.com/rust-lang/crates.io-index" 1980 + checksum = "8411aff546569b0a1e0ef669bed2380cec1c00d48f02f3fcd57a71545321b3d8" 1981 + dependencies = [ 1982 + "cid", 1983 + "dashmap", 1984 + "heck 0.5.0", 1985 + "inventory", 1986 + "jacquard-common", 1987 + "miette", 1988 + "multihash", 1989 + "prettyplease", 1990 + "proc-macro2", 1991 + "quote", 1992 + "serde", 1993 + "serde_ipld_dagcbor", 1994 + "serde_json", 1995 + "serde_repr", 1996 + "serde_with", 1997 + "sha2", 1998 + "syn 2.0.117", 1999 + "thiserror 2.0.18", 2000 + "unicode-segmentation", 2001 + ] 2002 + 2003 + [[package]] 2004 + name = "jacquard-oauth" 2005 + version = "0.9.6" 2006 + source = "registry+https://github.com/rust-lang/crates.io-index" 2007 + checksum = "68bf0b0e061d85b09cfa78588dc098918d5b62f539a719165c6a806a1d2c0ef2" 2008 + dependencies = [ 2009 + "base64 0.22.1", 2010 + "bytes", 2011 + "chrono", 2012 + "dashmap", 2013 + "elliptic-curve", 2014 + "http", 2015 + "jacquard-common", 2016 + "jacquard-identity", 2017 + "jose-jwa", 2018 + "jose-jwk", 2019 + "miette", 2020 + "p256", 2021 + "rand 0.8.5", 2022 + "rouille", 2023 + "serde", 2024 + "serde_html_form", 2025 + "serde_json", 2026 + "sha2", 2027 + "smol_str", 2028 + "thiserror 2.0.18", 2029 + "tokio", 2030 + "trait-variant", 2031 + "url", 2032 + "webbrowser", 2033 + ] 2034 + 2035 + [[package]] 2036 + name = "jni" 2037 + version = "0.21.1" 2038 + source = "registry+https://github.com/rust-lang/crates.io-index" 2039 + checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" 2040 + dependencies = [ 2041 + "cesu8", 2042 + "cfg-if", 2043 + "combine", 2044 + "jni-sys", 2045 + "log", 2046 + "thiserror 1.0.69", 2047 + "walkdir", 2048 + "windows-sys 0.45.0", 2049 + ] 2050 + 2051 + [[package]] 2052 + name = "jni-sys" 2053 + version = "0.3.0" 2054 + source = "registry+https://github.com/rust-lang/crates.io-index" 2055 + checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 2056 + 2057 + [[package]] 2058 + name = "jose-b64" 2059 + version = "0.1.2" 2060 + source = "registry+https://github.com/rust-lang/crates.io-index" 2061 + checksum = "bec69375368709666b21c76965ce67549f2d2db7605f1f8707d17c9656801b56" 2062 + dependencies = [ 2063 + "base64ct", 2064 + "serde", 2065 + "subtle", 2066 + "zeroize", 2067 + ] 2068 + 2069 + [[package]] 2070 + name = "jose-jwa" 2071 + version = "0.1.2" 2072 + source = "registry+https://github.com/rust-lang/crates.io-index" 2073 + checksum = "9ab78e053fe886a351d67cf0d194c000f9d0dcb92906eb34d853d7e758a4b3a7" 2074 + dependencies = [ 2075 + "serde", 2076 + ] 2077 + 2078 + [[package]] 2079 + name = "jose-jwk" 2080 + version = "0.1.2" 2081 + source = "registry+https://github.com/rust-lang/crates.io-index" 2082 + checksum = "280fa263807fe0782ecb6f2baadc28dffc04e00558a58e33bfdb801d11fd58e7" 2083 + dependencies = [ 2084 + "jose-b64", 2085 + "jose-jwa", 2086 + "p256", 2087 + "p384", 2088 + "rsa", 2089 + "serde", 2090 + "zeroize", 2091 + ] 2092 + 2093 + [[package]] 2094 + name = "js-sys" 2095 + version = "0.3.91" 2096 + source = "registry+https://github.com/rust-lang/crates.io-index" 2097 + checksum = "b49715b7073f385ba4bc528e5747d02e66cb39c6146efb66b781f131f0fb399c" 2098 + dependencies = [ 2099 + "once_cell", 2100 + "wasm-bindgen", 2101 + ] 2102 + 2103 + [[package]] 2104 + name = "k256" 2105 + version = "0.13.4" 2106 + source = "registry+https://github.com/rust-lang/crates.io-index" 2107 + checksum = "f6e3919bbaa2945715f0bb6d3934a173d1e9a59ac23767fbaaef277265a7411b" 2108 + dependencies = [ 2109 + "cfg-if", 2110 + "ecdsa", 2111 + "elliptic-curve", 2112 + "sha2", 2113 + ] 2114 + 2115 + [[package]] 2116 + name = "kipclip" 2117 + version = "0.1.0" 2118 + dependencies = [ 2119 + "chrono", 2120 + "clap", 2121 + "dirs", 2122 + "jacquard", 2123 + "jacquard-identity", 2124 + "miette", 2125 + "open", 2126 + "owo-colors", 2127 + "reqwest", 2128 + "serde", 2129 + "serde_json", 2130 + "terminal_size", 2131 + "tokio", 2132 + "unicode-width 0.2.2", 2133 + ] 2134 + 2135 + [[package]] 2136 + name = "langtag" 2137 + version = "0.4.0" 2138 + source = "registry+https://github.com/rust-lang/crates.io-index" 2139 + checksum = "9ecb4c689a30e48ebeaa14237f34037e300dd072e6ad21a9ec72e810ff3c6600" 2140 + dependencies = [ 2141 + "serde", 2142 + "static-regular-grammar", 2143 + "thiserror 1.0.69", 2144 + ] 2145 + 2146 + [[package]] 2147 + name = "lazy_static" 2148 + version = "1.5.0" 2149 + source = "registry+https://github.com/rust-lang/crates.io-index" 2150 + checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 2151 + dependencies = [ 2152 + "spin 0.9.8", 2153 + ] 2154 + 2155 + [[package]] 2156 + name = "leb128fmt" 2157 + version = "0.1.0" 2158 + source = "registry+https://github.com/rust-lang/crates.io-index" 2159 + checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" 2160 + 2161 + [[package]] 2162 + name = "libc" 2163 + version = "0.2.183" 2164 + source = "registry+https://github.com/rust-lang/crates.io-index" 2165 + checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" 2166 + 2167 + [[package]] 2168 + name = "libm" 2169 + version = "0.2.16" 2170 + source = "registry+https://github.com/rust-lang/crates.io-index" 2171 + checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" 2172 + 2173 + [[package]] 2174 + name = "libredox" 2175 + version = "0.1.14" 2176 + source = "registry+https://github.com/rust-lang/crates.io-index" 2177 + checksum = "1744e39d1d6a9948f4f388969627434e31128196de472883b39f148769bfe30a" 2178 + dependencies = [ 2179 + "bitflags", 2180 + "libc", 2181 + "plain", 2182 + "redox_syscall 0.7.3", 2183 + ] 2184 + 2185 + [[package]] 2186 + name = "linked-hash-map" 2187 + version = "0.5.6" 2188 + source = "registry+https://github.com/rust-lang/crates.io-index" 2189 + checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 2190 + 2191 + [[package]] 2192 + name = "linux-raw-sys" 2193 + version = "0.12.1" 2194 + source = "registry+https://github.com/rust-lang/crates.io-index" 2195 + checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" 2196 + 2197 + [[package]] 2198 + name = "litemap" 2199 + version = "0.8.1" 2200 + source = "registry+https://github.com/rust-lang/crates.io-index" 2201 + checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" 2202 + 2203 + [[package]] 2204 + name = "lock_api" 2205 + version = "0.4.14" 2206 + source = "registry+https://github.com/rust-lang/crates.io-index" 2207 + checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" 2208 + dependencies = [ 2209 + "scopeguard", 2210 + ] 2211 + 2212 + [[package]] 2213 + name = "log" 2214 + version = "0.4.29" 2215 + source = "registry+https://github.com/rust-lang/crates.io-index" 2216 + checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" 2217 + 2218 + [[package]] 2219 + name = "loom" 2220 + version = "0.7.2" 2221 + source = "registry+https://github.com/rust-lang/crates.io-index" 2222 + checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" 2223 + dependencies = [ 2224 + "cfg-if", 2225 + "generator", 2226 + "scoped-tls", 2227 + "tracing", 2228 + "tracing-subscriber", 2229 + ] 2230 + 2231 + [[package]] 2232 + name = "lru-cache" 2233 + version = "0.1.2" 2234 + source = "registry+https://github.com/rust-lang/crates.io-index" 2235 + checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" 2236 + dependencies = [ 2237 + "linked-hash-map", 2238 + ] 2239 + 2240 + [[package]] 2241 + name = "lru-slab" 2242 + version = "0.1.2" 2243 + source = "registry+https://github.com/rust-lang/crates.io-index" 2244 + checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" 2245 + 2246 + [[package]] 2247 + name = "mac" 2248 + version = "0.1.1" 2249 + source = "registry+https://github.com/rust-lang/crates.io-index" 2250 + checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 2251 + 2252 + [[package]] 2253 + name = "markup5ever" 2254 + version = "0.12.1" 2255 + source = "registry+https://github.com/rust-lang/crates.io-index" 2256 + checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" 2257 + dependencies = [ 2258 + "log", 2259 + "phf", 2260 + "phf_codegen", 2261 + "string_cache", 2262 + "string_cache_codegen", 2263 + "tendril", 2264 + ] 2265 + 2266 + [[package]] 2267 + name = "markup5ever_rcdom" 2268 + version = "0.3.0" 2269 + source = "registry+https://github.com/rust-lang/crates.io-index" 2270 + checksum = "edaa21ab3701bfee5099ade5f7e1f84553fd19228cf332f13cd6e964bf59be18" 2271 + dependencies = [ 2272 + "html5ever", 2273 + "markup5ever", 2274 + "tendril", 2275 + "xml5ever", 2276 + ] 2277 + 2278 + [[package]] 2279 + name = "match-lookup" 2280 + version = "0.1.2" 2281 + source = "registry+https://github.com/rust-lang/crates.io-index" 2282 + checksum = "757aee279b8bdbb9f9e676796fd459e4207a1f986e87886700abf589f5abf771" 2283 + dependencies = [ 2284 + "proc-macro2", 2285 + "quote", 2286 + "syn 2.0.117", 2287 + ] 2288 + 2289 + [[package]] 2290 + name = "matchers" 2291 + version = "0.2.0" 2292 + source = "registry+https://github.com/rust-lang/crates.io-index" 2293 + checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9" 2294 + dependencies = [ 2295 + "regex-automata", 2296 + ] 2297 + 2298 + [[package]] 2299 + name = "memchr" 2300 + version = "2.8.0" 2301 + source = "registry+https://github.com/rust-lang/crates.io-index" 2302 + checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79" 2303 + 2304 + [[package]] 2305 + name = "miette" 2306 + version = "7.6.0" 2307 + source = "registry+https://github.com/rust-lang/crates.io-index" 2308 + checksum = "5f98efec8807c63c752b5bd61f862c165c115b0a35685bdcfd9238c7aeb592b7" 2309 + dependencies = [ 2310 + "backtrace", 2311 + "backtrace-ext", 2312 + "cfg-if", 2313 + "miette-derive", 2314 + "owo-colors", 2315 + "supports-color", 2316 + "supports-hyperlinks", 2317 + "supports-unicode", 2318 + "terminal_size", 2319 + "textwrap", 2320 + "unicode-width 0.1.14", 2321 + ] 2322 + 2323 + [[package]] 2324 + name = "miette-derive" 2325 + version = "7.6.0" 2326 + source = "registry+https://github.com/rust-lang/crates.io-index" 2327 + checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" 2328 + dependencies = [ 2329 + "proc-macro2", 2330 + "quote", 2331 + "syn 2.0.117", 2332 + ] 2333 + 2334 + [[package]] 2335 + name = "mime" 2336 + version = "0.3.17" 2337 + source = "registry+https://github.com/rust-lang/crates.io-index" 2338 + checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 2339 + 2340 + [[package]] 2341 + name = "mime_guess" 2342 + version = "2.0.5" 2343 + source = "registry+https://github.com/rust-lang/crates.io-index" 2344 + checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 2345 + dependencies = [ 2346 + "mime", 2347 + "unicase", 2348 + ] 2349 + 2350 + [[package]] 2351 + name = "mini-moka-wasm" 2352 + version = "0.10.99" 2353 + source = "registry+https://github.com/rust-lang/crates.io-index" 2354 + checksum = "0102b9a2ad50fa47ca89eead2316c8222285ecfbd3f69ce99564fbe4253866e8" 2355 + dependencies = [ 2356 + "crossbeam-channel", 2357 + "crossbeam-utils", 2358 + "dashmap", 2359 + "smallvec", 2360 + "tagptr", 2361 + "triomphe", 2362 + "web-time", 2363 + ] 2364 + 2365 + [[package]] 2366 + name = "minimal-lexical" 2367 + version = "0.2.1" 2368 + source = "registry+https://github.com/rust-lang/crates.io-index" 2369 + checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 2370 + 2371 + [[package]] 2372 + name = "miniz_oxide" 2373 + version = "0.8.9" 2374 + source = "registry+https://github.com/rust-lang/crates.io-index" 2375 + checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" 2376 + dependencies = [ 2377 + "adler2", 2378 + "simd-adler32", 2379 + ] 2380 + 2381 + [[package]] 2382 + name = "mio" 2383 + version = "1.1.1" 2384 + source = "registry+https://github.com/rust-lang/crates.io-index" 2385 + checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" 2386 + dependencies = [ 2387 + "libc", 2388 + "wasi", 2389 + "windows-sys 0.61.2", 2390 + ] 2391 + 2392 + [[package]] 2393 + name = "multibase" 2394 + version = "0.9.2" 2395 + source = "registry+https://github.com/rust-lang/crates.io-index" 2396 + checksum = "8694bb4835f452b0e3bb06dbebb1d6fc5385b6ca1caf2e55fd165c042390ec77" 2397 + dependencies = [ 2398 + "base-x", 2399 + "base256emoji", 2400 + "data-encoding", 2401 + "data-encoding-macro", 2402 + ] 2403 + 2404 + [[package]] 2405 + name = "multihash" 2406 + version = "0.19.3" 2407 + source = "registry+https://github.com/rust-lang/crates.io-index" 2408 + checksum = "6b430e7953c29dd6a09afc29ff0bb69c6e306329ee6794700aee27b76a1aea8d" 2409 + dependencies = [ 2410 + "core2", 2411 + "serde", 2412 + "unsigned-varint", 2413 + ] 2414 + 2415 + [[package]] 2416 + name = "multipart" 2417 + version = "0.18.0" 2418 + source = "registry+https://github.com/rust-lang/crates.io-index" 2419 + checksum = "00dec633863867f29cb39df64a397cdf4a6354708ddd7759f70c7fb51c5f9182" 2420 + dependencies = [ 2421 + "buf_redux", 2422 + "httparse", 2423 + "log", 2424 + "mime", 2425 + "mime_guess", 2426 + "quick-error", 2427 + "rand 0.8.5", 2428 + "safemem", 2429 + "tempfile", 2430 + "twoway", 2431 + ] 2432 + 2433 + [[package]] 2434 + name = "n0-future" 2435 + version = "0.1.3" 2436 + source = "registry+https://github.com/rust-lang/crates.io-index" 2437 + checksum = "7bb0e5d99e681ab3c938842b96fcb41bf8a7bb4bfdb11ccbd653a7e83e06c794" 2438 + dependencies = [ 2439 + "cfg_aliases", 2440 + "derive_more", 2441 + "futures-buffered", 2442 + "futures-lite", 2443 + "futures-util", 2444 + "js-sys", 2445 + "pin-project", 2446 + "send_wrapper", 2447 + "tokio", 2448 + "tokio-util", 2449 + "wasm-bindgen", 2450 + "wasm-bindgen-futures", 2451 + "web-time", 2452 + ] 2453 + 2454 + [[package]] 2455 + name = "native-tls" 2456 + version = "0.2.18" 2457 + source = "registry+https://github.com/rust-lang/crates.io-index" 2458 + checksum = "465500e14ea162429d264d44189adc38b199b62b1c21eea9f69e4b73cb03bbf2" 2459 + dependencies = [ 2460 + "libc", 2461 + "log", 2462 + "openssl", 2463 + "openssl-probe", 2464 + "openssl-sys", 2465 + "schannel", 2466 + "security-framework", 2467 + "security-framework-sys", 2468 + "tempfile", 2469 + ] 2470 + 2471 + [[package]] 2472 + name = "ndk-context" 2473 + version = "0.1.1" 2474 + source = "registry+https://github.com/rust-lang/crates.io-index" 2475 + checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" 2476 + 2477 + [[package]] 2478 + name = "new_debug_unreachable" 2479 + version = "1.0.6" 2480 + source = "registry+https://github.com/rust-lang/crates.io-index" 2481 + checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 2482 + 2483 + [[package]] 2484 + name = "nom" 2485 + version = "7.1.3" 2486 + source = "registry+https://github.com/rust-lang/crates.io-index" 2487 + checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 2488 + dependencies = [ 2489 + "memchr", 2490 + "minimal-lexical", 2491 + ] 2492 + 2493 + [[package]] 2494 + name = "nu-ansi-term" 2495 + version = "0.50.3" 2496 + source = "registry+https://github.com/rust-lang/crates.io-index" 2497 + checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" 2498 + dependencies = [ 2499 + "windows-sys 0.61.2", 2500 + ] 2501 + 2502 + [[package]] 2503 + name = "num-bigint-dig" 2504 + version = "0.8.6" 2505 + source = "registry+https://github.com/rust-lang/crates.io-index" 2506 + checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" 2507 + dependencies = [ 2508 + "lazy_static", 2509 + "libm", 2510 + "num-integer", 2511 + "num-iter", 2512 + "num-traits", 2513 + "rand 0.8.5", 2514 + "smallvec", 2515 + "zeroize", 2516 + ] 2517 + 2518 + [[package]] 2519 + name = "num-conv" 2520 + version = "0.2.0" 2521 + source = "registry+https://github.com/rust-lang/crates.io-index" 2522 + checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" 2523 + 2524 + [[package]] 2525 + name = "num-integer" 2526 + version = "0.1.46" 2527 + source = "registry+https://github.com/rust-lang/crates.io-index" 2528 + checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 2529 + dependencies = [ 2530 + "num-traits", 2531 + ] 2532 + 2533 + [[package]] 2534 + name = "num-iter" 2535 + version = "0.1.45" 2536 + source = "registry+https://github.com/rust-lang/crates.io-index" 2537 + checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" 2538 + dependencies = [ 2539 + "autocfg", 2540 + "num-integer", 2541 + "num-traits", 2542 + ] 2543 + 2544 + [[package]] 2545 + name = "num-traits" 2546 + version = "0.2.19" 2547 + source = "registry+https://github.com/rust-lang/crates.io-index" 2548 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 2549 + dependencies = [ 2550 + "autocfg", 2551 + "libm", 2552 + ] 2553 + 2554 + [[package]] 2555 + name = "num_cpus" 2556 + version = "1.17.0" 2557 + source = "registry+https://github.com/rust-lang/crates.io-index" 2558 + checksum = "91df4bbde75afed763b708b7eee1e8e7651e02d97f6d5dd763e89367e957b23b" 2559 + dependencies = [ 2560 + "hermit-abi", 2561 + "libc", 2562 + ] 2563 + 2564 + [[package]] 2565 + name = "num_threads" 2566 + version = "0.1.7" 2567 + source = "registry+https://github.com/rust-lang/crates.io-index" 2568 + checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" 2569 + dependencies = [ 2570 + "libc", 2571 + ] 2572 + 2573 + [[package]] 2574 + name = "objc2" 2575 + version = "0.6.4" 2576 + source = "registry+https://github.com/rust-lang/crates.io-index" 2577 + checksum = "3a12a8ed07aefc768292f076dc3ac8c48f3781c8f2d5851dd3d98950e8c5a89f" 2578 + dependencies = [ 2579 + "objc2-encode", 2580 + ] 2581 + 2582 + [[package]] 2583 + name = "objc2-encode" 2584 + version = "4.1.0" 2585 + source = "registry+https://github.com/rust-lang/crates.io-index" 2586 + checksum = "ef25abbcd74fb2609453eb695bd2f860d389e457f67dc17cafc8b8cbc89d0c33" 2587 + 2588 + [[package]] 2589 + name = "objc2-foundation" 2590 + version = "0.3.2" 2591 + source = "registry+https://github.com/rust-lang/crates.io-index" 2592 + checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" 2593 + dependencies = [ 2594 + "bitflags", 2595 + "objc2", 2596 + ] 2597 + 2598 + [[package]] 2599 + name = "object" 2600 + version = "0.37.3" 2601 + source = "registry+https://github.com/rust-lang/crates.io-index" 2602 + checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" 2603 + dependencies = [ 2604 + "memchr", 2605 + ] 2606 + 2607 + [[package]] 2608 + name = "once_cell" 2609 + version = "1.21.3" 2610 + source = "registry+https://github.com/rust-lang/crates.io-index" 2611 + checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" 2612 + 2613 + [[package]] 2614 + name = "once_cell_polyfill" 2615 + version = "1.70.2" 2616 + source = "registry+https://github.com/rust-lang/crates.io-index" 2617 + checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" 2618 + 2619 + [[package]] 2620 + name = "open" 2621 + version = "5.3.3" 2622 + source = "registry+https://github.com/rust-lang/crates.io-index" 2623 + checksum = "43bb73a7fa3799b198970490a51174027ba0d4ec504b03cd08caf513d40024bc" 2624 + dependencies = [ 2625 + "is-wsl", 2626 + "libc", 2627 + "pathdiff", 2628 + ] 2629 + 2630 + [[package]] 2631 + name = "openssl" 2632 + version = "0.10.75" 2633 + source = "registry+https://github.com/rust-lang/crates.io-index" 2634 + checksum = "08838db121398ad17ab8531ce9de97b244589089e290a384c900cb9ff7434328" 2635 + dependencies = [ 2636 + "bitflags", 2637 + "cfg-if", 2638 + "foreign-types", 2639 + "libc", 2640 + "once_cell", 2641 + "openssl-macros", 2642 + "openssl-sys", 2643 + ] 2644 + 2645 + [[package]] 2646 + name = "openssl-macros" 2647 + version = "0.1.1" 2648 + source = "registry+https://github.com/rust-lang/crates.io-index" 2649 + checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" 2650 + dependencies = [ 2651 + "proc-macro2", 2652 + "quote", 2653 + "syn 2.0.117", 2654 + ] 2655 + 2656 + [[package]] 2657 + name = "openssl-probe" 2658 + version = "0.2.1" 2659 + source = "registry+https://github.com/rust-lang/crates.io-index" 2660 + checksum = "7c87def4c32ab89d880effc9e097653c8da5d6ef28e6b539d313baaacfbafcbe" 2661 + 2662 + [[package]] 2663 + name = "openssl-sys" 2664 + version = "0.9.111" 2665 + source = "registry+https://github.com/rust-lang/crates.io-index" 2666 + checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321" 2667 + dependencies = [ 2668 + "cc", 2669 + "libc", 2670 + "pkg-config", 2671 + "vcpkg", 2672 + ] 2673 + 2674 + [[package]] 2675 + name = "option-ext" 2676 + version = "0.2.0" 2677 + source = "registry+https://github.com/rust-lang/crates.io-index" 2678 + checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" 2679 + 2680 + [[package]] 2681 + name = "ouroboros" 2682 + version = "0.18.5" 2683 + source = "registry+https://github.com/rust-lang/crates.io-index" 2684 + checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59" 2685 + dependencies = [ 2686 + "aliasable", 2687 + "ouroboros_macro", 2688 + "static_assertions", 2689 + ] 2690 + 2691 + [[package]] 2692 + name = "ouroboros_macro" 2693 + version = "0.18.5" 2694 + source = "registry+https://github.com/rust-lang/crates.io-index" 2695 + checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0" 2696 + dependencies = [ 2697 + "heck 0.4.1", 2698 + "proc-macro2", 2699 + "proc-macro2-diagnostics", 2700 + "quote", 2701 + "syn 2.0.117", 2702 + ] 2703 + 2704 + [[package]] 2705 + name = "owo-colors" 2706 + version = "4.3.0" 2707 + source = "registry+https://github.com/rust-lang/crates.io-index" 2708 + checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" 2709 + 2710 + [[package]] 2711 + name = "p256" 2712 + version = "0.13.2" 2713 + source = "registry+https://github.com/rust-lang/crates.io-index" 2714 + checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" 2715 + dependencies = [ 2716 + "ecdsa", 2717 + "elliptic-curve", 2718 + "primeorder", 2719 + "sha2", 2720 + ] 2721 + 2722 + [[package]] 2723 + name = "p384" 2724 + version = "0.13.1" 2725 + source = "registry+https://github.com/rust-lang/crates.io-index" 2726 + checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" 2727 + dependencies = [ 2728 + "elliptic-curve", 2729 + "primeorder", 2730 + ] 2731 + 2732 + [[package]] 2733 + name = "parking" 2734 + version = "2.2.1" 2735 + source = "registry+https://github.com/rust-lang/crates.io-index" 2736 + checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 2737 + 2738 + [[package]] 2739 + name = "parking_lot" 2740 + version = "0.12.5" 2741 + source = "registry+https://github.com/rust-lang/crates.io-index" 2742 + checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" 2743 + dependencies = [ 2744 + "lock_api", 2745 + "parking_lot_core", 2746 + ] 2747 + 2748 + [[package]] 2749 + name = "parking_lot_core" 2750 + version = "0.9.12" 2751 + source = "registry+https://github.com/rust-lang/crates.io-index" 2752 + checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" 2753 + dependencies = [ 2754 + "cfg-if", 2755 + "libc", 2756 + "redox_syscall 0.5.18", 2757 + "smallvec", 2758 + "windows-link", 2759 + ] 2760 + 2761 + [[package]] 2762 + name = "pathdiff" 2763 + version = "0.2.3" 2764 + source = "registry+https://github.com/rust-lang/crates.io-index" 2765 + checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" 2766 + 2767 + [[package]] 2768 + name = "pem-rfc7468" 2769 + version = "0.7.0" 2770 + source = "registry+https://github.com/rust-lang/crates.io-index" 2771 + checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" 2772 + dependencies = [ 2773 + "base64ct", 2774 + ] 2775 + 2776 + [[package]] 2777 + name = "percent-encoding" 2778 + version = "2.3.2" 2779 + source = "registry+https://github.com/rust-lang/crates.io-index" 2780 + checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" 2781 + 2782 + [[package]] 2783 + name = "phf" 2784 + version = "0.11.3" 2785 + source = "registry+https://github.com/rust-lang/crates.io-index" 2786 + checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 2787 + dependencies = [ 2788 + "phf_shared", 2789 + ] 2790 + 2791 + [[package]] 2792 + name = "phf_codegen" 2793 + version = "0.11.3" 2794 + source = "registry+https://github.com/rust-lang/crates.io-index" 2795 + checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" 2796 + dependencies = [ 2797 + "phf_generator", 2798 + "phf_shared", 2799 + ] 2800 + 2801 + [[package]] 2802 + name = "phf_generator" 2803 + version = "0.11.3" 2804 + source = "registry+https://github.com/rust-lang/crates.io-index" 2805 + checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" 2806 + dependencies = [ 2807 + "phf_shared", 2808 + "rand 0.8.5", 2809 + ] 2810 + 2811 + [[package]] 2812 + name = "phf_shared" 2813 + version = "0.11.3" 2814 + source = "registry+https://github.com/rust-lang/crates.io-index" 2815 + checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 2816 + dependencies = [ 2817 + "siphasher", 2818 + ] 2819 + 2820 + [[package]] 2821 + name = "pin-project" 2822 + version = "1.1.11" 2823 + source = "registry+https://github.com/rust-lang/crates.io-index" 2824 + checksum = "f1749c7ed4bcaf4c3d0a3efc28538844fb29bcdd7d2b67b2be7e20ba861ff517" 2825 + dependencies = [ 2826 + "pin-project-internal", 2827 + ] 2828 + 2829 + [[package]] 2830 + name = "pin-project-internal" 2831 + version = "1.1.11" 2832 + source = "registry+https://github.com/rust-lang/crates.io-index" 2833 + checksum = "d9b20ed30f105399776b9c883e68e536ef602a16ae6f596d2c473591d6ad64c6" 2834 + dependencies = [ 2835 + "proc-macro2", 2836 + "quote", 2837 + "syn 2.0.117", 2838 + ] 2839 + 2840 + [[package]] 2841 + name = "pin-project-lite" 2842 + version = "0.2.17" 2843 + source = "registry+https://github.com/rust-lang/crates.io-index" 2844 + checksum = "a89322df9ebe1c1578d689c92318e070967d1042b512afbe49518723f4e6d5cd" 2845 + 2846 + [[package]] 2847 + name = "pin-utils" 2848 + version = "0.1.0" 2849 + source = "registry+https://github.com/rust-lang/crates.io-index" 2850 + checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 2851 + 2852 + [[package]] 2853 + name = "pkcs1" 2854 + version = "0.7.5" 2855 + source = "registry+https://github.com/rust-lang/crates.io-index" 2856 + checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" 2857 + dependencies = [ 2858 + "der", 2859 + "pkcs8", 2860 + "spki", 2861 + ] 2862 + 2863 + [[package]] 2864 + name = "pkcs8" 2865 + version = "0.10.2" 2866 + source = "registry+https://github.com/rust-lang/crates.io-index" 2867 + checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" 2868 + dependencies = [ 2869 + "der", 2870 + "spki", 2871 + ] 2872 + 2873 + [[package]] 2874 + name = "pkg-config" 2875 + version = "0.3.32" 2876 + source = "registry+https://github.com/rust-lang/crates.io-index" 2877 + checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" 2878 + 2879 + [[package]] 2880 + name = "plain" 2881 + version = "0.2.3" 2882 + source = "registry+https://github.com/rust-lang/crates.io-index" 2883 + checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" 2884 + 2885 + [[package]] 2886 + name = "postcard" 2887 + version = "1.1.3" 2888 + source = "registry+https://github.com/rust-lang/crates.io-index" 2889 + checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" 2890 + dependencies = [ 2891 + "cobs", 2892 + "embedded-io 0.4.0", 2893 + "embedded-io 0.6.1", 2894 + "heapless", 2895 + "serde", 2896 + ] 2897 + 2898 + [[package]] 2899 + name = "potential_utf" 2900 + version = "0.1.4" 2901 + source = "registry+https://github.com/rust-lang/crates.io-index" 2902 + checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" 2903 + dependencies = [ 2904 + "zerovec", 2905 + ] 2906 + 2907 + [[package]] 2908 + name = "powerfmt" 2909 + version = "0.2.0" 2910 + source = "registry+https://github.com/rust-lang/crates.io-index" 2911 + checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 2912 + 2913 + [[package]] 2914 + name = "ppv-lite86" 2915 + version = "0.2.21" 2916 + source = "registry+https://github.com/rust-lang/crates.io-index" 2917 + checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" 2918 + dependencies = [ 2919 + "zerocopy", 2920 + ] 2921 + 2922 + [[package]] 2923 + name = "precomputed-hash" 2924 + version = "0.1.1" 2925 + source = "registry+https://github.com/rust-lang/crates.io-index" 2926 + checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 2927 + 2928 + [[package]] 2929 + name = "prettyplease" 2930 + version = "0.2.37" 2931 + source = "registry+https://github.com/rust-lang/crates.io-index" 2932 + checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" 2933 + dependencies = [ 2934 + "proc-macro2", 2935 + "syn 2.0.117", 2936 + ] 2937 + 2938 + [[package]] 2939 + name = "primeorder" 2940 + version = "0.13.6" 2941 + source = "registry+https://github.com/rust-lang/crates.io-index" 2942 + checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" 2943 + dependencies = [ 2944 + "elliptic-curve", 2945 + ] 2946 + 2947 + [[package]] 2948 + name = "proc-macro-error" 2949 + version = "1.0.4" 2950 + source = "registry+https://github.com/rust-lang/crates.io-index" 2951 + checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" 2952 + dependencies = [ 2953 + "proc-macro-error-attr", 2954 + "proc-macro2", 2955 + "quote", 2956 + "syn 1.0.109", 2957 + "version_check", 2958 + ] 2959 + 2960 + [[package]] 2961 + name = "proc-macro-error-attr" 2962 + version = "1.0.4" 2963 + source = "registry+https://github.com/rust-lang/crates.io-index" 2964 + checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" 2965 + dependencies = [ 2966 + "proc-macro2", 2967 + "quote", 2968 + "version_check", 2969 + ] 2970 + 2971 + [[package]] 2972 + name = "proc-macro2" 2973 + version = "1.0.106" 2974 + source = "registry+https://github.com/rust-lang/crates.io-index" 2975 + checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" 2976 + dependencies = [ 2977 + "unicode-ident", 2978 + ] 2979 + 2980 + [[package]] 2981 + name = "proc-macro2-diagnostics" 2982 + version = "0.10.1" 2983 + source = "registry+https://github.com/rust-lang/crates.io-index" 2984 + checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" 2985 + dependencies = [ 2986 + "proc-macro2", 2987 + "quote", 2988 + "syn 2.0.117", 2989 + "version_check", 2990 + "yansi", 2991 + ] 2992 + 2993 + [[package]] 2994 + name = "quick-error" 2995 + version = "1.2.3" 2996 + source = "registry+https://github.com/rust-lang/crates.io-index" 2997 + checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" 2998 + 2999 + [[package]] 3000 + name = "quinn" 3001 + version = "0.11.9" 3002 + source = "registry+https://github.com/rust-lang/crates.io-index" 3003 + checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" 3004 + dependencies = [ 3005 + "bytes", 3006 + "cfg_aliases", 3007 + "pin-project-lite", 3008 + "quinn-proto", 3009 + "quinn-udp", 3010 + "rustc-hash", 3011 + "rustls", 3012 + "socket2 0.6.3", 3013 + "thiserror 2.0.18", 3014 + "tokio", 3015 + "tracing", 3016 + "web-time", 3017 + ] 3018 + 3019 + [[package]] 3020 + name = "quinn-proto" 3021 + version = "0.11.13" 3022 + source = "registry+https://github.com/rust-lang/crates.io-index" 3023 + checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" 3024 + dependencies = [ 3025 + "bytes", 3026 + "getrandom 0.3.4", 3027 + "lru-slab", 3028 + "rand 0.9.2", 3029 + "ring", 3030 + "rustc-hash", 3031 + "rustls", 3032 + "rustls-pki-types", 3033 + "slab", 3034 + "thiserror 2.0.18", 3035 + "tinyvec", 3036 + "tracing", 3037 + "web-time", 3038 + ] 3039 + 3040 + [[package]] 3041 + name = "quinn-udp" 3042 + version = "0.5.14" 3043 + source = "registry+https://github.com/rust-lang/crates.io-index" 3044 + checksum = "addec6a0dcad8a8d96a771f815f0eaf55f9d1805756410b39f5fa81332574cbd" 3045 + dependencies = [ 3046 + "cfg_aliases", 3047 + "libc", 3048 + "once_cell", 3049 + "socket2 0.6.3", 3050 + "tracing", 3051 + "windows-sys 0.60.2", 3052 + ] 3053 + 3054 + [[package]] 3055 + name = "quote" 3056 + version = "1.0.45" 3057 + source = "registry+https://github.com/rust-lang/crates.io-index" 3058 + checksum = "41f2619966050689382d2b44f664f4bc593e129785a36d6ee376ddf37259b924" 3059 + dependencies = [ 3060 + "proc-macro2", 3061 + ] 3062 + 3063 + [[package]] 3064 + name = "r-efi" 3065 + version = "5.3.0" 3066 + source = "registry+https://github.com/rust-lang/crates.io-index" 3067 + checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" 3068 + 3069 + [[package]] 3070 + name = "r-efi" 3071 + version = "6.0.0" 3072 + source = "registry+https://github.com/rust-lang/crates.io-index" 3073 + checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" 3074 + 3075 + [[package]] 3076 + name = "rand" 3077 + version = "0.8.5" 3078 + source = "registry+https://github.com/rust-lang/crates.io-index" 3079 + checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 3080 + dependencies = [ 3081 + "libc", 3082 + "rand_chacha 0.3.1", 3083 + "rand_core 0.6.4", 3084 + ] 3085 + 3086 + [[package]] 3087 + name = "rand" 3088 + version = "0.9.2" 3089 + source = "registry+https://github.com/rust-lang/crates.io-index" 3090 + checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" 3091 + dependencies = [ 3092 + "rand_chacha 0.9.0", 3093 + "rand_core 0.9.5", 3094 + ] 3095 + 3096 + [[package]] 3097 + name = "rand_chacha" 3098 + version = "0.3.1" 3099 + source = "registry+https://github.com/rust-lang/crates.io-index" 3100 + checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 3101 + dependencies = [ 3102 + "ppv-lite86", 3103 + "rand_core 0.6.4", 3104 + ] 3105 + 3106 + [[package]] 3107 + name = "rand_chacha" 3108 + version = "0.9.0" 3109 + source = "registry+https://github.com/rust-lang/crates.io-index" 3110 + checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" 3111 + dependencies = [ 3112 + "ppv-lite86", 3113 + "rand_core 0.9.5", 3114 + ] 3115 + 3116 + [[package]] 3117 + name = "rand_core" 3118 + version = "0.6.4" 3119 + source = "registry+https://github.com/rust-lang/crates.io-index" 3120 + checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 3121 + dependencies = [ 3122 + "getrandom 0.2.17", 3123 + ] 3124 + 3125 + [[package]] 3126 + name = "rand_core" 3127 + version = "0.9.5" 3128 + source = "registry+https://github.com/rust-lang/crates.io-index" 3129 + checksum = "76afc826de14238e6e8c374ddcc1fa19e374fd8dd986b0d2af0d02377261d83c" 3130 + dependencies = [ 3131 + "getrandom 0.3.4", 3132 + ] 3133 + 3134 + [[package]] 3135 + name = "range-traits" 3136 + version = "0.3.2" 3137 + source = "registry+https://github.com/rust-lang/crates.io-index" 3138 + checksum = "d20581732dd76fa913c7dff1a2412b714afe3573e94d41c34719de73337cc8ab" 3139 + 3140 + [[package]] 3141 + name = "redox_syscall" 3142 + version = "0.5.18" 3143 + source = "registry+https://github.com/rust-lang/crates.io-index" 3144 + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" 3145 + dependencies = [ 3146 + "bitflags", 3147 + ] 3148 + 3149 + [[package]] 3150 + name = "redox_syscall" 3151 + version = "0.7.3" 3152 + source = "registry+https://github.com/rust-lang/crates.io-index" 3153 + checksum = "6ce70a74e890531977d37e532c34d45e9055d2409ed08ddba14529471ed0be16" 3154 + dependencies = [ 3155 + "bitflags", 3156 + ] 3157 + 3158 + [[package]] 3159 + name = "redox_users" 3160 + version = "0.5.2" 3161 + source = "registry+https://github.com/rust-lang/crates.io-index" 3162 + checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac" 3163 + dependencies = [ 3164 + "getrandom 0.2.17", 3165 + "libredox", 3166 + "thiserror 2.0.18", 3167 + ] 3168 + 3169 + [[package]] 3170 + name = "ref-cast" 3171 + version = "1.0.25" 3172 + source = "registry+https://github.com/rust-lang/crates.io-index" 3173 + checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" 3174 + dependencies = [ 3175 + "ref-cast-impl", 3176 + ] 3177 + 3178 + [[package]] 3179 + name = "ref-cast-impl" 3180 + version = "1.0.25" 3181 + source = "registry+https://github.com/rust-lang/crates.io-index" 3182 + checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" 3183 + dependencies = [ 3184 + "proc-macro2", 3185 + "quote", 3186 + "syn 2.0.117", 3187 + ] 3188 + 3189 + [[package]] 3190 + name = "regex" 3191 + version = "1.12.3" 3192 + source = "registry+https://github.com/rust-lang/crates.io-index" 3193 + checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276" 3194 + dependencies = [ 3195 + "aho-corasick", 3196 + "memchr", 3197 + "regex-automata", 3198 + "regex-syntax", 3199 + ] 3200 + 3201 + [[package]] 3202 + name = "regex-automata" 3203 + version = "0.4.14" 3204 + source = "registry+https://github.com/rust-lang/crates.io-index" 3205 + checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f" 3206 + dependencies = [ 3207 + "aho-corasick", 3208 + "memchr", 3209 + "regex-syntax", 3210 + ] 3211 + 3212 + [[package]] 3213 + name = "regex-lite" 3214 + version = "0.1.9" 3215 + source = "registry+https://github.com/rust-lang/crates.io-index" 3216 + checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" 3217 + 3218 + [[package]] 3219 + name = "regex-syntax" 3220 + version = "0.8.10" 3221 + source = "registry+https://github.com/rust-lang/crates.io-index" 3222 + checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" 3223 + 3224 + [[package]] 3225 + name = "reqwest" 3226 + version = "0.12.28" 3227 + source = "registry+https://github.com/rust-lang/crates.io-index" 3228 + checksum = "eddd3ca559203180a307f12d114c268abf583f59b03cb906fd0b3ff8646c1147" 3229 + dependencies = [ 3230 + "base64 0.22.1", 3231 + "bytes", 3232 + "encoding_rs", 3233 + "futures-core", 3234 + "h2", 3235 + "http", 3236 + "http-body", 3237 + "http-body-util", 3238 + "hyper", 3239 + "hyper-rustls", 3240 + "hyper-tls", 3241 + "hyper-util", 3242 + "js-sys", 3243 + "log", 3244 + "mime", 3245 + "native-tls", 3246 + "percent-encoding", 3247 + "pin-project-lite", 3248 + "quinn", 3249 + "rustls", 3250 + "rustls-pki-types", 3251 + "serde", 3252 + "serde_json", 3253 + "serde_urlencoded", 3254 + "sync_wrapper", 3255 + "tokio", 3256 + "tokio-native-tls", 3257 + "tokio-rustls", 3258 + "tower", 3259 + "tower-http", 3260 + "tower-service", 3261 + "url", 3262 + "wasm-bindgen", 3263 + "wasm-bindgen-futures", 3264 + "web-sys", 3265 + "webpki-roots", 3266 + ] 3267 + 3268 + [[package]] 3269 + name = "resolv-conf" 3270 + version = "0.7.6" 3271 + source = "registry+https://github.com/rust-lang/crates.io-index" 3272 + checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" 3273 + 3274 + [[package]] 3275 + name = "rfc6979" 3276 + version = "0.4.0" 3277 + source = "registry+https://github.com/rust-lang/crates.io-index" 3278 + checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" 3279 + dependencies = [ 3280 + "hmac", 3281 + "subtle", 3282 + ] 3283 + 3284 + [[package]] 3285 + name = "ring" 3286 + version = "0.17.14" 3287 + source = "registry+https://github.com/rust-lang/crates.io-index" 3288 + checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" 3289 + dependencies = [ 3290 + "cc", 3291 + "cfg-if", 3292 + "getrandom 0.2.17", 3293 + "libc", 3294 + "untrusted", 3295 + "windows-sys 0.52.0", 3296 + ] 3297 + 3298 + [[package]] 3299 + name = "rouille" 3300 + version = "3.6.2" 3301 + source = "registry+https://github.com/rust-lang/crates.io-index" 3302 + checksum = "3716fbf57fc1084d7a706adf4e445298d123e4a44294c4e8213caf1b85fcc921" 3303 + dependencies = [ 3304 + "base64 0.13.1", 3305 + "brotli", 3306 + "chrono", 3307 + "deflate", 3308 + "filetime", 3309 + "multipart", 3310 + "percent-encoding", 3311 + "rand 0.8.5", 3312 + "serde", 3313 + "serde_derive", 3314 + "serde_json", 3315 + "sha1_smol", 3316 + "threadpool", 3317 + "time", 3318 + "tiny_http", 3319 + "url", 3320 + ] 3321 + 3322 + [[package]] 3323 + name = "rsa" 3324 + version = "0.9.10" 3325 + source = "registry+https://github.com/rust-lang/crates.io-index" 3326 + checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" 3327 + dependencies = [ 3328 + "const-oid", 3329 + "digest", 3330 + "num-bigint-dig", 3331 + "num-integer", 3332 + "num-traits", 3333 + "pkcs1", 3334 + "pkcs8", 3335 + "rand_core 0.6.4", 3336 + "signature", 3337 + "spki", 3338 + "subtle", 3339 + "zeroize", 3340 + ] 3341 + 3342 + [[package]] 3343 + name = "rustc-demangle" 3344 + version = "0.1.27" 3345 + source = "registry+https://github.com/rust-lang/crates.io-index" 3346 + checksum = "b50b8869d9fc858ce7266cce0194bd74df58b9d0e3f6df3a9fc8eb470d95c09d" 3347 + 3348 + [[package]] 3349 + name = "rustc-hash" 3350 + version = "2.1.1" 3351 + source = "registry+https://github.com/rust-lang/crates.io-index" 3352 + checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" 3353 + 3354 + [[package]] 3355 + name = "rustc_version" 3356 + version = "0.4.1" 3357 + source = "registry+https://github.com/rust-lang/crates.io-index" 3358 + checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 3359 + dependencies = [ 3360 + "semver", 3361 + ] 3362 + 3363 + [[package]] 3364 + name = "rustix" 3365 + version = "1.1.4" 3366 + source = "registry+https://github.com/rust-lang/crates.io-index" 3367 + checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" 3368 + dependencies = [ 3369 + "bitflags", 3370 + "errno", 3371 + "libc", 3372 + "linux-raw-sys", 3373 + "windows-sys 0.61.2", 3374 + ] 3375 + 3376 + [[package]] 3377 + name = "rustls" 3378 + version = "0.23.37" 3379 + source = "registry+https://github.com/rust-lang/crates.io-index" 3380 + checksum = "758025cb5fccfd3bc2fd74708fd4682be41d99e5dff73c377c0646c6012c73a4" 3381 + dependencies = [ 3382 + "once_cell", 3383 + "ring", 3384 + "rustls-pki-types", 3385 + "rustls-webpki", 3386 + "subtle", 3387 + "zeroize", 3388 + ] 3389 + 3390 + [[package]] 3391 + name = "rustls-pki-types" 3392 + version = "1.14.0" 3393 + source = "registry+https://github.com/rust-lang/crates.io-index" 3394 + checksum = "be040f8b0a225e40375822a563fa9524378b9d63112f53e19ffff34df5d33fdd" 3395 + dependencies = [ 3396 + "web-time", 3397 + "zeroize", 3398 + ] 3399 + 3400 + [[package]] 3401 + name = "rustls-webpki" 3402 + version = "0.103.9" 3403 + source = "registry+https://github.com/rust-lang/crates.io-index" 3404 + checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" 3405 + dependencies = [ 3406 + "ring", 3407 + "rustls-pki-types", 3408 + "untrusted", 3409 + ] 3410 + 3411 + [[package]] 3412 + name = "rustversion" 3413 + version = "1.0.22" 3414 + source = "registry+https://github.com/rust-lang/crates.io-index" 3415 + checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" 3416 + 3417 + [[package]] 3418 + name = "ryu" 3419 + version = "1.0.23" 3420 + source = "registry+https://github.com/rust-lang/crates.io-index" 3421 + checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" 3422 + 3423 + [[package]] 3424 + name = "safemem" 3425 + version = "0.3.3" 3426 + source = "registry+https://github.com/rust-lang/crates.io-index" 3427 + checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" 3428 + 3429 + [[package]] 3430 + name = "same-file" 3431 + version = "1.0.6" 3432 + source = "registry+https://github.com/rust-lang/crates.io-index" 3433 + checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 3434 + dependencies = [ 3435 + "winapi-util", 3436 + ] 3437 + 3438 + [[package]] 3439 + name = "schannel" 3440 + version = "0.1.28" 3441 + source = "registry+https://github.com/rust-lang/crates.io-index" 3442 + checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" 3443 + dependencies = [ 3444 + "windows-sys 0.61.2", 3445 + ] 3446 + 3447 + [[package]] 3448 + name = "schemars" 3449 + version = "0.9.0" 3450 + source = "registry+https://github.com/rust-lang/crates.io-index" 3451 + checksum = "4cd191f9397d57d581cddd31014772520aa448f65ef991055d7f61582c65165f" 3452 + dependencies = [ 3453 + "dyn-clone", 3454 + "ref-cast", 3455 + "serde", 3456 + "serde_json", 3457 + ] 3458 + 3459 + [[package]] 3460 + name = "schemars" 3461 + version = "1.2.1" 3462 + source = "registry+https://github.com/rust-lang/crates.io-index" 3463 + checksum = "a2b42f36aa1cd011945615b92222f6bf73c599a102a300334cd7f8dbeec726cc" 3464 + dependencies = [ 3465 + "dyn-clone", 3466 + "ref-cast", 3467 + "serde", 3468 + "serde_json", 3469 + ] 3470 + 3471 + [[package]] 3472 + name = "scoped-tls" 3473 + version = "1.0.1" 3474 + source = "registry+https://github.com/rust-lang/crates.io-index" 3475 + checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" 3476 + 3477 + [[package]] 3478 + name = "scopeguard" 3479 + version = "1.2.0" 3480 + source = "registry+https://github.com/rust-lang/crates.io-index" 3481 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 3482 + 3483 + [[package]] 3484 + name = "sec1" 3485 + version = "0.7.3" 3486 + source = "registry+https://github.com/rust-lang/crates.io-index" 3487 + checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" 3488 + dependencies = [ 3489 + "base16ct", 3490 + "der", 3491 + "generic-array", 3492 + "pkcs8", 3493 + "subtle", 3494 + "zeroize", 3495 + ] 3496 + 3497 + [[package]] 3498 + name = "security-framework" 3499 + version = "3.7.0" 3500 + source = "registry+https://github.com/rust-lang/crates.io-index" 3501 + checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" 3502 + dependencies = [ 3503 + "bitflags", 3504 + "core-foundation 0.10.1", 3505 + "core-foundation-sys", 3506 + "libc", 3507 + "security-framework-sys", 3508 + ] 3509 + 3510 + [[package]] 3511 + name = "security-framework-sys" 3512 + version = "2.17.0" 3513 + source = "registry+https://github.com/rust-lang/crates.io-index" 3514 + checksum = "6ce2691df843ecc5d231c0b14ece2acc3efb62c0a398c7e1d875f3983ce020e3" 3515 + dependencies = [ 3516 + "core-foundation-sys", 3517 + "libc", 3518 + ] 3519 + 3520 + [[package]] 3521 + name = "semver" 3522 + version = "1.0.27" 3523 + source = "registry+https://github.com/rust-lang/crates.io-index" 3524 + checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" 3525 + 3526 + [[package]] 3527 + name = "send_wrapper" 3528 + version = "0.6.0" 3529 + source = "registry+https://github.com/rust-lang/crates.io-index" 3530 + checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" 3531 + 3532 + [[package]] 3533 + name = "serde" 3534 + version = "1.0.228" 3535 + source = "registry+https://github.com/rust-lang/crates.io-index" 3536 + checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" 3537 + dependencies = [ 3538 + "serde_core", 3539 + "serde_derive", 3540 + ] 3541 + 3542 + [[package]] 3543 + name = "serde_bytes" 3544 + version = "0.11.19" 3545 + source = "registry+https://github.com/rust-lang/crates.io-index" 3546 + checksum = "a5d440709e79d88e51ac01c4b72fc6cb7314017bb7da9eeff678aa94c10e3ea8" 3547 + dependencies = [ 3548 + "serde", 3549 + "serde_core", 3550 + ] 3551 + 3552 + [[package]] 3553 + name = "serde_core" 3554 + version = "1.0.228" 3555 + source = "registry+https://github.com/rust-lang/crates.io-index" 3556 + checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" 3557 + dependencies = [ 3558 + "serde_derive", 3559 + ] 3560 + 3561 + [[package]] 3562 + name = "serde_derive" 3563 + version = "1.0.228" 3564 + source = "registry+https://github.com/rust-lang/crates.io-index" 3565 + checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" 3566 + dependencies = [ 3567 + "proc-macro2", 3568 + "quote", 3569 + "syn 2.0.117", 3570 + ] 3571 + 3572 + [[package]] 3573 + name = "serde_html_form" 3574 + version = "0.2.8" 3575 + source = "registry+https://github.com/rust-lang/crates.io-index" 3576 + checksum = "b2f2d7ff8a2140333718bb329f5c40fc5f0865b84c426183ce14c97d2ab8154f" 3577 + dependencies = [ 3578 + "form_urlencoded", 3579 + "indexmap 2.13.0", 3580 + "itoa", 3581 + "ryu", 3582 + "serde_core", 3583 + ] 3584 + 3585 + [[package]] 3586 + name = "serde_ipld_dagcbor" 3587 + version = "0.6.4" 3588 + source = "registry+https://github.com/rust-lang/crates.io-index" 3589 + checksum = "46182f4f08349a02b45c998ba3215d3f9de826246ba02bb9dddfe9a2a2100778" 3590 + dependencies = [ 3591 + "cbor4ii", 3592 + "ipld-core", 3593 + "scopeguard", 3594 + "serde", 3595 + ] 3596 + 3597 + [[package]] 3598 + name = "serde_json" 3599 + version = "1.0.149" 3600 + source = "registry+https://github.com/rust-lang/crates.io-index" 3601 + checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" 3602 + dependencies = [ 3603 + "itoa", 3604 + "memchr", 3605 + "serde", 3606 + "serde_core", 3607 + "zmij", 3608 + ] 3609 + 3610 + [[package]] 3611 + name = "serde_repr" 3612 + version = "0.1.20" 3613 + source = "registry+https://github.com/rust-lang/crates.io-index" 3614 + checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" 3615 + dependencies = [ 3616 + "proc-macro2", 3617 + "quote", 3618 + "syn 2.0.117", 3619 + ] 3620 + 3621 + [[package]] 3622 + name = "serde_urlencoded" 3623 + version = "0.7.1" 3624 + source = "registry+https://github.com/rust-lang/crates.io-index" 3625 + checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 3626 + dependencies = [ 3627 + "form_urlencoded", 3628 + "itoa", 3629 + "ryu", 3630 + "serde", 3631 + ] 3632 + 3633 + [[package]] 3634 + name = "serde_with" 3635 + version = "3.17.0" 3636 + source = "registry+https://github.com/rust-lang/crates.io-index" 3637 + checksum = "381b283ce7bc6b476d903296fb59d0d36633652b633b27f64db4fb46dcbfc3b9" 3638 + dependencies = [ 3639 + "base64 0.22.1", 3640 + "chrono", 3641 + "hex", 3642 + "indexmap 1.9.3", 3643 + "indexmap 2.13.0", 3644 + "schemars 0.9.0", 3645 + "schemars 1.2.1", 3646 + "serde_core", 3647 + "serde_json", 3648 + "serde_with_macros", 3649 + "time", 3650 + ] 3651 + 3652 + [[package]] 3653 + name = "serde_with_macros" 3654 + version = "3.17.0" 3655 + source = "registry+https://github.com/rust-lang/crates.io-index" 3656 + checksum = "a6d4e30573c8cb306ed6ab1dca8423eec9a463ea0e155f45399455e0368b27e0" 3657 + dependencies = [ 3658 + "darling 0.21.3", 3659 + "proc-macro2", 3660 + "quote", 3661 + "syn 2.0.117", 3662 + ] 3663 + 3664 + [[package]] 3665 + name = "sha1_smol" 3666 + version = "1.0.1" 3667 + source = "registry+https://github.com/rust-lang/crates.io-index" 3668 + checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" 3669 + 3670 + [[package]] 3671 + name = "sha2" 3672 + version = "0.10.9" 3673 + source = "registry+https://github.com/rust-lang/crates.io-index" 3674 + checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" 3675 + dependencies = [ 3676 + "cfg-if", 3677 + "cpufeatures", 3678 + "digest", 3679 + ] 3680 + 3681 + [[package]] 3682 + name = "sharded-slab" 3683 + version = "0.1.7" 3684 + source = "registry+https://github.com/rust-lang/crates.io-index" 3685 + checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" 3686 + dependencies = [ 3687 + "lazy_static", 3688 + ] 3689 + 3690 + [[package]] 3691 + name = "shlex" 3692 + version = "1.3.0" 3693 + source = "registry+https://github.com/rust-lang/crates.io-index" 3694 + checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 3695 + 3696 + [[package]] 3697 + name = "signal-hook-registry" 3698 + version = "1.4.8" 3699 + source = "registry+https://github.com/rust-lang/crates.io-index" 3700 + checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" 3701 + dependencies = [ 3702 + "errno", 3703 + "libc", 3704 + ] 3705 + 3706 + [[package]] 3707 + name = "signature" 3708 + version = "2.2.0" 3709 + source = "registry+https://github.com/rust-lang/crates.io-index" 3710 + checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" 3711 + dependencies = [ 3712 + "digest", 3713 + "rand_core 0.6.4", 3714 + ] 3715 + 3716 + [[package]] 3717 + name = "simd-adler32" 3718 + version = "0.3.8" 3719 + source = "registry+https://github.com/rust-lang/crates.io-index" 3720 + checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" 3721 + 3722 + [[package]] 3723 + name = "siphasher" 3724 + version = "1.0.2" 3725 + source = "registry+https://github.com/rust-lang/crates.io-index" 3726 + checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" 3727 + 3728 + [[package]] 3729 + name = "slab" 3730 + version = "0.4.12" 3731 + source = "registry+https://github.com/rust-lang/crates.io-index" 3732 + checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" 3733 + 3734 + [[package]] 3735 + name = "smallvec" 3736 + version = "1.15.1" 3737 + source = "registry+https://github.com/rust-lang/crates.io-index" 3738 + checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" 3739 + 3740 + [[package]] 3741 + name = "smol_str" 3742 + version = "0.3.6" 3743 + source = "registry+https://github.com/rust-lang/crates.io-index" 3744 + checksum = "4aaa7368fcf4852a4c2dd92df0cace6a71f2091ca0a23391ce7f3a31833f1523" 3745 + dependencies = [ 3746 + "borsh", 3747 + "serde_core", 3748 + ] 3749 + 3750 + [[package]] 3751 + name = "socket2" 3752 + version = "0.5.10" 3753 + source = "registry+https://github.com/rust-lang/crates.io-index" 3754 + checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" 3755 + dependencies = [ 3756 + "libc", 3757 + "windows-sys 0.52.0", 3758 + ] 3759 + 3760 + [[package]] 3761 + name = "socket2" 3762 + version = "0.6.3" 3763 + source = "registry+https://github.com/rust-lang/crates.io-index" 3764 + checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e" 3765 + dependencies = [ 3766 + "libc", 3767 + "windows-sys 0.61.2", 3768 + ] 3769 + 3770 + [[package]] 3771 + name = "spin" 3772 + version = "0.9.8" 3773 + source = "registry+https://github.com/rust-lang/crates.io-index" 3774 + checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 3775 + dependencies = [ 3776 + "lock_api", 3777 + ] 3778 + 3779 + [[package]] 3780 + name = "spin" 3781 + version = "0.10.0" 3782 + source = "registry+https://github.com/rust-lang/crates.io-index" 3783 + checksum = "d5fe4ccb98d9c292d56fec89a5e07da7fc4cf0dc11e156b41793132775d3e591" 3784 + 3785 + [[package]] 3786 + name = "spki" 3787 + version = "0.7.3" 3788 + source = "registry+https://github.com/rust-lang/crates.io-index" 3789 + checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" 3790 + dependencies = [ 3791 + "base64ct", 3792 + "der", 3793 + ] 3794 + 3795 + [[package]] 3796 + name = "stable_deref_trait" 3797 + version = "1.2.1" 3798 + source = "registry+https://github.com/rust-lang/crates.io-index" 3799 + checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" 3800 + 3801 + [[package]] 3802 + name = "static-regular-grammar" 3803 + version = "2.0.2" 3804 + source = "registry+https://github.com/rust-lang/crates.io-index" 3805 + checksum = "4f4a6c40247579acfbb138c3cd7de3dab113ab4ac6227f1b7de7d626ee667957" 3806 + dependencies = [ 3807 + "abnf", 3808 + "btree-range-map", 3809 + "ciborium", 3810 + "hex_fmt", 3811 + "indoc", 3812 + "proc-macro-error", 3813 + "proc-macro2", 3814 + "quote", 3815 + "serde", 3816 + "sha2", 3817 + "syn 2.0.117", 3818 + "thiserror 1.0.69", 3819 + ] 3820 + 3821 + [[package]] 3822 + name = "static_assertions" 3823 + version = "1.1.0" 3824 + source = "registry+https://github.com/rust-lang/crates.io-index" 3825 + checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 3826 + 3827 + [[package]] 3828 + name = "string_cache" 3829 + version = "0.8.9" 3830 + source = "registry+https://github.com/rust-lang/crates.io-index" 3831 + checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" 3832 + dependencies = [ 3833 + "new_debug_unreachable", 3834 + "parking_lot", 3835 + "phf_shared", 3836 + "precomputed-hash", 3837 + "serde", 3838 + ] 3839 + 3840 + [[package]] 3841 + name = "string_cache_codegen" 3842 + version = "0.5.4" 3843 + source = "registry+https://github.com/rust-lang/crates.io-index" 3844 + checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" 3845 + dependencies = [ 3846 + "phf_generator", 3847 + "phf_shared", 3848 + "proc-macro2", 3849 + "quote", 3850 + ] 3851 + 3852 + [[package]] 3853 + name = "strsim" 3854 + version = "0.11.1" 3855 + source = "registry+https://github.com/rust-lang/crates.io-index" 3856 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 3857 + 3858 + [[package]] 3859 + name = "subtle" 3860 + version = "2.6.1" 3861 + source = "registry+https://github.com/rust-lang/crates.io-index" 3862 + checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 3863 + 3864 + [[package]] 3865 + name = "supports-color" 3866 + version = "3.0.2" 3867 + source = "registry+https://github.com/rust-lang/crates.io-index" 3868 + checksum = "c64fc7232dd8d2e4ac5ce4ef302b1d81e0b80d055b9d77c7c4f51f6aa4c867d6" 3869 + dependencies = [ 3870 + "is_ci", 3871 + ] 3872 + 3873 + [[package]] 3874 + name = "supports-hyperlinks" 3875 + version = "3.2.0" 3876 + source = "registry+https://github.com/rust-lang/crates.io-index" 3877 + checksum = "e396b6523b11ccb83120b115a0b7366de372751aa6edf19844dfb13a6af97e91" 3878 + 3879 + [[package]] 3880 + name = "supports-unicode" 3881 + version = "3.0.0" 3882 + source = "registry+https://github.com/rust-lang/crates.io-index" 3883 + checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" 3884 + 3885 + [[package]] 3886 + name = "syn" 3887 + version = "1.0.109" 3888 + source = "registry+https://github.com/rust-lang/crates.io-index" 3889 + checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" 3890 + dependencies = [ 3891 + "proc-macro2", 3892 + "unicode-ident", 3893 + ] 3894 + 3895 + [[package]] 3896 + name = "syn" 3897 + version = "2.0.117" 3898 + source = "registry+https://github.com/rust-lang/crates.io-index" 3899 + checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99" 3900 + dependencies = [ 3901 + "proc-macro2", 3902 + "quote", 3903 + "unicode-ident", 3904 + ] 3905 + 3906 + [[package]] 3907 + name = "sync_wrapper" 3908 + version = "1.0.2" 3909 + source = "registry+https://github.com/rust-lang/crates.io-index" 3910 + checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 3911 + dependencies = [ 3912 + "futures-core", 3913 + ] 3914 + 3915 + [[package]] 3916 + name = "synstructure" 3917 + version = "0.13.2" 3918 + source = "registry+https://github.com/rust-lang/crates.io-index" 3919 + checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" 3920 + dependencies = [ 3921 + "proc-macro2", 3922 + "quote", 3923 + "syn 2.0.117", 3924 + ] 3925 + 3926 + [[package]] 3927 + name = "system-configuration" 3928 + version = "0.7.0" 3929 + source = "registry+https://github.com/rust-lang/crates.io-index" 3930 + checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" 3931 + dependencies = [ 3932 + "bitflags", 3933 + "core-foundation 0.9.4", 3934 + "system-configuration-sys", 3935 + ] 3936 + 3937 + [[package]] 3938 + name = "system-configuration-sys" 3939 + version = "0.6.0" 3940 + source = "registry+https://github.com/rust-lang/crates.io-index" 3941 + checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" 3942 + dependencies = [ 3943 + "core-foundation-sys", 3944 + "libc", 3945 + ] 3946 + 3947 + [[package]] 3948 + name = "tagptr" 3949 + version = "0.2.0" 3950 + source = "registry+https://github.com/rust-lang/crates.io-index" 3951 + checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" 3952 + 3953 + [[package]] 3954 + name = "tempfile" 3955 + version = "3.26.0" 3956 + source = "registry+https://github.com/rust-lang/crates.io-index" 3957 + checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0" 3958 + dependencies = [ 3959 + "fastrand", 3960 + "getrandom 0.4.2", 3961 + "once_cell", 3962 + "rustix", 3963 + "windows-sys 0.61.2", 3964 + ] 3965 + 3966 + [[package]] 3967 + name = "tendril" 3968 + version = "0.4.3" 3969 + source = "registry+https://github.com/rust-lang/crates.io-index" 3970 + checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" 3971 + dependencies = [ 3972 + "futf", 3973 + "mac", 3974 + "utf-8", 3975 + ] 3976 + 3977 + [[package]] 3978 + name = "terminal_size" 3979 + version = "0.4.3" 3980 + source = "registry+https://github.com/rust-lang/crates.io-index" 3981 + checksum = "60b8cb979cb11c32ce1603f8137b22262a9d131aaa5c37b5678025f22b8becd0" 3982 + dependencies = [ 3983 + "rustix", 3984 + "windows-sys 0.60.2", 3985 + ] 3986 + 3987 + [[package]] 3988 + name = "textwrap" 3989 + version = "0.16.2" 3990 + source = "registry+https://github.com/rust-lang/crates.io-index" 3991 + checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" 3992 + dependencies = [ 3993 + "unicode-linebreak", 3994 + "unicode-width 0.2.2", 3995 + ] 3996 + 3997 + [[package]] 3998 + name = "thiserror" 3999 + version = "1.0.69" 4000 + source = "registry+https://github.com/rust-lang/crates.io-index" 4001 + checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 4002 + dependencies = [ 4003 + "thiserror-impl 1.0.69", 4004 + ] 4005 + 4006 + [[package]] 4007 + name = "thiserror" 4008 + version = "2.0.18" 4009 + source = "registry+https://github.com/rust-lang/crates.io-index" 4010 + checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" 4011 + dependencies = [ 4012 + "thiserror-impl 2.0.18", 4013 + ] 4014 + 4015 + [[package]] 4016 + name = "thiserror-impl" 4017 + version = "1.0.69" 4018 + source = "registry+https://github.com/rust-lang/crates.io-index" 4019 + checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 4020 + dependencies = [ 4021 + "proc-macro2", 4022 + "quote", 4023 + "syn 2.0.117", 4024 + ] 4025 + 4026 + [[package]] 4027 + name = "thiserror-impl" 4028 + version = "2.0.18" 4029 + source = "registry+https://github.com/rust-lang/crates.io-index" 4030 + checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" 4031 + dependencies = [ 4032 + "proc-macro2", 4033 + "quote", 4034 + "syn 2.0.117", 4035 + ] 4036 + 4037 + [[package]] 4038 + name = "thread_local" 4039 + version = "1.1.9" 4040 + source = "registry+https://github.com/rust-lang/crates.io-index" 4041 + checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" 4042 + dependencies = [ 4043 + "cfg-if", 4044 + ] 4045 + 4046 + [[package]] 4047 + name = "threadpool" 4048 + version = "1.8.1" 4049 + source = "registry+https://github.com/rust-lang/crates.io-index" 4050 + checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" 4051 + dependencies = [ 4052 + "num_cpus", 4053 + ] 4054 + 4055 + [[package]] 4056 + name = "time" 4057 + version = "0.3.47" 4058 + source = "registry+https://github.com/rust-lang/crates.io-index" 4059 + checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" 4060 + dependencies = [ 4061 + "deranged", 4062 + "itoa", 4063 + "libc", 4064 + "num-conv", 4065 + "num_threads", 4066 + "powerfmt", 4067 + "serde_core", 4068 + "time-core", 4069 + "time-macros", 4070 + ] 4071 + 4072 + [[package]] 4073 + name = "time-core" 4074 + version = "0.1.8" 4075 + source = "registry+https://github.com/rust-lang/crates.io-index" 4076 + checksum = "7694e1cfe791f8d31026952abf09c69ca6f6fa4e1a1229e18988f06a04a12dca" 4077 + 4078 + [[package]] 4079 + name = "time-macros" 4080 + version = "0.2.27" 4081 + source = "registry+https://github.com/rust-lang/crates.io-index" 4082 + checksum = "2e70e4c5a0e0a8a4823ad65dfe1a6930e4f4d756dcd9dd7939022b5e8c501215" 4083 + dependencies = [ 4084 + "num-conv", 4085 + "time-core", 4086 + ] 4087 + 4088 + [[package]] 4089 + name = "tiny_http" 4090 + version = "0.12.0" 4091 + source = "registry+https://github.com/rust-lang/crates.io-index" 4092 + checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82" 4093 + dependencies = [ 4094 + "ascii", 4095 + "chunked_transfer", 4096 + "httpdate", 4097 + "log", 4098 + ] 4099 + 4100 + [[package]] 4101 + name = "tinystr" 4102 + version = "0.8.2" 4103 + source = "registry+https://github.com/rust-lang/crates.io-index" 4104 + checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" 4105 + dependencies = [ 4106 + "displaydoc", 4107 + "zerovec", 4108 + ] 4109 + 4110 + [[package]] 4111 + name = "tinyvec" 4112 + version = "1.10.0" 4113 + source = "registry+https://github.com/rust-lang/crates.io-index" 4114 + checksum = "bfa5fdc3bce6191a1dbc8c02d5c8bffcf557bafa17c124c5264a458f1b0613fa" 4115 + dependencies = [ 4116 + "tinyvec_macros", 4117 + ] 4118 + 4119 + [[package]] 4120 + name = "tinyvec_macros" 4121 + version = "0.1.1" 4122 + source = "registry+https://github.com/rust-lang/crates.io-index" 4123 + checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 4124 + 4125 + [[package]] 4126 + name = "tokio" 4127 + version = "1.50.0" 4128 + source = "registry+https://github.com/rust-lang/crates.io-index" 4129 + checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d" 4130 + dependencies = [ 4131 + "bytes", 4132 + "libc", 4133 + "mio", 4134 + "parking_lot", 4135 + "pin-project-lite", 4136 + "signal-hook-registry", 4137 + "socket2 0.6.3", 4138 + "tokio-macros", 4139 + "windows-sys 0.61.2", 4140 + ] 4141 + 4142 + [[package]] 4143 + name = "tokio-macros" 4144 + version = "2.6.1" 4145 + source = "registry+https://github.com/rust-lang/crates.io-index" 4146 + checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c" 4147 + dependencies = [ 4148 + "proc-macro2", 4149 + "quote", 4150 + "syn 2.0.117", 4151 + ] 4152 + 4153 + [[package]] 4154 + name = "tokio-native-tls" 4155 + version = "0.3.1" 4156 + source = "registry+https://github.com/rust-lang/crates.io-index" 4157 + checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" 4158 + dependencies = [ 4159 + "native-tls", 4160 + "tokio", 4161 + ] 4162 + 4163 + [[package]] 4164 + name = "tokio-rustls" 4165 + version = "0.26.4" 4166 + source = "registry+https://github.com/rust-lang/crates.io-index" 4167 + checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" 4168 + dependencies = [ 4169 + "rustls", 4170 + "tokio", 4171 + ] 4172 + 4173 + [[package]] 4174 + name = "tokio-util" 4175 + version = "0.7.18" 4176 + source = "registry+https://github.com/rust-lang/crates.io-index" 4177 + checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" 4178 + dependencies = [ 4179 + "bytes", 4180 + "futures-core", 4181 + "futures-sink", 4182 + "futures-util", 4183 + "pin-project-lite", 4184 + "tokio", 4185 + ] 4186 + 4187 + [[package]] 4188 + name = "tower" 4189 + version = "0.5.3" 4190 + source = "registry+https://github.com/rust-lang/crates.io-index" 4191 + checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" 4192 + dependencies = [ 4193 + "futures-core", 4194 + "futures-util", 4195 + "pin-project-lite", 4196 + "sync_wrapper", 4197 + "tokio", 4198 + "tower-layer", 4199 + "tower-service", 4200 + ] 4201 + 4202 + [[package]] 4203 + name = "tower-http" 4204 + version = "0.6.8" 4205 + source = "registry+https://github.com/rust-lang/crates.io-index" 4206 + checksum = "d4e6559d53cc268e5031cd8429d05415bc4cb4aefc4aa5d6cc35fbf5b924a1f8" 4207 + dependencies = [ 4208 + "async-compression", 4209 + "bitflags", 4210 + "bytes", 4211 + "futures-core", 4212 + "futures-util", 4213 + "http", 4214 + "http-body", 4215 + "http-body-util", 4216 + "iri-string", 4217 + "pin-project-lite", 4218 + "tokio", 4219 + "tokio-util", 4220 + "tower", 4221 + "tower-layer", 4222 + "tower-service", 4223 + ] 4224 + 4225 + [[package]] 4226 + name = "tower-layer" 4227 + version = "0.3.3" 4228 + source = "registry+https://github.com/rust-lang/crates.io-index" 4229 + checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 4230 + 4231 + [[package]] 4232 + name = "tower-service" 4233 + version = "0.3.3" 4234 + source = "registry+https://github.com/rust-lang/crates.io-index" 4235 + checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 4236 + 4237 + [[package]] 4238 + name = "tracing" 4239 + version = "0.1.44" 4240 + source = "registry+https://github.com/rust-lang/crates.io-index" 4241 + checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" 4242 + dependencies = [ 4243 + "pin-project-lite", 4244 + "tracing-attributes", 4245 + "tracing-core", 4246 + ] 4247 + 4248 + [[package]] 4249 + name = "tracing-attributes" 4250 + version = "0.1.31" 4251 + source = "registry+https://github.com/rust-lang/crates.io-index" 4252 + checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" 4253 + dependencies = [ 4254 + "proc-macro2", 4255 + "quote", 4256 + "syn 2.0.117", 4257 + ] 4258 + 4259 + [[package]] 4260 + name = "tracing-core" 4261 + version = "0.1.36" 4262 + source = "registry+https://github.com/rust-lang/crates.io-index" 4263 + checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" 4264 + dependencies = [ 4265 + "once_cell", 4266 + "valuable", 4267 + ] 4268 + 4269 + [[package]] 4270 + name = "tracing-log" 4271 + version = "0.2.0" 4272 + source = "registry+https://github.com/rust-lang/crates.io-index" 4273 + checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" 4274 + dependencies = [ 4275 + "log", 4276 + "once_cell", 4277 + "tracing-core", 4278 + ] 4279 + 4280 + [[package]] 4281 + name = "tracing-subscriber" 4282 + version = "0.3.22" 4283 + source = "registry+https://github.com/rust-lang/crates.io-index" 4284 + checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" 4285 + dependencies = [ 4286 + "matchers", 4287 + "nu-ansi-term", 4288 + "once_cell", 4289 + "regex-automata", 4290 + "sharded-slab", 4291 + "smallvec", 4292 + "thread_local", 4293 + "tracing", 4294 + "tracing-core", 4295 + "tracing-log", 4296 + ] 4297 + 4298 + [[package]] 4299 + name = "trait-variant" 4300 + version = "0.1.2" 4301 + source = "registry+https://github.com/rust-lang/crates.io-index" 4302 + checksum = "70977707304198400eb4835a78f6a9f928bf41bba420deb8fdb175cd965d77a7" 4303 + dependencies = [ 4304 + "proc-macro2", 4305 + "quote", 4306 + "syn 2.0.117", 4307 + ] 4308 + 4309 + [[package]] 4310 + name = "triomphe" 4311 + version = "0.1.15" 4312 + source = "registry+https://github.com/rust-lang/crates.io-index" 4313 + checksum = "dd69c5aa8f924c7519d6372789a74eac5b94fb0f8fcf0d4a97eb0bfc3e785f39" 4314 + 4315 + [[package]] 4316 + name = "try-lock" 4317 + version = "0.2.5" 4318 + source = "registry+https://github.com/rust-lang/crates.io-index" 4319 + checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 4320 + 4321 + [[package]] 4322 + name = "twoway" 4323 + version = "0.1.8" 4324 + source = "registry+https://github.com/rust-lang/crates.io-index" 4325 + checksum = "59b11b2b5241ba34be09c3cc85a36e56e48f9888862e19cedf23336d35316ed1" 4326 + dependencies = [ 4327 + "memchr", 4328 + ] 4329 + 4330 + [[package]] 4331 + name = "typenum" 4332 + version = "1.19.0" 4333 + source = "registry+https://github.com/rust-lang/crates.io-index" 4334 + checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" 4335 + 4336 + [[package]] 4337 + name = "unicase" 4338 + version = "2.9.0" 4339 + source = "registry+https://github.com/rust-lang/crates.io-index" 4340 + checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142" 4341 + 4342 + [[package]] 4343 + name = "unicode-ident" 4344 + version = "1.0.24" 4345 + source = "registry+https://github.com/rust-lang/crates.io-index" 4346 + checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" 4347 + 4348 + [[package]] 4349 + name = "unicode-linebreak" 4350 + version = "0.1.5" 4351 + source = "registry+https://github.com/rust-lang/crates.io-index" 4352 + checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" 4353 + 4354 + [[package]] 4355 + name = "unicode-segmentation" 4356 + version = "1.12.0" 4357 + source = "registry+https://github.com/rust-lang/crates.io-index" 4358 + checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" 4359 + 4360 + [[package]] 4361 + name = "unicode-width" 4362 + version = "0.1.14" 4363 + source = "registry+https://github.com/rust-lang/crates.io-index" 4364 + checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 4365 + 4366 + [[package]] 4367 + name = "unicode-width" 4368 + version = "0.2.2" 4369 + source = "registry+https://github.com/rust-lang/crates.io-index" 4370 + checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254" 4371 + 4372 + [[package]] 4373 + name = "unicode-xid" 4374 + version = "0.2.6" 4375 + source = "registry+https://github.com/rust-lang/crates.io-index" 4376 + checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" 4377 + 4378 + [[package]] 4379 + name = "unsigned-varint" 4380 + version = "0.8.0" 4381 + source = "registry+https://github.com/rust-lang/crates.io-index" 4382 + checksum = "eb066959b24b5196ae73cb057f45598450d2c5f71460e98c49b738086eff9c06" 4383 + 4384 + [[package]] 4385 + name = "untrusted" 4386 + version = "0.9.0" 4387 + source = "registry+https://github.com/rust-lang/crates.io-index" 4388 + checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 4389 + 4390 + [[package]] 4391 + name = "url" 4392 + version = "2.5.8" 4393 + source = "registry+https://github.com/rust-lang/crates.io-index" 4394 + checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" 4395 + dependencies = [ 4396 + "form_urlencoded", 4397 + "idna", 4398 + "percent-encoding", 4399 + "serde", 4400 + "serde_derive", 4401 + ] 4402 + 4403 + [[package]] 4404 + name = "urlencoding" 4405 + version = "2.1.3" 4406 + source = "registry+https://github.com/rust-lang/crates.io-index" 4407 + checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" 4408 + 4409 + [[package]] 4410 + name = "utf-8" 4411 + version = "0.7.6" 4412 + source = "registry+https://github.com/rust-lang/crates.io-index" 4413 + checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 4414 + 4415 + [[package]] 4416 + name = "utf8_iter" 4417 + version = "1.0.4" 4418 + source = "registry+https://github.com/rust-lang/crates.io-index" 4419 + checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 4420 + 4421 + [[package]] 4422 + name = "utf8parse" 4423 + version = "0.2.2" 4424 + source = "registry+https://github.com/rust-lang/crates.io-index" 4425 + checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 4426 + 4427 + [[package]] 4428 + name = "valuable" 4429 + version = "0.1.1" 4430 + source = "registry+https://github.com/rust-lang/crates.io-index" 4431 + checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" 4432 + 4433 + [[package]] 4434 + name = "vcpkg" 4435 + version = "0.2.15" 4436 + source = "registry+https://github.com/rust-lang/crates.io-index" 4437 + checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" 4438 + 4439 + [[package]] 4440 + name = "version_check" 4441 + version = "0.9.5" 4442 + source = "registry+https://github.com/rust-lang/crates.io-index" 4443 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 4444 + 4445 + [[package]] 4446 + name = "walkdir" 4447 + version = "2.5.0" 4448 + source = "registry+https://github.com/rust-lang/crates.io-index" 4449 + checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 4450 + dependencies = [ 4451 + "same-file", 4452 + "winapi-util", 4453 + ] 4454 + 4455 + [[package]] 4456 + name = "want" 4457 + version = "0.3.1" 4458 + source = "registry+https://github.com/rust-lang/crates.io-index" 4459 + checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 4460 + dependencies = [ 4461 + "try-lock", 4462 + ] 4463 + 4464 + [[package]] 4465 + name = "wasi" 4466 + version = "0.11.1+wasi-snapshot-preview1" 4467 + source = "registry+https://github.com/rust-lang/crates.io-index" 4468 + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" 4469 + 4470 + [[package]] 4471 + name = "wasip2" 4472 + version = "1.0.2+wasi-0.2.9" 4473 + source = "registry+https://github.com/rust-lang/crates.io-index" 4474 + checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" 4475 + dependencies = [ 4476 + "wit-bindgen", 4477 + ] 4478 + 4479 + [[package]] 4480 + name = "wasip3" 4481 + version = "0.4.0+wasi-0.3.0-rc-2026-01-06" 4482 + source = "registry+https://github.com/rust-lang/crates.io-index" 4483 + checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" 4484 + dependencies = [ 4485 + "wit-bindgen", 4486 + ] 4487 + 4488 + [[package]] 4489 + name = "wasm-bindgen" 4490 + version = "0.2.114" 4491 + source = "registry+https://github.com/rust-lang/crates.io-index" 4492 + checksum = "6532f9a5c1ece3798cb1c2cfdba640b9b3ba884f5db45973a6f442510a87d38e" 4493 + dependencies = [ 4494 + "cfg-if", 4495 + "once_cell", 4496 + "rustversion", 4497 + "wasm-bindgen-macro", 4498 + "wasm-bindgen-shared", 4499 + ] 4500 + 4501 + [[package]] 4502 + name = "wasm-bindgen-futures" 4503 + version = "0.4.64" 4504 + source = "registry+https://github.com/rust-lang/crates.io-index" 4505 + checksum = "e9c5522b3a28661442748e09d40924dfb9ca614b21c00d3fd135720e48b67db8" 4506 + dependencies = [ 4507 + "cfg-if", 4508 + "futures-util", 4509 + "js-sys", 4510 + "once_cell", 4511 + "wasm-bindgen", 4512 + "web-sys", 4513 + ] 4514 + 4515 + [[package]] 4516 + name = "wasm-bindgen-macro" 4517 + version = "0.2.114" 4518 + source = "registry+https://github.com/rust-lang/crates.io-index" 4519 + checksum = "18a2d50fcf105fb33bb15f00e7a77b772945a2ee45dcf454961fd843e74c18e6" 4520 + dependencies = [ 4521 + "quote", 4522 + "wasm-bindgen-macro-support", 4523 + ] 4524 + 4525 + [[package]] 4526 + name = "wasm-bindgen-macro-support" 4527 + version = "0.2.114" 4528 + source = "registry+https://github.com/rust-lang/crates.io-index" 4529 + checksum = "03ce4caeaac547cdf713d280eda22a730824dd11e6b8c3ca9e42247b25c631e3" 4530 + dependencies = [ 4531 + "bumpalo", 4532 + "proc-macro2", 4533 + "quote", 4534 + "syn 2.0.117", 4535 + "wasm-bindgen-shared", 4536 + ] 4537 + 4538 + [[package]] 4539 + name = "wasm-bindgen-shared" 4540 + version = "0.2.114" 4541 + source = "registry+https://github.com/rust-lang/crates.io-index" 4542 + checksum = "75a326b8c223ee17883a4251907455a2431acc2791c98c26279376490c378c16" 4543 + dependencies = [ 4544 + "unicode-ident", 4545 + ] 4546 + 4547 + [[package]] 4548 + name = "wasm-encoder" 4549 + version = "0.244.0" 4550 + source = "registry+https://github.com/rust-lang/crates.io-index" 4551 + checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319" 4552 + dependencies = [ 4553 + "leb128fmt", 4554 + "wasmparser", 4555 + ] 4556 + 4557 + [[package]] 4558 + name = "wasm-metadata" 4559 + version = "0.244.0" 4560 + source = "registry+https://github.com/rust-lang/crates.io-index" 4561 + checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909" 4562 + dependencies = [ 4563 + "anyhow", 4564 + "indexmap 2.13.0", 4565 + "wasm-encoder", 4566 + "wasmparser", 4567 + ] 4568 + 4569 + [[package]] 4570 + name = "wasmparser" 4571 + version = "0.244.0" 4572 + source = "registry+https://github.com/rust-lang/crates.io-index" 4573 + checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe" 4574 + dependencies = [ 4575 + "bitflags", 4576 + "hashbrown 0.15.5", 4577 + "indexmap 2.13.0", 4578 + "semver", 4579 + ] 4580 + 4581 + [[package]] 4582 + name = "web-sys" 4583 + version = "0.3.91" 4584 + source = "registry+https://github.com/rust-lang/crates.io-index" 4585 + checksum = "854ba17bb104abfb26ba36da9729addc7ce7f06f5c0f90f3c391f8461cca21f9" 4586 + dependencies = [ 4587 + "js-sys", 4588 + "wasm-bindgen", 4589 + ] 4590 + 4591 + [[package]] 4592 + name = "web-time" 4593 + version = "1.1.0" 4594 + source = "registry+https://github.com/rust-lang/crates.io-index" 4595 + checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 4596 + dependencies = [ 4597 + "js-sys", 4598 + "wasm-bindgen", 4599 + ] 4600 + 4601 + [[package]] 4602 + name = "webbrowser" 4603 + version = "1.1.0" 4604 + source = "registry+https://github.com/rust-lang/crates.io-index" 4605 + checksum = "3f00bb839c1cf1e3036066614cbdcd035ecf215206691ea646aa3c60a24f68f2" 4606 + dependencies = [ 4607 + "core-foundation 0.10.1", 4608 + "jni", 4609 + "log", 4610 + "ndk-context", 4611 + "objc2", 4612 + "objc2-foundation", 4613 + "url", 4614 + "web-sys", 4615 + ] 4616 + 4617 + [[package]] 4618 + name = "webpage" 4619 + version = "2.0.1" 4620 + source = "registry+https://github.com/rust-lang/crates.io-index" 4621 + checksum = "70862efc041d46e6bbaa82bb9c34ae0596d090e86cbd14bd9e93b36ee6802eac" 4622 + dependencies = [ 4623 + "html5ever", 4624 + "markup5ever_rcdom", 4625 + "serde_json", 4626 + "url", 4627 + ] 4628 + 4629 + [[package]] 4630 + name = "webpki-roots" 4631 + version = "1.0.6" 4632 + source = "registry+https://github.com/rust-lang/crates.io-index" 4633 + checksum = "22cfaf3c063993ff62e73cb4311efde4db1efb31ab78a3e5c457939ad5cc0bed" 4634 + dependencies = [ 4635 + "rustls-pki-types", 4636 + ] 4637 + 4638 + [[package]] 4639 + name = "widestring" 4640 + version = "1.2.1" 4641 + source = "registry+https://github.com/rust-lang/crates.io-index" 4642 + checksum = "72069c3113ab32ab29e5584db3c6ec55d416895e60715417b5b883a357c3e471" 4643 + 4644 + [[package]] 4645 + name = "winapi-util" 4646 + version = "0.1.11" 4647 + source = "registry+https://github.com/rust-lang/crates.io-index" 4648 + checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" 4649 + dependencies = [ 4650 + "windows-sys 0.61.2", 4651 + ] 4652 + 4653 + [[package]] 4654 + name = "windows-core" 4655 + version = "0.62.2" 4656 + source = "registry+https://github.com/rust-lang/crates.io-index" 4657 + checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" 4658 + dependencies = [ 4659 + "windows-implement", 4660 + "windows-interface", 4661 + "windows-link", 4662 + "windows-result", 4663 + "windows-strings", 4664 + ] 4665 + 4666 + [[package]] 4667 + name = "windows-implement" 4668 + version = "0.60.2" 4669 + source = "registry+https://github.com/rust-lang/crates.io-index" 4670 + checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" 4671 + dependencies = [ 4672 + "proc-macro2", 4673 + "quote", 4674 + "syn 2.0.117", 4675 + ] 4676 + 4677 + [[package]] 4678 + name = "windows-interface" 4679 + version = "0.59.3" 4680 + source = "registry+https://github.com/rust-lang/crates.io-index" 4681 + checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" 4682 + dependencies = [ 4683 + "proc-macro2", 4684 + "quote", 4685 + "syn 2.0.117", 4686 + ] 4687 + 4688 + [[package]] 4689 + name = "windows-link" 4690 + version = "0.2.1" 4691 + source = "registry+https://github.com/rust-lang/crates.io-index" 4692 + checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" 4693 + 4694 + [[package]] 4695 + name = "windows-registry" 4696 + version = "0.6.1" 4697 + source = "registry+https://github.com/rust-lang/crates.io-index" 4698 + checksum = "02752bf7fbdcce7f2a27a742f798510f3e5ad88dbe84871e5168e2120c3d5720" 4699 + dependencies = [ 4700 + "windows-link", 4701 + "windows-result", 4702 + "windows-strings", 4703 + ] 4704 + 4705 + [[package]] 4706 + name = "windows-result" 4707 + version = "0.4.1" 4708 + source = "registry+https://github.com/rust-lang/crates.io-index" 4709 + checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" 4710 + dependencies = [ 4711 + "windows-link", 4712 + ] 4713 + 4714 + [[package]] 4715 + name = "windows-strings" 4716 + version = "0.5.1" 4717 + source = "registry+https://github.com/rust-lang/crates.io-index" 4718 + checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" 4719 + dependencies = [ 4720 + "windows-link", 4721 + ] 4722 + 4723 + [[package]] 4724 + name = "windows-sys" 4725 + version = "0.45.0" 4726 + source = "registry+https://github.com/rust-lang/crates.io-index" 4727 + checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" 4728 + dependencies = [ 4729 + "windows-targets 0.42.2", 4730 + ] 4731 + 4732 + [[package]] 4733 + name = "windows-sys" 4734 + version = "0.48.0" 4735 + source = "registry+https://github.com/rust-lang/crates.io-index" 4736 + checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" 4737 + dependencies = [ 4738 + "windows-targets 0.48.5", 4739 + ] 4740 + 4741 + [[package]] 4742 + name = "windows-sys" 4743 + version = "0.52.0" 4744 + source = "registry+https://github.com/rust-lang/crates.io-index" 4745 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 4746 + dependencies = [ 4747 + "windows-targets 0.52.6", 4748 + ] 4749 + 4750 + [[package]] 4751 + name = "windows-sys" 4752 + version = "0.60.2" 4753 + source = "registry+https://github.com/rust-lang/crates.io-index" 4754 + checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" 4755 + dependencies = [ 4756 + "windows-targets 0.53.5", 4757 + ] 4758 + 4759 + [[package]] 4760 + name = "windows-sys" 4761 + version = "0.61.2" 4762 + source = "registry+https://github.com/rust-lang/crates.io-index" 4763 + checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" 4764 + dependencies = [ 4765 + "windows-link", 4766 + ] 4767 + 4768 + [[package]] 4769 + name = "windows-targets" 4770 + version = "0.42.2" 4771 + source = "registry+https://github.com/rust-lang/crates.io-index" 4772 + checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" 4773 + dependencies = [ 4774 + "windows_aarch64_gnullvm 0.42.2", 4775 + "windows_aarch64_msvc 0.42.2", 4776 + "windows_i686_gnu 0.42.2", 4777 + "windows_i686_msvc 0.42.2", 4778 + "windows_x86_64_gnu 0.42.2", 4779 + "windows_x86_64_gnullvm 0.42.2", 4780 + "windows_x86_64_msvc 0.42.2", 4781 + ] 4782 + 4783 + [[package]] 4784 + name = "windows-targets" 4785 + version = "0.48.5" 4786 + source = "registry+https://github.com/rust-lang/crates.io-index" 4787 + checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" 4788 + dependencies = [ 4789 + "windows_aarch64_gnullvm 0.48.5", 4790 + "windows_aarch64_msvc 0.48.5", 4791 + "windows_i686_gnu 0.48.5", 4792 + "windows_i686_msvc 0.48.5", 4793 + "windows_x86_64_gnu 0.48.5", 4794 + "windows_x86_64_gnullvm 0.48.5", 4795 + "windows_x86_64_msvc 0.48.5", 4796 + ] 4797 + 4798 + [[package]] 4799 + name = "windows-targets" 4800 + version = "0.52.6" 4801 + source = "registry+https://github.com/rust-lang/crates.io-index" 4802 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 4803 + dependencies = [ 4804 + "windows_aarch64_gnullvm 0.52.6", 4805 + "windows_aarch64_msvc 0.52.6", 4806 + "windows_i686_gnu 0.52.6", 4807 + "windows_i686_gnullvm 0.52.6", 4808 + "windows_i686_msvc 0.52.6", 4809 + "windows_x86_64_gnu 0.52.6", 4810 + "windows_x86_64_gnullvm 0.52.6", 4811 + "windows_x86_64_msvc 0.52.6", 4812 + ] 4813 + 4814 + [[package]] 4815 + name = "windows-targets" 4816 + version = "0.53.5" 4817 + source = "registry+https://github.com/rust-lang/crates.io-index" 4818 + checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" 4819 + dependencies = [ 4820 + "windows-link", 4821 + "windows_aarch64_gnullvm 0.53.1", 4822 + "windows_aarch64_msvc 0.53.1", 4823 + "windows_i686_gnu 0.53.1", 4824 + "windows_i686_gnullvm 0.53.1", 4825 + "windows_i686_msvc 0.53.1", 4826 + "windows_x86_64_gnu 0.53.1", 4827 + "windows_x86_64_gnullvm 0.53.1", 4828 + "windows_x86_64_msvc 0.53.1", 4829 + ] 4830 + 4831 + [[package]] 4832 + name = "windows_aarch64_gnullvm" 4833 + version = "0.42.2" 4834 + source = "registry+https://github.com/rust-lang/crates.io-index" 4835 + checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" 4836 + 4837 + [[package]] 4838 + name = "windows_aarch64_gnullvm" 4839 + version = "0.48.5" 4840 + source = "registry+https://github.com/rust-lang/crates.io-index" 4841 + checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" 4842 + 4843 + [[package]] 4844 + name = "windows_aarch64_gnullvm" 4845 + version = "0.52.6" 4846 + source = "registry+https://github.com/rust-lang/crates.io-index" 4847 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 4848 + 4849 + [[package]] 4850 + name = "windows_aarch64_gnullvm" 4851 + version = "0.53.1" 4852 + source = "registry+https://github.com/rust-lang/crates.io-index" 4853 + checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" 4854 + 4855 + [[package]] 4856 + name = "windows_aarch64_msvc" 4857 + version = "0.42.2" 4858 + source = "registry+https://github.com/rust-lang/crates.io-index" 4859 + checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" 4860 + 4861 + [[package]] 4862 + name = "windows_aarch64_msvc" 4863 + version = "0.48.5" 4864 + source = "registry+https://github.com/rust-lang/crates.io-index" 4865 + checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" 4866 + 4867 + [[package]] 4868 + name = "windows_aarch64_msvc" 4869 + version = "0.52.6" 4870 + source = "registry+https://github.com/rust-lang/crates.io-index" 4871 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 4872 + 4873 + [[package]] 4874 + name = "windows_aarch64_msvc" 4875 + version = "0.53.1" 4876 + source = "registry+https://github.com/rust-lang/crates.io-index" 4877 + checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" 4878 + 4879 + [[package]] 4880 + name = "windows_i686_gnu" 4881 + version = "0.42.2" 4882 + source = "registry+https://github.com/rust-lang/crates.io-index" 4883 + checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" 4884 + 4885 + [[package]] 4886 + name = "windows_i686_gnu" 4887 + version = "0.48.5" 4888 + source = "registry+https://github.com/rust-lang/crates.io-index" 4889 + checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" 4890 + 4891 + [[package]] 4892 + name = "windows_i686_gnu" 4893 + version = "0.52.6" 4894 + source = "registry+https://github.com/rust-lang/crates.io-index" 4895 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 4896 + 4897 + [[package]] 4898 + name = "windows_i686_gnu" 4899 + version = "0.53.1" 4900 + source = "registry+https://github.com/rust-lang/crates.io-index" 4901 + checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" 4902 + 4903 + [[package]] 4904 + name = "windows_i686_gnullvm" 4905 + version = "0.52.6" 4906 + source = "registry+https://github.com/rust-lang/crates.io-index" 4907 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 4908 + 4909 + [[package]] 4910 + name = "windows_i686_gnullvm" 4911 + version = "0.53.1" 4912 + source = "registry+https://github.com/rust-lang/crates.io-index" 4913 + checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" 4914 + 4915 + [[package]] 4916 + name = "windows_i686_msvc" 4917 + version = "0.42.2" 4918 + source = "registry+https://github.com/rust-lang/crates.io-index" 4919 + checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" 4920 + 4921 + [[package]] 4922 + name = "windows_i686_msvc" 4923 + version = "0.48.5" 4924 + source = "registry+https://github.com/rust-lang/crates.io-index" 4925 + checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" 4926 + 4927 + [[package]] 4928 + name = "windows_i686_msvc" 4929 + version = "0.52.6" 4930 + source = "registry+https://github.com/rust-lang/crates.io-index" 4931 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 4932 + 4933 + [[package]] 4934 + name = "windows_i686_msvc" 4935 + version = "0.53.1" 4936 + source = "registry+https://github.com/rust-lang/crates.io-index" 4937 + checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" 4938 + 4939 + [[package]] 4940 + name = "windows_x86_64_gnu" 4941 + version = "0.42.2" 4942 + source = "registry+https://github.com/rust-lang/crates.io-index" 4943 + checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" 4944 + 4945 + [[package]] 4946 + name = "windows_x86_64_gnu" 4947 + version = "0.48.5" 4948 + source = "registry+https://github.com/rust-lang/crates.io-index" 4949 + checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" 4950 + 4951 + [[package]] 4952 + name = "windows_x86_64_gnu" 4953 + version = "0.52.6" 4954 + source = "registry+https://github.com/rust-lang/crates.io-index" 4955 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 4956 + 4957 + [[package]] 4958 + name = "windows_x86_64_gnu" 4959 + version = "0.53.1" 4960 + source = "registry+https://github.com/rust-lang/crates.io-index" 4961 + checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" 4962 + 4963 + [[package]] 4964 + name = "windows_x86_64_gnullvm" 4965 + version = "0.42.2" 4966 + source = "registry+https://github.com/rust-lang/crates.io-index" 4967 + checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" 4968 + 4969 + [[package]] 4970 + name = "windows_x86_64_gnullvm" 4971 + version = "0.48.5" 4972 + source = "registry+https://github.com/rust-lang/crates.io-index" 4973 + checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" 4974 + 4975 + [[package]] 4976 + name = "windows_x86_64_gnullvm" 4977 + version = "0.52.6" 4978 + source = "registry+https://github.com/rust-lang/crates.io-index" 4979 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 4980 + 4981 + [[package]] 4982 + name = "windows_x86_64_gnullvm" 4983 + version = "0.53.1" 4984 + source = "registry+https://github.com/rust-lang/crates.io-index" 4985 + checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" 4986 + 4987 + [[package]] 4988 + name = "windows_x86_64_msvc" 4989 + version = "0.42.2" 4990 + source = "registry+https://github.com/rust-lang/crates.io-index" 4991 + checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" 4992 + 4993 + [[package]] 4994 + name = "windows_x86_64_msvc" 4995 + version = "0.48.5" 4996 + source = "registry+https://github.com/rust-lang/crates.io-index" 4997 + checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" 4998 + 4999 + [[package]] 5000 + name = "windows_x86_64_msvc" 5001 + version = "0.52.6" 5002 + source = "registry+https://github.com/rust-lang/crates.io-index" 5003 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 5004 + 5005 + [[package]] 5006 + name = "windows_x86_64_msvc" 5007 + version = "0.53.1" 5008 + source = "registry+https://github.com/rust-lang/crates.io-index" 5009 + checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" 5010 + 5011 + [[package]] 5012 + name = "winreg" 5013 + version = "0.50.0" 5014 + source = "registry+https://github.com/rust-lang/crates.io-index" 5015 + checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" 5016 + dependencies = [ 5017 + "cfg-if", 5018 + "windows-sys 0.48.0", 5019 + ] 5020 + 5021 + [[package]] 5022 + name = "wit-bindgen" 5023 + version = "0.51.0" 5024 + source = "registry+https://github.com/rust-lang/crates.io-index" 5025 + checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5" 5026 + dependencies = [ 5027 + "wit-bindgen-rust-macro", 5028 + ] 5029 + 5030 + [[package]] 5031 + name = "wit-bindgen-core" 5032 + version = "0.51.0" 5033 + source = "registry+https://github.com/rust-lang/crates.io-index" 5034 + checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc" 5035 + dependencies = [ 5036 + "anyhow", 5037 + "heck 0.5.0", 5038 + "wit-parser", 5039 + ] 5040 + 5041 + [[package]] 5042 + name = "wit-bindgen-rust" 5043 + version = "0.51.0" 5044 + source = "registry+https://github.com/rust-lang/crates.io-index" 5045 + checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21" 5046 + dependencies = [ 5047 + "anyhow", 5048 + "heck 0.5.0", 5049 + "indexmap 2.13.0", 5050 + "prettyplease", 5051 + "syn 2.0.117", 5052 + "wasm-metadata", 5053 + "wit-bindgen-core", 5054 + "wit-component", 5055 + ] 5056 + 5057 + [[package]] 5058 + name = "wit-bindgen-rust-macro" 5059 + version = "0.51.0" 5060 + source = "registry+https://github.com/rust-lang/crates.io-index" 5061 + checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a" 5062 + dependencies = [ 5063 + "anyhow", 5064 + "prettyplease", 5065 + "proc-macro2", 5066 + "quote", 5067 + "syn 2.0.117", 5068 + "wit-bindgen-core", 5069 + "wit-bindgen-rust", 5070 + ] 5071 + 5072 + [[package]] 5073 + name = "wit-component" 5074 + version = "0.244.0" 5075 + source = "registry+https://github.com/rust-lang/crates.io-index" 5076 + checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2" 5077 + dependencies = [ 5078 + "anyhow", 5079 + "bitflags", 5080 + "indexmap 2.13.0", 5081 + "log", 5082 + "serde", 5083 + "serde_derive", 5084 + "serde_json", 5085 + "wasm-encoder", 5086 + "wasm-metadata", 5087 + "wasmparser", 5088 + "wit-parser", 5089 + ] 5090 + 5091 + [[package]] 5092 + name = "wit-parser" 5093 + version = "0.244.0" 5094 + source = "registry+https://github.com/rust-lang/crates.io-index" 5095 + checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736" 5096 + dependencies = [ 5097 + "anyhow", 5098 + "id-arena", 5099 + "indexmap 2.13.0", 5100 + "log", 5101 + "semver", 5102 + "serde", 5103 + "serde_derive", 5104 + "serde_json", 5105 + "unicode-xid", 5106 + "wasmparser", 5107 + ] 5108 + 5109 + [[package]] 5110 + name = "writeable" 5111 + version = "0.6.2" 5112 + source = "registry+https://github.com/rust-lang/crates.io-index" 5113 + checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" 5114 + 5115 + [[package]] 5116 + name = "xml5ever" 5117 + version = "0.18.1" 5118 + source = "registry+https://github.com/rust-lang/crates.io-index" 5119 + checksum = "9bbb26405d8e919bc1547a5aa9abc95cbfa438f04844f5fdd9dc7596b748bf69" 5120 + dependencies = [ 5121 + "log", 5122 + "mac", 5123 + "markup5ever", 5124 + ] 5125 + 5126 + [[package]] 5127 + name = "yansi" 5128 + version = "1.0.1" 5129 + source = "registry+https://github.com/rust-lang/crates.io-index" 5130 + checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" 5131 + 5132 + [[package]] 5133 + name = "yoke" 5134 + version = "0.8.1" 5135 + source = "registry+https://github.com/rust-lang/crates.io-index" 5136 + checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" 5137 + dependencies = [ 5138 + "stable_deref_trait", 5139 + "yoke-derive", 5140 + "zerofrom", 5141 + ] 5142 + 5143 + [[package]] 5144 + name = "yoke-derive" 5145 + version = "0.8.1" 5146 + source = "registry+https://github.com/rust-lang/crates.io-index" 5147 + checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" 5148 + dependencies = [ 5149 + "proc-macro2", 5150 + "quote", 5151 + "syn 2.0.117", 5152 + "synstructure", 5153 + ] 5154 + 5155 + [[package]] 5156 + name = "zerocopy" 5157 + version = "0.8.40" 5158 + source = "registry+https://github.com/rust-lang/crates.io-index" 5159 + checksum = "a789c6e490b576db9f7e6b6d661bcc9799f7c0ac8352f56ea20193b2681532e5" 5160 + dependencies = [ 5161 + "zerocopy-derive", 5162 + ] 5163 + 5164 + [[package]] 5165 + name = "zerocopy-derive" 5166 + version = "0.8.40" 5167 + source = "registry+https://github.com/rust-lang/crates.io-index" 5168 + checksum = "f65c489a7071a749c849713807783f70672b28094011623e200cb86dcb835953" 5169 + dependencies = [ 5170 + "proc-macro2", 5171 + "quote", 5172 + "syn 2.0.117", 5173 + ] 5174 + 5175 + [[package]] 5176 + name = "zerofrom" 5177 + version = "0.1.6" 5178 + source = "registry+https://github.com/rust-lang/crates.io-index" 5179 + checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" 5180 + dependencies = [ 5181 + "zerofrom-derive", 5182 + ] 5183 + 5184 + [[package]] 5185 + name = "zerofrom-derive" 5186 + version = "0.1.6" 5187 + source = "registry+https://github.com/rust-lang/crates.io-index" 5188 + checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" 5189 + dependencies = [ 5190 + "proc-macro2", 5191 + "quote", 5192 + "syn 2.0.117", 5193 + "synstructure", 5194 + ] 5195 + 5196 + [[package]] 5197 + name = "zeroize" 5198 + version = "1.8.2" 5199 + source = "registry+https://github.com/rust-lang/crates.io-index" 5200 + checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" 5201 + dependencies = [ 5202 + "serde", 5203 + ] 5204 + 5205 + [[package]] 5206 + name = "zerotrie" 5207 + version = "0.2.3" 5208 + source = "registry+https://github.com/rust-lang/crates.io-index" 5209 + checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" 5210 + dependencies = [ 5211 + "displaydoc", 5212 + "yoke", 5213 + "zerofrom", 5214 + ] 5215 + 5216 + [[package]] 5217 + name = "zerovec" 5218 + version = "0.11.5" 5219 + source = "registry+https://github.com/rust-lang/crates.io-index" 5220 + checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" 5221 + dependencies = [ 5222 + "yoke", 5223 + "zerofrom", 5224 + "zerovec-derive", 5225 + ] 5226 + 5227 + [[package]] 5228 + name = "zerovec-derive" 5229 + version = "0.11.2" 5230 + source = "registry+https://github.com/rust-lang/crates.io-index" 5231 + checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" 5232 + dependencies = [ 5233 + "proc-macro2", 5234 + "quote", 5235 + "syn 2.0.117", 5236 + ] 5237 + 5238 + [[package]] 5239 + name = "zmij" 5240 + version = "1.0.21" 5241 + source = "registry+https://github.com/rust-lang/crates.io-index" 5242 + checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
+27
Cargo.toml
··· 1 + [package] 2 + name = "kipclip" 3 + version = "0.1.0" 4 + edition = "2024" 5 + description = "CLI for kipclip.com – AT Protocol bookmark manager" 6 + license = "MIT" 7 + repository = "https://github.com/tijs/kipclip-cli" 8 + 9 + [[bin]] 10 + name = "kip" 11 + path = "src/main.rs" 12 + 13 + [dependencies] 14 + jacquard = "0.9" 15 + clap = { version = "4", features = ["derive"] } 16 + tokio = { version = "1", features = ["full"] } 17 + serde = { version = "1", features = ["derive"] } 18 + serde_json = "1" 19 + reqwest = { version = "0.12", features = ["json"] } 20 + open = "5" 21 + owo-colors = "4" 22 + chrono = { version = "0.4", features = ["serde"] } 23 + miette = { version = "7", features = ["fancy"] } 24 + dirs = "6" 25 + unicode-width = "0.2" 26 + terminal_size = "0.4" 27 + jacquard-identity = "0.9"
+69
README.md
··· 1 + # kip 2 + 3 + Command-line interface for [kipclip.com](https://kipclip.com) — an AT Protocol bookmark manager. 4 + 5 + Read, add, tag, and manage your bookmarks from the terminal. Bookmarks are stored on your personal PDS using AT Protocol, so they stay yours. 6 + 7 + ## Install 8 + 9 + ### From source 10 + 11 + ```sh 12 + cargo install --git https://github.com/tijs/kipclip-cli 13 + ``` 14 + 15 + ### Pre-built binaries 16 + 17 + Download from [GitHub Releases](https://github.com/tijs/kipclip-cli/releases). 18 + 19 + ## Usage 20 + 21 + ### Authentication 22 + 23 + ```sh 24 + kip login tijs.org # Opens browser for AT Protocol OAuth 25 + kip whoami # Show current user 26 + kip logout # Clear session 27 + ``` 28 + 29 + ### Bookmarks 30 + 31 + ```sh 32 + kip add https://example.com -t reading -t rust 33 + kip list 34 + kip list -t reading -n 10 35 + kip search "rust" 36 + kip list --json | jq . 37 + kip open <ref> # Open URL in browser 38 + kip delete <ref> --force 39 + ``` 40 + 41 + ### Tags 42 + 43 + ```sh 44 + kip tag <ref> reading # Add tag to bookmark 45 + kip untag <ref> reading # Remove tag 46 + kip tags # List all tags with counts 47 + ``` 48 + 49 + ### Notes 50 + 51 + ```sh 52 + kip note <ref> "Read this later" # Set note 53 + kip note <ref> # Clear note 54 + ``` 55 + 56 + Bookmark refs are short rkey prefixes (min 4 chars) shown next to each bookmark in list output. 57 + 58 + ## How it works 59 + 60 + kip authenticates via AT Protocol OAuth (PKCE + DPoP) using the [jacquard](https://crates.io/crates/jacquard) Rust SDK. Bookmarks are read from and written to your PDS directly. URL metadata (title, description, favicon) is fetched from the kipclip.com enrichment endpoint. 61 + 62 + AT Protocol collections used: 63 + - `community.lexicon.bookmarks.bookmark` — bookmark records 64 + - `com.kipclip.annotation` — enrichment + notes sidecar 65 + - `com.kipclip.tag` — tag records 66 + 67 + ## License 68 + 69 + MIT
+65
src/commands/add.rs
··· 1 + use miette::{Result, miette}; 2 + 3 + use crate::kipclip::enrich; 4 + use crate::kipclip::pds::PdsClient; 5 + use crate::kipclip::types::*; 6 + 7 + pub async fn run(pds: &PdsClient, url: &str, tags: &[String]) -> Result<()> { 8 + // Check for duplicates 9 + let existing = pds.fetch_enriched_bookmarks(None).await?; 10 + if existing.iter().any(|b| b.subject == url) { 11 + return Err(miette!("Bookmark already exists for {url}")); 12 + } 13 + 14 + // Enrich the URL 15 + print!("Enriching URL…"); 16 + let metadata = match enrich::enrich_url(url).await { 17 + Ok(m) => { 18 + println!(" done."); 19 + m 20 + } 21 + Err(e) => { 22 + println!(" failed ({e}), continuing without metadata."); 23 + UrlMetadata { 24 + title: None, 25 + description: None, 26 + favicon: None, 27 + image: None, 28 + } 29 + } 30 + }; 31 + 32 + let now = chrono::Utc::now().to_rfc3339(); 33 + 34 + // Create bookmark record 35 + let bookmark = BookmarkRecord { 36 + subject: url.to_string(), 37 + created_at: now.clone(), 38 + tags: tags.to_vec(), 39 + }; 40 + let bookmark_resp = pds 41 + .create_record(BOOKMARK_COLLECTION, None, &bookmark) 42 + .await?; 43 + 44 + // Create annotation sidecar with same rkey 45 + let bookmark_rkey = crate::kipclip::refs::rkey_from_uri(&bookmark_resp.uri); 46 + let annotation = AnnotationRecord { 47 + subject: bookmark_resp.uri.clone(), 48 + created_at: now, 49 + note: None, 50 + title: metadata.title.clone(), 51 + description: metadata.description, 52 + favicon: metadata.favicon, 53 + image: metadata.image, 54 + }; 55 + pds.create_record(ANNOTATION_COLLECTION, Some(&bookmark_rkey), &annotation) 56 + .await?; 57 + 58 + let title = metadata.title.as_deref().unwrap_or(url); 59 + println!("Added: {title}"); 60 + if !tags.is_empty() { 61 + println!("Tags: {}", tags.join(", ")); 62 + } 63 + 64 + Ok(()) 65 + }
+29
src/commands/delete.rs
··· 1 + use miette::Result; 2 + 3 + use crate::kipclip::display; 4 + use crate::kipclip::pds::PdsClient; 5 + use crate::kipclip::refs; 6 + use crate::kipclip::types::*; 7 + 8 + pub async fn run(pds: &PdsClient, reference: &str, force: bool) -> Result<()> { 9 + let bookmarks = pds.fetch_enriched_bookmarks(None).await?; 10 + let bookmark = refs::resolve_ref(reference, &bookmarks)?; 11 + 12 + if !force { 13 + display::print_bookmark_detail(bookmark); 14 + println!("\nUse --force to confirm deletion."); 15 + return Ok(()); 16 + } 17 + 18 + let rkey = &bookmark.rkey; 19 + 20 + // Delete bookmark record 21 + pds.delete_record(BOOKMARK_COLLECTION, rkey).await?; 22 + 23 + // Delete annotation sidecar (same rkey) 24 + let _ = pds.delete_record(ANNOTATION_COLLECTION, rkey).await; 25 + 26 + let title = bookmark.title.as_deref().unwrap_or(&bookmark.subject); 27 + println!("Deleted: {title}"); 28 + Ok(()) 29 + }
+67
src/commands/list.rs
··· 1 + use miette::Result; 2 + 3 + use crate::kipclip::display; 4 + use crate::kipclip::pds::PdsClient; 5 + use crate::kipclip::types::EnrichedBookmark; 6 + 7 + /// Filter bookmarks by tag, search query 8 + fn filter_bookmarks( 9 + bookmarks: Vec<EnrichedBookmark>, 10 + tag: Option<&str>, 11 + search: Option<&str>, 12 + ) -> Vec<EnrichedBookmark> { 13 + bookmarks 14 + .into_iter() 15 + .filter(|b| { 16 + if let Some(tag) = tag { 17 + let tag_lower = tag.to_lowercase(); 18 + if !b.tags.iter().any(|t| t.to_lowercase() == tag_lower) { 19 + return false; 20 + } 21 + } 22 + if let Some(query) = search { 23 + let q = query.to_lowercase(); 24 + let in_title = b 25 + .title 26 + .as_ref() 27 + .is_some_and(|t| t.to_lowercase().contains(&q)); 28 + let in_url = b.subject.to_lowercase().contains(&q); 29 + let in_desc = b 30 + .description 31 + .as_ref() 32 + .is_some_and(|d| d.to_lowercase().contains(&q)); 33 + let in_note = b 34 + .note 35 + .as_ref() 36 + .is_some_and(|n| n.to_lowercase().contains(&q)); 37 + if !(in_title || in_url || in_desc || in_note) { 38 + return false; 39 + } 40 + } 41 + true 42 + }) 43 + .collect() 44 + } 45 + 46 + pub async fn run( 47 + pds: &PdsClient, 48 + tag: Option<&str>, 49 + search: Option<&str>, 50 + limit: Option<u32>, 51 + json: bool, 52 + ) -> Result<()> { 53 + let bookmarks = pds.fetch_enriched_bookmarks(None).await?; 54 + let mut filtered = filter_bookmarks(bookmarks, tag, search); 55 + 56 + if let Some(n) = limit { 57 + filtered.truncate(n as usize); 58 + } 59 + 60 + if json { 61 + println!("{}", serde_json::to_string_pretty(&filtered).unwrap_or_default()); 62 + } else { 63 + display::print_bookmarks(&filtered); 64 + } 65 + 66 + Ok(()) 67 + }
+10
src/commands/login.rs
··· 1 + use miette::Result; 2 + 3 + use crate::kipclip::auth; 4 + 5 + pub async fn run(handle: &str) -> Result<()> { 6 + println!("Opening browser for AT Protocol login…"); 7 + let info = auth::login(handle).await?; 8 + println!("Logged in as {} ({})", info.handle, info.did); 9 + Ok(()) 10 + }
+9
src/commands/logout.rs
··· 1 + use miette::Result; 2 + 3 + use crate::kipclip::auth; 4 + 5 + pub fn run() -> Result<()> { 6 + auth::logout()?; 7 + println!("Logged out."); 8 + Ok(()) 9 + }
+12
src/commands/mod.rs
··· 1 + pub mod add; 2 + pub mod delete; 3 + pub mod list; 4 + pub mod login; 5 + pub mod logout; 6 + pub mod note; 7 + pub mod open; 8 + pub mod search; 9 + pub mod tag; 10 + pub mod tags; 11 + pub mod untag; 12 + pub mod whoami;
+52
src/commands/note.rs
··· 1 + use miette::Result; 2 + 3 + use crate::kipclip::pds::PdsClient; 4 + use crate::kipclip::refs; 5 + use crate::kipclip::types::*; 6 + 7 + pub async fn run(pds: &PdsClient, reference: &str, text: Option<&str>) -> Result<()> { 8 + let bookmarks = pds.fetch_enriched_bookmarks(None).await?; 9 + let bookmark = refs::resolve_ref(reference, &bookmarks)?; 10 + let rkey = bookmark.rkey.clone(); 11 + let title = bookmark 12 + .title 13 + .as_deref() 14 + .unwrap_or(&bookmark.subject) 15 + .to_string(); 16 + 17 + // Get or create annotation record 18 + match pds.get_record(ANNOTATION_COLLECTION, &rkey).await { 19 + Ok(record) => { 20 + let mut value = record.value; 21 + match text { 22 + Some(t) => value["note"] = serde_json::Value::String(t.to_string()), 23 + None => { 24 + value 25 + .as_object_mut() 26 + .map(|obj| obj.remove("note")); 27 + } 28 + } 29 + pds.put_record(ANNOTATION_COLLECTION, &rkey, value).await?; 30 + } 31 + Err(_) => { 32 + // No annotation exists, create one 33 + let annotation = AnnotationRecord { 34 + subject: bookmark.uri.clone(), 35 + created_at: chrono::Utc::now().to_rfc3339(), 36 + note: text.map(|t| t.to_string()), 37 + title: None, 38 + description: None, 39 + favicon: None, 40 + image: None, 41 + }; 42 + pds.create_record(ANNOTATION_COLLECTION, Some(&rkey), &annotation) 43 + .await?; 44 + } 45 + } 46 + 47 + match text { 48 + Some(t) => println!("Note set on: {title}\n \"{t}\""), 49 + None => println!("Note cleared on: {title}"), 50 + } 51 + Ok(()) 52 + }
+13
src/commands/open.rs
··· 1 + use miette::{IntoDiagnostic, Result}; 2 + 3 + use crate::kipclip::pds::PdsClient; 4 + use crate::kipclip::refs; 5 + 6 + pub async fn run(pds: &PdsClient, reference: &str) -> Result<()> { 7 + let bookmarks = pds.fetch_enriched_bookmarks(None).await?; 8 + let bookmark = refs::resolve_ref(reference, &bookmarks)?; 9 + let title = bookmark.title.as_deref().unwrap_or(&bookmark.subject); 10 + println!("Opening: {title}"); 11 + open::that(&bookmark.subject).into_diagnostic()?; 12 + Ok(()) 13 + }
+8
src/commands/search.rs
··· 1 + use miette::Result; 2 + 3 + use crate::kipclip::pds::PdsClient; 4 + 5 + /// Search is an alias for list --search 6 + pub async fn run(pds: &PdsClient, query: &str, json: bool) -> Result<()> { 7 + crate::commands::list::run(pds, None, Some(query), None, json).await 8 + }
+32
src/commands/tag.rs
··· 1 + use miette::Result; 2 + 3 + use crate::kipclip::pds::PdsClient; 4 + use crate::kipclip::refs; 5 + use crate::kipclip::types::*; 6 + 7 + pub async fn run(pds: &PdsClient, reference: &str, new_tags: &[String]) -> Result<()> { 8 + let bookmarks = pds.fetch_enriched_bookmarks(None).await?; 9 + let bookmark = refs::resolve_ref(reference, &bookmarks)?; 10 + 11 + // Merge existing + new tags (deduplicate, case-insensitive) 12 + let mut tags = bookmark.tags.clone(); 13 + for tag in new_tags { 14 + let tag_lower = tag.to_lowercase(); 15 + if !tags.iter().any(|t| t.to_lowercase() == tag_lower) { 16 + tags.push(tag.clone()); 17 + } 18 + } 19 + 20 + // Get current record and update tags 21 + let record = pds.get_record(BOOKMARK_COLLECTION, &bookmark.rkey).await?; 22 + let mut value = record.value; 23 + value["tags"] = serde_json::json!(tags); 24 + 25 + pds.put_record(BOOKMARK_COLLECTION, &bookmark.rkey, value) 26 + .await?; 27 + 28 + let title = bookmark.title.as_deref().unwrap_or(&bookmark.subject); 29 + println!("Updated tags on: {title}"); 30 + println!("Tags: {}", tags.join(", ")); 31 + Ok(()) 32 + }
+37
src/commands/tags.rs
··· 1 + use miette::Result; 2 + use owo_colors::OwoColorize; 3 + 4 + use crate::kipclip::pds::PdsClient; 5 + 6 + pub async fn run(pds: &PdsClient, json: bool) -> Result<()> { 7 + let bookmarks = pds.fetch_enriched_bookmarks(None).await?; 8 + 9 + // Count bookmarks per tag 10 + let mut tag_counts: std::collections::BTreeMap<String, usize> = std::collections::BTreeMap::new(); 11 + for bookmark in &bookmarks { 12 + for tag in &bookmark.tags { 13 + *tag_counts.entry(tag.clone()).or_insert(0) += 1; 14 + } 15 + } 16 + 17 + if json { 18 + let tags: Vec<serde_json::Value> = tag_counts 19 + .iter() 20 + .map(|(tag, count)| { 21 + serde_json::json!({ 22 + "tag": tag, 23 + "count": count, 24 + }) 25 + }) 26 + .collect(); 27 + println!("{}", serde_json::to_string_pretty(&tags).unwrap_or_default()); 28 + } else if tag_counts.is_empty() { 29 + println!("No tags found."); 30 + } else { 31 + for (tag, count) in &tag_counts { 32 + println!(" {} {}", tag.green(), format!("({count})").dimmed()); 33 + } 34 + } 35 + 36 + Ok(()) 37 + }
+38
src/commands/untag.rs
··· 1 + use miette::Result; 2 + 3 + use crate::kipclip::pds::PdsClient; 4 + use crate::kipclip::refs; 5 + use crate::kipclip::types::*; 6 + 7 + pub async fn run(pds: &PdsClient, reference: &str, remove_tags: &[String]) -> Result<()> { 8 + let bookmarks = pds.fetch_enriched_bookmarks(None).await?; 9 + let bookmark = refs::resolve_ref(reference, &bookmarks)?; 10 + 11 + // Remove specified tags (case-insensitive) 12 + let tags: Vec<String> = bookmark 13 + .tags 14 + .iter() 15 + .filter(|t| { 16 + !remove_tags 17 + .iter() 18 + .any(|r| r.to_lowercase() == t.to_lowercase()) 19 + }) 20 + .cloned() 21 + .collect(); 22 + 23 + let record = pds.get_record(BOOKMARK_COLLECTION, &bookmark.rkey).await?; 24 + let mut value = record.value; 25 + value["tags"] = serde_json::json!(tags); 26 + 27 + pds.put_record(BOOKMARK_COLLECTION, &bookmark.rkey, value) 28 + .await?; 29 + 30 + let title = bookmark.title.as_deref().unwrap_or(&bookmark.subject); 31 + println!("Updated tags on: {title}"); 32 + if tags.is_empty() { 33 + println!("Tags: (none)"); 34 + } else { 35 + println!("Tags: {}", tags.join(", ")); 36 + } 37 + Ok(()) 38 + }
+17
src/commands/whoami.rs
··· 1 + use miette::Result; 2 + 3 + use crate::kipclip::auth; 4 + 5 + pub fn run(json: bool) -> Result<()> { 6 + let info = auth::get_session_info()?; 7 + if json { 8 + println!( 9 + "{}", 10 + serde_json::to_string_pretty(&info).unwrap_or_default() 11 + ); 12 + } else { 13 + println!("Handle: {}", info.handle); 14 + println!("DID: {}", info.did); 15 + } 16 + Ok(()) 17 + }
+88
src/kipclip/auth.rs
··· 1 + use jacquard::client::FileAuthStore; 2 + use jacquard::oauth::client::{OAuthClient, OAuthSession}; 3 + use jacquard::oauth::loopback::LoopbackConfig; 4 + use jacquard_identity::JacquardResolver; 5 + use miette::{IntoDiagnostic, Result, miette}; 6 + use serde::{Deserialize, Serialize}; 7 + 8 + use crate::kipclip::config; 9 + 10 + /// Concrete session type used throughout the CLI 11 + pub type Session = OAuthSession<JacquardResolver, FileAuthStore>; 12 + 13 + /// Stored session info (persisted separately from OAuth tokens) 14 + #[derive(Debug, Clone, Serialize, Deserialize)] 15 + pub struct SessionInfo { 16 + pub did: String, 17 + pub handle: String, 18 + pub session_id: String, 19 + } 20 + 21 + /// Create an OAuth client with file-backed auth store 22 + fn oauth_client() -> OAuthClient<JacquardResolver, FileAuthStore> { 23 + OAuthClient::with_default_config(FileAuthStore::new(&config::auth_store_path())) 24 + } 25 + 26 + /// Login via OAuth loopback flow — opens browser for authorization 27 + pub async fn login(handle: &str) -> Result<SessionInfo> { 28 + let oauth = oauth_client(); 29 + let session = oauth 30 + .login_with_local_server(handle, Default::default(), LoopbackConfig::default()) 31 + .await 32 + .map_err(|e| miette!("OAuth login failed: {e}"))?; 33 + 34 + // Extract session info 35 + let (did, session_id) = session.session_info().await; 36 + let did_str = did.to_string(); 37 + let sid_str = session_id.to_string(); 38 + 39 + // Resolve handle via identity 40 + let info = SessionInfo { 41 + did: did_str, 42 + handle: handle.to_string(), 43 + session_id: sid_str, 44 + }; 45 + 46 + // Persist session info 47 + let path = config::session_info_path(); 48 + let json = serde_json::to_string_pretty(&info).into_diagnostic()?; 49 + std::fs::write(&path, json).into_diagnostic()?; 50 + 51 + Ok(info) 52 + } 53 + 54 + /// Restore a session from the file auth store 55 + pub async fn restore_session() -> Result<Session> { 56 + let info = get_session_info()?; 57 + let oauth = oauth_client(); 58 + 59 + let did = jacquard::types::string::Did::new(&info.did) 60 + .map_err(|e| miette!("Invalid DID: {e}"))?; 61 + 62 + let session = oauth 63 + .restore(&did, &info.session_id) 64 + .await 65 + .map_err(|e| miette!("Failed to restore session: {e}"))?; 66 + 67 + Ok(session) 68 + } 69 + 70 + /// Get stored session info (DID + handle) 71 + pub fn get_session_info() -> Result<SessionInfo> { 72 + let path = config::session_info_path(); 73 + let data = std::fs::read_to_string(&path) 74 + .map_err(|_| miette!("Not logged in. Run: kip login <handle>"))?; 75 + serde_json::from_str(&data).into_diagnostic() 76 + } 77 + 78 + /// Clear all stored auth data 79 + pub fn logout() -> Result<()> { 80 + let config_dir = config::config_dir(); 81 + for file in ["session.json", "whoami.json"] { 82 + let path = config_dir.join(file); 83 + if path.exists() { 84 + std::fs::remove_file(&path).into_diagnostic()?; 85 + } 86 + } 87 + Ok(()) 88 + }
+28
src/kipclip/config.rs
··· 1 + use std::path::PathBuf; 2 + 3 + /// Returns the kipclip config directory (~/.config/kipclip/) 4 + pub fn config_dir() -> PathBuf { 5 + let dir = dirs::config_dir() 6 + .unwrap_or_else(|| PathBuf::from("~/.config")) 7 + .join("kipclip"); 8 + std::fs::create_dir_all(&dir).ok(); 9 + dir 10 + } 11 + 12 + /// Path to the OAuth session store file 13 + pub fn auth_store_path() -> String { 14 + config_dir() 15 + .join("session.json") 16 + .to_string_lossy() 17 + .into_owned() 18 + } 19 + 20 + /// Path to the cached session info (DID, handle) 21 + pub fn session_info_path() -> PathBuf { 22 + config_dir().join("whoami.json") 23 + } 24 + 25 + /// Appview base URL 26 + pub fn appview_url() -> String { 27 + std::env::var("KIPCLIP_APPVIEW_URL").unwrap_or_else(|_| "https://kipclip.com".to_string()) 28 + }
+85
src/kipclip/display.rs
··· 1 + use owo_colors::OwoColorize; 2 + use unicode_width::UnicodeWidthStr; 3 + 4 + use crate::kipclip::types::EnrichedBookmark; 5 + 6 + /// Truncate a string to a max display width, appending "…" if truncated 7 + fn truncate(s: &str, max_width: usize) -> String { 8 + if s.width() <= max_width { 9 + return s.to_string(); 10 + } 11 + let mut result = String::new(); 12 + let mut width = 0; 13 + for ch in s.chars() { 14 + let ch_width = unicode_width::UnicodeWidthChar::width(ch).unwrap_or(0); 15 + if width + ch_width + 1 > max_width { 16 + result.push('…'); 17 + break; 18 + } 19 + result.push(ch); 20 + width += ch_width; 21 + } 22 + result 23 + } 24 + 25 + /// Display bookmarks as a formatted table 26 + pub fn print_bookmarks(bookmarks: &[EnrichedBookmark]) { 27 + if bookmarks.is_empty() { 28 + println!("No bookmarks found."); 29 + return; 30 + } 31 + 32 + // Get terminal width, default to 100 33 + let term_width = terminal_size::terminal_size() 34 + .map(|(w, _)| w.0 as usize) 35 + .unwrap_or(100); 36 + 37 + // Column widths: ref(8) + title(dynamic) + url(dynamic) + tags(20) + gaps(6) 38 + let ref_width = 8; 39 + let tags_width = 20; 40 + let fixed = ref_width + tags_width + 8; // 8 for separators/padding 41 + let remaining = term_width.saturating_sub(fixed); 42 + let title_width = remaining * 2 / 3; 43 + let url_width = remaining / 3; 44 + 45 + for bookmark in bookmarks { 46 + let ref_str = &bookmark.rkey[..bookmark.rkey.len().min(ref_width)]; 47 + let title = bookmark 48 + .title 49 + .as_deref() 50 + .unwrap_or(&bookmark.subject); 51 + let url = &bookmark.subject; 52 + let tags = if bookmark.tags.is_empty() { 53 + String::new() 54 + } else { 55 + bookmark.tags.join(", ") 56 + }; 57 + 58 + println!( 59 + "{} {} {} {}", 60 + truncate(ref_str, ref_width).dimmed(), 61 + truncate(title, title_width).bold(), 62 + truncate(url, url_width).blue(), 63 + truncate(&tags, tags_width).green(), 64 + ); 65 + } 66 + } 67 + 68 + /// Print a single bookmark in detail 69 + pub fn print_bookmark_detail(bookmark: &EnrichedBookmark) { 70 + println!("{} {}", "Ref:".dimmed(), bookmark.rkey.dimmed()); 71 + if let Some(title) = &bookmark.title { 72 + println!("{} {}", "Title:".dimmed(), title.bold()); 73 + } 74 + println!("{} {}", "URL:".dimmed(), bookmark.subject.blue()); 75 + if let Some(desc) = &bookmark.description { 76 + println!("{} {}", "Description:".dimmed(), desc); 77 + } 78 + if !bookmark.tags.is_empty() { 79 + println!("{} {}", "Tags:".dimmed(), bookmark.tags.join(", ").green()); 80 + } 81 + if let Some(note) = &bookmark.note { 82 + println!("{} {}", "Note:".dimmed(), note); 83 + } 84 + println!("{} {}", "Created:".dimmed(), bookmark.created_at); 85 + }
+24
src/kipclip/enrich.rs
··· 1 + use miette::{IntoDiagnostic, Result, miette}; 2 + 3 + use crate::kipclip::config; 4 + use crate::kipclip::types::UrlMetadata; 5 + 6 + /// Call the kipclip appview /api/enrich endpoint 7 + pub async fn enrich_url(url: &str) -> Result<UrlMetadata> { 8 + let appview = config::appview_url(); 9 + let client = reqwest::Client::new(); 10 + let resp = client 11 + .post(format!("{appview}/api/enrich")) 12 + .json(&serde_json::json!({ "url": url })) 13 + .send() 14 + .await 15 + .into_diagnostic()?; 16 + 17 + if !resp.status().is_success() { 18 + let status = resp.status(); 19 + let body = resp.text().await.unwrap_or_default(); 20 + return Err(miette!("Enrichment failed ({status}): {body}")); 21 + } 22 + 23 + resp.json::<UrlMetadata>().await.into_diagnostic() 24 + }
+7
src/kipclip/mod.rs
··· 1 + pub mod auth; 2 + pub mod config; 3 + pub mod display; 4 + pub mod enrich; 5 + pub mod pds; 6 + pub mod refs; 7 + pub mod types;
+279
src/kipclip/pds.rs
··· 1 + use jacquard::api::com_atproto::repo::{ 2 + create_record::CreateRecord, 3 + delete_record::DeleteRecord, 4 + get_record::GetRecord, 5 + list_records::ListRecords, 6 + put_record::PutRecord, 7 + }; 8 + use jacquard::common::types::ident::AtIdentifier; 9 + use jacquard::common::types::recordkey::{RecordKey, Rkey}; 10 + use jacquard::common::types::value::to_data; 11 + use jacquard::common::xrpc::XrpcClient; 12 + use jacquard::CowStr; 13 + use miette::{Result, miette}; 14 + use serde::Serialize; 15 + 16 + use crate::kipclip::auth::Session; 17 + use crate::kipclip::refs::rkey_from_uri; 18 + use crate::kipclip::types::*; 19 + 20 + /// PDS client wrapping an authenticated jacquard session 21 + pub struct PdsClient { 22 + pub session: Session, 23 + pub did: String, 24 + } 25 + 26 + impl PdsClient { 27 + /// List all records from a collection (handles pagination) 28 + pub async fn list_records( 29 + &self, 30 + collection: &str, 31 + limit: Option<i64>, 32 + reverse: bool, 33 + ) -> Result<Vec<PdsRecord>> { 34 + let did = jacquard::types::string::Did::new(&self.did) 35 + .map_err(|e| miette!("Invalid DID: {e}"))?; 36 + let nsid = jacquard::types::string::Nsid::new(collection) 37 + .map_err(|e| miette!("Invalid NSID: {e}"))?; 38 + 39 + let mut all_records = Vec::new(); 40 + let mut cursor_val: Option<String> = None; 41 + let page_limit = limit.unwrap_or(100).min(100); 42 + 43 + loop { 44 + let mut builder = ListRecords::new() 45 + .repo(AtIdentifier::Did(did.clone())) 46 + .collection(nsid.clone()) 47 + .limit(page_limit); 48 + 49 + if reverse { 50 + builder = builder.reverse(true); 51 + } 52 + if let Some(ref c) = cursor_val { 53 + builder = builder.cursor(CowStr::from(c.clone())); 54 + } 55 + 56 + let request = builder.build(); 57 + let response = self 58 + .session 59 + .send(request) 60 + .await 61 + .map_err(|e| miette!("PDS listRecords failed: {e}"))?; 62 + 63 + let output = response 64 + .into_output() 65 + .map_err(|e| miette!("Failed to parse listRecords response: {e}"))?; 66 + 67 + for record in output.records { 68 + let value_json = serde_json::to_value(&record.value) 69 + .unwrap_or(serde_json::Value::Null); 70 + all_records.push(PdsRecord { 71 + uri: record.uri.to_string(), 72 + cid: record.cid.to_string(), 73 + value: value_json, 74 + }); 75 + } 76 + 77 + // If we have a specific limit, stop when reached 78 + if let Some(max) = limit { 79 + if all_records.len() >= max as usize { 80 + all_records.truncate(max as usize); 81 + break; 82 + } 83 + } 84 + 85 + match output.cursor { 86 + Some(c) if !c.is_empty() => cursor_val = Some(c.to_string()), 87 + _ => break, 88 + } 89 + } 90 + 91 + Ok(all_records) 92 + } 93 + 94 + /// Create a record in a collection 95 + pub async fn create_record<T: Serialize>( 96 + &self, 97 + collection: &str, 98 + rkey: Option<&str>, 99 + record: &T, 100 + ) -> Result<CreateRecordResponse> { 101 + let did = jacquard::types::string::Did::new(&self.did) 102 + .map_err(|e| miette!("Invalid DID: {e}"))?; 103 + let nsid = jacquard::types::string::Nsid::new(collection) 104 + .map_err(|e| miette!("Invalid NSID: {e}"))?; 105 + let data = to_data(record).map_err(|e| miette!("Failed to serialize record: {e}"))?; 106 + 107 + let mut builder = CreateRecord::new() 108 + .repo(AtIdentifier::Did(did)) 109 + .collection(nsid) 110 + .record(data); 111 + 112 + if let Some(rkey) = rkey { 113 + let rk = Rkey::new(rkey).map_err(|e| miette!("Invalid rkey: {e}"))?; 114 + builder = builder.rkey(RecordKey(rk)); 115 + } 116 + 117 + let request = builder.build(); 118 + let response = self 119 + .session 120 + .send(request) 121 + .await 122 + .map_err(|e| miette!("PDS createRecord failed: {e}"))?; 123 + 124 + let output = response 125 + .into_output() 126 + .map_err(|e| miette!("Failed to parse createRecord response: {e}"))?; 127 + 128 + Ok(CreateRecordResponse { 129 + uri: output.uri.to_string(), 130 + }) 131 + } 132 + 133 + /// Get a single record 134 + pub async fn get_record( 135 + &self, 136 + collection: &str, 137 + rkey: &str, 138 + ) -> Result<GetRecordResponse> { 139 + let did = jacquard::types::string::Did::new(&self.did) 140 + .map_err(|e| miette!("Invalid DID: {e}"))?; 141 + let nsid = jacquard::types::string::Nsid::new(collection) 142 + .map_err(|e| miette!("Invalid NSID: {e}"))?; 143 + 144 + let rk = Rkey::new(rkey).map_err(|e| miette!("Invalid rkey: {e}"))?; 145 + let request = GetRecord::new() 146 + .repo(AtIdentifier::Did(did)) 147 + .collection(nsid) 148 + .rkey(RecordKey(rk)) 149 + .build(); 150 + 151 + let response = self 152 + .session 153 + .send(request) 154 + .await 155 + .map_err(|e| miette!("PDS getRecord failed: {e}"))?; 156 + 157 + let output = response 158 + .into_output() 159 + .map_err(|e| miette!("Failed to parse getRecord response: {e}"))?; 160 + 161 + let value_json = serde_json::to_value(&output.value) 162 + .unwrap_or(serde_json::Value::Null); 163 + 164 + Ok(GetRecordResponse { 165 + value: value_json, 166 + }) 167 + } 168 + 169 + /// Update a record (put) 170 + pub async fn put_record( 171 + &self, 172 + collection: &str, 173 + rkey: &str, 174 + record: serde_json::Value, 175 + ) -> Result<()> { 176 + let did = jacquard::types::string::Did::new(&self.did) 177 + .map_err(|e| miette!("Invalid DID: {e}"))?; 178 + let nsid = jacquard::types::string::Nsid::new(collection) 179 + .map_err(|e| miette!("Invalid NSID: {e}"))?; 180 + let data = to_data(&record).map_err(|e| miette!("Failed to serialize record: {e}"))?; 181 + 182 + let rk = Rkey::new(rkey).map_err(|e| miette!("Invalid rkey: {e}"))?; 183 + let request = PutRecord::new() 184 + .repo(AtIdentifier::Did(did)) 185 + .collection(nsid) 186 + .rkey(RecordKey(rk)) 187 + .record(data) 188 + .build(); 189 + 190 + let response = self 191 + .session 192 + .send(request) 193 + .await 194 + .map_err(|e| miette!("PDS putRecord failed: {e}"))?; 195 + 196 + response 197 + .into_output() 198 + .map_err(|e| miette!("Failed to parse putRecord response: {e}"))?; 199 + 200 + Ok(()) 201 + } 202 + 203 + /// Delete a record 204 + pub async fn delete_record(&self, collection: &str, rkey: &str) -> Result<()> { 205 + let did = jacquard::types::string::Did::new(&self.did) 206 + .map_err(|e| miette!("Invalid DID: {e}"))?; 207 + let nsid = jacquard::types::string::Nsid::new(collection) 208 + .map_err(|e| miette!("Invalid NSID: {e}"))?; 209 + 210 + let rk = Rkey::new(rkey).map_err(|e| miette!("Invalid rkey: {e}"))?; 211 + let request = DeleteRecord::new() 212 + .repo(AtIdentifier::Did(did)) 213 + .collection(nsid) 214 + .rkey(RecordKey(rk)) 215 + .build(); 216 + 217 + self.session 218 + .send(request) 219 + .await 220 + .map_err(|e| miette!("PDS deleteRecord failed: {e}"))?; 221 + 222 + Ok(()) 223 + } 224 + 225 + /// Fetch bookmarks joined with annotations 226 + pub async fn fetch_enriched_bookmarks( 227 + &self, 228 + limit: Option<i64>, 229 + ) -> Result<Vec<EnrichedBookmark>> { 230 + let bookmarks = self 231 + .list_records(BOOKMARK_COLLECTION, limit, true) 232 + .await?; 233 + let annotations = self 234 + .list_records(ANNOTATION_COLLECTION, None, true) 235 + .await?; 236 + 237 + // Build annotation map keyed by rkey 238 + let mut annotation_map = std::collections::HashMap::new(); 239 + for record in &annotations { 240 + let rkey = rkey_from_uri(&record.uri); 241 + if let Ok(annotation) = 242 + serde_json::from_value::<AnnotationRecord>(record.value.clone()) 243 + { 244 + annotation_map.insert(rkey, annotation); 245 + } 246 + } 247 + 248 + // Join bookmarks with annotations 249 + let enriched = bookmarks 250 + .iter() 251 + .map(|record| { 252 + let rkey = rkey_from_uri(&record.uri); 253 + let annotation = annotation_map.get(&rkey); 254 + let bookmark: BookmarkRecord = 255 + serde_json::from_value(record.value.clone()).unwrap_or(BookmarkRecord { 256 + subject: String::new(), 257 + created_at: String::new(), 258 + tags: Vec::new(), 259 + }); 260 + 261 + EnrichedBookmark { 262 + uri: record.uri.clone(), 263 + cid: record.cid.clone(), 264 + rkey: rkey.clone(), 265 + subject: bookmark.subject, 266 + created_at: bookmark.created_at, 267 + tags: bookmark.tags, 268 + title: annotation.and_then(|a| a.title.clone()), 269 + description: annotation.and_then(|a| a.description.clone()), 270 + favicon: annotation.and_then(|a| a.favicon.clone()), 271 + image: annotation.and_then(|a| a.image.clone()), 272 + note: annotation.and_then(|a| a.note.clone()), 273 + } 274 + }) 275 + .collect(); 276 + 277 + Ok(enriched) 278 + } 279 + }
+32
src/kipclip/refs.rs
··· 1 + use miette::{Result, miette}; 2 + 3 + use crate::kipclip::types::EnrichedBookmark; 4 + 5 + /// Resolve a bookmark reference (rkey prefix) to a full bookmark. 6 + /// Requires at least 4 characters for prefix matching. 7 + pub fn resolve_ref<'a>( 8 + prefix: &str, 9 + bookmarks: &'a [EnrichedBookmark], 10 + ) -> Result<&'a EnrichedBookmark> { 11 + if prefix.len() < 4 { 12 + return Err(miette!("Bookmark ref must be at least 4 characters")); 13 + } 14 + 15 + let matches: Vec<&EnrichedBookmark> = bookmarks 16 + .iter() 17 + .filter(|b| b.rkey.starts_with(prefix)) 18 + .collect(); 19 + 20 + match matches.len() { 21 + 0 => Err(miette!("No bookmark found matching ref '{prefix}'")), 22 + 1 => Ok(matches[0]), 23 + n => Err(miette!( 24 + "Ambiguous ref '{prefix}' matches {n} bookmarks. Use a longer prefix." 25 + )), 26 + } 27 + } 28 + 29 + /// Extract rkey from an AT URI (last path segment) 30 + pub fn rkey_from_uri(uri: &str) -> String { 31 + uri.split('/').last().unwrap_or("").to_string() 32 + }
+80
src/kipclip/types.rs
··· 1 + use serde::{Deserialize, Serialize}; 2 + 3 + /// AT Protocol collection names 4 + pub const BOOKMARK_COLLECTION: &str = "community.lexicon.bookmarks.bookmark"; 5 + pub const ANNOTATION_COLLECTION: &str = "com.kipclip.annotation"; 6 + 7 + /// Bookmark record stored on PDS (community.lexicon.bookmarks.bookmark) 8 + #[derive(Debug, Clone, Serialize, Deserialize)] 9 + #[serde(rename_all = "camelCase")] 10 + pub struct BookmarkRecord { 11 + pub subject: String, 12 + pub created_at: String, 13 + #[serde(default, skip_serializing_if = "Vec::is_empty")] 14 + pub tags: Vec<String>, 15 + } 16 + 17 + /// Annotation sidecar record (com.kipclip.annotation) 18 + #[derive(Debug, Clone, Serialize, Deserialize)] 19 + #[serde(rename_all = "camelCase")] 20 + pub struct AnnotationRecord { 21 + pub subject: String, 22 + pub created_at: String, 23 + #[serde(skip_serializing_if = "Option::is_none")] 24 + pub note: Option<String>, 25 + #[serde(skip_serializing_if = "Option::is_none")] 26 + pub title: Option<String>, 27 + #[serde(skip_serializing_if = "Option::is_none")] 28 + pub description: Option<String>, 29 + #[serde(skip_serializing_if = "Option::is_none")] 30 + pub favicon: Option<String>, 31 + #[serde(skip_serializing_if = "Option::is_none")] 32 + pub image: Option<String>, 33 + } 34 + 35 + /// URL metadata from enrichment endpoint 36 + #[derive(Debug, Clone, Serialize, Deserialize)] 37 + pub struct UrlMetadata { 38 + pub title: Option<String>, 39 + pub description: Option<String>, 40 + pub favicon: Option<String>, 41 + pub image: Option<String>, 42 + } 43 + 44 + /// Enriched bookmark combining bookmark + annotation data 45 + #[derive(Debug, Clone, Serialize, Deserialize)] 46 + #[serde(rename_all = "camelCase")] 47 + pub struct EnrichedBookmark { 48 + pub uri: String, 49 + pub cid: String, 50 + pub rkey: String, 51 + pub subject: String, 52 + pub created_at: String, 53 + #[serde(default)] 54 + pub tags: Vec<String>, 55 + pub title: Option<String>, 56 + pub description: Option<String>, 57 + pub favicon: Option<String>, 58 + pub image: Option<String>, 59 + pub note: Option<String>, 60 + } 61 + 62 + /// A PDS record as returned by listRecords 63 + #[derive(Debug, Clone)] 64 + pub struct PdsRecord { 65 + pub uri: String, 66 + pub cid: String, 67 + pub value: serde_json::Value, 68 + } 69 + 70 + /// Response from com.atproto.repo.createRecord 71 + #[derive(Debug, Clone)] 72 + pub struct CreateRecordResponse { 73 + pub uri: String, 74 + } 75 + 76 + /// Response from com.atproto.repo.getRecord 77 + #[derive(Debug, Clone)] 78 + pub struct GetRecordResponse { 79 + pub value: serde_json::Value, 80 + }
+175
src/main.rs
··· 1 + mod commands; 2 + mod kipclip; 3 + 4 + use clap::{Parser, Subcommand}; 5 + use miette::Result; 6 + 7 + use kipclip::auth; 8 + use kipclip::pds::PdsClient; 9 + 10 + #[derive(Parser)] 11 + #[command(name = "kip", about = "kipclip.com CLI – AT Protocol bookmark manager")] 12 + #[command(version)] 13 + struct Cli { 14 + #[command(subcommand)] 15 + command: Commands, 16 + } 17 + 18 + #[derive(Subcommand)] 19 + enum Commands { 20 + /// Open browser for AT Protocol OAuth login 21 + Login { 22 + /// Your AT Protocol handle (e.g. tijs.org) 23 + handle: String, 24 + }, 25 + /// Clear stored session 26 + Logout, 27 + /// Show current user (DID, handle) 28 + Whoami { 29 + /// Output as JSON 30 + #[arg(long)] 31 + json: bool, 32 + }, 33 + /// Add a bookmark 34 + Add { 35 + /// URL to bookmark 36 + url: String, 37 + /// Tags to apply 38 + #[arg(short = 't', long = "tag")] 39 + tags: Vec<String>, 40 + }, 41 + /// List bookmarks (newest first) 42 + List { 43 + /// Filter by tag 44 + #[arg(short = 't', long = "tag")] 45 + tag: Option<String>, 46 + /// Max number of bookmarks to show 47 + #[arg(short = 'n', long)] 48 + limit: Option<u32>, 49 + /// Search by title, URL, or description 50 + #[arg(long)] 51 + search: Option<String>, 52 + /// Output as JSON 53 + #[arg(long)] 54 + json: bool, 55 + }, 56 + /// Search bookmarks (alias for: list --search) 57 + Search { 58 + /// Search query 59 + query: String, 60 + /// Output as JSON 61 + #[arg(long)] 62 + json: bool, 63 + }, 64 + /// Open bookmark URL in browser 65 + Open { 66 + /// Bookmark ref (rkey prefix, min 4 chars) 67 + #[arg(name = "ref")] 68 + reference: String, 69 + }, 70 + /// Delete bookmark + annotation 71 + Delete { 72 + /// Bookmark ref (rkey prefix, min 4 chars) 73 + #[arg(name = "ref")] 74 + reference: String, 75 + /// Skip confirmation 76 + #[arg(long)] 77 + force: bool, 78 + }, 79 + /// Set or clear a note on a bookmark 80 + Note { 81 + /// Bookmark ref (rkey prefix, min 4 chars) 82 + #[arg(name = "ref")] 83 + reference: String, 84 + /// Note text (omit to clear) 85 + text: Option<String>, 86 + }, 87 + /// Add tags to a bookmark 88 + Tag { 89 + /// Bookmark ref (rkey prefix, min 4 chars) 90 + #[arg(name = "ref")] 91 + reference: String, 92 + /// Tags to add 93 + #[arg(name = "tag", required = true)] 94 + tags: Vec<String>, 95 + }, 96 + /// Remove tags from a bookmark 97 + Untag { 98 + /// Bookmark ref (rkey prefix, min 4 chars) 99 + #[arg(name = "ref")] 100 + reference: String, 101 + /// Tags to remove 102 + #[arg(name = "tag", required = true)] 103 + tags: Vec<String>, 104 + }, 105 + /// List all tags with counts 106 + Tags { 107 + /// Output as JSON 108 + #[arg(long)] 109 + json: bool, 110 + }, 111 + } 112 + 113 + /// Build a PDS client from the stored session 114 + async fn make_pds_client() -> Result<PdsClient> { 115 + let session = auth::restore_session().await?; 116 + let info = auth::get_session_info()?; 117 + 118 + Ok(PdsClient { 119 + session, 120 + did: info.did, 121 + }) 122 + } 123 + 124 + #[tokio::main] 125 + async fn main() -> Result<()> { 126 + let cli = Cli::parse(); 127 + 128 + match cli.command { 129 + Commands::Login { handle } => commands::login::run(&handle).await, 130 + Commands::Logout => commands::logout::run(), 131 + Commands::Whoami { json } => commands::whoami::run(json), 132 + 133 + Commands::Add { url, tags } => { 134 + let pds = make_pds_client().await?; 135 + commands::add::run(&pds, &url, &tags).await 136 + } 137 + Commands::List { 138 + tag, 139 + limit, 140 + search, 141 + json, 142 + } => { 143 + let pds = make_pds_client().await?; 144 + commands::list::run(&pds, tag.as_deref(), search.as_deref(), limit, json).await 145 + } 146 + Commands::Search { query, json } => { 147 + let pds = make_pds_client().await?; 148 + commands::search::run(&pds, &query, json).await 149 + } 150 + Commands::Open { reference } => { 151 + let pds = make_pds_client().await?; 152 + commands::open::run(&pds, &reference).await 153 + } 154 + Commands::Delete { reference, force } => { 155 + let pds = make_pds_client().await?; 156 + commands::delete::run(&pds, &reference, force).await 157 + } 158 + Commands::Note { reference, text } => { 159 + let pds = make_pds_client().await?; 160 + commands::note::run(&pds, &reference, text.as_deref()).await 161 + } 162 + Commands::Tag { reference, tags } => { 163 + let pds = make_pds_client().await?; 164 + commands::tag::run(&pds, &reference, &tags).await 165 + } 166 + Commands::Untag { reference, tags } => { 167 + let pds = make_pds_client().await?; 168 + commands::untag::run(&pds, &reference, &tags).await 169 + } 170 + Commands::Tags { json } => { 171 + let pds = make_pds_client().await?; 172 + commands::tags::run(&pds, json).await 173 + } 174 + } 175 + }