This repository has no description
0

Configure Feed

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

wip: auth in bobbin

Signed-off-by: Seongmin Lee <git@boltless.me>

author
Seongmin Lee
date (Aug 1, 2026, 8:40 PM +0900) commit 1ba71392 parent 09a96912 change-id mtvvvqsq
+699 -56
+644 -46
Cargo.lock
··· 10 10 11 11 [[package]] 12 12 name = "aead" 13 + version = "0.5.2" 14 + source = "registry+https://github.com/rust-lang/crates.io-index" 15 + checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" 16 + dependencies = [ 17 + "crypto-common 0.1.6", 18 + "generic-array 0.14.9", 19 + ] 20 + 21 + [[package]] 22 + name = "aead" 13 23 version = "0.6.1" 14 24 source = "registry+https://github.com/rust-lang/crates.io-index" 15 25 checksum = "1973cfbc1a2daf9cf550e74e1f088c28e7f7d8c1e1418fb6c9dc5184b7e84c99" 16 26 dependencies = [ 17 27 "crypto-common 0.2.2", 18 - "inout", 28 + "inout 0.2.2", 29 + ] 30 + 31 + [[package]] 32 + name = "aes" 33 + version = "0.8.4" 34 + source = "registry+https://github.com/rust-lang/crates.io-index" 35 + checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" 36 + dependencies = [ 37 + "cfg-if", 38 + "cipher 0.4.4", 39 + "cpufeatures 0.2.17", 19 40 ] 20 41 21 42 [[package]] ··· 24 45 source = "registry+https://github.com/rust-lang/crates.io-index" 25 46 checksum = "f1fc76eaeac4c9164506c466d4ffdd8ec9d0c5bf57ee97177c4d8eceb3a0e138" 26 47 dependencies = [ 27 - "cipher", 48 + "cipher 0.5.2", 28 49 "cpubits", 29 50 "cpufeatures 0.3.0", 30 51 "zeroize", ··· 32 53 33 54 [[package]] 34 55 name = "aes-gcm" 56 + version = "0.10.3" 57 + source = "registry+https://github.com/rust-lang/crates.io-index" 58 + checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1" 59 + dependencies = [ 60 + "aead 0.5.2", 61 + "aes 0.8.4", 62 + "cipher 0.4.4", 63 + "ctr 0.9.2", 64 + "ghash 0.5.1", 65 + "subtle", 66 + ] 67 + 68 + [[package]] 69 + name = "aes-gcm" 35 70 version = "0.11.0-rc.4" 36 71 source = "registry+https://github.com/rust-lang/crates.io-index" 37 72 checksum = "da8c919c118108f144adecad74b425b804ad075580d605d9b33c2d6d1c62a2f8" 38 73 dependencies = [ 39 - "aead", 40 - "aes", 41 - "cipher", 42 - "ctr", 43 - "ghash", 74 + "aead 0.6.1", 75 + "aes 0.9.1", 76 + "cipher 0.5.2", 77 + "ctr 0.10.1", 78 + "ghash 0.6.0", 44 79 "subtle", 45 80 "zeroize", 46 81 ] ··· 453 488 checksum = "31b698c5f9a010f6573133b09e0de5408834d0c82f8d7475a89fc1867a71cd90" 454 489 dependencies = [ 455 490 "axum-core", 491 + "axum-macros", 456 492 "base64", 457 493 "bytes", 458 494 "form_urlencoded", ··· 502 538 ] 503 539 504 540 [[package]] 541 + name = "axum-extra" 542 + version = "0.10.3" 543 + source = "registry+https://github.com/rust-lang/crates.io-index" 544 + checksum = "9963ff19f40c6102c76756ef0a46004c0d58957d87259fc9208ff8441c12ab96" 545 + dependencies = [ 546 + "axum", 547 + "axum-core", 548 + "bytes", 549 + "cookie", 550 + "futures-util", 551 + "http", 552 + "http-body", 553 + "http-body-util", 554 + "mime", 555 + "pin-project-lite", 556 + "rustversion", 557 + "serde_core", 558 + "tower-layer", 559 + "tower-service", 560 + "tracing", 561 + ] 562 + 563 + [[package]] 564 + name = "axum-macros" 565 + version = "0.5.1" 566 + source = "registry+https://github.com/rust-lang/crates.io-index" 567 + checksum = "7aa268c23bfbbd2c4363b9cd302a4f504fb2a9dfe7e3451d66f35dd392e20aca" 568 + dependencies = [ 569 + "proc-macro2", 570 + "quote", 571 + "syn 2.0.118", 572 + ] 573 + 574 + [[package]] 505 575 name = "base-x" 506 576 version = "0.2.11" 507 577 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 666 736 checksum = "62ce3946557b35e71d1bbe07ec385073ce9eda05043f95de134eb578fcf1a298" 667 737 dependencies = [ 668 738 "byteorder", 669 - "cipher", 739 + "cipher 0.5.2", 670 740 ] 671 741 672 742 [[package]] ··· 916 986 version = "0.0.1" 917 987 dependencies = [ 918 988 "axum", 989 + "base64", 919 990 "bobbin-edge-index", 920 991 "bobbin-knot-proxy", 921 992 "bobbin-record-lru", ··· 927 998 "chrono", 928 999 "futures", 929 1000 "http", 1001 + "jacquard-axum", 930 1002 "jacquard-common", 931 1003 "jacquard-identity", 932 1004 "reqwest 0.13.1", 1005 + "scc", 933 1006 "serde", 934 1007 "serde_json", 935 1008 "thiserror 2.0.18", ··· 1063 1136 source = "registry+https://github.com/rust-lang/crates.io-index" 1064 1137 checksum = "ce2dc9ee5f88d11e0beb842c88b33c8a5cf0d1329c4b19494af42b07dbfe8896" 1065 1138 dependencies = [ 1066 - "cipher", 1139 + "cipher 0.5.2", 1067 1140 ] 1068 1141 1069 1142 [[package]] ··· 1136 1209 checksum = "6f8d983286843e49675a4b7a2d174efe136dc93a18d69130dd18198a6c167601" 1137 1210 dependencies = [ 1138 1211 "cfg-if", 1139 - "cipher", 1212 + "cipher 0.5.2", 1140 1213 "cpufeatures 0.3.0", 1141 1214 "rand_core 0.10.1", 1142 1215 "zeroize", ··· 1198 1271 1199 1272 [[package]] 1200 1273 name = "cipher" 1274 + version = "0.4.4" 1275 + source = "registry+https://github.com/rust-lang/crates.io-index" 1276 + checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" 1277 + dependencies = [ 1278 + "crypto-common 0.1.6", 1279 + "inout 0.1.4", 1280 + ] 1281 + 1282 + [[package]] 1283 + name = "cipher" 1201 1284 version = "0.5.2" 1202 1285 source = "registry+https://github.com/rust-lang/crates.io-index" 1203 1286 checksum = "e8cf2a2c93cd704877c0858356ed03480ff301ee950b43f1cbe4573b088bfa6c" 1204 1287 dependencies = [ 1205 1288 "block-buffer 0.12.1", 1206 1289 "crypto-common 0.2.2", 1207 - "inout", 1290 + "inout 0.2.2", 1208 1291 "zeroize", 1209 1292 ] 1210 1293 ··· 1375 1458 checksum = "2f421161cb492475f1661ddc9815a745a1c894592070661180fdec3d4872e9c3" 1376 1459 1377 1460 [[package]] 1461 + name = "cookie" 1462 + version = "0.18.1" 1463 + source = "registry+https://github.com/rust-lang/crates.io-index" 1464 + checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" 1465 + dependencies = [ 1466 + "aes-gcm 0.10.3", 1467 + "base64", 1468 + "percent-encoding", 1469 + "rand 0.8.6", 1470 + "subtle", 1471 + "time", 1472 + "version_check", 1473 + ] 1474 + 1475 + [[package]] 1378 1476 name = "cordyceps" 1379 1477 version = "0.3.4" 1380 1478 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 1558 1656 checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 1559 1657 dependencies = [ 1560 1658 "generic-array 0.14.9", 1659 + "rand_core 0.6.4", 1561 1660 "typenum", 1562 1661 ] 1563 1662 ··· 1580 1679 dependencies = [ 1581 1680 "crypto-bigint 0.7.4", 1582 1681 "rand_core 0.10.1", 1682 + ] 1683 + 1684 + [[package]] 1685 + name = "ctr" 1686 + version = "0.9.2" 1687 + source = "registry+https://github.com/rust-lang/crates.io-index" 1688 + checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" 1689 + dependencies = [ 1690 + "cipher 0.4.4", 1583 1691 ] 1584 1692 1585 1693 [[package]] ··· 1588 1696 source = "registry+https://github.com/rust-lang/crates.io-index" 1589 1697 checksum = "baaca1c4b237092596f64d571e9db6ce4109c4ef9742e27590f1709594461f21" 1590 1698 dependencies = [ 1591 - "cipher", 1699 + "cipher 0.5.2", 1592 1700 ] 1593 1701 1594 1702 [[package]] ··· 1603 1711 1604 1712 [[package]] 1605 1713 name = "curve25519-dalek" 1714 + version = "4.1.3" 1715 + source = "registry+https://github.com/rust-lang/crates.io-index" 1716 + checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" 1717 + dependencies = [ 1718 + "cfg-if", 1719 + "cpufeatures 0.2.17", 1720 + "curve25519-dalek-derive", 1721 + "digest 0.10.7", 1722 + "fiat-crypto 0.2.9", 1723 + "rustc_version", 1724 + "subtle", 1725 + "zeroize", 1726 + ] 1727 + 1728 + [[package]] 1729 + name = "curve25519-dalek" 1606 1730 version = "5.0.0-rc.0" 1607 1731 source = "registry+https://github.com/rust-lang/crates.io-index" 1608 1732 checksum = "4f359e08ca85e7bd759e1fd933ff2bccd81864c60a8fba0e259c7f822b0924bf" ··· 1611 1735 "cpufeatures 0.3.0", 1612 1736 "curve25519-dalek-derive", 1613 1737 "digest 0.11.3", 1614 - "fiat-crypto", 1738 + "fiat-crypto 0.3.0", 1615 1739 "rustc_version", 1616 1740 "subtle", 1617 1741 "zeroize", ··· 1855 1979 source = "registry+https://github.com/rust-lang/crates.io-index" 1856 1980 checksum = "916a94e407b54f9034d71dd748234cd1e516ced6284009906ae246f177eafe5a" 1857 1981 dependencies = [ 1858 - "cipher", 1982 + "cipher 0.5.2", 1859 1983 ] 1860 1984 1861 1985 [[package]] ··· 1967 2091 1968 2092 [[package]] 1969 2093 name = "ed25519" 2094 + version = "2.2.3" 2095 + source = "registry+https://github.com/rust-lang/crates.io-index" 2096 + checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" 2097 + dependencies = [ 2098 + "pkcs8 0.10.2", 2099 + "signature 2.2.0", 2100 + ] 2101 + 2102 + [[package]] 2103 + name = "ed25519" 1970 2104 version = "3.0.0" 1971 2105 source = "registry+https://github.com/rust-lang/crates.io-index" 1972 2106 checksum = "29fcf32e6c73d1079f83ab4d782de2d81620346a5f38c6237a86a22f8368980a" ··· 1977 2111 1978 2112 [[package]] 1979 2113 name = "ed25519-dalek" 2114 + version = "2.2.0" 2115 + source = "registry+https://github.com/rust-lang/crates.io-index" 2116 + checksum = "70e796c081cee67dc755e1a36a0a172b897fab85fc3f6bc48307991f64e4eca9" 2117 + dependencies = [ 2118 + "curve25519-dalek 4.1.3", 2119 + "ed25519 2.2.3", 2120 + "rand_core 0.6.4", 2121 + "serde", 2122 + "sha2 0.10.9", 2123 + "subtle", 2124 + "zeroize", 2125 + ] 2126 + 2127 + [[package]] 2128 + name = "ed25519-dalek" 1980 2129 version = "3.0.0-rc.0" 1981 2130 source = "registry+https://github.com/rust-lang/crates.io-index" 1982 2131 checksum = "b011170fe4f04665565b4110afef66774fe9ffff278f3eb5b81cc73d26e27d60" 1983 2132 dependencies = [ 1984 - "curve25519-dalek", 1985 - "ed25519", 2133 + "curve25519-dalek 5.0.0-rc.0", 2134 + "ed25519 3.0.0", 1986 2135 "rand_core 0.10.1", 1987 2136 "serde", 1988 2137 "sha2 0.11.0", ··· 2009 2158 "ff 0.13.1", 2010 2159 "generic-array 0.14.9", 2011 2160 "group 0.13.0", 2161 + "hkdf 0.12.4", 2012 2162 "pem-rfc7468 0.7.0", 2013 2163 "pkcs8 0.10.2", 2014 2164 "rand_core 0.6.4", ··· 2029 2179 "digest 0.11.3", 2030 2180 "ff 0.14.0", 2031 2181 "group 0.14.0", 2032 - "hkdf", 2182 + "hkdf 0.13.0", 2033 2183 "hybrid-array", 2034 2184 "once_cell", 2035 2185 "pem-rfc7468 1.0.0", ··· 2189 2339 2190 2340 [[package]] 2191 2341 name = "fiat-crypto" 2342 + version = "0.2.9" 2343 + source = "registry+https://github.com/rust-lang/crates.io-index" 2344 + checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" 2345 + 2346 + [[package]] 2347 + name = "fiat-crypto" 2192 2348 version = "0.3.0" 2193 2349 source = "registry+https://github.com/rust-lang/crates.io-index" 2194 2350 checksum = "64cd1e32ddd350061ae6edb1b082d7c54915b5c672c389143b9a63403a109f24" ··· 2291 2447 checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c" 2292 2448 2293 2449 [[package]] 2450 + name = "futf" 2451 + version = "0.1.5" 2452 + source = "registry+https://github.com/rust-lang/crates.io-index" 2453 + checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" 2454 + dependencies = [ 2455 + "mac", 2456 + "new_debug_unreachable", 2457 + ] 2458 + 2459 + [[package]] 2294 2460 name = "futures" 2295 2461 version = "0.3.32" 2296 2462 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2516 2682 2517 2683 [[package]] 2518 2684 name = "ghash" 2685 + version = "0.5.1" 2686 + source = "registry+https://github.com/rust-lang/crates.io-index" 2687 + checksum = "f0d8a4362ccb29cb0b265253fb0a2728f592895ee6854fd9bc13f2ffda266ff1" 2688 + dependencies = [ 2689 + "opaque-debug", 2690 + "polyval 0.6.2", 2691 + ] 2692 + 2693 + [[package]] 2694 + name = "ghash" 2519 2695 version = "0.6.0" 2520 2696 source = "registry+https://github.com/rust-lang/crates.io-index" 2521 2697 checksum = "2eecf2d5dc9b66b732b97707a0210906b1d30523eb773193ab777c0c84b3e8d5" 2522 2698 dependencies = [ 2523 - "polyval", 2699 + "polyval 0.7.1", 2524 2700 ] 2525 2701 2526 2702 [[package]] ··· 3442 3618 ] 3443 3619 3444 3620 [[package]] 3621 + name = "gloo-storage" 3622 + version = "0.3.0" 3623 + source = "registry+https://github.com/rust-lang/crates.io-index" 3624 + checksum = "fbc8031e8c92758af912f9bc08fbbadd3c6f3cfcbf6b64cdf3d6a81f0139277a" 3625 + dependencies = [ 3626 + "gloo-utils", 3627 + "js-sys", 3628 + "serde", 3629 + "serde_json", 3630 + "thiserror 1.0.69", 3631 + "wasm-bindgen", 3632 + "web-sys", 3633 + ] 3634 + 3635 + [[package]] 3636 + name = "gloo-utils" 3637 + version = "0.2.0" 3638 + source = "registry+https://github.com/rust-lang/crates.io-index" 3639 + checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" 3640 + dependencies = [ 3641 + "js-sys", 3642 + "serde", 3643 + "serde_json", 3644 + "wasm-bindgen", 3645 + "web-sys", 3646 + ] 3647 + 3648 + [[package]] 3445 3649 name = "governor" 3446 3650 version = "0.10.4" 3447 3651 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 3709 3913 3710 3914 [[package]] 3711 3915 name = "hkdf" 3916 + version = "0.12.4" 3917 + source = "registry+https://github.com/rust-lang/crates.io-index" 3918 + checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" 3919 + dependencies = [ 3920 + "hmac 0.12.1", 3921 + ] 3922 + 3923 + [[package]] 3924 + name = "hkdf" 3712 3925 version = "0.13.0" 3713 3926 source = "registry+https://github.com/rust-lang/crates.io-index" 3714 3927 checksum = "4aaa26c720c68b866f2c96ef5c1264b3e6f473fe5d4ce61cd44bbe913e553018" ··· 3735 3948 ] 3736 3949 3737 3950 [[package]] 3951 + name = "html5ever" 3952 + version = "0.27.0" 3953 + source = "registry+https://github.com/rust-lang/crates.io-index" 3954 + checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" 3955 + dependencies = [ 3956 + "log", 3957 + "mac", 3958 + "markup5ever", 3959 + "proc-macro2", 3960 + "quote", 3961 + "syn 2.0.118", 3962 + ] 3963 + 3964 + [[package]] 3738 3965 name = "htmlescape" 3739 3966 version = "0.3.1" 3740 3967 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4019 4246 4020 4247 [[package]] 4021 4248 name = "inout" 4249 + version = "0.1.4" 4250 + source = "registry+https://github.com/rust-lang/crates.io-index" 4251 + checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" 4252 + dependencies = [ 4253 + "generic-array 0.14.9", 4254 + ] 4255 + 4256 + [[package]] 4257 + name = "inout" 4022 4258 version = "0.2.2" 4023 4259 source = "registry+https://github.com/rust-lang/crates.io-index" 4024 4260 checksum = "4250ce6452e92010fdf7268ccc5d14faa80bb12fc741938534c58f16804e03c7" ··· 4119 4355 checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" 4120 4356 4121 4357 [[package]] 4358 + name = "jacquard" 4359 + version = "0.12.1" 4360 + source = "registry+https://github.com/rust-lang/crates.io-index" 4361 + checksum = "b5055461df426c9d0ac379bcf8f59177ff4c29b4ea2b23bd98c773061b863bbe" 4362 + dependencies = [ 4363 + "bytes", 4364 + "getrandom 0.2.17", 4365 + "gloo-storage", 4366 + "http", 4367 + "jacquard-api", 4368 + "jacquard-common", 4369 + "jacquard-identity", 4370 + "jacquard-oauth", 4371 + "jose-jwk", 4372 + "miette", 4373 + "regex", 4374 + "regex-lite", 4375 + "reqwest 0.12.28", 4376 + "serde", 4377 + "serde_html_form", 4378 + "serde_json", 4379 + "smol_str", 4380 + "thiserror 2.0.18", 4381 + "tokio", 4382 + "trait-variant", 4383 + "webpage", 4384 + ] 4385 + 4386 + [[package]] 4387 + name = "jacquard-api" 4388 + version = "0.12.1" 4389 + source = "registry+https://github.com/rust-lang/crates.io-index" 4390 + checksum = "b5c803a3c097e3ef8aea63747b4fe3fc9e339cd18272dd0366b1d10dd90d5c3f" 4391 + dependencies = [ 4392 + "jacquard-common", 4393 + "jacquard-derive", 4394 + "jacquard-lexicon", 4395 + "miette", 4396 + "serde", 4397 + "thiserror 2.0.18", 4398 + ] 4399 + 4400 + [[package]] 4401 + name = "jacquard-axum" 4402 + version = "0.12.1" 4403 + source = "registry+https://github.com/rust-lang/crates.io-index" 4404 + checksum = "b4fa141b5bc2c34a4070cdab72b93b605f3a452e7e6663920e7c6a87925cd5ee" 4405 + dependencies = [ 4406 + "axum", 4407 + "axum-extra", 4408 + "base64", 4409 + "bytes", 4410 + "chrono", 4411 + "jacquard", 4412 + "jacquard-common", 4413 + "jacquard-derive", 4414 + "jacquard-identity", 4415 + "miette", 4416 + "mini-moka-wasm", 4417 + "multibase", 4418 + "serde", 4419 + "serde_html_form", 4420 + "serde_json", 4421 + "thiserror 2.0.18", 4422 + "tokio", 4423 + "tower-http 0.6.11", 4424 + "tracing", 4425 + ] 4426 + 4427 + [[package]] 4122 4428 name = "jacquard-common" 4123 4429 version = "0.12.1" 4124 4430 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4235 4541 ] 4236 4542 4237 4543 [[package]] 4544 + name = "jacquard-oauth" 4545 + version = "0.12.1" 4546 + source = "registry+https://github.com/rust-lang/crates.io-index" 4547 + checksum = "f5da2643242cbe906e707712117eefcc37b351a5ff12909f944ef556e523bfd9" 4548 + dependencies = [ 4549 + "base64", 4550 + "bytes", 4551 + "chrono", 4552 + "dashmap", 4553 + "ed25519-dalek 2.2.0", 4554 + "elliptic-curve 0.13.8", 4555 + "http", 4556 + "jacquard-common", 4557 + "jacquard-identity", 4558 + "jose-jwa", 4559 + "jose-jwk", 4560 + "k256", 4561 + "miette", 4562 + "p256 0.13.2", 4563 + "p384 0.13.1", 4564 + "rand 0.8.6", 4565 + "reqwest 0.12.28", 4566 + "serde", 4567 + "serde_html_form", 4568 + "serde_json", 4569 + "sha2 0.10.9", 4570 + "smallvec", 4571 + "smol_str", 4572 + "thiserror 2.0.18", 4573 + "tokio", 4574 + "trait-variant", 4575 + ] 4576 + 4577 + [[package]] 4238 4578 name = "jiff" 4239 4579 version = "0.2.29" 4240 4580 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4331 4671 ] 4332 4672 4333 4673 [[package]] 4674 + name = "jose-b64" 4675 + version = "0.1.2" 4676 + source = "registry+https://github.com/rust-lang/crates.io-index" 4677 + checksum = "bec69375368709666b21c76965ce67549f2d2db7605f1f8707d17c9656801b56" 4678 + dependencies = [ 4679 + "base64ct", 4680 + "serde", 4681 + "subtle", 4682 + "zeroize", 4683 + ] 4684 + 4685 + [[package]] 4686 + name = "jose-jwa" 4687 + version = "0.1.2" 4688 + source = "registry+https://github.com/rust-lang/crates.io-index" 4689 + checksum = "9ab78e053fe886a351d67cf0d194c000f9d0dcb92906eb34d853d7e758a4b3a7" 4690 + dependencies = [ 4691 + "serde", 4692 + ] 4693 + 4694 + [[package]] 4695 + name = "jose-jwk" 4696 + version = "0.1.2" 4697 + source = "registry+https://github.com/rust-lang/crates.io-index" 4698 + checksum = "280fa263807fe0782ecb6f2baadc28dffc04e00558a58e33bfdb801d11fd58e7" 4699 + dependencies = [ 4700 + "jose-b64", 4701 + "jose-jwa", 4702 + "p256 0.13.2", 4703 + "p384 0.13.1", 4704 + "rsa 0.9.10", 4705 + "serde", 4706 + "zeroize", 4707 + ] 4708 + 4709 + [[package]] 4334 4710 name = "js-sys" 4335 4711 version = "0.3.102" 4336 4712 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4803 5179 name = "knot-secrets" 4804 5180 version = "2.0.0" 4805 5181 dependencies = [ 4806 - "aes-gcm", 5182 + "aes-gcm 0.11.0-rc.4", 4807 5183 "base64", 4808 - "hkdf", 5184 + "hkdf 0.13.0", 4809 5185 "k256", 4810 5186 "knot-resource", 4811 5187 "knot-runtime", ··· 5039 5415 version = "1.5.0" 5040 5416 source = "registry+https://github.com/rust-lang/crates.io-index" 5041 5417 checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 5418 + dependencies = [ 5419 + "spin 0.9.8", 5420 + ] 5042 5421 5043 5422 [[package]] 5044 5423 name = "levenshtein_automata" ··· 5051 5430 version = "0.2.186" 5052 5431 source = "registry+https://github.com/rust-lang/crates.io-index" 5053 5432 checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" 5433 + 5434 + [[package]] 5435 + name = "libm" 5436 + version = "0.2.16" 5437 + source = "registry+https://github.com/rust-lang/crates.io-index" 5438 + checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" 5054 5439 5055 5440 [[package]] 5056 5441 name = "libsqlite3-sys" ··· 5140 5525 checksum = "7ef0d4ed8669f8f8826eb00dc878084aa8f253506c4fd5e8f58f5bce72ddb97e" 5141 5526 5142 5527 [[package]] 5528 + name = "mac" 5529 + version = "0.1.1" 5530 + source = "registry+https://github.com/rust-lang/crates.io-index" 5531 + checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 5532 + 5533 + [[package]] 5143 5534 name = "maitake-sync" 5144 5535 version = "0.1.2" 5145 5536 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5153 5544 ] 5154 5545 5155 5546 [[package]] 5547 + name = "markup5ever" 5548 + version = "0.12.1" 5549 + source = "registry+https://github.com/rust-lang/crates.io-index" 5550 + checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" 5551 + dependencies = [ 5552 + "log", 5553 + "phf", 5554 + "phf_codegen", 5555 + "string_cache", 5556 + "string_cache_codegen", 5557 + "tendril", 5558 + ] 5559 + 5560 + [[package]] 5561 + name = "markup5ever_rcdom" 5562 + version = "0.3.0" 5563 + source = "registry+https://github.com/rust-lang/crates.io-index" 5564 + checksum = "edaa21ab3701bfee5099ade5f7e1f84553fd19228cf332f13cd6e964bf59be18" 5565 + dependencies = [ 5566 + "html5ever", 5567 + "markup5ever", 5568 + "tendril", 5569 + "xml5ever", 5570 + ] 5571 + 5572 + [[package]] 5156 5573 name = "match-lookup" 5157 5574 version = "0.1.2" 5158 5575 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5423 5840 ] 5424 5841 5425 5842 [[package]] 5843 + name = "new_debug_unreachable" 5844 + version = "1.0.6" 5845 + source = "registry+https://github.com/rust-lang/crates.io-index" 5846 + checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 5847 + 5848 + [[package]] 5426 5849 name = "nix" 5427 5850 version = "0.31.3" 5428 5851 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5483 5906 ] 5484 5907 5485 5908 [[package]] 5909 + name = "num-bigint-dig" 5910 + version = "0.8.6" 5911 + source = "registry+https://github.com/rust-lang/crates.io-index" 5912 + checksum = "e661dda6640fad38e827a6d4a310ff4763082116fe217f279885c97f511bb0b7" 5913 + dependencies = [ 5914 + "lazy_static", 5915 + "libm", 5916 + "num-integer", 5917 + "num-iter", 5918 + "num-traits", 5919 + "rand 0.8.6", 5920 + "smallvec", 5921 + "zeroize", 5922 + ] 5923 + 5924 + [[package]] 5486 5925 name = "num-conv" 5487 5926 version = "0.2.2" 5488 5927 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5498 5937 ] 5499 5938 5500 5939 [[package]] 5940 + name = "num-iter" 5941 + version = "0.1.46" 5942 + source = "registry+https://github.com/rust-lang/crates.io-index" 5943 + checksum = "c92800bd69a1eac91786bcfe9da64a897eb72911b8dc3095decbd07429e8048b" 5944 + dependencies = [ 5945 + "num-integer", 5946 + "num-traits", 5947 + ] 5948 + 5949 + [[package]] 5501 5950 name = "num-traits" 5502 5951 version = "0.2.19" 5503 5952 source = "registry+https://github.com/rust-lang/crates.io-index" 5504 5953 checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 5505 5954 dependencies = [ 5506 5955 "autocfg", 5956 + "libm", 5507 5957 ] 5508 5958 5509 5959 [[package]] ··· 5557 6007 version = "11.1.5" 5558 6008 source = "registry+https://github.com/rust-lang/crates.io-index" 5559 6009 checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" 6010 + 6011 + [[package]] 6012 + name = "opaque-debug" 6013 + version = "0.3.1" 6014 + source = "registry+https://github.com/rust-lang/crates.io-index" 6015 + checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" 5560 6016 5561 6017 [[package]] 5562 6018 name = "openssl-probe" ··· 5627 6083 5628 6084 [[package]] 5629 6085 name = "p384" 6086 + version = "0.13.1" 6087 + source = "registry+https://github.com/rust-lang/crates.io-index" 6088 + checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" 6089 + dependencies = [ 6090 + "ecdsa 0.16.9", 6091 + "elliptic-curve 0.13.8", 6092 + "primeorder 0.13.6", 6093 + "sha2 0.10.9", 6094 + ] 6095 + 6096 + [[package]] 6097 + name = "p384" 5630 6098 version = "0.14.0-rc.10" 5631 6099 source = "registry+https://github.com/rust-lang/crates.io-index" 5632 6100 checksum = "9bd5333afa5ae0347f39e6a0f2c9c155da431583fd71fe5555bd0521b4ccaf02" 5633 6101 dependencies = [ 5634 6102 "ecdsa 0.17.0-rc.18", 5635 6103 "elliptic-curve 0.14.0-rc.33", 5636 - "fiat-crypto", 6104 + "fiat-crypto 0.3.0", 5637 6105 "primefield", 5638 6106 "primeorder 0.14.0-rc.10", 5639 6107 "sha2 0.11.0", ··· 5803 6271 ] 5804 6272 5805 6273 [[package]] 6274 + name = "phf_codegen" 6275 + version = "0.11.3" 6276 + source = "registry+https://github.com/rust-lang/crates.io-index" 6277 + checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" 6278 + dependencies = [ 6279 + "phf_generator", 6280 + "phf_shared", 6281 + ] 6282 + 6283 + [[package]] 5806 6284 name = "phf_generator" 5807 6285 version = "0.11.3" 5808 6286 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 5873 6351 5874 6352 [[package]] 5875 6353 name = "pkcs1" 6354 + version = "0.7.5" 6355 + source = "registry+https://github.com/rust-lang/crates.io-index" 6356 + checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" 6357 + dependencies = [ 6358 + "der 0.7.10", 6359 + "pkcs8 0.10.2", 6360 + "spki 0.7.3", 6361 + ] 6362 + 6363 + [[package]] 6364 + name = "pkcs1" 5876 6365 version = "0.8.0-rc.4" 5877 6366 source = "registry+https://github.com/rust-lang/crates.io-index" 5878 6367 checksum = "986d2e952779af96ea048f160fd9194e1751b4faea78bcf3ceb456efe008088e" ··· 5887 6376 source = "registry+https://github.com/rust-lang/crates.io-index" 5888 6377 checksum = "279a91971a1d8eb1260a30938eae3be9cb67b472dffecb222fbbbe2fd2dc1453" 5889 6378 dependencies = [ 5890 - "aes", 6379 + "aes 0.9.1", 5891 6380 "cbc", 5892 6381 "der 0.8.0", 5893 6382 "pbkdf2", ··· 5946 6435 checksum = "a00baa632505d05512f48a963e16051c54fda9a95cc9acea1a4e3c90991c4a2e" 5947 6436 dependencies = [ 5948 6437 "cpufeatures 0.3.0", 5949 - "universal-hash", 6438 + "universal-hash 0.6.1", 5950 6439 "zeroize", 5951 6440 ] 5952 6441 5953 6442 [[package]] 5954 6443 name = "polyval" 6444 + version = "0.6.2" 6445 + source = "registry+https://github.com/rust-lang/crates.io-index" 6446 + checksum = "9d1fe60d06143b2430aa532c94cfe9e29783047f06c0d7fd359a9a51b729fa25" 6447 + dependencies = [ 6448 + "cfg-if", 6449 + "cpufeatures 0.2.17", 6450 + "opaque-debug", 6451 + "universal-hash 0.5.1", 6452 + ] 6453 + 6454 + [[package]] 6455 + name = "polyval" 5955 6456 version = "0.7.1" 5956 6457 source = "registry+https://github.com/rust-lang/crates.io-index" 5957 6458 checksum = "7dfc63250416fea14f5749b90725916a6c903f599d51cb635aa7a52bfd03eede" 5958 6459 dependencies = [ 5959 6460 "cpubits", 5960 6461 "cpufeatures 0.3.0", 5961 - "universal-hash", 6462 + "universal-hash 0.6.1", 5962 6463 ] 5963 6464 5964 6465 [[package]] ··· 6012 6513 dependencies = [ 6013 6514 "zerocopy", 6014 6515 ] 6516 + 6517 + [[package]] 6518 + name = "precomputed-hash" 6519 + version = "0.1.1" 6520 + source = "registry+https://github.com/rust-lang/crates.io-index" 6521 + checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 6015 6522 6016 6523 [[package]] 6017 6524 name = "prettyplease" ··· 6684 7191 6685 7192 [[package]] 6686 7193 name = "rsa" 7194 + version = "0.9.10" 7195 + source = "registry+https://github.com/rust-lang/crates.io-index" 7196 + checksum = "b8573f03f5883dcaebdfcf4725caa1ecb9c15b2ef50c43a07b816e06799bb12d" 7197 + dependencies = [ 7198 + "const-oid 0.9.6", 7199 + "digest 0.10.7", 7200 + "num-bigint-dig", 7201 + "num-integer", 7202 + "num-traits", 7203 + "pkcs1 0.7.5", 7204 + "pkcs8 0.10.2", 7205 + "rand_core 0.6.4", 7206 + "signature 2.2.0", 7207 + "spki 0.7.3", 7208 + "subtle", 7209 + "zeroize", 7210 + ] 7211 + 7212 + [[package]] 7213 + name = "rsa" 6687 7214 version = "0.10.0-rc.18" 6688 7215 source = "registry+https://github.com/rust-lang/crates.io-index" 6689 7216 checksum = "30b2aa4ba0d89f73d1e332df05be0eeab8840351c36ca5654341dfdb57bb3caf" ··· 6692 7219 "crypto-bigint 0.7.4", 6693 7220 "crypto-primes", 6694 7221 "digest 0.11.3", 6695 - "pkcs1", 7222 + "pkcs1 0.8.0-rc.4", 6696 7223 "pkcs8 0.11.0", 6697 7224 "rand_core 0.10.1", 6698 7225 "sha2 0.11.0", ··· 6732 7259 source = "registry+https://github.com/rust-lang/crates.io-index" 6733 7260 checksum = "bbf893f64684e58da8a68d56a5e84d1cf0440226274c515770fe267707a7d0b0" 6734 7261 dependencies = [ 6735 - "aes", 7262 + "aes 0.9.1", 6736 7263 "aws-lc-rs", 6737 7264 "bitflags 2.13.0", 6738 7265 "block-padding", 6739 7266 "byteorder", 6740 7267 "bytes", 6741 7268 "cbc", 6742 - "cipher", 7269 + "cipher 0.5.2", 6743 7270 "crypto-bigint 0.7.4", 6744 - "ctr", 6745 - "curve25519-dalek", 7271 + "ctr 0.10.1", 7272 + "curve25519-dalek 5.0.0-rc.0", 6746 7273 "data-encoding", 6747 7274 "delegate", 6748 7275 "der 0.8.0", 6749 7276 "digest 0.11.3", 6750 7277 "ecdsa 0.17.0-rc.18", 6751 - "ed25519-dalek", 7278 + "ed25519-dalek 3.0.0-rc.0", 6752 7279 "elliptic-curve 0.14.0-rc.33", 6753 7280 "enum_dispatch", 6754 7281 "flate2", 6755 7282 "futures", 6756 7283 "generic-array 1.4.3", 6757 7284 "getrandom 0.4.3", 6758 - "ghash", 7285 + "ghash 0.6.0", 6759 7286 "hex-literal", 6760 7287 "hmac 0.13.0", 6761 - "inout", 7288 + "inout 0.2.2", 6762 7289 "internal-russh-num-bigint", 6763 7290 "keccak", 6764 7291 "log", ··· 6767 7294 "module-lattice", 6768 7295 "num-bigint", 6769 7296 "p256 0.14.0-rc.10", 6770 - "p384", 7297 + "p384 0.14.0-rc.10", 6771 7298 "p521", 6772 7299 "pageant", 6773 7300 "pbkdf2", 6774 - "pkcs1", 7301 + "pkcs1 0.8.0-rc.4", 6775 7302 "pkcs5", 6776 7303 "pkcs8 0.11.0", 6777 - "polyval", 7304 + "polyval 0.7.1", 6778 7305 "rand 0.10.1", 6779 7306 "rand_core 0.10.1", 6780 - "rsa", 7307 + "rsa 0.10.0-rc.18", 6781 7308 "russh-cryptovec", 6782 7309 "russh-util", 6783 7310 "salsa20", ··· 6794 7321 "thiserror 2.0.18", 6795 7322 "tokio", 6796 7323 "typenum", 6797 - "universal-hash", 7324 + "universal-hash 0.6.1", 6798 7325 "zeroize", 6799 7326 ] 6800 7327 ··· 7018 7545 checksum = "2f874456e72520ff1375a06c588eaf074b0f01f9e9e1aada45bd9b7954a6e42c" 7019 7546 dependencies = [ 7020 7547 "cfg-if", 7021 - "cipher", 7548 + "cipher 0.5.2", 7022 7549 ] 7023 7550 7024 7551 [[package]] ··· 7599 8126 source = "registry+https://github.com/rust-lang/crates.io-index" 7600 8127 checksum = "10db6f219196a8528f9ec904d9d45cdad692d65b0e57e72be4dedd1c5fddce36" 7601 8128 dependencies = [ 7602 - "aead", 7603 - "aes", 7604 - "aes-gcm", 8129 + "aead 0.6.1", 8130 + "aes 0.9.1", 8131 + "aes-gcm 0.11.0-rc.4", 7605 8132 "cbc", 7606 8133 "chacha20", 7607 - "cipher", 7608 - "ctr", 8134 + "cipher 0.5.2", 8135 + "ctr 0.10.1", 7609 8136 "ctutils", 7610 8137 "des", 7611 8138 "poly1305", ··· 7637 8164 "argon2", 7638 8165 "bcrypt-pbkdf", 7639 8166 "ctutils", 7640 - "ed25519-dalek", 8167 + "ed25519-dalek 3.0.0-rc.0", 7641 8168 "hex", 7642 8169 "hmac 0.13.0", 7643 8170 "p256 0.14.0-rc.10", 7644 - "p384", 8171 + "p384 0.14.0-rc.10", 7645 8172 "p521", 7646 8173 "rand_core 0.10.1", 7647 - "rsa", 8174 + "rsa 0.10.0-rc.18", 7648 8175 "sec1 0.8.1", 7649 8176 "sha1 0.11.0", 7650 8177 "sha2 0.11.0", ··· 7665 8192 version = "1.1.0" 7666 8193 source = "registry+https://github.com/rust-lang/crates.io-index" 7667 8194 checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 8195 + 8196 + [[package]] 8197 + name = "string_cache" 8198 + version = "0.8.9" 8199 + source = "registry+https://github.com/rust-lang/crates.io-index" 8200 + checksum = "bf776ba3fa74f83bf4b63c3dcbbf82173db2632ed8452cb2d891d33f459de70f" 8201 + dependencies = [ 8202 + "new_debug_unreachable", 8203 + "parking_lot", 8204 + "phf_shared", 8205 + "precomputed-hash", 8206 + "serde", 8207 + ] 8208 + 8209 + [[package]] 8210 + name = "string_cache_codegen" 8211 + version = "0.5.4" 8212 + source = "registry+https://github.com/rust-lang/crates.io-index" 8213 + checksum = "c711928715f1fe0fe509c53b43e993a9a557babc2d0a3567d0a3006f1ac931a0" 8214 + dependencies = [ 8215 + "phf_generator", 8216 + "phf_shared", 8217 + "proc-macro2", 8218 + "quote", 8219 + ] 7668 8220 7669 8221 [[package]] 7670 8222 name = "strsim" ··· 7920 8472 ] 7921 8473 7922 8474 [[package]] 8475 + name = "tendril" 8476 + version = "0.4.3" 8477 + source = "registry+https://github.com/rust-lang/crates.io-index" 8478 + checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" 8479 + dependencies = [ 8480 + "futf", 8481 + "mac", 8482 + "utf-8", 8483 + ] 8484 + 8485 + [[package]] 7923 8486 name = "terminal_size" 7924 8487 version = "0.4.4" 7925 8488 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 8276 8839 "tower", 8277 8840 "tower-layer", 8278 8841 "tower-service", 8842 + "tracing", 8279 8843 "url", 8280 8844 ] 8281 8845 ··· 8582 9146 8583 9147 [[package]] 8584 9148 name = "universal-hash" 9149 + version = "0.5.1" 9150 + source = "registry+https://github.com/rust-lang/crates.io-index" 9151 + checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea" 9152 + dependencies = [ 9153 + "crypto-common 0.1.6", 9154 + "subtle", 9155 + ] 9156 + 9157 + [[package]] 9158 + name = "universal-hash" 8585 9159 version = "0.6.1" 8586 9160 source = "registry+https://github.com/rust-lang/crates.io-index" 8587 9161 checksum = "f4987bdc12753382e0bec4a65c50738ffaabc998b9cdd1f952fb5f39b0048a96" ··· 8829 9403 ] 8830 9404 8831 9405 [[package]] 9406 + name = "webpage" 9407 + version = "2.0.1" 9408 + source = "registry+https://github.com/rust-lang/crates.io-index" 9409 + checksum = "70862efc041d46e6bbaa82bb9c34ae0596d090e86cbd14bd9e93b36ee6802eac" 9410 + dependencies = [ 9411 + "html5ever", 9412 + "markup5ever_rcdom", 9413 + "serde_json", 9414 + "url", 9415 + ] 9416 + 9417 + [[package]] 8832 9418 name = "webpki-root-certs" 8833 9419 version = "1.0.8" 8834 9420 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 9337 9923 ] 9338 9924 9339 9925 [[package]] 9926 + name = "xml5ever" 9927 + version = "0.18.1" 9928 + source = "registry+https://github.com/rust-lang/crates.io-index" 9929 + checksum = "9bbb26405d8e919bc1547a5aa9abc95cbfa438f04844f5fdd9dc7596b748bf69" 9930 + dependencies = [ 9931 + "log", 9932 + "mac", 9933 + "markup5ever", 9934 + ] 9935 + 9936 + [[package]] 9340 9937 name = "yasna" 9341 9938 version = "0.5.2" 9342 9939 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 9425 10022 source = "registry+https://github.com/rust-lang/crates.io-index" 9426 10023 checksum = "e13c156562582aa81c60cb29407084cdb54c4164760106ab78e6c5b0858cf64e" 9427 10024 dependencies = [ 10025 + "serde", 9428 10026 "zeroize_derive", 9429 10027 ] 9430 10028
+2 -1
Cargo.toml
··· 73 73 knot-sim = { path = "knot2/crates/knot-sim" } 74 74 knot-edge = { path = "knot2/crates/knot-edge" } 75 75 76 + jacquard-axum = "0.12.1" 76 77 jacquard-common = "0.12.1" 77 78 jacquard-derive = "0.12.1" 78 79 jacquard-lexicon = { version = "0.12.1", default-features = false } ··· 119 120 arc-swap = "1" 120 121 121 122 reqwest = { version = "0.13", default-features = false, features = ["rustls", "webpki-roots", "http2", "json", "gzip", "stream"] } 122 - axum = "0.8" 123 + axum = { version = "0.8", features = ["macros"] } 123 124 hyper = { version = "1", features = ["server", "http1", "http2"] } 124 125 hyper-util = { version = "0.1", features = ["server", "server-auto", "tokio", "service"] } 125 126 tower = { version = "0.5", features = ["util", "limit", "load-shed"] }
+1
bobbin/crates/bobbin/src/main.rs
··· 223 223 clock.clone(), 224 224 hasher, 225 225 )?); 226 + // tracing::info!(audience = %service_auth.audience().as_str(), "service auth enabled"); 226 227 let search_heap = usize::try_from(search_heap_cap) 227 228 .with_context(|| format!("search heap {search_heap_cap} exceeds usize"))?; 228 229 let search = Arc::new(SearchIndex::new(search_heap, clock.clone())?);
+3
bobbin/crates/xrpc/Cargo.toml
··· 14 14 bobbin-search = { workspace = true } 15 15 bobbin-slingshot-client = { workspace = true } 16 16 bobbin-knot-proxy = { workspace = true } 17 + jacquard-axum = { workspace = true } 17 18 jacquard-common = { workspace = true } 18 19 jacquard-identity = { workspace = true } 19 20 ··· 21 22 chrono = { workspace = true } 22 23 futures = { workspace = true } 23 24 http = { workspace = true } 25 + scc = { workspace = true } 24 26 serde = { workspace = true } 25 27 serde_json = { workspace = true } 26 28 thiserror = { workspace = true } ··· 32 34 reqwest = { workspace = true } 33 35 34 36 [dev-dependencies] 37 + base64 = { workspace = true } 35 38 bobbin-runtime = { workspace = true } 36 39 http = { workspace = true } 37 40 tokio = { workspace = true, features = ["macros", "rt-multi-thread"] }
+9 -7
bobbin/crates/xrpc/src/feed.rs
··· 12 12 use bobbin_types::sh_tangled::feed::star::{Star, StarRecord, StarSubject}; 13 13 use bobbin_types::sh_tangled::graph::follow::{Follow, FollowRecord}; 14 14 use bobbin_types::sh_tangled::repo::{self, Repo, RepoRecord, RepoViewBasic}; 15 - use jacquard_common::DefaultStr; 15 + use jacquard_axum::service_auth::ExtractOptionalServiceAuth; 16 16 use jacquard_common::types::string::{AtUri, Datetime, Did, Handle, UriValue}; 17 17 use jacquard_common::xrpc::XrpcResp; 18 + use jacquard_common::{DefaultStr, IntoStatic as _}; 18 19 use jacquard_identity::resolver::IdentityResolver; 19 20 20 21 use crate::{ ··· 32 33 #[derive(Debug, Deserialize)] 33 34 #[serde(rename_all = "camelCase")] 34 35 pub(crate) struct GetTimelineQuery { 35 - viewer: Option<Did<DefaultStr>>, 36 36 #[serde(default)] 37 37 following_only: bool, 38 38 limit: Option<u32>, 39 39 cursor: Option<String>, 40 40 } 41 41 42 + #[axum::debug_handler] 42 43 pub(crate) async fn get_timeline( 43 44 State(state): State<AppState>, 45 + ExtractOptionalServiceAuth(auth): ExtractOptionalServiceAuth, 44 46 XrpcQuery(q): XrpcQuery<GetTimelineQuery>, 45 47 ) -> Result<Response, XrpcError> { 46 48 let limit = parse_limit(q.limit)?; 47 49 let cursor = parse_cursor(q.cursor.as_deref())?; 48 50 let permit = state.heavy_permit()?; 49 - let viewer = q.viewer.as_ref(); 51 + let viewer = auth.as_ref().map(|auth| auth.did().into_static()); 50 52 51 53 // Prepare timeline skeleton 52 54 let page = if q.following_only { 53 55 // Following feed: the viewer's followed set, then a time-ordered k-way merge. 54 - let viewer = viewer.ok_or_else(|| { 55 - XrpcError::InvalidParams("followingOnly requires a viewer did".into()) 56 + let viewer = viewer.as_ref().ok_or_else(|| { 57 + XrpcError::AuthRequired("followingOnly requires an authenticated viewer".into()) 56 58 })?; 57 - let followed = followed_dids(&state, viewer).await; 59 + let followed = followed_dids(&state, &viewer).await; 58 60 following_skeleton(&state, &followed, cursor, limit) 59 61 } else { 60 62 global_skeleton(&state, cursor, limit) ··· 64 66 let hydrated = stream::iter( 65 67 page.items 66 68 .iter() 67 - .map(|it| hydrate_item(&state, viewer, it)) 69 + .map(|it| hydrate_item(&state, viewer.as_ref(), it)) 68 70 .collect::<Vec<_>>(), 69 71 ) 70 72 .buffered(HYDRATE_CONCURRENCY)
+40 -2
bobbin/crates/xrpc/src/lib.rs
··· 81 81 }; 82 82 use futures::Stream; 83 83 use futures::stream::{self, StreamExt, TryStreamExt}; 84 + use jacquard_axum::service_auth::{self, ServiceAuthConfig}; 84 85 use jacquard_common::types::did::Did; 85 86 use jacquard_common::types::ident::AtIdentifier; 86 87 use jacquard_common::types::nsid::Nsid; ··· 137 138 pub directory: Arc<Directory>, 138 139 pub limiter: Option<Arc<HeavyLimiter>>, 139 140 pub client_address: Arc<ClientAddress>, 141 + service_auth_config: service_auth::ServiceAuthConfig<Arc<Directory>>, 140 142 enrich_router: Arc<std::sync::OnceLock<Router>>, 141 143 } 142 144 ··· 164 166 knots, 165 167 search, 166 168 resolver, 167 - directory, 169 + directory: directory.clone(), 168 170 limiter: None, 169 171 client_address: Arc::new(ClientAddress::default()), 172 + service_auth_config: ServiceAuthConfig::new( 173 + Did::new_static("did:web:bobbin.tngl.boltless.dev").unwrap(), 174 + directory, 175 + ), 170 176 enrich_router: Arc::new(std::sync::OnceLock::new()), 171 177 } 172 178 } ··· 190 196 191 197 pub(crate) fn heavy_permit(&self) -> Result<Option<HeavyPermit>, XrpcError> { 192 198 self.limiter.as_ref().map(|l| l.try_enter()).transpose() 199 + } 200 + } 201 + 202 + impl service_auth::ServiceAuth for AppState { 203 + type Resolver = Directory; 204 + 205 + fn service_did(&self) -> Did<&str> { 206 + self.service_auth_config.service_did() 207 + } 208 + fn resolver(&self) -> &Self::Resolver { 209 + self.service_auth_config.resolver() 210 + } 211 + fn require_lxm(&self) -> bool { 212 + service_auth::ServiceAuth::require_lxm(&self.service_auth_config) 213 + } 214 + fn allowed_services(&self) -> &[jacquard_common::SmolStr] { 215 + self.service_auth_config.allowed_services() 216 + } 217 + fn replay_protection_enabled(&self) -> bool { 218 + self.service_auth_config.replay_protection_enabled() 219 + } 220 + fn replay_store(&self) -> &dyn jacquard_axum::service_auth::ReplayStore { 221 + self.service_auth_config.replay_store() 193 222 } 194 223 } 195 224 ··· 752 781 pub enum XrpcError { 753 782 #[error("invalid request: {0}")] 754 783 InvalidParams(String), 784 + #[error("authentication required: {0}")] 785 + AuthRequired(String), 786 + // /// A service-auth token failed verification. Typed so the jwt-level checks speak jacquard's 787 + // /// vocabulary; adopting `jacquard-axum` later replaces the producer, not this variant. 788 + // #[error(transparent)] 789 + // Auth(#[from] jacquard_common::service_auth::ServiceAuthError), 755 790 #[error("record not found")] 756 791 NotFound, 757 792 #[error("upstream unavailable: {0}")] ··· 782 817 fn into_response(self) -> Response { 783 818 let (status, error) = match &self { 784 819 Self::InvalidParams(_) => (StatusCode::BAD_REQUEST, "InvalidRequest"), 820 + Self::AuthRequired(_) => (StatusCode::UNAUTHORIZED, "AuthenticationRequired"), 785 821 Self::NotFound => (StatusCode::NOT_FOUND, "RecordNotFound"), 786 822 Self::UpstreamUnavailable(_) => (StatusCode::BAD_GATEWAY, "UpstreamFailed"), 787 823 Self::UpstreamGone(_) => (StatusCode::BAD_GATEWAY, "UpstreamGone"), ··· 1638 1674 Ok(None) 1639 1675 } 1640 1676 }, 1641 - Err(err @ (XrpcError::Internal(_) | XrpcError::Overloaded)) => Err(err), 1677 + Err( 1678 + err @ (XrpcError::Internal(_) | XrpcError::Overloaded | XrpcError::AuthRequired(_)), 1679 + ) => Err(err), 1642 1680 } 1643 1681 } 1644 1682